MCPcopy Create free account
hub / github.com/mozilla/rhino / arrayLiteral

Method arrayLiteral

rhino/src/main/java/org/mozilla/javascript/Parser.java:3763–3830  ·  view source on GitHub ↗

May return an ArrayLiteral or ArrayComprehension.

()

Source from the content-addressed store, hash-verified

3761
3762 /** May return an {@link ArrayLiteral} or {@link ArrayComprehension}. */
3763 private AstNode arrayLiteral() throws IOException {
3764 if (currentToken != Token.LB) codeBug();
3765 int pos = ts.tokenBeg, end = ts.tokenEnd, lineno = lineNumber(), column = columnNumber();
3766 List<AstNode> elements = new ArrayList<>();
3767 ArrayLiteral pn = new ArrayLiteral(pos);
3768 boolean after_lb_or_comma = true;
3769 int afterComma = -1;
3770 int skipCount = 0;
3771 for (; ; ) {
3772 int tt = peekToken();
3773 if (tt == Token.COMMA) {
3774 consumeToken();
3775 afterComma = ts.tokenEnd;
3776 if (!after_lb_or_comma) {
3777 after_lb_or_comma = true;
3778 } else {
3779 elements.add(new EmptyExpression(ts.tokenBeg, 1));
3780 skipCount++;
3781 }
3782 } else if (tt == Token.COMMENT) {
3783 consumeToken();
3784 } else if (tt == Token.RB) {
3785 consumeToken();
3786 // for ([a,] in obj) is legal, but for ([a] in obj) is
3787 // not since we have both key and value supplied. The
3788 // trick is that [a,] and [a] are equivalent in other
3789 // array literal contexts. So we calculate a special
3790 // length value just for destructuring assignment.
3791 end = ts.tokenEnd;
3792 pn.setDestructuringLength(elements.size() + (after_lb_or_comma ? 1 : 0));
3793 pn.setSkipCount(skipCount);
3794 if (afterComma != -1) warnTrailingComma(pos, elements, afterComma);
3795 break;
3796 } else if (tt == Token.FOR && !after_lb_or_comma && elements.size() == 1) {
3797 return arrayComprehension(elements.get(0), pos);
3798 } else if (tt == Token.EOF) {
3799 reportError("msg.no.bracket.arg");
3800 break;
3801 } else {
3802 if (!after_lb_or_comma) {
3803 reportError("msg.no.bracket.arg");
3804 }
3805 AstNode element;
3806 if (tt == Token.DOTDOTDOT
3807 && compilerEnv.getLanguageVersion() >= Context.VERSION_ES6) {
3808 consumeToken();
3809 int spreadPos = ts.tokenBeg;
3810 int spreadLineno = lineNumber();
3811 int spreadColumn = columnNumber();
3812 AstNode exprNode = assignExpr();
3813 element = new Spread(spreadPos, ts.tokenEnd - spreadPos);
3814 element.setLineColumnNumber(spreadLineno, spreadColumn);
3815 ((Spread) element).setExpression(exprNode);
3816 } else {
3817 element = assignExpr();
3818 }
3819 elements.add(element);
3820 after_lb_or_comma = false;

Callers 1

primaryExprMethod · 0.95

Calls 15

codeBugMethod · 0.95
lineNumberMethod · 0.95
columnNumberMethod · 0.95
peekTokenMethod · 0.95
consumeTokenMethod · 0.95
setSkipCountMethod · 0.95
warnTrailingCommaMethod · 0.95
arrayComprehensionMethod · 0.95
reportErrorMethod · 0.95
assignExprMethod · 0.95
addElementMethod · 0.95

Tested by

no test coverage detected