@ibyar/expressions 0.8.3 → 0.8.4

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.
Files changed (171) hide show
  1. package/README.md +0 -3
  2. package/api/abstract.d.ts +6 -2
  3. package/api/abstract.js +15 -8
  4. package/api/abstract.js.map +1 -1
  5. package/api/class/class.d.ts +15 -18
  6. package/api/class/class.js +49 -61
  7. package/api/class/class.js.map +1 -1
  8. package/api/class/decorator.d.ts +2 -2
  9. package/api/class/decorator.js +6 -6
  10. package/api/class/decorator.js.map +1 -1
  11. package/api/computing/call.d.ts +2 -2
  12. package/api/computing/call.js +8 -8
  13. package/api/computing/call.js.map +1 -1
  14. package/api/computing/debugger.d.ts +1 -2
  15. package/api/computing/debugger.js +2 -3
  16. package/api/computing/debugger.js.map +1 -1
  17. package/api/computing/new.d.ts +2 -2
  18. package/api/computing/new.js +7 -7
  19. package/api/computing/new.js.map +1 -1
  20. package/api/computing/rest.d.ts +2 -2
  21. package/api/computing/rest.js +6 -6
  22. package/api/computing/rest.js.map +1 -1
  23. package/api/computing/return.d.ts +2 -2
  24. package/api/computing/return.js +6 -6
  25. package/api/computing/return.js.map +1 -1
  26. package/api/computing/spread.d.ts +2 -2
  27. package/api/computing/spread.js +6 -6
  28. package/api/computing/spread.js.map +1 -1
  29. package/api/computing/throw.d.ts +4 -4
  30. package/api/computing/throw.js +18 -18
  31. package/api/computing/throw.js.map +1 -1
  32. package/api/computing/yield.d.ts +2 -2
  33. package/api/computing/yield.js +7 -7
  34. package/api/computing/yield.js.map +1 -1
  35. package/api/definition/array.d.ts +3 -3
  36. package/api/definition/array.js +14 -14
  37. package/api/definition/array.js.map +1 -1
  38. package/api/definition/bind.d.ts +2 -2
  39. package/api/definition/bind.js +9 -9
  40. package/api/definition/bind.js.map +1 -1
  41. package/api/definition/comment.d.ts +3 -3
  42. package/api/definition/comment.js +6 -6
  43. package/api/definition/comment.js.map +1 -1
  44. package/api/definition/function.d.ts +17 -16
  45. package/api/definition/function.js +60 -55
  46. package/api/definition/function.js.map +1 -1
  47. package/api/definition/member.d.ts +2 -2
  48. package/api/definition/member.js +13 -9
  49. package/api/definition/member.js.map +1 -1
  50. package/api/definition/object.d.ts +4 -4
  51. package/api/definition/object.js +22 -22
  52. package/api/definition/object.js.map +1 -1
  53. package/api/definition/statement.d.ts +2 -2
  54. package/api/definition/statement.js +6 -6
  55. package/api/definition/statement.js.map +1 -1
  56. package/api/definition/values.d.ts +15 -37
  57. package/api/definition/values.js +49 -74
  58. package/api/definition/values.js.map +1 -1
  59. package/api/expression.d.ts +42 -8
  60. package/api/expression.js.map +1 -1
  61. package/api/index.d.ts +1 -0
  62. package/api/index.js +1 -0
  63. package/api/index.js.map +1 -1
  64. package/api/module/common.d.ts +3 -3
  65. package/api/module/common.js +9 -9
  66. package/api/module/common.js.map +1 -1
  67. package/api/module/export.d.ts +5 -5
  68. package/api/module/export.js +30 -29
  69. package/api/module/export.js.map +1 -1
  70. package/api/module/import.d.ts +4 -4
  71. package/api/module/import.js +24 -23
  72. package/api/module/import.js.map +1 -1
  73. package/api/operators/assignment.d.ts +3 -3
  74. package/api/operators/assignment.js +5 -5
  75. package/api/operators/assignment.js.map +1 -1
  76. package/api/operators/await.d.ts +3 -3
  77. package/api/operators/await.js +7 -7
  78. package/api/operators/await.js.map +1 -1
  79. package/api/operators/binary.d.ts +1 -1
  80. package/api/operators/binary.js +1 -1
  81. package/api/operators/binary.js.map +1 -1
  82. package/api/operators/chaining.d.ts +2 -2
  83. package/api/operators/chaining.js +6 -6
  84. package/api/operators/chaining.js.map +1 -1
  85. package/api/operators/comma.d.ts +2 -2
  86. package/api/operators/comma.js +6 -6
  87. package/api/operators/comma.js.map +1 -1
  88. package/api/operators/grouping.d.ts +2 -2
  89. package/api/operators/grouping.js +6 -6
  90. package/api/operators/grouping.js.map +1 -1
  91. package/api/operators/logical.d.ts +1 -1
  92. package/api/operators/logical.js +1 -1
  93. package/api/operators/logical.js.map +1 -1
  94. package/api/operators/pipeline.d.ts +3 -3
  95. package/api/operators/pipeline.js +8 -8
  96. package/api/operators/pipeline.js.map +1 -1
  97. package/api/operators/ternary.d.ts +2 -2
  98. package/api/operators/ternary.js +8 -8
  99. package/api/operators/ternary.js.map +1 -1
  100. package/api/operators/types.d.ts +1 -1
  101. package/api/operators/unary.d.ts +3 -3
  102. package/api/operators/unary.js +7 -7
  103. package/api/operators/unary.js.map +1 -1
  104. package/api/operators/update.d.ts +3 -3
  105. package/api/operators/update.js +8 -8
  106. package/api/operators/update.js.map +1 -1
  107. package/api/program.d.ts +3 -3
  108. package/api/program.js +7 -7
  109. package/api/program.js.map +1 -1
  110. package/api/statement/control/block.d.ts +2 -2
  111. package/api/statement/control/block.js +6 -6
  112. package/api/statement/control/block.js.map +1 -1
  113. package/api/statement/control/empty.d.ts +2 -3
  114. package/api/statement/control/empty.js +6 -7
  115. package/api/statement/control/empty.js.map +1 -1
  116. package/api/statement/control/if.d.ts +2 -2
  117. package/api/statement/control/if.js +8 -8
  118. package/api/statement/control/if.js.map +1 -1
  119. package/api/statement/control/switch.d.ts +4 -6
  120. package/api/statement/control/switch.js +19 -20
  121. package/api/statement/control/switch.js.map +1 -1
  122. package/api/statement/control/terminate.d.ts +4 -4
  123. package/api/statement/control/terminate.js +11 -15
  124. package/api/statement/control/terminate.js.map +1 -1
  125. package/api/statement/control/with.d.ts +21 -0
  126. package/api/statement/control/with.js +67 -0
  127. package/api/statement/control/with.js.map +1 -0
  128. package/api/statement/declarations/declares.d.ts +4 -4
  129. package/api/statement/declarations/declares.js +14 -14
  130. package/api/statement/declarations/declares.js.map +1 -1
  131. package/api/statement/iterations/for.d.ts +7 -7
  132. package/api/statement/iterations/for.js +35 -35
  133. package/api/statement/iterations/for.js.map +1 -1
  134. package/api/statement/iterations/while.d.ts +3 -3
  135. package/api/statement/iterations/while.js +14 -14
  136. package/api/statement/iterations/while.js.map +1 -1
  137. package/package.json +14 -4
  138. package/scope/finalizer.d.ts +1 -1
  139. package/scope/pool.d.ts +1 -1
  140. package/scope/proxy.d.ts +1 -1
  141. package/scope/proxy.js +1 -0
  142. package/scope/proxy.js.map +1 -1
  143. package/scope/scope.d.ts +2 -2
  144. package/scope/scope.js +13 -16
  145. package/scope/scope.js.map +1 -1
  146. package/scope/stack.js +23 -23
  147. package/scope/stack.js.map +1 -1
  148. package/v8/enums.d.ts +4 -2
  149. package/v8/enums.js.map +1 -1
  150. package/v8/factory.d.ts +148 -0
  151. package/v8/factory.js +499 -0
  152. package/v8/factory.js.map +1 -0
  153. package/v8/inline.d.ts +49 -49
  154. package/v8/inline.js +314 -305
  155. package/v8/inline.js.map +1 -1
  156. package/v8/node.d.ts +141 -0
  157. package/v8/node.js +2 -0
  158. package/v8/node.js.map +1 -0
  159. package/v8/nodes.d.ts +0 -14
  160. package/v8/nodes.js +1 -152
  161. package/v8/nodes.js.map +1 -1
  162. package/v8/parser.d.ts +21 -18
  163. package/v8/parser.js +97 -84
  164. package/v8/parser.js.map +1 -1
  165. package/v8/stream.d.ts +2 -1
  166. package/v8/stream.js +221 -311
  167. package/v8/stream.js.map +1 -1
  168. package/v8/token.d.ts +3 -1
  169. package/v8/token.js +7 -5
  170. package/v8/token.js.map +1 -1
  171. package/visit/visitor.d.ts +1 -1
