@ibyar/expressions 0.5.4 → 0.5.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/README.md +1 -0
- package/api/abstract.d.ts +3 -3
- package/api/abstract.js +2 -2
- package/api/abstract.js.map +1 -1
- package/api/class/class.d.ts +18 -12
- package/api/class/class.js +122 -81
- package/api/class/class.js.map +1 -1
- package/api/computing/debugger.d.ts +15 -0
- package/api/computing/debugger.js +35 -0
- package/api/computing/debugger.js.map +1 -0
- package/api/computing/rest.d.ts +4 -4
- package/api/computing/rest.js.map +1 -1
- package/api/definition/array.d.ts +7 -6
- package/api/definition/array.js +20 -14
- package/api/definition/array.js.map +1 -1
- package/api/definition/function.d.ts +35 -46
- package/api/definition/function.js +281 -299
- package/api/definition/function.js.map +1 -1
- package/api/definition/object.d.ts +9 -6
- package/api/definition/object.js +34 -4
- package/api/definition/object.js.map +1 -1
- package/api/definition/statement.js +5 -1
- package/api/definition/statement.js.map +1 -1
- package/api/definition/values.d.ts +31 -47
- package/api/definition/values.js +59 -145
- package/api/definition/values.js.map +1 -1
- package/api/deserialize/deserialize.d.ts +2 -1
- package/api/deserialize/deserialize.js +4 -1
- package/api/deserialize/deserialize.js.map +1 -1
- package/api/deserialize/type-store.d.ts +2 -2
- package/api/deserialize/type-store.js.map +1 -1
- package/api/expression.d.ts +5 -7
- package/api/expression.js.map +1 -1
- package/api/index.d.ts +2 -0
- package/api/index.js +2 -0
- package/api/index.js.map +1 -1
- package/api/module/common.d.ts +29 -0
- package/api/module/common.js +71 -0
- package/api/module/common.js.map +1 -0
- package/api/module/export.d.ts +15 -9
- package/api/module/export.js +57 -15
- package/api/module/export.js.map +1 -1
- package/api/module/import.d.ts +3 -8
- package/api/module/import.js +9 -19
- package/api/module/import.js.map +1 -1
- package/api/{module/app/program.d.ts → program.d.ts} +4 -4
- package/api/{module/app/program.js → program.js} +3 -3
- package/api/program.js.map +1 -0
- package/api/statement/control/block.d.ts +1 -2
- package/api/statement/control/block.js +20 -21
- package/api/statement/control/block.js.map +1 -1
- package/api/statement/control/switch.js +8 -3
- package/api/statement/control/switch.js.map +1 -1
- package/api/statement/control/terminate.d.ts +36 -11
- package/api/statement/control/terminate.js +79 -18
- package/api/statement/control/terminate.js.map +1 -1
- package/api/statement/declarations/declares.d.ts +7 -7
- package/api/statement/declarations/declares.js +1 -1
- package/api/statement/declarations/declares.js.map +1 -1
- package/api/statement/iterations/for.js +22 -16
- package/api/statement/iterations/for.js.map +1 -1
- package/api/statement/iterations/while.js +15 -11
- package/api/statement/iterations/while.js.map +1 -1
- package/api/utils.d.ts +2 -0
- package/api/utils.js +3 -1
- package/api/utils.js.map +1 -1
- package/package.json +4 -4
- package/scope/proxy.d.ts +0 -2
- package/scope/proxy.js +4 -24
- package/scope/proxy.js.map +1 -1
- package/scope/stack.d.ts +2 -2
- package/scope/stack.js.map +1 -1
- package/v8/enums.d.ts +204 -0
- package/v8/enums.js +375 -0
- package/v8/enums.js.map +1 -0
- package/v8/index.d.ts +2 -1
- package/v8/index.js +2 -1
- package/v8/index.js.map +1 -1
- package/v8/inline.d.ts +177 -0
- package/v8/inline.js +1973 -0
- package/v8/inline.js.map +1 -0
- package/v8/nodes.d.ts +8 -7
- package/v8/nodes.js +37 -63
- package/v8/nodes.js.map +1 -1
- package/v8/parser.d.ts +41 -151
- package/v8/parser.js +507 -1579
- package/v8/parser.js.map +1 -1
- package/v8/stream.d.ts +35 -3
- package/v8/stream.js +616 -164
- package/v8/stream.js.map +1 -1
- package/v8/token.d.ts +15 -9
- package/v8/token.js +79 -46
- package/v8/token.js.map +1 -1
- package/visit/visitor.js.map +1 -1
- package/api/module/app/program.js.map +0 -1
- package/v8/app.d.ts +0 -0
- package/v8/app.js +0 -2
- package/v8/app.js.map +0 -1
package/v8/parser.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../../src/expressions/v8/parser.ts"],"names":[],"mappings":"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","sourcesContent":["import type { CanDeclareExpression, ExpressionNode } from '../api/expression.js';\nimport { Token, TokenExpression } from './token.js';\nimport { PreTemplateLiteral, TokenStream } from './stream.js';\nimport {\n\tOfNode, Identifier, ThisNode,\n\tGetIdentifier, SetIdentifier, AsyncIdentifier,\n\tNullNode, StringLiteral, AwaitIdentifier,\n\tConstructorIdentifier, NameIdentifier,\n\tEvalIdentifier, ArgumentsIdentifier, TaggedTemplateExpression, TemplateLiteral\n} from '../api/definition/values.js';\nimport { EmptyStatement } from '../api/statement/control/empty.js';\nimport { BlockStatement } from '../api/statement/control/block.js';\nimport {\n\tArrowFunctionExpression, ArrowFunctionType, FunctionKind,\n\tParam, FunctionExpression, FunctionDeclaration\n} from '../api/definition/function.js';\nimport { IfStatement } from '../api/statement/control/if.js';\nimport { NewExpression } from '../api/computing/new.js';\nimport { SpreadElement } from '../api/computing/spread.js';\nimport { RestElement } from '../api/computing/rest.js';\nimport { AssignmentExpression, AssignmentOperator } from '../api/operators/assignment.js';\nimport { GroupingExpression } from '../api/operators/grouping.js';\nimport { MemberExpression } from '../api/definition/member.js';\nimport { BindExpression } from '../api/definition/bind.js';\nimport { ObjectExpression, Property, ObjectPattern } from '../api/definition/object.js';\nimport { ArrayExpression, ArrayPattern } from '../api/definition/array.js';\nimport { CallExpression } from '../api/computing/call.js';\nimport { DoWhileNode, WhileNode } from '../api/statement/iterations/while.js';\nimport { CatchClauseNode, ThrowStatement, TryCatchNode } from '../api/computing/throw.js';\nimport { SwitchCase, DefaultExpression, SwitchStatement } from '../api/statement/control/switch.js';\nimport { BreakStatement, ContinueStatement } from '../api/statement/control/terminate.js';\nimport { ReturnStatement } from '../api/computing/return.js';\nimport { YieldExpression } from '../api/computing/yield.js';\nimport { VariableDeclarator, VariableDeclarationNode } from '../api/statement/declarations/declares.js';\nimport { ForNode, ForOfNode, ForInNode, ForAwaitOfNode, ForDeclaration } from '../api/statement/iterations/for.js';\nimport { ConditionalExpression } from '../api/operators/ternary.js';\nimport { PipelineExpression } from '../api/operators/pipeline.js';\nimport { LogicalExpression, LogicalOperator } from '../api/operators/logical.js';\nimport { SequenceExpression } from '../api/operators/comma.js';\nimport { ChainExpression } from '../api/operators/chaining.js';\nimport { ExpressionStatement } from '../api/definition/statement.js';\nimport {\n\tbuildPostfixExpression, buildUnaryExpression,\n\texpressionFromLiteral, shortcutNumericLiteralBinaryExpression\n} from './nodes.js';\nimport { BinaryExpression } from '../api/operators/binary.js';\n\nexport enum ParsingArrowHeadFlag { CertainlyNotArrowHead, MaybeArrowHead, AsyncArrowFunction }\nexport enum PropertyKind {\n\tValue, Shorthand, ShorthandOrClassField,\n\tAssign, Method, ClassField, AccessorGetter, AccessorSetter,\n\tSpread, NotSet\n}\nexport type PropertyKindInfo = { kind?: PropertyKind, funcFlag?: FunctionKind, name: string };\nexport type FunctionInfo = { rest?: boolean };\nexport function parsePropertyKindFromToken(token: Token, info: PropertyKindInfo) {\n\tswitch (token) {\n\t\tcase Token.COLON:\n\t\t\tinfo.kind = PropertyKind.Value;\n\t\t\treturn true;\n\t\tcase Token.COMMA:\n\t\t\tinfo.kind = PropertyKind.Shorthand;\n\t\t\treturn true;\n\t\tcase Token.R_CURLY:\n\t\t\tinfo.kind = PropertyKind.ShorthandOrClassField;\n\t\t\treturn true;\n\t\tcase Token.ASSIGN:\n\t\t\tinfo.kind = PropertyKind.Assign;\n\t\t\treturn true;\n\t\tcase Token.L_PARENTHESES:\n\t\t\tinfo.kind = PropertyKind.Method;\n\t\t\treturn true;\n\t\tcase Token.MUL:\n\t\tcase Token.SEMICOLON:\n\t\t\tinfo.kind = PropertyKind.ClassField;\n\t\t\treturn true;\n\t\tdefault:\n\t\t\tbreak;\n\t}\n\treturn false;\n}\n\nexport enum PreParserIdentifierType {\n\tNullIdentifier = 'NullIdentifier',\n\tUnknownIdentifier = 'UnknownIdentifier',\n\tEvalIdentifier = 'EvalIdentifier',\n\tArgumentsIdentifier = 'ArgumentsIdentifier',\n\tConstructorIdentifier = 'ConstructorIdentifier',\n\tAwaitIdentifier = 'AwaitIdentifier',\n\tAsyncIdentifier = 'AsyncIdentifier',\n\tNameIdentifier = 'NameIdentifier',\n\tPrivateNameIdentifier = 'PrivateNameIdentifier'\n}\n\nexport abstract class AbstractParser {\n\tconstructor(protected scanner: TokenStream) { }\n\tabstract scan(): ExpressionNode;\n\tprotected position() {\n\t\treturn this.scanner.getPos();\n\t}\n\tprotected current() {\n\t\treturn this.scanner.currentToken();\n\t}\n\tprotected next() {\n\t\treturn this.scanner.next();\n\t}\n\tprotected peek(): TokenExpression {\n\t\treturn this.scanner.peek();\n\t}\n\tprotected peekAhead(): TokenExpression {\n\t\treturn this.scanner.peekAhead();\n\t}\n\tprotected peekAheadPosition() {\n\t\treturn this.scanner.peekAheadPosition();\n\t}\n\tprotected peekPosition() {\n\t\treturn this.scanner.peekPosition();\n\t}\n\tprotected consume(token: Token) {\n\t\tif (this.scanner.next().isNotType(token)) {\n\t\t\tthrow new Error(this.errorMessage(`Parsing ${JSON.stringify(token)}`));\n\t\t}\n\t}\n\tprotected check(token: Token): boolean {\n\t\tconst next = this.scanner.peek();\n\t\tif (next.isType(token)) {\n\t\t\tthis.scanner.next();\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\tprotected checkValue(value: ExpressionNode): boolean {\n\t\tconst next = this.scanner.peek();\n\t\tif (next.value == value) {\n\t\t\tthis.scanner.next();\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\tprotected expect(token: Token) {\n\t\tconst current = this.scanner.next();\n\t\tif (current.isNotType(token)) {\n\t\t\tthrow new Error(this.errorMessage(`Unexpected Token: ${JSON.stringify(token)}, current is ${JSON.stringify(current)}`));\n\t\t}\n\t}\n\tprotected checkInOrOf(): 'IN' | 'OF' | false {\n\t\tif (this.check(Token.IN)) {\n\t\t\treturn 'IN';\n\t\t} else if (this.checkValue(OfNode)) {\n\t\t\treturn 'OF';\n\t\t}\n\t\treturn false;\n\t}\n\tprotected peekInOrOf(): 'IN' | 'OF' | false {\n\t\tvar next = this.peek();\n\t\tif (next.isType(Token.IN)) {\n\t\t\treturn 'IN';\n\t\t} else if (next.value === OfNode) {\n\t\t\treturn 'OF';\n\t\t}\n\t\treturn false;\n\t}\n\tprotected isEvalOrArguments(name: ExpressionNode): boolean {\n\t\tif (name.toString() === 'eval') {\n\t\t\treturn true;\n\t\t} else if (name.toString() === 'arguments') {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\tprotected isNextLetKeyword() {\n\t\tif (this.peek().isNotType(Token.LET)) {\n\t\t\treturn false;\n\t\t}\n\t\tconst nextNextToken = this.peekAhead().token;\n\t\tswitch (nextNextToken) {\n\t\t\tcase Token.L_CURLY:\n\t\t\tcase Token.L_BRACKETS:\n\t\t\tcase Token.IDENTIFIER:\n\t\t\tcase Token.STATIC:\n\t\t\tcase Token.LET: // `let let;` is disallowed by static semantics, but the\n\t\t\t// token must be first interpreted as a keyword in order\n\t\t\t// for those semantics to apply. This ensures that ASI is\n\t\t\t// not honored when a LineTerminator separates the\n\t\t\t// tokens.\n\t\t\tcase Token.YIELD:\n\t\t\tcase Token.AWAIT:\n\t\t\tcase Token.GET:\n\t\t\tcase Token.SET:\n\t\t\tcase Token.ASYNC:\n\t\t\t\treturn true;\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t}\n\tprotected isIdentifier(expression: ExpressionNode): expression is Identifier {\n\t\treturn expression instanceof Identifier;\n\t}\n\tprotected isParenthesized(expression: ExpressionNode): expression is (GroupingExpression | SequenceExpression) {\n\t\treturn expression instanceof GroupingExpression || expression instanceof SequenceExpression;\n\t}\n\tprotected isAssignableIdentifier(expression: ExpressionNode): boolean {\n\t\t// return expression instanceof AssignmentNode;\n\t\tif (!(expression instanceof Identifier)) {\n\t\t\treturn false;\n\t\t}\n\t\tif (this.isEvalOrArguments(expression)) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t}\n\tprotected isPattern(expression: ExpressionNode): expression is (ObjectPattern | ArrayPattern) {\n\t\treturn expression instanceof ObjectPattern || expression instanceof ArrayPattern;\n\t}\n\tprotected isProperty(expression: ExpressionNode): expression is MemberExpression {\n\t\treturn expression instanceof MemberExpression;\n\t}\n\tprotected isCallNew(expression: ExpressionNode): expression is NewExpression {\n\t\treturn expression instanceof NewExpression;\n\t}\n\tprotected isCall(expression: ExpressionNode): expression is CallExpression {\n\t\treturn expression instanceof CallExpression;\n\t}\n\tprotected isEmptyStatement(expression: ExpressionNode): expression is EmptyStatement {\n\t\treturn expression instanceof EmptyStatement;\n\t}\n\tprotected isThisProperty(expression: ExpressionNode): boolean {\n\t\tif (this.isProperty(expression)) {\n\t\t\tif (expression.getObject() === ThisNode || expression.getObject().toString() === 'this') {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\tprotected isValidReferenceExpression(expression: ExpressionNode): boolean {\n\t\treturn this.isAssignableIdentifier(expression) || this.isProperty(expression);\n\t}\n\tprotected expectSemicolon() {\n\t\tconst tok = this.peek();\n\t\tif (tok.isType(Token.SEMICOLON)) {\n\t\t\tthis.next();\n\t\t\treturn;\n\t\t}\n\t\tif (this.scanner.hasLineTerminatorBeforeNext() || Token.isAutoSemicolon(tok.token)) {\n\t\t\treturn;\n\t\t}\n\t\tif (this.scanner.currentToken().isType(Token.AWAIT)) {\n\t\t\tthrow new Error(this.errorMessage(`Await Not In Async Context/Function`));\n\t\t}\n\t}\n\tprotected peekAnyIdentifier() {\n\t\treturn Token.isAnyIdentifier(this.peek().token);\n\t}\n\tprotected errorMessage(message: string): string {\n\t\treturn this.scanner.createError(message);\n\t}\n}\n\nexport class JavaScriptParser extends AbstractParser {\n\tstatic parse(source: string | TokenExpression[] | TokenStream) {\n\t\tconst stream = (typeof source === 'string' || Array.isArray(source))\n\t\t\t? TokenStream.getTokenStream(source)\n\t\t\t: source;\n\t\tconst parser = new JavaScriptParser(stream);\n\t\treturn parser.scan();\n\t}\n\tscan(): ExpressionNode {\n\t\tconst list: ExpressionNode[] = this.parseStatementList(Token.EOS);\n\t\tif (list.length === 1) {\n\t\t\treturn list[0];\n\t\t}\n\t\treturn new ExpressionStatement(list);\n\t}\n\n\t/**\n\t * Statement ::\n\t * Block\n\t * VariableStatement\n\t * EmptyStatement\n\t * ExpressionStatement\n\t * IfStatement\n\t * IterationStatement\n\t * ContinueStatement\n\t * BreakStatement\n\t * ReturnStatement\n\t * WithStatement\n\t * LabelledStatement\n\t * SwitchStatement\n\t * ThrowStatement\n\t * TryStatement\n\t * DebuggerStatement\n\t */\n\tprotected parseStatement(): ExpressionNode {\n\t\tswitch (this.peek().token) {\n\t\t\tcase Token.L_CURLY:\n\t\t\t\treturn this.parseBlock();\n\t\t\tcase Token.SEMICOLON:\n\t\t\t\tthis.consume(Token.SEMICOLON);\n\t\t\t\treturn EmptyStatement.INSTANCE;\n\t\t\tcase Token.IF:\n\t\t\t\treturn this.parseIfStatement();\n\t\t\tcase Token.DO:\n\t\t\t\treturn this.parseDoWhileStatement();\n\t\t\tcase Token.WHILE:\n\t\t\t\treturn this.parseWhileStatement();\n\t\t\tcase Token.FOR:\n\t\t\t\t// if (this.peekAhead().isType(Token.AWAIT)) {\n\t\t\t\t// \treturn this.parseForAwaitStatement();\n\t\t\t\t// }\n\t\t\t\treturn this.parseForStatement();\n\t\t\tcase Token.CONTINUE:\n\t\t\t\treturn this.parseContinueStatement();\n\t\t\tcase Token.BREAK:\n\t\t\t\treturn this.parseBreakStatement();\n\t\t\tcase Token.RETURN:\n\t\t\t\treturn this.parseReturnStatement();\n\t\t\tcase Token.THROW:\n\t\t\t\treturn this.parseThrowStatement();\n\t\t\tcase Token.TRY:\n\t\t\t\treturn this.parseTryStatement();\n\t\t\tcase Token.SWITCH:\n\t\t\t\treturn this.parseSwitchStatement();\n\t\t\t// case Token.FUNCTION:\n\t\t\t// \t// FunctionDeclaration only allowed as a StatementListItem, not in\n\t\t\t// \t// an arbitrary Statement position. Exceptions such as\n\t\t\t// \t// ES#sec-functiondeclarations-in-ifstatement-statement-clauses\n\t\t\t// \t// are handled by calling ParseScopedStatement rather than\n\t\t\t// \t// ParseStatement directly.\n\t\t\t// \timpl() -> ReportMessageAt(scanner() -> peek_location(),\n\t\t\t// \t\tis_strict(language_mode())\n\t\t\t// \t\t\t? MessageTemplate.kStrictFunction\n\t\t\t// \t\t\t: MessageTemplate.kSloppyFunction);\n\t\t\t// \treturn impl() -> NullStatement();\n\t\t\tcase Token.VAR:\n\t\t\tcase Token.LET:\n\t\t\tcase Token.CONST:\n\t\t\t\treturn this.parseVariableDeclarations();\n\t\t\tcase Token.ASYNC:\n\t\t\t\tif (this.peekAhead().isType(Token.FUNCTION)) {\n\t\t\t\t\tthis.consume(Token.ASYNC);\n\t\t\t\t\tthis.consume(Token.FUNCTION);\n\t\t\t\t\tif (this.peek().isType(Token.MUL)) {\n\t\t\t\t\t\treturn this.parseFunctionExpression(FunctionKind.ASYNC_GENERATOR);\n\t\t\t\t\t}\n\t\t\t\t\treturn this.parseFunctionExpression(FunctionKind.ASYNC);\n\t\t\t\t}\n\t\t\tdefault:\n\t\t\t\treturn this.parseExpressionOrLabelledStatement();\n\t\t}\n\t}\n\tprotected parseTryStatement(): ExpressionNode {\n\t\t// TryStatement ::\n\t\t// 'try' Block Catch\n\t\t// 'try' Block Finally\n\t\t// 'try' Block Catch Finally\n\t\t//\n\t\t// Catch ::\n\t\t// 'catch' '(' Identifier ')' Block\n\t\t//\n\t\t// Finally ::\n\t\t// 'finally' Block\n\n\t\tthis.consume(Token.TRY);\n\t\tconst tryBlock = this.parseBlock();\n\t\tif (tryBlock instanceof BlockStatement) {\n\t\t\ttryBlock.isStatement = true;\n\t\t}\n\t\tlet peek = this.peek();\n\t\tif (peek.isNotType(Token.CATCH) && peek.isNotType(Token.FINALLY)) {\n\t\t\tthrow new Error(this.errorMessage(`Uncaught SyntaxError: Missing catch or finally after try`));\n\t\t}\n\t\tlet catchBlock: ExpressionNode | undefined;\n\t\tif (this.check(Token.CATCH)) {\n\t\t\t// bool has_binding;\n\t\t\tlet catchVar: ExpressionNode | undefined;\n\t\t\tconst hasBinding = this.check(Token.L_PARENTHESES);\n\t\t\tif (hasBinding) {\n\t\t\t\tcatchVar = this.parseIdentifier();\n\t\t\t\tthis.expect(Token.R_PARENTHESES);\n\t\t\t}\n\t\t\tconst block = this.parseBlock();\n\t\t\tif (block instanceof BlockStatement) {\n\t\t\t\tblock.isStatement = true;\n\t\t\t}\n\t\t\tcatchBlock = new CatchClauseNode(block, catchVar);\n\t\t}\n\t\tlet finallyBlock: ExpressionNode | undefined;\n\t\tif (this.check(Token.FINALLY)) {\n\t\t\tfinallyBlock = this.parseBlock();\n\t\t\tif (finallyBlock instanceof BlockStatement) {\n\t\t\t\tfinallyBlock.isStatement = true;\n\t\t\t}\n\t\t}\n\t\treturn new TryCatchNode(tryBlock, catchBlock, finallyBlock);\n\t}\n\tprotected parseBlock(): ExpressionNode {\n\t\tthis.expect(Token.L_CURLY);\n\t\tconst statements: ExpressionNode[] = [];\n\t\tconst block = new BlockStatement(statements, false);\n\t\twhile (this.peek().isNotType(Token.R_CURLY)) {\n\t\t\tconst stat = this.parseStatementListItem();\n\t\t\tif (!stat) {\n\t\t\t\treturn block;\n\t\t\t} else if (stat instanceof EmptyStatement) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tstatements.push(stat);\n\t\t}\n\t\tthis.expect(Token.R_CURLY);\n\t\treturn block;\n\t}\n\t/**\n\t * ECMA 262 6th Edition\n\t * \tStatementListItem[Yield, Return] :\n\t * \tStatement[?Yield, ?Return]\n\t * \tDeclaration[?Yield]\n\t * //\n\t * Declaration[Yield] :\n\t * \tHoistableDeclaration[?Yield]\n\t * \tClassDeclaration[?Yield]\n\t * \tLexicalDeclaration[In, ?Yield]\n\t * //\n\t * HoistableDeclaration[Yield, Default] :\n\t * \tFunctionDeclaration[?Yield, ?Default]\n\t * \tGeneratorDeclaration[?Yield, ?Default]\n\t * //\n\t * LexicalDeclaration[In, Yield] :\n\t * \tLetOrConst BindingList[?In, ?Yield] ;\n\t */\n\tprotected parseStatementListItem(): ExpressionNode | undefined {\n\t\tswitch (this.peek().token) {\n\t\t\tcase Token.FUNCTION:\n\t\t\t\tthis.consume(Token.FUNCTION);\n\t\t\t\tif (this.peek().isType(Token.MUL)) {\n\t\t\t\t\tthis.consume(Token.MUL);\n\t\t\t\t\treturn this.parseFunctionExpression(FunctionKind.GENERATOR);\n\t\t\t\t}\n\t\t\t\treturn this.parseFunctionExpression(FunctionKind.NORMAL);\n\t\t\tcase Token.CLASS:\n\t\t\t\tthis.consume(Token.CLASS);\n\t\t\t\treturn this.parseClassDeclaration(undefined, false);\n\t\t\tcase Token.VAR:\n\t\t\tcase Token.LET:\n\t\t\tcase Token.CONST:\n\t\t\t\treturn this.parseVariableDeclarations();\n\t\t\tcase Token.ASYNC:\n\t\t\t\tif (this.peekAhead().isType(Token.FUNCTION)) {\n\t\t\t\t\tthis.consume(Token.ASYNC);\n\t\t\t\t\tthis.consume(Token.FUNCTION);\n\t\t\t\t\tif (this.peek().isType(Token.MUL)) {\n\t\t\t\t\t\tthis.consume(Token.MUL);\n\t\t\t\t\t\treturn this.parseFunctionExpression(FunctionKind.ASYNC_GENERATOR);\n\t\t\t\t\t}\n\t\t\t\t\treturn this.parseFunctionExpression(FunctionKind.ASYNC);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t\treturn this.parseStatement();\n\t}\n\tprotected parseFunctionExpression(type: FunctionKind): ExpressionNode {\n\t\tlet funcName: ExpressionNode | undefined;\n\t\tconst peek = this.peek();\n\t\tif (peek.isNotType(Token.L_PARENTHESES)) {\n\t\t\tif (peek.isType(Token.L_BRACKETS)) {\n\t\t\t\t// [Symbol.iterator]() {}\n\t\t\t\tthis.consume(Token.L_BRACKETS);\n\t\t\t\tfuncName = this.parseMemberExpression();\n\t\t\t\tthis.expect(Token.R_BRACKETS);\n\t\t\t} else {\n\t\t\t\tfuncName = this.parseIdentifier();\n\t\t\t}\n\t\t}\n\t\treturn this.parseFunctionLiteral(type, funcName);\n\t}\n\tprotected parseIfStatement(): ExpressionNode {\n\t\tthis.consume(Token.IF);\n\t\tthis.consume(Token.L_PARENTHESES);\n\t\tconst condition = this.parseExpression();\n\t\tthis.consume(Token.R_PARENTHESES);\n\t\tconst thenStatement = this.parseStatement();\n\t\tif (thenStatement instanceof BlockStatement) {\n\t\t\tthenStatement.isStatement = true;\n\t\t}\n\t\tlet elseStatement;\n\t\tif (this.peek().isType(Token.ELSE)) {\n\t\t\tthis.consume(Token.ELSE);\n\t\t\telseStatement = this.parseStatement();\n\t\t}\n\t\treturn new IfStatement(condition, thenStatement, elseStatement);\n\t}\n\tprotected parseDoWhileStatement(): ExpressionNode {\n\t\t// DoStatement ::\n\t\t// 'do' Statement 'while' '(' Expression ')' ';'\n\t\tthis.consume(Token.DO);\n\t\tconst body = this.parseStatement();\n\t\tif (body instanceof BlockStatement) {\n\t\t\tbody.isStatement = true;\n\t\t}\n\t\tthis.expect(Token.WHILE);\n\t\tthis.expect(Token.L_PARENTHESES);\n\t\tconst condition = this.parseExpression();\n\t\tthis.expect(Token.R_PARENTHESES);\n\t\tthis.check(Token.SEMICOLON);\n\t\treturn new DoWhileNode(condition, body);\n\t}\n\tprotected parseWhileStatement(): ExpressionNode {\n\t\t// WhileStatement ::\n\t\t// 'while' '(' Expression ')' Statement\n\t\tthis.consume(Token.WHILE);\n\t\tthis.expect(Token.L_PARENTHESES);\n\t\tconst condition = this.parseExpression();\n\t\tthis.expect(Token.R_PARENTHESES);\n\t\tconst body = this.parseStatement();\n\t\tif (body instanceof BlockStatement) {\n\t\t\tbody.isStatement = true;\n\t\t}\n\t\treturn new WhileNode(condition, body);\n\t}\n\tprotected parseThrowStatement(): ExpressionNode {\n\t\t// ThrowStatement ::\n\t\t// 'throw' Expression ';'\n\t\tthis.consume(Token.THROW);\n\t\tif (this.scanner.hasLineTerminatorBeforeNext()) {\n\t\t\tthrow new Error(this.scanner.createError(`New line After Throw`));\n\t\t}\n\t\tconst exception = this.parseExpression();\n\t\tthis.expectSemicolon();\n\t\treturn new ThrowStatement(exception);\n\t}\n\tprotected parseSwitchStatement(): ExpressionNode {\n\t\t// SwitchStatement ::\n\t\t// 'switch' '(' Expression ')' '{' CaseClause* '}'\n\t\t// CaseClause ::\n\t\t// 'case' Expression ':' StatementList\n\t\t// 'default' ':' StatementList\n\n\t\tthis.consume(Token.SWITCH);\n\t\tthis.expect(Token.L_PARENTHESES);\n\t\tconst tag = this.parseExpression();\n\t\tthis.expect(Token.R_PARENTHESES);\n\n\t\tconst cases: SwitchCase[] = [];\n\t\tconst switchStatement = new SwitchStatement(tag, cases);\n\n\t\tlet defaultSeen = false;\n\t\tthis.expect(Token.L_CURLY);\n\t\twhile (this.peek().isNotType(Token.R_CURLY)) {\n\t\t\tconst statements: ExpressionNode[] = [];\n\t\t\tlet label: ExpressionNode;\n\t\t\tif (this.check(Token.CASE)) {\n\t\t\t\tlabel = this.parseExpression();\n\t\t\t} else {\n\t\t\t\tthis.expect(Token.DEFAULT);\n\t\t\t\tif (defaultSeen) {\n\t\t\t\t\tthrow new Error(this.errorMessage(`Multiple Defaults In Switch`));\n\t\t\t\t}\n\t\t\t\tdefaultSeen = true;\n\t\t\t}\n\t\t\tthis.expect(Token.COLON);\n\t\t\twhile (this.peek().isNotType(Token.CASE)\n\t\t\t\t&& this.peek().isNotType(Token.DEFAULT)\n\t\t\t\t&& this.peek().isNotType(Token.R_CURLY)) {\n\t\t\t\tconst statement = this.parseStatementListItem();\n\t\t\t\tif (!statement || this.isEmptyStatement(statement)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tstatements.push(statement);\n\t\t\t}\n\t\t\tconst block = new BlockStatement(statements, true);\n\t\t\tconst clause = defaultSeen ? new DefaultExpression(block) : new SwitchCase(label!, block);\n\t\t\tcases.push(clause);\n\t\t}\n\t\tthis.expect(Token.R_CURLY);\n\t\treturn switchStatement;\n\t}\n\tprotected parseForStatement(): ExpressionNode {\n\t\t// Either a standard for loop\n\t\t// for (<init>; <cond>; <next>) { ... }\n\t\t// or a for-each loop\n\t\t// for (<each> of|in <iterable>) { ... }\n\t\t//\n\n\t\tthis.consume(Token.FOR);\n\t\tconst isAwait = this.check(Token.AWAIT);\n\t\tthis.expect(Token.L_PARENTHESES);\n\t\tconst peek = this.peek();\n\t\tconst startsWithLet = peek.isType(Token.LET) || peek.isType(Token.VAR);\n\t\tlet initializer: ExpressionNode;\n\t\tif (peek.isType(Token.CONST) || (startsWithLet && this.isNextLetKeyword())) {\n\t\t\tinitializer = this.parseVariableDeclarations();\n\t\t} else if (peek.isType(Token.SEMICOLON)) {\n\t\t\tinitializer = EmptyStatement.INSTANCE;\n\t\t} else {\n\t\t\tinitializer = this.parseExpressionCoverGrammar();\n\t\t}\n\t\tif (initializer instanceof BinaryExpression) {\n\t\t\t// x in y \n\t\t\tconst objectNode = initializer.getRight();\n\t\t\tinitializer = initializer.getLeft();\n\t\t\tthis.expect(Token.R_PARENTHESES)\n\t\t\tconst statement = this.parseStatement();\n\t\t\treturn new ForInNode(initializer as ForDeclaration, objectNode, statement);\n\t\t}\n\t\tconst forMode = this.checkInOrOf();\n\t\tif (forMode) {\n\t\t\tconst object = forMode === 'IN' ? this.parseAssignmentExpression() : this.parseExpression();\n\t\t\tthis.expect(Token.R_PARENTHESES)\n\t\t\tconst statement = this.parseStatement();\n\t\t\tif (statement instanceof BlockStatement) {\n\t\t\t\tstatement.isStatement = true;\n\t\t\t}\n\t\t\tif (isAwait && forMode === 'OF') {\n\t\t\t\treturn new ForAwaitOfNode(initializer as ForDeclaration, object, statement);\n\t\t\t} else if (forMode === 'OF') {\n\t\t\t\treturn new ForOfNode(initializer as ForDeclaration, object, statement);\n\t\t\t} else if (forMode === 'IN') {\n\t\t\t\treturn new ForInNode(initializer as ForDeclaration, object, statement);\n\t\t\t} else {\n\t\t\t\tthrow new Error(this.errorMessage(`parsing for loop: ${this.position()}`));\n\t\t\t}\n\t\t}\n\t\tthis.expect(Token.SEMICOLON);\n\t\tlet condition: ExpressionNode | undefined;\n\t\tif (!this.check(Token.SEMICOLON)) {\n\t\t\tcondition = this.parseExpression();\n\t\t\tthis.expect(Token.SEMICOLON);\n\t\t}\n\t\tlet finalExpression: ExpressionNode | undefined;\n\t\tif (!this.check(Token.R_PARENTHESES)) {\n\t\t\tfinalExpression = this.parseExpression();\n\t\t\tthis.expect(Token.R_PARENTHESES);\n\t\t}\n\t\tconst body = this.parseStatement();\n\t\tif (body instanceof BlockStatement) {\n\t\t\tbody.isStatement = true;\n\t\t}\n\t\treturn new ForNode(body, initializer, condition, finalExpression);\n\t}\n\tprotected parseVariableDeclarations(): ExpressionNode {\n\t\t// VariableDeclarations ::\n\t\t// ('var' | 'const' | 'let') (Identifier ('=' AssignmentExpression)?)+[',']\n\t\t// var converted into ==> 'let' by parser\n\n\t\tlet mode: 'const' | 'let' | 'var';\n\t\tconst token = this.peek().token;\n\t\tswitch (token) {\n\t\t\tcase Token.CONST:\n\t\t\t\tthis.consume(token);\n\t\t\t\tmode = 'const';\n\t\t\t\tbreak;\n\t\t\tcase Token.VAR:\n\t\t\t\tthis.consume(token);\n\t\t\t\tmode = 'var';\n\t\t\t\tbreak;\n\t\t\tcase Token.LET:\n\t\t\tdefault:\n\t\t\t\tthis.consume(token);\n\t\t\t\tmode = 'let';\n\t\t\t\tbreak;\n\t\t}\n\t\tconst variables: VariableDeclarator[] = [];\n\t\tdo {\n\n\t\t\tlet name: ExpressionNode;\n\t\t\tlet value: ExpressionNode | undefined;\n\t\t\t// Check for an identifier first, so that we can elide the pattern in cases\n\t\t\t// where there is no initializer (and so no proxy needs to be created).\n\t\t\tif (Token.isAnyIdentifier(this.peek().token)) {\n\t\t\t\tname = this.parseAndClassifyIdentifier(this.next());\n\t\t\t\tif (this.isEvalOrArguments(name)) {\n\t\t\t\t\tthrow new Error(this.errorMessage(`Strict Eval Arguments`));\n\t\t\t\t}\n\t\t\t\t// if (this.peekInOrOf()) {\n\t\t\t\t// \t// // Assignments need the variable expression for the assignment LHS, and\n\t\t\t\t// \t// // for of/in will need it later, so create the expression now.\n\t\t\t\t// }\n\t\t\t} else {\n\t\t\t\tname = this.parseBindingPattern(true);\n\t\t\t}\n\n\t\t\tif (this.check(Token.ASSIGN)) {\n\t\t\t\tvalue = this.parseAssignmentExpression();\n\t\t\t} else if (!this.peekInOrOf()) {\n\t\t\t\t// ES6 'const' and binding patterns require initializers.\n\t\t\t\tif (mode === 'const' && (name === undefined || value === undefined)) {\n\t\t\t\t\tthrow new Error(this.errorMessage(`Declaration Missing Initializer : ${this.position()}`));\n\t\t\t\t}\n\t\t\t\t// value = undefined;\n\t\t\t}\n\t\t\tvariables.push(new VariableDeclarator(name as CanDeclareExpression, value));\n\t\t} while (this.check(Token.COMMA));\n\t\treturn new VariableDeclarationNode(variables, mode);\n\t}\n\tprotected parseBindingPattern(isPattern: boolean): ExpressionNode {\n\t\t// Pattern ::\n\t\t// Identifier\n\t\t// ArrayLiteral\n\t\t// ObjectLiteral\n\n\t\tconst token = this.peek().token;\n\t\tif (Token.isAnyIdentifier(token)) {\n\t\t\tconst name = this.parseAndClassifyIdentifier(this.next());\n\t\t\tif (this.isEvalOrArguments(name)) {\n\t\t\t\tthrow new Error(this.errorMessage(`Strict Eval Arguments`));\n\t\t\t}\n\t\t\treturn name;\n\t\t}\n\t\tif (token == Token.L_BRACKETS) {\n\t\t\treturn this.parseArrayLiteral(isPattern);\n\t\t} else if (token == Token.L_CURLY) {\n\t\t\treturn this.parseObjectLiteral(isPattern);\n\t\t} else {\n\t\t\tthrow new Error(this.errorMessage(`Unexpected Token: ${this.next().getValue()}`));\n\t\t}\n\t}\n\tprotected parseAndClassifyIdentifier(next: TokenExpression): ExpressionNode {\n\t\tif (next.isType(Token.IDENTIFIER)) {\n\t\t\treturn next.getValue();\n\t\t}\n\t\telse if (next.isType(Token.SET)) {\n\t\t\tconst value = this.parseFunctionDeclaration() as CanDeclareExpression;\n\t\t\treturn new Property(next.getValue(), value, 'set');\n\t\t}\n\t\telse if (next.isType(Token.GET)) {\n\t\t\tconst value = this.parseFunctionDeclaration() as CanDeclareExpression;\n\t\t\treturn new Property(next.getValue(), value, 'get');\n\t\t}\n\t\telse if (next.isType(Token.AWAIT)) {\n\t\t\tthrow new Error(this.errorMessage(`un supported expression (await)`));\n\n\t\t}\n\t\treturn next.getValue();\n\t}\n\tprotected parseContinueStatement(): ExpressionNode {\n\t\t// ContinueStatement ::\n\t\t// 'continue' ';'\n\t\t// Identifier? is not supported\n\n\t\tthis.consume(Token.CONTINUE);\n\t\tthis.expectSemicolon();\n\t\treturn ContinueStatement.CONTINUE_INSTANCE;\n\t}\n\tprotected parseBreakStatement(): ExpressionNode {\n\t\t// BreakStatement ::\n\t\t// 'break' ';'\n\t\t// Identifier? is not supported\n\n\t\tthis.consume(Token.BREAK);\n\t\tthis.expectSemicolon();\n\t\treturn BreakStatement.BREAK_INSTANCE;\n\t}\n\tprotected parseReturnStatement(): ExpressionNode {\n\t\t// ReturnStatement ::\n\t\t// 'return' [no line terminator] Expression? ';'\n\n\t\t// Consume the return token. It is necessary to do that before\n\t\t// reporting any errors on it, because of the way errors are\n\t\t// reported (underlining).\n\t\tthis.consume(Token.RETURN);\n\t\tconst tokenExp = this.peek();\n\t\tlet returnValue: ExpressionNode | undefined;\n\t\t// ExpressionT return_value = impl() -> NullExpression();\n\t\tif (this.scanner.hasLineTerminatorBeforeNext() || Token.isAutoSemicolon(tokenExp.token)) {\n\t\t\t// check if this scope is belong to 'constructor' method to return this at the end;\n\t\t\t// if (this.isDerivedConstructor(function_state_ -> kind())) {\n\t\t\t// \treturnValue = ThisNode;\n\t\t\t// }\n\t\t} else {\n\t\t\treturnValue = this.parseExpression();\n\t\t}\n\t\tthis.expectSemicolon()\n\t\treturn new ReturnStatement(returnValue);\n\t}\n\tprotected parseExpressionOrLabelledStatement(): ExpressionNode {\n\t\t// ExpressionStatement | LabelledStatement ::\n\t\t// Expression ';'\n\t\t// Identifier ':' Statement\n\t\t//\n\t\t// ExpressionStatement[Yield] :\n\t\t// [lookahead notin {{, function, class, let [}] Expression[In, ?Yield] ;\n\n\t\tswitch (this.peek().token) {\n\t\t\tcase Token.FUNCTION:\n\t\t\tcase Token.L_CURLY:\n\t\t\t\tthrow new Error(this.errorMessage(`Unreachable state`));\n\t\t\tcase Token.CLASS:\n\t\t\t\tthrow new Error(this.errorMessage(`Unexpected Token ${this.next().getValue().toString()}`));\n\t\t\tcase Token.LET: {\n\t\t\t\tconst nextNext = this.peekAhead();\n\t\t\t\t// \"let\" followed by either \"[\", \"{\" or an identifier means a lexical\n\t\t\t\t// declaration, which should not appear here.\n\t\t\t\t// However, ASI may insert a line break before an identifier or a brace.\n\t\t\t\tif (nextNext.isNotType(Token.L_BRACKETS) &&\n\t\t\t\t\t((nextNext.isNotType(Token.L_CURLY) && nextNext.isNotType(Token.IDENTIFIER)))) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tthrow new Error(this.errorMessage(`Unexpected Lexical Declaration ${this.position()}`));\n\t\t\t}\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t\tconst startsWithIdentifier = Token.isAnyIdentifier(this.peek().token);\n\t\tconst expression: ExpressionNode = this.parseExpressionCoverGrammar();\n\t\tif (this.peek().isType(Token.COLON) && startsWithIdentifier && this.isIdentifier(expression)) {\n\t\t\t// The whole expression was a single identifier, and not, e.g.,\n\t\t\t// something starting with an identifier or a parenthesized identifier.\n\n\t\t\t// Remove the \"ghost\" variable that turned out to be a label from the top\n\t\t\t// scope. This way, we don't try to resolve it during the scope\n\t\t\t// processing.\n\n\t\t\tthis.consume(Token.COLON);\n\t\t\t// ES#sec-labelled-function-declarations Labelled Function Declarations\n\t\t\tif (this.peek().isType(Token.FUNCTION) /*&& allow_function == kAllowLabelledFunctionStatement */) {\n\t\t\t\treturn this.parseFunctionDeclaration();\n\t\t\t}\n\t\t\treturn this.parseStatement();\n\t\t}\n\t\t// Parsed expression statement, followed by semicolon.\n\t\tthis.expectSemicolon();\n\t\treturn expression;\n\t}\n\tprotected parseExpression(): ExpressionNode {\n\t\treturn this.parseExpressionCoverGrammar();\n\t}\n\tprotected parseFunctionDeclaration(): ExpressionNode {\n\t\tthis.consume(Token.FUNCTION);\n\t\tif (this.check(Token.MUL)) {\n\t\t\tthrow new Error(this.errorMessage(`Error Generator In Single Statement Context`));\n\t\t}\n\t\treturn this.parseHoistableDeclaration(FunctionKind.NORMAL);\n\t}\n\tprotected parseFunctionDeclarationAndGenerator() {\n\t\tthis.consume(Token.FUNCTION);\n\t\tif (this.check(Token.MUL)) {\n\t\t\treturn this.parseHoistableDeclaration(FunctionKind.GENERATOR);\n\t\t}\n\t\treturn this.parseHoistableDeclaration(FunctionKind.NORMAL);\n\t}\n\tprotected parseHoistableDeclaration(flag: FunctionKind): ExpressionNode {\n\t\t// FunctionDeclaration ::\n\t\t// 'function' Identifier '(' FormalParameters ')' '{' FunctionBody '}'\n\t\t// 'function' '(' FormalParameters ')' '{' FunctionBody '}'\n\t\t// GeneratorDeclaration ::\n\t\t// 'function' '*' Identifier '(' FormalParameters ')' '{' FunctionBody '}'\n\t\t// 'function' '*' '(' FormalParameters ')' '{' FunctionBody '}'\n\t\t//\n\t\t// The anonymous forms are allowed iff [default_export] is true.\n\t\t//\n\t\t// 'function' and '*' (if present) have been consumed by the caller.\n\n\t\t// (FunctionType.ASYNC === flag || FunctionType.GENERATOR === flag);\n\n\t\tif (FunctionKind.ASYNC === flag && this.check(Token.MUL)) {\n\t\t\t// Async generator\n\t\t\tflag = FunctionKind.ASYNC_GENERATOR;\n\t\t}\n\t\tlet name: ExpressionNode | undefined;\n\t\tif (this.peek().isNotType(Token.L_PARENTHESES)) {\n\t\t\tname = this.parseIdentifier();\n\t\t}\n\t\treturn this.parseFunctionLiteral(flag, name);\n\t}\n\tprotected parseIdentifier(): ExpressionNode {\n\t\tconst next = this.next();\n\t\tif (!Token.isValidIdentifier(next.token)) {\n\t\t\tthrow new Error(this.errorMessage(`Unexpected Token: ${next.getValue()}`));\n\t\t}\n\t\tif (next.isType(Token.IDENTIFIER)) {\n\t\t\treturn next.getValue();\n\t\t}\n\t\treturn this.getIdentifier();\n\t}\n\tprotected getIdentifier(): ExpressionNode {\n\t\tconst current = this.current();\n\t\tconst string = current.getValue().toString();\n\t\tswitch (current.token) {\n\t\t\tcase Token.AWAIT:\n\t\t\t\treturn AwaitIdentifier;\n\t\t\tcase Token.ASYNC:\n\t\t\t\treturn AsyncIdentifier;\n\t\t\tcase Token.PRIVATE_NAME:\n\t\t\t\treturn new Identifier(`#${string}`);\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t\tif (string == 'constructor') {\n\t\t\treturn ConstructorIdentifier;\n\t\t}\n\t\tif (string == 'name') {\n\t\t\treturn NameIdentifier;\n\t\t}\n\t\tif (string == 'eval') {\n\t\t\treturn EvalIdentifier;\n\t\t}\n\t\telse if (string == 'arguments') {\n\t\t\treturn ArgumentsIdentifier;\n\t\t}\n\t\tthrow new Error(this.errorMessage(`can't identify token ${string}`));\n\t}\n\tprotected parseFunctionLiteral(flag: FunctionKind, name?: ExpressionNode): ExpressionNode {\n\t\t// Function ::\n\t\t// '(' FormalParameterList? ')' '{' FunctionBody '}'\n\n\t\tconst functionInfo: FunctionInfo = {};\n\t\tthis.expect(Token.L_PARENTHESES);\n\t\tconst formals: ExpressionNode[] = this.parseFormalParameterList(functionInfo);\n\t\tthis.expect(Token.R_PARENTHESES);\n\t\tconst body = this.parseFunctionBody();\n\t\tif (name) {\n\t\t\treturn new FunctionDeclaration(formals, body, flag, name as CanDeclareExpression, functionInfo.rest);\n\t\t}\n\t\treturn new FunctionExpression(formals, body, flag, name, functionInfo.rest);\n\t}\n\tprotected parseArrowFunctionBody(): ExpressionNode | ExpressionNode[] {\n\t\tconst isExpression = this.peek().isNotType(Token.L_CURLY);\n\t\tif (isExpression) {\n\t\t\tconst expression = this.parseAssignmentExpression();\n\t\t\treturn expression;\n\t\t} else {\n\t\t\treturn this.parseFunctionBody();\n\t\t}\n\t}\n\tprotected parseFunctionBody(): ExpressionNode[] {\n\t\tthis.expect(Token.L_CURLY);\n\t\tconst list = this.parseStatementList(Token.R_CURLY);\n\t\tthis.expect(Token.R_CURLY);\n\t\treturn list;\n\t}\n\tprotected parseStatementList(endToken: Token): ExpressionNode[] {\n\t\t// StatementList ::\n\t\t// (StatementListItem)* <end_token>\n\t\tconst list: ExpressionNode[] = [];\n\t\twhile (this.peek().isNotType(endToken)) {\n\t\t\tconst stat = this.parseStatementListItem();\n\t\t\tif (!stat) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (this.isEmptyStatement(stat)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tlist.push(stat);\n\t\t}\n\t\treturn list;\n\t}\n\tprotected parseFormalParameterList(functionInfo: FunctionInfo): ExpressionNode[] {\n\t\t// FormalParameters[Yield] :\n\t\t// [empty]\n\t\t// FunctionRestParameter[?Yield]\n\t\t// FormalParameterList[?Yield]\n\t\t// FormalParameterList[?Yield] ,\n\t\t// FormalParameterList[?Yield] , FunctionRestParameter[?Yield]\n\t\t//\n\t\t// FormalParameterList[Yield] :\n\t\t// FormalParameter[?Yield]\n\t\t// FormalParameterList[?Yield] , FormalParameter[?Yield]\n\n\t\tconst parameters: ExpressionNode[] = [];\n\t\tif (this.peek().isNotType(Token.R_PARENTHESES)) {\n\t\t\twhile (true) {\n\t\t\t\tconst param: ExpressionNode = this.parseFormalParameter(functionInfo);\n\t\t\t\tparameters.push(param);\n\t\t\t\tif (functionInfo.rest) {\n\t\t\t\t\tif (this.peek().isType(Token.COMMA)) {\n\t\t\t\t\t\tthrow new Error(this.errorMessage(`Param After Rest`));\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (!this.check(Token.COMMA)) break;\n\t\t\t\tif (this.peek().isType(Token.R_PARENTHESES)) {\n\t\t\t\t\t// allow the trailing comma\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn parameters;\n\t}\n\tprotected parseFormalParameter(functionInfo: FunctionInfo): ExpressionNode {\n\t\t// FormalParameter[Yield,GeneratorParameter] :\n\t\t// BindingElement[?Yield, ?GeneratorParameter]\n\t\tfunctionInfo.rest = this.check(Token.ELLIPSIS);\n\t\tlet pattern = this.parseBindingPattern(true);\n\t\tlet initializer: Param;\n\t\tif (this.check(Token.ASSIGN)) {\n\t\t\tif (functionInfo.rest) {\n\t\t\t\tthrow new Error(this.errorMessage(`Rest Default Initializer`));\n\t\t\t}\n\t\t\tconst value = this.parseAssignmentExpression();\n\t\t\tinitializer = new Param(pattern as CanDeclareExpression, value);\n\t\t} else {\n\t\t\tinitializer = new Param(pattern as CanDeclareExpression);\n\t\t}\n\t\treturn initializer;\n\t}\n\tprotected parseExpressionCoverGrammar(info?: FunctionInfo): ExpressionNode {\n\t\t// Expression ::\n\t\t// AssignmentExpression\n\t\t// Expression ',' AssignmentExpression\n\n\t\t// ExpressionListT list(pointer_buffer());\n\t\t// ExpressionT expression;\n\t\t// AccumulationScope accumulation_scope(expression_scope());\n\t\tlet variableIndex = 0;\n\t\tconst list: ExpressionNode[] = [];\n\t\tlet expression: ExpressionNode;\n\t\twhile (true) {\n\t\t\tif (this.peek().isType(Token.ELLIPSIS)) {\n\t\t\t\tif (info) {\n\t\t\t\t\tinfo.rest = true;\n\t\t\t\t}\n\t\t\t\treturn this.parseArrowParametersWithRest(list, variableIndex);\n\t\t\t}\n\t\t\texpression = this.parseAssignmentExpressionCoverGrammar();\n\t\t\tlist.push(expression);\n\n\t\t\tif (!this.check(Token.COMMA)) break;\n\n\t\t\tif (this.peek().isType(Token.R_PARENTHESES) && this.peekAhead().isType(Token.ARROW)) {\n\t\t\t\t// a trailing comma is allowed at the end of an arrow parameter list\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (list.length == 1) return expression;\n\t\treturn this.expressionListToExpression(list);\n\t}\n\tprotected parseArrowParametersWithRest(list: ExpressionNode[], variableIndex: number): ExpressionNode {\n\t\tthis.consume(Token.ELLIPSIS);\n\t\tconst pattern: ExpressionNode = this.parseBindingPattern(true);\n\t\tif (this.peek().isType(Token.ASSIGN)) {\n\t\t\tthrow new Error(this.errorMessage(`Error A rest parameter cannot have an initializer`));\n\t\t}\n\t\tif (this.peek().isType(Token.COMMA)) {\n\t\t\tthrow new Error(this.errorMessage(`Error A rest parameter or binding pattern may not have a trailing comma`));\n\t\t}\n\t\t// 'x, y, ...z' in CoverParenthesizedExpressionAndArrowParameterList only\n\t\t// as the formal parameters of'(x, y, ...z) => foo', and is not itself a\n\t\t// valid expression.\n\t\tif (this.peek().isNotType(Token.R_PARENTHESES) || this.peekAhead().isNotType(Token.ARROW)) {\n\t\t\tthrow new Error(this.errorMessage(`Error Unexpected Token At ${this.position()}`));\n\t\t}\n\t\tlist.push(pattern);\n\t\treturn this.expressionListToExpression(list);\n\t}\n\tprotected expressionListToExpression(list: ExpressionNode[]): ExpressionNode {\n\t\tif (list.length === 1) { return list[0]; }\n\t\treturn new SequenceExpression(list);\n\t}\n\tprotected parseMemberExpression(): ExpressionNode {\n\t\t// MemberExpression ::\n\t\t// (PrimaryExpression | FunctionLiteral | ClassLiteral)\n\t\t// ('[' Expression ']' | '.' Identifier | Arguments | TemplateLiteral)*\n\t\t//\n\t\t// CallExpression ::\n\t\t// (SuperCall | ImportCall)\n\t\t// ('[' Expression ']' | '.' Identifier | Arguments | TemplateLiteral)*\n\t\t//\n\t\t// The '[' Expression ']' and '.' Identifier parts are parsed by\n\t\t// ParseMemberExpressionContinuation, and everything preceeding it is merged\n\t\t// into ParsePrimaryExpression.\n\n\t\t// Parse the initial primary or function expression.\n\t\tconst result = this.parsePrimaryExpression();\n\t\treturn this.parseMemberExpressionContinuation(result);\n\t}\n\tprotected toParamNode(expression: ExpressionNode): Param {\n\t\tif (expression instanceof AssignmentExpression) {\n\t\t\treturn new Param(expression.getLeft() as CanDeclareExpression, expression.getRight());\n\t\t}\n\t\tif (expression instanceof GroupingExpression) {\n\t\t\treturn new Param(expression.getNode() as CanDeclareExpression);\n\t\t}\n\t\treturn new Param(expression as CanDeclareExpression);\n\t}\n\tprotected parsePrimaryExpression(): ExpressionNode {\n\t\t// PrimaryExpression ::\n\t\t// 'this'\n\t\t// 'null'\n\t\t// 'true'\n\t\t// 'false'\n\t\t// Identifier\n\t\t// Number\n\t\t// String\n\t\t// ArrayLiteral\n\t\t// ObjectLiteral\n\t\t// RegExpLiteral\n\t\t// '(' Expression ')'\n\t\t// do Block\n\t\t// AsyncFunctionLiteral\n\n\t\tlet token = this.peek();\n\t\tif (Token.isAnyIdentifier(token.token)) {\n\t\t\tthis.consume(token.token);\n\t\t\tlet kind: ArrowFunctionType = ArrowFunctionType.NORMAL;\n\t\t\tif (token.isType(Token.ASYNC) && !this.scanner.hasLineTerminatorBeforeNext()) {\n\t\t\t\t// async function ...\n\t\t\t\tif (this.peek().isType(Token.FUNCTION)) {\n\t\t\t\t\treturn this.parseFunctionDeclarationAndGenerator();\n\t\t\t\t};\n\t\t\t\t// async Identifier => ...\n\t\t\t\tif (Token.isAnyIdentifier(this.peek().token) && this.peekAhead().isType(Token.ARROW)) {\n\t\t\t\t\ttoken = this.next();\n\t\t\t\t\tkind = ArrowFunctionType.ASYNC;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.peek().isType(Token.ARROW)) {\n\t\t\t\tconst name = this.parseAndClassifyIdentifier(token);\n\t\t\t\tconst params: Param[] = [];\n\t\t\t\tif (name instanceof SequenceExpression) {\n\t\t\t\t\tparams.push(...name.getExpressions().map(this.toParamNode));\n\t\t\t\t} else {\n\t\t\t\t\tparams.push(this.toParamNode(name));\n\t\t\t\t}\n\t\t\t\treturn this.parseArrowFunctionLiteral(params, kind);\n\t\t\t}\n\t\t\treturn this.parseAndClassifyIdentifier(token);\n\t\t}\n\n\t\tif (Token.isLiteral(token.token)) {\n\t\t\treturn expressionFromLiteral(this.next());\n\t\t}\n\n\t\tswitch (token.token) {\n\t\t\tcase Token.NEW:\n\t\t\t\treturn this.parseMemberWithPresentNewPrefixesExpression();\n\t\t\tcase Token.THIS:\n\t\t\t\tthis.consume(Token.THIS);\n\t\t\t\treturn ThisNode;\n\t\t\tcase Token.DIV:\n\t\t\tcase Token.DIV_ASSIGN:\n\t\t\t\t// case Token.REGEXP_LITERAL:\n\t\t\t\t// this.consume(Token.REGEXP_LITERAL);\n\t\t\t\t// return token.value!;\n\t\t\t\treturn this.parseRegExpLiteral();\n\t\t\tcase Token.FUNCTION:\n\t\t\t\tthis.consume(Token.FUNCTION);\n\t\t\t\tif (this.peek().isType(Token.MUL)) {\n\t\t\t\t\tthis.consume(Token.MUL);\n\t\t\t\t\treturn this.parseFunctionExpression(FunctionKind.GENERATOR);\n\t\t\t\t}\n\t\t\t\treturn this.parseFunctionExpression(FunctionKind.NORMAL);\n\t\t\tcase Token.SUPER: {\n\t\t\t\treturn this.parseSuperExpression();\n\t\t\t}\n\t\t\tcase Token.IMPORT:\n\t\t\t\treturn this.parseImportExpressions();\n\n\t\t\tcase Token.L_BRACKETS:\n\t\t\t\treturn this.parseArrayLiteral(false);\n\n\t\t\tcase Token.L_CURLY:\n\t\t\t\treturn this.parseObjectLiteral(false);\n\n\t\t\tcase Token.L_PARENTHESES: {\n\t\t\t\tthis.consume(Token.L_PARENTHESES);\n\t\t\t\tif (this.check(Token.R_PARENTHESES)) {\n\t\t\t\t\t// ()=>x. The continuation that consumes the => is in\n\t\t\t\t\t// ParseAssignmentExpressionCoverGrammar.\n\n\t\t\t\t\tif (!this.peek().isType(Token.ARROW)) {\n\t\t\t\t\t\tthrow new Error(this.errorMessage(`Unexpected Token: ${Token.R_PARENTHESES.getName()}`));\n\t\t\t\t\t}\n\t\t\t\t\treturn this.parseArrowFunctionLiteral([], ArrowFunctionType.NORMAL);\n\t\t\t\t}\n\t\t\t\t// Heuristically try to detect immediately called functions before\n\t\t\t\t// seeing the call parentheses.\n\n\t\t\t\tconst peekToken = this.peek();\n\t\t\t\tlet expression: ExpressionNode;\n\t\t\t\tconst info: FunctionInfo = {};\n\t\t\t\tif (peekToken.isType(Token.FUNCTION)) {\n\t\t\t\t\tthis.consume(Token.FUNCTION);\n\t\t\t\t\texpression = this.parseFunctionLiteral(FunctionKind.NORMAL);\n\t\t\t\t} else if (peekToken.isType(Token.ASYNC) && this.peekAhead().isType(Token.FUNCTION)) {\n\t\t\t\t\tthis.consume(Token.ASYNC);\n\t\t\t\t\tthis.consume(Token.FUNCTION);\n\t\t\t\t\texpression = this.parseFunctionLiteral(FunctionKind.ASYNC);\n\t\t\t\t} else {\n\t\t\t\t\texpression = this.parseExpressionCoverGrammar(info);\n\t\t\t\t}\n\t\t\t\tthis.expect(Token.R_PARENTHESES);\n\t\t\t\tif (this.peek().isType(Token.ARROW)) {\n\t\t\t\t\tif (expression instanceof SequenceExpression) {\n\t\t\t\t\t\texpression = this.parseArrowFunctionLiteral(expression.getExpressions(), ArrowFunctionType.NORMAL, info.rest);\n\t\t\t\t\t} else {\n\t\t\t\t\t\texpression = this.parseArrowFunctionLiteral([expression], ArrowFunctionType.NORMAL, info.rest);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn expression;\n\t\t\t}\n\t\t\tcase Token.CLASS: {\n\t\t\t\tthis.consume(Token.CLASS);\n\t\t\t\tlet name: ExpressionNode | undefined;\n\t\t\t\tlet isStrictReserved = false;\n\t\t\t\tif (this.peekAnyIdentifier()) {\n\t\t\t\t\tname = this.parseAndClassifyIdentifier(this.next());\n\t\t\t\t\tisStrictReserved = Token.isStrictReservedWord(this.current().token);\n\t\t\t\t}\n\t\t\t\treturn this.parseClassLiteral(name, isStrictReserved);\n\t\t\t}\n\t\t\tcase Token.TEMPLATE_LITERALS:\n\t\t\t\treturn this.parseTemplateLiteral();\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t\tthrow new Error(this.errorMessage(`Unexpected Token: ${JSON.stringify(this.next())}`));\n\t}\n\tprotected parseTemplateLiteral(tag?: ExpressionNode): ExpressionNode {\n\t\tconst template = this.next().getValue() as PreTemplateLiteral;\n\t\tconst exprs = template.expressions.map(expr => JavaScriptParser.parse(expr));\n\n\t\tif (tag) {\n\t\t\treturn new TaggedTemplateExpression(tag, template.strings, exprs);\n\t\t} else {\n\t\t\treturn new TemplateLiteral(template.strings, exprs);\n\t\t}\n\t}\n\tprotected parseMemberWithPresentNewPrefixesExpression(): ExpressionNode {\n\t\tthis.consume(Token.NEW);\n\t\tlet classRef: ExpressionNode;\n\t\tif (this.peek().isType(Token.IMPORT) && this.peekAhead().isType(Token.L_PARENTHESES)) {\n\t\t\tthrow new Error(this.errorMessage(`parsing new import (`));\n\t\t} else if (this.peek().isType(Token.SUPER)) {\n\t\t\tthrow new Error(this.errorMessage(`parsing new super() is never allowed`));\n\t\t} else if (this.peek().isType(Token.PERIOD)) {\n\t\t\tclassRef = this.parseNewTargetExpression();\n\t\t\treturn this.parseMemberExpressionContinuation(classRef);\n\t\t} else {\n\t\t\tclassRef = this.parseMemberExpression();\n\t\t}\n\t\tif (this.peek().isType(Token.L_PARENTHESES)) {\n\t\t\t// NewExpression with arguments.\n\t\t\tconst args: ExpressionNode[] = this.parseArguments();\n\t\t\tclassRef = new NewExpression(classRef, args);\n\t\t\t// The expression can still continue with . or [ after the arguments.\n\t\t\treturn this.parseMemberExpressionContinuation(classRef);\n\t\t}\n\t\tif (this.peek().isType(Token.QUESTION_PERIOD)) {\n\t\t\tthrow new Error(this.errorMessage(`parsing new xxx?.yyy at position`));\n\t\t}\n\t\treturn new NewExpression(classRef);\n\t}\n\tprotected parseArguments(maybeArrow?: ParsingArrowHeadFlag): ExpressionNode[] {\n\t\t// Arguments ::\n\t\t// '(' (AssignmentExpression)*[','] ')'\n\n\t\tthis.consume(Token.L_PARENTHESES);\n\t\tconst args: ExpressionNode[] = [];\n\t\twhile (this.peek().isNotType(Token.R_PARENTHESES)) {\n\t\t\tconst isSpread = this.check(Token.ELLIPSIS);\n\t\t\tlet argument: ExpressionNode = this.parseAssignmentExpressionCoverGrammar();\n\t\t\tif (ParsingArrowHeadFlag.MaybeArrowHead === maybeArrow) {\n\t\t\t\tif (isSpread) {\n\t\t\t\t\tif (argument instanceof AssignmentExpression) {\n\t\t\t\t\t\tthrow new Error(this.errorMessage(` Rest parameter may not have a default initializer'`));\n\t\t\t\t\t}\n\t\t\t\t\tif (this.peek().isType(Token.COMMA)) {\n\t\t\t\t\t\tthrow new Error(this.errorMessage(`parsing '...spread,arg =>'`));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (isSpread) {\n\t\t\t\targument = new SpreadElement(argument);\n\t\t\t}\n\t\t\targs.push(argument);\n\t\t\tif (!this.check(Token.COMMA)) break;\n\t\t}\n\t\tif (!this.check(Token.R_PARENTHESES)) {\n\t\t\tthrow new Error(this.errorMessage(`parsing arguments call, expecting ')'`));\n\t\t}\n\t\treturn args;\n\t}\n\tprotected parseAssignmentExpressionCoverGrammar(): ExpressionNode {\n\t\t// AssignmentExpression ::\n\t\t// ConditionalExpression\n\t\t// ArrowFunction\n\t\t// YieldExpression\n\t\t// LeftHandSideExpression AssignmentOperator AssignmentExpression\n\n\t\tif (this.peek().isType(Token.YIELD) /*&& this.isGenerator()*/) {\n\t\t\treturn this.parseYieldExpression();\n\t\t}\n\t\tlet expression: ExpressionNode = this.parseConditionalExpression();\n\t\tconst op = this.peek().token;\n\t\tif (!Token.isArrowOrAssignmentOp(op)) return expression;\n\t\t// Arrow functions.\n\t\tif (op === Token.ARROW) {\n\t\t\tif (!this.isIdentifier(expression) && !this.isParenthesized(expression)) {\n\t\t\t\tthrow new Error(this.errorMessage(`Malformed Arrow Fun Param List`));\n\t\t\t}\n\t\t\tif (expression instanceof SequenceExpression) {\n\t\t\t\tconst params = expression.getExpressions().map(expr => new Param(expr as CanDeclareExpression));\n\t\t\t\treturn this.parseArrowFunctionLiteral(params, ArrowFunctionType.NORMAL);\n\t\t\t}\n\t\t\tif (expression instanceof GroupingExpression) {\n\t\t\t\treturn this.parseArrowFunctionLiteral([new Param(expression.getNode() as CanDeclareExpression)], ArrowFunctionType.NORMAL);\n\t\t\t}\n\t\t\treturn this.parseArrowFunctionLiteral([new Param(expression)], ArrowFunctionType.NORMAL);\n\t\t}\n\t\tif (this.isAssignableIdentifier(expression)) {\n\t\t\tif (this.isParenthesized(expression)) {\n\t\t\t\tthrow new Error(this.errorMessage(`Invalid Destructuring Target`));\n\t\t\t}\n\t\t} else if (this.isProperty(expression)) {\n\t\t\t// throw new Error(this.errorMessage(`Invalid Property Binding Pattern`));\n\t\t} else if (this.isPattern(expression) && Token.isAssignment(op)) {\n\t\t\t// Destructuring assignment.\n\t\t\tif (this.isParenthesized(expression)) {\n\t\t\t\t// Scanner.Location loc(lhs_beg_pos, end_position());\n\t\t\t\t// if (expression_scope() -> IsCertainlyDeclaration()) {\n\t\t\t\t// \timpl() -> ReportMessageAt(loc,\n\t\t\t\t// \t\tMessageTemplate.kInvalidDestructuringTarget);\n\t\t\t\t// } else {\n\t\t\t\t// \t// Syntax Error if LHS is neither object literal nor an array literal\n\t\t\t\t// \t// (Parenthesized literals are\n\t\t\t\t// \t// CoverParenthesizedExpressionAndArrowParameterList).\n\t\t\t\t// \t// #sec-assignment-operators-static-semantics-early-errors\n\t\t\t\t// \timpl() -> ReportMessageAt(loc, MessageTemplate.kInvalidLhsInAssignment);\n\t\t\t\t// }\n\t\t\t}\n\t\t\t// expression_scope() -> ValidateAsPattern(expression, lhs_beg_pos, end_position());\n\t\t} else {\n\t\t\tif (!this.isValidReferenceExpression(expression)) {\n\t\t\t\tthrow new Error(this.errorMessage(`Invalid Reference Expression`));\n\t\t\t}\n\t\t\tif (Token.isLogicalAssignmentOp(op)) {\n\t\t\t\tthrow new Error(this.errorMessage(`Invalid Lhs In Assignment`));\n\t\t\t}\n\t\t}\n\n\t\tthis.consume(op);\n\t\t// const opPosition = this.position();\n\t\tconst right: ExpressionNode = this.parseAssignmentExpression();\n\t\t// Anonymous function name inference applies to =, ||=, &&=, and ??=.\n\n\t\tif (!Token.isAssignment(op)) {\n\t\t\tthrow new Error(this.errorMessage(`Invalid Destructuring Target`));\n\t\t}\n\t\treturn new AssignmentExpression(op.getName() as AssignmentOperator, expression, right);\n\t}\n\tprotected parseAssignmentExpression(): ExpressionNode {\n\t\treturn this.parseAssignmentExpressionCoverGrammar();\n\t}\n\tprotected parseArrowFunctionLiteral(parameters: ExpressionNode[], flag: ArrowFunctionType, rest?: boolean): ExpressionNode {\n\t\tthis.consume(Token.ARROW);\n\t\tconst body = this.parseArrowFunctionBody();\n\t\treturn new ArrowFunctionExpression(parameters, body, flag, rest);\n\t}\n\tprotected parseRegExpLiteral(): ExpressionNode {\n\t\tif (!this.scanner.scanRegExpPattern()) {\n\t\t\tthrow new Error('Unterminated RegExp');\n\t\t}\n\t\treturn this.scanner.currentToken().getValue();\n\t}\n\tprotected parseArrayLiteral(isPattern: boolean): ExpressionNode {\n\t\t// ArrayLiteral ::\n\t\t// '[' Expression? (',' Expression?)* ']'\n\n\t\tthis.consume(Token.L_BRACKETS);\n\t\tconst values: ExpressionNode[] = [];\n\t\tlet firstSpreadIndex = -1;\n\n\t\twhile (!this.check(Token.R_BRACKETS)) {\n\t\t\tlet elem: ExpressionNode;\n\t\t\tif (this.peek().isType(Token.COMMA)) {\n\t\t\t\tthis.consume(Token.COMMA);\n\t\t\t\tcontinue;\n\t\t\t} else if (this.check(Token.ELLIPSIS)) {\n\t\t\t\tconst argument = this.parsePossibleDestructuringSubPattern();\n\t\t\t\telem = isPattern\n\t\t\t\t\t? new RestElement(argument as CanDeclareExpression)\n\t\t\t\t\t: new SpreadElement(argument)\n\n\t\t\t\tif (firstSpreadIndex < 0) {\n\t\t\t\t\tfirstSpreadIndex = values.length;\n\t\t\t\t}\n\t\t\t\tif (this.peek().isType(Token.COMMA)) {\n\t\t\t\t\tthrow new Error(this.errorMessage(`Element After Rest @${this.position()}`));\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\telem = this.parsePossibleDestructuringSubPattern();\n\t\t\t}\n\t\t\tvalues.push(elem);\n\t\t}\n\t\tif (isPattern) {\n\t\t\treturn new ArrayPattern(values as CanDeclareExpression[]);\n\t\t}\n\t\treturn new ArrayExpression(values);\n\t}\n\tprotected parsePossibleDestructuringSubPattern(): ExpressionNode {\n\t\treturn this.parseAssignmentExpressionCoverGrammar();\n\t}\n\tprotected parseObjectLiteral(isPattern: boolean): ExpressionNode {\n\t\t// ObjectLiteral ::\n\t\t// '{' (PropertyDefinition (',' PropertyDefinition)* ','? )? '}'\n\n\t\tthis.consume(Token.L_CURLY);\n\t\tconst properties: ExpressionNode[] = [];\n\t\twhile (!this.check(Token.R_CURLY)) {\n\t\t\tconst property: ExpressionNode = this.parseObjectPropertyDefinition(isPattern);\n\t\t\tproperties.push(property);\n\t\t\tif (this.peek().isNotType(Token.R_CURLY)) {\n\t\t\t\tthis.expect(Token.COMMA);\n\t\t\t}\n\t\t}\n\t\tif (isPattern) {\n\t\t\treturn new ObjectPattern(properties as (Property | RestElement)[]);\n\t\t}\n\t\treturn new ObjectExpression(properties as Property[]);\n\t}\n\tprotected parseObjectPropertyDefinition(isPattern: boolean): ExpressionNode {\n\t\tconst propInfo = { kind: PropertyKind.NotSet } as Required<PropertyKindInfo>;\n\t\tconst nameExpression = this.parseProperty(propInfo);\n\n\t\tswitch (propInfo.kind) {\n\t\t\tcase PropertyKind.Spread:\n\t\t\t\tlet value: SpreadElement | RestElement = nameExpression as SpreadElement;\n\t\t\t\tif (isPattern) {\n\t\t\t\t\tvalue = new RestElement(value.getArgument() as CanDeclareExpression);\n\t\t\t\t}\n\t\t\t\treturn new Property(value.getArgument(), value, 'init');\n\n\t\t\tcase PropertyKind.Value: {\n\t\t\t\tthis.consume(Token.COLON);\n\t\t\t\tconst value = this.parsePossibleDestructuringSubPattern();\n\t\t\t\treturn new Property(nameExpression, value, 'init');\n\t\t\t}\n\n\t\t\tcase PropertyKind.Assign:\n\t\t\tcase PropertyKind.ShorthandOrClassField:\n\t\t\tcase PropertyKind.Shorthand: {\n\t\t\t\t// PropertyDefinition\n\t\t\t\t// IdentifierReference\n\t\t\t\t// CoverInitializedName\n\t\t\t\t//\n\t\t\t\t// CoverInitializedName\n\t\t\t\t// IdentifierReference Initializer?\n\n\t\t\t\tconst lhs = new Identifier(propInfo.name);\n\t\t\t\tif (!this.isAssignableIdentifier(lhs)) {\n\t\t\t\t\tthrow new Error(this.errorMessage('Strict Eval Arguments'));\n\t\t\t\t}\n\t\t\t\tlet value: ExpressionNode;\n\t\t\t\tif (this.peek().isType(Token.ASSIGN)) {\n\t\t\t\t\tthis.consume(Token.ASSIGN);\n\t\t\t\t\tconst rhs = this.parseAssignmentExpression();\n\t\t\t\t\tvalue = new AssignmentExpression(Token.ASSIGN.getName() as AssignmentOperator, lhs, rhs);\n\t\t\t\t} else {\n\t\t\t\t\tvalue = lhs;\n\t\t\t\t}\n\t\t\t\treturn new Property(nameExpression, value, 'init');\n\t\t\t}\n\n\t\t\tcase PropertyKind.Method: {\n\t\t\t\t// MethodDefinition\n\t\t\t\t// PropertyName '(' StrictFormalParameters ')' '{' FunctionBody '}'\n\t\t\t\t// '*' PropertyName '(' StrictFormalParameters ')' '{' FunctionBody '}'\n\n\t\t\t\tconst value = this.parseFunctionLiteral(propInfo.funcFlag);\n\t\t\t\treturn new Property(nameExpression, value, 'init');\n\t\t\t}\n\n\t\t\tcase PropertyKind.AccessorGetter:\n\t\t\tcase PropertyKind.AccessorSetter: {\n\t\t\t\tconst isGet = propInfo.kind == PropertyKind.AccessorGetter;\n\t\t\t\tconst value = this.parseFunctionLiteral(propInfo.funcFlag);\n\t\t\t\treturn new Property(nameExpression, value, isGet ? 'get' : 'set');\n\t\t\t}\n\n\t\t\tcase PropertyKind.ClassField:\n\t\t\tcase PropertyKind.NotSet:\n\t\t\t\treturn NullNode;\n\t\t}\n\t}\n\tprotected parseProperty(propInfo: PropertyKindInfo): ExpressionNode {\n\t\tlet nextToken = this.peek();\n\t\tif (this.check(Token.ASYNC)) {\n\t\t\t// async\n\t\t\tnextToken = this.peek();\n\t\t\tif (nextToken.isNotType(Token.MUL)\n\t\t\t\t&& parsePropertyKindFromToken(nextToken.token, propInfo)\n\t\t\t\t|| this.scanner.hasLineTerminatorBeforeNext()) {\n\t\t\t\treturn AsyncIdentifier;\n\t\t\t}\n\t\t\tpropInfo.kind = PropertyKind.Method;\n\t\t\tpropInfo.funcFlag = FunctionKind.ASYNC;\n\t\t}\n\n\t\tif (this.check(Token.MUL)) {\n\t\t\t// async*\n\t\t\tpropInfo.kind = PropertyKind.Method;\n\t\t\tpropInfo.funcFlag = FunctionKind.ASYNC_GENERATOR;\n\t\t}\n\n\t\tnextToken = this.peek();\n\t\tif (propInfo.kind == PropertyKind.NotSet && nextToken.isType(Token.GET) || nextToken.isType(Token.SET)) {\n\t\t\tconst token = this.next();\n\t\t\tif (parsePropertyKindFromToken(this.peek().token, propInfo)) {\n\t\t\t\treturn nextToken.isType(Token.GET) ? GetIdentifier : SetIdentifier;\n\t\t\t}\n\t\t\tif (token.isType(Token.GET)) {\n\t\t\t\tpropInfo.kind = PropertyKind.AccessorGetter;\n\t\t\t} else if (token.isType(Token.SET)) {\n\t\t\t\tpropInfo.kind = PropertyKind.AccessorSetter;\n\t\t\t}\n\t\t}\n\t\tlet propertyName: ExpressionNode;\n\t\tswitch (nextToken.token) {\n\t\t\tcase Token.PRIVATE_NAME:\n\t\t\t\tthis.consume(Token.PRIVATE_NAME);\n\t\t\t\tif (propInfo.kind == PropertyKind.NotSet) {\n\t\t\t\t\tparsePropertyKindFromToken(this.peek().token, propInfo);\n\t\t\t\t}\n\t\t\t\tpropertyName = this.getIdentifier();\n\t\t\t\tbreak;\n\t\t\tcase Token.STRING:\n\t\t\tcase Token.NUMBER:\n\t\t\tcase Token.BIGINT:\n\t\t\t\t// \"12\" -> 12\n\t\t\t\t// 12.3 -> \"12.3\"\n\t\t\t\t// 12.30 -> \"12.3\"\n\t\t\t\tthis.consume(nextToken.token);\n\t\t\t\tpropertyName = nextToken.getValue();\n\t\t\t\tpropInfo.name = (propertyName as StringLiteral).getValue();\n\t\t\t\tbreak;\n\t\t\tcase Token.L_BRACKETS:\n\t\t\t\t// [Symbol.iterator]\n\t\t\t\tthis.consume(Token.L_BRACKETS);\n\t\t\t\tpropertyName = this.parseAssignmentExpression();\n\t\t\t\tthis.expect(Token.R_BRACKETS);\n\t\t\t\tif (propInfo.kind === PropertyKind.NotSet) {\n\t\t\t\t\tparsePropertyKindFromToken(this.peek().token, propInfo);\n\t\t\t\t}\n\t\t\t\tpropInfo.name = propertyName.toString();\n\t\t\t\treturn propertyName;\n\t\t\tcase Token.ELLIPSIS:\n\t\t\t\tif (propInfo.kind == PropertyKind.NotSet) {\n\t\t\t\t\tthis.consume(Token.ELLIPSIS);\n\t\t\t\t\tpropertyName = this.parsePossibleDestructuringSubPattern();\n\t\t\t\t\tpropInfo.kind = PropertyKind.Spread;\n\n\t\t\t\t\tif (!this.isValidReferenceExpression(propertyName)) {\n\t\t\t\t\t\tthrow new Error(this.errorMessage('Invalid Rest Binding/Assignment Pattern'));\n\t\t\t\t\t}\n\t\t\t\t\tif (this.peek().isNotType(Token.R_CURLY)) {\n\t\t\t\t\t\tthrow new Error(this.errorMessage('Element After Rest'));\n\t\t\t\t\t}\n\t\t\t\t\tpropInfo.name = propertyName.toString();\n\t\t\t\t\treturn propertyName;\n\t\t\t\t}\n\t\t\tdefault:\n\t\t\t\tpropertyName = new StringLiteral(this.parsePropertyName().toString());\n\t\t\t\t// propertyName = this.parsePropertyName();\n\t\t\t\tpropInfo.name = propertyName.toString();\n\t\t\t\tbreak;\n\t\t}\n\t\tif (propInfo.kind === PropertyKind.NotSet) {\n\t\t\tparsePropertyKindFromToken(this.peek().token, propInfo);\n\t\t}\n\t\treturn propertyName;\n\t}\n\tprotected parseMemberExpressionContinuation(expression: ExpressionNode): ExpressionNode {\n\t\tif (!Token.isMember(this.peek().token)) return expression;\n\t\treturn this.doParseMemberExpressionContinuation(expression);\n\t}\n\tprotected doParseMemberExpressionContinuation(expression: ExpressionNode): ExpressionNode {\n\t\tif (!Token.isMember(this.peek().token)) {\n\t\t\tthrow new Error(this.errorMessage(`Parsing member expression`));\n\t\t}\n\t\t// Parses this part of MemberExpression:\n\t\t// ('[' Expression ']' | '.' Identifier | TemplateLiteral)*\n\t\tdo {\n\t\t\tswitch (this.peek().token) {\n\t\t\t\tcase Token.L_BRACKETS: {\n\t\t\t\t\tthis.consume(Token.L_BRACKETS);\n\t\t\t\t\tconst index = this.parseExpressionCoverGrammar();\n\t\t\t\t\texpression = new MemberExpression(expression, index, true);\n\t\t\t\t\tthis.expect(Token.R_BRACKETS);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase Token.PERIOD: {\n\t\t\t\t\tthis.consume(Token.PERIOD);\n\t\t\t\t\tconst key: ExpressionNode = this.parsePropertyName();\n\t\t\t\t\texpression = new MemberExpression(expression, key, false);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase Token.TEMPLATE_LITERALS: {\n\t\t\t\t\texpression = this.parseTemplateLiteral(expression);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tdefault:\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t} while (Token.isMember(this.peek().token));\n\t\treturn expression;\n\t}\n\tprotected parsePropertyName(): ExpressionNode {\n\t\tconst next = this.next();\n\t\tif (next.getValue() instanceof Identifier) {\n\t\t\treturn next.getValue();\n\t\t}\n\t\t// check keyword as identifier\n\t\tif (Token.isPropertyName(next.token)) {\n\t\t\treturn new Identifier(next.token.getName());\n\t\t}\n\t\tthrow new Error(this.errorMessage(`Parsing property expression: Unexpected Token`));\n\t}\n\tprotected parsePipelineExpression(expression: ExpressionNode): ExpressionNode {\n\t\t// ConditionalExpression ::\n\t\t// LogicalExpression\n\t\t// expression '|>' function [':' expression [':'? expression] ] *\n\t\t// expression '|>' function '('[expression ','?]* ')'\n\t\t//\n\t\t// expression '|>' function ':' expression [':' expression | '?']*]\n\t\t// expression '|>' function '(' expression [',' expression | '?']* ')'\n\t\t//\n\t\t// [~Await]PipelineExpression[?In, ?Yield, ?Await] |> LogicalORExpression[?In, ?Yield, ?Await]\n\t\t// [+Await]PipelineExpression[? In, ? Yield, ? Await] |> [lookahead ∉ { await }]LogicalORExpression[? In, ? Yield, ? Await]\n\n\t\tlet token: Token;\n\t\twhile (Token.isPipelineOperator(token = this.peek().token)) {\n\t\t\tthis.consume(token);\n\t\t\texpression = this.parsePipelineBody(expression);\n\t\t}\n\t\treturn expression;\n\t}\n\tprotected parsePipelineBody(lhs: ExpressionNode): ExpressionNode {\n\t\tlet body: ExpressionNode | undefined;\n\t\tlet token = this.peek();\n\t\t// parse function\n\t\tswitch (token.token) {\n\t\t\tcase Token.FUNCTION:\n\t\t\t\tthis.consume(Token.FUNCTION);\n\t\t\t\tif (this.peek().isType(Token.MUL)) {\n\t\t\t\t\tthis.consume(Token.MUL);\n\t\t\t\t\tbody = this.parseFunctionExpression(FunctionKind.GENERATOR);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tbody = this.parseFunctionExpression(FunctionKind.NORMAL);\n\t\t\t\tbreak;\n\t\t\tcase Token.ASYNC:\n\t\t\t\tif (this.peekAhead().isType(Token.FUNCTION)) {\n\t\t\t\t\tthis.consume(Token.ASYNC);\n\t\t\t\t\tthis.consume(Token.FUNCTION);\n\t\t\t\t\tif (this.peek().isType(Token.MUL)) {\n\t\t\t\t\t\tthis.consume(Token.MUL);\n\t\t\t\t\t\tbody = this.parseFunctionExpression(FunctionKind.ASYNC_GENERATOR);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tbody = this.parseFunctionExpression(FunctionKind.ASYNC);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t\tif (body) {\n\t\t\treturn new PipelineExpression(lhs, body);\n\t\t}\n\t\tif (token.isType(Token.L_PARENTHESES)) {\n\t\t\t// parse arrow function\n\t\t\t// x |> ( y => y+1 )\n\t\t\tbody = this.parsePrimaryExpression();\n\t\t\treturn new PipelineExpression(lhs, body);\n\t\t}\n\n\t\t// parse angular-like and f# and partial operator syntax\n\t\tconst func = this.parseMemberExpression(); //this.parseLogicalExpression();\n\t\tlet args: (ExpressionNode | '?' | '...?')[] = [];\n\t\tswitch (this.peek().token) {\n\t\t\tcase Token.COLON:\n\t\t\t\t// support angular pipeline syntax\n\t\t\t\tdo {\n\t\t\t\t\tthis.consume(Token.COLON);\n\t\t\t\t\tconst isSpread = this.check(Token.ELLIPSIS);\n\t\t\t\t\tif (this.peek().isType(Token.CONDITIONAL)) {\n\t\t\t\t\t\tthis.consume(Token.CONDITIONAL);\n\t\t\t\t\t\tif (isSpread) {\n\t\t\t\t\t\t\targs.push('...?');\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\targs.push('?');\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst arg = this.parseAssignmentExpressionCoverGrammar();\n\t\t\t\t\t\tif (isSpread) {\n\t\t\t\t\t\t\targs.push(new SpreadElement(arg));\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\targs.push(arg);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} while (this.peek().isType(Token.COLON));\n\t\t\t\tbreak;\n\t\t\tcase Token.L_PARENTHESES:\n\t\t\t\t// es2022 syntax, F# & partial operator\n\t\t\t\tthis.consume(Token.L_PARENTHESES);\n\t\t\t\tlet indexed = false;\n\t\t\t\twhile (this.peek().isNotType(Token.R_PARENTHESES)) {\n\t\t\t\t\tconst isSpread = this.check(Token.ELLIPSIS);\n\t\t\t\t\tif (this.peek().isType(Token.CONDITIONAL)) {\n\t\t\t\t\t\tthis.consume(Token.CONDITIONAL);\n\t\t\t\t\t\tindexed = true;\n\t\t\t\t\t\tif (isSpread) {\n\t\t\t\t\t\t\targs.push('...?');\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\targs.push('?');\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst arg = this.parseAssignmentExpressionCoverGrammar();\n\t\t\t\t\t\tif (isSpread) {\n\t\t\t\t\t\t\targs.push(new SpreadElement(arg));\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\targs.push(arg);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis.check(Token.COMMA);\n\t\t\t\t}\n\t\t\t\tthis.expect(Token.R_PARENTHESES);\n\t\t\t\t// should be indexed, has partial operator\n\t\t\t\tif (!indexed) {\n\t\t\t\t\t// z |> method(x, y) === method(x, y)(z)\n\t\t\t\t\tbody = new CallExpression(func, args as ExpressionNode[]);\n\t\t\t\t\treturn new PipelineExpression(lhs, body);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t\treturn new PipelineExpression(lhs, func, args);\n\t}\n\tprotected parseConditionalExpression(): ExpressionNode {\n\t\t// ConditionalExpression ::\n\t\t// LogicalExpression\n\t\t// LogicalExpression '?' AssignmentExpression ':' AssignmentExpression\n\t\t//\n\n\t\tlet expression: ExpressionNode = this.parseLogicalExpression();\n\t\texpression = this.parsePipelineExpression(expression);\n\t\treturn this.peek().isType(Token.CONDITIONAL) ? this.parseConditionalContinuation(expression) : expression;\n\t}\n\tprotected parseLogicalExpression(): ExpressionNode {\n\t\t// LogicalExpression ::\n\t\t// LogicalORExpression\n\t\t// CoalesceExpression\n\n\t\t// Both LogicalORExpression and CoalesceExpression start with BitwiseOR.\n\t\t// Parse for binary expressions >= 6 (BitwiseOR);\n\n\t\tlet expression: ExpressionNode = this.parseBinaryExpression(6);\n\t\tconst peek = this.peek();\n\t\tif (peek.isType(Token.AND) || peek.isType(Token.OR)) {\n\t\t\t// LogicalORExpression, pickup parsing where we left off.\n\t\t\tconst precedence = peek.token.getPrecedence();\n\t\t\texpression = this.parseBinaryContinuation(expression, 4, precedence);\n\t\t} else if (peek.isType(Token.NULLISH)) {\n\t\t\texpression = this.parseNullishExpression(expression);\n\t\t}\n\t\treturn expression;\n\t}\n\tprotected parseBinaryContinuation(x: ExpressionNode, prec: number, prec1: number): ExpressionNode {\n\t\tdo {\n\t\t\t// prec1 >= 4\n\t\t\twhile (this.peek().token.getPrecedence() === prec1) {\n\t\t\t\tlet y: ExpressionNode;\n\t\t\t\tlet op = this.next();\n\n\t\t\t\tconst is_right_associative = op.isType(Token.EXP);\n\t\t\t\tconst next_prec = is_right_associative ? prec1 : prec1 + 1;\n\t\t\t\ty = this.parseBinaryExpression(next_prec);\n\n\n\t\t\t\t// For now we distinguish between comparisons and other binary\n\t\t\t\t// operations. (We could combine the two and get rid of this\n\t\t\t\t// code and AST node eventually.)\n\n\t\t\t\tif (Token.isCompare(op.token)) {\n\t\t\t\t\t// We have a comparison.\n\t\t\t\t\tlet cmp = op.token;\n\t\t\t\t\tswitch (op.token) {\n\t\t\t\t\t\tcase Token.NE: cmp = Token.EQ; break;\n\t\t\t\t\t\tcase Token.NE_STRICT: cmp = Token.EQ_STRICT; break;\n\t\t\t\t\t\tdefault: break;\n\t\t\t\t\t}\n\t\t\t\t\tx = shortcutNumericLiteralBinaryExpression(x, y, cmp);\n\t\t\t\t\tif (op.isNotType(cmp)) {\n\t\t\t\t\t\t// The comparison was negated - add a NOT.\n\t\t\t\t\t\tx = buildUnaryExpression(x, Token.NOT);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tx = shortcutNumericLiteralBinaryExpression(x, y, op.token);\n\t\t\t\t}\n\t\t\t}\n\t\t\t--prec1;\n\t\t} while (prec1 >= prec);\n\n\t\treturn x;\n\t}\n\tprotected parseBinaryExpression(precedence: number): ExpressionNode {\n\t\tconst x: ExpressionNode = this.parseUnaryExpression();\n\t\tconst precedence1 = this.peek().token.getPrecedence();\n\t\tif (precedence1 >= precedence) {\n\t\t\treturn this.parseBinaryContinuation(x, precedence, precedence1);\n\t\t}\n\t\treturn x;\n\t}\n\tprotected parseUnaryExpression(): ExpressionNode {\n\t\t// UnaryExpression ::\n\t\t// PostfixExpression\n\t\t// 'delete' UnaryExpression\n\t\t// 'void' UnaryExpression\n\t\t// 'typeof' UnaryExpression\n\t\t// '++' UnaryExpression\n\t\t// '--' UnaryExpression\n\t\t// '+' UnaryExpression\n\t\t// '-' UnaryExpression\n\t\t// '~' UnaryExpression\n\t\t// '!' UnaryExpression\n\t\t// [+Await] AwaitExpression[?Yield]\n\n\t\tconst op = this.peek();\n\t\tif (Token.isUnaryOrCount(op.token)) {\n\t\t\treturn this.parseUnaryOrPrefixExpression();\n\t\t}\n\t\tif (op.isType(Token.AWAIT)) {\n\t\t\treturn this.parseAwaitExpression();\n\t\t}\n\t\treturn this.parsePostfixExpression();\n\t}\n\tprotected parseUnaryOrPrefixExpression(): ExpressionNode {\n\t\tconst op = this.next();\n\t\tconst expression = this.parseUnaryExpression();\n\t\tif (Token.isUnary(op.token)) {\n\t\t\tif (op.isType(Token.DELETE)) {\n\t\t\t\tif (this.isIdentifier(expression)) {\n\t\t\t\t\t// \"delete identifier\" is a syntax error in strict mode.\n\t\t\t\t\tthrow new Error(this.errorMessage(`\"delete identifier\" is a syntax error in strict mode`));\n\t\t\t\t}\n\t\t\t\tif (expression instanceof MemberExpression && expression.getProperty().toString().startsWith('#')) {\n\t\t\t\t\tthrow new Error(this.errorMessage(`\"Delete Private Field\" is a syntax error`));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.peek().isType(Token.EXP)) {\n\t\t\t\tthrow new Error(this.errorMessage(`Unexpected Token Unary Exponentiation`));\n\t\t\t}\n\t\t}\n\n\t\tif (Token.isCount(op.token) || Token.isUnary(op.token)) {\n\t\t\t// Allow the parser to rewrite the expression.\n\t\t\treturn buildUnaryExpression(expression, op.token);\n\t\t}\n\t\tthrow new Error(this.errorMessage(`while rewrite unary operation`));\n\t}\n\tprotected parsePostfixExpression(): ExpressionNode {\n\t\t// PostfixExpression ::\n\t\t// LeftHandSideExpression ('++' | '--')?\n\n\t\tconst expression: ExpressionNode = this.parseLeftHandSideExpression();\n\t\tif (!Token.isCount(this.peek().token) || this.scanner.hasLineTerminatorBeforeNext()) {\n\t\t\treturn expression;\n\t\t}\n\t\treturn this.parsePostfixContinuation(expression);\n\t}\n\tprotected parsePostfixContinuation(expression: ExpressionNode): ExpressionNode {\n\t\tif (!this.isValidReferenceExpression(expression)) {\n\t\t\tthrow new Error(this.errorMessage(`Invalid LHS In Postfix Op.`));\n\t\t}\n\t\tconst op = this.next();\n\t\treturn buildPostfixExpression(expression, op.token);\n\t}\n\tprotected parseLeftHandSideExpression(): ExpressionNode {\n\t\t// LeftHandSideExpression ::\n\t\t// (NewExpression | MemberExpression) ...\n\t\tconst result = this.parseMemberExpression();\n\t\tif (!Token.isPropertyOrCall(this.peek().token)) return result;\n\t\treturn this.parseLeftHandSideContinuation(result);\n\t}\n\tprotected parseLeftHandSideContinuation(result: ExpressionNode): ExpressionNode {\n\t\tif (this.peek().isType(Token.L_PARENTHESES)\n\t\t\t&& this.isIdentifier(result)\n\t\t\t&& this.scanner.currentToken().isType(Token.ASYNC)\n\t\t\t&& !this.scanner.hasLineTerminatorBeforeNext()) {\n\t\t\tconst args = this.parseArguments(ParsingArrowHeadFlag.AsyncArrowFunction);\n\t\t\tif (this.peek().isType(Token.ARROW)) {\n\t\t\t\t// async () => ...\n\t\t\t\tif (!args.length) return new EmptyStatement;\n\t\t\t\t// async ( Arguments ) => ...\n\t\t\t\treturn this.expressionListToExpression(args);\n\t\t\t}\n\t\t\tresult = new CallExpression(result, args);\n\t\t\tif (!Token.isPropertyOrCall(this.peek().token)) return result;\n\t\t}\n\n\t\tlet optionalChaining = false;\n\t\tlet isOptional = false;\n\t\tdo {\n\t\t\tswitch (this.peek().token) {\n\t\t\t\t// chain\n\t\t\t\tcase Token.QUESTION_PERIOD: {\n\t\t\t\t\tif (isOptional) {\n\t\t\t\t\t\tthrow new Error(this.errorMessage(`Failure Expression`));\n\t\t\t\t\t}\n\t\t\t\t\tthis.consume(Token.QUESTION_PERIOD);\n\t\t\t\t\tisOptional = true;\n\t\t\t\t\toptionalChaining = true;\n\t\t\t\t\tif (Token.isPropertyOrCall(this.peek().token)) continue;\n\t\t\t\t\tconst key = this.parsePropertyName();\n\t\t\t\t\tresult = new MemberExpression(result, key, false, isOptional);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\t/* Property */\n\t\t\t\tcase Token.L_BRACKETS: {\n\t\t\t\t\tthis.consume(Token.L_BRACKETS);\n\t\t\t\t\tconst index = this.parseExpressionCoverGrammar();\n\t\t\t\t\tresult = new MemberExpression(result, index, true, isOptional);\n\t\t\t\t\tthis.expect(Token.R_BRACKETS);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\t/* Property */\n\t\t\t\tcase Token.PERIOD: {\n\t\t\t\t\tif (isOptional) {\n\t\t\t\t\t\tthrow new Error(this.errorMessage(`Unexpected Token:${this.position()}`));\n\t\t\t\t\t}\n\t\t\t\t\tthis.consume(Token.PERIOD);\n\t\t\t\t\tconst key = this.parsePropertyName();\n\t\t\t\t\tresult = new MemberExpression(result, key, false, isOptional);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\t/* Call */\n\t\t\t\tcase Token.L_PARENTHESES: {\n\t\t\t\t\tconst args = this.parseArguments();\n\t\t\t\t\tif (result.toString() === 'eval') {\n\t\t\t\t\t\tthrow new Error(this.errorMessage(`'eval(...)' is not supported.`));\n\t\t\t\t\t}\n\t\t\t\t\tresult = new CallExpression(result, args, isOptional);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\t/* bind call */\n\t\t\t\tcase Token.BIND: {\n\t\t\t\t\tif (isOptional) {\n\t\t\t\t\t\tthrow new Error(this.errorMessage(`Unexpected Token:${this.position()}`));\n\t\t\t\t\t}\n\t\t\t\t\tthis.consume(Token.BIND);\n\t\t\t\t\tconst key = this.parsePropertyName();\n\t\t\t\t\tresult = new BindExpression(result, key, false, isOptional);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\t/* chain bind call */\n\t\t\t\tcase Token.QUESTION_BIND: {\n\t\t\t\t\tif (isOptional) {\n\t\t\t\t\t\tthrow new Error(this.errorMessage(`Failure Expression`));\n\t\t\t\t\t}\n\t\t\t\t\tthis.consume(Token.QUESTION_BIND);\n\t\t\t\t\tisOptional = true;\n\t\t\t\t\toptionalChaining = true;\n\t\t\t\t\tconst key = this.parsePropertyName();\n\t\t\t\t\tresult = new BindExpression(result, key, true, isOptional);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tdefault:\n\t\t\t\t\t// Template literals in/after an Optional Chain not supported:\n\t\t\t\t\tif (optionalChaining) {\n\t\t\t\t\t\tthrow new Error(this.errorMessage(`Optional Chaining No Template support`));\n\t\t\t\t\t}\n\t\t\t\t\t/* Tagged Template */\n\t\t\t\t\tresult = this.parseTemplateLiteral(result);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (isOptional) {\n\t\t\t\tisOptional = false;\n\t\t\t}\n\t\t} while (Token.isPropertyOrCall(this.peek().token));\n\t\tif (optionalChaining) {\n\t\t\tresult = new ChainExpression(result);\n\t\t}\n\t\treturn result;\n\t}\n\tprotected parseAwaitExpression(): ExpressionNode {\n\t\tthis.consume(Token.AWAIT);\n\t\tconst value = this.parseUnaryExpression();\n\t\tif (this.peek().isType(Token.EXP)) {\n\t\t\tthrow new Error(this.scanner.createError(`Unexpected Token Unary Exponentiation`));\n\t\t}\n\t\treturn buildUnaryExpression(value, Token.AWAIT);\n\t}\n\tprotected parseNullishExpression(expression: ExpressionNode): ExpressionNode {\n\t\t// CoalesceExpression ::\n\t\t// CoalesceExpressionHead ?? BitwiseORExpression\n\t\t//\n\t\t// CoalesceExpressionHead ::\n\t\t// CoalesceExpression\n\t\t// BitwiseORExpression\n\n\t\t// We create a binary operation for the first nullish, otherwise collapse\n\t\t// into an nary expression.\n\n\t\tconst list: ExpressionNode[] = [];\n\t\tlist.push(expression);\n\t\twhile (this.peek().isType(Token.NULLISH)) {\n\t\t\tthis.consume(Token.NULLISH);\n\t\t\t// Parse BitwiseOR or higher.\n\t\t\texpression = this.parseBinaryExpression(6);\n\t\t\tlist.push(expression);\n\t\t}\n\t\texpression = list.pop()!;\n\t\texpression = list.reverse()\n\t\t\t.reduce((previous, current) => new LogicalExpression(Token.NULLISH.getName() as LogicalOperator, current, previous), expression);\n\t\treturn expression;\n\t}\n\tprotected parseConditionalContinuation(expression: ExpressionNode): ExpressionNode {\n\t\tthis.consume(Token.CONDITIONAL);\n\t\tconst left: ExpressionNode = this.parseAssignmentExpression();\n\t\tthis.expect(Token.COLON);\n\t\tconst right = this.parseAssignmentExpression();\n\t\treturn new ConditionalExpression(expression, left, right);\n\t}\n\tprotected parseYieldExpression(): ExpressionNode {\n\t\t// YieldExpression ::\n\t\t// 'yield' ([no line terminator] '*'? AssignmentExpression)?\n\t\tthis.consume(Token.YIELD);\n\t\tlet delegating = false; // yield*\n\t\tlet expression: ExpressionNode | undefined;\n\t\tif (this.check(Token.MUL)) {\n\t\t\tdelegating = true;\n\t\t}\n\t\tswitch (this.peek().token) {\n\t\t\tcase Token.EOS:\n\t\t\tcase Token.SEMICOLON:\n\t\t\tcase Token.R_CURLY:\n\t\t\tcase Token.R_BRACKETS:\n\t\t\tcase Token.R_PARENTHESES:\n\t\t\tcase Token.COLON:\n\t\t\tcase Token.COMMA:\n\t\t\tcase Token.IN:\n\t\t\t\t// The above set of tokens is the complete set of tokens that can appear\n\t\t\t\t// after an AssignmentExpression, and none of them can start an\n\t\t\t\t// AssignmentExpression. This allows us to avoid looking for an RHS for\n\t\t\t\t// a regular yield, given only one look-ahead token.\n\t\t\t\tif (!delegating) break;\n\t\t\t\t// Delegating yields require an RHS; fall through.\n\t\t\t\t// V8_FALLTHROUGH;\n\t\t\t\tthrow new Error(this.errorMessage(`Delegating yields require an RHS`));\n\t\t\tdefault:\n\t\t\t\texpression = this.parseAssignmentExpressionCoverGrammar();\n\t\t\t\tbreak;\n\t\t}\n\t\treturn new YieldExpression(delegating, expression);\n\t}\n\tprotected parseNewTargetExpression(): ExpressionNode {\n\t\tthrow new Error(this.errorMessage('Expression (new.target) not supported.'));\n\t}\n\tprotected parseClassDeclaration(names: ExpressionNode[] | undefined, defaultExport: boolean): ExpressionNode {\n\t\tthrow new Error(this.errorMessage(`Expression (class) not supported.`));\n\t}\n\tprotected parseClassLiteral(name: ExpressionNode | undefined, isStrictReserved: boolean): ExpressionNode {\n\t\tthrow new Error(this.errorMessage(`Expression (class) not supported.`));\n\t}\n\tprotected parseSuperExpression(): ExpressionNode {\n\t\tthrow new Error(this.errorMessage('Expression (supper) not supported.'));\n\t}\n\tprotected parseImportExpressions(): ExpressionNode {\n\t\tthrow new Error(this.errorMessage('Expression (import) not supported.'));\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../../src/expressions/v8/parser.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ExpressionNode } from '../api/expression.js';\nimport { InlineParserOptions, JavaScriptInlineParser } from './inline.js';\nimport { Token, TokenExpression } from './token.js';\nimport {\n\tAccessorProperty,\n\tClass,\n\tClassBody,\n\tClassDeclaration,\n\tClassExpression,\n\tMetaProperty,\n\tMethodDefinition,\n\tPropertyDefinition,\n\tStaticBlock,\n\tSuper\n} from '../api/class/class.js';\nimport { FunctionExpression } from '../api/definition/function.js';\nimport { Identifier, Literal, NullNode } from '../api/definition/values.js';\nimport { AssignmentExpression } from '../api/operators/assignment.js';\nimport {\n\tVariableDeclarationNode,\n\tVariableDeclarator\n} from '../api/statement/declarations/declares.js';\nimport { TokenStream } from './stream.js';\nimport { Program } from '../api/program.js';\nimport {\n\tExportAllDeclaration,\n\tExportDefaultDeclaration,\n\tExportNamedDeclaration,\n\tExportSpecifier\n} from '../api/module/export.js';\nimport {\n\tImportDeclaration,\n\tImportDefaultSpecifier,\n\tImportExpression,\n\tImportNamespaceSpecifier,\n\tImportSpecifier\n} from '../api/module/import.js';\nimport { ImportAttribute, ModuleSpecifier } from '../api/module/common.js';\nimport {\n\tClassInfo,\n\tClassLiteralProperty,\n\tClassLiteralPropertyKind,\n\tclassPropertyKindFor,\n\tcreateClassInfo,\n\tFunctionKind,\n\tFunctionSyntaxKind,\n\tisAccessor,\n\tisStrict,\n\tLanguageMode,\n\tParseFunctionFlag,\n\tPropertyKind,\n\tPropertyKindInfo,\n\tPropertyPosition,\n\tVariableDeclarationContext\n} from './enums.js';\n\n\nexport type ParserOptions = { mode?: LanguageMode };\n\nexport class JavaScriptParser extends JavaScriptInlineParser {\n\t/**\n\t * parser js with\n\t * @param source \n\t * @returns \n\t */\n\tstatic parse(source: string | TokenExpression[] | TokenStream, { mode }: ParserOptions = {}) {\n\t\tmode ??= LanguageMode.Strict;\n\t\tconst stream = (typeof source === 'string') || Array.isArray(source)\n\t\t\t? TokenStream.getTokenStream(source, mode) : source;\n\t\tconst parser = new JavaScriptParser(stream);\n\t\treturn parser.scan();\n\t}\n\n\t/**\n\t * parse inline code like that used in html 2 or 1 way binding\n\t */\n\tstatic parseScript(source: string | TokenExpression[] | TokenStream, options?: InlineParserOptions) {\n\t\treturn JavaScriptInlineParser.parse(source, options);\n\t}\n\n\toverride scan(): ExpressionNode {\n\t\tconst isModule = isStrict(this.languageMode);\n\t\tif (isModule) {\n\t\t\tthis.setFunctionKind(FunctionKind.Module);\n\t\t}\n\t\tconst body = isModule ? this.parseModuleItemList() : this.parseStatementList(Token.EOS);\n\t\treturn new Program(isModule ? 'module' : 'script', body);\n\t}\n\tprotected override parseNewTargetExpression(): ExpressionNode {\n\t\tthis.consume(Token.PERIOD);\n\t\tconst target: ExpressionNode = this.parsePropertyOrPrivatePropertyName();\n\t\tif (target.toString() !== 'target') {\n\t\t\tthrow new Error(this.errorMessage(`Expression (new.${target.toString()}) not supported.`));\n\t\t}\n\t\treturn MetaProperty.NewTarget;\n\t}\n\tprotected override parseClassExpression(): ClassExpression {\n\t\tthis.consume(Token.CLASS);\n\t\tlet name: ExpressionNode | undefined;\n\t\tlet isStrictReserved = false;\n\t\tif (this.peekAnyIdentifier()) {\n\t\t\tname = this.parseAndClassifyIdentifier(this.next());\n\t\t\tisStrictReserved = Token.isStrictReservedWord(this.current().token);\n\t\t}\n\t\tconst classLiteral = this.parseClassLiteral(name, isStrictReserved);\n\t\treturn new ClassExpression(classLiteral.getBody(), classLiteral.getDecorators(), classLiteral.getId()!, classLiteral.getSuperClass());\n\t}\n\tprotected override parseClassDeclaration(names: string[] | undefined, defaultExport: boolean): ClassDeclaration {\n\t\t// ClassDeclaration ::\n\t\t// 'class' Identifier ('extends' LeftHandExpression)? '{' ClassBody '}'\n\t\t// 'class' ('extends' LeftHandExpression)? '{' ClassBody '}'\n\t\t//\n\t\t// The anonymous form is allowed iff [default_export] is true.\n\t\t//\n\t\t// 'class' is expected to be consumed by the caller.\n\t\t//\n\t\t// A ClassDeclaration\n\t\t//\n\t\t// class C { ... }\n\t\t//\n\t\t// has the same semantics as:\n\t\t//\n\t\t// let C = class C { ... };\n\t\t//\n\t\t// so rewrite it as such.\n\n\t\tconst nextToken = this.peek().token;\n\t\tconst isStrictReserved = Token.isStrictReservedWord(nextToken);\n\t\tlet name: ExpressionNode | undefined;\n\t\tlet variableName: string | undefined;\n\t\tif (defaultExport && (nextToken == Token.EXTENDS || nextToken == Token.LBRACE)) {\n\t\t\tname = new Literal('default');\n\t\t\tvariableName = '.default';\n\t\t} else {\n\t\t\tconst identifier = this.parseIdentifier();\n\t\t\tvariableName = identifier.getName() as string;\n\t\t\tname = identifier;\n\t\t}\n\t\tconst classLiteral = this.parseClassLiteral(name, isStrictReserved);\n\t\treturn new ClassDeclaration(classLiteral.getBody(), classLiteral.getDecorators(), classLiteral.getId()!, classLiteral.getSuperClass());\n\t}\n\tprotected override parseClassLiteral(name: ExpressionNode | undefined, nameIsStrictReserved: boolean): Class {\n\t\tconst isAnonymous = !!!name;\n\n\t\t// All parts of a ClassDeclaration and ClassExpression are strict code.\n\t\tif (!isAnonymous) {\n\t\t\tif (nameIsStrictReserved) {\n\t\t\t\tthrow new Error(this.errorMessage(`Unexpected Strict Reserved class name`));\n\t\t\t}\n\t\t\tif (this.isEvalOrArguments(name!)) {\n\t\t\t\tthrow new Error(this.errorMessage(`Strict Eval Arguments not allowed for class name`));\n\t\t\t}\n\t\t}\n\n\t\tconst classInfo: ClassInfo = createClassInfo();\n\t\tclassInfo.isAnonymous = isAnonymous;\n\n\t\tif (this.check(Token.EXTENDS)) {\n\t\t\tclassInfo.extends = this.parseLeftHandSideExpression();\n\t\t}\n\n\t\tthis.expect(Token.LBRACE);\n\n\t\tconst hasExtends = !!classInfo.extends;\n\n\t\twhile (this.peek().isNotType(Token.RBRACE)) {\n\t\t\tif (this.check(Token.SEMICOLON)) continue;\n\n\t\t\t// Either we're parsing a `static { }` initialization block or a property.\n\t\t\tif (this.peek().isType(Token.STATIC) && this.peekAhead().isType(Token.LBRACE)) {\n\t\t\t\tconst staticBlock = this.parseClassStaticBlock(classInfo);\n\t\t\t\tclassInfo.staticElements.push(staticBlock);\n\t\t\t\tclassInfo.hasStaticBlocks = true;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// FuncNameInferrerState fni_state(& fni_);\n\t\t\t// If we haven't seen the constructor yet, it potentially is the next\n\t\t\t// property.\n\t\t\tlet isConstructor = !classInfo.hasSeenConstructor;\n\t\t\tconst propInfo = new PropertyKindInfo();\n\t\t\tpropInfo.position = PropertyPosition.ClassLiteral;\n\n\t\t\tconst property = this.parseClassPropertyDefinition(classInfo, propInfo, hasExtends);\n\n\t\t\t// if (has_error()) return impl() . FailureExpression();\n\n\t\t\tconst propertyKind = classPropertyKindFor(propInfo.kind);\n\t\t\tif (!classInfo.hasStaticComputedNames && propInfo.isStatic && propInfo.isComputedName) {\n\t\t\t\tclassInfo.hasStaticComputedNames = true;\n\t\t\t}\n\t\t\tisConstructor &&= classInfo.hasSeenConstructor;\n\n\t\t\tconst isField = propertyKind == ClassLiteralPropertyKind.FIELD;\n\n\t\t\tif (propInfo.isPrivate) {\n\t\t\t\tif (isConstructor) {\n\t\t\t\t\tthrow new Error(this.errorMessage('private constructor is not allowed'));\n\t\t\t\t}\n\t\t\t\tclassInfo.requiresBrand ||= (!isField && !propInfo.isStatic);\n\t\t\t\tconst isMethod = propertyKind == ClassLiteralPropertyKind.METHOD;\n\t\t\t\tclassInfo.hasPrivateMethods ||= isMethod;\n\t\t\t\tclassInfo.hasStaticPrivateMethods ||= isMethod && propInfo.isStatic;\n\t\t\t\tthis.declarePrivateClassMember(propInfo.name, property as MethodDefinition | PropertyDefinition, propertyKind, propInfo.isStatic, classInfo);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (isField) {\n\t\t\t\tif (propInfo.isComputedName) {\n\t\t\t\t\tclassInfo.computedFieldCount++;\n\t\t\t\t}\n\t\t\t\tthis.declarePublicClassField(property as PropertyDefinition, propInfo.isStatic, propInfo.isComputedName, classInfo);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tthis.declarePublicClassMethod(name, property as MethodDefinition, isConstructor, classInfo);\n\t\t}\n\n\t\tthis.expect(Token.RBRACE);\n\t\tconst classBody = this.rewriteClassLiteral(classInfo, name);\n\t\treturn new Class(classBody, [], name as Identifier, classInfo.extends);\n\t}\n\tprotected declarePublicClassMethod(name: ExpressionNode | undefined, property: MethodDefinition, isConstructor: boolean, classInfo: ClassInfo): void {\n\t\t// throw new Error('Method not implemented.');\n\t\tif (isConstructor) {\n\t\t\tif (classInfo.constructor) {\n\t\t\t\tthrow new SyntaxError(this.errorMessage('A class may only have one constructor.'));\n\t\t\t}\n\t\t\tclassInfo.constructor = property;\n\t\t\t// set the class name as the constructor name\n\t\t\tReflect.set(classInfo.constructor, 'id', name);\n\t\t\treturn;\n\t\t}\n\t\tclassInfo.publicMembers.push(property);\n\t}\n\tprotected declarePublicClassField(property: PropertyDefinition, isStatic: boolean, isComputedName: boolean, classInfo: ClassInfo) {\n\t\tif (isStatic) {\n\t\t\tclassInfo.staticElements.push(property);\n\t\t} else {\n\t\t\tclassInfo.instanceFields.push(property);\n\t\t}\n\n\t\t// if (isComputedName) {\n\t\t// \tclassInfo.publicMembers.push(property);\n\t\t// }\n\n\t}\n\tprotected declarePrivateClassMember(propertyName: string, property: MethodDefinition | PropertyDefinition, kind: ClassLiteralPropertyKind, isStatic: boolean, classInfo: ClassInfo) {\n\t\tclassInfo.privateMembers.push(property);\n\t}\n\t// protected createPrivateNameVariable(mode: VariableMode, staticFlag: StaticFlag, propertyName: string) {\n\t// \tthrow new Error('Method not implemented.');\n\t// }\n\tprotected parseClassPropertyDefinition(classInfo: ClassInfo, propInfo: PropertyKindInfo, hasExtends: boolean) {\n\t\tif (!classInfo) {\n\t\t\tthrow new Error(this.errorMessage('class info is undefined'));\n\t\t}\n\t\tif (propInfo.position !== PropertyPosition.ClassLiteral) {\n\t\t\tthrow new Error(this.errorMessage('expected property position ClassLiteral'));\n\t\t}\n\n\t\tconst nameToken = this.peek();\n\t\tlet nameExpression: ExpressionNode;\n\t\tif (nameToken.isType(Token.STATIC)) {\n\t\t\tthis.consume(Token.STATIC);\n\t\t\tif (this.peek().isType(Token.LPAREN)) {\n\t\t\t\tpropInfo.kind = PropertyKind.Method;\n\t\t\t\tnameExpression = this.parseIdentifier();\n\t\t\t\tpropInfo.name = (nameExpression as Identifier).getName() as string;\n\t\t\t} else if (this.peek().isType(Token.ASSIGN)\n\t\t\t\t|| this.peek().isType(Token.SEMICOLON)\n\t\t\t\t|| this.peek().isType(Token.RBRACK)) {\n\t\t\t\tnameExpression = this.parseIdentifier();\n\t\t\t\tpropInfo.name = (nameExpression as Identifier).getName() as string;\n\t\t\t} else {\n\t\t\t\tpropInfo.isStatic = true;\n\t\t\t\tnameExpression = this.parseProperty(propInfo);\n\t\t\t}\n\t\t} else {\n\t\t\tnameExpression = this.parseProperty(propInfo);\n\t\t}\n\n\t\tswitch (propInfo.kind) {\n\t\t\tcase PropertyKind.Assign:\n\t\t\tcase PropertyKind.ClassField:\n\t\t\tcase PropertyKind.ShorthandOrClassField:\n\t\t\tcase PropertyKind.NotSet: {\n\t\t\t\t// This case is a name followed by a\n\t\t\t\t// name or other property. Here we have\n\t\t\t\t// to assume that's an uninitialized\n\t\t\t\t// field followed by a line break\n\t\t\t\t// followed by a property, with ASI\n\t\t\t\t// adding the semicolon. If not, there\n\t\t\t\t// will be a syntax error after parsing\n\t\t\t\t// the first name as an uninitialized\n\t\t\t\t// field.\n\t\t\t\tpropInfo.kind = PropertyKind.ClassField;\n\n\t\t\t\t// if (!propInfo.isComputedName) {\n\t\t\t\t// \tthis.checkClassFieldName(propInfo.name, propInfo.isStatic);\n\t\t\t\t// }\n\n\t\t\t\tconst initializer = this.parseMemberInitializer(classInfo, propInfo.isStatic);\n\t\t\t\tthis.expectSemicolon();\n\n\t\t\t\tconst result: ExpressionNode = this.newClassLiteralProperty(\n\t\t\t\t\tnameExpression,\n\t\t\t\t\tinitializer,\n\t\t\t\t\tClassLiteralPropertyKind.FIELD,\n\t\t\t\t\tpropInfo.isStatic,\n\t\t\t\t\tpropInfo.isComputedName,\n\t\t\t\t\tpropInfo.isPrivate\n\t\t\t\t);\n\t\t\t\tthis.setFunctionNameFromPropertyName(result, propInfo.name);\n\t\t\t\treturn result;\n\t\t\t}\n\t\t\tcase PropertyKind.Method: {\n\t\t\t\t// MethodDefinition\n\t\t\t\t// PropertyName '(' StrictFormalParameters ')' '{' FunctionBody '}'\n\t\t\t\t// '*' PropertyName '(' StrictFormalParameters ')' '{' FunctionBody '}'\n\t\t\t\t// async PropertyName '(' StrictFormalParameters ')'\n\t\t\t\t// '{' FunctionBody '}'\n\t\t\t\t// async '*' PropertyName '(' StrictFormalParameters ')'\n\t\t\t\t// '{' FunctionBody '}'\n\n\t\t\t\tif (!propInfo.isComputedName) {\n\t\t\t\t\tthis.checkClassMethodName(propInfo, classInfo);\n\t\t\t\t}\n\n\t\t\t\tlet kind: FunctionKind = this.methodKindFor(propInfo.isStatic, propInfo.funcFlag);\n\n\t\t\t\tif (!propInfo.isStatic && propInfo.name.toString() === 'constructor') {\n\t\t\t\t\tclassInfo.hasSeenConstructor = true;\n\t\t\t\t\tkind = hasExtends ? FunctionKind.DerivedConstructor : FunctionKind.BaseConstructor;\n\t\t\t\t}\n\n\t\t\t\tconst value = this.parseFunctionLiteral(kind, FunctionSyntaxKind.AccessorOrMethod, nameExpression as Identifier);\n\n\t\t\t\tconst result = this.newClassLiteralProperty(\n\t\t\t\t\tnameExpression, value, ClassLiteralProperty.Kind.METHOD,\n\t\t\t\t\tpropInfo.isStatic, propInfo.isComputedName,\n\t\t\t\t\tpropInfo.isPrivate);\n\t\t\t\tthis.setFunctionNameFromPropertyName(result, propInfo.name);\n\t\t\t\treturn result;\n\t\t\t}\n\n\t\t\tcase PropertyKind.AccessorGetter:\n\t\t\tcase PropertyKind.AccessorSetter: {\n\t\t\t\tif (propInfo.funcFlag !== ParseFunctionFlag.IsNormal) {\n\t\t\t\t\tthrow new Error(this.errorMessage('accessor is not normal function'));\n\t\t\t\t}\n\t\t\t\tconst isGet = propInfo.kind == PropertyKind.AccessorGetter;\n\n\t\t\t\tif (!propInfo.isComputedName) {\n\t\t\t\t\tthis.checkClassMethodName(propInfo, classInfo);\n\t\t\t\t\t// Make sure the name expression is a string since we need a Name for\n\t\t\t\t\t// Runtime_DefineAccessorPropertyUnchecked and since we can determine\n\t\t\t\t\t// this statically we can skip the extra runtime check.\n\t\t\t\t\tnameExpression = new Literal<string>(propInfo.name);\n\t\t\t\t}\n\n\t\t\t\tlet kind: FunctionKind;\n\t\t\t\tif (propInfo.isStatic) {\n\t\t\t\t\tkind = isGet ? FunctionKind.StaticGetterFunction\n\t\t\t\t\t\t: FunctionKind.StaticSetterFunction;\n\t\t\t\t} else {\n\t\t\t\t\tkind = isGet ? FunctionKind.GetterFunction\n\t\t\t\t\t\t: FunctionKind.SetterFunction;\n\t\t\t\t}\n\n\t\t\t\tconst value = this.parseFunctionLiteral(kind, FunctionSyntaxKind.AccessorOrMethod, nameExpression as Identifier);\n\n\t\t\t\tconst propertyKind: ClassLiteralPropertyKind = isGet ? ClassLiteralProperty.Kind.GETTER : ClassLiteralProperty.Kind.SETTER;\n\t\t\t\tconst result = this.newClassLiteralProperty(\n\t\t\t\t\tnameExpression, value, propertyKind,\n\t\t\t\t\tpropInfo.isStatic, propInfo.isComputedName,\n\t\t\t\t\tpropInfo.isPrivate);\n\t\t\t\tconst prefix = isGet ? 'get ' : 'set ';\n\t\t\t\tthis.setFunctionNameFromPropertyName(result, propInfo.name, prefix);\n\t\t\t\treturn result;\n\t\t\t}\n\t\t\tcase PropertyKind.Value:\n\t\t\tcase PropertyKind.Shorthand:\n\t\t\tcase PropertyKind.Spread:\n\t\t\t\t// throw new Error(this.errorMessage('Report Unexpected Token'));\n\t\t\t\treturn NullNode;\n\t\t}\n\t\tthrow new Error(this.errorMessage('UNREACHABLE'));\n\t}\n\tprotected checkClassMethodName(propInfo: PropertyKindInfo, classInfo: ClassInfo) {\n\t\tif (!(propInfo.kind == PropertyKind.Method || isAccessor(propInfo.kind))) {\n\t\t\tthrow new Error(this.errorMessage('not kind of method or setter or getter'));\n\t\t}\n\t\tif (propInfo.isPrivate && propInfo.name.toString() === 'constructor') {\n\t\t\tthrow new Error(this.errorMessage('constructor is private'));\n\t\t} else if (propInfo.isStatic && propInfo.name.toString() === 'prototype') {\n\t\t\tthrow new Error(this.errorMessage('static prototype'));\n\t\t} else if (propInfo.name.toString() === 'constructor') {\n\t\t\tif (propInfo.funcFlag !== ParseFunctionFlag.IsNormal || isAccessor(propInfo.kind)) {\n\t\t\t\tif (propInfo.funcFlag === ParseFunctionFlag.IsGenerator) {\n\t\t\t\t\tthrow new Error(this.errorMessage('constructor is generator'));\n\t\t\t\t} else if (propInfo.funcFlag === ParseFunctionFlag.IsAsync) {\n\t\t\t\t\tthrow new Error(this.errorMessage('constructor is async'));\n\t\t\t\t}\n\t\t\t\tif (classInfo.hasSeenConstructor) {\n\t\t\t\t\tthrow new Error(this.errorMessage('duplicate constructor'));\n\t\t\t\t}\n\t\t\t}\n\t\t\tclassInfo.hasSeenConstructor = true;\n\t\t}\n\t}\n\tprotected parseClassStaticBlock(classInfo: ClassInfo): StaticBlock {\n\t\tthis.consume(Token.STATIC);\n\t\t// Each static block has its own var and lexical scope, so make a new var\n\t\t// block scope instead of using the synthetic members initializer function\n\t\t// scope.\n\t\tthis.setStatue(true, FunctionKind.ClassStaticInitializerFunction);\n\t\tconst block = this.parseBlock();\n\t\tthis.restoreStatue();\n\t\tclassInfo.hasStaticElements = true;\n\t\treturn new StaticBlock(block.getBody());\n\t}\n\tprotected declareClass(variableName: string, value: ExpressionNode, names: string[] | undefined): ExpressionNode {\n\t\tnames?.push(variableName);\n\t\tconst proxy = this.declareVariable(variableName, 'let');\n\t\treturn new AssignmentExpression('=', proxy, value);\n\t}\n\tprotected declareVariable(name: string, mode: 'let' | 'const' | 'var') {\n\t\treturn new VariableDeclarationNode([new VariableDeclarator(new Identifier(name))], mode);\n\t}\n\tprotected newClassLiteralProperty(nameExpression: ExpressionNode, initializer: ExpressionNode | undefined, kind: ClassLiteralPropertyKind, isStatic: boolean, isComputedName: boolean, isPrivate: boolean) {\n\t\tswitch (kind) {\n\t\t\tcase ClassLiteralPropertyKind.METHOD:\n\t\t\t\tif (nameExpression.toString() === 'constructor') {\n\t\t\t\t\treturn new MethodDefinition('constructor', nameExpression, initializer as FunctionExpression, [], isComputedName, isStatic);\n\t\t\t\t}\n\t\t\t\treturn new MethodDefinition('method', nameExpression, initializer as FunctionExpression, [], isComputedName, isStatic);\n\t\t\tcase ClassLiteralPropertyKind.GETTER:\n\t\t\t\treturn new MethodDefinition('get', nameExpression, initializer as FunctionExpression, [], isComputedName, isStatic);\n\t\t\tcase ClassLiteralPropertyKind.SETTER:\n\t\t\t\treturn new MethodDefinition('set', nameExpression, initializer as FunctionExpression, [], isComputedName, isStatic);\n\t\t\tcase ClassLiteralPropertyKind.FIELD:\n\t\t\t\treturn new PropertyDefinition(nameExpression, [], isComputedName, isStatic, initializer);\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t\tthrow new Error(this.errorMessage('UNREACHABLE'));\n\t}\n\tprotected parseMemberInitializer(classInfo: ClassInfo, isStatic: boolean): ExpressionNode | undefined {\n\t\tconst kind = isStatic\n\t\t\t? FunctionKind.ClassStaticInitializerFunction\n\t\t\t: FunctionKind.ClassMembersInitializerFunction;\n\n\n\t\tlet initializer: ExpressionNode | undefined = undefined;\n\t\tif (this.check(Token.ASSIGN)) {\n\t\t\tthis.setStatue(true, kind);\n\t\t\tinitializer = this.parseAssignmentExpression();\n\t\t\tthis.restoreStatue();\n\t\t}\n\t\tif (isStatic) {\n\t\t\tclassInfo.hasStaticElements = true;\n\t\t} else {\n\t\t\tclassInfo.hasInstanceMembers = true;\n\t\t}\n\t\treturn initializer;\n\t}\n\tprotected setFunctionNameFromPropertyName(property: ExpressionNode, name: string, prefix?: string): void {\n\t\t// TODO: no need for this now\n\t\t// check later when needed\n\t\t// the ClassExpression* handle this\n\t}\n\tprotected parseSuperExpression(): ExpressionNode {\n\t\tthis.consume(Token.SUPER);\n\t\tif (Token.isProperty(this.peek().token)) {\n\t\t\tif (this.peek().isType(Token.PERIOD) && this.peekAhead().isType(Token.PRIVATE_NAME)) {\n\t\t\t\tthis.consume(Token.PERIOD);\n\t\t\t\tthis.consume(Token.PRIVATE_NAME);\n\t\t\t\tthrow new Error(this.errorMessage('Unexpected Private Field'));\n\t\t\t}\n\t\t\tif (this.peek().isType(Token.QUESTION_PERIOD)) {\n\t\t\t\tthis.consume(Token.QUESTION_PERIOD);\n\t\t\t\tthrow new Error(this.errorMessage('Optional Chaining No Super'));\n\t\t\t}\n\t\t\treturn Super.INSTANCE;\n\t\t}\n\t\tthrow new Error(this.errorMessage('Unexpected Super'));\n\t}\n\tprotected rewriteClassLiteral(classInfo: ClassInfo, name?: ExpressionNode): ClassBody {\n\t\tconst body: (MethodDefinition | PropertyDefinition | AccessorProperty | StaticBlock)[] = [];\n\t\tif (classInfo.hasSeenConstructor) {\n\t\t\tbody.push(classInfo.constructor as MethodDefinition);\n\t\t}\n\t\tbody.push(...classInfo.staticElements);\n\t\tbody.push(...classInfo.instanceFields);\n\t\tbody.push(...classInfo.publicMembers);\n\t\tbody.push(...classInfo.privateMembers);\n\t\treturn new ClassBody(body);\n\t}\n\tprotected parseModuleItemList(): ExpressionNode[] {\n\t\t// ecma262/#prod-Module\n\t\t// Module :\n\t\t// ModuleBody?\n\t\t//\n\t\t// ecma262/#prod-ModuleItemList\n\t\t// ModuleBody :\n\t\t// ModuleItem*\n\t\tconst body: ExpressionNode[] = [];\n\t\twhile (this.peek().isNotType(Token.EOS)) {\n\t\t\tconst stat = this.parseModuleItem();\n\t\t\tif (!stat) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (this.isEmptyStatement(stat)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tbody.push(stat);\n\t\t}\n\t\treturn body;\n\t}\n\tprotected parseModuleItem(): ExpressionNode | undefined {\n\t\t// ecma262/#prod-ModuleItem\n\t\t// ModuleItem :\n\t\t// ImportDeclaration\n\t\t// ExportDeclaration\n\t\t// StatementListItem\n\n\t\tconst next = this.peek();\n\t\tif (next.isType(Token.EXPORT)) {\n\t\t\treturn this.parseExportDeclaration();\n\t\t}\n\t\tif (next.isType(Token.IMPORT)) {\n\t\t\t// We must be careful not to parse a dynamic import expression as an import\n\t\t\t// declaration. Same for import.meta expressions.\n\t\t\tconst peekAhead = this.peekAhead();\n\t\t\tif (peekAhead.isNotType(Token.LPAREN) && peekAhead.isNotType(Token.PERIOD)) {\n\t\t\t\treturn this.parseImportDeclaration();\n\t\t\t\t// return factory() -> EmptyStatement();\n\t\t\t}\n\t\t}\n\n\t\treturn this.parseStatementListItem();\n\t}\n\tprotected parseExportDeclaration(): ExpressionNode | undefined {\n\t\t// ExportDeclaration:\n\t\t// 'export' '*' 'from' ModuleSpecifier ';'\n\t\t// 'export' '*' 'from' ModuleSpecifier [no LineTerminator here]\n\t\t// AssertClause ';'\n\t\t// 'export' '*' 'as' IdentifierName 'from' ModuleSpecifier ';'\n\t\t// 'export' '*' 'as' IdentifierName 'from' ModuleSpecifier\n\t\t// [no LineTerminator here] AssertClause ';'\n\t\t// 'export' '*' 'as' ModuleExportName 'from' ModuleSpecifier ';'\n\t\t// 'export' '*' 'as' ModuleExportName 'from' ModuleSpecifier ';'\n\t\t// [no LineTerminator here] AssertClause ';'\n\t\t// 'export' ExportClause ('from' ModuleSpecifier)? ';'\n\t\t// 'export' ExportClause ('from' ModuleSpecifier [no LineTerminator here]\n\t\t// AssertClause)? ';'\n\t\t// 'export' VariableStatement\n\t\t// 'export' Declaration\n\t\t// 'export' 'default' ... (handled in ParseExportDefault)\n\t\t//\n\t\t// ModuleExportName :\n\t\t// StringLiteral\n\n\t\tthis.expect(Token.EXPORT);\n\t\tlet result: ExpressionNode | undefined;\n\t\tconst names: string[] = [];\n\n\t\t// Statement * result = nullptr;\n\t\t// ZonePtrList <const AstRawString> names(1, zone());\n\t\t// Scanner::Location loc = scanner() -> peek_location();\n\t\tswitch (this.peek().token) {\n\t\t\tcase Token.DEFAULT:\n\t\t\t\treturn this.parseExportDefault();\n\n\t\t\tcase Token.MUL:\n\t\t\t\treturn this.parseExportStar();\n\n\t\t\tcase Token.LBRACE: {\n\t\t\t\t// There are two cases here:\n\t\t\t\t//\n\t\t\t\t// 'export' ExportClause ';'\n\t\t\t\t// and\n\t\t\t\t// 'export' ExportClause FromClause ';'\n\t\t\t\t//\n\t\t\t\t// In the first case, the exported identifiers in ExportClause must\n\t\t\t\t// not be reserved words, while in the latter they may be. We\n\t\t\t\t// pass in a location that gets filled with the first reserved word\n\t\t\t\t// encountered, and then throw a SyntaxError if we are in the\n\t\t\t\t// non-FromClause case.\n\n\t\t\t\t// Scanner::Location reserved_loc = Scanner:: Location:: invalid();\n\t\t\t\t// Scanner::Location string_literal_local_name_loc =\n\t\t\t\t// Scanner:: Location:: invalid();\n\t\t\t\t// ZoneChunkList < ExportClauseData >* export_data =\n\t\t\t\t// ParseExportClause(& reserved_loc, & string_literal_local_name_loc);\n\n\t\t\t\tconst exportData = this.parseExportClause();\n\t\t\t\tlet moduleSpecifier: Literal<string> | undefined;\n\t\t\t\tlet importAssertions: ImportAttribute[] | undefined;\n\n\t\t\t\tif (this.checkContextualKeyword('from')) {\n\t\t\t\t\t// Scanner::Location specifier_loc = scanner() -> peek_location();\n\t\t\t\t\tmoduleSpecifier = this.parseModuleSpecifier();\n\t\t\t\t\timportAssertions = this.parseImportAssertClause();\n\t\t\t\t\tthis.expectSemicolon();\n\n\t\t\t\t\t// if (exportData.isEmpty()) {\n\t\t\t\t\t// \t// module() -> AddEmptyImport(module_specifier, import_assertions, specifier_loc, zone());\n\t\t\t\t\t// } else {\n\t\t\t\t\t// \t// for (const ExportClauseData& data : * export_data) {\n\t\t\t\t\t// \t// \tmodule() -> AddExport(data.local_name, data.export_name,\n\t\t\t\t\t// \t// \t\tmodule_specifier, import_assertions,\n\t\t\t\t\t// \t// \t\tdata.location, specifier_loc, zone());\n\t\t\t\t\t// \t// }\n\t\t\t\t\t// }\n\t\t\t\t} else {\n\t\t\t\t\t// if (reserved_loc.IsValid()) {\n\t\t\t\t\t// \t// No FromClause, so reserved words are invalid in ExportClause.\n\t\t\t\t\t// \tReportMessageAt(reserved_loc, MessageTemplate:: kUnexpectedReserved);\n\t\t\t\t\t// \treturn nullptr;\n\t\t\t\t\t// } else if (string_literal_local_name_loc.IsValid()) {\n\t\t\t\t\t// \tReportMessageAt(string_literal_local_name_loc,\n\t\t\t\t\t// \t\tMessageTemplate:: kModuleExportNameWithoutFromClause);\n\t\t\t\t\t// \treturn nullptr;\n\t\t\t\t\t// }\n\n\t\t\t\t\tthis.expectSemicolon();\n\n\t\t\t\t\t// for (const ExportClauseData& data : * export_data) {\n\t\t\t\t\t// \tmodule() -> AddExport(data.local_name, data.export_name, data.location,\n\t\t\t\t\t// \t\tzone());\n\t\t\t\t\t// }\n\t\t\t\t}\n\t\t\t\treturn new ExportNamedDeclaration(exportData, undefined, moduleSpecifier, importAssertions);\n\t\t\t\t// return factory() -> EmptyStatement();\n\t\t\t}\n\n\t\t\tcase Token.FUNCTION: {\n\t\t\t\tconst declaration = this.parseFunctionDeclaration();\n\t\t\t\tconst identifier = declaration.getId()!;\n\t\t\t\tresult = new ExportNamedDeclaration([new ExportSpecifier(identifier, identifier)], declaration);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase Token.CLASS: {\n\t\t\t\tthis.consume(Token.CLASS);\n\t\t\t\tconst declaration = this.parseClassDeclaration(names, false);\n\t\t\t\tconst identifier = declaration.getId()!;\n\t\t\t\tresult = new ExportNamedDeclaration([new ExportSpecifier(identifier, identifier)], declaration);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase Token.VAR:\n\t\t\tcase Token.LET:\n\t\t\tcase Token.CONST:\n\t\t\t\tconst declaration = this.parseVariableStatement(VariableDeclarationContext.StatementListItem, names);\n\t\t\t\tconst specifiers = declaration.getDeclarations()\n\t\t\t\t\t.map(node => new ExportSpecifier(node.getId() as Identifier, node.getId() as Identifier));\n\t\t\t\tresult = new ExportNamedDeclaration(specifiers, declaration);\n\t\t\t\tbreak;\n\n\t\t\tcase Token.ASYNC:\n\t\t\t\tthis.consume(Token.ASYNC);\n\t\t\t\tif (this.peek().isType(Token.FUNCTION) && !this.scanner.hasLineTerminatorBeforeNext()) {\n\t\t\t\t\tconst declaration = this.parseAsyncFunctionDeclaration(names, false);\n\t\t\t\t\tconst identifier = declaration.getId()!;\n\t\t\t\t\tresult = new ExportNamedDeclaration([new ExportSpecifier(identifier, identifier)], declaration);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\tdefault:\n\t\t\t\tthrow new SyntaxError(this.errorMessage('Unexpected Token'));\n\t\t}\n\t\t// loc.end_pos = scanner() -> location().end_pos;\n\n\t\t// SourceTextModuleDescriptor * descriptor = module();\n\t\t// for (const AstRawString* name : names) {\n\t\t// \tdescriptor -> AddExport(name, name, loc, zone());\n\t\t// }\n\n\t\treturn result;\n\t}\n\tprotected parseImportDeclaration(): ExpressionNode | undefined {\n\t\t// ImportDeclaration :\n\t\t// 'import' ImportClause 'from' ModuleSpecifier ';'\n\t\t// 'import' ModuleSpecifier ';'\n\t\t// 'import' ImportClause 'from' ModuleSpecifier [no LineTerminator here]\n\t\t// AssertClause ';'\n\t\t// 'import' ModuleSpecifier [no LineTerminator here] AssertClause';'\n\t\t//\n\t\t// ImportClause :\n\t\t// ImportedDefaultBinding\n\t\t// NameSpaceImport\n\t\t// NamedImports\n\t\t// ImportedDefaultBinding ',' NameSpaceImport\n\t\t// ImportedDefaultBinding ',' NamedImports\n\t\t//\n\t\t// NameSpaceImport :\n\t\t// '*' 'as' ImportedBinding\n\n\t\tthis.expect(Token.IMPORT);\n\n\t\tconst tok = this.peek();\n\n\t\t// 'import' ModuleSpecifier ';'\n\t\tif (tok.isType(Token.STRING)) {\n\t\t\t// Scanner::Location specifier_loc = scanner() -> peek_location();\n\t\t\tconst moduleSpecifier = this.parseModuleSpecifier();\n\t\t\tconst importAssertions = this.parseImportAssertClause();\n\t\t\tthis.expectSemicolon();\n\n\t\t\t// module() -> AddEmptyImport(module_specifier, import_assertions, specifier_loc,zone());\n\t\t\treturn new ImportDeclaration(moduleSpecifier, undefined, importAssertions);\n\t\t}\n\n\t\t// Parse ImportedDefaultBinding if present.\n\t\tlet importDefaultBinding: Identifier | undefined;\n\t\t// Scanner::Location import_default_binding_loc;\n\t\tif (tok.isNotType(Token.MUL) && tok.isNotType(Token.LBRACE)) {\n\t\t\timportDefaultBinding = this.parseNonRestrictedIdentifier();\n\t\t\t// DeclareUnboundVariable(import_default_binding, VariableMode:: kConst,kNeedsInitialization, pos);\n\t\t}\n\n\t\t// Parse NameSpaceImport or NamedImports if present.\n\t\tlet moduleNamespaceBinding: Identifier | undefined;\n\t\tlet namedImports: ModuleSpecifier[] | undefined;\n\t\t// Scanner::Location module_namespace_binding_loc;\n\t\t// const ZonePtrList<const NamedImport >* named_imports = nullptr;\n\t\tif (importDefaultBinding == undefined || this.check(Token.COMMA)) {\n\t\t\tswitch (this.peek().token) {\n\t\t\t\tcase Token.MUL: {\n\t\t\t\t\tthis.consume(Token.MUL);\n\t\t\t\t\tthis.expectContextualKeyword('as');\n\t\t\t\t\tmoduleNamespaceBinding = this.parseNonRestrictedIdentifier();\n\t\t\t\t\t// ExpectContextualKeyword(ast_value_factory() -> as_string());\n\t\t\t\t\t// module_namespace_binding = ParseNonRestrictedIdentifier();\n\t\t\t\t\t// module_namespace_binding_loc = scanner() -> location();\n\t\t\t\t\t// DeclareUnboundVariable(module_namespace_binding, VariableMode:: kConst, kCreatedInitialized, pos);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tcase Token.LBRACE:\n\t\t\t\t\tnamedImports = this.parseNamedImports();\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new SyntaxError(this.errorMessage('Unexpected Token'));\n\t\t\t}\n\t\t}\n\t\tthis.expectContextualKeyword('from');\n\t\t// ExpectContextualKeyword(ast_value_factory() -> from_string());\n\t\t// Scanner::Location specifier_loc = scanner() -> peek_location();\n\t\tconst moduleSpecifier = this.parseModuleSpecifier();\n\t\tconst importAssertions = this.parseImportAssertClause();\n\t\tthis.expectSemicolon();\n\n\t\t// Now that we have all the information, we can make the appropriate\n\t\t// declarations.\n\n\t\t// TODO(neis): Would prefer to call DeclareVariable for each case below rather\n\t\t// than above and in ParseNamedImports, but then a possible error message\n\t\t// would point to the wrong location. Maybe have a DeclareAt version of\n\t\t// Declare that takes a location?\n\n\t\tconst specifiers: ModuleSpecifier[] = [];\n\t\tif (moduleNamespaceBinding) {\n\t\t\tspecifiers.push(new ImportNamespaceSpecifier(moduleNamespaceBinding));\n\t\t}\n\t\tif (importDefaultBinding) {\n\t\t\tspecifiers.push(new ImportDefaultSpecifier(importDefaultBinding));\n\t\t}\n\t\tif (namedImports?.length) {\n\t\t\tspecifiers.push(...namedImports);\n\t\t}\n\t\treturn new ImportDeclaration(moduleSpecifier, specifiers.length ? specifiers : undefined, importAssertions);\n\t}\n\tprotected parseImportExpressions(): ExpressionNode {\n\t\tthis.consume(Token.IMPORT);\n\t\tif (this.check(Token.PERIOD)) {\n\t\t\tthis.expectContextualKeyword('meta');\n\t\t\treturn MetaProperty.ImportMeta;\n\t\t}\n\n\t\tif (this.peek().isNotType(Token.LPAREN)) {\n\t\t\tthrow new SyntaxError(this.errorMessage('Unexpected Token'));\n\t\t}\n\n\t\tthis.consume(Token.LPAREN);\n\t\tif (this.peek().isType(Token.RPAREN)) {\n\t\t\tthrow new SyntaxError(this.errorMessage('Import Missing Specifier'));\n\t\t}\n\t\tthis.setAcceptIN(true);\n\t\tconst specifier = this.parseAssignmentExpressionCoverGrammar();\n\n\t\tif (this.check(Token.COMMA)) {\n\t\t\tif (this.check(Token.RPAREN)) {\n\t\t\t\t// A trailing comma allowed after the specifier.\n\t\t\t\treturn new ImportExpression(specifier as Literal<string>);\n\t\t\t} else {\n\t\t\t\tconst importAssertions = this.parseAssignmentExpressionCoverGrammar();\n\t\t\t\tthis.check(Token.COMMA); // A trailing comma is allowed after the import\n\t\t\t\t// assertions.\n\t\t\t\tthis.expect(Token.RPAREN);\n\t\t\t\treturn new ImportExpression(specifier as Literal<string>, importAssertions);\n\t\t\t}\n\t\t}\n\n\t\tthis.expect(Token.RPAREN);\n\t\tthis.restoreAcceptIN();\n\t\treturn new ImportExpression(specifier as Literal<string>);\n\t}\n\tprotected parseVariableStatement(varContext: VariableDeclarationContext, names: string[]) {\n\t\t// VariableStatement ::\n\t\t// VariableDeclarations ';'\n\n\t\t// The scope of a var declared variable anywhere inside a function\n\t\t// is the entire function (ECMA-262, 3rd, 10.1.3, and 12.2). Thus we can\n\t\t// transform a source-level var declaration into a (Function) Scope\n\t\t// declaration, and rewrite the source-level initialization into an assignment\n\t\t// statement. We use a block to collect multiple assignments.\n\t\t//\n\t\t// We mark the block as initializer block because we don't want the\n\t\t// rewriter to add a '.result' assignment to such a block (to get compliant\n\t\t// behavior for code such as print(eval('var x = 7')), and for cosmetic\n\t\t// reasons when pretty-printing. Also, unless an assignment (initialization)\n\t\t// is inside an initializer block, it is ignored.\n\t\tconst declarations = this.parseVariableDeclarations(varContext);\n\t\tthis.expectSemicolon();\n\t\tnames.push(...declarations.getDeclarations().map(d => d.getId().toString()));\n\t\treturn declarations;\n\t}\n\tprotected parseImportAssertClause(): ImportAttribute[] | undefined {\n\t\t// AssertClause :\n\t\t// assert '{' '}'\n\t\t// assert '{' AssertEntries '}'\n\n\t\t// AssertEntries :\n\t\t// IdentifierName: AssertionKey\n\t\t// IdentifierName: AssertionKey , AssertEntries\n\n\t\t// AssertionKey :\n\t\t// IdentifierName\n\t\t// StringLiteral\n\n\t\t// auto import_assertions = zone() -> New<ImportAssertions>(zone());\n\n\t\t// if (!FLAG_harmony_import_assertions) {\n\t\t// \treturn import_assertions;\n\t\t// }\n\n\t\t// Assert clause is optional, and cannot be preceded by a LineTerminator.\n\t\tif (this.scanner.hasLineTerminatorBeforeNext() || !this.checkContextualKeyword('assert')) {\n\t\t\treturn undefined;\n\t\t}\n\t\tthis.expect(Token.LBRACE);\n\t\tconst counts = {} as { [key: string]: number };\n\t\tconst importAssertions: ImportAttribute[] = [];\n\t\twhile (this.peek().isNotType(Token.RBRACE)) {\n\t\t\tlet attributeKey = this.checkAndGetValue(Token.STRING);\n\t\t\tif (!attributeKey) {\n\t\t\t\tattributeKey = this.parsePropertyOrPrivatePropertyName();\n\t\t\t}\n\t\t\tthis.expect(Token.COLON);\n\t\t\tconst attributeValue = this.expectAndGetValue(Token.STRING);\n\t\t\timportAssertions.push(new ImportAttribute(attributeKey as Identifier, attributeValue as Literal<string>));\n\t\t\tcounts[attributeKey.toString()] = (counts[attributeKey.toString()] ?? 0) + 1;\n\t\t\tif (counts[attributeKey.toString()] > 1) {\n\t\t\t\t// \t// It is a syntax error if two AssertEntries have the same key.\n\t\t\t\tthrow new SyntaxError(this.errorMessage('Import Assertion Duplicate Key'));\n\t\t\t}\n\n\t\t\tif (this.peek().isType(Token.RBRACE)) break;\n\t\t\tif (!this.check(Token.COMMA)) {\n\t\t\t\tthrow new SyntaxError('Unexpected Token');\n\t\t\t}\n\t\t}\n\t\tthis.expect(Token.RBRACE);\n\t\treturn importAssertions;\n\t}\n\tprotected parseModuleSpecifier(): Literal<string> {\n\t\t// ModuleSpecifier :\n\t\t// StringLiteral\n\n\t\treturn this.expectAndGetValue(Token.STRING) as Literal<string>;\n\t}\n\tprotected parseExportClause() {\n\t\t// ExportClause :\n\t\t// '{' '}'\n\t\t// '{' ExportsList '}'\n\t\t// '{' ExportsList ',' '}'\n\t\t//\n\t\t// ExportsList :\n\t\t// ExportSpecifier\n\t\t// ExportsList ',' ExportSpecifier\n\t\t//\n\t\t// ExportSpecifier :\n\t\t// IdentifierName\n\t\t// IdentifierName 'as' IdentifierName\n\t\t// IdentifierName 'as' ModuleExportName\n\t\t// ModuleExportName\n\t\t// ModuleExportName 'as' ModuleExportName\n\t\t//\n\t\t// ModuleExportName :\n\t\t// StringLiteral\n\t\t// ZoneChunkList < ExportClauseData >* export_data = zone() -> New<ZoneChunkList<ExportClauseData>>(zone());\n\n\t\tthis.expect(Token.LBRACE);\n\n\t\tconst exportData: ExportSpecifier[] = [];\n\t\tlet nameTok = this.peek();\n\t\twhile (nameTok.isNotType(Token.RBRACE)) {\n\t\t\tconst localName = this.parseExportSpecifierName();\n\t\t\tlet exportName;\n\t\t\tif (this.checkContextualKeyword('as')) {\n\t\t\t\texportName = this.parseExportSpecifierName();\n\t\t\t} else {\n\t\t\t\texportName = localName;\n\t\t\t}\n\t\t\texportData.push(new ExportSpecifier(exportName as Identifier, localName as Identifier));\n\t\t\tif (this.peek().isType(Token.RBRACE)) break;\n\t\t\tif (!this.check(Token.COMMA)) {\n\t\t\t\tthrow new SyntaxError('Unexpected Token');\n\t\t\t}\n\t\t}\n\t\tthis.expect(Token.RBRACE);\n\t\treturn exportData;\n\t}\n\tprotected parseExportSpecifierName() {\n\t\tconst next = this.next();\n\n\t\t// IdentifierName\n\t\tif (next.isType(Token.IDENTIFIER) || Token.isPropertyName(next.token)) {\n\t\t\treturn next.getValue() as Identifier;\n\t\t}\n\n\t\t// ModuleExportName\n\t\tif (next.isType(Token.STRING)) {\n\t\t\tconst exportName = next.getValue() as Literal<string>;\n\t\t\treturn exportName;\n\t\t}\n\t\tthrow new SyntaxError(this.errorMessage('Unexpected Token'));\n\t}\n\tprotected parseNamedImports(): ImportSpecifier[] {\n\t\t// NamedImports :\n\t\t// '{' '}'\n\t\t// '{' ImportsList '}'\n\t\t// '{' ImportsList ',' '}'\n\t\t//\n\t\t// ImportsList :\n\t\t// ImportSpecifier\n\t\t// ImportsList ',' ImportSpecifier\n\t\t//\n\t\t// ImportSpecifier :\n\t\t// BindingIdentifier\n\t\t// IdentifierName 'as' BindingIdentifier\n\t\t// ModuleExportName 'as' BindingIdentifier\n\n\t\tthis.expect(Token.LBRACE);\n\t\tconst result: ImportSpecifier[] = [];\n\n\t\t// auto result = zone() -> New < ZonePtrList <const NamedImport>> (1, zone());\n\t\twhile (this.peek().isNotType(Token.RBRACE)) {\n\t\t\tconst importName = this.parseExportSpecifierName() as Identifier;\n\t\t\tlet localName = importName;\n\t\t\t// In the presence of 'as', the left-side of the 'as' can\n\t\t\t// be any IdentifierName. But without 'as', it must be a valid\n\t\t\t// BindingIdentifier.\n\t\t\tif (this.checkContextualKeyword('as')) {\n\t\t\t\tlocalName = this.parsePropertyOrPrivatePropertyName() as Identifier;\n\t\t\t}\n\t\t\tif (!Token.isValidIdentifier(this.current().token, LanguageMode.Strict, false, isStrict(this.languageMode))) {\n\t\t\t\tthrow new SyntaxError(this.errorMessage('Unexpected Reserved Keyword'));\n\t\t\t} else if (this.isEvalOrArguments(localName)) {\n\t\t\t\tthrow new SyntaxError(this.errorMessage('Strict Eval Arguments'));\n\t\t\t}\n\n\t\t\tresult.push(new ImportSpecifier(localName, importName));\n\n\t\t\t// DeclareUnboundVariable(localName, VariableMode:: kConst, kNeedsInitialization, position());\n\n\t\t\t// NamedImport * import = zone() -> New<NamedImport>(import_name, local_name, location);\n\t\t\t// result-> Add(import, zone());\n\n\t\t\tif (this.peek().isType(Token.RBRACE)) break;\n\t\t\tthis.expect(Token.COMMA);\n\t\t}\n\n\t\tthis.expect(Token.RBRACE);\n\t\treturn result;\n\t}\n\n\tprotected parseExportDefault(): ExportDefaultDeclaration {\n\t\t// Supports the following productions, starting after the 'default' token:\n\t\t// 'export' 'default' HoistableDeclaration\n\t\t// 'export' 'default' ClassDeclaration\n\t\t// 'export' 'default' AssignmentExpression[In] ';'\n\n\t\tthis.expect(Token.DEFAULT);\n\t\t// Scanner::Location default_loc = scanner() -> location();\n\n\t\t// ZonePtrList <const AstRawString> localNames(1, zone());\n\t\tconst localNames: string[] = [];\n\t\tlet result: ExpressionNode;\n\t\tswitch (this.peek().token) {\n\t\t\tcase Token.FUNCTION:\n\t\t\t\tresult = this.parseHoistableDeclaration(localNames, true);\n\t\t\t\tbreak;\n\n\t\t\tcase Token.CLASS:\n\t\t\t\tthis.consume(Token.CLASS);\n\t\t\t\tresult = this.parseClassDeclaration(localNames, true);\n\t\t\t\tbreak;\n\n\t\t\tcase Token.ASYNC:\n\t\t\t\tif (this.peekAhead().isType(Token.FUNCTION) && !this.scanner.hasLineTerminatorBeforeNext()) {\n\t\t\t\t\tthis.consume(Token.ASYNC);\n\t\t\t\t\tresult = this.parseHoistableDeclaration(localNames, true);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\tdefault: {\n\t\t\t\t// int pos = position();\n\t\t\t\t// AcceptINScope scope(this, true);\n\t\t\t\tthis.setAcceptIN(true);\n\t\t\t\tresult = this.parseAssignmentExpression();\n\t\t\t\t// SetFunctionName(value, ast_value_factory() -> default_string());\n\n\t\t\t\t// const AstRawString* local_name = ast_value_factory() -> dot_default_string();\n\t\t\t\t// localNames.Add(local_name, zone());\n\n\t\t\t\t// It's fine to declare this as VariableMode::kConst because the user has\n\t\t\t\t// no way of writing to it.\n\t\t\t\t// VariableProxy * proxy = DeclareBoundVariable(local_name, VariableMode:: kConst, pos);\n\t\t\t\t// proxy ->var() -> set_initializer_position(position());\n\n\t\t\t\t// Assignment * assignment = factory() -> NewAssignment(Token.INIT, proxy, value, kNoSourcePosition);\n\t\t\t\t// result = IgnoreCompletion( factory() -> NewExpressionStatement(assignment, kNoSourcePosition));\n\n\t\t\t\tthis.expectSemicolon();\n\t\t\t\tthis.restoreAcceptIN();\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t// if (!result) {\n\t\t// \tDCHECK_EQ(localNames.length(), 1);\n\t\t// \tmodule() -> AddExport(localNames.first(), ast_value_factory() -> default_string(), default_loc, zone());\n\t\t// }\n\n\t\treturn new ExportDefaultDeclaration(result);\n\t}\n\tprotected parseExportStar(): ExpressionNode | undefined {\n\t\tthis.consume(Token.MUL);\n\n\t\tif (!this.peekContextualKeyword('as')) {\n\t\t\t// 'export' '*' 'from' ModuleSpecifier ';'\n\t\t\t// Scanner::Location loc = scanner() -> location();\n\t\t\tthis.expectContextualKeyword('from');\n\t\t\t// Scanner::Location specifier_loc = scanner() -> peek_location();\n\t\t\tconst moduleSpecifier = this.parseModuleSpecifier();\n\t\t\tconst importAssertions = this.parseImportAssertClause();\n\t\t\tthis.expectSemicolon();\n\t\t\t// module() -> AddStarExport(module_specifier, import_assertions, loc,specifier_loc, zone());\n\t\t\treturn new ExportAllDeclaration(moduleSpecifier, undefined, importAssertions);\n\t\t}\n\n\t\t// 'export' '*' 'as' IdentifierName 'from' ModuleSpecifier ';'\n\t\t//\n\t\t// Desugaring:\n\t\t// export * as x from \"...\";\n\t\t// ~>\n\t\t// import * as .x from \"...\"; export {.x as x};\n\t\t//\n\t\t// Note that the desugared internal namespace export name (.x above) will\n\t\t// never conflict with a string literal export name, as literal string export\n\t\t// names in local name positions (i.e. left of 'as' or in a clause without\n\t\t// 'as') are disallowed without a following 'from' clause.\n\n\t\tthis.expectContextualKeyword('as');\n\t\tconst exportName = this.parseExportSpecifierName();\n\t\t// Scanner::Location export_name_loc = scanner() -> location();\n\t\t// const localName = this.nextInternalNamespaceExportName();\n\t\t// Scanner::Location local_name_loc = Scanner:: Location:: invalid();\n\t\t// DeclareUnboundVariable(local_name, VariableMode:: kConst, kCreatedInitialized,pos);\n\n\t\tthis.expectContextualKeyword('from');\n\t\tconst moduleSpecifier = this.parseModuleSpecifier();\n\t\tconst importAssertions = this.parseImportAssertClause();\n\t\tthis.expectSemicolon();\n\n\t\t// const specifiers = [new ExportSpecifier(exportName as Identifier, exportName as Identifier)];\n\n\t\t// module() -> AddStarImport(local_name, module_specifier, import_assertions,local_name_loc, specifier_loc, zone());\n\t\t// module() -> AddExport(local_name, export_name, export_name_loc, zone());\n\t\treturn new ExportAllDeclaration(moduleSpecifier, exportName as Identifier, importAssertions);\n\t}\n}\n"]}
|
package/v8/stream.d.ts
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
import { ExpressionNode } from '../api/expression.js';
|
|
2
2
|
import { Token, TokenExpression } from './token.js';
|
|
3
|
+
import { LanguageMode } from './enums.js';
|
|
4
|
+
export declare const IdentifierRegex: RegExp;
|
|
5
|
+
export declare const IdentifierStartRegex: RegExp;
|
|
6
|
+
export declare const IdentifierPartRegex: RegExp;
|
|
3
7
|
export interface PreTemplateLiteral extends ExpressionNode {
|
|
4
8
|
}
|
|
5
9
|
export declare class PreTemplateLiteral {
|
|
@@ -7,13 +11,23 @@ export declare class PreTemplateLiteral {
|
|
|
7
11
|
expressions: string[];
|
|
8
12
|
constructor(strings: string[], expressions: string[]);
|
|
9
13
|
}
|
|
14
|
+
export interface TemplateStringLiteral extends ExpressionNode {
|
|
15
|
+
}
|
|
16
|
+
export declare class TemplateStringLiteral {
|
|
17
|
+
string: string;
|
|
18
|
+
constructor(string: string);
|
|
19
|
+
}
|
|
10
20
|
export declare abstract class TokenStream {
|
|
11
|
-
|
|
21
|
+
protected mode: LanguageMode;
|
|
22
|
+
static getTokenStream(source: string | TokenExpression[], mode?: LanguageMode): TokenStream;
|
|
12
23
|
protected pos: number;
|
|
13
24
|
protected savedPosition: number;
|
|
14
25
|
protected current: TokenExpression;
|
|
15
26
|
protected savedCurrent: TokenExpression;
|
|
16
27
|
protected last?: TokenExpression;
|
|
28
|
+
constructor(mode?: LanguageMode);
|
|
29
|
+
setLanguageMode(mode: LanguageMode): void;
|
|
30
|
+
getLanguageMode(): LanguageMode;
|
|
17
31
|
save(): void;
|
|
18
32
|
restore(): void;
|
|
19
33
|
reset(): void;
|
|
@@ -37,26 +51,41 @@ export declare abstract class TokenStream {
|
|
|
37
51
|
peekAheadPosition(): number;
|
|
38
52
|
abstract next(): TokenExpression;
|
|
39
53
|
abstract hasLineTerminatorBeforeNext(): boolean;
|
|
54
|
+
abstract hasLineTerminatorAfterNext(): boolean;
|
|
40
55
|
abstract createError(message: String): string;
|
|
56
|
+
abstract scanTemplateContinuation(): TokenExpression;
|
|
41
57
|
}
|
|
42
58
|
export declare class TokenStreamer extends TokenStream {
|
|
43
59
|
private tokens;
|
|
44
|
-
constructor(tokens: TokenExpression[]);
|
|
60
|
+
constructor(tokens: TokenExpression[], mode?: LanguageMode);
|
|
45
61
|
next(): TokenExpression;
|
|
46
62
|
createError(message: String): string;
|
|
47
63
|
hasLineTerminatorBeforeNext(): boolean;
|
|
64
|
+
hasLineTerminatorAfterNext(): boolean;
|
|
65
|
+
scanTemplateContinuation(): TokenExpression;
|
|
48
66
|
}
|
|
49
67
|
export declare class TokenStreamImpl extends TokenStream {
|
|
50
68
|
private expression;
|
|
51
69
|
static REGEXP_FLAGS: string[];
|
|
52
70
|
static UnicodePattern: RegExp;
|
|
53
71
|
static DecimalPattern: RegExp;
|
|
54
|
-
|
|
72
|
+
static AsciiPattern: RegExp;
|
|
73
|
+
static OctalPattern: RegExp;
|
|
74
|
+
constructor(expression: string, mode?: LanguageMode);
|
|
55
75
|
private newToken;
|
|
56
76
|
next(): TokenExpression;
|
|
57
77
|
hasLineTerminatorBeforeNext(): boolean;
|
|
78
|
+
hasLineTerminatorAfterNext(): boolean;
|
|
58
79
|
private isString;
|
|
59
80
|
private isTemplateLiteral;
|
|
81
|
+
private scanTemplateSpan;
|
|
82
|
+
scanTemplateContinuation(): TokenExpression;
|
|
83
|
+
private scanEscape;
|
|
84
|
+
private scanUnicodeEscape;
|
|
85
|
+
private scanHexNumber;
|
|
86
|
+
private scanUnlimitedLengthHexNumber;
|
|
87
|
+
private hexValue;
|
|
88
|
+
private scanOctalEscape;
|
|
60
89
|
private isParentheses;
|
|
61
90
|
private isBracket;
|
|
62
91
|
private isCurlY;
|
|
@@ -65,6 +94,9 @@ export declare class TokenStreamImpl extends TokenStream {
|
|
|
65
94
|
private isProperty;
|
|
66
95
|
private isWhitespace;
|
|
67
96
|
private isComment;
|
|
97
|
+
private isLineTerminator;
|
|
98
|
+
private isStringLiteralLineTerminator;
|
|
99
|
+
private mayTerminateString;
|
|
68
100
|
scanRegExpPattern(): boolean;
|
|
69
101
|
private unescape;
|
|
70
102
|
private isRadixInteger;
|