@ibyar/expressions 0.5.62 → 0.6.0
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/api/class/class.d.ts +3 -13
- package/api/class/class.js +20 -42
- package/api/class/class.js.map +1 -1
- package/api/definition/function.js +5 -5
- package/api/definition/function.js.map +1 -1
- package/api/definition/member.js.map +1 -1
- package/api/definition/object.js +1 -1
- package/api/definition/object.js.map +1 -1
- package/api/definition/values.d.ts +3 -3
- package/api/definition/values.js +4 -4
- package/api/definition/values.js.map +1 -1
- package/api/expression.d.ts +7 -7
- package/api/expression.js.map +1 -1
- package/api/module/export.js +1 -1
- package/api/module/export.js.map +1 -1
- package/api/operators/unary.js.map +1 -1
- package/api/program.d.ts +2 -2
- package/api/program.js.map +1 -1
- package/package.json +5 -3
- package/scope/event.d.ts +3 -3
- package/scope/event.js +2 -2
- package/scope/event.js.map +1 -1
- package/scope/pool.d.ts +7 -0
- package/scope/pool.js +29 -0
- package/scope/pool.js.map +1 -0
- package/scope/proxy.d.ts +3 -9
- package/scope/proxy.js +19 -32
- package/scope/proxy.js.map +1 -1
- package/scope/scope.d.ts +96 -41
- package/scope/scope.js +255 -106
- package/scope/scope.js.map +1 -1
- package/scope/stack.d.ts +21 -19
- package/scope/stack.js +7 -0
- package/scope/stack.js.map +1 -1
- package/v8/inline.js.map +1 -1
package/v8/inline.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inline.js","sourceRoot":"","sources":["../../../src/expressions/v8/inline.ts"],"names":[],"mappings":"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","sourcesContent":["import type { DeclarationExpression, ExpressionNode } from '../api/expression.js';\nimport { Token, TokenExpression } from './token.js';\nimport { TemplateStringLiteral, TokenStream } from './stream.js';\nimport {\n\tOfNode, Identifier, ThisNode,\n\tGetIdentifier, SetIdentifier, AsyncIdentifier,\n\tNullNode, AwaitIdentifier,\n\tConstructorIdentifier, NameIdentifier,\n\tEvalIdentifier, ArgumentsIdentifier,\n\tTaggedTemplateExpression, TemplateLiteral, Literal, SuperIdentifier\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, Param,\n\tFunctionExpression, 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, LabeledStatement } 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 { ClassDeclaration, ClassExpression, PrivateIdentifier } from '../api/class/class.js';\nimport {\n\tAllowLabelledFunctionStatement,\n\tFunctionBodyType, FunctionInfo, FunctionKind,\n\tfunctionKindForImpl, FunctionSyntaxKind,\n\tisAsyncFunction, isAsyncGeneratorFunction,\n\tisAwaitAsIdentifierDisallowed, isClassMembersInitializerFunction,\n\tisGeneratorFunction, isModule, isResumableFunction,\n\tisSloppy, isStrict, LanguageMode, ParseFunctionFlag,\n\tParsingArrowHeadFlag, PropertyKind, PropertyKindInfo,\n\tPropertyPosition, SubFunctionKind, VariableDeclarationContext\n} from './enums.js';\nimport { DebuggerStatement } from '../api/computing/debugger.js';\n\n\nexport type InlineParserOptions = { mode?: LanguageMode, acceptIN?: boolean };\n\nexport abstract class AbstractParser {\n\n\tprotected acceptIN: boolean;\n\tprotected previousAcceptIN: boolean[] = [];\n\n\tprotected functionKind: FunctionKind;\n\tprotected previousFunctionKind: FunctionKind[] = [];\n\tget languageMode() {\n\t\treturn this.scanner.getLanguageMode();\n\t}\n\n\tset languageMode(mode: LanguageMode) {\n\t\tthis.scanner.setLanguageMode(mode);\n\t}\n\n\tconstructor(protected scanner: TokenStream, acceptIN?: boolean) {\n\t\tthis.previousAcceptIN.push(this.acceptIN = acceptIN ?? false);\n\t\tthis.previousFunctionKind.push(this.functionKind = FunctionKind.NormalFunction);\n\t}\n\tabstract scan(): ExpressionNode;\n\tprotected position() {\n\t\treturn this.scanner.getPos();\n\t}\n\tprotected setAcceptIN(acceptIN: boolean) {\n\t\tthis.previousAcceptIN.push(this.acceptIN);\n\t\tthis.acceptIN = acceptIN;\n\t}\n\tprotected restoreAcceptIN() {\n\t\tthis.acceptIN = this.previousAcceptIN.pop() ?? false;\n\t}\n\tprotected getLastFunctionKind() {\n\t\treturn this.previousFunctionKind.at(-2) ?? FunctionKind.NormalFunction;\n\t}\n\tprotected setFunctionKind(functionKind: FunctionKind) {\n\t\tthis.previousFunctionKind.push(this.functionKind);\n\t\tthis.functionKind = functionKind;\n\t}\n\tprotected restoreFunctionKind() {\n\t\tthis.functionKind = this.previousFunctionKind.pop() ?? FunctionKind.NormalFunction;\n\t}\n\tprotected setStatue(acceptIN: boolean, functionKind: FunctionKind) {\n\t\tthis.setFunctionKind(functionKind);\n\t\tthis.setAcceptIN(acceptIN);\n\t}\n\tprotected restoreStatue() {\n\t\tthis.restoreFunctionKind();\n\t\tthis.restoreAcceptIN();\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 checkAndGetValue(token: Token): ExpressionNode | undefined {\n\t\tconst next = this.scanner.peek();\n\t\tif (next.isType(token)) {\n\t\t\tthis.scanner.next();\n\t\t\treturn next.value;\n\t\t}\n\t\treturn undefined;\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 expectAndGetValue(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\treturn current.getValue();\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 isArguments(name: ExpressionNode): boolean {\n\t\treturn name instanceof Identifier && name.getName() === 'arguments';\n\t}\n\tprotected isEval(name: ExpressionNode): boolean {\n\t\treturn name instanceof Identifier && name.getName() === 'eval';\n\t}\n\tprotected isEvalOrArguments(name: ExpressionNode): boolean {\n\t\treturn name instanceof Identifier && (name.getName() === 'eval' || name.getName() === 'arguments');\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.LBRACE:\n\t\t\tcase Token.LBRACK:\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 markParenthesized(expression: ExpressionNode) {\n\t\tReflect.set(expression, 'parenthesized', true);\n\t}\n\tprotected clearParenthesized(expression: ExpressionNode) {\n\t\tReflect.deleteProperty(expression, 'parenthesized');\n\t}\n\tprotected isParenthesized(expression: ExpressionNode): boolean {\n\t\treturn Reflect.get(expression, 'parenthesized') === true;\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 (isStrict(this.languageMode) && this.isEvalOrArguments(expression)) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t}\n\tprotected isPattern(expression: ExpressionNode): expression is (ObjectExpression | ArrayExpression) {\n\t\treturn expression instanceof ObjectExpression || expression instanceof ArrayExpression;\n\t}\n\tprotected isProperty(expression: ExpressionNode): expression is Property | MemberExpression {\n\t\treturn expression instanceof Property || 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 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) && !isAsyncFunction(this.functionKind)) {\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 expectContextualKeyword(keyword: string) {\n\t\tconst current = this.scanner.next();\n\t\tif (!current.test((token, value) => Token.IDENTIFIER.equal(token) && keyword === value?.toString())) {\n\t\t\tthrow new Error(this.errorMessage(`Unexpected Token: current Token is ${JSON.stringify(current)}`));\n\t\t}\n\t\treturn true;\n\t}\n\tprotected checkContextualKeyword(keyword: string) {\n\t\tconst next = this.scanner.peek();\n\t\tif (next.test((token, value) => Token.IDENTIFIER.equal(token) && keyword === value?.toString())) {\n\t\t\tthis.scanner.next();\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\tprotected peekContextualKeyword(keyword: string) {\n\t\tconst next = this.scanner.peek();\n\t\treturn next.test((token, value) => Token.IDENTIFIER.equal(token) && keyword === value?.toString());\n\t}\n\tprotected methodKindFor(isStatic: boolean, flag: ParseFunctionFlag): FunctionKind {\n\t\treturn functionKindForImpl(\n\t\t\tisStatic ? SubFunctionKind.StaticMethod : SubFunctionKind.NonStaticMethod,\n\t\t\tflag\n\t\t);\n\t}\n\tprotected isGenerator() {\n\t\treturn isGeneratorFunction(this.functionKind);\n\t}\n\tprotected isAsyncFunction() {\n\t\treturn isAsyncFunction(this.functionKind);\n\t}\n\tprotected is_async_function() {\n\t\treturn isAsyncFunction(this.functionKind);\n\t}\n\tprotected is_async_generator() {\n\t\treturn isAsyncGeneratorFunction(this.functionKind);\n\t}\n\tprotected is_resumable() {\n\t\treturn isResumableFunction(this.functionKind);\n\t}\n\tprotected isAwaitAllowed() {\n\t\treturn this.isAsyncFunction() || isModule(this.functionKind);\n\t}\n\tprotected isAwaitAsIdentifierDisallowed() {\n\t\treturn isStrict(this.languageMode) ||\n\t\t\tisAwaitAsIdentifierDisallowed(this.functionKind);\n\t}\n\tprotected shouldBanArguments() {\n\t\treturn isClassMembersInitializerFunction(this.functionKind);\n\t}\n\tprotected errorMessage(message: string): string {\n\t\treturn this.scanner.createError(message);\n\t}\n\n\tprotected reportErrorMessage(message: string): void {\n\t\tconsole.error(this.scanner.createError(message));\n\t}\n}\n\nexport class JavaScriptInlineParser extends AbstractParser {\n\tstatic parse(source: string | TokenExpression[] | TokenStream, { mode, acceptIN }: InlineParserOptions = {}) {\n\t\tmode ??= LanguageMode.Strict;\n\t\tconst stream = (typeof source === 'string')\n\t\t\t? TokenStream.getTokenStream(source, mode)\n\t\t\t: Array.isArray(source) ? TokenStream.getTokenStream(source) : source;\n\t\tacceptIN ??= false;\n\t\tconst parser = new JavaScriptInlineParser(stream, acceptIN);\n\t\treturn parser.scan();\n\t}\n\tconstructor(scanner: TokenStream, acceptIN?: boolean) {\n\t\tsuper(scanner, acceptIN);\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(\n\t\tallowFunction: AllowLabelledFunctionStatement = AllowLabelledFunctionStatement.DisallowLabelledFunctionStatement\n\t): ExpressionNode {\n\t\tswitch (this.peek().token) {\n\t\t\tcase Token.LBRACE:\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\tif (this.isAwaitAllowed() && 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\tcase Token.FUNCTION:\n\t\t\t\tthrow new SyntaxError(this.errorMessage(`FunctionDeclaration only allowed as a StatementListItem not in an arbitrary Statement position.`));\n\t\t\tcase Token.DEBUGGER:\n\t\t\t\treturn this.parseDebuggerStatement();\n\t\t\tcase Token.VAR:\n\t\t\t\treturn this.parseVariableDeclarations(VariableDeclarationContext.Statement);\n\t\t\tcase Token.ASYNC:\n\t\t\t\tif (!this.scanner.hasLineTerminatorAfterNext() && this.peekAhead().isType(Token.FUNCTION)) {\n\t\t\t\t\tthrow new SyntaxError(this.errorMessage(`async function in single statement context.`));\n\t\t\t\t}\n\t\t\tdefault:\n\t\t\t\treturn this.parseExpressionOrLabelledStatement(allowFunction);\n\t\t}\n\t}\n\tprotected parseDebuggerStatement() {\n\t\tthis.consume(Token.DEBUGGER);\n\t\tthis.expectSemicolon();\n\t\treturn DebuggerStatement.INSTANCE;\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\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\tlet identifier: ExpressionNode | undefined;\n\t\t\tconst hasBinding = this.check(Token.LPAREN);\n\t\t\tif (hasBinding) {\n\t\t\t\tif (this.peekAnyIdentifier()) {\n\t\t\t\t\tidentifier = this.parseNonRestrictedIdentifier();\n\t\t\t\t} else {\n\t\t\t\t\tidentifier = this.parseBindingPattern(true);\n\t\t\t\t}\n\t\t\t\tthis.expect(Token.RPAREN);\n\t\t\t}\n\t\t\tconst block = this.parseBlock();\n\t\t\tcatchBlock = new CatchClauseNode(block, identifier);\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}\n\t\treturn new TryCatchNode(tryBlock, catchBlock, finallyBlock);\n\t}\n\tprotected parseNonRestrictedIdentifier() {\n\t\tconst result = this.parseIdentifier();\n\t\tif (isStrict(this.languageMode) && this.isEvalOrArguments(result)) {\n\t\t\tthrow new SyntaxError(this.errorMessage('Strict Eval/Arguments '));\n\t\t}\n\t\treturn result;\n\t}\n\tprotected parseBlock(): BlockStatement {\n\t\tthis.expect(Token.LBRACE);\n\t\tconst statements: ExpressionNode[] = [];\n\t\tconst block = new BlockStatement(statements);\n\t\twhile (this.peek().isNotType(Token.RBRACE)) {\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.RBRACE);\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\treturn this.parseHoistableDeclaration(undefined, false);\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.CONST:\n\t\t\t\treturn this.parseVariableDeclarations(VariableDeclarationContext.StatementListItem);\n\t\t\tcase Token.LET:\n\t\t\t\tif (this.isNextLetKeyword()) {\n\t\t\t\t\treturn this.parseVariableDeclarations(VariableDeclarationContext.StatementListItem);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase Token.ASYNC:\n\t\t\t\tif (this.peekAhead().isType(Token.FUNCTION) && !this.scanner.hasLineTerminatorAfterNext()) {\n\t\t\t\t\tthis.consume(Token.ASYNC);\n\t\t\t\t\treturn this.parseAsyncFunctionDeclaration(undefined, false);\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(AllowLabelledFunctionStatement.AllowLabelledFunctionStatement);\n\t}\n\tprotected parseFunctionExpression() {\n\t\tthis.consume(Token.FUNCTION);\n\t\tconst functionKind = this.check(Token.MUL) ? FunctionKind.GeneratorFunction : FunctionKind.NormalFunction;\n\t\tlet name: Identifier | undefined;\n\t\tlet functionSyntaxKind = FunctionSyntaxKind.AnonymousExpression;\n\t\tconst peek = this.peek();\n\t\tif (peek.isNotType(Token.LPAREN)) {\n\t\t\tname = this.parseIdentifier(this.getLastFunctionKind());\n\t\t\tfunctionSyntaxKind = FunctionSyntaxKind.NamedExpression;\n\t\t}\n\t\treturn this.parseFunctionLiteral(functionKind, functionSyntaxKind, name);\n\t}\n\tprotected parseAsyncFunctionDeclaration(names: string[] | undefined, defaultExport: boolean): FunctionDeclaration {\n\t\t// AsyncFunctionDeclaration ::\n\t\t// async [no LineTerminator here] function BindingIdentifier[Await]\n\t\t// ( FormalParameters[Await] ) { AsyncFunctionBody }\n\t\tif (this.scanner.hasLineTerminatorBeforeNext()) {\n\t\t\tthrow new SyntaxError(this.errorMessage('Line Terminator Before `function` parsing `async function`.'));\n\t\t}\n\t\tthis.consume(Token.FUNCTION);\n\t\treturn this.parseHoistableDeclaration01(FunctionKind.AsyncFunction, names, defaultExport) as FunctionDeclaration;\n\n\t}\n\tprotected parseIfStatement(): ExpressionNode {\n\t\tthis.consume(Token.IF);\n\t\tthis.consume(Token.LPAREN);\n\t\tconst condition = this.parseExpression();\n\t\tthis.consume(Token.RPAREN);\n\t\tconst thenStatement = this.parseScopedStatement();\n\t\tlet elseStatement: ExpressionNode | undefined;\n\t\tif (this.peek().isType(Token.ELSE)) {\n\t\t\tthis.consume(Token.ELSE);\n\t\t\telseStatement = this.parseScopedStatement();\n\t\t}\n\t\treturn new IfStatement(condition, thenStatement, elseStatement);\n\t}\n\tprotected parseScopedStatement(): ExpressionNode {\n\t\tif (isStrict(this.languageMode) || this.peek().isNotType(Token.FUNCTION)) {\n\t\t\treturn this.parseStatement();\n\t\t} else {\n\t\t\treturn this.parseFunctionDeclaration();\n\t\t}\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\tthis.expect(Token.WHILE);\n\t\tthis.expect(Token.LPAREN);\n\t\tconst condition = this.parseExpression();\n\t\tthis.expect(Token.RPAREN);\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.LPAREN);\n\t\tconst condition = this.parseExpression();\n\t\tthis.expect(Token.RPAREN);\n\t\tconst body = this.parseStatement();\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.LPAREN);\n\t\tconst tag = this.parseExpression();\n\t\tthis.expect(Token.RPAREN);\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.LBRACE);\n\t\twhile (this.peek().isNotType(Token.RBRACE)) {\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.RBRACE)) {\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);\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.RBRACE);\n\t\treturn switchStatement;\n\t}\n\tprotected parseForStatement() {\n\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\t\t// We parse a declaration/expression after the 'for (' and then read the first\n\t\t// expression/declaration before we know if this is a for or a for-each.\n\t\t// typename FunctionState::LoopScope loop_scope(function_state_);\n\n\t\tthis.consume(Token.FOR);\n\t\tthis.expect(Token.LPAREN);\n\t\tconst peek = this.peek();\n\t\tconst starts_with_let = peek.isType(Token.LET);\n\t\tif (peek.isType(Token.CONST) || (starts_with_let && this.isNextLetKeyword())) {\n\n\t\t\t// The initializer contains lexical declarations,\n\t\t\t// so create an in-between scope.\n\n\t\t\t// Also record whether inner functions or evals are found inside\n\t\t\t// this loop, as this information is used to simplify the desugaring\n\t\t\t// if none are found.\n\t\t\t// typename FunctionState::FunctionOrEvalRecordingScope recording_scope(function_state_);\n\t\t\tconst initializer = this.parseVariableDeclarations(VariableDeclarationContext.ForStatement);\n\n\t\t\tconst forMode = this.checkInOrOf();\n\t\t\tif (forMode) {\n\t\t\t\treturn this.parseForEachStatementWithDeclarations(initializer, forMode);\n\t\t\t}\n\n\t\t\tthis.expect(Token.SEMICOLON);\n\n\t\t\t// Parse the remaining code in the inner block scope since the declaration\n\t\t\t// above was parsed there. We'll finalize the unnecessary outer block scope\n\t\t\t// after parsing the rest of the loop.\n\t\t\treturn this.parseStandardForLoopWithLexicalDeclarations(initializer);\n\t\t}\n\n\t\tlet initializer: ExpressionNode;\n\t\tif (peek.isType(Token.VAR)) {\n\t\t\tinitializer = this.parseVariableDeclarations(VariableDeclarationContext.ForStatement);\n\t\t\t// ParseVariableDeclarations(kForStatement, & for_info.parsing_result,& for_info.bound_names);\n\t\t\t// DCHECK_EQ(for_info.parsing_result.descriptor.mode, VariableMode:: kVar);\n\t\t\t// for_info.position = scanner() -> location().beg_pos;\n\t\t\tconst forMode = this.checkInOrOf();\n\t\t\tif (forMode) {\n\t\t\t\treturn this.parseForEachStatementWithDeclarations(initializer as VariableDeclarationNode, forMode);\n\t\t\t}\n\t\t\t// init = impl() -> BuildInitializationBlock(& for_info.parsing_result);\n\t\t} else if (this.peek().isNotType(Token.SEMICOLON)) {\n\t\t\t// The initializer does not contain declarations.\n\t\t\tthis.setAcceptIN(false);\n\t\t\tinitializer = this.parseExpressionCoverGrammar();\n\t\t\tthis.restoreAcceptIN();\n\t\t\t// ExpressionParsingScope parsing_scope(impl());\n\t\t\t// AcceptINScope scope(this, false);\n\t\t\t// `for (async of` is disallowed but `for (async.x of` is allowed, so\n\t\t\t// check if the token is ASYNC after parsing the expression.\n\t\t\t// Initializer is reference followed by in/of.\n\t\t\tconst expression_is_async = this.current().isType(Token.ASYNC);\n\t\t\tconst forMode = this.checkInOrOf();\n\t\t\tif (forMode) {\n\t\t\t\tif (forMode === 'OF' && starts_with_let || expression_is_async) {\n\t\t\t\t\tthrow new SyntaxError(this.errorMessage(starts_with_let ? 'For Of Let' : 'For Of Async'));\n\t\t\t\t}\n\t\t\t\treturn this.parseForEachStatementWithoutDeclarations(initializer, forMode)\n\t\t\t}\n\t\t}\n\n\t\tthis.expect(Token.SEMICOLON);\n\t\treturn this.parseStandardForLoop(initializer!);\n\t}\n\tprotected parseStandardForLoopWithLexicalDeclarations(initializer: VariableDeclarationNode) {\n\t\t// The condition and the next statement of the for loop must be parsed\n\t\t// in a new scope.\n\t\treturn this.parseStandardForLoop(initializer);\n\t}\n\tprotected parseForEachStatementWithDeclarations(initializer: VariableDeclarationNode, forMode: 'IN' | 'OF') {\n\t\t// Just one declaration followed by in/of.\n\t\tif (initializer.getDeclarations().length != 1) {\n\t\t\tthrow new SyntaxError(this.errorMessage('For In/Of loop Multi Bindings'));\n\t\t}\n\t\treturn this.parseForEachStatementWithoutDeclarations(initializer, forMode);\n\t}\n\tprotected parseForEachStatementWithoutDeclarations(initializer: ExpressionNode, forMode: 'IN' | 'OF') {\n\t\tlet enumerable: ExpressionNode;\n\t\tif (forMode == 'OF') {\n\t\t\tthis.setAcceptIN(true);\n\t\t\tenumerable = this.parseAssignmentExpression();\n\t\t\tthis.restoreAcceptIN();\n\t\t} else {\n\t\t\tenumerable = this.parseExpression();\n\t\t}\n\t\tthis.expect(Token.RPAREN);\n\t\tconst body = this.parseStatement();\n\t\tif (forMode === 'OF') {\n\t\t\treturn new ForOfNode(initializer as ForDeclaration, enumerable, body);\n\t\t} else if (forMode === 'IN') {\n\t\t\treturn new ForInNode(initializer as ForDeclaration, enumerable, body);\n\t\t} else {\n\t\t\tthrow new Error(this.errorMessage(`parsing for loop: ${this.position()}`));\n\t\t}\n\t}\n\tprotected parseStandardForLoop(initializer: ExpressionNode) {\n\t\t// CheckStackOverflow();\n\t\t// ForStatementT loop = factory() -> NewForStatement(stmt_pos);\n\t\t// Target target(this, loop, labels, own_labels, Target:: TARGET_FOR_ANONYMOUS);\n\n\t\tlet cond: ExpressionNode = new EmptyStatement();\n\t\tif (this.peek().isNotType(Token.SEMICOLON)) {\n\t\t\tcond = this.parseExpression();\n\t\t}\n\t\tthis.expect(Token.SEMICOLON);\n\n\t\tlet next: ExpressionNode = new EmptyStatement();\n\t\tif (this.peek().isNotType(Token.RPAREN)) {\n\t\t\tnext = this.parseExpression();\n\t\t}\n\t\tthis.expect(Token.RPAREN);\n\t\tconst body = this.parseStatement();\n\t\treturn new ForNode(body, initializer, cond, next);\n\t}\n\tprotected parseForAwaitStatement() {\n\t\t// for await '(' ForDeclaration of AssignmentExpression ')'\n\n\t\t// Create an in-between scope for let-bound iteration variables.\n\t\t// BlockState for_state(zone(), & scope_);\n\t\tif (!this.isAwaitAllowed()) {\n\t\t\tthrow new SyntaxError(this.errorMessage('\"await\" is not allowed'));\n\t\t}\n\t\tthis.expect(Token.FOR);\n\t\tthis.expect(Token.AWAIT);\n\t\tthis.expect(Token.LPAREN);\n\n\t\tlet hasDeclarations = false;\n\t\t// Scope * inner_block_scope = NewScope(BLOCK_SCOPE);\n\t\tlet eachVariable: ExpressionNode;\n\n\t\tlet peek = this.peek();\n\t\tlet startsWithLet = peek.isType(Token.LET);\n\t\tif (peek.isType(Token.VAR) || peek.isType(Token.CONST)\n\t\t\t|| (startsWithLet && this.isNextLetKeyword())) {\n\t\t\t// The initializer contains declarations\n\t\t\t// 'for' 'await' '(' ForDeclaration 'of' AssignmentExpression ')'\n\t\t\t// Statement\n\t\t\t// 'for' 'await' '(' 'var' ForBinding 'of' AssignmentExpression ')'\n\t\t\t// Statement\n\t\t\thasDeclarations = true;\n\t\t\tconst initializer = this.parseVariableDeclarations(VariableDeclarationContext.ForStatement);\n\t\t\tif (initializer.getDeclarations().length != 1) {\n\t\t\t\tthrow new SyntaxError(this.errorMessage('For In/Of Loop MultiBindings, \"for-await-of\"'));\n\t\t\t}\n\t\t\teachVariable = initializer;\n\t\t} else {\n\t\t\t// The initializer does not contain declarations.\n\t\t\t// 'for' 'await' '(' LeftHandSideExpression 'of' AssignmentExpression ')'\n\t\t\t// Statement\n\t\t\tif (startsWithLet) {\n\t\t\t\tthrow new SyntaxError(this.errorMessage('The initializer does not contain declarations, For Of Let, \"for-await-of\"'));\n\t\t\t}\n\t\t\teachVariable = this.parseLeftHandSideExpression();\n\t\t}\n\n\t\tthis.expectContextualKeyword('of');\n\t\tthis.setAcceptIN(true);\n\t\tconst iterable = this.parseAssignmentExpression();\n\t\tthis.restoreAcceptIN();\n\t\tthis.expect(Token.RPAREN);\n\t\tconst body = this.parseStatement();\n\t\treturn new ForAwaitOfNode(eachVariable as ForDeclaration, iterable, body);\n\t}\n\tprotected parseVariableDeclarations(varContext: VariableDeclarationContext): VariableDeclarationNode {\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 (isStrict(this.languageMode) && 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\tthis.setAcceptIN(varContext !== VariableDeclarationContext.ForStatement)\n\t\t\t\tvalue = this.parseAssignmentExpression();\n\t\t\t\tthis.restoreAcceptIN();\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`));\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 DeclarationExpression, 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 (isStrict(this.languageMode) && 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.LBRACK) {\n\t\t\treturn this.parseArrayLiteral(isPattern);\n\t\t} else if (token == Token.LBRACE) {\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\t// Updates made here must be reflected on ClassifyPropertyIdentifier.\n\t\tif (Token.isInRangeIdentifierAndAsync(next.token)) {\n\t\t\tconst name = next.getValue<Identifier>();\n\t\t\tif (this.isArguments(name) && this.shouldBanArguments()) {\n\t\t\t\tthrow new SyntaxError(this.errorMessage('Arguments Disallowed In Initializer And Static Block'));\n\t\t\t}\n\t\t\treturn name;\n\t\t}\n\n\t\tif (!Token.isValidIdentifier(next.token, this.languageMode, this.isGenerator(), this.isAwaitAsIdentifierDisallowed())) {\n\t\t\tthrow new SyntaxError(this.errorMessage('Invalid Identifier'));\n\t\t}\n\n\t\tif (next.isType(Token.AWAIT)) {\n\t\t\treturn next.getValue<Identifier>();\n\t\t}\n\n\t\treturn next.getValue<Identifier>();\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\tlet label: Identifier | undefined;\n\t\tif (!this.scanner.hasLineTerminatorBeforeNext() &&\n\t\t\t!Token.isAutoSemicolon(this.peek().token)) {\n\t\t\t// ECMA allows \"eval\" or \"arguments\" as labels even in strict mode.\n\t\t\tlabel = this.parseIdentifier();\n\t\t}\n\t\tthis.expectSemicolon();\n\t\treturn label ? new ContinueStatement(label) : 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); let label: Identifier | undefined;\n\t\tif (!this.scanner.hasLineTerminatorBeforeNext() &&\n\t\t\t!Token.isAutoSemicolon(this.peek().token)) {\n\t\t\t// ECMA allows \"eval\" or \"arguments\" as labels even in strict mode.\n\t\t\tlabel = this.parseIdentifier();\n\t\t}\n\t\tthis.expectSemicolon();\n\t\treturn label ? new BreakStatement(label) : 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(this.functionKind)) {\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(allowFunction: AllowLabelledFunctionStatement): 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.LBRACE:\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.LBRACK) &&\n\t\t\t\t\t((nextNext.isNotType(Token.LBRACE) && 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\tthis.setAcceptIN(true);\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)\n\t\t\t\t&& isSloppy(this.languageMode)\n\t\t\t\t&& allowFunction == AllowLabelledFunctionStatement.AllowLabelledFunctionStatement) {\n\t\t\t\tconst result = this.parseFunctionDeclaration();\n\t\t\t\tthis.restoreAcceptIN();\n\t\t\t\treturn new LabeledStatement(expression, result);\n\t\t\t}\n\t\t\tconst result = this.parseStatement(allowFunction);\n\t\t\tthis.restoreAcceptIN();\n\t\t\treturn new LabeledStatement(expression, result);\n\t\t}\n\t\tthis.restoreAcceptIN();\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\tthis.setAcceptIN(true);\n\t\tconst result = this.parseExpressionCoverGrammar();\n\t\tthis.restoreAcceptIN();\n\t\treturn result;\n\t}\n\tprotected parseFunctionDeclaration(): FunctionDeclaration {\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.parseHoistableDeclaration01(FunctionKind.NormalFunction, undefined, false) as FunctionDeclaration;\n\t}\n\n\tprotected parseAsyncFunctionLiteral() {\n\t\t// AsyncFunctionLiteral ::\n\t\t// async [no LineTerminator here] function ( FormalParameters[Await] )\n\t\t// { AsyncFunctionBody }\n\t\t//\n\t\t// async [no LineTerminator here] function BindingIdentifier[Await]\n\t\t// ( FormalParameters[Await] ) { AsyncFunctionBody }\n\t\tif (this.current().isNotType(Token.ASYNC)) {\n\t\t\tthrow new SyntaxError(this.errorMessage('invalid token'));\n\t\t}\n\t\tthis.consume(Token.FUNCTION);\n\t\tlet name: Identifier | undefined;\n\t\tlet syntaxKind = FunctionSyntaxKind.AnonymousExpression;\n\t\tlet flags = FunctionKind.AsyncFunction;\n\t\tif (this.check(Token.MUL)) {\n\t\t\tflags = FunctionKind.AsyncGeneratorFunction;\n\t\t}\n\t\tif (this.peekAnyIdentifier()) {\n\t\t\tsyntaxKind = FunctionSyntaxKind.NamedExpression;\n\t\t\tname = this.parseIdentifier(this.getLastFunctionKind());\n\t\t}\n\t\treturn this.parseFunctionLiteral(flags, syntaxKind, name);\n\t}\n\tprotected parseHoistableDeclaration(names: string[] | undefined, defaultExport: boolean) {\n\t\tthis.consume(Token.FUNCTION);\n\t\tlet flags = FunctionKind.NormalFunction;\n\t\tif (this.check(Token.MUL)) {\n\t\t\tflags = FunctionKind.GeneratorFunction;\n\t\t}\n\t\treturn this.parseHoistableDeclaration01(flags, names, defaultExport);\n\t}\n\n\tprotected parseHoistableDeclaration01(flag: FunctionKind, names: string[] | undefined, defaultExport: boolean) {\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 ((flag & ParseFunctionFlag.IsAsync) != 0 && this.check(Token.MUL)) {\n\t\t\t// Async generator\n\t\t\tflag |= ParseFunctionFlag.IsGenerator;\n\t\t}\n\n\t\tlet name: Identifier | undefined;\n\t\tif (this.peek().isType(Token.LPAREN)) {\n\t\t\tif (defaultExport) {\n\t\t\t\tname = new Identifier('default');\n\t\t\t} else {\n\t\t\t\tthrow new SyntaxError(this.errorMessage('Missing Function Name'));\n\t\t\t}\n\t\t} else {\n\t\t\tname = this.parseIdentifier(this.getLastFunctionKind());\n\t\t}\n\t\tnames?.push(name.toString());\n\t\treturn this.parseFunctionLiteral(flag, FunctionSyntaxKind.Declaration, name);\n\t}\n\tprotected parseIdentifier(kind?: FunctionKind): Identifier {\n\t\tkind ??= this.functionKind;\n\t\tconst next = this.next();\n\t\tif (!Token.isValidIdentifier(next.token, this.languageMode, isGeneratorFunction(kind), isAwaitAsIdentifierDisallowed(kind))) {\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<Identifier>();\n\t\t}\n\t\treturn this.getIdentifier();\n\t}\n\tprotected getIdentifier(): Identifier {\n\t\tconst current = this.current();\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.IDENTIFIER:\n\t\t\tcase Token.PRIVATE_NAME:\n\t\t\t\treturn current.getValue();\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t\tconst name = current.getValue().toString();\n\t\tif (name == 'constructor') {\n\t\t\treturn ConstructorIdentifier;\n\t\t}\n\t\tif (name == 'name') {\n\t\t\treturn NameIdentifier;\n\t\t}\n\t\tif (name == 'eval') {\n\t\t\treturn EvalIdentifier;\n\t\t}\n\t\telse if (name == 'arguments') {\n\t\t\treturn ArgumentsIdentifier;\n\t\t}\n\t\treturn current.getValue();\n\t}\n\tprotected parseFunctionLiteral(flag: FunctionKind, functionSyntaxKind: FunctionSyntaxKind, name?: Identifier): FunctionDeclaration | FunctionExpression {\n\t\t// Function ::\n\t\t// '(' FormalParameterList? ')' '{' FunctionBody '}'\n\n\t\tthis.setFunctionKind(flag);\n\t\tconst functionInfo: FunctionInfo = {};\n\t\tthis.expect(Token.LPAREN);\n\t\tconst formals: ExpressionNode[] = this.parseFormalParameterList(functionInfo);\n\t\tthis.expect(Token.RPAREN);\n\t\tthis.expect(Token.LBRACE);\n\t\tthis.setAcceptIN(true);\n\t\tconst body = this.parseFunctionBody(flag, FunctionBodyType.BLOCK, functionSyntaxKind);\n\t\tthis.restoreAcceptIN();\n\t\tthis.restoreFunctionKind();\n\t\tconst bodyBlock = new BlockStatement(body);\n\t\tif (name) {\n\t\t\treturn new FunctionDeclaration(formals, bodyBlock, isAsyncFunction(flag), isGeneratorFunction(flag), name);\n\t\t}\n\t\treturn new FunctionExpression(formals, bodyBlock, isAsyncFunction(flag), isGeneratorFunction(flag));\n\t}\n\tprotected parseFunctionBody(\n\t\tkind: FunctionKind,\n\t\tbodyType: FunctionBodyType.BLOCK,\n\t\tfunctionSyntaxKind: FunctionSyntaxKind): ExpressionNode[];\n\tprotected parseFunctionBody(\n\t\tkind: FunctionKind,\n\t\tbodyType: FunctionBodyType.EXPRESSION,\n\t\tfunctionSyntaxKind: FunctionSyntaxKind): ExpressionNode\n\tprotected parseFunctionBody(\n\t\tkind: FunctionKind,\n\t\tbodyType: FunctionBodyType,\n\t\tfunctionSyntaxKind: FunctionSyntaxKind): ExpressionNode[] | ExpressionNode {\n\t\t// Building the parameter initialization block declares the parameters.\n\t\t// TODO(verwaest): Rely on ArrowHeadParsingScope instead.\n\n\t\tlet innerBody: ExpressionNode[] | ExpressionNode;\n\t\tif (bodyType == FunctionBodyType.EXPRESSION) {\n\t\t\tinnerBody = this.parseAssignmentExpression();\n\t\t} else {\n\t\t\t// DCHECK(accept_IN_);\n\t\t\t// DCHECK_EQ(FunctionBodyType:: kBlock, body_type);\n\t\t\t// If we are parsing the source as if it is wrapped in a function, the\n\t\t\t// source ends without a closing brace.\n\t\t\tconst closing_token = functionSyntaxKind == FunctionSyntaxKind.Wrapped ? Token.EOS : Token.RBRACE;\n\n\t\t\tif (isAsyncGeneratorFunction(kind)) {\n\t\t\t\tinnerBody = this.parseAndRewriteAsyncGeneratorFunctionBody(kind);\n\t\t\t} else if (isGeneratorFunction(kind)) {\n\t\t\t\tinnerBody = this.parseAndRewriteGeneratorFunctionBody(kind);\n\t\t\t} else if (isAsyncFunction(kind)) {\n\t\t\t\tinnerBody = this.parseAsyncFunctionBody();\n\t\t\t} else {\n\t\t\t\tinnerBody = this.parseStatementList(closing_token);\n\t\t\t}\n\t\t\tthis.expect(closing_token);\n\t\t}\n\t\treturn innerBody;\n\t}\n\tprotected parseAndRewriteAsyncGeneratorFunctionBody(kind: FunctionKind): ExpressionNode[] {\n\t\treturn this.parseStatementList(Token.RBRACE);\n\t}\n\tprotected parseAndRewriteGeneratorFunctionBody(kind: FunctionKind): ExpressionNode[] {\n\t\treturn this.parseStatementList(Token.RBRACE);\n\t}\n\tprotected parseAsyncFunctionBody(): ExpressionNode[] {\n\t\treturn this.parseStatementList(Token.RBRACE);\n\t}\n\tprotected parseStatementList(endToken: Token): ExpressionNode[] {\n\t\t// StatementList ::\n\t\t// (StatementListItem)* <end_token>\n\t\tif (this.peek().test((token, value) => Token.STRING === token && 'use strict' === (value as Literal<string>).getValue())) {\n\t\t\tthis.languageMode = LanguageMode.Strict;\n\t\t}\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.RPAREN)) {\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.RPAREN)) {\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\tthis.setAcceptIN(true);\n\t\t\tconst value = this.parseAssignmentExpression();\n\t\t\tthis.restoreAcceptIN();\n\t\t\tinitializer = new Param(pattern as DeclarationExpression, value);\n\t\t} else {\n\t\t\tinitializer = new Param(pattern as DeclarationExpression);\n\t\t}\n\t\treturn initializer;\n\t}\n\tprotected parseExpressionCoverGrammar(): ExpressionNode {\n\t\t// Expression ::\n\t\t// AssignmentExpression\n\t\t// Expression ',' AssignmentExpression\n\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\treturn this.parseArrowParametersWithRest(list);\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.RPAREN) && 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[]): 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.RPAREN) || 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(new SpreadElement(pattern));\n\t\treturn this.expressionListToExpression(list);\n\t}\n\tprotected expressionListToExpression(list: ExpressionNode[]): ExpressionNode {\n\t\tconst first = list[0];\n\t\tif (list.length === 1) { return first; }\n\t\tif (first instanceof SequenceExpression) {\n\t\t\tfirst.getExpressions().push(...list.slice(1));\n\t\t\treturn first;\n\t\t}\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 DeclarationExpression, expression.getRight());\n\t\t}\n\t\tif (expression instanceof GroupingExpression) {\n\t\t\treturn new Param(expression.getNode() as DeclarationExpression);\n\t\t}\n\t\treturn new Param(expression as DeclarationExpression);\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 = FunctionKind.NormalFunction;\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.parseAsyncFunctionLiteral();\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 = FunctionKind.AsyncFunction;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.peek().isType(Token.ARROW)) {\n\t\t\t\tthis.setFunctionKind(kind);\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\tconst arrow = this.parseArrowFunctionLiteral(params, kind);\n\t\t\t\tthis.restoreFunctionKind();\n\t\t\t\treturn arrow;\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\treturn this.parseFunctionExpression();\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.LBRACK:\n\t\t\t\treturn this.parseArrayLiteral(false);\n\n\t\t\tcase Token.LBRACE:\n\t\t\t\treturn this.parseObjectLiteral(false);\n\n\t\t\tcase Token.LPAREN: {\n\t\t\t\tthis.consume(Token.LPAREN);\n\t\t\t\tif (this.check(Token.RPAREN)) {\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.RPAREN.getName()}`));\n\t\t\t\t\t}\n\t\t\t\t\tconst result = new SequenceExpression([]);\n\t\t\t\t\tthis.markParenthesized(result);\n\t\t\t\t\treturn result;\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\tthis.setAcceptIN(true);\n\t\t\t\tconst expression = this.parseExpressionCoverGrammar();\n\t\t\t\tthis.markParenthesized(expression);\n\t\t\t\tthis.expect(Token.RPAREN);\n\t\t\t\tthis.restoreAcceptIN();\n\t\t\t\treturn expression;\n\t\t\t}\n\t\t\tcase Token.CLASS: {\n\t\t\t\treturn this.parseClassExpression();\n\t\t\t}\n\t\t\tcase Token.TEMPLATE_SPAN:\n\t\t\tcase Token.TEMPLATE_TAIL:\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\t// A TemplateLiteral is made up of 0 or more TEMPLATE_SPAN tokens (literal\n\t\t// text followed by a substitution expression), finalized by a single\n\t\t// TEMPLATE_TAIL.\n\t\t//\n\t\t// In terms of draft language, TEMPLATE_SPAN may be either the TemplateHead or\n\t\t// TemplateMiddle productions, while TEMPLATE_TAIL is either TemplateTail, or\n\t\t// NoSubstitutionTemplate.\n\t\t//\n\t\t// When parsing a TemplateLiteral, we must have scanned either an initial\n\t\t// TEMPLATE_SPAN, or a TEMPLATE_TAIL.\n\t\tlet next = this.peek();\n\t\tif (!Token.isTemplate(next.token)) {\n\t\t\tthrow new SyntaxError(this.errorMessage(`Unexpected Token: ${JSON.stringify(this.next())}`));\n\t\t}\n\t\t// If we reach a TEMPLATE_TAIL first, we are parsing a NoSubstitutionTemplate.\n\t\t// In this case we may simply consume the token and build a template with a\n\t\t// single TEMPLATE_SPAN and no expressions.\n\t\tif (next.isType(Token.TEMPLATE_TAIL)) {\n\t\t\tthis.consume(Token.TEMPLATE_TAIL);\n\t\t\tconst string = next.getValue<TemplateStringLiteral>().string;\n\t\t\treturn this.createTemplateLiteralExpressionNode([string], [], tag);\n\t\t}\n\t\tthis.consume(Token.TEMPLATE_SPAN);\n\t\tconst expressions: ExpressionNode[] = [];\n\t\tconst strings: string[] = [];\n\t\tstrings.push(next.getValue<TemplateStringLiteral>().string);\n\t\t// If we open with a TEMPLATE_SPAN, we must scan the subsequent expression,\n\t\t// and repeat if the following token is a TEMPLATE_SPAN as well (in this\n\t\t// case, representing a TemplateMiddle).\n\t\tdo {\n\t\t\tthis.setAcceptIN(true);\n\t\t\tconst expression = this.parseExpressionCoverGrammar();\n\t\t\texpressions.push(expression);\n\t\t\tnext = this.next();\n\t\t\tif (next.isNotType(Token.RBRACE)) {\n\t\t\t\tthis.restoreAcceptIN();\n\t\t\t\tthrow new SyntaxError(this.errorMessage('Unterminated Template Expr'));\n\t\t\t}\n\t\t\t// If we didn't die parsing that expression, our next token should be a\n\t\t\t// TEMPLATE_SPAN or TEMPLATE_TAIL.\n\t\t\tnext = this.scanner.scanTemplateContinuation();\n\t\t\tstrings.push(next.getValue<TemplateStringLiteral>().string);\n\t\t\tthis.restoreAcceptIN();\n\t\t} while (next.isType(Token.TEMPLATE_SPAN));\n\t\tif (next.isNotType(Token.TEMPLATE_TAIL)) {\n\t\t\tthrow new SyntaxError(this.errorMessage(`Unexpected Token: ${JSON.stringify(next)}`));\n\t\t}\n\t\t// Once we've reached a TEMPLATE_TAIL, we can close the TemplateLiteral.\n\t\treturn this.createTemplateLiteralExpressionNode(strings, expressions, tag);\n\t}\n\tprotected createTemplateLiteralExpressionNode(strings: string[], expressions: ExpressionNode[], tag?: ExpressionNode): TaggedTemplateExpression | TemplateLiteral {\n\t\tif (tag) {\n\t\t\treturn new TaggedTemplateExpression(tag, strings, expressions);\n\t\t} else {\n\t\t\treturn new TemplateLiteral(strings, expressions);\n\t\t}\n\t}\n\tprotected parseMemberWithPresentNewPrefixesExpression(): ExpressionNode {\n\t\t// NewExpression ::\n\t\t// ('new')+ MemberExpression\n\t\t//\n\t\t// NewTarget ::\n\t\t// 'new' '.' 'target'\n\n\t\t// The grammar for new expressions is pretty warped. We can have several 'new'\n\t\t// keywords following each other, and then a MemberExpression. When we see '('\n\t\t// after the MemberExpression, it's associated with the rightmost unassociated\n\t\t// 'new' to create a NewExpression with arguments. However, a NewExpression\n\t\t// can also occur without arguments.\n\n\t\t// Examples of new expression:\n\t\t// new foo.bar().baz means (new (foo.bar)()).baz\n\t\t// new foo()() means (new foo())()\n\t\t// new new foo()() means (new (new foo())())\n\t\t// new new foo means new (new foo)\n\t\t// new new foo() means new (new foo())\n\t\t// new new foo().bar().baz means (new (new foo()).bar()).baz\n\t\t// new super.x means new (super.x)\n\t\tthis.consume(Token.NEW);\n\n\t\tlet result: ExpressionNode;\n\n\t\t// CheckStackOverflow();\n\n\t\tif (this.peek().isType(Token.IMPORT) && this.peekAhead().isType(Token.LPAREN)) {\n\t\t\tthrow new SyntaxError(this.errorMessage(`Import Call Not New Expression`));\n\t\t} else if (this.peek().isType(Token.PERIOD)) {\n\t\t\tresult = this.parseNewTargetExpression();\n\t\t\treturn this.parseMemberExpressionContinuation(result);\n\t\t} else {\n\t\t\tresult = this.parseMemberExpression();\n\t\t\tif (result === SuperIdentifier) {\n\t\t\t\t// new super() is never allowed\n\t\t\t\tthrow new SyntaxError(this.errorMessage(`Unexpected Super, new super() is never allowed`));\n\t\t\t}\n\t\t}\n\t\tif (this.peek().isType(Token.LPAREN)) {\n\t\t\t// NewExpression with arguments.\n\t\t\tconst args = this.parseArguments();\n\t\t\tresult = new NewExpression(result, args);\n\t\t\t// The expression can still continue with . or [ after the arguments.\n\t\t\treturn this.parseMemberExpressionContinuation(result);\n\t\t}\n\n\t\tif (this.peek().isType(Token.QUESTION_PERIOD)) {\n\t\t\tthrow new SyntaxError(this.errorMessage(`Optional Chaining with New not allowed, new x?.y()`));\n\t\t}\n\t\treturn new NewExpression(result);\n\t}\n\tprotected parseArguments(maybeArrow?: ParsingArrowHeadFlag): ExpressionNode[] {\n\t\t// Arguments ::\n\t\t// '(' (AssignmentExpression)*[','] ')'\n\n\t\tthis.consume(Token.LPAREN);\n\t\tconst args: ExpressionNode[] = [];\n\t\twhile (this.peek().isNotType(Token.RPAREN)) {\n\t\t\tconst isSpread = this.check(Token.ELLIPSIS);\n\t\t\tthis.setAcceptIN(true);\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\tthis.restoreAcceptIN();\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\tthis.restoreAcceptIN();\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\tthis.restoreAcceptIN();\n\t\t\tif (!this.check(Token.COMMA)) break;\n\t\t}\n\t\tif (!this.check(Token.RPAREN)) {\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) && isGeneratorFunction(this.functionKind)) {\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)) {\n\t\t\tthis.clearParenthesized(expression);\n\t\t\treturn expression;\n\t\t};\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\tconst kind = FunctionKind.NormalFunction;\n\t\t\tthis.setFunctionKind(kind);\n\t\t\tlet arrow: ExpressionNode;\n\t\t\tif (expression instanceof SequenceExpression) {\n\t\t\t\tconst params = expression.getExpressions().map(expr => new Param(expr as DeclarationExpression));\n\t\t\t\tconst last = params.at(-1)?.getIdentifier();\n\t\t\t\tif (last instanceof SpreadElement) {\n\t\t\t\t\tconst arg = last.getArgument() as DeclarationExpression;\n\t\t\t\t\tlet param = arg;\n\t\t\t\t\tif (arg instanceof ArrayExpression) {\n\t\t\t\t\t\tparam = new ArrayPattern(arg.getElements() as DeclarationExpression[]);\n\t\t\t\t\t} else if (arg instanceof ObjectExpression) {\n\t\t\t\t\t\tparam = new ObjectPattern(arg.getProperties());\n\t\t\t\t\t}\n\t\t\t\t\tparams[params.length - 1] = new Param(new RestElement(param));\n\t\t\t\t}\n\t\t\t\tarrow = this.parseArrowFunctionLiteral(params, FunctionKind.NormalFunction);\n\t\t\t} else if (expression instanceof GroupingExpression) {\n\t\t\t\tarrow = this.parseArrowFunctionLiteral([new Param(expression.getNode() as DeclarationExpression)], FunctionKind.NormalFunction);\n\t\t\t} else {\n\t\t\t\tthis.clearParenthesized(expression);\n\t\t\t\tarrow = this.parseArrowFunctionLiteral([new Param(expression as DeclarationExpression)], FunctionKind.NormalFunction);\n\t\t\t}\n\t\t\tthis.restoreFunctionKind();\n\t\t\treturn arrow;\n\t\t}\n\t\tif (this.isAssignableIdentifier(expression)) {\n\t\t} else if (this.isProperty(expression)) {\n\t\t} else if (this.isPattern(expression) && Token.isAssignment(op)) {\n\t\t\t// Destructuring assignment.\n\t\t\texpression = expression instanceof ObjectExpression\n\t\t\t\t? new ObjectPattern(expression.getProperties())\n\t\t\t\t: new ArrayPattern(expression.getElements() as DeclarationExpression[]);\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[], kind: FunctionKind): ExpressionNode {\n\t\tif (this.peek().isNotType(Token.ARROW)) {\n\t\t\tthrow new SyntaxError(this.errorMessage('SyntaxError Expecting Arrow Token'));\n\t\t}\n\t\tif (this.scanner.hasLineTerminatorBeforeNext()) {\n\t\t\tthrow new SyntaxError(this.errorMessage('Unexpected Token \"\\n\" a line terminator after arrow token\"'));\n\t\t}\n\t\tlet body: ExpressionNode[] | ExpressionNode;\n\t\tlet has_braces = true;\n\t\tthis.consume(Token.ARROW);\n\t\tif (this.peek().isType(Token.LBRACE)) {\n\t\t\tthis.consume(Token.LBRACE);\n\t\t\tthis.setStatue(true, kind);\n\t\t\tbody = this.parseFunctionBody(kind, FunctionBodyType.BLOCK, FunctionSyntaxKind.AnonymousExpression);\n\t\t\tthis.restoreStatue();\n\t\t} else {\n\t\t\thas_braces = false;\n\t\t\tbody = this.parseFunctionBody(kind, FunctionBodyType.EXPRESSION, FunctionSyntaxKind.AnonymousExpression);\n\t\t}\n\t\treturn new ArrowFunctionExpression(parameters, body, !has_braces, isAsyncFunction(kind));\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) {\n\n\t\t// ArrayLiteral ::\n\t\t// '[' Expression? (',' Expression?)* ']'\n\n\t\tthis.consume(Token.LBRACK);\n\t\tlet first_spread_index = -1;\n\t\tconst values: (ExpressionNode | null)[] = [];\n\n\t\twhile (!this.check(Token.RBRACK)) {\n\t\t\tlet elem: ExpressionNode | null;\n\t\t\tif (this.peek().isType(Token.COMMA)) {\n\t\t\t\telem = null;\n\t\t\t} else if (this.check(Token.ELLIPSIS)) {\n\t\t\t\tthis.setAcceptIN(true);\n\t\t\t\tconst argument = this.parsePossibleDestructuringSubPattern();\n\t\t\t\tthis.restoreAcceptIN();\n\t\t\t\telem = new SpreadElement(argument);\n\t\t\t\tif (first_spread_index < 0) {\n\t\t\t\t\tfirst_spread_index = values.length;\n\t\t\t\t}\n\t\t\t\tif (argument instanceof AssignmentExpression && isPattern) {\n\t\t\t\t\tthrow new SyntaxError(this.errorMessage('Invalid Destructuring Target'));\n\t\t\t\t}\n\t\t\t\tif (this.peek().isType(Token.COMMA)) {\n\t\t\t\t\tthrow new SyntaxError(this.errorMessage('Element After Rest'));\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis.setAcceptIN(true);\n\t\t\t\telem = this.parsePossibleDestructuringSubPattern();\n\t\t\t\tthis.restoreAcceptIN();\n\t\t\t}\n\t\t\tvalues.push(elem);\n\t\t\tif (this.peek().isNotType(Token.RBRACK)) {\n\t\t\t\tthis.expect(Token.COMMA);\n\t\t\t}\n\t\t}\n\t\treturn new (isPattern ? ArrayPattern : ArrayExpression)(values as DeclarationExpression[]);\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.LBRACE);\n\t\tconst properties: ExpressionNode[] = [];\n\t\twhile (!this.check(Token.RBRACE)) {\n\t\t\tconst property: ExpressionNode = this.parseObjectPropertyDefinition(isPattern);\n\t\t\tproperties.push(property);\n\t\t\tif (this.peek().isNotType(Token.RBRACE)) {\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 = new 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 DeclarationExpression);\n\t\t\t\t}\n\t\t\t\treturn new Property(\n\t\t\t\t\tvalue.getArgument(),\n\t\t\t\t\tvalue,\n\t\t\t\t\t'init',\n\t\t\t\t\tfalse,\n\t\t\t\t\tfalse,\n\t\t\t\t\tpropInfo.isComputedName\n\t\t\t\t);\n\n\t\t\tcase PropertyKind.Value: {\n\t\t\t\tthis.consume(Token.COLON);\n\t\t\t\tthis.setAcceptIN(true);\n\t\t\t\tconst value = this.parsePossibleDestructuringSubPattern();\n\t\t\t\tthis.restoreAcceptIN();\n\t\t\t\treturn new Property(\n\t\t\t\t\tnameExpression,\n\t\t\t\t\tvalue,\n\t\t\t\t\t'init',\n\t\t\t\t\tfalse,\n\t\t\t\t\tfalse,\n\t\t\t\t\tpropInfo.isComputedName\n\t\t\t\t);\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\tthis.setAcceptIN(true);\n\t\t\t\t\tconst rhs = this.parseAssignmentExpression();\n\t\t\t\t\tthis.restoreAcceptIN();\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(\n\t\t\t\t\tnameExpression,\n\t\t\t\t\tvalue,\n\t\t\t\t\t'init',\n\t\t\t\t\tfalse,\n\t\t\t\t\tpropInfo.kind !== PropertyKind.Assign,\n\t\t\t\t\tpropInfo.isComputedName\n\t\t\t\t);\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 kind = this.methodKindFor(propInfo.isStatic, propInfo.funcFlag);\n\t\t\t\tconst value = this.parseFunctionLiteral(\n\t\t\t\t\tkind,\n\t\t\t\t\tFunctionSyntaxKind.AccessorOrMethod,\n\t\t\t\t\tpropInfo.name ? new Identifier(propInfo.name) : undefined\n\t\t\t\t);\n\t\t\t\treturn new Property(\n\t\t\t\t\tnameExpression,\n\t\t\t\t\tvalue,\n\t\t\t\t\t'init',\n\t\t\t\t\ttrue,\n\t\t\t\t\tfalse,\n\t\t\t\t\tpropInfo.isComputedName\n\t\t\t\t);\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 kind = this.methodKindFor(propInfo.isStatic, propInfo.funcFlag);\n\t\t\t\tconst value = this.parseFunctionLiteral(\n\t\t\t\t\tkind,\n\t\t\t\t\tFunctionSyntaxKind.AccessorOrMethod,\n\t\t\t\t\tpropInfo.name ? new Identifier(propInfo.name) : undefined\n\t\t\t\t);\n\t\t\t\treturn new Property(\n\t\t\t\t\tnameExpression,\n\t\t\t\t\tvalue,\n\t\t\t\t\tisGet ? 'get' : 'set',\n\t\t\t\t\tfalse,\n\t\t\t\t\tfalse,\n\t\t\t\t\tpropInfo.isComputedName\n\t\t\t\t);\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&& propInfo.parsePropertyKindFromToken(nextToken.token)\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 = ParseFunctionFlag.IsAsync;\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 = ParseFunctionFlag.IsGenerator;\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 (propInfo.parsePropertyKindFromToken(this.peek().token)) {\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\tnextToken = this.peek();\n\t\t}\n\t\tlet propertyName: ExpressionNode;\n\t\tswitch (nextToken.token) {\n\t\t\tcase Token.PRIVATE_NAME:\n\t\t\t\tpropInfo.isPrivate = true;\n\t\t\t\tthis.consume(Token.PRIVATE_NAME);\n\t\t\t\tif (propInfo.kind == PropertyKind.NotSet) {\n\t\t\t\t\tpropInfo.parsePropertyKindFromToken(this.peek().token);\n\t\t\t\t}\n\t\t\t\tpropertyName = this.getIdentifier();\n\t\t\t\tpropInfo.name = (propertyName as PrivateIdentifier).getName();\n\t\t\t\tif (propInfo.position == PropertyPosition.ObjectLiteral) {\n\t\t\t\t\tthrow new TypeError(this.errorMessage('UnexpectedToken PRIVATE_NAME'));\n\t\t\t\t}\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 Literal<string>).getValue();\n\t\t\t\tbreak;\n\t\t\tcase Token.LBRACK:\n\t\t\t\t// [Symbol.iterator]\n\t\t\t\tthis.consume(Token.LBRACK);\n\t\t\t\tthis.setAcceptIN(true);\n\t\t\t\tpropertyName = this.parseAssignmentExpression();\n\t\t\t\tthis.expect(Token.RBRACK);\n\t\t\t\tif (propInfo.kind === PropertyKind.NotSet) {\n\t\t\t\t\tpropInfo.parsePropertyKindFromToken(this.peek().token);\n\t\t\t\t}\n\t\t\t\tpropInfo.name = propertyName.toString();\n\t\t\t\tthis.restoreAcceptIN();\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\tthis.setAcceptIN(true);\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.RBRACE)) {\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\tthis.restoreAcceptIN();\n\t\t\t\t\treturn new SpreadElement(propertyName);\n\t\t\t\t}\n\t\t\tdefault:\n\t\t\t\tpropertyName = this.parsePropertyOrPrivatePropertyName();\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\tpropInfo.parsePropertyKindFromToken(this.peek().token);\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.LBRACK: {\n\t\t\t\t\tthis.consume(Token.LBRACK);\n\t\t\t\t\tthis.setAcceptIN(true);\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.RBRACK);\n\t\t\t\t\tthis.restoreAcceptIN();\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.parsePropertyOrPrivatePropertyName();\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_SPAN:\n\t\t\t\tcase Token.TEMPLATE_TAIL: {\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\tthrow new SyntaxError(this.errorMessage('unknown token position'));\n\t\t\t}\n\t\t} while (Token.isMember(this.peek().token));\n\t\treturn expression;\n\t}\n\tprotected parsePropertyOrPrivatePropertyName(): ExpressionNode {\n\t\tconst next = this.next();\n\t\tif (next.isType(Token.IDENTIFIER) || next.isType(Token.PRIVATE_NAME)) {\n\t\t\treturn next.getValue();\n\t\t}\n\t\t// check keyword as identifier\n\t\tif (Token.isPropertyName(next.token) && next.isNotType(Token.EOS)) {\n\t\t\treturn new Identifier(next.token.getName());\n\t\t}\n\t\tthrow new SyntaxError(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\tbody = this.parseFunctionExpression();\n\t\t\t\tbreak;\n\t\t\tcase Token.ASYNC:\n\t\t\t\tif (this.peekAhead().isType(Token.FUNCTION) && !this.scanner.hasLineTerminatorAfterNext()) {\n\t\t\t\t\tthis.consume(Token.ASYNC);\n\t\t\t\t\tbody = this.parseAsyncFunctionLiteral();\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.LPAREN)) {\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.LPAREN:\n\t\t\t\t// es2022 syntax, F# & partial operator\n\t\t\t\tthis.consume(Token.LPAREN);\n\t\t\t\tlet indexed = false;\n\t\t\t\twhile (this.peek().isNotType(Token.RPAREN)) {\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.RPAREN);\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 = Token.precedence(peek.token, this.acceptIN);\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 (Token.precedence(this.peek().token, this.acceptIN) === 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\t// Precedence >= 4\n\tprotected parseBinaryExpression(precedence: number): ExpressionNode {\n\t\t// \"#foo in ShiftExpression\" needs to be parsed separately, since private\n\t\t// identifiers are not valid PrimaryExpressions.\n\t\tif (this.peek().isType(Token.PRIVATE_NAME)) {\n\t\t\tconst x = this.parsePropertyOrPrivatePropertyName();\n\t\t\tconst precedence1 = Token.precedence(this.peek().token, this.acceptIN);\n\t\t\tif (this.peek().isNotType(Token.IN) || precedence1 < precedence) {\n\t\t\t\tthrow new SyntaxError(this.errorMessage('Unexpected Token Token.PRIVATE_NAME \"#name\"'));\n\t\t\t}\n\t\t\treturn this.parseBinaryContinuation(x, precedence, precedence1);\n\t\t}\n\t\tconst x: ExpressionNode = this.parseUnaryExpression();\n\t\tconst precedence1 = Token.precedence(this.peek().token, this.acceptIN);\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) && this.isAwaitAllowed()) {\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) && isStrict(this.languageMode)) {\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.LPAREN)\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.parsePropertyOrPrivatePropertyName();\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.LBRACK: {\n\t\t\t\t\tthis.consume(Token.LBRACK);\n\t\t\t\t\tthis.setAcceptIN(true);\n\t\t\t\t\tconst index = this.parseExpressionCoverGrammar();\n\t\t\t\t\tthis.restoreAcceptIN();\n\t\t\t\t\tresult = new MemberExpression(result, index, true, isOptional);\n\t\t\t\t\tthis.expect(Token.RBRACK);\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.parsePropertyOrPrivatePropertyName();\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.LPAREN: {\n\t\t\t\t\tconst args = this.parseArguments();\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.parsePropertyOrPrivatePropertyName();\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.parsePropertyOrPrivatePropertyName();\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\tthis.setAcceptIN(true);\n\t\tconst left: ExpressionNode = this.parseAssignmentExpression();\n\t\tthis.restoreAcceptIN();\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.scanner.hasLineTerminatorBeforeNext()) {\n\t\t\tif (this.check(Token.MUL)) {\n\t\t\t\tdelegating = true;\n\t\t\t}\n\t\t\tswitch (this.peek().token) {\n\t\t\t\tcase Token.EOS:\n\t\t\t\tcase Token.SEMICOLON:\n\t\t\t\tcase Token.RBRACE:\n\t\t\t\tcase Token.RBRACK:\n\t\t\t\tcase Token.RPAREN:\n\t\t\t\tcase Token.COLON:\n\t\t\t\tcase Token.COMMA:\n\t\t\t\tcase Token.IN:\n\t\t\t\t\t// The above set of tokens is the complete set of tokens that can appear\n\t\t\t\t\t// after an AssignmentExpression, and none of them can start an\n\t\t\t\t\t// AssignmentExpression. This allows us to avoid looking for an RHS for\n\t\t\t\t\t// a regular yield, given only one look-ahead token.\n\t\t\t\t\tif (!delegating) break;\n\t\t\t\t\t// Delegating yields require an RHS; fall through.\n\t\t\t\t\t// V8_FALLTHROUGH;\n\t\t\t\t\tthrow new Error(this.errorMessage(`Delegating yields require an RHS`));\n\t\t\t\tdefault:\n\t\t\t\t\texpression = this.parseAssignmentExpressionCoverGrammar();\n\t\t\t\t\tbreak;\n\t\t\t}\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 parseClassExpression(): ClassExpression {\n\t\tthrow new Error(this.errorMessage(`Expression (class) not supported.`));\n\t}\n\tprotected parseClassDeclaration(names: string[] | undefined, defaultExport: boolean): ClassDeclaration {\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":"inline.js","sourceRoot":"","sources":["../../../src/expressions/v8/inline.ts"],"names":[],"mappings":"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","sourcesContent":["import type { DeclarationExpression, ExpressionNode } from '../api/expression.js';\nimport { Token, TokenExpression } from './token.js';\nimport { TemplateStringLiteral, TokenStream } from './stream.js';\nimport {\n\tOfNode, Identifier, ThisNode,\n\tGetIdentifier, SetIdentifier, AsyncIdentifier,\n\tNullNode, AwaitIdentifier,\n\tConstructorIdentifier, NameIdentifier,\n\tEvalIdentifier, ArgumentsIdentifier,\n\tTaggedTemplateExpression, TemplateLiteral, Literal, SuperIdentifier\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, Param,\n\tFunctionExpression, 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, LabeledStatement } 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 { ClassDeclaration, ClassExpression, PrivateIdentifier } from '../api/class/class.js';\nimport {\n\tAllowLabelledFunctionStatement,\n\tFunctionBodyType, FunctionInfo, FunctionKind,\n\tfunctionKindForImpl, FunctionSyntaxKind,\n\tisAsyncFunction, isAsyncGeneratorFunction,\n\tisAwaitAsIdentifierDisallowed, isClassMembersInitializerFunction,\n\tisGeneratorFunction, isModule, isResumableFunction,\n\tisSloppy, isStrict, LanguageMode, ParseFunctionFlag,\n\tParsingArrowHeadFlag, PropertyKind, PropertyKindInfo,\n\tPropertyPosition, SubFunctionKind, VariableDeclarationContext\n} from './enums.js';\nimport { DebuggerStatement } from '../api/computing/debugger.js';\n\n\nexport type InlineParserOptions = { mode?: LanguageMode, acceptIN?: boolean };\n\nexport abstract class AbstractParser {\n\n\tprotected acceptIN: boolean;\n\tprotected previousAcceptIN: boolean[] = [];\n\n\tprotected functionKind: FunctionKind;\n\tprotected previousFunctionKind: FunctionKind[] = [];\n\tget languageMode() {\n\t\treturn this.scanner.getLanguageMode();\n\t}\n\n\tset languageMode(mode: LanguageMode) {\n\t\tthis.scanner.setLanguageMode(mode);\n\t}\n\n\tconstructor(protected scanner: TokenStream, acceptIN?: boolean) {\n\t\tthis.previousAcceptIN.push(this.acceptIN = acceptIN ?? false);\n\t\tthis.previousFunctionKind.push(this.functionKind = FunctionKind.NormalFunction);\n\t}\n\tabstract scan(): ExpressionNode;\n\tprotected position() {\n\t\treturn this.scanner.getPos();\n\t}\n\tprotected setAcceptIN(acceptIN: boolean) {\n\t\tthis.previousAcceptIN.push(this.acceptIN);\n\t\tthis.acceptIN = acceptIN;\n\t}\n\tprotected restoreAcceptIN() {\n\t\tthis.acceptIN = this.previousAcceptIN.pop() ?? false;\n\t}\n\tprotected getLastFunctionKind() {\n\t\treturn this.previousFunctionKind.at(-2) ?? FunctionKind.NormalFunction;\n\t}\n\tprotected setFunctionKind(functionKind: FunctionKind) {\n\t\tthis.previousFunctionKind.push(this.functionKind);\n\t\tthis.functionKind = functionKind;\n\t}\n\tprotected restoreFunctionKind() {\n\t\tthis.functionKind = this.previousFunctionKind.pop() ?? FunctionKind.NormalFunction;\n\t}\n\tprotected setStatue(acceptIN: boolean, functionKind: FunctionKind) {\n\t\tthis.setFunctionKind(functionKind);\n\t\tthis.setAcceptIN(acceptIN);\n\t}\n\tprotected restoreStatue() {\n\t\tthis.restoreFunctionKind();\n\t\tthis.restoreAcceptIN();\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 checkAndGetValue(token: Token): ExpressionNode | undefined {\n\t\tconst next = this.scanner.peek();\n\t\tif (next.isType(token)) {\n\t\t\tthis.scanner.next();\n\t\t\treturn next.value;\n\t\t}\n\t\treturn undefined;\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 expectAndGetValue(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\treturn current.getValue();\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 isArguments(name: ExpressionNode): boolean {\n\t\treturn name instanceof Identifier && name.getName() === 'arguments';\n\t}\n\tprotected isEval(name: ExpressionNode): boolean {\n\t\treturn name instanceof Identifier && name.getName() === 'eval';\n\t}\n\tprotected isEvalOrArguments(name: ExpressionNode): boolean {\n\t\treturn name instanceof Identifier && (name.getName() === 'eval' || name.getName() === 'arguments');\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.LBRACE:\n\t\t\tcase Token.LBRACK:\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 markParenthesized(expression: ExpressionNode) {\n\t\tReflect.set(expression, 'parenthesized', true);\n\t}\n\tprotected clearParenthesized(expression: ExpressionNode) {\n\t\tReflect.deleteProperty(expression, 'parenthesized');\n\t}\n\tprotected isParenthesized(expression: ExpressionNode): boolean {\n\t\treturn Reflect.get(expression, 'parenthesized') === true;\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 (isStrict(this.languageMode) && this.isEvalOrArguments(expression)) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t}\n\tprotected isPattern(expression: ExpressionNode): expression is (ObjectExpression | ArrayExpression) {\n\t\treturn expression instanceof ObjectExpression || expression instanceof ArrayExpression;\n\t}\n\tprotected isProperty(expression: ExpressionNode): expression is Property | MemberExpression {\n\t\treturn expression instanceof Property || 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 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) && !isAsyncFunction(this.functionKind)) {\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 expectContextualKeyword(keyword: string) {\n\t\tconst current = this.scanner.next();\n\t\tif (!current.test((token, value) => Token.IDENTIFIER.equal(token) && keyword === value?.toString())) {\n\t\t\tthrow new Error(this.errorMessage(`Unexpected Token: current Token is ${JSON.stringify(current)}`));\n\t\t}\n\t\treturn true;\n\t}\n\tprotected checkContextualKeyword(keyword: string) {\n\t\tconst next = this.scanner.peek();\n\t\tif (next.test((token, value) => Token.IDENTIFIER.equal(token) && keyword === value?.toString())) {\n\t\t\tthis.scanner.next();\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\tprotected peekContextualKeyword(keyword: string) {\n\t\tconst next = this.scanner.peek();\n\t\treturn next.test((token, value) => Token.IDENTIFIER.equal(token) && keyword === value?.toString());\n\t}\n\tprotected methodKindFor(isStatic: boolean, flag: ParseFunctionFlag): FunctionKind {\n\t\treturn functionKindForImpl(\n\t\t\tisStatic ? SubFunctionKind.StaticMethod : SubFunctionKind.NonStaticMethod,\n\t\t\tflag\n\t\t);\n\t}\n\tprotected isGenerator() {\n\t\treturn isGeneratorFunction(this.functionKind);\n\t}\n\tprotected isAsyncFunction() {\n\t\treturn isAsyncFunction(this.functionKind);\n\t}\n\tprotected is_async_function() {\n\t\treturn isAsyncFunction(this.functionKind);\n\t}\n\tprotected is_async_generator() {\n\t\treturn isAsyncGeneratorFunction(this.functionKind);\n\t}\n\tprotected is_resumable() {\n\t\treturn isResumableFunction(this.functionKind);\n\t}\n\tprotected isAwaitAllowed() {\n\t\treturn this.isAsyncFunction() || isModule(this.functionKind);\n\t}\n\tprotected isAwaitAsIdentifierDisallowed() {\n\t\treturn isStrict(this.languageMode) ||\n\t\t\tisAwaitAsIdentifierDisallowed(this.functionKind);\n\t}\n\tprotected shouldBanArguments() {\n\t\treturn isClassMembersInitializerFunction(this.functionKind);\n\t}\n\tprotected errorMessage(message: string): string {\n\t\treturn this.scanner.createError(message);\n\t}\n\n\tprotected reportErrorMessage(message: string): void {\n\t\tconsole.error(this.scanner.createError(message));\n\t}\n}\n\nexport class JavaScriptInlineParser extends AbstractParser {\n\tstatic parse(source: string | TokenExpression[] | TokenStream, { mode, acceptIN }: InlineParserOptions = {}) {\n\t\tmode ??= LanguageMode.Strict;\n\t\tconst stream = (typeof source === 'string')\n\t\t\t? TokenStream.getTokenStream(source, mode)\n\t\t\t: Array.isArray(source) ? TokenStream.getTokenStream(source) : source;\n\t\tacceptIN ??= false;\n\t\tconst parser = new JavaScriptInlineParser(stream, acceptIN);\n\t\treturn parser.scan();\n\t}\n\tconstructor(scanner: TokenStream, acceptIN?: boolean) {\n\t\tsuper(scanner, acceptIN);\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(\n\t\tallowFunction: AllowLabelledFunctionStatement = AllowLabelledFunctionStatement.DisallowLabelledFunctionStatement\n\t): ExpressionNode {\n\t\tswitch (this.peek().token) {\n\t\t\tcase Token.LBRACE:\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\tif (this.isAwaitAllowed() && 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\tcase Token.FUNCTION:\n\t\t\t\tthrow new SyntaxError(this.errorMessage(`FunctionDeclaration only allowed as a StatementListItem not in an arbitrary Statement position.`));\n\t\t\tcase Token.DEBUGGER:\n\t\t\t\treturn this.parseDebuggerStatement();\n\t\t\tcase Token.VAR:\n\t\t\t\treturn this.parseVariableDeclarations(VariableDeclarationContext.Statement);\n\t\t\tcase Token.ASYNC:\n\t\t\t\tif (!this.scanner.hasLineTerminatorAfterNext() && this.peekAhead().isType(Token.FUNCTION)) {\n\t\t\t\t\tthrow new SyntaxError(this.errorMessage(`async function in single statement context.`));\n\t\t\t\t}\n\t\t\tdefault:\n\t\t\t\treturn this.parseExpressionOrLabelledStatement(allowFunction);\n\t\t}\n\t}\n\tprotected parseDebuggerStatement() {\n\t\tthis.consume(Token.DEBUGGER);\n\t\tthis.expectSemicolon();\n\t\treturn DebuggerStatement.INSTANCE;\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\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\tlet identifier: ExpressionNode | undefined;\n\t\t\tconst hasBinding = this.check(Token.LPAREN);\n\t\t\tif (hasBinding) {\n\t\t\t\tif (this.peekAnyIdentifier()) {\n\t\t\t\t\tidentifier = this.parseNonRestrictedIdentifier();\n\t\t\t\t} else {\n\t\t\t\t\tidentifier = this.parseBindingPattern(true);\n\t\t\t\t}\n\t\t\t\tthis.expect(Token.RPAREN);\n\t\t\t}\n\t\t\tconst block = this.parseBlock();\n\t\t\tcatchBlock = new CatchClauseNode(block, identifier);\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}\n\t\treturn new TryCatchNode(tryBlock, catchBlock, finallyBlock);\n\t}\n\tprotected parseNonRestrictedIdentifier() {\n\t\tconst result = this.parseIdentifier();\n\t\tif (isStrict(this.languageMode) && this.isEvalOrArguments(result)) {\n\t\t\tthrow new SyntaxError(this.errorMessage('Strict Eval/Arguments '));\n\t\t}\n\t\treturn result;\n\t}\n\tprotected parseBlock(): BlockStatement {\n\t\tthis.expect(Token.LBRACE);\n\t\tconst statements: ExpressionNode[] = [];\n\t\tconst block = new BlockStatement(statements);\n\t\twhile (this.peek().isNotType(Token.RBRACE)) {\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.RBRACE);\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\treturn this.parseHoistableDeclaration(undefined, false);\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.CONST:\n\t\t\t\treturn this.parseVariableDeclarations(VariableDeclarationContext.StatementListItem);\n\t\t\tcase Token.LET:\n\t\t\t\tif (this.isNextLetKeyword()) {\n\t\t\t\t\treturn this.parseVariableDeclarations(VariableDeclarationContext.StatementListItem);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase Token.ASYNC:\n\t\t\t\tif (this.peekAhead().isType(Token.FUNCTION) && !this.scanner.hasLineTerminatorAfterNext()) {\n\t\t\t\t\tthis.consume(Token.ASYNC);\n\t\t\t\t\treturn this.parseAsyncFunctionDeclaration(undefined, false);\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(AllowLabelledFunctionStatement.AllowLabelledFunctionStatement);\n\t}\n\tprotected parseFunctionExpression() {\n\t\tthis.consume(Token.FUNCTION);\n\t\tconst functionKind = this.check(Token.MUL) ? FunctionKind.GeneratorFunction : FunctionKind.NormalFunction;\n\t\tlet name: Identifier | undefined;\n\t\tlet functionSyntaxKind = FunctionSyntaxKind.AnonymousExpression;\n\t\tconst peek = this.peek();\n\t\tif (peek.isNotType(Token.LPAREN)) {\n\t\t\tname = this.parseIdentifier(this.getLastFunctionKind());\n\t\t\tfunctionSyntaxKind = FunctionSyntaxKind.NamedExpression;\n\t\t}\n\t\treturn this.parseFunctionLiteral(functionKind, functionSyntaxKind, name);\n\t}\n\tprotected parseAsyncFunctionDeclaration(names: string[] | undefined, defaultExport: boolean): FunctionDeclaration {\n\t\t// AsyncFunctionDeclaration ::\n\t\t// async [no LineTerminator here] function BindingIdentifier[Await]\n\t\t// ( FormalParameters[Await] ) { AsyncFunctionBody }\n\t\tif (this.scanner.hasLineTerminatorBeforeNext()) {\n\t\t\tthrow new SyntaxError(this.errorMessage('Line Terminator Before `function` parsing `async function`.'));\n\t\t}\n\t\tthis.consume(Token.FUNCTION);\n\t\treturn this.parseHoistableDeclaration01(FunctionKind.AsyncFunction, names, defaultExport) as FunctionDeclaration;\n\n\t}\n\tprotected parseIfStatement(): ExpressionNode {\n\t\tthis.consume(Token.IF);\n\t\tthis.consume(Token.LPAREN);\n\t\tconst condition = this.parseExpression();\n\t\tthis.consume(Token.RPAREN);\n\t\tconst thenStatement = this.parseScopedStatement();\n\t\tlet elseStatement: ExpressionNode | undefined;\n\t\tif (this.peek().isType(Token.ELSE)) {\n\t\t\tthis.consume(Token.ELSE);\n\t\t\telseStatement = this.parseScopedStatement();\n\t\t}\n\t\treturn new IfStatement(condition, thenStatement, elseStatement);\n\t}\n\tprotected parseScopedStatement(): ExpressionNode {\n\t\tif (isStrict(this.languageMode) || this.peek().isNotType(Token.FUNCTION)) {\n\t\t\treturn this.parseStatement();\n\t\t} else {\n\t\t\treturn this.parseFunctionDeclaration();\n\t\t}\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\tthis.expect(Token.WHILE);\n\t\tthis.expect(Token.LPAREN);\n\t\tconst condition = this.parseExpression();\n\t\tthis.expect(Token.RPAREN);\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.LPAREN);\n\t\tconst condition = this.parseExpression();\n\t\tthis.expect(Token.RPAREN);\n\t\tconst body = this.parseStatement();\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.LPAREN);\n\t\tconst tag = this.parseExpression();\n\t\tthis.expect(Token.RPAREN);\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.LBRACE);\n\t\twhile (this.peek().isNotType(Token.RBRACE)) {\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.RBRACE)) {\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);\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.RBRACE);\n\t\treturn switchStatement;\n\t}\n\tprotected parseForStatement() {\n\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\t\t// We parse a declaration/expression after the 'for (' and then read the first\n\t\t// expression/declaration before we know if this is a for or a for-each.\n\t\t// typename FunctionState::LoopScope loop_scope(function_state_);\n\n\t\tthis.consume(Token.FOR);\n\t\tthis.expect(Token.LPAREN);\n\t\tconst peek = this.peek();\n\t\tconst starts_with_let = peek.isType(Token.LET);\n\t\tif (peek.isType(Token.CONST) || (starts_with_let && this.isNextLetKeyword())) {\n\n\t\t\t// The initializer contains lexical declarations,\n\t\t\t// so create an in-between scope.\n\n\t\t\t// Also record whether inner functions or evals are found inside\n\t\t\t// this loop, as this information is used to simplify the desugaring\n\t\t\t// if none are found.\n\t\t\t// typename FunctionState::FunctionOrEvalRecordingScope recording_scope(function_state_);\n\t\t\tconst initializer = this.parseVariableDeclarations(VariableDeclarationContext.ForStatement);\n\n\t\t\tconst forMode = this.checkInOrOf();\n\t\t\tif (forMode) {\n\t\t\t\treturn this.parseForEachStatementWithDeclarations(initializer, forMode);\n\t\t\t}\n\n\t\t\tthis.expect(Token.SEMICOLON);\n\n\t\t\t// Parse the remaining code in the inner block scope since the declaration\n\t\t\t// above was parsed there. We'll finalize the unnecessary outer block scope\n\t\t\t// after parsing the rest of the loop.\n\t\t\treturn this.parseStandardForLoopWithLexicalDeclarations(initializer);\n\t\t}\n\n\t\tlet initializer: ExpressionNode;\n\t\tif (peek.isType(Token.VAR)) {\n\t\t\tinitializer = this.parseVariableDeclarations(VariableDeclarationContext.ForStatement);\n\t\t\t// ParseVariableDeclarations(kForStatement, & for_info.parsing_result,& for_info.bound_names);\n\t\t\t// DCHECK_EQ(for_info.parsing_result.descriptor.mode, VariableMode:: kVar);\n\t\t\t// for_info.position = scanner() -> location().beg_pos;\n\t\t\tconst forMode = this.checkInOrOf();\n\t\t\tif (forMode) {\n\t\t\t\treturn this.parseForEachStatementWithDeclarations(initializer as VariableDeclarationNode, forMode);\n\t\t\t}\n\t\t\t// init = impl() -> BuildInitializationBlock(& for_info.parsing_result);\n\t\t} else if (this.peek().isNotType(Token.SEMICOLON)) {\n\t\t\t// The initializer does not contain declarations.\n\t\t\tthis.setAcceptIN(false);\n\t\t\tinitializer = this.parseExpressionCoverGrammar();\n\t\t\tthis.restoreAcceptIN();\n\t\t\t// ExpressionParsingScope parsing_scope(impl());\n\t\t\t// AcceptINScope scope(this, false);\n\t\t\t// `for (async of` is disallowed but `for (async.x of` is allowed, so\n\t\t\t// check if the token is ASYNC after parsing the expression.\n\t\t\t// Initializer is reference followed by in/of.\n\t\t\tconst expression_is_async = this.current().isType(Token.ASYNC);\n\t\t\tconst forMode = this.checkInOrOf();\n\t\t\tif (forMode) {\n\t\t\t\tif (forMode === 'OF' && starts_with_let || expression_is_async) {\n\t\t\t\t\tthrow new SyntaxError(this.errorMessage(starts_with_let ? 'For Of Let' : 'For Of Async'));\n\t\t\t\t}\n\t\t\t\treturn this.parseForEachStatementWithoutDeclarations(initializer, forMode)\n\t\t\t}\n\t\t}\n\n\t\tthis.expect(Token.SEMICOLON);\n\t\treturn this.parseStandardForLoop(initializer!);\n\t}\n\tprotected parseStandardForLoopWithLexicalDeclarations(initializer: VariableDeclarationNode) {\n\t\t// The condition and the next statement of the for loop must be parsed\n\t\t// in a new scope.\n\t\treturn this.parseStandardForLoop(initializer);\n\t}\n\tprotected parseForEachStatementWithDeclarations(initializer: VariableDeclarationNode, forMode: 'IN' | 'OF') {\n\t\t// Just one declaration followed by in/of.\n\t\tif (initializer.getDeclarations().length != 1) {\n\t\t\tthrow new SyntaxError(this.errorMessage('For In/Of loop Multi Bindings'));\n\t\t}\n\t\treturn this.parseForEachStatementWithoutDeclarations(initializer, forMode);\n\t}\n\tprotected parseForEachStatementWithoutDeclarations(initializer: ExpressionNode, forMode: 'IN' | 'OF') {\n\t\tlet enumerable: ExpressionNode;\n\t\tif (forMode == 'OF') {\n\t\t\tthis.setAcceptIN(true);\n\t\t\tenumerable = this.parseAssignmentExpression();\n\t\t\tthis.restoreAcceptIN();\n\t\t} else {\n\t\t\tenumerable = this.parseExpression();\n\t\t}\n\t\tthis.expect(Token.RPAREN);\n\t\tconst body = this.parseStatement();\n\t\tif (forMode === 'OF') {\n\t\t\treturn new ForOfNode(initializer as ForDeclaration, enumerable, body);\n\t\t} else if (forMode === 'IN') {\n\t\t\treturn new ForInNode(initializer as ForDeclaration, enumerable, body);\n\t\t} else {\n\t\t\tthrow new Error(this.errorMessage(`parsing for loop: ${this.position()}`));\n\t\t}\n\t}\n\tprotected parseStandardForLoop(initializer: ExpressionNode) {\n\t\t// CheckStackOverflow();\n\t\t// ForStatementT loop = factory() -> NewForStatement(stmt_pos);\n\t\t// Target target(this, loop, labels, own_labels, Target:: TARGET_FOR_ANONYMOUS);\n\n\t\tlet cond: ExpressionNode = new EmptyStatement();\n\t\tif (this.peek().isNotType(Token.SEMICOLON)) {\n\t\t\tcond = this.parseExpression();\n\t\t}\n\t\tthis.expect(Token.SEMICOLON);\n\n\t\tlet next: ExpressionNode = new EmptyStatement();\n\t\tif (this.peek().isNotType(Token.RPAREN)) {\n\t\t\tnext = this.parseExpression();\n\t\t}\n\t\tthis.expect(Token.RPAREN);\n\t\tconst body = this.parseStatement();\n\t\treturn new ForNode(body, initializer, cond, next);\n\t}\n\tprotected parseForAwaitStatement() {\n\t\t// for await '(' ForDeclaration of AssignmentExpression ')'\n\n\t\t// Create an in-between scope for let-bound iteration variables.\n\t\t// BlockState for_state(zone(), & scope_);\n\t\tif (!this.isAwaitAllowed()) {\n\t\t\tthrow new SyntaxError(this.errorMessage('\"await\" is not allowed'));\n\t\t}\n\t\tthis.expect(Token.FOR);\n\t\tthis.expect(Token.AWAIT);\n\t\tthis.expect(Token.LPAREN);\n\n\t\tlet hasDeclarations = false;\n\t\t// Scope * inner_block_scope = NewScope(BLOCK_SCOPE);\n\t\tlet eachVariable: ExpressionNode;\n\n\t\tlet peek = this.peek();\n\t\tlet startsWithLet = peek.isType(Token.LET);\n\t\tif (peek.isType(Token.VAR) || peek.isType(Token.CONST)\n\t\t\t|| (startsWithLet && this.isNextLetKeyword())) {\n\t\t\t// The initializer contains declarations\n\t\t\t// 'for' 'await' '(' ForDeclaration 'of' AssignmentExpression ')'\n\t\t\t// Statement\n\t\t\t// 'for' 'await' '(' 'var' ForBinding 'of' AssignmentExpression ')'\n\t\t\t// Statement\n\t\t\thasDeclarations = true;\n\t\t\tconst initializer = this.parseVariableDeclarations(VariableDeclarationContext.ForStatement);\n\t\t\tif (initializer.getDeclarations().length != 1) {\n\t\t\t\tthrow new SyntaxError(this.errorMessage('For In/Of Loop MultiBindings, \"for-await-of\"'));\n\t\t\t}\n\t\t\teachVariable = initializer;\n\t\t} else {\n\t\t\t// The initializer does not contain declarations.\n\t\t\t// 'for' 'await' '(' LeftHandSideExpression 'of' AssignmentExpression ')'\n\t\t\t// Statement\n\t\t\tif (startsWithLet) {\n\t\t\t\tthrow new SyntaxError(this.errorMessage('The initializer does not contain declarations, For Of Let, \"for-await-of\"'));\n\t\t\t}\n\t\t\teachVariable = this.parseLeftHandSideExpression();\n\t\t}\n\n\t\tthis.expectContextualKeyword('of');\n\t\tthis.setAcceptIN(true);\n\t\tconst iterable = this.parseAssignmentExpression();\n\t\tthis.restoreAcceptIN();\n\t\tthis.expect(Token.RPAREN);\n\t\tconst body = this.parseStatement();\n\t\treturn new ForAwaitOfNode(eachVariable as ForDeclaration, iterable, body);\n\t}\n\tprotected parseVariableDeclarations(varContext: VariableDeclarationContext): VariableDeclarationNode {\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 (isStrict(this.languageMode) && 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\tthis.setAcceptIN(varContext !== VariableDeclarationContext.ForStatement)\n\t\t\t\tvalue = this.parseAssignmentExpression();\n\t\t\t\tthis.restoreAcceptIN();\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`));\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 DeclarationExpression, 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 (isStrict(this.languageMode) && 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.LBRACK) {\n\t\t\treturn this.parseArrayLiteral(isPattern);\n\t\t} else if (token == Token.LBRACE) {\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\t// Updates made here must be reflected on ClassifyPropertyIdentifier.\n\t\tif (Token.isInRangeIdentifierAndAsync(next.token)) {\n\t\t\tconst name = next.getValue<Identifier>();\n\t\t\tif (this.isArguments(name) && this.shouldBanArguments()) {\n\t\t\t\tthrow new SyntaxError(this.errorMessage('Arguments Disallowed In Initializer And Static Block'));\n\t\t\t}\n\t\t\treturn name;\n\t\t}\n\n\t\tif (!Token.isValidIdentifier(next.token, this.languageMode, this.isGenerator(), this.isAwaitAsIdentifierDisallowed())) {\n\t\t\tthrow new SyntaxError(this.errorMessage('Invalid Identifier'));\n\t\t}\n\n\t\tif (next.isType(Token.AWAIT)) {\n\t\t\treturn next.getValue<Identifier>();\n\t\t}\n\n\t\treturn next.getValue<Identifier>();\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\tlet label: Identifier | undefined;\n\t\tif (!this.scanner.hasLineTerminatorBeforeNext() &&\n\t\t\t!Token.isAutoSemicolon(this.peek().token)) {\n\t\t\t// ECMA allows \"eval\" or \"arguments\" as labels even in strict mode.\n\t\t\tlabel = this.parseIdentifier();\n\t\t}\n\t\tthis.expectSemicolon();\n\t\treturn label ? new ContinueStatement(label) : 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); let label: Identifier | undefined;\n\t\tif (!this.scanner.hasLineTerminatorBeforeNext() &&\n\t\t\t!Token.isAutoSemicolon(this.peek().token)) {\n\t\t\t// ECMA allows \"eval\" or \"arguments\" as labels even in strict mode.\n\t\t\tlabel = this.parseIdentifier();\n\t\t}\n\t\tthis.expectSemicolon();\n\t\treturn label ? new BreakStatement(label) : 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(this.functionKind)) {\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(allowFunction: AllowLabelledFunctionStatement): 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.LBRACE:\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.LBRACK) &&\n\t\t\t\t\t((nextNext.isNotType(Token.LBRACE) && 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\tthis.setAcceptIN(true);\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)\n\t\t\t\t&& isSloppy(this.languageMode)\n\t\t\t\t&& allowFunction == AllowLabelledFunctionStatement.AllowLabelledFunctionStatement) {\n\t\t\t\tconst result = this.parseFunctionDeclaration();\n\t\t\t\tthis.restoreAcceptIN();\n\t\t\t\treturn new LabeledStatement(expression, result);\n\t\t\t}\n\t\t\tconst result = this.parseStatement(allowFunction);\n\t\t\tthis.restoreAcceptIN();\n\t\t\treturn new LabeledStatement(expression, result);\n\t\t}\n\t\tthis.restoreAcceptIN();\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\tthis.setAcceptIN(true);\n\t\tconst result = this.parseExpressionCoverGrammar();\n\t\tthis.restoreAcceptIN();\n\t\treturn result;\n\t}\n\tprotected parseFunctionDeclaration(): FunctionDeclaration {\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.parseHoistableDeclaration01(FunctionKind.NormalFunction, undefined, false) as FunctionDeclaration;\n\t}\n\n\tprotected parseAsyncFunctionLiteral() {\n\t\t// AsyncFunctionLiteral ::\n\t\t// async [no LineTerminator here] function ( FormalParameters[Await] )\n\t\t// { AsyncFunctionBody }\n\t\t//\n\t\t// async [no LineTerminator here] function BindingIdentifier[Await]\n\t\t// ( FormalParameters[Await] ) { AsyncFunctionBody }\n\t\tif (this.current().isNotType(Token.ASYNC)) {\n\t\t\tthrow new SyntaxError(this.errorMessage('invalid token'));\n\t\t}\n\t\tthis.consume(Token.FUNCTION);\n\t\tlet name: Identifier | undefined;\n\t\tlet syntaxKind = FunctionSyntaxKind.AnonymousExpression;\n\t\tlet flags = FunctionKind.AsyncFunction;\n\t\tif (this.check(Token.MUL)) {\n\t\t\tflags = FunctionKind.AsyncGeneratorFunction;\n\t\t}\n\t\tif (this.peekAnyIdentifier()) {\n\t\t\tsyntaxKind = FunctionSyntaxKind.NamedExpression;\n\t\t\tname = this.parseIdentifier(this.getLastFunctionKind());\n\t\t}\n\t\treturn this.parseFunctionLiteral(flags, syntaxKind, name);\n\t}\n\tprotected parseHoistableDeclaration(names: string[] | undefined, defaultExport: boolean) {\n\t\tthis.consume(Token.FUNCTION);\n\t\tlet flags = FunctionKind.NormalFunction;\n\t\tif (this.check(Token.MUL)) {\n\t\t\tflags = FunctionKind.GeneratorFunction;\n\t\t}\n\t\treturn this.parseHoistableDeclaration01(flags, names, defaultExport);\n\t}\n\n\tprotected parseHoistableDeclaration01(flag: FunctionKind, names: string[] | undefined, defaultExport: boolean) {\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 ((flag & ParseFunctionFlag.IsAsync) != 0 && this.check(Token.MUL)) {\n\t\t\t// Async generator\n\t\t\tflag |= ParseFunctionFlag.IsGenerator;\n\t\t}\n\n\t\tlet name: Identifier | undefined;\n\t\tif (this.peek().isType(Token.LPAREN)) {\n\t\t\tif (defaultExport) {\n\t\t\t\tname = new Identifier('default');\n\t\t\t} else {\n\t\t\t\tthrow new SyntaxError(this.errorMessage('Missing Function Name'));\n\t\t\t}\n\t\t} else {\n\t\t\tname = this.parseIdentifier(this.getLastFunctionKind());\n\t\t}\n\t\tnames?.push(name.toString());\n\t\treturn this.parseFunctionLiteral(flag, FunctionSyntaxKind.Declaration, name);\n\t}\n\tprotected parseIdentifier(kind?: FunctionKind): Identifier {\n\t\tkind ??= this.functionKind;\n\t\tconst next = this.next();\n\t\tif (!Token.isValidIdentifier(next.token, this.languageMode, isGeneratorFunction(kind), isAwaitAsIdentifierDisallowed(kind))) {\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<Identifier>();\n\t\t}\n\t\treturn this.getIdentifier();\n\t}\n\tprotected getIdentifier(): Identifier {\n\t\tconst current = this.current();\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.IDENTIFIER:\n\t\t\tcase Token.PRIVATE_NAME:\n\t\t\t\treturn current.getValue();\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t\tconst name = current.getValue().toString();\n\t\tif (name == 'constructor') {\n\t\t\treturn ConstructorIdentifier;\n\t\t}\n\t\tif (name == 'name') {\n\t\t\treturn NameIdentifier;\n\t\t}\n\t\tif (name == 'eval') {\n\t\t\treturn EvalIdentifier;\n\t\t}\n\t\telse if (name == 'arguments') {\n\t\t\treturn ArgumentsIdentifier;\n\t\t}\n\t\treturn current.getValue();\n\t}\n\tprotected parseFunctionLiteral(flag: FunctionKind, functionSyntaxKind: FunctionSyntaxKind, name?: Identifier): FunctionDeclaration | FunctionExpression {\n\t\t// Function ::\n\t\t// '(' FormalParameterList? ')' '{' FunctionBody '}'\n\n\t\tthis.setFunctionKind(flag);\n\t\tconst functionInfo: FunctionInfo = {};\n\t\tthis.expect(Token.LPAREN);\n\t\tconst formals: ExpressionNode[] = this.parseFormalParameterList(functionInfo);\n\t\tthis.expect(Token.RPAREN);\n\t\tthis.expect(Token.LBRACE);\n\t\tthis.setAcceptIN(true);\n\t\tconst body = this.parseFunctionBody(flag, FunctionBodyType.BLOCK, functionSyntaxKind);\n\t\tthis.restoreAcceptIN();\n\t\tthis.restoreFunctionKind();\n\t\tconst bodyBlock = new BlockStatement(body);\n\t\tif (name) {\n\t\t\treturn new FunctionDeclaration(formals, bodyBlock, isAsyncFunction(flag), isGeneratorFunction(flag), name);\n\t\t}\n\t\treturn new FunctionExpression(formals, bodyBlock, isAsyncFunction(flag), isGeneratorFunction(flag));\n\t}\n\tprotected parseFunctionBody(\n\t\tkind: FunctionKind,\n\t\tbodyType: FunctionBodyType.BLOCK,\n\t\tfunctionSyntaxKind: FunctionSyntaxKind): ExpressionNode[];\n\tprotected parseFunctionBody(\n\t\tkind: FunctionKind,\n\t\tbodyType: FunctionBodyType.EXPRESSION,\n\t\tfunctionSyntaxKind: FunctionSyntaxKind): ExpressionNode\n\tprotected parseFunctionBody(\n\t\tkind: FunctionKind,\n\t\tbodyType: FunctionBodyType,\n\t\tfunctionSyntaxKind: FunctionSyntaxKind): ExpressionNode[] | ExpressionNode {\n\t\t// Building the parameter initialization block declares the parameters.\n\t\t// TODO(verwaest): Rely on ArrowHeadParsingScope instead.\n\n\t\tlet innerBody: ExpressionNode[] | ExpressionNode;\n\t\tif (bodyType == FunctionBodyType.EXPRESSION) {\n\t\t\tinnerBody = this.parseAssignmentExpression();\n\t\t} else {\n\t\t\t// DCHECK(accept_IN_);\n\t\t\t// DCHECK_EQ(FunctionBodyType:: kBlock, body_type);\n\t\t\t// If we are parsing the source as if it is wrapped in a function, the\n\t\t\t// source ends without a closing brace.\n\t\t\tconst closing_token = functionSyntaxKind == FunctionSyntaxKind.Wrapped ? Token.EOS : Token.RBRACE;\n\n\t\t\tif (isAsyncGeneratorFunction(kind)) {\n\t\t\t\tinnerBody = this.parseAndRewriteAsyncGeneratorFunctionBody(kind);\n\t\t\t} else if (isGeneratorFunction(kind)) {\n\t\t\t\tinnerBody = this.parseAndRewriteGeneratorFunctionBody(kind);\n\t\t\t} else if (isAsyncFunction(kind)) {\n\t\t\t\tinnerBody = this.parseAsyncFunctionBody();\n\t\t\t} else {\n\t\t\t\tinnerBody = this.parseStatementList(closing_token);\n\t\t\t}\n\t\t\tthis.expect(closing_token);\n\t\t}\n\t\treturn innerBody;\n\t}\n\tprotected parseAndRewriteAsyncGeneratorFunctionBody(kind: FunctionKind): ExpressionNode[] {\n\t\treturn this.parseStatementList(Token.RBRACE);\n\t}\n\tprotected parseAndRewriteGeneratorFunctionBody(kind: FunctionKind): ExpressionNode[] {\n\t\treturn this.parseStatementList(Token.RBRACE);\n\t}\n\tprotected parseAsyncFunctionBody(): ExpressionNode[] {\n\t\treturn this.parseStatementList(Token.RBRACE);\n\t}\n\tprotected parseStatementList(endToken: Token): ExpressionNode[] {\n\t\t// StatementList ::\n\t\t// (StatementListItem)* <end_token>\n\t\tif (this.peek().test((token, value) => Token.STRING === token && 'use strict' === (value as Literal<string>).getValue())) {\n\t\t\tthis.languageMode = LanguageMode.Strict;\n\t\t}\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.RPAREN)) {\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.RPAREN)) {\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\tthis.setAcceptIN(true);\n\t\t\tconst value = this.parseAssignmentExpression();\n\t\t\tthis.restoreAcceptIN();\n\t\t\tinitializer = new Param(pattern as DeclarationExpression, value);\n\t\t} else {\n\t\t\tinitializer = new Param(pattern as DeclarationExpression);\n\t\t}\n\t\treturn initializer;\n\t}\n\tprotected parseExpressionCoverGrammar(): ExpressionNode {\n\t\t// Expression ::\n\t\t// AssignmentExpression\n\t\t// Expression ',' AssignmentExpression\n\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\treturn this.parseArrowParametersWithRest(list);\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.RPAREN) && 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[]): 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.RPAREN) || 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(new SpreadElement(pattern));\n\t\treturn this.expressionListToExpression(list);\n\t}\n\tprotected expressionListToExpression(list: ExpressionNode[]): ExpressionNode {\n\t\tconst first = list[0];\n\t\tif (list.length === 1) { return first; }\n\t\tif (first instanceof SequenceExpression) {\n\t\t\tfirst.getExpressions().push(...list.slice(1));\n\t\t\treturn first;\n\t\t}\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 DeclarationExpression, expression.getRight());\n\t\t}\n\t\tif (expression instanceof GroupingExpression) {\n\t\t\treturn new Param(expression.getNode() as DeclarationExpression);\n\t\t}\n\t\treturn new Param(expression as DeclarationExpression);\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 = FunctionKind.NormalFunction;\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.parseAsyncFunctionLiteral();\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 = FunctionKind.AsyncFunction;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.peek().isType(Token.ARROW)) {\n\t\t\t\tthis.setFunctionKind(kind);\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\tconst arrow = this.parseArrowFunctionLiteral(params, kind);\n\t\t\t\tthis.restoreFunctionKind();\n\t\t\t\treturn arrow;\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\treturn this.parseFunctionExpression();\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.LBRACK:\n\t\t\t\treturn this.parseArrayLiteral(false);\n\n\t\t\tcase Token.LBRACE:\n\t\t\t\treturn this.parseObjectLiteral(false);\n\n\t\t\tcase Token.LPAREN: {\n\t\t\t\tthis.consume(Token.LPAREN);\n\t\t\t\tif (this.check(Token.RPAREN)) {\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.RPAREN.getName()}`));\n\t\t\t\t\t}\n\t\t\t\t\tconst result = new SequenceExpression([]);\n\t\t\t\t\tthis.markParenthesized(result);\n\t\t\t\t\treturn result;\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\tthis.setAcceptIN(true);\n\t\t\t\tconst expression = this.parseExpressionCoverGrammar();\n\t\t\t\tthis.markParenthesized(expression);\n\t\t\t\tthis.expect(Token.RPAREN);\n\t\t\t\tthis.restoreAcceptIN();\n\t\t\t\treturn expression;\n\t\t\t}\n\t\t\tcase Token.CLASS: {\n\t\t\t\treturn this.parseClassExpression();\n\t\t\t}\n\t\t\tcase Token.TEMPLATE_SPAN:\n\t\t\tcase Token.TEMPLATE_TAIL:\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\t// A TemplateLiteral is made up of 0 or more TEMPLATE_SPAN tokens (literal\n\t\t// text followed by a substitution expression), finalized by a single\n\t\t// TEMPLATE_TAIL.\n\t\t//\n\t\t// In terms of draft language, TEMPLATE_SPAN may be either the TemplateHead or\n\t\t// TemplateMiddle productions, while TEMPLATE_TAIL is either TemplateTail, or\n\t\t// NoSubstitutionTemplate.\n\t\t//\n\t\t// When parsing a TemplateLiteral, we must have scanned either an initial\n\t\t// TEMPLATE_SPAN, or a TEMPLATE_TAIL.\n\t\tlet next = this.peek();\n\t\tif (!Token.isTemplate(next.token)) {\n\t\t\tthrow new SyntaxError(this.errorMessage(`Unexpected Token: ${JSON.stringify(this.next())}`));\n\t\t}\n\t\t// If we reach a TEMPLATE_TAIL first, we are parsing a NoSubstitutionTemplate.\n\t\t// In this case we may simply consume the token and build a template with a\n\t\t// single TEMPLATE_SPAN and no expressions.\n\t\tif (next.isType(Token.TEMPLATE_TAIL)) {\n\t\t\tthis.consume(Token.TEMPLATE_TAIL);\n\t\t\tconst string = next.getValue<TemplateStringLiteral>().string;\n\t\t\treturn this.createTemplateLiteralExpressionNode([string], [], tag);\n\t\t}\n\t\tthis.consume(Token.TEMPLATE_SPAN);\n\t\tconst expressions: ExpressionNode[] = [];\n\t\tconst strings: string[] = [];\n\t\tstrings.push(next.getValue<TemplateStringLiteral>().string);\n\t\t// If we open with a TEMPLATE_SPAN, we must scan the subsequent expression,\n\t\t// and repeat if the following token is a TEMPLATE_SPAN as well (in this\n\t\t// case, representing a TemplateMiddle).\n\t\tdo {\n\t\t\tthis.setAcceptIN(true);\n\t\t\tconst expression = this.parseExpressionCoverGrammar();\n\t\t\texpressions.push(expression);\n\t\t\tnext = this.next();\n\t\t\tif (next.isNotType(Token.RBRACE)) {\n\t\t\t\tthis.restoreAcceptIN();\n\t\t\t\tthrow new SyntaxError(this.errorMessage('Unterminated Template Expr'));\n\t\t\t}\n\t\t\t// If we didn't die parsing that expression, our next token should be a\n\t\t\t// TEMPLATE_SPAN or TEMPLATE_TAIL.\n\t\t\tnext = this.scanner.scanTemplateContinuation();\n\t\t\tstrings.push(next.getValue<TemplateStringLiteral>().string);\n\t\t\tthis.restoreAcceptIN();\n\t\t} while (next.isType(Token.TEMPLATE_SPAN));\n\t\tif (next.isNotType(Token.TEMPLATE_TAIL)) {\n\t\t\tthrow new SyntaxError(this.errorMessage(`Unexpected Token: ${JSON.stringify(next)}`));\n\t\t}\n\t\t// Once we've reached a TEMPLATE_TAIL, we can close the TemplateLiteral.\n\t\treturn this.createTemplateLiteralExpressionNode(strings, expressions, tag);\n\t}\n\tprotected createTemplateLiteralExpressionNode(strings: string[], expressions: ExpressionNode[], tag?: ExpressionNode): TaggedTemplateExpression | TemplateLiteral {\n\t\tif (tag) {\n\t\t\treturn new TaggedTemplateExpression(tag, strings, expressions);\n\t\t} else {\n\t\t\treturn new TemplateLiteral(strings, expressions);\n\t\t}\n\t}\n\tprotected parseMemberWithPresentNewPrefixesExpression(): ExpressionNode {\n\t\t// NewExpression ::\n\t\t// ('new')+ MemberExpression\n\t\t//\n\t\t// NewTarget ::\n\t\t// 'new' '.' 'target'\n\n\t\t// The grammar for new expressions is pretty warped. We can have several 'new'\n\t\t// keywords following each other, and then a MemberExpression. When we see '('\n\t\t// after the MemberExpression, it's associated with the rightmost unassociated\n\t\t// 'new' to create a NewExpression with arguments. However, a NewExpression\n\t\t// can also occur without arguments.\n\n\t\t// Examples of new expression:\n\t\t// new foo.bar().baz means (new (foo.bar)()).baz\n\t\t// new foo()() means (new foo())()\n\t\t// new new foo()() means (new (new foo())())\n\t\t// new new foo means new (new foo)\n\t\t// new new foo() means new (new foo())\n\t\t// new new foo().bar().baz means (new (new foo()).bar()).baz\n\t\t// new super.x means new (super.x)\n\t\tthis.consume(Token.NEW);\n\n\t\tlet result: ExpressionNode;\n\n\t\t// CheckStackOverflow();\n\n\t\tif (this.peek().isType(Token.IMPORT) && this.peekAhead().isType(Token.LPAREN)) {\n\t\t\tthrow new SyntaxError(this.errorMessage(`Import Call Not New Expression`));\n\t\t} else if (this.peek().isType(Token.PERIOD)) {\n\t\t\tresult = this.parseNewTargetExpression();\n\t\t\treturn this.parseMemberExpressionContinuation(result);\n\t\t} else {\n\t\t\tresult = this.parseMemberExpression();\n\t\t\tif (result === SuperIdentifier) {\n\t\t\t\t// new super() is never allowed\n\t\t\t\tthrow new SyntaxError(this.errorMessage(`Unexpected Super, new super() is never allowed`));\n\t\t\t}\n\t\t}\n\t\tif (this.peek().isType(Token.LPAREN)) {\n\t\t\t// NewExpression with arguments.\n\t\t\tconst args = this.parseArguments();\n\t\t\tresult = new NewExpression(result, args);\n\t\t\t// The expression can still continue with . or [ after the arguments.\n\t\t\treturn this.parseMemberExpressionContinuation(result);\n\t\t}\n\n\t\tif (this.peek().isType(Token.QUESTION_PERIOD)) {\n\t\t\tthrow new SyntaxError(this.errorMessage(`Optional Chaining with New not allowed, new x?.y()`));\n\t\t}\n\t\treturn new NewExpression(result);\n\t}\n\tprotected parseArguments(maybeArrow?: ParsingArrowHeadFlag): ExpressionNode[] {\n\t\t// Arguments ::\n\t\t// '(' (AssignmentExpression)*[','] ')'\n\n\t\tthis.consume(Token.LPAREN);\n\t\tconst args: ExpressionNode[] = [];\n\t\twhile (this.peek().isNotType(Token.RPAREN)) {\n\t\t\tconst isSpread = this.check(Token.ELLIPSIS);\n\t\t\tthis.setAcceptIN(true);\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\tthis.restoreAcceptIN();\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\tthis.restoreAcceptIN();\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\tthis.restoreAcceptIN();\n\t\t\tif (!this.check(Token.COMMA)) break;\n\t\t}\n\t\tif (!this.check(Token.RPAREN)) {\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) && isGeneratorFunction(this.functionKind)) {\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)) {\n\t\t\tthis.clearParenthesized(expression);\n\t\t\treturn expression;\n\t\t};\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\tconst kind = FunctionKind.NormalFunction;\n\t\t\tthis.setFunctionKind(kind);\n\t\t\tlet arrow: ExpressionNode;\n\t\t\tif (expression instanceof SequenceExpression) {\n\t\t\t\tconst params = expression.getExpressions().map(expr => new Param(expr as DeclarationExpression));\n\t\t\t\tconst last = params.at(-1)?.getIdentifier();\n\t\t\t\tif (last instanceof SpreadElement) {\n\t\t\t\t\tconst arg = last.getArgument() as DeclarationExpression;\n\t\t\t\t\tlet param = arg;\n\t\t\t\t\tif (arg instanceof ArrayExpression) {\n\t\t\t\t\t\tparam = new ArrayPattern(arg.getElements() as DeclarationExpression[]);\n\t\t\t\t\t} else if (arg instanceof ObjectExpression) {\n\t\t\t\t\t\tparam = new ObjectPattern(arg.getProperties());\n\t\t\t\t\t}\n\t\t\t\t\tparams[params.length - 1] = new Param(new RestElement(param));\n\t\t\t\t}\n\t\t\t\tarrow = this.parseArrowFunctionLiteral(params, FunctionKind.NormalFunction);\n\t\t\t} else if (expression instanceof GroupingExpression) {\n\t\t\t\tarrow = this.parseArrowFunctionLiteral([new Param(expression.getNode() as DeclarationExpression)], FunctionKind.NormalFunction);\n\t\t\t} else {\n\t\t\t\tthis.clearParenthesized(expression);\n\t\t\t\tarrow = this.parseArrowFunctionLiteral([new Param(expression as DeclarationExpression)], FunctionKind.NormalFunction);\n\t\t\t}\n\t\t\tthis.restoreFunctionKind();\n\t\t\treturn arrow;\n\t\t}\n\t\tif (this.isAssignableIdentifier(expression)) {\n\t\t} else if (this.isProperty(expression)) {\n\t\t} else if (this.isPattern(expression) && Token.isAssignment(op)) {\n\t\t\t// Destructuring assignment.\n\t\t\texpression = expression instanceof ObjectExpression\n\t\t\t\t? new ObjectPattern(expression.getProperties())\n\t\t\t\t: new ArrayPattern(expression.getElements() as DeclarationExpression[]);\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[], kind: FunctionKind): ExpressionNode {\n\t\tif (this.peek().isNotType(Token.ARROW)) {\n\t\t\tthrow new SyntaxError(this.errorMessage('SyntaxError Expecting Arrow Token'));\n\t\t}\n\t\tif (this.scanner.hasLineTerminatorBeforeNext()) {\n\t\t\tthrow new SyntaxError(this.errorMessage('Unexpected Token \"\\n\" a line terminator after arrow token\"'));\n\t\t}\n\t\tlet body: ExpressionNode[] | ExpressionNode;\n\t\tlet has_braces = true;\n\t\tthis.consume(Token.ARROW);\n\t\tif (this.peek().isType(Token.LBRACE)) {\n\t\t\tthis.consume(Token.LBRACE);\n\t\t\tthis.setStatue(true, kind);\n\t\t\tbody = this.parseFunctionBody(kind, FunctionBodyType.BLOCK, FunctionSyntaxKind.AnonymousExpression);\n\t\t\tthis.restoreStatue();\n\t\t} else {\n\t\t\thas_braces = false;\n\t\t\tbody = this.parseFunctionBody(kind, FunctionBodyType.EXPRESSION, FunctionSyntaxKind.AnonymousExpression);\n\t\t}\n\t\treturn new ArrowFunctionExpression(parameters, body, !has_braces, isAsyncFunction(kind));\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) {\n\n\t\t// ArrayLiteral ::\n\t\t// '[' Expression? (',' Expression?)* ']'\n\n\t\tthis.consume(Token.LBRACK);\n\t\tlet first_spread_index = -1;\n\t\tconst values: (ExpressionNode | null)[] = [];\n\n\t\twhile (!this.check(Token.RBRACK)) {\n\t\t\tlet elem: ExpressionNode | null;\n\t\t\tif (this.peek().isType(Token.COMMA)) {\n\t\t\t\telem = null;\n\t\t\t} else if (this.check(Token.ELLIPSIS)) {\n\t\t\t\tthis.setAcceptIN(true);\n\t\t\t\tconst argument = this.parsePossibleDestructuringSubPattern();\n\t\t\t\tthis.restoreAcceptIN();\n\t\t\t\telem = new SpreadElement(argument);\n\t\t\t\tif (first_spread_index < 0) {\n\t\t\t\t\tfirst_spread_index = values.length;\n\t\t\t\t}\n\t\t\t\tif (argument instanceof AssignmentExpression && isPattern) {\n\t\t\t\t\tthrow new SyntaxError(this.errorMessage('Invalid Destructuring Target'));\n\t\t\t\t}\n\t\t\t\tif (this.peek().isType(Token.COMMA)) {\n\t\t\t\t\tthrow new SyntaxError(this.errorMessage('Element After Rest'));\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis.setAcceptIN(true);\n\t\t\t\telem = this.parsePossibleDestructuringSubPattern();\n\t\t\t\tthis.restoreAcceptIN();\n\t\t\t}\n\t\t\tvalues.push(elem);\n\t\t\tif (this.peek().isNotType(Token.RBRACK)) {\n\t\t\t\tthis.expect(Token.COMMA);\n\t\t\t}\n\t\t}\n\t\treturn new (isPattern ? ArrayPattern : ArrayExpression)(values as DeclarationExpression[]);\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.LBRACE);\n\t\tconst properties: ExpressionNode[] = [];\n\t\twhile (!this.check(Token.RBRACE)) {\n\t\t\tconst property: ExpressionNode = this.parseObjectPropertyDefinition(isPattern);\n\t\t\tproperties.push(property);\n\t\t\tif (this.peek().isNotType(Token.RBRACE)) {\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 = new 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 DeclarationExpression);\n\t\t\t\t}\n\t\t\t\treturn new Property(\n\t\t\t\t\tvalue.getArgument(),\n\t\t\t\t\tvalue,\n\t\t\t\t\t'init',\n\t\t\t\t\tfalse,\n\t\t\t\t\tfalse,\n\t\t\t\t\tpropInfo.isComputedName\n\t\t\t\t);\n\n\t\t\tcase PropertyKind.Value: {\n\t\t\t\tthis.consume(Token.COLON);\n\t\t\t\tthis.setAcceptIN(true);\n\t\t\t\tconst value = this.parsePossibleDestructuringSubPattern();\n\t\t\t\tthis.restoreAcceptIN();\n\t\t\t\treturn new Property(\n\t\t\t\t\tnameExpression,\n\t\t\t\t\tvalue,\n\t\t\t\t\t'init',\n\t\t\t\t\tfalse,\n\t\t\t\t\tfalse,\n\t\t\t\t\tpropInfo.isComputedName\n\t\t\t\t);\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\tthis.setAcceptIN(true);\n\t\t\t\t\tconst rhs = this.parseAssignmentExpression();\n\t\t\t\t\tthis.restoreAcceptIN();\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(\n\t\t\t\t\tnameExpression,\n\t\t\t\t\tvalue,\n\t\t\t\t\t'init',\n\t\t\t\t\tfalse,\n\t\t\t\t\tpropInfo.kind !== PropertyKind.Assign,\n\t\t\t\t\tpropInfo.isComputedName\n\t\t\t\t);\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 kind = this.methodKindFor(propInfo.isStatic, propInfo.funcFlag);\n\t\t\t\tconst value = this.parseFunctionLiteral(\n\t\t\t\t\tkind,\n\t\t\t\t\tFunctionSyntaxKind.AccessorOrMethod,\n\t\t\t\t\tpropInfo.name ? new Identifier(propInfo.name) : undefined\n\t\t\t\t);\n\t\t\t\treturn new Property(\n\t\t\t\t\tnameExpression,\n\t\t\t\t\tvalue,\n\t\t\t\t\t'init',\n\t\t\t\t\ttrue,\n\t\t\t\t\tfalse,\n\t\t\t\t\tpropInfo.isComputedName\n\t\t\t\t);\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 kind = this.methodKindFor(propInfo.isStatic, propInfo.funcFlag);\n\t\t\t\tconst value = this.parseFunctionLiteral(\n\t\t\t\t\tkind,\n\t\t\t\t\tFunctionSyntaxKind.AccessorOrMethod,\n\t\t\t\t\tpropInfo.name ? new Identifier(propInfo.name) : undefined\n\t\t\t\t);\n\t\t\t\treturn new Property(\n\t\t\t\t\tnameExpression,\n\t\t\t\t\tvalue,\n\t\t\t\t\tisGet ? 'get' : 'set',\n\t\t\t\t\tfalse,\n\t\t\t\t\tfalse,\n\t\t\t\t\tpropInfo.isComputedName\n\t\t\t\t);\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&& propInfo.parsePropertyKindFromToken(nextToken.token)\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 = ParseFunctionFlag.IsAsync;\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 = ParseFunctionFlag.IsGenerator;\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 (propInfo.parsePropertyKindFromToken(this.peek().token)) {\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\tnextToken = this.peek();\n\t\t}\n\t\tlet propertyName: ExpressionNode;\n\t\tswitch (nextToken.token) {\n\t\t\tcase Token.PRIVATE_NAME:\n\t\t\t\tpropInfo.isPrivate = true;\n\t\t\t\tthis.consume(Token.PRIVATE_NAME);\n\t\t\t\tif (propInfo.kind == PropertyKind.NotSet) {\n\t\t\t\t\tpropInfo.parsePropertyKindFromToken(this.peek().token);\n\t\t\t\t}\n\t\t\t\tpropertyName = this.getIdentifier();\n\t\t\t\tpropInfo.name = (propertyName as PrivateIdentifier).getName() as string;\n\t\t\t\tif (propInfo.position == PropertyPosition.ObjectLiteral) {\n\t\t\t\t\tthrow new TypeError(this.errorMessage('UnexpectedToken PRIVATE_NAME'));\n\t\t\t\t}\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 Literal<string>).getValue();\n\t\t\t\tbreak;\n\t\t\tcase Token.LBRACK:\n\t\t\t\t// [Symbol.iterator]\n\t\t\t\tthis.consume(Token.LBRACK);\n\t\t\t\tthis.setAcceptIN(true);\n\t\t\t\tpropertyName = this.parseAssignmentExpression();\n\t\t\t\tthis.expect(Token.RBRACK);\n\t\t\t\tif (propInfo.kind === PropertyKind.NotSet) {\n\t\t\t\t\tpropInfo.parsePropertyKindFromToken(this.peek().token);\n\t\t\t\t}\n\t\t\t\tpropInfo.name = propertyName.toString();\n\t\t\t\tthis.restoreAcceptIN();\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\tthis.setAcceptIN(true);\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.RBRACE)) {\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\tthis.restoreAcceptIN();\n\t\t\t\t\treturn new SpreadElement(propertyName);\n\t\t\t\t}\n\t\t\tdefault:\n\t\t\t\tpropertyName = this.parsePropertyOrPrivatePropertyName();\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\tpropInfo.parsePropertyKindFromToken(this.peek().token);\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.LBRACK: {\n\t\t\t\t\tthis.consume(Token.LBRACK);\n\t\t\t\t\tthis.setAcceptIN(true);\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.RBRACK);\n\t\t\t\t\tthis.restoreAcceptIN();\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.parsePropertyOrPrivatePropertyName();\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_SPAN:\n\t\t\t\tcase Token.TEMPLATE_TAIL: {\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\tthrow new SyntaxError(this.errorMessage('unknown token position'));\n\t\t\t}\n\t\t} while (Token.isMember(this.peek().token));\n\t\treturn expression;\n\t}\n\tprotected parsePropertyOrPrivatePropertyName(): ExpressionNode {\n\t\tconst next = this.next();\n\t\tif (next.isType(Token.IDENTIFIER) || next.isType(Token.PRIVATE_NAME)) {\n\t\t\treturn next.getValue();\n\t\t}\n\t\t// check keyword as identifier\n\t\tif (Token.isPropertyName(next.token) && next.isNotType(Token.EOS)) {\n\t\t\treturn new Identifier(next.token.getName());\n\t\t}\n\t\tthrow new SyntaxError(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\tbody = this.parseFunctionExpression();\n\t\t\t\tbreak;\n\t\t\tcase Token.ASYNC:\n\t\t\t\tif (this.peekAhead().isType(Token.FUNCTION) && !this.scanner.hasLineTerminatorAfterNext()) {\n\t\t\t\t\tthis.consume(Token.ASYNC);\n\t\t\t\t\tbody = this.parseAsyncFunctionLiteral();\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.LPAREN)) {\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.LPAREN:\n\t\t\t\t// es2022 syntax, F# & partial operator\n\t\t\t\tthis.consume(Token.LPAREN);\n\t\t\t\tlet indexed = false;\n\t\t\t\twhile (this.peek().isNotType(Token.RPAREN)) {\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.RPAREN);\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 = Token.precedence(peek.token, this.acceptIN);\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 (Token.precedence(this.peek().token, this.acceptIN) === 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\t// Precedence >= 4\n\tprotected parseBinaryExpression(precedence: number): ExpressionNode {\n\t\t// \"#foo in ShiftExpression\" needs to be parsed separately, since private\n\t\t// identifiers are not valid PrimaryExpressions.\n\t\tif (this.peek().isType(Token.PRIVATE_NAME)) {\n\t\t\tconst x = this.parsePropertyOrPrivatePropertyName();\n\t\t\tconst precedence1 = Token.precedence(this.peek().token, this.acceptIN);\n\t\t\tif (this.peek().isNotType(Token.IN) || precedence1 < precedence) {\n\t\t\t\tthrow new SyntaxError(this.errorMessage('Unexpected Token Token.PRIVATE_NAME \"#name\"'));\n\t\t\t}\n\t\t\treturn this.parseBinaryContinuation(x, precedence, precedence1);\n\t\t}\n\t\tconst x: ExpressionNode = this.parseUnaryExpression();\n\t\tconst precedence1 = Token.precedence(this.peek().token, this.acceptIN);\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) && this.isAwaitAllowed()) {\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) && isStrict(this.languageMode)) {\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.LPAREN)\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.parsePropertyOrPrivatePropertyName();\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.LBRACK: {\n\t\t\t\t\tthis.consume(Token.LBRACK);\n\t\t\t\t\tthis.setAcceptIN(true);\n\t\t\t\t\tconst index = this.parseExpressionCoverGrammar();\n\t\t\t\t\tthis.restoreAcceptIN();\n\t\t\t\t\tresult = new MemberExpression(result, index, true, isOptional);\n\t\t\t\t\tthis.expect(Token.RBRACK);\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.parsePropertyOrPrivatePropertyName();\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.LPAREN: {\n\t\t\t\t\tconst args = this.parseArguments();\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.parsePropertyOrPrivatePropertyName();\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.parsePropertyOrPrivatePropertyName();\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\tthis.setAcceptIN(true);\n\t\tconst left: ExpressionNode = this.parseAssignmentExpression();\n\t\tthis.restoreAcceptIN();\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.scanner.hasLineTerminatorBeforeNext()) {\n\t\t\tif (this.check(Token.MUL)) {\n\t\t\t\tdelegating = true;\n\t\t\t}\n\t\t\tswitch (this.peek().token) {\n\t\t\t\tcase Token.EOS:\n\t\t\t\tcase Token.SEMICOLON:\n\t\t\t\tcase Token.RBRACE:\n\t\t\t\tcase Token.RBRACK:\n\t\t\t\tcase Token.RPAREN:\n\t\t\t\tcase Token.COLON:\n\t\t\t\tcase Token.COMMA:\n\t\t\t\tcase Token.IN:\n\t\t\t\t\t// The above set of tokens is the complete set of tokens that can appear\n\t\t\t\t\t// after an AssignmentExpression, and none of them can start an\n\t\t\t\t\t// AssignmentExpression. This allows us to avoid looking for an RHS for\n\t\t\t\t\t// a regular yield, given only one look-ahead token.\n\t\t\t\t\tif (!delegating) break;\n\t\t\t\t\t// Delegating yields require an RHS; fall through.\n\t\t\t\t\t// V8_FALLTHROUGH;\n\t\t\t\t\tthrow new Error(this.errorMessage(`Delegating yields require an RHS`));\n\t\t\t\tdefault:\n\t\t\t\t\texpression = this.parseAssignmentExpressionCoverGrammar();\n\t\t\t\t\tbreak;\n\t\t\t}\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 parseClassExpression(): ClassExpression {\n\t\tthrow new Error(this.errorMessage(`Expression (class) not supported.`));\n\t}\n\tprotected parseClassDeclaration(names: string[] | undefined, defaultExport: boolean): ClassDeclaration {\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"]}
|