public Node parseRestElement(List<Token> @params) { Node param; Node node = new Node(); lex(); if (match("{")) { throwError(Messages.ObjectPatternAsRestParameter); } @params.Add(lookahead); param = parseVariableIdentifier(); if (match("=")) { throwError(Messages.DefaultRestParameter); } if (!match(")")) { throwError(Messages.ParameterAfterRestParameter); } return node.finishRestElement(param); }
// ECMA-262 13.3.3 Destructuring Binding Patterns public Node parseArrayPattern(List<Token> @params, string kind) { var node = new Node(); List<Node> elements = new List<Node>(); Node rest; Node restNode; expect("["); while (!match("]")) { if (match(",")) { lex(); elements.Add(null); } else { if (match("...")) { restNode = new Node(); lex(); @params.Add(lookahead); rest = parseVariableIdentifier(kind); //rest = parseVariableIdentifier(@params, kind); elements.Add(restNode.finishRestElement(rest)); break; } else { elements.Add(parsePatternWithDefault(@params, kind)); } if (!match("]")) { expect(","); } } } expect("]"); return node.finishArrayPattern(elements); }