mirror of
https://github.com/adelphes/android-dev-ext.git
synced 2025-12-23 01:48:18 +00:00
add support for array-literal expressions
This commit is contained in:
@@ -151,6 +151,10 @@ class BracketedExpression extends ParsedExpression {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class ArrayLiteralExpression extends ParsedExpression {
|
||||||
|
elements = [];
|
||||||
|
}
|
||||||
|
|
||||||
class ParsedNewExpression extends ParsedExpression {}
|
class ParsedNewExpression extends ParsedExpression {}
|
||||||
|
|
||||||
class NewObjectExpression extends ParsedNewExpression {
|
class NewObjectExpression extends ParsedNewExpression {
|
||||||
@@ -382,6 +386,25 @@ function parseNewExpression(e) {
|
|||||||
return new_expression;
|
return new_expression;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {ExpressionText} e
|
||||||
|
*/
|
||||||
|
function parseArrayLiteral(e) {
|
||||||
|
const arr = new ArrayLiteralExpression();
|
||||||
|
if (!strip(e, '}')) {
|
||||||
|
for (let element; ;) {
|
||||||
|
if ((element = parse_expression(e)) === null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
arr.elements.push(element);
|
||||||
|
if (strip(e, ',')) continue;
|
||||||
|
if (strip(e, '}')) break;
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return arr;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {ExpressionText} e
|
* @param {ExpressionText} e
|
||||||
*/
|
*/
|
||||||
@@ -419,15 +442,23 @@ function getBinaryOperator(s) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {ExpressionText} e
|
* @param {ExpressionText|string} e
|
||||||
* @returns {ParsedExpression}
|
* @returns {ParsedExpression}
|
||||||
*/
|
*/
|
||||||
function parse_expression(e) {
|
function parse_expression(e) {
|
||||||
|
if (typeof e === 'string') {
|
||||||
|
e = new ExpressionText(e);
|
||||||
|
}
|
||||||
const newop = e.expr.match(/^new\b/);
|
const newop = e.expr.match(/^new\b/);
|
||||||
if (newop) {
|
if (newop) {
|
||||||
strip(e, 3);
|
strip(e, 3);
|
||||||
return parseNewExpression(e);
|
return parseNewExpression(e);
|
||||||
}
|
}
|
||||||
|
const arrayinit = e.expr.match(/^\{/);
|
||||||
|
if (arrayinit) {
|
||||||
|
strip(e, 1);
|
||||||
|
return parseArrayLiteral(e);
|
||||||
|
}
|
||||||
const prefix_incdec = e.expr.match(/^(?:(\+\+)|\-\-)(?=[a-zA-Z_])/);
|
const prefix_incdec = e.expr.match(/^(?:(\+\+)|\-\-)(?=[a-zA-Z_])/);
|
||||||
if (prefix_incdec) {
|
if (prefix_incdec) {
|
||||||
strip(e, 2);
|
strip(e, 2);
|
||||||
|
|||||||
Reference in New Issue
Block a user