ractive
Version:
Next-generation DOM manipulation
54 lines (41 loc) • 1.1 kB
JavaScript
import types from 'config/types';
import getPrimary from 'parse/Parser/expressions/primary/_primary';
import getExpressionList from 'parse/Parser/expressions/shared/expressionList';
import getRefinement from 'parse/Parser/expressions/shared/refinement';
import errors from 'parse/Parser/expressions/shared/errors';
export default function ( parser ) {
var current, expression, refinement, expressionList;
expression = getPrimary( parser );
if ( !expression ) {
return null;
}
while ( expression ) {
current = parser.pos;
if ( refinement = getRefinement( parser ) ) {
expression = {
t: types.MEMBER,
x: expression,
r: refinement
};
}
else if ( parser.matchString( '(' ) ) {
parser.allowWhitespace();
expressionList = getExpressionList( parser );
parser.allowWhitespace();
if ( !parser.matchString( ')' ) ) {
parser.error( errors.expectedParen );
}
expression = {
t: types.INVOCATION,
x: expression
};
if ( expressionList ) {
expression.o = expressionList;
}
}
else {
break;
}
}
return expression;
}