@ibyar/expressions 0.6.0 → 0.8.2-dev.20221008
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -2
- package/api/class/class.js +30 -31
- package/api/class/class.js.map +1 -1
- package/api/class/decorator.js.map +1 -1
- package/api/computing/call.js.map +1 -1
- package/api/computing/debugger.js.map +1 -1
- package/api/computing/new.js.map +1 -1
- package/api/computing/rest.js.map +1 -1
- package/api/computing/return.js.map +1 -1
- package/api/computing/spread.js.map +1 -1
- package/api/computing/throw.js.map +1 -1
- package/api/computing/yield.js.map +1 -1
- package/api/definition/array.js.map +1 -1
- package/api/definition/bind.js.map +1 -1
- package/api/definition/comment.js.map +1 -1
- package/api/definition/function.js.map +1 -1
- package/api/definition/member.js.map +1 -1
- package/api/definition/object.js.map +1 -1
- package/api/definition/statement.js.map +1 -1
- package/api/definition/values.d.ts +6 -6
- package/api/definition/values.js +9 -15
- package/api/definition/values.js.map +1 -1
- package/api/module/common.js.map +1 -1
- package/api/module/export.js.map +1 -1
- package/api/module/import.js.map +1 -1
- package/api/operators/assignment.js.map +1 -1
- package/api/operators/await.js.map +1 -1
- package/api/operators/binary.js.map +1 -1
- package/api/operators/chaining.js.map +1 -1
- package/api/operators/comma.js.map +1 -1
- package/api/operators/grouping.js.map +1 -1
- package/api/operators/logical.js.map +1 -1
- package/api/operators/pipeline.js.map +1 -1
- package/api/operators/ternary.js.map +1 -1
- package/api/operators/unary.js.map +1 -1
- package/api/operators/update.js.map +1 -1
- package/api/program.js.map +1 -1
- package/api/statement/control/block.js.map +1 -1
- package/api/statement/control/empty.js.map +1 -1
- package/api/statement/control/if.js.map +1 -1
- package/api/statement/control/switch.js.map +1 -1
- package/api/statement/control/terminate.js.map +1 -1
- package/api/statement/declarations/declares.js.map +1 -1
- package/api/statement/iterations/for.js.map +1 -1
- package/api/statement/iterations/while.js.map +1 -1
- package/package.json +3 -3
- package/v8/enums.d.ts +0 -7
- package/v8/enums.js +0 -15
- package/v8/enums.js.map +1 -1
- package/v8/index.d.ts +1 -0
- package/v8/index.js +1 -0
- package/v8/index.js.map +1 -1
- package/v8/inline.d.ts +2 -1
- package/v8/inline.js +2 -1
- package/v8/inline.js.map +1 -1
- package/v8/language.d.ts +7 -0
- package/v8/language.js +16 -0
- package/v8/language.js.map +1 -0
- package/v8/parser.d.ts +2 -1
- package/v8/parser.js +2 -1
- package/v8/parser.js.map +1 -1
- package/v8/stream.d.ts +1 -1
- package/v8/stream.js +1 -1
- package/v8/stream.js.map +1 -1
- package/v8/token.d.ts +1 -1
- package/v8/token.js +1 -1
- package/v8/token.js.map +1 -1
package/v8/language.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare enum LanguageMode {
|
|
2
|
+
Sloppy = 0,
|
|
3
|
+
Strict = 1
|
|
4
|
+
}
|
|
5
|
+
export declare function isSloppy(mode: LanguageMode): boolean;
|
|
6
|
+
export declare function isStrict(mode: LanguageMode): boolean;
|
|
7
|
+
export declare function getLanguageMode(isModule: boolean): LanguageMode;
|
package/v8/language.js
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export var LanguageMode;
|
|
2
|
+
(function (LanguageMode) {
|
|
3
|
+
LanguageMode[LanguageMode["Sloppy"] = 0] = "Sloppy";
|
|
4
|
+
LanguageMode[LanguageMode["Strict"] = 1] = "Strict";
|
|
5
|
+
})(LanguageMode || (LanguageMode = {}));
|
|
6
|
+
;
|
|
7
|
+
export function isSloppy(mode) {
|
|
8
|
+
return LanguageMode.Sloppy === mode;
|
|
9
|
+
}
|
|
10
|
+
export function isStrict(mode) {
|
|
11
|
+
return LanguageMode.Strict === mode;
|
|
12
|
+
}
|
|
13
|
+
export function getLanguageMode(isModule) {
|
|
14
|
+
return !!isModule ? LanguageMode.Strict : LanguageMode.Sloppy;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=language.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"language.js","sourceRoot":"","sources":["../../../src/expressions/v8/language.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,YAGX;AAHD,WAAY,YAAY;IACvB,mDAAM,CAAA;IACN,mDAAM,CAAA;AACP,CAAC,EAHW,YAAY,KAAZ,YAAY,QAGvB;AAAA,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,IAAkB;IAC1C,OAAO,YAAY,CAAC,MAAM,KAAK,IAAI,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,IAAkB;IAC1C,OAAO,YAAY,CAAC,MAAM,KAAK,IAAI,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,QAAiB;IAChD,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC;AAC/D,CAAC","sourcesContent":["export enum LanguageMode {\n\tSloppy,\n\tStrict,\n};\n\nexport function isSloppy(mode: LanguageMode) {\n\treturn LanguageMode.Sloppy === mode;\n}\n\nexport function isStrict(mode: LanguageMode) {\n\treturn LanguageMode.Strict === mode;\n}\n\nexport function getLanguageMode(isModule: boolean) {\n\treturn !!isModule ? LanguageMode.Strict : LanguageMode.Sloppy;\n}"]}
|
package/v8/parser.d.ts
CHANGED
|
@@ -8,7 +8,8 @@ import { TokenStream } from './stream.js';
|
|
|
8
8
|
import { ExportDefaultDeclaration, ExportSpecifier } from '../api/module/export.js';
|
|
9
9
|
import { ImportSpecifier } from '../api/module/import.js';
|
|
10
10
|
import { ImportAttribute } from '../api/module/common.js';
|
|
11
|
-
import { ClassInfo, ClassLiteralPropertyKind,
|
|
11
|
+
import { ClassInfo, ClassLiteralPropertyKind, PropertyKindInfo, VariableDeclarationContext } from './enums.js';
|
|
12
|
+
import { LanguageMode } from './language.js';
|
|
12
13
|
export declare type ParserOptions = {
|
|
13
14
|
mode?: LanguageMode;
|
|
14
15
|
};
|
package/v8/parser.js
CHANGED
|
@@ -9,7 +9,8 @@ import { Program } from '../api/program.js';
|
|
|
9
9
|
import { ExportAllDeclaration, ExportDefaultDeclaration, ExportNamedDeclaration, ExportSpecifier } from '../api/module/export.js';
|
|
10
10
|
import { ImportDeclaration, ImportDefaultSpecifier, ImportExpression, ImportNamespaceSpecifier, ImportSpecifier } from '../api/module/import.js';
|
|
11
11
|
import { ImportAttribute } from '../api/module/common.js';
|
|
12
|
-
import { ClassLiteralProperty, ClassLiteralPropertyKind, classPropertyKindFor, createClassInfo, FunctionKind, FunctionSyntaxKind, isAccessor,
|
|
12
|
+
import { ClassLiteralProperty, ClassLiteralPropertyKind, classPropertyKindFor, createClassInfo, FunctionKind, FunctionSyntaxKind, isAccessor, ParseFunctionFlag, PropertyKind, PropertyKindInfo, PropertyPosition, VariableDeclarationContext } from './enums.js';
|
|
13
|
+
import { isStrict, LanguageMode, } from './language.js';
|
|
13
14
|
export class JavaScriptParser extends JavaScriptInlineParser {
|
|
14
15
|
/**
|
|
15
16
|
* parser js with
|
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\tisStrict,\n\tLanguageMode,\n\tParseFunctionFlag,\n\tPropertyKind,\n\tPropertyKindInfo,\n\tPropertyPosition,\n\tVariableDeclarationContext\n} from './enums.js';\n\n\nexport type ParserOptions = { mode?: LanguageMode };\n\nexport class JavaScriptParser extends JavaScriptInlineParser {\n\t/**\n\t * parser js with\n\t * @param source \n\t * @returns \n\t */\n\tstatic parse(source: string | TokenExpression[] | TokenStream, { mode }: ParserOptions = {}) {\n\t\tmode ??= LanguageMode.Strict;\n\t\tconst stream = (typeof source === 'string') || Array.isArray(source)\n\t\t\t? TokenStream.getTokenStream(source, mode) : source;\n\t\tconst parser = new JavaScriptParser(stream);\n\t\treturn parser.scan();\n\t}\n\n\t/**\n\t * parse inline code like that used in html 2 or 1 way binding\n\t */\n\tstatic parseScript(source: string | TokenExpression[] | TokenStream, options?: InlineParserOptions) {\n\t\treturn JavaScriptInlineParser.parse(source, options);\n\t}\n\n\toverride scan(): ExpressionNode {\n\t\tconst isModule = isStrict(this.languageMode);\n\t\tif (isModule) {\n\t\t\tthis.setFunctionKind(FunctionKind.Module);\n\t\t}\n\t\tconst body = isModule ? this.parseModuleItemList() : this.parseStatementList(Token.EOS);\n\t\treturn new Program(isModule ? 'module' : 'script', body);\n\t}\n\tprotected override parseNewTargetExpression(): ExpressionNode {\n\t\tthis.consume(Token.PERIOD);\n\t\tconst target: ExpressionNode = this.parsePropertyOrPrivatePropertyName();\n\t\tif (target.toString() !== 'target') {\n\t\t\tthrow new Error(this.errorMessage(`Expression (new.${target.toString()}) not supported.`));\n\t\t}\n\t\treturn MetaProperty.NewTarget;\n\t}\n\tprotected override parseClassExpression(): ClassExpression {\n\t\tthis.consume(Token.CLASS);\n\t\tlet name: ExpressionNode | undefined;\n\t\tlet isStrictReserved = false;\n\t\tif (this.peekAnyIdentifier()) {\n\t\t\tname = this.parseAndClassifyIdentifier(this.next());\n\t\t\tisStrictReserved = Token.isStrictReservedWord(this.current().token);\n\t\t}\n\t\tconst classLiteral = this.parseClassLiteral(name, isStrictReserved);\n\t\treturn new ClassExpression(classLiteral.getBody(), classLiteral.getDecorators(), classLiteral.getId()!, classLiteral.getSuperClass());\n\t}\n\tprotected override parseClassDeclaration(names: string[] | undefined, defaultExport: boolean): ClassDeclaration {\n\t\t// ClassDeclaration ::\n\t\t// 'class' Identifier ('extends' LeftHandExpression)? '{' ClassBody '}'\n\t\t// 'class' ('extends' LeftHandExpression)? '{' ClassBody '}'\n\t\t//\n\t\t// The anonymous form is allowed iff [default_export] is true.\n\t\t//\n\t\t// 'class' is expected to be consumed by the caller.\n\t\t//\n\t\t// A ClassDeclaration\n\t\t//\n\t\t// class C { ... }\n\t\t//\n\t\t// has the same semantics as:\n\t\t//\n\t\t// let C = class C { ... };\n\t\t//\n\t\t// so rewrite it as such.\n\n\t\tconst nextToken = this.peek().token;\n\t\tconst isStrictReserved = Token.isStrictReservedWord(nextToken);\n\t\tlet name: ExpressionNode | undefined;\n\t\tlet variableName: string | undefined;\n\t\tif (defaultExport && (nextToken == Token.EXTENDS || nextToken == Token.LBRACE)) {\n\t\t\tname = new Literal('default');\n\t\t\tvariableName = '.default';\n\t\t} else {\n\t\t\tconst identifier = this.parseIdentifier();\n\t\t\tvariableName = identifier.getName() as string;\n\t\t\tname = identifier;\n\t\t}\n\t\tconst classLiteral = this.parseClassLiteral(name, isStrictReserved);\n\t\treturn new ClassDeclaration(classLiteral.getBody(), classLiteral.getDecorators(), classLiteral.getId()!, classLiteral.getSuperClass());\n\t}\n\tprotected override parseClassLiteral(name: ExpressionNode | undefined, nameIsStrictReserved: boolean): Class {\n\t\tconst isAnonymous = !!!name;\n\n\t\t// All parts of a ClassDeclaration and ClassExpression are strict code.\n\t\tif (!isAnonymous) {\n\t\t\tif (nameIsStrictReserved) {\n\t\t\t\tthrow new Error(this.errorMessage(`Unexpected Strict Reserved class name`));\n\t\t\t}\n\t\t\tif (this.isEvalOrArguments(name!)) {\n\t\t\t\tthrow new Error(this.errorMessage(`Strict Eval Arguments not allowed for class name`));\n\t\t\t}\n\t\t}\n\n\t\tconst classInfo: ClassInfo = createClassInfo();\n\t\tclassInfo.isAnonymous = isAnonymous;\n\n\t\tif (this.check(Token.EXTENDS)) {\n\t\t\tclassInfo.extends = this.parseLeftHandSideExpression();\n\t\t}\n\n\t\tthis.expect(Token.LBRACE);\n\n\t\tconst hasExtends = !!classInfo.extends;\n\n\t\twhile (this.peek().isNotType(Token.RBRACE)) {\n\t\t\tif (this.check(Token.SEMICOLON)) continue;\n\n\t\t\t// Either we're parsing a `static { }` initialization block or a property.\n\t\t\tif (this.peek().isType(Token.STATIC) && this.peekAhead().isType(Token.LBRACE)) {\n\t\t\t\tconst staticBlock = this.parseClassStaticBlock(classInfo);\n\t\t\t\tclassInfo.staticElements.push(staticBlock);\n\t\t\t\tclassInfo.hasStaticBlocks = true;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// FuncNameInferrerState fni_state(& fni_);\n\t\t\t// If we haven't seen the constructor yet, it potentially is the next\n\t\t\t// property.\n\t\t\tlet isConstructor = !classInfo.hasSeenConstructor;\n\t\t\tconst propInfo = new PropertyKindInfo();\n\t\t\tpropInfo.position = PropertyPosition.ClassLiteral;\n\n\t\t\tconst property = this.parseClassPropertyDefinition(classInfo, propInfo, hasExtends);\n\n\t\t\t// if (has_error()) return impl() . FailureExpression();\n\n\t\t\tconst propertyKind = classPropertyKindFor(propInfo.kind);\n\t\t\tif (!classInfo.hasStaticComputedNames && propInfo.isStatic && propInfo.isComputedName) {\n\t\t\t\tclassInfo.hasStaticComputedNames = true;\n\t\t\t}\n\t\t\tisConstructor &&= classInfo.hasSeenConstructor;\n\n\t\t\tconst isField = propertyKind == ClassLiteralPropertyKind.FIELD;\n\n\t\t\tif (propInfo.isPrivate) {\n\t\t\t\tif (isConstructor) {\n\t\t\t\t\tthrow new Error(this.errorMessage('private constructor is not allowed'));\n\t\t\t\t}\n\t\t\t\tclassInfo.requiresBrand ||= (!isField && !propInfo.isStatic);\n\t\t\t\tconst isMethod = propertyKind == ClassLiteralPropertyKind.METHOD;\n\t\t\t\tclassInfo.hasPrivateMethods ||= isMethod;\n\t\t\t\tclassInfo.hasStaticPrivateMethods ||= isMethod && propInfo.isStatic;\n\t\t\t\tthis.declarePrivateClassMember(propInfo.name, property as MethodDefinition | PropertyDefinition, propertyKind, propInfo.isStatic, classInfo);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (isField) {\n\t\t\t\tif (propInfo.isComputedName) {\n\t\t\t\t\tclassInfo.computedFieldCount++;\n\t\t\t\t}\n\t\t\t\tthis.declarePublicClassField(property as PropertyDefinition, propInfo.isStatic, propInfo.isComputedName, classInfo);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tthis.declarePublicClassMethod(name, property as MethodDefinition, isConstructor, classInfo);\n\t\t}\n\n\t\tthis.expect(Token.RBRACE);\n\t\tconst classBody = this.rewriteClassLiteral(classInfo, name);\n\t\treturn new Class(classBody, [], name as Identifier, classInfo.extends);\n\t}\n\tprotected declarePublicClassMethod(name: ExpressionNode | undefined, property: MethodDefinition, isConstructor: boolean, classInfo: ClassInfo): void {\n\t\t// throw new Error('Method not implemented.');\n\t\tif (isConstructor) {\n\t\t\tif (classInfo.constructor) {\n\t\t\t\tthrow new SyntaxError(this.errorMessage('A class may only have one constructor.'));\n\t\t\t}\n\t\t\tclassInfo.constructor = property;\n\t\t\t// set the class name as the constructor name\n\t\t\tReflect.set(classInfo.constructor, 'id', name);\n\t\t\treturn;\n\t\t}\n\t\tclassInfo.publicMembers.push(property);\n\t}\n\tprotected declarePublicClassField(property: PropertyDefinition, isStatic: boolean, isComputedName: boolean, classInfo: ClassInfo) {\n\t\tif (isStatic) {\n\t\t\tclassInfo.staticElements.push(property);\n\t\t} else {\n\t\t\tclassInfo.instanceFields.push(property);\n\t\t}\n\n\t\t// if (isComputedName) {\n\t\t// \tclassInfo.publicMembers.push(property);\n\t\t// }\n\n\t}\n\tprotected declarePrivateClassMember(propertyName: string, property: MethodDefinition | PropertyDefinition, kind: ClassLiteralPropertyKind, isStatic: boolean, classInfo: ClassInfo) {\n\t\tclassInfo.privateMembers.push(property);\n\t}\n\t// protected createPrivateNameVariable(mode: VariableMode, staticFlag: StaticFlag, propertyName: string) {\n\t// \tthrow new Error('Method not implemented.');\n\t// }\n\tprotected parseClassPropertyDefinition(classInfo: ClassInfo, propInfo: PropertyKindInfo, hasExtends: boolean) {\n\t\tif (!classInfo) {\n\t\t\tthrow new Error(this.errorMessage('class info is undefined'));\n\t\t}\n\t\tif (propInfo.position !== PropertyPosition.ClassLiteral) {\n\t\t\tthrow new Error(this.errorMessage('expected property position ClassLiteral'));\n\t\t}\n\n\t\tconst nameToken = this.peek();\n\t\tlet nameExpression: ExpressionNode;\n\t\tif (nameToken.isType(Token.STATIC)) {\n\t\t\tthis.consume(Token.STATIC);\n\t\t\tif (this.peek().isType(Token.LPAREN)) {\n\t\t\t\tpropInfo.kind = PropertyKind.Method;\n\t\t\t\tnameExpression = this.parseIdentifier();\n\t\t\t\tpropInfo.name = (nameExpression as Identifier).getName() as string;\n\t\t\t} else if (this.peek().isType(Token.ASSIGN)\n\t\t\t\t|| this.peek().isType(Token.SEMICOLON)\n\t\t\t\t|| this.peek().isType(Token.RBRACK)) {\n\t\t\t\tnameExpression = this.parseIdentifier();\n\t\t\t\tpropInfo.name = (nameExpression as Identifier).getName() as string;\n\t\t\t} else {\n\t\t\t\tpropInfo.isStatic = true;\n\t\t\t\tnameExpression = this.parseProperty(propInfo);\n\t\t\t}\n\t\t} else {\n\t\t\tnameExpression = this.parseProperty(propInfo);\n\t\t}\n\n\t\tswitch (propInfo.kind) {\n\t\t\tcase PropertyKind.Assign:\n\t\t\tcase PropertyKind.ClassField:\n\t\t\tcase PropertyKind.ShorthandOrClassField:\n\t\t\tcase PropertyKind.NotSet: {\n\t\t\t\t// This case is a name followed by a\n\t\t\t\t// name or other property. Here we have\n\t\t\t\t// to assume that's an uninitialized\n\t\t\t\t// field followed by a line break\n\t\t\t\t// followed by a property, with ASI\n\t\t\t\t// adding the semicolon. If not, there\n\t\t\t\t// will be a syntax error after parsing\n\t\t\t\t// the first name as an uninitialized\n\t\t\t\t// field.\n\t\t\t\tpropInfo.kind = PropertyKind.ClassField;\n\n\t\t\t\t// if (!propInfo.isComputedName) {\n\t\t\t\t// \tthis.checkClassFieldName(propInfo.name, propInfo.isStatic);\n\t\t\t\t// }\n\n\t\t\t\tconst initializer = this.parseMemberInitializer(classInfo, propInfo.isStatic);\n\t\t\t\tthis.expectSemicolon();\n\n\t\t\t\tconst result: ExpressionNode = this.newClassLiteralProperty(\n\t\t\t\t\tnameExpression,\n\t\t\t\t\tinitializer,\n\t\t\t\t\tClassLiteralPropertyKind.FIELD,\n\t\t\t\t\tpropInfo.isStatic,\n\t\t\t\t\tpropInfo.isComputedName,\n\t\t\t\t\tpropInfo.isPrivate\n\t\t\t\t);\n\t\t\t\tthis.setFunctionNameFromPropertyName(result, propInfo.name);\n\t\t\t\treturn result;\n\t\t\t}\n\t\t\tcase PropertyKind.Method: {\n\t\t\t\t// MethodDefinition\n\t\t\t\t// PropertyName '(' StrictFormalParameters ')' '{' FunctionBody '}'\n\t\t\t\t// '*' PropertyName '(' StrictFormalParameters ')' '{' FunctionBody '}'\n\t\t\t\t// async PropertyName '(' StrictFormalParameters ')'\n\t\t\t\t// '{' FunctionBody '}'\n\t\t\t\t// async '*' PropertyName '(' StrictFormalParameters ')'\n\t\t\t\t// '{' FunctionBody '}'\n\n\t\t\t\tif (!propInfo.isComputedName) {\n\t\t\t\t\tthis.checkClassMethodName(propInfo, classInfo);\n\t\t\t\t}\n\n\t\t\t\tlet kind: FunctionKind = this.methodKindFor(propInfo.isStatic, propInfo.funcFlag);\n\n\t\t\t\tif (!propInfo.isStatic && propInfo.name.toString() === 'constructor') {\n\t\t\t\t\tclassInfo.hasSeenConstructor = true;\n\t\t\t\t\tkind = hasExtends ? FunctionKind.DerivedConstructor : FunctionKind.BaseConstructor;\n\t\t\t\t}\n\n\t\t\t\tconst value = this.parseFunctionLiteral(kind, FunctionSyntaxKind.AccessorOrMethod, nameExpression as Identifier);\n\n\t\t\t\tconst result = this.newClassLiteralProperty(\n\t\t\t\t\tnameExpression, value, ClassLiteralProperty.Kind.METHOD,\n\t\t\t\t\tpropInfo.isStatic, propInfo.isComputedName,\n\t\t\t\t\tpropInfo.isPrivate);\n\t\t\t\tthis.setFunctionNameFromPropertyName(result, propInfo.name);\n\t\t\t\treturn result;\n\t\t\t}\n\n\t\t\tcase PropertyKind.AccessorGetter:\n\t\t\tcase PropertyKind.AccessorSetter: {\n\t\t\t\tif (propInfo.funcFlag !== ParseFunctionFlag.IsNormal) {\n\t\t\t\t\tthrow new Error(this.errorMessage('accessor is not normal function'));\n\t\t\t\t}\n\t\t\t\tconst isGet = propInfo.kind == PropertyKind.AccessorGetter;\n\n\t\t\t\tif (!propInfo.isComputedName) {\n\t\t\t\t\tthis.checkClassMethodName(propInfo, classInfo);\n\t\t\t\t\t// Make sure the name expression is a string since we need a Name for\n\t\t\t\t\t// Runtime_DefineAccessorPropertyUnchecked and since we can determine\n\t\t\t\t\t// this statically we can skip the extra runtime check.\n\t\t\t\t\tnameExpression = new Literal<string>(propInfo.name);\n\t\t\t\t}\n\n\t\t\t\tlet kind: FunctionKind;\n\t\t\t\tif (propInfo.isStatic) {\n\t\t\t\t\tkind = isGet ? FunctionKind.StaticGetterFunction\n\t\t\t\t\t\t: FunctionKind.StaticSetterFunction;\n\t\t\t\t} else {\n\t\t\t\t\tkind = isGet ? FunctionKind.GetterFunction\n\t\t\t\t\t\t: FunctionKind.SetterFunction;\n\t\t\t\t}\n\n\t\t\t\tconst value = this.parseFunctionLiteral(kind, FunctionSyntaxKind.AccessorOrMethod, nameExpression as Identifier);\n\n\t\t\t\tconst propertyKind: ClassLiteralPropertyKind = isGet ? ClassLiteralProperty.Kind.GETTER : ClassLiteralProperty.Kind.SETTER;\n\t\t\t\tconst result = this.newClassLiteralProperty(\n\t\t\t\t\tnameExpression, value, propertyKind,\n\t\t\t\t\tpropInfo.isStatic, propInfo.isComputedName,\n\t\t\t\t\tpropInfo.isPrivate);\n\t\t\t\tconst prefix = isGet ? 'get ' : 'set ';\n\t\t\t\tthis.setFunctionNameFromPropertyName(result, propInfo.name, prefix);\n\t\t\t\treturn result;\n\t\t\t}\n\t\t\tcase PropertyKind.Value:\n\t\t\tcase PropertyKind.Shorthand:\n\t\t\tcase PropertyKind.Spread:\n\t\t\t\t// throw new Error(this.errorMessage('Report Unexpected Token'));\n\t\t\t\treturn NullNode;\n\t\t}\n\t\tthrow new Error(this.errorMessage('UNREACHABLE'));\n\t}\n\tprotected checkClassMethodName(propInfo: PropertyKindInfo, classInfo: ClassInfo) {\n\t\tif (!(propInfo.kind == PropertyKind.Method || isAccessor(propInfo.kind))) {\n\t\t\tthrow new Error(this.errorMessage('not kind of method or setter or getter'));\n\t\t}\n\t\tif (propInfo.isPrivate && propInfo.name.toString() === 'constructor') {\n\t\t\tthrow new Error(this.errorMessage('constructor is private'));\n\t\t} else if (propInfo.isStatic && propInfo.name.toString() === 'prototype') {\n\t\t\tthrow new Error(this.errorMessage('static prototype'));\n\t\t} else if (propInfo.name.toString() === 'constructor') {\n\t\t\tif (propInfo.funcFlag !== ParseFunctionFlag.IsNormal || isAccessor(propInfo.kind)) {\n\t\t\t\tif (propInfo.funcFlag === ParseFunctionFlag.IsGenerator) {\n\t\t\t\t\tthrow new Error(this.errorMessage('constructor is generator'));\n\t\t\t\t} else if (propInfo.funcFlag === ParseFunctionFlag.IsAsync) {\n\t\t\t\t\tthrow new Error(this.errorMessage('constructor is async'));\n\t\t\t\t}\n\t\t\t\tif (classInfo.hasSeenConstructor) {\n\t\t\t\t\tthrow new Error(this.errorMessage('duplicate constructor'));\n\t\t\t\t}\n\t\t\t}\n\t\t\tclassInfo.hasSeenConstructor = true;\n\t\t}\n\t}\n\tprotected parseClassStaticBlock(classInfo: ClassInfo): StaticBlock {\n\t\tthis.consume(Token.STATIC);\n\t\t// Each static block has its own var and lexical scope, so make a new var\n\t\t// block scope instead of using the synthetic members initializer function\n\t\t// scope.\n\t\tthis.setStatue(true, FunctionKind.ClassStaticInitializerFunction);\n\t\tconst block = this.parseBlock();\n\t\tthis.restoreStatue();\n\t\tclassInfo.hasStaticElements = true;\n\t\treturn new StaticBlock(block.getBody());\n\t}\n\tprotected declareClass(variableName: string, value: ExpressionNode, names: string[] | undefined): ExpressionNode {\n\t\tnames?.push(variableName);\n\t\tconst proxy = this.declareVariable(variableName, 'let');\n\t\treturn new AssignmentExpression('=', proxy, value);\n\t}\n\tprotected declareVariable(name: string, mode: 'let' | 'const' | 'var') {\n\t\treturn new VariableDeclarationNode([new VariableDeclarator(new Identifier(name))], mode);\n\t}\n\tprotected newClassLiteralProperty(nameExpression: ExpressionNode, initializer: ExpressionNode | undefined, kind: ClassLiteralPropertyKind, isStatic: boolean, isComputedName: boolean, isPrivate: boolean) {\n\t\tswitch (kind) {\n\t\t\tcase ClassLiteralPropertyKind.METHOD:\n\t\t\t\tif (nameExpression.toString() === 'constructor') {\n\t\t\t\t\treturn new MethodDefinition('constructor', nameExpression, initializer as FunctionExpression, [], isComputedName, isStatic);\n\t\t\t\t}\n\t\t\t\treturn new MethodDefinition('method', nameExpression, initializer as FunctionExpression, [], isComputedName, isStatic);\n\t\t\tcase ClassLiteralPropertyKind.GETTER:\n\t\t\t\treturn new MethodDefinition('get', nameExpression, initializer as FunctionExpression, [], isComputedName, isStatic);\n\t\t\tcase ClassLiteralPropertyKind.SETTER:\n\t\t\t\treturn new MethodDefinition('set', nameExpression, initializer as FunctionExpression, [], isComputedName, isStatic);\n\t\t\tcase ClassLiteralPropertyKind.FIELD:\n\t\t\t\treturn new PropertyDefinition(nameExpression, [], isComputedName, isStatic, initializer);\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t\tthrow new Error(this.errorMessage('UNREACHABLE'));\n\t}\n\tprotected parseMemberInitializer(classInfo: ClassInfo, isStatic: boolean): ExpressionNode | undefined {\n\t\tconst kind = isStatic\n\t\t\t? FunctionKind.ClassStaticInitializerFunction\n\t\t\t: FunctionKind.ClassMembersInitializerFunction;\n\n\n\t\tlet initializer: ExpressionNode | undefined = undefined;\n\t\tif (this.check(Token.ASSIGN)) {\n\t\t\tthis.setStatue(true, kind);\n\t\t\tinitializer = this.parseAssignmentExpression();\n\t\t\tthis.restoreStatue();\n\t\t}\n\t\tif (isStatic) {\n\t\t\tclassInfo.hasStaticElements = true;\n\t\t} else {\n\t\t\tclassInfo.hasInstanceMembers = true;\n\t\t}\n\t\treturn initializer;\n\t}\n\tprotected setFunctionNameFromPropertyName(property: ExpressionNode, name: string, prefix?: string): void {\n\t\t// TODO: no need for this now\n\t\t// check later when needed\n\t\t// the ClassExpression* handle this\n\t}\n\tprotected parseSuperExpression(): ExpressionNode {\n\t\tthis.consume(Token.SUPER);\n\t\tif (Token.isProperty(this.peek().token)) {\n\t\t\tif (this.peek().isType(Token.PERIOD) && this.peekAhead().isType(Token.PRIVATE_NAME)) {\n\t\t\t\tthis.consume(Token.PERIOD);\n\t\t\t\tthis.consume(Token.PRIVATE_NAME);\n\t\t\t\tthrow new Error(this.errorMessage('Unexpected Private Field'));\n\t\t\t}\n\t\t\tif (this.peek().isType(Token.QUESTION_PERIOD)) {\n\t\t\t\tthis.consume(Token.QUESTION_PERIOD);\n\t\t\t\tthrow new Error(this.errorMessage('Optional Chaining No Super'));\n\t\t\t}\n\t\t\treturn Super.INSTANCE;\n\t\t}\n\t\tthrow new Error(this.errorMessage('Unexpected Super'));\n\t}\n\tprotected rewriteClassLiteral(classInfo: ClassInfo, name?: ExpressionNode): ClassBody {\n\t\tconst body: (MethodDefinition | PropertyDefinition | AccessorProperty | StaticBlock)[] = [];\n\t\tif (classInfo.hasSeenConstructor) {\n\t\t\tbody.push(classInfo.constructor as MethodDefinition);\n\t\t}\n\t\tbody.push(...classInfo.staticElements);\n\t\tbody.push(...classInfo.instanceFields);\n\t\tbody.push(...classInfo.publicMembers);\n\t\tbody.push(...classInfo.privateMembers);\n\t\treturn new ClassBody(body);\n\t}\n\tprotected parseModuleItemList(): ExpressionNode[] {\n\t\t// ecma262/#prod-Module\n\t\t// Module :\n\t\t// ModuleBody?\n\t\t//\n\t\t// ecma262/#prod-ModuleItemList\n\t\t// ModuleBody :\n\t\t// ModuleItem*\n\t\tconst body: ExpressionNode[] = [];\n\t\twhile (this.peek().isNotType(Token.EOS)) {\n\t\t\tconst stat = this.parseModuleItem();\n\t\t\tif (!stat) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (this.isEmptyStatement(stat)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tbody.push(stat);\n\t\t}\n\t\treturn body;\n\t}\n\tprotected parseModuleItem(): ExpressionNode | undefined {\n\t\t// ecma262/#prod-ModuleItem\n\t\t// ModuleItem :\n\t\t// ImportDeclaration\n\t\t// ExportDeclaration\n\t\t// StatementListItem\n\n\t\tconst next = this.peek();\n\t\tif (next.isType(Token.EXPORT)) {\n\t\t\treturn this.parseExportDeclaration();\n\t\t}\n\t\tif (next.isType(Token.IMPORT)) {\n\t\t\t// We must be careful not to parse a dynamic import expression as an import\n\t\t\t// declaration. Same for import.meta expressions.\n\t\t\tconst peekAhead = this.peekAhead();\n\t\t\tif (peekAhead.isNotType(Token.LPAREN) && peekAhead.isNotType(Token.PERIOD)) {\n\t\t\t\treturn this.parseImportDeclaration();\n\t\t\t\t// return factory() -> EmptyStatement();\n\t\t\t}\n\t\t}\n\n\t\treturn this.parseStatementListItem();\n\t}\n\tprotected parseExportDeclaration(): ExpressionNode | undefined {\n\t\t// ExportDeclaration:\n\t\t// 'export' '*' 'from' ModuleSpecifier ';'\n\t\t// 'export' '*' 'from' ModuleSpecifier [no LineTerminator here]\n\t\t// AssertClause ';'\n\t\t// 'export' '*' 'as' IdentifierName 'from' ModuleSpecifier ';'\n\t\t// 'export' '*' 'as' IdentifierName 'from' ModuleSpecifier\n\t\t// [no LineTerminator here] AssertClause ';'\n\t\t// 'export' '*' 'as' ModuleExportName 'from' ModuleSpecifier ';'\n\t\t// 'export' '*' 'as' ModuleExportName 'from' ModuleSpecifier ';'\n\t\t// [no LineTerminator here] AssertClause ';'\n\t\t// 'export' ExportClause ('from' ModuleSpecifier)? ';'\n\t\t// 'export' ExportClause ('from' ModuleSpecifier [no LineTerminator here]\n\t\t// AssertClause)? ';'\n\t\t// 'export' VariableStatement\n\t\t// 'export' Declaration\n\t\t// 'export' 'default' ... (handled in ParseExportDefault)\n\t\t//\n\t\t// ModuleExportName :\n\t\t// StringLiteral\n\n\t\tthis.expect(Token.EXPORT);\n\t\tlet result: ExpressionNode | undefined;\n\t\tconst names: string[] = [];\n\n\t\t// Statement * result = nullptr;\n\t\t// ZonePtrList <const AstRawString> names(1, zone());\n\t\t// Scanner::Location loc = scanner() -> peek_location();\n\t\tswitch (this.peek().token) {\n\t\t\tcase Token.DEFAULT:\n\t\t\t\treturn this.parseExportDefault();\n\n\t\t\tcase Token.MUL:\n\t\t\t\treturn this.parseExportStar();\n\n\t\t\tcase Token.LBRACE: {\n\t\t\t\t// There are two cases here:\n\t\t\t\t//\n\t\t\t\t// 'export' ExportClause ';'\n\t\t\t\t// and\n\t\t\t\t// 'export' ExportClause FromClause ';'\n\t\t\t\t//\n\t\t\t\t// In the first case, the exported identifiers in ExportClause must\n\t\t\t\t// not be reserved words, while in the latter they may be. We\n\t\t\t\t// pass in a location that gets filled with the first reserved word\n\t\t\t\t// encountered, and then throw a SyntaxError if we are in the\n\t\t\t\t// non-FromClause case.\n\n\t\t\t\t// Scanner::Location reserved_loc = Scanner:: Location:: invalid();\n\t\t\t\t// Scanner::Location string_literal_local_name_loc =\n\t\t\t\t// Scanner:: Location:: invalid();\n\t\t\t\t// ZoneChunkList < ExportClauseData >* export_data =\n\t\t\t\t// ParseExportClause(& reserved_loc, & string_literal_local_name_loc);\n\n\t\t\t\tconst exportData = this.parseExportClause();\n\t\t\t\tlet moduleSpecifier: Literal<string> | undefined;\n\t\t\t\tlet importAssertions: ImportAttribute[] | undefined;\n\n\t\t\t\tif (this.checkContextualKeyword('from')) {\n\t\t\t\t\t// Scanner::Location specifier_loc = scanner() -> peek_location();\n\t\t\t\t\tmoduleSpecifier = this.parseModuleSpecifier();\n\t\t\t\t\timportAssertions = this.parseImportAssertClause();\n\t\t\t\t\tthis.expectSemicolon();\n\n\t\t\t\t\t// if (exportData.isEmpty()) {\n\t\t\t\t\t// \t// module() -> AddEmptyImport(module_specifier, import_assertions, specifier_loc, zone());\n\t\t\t\t\t// } else {\n\t\t\t\t\t// \t// for (const ExportClauseData& data : * export_data) {\n\t\t\t\t\t// \t// \tmodule() -> AddExport(data.local_name, data.export_name,\n\t\t\t\t\t// \t// \t\tmodule_specifier, import_assertions,\n\t\t\t\t\t// \t// \t\tdata.location, specifier_loc, zone());\n\t\t\t\t\t// \t// }\n\t\t\t\t\t// }\n\t\t\t\t} else {\n\t\t\t\t\t// if (reserved_loc.IsValid()) {\n\t\t\t\t\t// \t// No FromClause, so reserved words are invalid in ExportClause.\n\t\t\t\t\t// \tReportMessageAt(reserved_loc, MessageTemplate:: kUnexpectedReserved);\n\t\t\t\t\t// \treturn nullptr;\n\t\t\t\t\t// } else if (string_literal_local_name_loc.IsValid()) {\n\t\t\t\t\t// \tReportMessageAt(string_literal_local_name_loc,\n\t\t\t\t\t// \t\tMessageTemplate:: kModuleExportNameWithoutFromClause);\n\t\t\t\t\t// \treturn nullptr;\n\t\t\t\t\t// }\n\n\t\t\t\t\tthis.expectSemicolon();\n\n\t\t\t\t\t// for (const ExportClauseData& data : * export_data) {\n\t\t\t\t\t// \tmodule() -> AddExport(data.local_name, data.export_name, data.location,\n\t\t\t\t\t// \t\tzone());\n\t\t\t\t\t// }\n\t\t\t\t}\n\t\t\t\treturn new ExportNamedDeclaration(exportData, undefined, moduleSpecifier, importAssertions);\n\t\t\t\t// return factory() -> EmptyStatement();\n\t\t\t}\n\n\t\t\tcase Token.FUNCTION: {\n\t\t\t\tconst declaration = this.parseFunctionDeclaration();\n\t\t\t\tconst identifier = declaration.getId()!;\n\t\t\t\tresult = new ExportNamedDeclaration([new ExportSpecifier(identifier, identifier)], declaration);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase Token.CLASS: {\n\t\t\t\tthis.consume(Token.CLASS);\n\t\t\t\tconst declaration = this.parseClassDeclaration(names, false);\n\t\t\t\tconst identifier = declaration.getId()!;\n\t\t\t\tresult = new ExportNamedDeclaration([new ExportSpecifier(identifier, identifier)], declaration);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase Token.VAR:\n\t\t\tcase Token.LET:\n\t\t\tcase Token.CONST:\n\t\t\t\tconst declaration = this.parseVariableStatement(VariableDeclarationContext.StatementListItem, names);\n\t\t\t\tconst specifiers = declaration.getDeclarations()\n\t\t\t\t\t.map(node => new ExportSpecifier(node.getId() as Identifier, node.getId() as Identifier));\n\t\t\t\tresult = new ExportNamedDeclaration(specifiers, declaration);\n\t\t\t\tbreak;\n\n\t\t\tcase Token.ASYNC:\n\t\t\t\tthis.consume(Token.ASYNC);\n\t\t\t\tif (this.peek().isType(Token.FUNCTION) && !this.scanner.hasLineTerminatorBeforeNext()) {\n\t\t\t\t\tconst declaration = this.parseAsyncFunctionDeclaration(names, false);\n\t\t\t\t\tconst identifier = declaration.getId()!;\n\t\t\t\t\tresult = new ExportNamedDeclaration([new ExportSpecifier(identifier, identifier)], declaration);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\tdefault:\n\t\t\t\tthrow new SyntaxError(this.errorMessage('Unexpected Token'));\n\t\t}\n\t\t// loc.end_pos = scanner() -> location().end_pos;\n\n\t\t// SourceTextModuleDescriptor * descriptor = module();\n\t\t// for (const AstRawString* name : names) {\n\t\t// \tdescriptor -> AddExport(name, name, loc, zone());\n\t\t// }\n\n\t\treturn result;\n\t}\n\tprotected parseImportDeclaration(): ExpressionNode | undefined {\n\t\t// ImportDeclaration :\n\t\t// 'import' ImportClause 'from' ModuleSpecifier ';'\n\t\t// 'import' ModuleSpecifier ';'\n\t\t// 'import' ImportClause 'from' ModuleSpecifier [no LineTerminator here]\n\t\t// AssertClause ';'\n\t\t// 'import' ModuleSpecifier [no LineTerminator here] AssertClause';'\n\t\t//\n\t\t// ImportClause :\n\t\t// ImportedDefaultBinding\n\t\t// NameSpaceImport\n\t\t// NamedImports\n\t\t// ImportedDefaultBinding ',' NameSpaceImport\n\t\t// ImportedDefaultBinding ',' NamedImports\n\t\t//\n\t\t// NameSpaceImport :\n\t\t// '*' 'as' ImportedBinding\n\n\t\tthis.expect(Token.IMPORT);\n\n\t\tconst tok = this.peek();\n\n\t\t// 'import' ModuleSpecifier ';'\n\t\tif (tok.isType(Token.STRING)) {\n\t\t\t// Scanner::Location specifier_loc = scanner() -> peek_location();\n\t\t\tconst moduleSpecifier = this.parseModuleSpecifier();\n\t\t\tconst importAssertions = this.parseImportAssertClause();\n\t\t\tthis.expectSemicolon();\n\n\t\t\t// module() -> AddEmptyImport(module_specifier, import_assertions, specifier_loc,zone());\n\t\t\treturn new ImportDeclaration(moduleSpecifier, undefined, importAssertions);\n\t\t}\n\n\t\t// Parse ImportedDefaultBinding if present.\n\t\tlet importDefaultBinding: Identifier | undefined;\n\t\t// Scanner::Location import_default_binding_loc;\n\t\tif (tok.isNotType(Token.MUL) && tok.isNotType(Token.LBRACE)) {\n\t\t\timportDefaultBinding = this.parseNonRestrictedIdentifier();\n\t\t\t// DeclareUnboundVariable(import_default_binding, VariableMode:: kConst,kNeedsInitialization, pos);\n\t\t}\n\n\t\t// Parse NameSpaceImport or NamedImports if present.\n\t\tlet moduleNamespaceBinding: Identifier | undefined;\n\t\tlet namedImports: ModuleSpecifier[] | undefined;\n\t\t// Scanner::Location module_namespace_binding_loc;\n\t\t// const ZonePtrList<const NamedImport >* named_imports = nullptr;\n\t\tif (importDefaultBinding == undefined || this.check(Token.COMMA)) {\n\t\t\tswitch (this.peek().token) {\n\t\t\t\tcase Token.MUL: {\n\t\t\t\t\tthis.consume(Token.MUL);\n\t\t\t\t\tthis.expectContextualKeyword('as');\n\t\t\t\t\tmoduleNamespaceBinding = this.parseNonRestrictedIdentifier();\n\t\t\t\t\t// ExpectContextualKeyword(ast_value_factory() -> as_string());\n\t\t\t\t\t// module_namespace_binding = ParseNonRestrictedIdentifier();\n\t\t\t\t\t// module_namespace_binding_loc = scanner() -> location();\n\t\t\t\t\t// DeclareUnboundVariable(module_namespace_binding, VariableMode:: kConst, kCreatedInitialized, pos);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tcase Token.LBRACE:\n\t\t\t\t\tnamedImports = this.parseNamedImports();\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new SyntaxError(this.errorMessage('Unexpected Token'));\n\t\t\t}\n\t\t}\n\t\tthis.expectContextualKeyword('from');\n\t\t// ExpectContextualKeyword(ast_value_factory() -> from_string());\n\t\t// Scanner::Location specifier_loc = scanner() -> peek_location();\n\t\tconst moduleSpecifier = this.parseModuleSpecifier();\n\t\tconst importAssertions = this.parseImportAssertClause();\n\t\tthis.expectSemicolon();\n\n\t\t// Now that we have all the information, we can make the appropriate\n\t\t// declarations.\n\n\t\t// TODO(neis): Would prefer to call DeclareVariable for each case below rather\n\t\t// than above and in ParseNamedImports, but then a possible error message\n\t\t// would point to the wrong location. Maybe have a DeclareAt version of\n\t\t// Declare that takes a location?\n\n\t\tconst specifiers: ModuleSpecifier[] = [];\n\t\tif (moduleNamespaceBinding) {\n\t\t\tspecifiers.push(new ImportNamespaceSpecifier(moduleNamespaceBinding));\n\t\t}\n\t\tif (importDefaultBinding) {\n\t\t\tspecifiers.push(new ImportDefaultSpecifier(importDefaultBinding));\n\t\t}\n\t\tif (namedImports?.length) {\n\t\t\tspecifiers.push(...namedImports);\n\t\t}\n\t\treturn new ImportDeclaration(moduleSpecifier, specifiers.length ? specifiers : undefined, importAssertions);\n\t}\n\tprotected parseImportExpressions(): ExpressionNode {\n\t\tthis.consume(Token.IMPORT);\n\t\tif (this.check(Token.PERIOD)) {\n\t\t\tthis.expectContextualKeyword('meta');\n\t\t\treturn MetaProperty.ImportMeta;\n\t\t}\n\n\t\tif (this.peek().isNotType(Token.LPAREN)) {\n\t\t\tthrow new SyntaxError(this.errorMessage('Unexpected Token'));\n\t\t}\n\n\t\tthis.consume(Token.LPAREN);\n\t\tif (this.peek().isType(Token.RPAREN)) {\n\t\t\tthrow new SyntaxError(this.errorMessage('Import Missing Specifier'));\n\t\t}\n\t\tthis.setAcceptIN(true);\n\t\tconst specifier = this.parseAssignmentExpressionCoverGrammar();\n\n\t\tif (this.check(Token.COMMA)) {\n\t\t\tif (this.check(Token.RPAREN)) {\n\t\t\t\t// A trailing comma allowed after the specifier.\n\t\t\t\treturn new ImportExpression(specifier as Literal<string>);\n\t\t\t} else {\n\t\t\t\tconst importAssertions = this.parseAssignmentExpressionCoverGrammar();\n\t\t\t\tthis.check(Token.COMMA); // A trailing comma is allowed after the import\n\t\t\t\t// assertions.\n\t\t\t\tthis.expect(Token.RPAREN);\n\t\t\t\treturn new ImportExpression(specifier as Literal<string>, importAssertions);\n\t\t\t}\n\t\t}\n\n\t\tthis.expect(Token.RPAREN);\n\t\tthis.restoreAcceptIN();\n\t\treturn new ImportExpression(specifier as Literal<string>);\n\t}\n\tprotected parseVariableStatement(varContext: VariableDeclarationContext, names: string[]) {\n\t\t// VariableStatement ::\n\t\t// VariableDeclarations ';'\n\n\t\t// The scope of a var declared variable anywhere inside a function\n\t\t// is the entire function (ECMA-262, 3rd, 10.1.3, and 12.2). Thus we can\n\t\t// transform a source-level var declaration into a (Function) Scope\n\t\t// declaration, and rewrite the source-level initialization into an assignment\n\t\t// statement. We use a block to collect multiple assignments.\n\t\t//\n\t\t// We mark the block as initializer block because we don't want the\n\t\t// rewriter to add a '.result' assignment to such a block (to get compliant\n\t\t// behavior for code such as print(eval('var x = 7')), and for cosmetic\n\t\t// reasons when pretty-printing. Also, unless an assignment (initialization)\n\t\t// is inside an initializer block, it is ignored.\n\t\tconst declarations = this.parseVariableDeclarations(varContext);\n\t\tthis.expectSemicolon();\n\t\tnames.push(...declarations.getDeclarations().map(d => d.getId().toString()));\n\t\treturn declarations;\n\t}\n\tprotected parseImportAssertClause(): ImportAttribute[] | undefined {\n\t\t// AssertClause :\n\t\t// assert '{' '}'\n\t\t// assert '{' AssertEntries '}'\n\n\t\t// AssertEntries :\n\t\t// IdentifierName: AssertionKey\n\t\t// IdentifierName: AssertionKey , AssertEntries\n\n\t\t// AssertionKey :\n\t\t// IdentifierName\n\t\t// StringLiteral\n\n\t\t// auto import_assertions = zone() -> New<ImportAssertions>(zone());\n\n\t\t// if (!FLAG_harmony_import_assertions) {\n\t\t// \treturn import_assertions;\n\t\t// }\n\n\t\t// Assert clause is optional, and cannot be preceded by a LineTerminator.\n\t\tif (this.scanner.hasLineTerminatorBeforeNext() || !this.checkContextualKeyword('assert')) {\n\t\t\treturn undefined;\n\t\t}\n\t\tthis.expect(Token.LBRACE);\n\t\tconst counts = {} as { [key: string]: number };\n\t\tconst importAssertions: ImportAttribute[] = [];\n\t\twhile (this.peek().isNotType(Token.RBRACE)) {\n\t\t\tlet attributeKey = this.checkAndGetValue(Token.STRING);\n\t\t\tif (!attributeKey) {\n\t\t\t\tattributeKey = this.parsePropertyOrPrivatePropertyName();\n\t\t\t}\n\t\t\tthis.expect(Token.COLON);\n\t\t\tconst attributeValue = this.expectAndGetValue(Token.STRING);\n\t\t\timportAssertions.push(new ImportAttribute(attributeKey as Identifier, attributeValue as Literal<string>));\n\t\t\tcounts[attributeKey.toString()] = (counts[attributeKey.toString()] ?? 0) + 1;\n\t\t\tif (counts[attributeKey.toString()] > 1) {\n\t\t\t\t// \t// It is a syntax error if two AssertEntries have the same key.\n\t\t\t\tthrow new SyntaxError(this.errorMessage('Import Assertion Duplicate Key'));\n\t\t\t}\n\n\t\t\tif (this.peek().isType(Token.RBRACE)) break;\n\t\t\tif (!this.check(Token.COMMA)) {\n\t\t\t\tthrow new SyntaxError('Unexpected Token');\n\t\t\t}\n\t\t}\n\t\tthis.expect(Token.RBRACE);\n\t\treturn importAssertions;\n\t}\n\tprotected parseModuleSpecifier(): Literal<string> {\n\t\t// ModuleSpecifier :\n\t\t// StringLiteral\n\n\t\treturn this.expectAndGetValue(Token.STRING) as Literal<string>;\n\t}\n\tprotected parseExportClause() {\n\t\t// ExportClause :\n\t\t// '{' '}'\n\t\t// '{' ExportsList '}'\n\t\t// '{' ExportsList ',' '}'\n\t\t//\n\t\t// ExportsList :\n\t\t// ExportSpecifier\n\t\t// ExportsList ',' ExportSpecifier\n\t\t//\n\t\t// ExportSpecifier :\n\t\t// IdentifierName\n\t\t// IdentifierName 'as' IdentifierName\n\t\t// IdentifierName 'as' ModuleExportName\n\t\t// ModuleExportName\n\t\t// ModuleExportName 'as' ModuleExportName\n\t\t//\n\t\t// ModuleExportName :\n\t\t// StringLiteral\n\t\t// ZoneChunkList < ExportClauseData >* export_data = zone() -> New<ZoneChunkList<ExportClauseData>>(zone());\n\n\t\tthis.expect(Token.LBRACE);\n\n\t\tconst exportData: ExportSpecifier[] = [];\n\t\tlet nameTok = this.peek();\n\t\twhile (nameTok.isNotType(Token.RBRACE)) {\n\t\t\tconst localName = this.parseExportSpecifierName();\n\t\t\tlet exportName;\n\t\t\tif (this.checkContextualKeyword('as')) {\n\t\t\t\texportName = this.parseExportSpecifierName();\n\t\t\t} else {\n\t\t\t\texportName = localName;\n\t\t\t}\n\t\t\texportData.push(new ExportSpecifier(exportName as Identifier, localName as Identifier));\n\t\t\tif (this.peek().isType(Token.RBRACE)) break;\n\t\t\tif (!this.check(Token.COMMA)) {\n\t\t\t\tthrow new SyntaxError('Unexpected Token');\n\t\t\t}\n\t\t}\n\t\tthis.expect(Token.RBRACE);\n\t\treturn exportData;\n\t}\n\tprotected parseExportSpecifierName() {\n\t\tconst next = this.next();\n\n\t\t// IdentifierName\n\t\tif (next.isType(Token.IDENTIFIER) || Token.isPropertyName(next.token)) {\n\t\t\treturn next.getValue() as Identifier;\n\t\t}\n\n\t\t// ModuleExportName\n\t\tif (next.isType(Token.STRING)) {\n\t\t\tconst exportName = next.getValue() as Literal<string>;\n\t\t\treturn exportName;\n\t\t}\n\t\tthrow new SyntaxError(this.errorMessage('Unexpected Token'));\n\t}\n\tprotected parseNamedImports(): ImportSpecifier[] {\n\t\t// NamedImports :\n\t\t// '{' '}'\n\t\t// '{' ImportsList '}'\n\t\t// '{' ImportsList ',' '}'\n\t\t//\n\t\t// ImportsList :\n\t\t// ImportSpecifier\n\t\t// ImportsList ',' ImportSpecifier\n\t\t//\n\t\t// ImportSpecifier :\n\t\t// BindingIdentifier\n\t\t// IdentifierName 'as' BindingIdentifier\n\t\t// ModuleExportName 'as' BindingIdentifier\n\n\t\tthis.expect(Token.LBRACE);\n\t\tconst result: ImportSpecifier[] = [];\n\n\t\t// auto result = zone() -> New < ZonePtrList <const NamedImport>> (1, zone());\n\t\twhile (this.peek().isNotType(Token.RBRACE)) {\n\t\t\tconst importName = this.parseExportSpecifierName() as Identifier;\n\t\t\tlet localName = importName;\n\t\t\t// In the presence of 'as', the left-side of the 'as' can\n\t\t\t// be any IdentifierName. But without 'as', it must be a valid\n\t\t\t// BindingIdentifier.\n\t\t\tif (this.checkContextualKeyword('as')) {\n\t\t\t\tlocalName = this.parsePropertyOrPrivatePropertyName() as Identifier;\n\t\t\t}\n\t\t\tif (!Token.isValidIdentifier(this.current().token, LanguageMode.Strict, false, isStrict(this.languageMode))) {\n\t\t\t\tthrow new SyntaxError(this.errorMessage('Unexpected Reserved Keyword'));\n\t\t\t} else if (this.isEvalOrArguments(localName)) {\n\t\t\t\tthrow new SyntaxError(this.errorMessage('Strict Eval Arguments'));\n\t\t\t}\n\n\t\t\tresult.push(new ImportSpecifier(localName, importName));\n\n\t\t\t// DeclareUnboundVariable(localName, VariableMode:: kConst, kNeedsInitialization, position());\n\n\t\t\t// NamedImport * import = zone() -> New<NamedImport>(import_name, local_name, location);\n\t\t\t// result-> Add(import, zone());\n\n\t\t\tif (this.peek().isType(Token.RBRACE)) break;\n\t\t\tthis.expect(Token.COMMA);\n\t\t}\n\n\t\tthis.expect(Token.RBRACE);\n\t\treturn result;\n\t}\n\n\tprotected parseExportDefault(): ExportDefaultDeclaration {\n\t\t// Supports the following productions, starting after the 'default' token:\n\t\t// 'export' 'default' HoistableDeclaration\n\t\t// 'export' 'default' ClassDeclaration\n\t\t// 'export' 'default' AssignmentExpression[In] ';'\n\n\t\tthis.expect(Token.DEFAULT);\n\t\t// Scanner::Location default_loc = scanner() -> location();\n\n\t\t// ZonePtrList <const AstRawString> localNames(1, zone());\n\t\tconst localNames: string[] = [];\n\t\tlet result: ExpressionNode;\n\t\tswitch (this.peek().token) {\n\t\t\tcase Token.FUNCTION:\n\t\t\t\tresult = this.parseHoistableDeclaration(localNames, true);\n\t\t\t\tbreak;\n\n\t\t\tcase Token.CLASS:\n\t\t\t\tthis.consume(Token.CLASS);\n\t\t\t\tresult = this.parseClassDeclaration(localNames, true);\n\t\t\t\tbreak;\n\n\t\t\tcase Token.ASYNC:\n\t\t\t\tif (this.peekAhead().isType(Token.FUNCTION) && !this.scanner.hasLineTerminatorBeforeNext()) {\n\t\t\t\t\tthis.consume(Token.ASYNC);\n\t\t\t\t\tresult = this.parseHoistableDeclaration(localNames, true);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\tdefault: {\n\t\t\t\t// int pos = position();\n\t\t\t\t// AcceptINScope scope(this, true);\n\t\t\t\tthis.setAcceptIN(true);\n\t\t\t\tresult = this.parseAssignmentExpression();\n\t\t\t\t// SetFunctionName(value, ast_value_factory() -> default_string());\n\n\t\t\t\t// const AstRawString* local_name = ast_value_factory() -> dot_default_string();\n\t\t\t\t// localNames.Add(local_name, zone());\n\n\t\t\t\t// It's fine to declare this as VariableMode::kConst because the user has\n\t\t\t\t// no way of writing to it.\n\t\t\t\t// VariableProxy * proxy = DeclareBoundVariable(local_name, VariableMode:: kConst, pos);\n\t\t\t\t// proxy ->var() -> set_initializer_position(position());\n\n\t\t\t\t// Assignment * assignment = factory() -> NewAssignment(Token.INIT, proxy, value, kNoSourcePosition);\n\t\t\t\t// result = IgnoreCompletion( factory() -> NewExpressionStatement(assignment, kNoSourcePosition));\n\n\t\t\t\tthis.expectSemicolon();\n\t\t\t\tthis.restoreAcceptIN();\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t// if (!result) {\n\t\t// \tDCHECK_EQ(localNames.length(), 1);\n\t\t// \tmodule() -> AddExport(localNames.first(), ast_value_factory() -> default_string(), default_loc, zone());\n\t\t// }\n\n\t\treturn new ExportDefaultDeclaration(result);\n\t}\n\tprotected parseExportStar(): ExpressionNode | undefined {\n\t\tthis.consume(Token.MUL);\n\n\t\tif (!this.peekContextualKeyword('as')) {\n\t\t\t// 'export' '*' 'from' ModuleSpecifier ';'\n\t\t\t// Scanner::Location loc = scanner() -> location();\n\t\t\tthis.expectContextualKeyword('from');\n\t\t\t// Scanner::Location specifier_loc = scanner() -> peek_location();\n\t\t\tconst moduleSpecifier = this.parseModuleSpecifier();\n\t\t\tconst importAssertions = this.parseImportAssertClause();\n\t\t\tthis.expectSemicolon();\n\t\t\t// module() -> AddStarExport(module_specifier, import_assertions, loc,specifier_loc, zone());\n\t\t\treturn new ExportAllDeclaration(moduleSpecifier, undefined, importAssertions);\n\t\t}\n\n\t\t// 'export' '*' 'as' IdentifierName 'from' ModuleSpecifier ';'\n\t\t//\n\t\t// Desugaring:\n\t\t// export * as x from \"...\";\n\t\t// ~>\n\t\t// import * as .x from \"...\"; export {.x as x};\n\t\t//\n\t\t// Note that the desugared internal namespace export name (.x above) will\n\t\t// never conflict with a string literal export name, as literal string export\n\t\t// names in local name positions (i.e. left of 'as' or in a clause without\n\t\t// 'as') are disallowed without a following 'from' clause.\n\n\t\tthis.expectContextualKeyword('as');\n\t\tconst exportName = this.parseExportSpecifierName();\n\t\t// Scanner::Location export_name_loc = scanner() -> location();\n\t\t// const localName = this.nextInternalNamespaceExportName();\n\t\t// Scanner::Location local_name_loc = Scanner:: Location:: invalid();\n\t\t// DeclareUnboundVariable(local_name, VariableMode:: kConst, kCreatedInitialized,pos);\n\n\t\tthis.expectContextualKeyword('from');\n\t\tconst moduleSpecifier = this.parseModuleSpecifier();\n\t\tconst importAssertions = this.parseImportAssertClause();\n\t\tthis.expectSemicolon();\n\n\t\t// const specifiers = [new ExportSpecifier(exportName as Identifier, exportName as Identifier)];\n\n\t\t// module() -> AddStarImport(local_name, module_specifier, import_assertions,local_name_loc, specifier_loc, zone());\n\t\t// module() -> AddExport(local_name, export_name, export_name_loc, zone());\n\t\treturn new ExportAllDeclaration(moduleSpecifier, exportName as Identifier, importAssertions);\n\t}\n}\n"]}
|
|
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"]}
|
package/v8/stream.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ExpressionNode } from '../api/expression.js';
|
|
2
2
|
import { Token, TokenExpression } from './token.js';
|
|
3
|
-
import { LanguageMode } from './
|
|
3
|
+
import { LanguageMode } from './language.js';
|
|
4
4
|
export declare const IdentifierRegex: RegExp;
|
|
5
5
|
export declare const IdentifierStartRegex: RegExp;
|
|
6
6
|
export declare const IdentifierPartRegex: RegExp;
|
package/v8/stream.js
CHANGED
|
@@ -2,7 +2,7 @@ import { Token, TokenExpression } from './token.js';
|
|
|
2
2
|
import { GlobalThisNode, OfNode, Identifier, SymbolNode, AsNode, Literal, ThisNode, NullNode, UndefinedNode, TrueNode, FalseNode, DefaultNode, YieldIdentifier, ConstructorIdentifier, ArgumentsIdentifier, NameIdentifier, EvalIdentifier, SuperIdentifier, LetIdentifier, SetIdentifier, GetIdentifier, AwaitIdentifier, AsyncIdentifier } from '../api/definition/values.js';
|
|
3
3
|
import { PrivateIdentifier } from '../api/class/class.js';
|
|
4
4
|
import { DebuggerStatement } from '../api/computing/debugger.js';
|
|
5
|
-
import { isStrict, LanguageMode } from './
|
|
5
|
+
import { isStrict, LanguageMode } from './language.js';
|
|
6
6
|
const FORBIDDEN_CODE_POINT = ['200b', '200c', '200d', 'feff'];
|
|
7
7
|
export const IdentifierRegex = /^[_A-Za-z\u00A1-\uFFFF][_A-Za-z0-9\u00A1-\uFFFF]*/;
|
|
8
8
|
export const IdentifierStartRegex = /[_$a-zA-Z\xA0-\uFFFF]/;
|