// ECMA-262 12.3 Left-Hand-Side Expressions public List<Node> parseArguments() { List<Node> args = new List<Node>(); Node expr; expect("("); if (!match(")")) { while (startIndex < length) { if (match("...")) { expr = new Node(); lex(); expr.finishSpreadElement(isolateCoverGrammar(parseAssignmentExpression)); } else { expr = isolateCoverGrammar(parseAssignmentExpression); } args.Add(expr); if (match(")")) { break; } expectCommaSeparator(); } } expect(")"); return args; }
// ECMA-262 12.2.5 Array Initializer public Node parseArrayInitializer() { List<Node> elements = new List<Node>(); Node node = new Node(); Node restSpread; expect("["); while (!match("]")) { if (match(",")) { lex(); elements.Add(null); } else if (match("...")) { restSpread = new Node(); lex(); restSpread.finishSpreadElement(inheritCoverGrammar(parseAssignmentExpression)); if (!match("]")) { isAssignmentTarget = isBindingElement = false; expect(","); } elements.Add(restSpread); } else { elements.Add(inheritCoverGrammar(parseAssignmentExpression)); if (!match("]")) { expect(","); } } } lex(); return node.finishArrayExpression(elements); }