package/v8/parser.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../../src/expressions/v8/parser.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ExpressionNode } from '../api/expression.js';\nimport { InlineParserOptions, JavaScriptInlineParser } from './inline.js';\nimport { Token, TokenExpression } from './token.js';\nimport {\n\tAccessorProperty,\n\tClass,\n\tClassBody,\n\tClassDeclaration,\n\tClassExpression,\n\tMetaProperty,\n\tMethodDefinition,\n\tPropertyDefinition,\n\tStaticBlock,\n\tSuper\n} from '../api/class/class.js';\nimport { FunctionExpression } from '../api/definition/function.js';\nimport { Identifier, Literal, NullNode } from '../api/definition/values.js';\nimport { AssignmentExpression } from '../api/operators/assignment.js';\nimport {\n\tVariableDeclarationNode,\n\tVariableDeclarator\n} from '../api/statement/declarations/declares.js';\nimport { TokenStream } from './stream.js';\nimport { Program } from '../api/program.js';\nimport {\n\tExportAllDeclaration,\n\tExportDefaultDeclaration,\n\tExportNamedDeclaration,\n\tExportSpecifier\n} from '../api/module/export.js';\nimport {\n\tImportDeclaration,\n\tImportDefaultSpecifier,\n\tImportExpression,\n\tImportNamespaceSpecifier,\n\tImportSpecifier\n} from '../api/module/import.js';\nimport { ImportAttribute, ModuleSpecifier } from '../api/module/common.js';\nimport {\n\tClassInfo,\n\tClassLiteralProperty,\n\tClassLiteralPropertyKind,\n\tclassPropertyKindFor,\n\tcreateClassInfo,\n\tFunctionKind,\n\tFunctionSyntaxKind,\n\tisAccessor,\n\tParseFunctionFlag,\n\tPropertyKind,\n\tPropertyKindInfo,\n\tPropertyPosition,\n\tVariableDeclarationContext\n} from './enums.js';\n\nimport { isStrict, LanguageMode, } from './language.js';\n\nexport type ParserOptions = { mode?: LanguageMode };\n\nexport class JavaScriptParser extends JavaScriptInlineParser {\n\t/**\n\t * parser js with\n\t * @param source \n\t * @returns \n\t */\n\tstatic parse(source: string | TokenExpression[] | TokenStream, { mode }: ParserOptions = {}) {\n\t\tmode ??= LanguageMode.Strict;\n\t\tconst stream = (typeof source === 'string') || Array.isArray(source)\n\t\t\t? TokenStream.getTokenStream(source, mode) : source;\n\t\tconst parser = new JavaScriptParser(stream);\n\t\treturn parser.scan();\n\t}\n\n\t/**\n\t * parse inline code like that used in html 2 or 1 way binding\n\t */\n\tstatic parseScript(source: string | TokenExpression[] | TokenStream, options?: InlineParserOptions) {\n\t\treturn JavaScriptInlineParser.parse(source, options);\n\t}\n\n\toverride scan(): ExpressionNode {\n\t\tconst isModule = isStrict(this.languageMode);\n\t\tif (isModule) {\n\t\t\tthis.setFunctionKind(FunctionKind.Module);\n\t\t}\n\t\tconst body = isModule ? this.parseModuleItemList() : this.parseStatementList(Token.EOS);\n\t\treturn new Program(isModule ? 'module' : 'script', body);\n\t}\n\tprotected override parseNewTargetExpression(): ExpressionNode {\n\t\tthis.consume(Token.PERIOD);\n\t\tconst target: ExpressionNode = this.parsePropertyOrPrivatePropertyName();\n\t\tif (target.toString() !== 'target') {\n\t\t\tthrow new Error(this.errorMessage(`Expression (new.${target.toString()}) not supported.`));\n\t\t}\n\t\treturn MetaProperty.NewTarget;\n\t}\n\tprotected override parseClassExpression(): ClassExpression {\n\t\tthis.consume(Token.CLASS);\n\t\tlet name: ExpressionNode | undefined;\n\t\tlet isStrictReserved = false;\n\t\tif (this.peekAnyIdentifier()) {\n\t\t\tname = this.parseAndClassifyIdentifier(this.next());\n\t\t\tisStrictReserved = Token.isStrictReservedWord(this.current().token);\n\t\t}\n\t\tconst classLiteral = this.parseClassLiteral(name, isStrictReserved);\n\t\treturn new ClassExpression(classLiteral.getBody(), classLiteral.getDecorators(), classLiteral.getId()!, classLiteral.getSuperClass());\n\t}\n\tprotected override parseClassDeclaration(names: string[] | undefined, defaultExport: boolean): ClassDeclaration {\n\t\t// ClassDeclaration ::\n\t\t// 'class' Identifier ('extends' LeftHandExpression)? '{' ClassBody '}'\n\t\t// 'class' ('extends' LeftHandExpression)? '{' ClassBody '}'\n\t\t//\n\t\t// The anonymous form is allowed iff [default_export] is true.\n\t\t//\n\t\t// 'class' is expected to be consumed by the caller.\n\t\t//\n\t\t// A ClassDeclaration\n\t\t//\n\t\t// class C { ... }\n\t\t//\n\t\t// has the same semantics as:\n\t\t//\n\t\t// let C = class C { ... };\n\t\t//\n\t\t// so rewrite it as such.\n\n\t\tconst nextToken = this.peek().token;\n\t\tconst isStrictReserved = Token.isStrictReservedWord(nextToken);\n\t\tlet name: ExpressionNode | undefined;\n\t\tlet variableName: string | undefined;\n\t\tif (defaultExport && (nextToken == Token.EXTENDS || nextToken == Token.LBRACE)) {\n\t\t\tname = new Literal('default');\n\t\t\tvariableName = '.default';\n\t\t} else {\n\t\t\tconst identifier = this.parseIdentifier();\n\t\t\tvariableName = identifier.getName() as string;\n\t\t\tname = identifier;\n\t\t}\n\t\tconst classLiteral = this.parseClassLiteral(name, isStrictReserved);\n\t\treturn new ClassDeclaration(classLiteral.getBody(), classLiteral.getDecorators(), classLiteral.getId()!, classLiteral.getSuperClass());\n\t}\n\tprotected override parseClassLiteral(name: ExpressionNode | undefined, nameIsStrictReserved: boolean): Class {\n\t\tconst isAnonymous = !!!name;\n\n\t\t// All parts of a ClassDeclaration and ClassExpression are strict code.\n\t\tif (!isAnonymous) {\n\t\t\tif (nameIsStrictReserved) {\n\t\t\t\tthrow new Error(this.errorMessage(`Unexpected Strict Reserved class name`));\n\t\t\t}\n\t\t\tif (this.isEvalOrArguments(name!)) {\n\t\t\t\tthrow new Error(this.errorMessage(`Strict Eval Arguments not allowed for class name`));\n\t\t\t}\n\t\t}\n\n\t\tconst classInfo: ClassInfo = createClassInfo();\n\t\tclassInfo.isAnonymous = isAnonymous;\n\n\t\tif (this.check(Token.EXTENDS)) {\n\t\t\tclassInfo.extends = this.parseLeftHandSideExpression();\n\t\t}\n\n\t\tthis.expect(Token.LBRACE);\n\n\t\tconst hasExtends = !!classInfo.extends;\n\n\t\twhile (this.peek().isNotType(Token.RBRACE)) {\n\t\t\tif (this.check(Token.SEMICOLON)) continue;\n\n\t\t\t// Either we're parsing a `static { }` initialization block or a property.\n\t\t\tif (this.peek().isType(Token.STATIC) && this.peekAhead().isType(Token.LBRACE)) {\n\t\t\t\tconst staticBlock = this.parseClassStaticBlock(classInfo);\n\t\t\t\tclassInfo.staticElements.push(staticBlock);\n\t\t\t\tclassInfo.hasStaticBlocks = true;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// FuncNameInferrerState fni_state(& fni_);\n\t\t\t// If we haven't seen the constructor yet, it potentially is the next\n\t\t\t// property.\n\t\t\tlet isConstructor = !classInfo.hasSeenConstructor;\n\t\t\tconst propInfo = new PropertyKindInfo();\n\t\t\tpropInfo.position = PropertyPosition.ClassLiteral;\n\n\t\t\tconst property = this.parseClassPropertyDefinition(classInfo, propInfo, hasExtends);\n\n\t\t\t// if (has_error()) return impl() . FailureExpression();\n\n\t\t\tconst propertyKind = classPropertyKindFor(propInfo.kind);\n\t\t\tif (!classInfo.hasStaticComputedNames && propInfo.isStatic && propInfo.isComputedName) {\n\t\t\t\tclassInfo.hasStaticComputedNames = true;\n\t\t\t}\n\t\t\tisConstructor &&= classInfo.hasSeenConstructor;\n\n\t\t\tconst isField = propertyKind == ClassLiteralPropertyKind.FIELD;\n\n\t\t\tif (propInfo.isPrivate) {\n\t\t\t\tif (isConstructor) {\n\t\t\t\t\tthrow new Error(this.errorMessage('private constructor is not allowed'));\n\t\t\t\t}\n\t\t\t\tclassInfo.requiresBrand ||= (!isField && !propInfo.isStatic);\n\t\t\t\tconst isMethod = propertyKind == ClassLiteralPropertyKind.METHOD;\n\t\t\t\tclassInfo.hasPrivateMethods ||= isMethod;\n\t\t\t\tclassInfo.hasStaticPrivateMethods ||= isMethod && propInfo.isStatic;\n\t\t\t\tthis.declarePrivateClassMember(propInfo.name, property as MethodDefinition | PropertyDefinition, propertyKind, propInfo.isStatic, classInfo);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (isField) {\n\t\t\t\tif (propInfo.isComputedName) {\n\t\t\t\t\tclassInfo.computedFieldCount++;\n\t\t\t\t}\n\t\t\t\tthis.declarePublicClassField(property as PropertyDefinition, propInfo.isStatic, propInfo.isComputedName, classInfo);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tthis.declarePublicClassMethod(name, property as MethodDefinition, isConstructor, classInfo);\n\t\t}\n\n\t\tthis.expect(Token.RBRACE);\n\t\tconst classBody = this.rewriteClassLiteral(classInfo, name);\n\t\treturn new Class(classBody, [], name as Identifier, classInfo.extends);\n\t}\n\tprotected declarePublicClassMethod(name: ExpressionNode | undefined, property: MethodDefinition, isConstructor: boolean, classInfo: ClassInfo): void {\n\t\t// throw new Error('Method not implemented.');\n\t\tif (isConstructor) {\n\t\t\tif (classInfo.constructor) {\n\t\t\t\tthrow new SyntaxError(this.errorMessage('A class may only have one constructor.'));\n\t\t\t}\n\t\t\tclassInfo.constructor = property;\n\t\t\t// set the class name as the constructor name\n\t\t\tReflect.set(classInfo.constructor, 'id', name);\n\t\t\treturn;\n\t\t}\n\t\tclassInfo.publicMembers.push(property);\n\t}\n\tprotected declarePublicClassField(property: PropertyDefinition, isStatic: boolean, isComputedName: boolean, classInfo: ClassInfo) {\n\t\tif (isStatic) {\n\t\t\tclassInfo.staticElements.push(property);\n\t\t} else {\n\t\t\tclassInfo.instanceFields.push(property);\n\t\t}\n\n\t\t// if (isComputedName) {\n\t\t// \tclassInfo.publicMembers.push(property);\n\t\t// }\n\n\t}\n\tprotected declarePrivateClassMember(propertyName: string, property: MethodDefinition | PropertyDefinition, kind: ClassLiteralPropertyKind, isStatic: boolean, classInfo: ClassInfo) {\n\t\tclassInfo.privateMembers.push(property);\n\t}\n\t// protected createPrivateNameVariable(mode: VariableMode, staticFlag: StaticFlag, propertyName: string) {\n\t// \tthrow new Error('Method not implemented.');\n\t// }\n\tprotected parseClassPropertyDefinition(classInfo: ClassInfo, propInfo: PropertyKindInfo, hasExtends: boolean) {\n\t\tif (!classInfo) {\n\t\t\tthrow new Error(this.errorMessage('class info is undefined'));\n\t\t}\n\t\tif (propInfo.position !== PropertyPosition.ClassLiteral) {\n\t\t\tthrow new Error(this.errorMessage('expected property position ClassLiteral'));\n\t\t}\n\n\t\tconst nameToken = this.peek();\n\t\tlet nameExpression: ExpressionNode;\n\t\tif (nameToken.isType(Token.STATIC)) {\n\t\t\tthis.consume(Token.STATIC);\n\t\t\tif (this.peek().isType(Token.LPAREN)) {\n\t\t\t\tpropInfo.kind = PropertyKind.Method;\n\t\t\t\tnameExpression = this.parseIdentifier();\n\t\t\t\tpropInfo.name = (nameExpression as Identifier).getName() as string;\n\t\t\t} else if (this.peek().isType(Token.ASSIGN)\n\t\t\t\t|| this.peek().isType(Token.SEMICOLON)\n\t\t\t\t|| this.peek().isType(Token.RBRACK)) {\n\t\t\t\tnameExpression = this.parseIdentifier();\n\t\t\t\tpropInfo.name = (nameExpression as Identifier).getName() as string;\n\t\t\t} else {\n\t\t\t\tpropInfo.isStatic = true;\n\t\t\t\tnameExpression = this.parseProperty(propInfo);\n\t\t\t}\n\t\t} else {\n\t\t\tnameExpression = this.parseProperty(propInfo);\n\t\t}\n\n\t\tswitch (propInfo.kind) {\n\t\t\tcase PropertyKind.Assign:\n\t\t\tcase PropertyKind.ClassField:\n\t\t\tcase PropertyKind.ShorthandOrClassField:\n\t\t\tcase PropertyKind.NotSet: {\n\t\t\t\t// This case is a name followed by a\n\t\t\t\t// name or other property. Here we have\n\t\t\t\t// to assume that's an uninitialized\n\t\t\t\t// field followed by a line break\n\t\t\t\t// followed by a property, with ASI\n\t\t\t\t// adding the semicolon. If not, there\n\t\t\t\t// will be a syntax error after parsing\n\t\t\t\t// the first name as an uninitialized\n\t\t\t\t// field.\n\t\t\t\tpropInfo.kind = PropertyKind.ClassField;\n\n\t\t\t\t// if (!propInfo.isComputedName) {\n\t\t\t\t// \tthis.checkClassFieldName(propInfo.name, propInfo.isStatic);\n\t\t\t\t// }\n\n\t\t\t\tconst initializer = this.parseMemberInitializer(classInfo, propInfo.isStatic);\n\t\t\t\tthis.expectSemicolon();\n\n\t\t\t\tconst result: ExpressionNode = this.newClassLiteralProperty(\n\t\t\t\t\tnameExpression,\n\t\t\t\t\tinitializer,\n\t\t\t\t\tClassLiteralPropertyKind.FIELD,\n\t\t\t\t\tpropInfo.isStatic,\n\t\t\t\t\tpropInfo.isComputedName,\n\t\t\t\t\tpropInfo.isPrivate\n\t\t\t\t);\n\t\t\t\tthis.setFunctionNameFromPropertyName(result, propInfo.name);\n\t\t\t\treturn result;\n\t\t\t}\n\t\t\tcase PropertyKind.Method: {\n\t\t\t\t// MethodDefinition\n\t\t\t\t// PropertyName '(' StrictFormalParameters ')' '{' FunctionBody '}'\n\t\t\t\t// '*' PropertyName '(' StrictFormalParameters ')' '{' FunctionBody '}'\n\t\t\t\t// async PropertyName '(' StrictFormalParameters ')'\n\t\t\t\t// '{' FunctionBody '}'\n\t\t\t\t// async '*' PropertyName '(' StrictFormalParameters ')'\n\t\t\t\t// '{' FunctionBody '}'\n\n\t\t\t\tif (!propInfo.isComputedName) {\n\t\t\t\t\tthis.checkClassMethodName(propInfo, classInfo);\n\t\t\t\t}\n\n\t\t\t\tlet kind: FunctionKind = this.methodKindFor(propInfo.isStatic, propInfo.funcFlag);\n\n\t\t\t\tif (!propInfo.isStatic && propInfo.name.toString() === 'constructor') {\n\t\t\t\t\tclassInfo.hasSeenConstructor = true;\n\t\t\t\t\tkind = hasExtends ? FunctionKind.DerivedConstructor : FunctionKind.BaseConstructor;\n\t\t\t\t}\n\n\t\t\t\tconst value = this.parseFunctionLiteral(kind, FunctionSyntaxKind.AccessorOrMethod, nameExpression as Identifier);\n\n\t\t\t\tconst result = this.newClassLiteralProperty(\n\t\t\t\t\tnameExpression, value, ClassLiteralProperty.Kind.METHOD,\n\t\t\t\t\tpropInfo.isStatic, propInfo.isComputedName,\n\t\t\t\t\tpropInfo.isPrivate);\n\t\t\t\tthis.setFunctionNameFromPropertyName(result, propInfo.name);\n\t\t\t\treturn result;\n\t\t\t}\n\n\t\t\tcase PropertyKind.AccessorGetter:\n\t\t\tcase PropertyKind.AccessorSetter: {\n\t\t\t\tif (propInfo.funcFlag !== ParseFunctionFlag.IsNormal) {\n\t\t\t\t\tthrow new Error(this.errorMessage('accessor is not normal function'));\n\t\t\t\t}\n\t\t\t\tconst isGet = propInfo.kind == PropertyKind.AccessorGetter;\n\n\t\t\t\tif (!propInfo.isComputedName) {\n\t\t\t\t\tthis.checkClassMethodName(propInfo, classInfo);\n\t\t\t\t\t// Make sure the name expression is a string since we need a Name for\n\t\t\t\t\t// Runtime_DefineAccessorPropertyUnchecked and since we can determine\n\t\t\t\t\t// this statically we can skip the extra runtime check.\n\t\t\t\t\tnameExpression = new Literal<string>(propInfo.name);\n\t\t\t\t}\n\n\t\t\t\tlet kind: FunctionKind;\n\t\t\t\tif (propInfo.isStatic) {\n\t\t\t\t\tkind = isGet ? FunctionKind.StaticGetterFunction\n\t\t\t\t\t\t: FunctionKind.StaticSetterFunction;\n\t\t\t\t} else {\n\t\t\t\t\tkind = isGet ? FunctionKind.GetterFunction\n\t\t\t\t\t\t: FunctionKind.SetterFunction;\n\t\t\t\t}\n\n\t\t\t\tconst value = this.parseFunctionLiteral(kind, FunctionSyntaxKind.AccessorOrMethod, nameExpression as Identifier);\n\n\t\t\t\tconst propertyKind: ClassLiteralPropertyKind = isGet ? ClassLiteralProperty.Kind.GETTER : ClassLiteralProperty.Kind.SETTER;\n\t\t\t\tconst result = this.newClassLiteralProperty(\n\t\t\t\t\tnameExpression, value, propertyKind,\n\t\t\t\t\tpropInfo.isStatic, propInfo.isComputedName,\n\t\t\t\t\tpropInfo.isPrivate);\n\t\t\t\tconst prefix = isGet ? 'get ' : 'set ';\n\t\t\t\tthis.setFunctionNameFromPropertyName(result, propInfo.name, prefix);\n\t\t\t\treturn result;\n\t\t\t}\n\t\t\tcase PropertyKind.Value:\n\t\t\tcase PropertyKind.Shorthand:\n\t\t\tcase PropertyKind.Spread:\n\t\t\t\t// throw new Error(this.errorMessage('Report Unexpected Token'));\n\t\t\t\treturn NullNode;\n\t\t}\n\t\tthrow new Error(this.errorMessage('UNREACHABLE'));\n\t}\n\tprotected checkClassMethodName(propInfo: PropertyKindInfo, classInfo: ClassInfo) {\n\t\tif (!(propInfo.kind == PropertyKind.Method || isAccessor(propInfo.kind))) {\n\t\t\tthrow new Error(this.errorMessage('not kind of method or setter or getter'));\n\t\t}\n\t\tif (propInfo.isPrivate && propInfo.name.toString() === 'constructor') {\n\t\t\tthrow new Error(this.errorMessage('constructor is private'));\n\t\t} else if (propInfo.isStatic && propInfo.name.toString() === 'prototype') {\n\t\t\tthrow new Error(this.errorMessage('static prototype'));\n\t\t} else if (propInfo.name.toString() === 'constructor') {\n\t\t\tif (propInfo.funcFlag !== ParseFunctionFlag.IsNormal || isAccessor(propInfo.kind)) {\n\t\t\t\tif (propInfo.funcFlag === ParseFunctionFlag.IsGenerator) {\n\t\t\t\t\tthrow new Error(this.errorMessage('constructor is generator'));\n\t\t\t\t} else if (propInfo.funcFlag === ParseFunctionFlag.IsAsync) {\n\t\t\t\t\tthrow new Error(this.errorMessage('constructor is async'));\n\t\t\t\t}\n\t\t\t\tif (classInfo.hasSeenConstructor) {\n\t\t\t\t\tthrow new Error(this.errorMessage('duplicate constructor'));\n\t\t\t\t}\n\t\t\t}\n\t\t\tclassInfo.hasSeenConstructor = true;\n\t\t}\n\t}\n\tprotected parseClassStaticBlock(classInfo: ClassInfo): StaticBlock {\n\t\tthis.consume(Token.STATIC);\n\t\t// Each static block has its own var and lexical scope, so make a new var\n\t\t// block scope instead of using the synthetic members initializer function\n\t\t// scope.\n\t\tthis.setStatue(true, FunctionKind.ClassStaticInitializerFunction);\n\t\tconst block = this.parseBlock();\n\t\tthis.restoreStatue();\n\t\tclassInfo.hasStaticElements = true;\n\t\treturn new StaticBlock(block.getBody());\n\t}\n\tprotected declareClass(variableName: string, value: ExpressionNode, names: string[] | undefined): ExpressionNode {\n\t\tnames?.push(variableName);\n\t\tconst proxy = this.declareVariable(variableName, 'let');\n\t\treturn new AssignmentExpression('=', proxy, value);\n\t}\n\tprotected declareVariable(name: string, mode: 'let' | 'const' | 'var') {\n\t\treturn new VariableDeclarationNode([new VariableDeclarator(new Identifier(name))], mode);\n\t}\n\tprotected newClassLiteralProperty(nameExpression: ExpressionNode, initializer: ExpressionNode | undefined, kind: ClassLiteralPropertyKind, isStatic: boolean, isComputedName: boolean, isPrivate: boolean) {\n\t\tswitch (kind) {\n\t\t\tcase ClassLiteralPropertyKind.METHOD:\n\t\t\t\tif (nameExpression.toString() === 'constructor') {\n\t\t\t\t\treturn new MethodDefinition('constructor', nameExpression, initializer as FunctionExpression, [], isComputedName, isStatic);\n\t\t\t\t}\n\t\t\t\treturn new MethodDefinition('method', nameExpression, initializer as FunctionExpression, [], isComputedName, isStatic);\n\t\t\tcase ClassLiteralPropertyKind.GETTER:\n\t\t\t\treturn new MethodDefinition('get', nameExpression, initializer as FunctionExpression, [], isComputedName, isStatic);\n\t\t\tcase ClassLiteralPropertyKind.SETTER:\n\t\t\t\treturn new MethodDefinition('set', nameExpression, initializer as FunctionExpression, [], isComputedName, isStatic);\n\t\t\tcase ClassLiteralPropertyKind.FIELD:\n\t\t\t\treturn new PropertyDefinition(nameExpression, [], isComputedName, isStatic, initializer);\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t\tthrow new Error(this.errorMessage('UNREACHABLE'));\n\t}\n\tprotected parseMemberInitializer(classInfo: ClassInfo, isStatic: boolean): ExpressionNode | undefined {\n\t\tconst kind = isStatic\n\t\t\t? FunctionKind.ClassStaticInitializerFunction\n\t\t\t: FunctionKind.ClassMembersInitializerFunction;\n\n\n\t\tlet initializer: ExpressionNode | undefined = undefined;\n\t\tif (this.check(Token.ASSIGN)) {\n\t\t\tthis.setStatue(true, kind);\n\t\t\tinitializer = this.parseAssignmentExpression();\n\t\t\tthis.restoreStatue();\n\t\t}\n\t\tif (isStatic) {\n\t\t\tclassInfo.hasStaticElements = true;\n\t\t} else {\n\t\t\tclassInfo.hasInstanceMembers = true;\n\t\t}\n\t\treturn initializer;\n\t}\n\tprotected setFunctionNameFromPropertyName(property: ExpressionNode, name: string, prefix?: string): void {\n\t\t// TODO: no need for this now\n\t\t// check later when needed\n\t\t// the ClassExpression* handle this\n\t}\n\tprotected parseSuperExpression(): ExpressionNode {\n\t\tthis.consume(Token.SUPER);\n\t\tif (Token.isProperty(this.peek().token)) {\n\t\t\tif (this.peek().isType(Token.PERIOD) && this.peekAhead().isType(Token.PRIVATE_NAME)) {\n\t\t\t\tthis.consume(Token.PERIOD);\n\t\t\t\tthis.consume(Token.PRIVATE_NAME);\n\t\t\t\tthrow new Error(this.errorMessage('Unexpected Private Field'));\n\t\t\t}\n\t\t\tif (this.peek().isType(Token.QUESTION_PERIOD)) {\n\t\t\t\tthis.consume(Token.QUESTION_PERIOD);\n\t\t\t\tthrow new Error(this.errorMessage('Optional Chaining No Super'));\n\t\t\t}\n\t\t\treturn Super.INSTANCE;\n\t\t}\n\t\tthrow new Error(this.errorMessage('Unexpected Super'));\n\t}\n\tprotected rewriteClassLiteral(classInfo: ClassInfo, name?: ExpressionNode): ClassBody {\n\t\tconst body: (MethodDefinition | PropertyDefinition | AccessorProperty | StaticBlock)[] = [];\n\t\tif (classInfo.hasSeenConstructor) {\n\t\t\tbody.push(classInfo.constructor as MethodDefinition);\n\t\t}\n\t\tbody.push(...classInfo.staticElements);\n\t\tbody.push(...classInfo.instanceFields);\n\t\tbody.push(...classInfo.publicMembers);\n\t\tbody.push(...classInfo.privateMembers);\n\t\treturn new ClassBody(body);\n\t}\n\tprotected parseModuleItemList(): ExpressionNode[] {\n\t\t// ecma262/#prod-Module\n\t\t// Module :\n\t\t// ModuleBody?\n\t\t//\n\t\t// ecma262/#prod-ModuleItemList\n\t\t// ModuleBody :\n\t\t// ModuleItem*\n\t\tconst body: ExpressionNode[] = [];\n\t\twhile (this.peek().isNotType(Token.EOS)) {\n\t\t\tconst stat = this.parseModuleItem();\n\t\t\tif (!stat) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (this.isEmptyStatement(stat)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tbody.push(stat);\n\t\t}\n\t\treturn body;\n\t}\n\tprotected parseModuleItem(): ExpressionNode | undefined {\n\t\t// ecma262/#prod-ModuleItem\n\t\t// ModuleItem :\n\t\t// ImportDeclaration\n\t\t// ExportDeclaration\n\t\t// StatementListItem\n\n\t\tconst next = this.peek();\n\t\tif (next.isType(Token.EXPORT)) {\n\t\t\treturn this.parseExportDeclaration();\n\t\t}\n\t\tif (next.isType(Token.IMPORT)) {\n\t\t\t// We must be careful not to parse a dynamic import expression as an import\n\t\t\t// declaration. Same for import.meta expressions.\n\t\t\tconst peekAhead = this.peekAhead();\n\t\t\tif (peekAhead.isNotType(Token.LPAREN) && peekAhead.isNotType(Token.PERIOD)) {\n\t\t\t\treturn this.parseImportDeclaration();\n\t\t\t\t// return factory() -> EmptyStatement();\n\t\t\t}\n\t\t}\n\n\t\treturn this.parseStatementListItem();\n\t}\n\tprotected parseExportDeclaration(): ExpressionNode | undefined {\n\t\t// ExportDeclaration:\n\t\t// 'export' '*' 'from' ModuleSpecifier ';'\n\t\t// 'export' '*' 'from' ModuleSpecifier [no LineTerminator here]\n\t\t// AssertClause ';'\n\t\t// 'export' '*' 'as' IdentifierName 'from' ModuleSpecifier ';'\n\t\t// 'export' '*' 'as' IdentifierName 'from' ModuleSpecifier\n\t\t// [no LineTerminator here] AssertClause ';'\n\t\t// 'export' '*' 'as' ModuleExportName 'from' ModuleSpecifier ';'\n\t\t// 'export' '*' 'as' ModuleExportName 'from' ModuleSpecifier ';'\n\t\t// [no LineTerminator here] AssertClause ';'\n\t\t// 'export' ExportClause ('from' ModuleSpecifier)? ';'\n\t\t// 'export' ExportClause ('from' ModuleSpecifier [no LineTerminator here]\n\t\t// AssertClause)? ';'\n\t\t// 'export' VariableStatement\n\t\t// 'export' Declaration\n\t\t// 'export' 'default' ... (handled in ParseExportDefault)\n\t\t//\n\t\t// ModuleExportName :\n\t\t// StringLiteral\n\n\t\tthis.expect(Token.EXPORT);\n\t\tlet result: ExpressionNode | undefined;\n\t\tconst names: string[] = [];\n\n\t\t// Statement * result = nullptr;\n\t\t// ZonePtrList <const AstRawString> names(1, zone());\n\t\t// Scanner::Location loc = scanner() -> peek_location();\n\t\tswitch (this.peek().token) {\n\t\t\tcase Token.DEFAULT:\n\t\t\t\treturn this.parseExportDefault();\n\n\t\t\tcase Token.MUL:\n\t\t\t\treturn this.parseExportStar();\n\n\t\t\tcase Token.LBRACE: {\n\t\t\t\t// There are two cases here:\n\t\t\t\t//\n\t\t\t\t// 'export' ExportClause ';'\n\t\t\t\t// and\n\t\t\t\t// 'export' ExportClause FromClause ';'\n\t\t\t\t//\n\t\t\t\t// In the first case, the exported identifiers in ExportClause must\n\t\t\t\t// not be reserved words, while in the latter they may be. We\n\t\t\t\t// pass in a location that gets filled with the first reserved word\n\t\t\t\t// encountered, and then throw a SyntaxError if we are in the\n\t\t\t\t// non-FromClause case.\n\n\t\t\t\t// Scanner::Location reserved_loc = Scanner:: Location:: invalid();\n\t\t\t\t// Scanner::Location string_literal_local_name_loc =\n\t\t\t\t// Scanner:: Location:: invalid();\n\t\t\t\t// ZoneChunkList < ExportClauseData >* export_data =\n\t\t\t\t// ParseExportClause(& reserved_loc, & string_literal_local_name_loc);\n\n\t\t\t\tconst exportData = this.parseExportClause();\n\t\t\t\tlet moduleSpecifier: Literal<string> | undefined;\n\t\t\t\tlet importAssertions: ImportAttribute[] | undefined;\n\n\t\t\t\tif (this.checkContextualKeyword('from')) {\n\t\t\t\t\t// Scanner::Location specifier_loc = scanner() -> peek_location();\n\t\t\t\t\tmoduleSpecifier = this.parseModuleSpecifier();\n\t\t\t\t\timportAssertions = this.parseImportAssertClause();\n\t\t\t\t\tthis.expectSemicolon();\n\n\t\t\t\t\t// if (exportData.isEmpty()) {\n\t\t\t\t\t// \t// module() -> AddEmptyImport(module_specifier, import_assertions, specifier_loc, zone());\n\t\t\t\t\t// } else {\n\t\t\t\t\t// \t// for (const ExportClauseData& data : * export_data) {\n\t\t\t\t\t// \t// \tmodule() -> AddExport(data.local_name, data.export_name,\n\t\t\t\t\t// \t// \t\tmodule_specifier, import_assertions,\n\t\t\t\t\t// \t// \t\tdata.location, specifier_loc, zone());\n\t\t\t\t\t// \t// }\n\t\t\t\t\t// }\n\t\t\t\t} else {\n\t\t\t\t\t// if (reserved_loc.IsValid()) {\n\t\t\t\t\t// \t// No FromClause, so reserved words are invalid in ExportClause.\n\t\t\t\t\t// \tReportMessageAt(reserved_loc, MessageTemplate:: kUnexpectedReserved);\n\t\t\t\t\t// \treturn nullptr;\n\t\t\t\t\t// } else if (string_literal_local_name_loc.IsValid()) {\n\t\t\t\t\t// \tReportMessageAt(string_literal_local_name_loc,\n\t\t\t\t\t// \t\tMessageTemplate:: kModuleExportNameWithoutFromClause);\n\t\t\t\t\t// \treturn nullptr;\n\t\t\t\t\t// }\n\n\t\t\t\t\tthis.expectSemicolon();\n\n\t\t\t\t\t// for (const ExportClauseData& data : * export_data) {\n\t\t\t\t\t// \tmodule() -> AddExport(data.local_name, data.export_name, data.location,\n\t\t\t\t\t// \t\tzone());\n\t\t\t\t\t// }\n\t\t\t\t}\n\t\t\t\treturn new ExportNamedDeclaration(exportData, undefined, moduleSpecifier, importAssertions);\n\t\t\t\t// return factory() -> EmptyStatement();\n\t\t\t}\n\n\t\t\tcase Token.FUNCTION: {\n\t\t\t\tconst declaration = this.parseFunctionDeclaration();\n\t\t\t\tconst identifier = declaration.getId()!;\n\t\t\t\tresult = new ExportNamedDeclaration([new ExportSpecifier(identifier, identifier)], declaration);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase Token.CLASS: {\n\t\t\t\tthis.consume(Token.CLASS);\n\t\t\t\tconst declaration = this.parseClassDeclaration(names, false);\n\t\t\t\tconst identifier = declaration.getId()!;\n\t\t\t\tresult = new ExportNamedDeclaration([new ExportSpecifier(identifier, identifier)], declaration);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase Token.VAR:\n\t\t\tcase Token.LET:\n\t\t\tcase Token.CONST:\n\t\t\t\tconst declaration = this.parseVariableStatement(VariableDeclarationContext.StatementListItem, names);\n\t\t\t\tconst specifiers = declaration.getDeclarations()\n\t\t\t\t\t.map(node => new ExportSpecifier(node.getId() as Identifier, node.getId() as Identifier));\n\t\t\t\tresult = new ExportNamedDeclaration(specifiers, declaration);\n\t\t\t\tbreak;\n\n\t\t\tcase Token.ASYNC:\n\t\t\t\tthis.consume(Token.ASYNC);\n\t\t\t\tif (this.peek().isType(Token.FUNCTION) && !this.scanner.hasLineTerminatorBeforeNext()) {\n\t\t\t\t\tconst declaration = this.parseAsyncFunctionDeclaration(names, false);\n\t\t\t\t\tconst identifier = declaration.getId()!;\n\t\t\t\t\tresult = new ExportNamedDeclaration([new ExportSpecifier(identifier, identifier)], declaration);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\tdefault:\n\t\t\t\tthrow new SyntaxError(this.errorMessage('Unexpected Token'));\n\t\t}\n\t\t// loc.end_pos = scanner() -> location().end_pos;\n\n\t\t// SourceTextModuleDescriptor * descriptor = module();\n\t\t// for (const AstRawString* name : names) {\n\t\t// \tdescriptor -> AddExport(name, name, loc, zone());\n\t\t// }\n\n\t\treturn result;\n\t}\n\tprotected parseImportDeclaration(): ExpressionNode | undefined {\n\t\t// ImportDeclaration :\n\t\t// 'import' ImportClause 'from' ModuleSpecifier ';'\n\t\t// 'import' ModuleSpecifier ';'\n\t\t// 'import' ImportClause 'from' ModuleSpecifier [no LineTerminator here]\n\t\t// AssertClause ';'\n\t\t// 'import' ModuleSpecifier [no LineTerminator here] AssertClause';'\n\t\t//\n\t\t// ImportClause :\n\t\t// ImportedDefaultBinding\n\t\t// NameSpaceImport\n\t\t// NamedImports\n\t\t// ImportedDefaultBinding ',' NameSpaceImport\n\t\t// ImportedDefaultBinding ',' NamedImports\n\t\t//\n\t\t// NameSpaceImport :\n\t\t// '*' 'as' ImportedBinding\n\n\t\tthis.expect(Token.IMPORT);\n\n\t\tconst tok = this.peek();\n\n\t\t// 'import' ModuleSpecifier ';'\n\t\tif (tok.isType(Token.STRING)) {\n\t\t\t// Scanner::Location specifier_loc = scanner() -> peek_location();\n\t\t\tconst moduleSpecifier = this.parseModuleSpecifier();\n\t\t\tconst importAssertions = this.parseImportAssertClause();\n\t\t\tthis.expectSemicolon();\n\n\t\t\t// module() -> AddEmptyImport(module_specifier, import_assertions, specifier_loc,zone());\n\t\t\treturn new ImportDeclaration(moduleSpecifier, undefined, importAssertions);\n\t\t}\n\n\t\t// Parse ImportedDefaultBinding if present.\n\t\tlet importDefaultBinding: Identifier | undefined;\n\t\t// Scanner::Location import_default_binding_loc;\n\t\tif (tok.isNotType(Token.MUL) && tok.isNotType(Token.LBRACE)) {\n\t\t\timportDefaultBinding = this.parseNonRestrictedIdentifier();\n\t\t\t// DeclareUnboundVariable(import_default_binding, VariableMode:: kConst,kNeedsInitialization, pos);\n\t\t}\n\n\t\t// Parse NameSpaceImport or NamedImports if present.\n\t\tlet moduleNamespaceBinding: Identifier | undefined;\n\t\tlet namedImports: ModuleSpecifier[] | undefined;\n\t\t// Scanner::Location module_namespace_binding_loc;\n\t\t// const ZonePtrList<const NamedImport >* named_imports = nullptr;\n\t\tif (importDefaultBinding == undefined || this.check(Token.COMMA)) {\n\t\t\tswitch (this.peek().token) {\n\t\t\t\tcase Token.MUL: {\n\t\t\t\t\tthis.consume(Token.MUL);\n\t\t\t\t\tthis.expectContextualKeyword('as');\n\t\t\t\t\tmoduleNamespaceBinding = this.parseNonRestrictedIdentifier();\n\t\t\t\t\t// ExpectContextualKeyword(ast_value_factory() -> as_string());\n\t\t\t\t\t// module_namespace_binding = ParseNonRestrictedIdentifier();\n\t\t\t\t\t// module_namespace_binding_loc = scanner() -> location();\n\t\t\t\t\t// DeclareUnboundVariable(module_namespace_binding, VariableMode:: kConst, kCreatedInitialized, pos);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tcase Token.LBRACE:\n\t\t\t\t\tnamedImports = this.parseNamedImports();\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new SyntaxError(this.errorMessage('Unexpected Token'));\n\t\t\t}\n\t\t}\n\t\tthis.expectContextualKeyword('from');\n\t\t// ExpectContextualKeyword(ast_value_factory() -> from_string());\n\t\t// Scanner::Location specifier_loc = scanner() -> peek_location();\n\t\tconst moduleSpecifier = this.parseModuleSpecifier();\n\t\tconst importAssertions = this.parseImportAssertClause();\n\t\tthis.expectSemicolon();\n\n\t\t// Now that we have all the information, we can make the appropriate\n\t\t// declarations.\n\n\t\t// TODO(neis): Would prefer to call DeclareVariable for each case below rather\n\t\t// than above and in ParseNamedImports, but then a possible error message\n\t\t// would point to the wrong location. Maybe have a DeclareAt version of\n\t\t// Declare that takes a location?\n\n\t\tconst specifiers: ModuleSpecifier[] = [];\n\t\tif (moduleNamespaceBinding) {\n\t\t\tspecifiers.push(new ImportNamespaceSpecifier(moduleNamespaceBinding));\n\t\t}\n\t\tif (importDefaultBinding) {\n\t\t\tspecifiers.push(new ImportDefaultSpecifier(importDefaultBinding));\n\t\t}\n\t\tif (namedImports?.length) {\n\t\t\tspecifiers.push(...namedImports);\n\t\t}\n\t\treturn new ImportDeclaration(moduleSpecifier, specifiers.length ? specifiers : undefined, importAssertions);\n\t}\n\tprotected parseImportExpressions(): ExpressionNode {\n\t\tthis.consume(Token.IMPORT);\n\t\tif (this.check(Token.PERIOD)) {\n\t\t\tthis.expectContextualKeyword('meta');\n\t\t\treturn MetaProperty.ImportMeta;\n\t\t}\n\n\t\tif (this.peek().isNotType(Token.LPAREN)) {\n\t\t\tthrow new SyntaxError(this.errorMessage('Unexpected Token'));\n\t\t}\n\n\t\tthis.consume(Token.LPAREN);\n\t\tif (this.peek().isType(Token.RPAREN)) {\n\t\t\tthrow new SyntaxError(this.errorMessage('Import Missing Specifier'));\n\t\t}\n\t\tthis.setAcceptIN(true);\n\t\tconst specifier = this.parseAssignmentExpressionCoverGrammar();\n\n\t\tif (this.check(Token.COMMA)) {\n\t\t\tif (this.check(Token.RPAREN)) {\n\t\t\t\t// A trailing comma allowed after the specifier.\n\t\t\t\treturn new ImportExpression(specifier as Literal<string>);\n\t\t\t} else {\n\t\t\t\tconst importAssertions = this.parseAssignmentExpressionCoverGrammar();\n\t\t\t\tthis.check(Token.COMMA); // A trailing comma is allowed after the import\n\t\t\t\t// assertions.\n\t\t\t\tthis.expect(Token.RPAREN);\n\t\t\t\treturn new ImportExpression(specifier as Literal<string>, importAssertions);\n\t\t\t}\n\t\t}\n\n\t\tthis.expect(Token.RPAREN);\n\t\tthis.restoreAcceptIN();\n\t\treturn new ImportExpression(specifier as Literal<string>);\n\t}\n\tprotected parseVariableStatement(varContext: VariableDeclarationContext, names: string[]) {\n\t\t// VariableStatement ::\n\t\t// VariableDeclarations ';'\n\n\t\t// The scope of a var declared variable anywhere inside a function\n\t\t// is the entire function (ECMA-262, 3rd, 10.1.3, and 12.2). Thus we can\n\t\t// transform a source-level var declaration into a (Function) Scope\n\t\t// declaration, and rewrite the source-level initialization into an assignment\n\t\t// statement. We use a block to collect multiple assignments.\n\t\t//\n\t\t// We mark the block as initializer block because we don't want the\n\t\t// rewriter to add a '.result' assignment to such a block (to get compliant\n\t\t// behavior for code such as print(eval('var x = 7')), and for cosmetic\n\t\t// reasons when pretty-printing. Also, unless an assignment (initialization)\n\t\t// is inside an initializer block, it is ignored.\n\t\tconst declarations = this.parseVariableDeclarations(varContext);\n\t\tthis.expectSemicolon();\n\t\tnames.push(...declarations.getDeclarations().map(d => d.getId().toString()));\n\t\treturn declarations;\n\t}\n\tprotected parseImportAssertClause(): ImportAttribute[] | undefined {\n\t\t// AssertClause :\n\t\t// assert '{' '}'\n\t\t// assert '{' AssertEntries '}'\n\n\t\t// AssertEntries :\n\t\t// IdentifierName: AssertionKey\n\t\t// IdentifierName: AssertionKey , AssertEntries\n\n\t\t// AssertionKey :\n\t\t// IdentifierName\n\t\t// StringLiteral\n\n\t\t// auto import_assertions = zone() -> New<ImportAssertions>(zone());\n\n\t\t// if (!FLAG_harmony_import_assertions) {\n\t\t// \treturn import_assertions;\n\t\t// }\n\n\t\t// Assert clause is optional, and cannot be preceded by a LineTerminator.\n\t\tif (this.scanner.hasLineTerminatorBeforeNext() || !this.checkContextualKeyword('assert')) {\n\t\t\treturn undefined;\n\t\t}\n\t\tthis.expect(Token.LBRACE);\n\t\tconst counts = {} as { [key: string]: number };\n\t\tconst importAssertions: ImportAttribute[] = [];\n\t\twhile (this.peek().isNotType(Token.RBRACE)) {\n\t\t\tlet attributeKey = this.checkAndGetValue(Token.STRING);\n\t\t\tif (!attributeKey) {\n\t\t\t\tattributeKey = this.parsePropertyOrPrivatePropertyName();\n\t\t\t}\n\t\t\tthis.expect(Token.COLON);\n\t\t\tconst attributeValue = this.expectAndGetValue(Token.STRING);\n\t\t\timportAssertions.push(new ImportAttribute(attributeKey as Identifier, attributeValue as Literal<string>));\n\t\t\tcounts[attributeKey.toString()] = (counts[attributeKey.toString()] ?? 0) + 1;\n\t\t\tif (counts[attributeKey.toString()] > 1) {\n\t\t\t\t// \t// It is a syntax error if two AssertEntries have the same key.\n\t\t\t\tthrow new SyntaxError(this.errorMessage('Import Assertion Duplicate Key'));\n\t\t\t}\n\n\t\t\tif (this.peek().isType(Token.RBRACE)) break;\n\t\t\tif (!this.check(Token.COMMA)) {\n\t\t\t\tthrow new SyntaxError('Unexpected Token');\n\t\t\t}\n\t\t}\n\t\tthis.expect(Token.RBRACE);\n\t\treturn importAssertions;\n\t}\n\tprotected parseModuleSpecifier(): Literal<string> {\n\t\t// ModuleSpecifier :\n\t\t// StringLiteral\n\n\t\treturn this.expectAndGetValue(Token.STRING) as Literal<string>;\n\t}\n\tprotected parseExportClause() {\n\t\t// ExportClause :\n\t\t// '{' '}'\n\t\t// '{' ExportsList '}'\n\t\t// '{' ExportsList ',' '}'\n\t\t//\n\t\t// ExportsList :\n\t\t// ExportSpecifier\n\t\t// ExportsList ',' ExportSpecifier\n\t\t//\n\t\t// ExportSpecifier :\n\t\t// IdentifierName\n\t\t// IdentifierName 'as' IdentifierName\n\t\t// IdentifierName 'as' ModuleExportName\n\t\t// ModuleExportName\n\t\t// ModuleExportName 'as' ModuleExportName\n\t\t//\n\t\t// ModuleExportName :\n\t\t// StringLiteral\n\t\t// ZoneChunkList < ExportClauseData >* export_data = zone() -> New<ZoneChunkList<ExportClauseData>>(zone());\n\n\t\tthis.expect(Token.LBRACE);\n\n\t\tconst exportData: ExportSpecifier[] = [];\n\t\tlet nameTok = this.peek();\n\t\twhile (nameTok.isNotType(Token.RBRACE)) {\n\t\t\tconst localName = this.parseExportSpecifierName();\n\t\t\tlet exportName;\n\t\t\tif (this.checkContextualKeyword('as')) {\n\t\t\t\texportName = this.parseExportSpecifierName();\n\t\t\t} else {\n\t\t\t\texportName = localName;\n\t\t\t}\n\t\t\texportData.push(new ExportSpecifier(exportName as Identifier, localName as Identifier));\n\t\t\tif (this.peek().isType(Token.RBRACE)) break;\n\t\t\tif (!this.check(Token.COMMA)) {\n\t\t\t\tthrow new SyntaxError('Unexpected Token');\n\t\t\t}\n\t\t}\n\t\tthis.expect(Token.RBRACE);\n\t\treturn exportData;\n\t}\n\tprotected parseExportSpecifierName() {\n\t\tconst next = this.next();\n\n\t\t// IdentifierName\n\t\tif (next.isType(Token.IDENTIFIER) || Token.isPropertyName(next.token)) {\n\t\t\treturn next.getValue() as Identifier;\n\t\t}\n\n\t\t// ModuleExportName\n\t\tif (next.isType(Token.STRING)) {\n\t\t\tconst exportName = next.getValue() as Literal<string>;\n\t\t\treturn exportName;\n\t\t}\n\t\tthrow new SyntaxError(this.errorMessage('Unexpected Token'));\n\t}\n\tprotected parseNamedImports(): ImportSpecifier[] {\n\t\t// NamedImports :\n\t\t// '{' '}'\n\t\t// '{' ImportsList '}'\n\t\t// '{' ImportsList ',' '}'\n\t\t//\n\t\t// ImportsList :\n\t\t// ImportSpecifier\n\t\t// ImportsList ',' ImportSpecifier\n\t\t//\n\t\t// ImportSpecifier :\n\t\t// BindingIdentifier\n\t\t// IdentifierName 'as' BindingIdentifier\n\t\t// ModuleExportName 'as' BindingIdentifier\n\n\t\tthis.expect(Token.LBRACE);\n\t\tconst result: ImportSpecifier[] = [];\n\n\t\t// auto result = zone() -> New < ZonePtrList <const NamedImport>> (1, zone());\n\t\twhile (this.peek().isNotType(Token.RBRACE)) {\n\t\t\tconst importName = this.parseExportSpecifierName() as Identifier;\n\t\t\tlet localName = importName;\n\t\t\t// In the presence of 'as', the left-side of the 'as' can\n\t\t\t// be any IdentifierName. But without 'as', it must be a valid\n\t\t\t// BindingIdentifier.\n\t\t\tif (this.checkContextualKeyword('as')) {\n\t\t\t\tlocalName = this.parsePropertyOrPrivatePropertyName() as Identifier;\n\t\t\t}\n\t\t\tif (!Token.isValidIdentifier(this.current().token, LanguageMode.Strict, false, isStrict(this.languageMode))) {\n\t\t\t\tthrow new SyntaxError(this.errorMessage('Unexpected Reserved Keyword'));\n\t\t\t} else if (this.isEvalOrArguments(localName)) {\n\t\t\t\tthrow new SyntaxError(this.errorMessage('Strict Eval Arguments'));\n\t\t\t}\n\n\t\t\tresult.push(new ImportSpecifier(localName, importName));\n\n\t\t\t// DeclareUnboundVariable(localName, VariableMode:: kConst, kNeedsInitialization, position());\n\n\t\t\t// NamedImport * import = zone() -> New<NamedImport>(import_name, local_name, location);\n\t\t\t// result-> Add(import, zone());\n\n\t\t\tif (this.peek().isType(Token.RBRACE)) break;\n\t\t\tthis.expect(Token.COMMA);\n\t\t}\n\n\t\tthis.expect(Token.RBRACE);\n\t\treturn result;\n\t}\n\n\tprotected parseExportDefault(): ExportDefaultDeclaration {\n\t\t// Supports the following productions, starting after the 'default' token:\n\t\t// 'export' 'default' HoistableDeclaration\n\t\t// 'export' 'default' ClassDeclaration\n\t\t// 'export' 'default' AssignmentExpression[In] ';'\n\n\t\tthis.expect(Token.DEFAULT);\n\t\t// Scanner::Location default_loc = scanner() -> location();\n\n\t\t// ZonePtrList <const AstRawString> localNames(1, zone());\n\t\tconst localNames: string[] = [];\n\t\tlet result: ExpressionNode;\n\t\tswitch (this.peek().token) {\n\t\t\tcase Token.FUNCTION:\n\t\t\t\tresult = this.parseHoistableDeclaration(localNames, true);\n\t\t\t\tbreak;\n\n\t\t\tcase Token.CLASS:\n\t\t\t\tthis.consume(Token.CLASS);\n\t\t\t\tresult = this.parseClassDeclaration(localNames, true);\n\t\t\t\tbreak;\n\n\t\t\tcase Token.ASYNC:\n\t\t\t\tif (this.peekAhead().isType(Token.FUNCTION) && !this.scanner.hasLineTerminatorBeforeNext()) {\n\t\t\t\t\tthis.consume(Token.ASYNC);\n\t\t\t\t\tresult = this.parseHoistableDeclaration(localNames, true);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\tdefault: {\n\t\t\t\t// int pos = position();\n\t\t\t\t// AcceptINScope scope(this, true);\n\t\t\t\tthis.setAcceptIN(true);\n\t\t\t\tresult = this.parseAssignmentExpression();\n\t\t\t\t// SetFunctionName(value, ast_value_factory() -> default_string());\n\n\t\t\t\t// const AstRawString* local_name = ast_value_factory() -> dot_default_string();\n\t\t\t\t// localNames.Add(local_name, zone());\n\n\t\t\t\t// It's fine to declare this as VariableMode::kConst because the user has\n\t\t\t\t// no way of writing to it.\n\t\t\t\t// VariableProxy * proxy = DeclareBoundVariable(local_name, VariableMode:: kConst, pos);\n\t\t\t\t// proxy ->var() -> set_initializer_position(position());\n\n\t\t\t\t// Assignment * assignment = factory() -> NewAssignment(Token.INIT, proxy, value, kNoSourcePosition);\n\t\t\t\t// result = IgnoreCompletion( factory() -> NewExpressionStatement(assignment, kNoSourcePosition));\n\n\t\t\t\tthis.expectSemicolon();\n\t\t\t\tthis.restoreAcceptIN();\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t// if (!result) {\n\t\t// \tDCHECK_EQ(localNames.length(), 1);\n\t\t// \tmodule() -> AddExport(localNames.first(), ast_value_factory() -> default_string(), default_loc, zone());\n\t\t// }\n\n\t\treturn new ExportDefaultDeclaration(result);\n\t}\n\tprotected parseExportStar(): ExpressionNode | undefined {\n\t\tthis.consume(Token.MUL);\n\n\t\tif (!this.peekContextualKeyword('as')) {\n\t\t\t// 'export' '*' 'from' ModuleSpecifier ';'\n\t\t\t// Scanner::Location loc = scanner() -> location();\n\t\t\tthis.expectContextualKeyword('from');\n\t\t\t// Scanner::Location specifier_loc = scanner() -> peek_location();\n\t\t\tconst moduleSpecifier = this.parseModuleSpecifier();\n\t\t\tconst importAssertions = this.parseImportAssertClause();\n\t\t\tthis.expectSemicolon();\n\t\t\t// module() -> AddStarExport(module_specifier, import_assertions, loc,specifier_loc, zone());\n\t\t\treturn new ExportAllDeclaration(moduleSpecifier, undefined, importAssertions);\n\t\t}\n\n\t\t// 'export' '*' 'as' IdentifierName 'from' ModuleSpecifier ';'\n\t\t//\n\t\t// Desugaring:\n\t\t// export * as x from \"...\";\n\t\t// ~>\n\t\t// import * as .x from \"...\"; export {.x as x};\n\t\t//\n\t\t// Note that the desugared internal namespace export name (.x above) will\n\t\t// never conflict with a string literal export name, as literal string export\n\t\t// names in local name positions (i.e. left of 'as' or in a clause without\n\t\t// 'as') are disallowed without a following 'from' clause.\n\n\t\tthis.expectContextualKeyword('as');\n\t\tconst exportName = this.parseExportSpecifierName();\n\t\t// Scanner::Location export_name_loc = scanner() -> location();\n\t\t// const localName = this.nextInternalNamespaceExportName();\n\t\t// Scanner::Location local_name_loc = Scanner:: Location:: invalid();\n\t\t// DeclareUnboundVariable(local_name, VariableMode:: kConst, kCreatedInitialized,pos);\n\n\t\tthis.expectContextualKeyword('from');\n\t\tconst moduleSpecifier = this.parseModuleSpecifier();\n\t\tconst importAssertions = this.parseImportAssertClause();\n\t\tthis.expectSemicolon();\n\n\t\t// const specifiers = [new ExportSpecifier(exportName as Identifier, exportName as Identifier)];\n\n\t\t// module() -> AddStarImport(local_name, module_specifier, import_assertions,local_name_loc, specifier_loc, zone());\n\t\t// module() -> AddExport(local_name, export_name, export_name_loc, zone());\n\t\treturn new ExportAllDeclaration(moduleSpecifier, exportName as Identifier, importAssertions);\n\t}\n}\n"]}
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../../src/expressions/v8/parser.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ExpressionNode } from '../api/expression.js';\nimport type { NodeFactory } from './node.js';\nimport {\n\tAccessorProperty,\n\tClass,\n\tClassBody,\n\tClassDeclaration,\n\tClassExpression,\n\tMethodDefinition,\n\tPropertyDefinition,\n\tStaticBlock\n} from '../api/class/class.js';\nimport { FunctionExpression } from '../api/definition/function.js';\nimport { Identifier, Literal } from '../api/definition/values.js';\nimport { ImportAttribute, ModuleSpecifier } from '../api/module/common.js';\nimport { ExportDefaultDeclaration, ExportSpecifier } from '../api/module/export.js';\nimport { ImportSpecifier } from '../api/module/import.js';\nimport { Program } from '../api/program.js';\nimport {\n\tClassInfo,\n\tClassLiteralProperty,\n\tClassLiteralPropertyKind,\n\tclassPropertyKindFor,\n\tcreateClassInfo,\n\tFunctionKind,\n\tFunctionSyntaxKind,\n\tisAccessor,\n\tParseFunctionFlag,\n\tPropertyKind,\n\tPropertyKindInfo,\n\tPropertyPosition,\n\tVariableDeclarationContext\n} from './enums.js';\nimport { InlineParserOptions, JavaScriptInlineParser, PositionMark } from './inline.js';\nimport { TokenStream } from './stream.js';\nimport { Token, TokenExpression } from './token.js';\n\nimport { WithStatement } from '../api/statement/control/with.js';\nimport { ExpressionNodeFactory, ExpressionNodeSourcePosition } from './factory.js';\nimport { isStrict, LanguageMode } from './language.js';\n\nexport type ParserOptions = { mode?: LanguageMode, factory?: NodeFactory, addLocation?: boolean };\n\nexport class JavaScriptParser extends JavaScriptInlineParser {\n\t/**\n\t * parser js with\n\t * @param source \n\t * @returns \n\t */\n\tstatic parse(source: string | TokenExpression[] | TokenStream, { mode, factory, addLocation }: ParserOptions = {}): Program {\n\t\tmode ??= LanguageMode.Strict;\n\t\tconst stream = (typeof source === 'string') || Array.isArray(source)\n\t\t\t? TokenStream.getTokenStream(source, mode) : source;\n\t\tif (factory == undefined) {\n\t\t\tconst sourcePositionFactory = addLocation && typeof source === 'string' ? new ExpressionNodeSourcePosition(source) : undefined;\n\t\t\tfactory = new ExpressionNodeFactory(sourcePositionFactory);\n\t\t}\n\t\tconst parser = new JavaScriptParser(stream, factory, false);\n\t\treturn parser.scan();\n\t}\n\n\t/**\n\t * parse inline code like that used in html 2 or 1 way binding\n\t */\n\tstatic parseScript<T extends ExpressionNode>(source: string | TokenExpression[] | TokenStream, options?: InlineParserOptions): T {\n\t\treturn JavaScriptInlineParser.parse(source, options) as T;\n\t}\n\n\toverride scan(): Program {\n\t\tconst range = this.createStartPosition();\n\t\tconst isModule = isStrict(this.languageMode);\n\t\tif (isModule) {\n\t\t\tthis.setFunctionKind(FunctionKind.Module);\n\t\t}\n\t\tconst body = isModule ? this.parseModuleItemList() : this.parseStatementList(Token.EOS);\n\t\tthis.updateRangeEnd(range);\n\t\treturn this.factory.createProgram(isModule ? 'module' : 'script', body, range);\n\t}\n\tprotected override parseNewTargetExpression(start?: PositionMark): ExpressionNode {\n\t\tthis.consume(Token.PERIOD);\n\t\tconst target: ExpressionNode = this.parsePropertyOrPrivatePropertyName();\n\t\tif (target.toString() !== 'target') {\n\t\t\tthrow new Error(this.errorMessage(`Expression (new.${target.toString()}) not supported.`));\n\t\t}\n\t\treturn this.factory.createMetaProperty(\n\t\t\tthis.factory.createIdentifier('new', start?.range),\n\t\t\tthis.factory.createIdentifier('target', target.range),\n\t\t\tthis.createRange(start)\n\t\t);\n\t}\n\tprotected override parseClassExpression(): ClassExpression {\n\t\tthis.consume(Token.CLASS);\n\t\tlet name: ExpressionNode | undefined;\n\t\tlet isStrictReserved = false;\n\t\tif (this.peekAnyIdentifier()) {\n\t\t\tname = this.parseAndClassifyIdentifier(this.next());\n\t\t\tisStrictReserved = Token.isStrictReservedWord(this.current().token);\n\t\t}\n\t\tconst classLiteral = this.parseClassLiteral(name, isStrictReserved);\n\t\treturn this.factory.createClassExpression(classLiteral.getBody(), classLiteral.getDecorators(), classLiteral.getId()!, classLiteral.getSuperClass());\n\t}\n\tprotected override parseClassDeclaration(names: string[] | undefined, defaultExport: boolean, start: PositionMark): ClassDeclaration {\n\t\t// ClassDeclaration ::\n\t\t// 'class' Identifier ('extends' LeftHandExpression)? '{' ClassBody '}'\n\t\t// 'class' ('extends' LeftHandExpression)? '{' ClassBody '}'\n\t\t//\n\t\t// The anonymous form is allowed iff [default_export] is true.\n\t\t//\n\t\t// 'class' is expected to be consumed by the caller.\n\t\t//\n\t\t// A ClassDeclaration\n\t\t//\n\t\t// class C { ... }\n\t\t//\n\t\t// has the same semantics as:\n\t\t//\n\t\t// let C = class C { ... };\n\t\t//\n\t\t// so rewrite it as such.\n\n\t\tconst nextToken = this.peek().token;\n\t\tconst isStrictReserved = Token.isStrictReservedWord(nextToken);\n\t\tlet name: ExpressionNode | undefined;\n\t\tlet variableName: string | undefined;\n\t\tif (defaultExport && (nextToken == Token.EXTENDS || nextToken == Token.LBRACE)) {\n\t\t\tname = new Literal('default');\n\t\t\tvariableName = '.default';\n\t\t} else {\n\t\t\tconst identifier = this.parseIdentifier();\n\t\t\tvariableName = identifier.getName() as string;\n\t\t\tname = identifier;\n\t\t}\n\t\tconst classLiteral = this.parseClassLiteral(name, isStrictReserved);\n\t\tconst range = this.createRange(start);\n\t\treturn this.factory.createClassDeclaration(\n\t\t\tclassLiteral.getBody(),\n\t\t\tclassLiteral.getDecorators(),\n\t\t\tclassLiteral.getId()!,\n\t\t\tclassLiteral.getSuperClass(),\n\t\t\trange\n\t\t);\n\t}\n\tprotected override parseClassLiteral(name: ExpressionNode | undefined, nameIsStrictReserved: boolean): Class {\n\t\tconst isAnonymous = !!!name;\n\n\t\t// All parts of a ClassDeclaration and ClassExpression are strict code.\n\t\tif (!isAnonymous) {\n\t\t\tif (nameIsStrictReserved) {\n\t\t\t\tthrow new Error(this.errorMessage(`Unexpected Strict Reserved class name`));\n\t\t\t}\n\t\t\tif (this.isEvalOrArguments(name!)) {\n\t\t\t\tthrow new Error(this.errorMessage(`Strict Eval Arguments not allowed for class name`));\n\t\t\t}\n\t\t}\n\n\t\tconst classInfo: ClassInfo = createClassInfo();\n\t\tclassInfo.isAnonymous = isAnonymous;\n\n\t\tif (this.check(Token.EXTENDS)) {\n\t\t\tclassInfo.extends = this.parseLeftHandSideExpression();\n\t\t}\n\n\t\tconst bodyStart = this.expect(Token.LBRACE);\n\n\t\tconst hasExtends = !!classInfo.extends;\n\n\t\twhile (this.peek().isNotType(Token.RBRACE)) {\n\t\t\tif (this.check(Token.SEMICOLON)) continue;\n\n\t\t\t// Either we're parsing a `static { }` initialization block or a property.\n\t\t\tif (this.peek().isType(Token.STATIC) && this.peekAhead().isType(Token.LBRACE)) {\n\t\t\t\tconst staticBlock = this.parseClassStaticBlock(classInfo);\n\t\t\t\tclassInfo.staticElements.push(staticBlock);\n\t\t\t\tclassInfo.hasStaticBlocks = true;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// FuncNameInferrerState fni_state(& fni_);\n\t\t\t// If we haven't seen the constructor yet, it potentially is the next\n\t\t\t// property.\n\t\t\tlet isConstructor = !classInfo.hasSeenConstructor;\n\t\t\tconst propInfo = new PropertyKindInfo();\n\t\t\tpropInfo.position = PropertyPosition.ClassLiteral;\n\n\t\t\tconst property = this.parseClassPropertyDefinition(classInfo, propInfo, hasExtends);\n\n\t\t\t// if (has_error()) return impl() . FailureExpression();\n\n\t\t\tconst propertyKind = classPropertyKindFor(propInfo.kind);\n\t\t\tif (!classInfo.hasStaticComputedNames && propInfo.isStatic && propInfo.isComputedName) {\n\t\t\t\tclassInfo.hasStaticComputedNames = true;\n\t\t\t}\n\t\t\tisConstructor &&= classInfo.hasSeenConstructor;\n\n\t\t\tconst isField = propertyKind == ClassLiteralPropertyKind.FIELD;\n\n\t\t\tif (propInfo.isPrivate) {\n\t\t\t\tif (isConstructor) {\n\t\t\t\t\tthrow new Error(this.errorMessage('private constructor is not allowed'));\n\t\t\t\t}\n\t\t\t\tclassInfo.requiresBrand ||= (!isField && !propInfo.isStatic);\n\t\t\t\tconst isMethod = propertyKind == ClassLiteralPropertyKind.METHOD;\n\t\t\t\tclassInfo.hasPrivateMethods ||= isMethod;\n\t\t\t\tclassInfo.hasStaticPrivateMethods ||= isMethod && propInfo.isStatic;\n\t\t\t\tthis.declarePrivateClassMember(propInfo.name, property as MethodDefinition | PropertyDefinition, propertyKind, propInfo.isStatic, classInfo);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (isField) {\n\t\t\t\tif (propInfo.isComputedName) {\n\t\t\t\t\tclassInfo.computedFieldCount++;\n\t\t\t\t}\n\t\t\t\tthis.declarePublicClassField(property as PropertyDefinition, propInfo.isStatic, propInfo.isComputedName, classInfo);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tthis.declarePublicClassMethod(name, property as MethodDefinition, isConstructor, classInfo);\n\t\t}\n\n\t\tconst bodyEnd = this.expect(Token.RBRACE);\n\t\tconst classBody = this.rewriteClassLiteral(classInfo, name, [bodyStart.range[0], bodyEnd.range[1]]);\n\t\treturn new Class(classBody, [], name as Identifier, classInfo.extends);\n\t}\n\tprotected declarePublicClassMethod(name: ExpressionNode | undefined, property: MethodDefinition, isConstructor: boolean, classInfo: ClassInfo): void {\n\t\t// throw new Error('Method not implemented.');\n\t\tif (isConstructor) {\n\t\t\tif (classInfo.constructor) {\n\t\t\t\tthrow new SyntaxError(this.errorMessage('A class may only have one constructor.'));\n\t\t\t}\n\t\t\tclassInfo.constructor = property;\n\t\t\t// set the class name as the constructor name\n\t\t\tReflect.set(classInfo.constructor, 'id', name);\n\t\t\treturn;\n\t\t}\n\t\tclassInfo.publicMembers.push(property);\n\t}\n\tprotected declarePublicClassField(property: PropertyDefinition, isStatic: boolean, isComputedName: boolean, classInfo: ClassInfo) {\n\t\tif (isStatic) {\n\t\t\tclassInfo.staticElements.push(property);\n\t\t} else {\n\t\t\tclassInfo.instanceFields.push(property);\n\t\t}\n\n\t\t// if (isComputedName) {\n\t\t// \tclassInfo.publicMembers.push(property);\n\t\t// }\n\n\t}\n\tprotected declarePrivateClassMember(propertyName: string, property: MethodDefinition | PropertyDefinition, kind: ClassLiteralPropertyKind, isStatic: boolean, classInfo: ClassInfo) {\n\t\tclassInfo.privateMembers.push(property);\n\t}\n\t// protected createPrivateNameVariable(mode: VariableMode, staticFlag: StaticFlag, propertyName: string) {\n\t// \tthrow new Error('Method not implemented.');\n\t// }\n\tprotected parseClassPropertyDefinition(classInfo: ClassInfo, propInfo: PropertyKindInfo, hasExtends: boolean) {\n\t\tif (!classInfo) {\n\t\t\tthrow new Error(this.errorMessage('class info is undefined'));\n\t\t}\n\t\tif (propInfo.position !== PropertyPosition.ClassLiteral) {\n\t\t\tthrow new Error(this.errorMessage('expected property position ClassLiteral'));\n\t\t}\n\n\t\tconst nameToken = this.peek();\n\t\tlet nameExpression: ExpressionNode;\n\t\tif (nameToken.isType(Token.STATIC)) {\n\t\t\tthis.consume(Token.STATIC);\n\t\t\tif (this.peek().isType(Token.LPAREN)) {\n\t\t\t\tpropInfo.kind = PropertyKind.Method;\n\t\t\t\tnameExpression = this.parseIdentifier();\n\t\t\t\tpropInfo.name = (nameExpression as Identifier).getName() as string;\n\t\t\t} else if (this.peek().isType(Token.ASSIGN)\n\t\t\t\t|| this.peek().isType(Token.SEMICOLON)\n\t\t\t\t|| this.peek().isType(Token.RBRACK)) {\n\t\t\t\tnameExpression = this.parseIdentifier();\n\t\t\t\tpropInfo.name = (nameExpression as Identifier).getName() as string;\n\t\t\t} else {\n\t\t\t\tpropInfo.isStatic = true;\n\t\t\t\tnameExpression = this.parseProperty(propInfo);\n\t\t\t}\n\t\t} else {\n\t\t\tnameExpression = this.parseProperty(propInfo);\n\t\t}\n\n\t\tswitch (propInfo.kind) {\n\t\t\tcase PropertyKind.Assign:\n\t\t\tcase PropertyKind.ClassField:\n\t\t\tcase PropertyKind.ShorthandOrClassField:\n\t\t\tcase PropertyKind.NotSet: {\n\t\t\t\t// This case is a name followed by a\n\t\t\t\t// name or other property. Here we have\n\t\t\t\t// to assume that's an uninitialized\n\t\t\t\t// field followed by a line break\n\t\t\t\t// followed by a property, with ASI\n\t\t\t\t// adding the semicolon. If not, there\n\t\t\t\t// will be a syntax error after parsing\n\t\t\t\t// the first name as an uninitialized\n\t\t\t\t// field.\n\t\t\t\tpropInfo.kind = PropertyKind.ClassField;\n\n\t\t\t\t// if (!propInfo.isComputedName) {\n\t\t\t\t// \tthis.checkClassFieldName(propInfo.name, propInfo.isStatic);\n\t\t\t\t// }\n\n\t\t\t\tconst initializer = this.parseMemberInitializer(classInfo, propInfo.isStatic);\n\t\t\t\tthis.expectSemicolon();\n\n\t\t\t\tconst result: ExpressionNode = this.newClassLiteralProperty(\n\t\t\t\t\tnameExpression,\n\t\t\t\t\tinitializer,\n\t\t\t\t\tClassLiteralPropertyKind.FIELD,\n\t\t\t\t\tpropInfo.isStatic,\n\t\t\t\t\tpropInfo.isComputedName,\n\t\t\t\t\tpropInfo.isPrivate,\n\t\t\t\t\tpropInfo.rangeStart\n\t\t\t\t);\n\t\t\t\tthis.setFunctionNameFromPropertyName(result, propInfo.name);\n\t\t\t\treturn result;\n\t\t\t}\n\t\t\tcase PropertyKind.Method: {\n\t\t\t\t// MethodDefinition\n\t\t\t\t// PropertyName '(' StrictFormalParameters ')' '{' FunctionBody '}'\n\t\t\t\t// '*' PropertyName '(' StrictFormalParameters ')' '{' FunctionBody '}'\n\t\t\t\t// async PropertyName '(' StrictFormalParameters ')'\n\t\t\t\t// '{' FunctionBody '}'\n\t\t\t\t// async '*' PropertyName '(' StrictFormalParameters ')'\n\t\t\t\t// '{' FunctionBody '}'\n\n\t\t\t\tif (!propInfo.isComputedName) {\n\t\t\t\t\tthis.checkClassMethodName(propInfo, classInfo);\n\t\t\t\t}\n\n\t\t\t\tlet kind: FunctionKind = this.methodKindFor(propInfo.isStatic, propInfo.funcFlag);\n\n\t\t\t\tif (!propInfo.isStatic && propInfo.name.toString() === 'constructor') {\n\t\t\t\t\tclassInfo.hasSeenConstructor = true;\n\t\t\t\t\tkind = hasExtends ? FunctionKind.DerivedConstructor : FunctionKind.BaseConstructor;\n\t\t\t\t}\n\n\t\t\t\tconst value = this.parseFunctionLiteral(kind, FunctionSyntaxKind.AccessorOrMethod, nameExpression as Identifier, propInfo.rangeStart);\n\n\t\t\t\tconst result = this.newClassLiteralProperty(\n\t\t\t\t\tnameExpression, value, ClassLiteralProperty.Kind.METHOD,\n\t\t\t\t\tpropInfo.isStatic, propInfo.isComputedName,\n\t\t\t\t\tpropInfo.isPrivate,\n\t\t\t\t\tpropInfo.rangeStart\n\t\t\t\t);\n\t\t\t\tthis.setFunctionNameFromPropertyName(result, propInfo.name);\n\t\t\t\treturn result;\n\t\t\t}\n\n\t\t\tcase PropertyKind.AccessorGetter:\n\t\t\tcase PropertyKind.AccessorSetter: {\n\t\t\t\tif (propInfo.funcFlag !== ParseFunctionFlag.IsNormal) {\n\t\t\t\t\tthrow new Error(this.errorMessage('accessor is not normal function'));\n\t\t\t\t}\n\t\t\t\tconst isGet = propInfo.kind == PropertyKind.AccessorGetter;\n\n\t\t\t\tif (!propInfo.isComputedName) {\n\t\t\t\t\tthis.checkClassMethodName(propInfo, classInfo);\n\t\t\t\t\t// Make sure the name expression is a string since we need a Name for\n\t\t\t\t\t// Runtime_DefineAccessorPropertyUnchecked and since we can determine\n\t\t\t\t\t// this statically we can skip the extra runtime check.\n\t\t\t\t\tnameExpression = new Literal<string>(propInfo.name);\n\t\t\t\t}\n\n\t\t\t\tlet kind: FunctionKind;\n\t\t\t\tif (propInfo.isStatic) {\n\t\t\t\t\tkind = isGet ? FunctionKind.StaticGetterFunction\n\t\t\t\t\t\t: FunctionKind.StaticSetterFunction;\n\t\t\t\t} else {\n\t\t\t\t\tkind = isGet ? FunctionKind.GetterFunction\n\t\t\t\t\t\t: FunctionKind.SetterFunction;\n\t\t\t\t}\n\n\t\t\t\tconst value = this.parseFunctionLiteral(kind, FunctionSyntaxKind.AccessorOrMethod, nameExpression as Identifier, propInfo.rangeStart);\n\n\t\t\t\tconst propertyKind: ClassLiteralPropertyKind = isGet ? ClassLiteralProperty.Kind.GETTER : ClassLiteralProperty.Kind.SETTER;\n\t\t\t\tconst result = this.newClassLiteralProperty(\n\t\t\t\t\tnameExpression, value, propertyKind,\n\t\t\t\t\tpropInfo.isStatic, propInfo.isComputedName,\n\t\t\t\t\tpropInfo.isPrivate,\n\t\t\t\t\tpropInfo.rangeStart\n\t\t\t\t);\n\t\t\t\tconst prefix = isGet ? 'get ' : 'set ';\n\t\t\t\tthis.setFunctionNameFromPropertyName(result, propInfo.name, prefix);\n\t\t\t\treturn result;\n\t\t\t}\n\t\t\tcase PropertyKind.Value:\n\t\t\tcase PropertyKind.Shorthand:\n\t\t\tcase PropertyKind.Spread:\n\t\t\t\t// throw new Error(this.errorMessage('Report Unexpected Token'));\n\t\t\t\treturn this.factory.createNull(propInfo.rangeStart?.range);\n\t\t}\n\t\tthrow new Error(this.errorMessage('UNREACHABLE'));\n\t}\n\tprotected checkClassMethodName(propInfo: PropertyKindInfo, classInfo: ClassInfo) {\n\t\tif (!(propInfo.kind == PropertyKind.Method || isAccessor(propInfo.kind))) {\n\t\t\tthrow new Error(this.errorMessage('not kind of method or setter or getter'));\n\t\t}\n\t\tif (propInfo.isPrivate && propInfo.name.toString() === 'constructor') {\n\t\t\tthrow new Error(this.errorMessage('constructor is private'));\n\t\t} else if (propInfo.isStatic && propInfo.name.toString() === 'prototype') {\n\t\t\tthrow new Error(this.errorMessage('static prototype'));\n\t\t} else if (propInfo.name.toString() === 'constructor') {\n\t\t\tif (propInfo.funcFlag !== ParseFunctionFlag.IsNormal || isAccessor(propInfo.kind)) {\n\t\t\t\tif (propInfo.funcFlag === ParseFunctionFlag.IsGenerator) {\n\t\t\t\t\tthrow new Error(this.errorMessage('constructor is generator'));\n\t\t\t\t} else if (propInfo.funcFlag === ParseFunctionFlag.IsAsync) {\n\t\t\t\t\tthrow new Error(this.errorMessage('constructor is async'));\n\t\t\t\t}\n\t\t\t\tif (classInfo.hasSeenConstructor) {\n\t\t\t\t\tthrow new Error(this.errorMessage('duplicate constructor'));\n\t\t\t\t}\n\t\t\t}\n\t\t\tclassInfo.hasSeenConstructor = true;\n\t\t}\n\t}\n\tprotected parseClassStaticBlock(classInfo: ClassInfo): StaticBlock {\n\t\tthis.consume(Token.STATIC);\n\t\t// Each static block has its own var and lexical scope, so make a new var\n\t\t// block scope instead of using the synthetic members initializer function\n\t\t// scope.\n\t\tthis.setStatue(true, FunctionKind.ClassStaticInitializerFunction);\n\t\tconst block = this.parseBlock();\n\t\tthis.restoreStatue();\n\t\tclassInfo.hasStaticElements = true;\n\t\treturn this.factory.createClassStaticBlockDeclaration(block.getBody(), block.range);\n\t}\n\tprotected newClassLiteralProperty(\n\t\tnameExpression: ExpressionNode,\n\t\tinitializer: ExpressionNode | undefined,\n\t\tkind: ClassLiteralPropertyKind,\n\t\tisStatic: boolean,\n\t\tisComputedName: boolean,\n\t\tisPrivate: boolean,\n\t\tstart: PositionMark) {\n\t\tconst range = this.createRange(start);\n\t\tswitch (kind) {\n\t\t\tcase ClassLiteralPropertyKind.METHOD:\n\t\t\t\tif (nameExpression.toString() === 'constructor') {\n\t\t\t\t\treturn this.factory.createMethodSignature('constructor', nameExpression, initializer as FunctionExpression, [], isComputedName, isStatic, range);\n\t\t\t\t}\n\t\t\t\treturn this.factory.createMethodSignature('method', nameExpression, initializer as FunctionExpression, [], isComputedName, isStatic, range);\n\t\t\tcase ClassLiteralPropertyKind.GETTER:\n\t\t\t\treturn this.factory.createMethodSignature('get', nameExpression, initializer as FunctionExpression, [], isComputedName, isStatic, range);\n\t\t\tcase ClassLiteralPropertyKind.SETTER:\n\t\t\t\treturn this.factory.createMethodSignature('set', nameExpression, initializer as FunctionExpression, [], isComputedName, isStatic, range);\n\t\t\tcase ClassLiteralPropertyKind.FIELD:\n\t\t\t\treturn this.factory.createPropertySignature(nameExpression, [], isComputedName, isStatic, initializer, range);\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t\tthrow new Error(this.errorMessage('UNREACHABLE'));\n\t}\n\tprotected parseMemberInitializer(classInfo: ClassInfo, isStatic: boolean): ExpressionNode | undefined {\n\t\tconst kind = isStatic\n\t\t\t? FunctionKind.ClassStaticInitializerFunction\n\t\t\t: FunctionKind.ClassMembersInitializerFunction;\n\t\tlet initializer: ExpressionNode | undefined = undefined;\n\t\tif (this.check(Token.ASSIGN)) {\n\t\t\tthis.setStatue(true, kind);\n\t\t\tinitializer = this.parseAssignmentExpression();\n\t\t\tthis.restoreStatue();\n\t\t}\n\t\tif (isStatic) {\n\t\t\tclassInfo.hasStaticElements = true;\n\t\t} else {\n\t\t\tclassInfo.hasInstanceMembers = true;\n\t\t}\n\t\treturn initializer;\n\t}\n\tprotected setFunctionNameFromPropertyName(property: ExpressionNode, name: string, prefix?: string): void {\n\t\t// TODO: no need for this now\n\t\t// check later when needed\n\t\t// the ClassExpression* handle this\n\t}\n\tprotected parseSuperExpression(): ExpressionNode {\n\t\tconst superToken = this.consume(Token.SUPER);\n\t\tif (Token.isProperty(this.peek().token)) {\n\t\t\tif (this.peek().isType(Token.PERIOD) && this.peekAhead().isType(Token.PRIVATE_NAME)) {\n\t\t\t\tthis.consume(Token.PERIOD);\n\t\t\t\tthis.consume(Token.PRIVATE_NAME);\n\t\t\t\tthrow new Error(this.errorMessage('Unexpected Private Field'));\n\t\t\t}\n\t\t\tif (this.peek().isType(Token.QUESTION_PERIOD)) {\n\t\t\t\tthis.consume(Token.QUESTION_PERIOD);\n\t\t\t\tthrow new Error(this.errorMessage('Optional Chaining No Super'));\n\t\t\t}\n\t\t\treturn this.factory.createSuper(superToken.range);\n\t\t}\n\t\tthrow new Error(this.errorMessage('Unexpected Super'));\n\t}\n\tprotected rewriteClassLiteral(classInfo: ClassInfo, name?: ExpressionNode, range?: [number, number]): ClassBody {\n\t\tconst body: (MethodDefinition | PropertyDefinition | AccessorProperty | StaticBlock)[] = [];\n\t\tif (classInfo.hasSeenConstructor) {\n\t\t\tbody.push(classInfo.constructor as MethodDefinition);\n\t\t}\n\t\tbody.push(...classInfo.staticElements);\n\t\tbody.push(...classInfo.instanceFields);\n\t\tbody.push(...classInfo.publicMembers);\n\t\tbody.push(...classInfo.privateMembers);\n\t\treturn this.factory.createClassBody(body, range);\n\t}\n\tprotected parseModuleItemList(): ExpressionNode[] {\n\t\t// ecma262/#prod-Module\n\t\t// Module :\n\t\t// ModuleBody?\n\t\t//\n\t\t// ecma262/#prod-ModuleItemList\n\t\t// ModuleBody :\n\t\t// ModuleItem*\n\t\tconst body: ExpressionNode[] = [];\n\t\twhile (this.peek().isNotType(Token.EOS)) {\n\t\t\tconst stat = this.parseModuleItem();\n\t\t\tif (!stat) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (this.factory.isEmptyStatement(stat)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tbody.push(stat);\n\t\t}\n\t\treturn body;\n\t}\n\tprotected parseModuleItem(): ExpressionNode | undefined {\n\t\t// ecma262/#prod-ModuleItem\n\t\t// ModuleItem :\n\t\t// ImportDeclaration\n\t\t// ExportDeclaration\n\t\t// StatementListItem\n\n\t\tconst next = this.peek();\n\t\tif (next.isType(Token.EXPORT)) {\n\t\t\treturn this.parseExportDeclaration();\n\t\t}\n\t\tif (next.isType(Token.IMPORT)) {\n\t\t\t// We must be careful not to parse a dynamic import expression as an import\n\t\t\t// declaration. Same for import.meta expressions.\n\t\t\tconst peekAhead = this.peekAhead();\n\t\t\tif (peekAhead.isNotType(Token.LPAREN) && peekAhead.isNotType(Token.PERIOD)) {\n\t\t\t\treturn this.parseImportDeclaration();\n\t\t\t\t// return factory() -> EmptyStatement();\n\t\t\t}\n\t\t}\n\n\t\treturn this.parseStatementListItem();\n\t}\n\tprotected parseExportDeclaration(): ExpressionNode | undefined {\n\t\t// ExportDeclaration:\n\t\t// 'export' '*' 'from' ModuleSpecifier ';'\n\t\t// 'export' '*' 'from' ModuleSpecifier [no LineTerminator here]\n\t\t// AssertClause ';'\n\t\t// 'export' '*' 'as' IdentifierName 'from' ModuleSpecifier ';'\n\t\t// 'export' '*' 'as' IdentifierName 'from' ModuleSpecifier\n\t\t// [no LineTerminator here] AssertClause ';'\n\t\t// 'export' '*' 'as' ModuleExportName 'from' ModuleSpecifier ';'\n\t\t// 'export' '*' 'as' ModuleExportName 'from' ModuleSpecifier ';'\n\t\t// [no LineTerminator here] AssertClause ';'\n\t\t// 'export' ExportClause ('from' ModuleSpecifier)? ';'\n\t\t// 'export' ExportClause ('from' ModuleSpecifier [no LineTerminator here]\n\t\t// AssertClause)? ';'\n\t\t// 'export' VariableStatement\n\t\t// 'export' Declaration\n\t\t// 'export' 'default' ... (handled in ParseExportDefault)\n\t\t//\n\t\t// ModuleExportName :\n\t\t// StringLiteral\n\n\t\tconst start = this.expect(Token.EXPORT);\n\t\tlet result: ExpressionNode | undefined;\n\t\tconst names: string[] = [];\n\n\t\t// Statement * result = nullptr;\n\t\t// ZonePtrList <const AstRawString> names(1, zone());\n\t\t// Scanner::Location loc = scanner() -> peek_location();\n\t\tswitch (this.peek().token) {\n\t\t\tcase Token.DEFAULT:\n\t\t\t\treturn this.parseExportDefault(start);\n\n\t\t\tcase Token.MUL:\n\t\t\t\treturn this.parseExportStar(start);\n\n\t\t\tcase Token.LBRACE: {\n\t\t\t\t// There are two cases here:\n\t\t\t\t//\n\t\t\t\t// 'export' ExportClause ';'\n\t\t\t\t// and\n\t\t\t\t// 'export' ExportClause FromClause ';'\n\t\t\t\t//\n\t\t\t\t// In the first case, the exported identifiers in ExportClause must\n\t\t\t\t// not be reserved words, while in the latter they may be. We\n\t\t\t\t// pass in a location that gets filled with the first reserved word\n\t\t\t\t// encountered, and then throw a SyntaxError if we are in the\n\t\t\t\t// non-FromClause case.\n\n\t\t\t\t// Scanner::Location reserved_loc = Scanner:: Location:: invalid();\n\t\t\t\t// Scanner::Location string_literal_local_name_loc =\n\t\t\t\t// Scanner:: Location:: invalid();\n\t\t\t\t// ZoneChunkList < ExportClauseData >* export_data =\n\t\t\t\t// ParseExportClause(& reserved_loc, & string_literal_local_name_loc);\n\n\t\t\t\tconst exportData = this.parseExportClause();\n\t\t\t\tlet moduleSpecifier: Literal<string> | undefined;\n\t\t\t\tlet importAssertions: ImportAttribute[] | undefined;\n\n\t\t\t\tif (this.checkContextualKeyword('from')) {\n\t\t\t\t\t// Scanner::Location specifier_loc = scanner() -> peek_location();\n\t\t\t\t\tmoduleSpecifier = this.parseModuleSpecifier();\n\t\t\t\t\timportAssertions = this.parseImportAssertClause();\n\t\t\t\t\tthis.expectSemicolon();\n\n\t\t\t\t\t// if (exportData.isEmpty()) {\n\t\t\t\t\t// \t// module() -> AddEmptyImport(module_specifier, import_assertions, specifier_loc, zone());\n\t\t\t\t\t// } else {\n\t\t\t\t\t// \t// for (const ExportClauseData& data : * export_data) {\n\t\t\t\t\t// \t// \tmodule() -> AddExport(data.local_name, data.export_name,\n\t\t\t\t\t// \t// \t\tmodule_specifier, import_assertions,\n\t\t\t\t\t// \t// \t\tdata.location, specifier_loc, zone());\n\t\t\t\t\t// \t// }\n\t\t\t\t\t// }\n\t\t\t\t} else {\n\t\t\t\t\t// if (reserved_loc.IsValid()) {\n\t\t\t\t\t// \t// No FromClause, so reserved words are invalid in ExportClause.\n\t\t\t\t\t// \tReportMessageAt(reserved_loc, MessageTemplate:: kUnexpectedReserved);\n\t\t\t\t\t// \treturn nullptr;\n\t\t\t\t\t// } else if (string_literal_local_name_loc.IsValid()) {\n\t\t\t\t\t// \tReportMessageAt(string_literal_local_name_loc,\n\t\t\t\t\t// \t\tMessageTemplate:: kModuleExportNameWithoutFromClause);\n\t\t\t\t\t// \treturn nullptr;\n\t\t\t\t\t// }\n\n\t\t\t\t\tthis.expectSemicolon();\n\n\t\t\t\t\t// for (const ExportClauseData& data : * export_data) {\n\t\t\t\t\t// \tmodule() -> AddExport(data.local_name, data.export_name, data.location,\n\t\t\t\t\t// \t\tzone());\n\t\t\t\t\t// }\n\t\t\t\t}\n\t\t\t\treturn this.factory.createNamespaceExportDeclaration(exportData, undefined, moduleSpecifier, importAssertions, this.createRange(start));\n\t\t\t\t// return factory() -> EmptyStatement();\n\t\t\t}\n\n\t\t\tcase Token.FUNCTION: {\n\t\t\t\tconst declaration = this.parseFunctionDeclaration();\n\t\t\t\tconst identifier = declaration.getId()!;\n\t\t\t\tconst specifier = this.factory.createExportSpecifier(identifier, identifier, identifier.range);\n\t\t\t\tresult = this.factory.createNamespaceExportDeclaration([specifier], declaration, undefined, undefined, this.createRange(start));\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase Token.CLASS: {\n\t\t\t\tconst classToken = this.consume(Token.CLASS);\n\t\t\t\tconst declaration = this.parseClassDeclaration(names, false, classToken);\n\t\t\t\tconst identifier = declaration.getId()!;\n\t\t\t\tconst specifier = this.factory.createExportSpecifier(identifier, identifier, identifier.range);\n\t\t\t\tresult = this.factory.createNamespaceExportDeclaration([specifier], declaration, undefined, undefined, this.createRange(start));\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase Token.VAR:\n\t\t\tcase Token.LET:\n\t\t\tcase Token.CONST:\n\t\t\t\tconst declaration = this.parseVariableStatement(VariableDeclarationContext.StatementListItem, names);\n\t\t\t\tconst specifiers = declaration.getDeclarations()\n\t\t\t\t\t.map(node => this.factory.createExportSpecifier(node.getId() as Identifier, node.getId() as Identifier, node.getId().range));\n\t\t\t\tresult = this.factory.createNamespaceExportDeclaration(specifiers, declaration, undefined, undefined, this.createRange(start));\n\t\t\t\tbreak;\n\n\t\t\tcase Token.ASYNC:\n\t\t\t\tconst asyncToken = this.consume(Token.ASYNC);\n\t\t\t\tif (this.peek().isType(Token.FUNCTION) && !this.scanner.hasLineTerminatorBeforeNext()) {\n\t\t\t\t\tconst declaration = this.parseAsyncFunctionDeclaration(names, false, asyncToken);\n\t\t\t\t\tconst identifier = declaration.getId()!;\n\t\t\t\t\tconst specifier = this.factory.createExportSpecifier(identifier, identifier, identifier.range);\n\t\t\t\t\tresult = this.factory.createNamespaceExportDeclaration([specifier], declaration, undefined, undefined, this.createRange(start));\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\tdefault:\n\t\t\t\tthrow new SyntaxError(this.errorMessage('Unexpected Token'));\n\t\t}\n\t\t// loc.end_pos = scanner() -> location().end_pos;\n\n\t\t// SourceTextModuleDescriptor * descriptor = module();\n\t\t// for (const AstRawString* name : names) {\n\t\t// \tdescriptor -> AddExport(name, name, loc, zone());\n\t\t// }\n\n\t\treturn result;\n\t}\n\tprotected parseImportDeclaration(): ExpressionNode | undefined {\n\t\t// ImportDeclaration :\n\t\t// 'import' ImportClause 'from' ModuleSpecifier ';'\n\t\t// 'import' ModuleSpecifier ';'\n\t\t// 'import' ImportClause 'from' ModuleSpecifier [no LineTerminator here]\n\t\t// AssertClause ';'\n\t\t// 'import' ModuleSpecifier [no LineTerminator here] AssertClause';'\n\t\t//\n\t\t// ImportClause :\n\t\t// ImportedDefaultBinding\n\t\t// NameSpaceImport\n\t\t// NamedImports\n\t\t// ImportedDefaultBinding ',' NameSpaceImport\n\t\t// ImportedDefaultBinding ',' NamedImports\n\t\t//\n\t\t// NameSpaceImport :\n\t\t// '*' 'as' ImportedBinding\n\n\t\tconst start = this.expect(Token.IMPORT);\n\n\t\tconst tok = this.peek();\n\n\t\t// 'import' ModuleSpecifier ';'\n\t\tif (tok.isType(Token.STRING)) {\n\t\t\t// Scanner::Location specifier_loc = scanner() -> peek_location();\n\t\t\tconst moduleSpecifier = this.parseModuleSpecifier();\n\t\t\tconst importAssertions = this.parseImportAssertClause();\n\t\t\tthis.expectSemicolon();\n\n\t\t\t// module() -> AddEmptyImport(module_specifier, import_assertions, specifier_loc,zone());\n\t\t\treturn this.factory.createImportDeclaration(moduleSpecifier, undefined, importAssertions, this.createRange(start));\n\t\t}\n\n\t\t// Parse ImportedDefaultBinding if present.\n\t\tlet importDefaultBinding: Identifier | undefined;\n\t\t// Scanner::Location import_default_binding_loc;\n\t\tif (tok.isNotType(Token.MUL) && tok.isNotType(Token.LBRACE)) {\n\t\t\timportDefaultBinding = this.parseNonRestrictedIdentifier();\n\t\t\t// DeclareUnboundVariable(import_default_binding, VariableMode:: kConst,kNeedsInitialization, pos);\n\t\t}\n\n\t\t// Parse NameSpaceImport or NamedImports if present.\n\t\tlet moduleNamespaceBinding: Identifier | undefined;\n\t\tlet namedImports: ModuleSpecifier[] | undefined;\n\t\t// Scanner::Location module_namespace_binding_loc;\n\t\t// const ZonePtrList<const NamedImport >* named_imports = nullptr;\n\t\tif (importDefaultBinding == undefined || this.check(Token.COMMA)) {\n\t\t\tswitch (this.peek().token) {\n\t\t\t\tcase Token.MUL: {\n\t\t\t\t\tthis.consume(Token.MUL);\n\t\t\t\t\tthis.expectContextualKeyword('as');\n\t\t\t\t\tmoduleNamespaceBinding = this.parseNonRestrictedIdentifier();\n\t\t\t\t\t// ExpectContextualKeyword(ast_value_factory() -> as_string());\n\t\t\t\t\t// module_namespace_binding = ParseNonRestrictedIdentifier();\n\t\t\t\t\t// module_namespace_binding_loc = scanner() -> location();\n\t\t\t\t\t// DeclareUnboundVariable(module_namespace_binding, VariableMode:: kConst, kCreatedInitialized, pos);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tcase Token.LBRACE:\n\t\t\t\t\tnamedImports = this.parseNamedImports();\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new SyntaxError(this.errorMessage('Unexpected Token'));\n\t\t\t}\n\t\t}\n\t\tthis.expectContextualKeyword('from');\n\t\t// ExpectContextualKeyword(ast_value_factory() -> from_string());\n\t\t// Scanner::Location specifier_loc = scanner() -> peek_location();\n\t\tconst moduleSpecifier = this.parseModuleSpecifier();\n\t\tconst importAssertions = this.parseImportAssertClause();\n\t\tthis.expectSemicolon();\n\n\t\t// Now that we have all the information, we can make the appropriate\n\t\t// declarations.\n\n\t\t// TODO(neis): Would prefer to call DeclareVariable for each case below rather\n\t\t// than above and in ParseNamedImports, but then a possible error message\n\t\t// would point to the wrong location. Maybe have a DeclareAt version of\n\t\t// Declare that takes a location?\n\n\t\tconst specifiers: ModuleSpecifier[] = [];\n\t\tif (moduleNamespaceBinding) {\n\t\t\tspecifiers.push(this.factory.createImportNamespaceSpecifier(moduleNamespaceBinding, moduleNamespaceBinding.range));\n\t\t}\n\t\tif (importDefaultBinding) {\n\t\t\tspecifiers.push(this.factory.createImportDefaultSpecifier(importDefaultBinding, importDefaultBinding.range));\n\t\t}\n\t\tif (namedImports?.length) {\n\t\t\tspecifiers.push(...namedImports);\n\t\t}\n\t\treturn this.factory.createImportDeclaration(moduleSpecifier, specifiers.length ? specifiers : undefined, importAssertions, this.createRange(start));\n\t}\n\tprotected parseImportExpressions(): ExpressionNode {\n\t\tconst start = this.consume(Token.IMPORT);\n\t\tif (this.check(Token.PERIOD)) {\n\t\t\tconst peek = this.peek();\n\t\t\tthis.expectContextualKeyword('meta');\n\t\t\treturn this.factory.createMetaProperty(\n\t\t\t\tthis.factory.createIdentifier('import', start.range),\n\t\t\t\tthis.factory.createIdentifier('meta', peek.range),\n\t\t\t\tthis.createRange(start)\n\t\t\t);\n\t\t}\n\n\t\tif (this.peek().isNotType(Token.LPAREN)) {\n\t\t\tthrow new SyntaxError(this.errorMessage('Unexpected Token'));\n\t\t}\n\n\t\tthis.consume(Token.LPAREN);\n\t\tif (this.peek().isType(Token.RPAREN)) {\n\t\t\tthrow new SyntaxError(this.errorMessage('Import Missing Specifier'));\n\t\t}\n\t\tthis.setAcceptIN(true);\n\t\tconst specifier = this.parseAssignmentExpressionCoverGrammar();\n\n\t\tif (this.check(Token.COMMA)) {\n\t\t\tif (this.check(Token.RPAREN)) {\n\t\t\t\t// A trailing comma allowed after the specifier.\n\t\t\t\treturn this.factory.createImportExpression(specifier as Literal<string>, undefined, this.createRange(start));\n\t\t\t} else {\n\t\t\t\tconst importAssertions = this.parseAssignmentExpressionCoverGrammar();\n\t\t\t\tthis.check(Token.COMMA); // A trailing comma is allowed after the import\n\t\t\t\t// assertions.\n\t\t\t\tthis.expect(Token.RPAREN);\n\t\t\t\treturn this.factory.createImportExpression(specifier as Literal<string>, importAssertions, this.createRange(start));\n\t\t\t}\n\t\t}\n\n\t\tthis.expect(Token.RPAREN);\n\t\tthis.restoreAcceptIN();\n\t\treturn this.factory.createImportExpression(specifier as Literal<string>, undefined, this.createRange(start));\n\t}\n\tprotected parseVariableStatement(varContext: VariableDeclarationContext, names: string[]) {\n\t\t// VariableStatement ::\n\t\t// VariableDeclarations ';'\n\n\t\t// The scope of a var declared variable anywhere inside a function\n\t\t// is the entire function (ECMA-262, 3rd, 10.1.3, and 12.2). Thus we can\n\t\t// transform a source-level var declaration into a (Function) Scope\n\t\t// declaration, and rewrite the source-level initialization into an assignment\n\t\t// statement. We use a block to collect multiple assignments.\n\t\t//\n\t\t// We mark the block as initializer block because we don't want the\n\t\t// rewriter to add a '.result' assignment to such a block (to get compliant\n\t\t// behavior for code such as print(eval('var x = 7')), and for cosmetic\n\t\t// reasons when pretty-printing. Also, unless an assignment (initialization)\n\t\t// is inside an initializer block, it is ignored.\n\t\tconst declarations = this.parseVariableDeclarations(varContext);\n\t\tthis.expectSemicolon();\n\t\tnames.push(...declarations.getDeclarations().map(d => d.getId().toString()));\n\t\treturn declarations;\n\t}\n\tprotected parseImportAssertClause(): ImportAttribute[] | undefined {\n\t\t// AssertClause :\n\t\t// assert '{' '}'\n\t\t// assert '{' AssertEntries '}'\n\n\t\t// AssertEntries :\n\t\t// IdentifierName: AssertionKey\n\t\t// IdentifierName: AssertionKey , AssertEntries\n\n\t\t// AssertionKey :\n\t\t// IdentifierName\n\t\t// StringLiteral\n\n\t\t// auto import_assertions = zone() -> New<ImportAssertions>(zone());\n\n\t\t// if (!FLAG_harmony_import_assertions) {\n\t\t// \treturn import_assertions;\n\t\t// }\n\n\t\t// Assert clause is optional, and cannot be preceded by a LineTerminator.\n\t\tif (this.scanner.hasLineTerminatorBeforeNext() || !this.checkContextualKeyword('assert')) {\n\t\t\treturn undefined;\n\t\t}\n\t\tthis.expect(Token.LBRACE);\n\t\tconst counts = {} as { [key: string]: number };\n\t\tconst importAssertions: ImportAttribute[] = [];\n\t\twhile (this.peek().isNotType(Token.RBRACE)) {\n\t\t\tlet attributeKey = this.checkAndGetValue(Token.STRING);\n\t\t\tif (!attributeKey) {\n\t\t\t\tattributeKey = this.parsePropertyOrPrivatePropertyName();\n\t\t\t}\n\t\t\tthis.expect(Token.COLON);\n\t\t\tconst attributeValue = this.expectAndGetValue(Token.STRING);\n\t\t\timportAssertions.push(this.factory.createAssertEntry(attributeKey as Identifier, attributeValue as Literal<string>, this.createRange(attributeKey)));\n\t\t\tcounts[attributeKey.toString()] = (counts[attributeKey.toString()] ?? 0) + 1;\n\t\t\tif (counts[attributeKey.toString()] > 1) {\n\t\t\t\t// \t// It is a syntax error if two AssertEntries have the same key.\n\t\t\t\tthrow new SyntaxError(this.errorMessage('Import Assertion Duplicate Key'));\n\t\t\t}\n\n\t\t\tif (this.peek().isType(Token.RBRACE)) break;\n\t\t\tif (!this.check(Token.COMMA)) {\n\t\t\t\tthrow new SyntaxError('Unexpected Token');\n\t\t\t}\n\t\t}\n\t\tthis.expect(Token.RBRACE);\n\t\treturn importAssertions;\n\t}\n\tprotected parseModuleSpecifier(): Literal<string> {\n\t\t// ModuleSpecifier :\n\t\t// StringLiteral\n\n\t\treturn this.expectAndGetValue(Token.STRING) as Literal<string>;\n\t}\n\tprotected parseExportClause() {\n\t\t// ExportClause :\n\t\t// '{' '}'\n\t\t// '{' ExportsList '}'\n\t\t// '{' ExportsList ',' '}'\n\t\t//\n\t\t// ExportsList :\n\t\t// ExportSpecifier\n\t\t// ExportsList ',' ExportSpecifier\n\t\t//\n\t\t// ExportSpecifier :\n\t\t// IdentifierName\n\t\t// IdentifierName 'as' IdentifierName\n\t\t// IdentifierName 'as' ModuleExportName\n\t\t// ModuleExportName\n\t\t// ModuleExportName 'as' ModuleExportName\n\t\t//\n\t\t// ModuleExportName :\n\t\t// StringLiteral\n\t\t// ZoneChunkList < ExportClauseData >* export_data = zone() -> New<ZoneChunkList<ExportClauseData>>(zone());\n\n\t\tthis.expect(Token.LBRACE);\n\n\t\tconst exportData: ExportSpecifier[] = [];\n\t\tlet nameTok = this.peek();\n\t\twhile (nameTok.isNotType(Token.RBRACE)) {\n\t\t\tconst localName = this.parseExportSpecifierName();\n\t\t\tlet exportName;\n\t\t\tif (this.checkContextualKeyword('as')) {\n\t\t\t\texportName = this.parseExportSpecifierName();\n\t\t\t} else {\n\t\t\t\texportName = localName;\n\t\t\t}\n\t\t\texportData.push(this.factory.createExportSpecifier(exportName as Identifier, localName as Identifier));\n\t\t\tif (this.peek().isType(Token.RBRACE)) break;\n\t\t\tif (!this.check(Token.COMMA)) {\n\t\t\t\tthrow new SyntaxError('Unexpected Token');\n\t\t\t}\n\t\t}\n\t\tthis.expect(Token.RBRACE);\n\t\treturn exportData;\n\t}\n\tprotected parseExportSpecifierName() {\n\t\tconst next = this.next();\n\n\t\t// IdentifierName\n\t\tif (next.isType(Token.IDENTIFIER) || Token.isPropertyName(next.token)) {\n\t\t\treturn next.getValue() as Identifier;\n\t\t}\n\n\t\t// ModuleExportName\n\t\tif (next.isType(Token.STRING)) {\n\t\t\tconst exportName = next.getValue() as Literal<string>;\n\t\t\treturn exportName;\n\t\t}\n\t\tthrow new SyntaxError(this.errorMessage('Unexpected Token'));\n\t}\n\tprotected parseNamedImports(): ImportSpecifier[] {\n\t\t// NamedImports :\n\t\t// '{' '}'\n\t\t// '{' ImportsList '}'\n\t\t// '{' ImportsList ',' '}'\n\t\t//\n\t\t// ImportsList :\n\t\t// ImportSpecifier\n\t\t// ImportsList ',' ImportSpecifier\n\t\t//\n\t\t// ImportSpecifier :\n\t\t// BindingIdentifier\n\t\t// IdentifierName 'as' BindingIdentifier\n\t\t// ModuleExportName 'as' BindingIdentifier\n\n\t\tthis.expect(Token.LBRACE);\n\t\tconst result: ImportSpecifier[] = [];\n\n\t\t// auto result = zone() -> New < ZonePtrList <const NamedImport>> (1, zone());\n\t\twhile (this.peek().isNotType(Token.RBRACE)) {\n\t\t\tconst importName = this.parseExportSpecifierName() as Identifier;\n\t\t\tlet localName = importName;\n\t\t\t// In the presence of 'as', the left-side of the 'as' can\n\t\t\t// be any IdentifierName. But without 'as', it must be a valid\n\t\t\t// BindingIdentifier.\n\t\t\tif (this.checkContextualKeyword('as')) {\n\t\t\t\tlocalName = this.parsePropertyOrPrivatePropertyName() as Identifier;\n\t\t\t}\n\t\t\tif (!Token.isValidIdentifier(this.current().token, LanguageMode.Strict, false, isStrict(this.languageMode))) {\n\t\t\t\tthrow new SyntaxError(this.errorMessage('Unexpected Reserved Keyword'));\n\t\t\t} else if (this.isEvalOrArguments(localName)) {\n\t\t\t\tthrow new SyntaxError(this.errorMessage('Strict Eval Arguments'));\n\t\t\t}\n\n\t\t\tresult.push(this.factory.createImportSpecifier(localName, importName, this.createRange(importName)));\n\n\t\t\t// DeclareUnboundVariable(localName, VariableMode:: kConst, kNeedsInitialization, position());\n\n\t\t\t// NamedImport * import = zone() -> New<NamedImport>(import_name, local_name, location);\n\t\t\t// result-> Add(import, zone());\n\n\t\t\tif (this.peek().isType(Token.RBRACE)) break;\n\t\t\tthis.expect(Token.COMMA);\n\t\t}\n\n\t\tthis.expect(Token.RBRACE);\n\t\treturn result;\n\t}\n\n\tprotected parseExportDefault(start: PositionMark): ExportDefaultDeclaration {\n\t\t// Supports the following productions, starting after the 'default' token:\n\t\t// 'export' 'default' HoistableDeclaration\n\t\t// 'export' 'default' ClassDeclaration\n\t\t// 'export' 'default' AssignmentExpression[In] ';'\n\n\t\tthis.expect(Token.DEFAULT);\n\t\t// Scanner::Location default_loc = scanner() -> location();\n\n\t\t// ZonePtrList <const AstRawString> localNames(1, zone());\n\t\tconst localNames: string[] = [];\n\t\tlet result: ExpressionNode;\n\t\tswitch (this.peek().token) {\n\t\t\tcase Token.FUNCTION:\n\t\t\t\tresult = this.parseHoistableDeclaration(localNames, true, this.peek());\n\t\t\t\tbreak;\n\n\t\t\tcase Token.CLASS:\n\t\t\t\tconst classToken = this.consume(Token.CLASS);\n\t\t\t\tresult = this.parseClassDeclaration(localNames, true, classToken);\n\t\t\t\tbreak;\n\n\t\t\tcase Token.ASYNC:\n\t\t\t\tif (this.peekAhead().isType(Token.FUNCTION) && !this.scanner.hasLineTerminatorBeforeNext()) {\n\t\t\t\t\tconst asyncStart = this.consume(Token.ASYNC);\n\t\t\t\t\tresult = this.parseHoistableDeclaration(localNames, true, asyncStart);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\tdefault: {\n\t\t\t\t// int pos = position();\n\t\t\t\t// AcceptINScope scope(this, true);\n\t\t\t\tthis.setAcceptIN(true);\n\t\t\t\tresult = this.parseAssignmentExpression();\n\t\t\t\t// SetFunctionName(value, ast_value_factory() -> default_string());\n\n\t\t\t\t// const AstRawString* local_name = ast_value_factory() -> dot_default_string();\n\t\t\t\t// localNames.Add(local_name, zone());\n\n\t\t\t\t// It's fine to declare this as VariableMode::kConst because the user has\n\t\t\t\t// no way of writing to it.\n\t\t\t\t// VariableProxy * proxy = DeclareBoundVariable(local_name, VariableMode:: kConst, pos);\n\t\t\t\t// proxy ->var() -> set_initializer_position(position());\n\n\t\t\t\t// Assignment * assignment = factory() -> NewAssignment(Token.INIT, proxy, value, kNoSourcePosition);\n\t\t\t\t// result = IgnoreCompletion( factory() -> NewExpressionStatement(assignment, kNoSourcePosition));\n\n\t\t\t\tthis.expectSemicolon();\n\t\t\t\tthis.restoreAcceptIN();\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t// if (!result) {\n\t\t// \tDCHECK_EQ(localNames.length(), 1);\n\t\t// \tmodule() -> AddExport(localNames.first(), ast_value_factory() -> default_string(), default_loc, zone());\n\t\t// }\n\n\t\treturn this.factory.createExportDefault(result, this.createRange(start));\n\t}\n\tprotected parseExportStar(start: PositionMark): ExpressionNode | undefined {\n\t\tthis.consume(Token.MUL);\n\n\t\tif (!this.peekContextualKeyword('as')) {\n\t\t\t// 'export' '*' 'from' ModuleSpecifier ';'\n\t\t\t// Scanner::Location loc = scanner() -> location();\n\t\t\tthis.expectContextualKeyword('from');\n\t\t\t// Scanner::Location specifier_loc = scanner() -> peek_location();\n\t\t\tconst moduleSpecifier = this.parseModuleSpecifier();\n\t\t\tconst importAssertions = this.parseImportAssertClause();\n\t\t\tthis.expectSemicolon();\n\t\t\t// module() -> AddStarExport(module_specifier, import_assertions, loc,specifier_loc, zone());\n\t\t\treturn this.factory.createExportAllDeclaration(moduleSpecifier, undefined, importAssertions, this.createRange(start));\n\t\t}\n\n\t\t// 'export' '*' 'as' IdentifierName 'from' ModuleSpecifier ';'\n\t\t//\n\t\t// Desugaring:\n\t\t// export * as x from \"...\";\n\t\t// ~>\n\t\t// import * as .x from \"...\"; export {.x as x};\n\t\t//\n\t\t// Note that the desugared internal namespace export name (.x above) will\n\t\t// never conflict with a string literal export name, as literal string export\n\t\t// names in local name positions (i.e. left of 'as' or in a clause without\n\t\t// 'as') are disallowed without a following 'from' clause.\n\n\t\tthis.expectContextualKeyword('as');\n\t\tconst exportName = this.parseExportSpecifierName();\n\t\t// Scanner::Location export_name_loc = scanner() -> location();\n\t\t// const localName = this.nextInternalNamespaceExportName();\n\t\t// Scanner::Location local_name_loc = Scanner:: Location:: invalid();\n\t\t// DeclareUnboundVariable(local_name, VariableMode:: kConst, kCreatedInitialized,pos);\n\n\t\tthis.expectContextualKeyword('from');\n\t\tconst moduleSpecifier = this.parseModuleSpecifier();\n\t\tconst importAssertions = this.parseImportAssertClause();\n\t\tthis.expectSemicolon();\n\n\t\t// const specifiers = [new ExportSpecifier(exportName as Identifier, exportName as Identifier)];\n\n\t\t// module() -> AddStarImport(local_name, module_specifier, import_assertions,local_name_loc, specifier_loc, zone());\n\t\t// module() -> AddExport(local_name, export_name, export_name_loc, zone());\n\t\treturn this.factory.createExportAllDeclaration(moduleSpecifier, exportName as Identifier, importAssertions, this.createRange(start));\n\t}\n\n\tprotected parseWithStatement(): WithStatement {\n\t\t// WithStatement ::\n\t\t// 'with' '(' Expression ')' Statement\n\n\t\tconst start = this.consume(Token.WITH);\n\t\tif (isStrict(this.languageMode)) {\n\t\t\tthrow new SyntaxError(this.errorMessage('With is not allowed in Strict mode.'));\n\t\t}\n\t\tthis.expect(Token.LPAREN);\n\t\tconst object = this.parseExpression();\n\t\tthis.expect(Token.RPAREN);\n\t\tconst body = this.parseStatement();\n\t\tconst range = this.createRange(start);\n\t\treturn this.factory.createWithStatement(object, body, range);\n\t}\n}\n"]}
package/v8/stream.d.ts CHANGED
@@ -15,7 +15,8 @@ export interface TemplateStringLiteral extends ExpressionNode {
15
15
  }
16
16
  export declare class TemplateStringLiteral {
17
17
  string: string;
18
- constructor(string: string);
18
+ range: [number, number];
19
+ constructor(string: string, range: [number, number]);
19
20
  }
20
21
  export declare abstract class TokenStream {
21
22
  protected mode: LanguageMode;