use of com.google.javascript.jscomp.parsing.parser.trees.NullTree in project closure-compiler by google.
the class Parser method parseArrayLiteral.
// 11.1.4 Array Literal Expression
private ParseTree parseArrayLiteral() {
// ArrayLiteral :
// [ Elisionopt ]
// [ ElementList ]
// [ ElementList , Elisionopt ]
//
// ElementList :
// Elisionopt AssignmentOrSpreadExpression
// ElementList , Elisionopt AssignmentOrSpreadExpression
//
// Elision :
// ,
// Elision ,
SourcePosition start = getTreeStartLocation();
ImmutableList.Builder<ParseTree> elements = ImmutableList.builder();
eat(TokenType.OPEN_SQUARE);
Token trailingCommaToken = null;
while (peek(TokenType.COMMA) || peek(TokenType.ELLIPSIS) || peekAssignmentExpression()) {
trailingCommaToken = null;
if (peek(TokenType.COMMA)) {
SourcePosition commaStart = getTreeStartLocation();
trailingCommaToken = eat(TokenType.COMMA);
// Consider the empty element to start & end immediately before the comma token.
elements.add(new NullTree(new SourceRange(commaStart, commaStart)));
} else {
if (peek(TokenType.ELLIPSIS)) {
recordFeatureUsed(Feature.SPREAD_EXPRESSIONS);
elements.add(parseIterSpread());
} else {
elements.add(parseAssignmentExpression());
}
if (!peek(TokenType.CLOSE_SQUARE)) {
trailingCommaToken = eat(TokenType.COMMA);
}
}
}
eat(TokenType.CLOSE_SQUARE);
maybeReportTrailingComma(trailingCommaToken);
return new ArrayLiteralExpressionTree(getTreeLocation(start), elements.build(), trailingCommaToken != null);
}
use of com.google.javascript.jscomp.parsing.parser.trees.NullTree in project closure-compiler by google.
the class Parser method parseArrayPattern.
// Pattern ::= ... | "[" Element? ("," Element?)* "]"
private ParseTree parseArrayPattern(PatternKind kind) {
SourcePosition start = getTreeStartLocation();
ImmutableList.Builder<ParseTree> elements = ImmutableList.builder();
eat(TokenType.OPEN_SQUARE);
while (peek(TokenType.COMMA) || peekArrayPatternElement()) {
if (peek(TokenType.COMMA)) {
SourcePosition nullStart = getTreeStartLocation();
eat(TokenType.COMMA);
elements.add(new NullTree(getTreeLocation(nullStart)));
} else {
elements.add(parsePatternAssignmentTarget(kind));
if (peek(TokenType.COMMA)) {
// Consume the comma separator
eat(TokenType.COMMA);
} else {
// Otherwise we must be done
break;
}
}
}
if (peek(TokenType.ELLIPSIS)) {
recordFeatureUsed(Feature.ARRAY_PATTERN_REST);
elements.add(parseIterRest(kind));
}
if (eat(TokenType.CLOSE_SQUARE) == null) {
// source has syntactic errors.
return new MissingPrimaryExpressionTree(getTreeLocation(getTreeStartLocation()));
}
return new ArrayPatternTree(getTreeLocation(start), elements.build());
}
use of com.google.javascript.jscomp.parsing.parser.trees.NullTree in project closure-compiler by google.
the class Parser method parseForStatement.
// 12.6.3 The for Statement
private ParseTree parseForStatement(SourcePosition start, ParseTree initializer) {
if (initializer == null) {
initializer = new NullTree(new SourceRange(getTreeEndLocation(), getTreeStartLocation()));
}
eat(TokenType.SEMI_COLON);
ParseTree condition;
if (!peek(TokenType.SEMI_COLON)) {
condition = parseExpression();
} else {
condition = new NullTree(new SourceRange(getTreeEndLocation(), getTreeStartLocation()));
}
eat(TokenType.SEMI_COLON);
ParseTree increment;
if (!peek(TokenType.CLOSE_PAREN)) {
increment = parseExpression();
} else {
increment = new NullTree(new SourceRange(getTreeEndLocation(), getTreeStartLocation()));
}
eat(TokenType.CLOSE_PAREN);
ParseTree body = parseStatement();
return new ForStatementTree(getTreeLocation(start), initializer, condition, increment, body);
}
Aggregations