mirror of
https://github.com/crazy-max/ghaction-upx.git
synced 2024-11-23 02:46:09 -07:00
1 line
884 KiB
Plaintext
1 line
884 KiB
Plaintext
{"version":3,"file":"index.js","sources":["../src/tokenizer/types.js","../src/util/scopeflags.js","../src/plugins/estree.js","../src/util/whitespace.js","../src/tokenizer/context.js","../src/util/identifier.js","../src/plugins/flow.js","../src/plugins/jsx/xhtml.js","../src/plugins/jsx/index.js","../src/util/scope.js","../src/plugins/typescript/scope.js","../src/plugins/typescript/index.js","../src/plugins/placeholders.js","../src/plugins/v8intrinsic.js","../src/plugin-utils.js","../src/options.js","../src/util/location.js","../src/parser/base.js","../src/parser/comments.js","../src/parser/location.js","../src/tokenizer/state.js","../src/tokenizer/index.js","../src/parser/util.js","../src/parser/node.js","../src/parser/lval.js","../src/parser/expression.js","../src/parser/statement.js","../src/util/class-scope.js","../src/parser/index.js","../src/index.js"],"sourcesContent":["// @flow\n\n// ## Token types\n\n// The assignment of fine-grained, information-carrying type objects\n// allows the tokenizer to store the information it has about a\n// token in a way that is very cheap for the parser to look up.\n\n// All token type variables start with an underscore, to make them\n// easy to recognize.\n\n// The `beforeExpr` property is used to disambiguate between regular\n// expressions and divisions. It is set on all token types that can\n// be followed by an expression (thus, a slash after them would be a\n// regular expression).\n\n// The `startsExpr` property is used to determine whether an expression\n// may be the “argument” subexpression of a `yield` expression or\n// `yield` statement. It is set on all token types that may be at the\n// start of a subexpression.\n\n// `isLoop` marks a keyword as starting a loop, which is important\n// to know when parsing a label, in order to allow or disallow\n// continue jumps to that label.\n\nconst beforeExpr = true;\nconst startsExpr = true;\nconst isLoop = true;\nconst isAssign = true;\nconst prefix = true;\nconst postfix = true;\n\ntype TokenOptions = {\n keyword?: string,\n beforeExpr?: boolean,\n startsExpr?: boolean,\n rightAssociative?: boolean,\n isLoop?: boolean,\n isAssign?: boolean,\n prefix?: boolean,\n postfix?: boolean,\n binop?: ?number,\n};\n\nexport class TokenType {\n label: string;\n keyword: ?string;\n beforeExpr: boolean;\n startsExpr: boolean;\n rightAssociative: boolean;\n isLoop: boolean;\n isAssign: boolean;\n prefix: boolean;\n postfix: boolean;\n binop: ?number;\n updateContext: ?(prevType: TokenType) => void;\n\n constructor(label: string, conf: TokenOptions = {}) {\n this.label = label;\n this.keyword = conf.keyword;\n this.beforeExpr = !!conf.beforeExpr;\n this.startsExpr = !!conf.startsExpr;\n this.rightAssociative = !!conf.rightAssociative;\n this.isLoop = !!conf.isLoop;\n this.isAssign = !!conf.isAssign;\n this.prefix = !!conf.prefix;\n this.postfix = !!conf.postfix;\n this.binop = conf.binop != null ? conf.binop : null;\n this.updateContext = null;\n }\n}\n\nexport const keywords = new Map<string, TokenType>();\n\nfunction createKeyword(name: string, options: TokenOptions = {}): TokenType {\n options.keyword = name;\n const token = new TokenType(name, options);\n keywords.set(name, token);\n return token;\n}\n\nfunction createBinop(name: string, binop: number) {\n return new TokenType(name, { beforeExpr, binop });\n}\n\nexport const types: { [name: string]: TokenType } = {\n num: new TokenType(\"num\", { startsExpr }),\n bigint: new TokenType(\"bigint\", { startsExpr }),\n regexp: new TokenType(\"regexp\", { startsExpr }),\n string: new TokenType(\"string\", { startsExpr }),\n name: new TokenType(\"name\", { startsExpr }),\n eof: new TokenType(\"eof\"),\n\n // Punctuation token types.\n bracketL: new TokenType(\"[\", { beforeExpr, startsExpr }),\n bracketR: new TokenType(\"]\"),\n braceL: new TokenType(\"{\", { beforeExpr, startsExpr }),\n braceBarL: new TokenType(\"{|\", { beforeExpr, startsExpr }),\n braceR: new TokenType(\"}\"),\n braceBarR: new TokenType(\"|}\"),\n parenL: new TokenType(\"(\", { beforeExpr, startsExpr }),\n parenR: new TokenType(\")\"),\n comma: new TokenType(\",\", { beforeExpr }),\n semi: new TokenType(\";\", { beforeExpr }),\n colon: new TokenType(\":\", { beforeExpr }),\n doubleColon: new TokenType(\"::\", { beforeExpr }),\n dot: new TokenType(\".\"),\n question: new TokenType(\"?\", { beforeExpr }),\n questionDot: new TokenType(\"?.\"),\n arrow: new TokenType(\"=>\", { beforeExpr }),\n template: new TokenType(\"template\"),\n ellipsis: new TokenType(\"...\", { beforeExpr }),\n backQuote: new TokenType(\"`\", { startsExpr }),\n dollarBraceL: new TokenType(\"${\", { beforeExpr, startsExpr }),\n at: new TokenType(\"@\"),\n hash: new TokenType(\"#\", { startsExpr }),\n\n // Special hashbang token.\n interpreterDirective: new TokenType(\"#!...\"),\n\n // Operators. These carry several kinds of properties to help the\n // parser use them properly (the presence of these properties is\n // what categorizes them as operators).\n //\n // `binop`, when present, specifies that this operator is a binary\n // operator, and will refer to its precedence.\n //\n // `prefix` and `postfix` mark the operator as a prefix or postfix\n // unary operator.\n //\n // `isAssign` marks all of `=`, `+=`, `-=` etcetera, which act as\n // binary operators with a very low precedence, that should result\n // in AssignmentExpression nodes.\n\n eq: new TokenType(\"=\", { beforeExpr, isAssign }),\n assign: new TokenType(\"_=\", { beforeExpr, isAssign }),\n incDec: new TokenType(\"++/--\", { prefix, postfix, startsExpr }),\n bang: new TokenType(\"!\", { beforeExpr, prefix, startsExpr }),\n tilde: new TokenType(\"~\", { beforeExpr, prefix, startsExpr }),\n pipeline: createBinop(\"|>\", 0),\n nullishCoalescing: createBinop(\"??\", 1),\n logicalOR: createBinop(\"||\", 2),\n logicalAND: createBinop(\"&&\", 3),\n bitwiseOR: createBinop(\"|\", 4),\n bitwiseXOR: createBinop(\"^\", 5),\n bitwiseAND: createBinop(\"&\", 6),\n equality: createBinop(\"==/!=/===/!==\", 7),\n relational: createBinop(\"</>/<=/>=\", 8),\n bitShift: createBinop(\"<</>>/>>>\", 9),\n plusMin: new TokenType(\"+/-\", { beforeExpr, binop: 10, prefix, startsExpr }),\n // startsExpr: required by v8intrinsic plugin\n modulo: new TokenType(\"%\", { beforeExpr, binop: 11, startsExpr }),\n star: createBinop(\"*\", 11),\n slash: createBinop(\"/\", 11),\n exponent: new TokenType(\"**\", {\n beforeExpr,\n binop: 12,\n rightAssociative: true,\n }),\n\n // Keywords\n _break: createKeyword(\"break\"),\n _case: createKeyword(\"case\", { beforeExpr }),\n _catch: createKeyword(\"catch\"),\n _continue: createKeyword(\"continue\"),\n _debugger: createKeyword(\"debugger\"),\n _default: createKeyword(\"default\", { beforeExpr }),\n _do: createKeyword(\"do\", { isLoop, beforeExpr }),\n _else: createKeyword(\"else\", { beforeExpr }),\n _finally: createKeyword(\"finally\"),\n _for: createKeyword(\"for\", { isLoop }),\n _function: createKeyword(\"function\", { startsExpr }),\n _if: createKeyword(\"if\"),\n _return: createKeyword(\"return\", { beforeExpr }),\n _switch: createKeyword(\"switch\"),\n _throw: createKeyword(\"throw\", { beforeExpr, prefix, startsExpr }),\n _try: createKeyword(\"try\"),\n _var: createKeyword(\"var\"),\n _const: createKeyword(\"const\"),\n _while: createKeyword(\"while\", { isLoop }),\n _with: createKeyword(\"with\"),\n _new: createKeyword(\"new\", { beforeExpr, startsExpr }),\n _this: createKeyword(\"this\", { startsExpr }),\n _super: createKeyword(\"super\", { startsExpr }),\n _class: createKeyword(\"class\", { startsExpr }),\n _extends: createKeyword(\"extends\", { beforeExpr }),\n _export: createKeyword(\"export\"),\n _import: createKeyword(\"import\", { startsExpr }),\n _null: createKeyword(\"null\", { startsExpr }),\n _true: createKeyword(\"true\", { startsExpr }),\n _false: createKeyword(\"false\", { startsExpr }),\n _in: createKeyword(\"in\", { beforeExpr, binop: 8 }),\n _instanceof: createKeyword(\"instanceof\", { beforeExpr, binop: 8 }),\n _typeof: createKeyword(\"typeof\", { beforeExpr, prefix, startsExpr }),\n _void: createKeyword(\"void\", { beforeExpr, prefix, startsExpr }),\n _delete: createKeyword(\"delete\", { beforeExpr, prefix, startsExpr }),\n};\n","// @flow\n\n// Each scope gets a bitset that may contain these flags\n// prettier-ignore\nexport const SCOPE_OTHER = 0b0000000000,\n SCOPE_PROGRAM = 0b0000000001,\n SCOPE_FUNCTION = 0b0000000010,\n SCOPE_ASYNC = 0b0000000100,\n SCOPE_GENERATOR = 0b0000001000,\n SCOPE_ARROW = 0b0000010000,\n SCOPE_SIMPLE_CATCH = 0b0000100000,\n SCOPE_SUPER = 0b0001000000,\n SCOPE_DIRECT_SUPER = 0b0010000000,\n SCOPE_CLASS = 0b0100000000,\n SCOPE_TS_MODULE = 0b1000000000,\n SCOPE_VAR = SCOPE_PROGRAM | SCOPE_FUNCTION | SCOPE_TS_MODULE;\n\nexport type ScopeFlags =\n | typeof SCOPE_OTHER\n | typeof SCOPE_PROGRAM\n | typeof SCOPE_FUNCTION\n | typeof SCOPE_VAR\n | typeof SCOPE_ASYNC\n | typeof SCOPE_GENERATOR\n | typeof SCOPE_ARROW\n | typeof SCOPE_SIMPLE_CATCH\n | typeof SCOPE_SUPER\n | typeof SCOPE_DIRECT_SUPER\n | typeof SCOPE_CLASS;\n\nexport function functionFlags(isAsync: boolean, isGenerator: boolean) {\n return (\n SCOPE_FUNCTION |\n (isAsync ? SCOPE_ASYNC : 0) |\n (isGenerator ? SCOPE_GENERATOR : 0)\n );\n}\n\n// These flags are meant to be _only_ used inside the Scope class (or subclasses).\n// prettier-ignore\nexport const BIND_KIND_VALUE = 0b00000_0000_01,\n BIND_KIND_TYPE = 0b00000_0000_10,\n // Used in checkLVal and declareName to determine the type of a binding\n BIND_SCOPE_VAR = 0b00000_0001_00, // Var-style binding\n BIND_SCOPE_LEXICAL = 0b00000_0010_00, // Let- or const-style binding\n BIND_SCOPE_FUNCTION = 0b00000_0100_00, // Function declaration\n BIND_SCOPE_OUTSIDE = 0b00000_1000_00, // Special case for function names as\n // bound inside the function\n // Misc flags\n BIND_FLAGS_NONE = 0b00001_0000_00,\n BIND_FLAGS_CLASS = 0b00010_0000_00,\n BIND_FLAGS_TS_ENUM = 0b00100_0000_00,\n BIND_FLAGS_TS_CONST_ENUM = 0b01000_0000_00,\n BIND_FLAGS_TS_EXPORT_ONLY = 0b10000_0000_00;\n\n// These flags are meant to be _only_ used by Scope consumers\n// prettier-ignore\n/* = is value? | is type? | scope | misc flags */\nexport const BIND_CLASS = BIND_KIND_VALUE | BIND_KIND_TYPE | BIND_SCOPE_LEXICAL | BIND_FLAGS_CLASS ,\n BIND_LEXICAL = BIND_KIND_VALUE | 0 | BIND_SCOPE_LEXICAL | 0 ,\n BIND_VAR = BIND_KIND_VALUE | 0 | BIND_SCOPE_VAR | 0 ,\n BIND_FUNCTION = BIND_KIND_VALUE | 0 | BIND_SCOPE_FUNCTION | 0 ,\n BIND_TS_INTERFACE = 0 | BIND_KIND_TYPE | 0 | BIND_FLAGS_CLASS ,\n BIND_TS_TYPE = 0 | BIND_KIND_TYPE | 0 | 0 ,\n BIND_TS_ENUM = BIND_KIND_VALUE | BIND_KIND_TYPE | BIND_SCOPE_LEXICAL | BIND_FLAGS_TS_ENUM,\n BIND_TS_AMBIENT = 0 | 0 | 0 | BIND_FLAGS_TS_EXPORT_ONLY,\n // These bindings don't introduce anything in the scope. They are used for assignments and\n // function expressions IDs.\n BIND_NONE = 0 | 0 | 0 | BIND_FLAGS_NONE ,\n BIND_OUTSIDE = BIND_KIND_VALUE | 0 | 0 | BIND_FLAGS_NONE ,\n\n BIND_TS_CONST_ENUM = BIND_TS_ENUM | BIND_FLAGS_TS_CONST_ENUM,\n BIND_TS_NAMESPACE = 0 | 0 | 0 | BIND_FLAGS_TS_EXPORT_ONLY;\n\nexport type BindingTypes =\n | typeof BIND_NONE\n | typeof BIND_OUTSIDE\n | typeof BIND_VAR\n | typeof BIND_LEXICAL\n | typeof BIND_CLASS\n | typeof BIND_FUNCTION\n | typeof BIND_TS_INTERFACE\n | typeof BIND_TS_TYPE\n | typeof BIND_TS_ENUM\n | typeof BIND_TS_AMBIENT\n | typeof BIND_TS_NAMESPACE;\n\n// prettier-ignore\nexport const CLASS_ELEMENT_FLAG_STATIC = 0b1_00,\n CLASS_ELEMENT_KIND_GETTER = 0b0_10,\n CLASS_ELEMENT_KIND_SETTER = 0b0_01,\n CLASS_ELEMENT_KIND_ACCESSOR = CLASS_ELEMENT_KIND_GETTER | CLASS_ELEMENT_KIND_SETTER;\n\n// prettier-ignore\nexport const CLASS_ELEMENT_STATIC_GETTER = CLASS_ELEMENT_KIND_GETTER | CLASS_ELEMENT_FLAG_STATIC,\n CLASS_ELEMENT_STATIC_SETTER = CLASS_ELEMENT_KIND_SETTER | CLASS_ELEMENT_FLAG_STATIC,\n CLASS_ELEMENT_INSTANCE_GETTER = CLASS_ELEMENT_KIND_GETTER,\n CLASS_ELEMENT_INSTANCE_SETTER = CLASS_ELEMENT_KIND_SETTER,\n CLASS_ELEMENT_OTHER = 0;\n\nexport type ClassElementTypes =\n | typeof CLASS_ELEMENT_STATIC_GETTER\n | typeof CLASS_ELEMENT_STATIC_SETTER\n | typeof CLASS_ELEMENT_INSTANCE_GETTER\n | typeof CLASS_ELEMENT_INSTANCE_SETTER\n | typeof CLASS_ELEMENT_OTHER;\n","// @flow\n\n/* global BigInt */\n\nimport { types as tt, TokenType } from \"../tokenizer/types\";\nimport type Parser from \"../parser\";\nimport * as N from \"../types\";\nimport type { Pos, Position } from \"../util/location\";\nimport { type BindingTypes, BIND_NONE } from \"../util/scopeflags\";\n\nfunction isSimpleProperty(node: N.Node): boolean {\n return (\n node != null &&\n node.type === \"Property\" &&\n node.kind === \"init\" &&\n node.method === false\n );\n}\n\nexport default (superClass: Class<Parser>): Class<Parser> =>\n class extends superClass {\n estreeParseRegExpLiteral({ pattern, flags }: N.RegExpLiteral): N.Node {\n let regex = null;\n try {\n regex = new RegExp(pattern, flags);\n } catch (e) {\n // In environments that don't support these flags value will\n // be null as the regex can't be represented natively.\n }\n const node = this.estreeParseLiteral(regex);\n node.regex = { pattern, flags };\n\n return node;\n }\n\n estreeParseBigIntLiteral(value: any): N.Node {\n // https://github.com/estree/estree/blob/master/es2020.md#bigintliteral\n // $FlowIgnore\n const bigInt = typeof BigInt !== \"undefined\" ? BigInt(value) : null;\n const node = this.estreeParseLiteral(bigInt);\n node.bigint = String(node.value || value);\n\n return node;\n }\n\n estreeParseLiteral(value: any): N.Node {\n return this.parseLiteral(value, \"Literal\");\n }\n\n directiveToStmt(directive: N.Directive): N.ExpressionStatement {\n const directiveLiteral = directive.value;\n\n const stmt = this.startNodeAt(directive.start, directive.loc.start);\n const expression = this.startNodeAt(\n directiveLiteral.start,\n directiveLiteral.loc.start,\n );\n\n expression.value = directiveLiteral.value;\n expression.raw = directiveLiteral.extra.raw;\n\n stmt.expression = this.finishNodeAt(\n expression,\n \"Literal\",\n directiveLiteral.end,\n directiveLiteral.loc.end,\n );\n stmt.directive = directiveLiteral.extra.raw.slice(1, -1);\n\n return this.finishNodeAt(\n stmt,\n \"ExpressionStatement\",\n directive.end,\n directive.loc.end,\n );\n }\n\n // ==================================\n // Overrides\n // ==================================\n\n initFunction(\n node: N.BodilessFunctionOrMethodBase,\n isAsync: ?boolean,\n ): void {\n super.initFunction(node, isAsync);\n node.expression = false;\n }\n\n checkDeclaration(node: N.Pattern | N.ObjectProperty): void {\n if (isSimpleProperty(node)) {\n this.checkDeclaration(((node: any): N.EstreeProperty).value);\n } else {\n super.checkDeclaration(node);\n }\n }\n\n checkGetterSetterParams(method: N.ObjectMethod | N.ClassMethod): void {\n const prop = ((method: any): N.EstreeProperty | N.EstreeMethodDefinition);\n const paramCount = prop.kind === \"get\" ? 0 : 1;\n const start = prop.start;\n if (prop.value.params.length !== paramCount) {\n if (prop.kind === \"get\") {\n this.raise(start, \"getter must not have any formal parameters\");\n } else {\n this.raise(start, \"setter must have exactly one formal parameter\");\n }\n } else if (\n prop.kind === \"set\" &&\n prop.value.params[0].type === \"RestElement\"\n ) {\n this.raise(\n start,\n \"setter function argument must not be a rest parameter\",\n );\n }\n }\n\n checkLVal(\n expr: N.Expression,\n bindingType: BindingTypes = BIND_NONE,\n checkClashes: ?{ [key: string]: boolean },\n contextDescription: string,\n disallowLetBinding?: boolean,\n ): void {\n switch (expr.type) {\n case \"ObjectPattern\":\n expr.properties.forEach(prop => {\n this.checkLVal(\n prop.type === \"Property\" ? prop.value : prop,\n bindingType,\n checkClashes,\n \"object destructuring pattern\",\n disallowLetBinding,\n );\n });\n break;\n default:\n super.checkLVal(\n expr,\n bindingType,\n checkClashes,\n contextDescription,\n disallowLetBinding,\n );\n }\n }\n\n checkDuplicatedProto(\n prop: N.ObjectMember | N.SpreadElement,\n protoRef: { used: boolean, start?: number },\n ): void {\n if (\n prop.type === \"SpreadElement\" ||\n prop.computed ||\n prop.method ||\n // $FlowIgnore\n prop.shorthand\n ) {\n return;\n }\n\n const key = prop.key;\n // It is either an Identifier or a String/NumericLiteral\n const name = key.type === \"Identifier\" ? key.name : String(key.value);\n\n if (name === \"__proto__\" && prop.kind === \"init\") {\n // Store the first redefinition's position\n if (protoRef.used && !protoRef.start) {\n protoRef.start = key.start;\n }\n\n protoRef.used = true;\n }\n }\n\n isValidDirective(stmt: N.Statement): boolean {\n return (\n stmt.type === \"ExpressionStatement\" &&\n stmt.expression.type === \"Literal\" &&\n typeof stmt.expression.value === \"string\" &&\n (!stmt.expression.extra || !stmt.expression.extra.parenthesized)\n );\n }\n\n stmtToDirective(stmt: N.Statement): N.Directive {\n const directive = super.stmtToDirective(stmt);\n const value = stmt.expression.value;\n\n // Reset value to the actual value as in estree mode we want\n // the stmt to have the real value and not the raw value\n directive.value.value = value;\n\n return directive;\n }\n\n parseBlockBody(\n node: N.BlockStatementLike,\n allowDirectives: ?boolean,\n topLevel: boolean,\n end: TokenType,\n ): void {\n super.parseBlockBody(node, allowDirectives, topLevel, end);\n\n const directiveStatements = node.directives.map(d =>\n this.directiveToStmt(d),\n );\n node.body = directiveStatements.concat(node.body);\n delete node.directives;\n }\n\n pushClassMethod(\n classBody: N.ClassBody,\n method: N.ClassMethod,\n isGenerator: boolean,\n isAsync: boolean,\n isConstructor: boolean,\n allowsDirectSuper: boolean,\n ): void {\n this.parseMethod(\n method,\n isGenerator,\n isAsync,\n isConstructor,\n allowsDirectSuper,\n \"ClassMethod\",\n true,\n );\n if (method.typeParameters) {\n // $FlowIgnore\n method.value.typeParameters = method.typeParameters;\n delete method.typeParameters;\n }\n classBody.body.push(method);\n }\n\n parseExprAtom(refShorthandDefaultPos?: ?Pos): N.Expression {\n switch (this.state.type) {\n case tt.num:\n case tt.string:\n return this.estreeParseLiteral(this.state.value);\n\n case tt.regexp:\n return this.estreeParseRegExpLiteral(this.state.value);\n\n case tt.bigint:\n return this.estreeParseBigIntLiteral(this.state.value);\n\n case tt._null:\n return this.estreeParseLiteral(null);\n\n case tt._true:\n return this.estreeParseLiteral(true);\n\n case tt._false:\n return this.estreeParseLiteral(false);\n\n default:\n return super.parseExprAtom(refShorthandDefaultPos);\n }\n }\n\n parseLiteral<T: N.Literal>(\n value: any,\n type: /*T[\"kind\"]*/ string,\n startPos?: number,\n startLoc?: Position,\n ): T {\n const node = super.parseLiteral(value, type, startPos, startLoc);\n node.raw = node.extra.raw;\n delete node.extra;\n\n return node;\n }\n\n parseFunctionBody(\n node: N.Function,\n allowExpression: ?boolean,\n isMethod?: boolean = false,\n ): void {\n super.parseFunctionBody(node, allowExpression, isMethod);\n node.expression = node.body.type !== \"BlockStatement\";\n }\n\n parseMethod<T: N.MethodLike>(\n node: T,\n isGenerator: boolean,\n isAsync: boolean,\n isConstructor: boolean,\n allowDirectSuper: boolean,\n type: string,\n inClassScope: boolean = false,\n ): T {\n let funcNode = this.startNode();\n funcNode.kind = node.kind; // provide kind, so super method correctly sets state\n funcNode = super.parseMethod(\n funcNode,\n isGenerator,\n isAsync,\n isConstructor,\n allowDirectSuper,\n type,\n inClassScope,\n );\n funcNode.type = \"FunctionExpression\";\n delete funcNode.kind;\n // $FlowIgnore\n node.value = funcNode;\n\n type = type === \"ClassMethod\" ? \"MethodDefinition\" : type;\n return this.finishNode(node, type);\n }\n\n parseObjectMethod(\n prop: N.ObjectMethod,\n isGenerator: boolean,\n isAsync: boolean,\n isPattern: boolean,\n containsEsc: boolean,\n ): ?N.ObjectMethod {\n const node: N.EstreeProperty = (super.parseObjectMethod(\n prop,\n isGenerator,\n isAsync,\n isPattern,\n containsEsc,\n ): any);\n\n if (node) {\n node.type = \"Property\";\n if (((node: any): N.ClassMethod).kind === \"method\") node.kind = \"init\";\n node.shorthand = false;\n }\n\n return (node: any);\n }\n\n parseObjectProperty(\n prop: N.ObjectProperty,\n startPos: ?number,\n startLoc: ?Position,\n isPattern: boolean,\n refShorthandDefaultPos: ?Pos,\n ): ?N.ObjectProperty {\n const node: N.EstreeProperty = (super.parseObjectProperty(\n prop,\n startPos,\n startLoc,\n isPattern,\n refShorthandDefaultPos,\n ): any);\n\n if (node) {\n node.kind = \"init\";\n node.type = \"Property\";\n }\n\n return (node: any);\n }\n\n toAssignable(\n node: N.Node,\n isBinding: ?boolean,\n contextDescription: string,\n ): N.Node {\n if (isSimpleProperty(node)) {\n this.toAssignable(node.value, isBinding, contextDescription);\n\n return node;\n }\n\n return super.toAssignable(node, isBinding, contextDescription);\n }\n\n toAssignableObjectExpressionProp(\n prop: N.Node,\n isBinding: ?boolean,\n isLast: boolean,\n ) {\n if (prop.kind === \"get\" || prop.kind === \"set\") {\n throw this.raise(\n prop.key.start,\n \"Object pattern can't contain getter or setter\",\n );\n } else if (prop.method) {\n throw this.raise(\n prop.key.start,\n \"Object pattern can't contain methods\",\n );\n } else {\n super.toAssignableObjectExpressionProp(prop, isBinding, isLast);\n }\n }\n\n finishCallExpression<T: N.CallExpression | N.OptionalCallExpression>(\n node: T,\n optional: boolean,\n ): N.Expression {\n super.finishCallExpression(node, optional);\n\n if (node.callee.type === \"Import\") {\n ((node: N.Node): N.EstreeImportExpression).type = \"ImportExpression\";\n ((node: N.Node): N.EstreeImportExpression).source = node.arguments[0];\n delete node.arguments;\n delete node.callee;\n }\n\n return node;\n }\n\n toReferencedListDeep(\n exprList: $ReadOnlyArray<?N.Expression>,\n isParenthesizedExpr?: boolean,\n ): void {\n // ImportExpressions do not have an arguments array.\n if (!exprList) {\n return;\n }\n\n super.toReferencedListDeep(exprList, isParenthesizedExpr);\n }\n };\n","// @flow\n\nimport * as charCodes from \"charcodes\";\n\n// Matches a whole line break (where CRLF is considered a single\n// line break). Used to count lines.\nexport const lineBreak = /\\r\\n?|[\\n\\u2028\\u2029]/;\nexport const lineBreakG = new RegExp(lineBreak.source, \"g\");\n\n// https://tc39.github.io/ecma262/#sec-line-terminators\nexport function isNewLine(code: number): boolean {\n switch (code) {\n case charCodes.lineFeed:\n case charCodes.carriageReturn:\n case charCodes.lineSeparator:\n case charCodes.paragraphSeparator:\n return true;\n\n default:\n return false;\n }\n}\n\nexport const skipWhiteSpace = /(?:\\s|\\/\\/.*|\\/\\*[^]*?\\*\\/)*/g;\n\n// https://tc39.github.io/ecma262/#sec-white-space\nexport function isWhitespace(code: number): boolean {\n switch (code) {\n case 0x0009: // CHARACTER TABULATION\n case 0x000b: // LINE TABULATION\n case 0x000c: // FORM FEED\n case charCodes.space:\n case charCodes.nonBreakingSpace:\n case charCodes.oghamSpaceMark:\n case 0x2000: // EN QUAD\n case 0x2001: // EM QUAD\n case 0x2002: // EN SPACE\n case 0x2003: // EM SPACE\n case 0x2004: // THREE-PER-EM SPACE\n case 0x2005: // FOUR-PER-EM SPACE\n case 0x2006: // SIX-PER-EM SPACE\n case 0x2007: // FIGURE SPACE\n case 0x2008: // PUNCTUATION SPACE\n case 0x2009: // THIN SPACE\n case 0x200a: // HAIR SPACE\n case 0x202f: // NARROW NO-BREAK SPACE\n case 0x205f: // MEDIUM MATHEMATICAL SPACE\n case 0x3000: // IDEOGRAPHIC SPACE\n case 0xfeff: // ZERO WIDTH NO-BREAK SPACE\n return true;\n\n default:\n return false;\n }\n}\n","// @flow\n\n// The algorithm used to determine whether a regexp can appear at a\n// given point in the program is loosely based on sweet.js' approach.\n// See https://github.com/mozilla/sweet.js/wiki/design\n\nimport { types as tt } from \"./types\";\nimport { lineBreak } from \"../util/whitespace\";\n\nexport class TokContext {\n constructor(\n token: string,\n isExpr?: boolean,\n preserveSpace?: boolean,\n override?: ?Function, // Takes a Tokenizer as a this-parameter, and returns void.\n ) {\n this.token = token;\n this.isExpr = !!isExpr;\n this.preserveSpace = !!preserveSpace;\n this.override = override;\n }\n\n token: string;\n isExpr: boolean;\n preserveSpace: boolean;\n override: ?Function;\n}\n\nexport const types: {\n [key: string]: TokContext,\n} = {\n braceStatement: new TokContext(\"{\", false),\n braceExpression: new TokContext(\"{\", true),\n templateQuasi: new TokContext(\"${\", false),\n parenStatement: new TokContext(\"(\", false),\n parenExpression: new TokContext(\"(\", true),\n template: new TokContext(\"`\", true, true, p => p.readTmplToken()),\n functionExpression: new TokContext(\"function\", true),\n functionStatement: new TokContext(\"function\", false),\n};\n\n// Token-specific context update code\n\ntt.parenR.updateContext = tt.braceR.updateContext = function() {\n if (this.state.context.length === 1) {\n this.state.exprAllowed = true;\n return;\n }\n\n let out = this.state.context.pop();\n if (out === types.braceStatement && this.curContext().token === \"function\") {\n out = this.state.context.pop();\n }\n\n this.state.exprAllowed = !out.isExpr;\n};\n\ntt.name.updateContext = function(prevType) {\n let allowed = false;\n if (prevType !== tt.dot) {\n if (\n (this.state.value === \"of\" && !this.state.exprAllowed) ||\n (this.state.value === \"yield\" && this.scope.inGenerator)\n ) {\n allowed = true;\n }\n }\n this.state.exprAllowed = allowed;\n\n if (this.state.isIterator) {\n this.state.isIterator = false;\n }\n};\n\ntt.braceL.updateContext = function(prevType) {\n this.state.context.push(\n this.braceIsBlock(prevType) ? types.braceStatement : types.braceExpression,\n );\n this.state.exprAllowed = true;\n};\n\ntt.dollarBraceL.updateContext = function() {\n this.state.context.push(types.templateQuasi);\n this.state.exprAllowed = true;\n};\n\ntt.parenL.updateContext = function(prevType) {\n const statementParens =\n prevType === tt._if ||\n prevType === tt._for ||\n prevType === tt._with ||\n prevType === tt._while;\n this.state.context.push(\n statementParens ? types.parenStatement : types.parenExpression,\n );\n this.state.exprAllowed = true;\n};\n\ntt.incDec.updateContext = function() {\n // tokExprAllowed stays unchanged\n};\n\ntt._function.updateContext = tt._class.updateContext = function(prevType) {\n if (\n prevType.beforeExpr &&\n prevType !== tt.semi &&\n prevType !== tt._else &&\n !(\n prevType === tt._return &&\n lineBreak.test(this.input.slice(this.state.lastTokEnd, this.state.start))\n ) &&\n !(\n (prevType === tt.colon || prevType === tt.braceL) &&\n this.curContext() === types.b_stat\n )\n ) {\n this.state.context.push(types.functionExpression);\n } else {\n this.state.context.push(types.functionStatement);\n }\n\n this.state.exprAllowed = false;\n};\n\ntt.backQuote.updateContext = function() {\n if (this.curContext() === types.template) {\n this.state.context.pop();\n } else {\n this.state.context.push(types.template);\n }\n this.state.exprAllowed = false;\n};\n","/* eslint max-len: 0 */\n\n// @flow\n\nimport * as charCodes from \"charcodes\";\nimport { keywords } from \"../tokenizer/types\";\n\nconst reservedWords = {\n strict: [\n \"implements\",\n \"interface\",\n \"let\",\n \"package\",\n \"private\",\n \"protected\",\n \"public\",\n \"static\",\n \"yield\",\n ],\n strictBind: [\"eval\", \"arguments\"],\n};\n\nconst reservedWordsStrictSet = new Set(reservedWords.strict);\nconst reservedWordsStrictBindSet = new Set(reservedWords.strictBind);\n\n/**\n * Checks if word is a reserved word in non-strict mode\n */\nexport const isReservedWord = (word: string, inModule: boolean): boolean => {\n return (inModule && word === \"await\") || word === \"enum\";\n};\n\n/**\n * Checks if word is a reserved word in non-binding strict mode\n *\n * Includes non-strict reserved words\n */\nexport function isStrictReservedWord(word: string, inModule: boolean): boolean {\n return isReservedWord(word, inModule) || reservedWordsStrictSet.has(word);\n}\n\n/**\n * Checks if word is a reserved word in binding strict mode, but it is allowed as\n * a normal identifier.\n */\nexport function isStrictBindOnlyReservedWord(word: string): boolean {\n return reservedWordsStrictBindSet.has(word);\n}\n\n/**\n * Checks if word is a reserved word in binding strict mode\n *\n * Includes non-strict reserved words and non-binding strict reserved words\n */\nexport function isStrictBindReservedWord(\n word: string,\n inModule: boolean,\n): boolean {\n return (\n isStrictReservedWord(word, inModule) || isStrictBindOnlyReservedWord(word)\n );\n}\n\nexport function isKeyword(word: string): boolean {\n return keywords.has(word);\n}\n\nexport const keywordRelationalOperator = /^in(stanceof)?$/;\n\n// ## Character categories\n\n// Big ugly regular expressions that match characters in the\n// whitespace, identifier, and identifier-start categories. These\n// are only applied when a character is found to actually have a\n// code point above 0x80.\n// Generated by `scripts/generate-identifier-regex.js`.\n\n/* prettier-ignore */\nlet nonASCIIidentifierStartChars = \"\\xaa\\xb5\\xba\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02c1\\u02c6-\\u02d1\\u02e0-\\u02e4\\u02ec\\u02ee\\u0370-\\u0374\\u0376\\u0377\\u037a-\\u037d\\u037f\\u0386\\u0388-\\u038a\\u038c\\u038e-\\u03a1\\u03a3-\\u03f5\\u03f7-\\u0481\\u048a-\\u052f\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05d0-\\u05ea\\u05ef-\\u05f2\\u0620-\\u064a\\u066e\\u066f\\u0671-\\u06d3\\u06d5\\u06e5\\u06e6\\u06ee\\u06ef\\u06fa-\\u06fc\\u06ff\\u0710\\u0712-\\u072f\\u074d-\\u07a5\\u07b1\\u07ca-\\u07ea\\u07f4\\u07f5\\u07fa\\u0800-\\u0815\\u081a\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086a\\u08a0-\\u08b4\\u08b6-\\u08bd\\u0904-\\u0939\\u093d\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098c\\u098f\\u0990\\u0993-\\u09a8\\u09aa-\\u09b0\\u09b2\\u09b6-\\u09b9\\u09bd\\u09ce\\u09dc\\u09dd\\u09df-\\u09e1\\u09f0\\u09f1\\u09fc\\u0a05-\\u0a0a\\u0a0f\\u0a10\\u0a13-\\u0a28\\u0a2a-\\u0a30\\u0a32\\u0a33\\u0a35\\u0a36\\u0a38\\u0a39\\u0a59-\\u0a5c\\u0a5e\\u0a72-\\u0a74\\u0a85-\\u0a8d\\u0a8f-\\u0a91\\u0a93-\\u0aa8\\u0aaa-\\u0ab0\\u0ab2\\u0ab3\\u0ab5-\\u0ab9\\u0abd\\u0ad0\\u0ae0\\u0ae1\\u0af9\\u0b05-\\u0b0c\\u0b0f\\u0b10\\u0b13-\\u0b28\\u0b2a-\\u0b30\\u0b32\\u0b33\\u0b35-\\u0b39\\u0b3d\\u0b5c\\u0b5d\\u0b5f-\\u0b61\\u0b71\\u0b83\\u0b85-\\u0b8a\\u0b8e-\\u0b90\\u0b92-\\u0b95\\u0b99\\u0b9a\\u0b9c\\u0b9e\\u0b9f\\u0ba3\\u0ba4\\u0ba8-\\u0baa\\u0bae-\\u0bb9\\u0bd0\\u0c05-\\u0c0c\\u0c0e-\\u0c10\\u0c12-\\u0c28\\u0c2a-\\u0c39\\u0c3d\\u0c58-\\u0c5a\\u0c60\\u0c61\\u0c80\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbd\\u0cde\\u0ce0\\u0ce1\\u0cf1\\u0cf2\\u0d05-\\u0d0c\\u0d0e-\\u0d10\\u0d12-\\u0d3a\\u0d3d\\u0d4e\\u0d54-\\u0d56\\u0d5f-\\u0d61\\u0d7a-\\u0d7f\\u0d85-\\u0d96\\u0d9a-\\u0db1\\u0db3-\\u0dbb\\u0dbd\\u0dc0-\\u0dc6\\u0e01-\\u0e30\\u0e32\\u0e33\\u0e40-\\u0e46\\u0e81\\u0e82\\u0e84\\u0e86-\\u0e8a\\u0e8c-\\u0ea3\\u0ea5\\u0ea7-\\u0eb0\\u0eb2\\u0eb3\\u0ebd\\u0ec0-\\u0ec4\\u0ec6\\u0edc-\\u0edf\\u0f00\\u0f40-\\u0f47\\u0f49-\\u0f6c\\u0f88-\\u0f8c\\u1000-\\u102a\\u103f\\u1050-\\u1055\\u105a-\\u105d\\u1061\\u1065\\u1066\\u106e-\\u1070\\u1075-\\u1081\\u108e\\u10a0-\\u10c5\\u10c7\\u10cd\\u10d0-\\u10fa\\u10fc-\\u1248\\u124a-\\u124d\\u1250-\\u1256\\u1258\\u125a-\\u125d\\u1260-\\u1288\\u128a-\\u128d\\u1290-\\u12b0\\u12b2-\\u12b5\\u12b8-\\u12be\\u12c0\\u12c2-\\u12c5\\u12c8-\\u12d6\\u12d8-\\u1310\\u1312-\\u1315\\u1318-\\u135a\\u1380-\\u138f\\u13a0-\\u13f5\\u13f8-\\u13fd\\u1401-\\u166c\\u166f-\\u167f\\u1681-\\u169a\\u16a0-\\u16ea\\u16ee-\\u16f8\\u1700-\\u170c\\u170e-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176c\\u176e-\\u1770\\u1780-\\u17b3\\u17d7\\u17dc\\u1820-\\u1878\\u1880-\\u18a8\\u18aa\\u18b0-\\u18f5\\u1900-\\u191e\\u1950-\\u196d\\u1970-\\u1974\\u1980-\\u19ab\\u19b0-\\u19c9\\u1a00-\\u1a16\\u1a20-\\u1a54\\u1aa7\\u1b05-\\u1b33\\u1b45-\\u1b4b\\u1b83-\\u1ba0\\u1bae\\u1baf\\u1bba-\\u1be5\\u1c00-\\u1c23\\u1c4d-\\u1c4f\\u1c5a-\\u1c7d\\u1c80-\\u1c88\\u1c90-\\u1cba\\u1cbd-\\u1cbf\\u1ce9-\\u1cec\\u1cee-\\u1cf3\\u1cf5\\u1cf6\\u1cfa\\u1d00-\\u1dbf\\u1e00-\\u1f15\\u1f18-\\u1f1d\\u1f20-\\u1f45\\u1f48-\\u1f4d\\u1f50-\\u1f57\\u1f59\\u1f5b\\u1f5d\\u1f5f-\\u1f7d\\u1f80-\\u1fb4\\u1fb6-\\u1fbc\\u1fbe\\u1fc2-\\u1fc4\\u1fc6-\\u1fcc\\u1fd0-\\u1fd3\\u1fd6-\\u1fdb\\u1fe0-\\u1fec\\u1ff2-\\u1ff4\\u1ff6-\\u1ffc\\u2071\\u207f\\u2090-\\u209c\\u2102\\u2107\\u210a-\\u2113\\u2115\\u2118-\\u211d\\u2124\\u2126\\u2128\\u212a-\\u2139\\u213c-\\u213f\\u2145-\\u2149\\u214e\\u2160-\\u2188\\u2c00-\\u2c2e\\u2c30-\\u2c5e\\u2c60-\\u2ce4\\u2ceb-\\u2cee\\u2cf2\\u2cf3\\u2d00-\\u2d25\\u2d27\\u2d2d\\u2d30-\\u2d67\\u2d6f\\u2d80-\\u2d96\\u2da0-\\u2da6\\u2da8-\\u2dae\\u2db0-\\u2db6\\u2db8-\\u2dbe\\u2dc0-\\u2dc6\\u2dc8-\\u2dce\\u2dd0-\\u2dd6\\u2dd8-\\u2dde\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303c\\u3041-\\u3096\\u309b-\\u309f\\u30a1-\\u30fa\\u30fc-\\u30ff\\u3105-\\u312f\\u3131-\\u318e\\u31a0-\\u31ba\\u31f0-\\u31ff\\u3400-\\u4db5\\u4e00-\\u9fef\\ua000-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua61f\\ua62a\\ua62b\\ua640-\\ua66e\\ua67f-\\ua69d\\ua6a0-\\ua6ef\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua7bf\\ua7c2-\\ua7c6\\ua7f7-\\ua801\\ua803-\\ua805\\ua807-\\ua80a\\ua80c-\\ua822\\ua840-\\ua873\\ua882-\\ua8b3\\ua8f2-\\ua8f7\\ua8fb\\ua8fd\\ua8fe\\ua90a-\\ua925\\ua930-\\ua946\\ua960-\\ua97c\\ua984-\\ua9b2\\ua9cf\\ua9e0-\\ua9e4\\ua9e6-\\ua9ef\\ua9fa-\\ua9fe\\uaa00-\\uaa28\\uaa40-\\uaa42\\uaa44-\\uaa4b\\uaa60-\\uaa76\\uaa7a\\uaa7e-\\uaaaf\\uaab1\\uaab5\\uaab6\\uaab9-\\uaabd\\uaac0\\uaac2\\uaadb-\\uaadd\\uaae0-\\uaaea\\uaaf2-\\uaaf4\\uab01-\\uab06\\uab09-\\uab0e\\uab11-\\uab16\\uab20-\\uab26\\uab28-\\uab2e\\uab30-\\uab5a\\uab5c-\\uab67\\uab70-\\uabe2\\uac00-\\ud7a3\\ud7b0-\\ud7c6\\ud7cb-\\ud7fb\\uf900-\\ufa6d\\ufa70-\\ufad9\\ufb00-\\ufb06\\ufb13-\\ufb17\\ufb1d\\ufb1f-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40\\ufb41\\ufb43\\ufb44\\ufb46-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe70-\\ufe74\\ufe76-\\ufefc\\uff21-\\uff3a\\uff41-\\uff5a\\uff66-\\uffbe\\uffc2-\\uffc7\\uffca-\\uffcf\\uffd2-\\uffd7\\uffda-\\uffdc\";\n/* prettier-ignore */\nlet nonASCIIidentifierChars = \"\\u200c\\u200d\\xb7\\u0300-\\u036f\\u0387\\u0483-\\u0487\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u0610-\\u061a\\u064b-\\u0669\\u0670\\u06d6-\\u06dc\\u06df-\\u06e4\\u06e7\\u06e8\\u06ea-\\u06ed\\u06f0-\\u06f9\\u0711\\u0730-\\u074a\\u07a6-\\u07b0\\u07c0-\\u07c9\\u07eb-\\u07f3\\u07fd\\u0816-\\u0819\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0859-\\u085b\\u08d3-\\u08e1\\u08e3-\\u0903\\u093a-\\u093c\\u093e-\\u094f\\u0951-\\u0957\\u0962\\u0963\\u0966-\\u096f\\u0981-\\u0983\\u09bc\\u09be-\\u09c4\\u09c7\\u09c8\\u09cb-\\u09cd\\u09d7\\u09e2\\u09e3\\u09e6-\\u09ef\\u09fe\\u0a01-\\u0a03\\u0a3c\\u0a3e-\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a66-\\u0a71\\u0a75\\u0a81-\\u0a83\\u0abc\\u0abe-\\u0ac5\\u0ac7-\\u0ac9\\u0acb-\\u0acd\\u0ae2\\u0ae3\\u0ae6-\\u0aef\\u0afa-\\u0aff\\u0b01-\\u0b03\\u0b3c\\u0b3e-\\u0b44\\u0b47\\u0b48\\u0b4b-\\u0b4d\\u0b56\\u0b57\\u0b62\\u0b63\\u0b66-\\u0b6f\\u0b82\\u0bbe-\\u0bc2\\u0bc6-\\u0bc8\\u0bca-\\u0bcd\\u0bd7\\u0be6-\\u0bef\\u0c00-\\u0c04\\u0c3e-\\u0c44\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c62\\u0c63\\u0c66-\\u0c6f\\u0c81-\\u0c83\\u0cbc\\u0cbe-\\u0cc4\\u0cc6-\\u0cc8\\u0cca-\\u0ccd\\u0cd5\\u0cd6\\u0ce2\\u0ce3\\u0ce6-\\u0cef\\u0d00-\\u0d03\\u0d3b\\u0d3c\\u0d3e-\\u0d44\\u0d46-\\u0d48\\u0d4a-\\u0d4d\\u0d57\\u0d62\\u0d63\\u0d66-\\u0d6f\\u0d82\\u0d83\\u0dca\\u0dcf-\\u0dd4\\u0dd6\\u0dd8-\\u0ddf\\u0de6-\\u0def\\u0df2\\u0df3\\u0e31\\u0e34-\\u0e3a\\u0e47-\\u0e4e\\u0e50-\\u0e59\\u0eb1\\u0eb4-\\u0ebc\\u0ec8-\\u0ecd\\u0ed0-\\u0ed9\\u0f18\\u0f19\\u0f20-\\u0f29\\u0f35\\u0f37\\u0f39\\u0f3e\\u0f3f\\u0f71-\\u0f84\\u0f86\\u0f87\\u0f8d-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u102b-\\u103e\\u1040-\\u1049\\u1056-\\u1059\\u105e-\\u1060\\u1062-\\u1064\\u1067-\\u106d\\u1071-\\u1074\\u1082-\\u108d\\u108f-\\u109d\\u135d-\\u135f\\u1369-\\u1371\\u1712-\\u1714\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17b4-\\u17d3\\u17dd\\u17e0-\\u17e9\\u180b-\\u180d\\u1810-\\u1819\\u18a9\\u1920-\\u192b\\u1930-\\u193b\\u1946-\\u194f\\u19d0-\\u19da\\u1a17-\\u1a1b\\u1a55-\\u1a5e\\u1a60-\\u1a7c\\u1a7f-\\u1a89\\u1a90-\\u1a99\\u1ab0-\\u1abd\\u1b00-\\u1b04\\u1b34-\\u1b44\\u1b50-\\u1b59\\u1b6b-\\u1b73\\u1b80-\\u1b82\\u1ba1-\\u1bad\\u1bb0-\\u1bb9\\u1be6-\\u1bf3\\u1c24-\\u1c37\\u1c40-\\u1c49\\u1c50-\\u1c59\\u1cd0-\\u1cd2\\u1cd4-\\u1ce8\\u1ced\\u1cf4\\u1cf7-\\u1cf9\\u1dc0-\\u1df9\\u1dfb-\\u1dff\\u203f\\u2040\\u2054\\u20d0-\\u20dc\\u20e1\\u20e5-\\u20f0\\u2cef-\\u2cf1\\u2d7f\\u2de0-\\u2dff\\u302a-\\u302f\\u3099\\u309a\\ua620-\\ua629\\ua66f\\ua674-\\ua67d\\ua69e\\ua69f\\ua6f0\\ua6f1\\ua802\\ua806\\ua80b\\ua823-\\ua827\\ua880\\ua881\\ua8b4-\\ua8c5\\ua8d0-\\ua8d9\\ua8e0-\\ua8f1\\ua8ff-\\ua909\\ua926-\\ua92d\\ua947-\\ua953\\ua980-\\ua983\\ua9b3-\\ua9c0\\ua9d0-\\ua9d9\\ua9e5\\ua9f0-\\ua9f9\\uaa29-\\uaa36\\uaa43\\uaa4c\\uaa4d\\uaa50-\\uaa59\\uaa7b-\\uaa7d\\uaab0\\uaab2-\\uaab4\\uaab7\\uaab8\\uaabe\\uaabf\\uaac1\\uaaeb-\\uaaef\\uaaf5\\uaaf6\\uabe3-\\uabea\\uabec\\uabed\\uabf0-\\uabf9\\ufb1e\\ufe00-\\ufe0f\\ufe20-\\ufe2f\\ufe33\\ufe34\\ufe4d-\\ufe4f\\uff10-\\uff19\\uff3f\";\n\nconst nonASCIIidentifierStart = new RegExp(\n \"[\" + nonASCIIidentifierStartChars + \"]\",\n);\nconst nonASCIIidentifier = new RegExp(\n \"[\" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + \"]\",\n);\n\nnonASCIIidentifierStartChars = nonASCIIidentifierChars = null;\n\n// These are a run-length and offset-encoded representation of the\n// >0xffff code points that are a valid part of identifiers. The\n// offset starts at 0x10000, and each pair of numbers represents an\n// offset to the next range, and then a size of the range. They were\n// generated by `scripts/generate-identifier-regex.js`.\n/* prettier-ignore */\nconst astralIdentifierStartCodes = [0,11,2,25,2,18,2,1,2,14,3,13,35,122,70,52,268,28,4,48,48,31,14,29,6,37,11,29,3,35,5,7,2,4,43,157,19,35,5,35,5,39,9,51,157,310,10,21,11,7,153,5,3,0,2,43,2,1,4,0,3,22,11,22,10,30,66,18,2,1,11,21,11,25,71,55,7,1,65,0,16,3,2,2,2,28,43,28,4,28,36,7,2,27,28,53,11,21,11,18,14,17,111,72,56,50,14,50,14,35,477,28,11,0,9,21,155,22,13,52,76,44,33,24,27,35,30,0,12,34,4,0,13,47,15,3,22,0,2,0,36,17,2,24,85,6,2,0,2,3,2,14,2,9,8,46,39,7,3,1,3,21,2,6,2,1,2,4,4,0,19,0,13,4,159,52,19,3,21,0,33,47,21,1,2,0,185,46,42,3,37,47,21,0,60,42,14,0,72,26,230,43,117,63,32,0,161,7,3,38,17,0,2,0,29,0,11,39,8,0,22,0,12,45,20,0,35,56,264,8,2,36,18,0,50,29,113,6,2,1,2,37,22,0,26,5,2,1,2,31,15,0,328,18,270,921,103,110,18,195,2749,1070,4050,582,8634,568,8,30,114,29,19,47,17,3,32,20,6,18,689,63,129,74,6,0,67,12,65,1,2,0,29,6135,9,754,9486,286,50,2,18,3,9,395,2309,106,6,12,4,8,8,9,5991,84,2,70,2,1,3,0,3,1,3,3,2,11,2,0,2,6,2,64,2,3,3,7,2,6,2,27,2,3,2,4,2,0,4,6,2,339,3,24,2,24,2,30,2,24,2,30,2,24,2,30,2,24,2,30,2,24,2,7,2357,44,11,6,17,0,370,43,1301,196,60,67,8,0,1205,3,2,26,2,1,2,0,3,0,2,9,2,3,2,0,2,0,7,0,5,0,2,0,2,0,2,2,2,1,2,0,3,0,2,0,2,0,2,0,2,0,2,1,2,0,3,3,2,6,2,3,2,3,2,0,2,9,2,16,6,2,2,4,2,16,4421,42710,42,4148,12,221,3,5761,15,7472,3104,541];\n/* prettier-ignore */\nconst astralIdentifierCodes = [509,0,227,0,150,4,294,9,1368,2,2,1,6,3,41,2,5,0,166,1,574,3,9,9,525,10,176,2,54,14,32,9,16,3,46,10,54,9,7,2,37,13,2,9,6,1,45,0,13,2,49,13,9,3,4,9,83,11,7,0,161,11,6,9,7,3,56,1,2,6,3,1,3,2,10,0,11,1,3,6,4,4,193,17,10,9,5,0,82,19,13,9,214,6,3,8,28,1,83,16,16,9,82,12,9,9,84,14,5,9,243,14,166,9,232,6,3,6,4,0,29,9,41,6,2,3,9,0,10,10,47,15,406,7,2,7,17,9,57,21,2,13,123,5,4,0,2,1,2,6,2,0,9,9,49,4,2,1,2,4,9,9,330,3,19306,9,135,4,60,6,26,9,1014,0,2,54,8,3,19723,1,5319,4,4,5,9,7,3,6,31,3,149,2,1418,49,513,54,5,49,9,0,15,0,23,4,2,14,1361,6,2,16,3,6,2,1,2,4,262,6,10,9,419,13,1495,6,110,6,6,9,792487,239];\n\n// This has a complexity linear to the value of the code. The\n// assumption is that looking up astral identifier characters is\n// rare.\nfunction isInAstralSet(code: number, set: $ReadOnlyArray<number>): boolean {\n let pos = 0x10000;\n for (let i = 0, length = set.length; i < length; i += 2) {\n pos += set[i];\n if (pos > code) return false;\n\n pos += set[i + 1];\n if (pos >= code) return true;\n }\n return false;\n}\n\n// Test whether a given character code starts an identifier.\n\nexport function isIdentifierStart(code: number): boolean {\n if (code < charCodes.uppercaseA) return code === charCodes.dollarSign;\n if (code <= charCodes.uppercaseZ) return true;\n if (code < charCodes.lowercaseA) return code === charCodes.underscore;\n if (code <= charCodes.lowercaseZ) return true;\n if (code <= 0xffff) {\n return (\n code >= 0xaa && nonASCIIidentifierStart.test(String.fromCharCode(code))\n );\n }\n return isInAstralSet(code, astralIdentifierStartCodes);\n}\n\n// Test whether a current state character code and next character code is @\n\nexport function isIteratorStart(current: number, next: number): boolean {\n return current === charCodes.atSign && next === charCodes.atSign;\n}\n\n// Test whether a given character is part of an identifier.\n\nexport function isIdentifierChar(code: number): boolean {\n if (code < charCodes.digit0) return code === charCodes.dollarSign;\n if (code < charCodes.colon) return true;\n if (code < charCodes.uppercaseA) return false;\n if (code <= charCodes.uppercaseZ) return true;\n if (code < charCodes.lowercaseA) return code === charCodes.underscore;\n if (code <= charCodes.lowercaseZ) return true;\n if (code <= 0xffff) {\n return code >= 0xaa && nonASCIIidentifier.test(String.fromCharCode(code));\n }\n return (\n isInAstralSet(code, astralIdentifierStartCodes) ||\n isInAstralSet(code, astralIdentifierCodes)\n );\n}\n","// @flow\n\n/*:: declare var invariant; */\n\nimport type Parser from \"../parser\";\nimport { types as tt, type TokenType } from \"../tokenizer/types\";\nimport * as N from \"../types\";\nimport type { Options } from \"../options\";\nimport type { Pos, Position } from \"../util/location\";\nimport type State from \"../tokenizer/state\";\nimport { types as tc } from \"../tokenizer/context\";\nimport * as charCodes from \"charcodes\";\nimport { isIteratorStart } from \"../util/identifier\";\nimport {\n functionFlags,\n type BindingTypes,\n BIND_NONE,\n BIND_LEXICAL,\n BIND_VAR,\n BIND_FUNCTION,\n SCOPE_ARROW,\n SCOPE_OTHER,\n} from \"../util/scopeflags\";\n\nconst reservedTypes = new Set([\n \"_\",\n \"any\",\n \"bool\",\n \"boolean\",\n \"empty\",\n \"extends\",\n \"false\",\n \"interface\",\n \"mixed\",\n \"null\",\n \"number\",\n \"static\",\n \"string\",\n \"true\",\n \"typeof\",\n \"void\",\n]);\n\nfunction isEsModuleType(bodyElement: N.Node): boolean {\n return (\n bodyElement.type === \"DeclareExportAllDeclaration\" ||\n (bodyElement.type === \"DeclareExportDeclaration\" &&\n (!bodyElement.declaration ||\n (bodyElement.declaration.type !== \"TypeAlias\" &&\n bodyElement.declaration.type !== \"InterfaceDeclaration\")))\n );\n}\n\nfunction hasTypeImportKind(node: N.Node): boolean {\n return node.importKind === \"type\" || node.importKind === \"typeof\";\n}\n\nfunction isMaybeDefaultImport(state: State): boolean {\n return (\n (state.type === tt.name || !!state.type.keyword) && state.value !== \"from\"\n );\n}\n\nconst exportSuggestions = {\n const: \"declare export var\",\n let: \"declare export var\",\n type: \"export type\",\n interface: \"export interface\",\n};\n\n// Like Array#filter, but returns a tuple [ acceptedElements, discardedElements ]\nfunction partition<T>(\n list: T[],\n test: (T, number, T[]) => ?boolean,\n): [T[], T[]] {\n const list1 = [];\n const list2 = [];\n for (let i = 0; i < list.length; i++) {\n (test(list[i], i, list) ? list1 : list2).push(list[i]);\n }\n return [list1, list2];\n}\n\nconst FLOW_PRAGMA_REGEX = /\\*?\\s*@((?:no)?flow)\\b/;\n\n// Flow enums types\ntype EnumExplicitType = null | \"boolean\" | \"number\" | \"string\" | \"symbol\";\ntype EnumContext = {|\n enumName: string,\n explicitType: EnumExplicitType,\n memberName: string,\n|};\ntype EnumMemberInit =\n | {| type: \"number\", pos: number, value: N.Node |}\n | {| type: \"string\", pos: number, value: N.Node |}\n | {| type: \"boolean\", pos: number, value: N.Node |}\n | {| type: \"invalid\", pos: number |}\n | {| type: \"none\", pos: number |};\n\nexport default (superClass: Class<Parser>): Class<Parser> =>\n class extends superClass {\n // The value of the @flow/@noflow pragma. Initially undefined, transitions\n // to \"@flow\" or \"@noflow\" if we see a pragma. Transitions to null if we are\n // past the initial comment.\n flowPragma: void | null | \"flow\" | \"noflow\";\n\n constructor(options: ?Options, input: string) {\n super(options, input);\n this.flowPragma = undefined;\n }\n\n shouldParseTypes(): boolean {\n return this.getPluginOption(\"flow\", \"all\") || this.flowPragma === \"flow\";\n }\n\n shouldParseEnums(): boolean {\n return !!this.getPluginOption(\"flow\", \"enums\");\n }\n\n finishToken(type: TokenType, val: any): void {\n if (\n type !== tt.string &&\n type !== tt.semi &&\n type !== tt.interpreterDirective\n ) {\n if (this.flowPragma === undefined) {\n this.flowPragma = null;\n }\n }\n return super.finishToken(type, val);\n }\n\n addComment(comment: N.Comment): void {\n if (this.flowPragma === undefined) {\n // Try to parse a flow pragma.\n const matches = FLOW_PRAGMA_REGEX.exec(comment.value);\n if (!matches) {\n // do nothing\n } else if (matches[1] === \"flow\") {\n this.flowPragma = \"flow\";\n } else if (matches[1] === \"noflow\") {\n this.flowPragma = \"noflow\";\n } else {\n throw new Error(\"Unexpected flow pragma\");\n }\n }\n return super.addComment(comment);\n }\n\n flowParseTypeInitialiser(tok?: TokenType): N.FlowType {\n const oldInType = this.state.inType;\n this.state.inType = true;\n this.expect(tok || tt.colon);\n\n const type = this.flowParseType();\n this.state.inType = oldInType;\n return type;\n }\n\n flowParsePredicate(): N.FlowType {\n const node = this.startNode();\n const moduloLoc = this.state.startLoc;\n const moduloPos = this.state.start;\n this.expect(tt.modulo);\n const checksLoc = this.state.startLoc;\n this.expectContextual(\"checks\");\n // Force '%' and 'checks' to be adjacent\n if (\n moduloLoc.line !== checksLoc.line ||\n moduloLoc.column !== checksLoc.column - 1\n ) {\n this.raise(\n moduloPos,\n \"Spaces between ´%´ and ´checks´ are not allowed here.\",\n );\n }\n if (this.eat(tt.parenL)) {\n node.value = this.parseExpression();\n this.expect(tt.parenR);\n return this.finishNode(node, \"DeclaredPredicate\");\n } else {\n return this.finishNode(node, \"InferredPredicate\");\n }\n }\n\n flowParseTypeAndPredicateInitialiser(): [?N.FlowType, ?N.FlowPredicate] {\n const oldInType = this.state.inType;\n this.state.inType = true;\n this.expect(tt.colon);\n let type = null;\n let predicate = null;\n if (this.match(tt.modulo)) {\n this.state.inType = oldInType;\n predicate = this.flowParsePredicate();\n } else {\n type = this.flowParseType();\n this.state.inType = oldInType;\n if (this.match(tt.modulo)) {\n predicate = this.flowParsePredicate();\n }\n }\n return [type, predicate];\n }\n\n flowParseDeclareClass(node: N.FlowDeclareClass): N.FlowDeclareClass {\n this.next();\n this.flowParseInterfaceish(node, /*isClass*/ true);\n return this.finishNode(node, \"DeclareClass\");\n }\n\n flowParseDeclareFunction(\n node: N.FlowDeclareFunction,\n ): N.FlowDeclareFunction {\n this.next();\n\n const id = (node.id = this.parseIdentifier());\n\n const typeNode = this.startNode();\n const typeContainer = this.startNode();\n\n if (this.isRelational(\"<\")) {\n typeNode.typeParameters = this.flowParseTypeParameterDeclaration();\n } else {\n typeNode.typeParameters = null;\n }\n\n this.expect(tt.parenL);\n const tmp = this.flowParseFunctionTypeParams();\n typeNode.params = tmp.params;\n typeNode.rest = tmp.rest;\n this.expect(tt.parenR);\n\n [\n // $FlowFixMe (destructuring not supported yet)\n typeNode.returnType,\n // $FlowFixMe (destructuring not supported yet)\n node.predicate,\n ] = this.flowParseTypeAndPredicateInitialiser();\n\n typeContainer.typeAnnotation = this.finishNode(\n typeNode,\n \"FunctionTypeAnnotation\",\n );\n\n id.typeAnnotation = this.finishNode(typeContainer, \"TypeAnnotation\");\n\n this.resetEndLocation(id);\n this.semicolon();\n\n return this.finishNode(node, \"DeclareFunction\");\n }\n\n flowParseDeclare(\n node: N.FlowDeclare,\n insideModule?: boolean,\n ): N.FlowDeclare {\n if (this.match(tt._class)) {\n return this.flowParseDeclareClass(node);\n } else if (this.match(tt._function)) {\n return this.flowParseDeclareFunction(node);\n } else if (this.match(tt._var)) {\n return this.flowParseDeclareVariable(node);\n } else if (this.eatContextual(\"module\")) {\n if (this.match(tt.dot)) {\n return this.flowParseDeclareModuleExports(node);\n } else {\n if (insideModule) {\n this.raise(\n this.state.lastTokStart,\n \"`declare module` cannot be used inside another `declare module`\",\n );\n }\n return this.flowParseDeclareModule(node);\n }\n } else if (this.isContextual(\"type\")) {\n return this.flowParseDeclareTypeAlias(node);\n } else if (this.isContextual(\"opaque\")) {\n return this.flowParseDeclareOpaqueType(node);\n } else if (this.isContextual(\"interface\")) {\n return this.flowParseDeclareInterface(node);\n } else if (this.match(tt._export)) {\n return this.flowParseDeclareExportDeclaration(node, insideModule);\n } else {\n throw this.unexpected();\n }\n }\n\n flowParseDeclareVariable(\n node: N.FlowDeclareVariable,\n ): N.FlowDeclareVariable {\n this.next();\n node.id = this.flowParseTypeAnnotatableIdentifier(\n /*allowPrimitiveOverride*/ true,\n );\n this.scope.declareName(node.id.name, BIND_VAR, node.id.start);\n this.semicolon();\n return this.finishNode(node, \"DeclareVariable\");\n }\n\n flowParseDeclareModule(node: N.FlowDeclareModule): N.FlowDeclareModule {\n this.scope.enter(SCOPE_OTHER);\n\n if (this.match(tt.string)) {\n node.id = this.parseExprAtom();\n } else {\n node.id = this.parseIdentifier();\n }\n\n const bodyNode = (node.body = this.startNode());\n const body = (bodyNode.body = []);\n this.expect(tt.braceL);\n while (!this.match(tt.braceR)) {\n let bodyNode = this.startNode();\n\n if (this.match(tt._import)) {\n this.next();\n if (!this.isContextual(\"type\") && !this.match(tt._typeof)) {\n this.raise(\n this.state.lastTokStart,\n \"Imports within a `declare module` body must always be `import type` or `import typeof`\",\n );\n }\n this.parseImport(bodyNode);\n } else {\n this.expectContextual(\n \"declare\",\n \"Only declares and type imports are allowed inside declare module\",\n );\n\n bodyNode = this.flowParseDeclare(bodyNode, true);\n }\n\n body.push(bodyNode);\n }\n\n this.scope.exit();\n\n this.expect(tt.braceR);\n\n this.finishNode(bodyNode, \"BlockStatement\");\n\n let kind = null;\n let hasModuleExport = false;\n const errorMessage =\n \"Found both `declare module.exports` and `declare export` in the same module. \" +\n \"Modules can only have 1 since they are either an ES module or they are a CommonJS module\";\n body.forEach(bodyElement => {\n if (isEsModuleType(bodyElement)) {\n if (kind === \"CommonJS\") {\n this.raise(bodyElement.start, errorMessage);\n }\n kind = \"ES\";\n } else if (bodyElement.type === \"DeclareModuleExports\") {\n if (hasModuleExport) {\n this.raise(\n bodyElement.start,\n \"Duplicate `declare module.exports` statement\",\n );\n }\n if (kind === \"ES\") this.raise(bodyElement.start, errorMessage);\n kind = \"CommonJS\";\n hasModuleExport = true;\n }\n });\n\n node.kind = kind || \"CommonJS\";\n return this.finishNode(node, \"DeclareModule\");\n }\n\n flowParseDeclareExportDeclaration(\n node: N.FlowDeclareExportDeclaration,\n insideModule: ?boolean,\n ): N.FlowDeclareExportDeclaration {\n this.expect(tt._export);\n\n if (this.eat(tt._default)) {\n if (this.match(tt._function) || this.match(tt._class)) {\n // declare export default class ...\n // declare export default function ...\n node.declaration = this.flowParseDeclare(this.startNode());\n } else {\n // declare export default [type];\n node.declaration = this.flowParseType();\n this.semicolon();\n }\n node.default = true;\n\n return this.finishNode(node, \"DeclareExportDeclaration\");\n } else {\n if (\n this.match(tt._const) ||\n this.isLet() ||\n ((this.isContextual(\"type\") || this.isContextual(\"interface\")) &&\n !insideModule)\n ) {\n const label = this.state.value;\n const suggestion = exportSuggestions[label];\n this.unexpected(\n this.state.start,\n `\\`declare export ${label}\\` is not supported. Use \\`${suggestion}\\` instead`,\n );\n }\n\n if (\n this.match(tt._var) || // declare export var ...\n this.match(tt._function) || // declare export function ...\n this.match(tt._class) || // declare export class ...\n this.isContextual(\"opaque\") // declare export opaque ..\n ) {\n node.declaration = this.flowParseDeclare(this.startNode());\n node.default = false;\n\n return this.finishNode(node, \"DeclareExportDeclaration\");\n } else if (\n this.match(tt.star) || // declare export * from ''\n this.match(tt.braceL) || // declare export {} ...\n this.isContextual(\"interface\") || // declare export interface ...\n this.isContextual(\"type\") || // declare export type ...\n this.isContextual(\"opaque\") // declare export opaque type ...\n ) {\n node = this.parseExport(node);\n if (node.type === \"ExportNamedDeclaration\") {\n // flow does not support the ExportNamedDeclaration\n // $FlowIgnore\n node.type = \"ExportDeclaration\";\n // $FlowFixMe\n node.default = false;\n delete node.exportKind;\n }\n\n // $FlowIgnore\n node.type = \"Declare\" + node.type;\n\n return node;\n }\n }\n\n throw this.unexpected();\n }\n\n flowParseDeclareModuleExports(\n node: N.FlowDeclareModuleExports,\n ): N.FlowDeclareModuleExports {\n this.next();\n this.expectContextual(\"exports\");\n node.typeAnnotation = this.flowParseTypeAnnotation();\n this.semicolon();\n\n return this.finishNode(node, \"DeclareModuleExports\");\n }\n\n flowParseDeclareTypeAlias(\n node: N.FlowDeclareTypeAlias,\n ): N.FlowDeclareTypeAlias {\n this.next();\n this.flowParseTypeAlias(node);\n // Don't do finishNode as we don't want to process comments twice\n node.type = \"DeclareTypeAlias\";\n return node;\n }\n\n flowParseDeclareOpaqueType(\n node: N.FlowDeclareOpaqueType,\n ): N.FlowDeclareOpaqueType {\n this.next();\n this.flowParseOpaqueType(node, true);\n // Don't do finishNode as we don't want to process comments twice\n node.type = \"DeclareOpaqueType\";\n return node;\n }\n\n flowParseDeclareInterface(\n node: N.FlowDeclareInterface,\n ): N.FlowDeclareInterface {\n this.next();\n this.flowParseInterfaceish(node);\n return this.finishNode(node, \"DeclareInterface\");\n }\n\n // Interfaces\n\n flowParseInterfaceish(\n node: N.FlowDeclare,\n isClass?: boolean = false,\n ): void {\n node.id = this.flowParseRestrictedIdentifier(\n /* liberal */ !isClass,\n /* declaration */ true,\n );\n\n this.scope.declareName(\n node.id.name,\n isClass ? BIND_FUNCTION : BIND_LEXICAL,\n node.id.start,\n );\n\n if (this.isRelational(\"<\")) {\n node.typeParameters = this.flowParseTypeParameterDeclaration();\n } else {\n node.typeParameters = null;\n }\n\n node.extends = [];\n node.implements = [];\n node.mixins = [];\n\n if (this.eat(tt._extends)) {\n do {\n node.extends.push(this.flowParseInterfaceExtends());\n } while (!isClass && this.eat(tt.comma));\n }\n\n if (this.isContextual(\"mixins\")) {\n this.next();\n do {\n node.mixins.push(this.flowParseInterfaceExtends());\n } while (this.eat(tt.comma));\n }\n\n if (this.isContextual(\"implements\")) {\n this.next();\n do {\n node.implements.push(this.flowParseInterfaceExtends());\n } while (this.eat(tt.comma));\n }\n\n node.body = this.flowParseObjectType({\n allowStatic: isClass,\n allowExact: false,\n allowSpread: false,\n allowProto: isClass,\n allowInexact: false,\n });\n }\n\n flowParseInterfaceExtends(): N.FlowInterfaceExtends {\n const node = this.startNode();\n\n node.id = this.flowParseQualifiedTypeIdentifier();\n if (this.isRelational(\"<\")) {\n node.typeParameters = this.flowParseTypeParameterInstantiation();\n } else {\n node.typeParameters = null;\n }\n\n return this.finishNode(node, \"InterfaceExtends\");\n }\n\n flowParseInterface(node: N.FlowInterface): N.FlowInterface {\n this.flowParseInterfaceish(node);\n return this.finishNode(node, \"InterfaceDeclaration\");\n }\n\n checkNotUnderscore(word: string) {\n if (word === \"_\") {\n this.raise(\n this.state.start,\n \"`_` is only allowed as a type argument to call or new\",\n );\n }\n }\n\n checkReservedType(word: string, startLoc: number, declaration?: boolean) {\n if (!reservedTypes.has(word)) return;\n\n if (declaration) {\n this.raise(startLoc, `Cannot overwrite reserved type ${word}`);\n return;\n }\n\n this.raise(startLoc, `Unexpected reserved type ${word}`);\n }\n\n flowParseRestrictedIdentifier(\n liberal?: boolean,\n declaration?: boolean,\n ): N.Identifier {\n this.checkReservedType(this.state.value, this.state.start, declaration);\n return this.parseIdentifier(liberal);\n }\n\n // Type aliases\n\n flowParseTypeAlias(node: N.FlowTypeAlias): N.FlowTypeAlias {\n node.id = this.flowParseRestrictedIdentifier(\n /* liberal */ false,\n /* declaration */ true,\n );\n this.scope.declareName(node.id.name, BIND_LEXICAL, node.id.start);\n\n if (this.isRelational(\"<\")) {\n node.typeParameters = this.flowParseTypeParameterDeclaration();\n } else {\n node.typeParameters = null;\n }\n\n node.right = this.flowParseTypeInitialiser(tt.eq);\n this.semicolon();\n\n return this.finishNode(node, \"TypeAlias\");\n }\n\n flowParseOpaqueType(\n node: N.FlowOpaqueType,\n declare: boolean,\n ): N.FlowOpaqueType {\n this.expectContextual(\"type\");\n node.id = this.flowParseRestrictedIdentifier(\n /* liberal */ true,\n /* declaration */ true,\n );\n this.scope.declareName(node.id.name, BIND_LEXICAL, node.id.start);\n\n if (this.isRelational(\"<\")) {\n node.typeParameters = this.flowParseTypeParameterDeclaration();\n } else {\n node.typeParameters = null;\n }\n\n // Parse the supertype\n node.supertype = null;\n if (this.match(tt.colon)) {\n node.supertype = this.flowParseTypeInitialiser(tt.colon);\n }\n\n node.impltype = null;\n if (!declare) {\n node.impltype = this.flowParseTypeInitialiser(tt.eq);\n }\n this.semicolon();\n\n return this.finishNode(node, \"OpaqueType\");\n }\n\n // Type annotations\n\n flowParseTypeParameter(requireDefault?: boolean = false): N.TypeParameter {\n const nodeStart = this.state.start;\n\n const node = this.startNode();\n\n const variance = this.flowParseVariance();\n\n const ident = this.flowParseTypeAnnotatableIdentifier();\n node.name = ident.name;\n node.variance = variance;\n node.bound = ident.typeAnnotation;\n\n if (this.match(tt.eq)) {\n this.eat(tt.eq);\n node.default = this.flowParseType();\n } else {\n if (requireDefault) {\n this.raise(\n nodeStart,\n // eslint-disable-next-line max-len\n \"Type parameter declaration needs a default, since a preceding type parameter declaration has a default.\",\n );\n }\n }\n\n return this.finishNode(node, \"TypeParameter\");\n }\n\n flowParseTypeParameterDeclaration(): N.TypeParameterDeclaration {\n const oldInType = this.state.inType;\n const node = this.startNode();\n node.params = [];\n\n this.state.inType = true;\n\n // istanbul ignore else: this condition is already checked at all call sites\n if (this.isRelational(\"<\") || this.match(tt.jsxTagStart)) {\n this.next();\n } else {\n this.unexpected();\n }\n\n let defaultRequired = false;\n\n do {\n const typeParameter = this.flowParseTypeParameter(defaultRequired);\n\n node.params.push(typeParameter);\n\n if (typeParameter.default) {\n defaultRequired = true;\n }\n\n if (!this.isRelational(\">\")) {\n this.expect(tt.comma);\n }\n } while (!this.isRelational(\">\"));\n this.expectRelational(\">\");\n\n this.state.inType = oldInType;\n\n return this.finishNode(node, \"TypeParameterDeclaration\");\n }\n\n flowParseTypeParameterInstantiation(): N.TypeParameterInstantiation {\n const node = this.startNode();\n const oldInType = this.state.inType;\n node.params = [];\n\n this.state.inType = true;\n\n this.expectRelational(\"<\");\n const oldNoAnonFunctionType = this.state.noAnonFunctionType;\n this.state.noAnonFunctionType = false;\n while (!this.isRelational(\">\")) {\n node.params.push(this.flowParseType());\n if (!this.isRelational(\">\")) {\n this.expect(tt.comma);\n }\n }\n this.state.noAnonFunctionType = oldNoAnonFunctionType;\n this.expectRelational(\">\");\n\n this.state.inType = oldInType;\n\n return this.finishNode(node, \"TypeParameterInstantiation\");\n }\n\n flowParseTypeParameterInstantiationCallOrNew(): N.TypeParameterInstantiation {\n const node = this.startNode();\n const oldInType = this.state.inType;\n node.params = [];\n\n this.state.inType = true;\n\n this.expectRelational(\"<\");\n while (!this.isRelational(\">\")) {\n node.params.push(this.flowParseTypeOrImplicitInstantiation());\n if (!this.isRelational(\">\")) {\n this.expect(tt.comma);\n }\n }\n this.expectRelational(\">\");\n\n this.state.inType = oldInType;\n\n return this.finishNode(node, \"TypeParameterInstantiation\");\n }\n\n flowParseInterfaceType(): N.FlowInterfaceType {\n const node = this.startNode();\n this.expectContextual(\"interface\");\n\n node.extends = [];\n if (this.eat(tt._extends)) {\n do {\n node.extends.push(this.flowParseInterfaceExtends());\n } while (this.eat(tt.comma));\n }\n\n node.body = this.flowParseObjectType({\n allowStatic: false,\n allowExact: false,\n allowSpread: false,\n allowProto: false,\n allowInexact: false,\n });\n\n return this.finishNode(node, \"InterfaceTypeAnnotation\");\n }\n\n flowParseObjectPropertyKey(): N.Expression {\n return this.match(tt.num) || this.match(tt.string)\n ? this.parseExprAtom()\n : this.parseIdentifier(true);\n }\n\n flowParseObjectTypeIndexer(\n node: N.FlowObjectTypeIndexer,\n isStatic: boolean,\n variance: ?N.FlowVariance,\n ): N.FlowObjectTypeIndexer {\n node.static = isStatic;\n\n // Note: bracketL has already been consumed\n if (this.lookahead().type === tt.colon) {\n node.id = this.flowParseObjectPropertyKey();\n node.key = this.flowParseTypeInitialiser();\n } else {\n node.id = null;\n node.key = this.flowParseType();\n }\n this.expect(tt.bracketR);\n node.value = this.flowParseTypeInitialiser();\n node.variance = variance;\n\n return this.finishNode(node, \"ObjectTypeIndexer\");\n }\n\n flowParseObjectTypeInternalSlot(\n node: N.FlowObjectTypeInternalSlot,\n isStatic: boolean,\n ): N.FlowObjectTypeInternalSlot {\n node.static = isStatic;\n // Note: both bracketL have already been consumed\n node.id = this.flowParseObjectPropertyKey();\n this.expect(tt.bracketR);\n this.expect(tt.bracketR);\n if (this.isRelational(\"<\") || this.match(tt.parenL)) {\n node.method = true;\n node.optional = false;\n node.value = this.flowParseObjectTypeMethodish(\n this.startNodeAt(node.start, node.loc.start),\n );\n } else {\n node.method = false;\n if (this.eat(tt.question)) {\n node.optional = true;\n }\n node.value = this.flowParseTypeInitialiser();\n }\n return this.finishNode(node, \"ObjectTypeInternalSlot\");\n }\n\n flowParseObjectTypeMethodish(\n node: N.FlowFunctionTypeAnnotation,\n ): N.FlowFunctionTypeAnnotation {\n node.params = [];\n node.rest = null;\n node.typeParameters = null;\n\n if (this.isRelational(\"<\")) {\n node.typeParameters = this.flowParseTypeParameterDeclaration();\n }\n\n this.expect(tt.parenL);\n while (!this.match(tt.parenR) && !this.match(tt.ellipsis)) {\n node.params.push(this.flowParseFunctionTypeParam());\n if (!this.match(tt.parenR)) {\n this.expect(tt.comma);\n }\n }\n\n if (this.eat(tt.ellipsis)) {\n node.rest = this.flowParseFunctionTypeParam();\n }\n this.expect(tt.parenR);\n node.returnType = this.flowParseTypeInitialiser();\n\n return this.finishNode(node, \"FunctionTypeAnnotation\");\n }\n\n flowParseObjectTypeCallProperty(\n node: N.FlowObjectTypeCallProperty,\n isStatic: boolean,\n ): N.FlowObjectTypeCallProperty {\n const valueNode = this.startNode();\n node.static = isStatic;\n node.value = this.flowParseObjectTypeMethodish(valueNode);\n return this.finishNode(node, \"ObjectTypeCallProperty\");\n }\n\n flowParseObjectType({\n allowStatic,\n allowExact,\n allowSpread,\n allowProto,\n allowInexact,\n }: {\n allowStatic: boolean,\n allowExact: boolean,\n allowSpread: boolean,\n allowProto: boolean,\n allowInexact: boolean,\n }): N.FlowObjectTypeAnnotation {\n const oldInType = this.state.inType;\n this.state.inType = true;\n\n const nodeStart = this.startNode();\n\n nodeStart.callProperties = [];\n nodeStart.properties = [];\n nodeStart.indexers = [];\n nodeStart.internalSlots = [];\n\n let endDelim;\n let exact;\n let inexact = false;\n if (allowExact && this.match(tt.braceBarL)) {\n this.expect(tt.braceBarL);\n endDelim = tt.braceBarR;\n exact = true;\n } else {\n this.expect(tt.braceL);\n endDelim = tt.braceR;\n exact = false;\n }\n\n nodeStart.exact = exact;\n\n while (!this.match(endDelim)) {\n let isStatic = false;\n let protoStart: ?number = null;\n let inexactStart: ?number = null;\n const node = this.startNode();\n\n if (allowProto && this.isContextual(\"proto\")) {\n const lookahead = this.lookahead();\n\n if (lookahead.type !== tt.colon && lookahead.type !== tt.question) {\n this.next();\n protoStart = this.state.start;\n allowStatic = false;\n }\n }\n\n if (allowStatic && this.isContextual(\"static\")) {\n const lookahead = this.lookahead();\n\n // static is a valid identifier name\n if (lookahead.type !== tt.colon && lookahead.type !== tt.question) {\n this.next();\n isStatic = true;\n }\n }\n\n const variance = this.flowParseVariance();\n\n if (this.eat(tt.bracketL)) {\n if (protoStart != null) {\n this.unexpected(protoStart);\n }\n if (this.eat(tt.bracketL)) {\n if (variance) {\n this.unexpected(variance.start);\n }\n nodeStart.internalSlots.push(\n this.flowParseObjectTypeInternalSlot(node, isStatic),\n );\n } else {\n nodeStart.indexers.push(\n this.flowParseObjectTypeIndexer(node, isStatic, variance),\n );\n }\n } else if (this.match(tt.parenL) || this.isRelational(\"<\")) {\n if (protoStart != null) {\n this.unexpected(protoStart);\n }\n if (variance) {\n this.unexpected(variance.start);\n }\n nodeStart.callProperties.push(\n this.flowParseObjectTypeCallProperty(node, isStatic),\n );\n } else {\n let kind = \"init\";\n\n if (this.isContextual(\"get\") || this.isContextual(\"set\")) {\n const lookahead = this.lookahead();\n if (\n lookahead.type === tt.name ||\n lookahead.type === tt.string ||\n lookahead.type === tt.num\n ) {\n kind = this.state.value;\n this.next();\n }\n }\n\n const propOrInexact = this.flowParseObjectTypeProperty(\n node,\n isStatic,\n protoStart,\n variance,\n kind,\n allowSpread,\n allowInexact ?? !exact,\n );\n\n if (propOrInexact === null) {\n inexact = true;\n inexactStart = this.state.lastTokStart;\n } else {\n nodeStart.properties.push(propOrInexact);\n }\n }\n\n this.flowObjectTypeSemicolon();\n\n if (\n inexactStart &&\n !this.match(tt.braceR) &&\n !this.match(tt.braceBarR)\n ) {\n this.raise(\n inexactStart,\n \"Explicit inexact syntax must appear at the end of an inexact object\",\n );\n }\n }\n\n this.expect(endDelim);\n\n /* The inexact flag should only be added on ObjectTypeAnnotations that\n * are not the body of an interface, declare interface, or declare class.\n * Since spreads are only allowed in objec types, checking that is\n * sufficient here.\n */\n if (allowSpread) {\n nodeStart.inexact = inexact;\n }\n\n const out = this.finishNode(nodeStart, \"ObjectTypeAnnotation\");\n\n this.state.inType = oldInType;\n\n return out;\n }\n\n flowParseObjectTypeProperty(\n node: N.FlowObjectTypeProperty | N.FlowObjectTypeSpreadProperty,\n isStatic: boolean,\n protoStart: ?number,\n variance: ?N.FlowVariance,\n kind: string,\n allowSpread: boolean,\n allowInexact: boolean,\n ): (N.FlowObjectTypeProperty | N.FlowObjectTypeSpreadProperty) | null {\n if (this.eat(tt.ellipsis)) {\n const isInexactToken =\n this.match(tt.comma) ||\n this.match(tt.semi) ||\n this.match(tt.braceR) ||\n this.match(tt.braceBarR);\n\n if (isInexactToken) {\n if (!allowSpread) {\n this.raise(\n this.state.lastTokStart,\n \"Explicit inexact syntax cannot appear in class or interface definitions\",\n );\n } else if (!allowInexact) {\n this.raise(\n this.state.lastTokStart,\n \"Explicit inexact syntax cannot appear inside an explicit exact object type\",\n );\n }\n if (variance) {\n this.raise(\n variance.start,\n \"Explicit inexact syntax cannot have variance\",\n );\n }\n\n return null;\n }\n\n if (!allowSpread) {\n this.raise(\n this.state.lastTokStart,\n \"Spread operator cannot appear in class or interface definitions\",\n );\n }\n if (protoStart != null) {\n this.unexpected(protoStart);\n }\n if (variance) {\n this.raise(variance.start, \"Spread properties cannot have variance\");\n }\n\n node.argument = this.flowParseType();\n return this.finishNode(node, \"ObjectTypeSpreadProperty\");\n } else {\n node.key = this.flowParseObjectPropertyKey();\n node.static = isStatic;\n node.proto = protoStart != null;\n node.kind = kind;\n\n let optional = false;\n if (this.isRelational(\"<\") || this.match(tt.parenL)) {\n // This is a method property\n node.method = true;\n\n if (protoStart != null) {\n this.unexpected(protoStart);\n }\n if (variance) {\n this.unexpected(variance.start);\n }\n\n node.value = this.flowParseObjectTypeMethodish(\n this.startNodeAt(node.start, node.loc.start),\n );\n if (kind === \"get\" || kind === \"set\") {\n this.flowCheckGetterSetterParams(node);\n }\n } else {\n if (kind !== \"init\") this.unexpected();\n\n node.method = false;\n\n if (this.eat(tt.question)) {\n optional = true;\n }\n node.value = this.flowParseTypeInitialiser();\n node.variance = variance;\n }\n\n node.optional = optional;\n\n return this.finishNode(node, \"ObjectTypeProperty\");\n }\n }\n\n // This is similar to checkGetterSetterParams, but as\n // @babel/parser uses non estree properties we cannot reuse it here\n flowCheckGetterSetterParams(\n property: N.FlowObjectTypeProperty | N.FlowObjectTypeSpreadProperty,\n ): void {\n const paramCount = property.kind === \"get\" ? 0 : 1;\n const start = property.start;\n const length =\n property.value.params.length + (property.value.rest ? 1 : 0);\n if (length !== paramCount) {\n if (property.kind === \"get\") {\n this.raise(start, \"getter must not have any formal parameters\");\n } else {\n this.raise(start, \"setter must have exactly one formal parameter\");\n }\n }\n\n if (property.kind === \"set\" && property.value.rest) {\n this.raise(\n start,\n \"setter function argument must not be a rest parameter\",\n );\n }\n }\n\n flowObjectTypeSemicolon(): void {\n if (\n !this.eat(tt.semi) &&\n !this.eat(tt.comma) &&\n !this.match(tt.braceR) &&\n !this.match(tt.braceBarR)\n ) {\n this.unexpected();\n }\n }\n\n flowParseQualifiedTypeIdentifier(\n startPos?: number,\n startLoc?: Position,\n id?: N.Identifier,\n ): N.FlowQualifiedTypeIdentifier {\n startPos = startPos || this.state.start;\n startLoc = startLoc || this.state.startLoc;\n let node = id || this.flowParseRestrictedIdentifier(true);\n\n while (this.eat(tt.dot)) {\n const node2 = this.startNodeAt(startPos, startLoc);\n node2.qualification = node;\n node2.id = this.flowParseRestrictedIdentifier(true);\n node = this.finishNode(node2, \"QualifiedTypeIdentifier\");\n }\n\n return node;\n }\n\n flowParseGenericType(\n startPos: number,\n startLoc: Position,\n id: N.Identifier,\n ): N.FlowGenericTypeAnnotation {\n const node = this.startNodeAt(startPos, startLoc);\n\n node.typeParameters = null;\n node.id = this.flowParseQualifiedTypeIdentifier(startPos, startLoc, id);\n\n if (this.isRelational(\"<\")) {\n node.typeParameters = this.flowParseTypeParameterInstantiation();\n }\n\n return this.finishNode(node, \"GenericTypeAnnotation\");\n }\n\n flowParseTypeofType(): N.FlowTypeofTypeAnnotation {\n const node = this.startNode();\n this.expect(tt._typeof);\n node.argument = this.flowParsePrimaryType();\n return this.finishNode(node, \"TypeofTypeAnnotation\");\n }\n\n flowParseTupleType(): N.FlowTupleTypeAnnotation {\n const node = this.startNode();\n node.types = [];\n this.expect(tt.bracketL);\n // We allow trailing commas\n while (this.state.pos < this.length && !this.match(tt.bracketR)) {\n node.types.push(this.flowParseType());\n if (this.match(tt.bracketR)) break;\n this.expect(tt.comma);\n }\n this.expect(tt.bracketR);\n return this.finishNode(node, \"TupleTypeAnnotation\");\n }\n\n flowParseFunctionTypeParam(): N.FlowFunctionTypeParam {\n let name = null;\n let optional = false;\n let typeAnnotation = null;\n const node = this.startNode();\n const lh = this.lookahead();\n if (lh.type === tt.colon || lh.type === tt.question) {\n name = this.parseIdentifier();\n if (this.eat(tt.question)) {\n optional = true;\n }\n typeAnnotation = this.flowParseTypeInitialiser();\n } else {\n typeAnnotation = this.flowParseType();\n }\n node.name = name;\n node.optional = optional;\n node.typeAnnotation = typeAnnotation;\n return this.finishNode(node, \"FunctionTypeParam\");\n }\n\n reinterpretTypeAsFunctionTypeParam(\n type: N.FlowType,\n ): N.FlowFunctionTypeParam {\n const node = this.startNodeAt(type.start, type.loc.start);\n node.name = null;\n node.optional = false;\n node.typeAnnotation = type;\n return this.finishNode(node, \"FunctionTypeParam\");\n }\n\n flowParseFunctionTypeParams(\n params: N.FlowFunctionTypeParam[] = [],\n ): { params: N.FlowFunctionTypeParam[], rest: ?N.FlowFunctionTypeParam } {\n let rest: ?N.FlowFunctionTypeParam = null;\n while (!this.match(tt.parenR) && !this.match(tt.ellipsis)) {\n params.push(this.flowParseFunctionTypeParam());\n if (!this.match(tt.parenR)) {\n this.expect(tt.comma);\n }\n }\n if (this.eat(tt.ellipsis)) {\n rest = this.flowParseFunctionTypeParam();\n }\n return { params, rest };\n }\n\n flowIdentToTypeAnnotation(\n startPos: number,\n startLoc: Position,\n node: N.FlowTypeAnnotation,\n id: N.Identifier,\n ): N.FlowTypeAnnotation {\n switch (id.name) {\n case \"any\":\n return this.finishNode(node, \"AnyTypeAnnotation\");\n\n case \"bool\":\n case \"boolean\":\n return this.finishNode(node, \"BooleanTypeAnnotation\");\n\n case \"mixed\":\n return this.finishNode(node, \"MixedTypeAnnotation\");\n\n case \"empty\":\n return this.finishNode(node, \"EmptyTypeAnnotation\");\n\n case \"number\":\n return this.finishNode(node, \"NumberTypeAnnotation\");\n\n case \"string\":\n return this.finishNode(node, \"StringTypeAnnotation\");\n\n default:\n this.checkNotUnderscore(id.name);\n return this.flowParseGenericType(startPos, startLoc, id);\n }\n }\n\n // The parsing of types roughly parallels the parsing of expressions, and\n // primary types are kind of like primary expressions...they're the\n // primitives with which other types are constructed.\n flowParsePrimaryType(): N.FlowTypeAnnotation {\n const startPos = this.state.start;\n const startLoc = this.state.startLoc;\n const node = this.startNode();\n let tmp;\n let type;\n let isGroupedType = false;\n const oldNoAnonFunctionType = this.state.noAnonFunctionType;\n\n switch (this.state.type) {\n case tt.name:\n if (this.isContextual(\"interface\")) {\n return this.flowParseInterfaceType();\n }\n\n return this.flowIdentToTypeAnnotation(\n startPos,\n startLoc,\n node,\n this.parseIdentifier(),\n );\n\n case tt.braceL:\n return this.flowParseObjectType({\n allowStatic: false,\n allowExact: false,\n allowSpread: true,\n allowProto: false,\n allowInexact: true,\n });\n\n case tt.braceBarL:\n return this.flowParseObjectType({\n allowStatic: false,\n allowExact: true,\n allowSpread: true,\n allowProto: false,\n allowInexact: false,\n });\n\n case tt.bracketL:\n this.state.noAnonFunctionType = false;\n type = this.flowParseTupleType();\n this.state.noAnonFunctionType = oldNoAnonFunctionType;\n return type;\n\n case tt.relational:\n if (this.state.value === \"<\") {\n node.typeParameters = this.flowParseTypeParameterDeclaration();\n this.expect(tt.parenL);\n tmp = this.flowParseFunctionTypeParams();\n node.params = tmp.params;\n node.rest = tmp.rest;\n this.expect(tt.parenR);\n\n this.expect(tt.arrow);\n\n node.returnType = this.flowParseType();\n\n return this.finishNode(node, \"FunctionTypeAnnotation\");\n }\n break;\n\n case tt.parenL:\n this.next();\n\n // Check to see if this is actually a grouped type\n if (!this.match(tt.parenR) && !this.match(tt.ellipsis)) {\n if (this.match(tt.name)) {\n const token = this.lookahead().type;\n isGroupedType = token !== tt.question && token !== tt.colon;\n } else {\n isGroupedType = true;\n }\n }\n\n if (isGroupedType) {\n this.state.noAnonFunctionType = false;\n type = this.flowParseType();\n this.state.noAnonFunctionType = oldNoAnonFunctionType;\n\n // A `,` or a `) =>` means this is an anonymous function type\n if (\n this.state.noAnonFunctionType ||\n !(\n this.match(tt.comma) ||\n (this.match(tt.parenR) && this.lookahead().type === tt.arrow)\n )\n ) {\n this.expect(tt.parenR);\n return type;\n } else {\n // Eat a comma if there is one\n this.eat(tt.comma);\n }\n }\n\n if (type) {\n tmp = this.flowParseFunctionTypeParams([\n this.reinterpretTypeAsFunctionTypeParam(type),\n ]);\n } else {\n tmp = this.flowParseFunctionTypeParams();\n }\n\n node.params = tmp.params;\n node.rest = tmp.rest;\n\n this.expect(tt.parenR);\n\n this.expect(tt.arrow);\n\n node.returnType = this.flowParseType();\n\n node.typeParameters = null;\n\n return this.finishNode(node, \"FunctionTypeAnnotation\");\n\n case tt.string:\n return this.parseLiteral(\n this.state.value,\n \"StringLiteralTypeAnnotation\",\n );\n\n case tt._true:\n case tt._false:\n node.value = this.match(tt._true);\n this.next();\n return this.finishNode(node, \"BooleanLiteralTypeAnnotation\");\n\n case tt.plusMin:\n if (this.state.value === \"-\") {\n this.next();\n if (this.match(tt.num)) {\n return this.parseLiteral(\n -this.state.value,\n \"NumberLiteralTypeAnnotation\",\n node.start,\n node.loc.start,\n );\n }\n\n if (this.match(tt.bigint)) {\n return this.parseLiteral(\n -this.state.value,\n \"BigIntLiteralTypeAnnotation\",\n node.start,\n node.loc.start,\n );\n }\n\n throw this.raise(\n this.state.start,\n `Unexpected token, expected \"number\" or \"bigint\"`,\n );\n }\n\n this.unexpected();\n case tt.num:\n return this.parseLiteral(\n this.state.value,\n \"NumberLiteralTypeAnnotation\",\n );\n\n case tt.bigint:\n return this.parseLiteral(\n this.state.value,\n \"BigIntLiteralTypeAnnotation\",\n );\n\n case tt._void:\n this.next();\n return this.finishNode(node, \"VoidTypeAnnotation\");\n\n case tt._null:\n this.next();\n return this.finishNode(node, \"NullLiteralTypeAnnotation\");\n\n case tt._this:\n this.next();\n return this.finishNode(node, \"ThisTypeAnnotation\");\n\n case tt.star:\n this.next();\n return this.finishNode(node, \"ExistsTypeAnnotation\");\n\n default:\n if (this.state.type.keyword === \"typeof\") {\n return this.flowParseTypeofType();\n } else if (this.state.type.keyword) {\n const label = this.state.type.label;\n this.next();\n return super.createIdentifier(node, label);\n }\n }\n\n throw this.unexpected();\n }\n\n flowParsePostfixType(): N.FlowTypeAnnotation {\n const startPos = this.state.start,\n startLoc = this.state.startLoc;\n let type = this.flowParsePrimaryType();\n while (this.match(tt.bracketL) && !this.canInsertSemicolon()) {\n const node = this.startNodeAt(startPos, startLoc);\n node.elementType = type;\n this.expect(tt.bracketL);\n this.expect(tt.bracketR);\n type = this.finishNode(node, \"ArrayTypeAnnotation\");\n }\n return type;\n }\n\n flowParsePrefixType(): N.FlowTypeAnnotation {\n const node = this.startNode();\n if (this.eat(tt.question)) {\n node.typeAnnotation = this.flowParsePrefixType();\n return this.finishNode(node, \"NullableTypeAnnotation\");\n } else {\n return this.flowParsePostfixType();\n }\n }\n\n flowParseAnonFunctionWithoutParens(): N.FlowTypeAnnotation {\n const param = this.flowParsePrefixType();\n if (!this.state.noAnonFunctionType && this.eat(tt.arrow)) {\n // TODO: This should be a type error. Passing in a SourceLocation, and it expects a Position.\n const node = this.startNodeAt(param.start, param.loc.start);\n node.params = [this.reinterpretTypeAsFunctionTypeParam(param)];\n node.rest = null;\n node.returnType = this.flowParseType();\n node.typeParameters = null;\n return this.finishNode(node, \"FunctionTypeAnnotation\");\n }\n return param;\n }\n\n flowParseIntersectionType(): N.FlowTypeAnnotation {\n const node = this.startNode();\n this.eat(tt.bitwiseAND);\n const type = this.flowParseAnonFunctionWithoutParens();\n node.types = [type];\n while (this.eat(tt.bitwiseAND)) {\n node.types.push(this.flowParseAnonFunctionWithoutParens());\n }\n return node.types.length === 1\n ? type\n : this.finishNode(node, \"IntersectionTypeAnnotation\");\n }\n\n flowParseUnionType(): N.FlowTypeAnnotation {\n const node = this.startNode();\n this.eat(tt.bitwiseOR);\n const type = this.flowParseIntersectionType();\n node.types = [type];\n while (this.eat(tt.bitwiseOR)) {\n node.types.push(this.flowParseIntersectionType());\n }\n return node.types.length === 1\n ? type\n : this.finishNode(node, \"UnionTypeAnnotation\");\n }\n\n flowParseType(): N.FlowTypeAnnotation {\n const oldInType = this.state.inType;\n this.state.inType = true;\n const type = this.flowParseUnionType();\n this.state.inType = oldInType;\n // Ensure that a brace after a function generic type annotation is a\n // statement, except in arrow functions (noAnonFunctionType)\n this.state.exprAllowed =\n this.state.exprAllowed || this.state.noAnonFunctionType;\n return type;\n }\n\n flowParseTypeOrImplicitInstantiation(): N.FlowTypeAnnotation {\n if (this.state.type === tt.name && this.state.value === \"_\") {\n const startPos = this.state.start;\n const startLoc = this.state.startLoc;\n const node = this.parseIdentifier();\n return this.flowParseGenericType(startPos, startLoc, node);\n } else {\n return this.flowParseType();\n }\n }\n\n flowParseTypeAnnotation(): N.FlowTypeAnnotation {\n const node = this.startNode();\n node.typeAnnotation = this.flowParseTypeInitialiser();\n return this.finishNode(node, \"TypeAnnotation\");\n }\n\n flowParseTypeAnnotatableIdentifier(\n allowPrimitiveOverride?: boolean,\n ): N.Identifier {\n const ident = allowPrimitiveOverride\n ? this.parseIdentifier()\n : this.flowParseRestrictedIdentifier();\n if (this.match(tt.colon)) {\n ident.typeAnnotation = this.flowParseTypeAnnotation();\n this.resetEndLocation(ident);\n }\n return ident;\n }\n\n typeCastToParameter(node: N.Node): N.Node {\n node.expression.typeAnnotation = node.typeAnnotation;\n\n this.resetEndLocation(\n node.expression,\n node.typeAnnotation.end,\n node.typeAnnotation.loc.end,\n );\n\n return node.expression;\n }\n\n flowParseVariance(): ?N.FlowVariance {\n let variance = null;\n if (this.match(tt.plusMin)) {\n variance = this.startNode();\n if (this.state.value === \"+\") {\n variance.kind = \"plus\";\n } else {\n variance.kind = \"minus\";\n }\n this.next();\n this.finishNode(variance, \"Variance\");\n }\n return variance;\n }\n\n // ==================================\n // Overrides\n // ==================================\n\n parseFunctionBody(\n node: N.Function,\n allowExpressionBody: ?boolean,\n isMethod?: boolean = false,\n ): void {\n if (allowExpressionBody) {\n return this.forwardNoArrowParamsConversionAt(node, () =>\n super.parseFunctionBody(node, true, isMethod),\n );\n }\n\n return super.parseFunctionBody(node, false, isMethod);\n }\n\n parseFunctionBodyAndFinish(\n node: N.BodilessFunctionOrMethodBase,\n type: string,\n isMethod?: boolean = false,\n ): void {\n if (this.match(tt.colon)) {\n const typeNode = this.startNode();\n\n [\n // $FlowFixMe (destructuring not supported yet)\n typeNode.typeAnnotation,\n // $FlowFixMe (destructuring not supported yet)\n node.predicate,\n ] = this.flowParseTypeAndPredicateInitialiser();\n\n node.returnType = typeNode.typeAnnotation\n ? this.finishNode(typeNode, \"TypeAnnotation\")\n : null;\n }\n\n super.parseFunctionBodyAndFinish(node, type, isMethod);\n }\n\n // interfaces and enums\n parseStatement(context: ?string, topLevel?: boolean): N.Statement {\n // strict mode handling of `interface` since it's a reserved word\n if (\n this.state.strict &&\n this.match(tt.name) &&\n this.state.value === \"interface\"\n ) {\n const node = this.startNode();\n this.next();\n return this.flowParseInterface(node);\n } else if (this.shouldParseEnums() && this.isContextual(\"enum\")) {\n const node = this.startNode();\n this.next();\n return this.flowParseEnumDeclaration(node);\n } else {\n const stmt = super.parseStatement(context, topLevel);\n // We will parse a flow pragma in any comment before the first statement.\n if (this.flowPragma === undefined && !this.isValidDirective(stmt)) {\n this.flowPragma = null;\n }\n return stmt;\n }\n }\n\n // declares, interfaces and type aliases\n parseExpressionStatement(\n node: N.ExpressionStatement,\n expr: N.Expression,\n ): N.ExpressionStatement {\n if (expr.type === \"Identifier\") {\n if (expr.name === \"declare\") {\n if (\n this.match(tt._class) ||\n this.match(tt.name) ||\n this.match(tt._function) ||\n this.match(tt._var) ||\n this.match(tt._export)\n ) {\n return this.flowParseDeclare(node);\n }\n } else if (this.match(tt.name)) {\n if (expr.name === \"interface\") {\n return this.flowParseInterface(node);\n } else if (expr.name === \"type\") {\n return this.flowParseTypeAlias(node);\n } else if (expr.name === \"opaque\") {\n return this.flowParseOpaqueType(node, false);\n }\n }\n }\n\n return super.parseExpressionStatement(node, expr);\n }\n\n // export type\n shouldParseExportDeclaration(): boolean {\n return (\n this.isContextual(\"type\") ||\n this.isContextual(\"interface\") ||\n this.isContextual(\"opaque\") ||\n (this.shouldParseEnums() && this.isContextual(\"enum\")) ||\n super.shouldParseExportDeclaration()\n );\n }\n\n isExportDefaultSpecifier(): boolean {\n if (\n this.match(tt.name) &&\n (this.state.value === \"type\" ||\n this.state.value === \"interface\" ||\n this.state.value === \"opaque\" ||\n (this.shouldParseEnums() && this.state.value === \"enum\"))\n ) {\n return false;\n }\n\n return super.isExportDefaultSpecifier();\n }\n\n parseExportDefaultExpression(): N.Expression | N.Declaration {\n if (this.shouldParseEnums() && this.isContextual(\"enum\")) {\n const node = this.startNode();\n this.next();\n return this.flowParseEnumDeclaration(node);\n }\n return super.parseExportDefaultExpression();\n }\n\n parseConditional(\n expr: N.Expression,\n noIn: ?boolean,\n startPos: number,\n startLoc: Position,\n refNeedsArrowPos?: ?Pos,\n ): N.Expression {\n if (!this.match(tt.question)) return expr;\n\n // only use the expensive \"tryParse\" method if there is a question mark\n // and if we come from inside parens\n if (refNeedsArrowPos) {\n const result = this.tryParse(() =>\n super.parseConditional(expr, noIn, startPos, startLoc),\n );\n\n if (!result.node) {\n // $FlowIgnore\n refNeedsArrowPos.start = result.error.pos || this.state.start;\n return expr;\n }\n\n if (result.error) this.state = result.failState;\n return result.node;\n }\n\n this.expect(tt.question);\n const state = this.state.clone();\n const originalNoArrowAt = this.state.noArrowAt;\n const node = this.startNodeAt(startPos, startLoc);\n let { consequent, failed } = this.tryParseConditionalConsequent();\n let [valid, invalid] = this.getArrowLikeExpressions(consequent);\n\n if (failed || invalid.length > 0) {\n const noArrowAt = [...originalNoArrowAt];\n\n if (invalid.length > 0) {\n this.state = state;\n this.state.noArrowAt = noArrowAt;\n\n for (let i = 0; i < invalid.length; i++) {\n noArrowAt.push(invalid[i].start);\n }\n\n ({ consequent, failed } = this.tryParseConditionalConsequent());\n [valid, invalid] = this.getArrowLikeExpressions(consequent);\n }\n\n if (failed && valid.length > 1) {\n // if there are two or more possible correct ways of parsing, throw an\n // error.\n // e.g. Source: a ? (b): c => (d): e => f\n // Result 1: a ? b : (c => ((d): e => f))\n // Result 2: a ? ((b): c => d) : (e => f)\n this.raise(\n state.start,\n \"Ambiguous expression: wrap the arrow functions in parentheses to disambiguate.\",\n );\n }\n\n if (failed && valid.length === 1) {\n this.state = state;\n this.state.noArrowAt = noArrowAt.concat(valid[0].start);\n ({ consequent, failed } = this.tryParseConditionalConsequent());\n }\n }\n\n this.getArrowLikeExpressions(consequent, true);\n\n this.state.noArrowAt = originalNoArrowAt;\n this.expect(tt.colon);\n\n node.test = expr;\n node.consequent = consequent;\n node.alternate = this.forwardNoArrowParamsConversionAt(node, () =>\n this.parseMaybeAssign(noIn, undefined, undefined, undefined),\n );\n\n return this.finishNode(node, \"ConditionalExpression\");\n }\n\n tryParseConditionalConsequent(): {\n consequent: N.Expression,\n failed: boolean,\n } {\n this.state.noArrowParamsConversionAt.push(this.state.start);\n\n const consequent = this.parseMaybeAssign();\n const failed = !this.match(tt.colon);\n\n this.state.noArrowParamsConversionAt.pop();\n\n return { consequent, failed };\n }\n\n // Given an expression, walks through out its arrow functions whose body is\n // an expression and through out conditional expressions. It returns every\n // function which has been parsed with a return type but could have been\n // parenthesized expressions.\n // These functions are separated into two arrays: one containing the ones\n // whose parameters can be converted to assignable lists, one containing the\n // others.\n getArrowLikeExpressions(\n node: N.Expression,\n disallowInvalid?: boolean,\n ): [N.ArrowFunctionExpression[], N.ArrowFunctionExpression[]] {\n const stack = [node];\n const arrows: N.ArrowFunctionExpression[] = [];\n\n while (stack.length !== 0) {\n const node = stack.pop();\n if (node.type === \"ArrowFunctionExpression\") {\n if (node.typeParameters || !node.returnType) {\n // This is an arrow expression without ambiguity, so check its parameters\n this.finishArrowValidation(node);\n } else {\n arrows.push(node);\n }\n stack.push(node.body);\n } else if (node.type === \"ConditionalExpression\") {\n stack.push(node.consequent);\n stack.push(node.alternate);\n }\n }\n\n if (disallowInvalid) {\n arrows.forEach(node => this.finishArrowValidation(node));\n return [arrows, []];\n }\n\n return partition(arrows, node =>\n node.params.every(param => this.isAssignable(param, true)),\n );\n }\n\n finishArrowValidation(node: N.ArrowFunctionExpression) {\n this.toAssignableList(\n // node.params is Expression[] instead of $ReadOnlyArray<Pattern> because it\n // has not been converted yet.\n ((node.params: any): N.Expression[]),\n true,\n \"arrow function parameters\",\n node.extra?.trailingComma,\n );\n // Enter scope, as checkParams defines bindings\n this.scope.enter(functionFlags(false, false) | SCOPE_ARROW);\n // Use super's method to force the parameters to be checked\n super.checkParams(node, false, true);\n this.scope.exit();\n }\n\n forwardNoArrowParamsConversionAt<T>(node: N.Node, parse: () => T): T {\n let result: T;\n if (this.state.noArrowParamsConversionAt.indexOf(node.start) !== -1) {\n this.state.noArrowParamsConversionAt.push(this.state.start);\n result = parse();\n this.state.noArrowParamsConversionAt.pop();\n } else {\n result = parse();\n }\n\n return result;\n }\n\n parseParenItem(\n node: N.Expression,\n startPos: number,\n startLoc: Position,\n ): N.Expression {\n node = super.parseParenItem(node, startPos, startLoc);\n if (this.eat(tt.question)) {\n node.optional = true;\n // Include questionmark in location of node\n // Don't use this.finishNode() as otherwise we might process comments twice and\n // include already consumed parens\n this.resetEndLocation(node);\n }\n\n if (this.match(tt.colon)) {\n const typeCastNode = this.startNodeAt(startPos, startLoc);\n typeCastNode.expression = node;\n typeCastNode.typeAnnotation = this.flowParseTypeAnnotation();\n\n return this.finishNode(typeCastNode, \"TypeCastExpression\");\n }\n\n return node;\n }\n\n assertModuleNodeAllowed(node: N.Node) {\n if (\n (node.type === \"ImportDeclaration\" &&\n (node.importKind === \"type\" || node.importKind === \"typeof\")) ||\n (node.type === \"ExportNamedDeclaration\" &&\n node.exportKind === \"type\") ||\n (node.type === \"ExportAllDeclaration\" && node.exportKind === \"type\")\n ) {\n // Allow Flowtype imports and exports in all conditions because\n // Flow itself does not care about 'sourceType'.\n return;\n }\n\n super.assertModuleNodeAllowed(node);\n }\n\n parseExport(node: N.Node): N.AnyExport {\n const decl = super.parseExport(node);\n if (\n decl.type === \"ExportNamedDeclaration\" ||\n decl.type === \"ExportAllDeclaration\"\n ) {\n decl.exportKind = decl.exportKind || \"value\";\n }\n return decl;\n }\n\n parseExportDeclaration(node: N.ExportNamedDeclaration): ?N.Declaration {\n if (this.isContextual(\"type\")) {\n node.exportKind = \"type\";\n\n const declarationNode = this.startNode();\n this.next();\n\n if (this.match(tt.braceL)) {\n // export type { foo, bar };\n node.specifiers = this.parseExportSpecifiers();\n this.parseExportFrom(node);\n return null;\n } else {\n // export type Foo = Bar;\n return this.flowParseTypeAlias(declarationNode);\n }\n } else if (this.isContextual(\"opaque\")) {\n node.exportKind = \"type\";\n\n const declarationNode = this.startNode();\n this.next();\n // export opaque type Foo = Bar;\n return this.flowParseOpaqueType(declarationNode, false);\n } else if (this.isContextual(\"interface\")) {\n node.exportKind = \"type\";\n const declarationNode = this.startNode();\n this.next();\n return this.flowParseInterface(declarationNode);\n } else if (this.shouldParseEnums() && this.isContextual(\"enum\")) {\n node.exportKind = \"value\";\n const declarationNode = this.startNode();\n this.next();\n return this.flowParseEnumDeclaration(declarationNode);\n } else {\n return super.parseExportDeclaration(node);\n }\n }\n\n eatExportStar(node: N.Node): boolean {\n if (super.eatExportStar(...arguments)) return true;\n\n if (this.isContextual(\"type\") && this.lookahead().type === tt.star) {\n node.exportKind = \"type\";\n this.next();\n this.next();\n return true;\n }\n\n return false;\n }\n\n maybeParseExportNamespaceSpecifier(node: N.Node): boolean {\n const pos = this.state.start;\n const hasNamespace = super.maybeParseExportNamespaceSpecifier(node);\n if (hasNamespace && node.exportKind === \"type\") {\n this.unexpected(pos);\n }\n return hasNamespace;\n }\n\n parseClassId(node: N.Class, isStatement: boolean, optionalId: ?boolean) {\n super.parseClassId(node, isStatement, optionalId);\n if (this.isRelational(\"<\")) {\n node.typeParameters = this.flowParseTypeParameterDeclaration();\n }\n }\n\n // ensure that inside flow types, we bypass the jsx parser plugin\n getTokenFromCode(code: number): void {\n const next = this.input.charCodeAt(this.state.pos + 1);\n if (code === charCodes.leftCurlyBrace && next === charCodes.verticalBar) {\n return this.finishOp(tt.braceBarL, 2);\n } else if (\n this.state.inType &&\n (code === charCodes.greaterThan || code === charCodes.lessThan)\n ) {\n return this.finishOp(tt.relational, 1);\n } else if (isIteratorStart(code, next)) {\n this.state.isIterator = true;\n return super.readWord();\n } else {\n return super.getTokenFromCode(code);\n }\n }\n\n isAssignable(node: N.Node, isBinding?: boolean): boolean {\n switch (node.type) {\n case \"Identifier\":\n case \"ObjectPattern\":\n case \"ArrayPattern\":\n case \"AssignmentPattern\":\n return true;\n\n case \"ObjectExpression\": {\n const last = node.properties.length - 1;\n return node.properties.every((prop, i) => {\n return (\n prop.type !== \"ObjectMethod\" &&\n (i === last || prop.type === \"SpreadElement\") &&\n this.isAssignable(prop)\n );\n });\n }\n\n case \"ObjectProperty\":\n return this.isAssignable(node.value);\n\n case \"SpreadElement\":\n return this.isAssignable(node.argument);\n\n case \"ArrayExpression\":\n return node.elements.every(element => this.isAssignable(element));\n\n case \"AssignmentExpression\":\n return node.operator === \"=\";\n\n case \"ParenthesizedExpression\":\n case \"TypeCastExpression\":\n return this.isAssignable(node.expression);\n\n case \"MemberExpression\":\n case \"OptionalMemberExpression\":\n return !isBinding;\n\n default:\n return false;\n }\n }\n\n toAssignable(\n node: N.Node,\n isBinding: ?boolean,\n contextDescription: string,\n ): N.Node {\n if (node.type === \"TypeCastExpression\") {\n return super.toAssignable(\n this.typeCastToParameter(node),\n isBinding,\n contextDescription,\n );\n } else {\n return super.toAssignable(node, isBinding, contextDescription);\n }\n }\n\n // turn type casts that we found in function parameter head into type annotated params\n toAssignableList(\n exprList: N.Expression[],\n isBinding: ?boolean,\n contextDescription: string,\n trailingCommaPos?: ?number,\n ): $ReadOnlyArray<N.Pattern> {\n for (let i = 0; i < exprList.length; i++) {\n const expr = exprList[i];\n if (expr && expr.type === \"TypeCastExpression\") {\n exprList[i] = this.typeCastToParameter(expr);\n }\n }\n return super.toAssignableList(\n exprList,\n isBinding,\n contextDescription,\n trailingCommaPos,\n );\n }\n\n // this is a list of nodes, from something like a call expression, we need to filter the\n // type casts that we've found that are illegal in this context\n toReferencedList(\n exprList: $ReadOnlyArray<?N.Expression>,\n isParenthesizedExpr?: boolean,\n ): $ReadOnlyArray<?N.Expression> {\n for (let i = 0; i < exprList.length; i++) {\n const expr = exprList[i];\n if (\n expr &&\n expr.type === \"TypeCastExpression\" &&\n (!expr.extra || !expr.extra.parenthesized) &&\n (exprList.length > 1 || !isParenthesizedExpr)\n ) {\n this.raise(\n expr.typeAnnotation.start,\n \"The type cast expression is expected to be wrapped with parenthesis\",\n );\n }\n }\n\n return exprList;\n }\n\n checkLVal(\n expr: N.Expression,\n bindingType: BindingTypes = BIND_NONE,\n checkClashes: ?{ [key: string]: boolean },\n contextDescription: string,\n ): void {\n if (expr.type !== \"TypeCastExpression\") {\n return super.checkLVal(\n expr,\n bindingType,\n checkClashes,\n contextDescription,\n );\n }\n }\n\n // parse class property type annotations\n parseClassProperty(node: N.ClassProperty): N.ClassProperty {\n if (this.match(tt.colon)) {\n node.typeAnnotation = this.flowParseTypeAnnotation();\n }\n return super.parseClassProperty(node);\n }\n\n parseClassPrivateProperty(\n node: N.ClassPrivateProperty,\n ): N.ClassPrivateProperty {\n if (this.match(tt.colon)) {\n node.typeAnnotation = this.flowParseTypeAnnotation();\n }\n return super.parseClassPrivateProperty(node);\n }\n\n // determine whether or not we're currently in the position where a class method would appear\n isClassMethod(): boolean {\n return this.isRelational(\"<\") || super.isClassMethod();\n }\n\n // determine whether or not we're currently in the position where a class property would appear\n isClassProperty(): boolean {\n return this.match(tt.colon) || super.isClassProperty();\n }\n\n isNonstaticConstructor(method: N.ClassMethod | N.ClassProperty): boolean {\n return !this.match(tt.colon) && super.isNonstaticConstructor(method);\n }\n\n // parse type parameters for class methods\n pushClassMethod(\n classBody: N.ClassBody,\n method: N.ClassMethod,\n isGenerator: boolean,\n isAsync: boolean,\n isConstructor: boolean,\n allowsDirectSuper: boolean,\n ): void {\n if ((method: $FlowFixMe).variance) {\n this.unexpected((method: $FlowFixMe).variance.start);\n }\n delete (method: $FlowFixMe).variance;\n if (this.isRelational(\"<\")) {\n method.typeParameters = this.flowParseTypeParameterDeclaration();\n }\n\n super.pushClassMethod(\n classBody,\n method,\n isGenerator,\n isAsync,\n isConstructor,\n allowsDirectSuper,\n );\n }\n\n pushClassPrivateMethod(\n classBody: N.ClassBody,\n method: N.ClassPrivateMethod,\n isGenerator: boolean,\n isAsync: boolean,\n ): void {\n if ((method: $FlowFixMe).variance) {\n this.unexpected((method: $FlowFixMe).variance.start);\n }\n delete (method: $FlowFixMe).variance;\n if (this.isRelational(\"<\")) {\n method.typeParameters = this.flowParseTypeParameterDeclaration();\n }\n\n super.pushClassPrivateMethod(classBody, method, isGenerator, isAsync);\n }\n\n // parse a the super class type parameters and implements\n parseClassSuper(node: N.Class): void {\n super.parseClassSuper(node);\n if (node.superClass && this.isRelational(\"<\")) {\n node.superTypeParameters = this.flowParseTypeParameterInstantiation();\n }\n if (this.isContextual(\"implements\")) {\n this.next();\n const implemented: N.FlowClassImplements[] = (node.implements = []);\n do {\n const node = this.startNode();\n node.id = this.flowParseRestrictedIdentifier(/*liberal*/ true);\n if (this.isRelational(\"<\")) {\n node.typeParameters = this.flowParseTypeParameterInstantiation();\n } else {\n node.typeParameters = null;\n }\n implemented.push(this.finishNode(node, \"ClassImplements\"));\n } while (this.eat(tt.comma));\n }\n }\n\n parsePropertyName(\n node: N.ObjectOrClassMember | N.ClassMember | N.TsNamedTypeElementBase,\n isPrivateNameAllowed: boolean,\n ): N.Identifier {\n const variance = this.flowParseVariance();\n const key = super.parsePropertyName(node, isPrivateNameAllowed);\n // $FlowIgnore (\"variance\" not defined on TsNamedTypeElementBase)\n node.variance = variance;\n return key;\n }\n\n // parse type parameters for object method shorthand\n parseObjPropValue(\n prop: N.ObjectMember,\n startPos: ?number,\n startLoc: ?Position,\n isGenerator: boolean,\n isAsync: boolean,\n isPattern: boolean,\n refShorthandDefaultPos: ?Pos,\n containsEsc: boolean,\n ): void {\n if ((prop: $FlowFixMe).variance) {\n this.unexpected((prop: $FlowFixMe).variance.start);\n }\n delete (prop: $FlowFixMe).variance;\n\n let typeParameters;\n\n // method shorthand\n if (this.isRelational(\"<\")) {\n typeParameters = this.flowParseTypeParameterDeclaration();\n if (!this.match(tt.parenL)) this.unexpected();\n }\n\n super.parseObjPropValue(\n prop,\n startPos,\n startLoc,\n isGenerator,\n isAsync,\n isPattern,\n refShorthandDefaultPos,\n containsEsc,\n );\n\n // add typeParameters if we found them\n if (typeParameters) {\n (prop.value || prop).typeParameters = typeParameters;\n }\n }\n\n parseAssignableListItemTypes(param: N.Pattern): N.Pattern {\n if (this.eat(tt.question)) {\n if (param.type !== \"Identifier\") {\n this.raise(\n param.start,\n \"A binding pattern parameter cannot be optional in an implementation signature.\",\n );\n }\n\n ((param: any): N.Identifier).optional = true;\n }\n if (this.match(tt.colon)) {\n param.typeAnnotation = this.flowParseTypeAnnotation();\n }\n this.resetEndLocation(param);\n return param;\n }\n\n parseMaybeDefault(\n startPos?: ?number,\n startLoc?: ?Position,\n left?: ?N.Pattern,\n ): N.Pattern {\n const node = super.parseMaybeDefault(startPos, startLoc, left);\n\n if (\n node.type === \"AssignmentPattern\" &&\n node.typeAnnotation &&\n node.right.start < node.typeAnnotation.start\n ) {\n this.raise(\n node.typeAnnotation.start,\n \"Type annotations must come before default assignments, \" +\n \"e.g. instead of `age = 25: number` use `age: number = 25`\",\n );\n }\n\n return node;\n }\n\n shouldParseDefaultImport(node: N.ImportDeclaration): boolean {\n if (!hasTypeImportKind(node)) {\n return super.shouldParseDefaultImport(node);\n }\n\n return isMaybeDefaultImport(this.state);\n }\n\n parseImportSpecifierLocal(\n node: N.ImportDeclaration,\n specifier: N.Node,\n type: string,\n contextDescription: string,\n ): void {\n specifier.local = hasTypeImportKind(node)\n ? this.flowParseRestrictedIdentifier(\n /* liberal */ true,\n /* declaration */ true,\n )\n : this.parseIdentifier();\n\n this.checkLVal(\n specifier.local,\n BIND_LEXICAL,\n undefined,\n contextDescription,\n );\n node.specifiers.push(this.finishNode(specifier, type));\n }\n\n // parse typeof and type imports\n maybeParseDefaultImportSpecifier(node: N.ImportDeclaration): boolean {\n node.importKind = \"value\";\n\n let kind = null;\n if (this.match(tt._typeof)) {\n kind = \"typeof\";\n } else if (this.isContextual(\"type\")) {\n kind = \"type\";\n }\n if (kind) {\n const lh = this.lookahead();\n\n // import type * is not allowed\n if (kind === \"type\" && lh.type === tt.star) {\n this.unexpected(lh.start);\n }\n\n if (\n isMaybeDefaultImport(lh) ||\n lh.type === tt.braceL ||\n lh.type === tt.star\n ) {\n this.next();\n node.importKind = kind;\n }\n }\n\n return super.maybeParseDefaultImportSpecifier(node);\n }\n\n // parse import-type/typeof shorthand\n parseImportSpecifier(node: N.ImportDeclaration): void {\n const specifier = this.startNode();\n const firstIdentLoc = this.state.start;\n const firstIdent = this.parseIdentifier(true);\n\n let specifierTypeKind = null;\n if (firstIdent.name === \"type\") {\n specifierTypeKind = \"type\";\n } else if (firstIdent.name === \"typeof\") {\n specifierTypeKind = \"typeof\";\n }\n\n let isBinding = false;\n if (this.isContextual(\"as\") && !this.isLookaheadContextual(\"as\")) {\n const as_ident = this.parseIdentifier(true);\n if (\n specifierTypeKind !== null &&\n !this.match(tt.name) &&\n !this.state.type.keyword\n ) {\n // `import {type as ,` or `import {type as }`\n specifier.imported = as_ident;\n specifier.importKind = specifierTypeKind;\n specifier.local = as_ident.__clone();\n } else {\n // `import {type as foo`\n specifier.imported = firstIdent;\n specifier.importKind = null;\n specifier.local = this.parseIdentifier();\n }\n } else if (\n specifierTypeKind !== null &&\n (this.match(tt.name) || this.state.type.keyword)\n ) {\n // `import {type foo`\n specifier.imported = this.parseIdentifier(true);\n specifier.importKind = specifierTypeKind;\n if (this.eatContextual(\"as\")) {\n specifier.local = this.parseIdentifier();\n } else {\n isBinding = true;\n specifier.local = specifier.imported.__clone();\n }\n } else {\n isBinding = true;\n specifier.imported = firstIdent;\n specifier.importKind = null;\n specifier.local = specifier.imported.__clone();\n }\n\n const nodeIsTypeImport = hasTypeImportKind(node);\n const specifierIsTypeImport = hasTypeImportKind(specifier);\n\n if (nodeIsTypeImport && specifierIsTypeImport) {\n this.raise(\n firstIdentLoc,\n \"The `type` and `typeof` keywords on named imports can only be used on regular \" +\n \"`import` statements. It cannot be used with `import type` or `import typeof` statements\",\n );\n }\n\n if (nodeIsTypeImport || specifierIsTypeImport) {\n this.checkReservedType(\n specifier.local.name,\n specifier.local.start,\n /* declaration */ true,\n );\n }\n\n if (isBinding && !nodeIsTypeImport && !specifierIsTypeImport) {\n this.checkReservedWord(\n specifier.local.name,\n specifier.start,\n true,\n true,\n );\n }\n\n this.checkLVal(\n specifier.local,\n BIND_LEXICAL,\n undefined,\n \"import specifier\",\n );\n node.specifiers.push(this.finishNode(specifier, \"ImportSpecifier\"));\n }\n\n // parse function type parameters - function foo<T>() {}\n parseFunctionParams(node: N.Function, allowModifiers?: boolean): void {\n // $FlowFixMe\n const kind = node.kind;\n if (kind !== \"get\" && kind !== \"set\" && this.isRelational(\"<\")) {\n node.typeParameters = this.flowParseTypeParameterDeclaration();\n }\n super.parseFunctionParams(node, allowModifiers);\n }\n\n // parse flow type annotations on variable declarator heads - let foo: string = bar\n parseVarId(\n decl: N.VariableDeclarator,\n kind: \"var\" | \"let\" | \"const\",\n ): void {\n super.parseVarId(decl, kind);\n if (this.match(tt.colon)) {\n decl.id.typeAnnotation = this.flowParseTypeAnnotation();\n this.resetEndLocation(decl.id); // set end position to end of type\n }\n }\n\n // parse the return type of an async arrow function - let foo = (async (): number => {});\n parseAsyncArrowFromCallExpression(\n node: N.ArrowFunctionExpression,\n call: N.CallExpression,\n ): N.ArrowFunctionExpression {\n if (this.match(tt.colon)) {\n const oldNoAnonFunctionType = this.state.noAnonFunctionType;\n this.state.noAnonFunctionType = true;\n node.returnType = this.flowParseTypeAnnotation();\n this.state.noAnonFunctionType = oldNoAnonFunctionType;\n }\n\n return super.parseAsyncArrowFromCallExpression(node, call);\n }\n\n // todo description\n shouldParseAsyncArrow(): boolean {\n return this.match(tt.colon) || super.shouldParseAsyncArrow();\n }\n\n // We need to support type parameter declarations for arrow functions. This\n // is tricky. There are three situations we need to handle\n //\n // 1. This is either JSX or an arrow function. We'll try JSX first. If that\n // fails, we'll try an arrow function. If that fails, we'll throw the JSX\n // error.\n // 2. This is an arrow function. We'll parse the type parameter declaration,\n // parse the rest, make sure the rest is an arrow function, and go from\n // there\n // 3. This is neither. Just call the super method\n parseMaybeAssign(\n noIn?: ?boolean,\n refShorthandDefaultPos?: ?Pos,\n afterLeftParse?: Function,\n refNeedsArrowPos?: ?Pos,\n ): N.Expression {\n let state = null;\n\n let jsx;\n\n if (\n this.hasPlugin(\"jsx\") &&\n (this.match(tt.jsxTagStart) || this.isRelational(\"<\"))\n ) {\n state = this.state.clone();\n\n jsx = this.tryParse(\n () =>\n super.parseMaybeAssign(\n noIn,\n refShorthandDefaultPos,\n afterLeftParse,\n refNeedsArrowPos,\n ),\n state,\n );\n /*:: invariant(!jsx.aborted) */\n\n if (!jsx.error) return jsx.node;\n\n // Remove `tc.j_expr` and `tc.j_oTag` from context added\n // by parsing `jsxTagStart` to stop the JSX plugin from\n // messing with the tokens\n const { context } = this.state;\n if (context[context.length - 1] === tc.j_oTag) {\n context.length -= 2;\n } else if (context[context.length - 1] === tc.j_expr) {\n context.length -= 1;\n }\n }\n\n if ((jsx && jsx.error) || this.isRelational(\"<\")) {\n state = state || this.state.clone();\n\n let typeParameters;\n\n const arrow = this.tryParse(() => {\n typeParameters = this.flowParseTypeParameterDeclaration();\n\n const arrowExpression = this.forwardNoArrowParamsConversionAt(\n typeParameters,\n () =>\n super.parseMaybeAssign(\n noIn,\n refShorthandDefaultPos,\n afterLeftParse,\n refNeedsArrowPos,\n ),\n );\n arrowExpression.typeParameters = typeParameters;\n this.resetStartLocationFromNode(arrowExpression, typeParameters);\n\n return arrowExpression;\n }, state);\n\n const arrowExpression: ?N.ArrowFunctionExpression =\n arrow.node && arrow.node.type === \"ArrowFunctionExpression\"\n ? arrow.node\n : null;\n\n if (!arrow.error && arrowExpression) return arrowExpression;\n\n // If we are here, both JSX and Flow parsing attemps failed.\n // Give the precedence to the JSX error, except if JSX had an\n // unrecoverable error while Flow didn't.\n // If the error is recoverable, we can only re-report it if there is\n // a node we can return.\n\n if (jsx && jsx.node) {\n /*:: invariant(jsx.failState) */\n this.state = jsx.failState;\n return jsx.node;\n }\n\n if (arrowExpression) {\n /*:: invariant(arrow.failState) */\n this.state = arrow.failState;\n return arrowExpression;\n }\n\n if (jsx && jsx.thrown) throw jsx.error;\n if (arrow.thrown) throw arrow.error;\n\n /*:: invariant(typeParameters) */\n throw this.raise(\n typeParameters.start,\n \"Expected an arrow function after this type parameter declaration\",\n );\n }\n\n return super.parseMaybeAssign(\n noIn,\n refShorthandDefaultPos,\n afterLeftParse,\n refNeedsArrowPos,\n );\n }\n\n // handle return types for arrow functions\n parseArrow(node: N.ArrowFunctionExpression): ?N.ArrowFunctionExpression {\n if (this.match(tt.colon)) {\n const result = this.tryParse(() => {\n const oldNoAnonFunctionType = this.state.noAnonFunctionType;\n this.state.noAnonFunctionType = true;\n\n const typeNode = this.startNode();\n\n [\n // $FlowFixMe (destructuring not supported yet)\n typeNode.typeAnnotation,\n // $FlowFixMe (destructuring not supported yet)\n node.predicate,\n ] = this.flowParseTypeAndPredicateInitialiser();\n\n this.state.noAnonFunctionType = oldNoAnonFunctionType;\n\n if (this.canInsertSemicolon()) this.unexpected();\n if (!this.match(tt.arrow)) this.unexpected();\n\n return typeNode;\n });\n\n if (result.thrown) return null;\n /*:: invariant(result.node) */\n\n if (result.error) this.state = result.failState;\n\n // assign after it is clear it is an arrow\n node.returnType = result.node.typeAnnotation\n ? this.finishNode(result.node, \"TypeAnnotation\")\n : null;\n }\n\n return super.parseArrow(node);\n }\n\n shouldParseArrow(): boolean {\n return this.match(tt.colon) || super.shouldParseArrow();\n }\n\n setArrowFunctionParameters(\n node: N.ArrowFunctionExpression,\n params: N.Expression[],\n ): void {\n if (this.state.noArrowParamsConversionAt.indexOf(node.start) !== -1) {\n node.params = params;\n } else {\n super.setArrowFunctionParameters(node, params);\n }\n }\n\n checkParams(\n node: N.Function,\n allowDuplicates: boolean,\n isArrowFunction: ?boolean,\n ): void {\n if (\n isArrowFunction &&\n this.state.noArrowParamsConversionAt.indexOf(node.start) !== -1\n ) {\n return;\n }\n\n return super.checkParams(...arguments);\n }\n\n parseParenAndDistinguishExpression(canBeArrow: boolean): N.Expression {\n return super.parseParenAndDistinguishExpression(\n canBeArrow && this.state.noArrowAt.indexOf(this.state.start) === -1,\n );\n }\n\n parseSubscripts(\n base: N.Expression,\n startPos: number,\n startLoc: Position,\n noCalls?: ?boolean,\n ): N.Expression {\n if (\n base.type === \"Identifier\" &&\n base.name === \"async\" &&\n this.state.noArrowAt.indexOf(startPos) !== -1\n ) {\n this.next();\n\n const node = this.startNodeAt(startPos, startLoc);\n node.callee = base;\n node.arguments = this.parseCallExpressionArguments(tt.parenR, false);\n base = this.finishNode(node, \"CallExpression\");\n } else if (\n base.type === \"Identifier\" &&\n base.name === \"async\" &&\n this.isRelational(\"<\")\n ) {\n const state = this.state.clone();\n const arrow = this.tryParse(\n abort =>\n this.parseAsyncArrowWithTypeParameters(startPos, startLoc) ||\n abort(),\n state,\n );\n\n if (!arrow.error && !arrow.aborted) return arrow.node;\n\n const result = this.tryParse(\n () => super.parseSubscripts(base, startPos, startLoc, noCalls),\n state,\n );\n\n if (result.node && !result.error) return result.node;\n\n if (arrow.node) {\n this.state = arrow.failState;\n return arrow.node;\n }\n\n if (result.node) {\n this.state = result.failState;\n return result.node;\n }\n\n throw arrow.error || result.error;\n }\n\n return super.parseSubscripts(base, startPos, startLoc, noCalls);\n }\n\n parseSubscript(\n base: N.Expression,\n startPos: number,\n startLoc: Position,\n noCalls: ?boolean,\n subscriptState: N.ParseSubscriptState,\n ): N.Expression {\n if (this.match(tt.questionDot) && this.isLookaheadRelational(\"<\")) {\n subscriptState.optionalChainMember = true;\n if (noCalls) {\n subscriptState.stop = true;\n return base;\n }\n this.next();\n const node: N.OptionalCallExpression = this.startNodeAt(\n startPos,\n startLoc,\n );\n node.callee = base;\n node.typeArguments = this.flowParseTypeParameterInstantiation();\n this.expect(tt.parenL);\n // $FlowFixMe\n node.arguments = this.parseCallExpressionArguments(tt.parenR, false);\n node.optional = true;\n return this.finishCallExpression(node, /* optional */ true);\n } else if (\n !noCalls &&\n this.shouldParseTypes() &&\n this.isRelational(\"<\")\n ) {\n const node = this.startNodeAt(startPos, startLoc);\n node.callee = base;\n\n const result = this.tryParse(() => {\n node.typeArguments = this.flowParseTypeParameterInstantiationCallOrNew();\n this.expect(tt.parenL);\n node.arguments = this.parseCallExpressionArguments(tt.parenR, false);\n if (subscriptState.optionalChainMember) node.optional = false;\n return this.finishCallExpression(\n node,\n subscriptState.optionalChainMember,\n );\n });\n\n if (result.node) {\n if (result.error) this.state = result.failState;\n return result.node;\n }\n }\n\n return super.parseSubscript(\n base,\n startPos,\n startLoc,\n noCalls,\n subscriptState,\n );\n }\n\n parseNewArguments(node: N.NewExpression): void {\n let targs = null;\n if (this.shouldParseTypes() && this.isRelational(\"<\")) {\n targs = this.tryParse(() =>\n this.flowParseTypeParameterInstantiationCallOrNew(),\n ).node;\n }\n node.typeArguments = targs;\n\n super.parseNewArguments(node);\n }\n\n parseAsyncArrowWithTypeParameters(\n startPos: number,\n startLoc: Position,\n ): ?N.ArrowFunctionExpression {\n const node = this.startNodeAt(startPos, startLoc);\n this.parseFunctionParams(node);\n if (!this.parseArrow(node)) return;\n return this.parseArrowExpression(\n node,\n /* params */ undefined,\n /* isAsync */ true,\n );\n }\n\n readToken_mult_modulo(code: number): void {\n const next = this.input.charCodeAt(this.state.pos + 1);\n if (\n code === charCodes.asterisk &&\n next === charCodes.slash &&\n this.state.hasFlowComment\n ) {\n this.state.hasFlowComment = false;\n this.state.pos += 2;\n this.nextToken();\n return;\n }\n\n super.readToken_mult_modulo(code);\n }\n\n readToken_pipe_amp(code: number): void {\n const next = this.input.charCodeAt(this.state.pos + 1);\n if (\n code === charCodes.verticalBar &&\n next === charCodes.rightCurlyBrace\n ) {\n // '|}'\n this.finishOp(tt.braceBarR, 2);\n return;\n }\n\n super.readToken_pipe_amp(code);\n }\n\n parseTopLevel(file: N.File, program: N.Program): N.File {\n const fileNode = super.parseTopLevel(file, program);\n if (this.state.hasFlowComment) {\n this.raise(this.state.pos, \"Unterminated flow-comment\");\n }\n return fileNode;\n }\n\n skipBlockComment(): void {\n if (this.hasPlugin(\"flowComments\") && this.skipFlowComment()) {\n if (this.state.hasFlowComment) {\n this.unexpected(\n null,\n \"Cannot have a flow comment inside another flow comment\",\n );\n }\n this.hasFlowCommentCompletion();\n this.state.pos += this.skipFlowComment();\n this.state.hasFlowComment = true;\n return;\n }\n\n if (this.state.hasFlowComment) {\n const end = this.input.indexOf(\"*-/\", (this.state.pos += 2));\n if (end === -1) {\n throw this.raise(this.state.pos - 2, \"Unterminated comment\");\n }\n this.state.pos = end + 3;\n return;\n }\n\n super.skipBlockComment();\n }\n\n skipFlowComment(): number | boolean {\n const { pos } = this.state;\n let shiftToFirstNonWhiteSpace = 2;\n while (\n [charCodes.space, charCodes.tab].includes(\n this.input.charCodeAt(pos + shiftToFirstNonWhiteSpace),\n )\n ) {\n shiftToFirstNonWhiteSpace++;\n }\n\n const ch2 = this.input.charCodeAt(shiftToFirstNonWhiteSpace + pos);\n const ch3 = this.input.charCodeAt(shiftToFirstNonWhiteSpace + pos + 1);\n\n if (ch2 === charCodes.colon && ch3 === charCodes.colon) {\n return shiftToFirstNonWhiteSpace + 2; // check for /*::\n }\n if (\n this.input.slice(\n shiftToFirstNonWhiteSpace + pos,\n shiftToFirstNonWhiteSpace + pos + 12,\n ) === \"flow-include\"\n ) {\n return shiftToFirstNonWhiteSpace + 12; // check for /*flow-include\n }\n if (ch2 === charCodes.colon && ch3 !== charCodes.colon) {\n return shiftToFirstNonWhiteSpace; // check for /*:, advance up to :\n }\n return false;\n }\n\n hasFlowCommentCompletion(): void {\n const end = this.input.indexOf(\"*/\", this.state.pos);\n if (end === -1) {\n throw this.raise(this.state.pos, \"Unterminated comment\");\n }\n }\n\n // Flow enum parsing\n\n flowEnumErrorBooleanMemberNotInitialized(\n pos: number,\n { enumName, memberName }: { enumName: string, memberName: string },\n ): void {\n this.raise(\n pos,\n `Boolean enum members need to be initialized. Use either \\`${memberName} = true,\\` ` +\n `or \\`${memberName} = false,\\` in enum \\`${enumName}\\`.`,\n );\n }\n\n flowEnumErrorInvalidMemberName(\n pos: number,\n { enumName, memberName }: { enumName: string, memberName: string },\n ): void {\n const suggestion = memberName[0].toUpperCase() + memberName.slice(1);\n this.raise(\n pos,\n `Enum member names cannot start with lowercase 'a' through 'z'. Instead of using ` +\n `\\`${memberName}\\`, consider using \\`${suggestion}\\`, in enum \\`${enumName}\\`.`,\n );\n }\n\n flowEnumErrorDuplicateMemberName(\n pos: number,\n { enumName, memberName }: { enumName: string, memberName: string },\n ): void {\n this.raise(\n pos,\n `Enum member names need to be unique, but the name \\`${memberName}\\` has already been used ` +\n `before in enum \\`${enumName}\\`.`,\n );\n }\n\n flowEnumErrorInconsistentMemberValues(\n pos: number,\n { enumName }: { enumName: string },\n ): void {\n this.raise(\n pos,\n `Enum \\`${enumName}\\` has inconsistent member initializers. Either use no initializers, or ` +\n `consistently use literals (either booleans, numbers, or strings) for all member initializers.`,\n );\n }\n\n flowEnumErrorInvalidExplicitType(\n pos: number,\n {\n enumName,\n suppliedType,\n }: { enumName: string, suppliedType: null | string },\n ) {\n const suggestion =\n `Use one of \\`boolean\\`, \\`number\\`, \\`string\\`, or \\`symbol\\` in ` +\n `enum \\`${enumName}\\`.`;\n const message =\n suppliedType === null\n ? `Supplied enum type is not valid. ${suggestion}`\n : `Enum type \\`${suppliedType}\\` is not valid. ${suggestion}`;\n return this.raise(pos, message);\n }\n\n flowEnumErrorInvalidMemberInitializer(\n pos: number,\n { enumName, explicitType, memberName }: EnumContext,\n ) {\n let message = null;\n switch (explicitType) {\n case \"boolean\":\n case \"number\":\n case \"string\":\n message =\n `Enum \\`${enumName}\\` has type \\`${explicitType}\\`, so the initializer of ` +\n `\\`${memberName}\\` needs to be a ${explicitType} literal.`;\n break;\n case \"symbol\":\n message =\n `Symbol enum members cannot be initialized. Use \\`${memberName},\\` in ` +\n `enum \\`${enumName}\\`.`;\n break;\n default:\n // null\n message =\n `The enum member initializer for \\`${memberName}\\` needs to be a literal (either ` +\n `a boolean, number, or string) in enum \\`${enumName}\\`.`;\n }\n return this.raise(pos, message);\n }\n\n flowEnumErrorNumberMemberNotInitialized(\n pos: number,\n { enumName, memberName }: { enumName: string, memberName: string },\n ): void {\n this.raise(\n pos,\n `Number enum members need to be initialized, e.g. \\`${memberName} = 1\\` in enum \\`${enumName}\\`.`,\n );\n }\n\n flowEnumErrorStringMemberInconsistentlyInitailized(\n pos: number,\n { enumName }: { enumName: string },\n ): void {\n this.raise(\n pos,\n `String enum members need to consistently either all use initializers, or use no initializers, ` +\n `in enum \\`${enumName}\\`.`,\n );\n }\n\n flowEnumMemberInit(): EnumMemberInit {\n const startPos = this.state.start;\n const endOfInit = () => this.match(tt.comma) || this.match(tt.braceR);\n switch (this.state.type) {\n case tt.num: {\n const literal = this.parseLiteral(this.state.value, \"NumericLiteral\");\n if (endOfInit()) {\n return { type: \"number\", pos: literal.start, value: literal };\n }\n return { type: \"invalid\", pos: startPos };\n }\n case tt.string: {\n const literal = this.parseLiteral(this.state.value, \"StringLiteral\");\n if (endOfInit()) {\n return { type: \"string\", pos: literal.start, value: literal };\n }\n return { type: \"invalid\", pos: startPos };\n }\n case tt._true:\n case tt._false: {\n const literal = this.parseBooleanLiteral();\n if (endOfInit()) {\n return {\n type: \"boolean\",\n pos: literal.start,\n value: literal,\n };\n }\n return { type: \"invalid\", pos: startPos };\n }\n default:\n return { type: \"invalid\", pos: startPos };\n }\n }\n\n flowEnumMemberRaw(): { id: N.Node, init: EnumMemberInit } {\n const pos = this.state.start;\n const id = this.parseIdentifier(true);\n const init = this.eat(tt.eq)\n ? this.flowEnumMemberInit()\n : { type: \"none\", pos };\n return { id, init };\n }\n\n flowEnumCheckExplicitTypeMismatch(\n pos: number,\n context: EnumContext,\n expectedType: EnumExplicitType,\n ): void {\n const { explicitType } = context;\n if (explicitType === null) {\n return;\n }\n if (explicitType !== expectedType) {\n this.flowEnumErrorInvalidMemberInitializer(pos, context);\n }\n }\n\n flowEnumMembers({\n enumName,\n explicitType,\n }: {\n enumName: string,\n explicitType: EnumExplicitType,\n }): {|\n booleanMembers: Array<N.Node>,\n numberMembers: Array<N.Node>,\n stringMembers: Array<N.Node>,\n defaultedMembers: Array<N.Node>,\n |} {\n const seenNames = new Set();\n const members = {\n booleanMembers: [],\n numberMembers: [],\n stringMembers: [],\n defaultedMembers: [],\n };\n while (!this.match(tt.braceR)) {\n const memberNode = this.startNode();\n const { id, init } = this.flowEnumMemberRaw();\n const memberName = id.name;\n if (memberName === \"\") {\n continue;\n }\n if (/^[a-z]/.test(memberName)) {\n this.flowEnumErrorInvalidMemberName(id.start, {\n enumName,\n memberName,\n });\n }\n if (seenNames.has(memberName)) {\n this.flowEnumErrorDuplicateMemberName(id.start, {\n enumName,\n memberName,\n });\n }\n seenNames.add(memberName);\n const context = { enumName, explicitType, memberName };\n memberNode.id = id;\n switch (init.type) {\n case \"boolean\": {\n this.flowEnumCheckExplicitTypeMismatch(\n init.pos,\n context,\n \"boolean\",\n );\n memberNode.init = init.value;\n members.booleanMembers.push(\n this.finishNode(memberNode, \"EnumBooleanMember\"),\n );\n break;\n }\n case \"number\": {\n this.flowEnumCheckExplicitTypeMismatch(init.pos, context, \"number\");\n memberNode.init = init.value;\n members.numberMembers.push(\n this.finishNode(memberNode, \"EnumNumberMember\"),\n );\n break;\n }\n case \"string\": {\n this.flowEnumCheckExplicitTypeMismatch(init.pos, context, \"string\");\n memberNode.init = init.value;\n members.stringMembers.push(\n this.finishNode(memberNode, \"EnumStringMember\"),\n );\n break;\n }\n case \"invalid\": {\n throw this.flowEnumErrorInvalidMemberInitializer(init.pos, context);\n }\n case \"none\": {\n switch (explicitType) {\n case \"boolean\":\n this.flowEnumErrorBooleanMemberNotInitialized(\n init.pos,\n context,\n );\n break;\n case \"number\":\n this.flowEnumErrorNumberMemberNotInitialized(init.pos, context);\n break;\n default:\n members.defaultedMembers.push(\n this.finishNode(memberNode, \"EnumDefaultedMember\"),\n );\n }\n }\n }\n\n if (!this.match(tt.braceR)) {\n this.expect(tt.comma);\n }\n }\n return members;\n }\n\n flowEnumStringMembers(\n initializedMembers: Array<N.Node>,\n defaultedMembers: Array<N.Node>,\n { enumName }: { enumName: string },\n ): Array<N.Node> {\n if (initializedMembers.length === 0) {\n return defaultedMembers;\n } else if (defaultedMembers.length === 0) {\n return initializedMembers;\n } else if (defaultedMembers.length > initializedMembers.length) {\n for (const member of initializedMembers) {\n this.flowEnumErrorStringMemberInconsistentlyInitailized(\n member.start,\n { enumName },\n );\n }\n return defaultedMembers;\n } else {\n for (const member of defaultedMembers) {\n this.flowEnumErrorStringMemberInconsistentlyInitailized(\n member.start,\n { enumName },\n );\n }\n return initializedMembers;\n }\n }\n\n flowEnumParseExplicitType({\n enumName,\n }: {\n enumName: string,\n }): EnumExplicitType {\n if (this.eatContextual(\"of\")) {\n if (!this.match(tt.name)) {\n throw this.flowEnumErrorInvalidExplicitType(this.state.start, {\n enumName,\n suppliedType: null,\n });\n }\n\n const { value } = this.state;\n this.next();\n\n if (\n value !== \"boolean\" &&\n value !== \"number\" &&\n value !== \"string\" &&\n value !== \"symbol\"\n ) {\n this.flowEnumErrorInvalidExplicitType(this.state.start, {\n enumName,\n suppliedType: value,\n });\n }\n\n return value;\n }\n return null;\n }\n\n flowEnumBody(node: N.Node, { enumName, nameLoc }): N.Node {\n const explicitType = this.flowEnumParseExplicitType({ enumName });\n this.expect(tt.braceL);\n const members = this.flowEnumMembers({ enumName, explicitType });\n\n switch (explicitType) {\n case \"boolean\":\n node.explicitType = true;\n node.members = members.booleanMembers;\n this.expect(tt.braceR);\n return this.finishNode(node, \"EnumBooleanBody\");\n case \"number\":\n node.explicitType = true;\n node.members = members.numberMembers;\n this.expect(tt.braceR);\n return this.finishNode(node, \"EnumNumberBody\");\n case \"string\":\n node.explicitType = true;\n node.members = this.flowEnumStringMembers(\n members.stringMembers,\n members.defaultedMembers,\n { enumName },\n );\n this.expect(tt.braceR);\n return this.finishNode(node, \"EnumStringBody\");\n case \"symbol\":\n node.members = members.defaultedMembers;\n this.expect(tt.braceR);\n return this.finishNode(node, \"EnumSymbolBody\");\n default: {\n // `explicitType` is `null`\n const empty = () => {\n node.members = [];\n this.expect(tt.braceR);\n return this.finishNode(node, \"EnumStringBody\");\n };\n node.explicitType = false;\n\n const boolsLen = members.booleanMembers.length;\n const numsLen = members.numberMembers.length;\n const strsLen = members.stringMembers.length;\n const defaultedLen = members.defaultedMembers.length;\n\n if (!boolsLen && !numsLen && !strsLen && !defaultedLen) {\n return empty();\n } else if (!boolsLen && !numsLen) {\n node.members = this.flowEnumStringMembers(\n members.stringMembers,\n members.defaultedMembers,\n { enumName },\n );\n this.expect(tt.braceR);\n return this.finishNode(node, \"EnumStringBody\");\n } else if (!numsLen && !strsLen && boolsLen >= defaultedLen) {\n for (const member of members.defaultedMembers) {\n this.flowEnumErrorBooleanMemberNotInitialized(member.start, {\n enumName,\n memberName: member.id.name,\n });\n }\n node.members = members.booleanMembers;\n this.expect(tt.braceR);\n return this.finishNode(node, \"EnumBooleanBody\");\n } else if (!boolsLen && !strsLen && numsLen >= defaultedLen) {\n for (const member of members.defaultedMembers) {\n this.flowEnumErrorNumberMemberNotInitialized(member.start, {\n enumName,\n memberName: member.id.name,\n });\n }\n node.members = members.numberMembers;\n this.expect(tt.braceR);\n return this.finishNode(node, \"EnumNumberBody\");\n } else {\n this.flowEnumErrorInconsistentMemberValues(nameLoc, { enumName });\n return empty();\n }\n }\n }\n }\n\n flowParseEnumDeclaration(node: N.Node): N.Node {\n const id = this.parseIdentifier();\n node.id = id;\n node.body = this.flowEnumBody(this.startNode(), {\n enumName: id.name,\n nameLoc: id.start,\n });\n return this.finishNode(node, \"EnumDeclaration\");\n }\n };\n","// @flow\n\nconst entities: { [name: string]: string } = {\n quot: \"\\u0022\",\n amp: \"&\",\n apos: \"\\u0027\",\n lt: \"<\",\n gt: \">\",\n nbsp: \"\\u00A0\",\n iexcl: \"\\u00A1\",\n cent: \"\\u00A2\",\n pound: \"\\u00A3\",\n curren: \"\\u00A4\",\n yen: \"\\u00A5\",\n brvbar: \"\\u00A6\",\n sect: \"\\u00A7\",\n uml: \"\\u00A8\",\n copy: \"\\u00A9\",\n ordf: \"\\u00AA\",\n laquo: \"\\u00AB\",\n not: \"\\u00AC\",\n shy: \"\\u00AD\",\n reg: \"\\u00AE\",\n macr: \"\\u00AF\",\n deg: \"\\u00B0\",\n plusmn: \"\\u00B1\",\n sup2: \"\\u00B2\",\n sup3: \"\\u00B3\",\n acute: \"\\u00B4\",\n micro: \"\\u00B5\",\n para: \"\\u00B6\",\n middot: \"\\u00B7\",\n cedil: \"\\u00B8\",\n sup1: \"\\u00B9\",\n ordm: \"\\u00BA\",\n raquo: \"\\u00BB\",\n frac14: \"\\u00BC\",\n frac12: \"\\u00BD\",\n frac34: \"\\u00BE\",\n iquest: \"\\u00BF\",\n Agrave: \"\\u00C0\",\n Aacute: \"\\u00C1\",\n Acirc: \"\\u00C2\",\n Atilde: \"\\u00C3\",\n Auml: \"\\u00C4\",\n Aring: \"\\u00C5\",\n AElig: \"\\u00C6\",\n Ccedil: \"\\u00C7\",\n Egrave: \"\\u00C8\",\n Eacute: \"\\u00C9\",\n Ecirc: \"\\u00CA\",\n Euml: \"\\u00CB\",\n Igrave: \"\\u00CC\",\n Iacute: \"\\u00CD\",\n Icirc: \"\\u00CE\",\n Iuml: \"\\u00CF\",\n ETH: \"\\u00D0\",\n Ntilde: \"\\u00D1\",\n Ograve: \"\\u00D2\",\n Oacute: \"\\u00D3\",\n Ocirc: \"\\u00D4\",\n Otilde: \"\\u00D5\",\n Ouml: \"\\u00D6\",\n times: \"\\u00D7\",\n Oslash: \"\\u00D8\",\n Ugrave: \"\\u00D9\",\n Uacute: \"\\u00DA\",\n Ucirc: \"\\u00DB\",\n Uuml: \"\\u00DC\",\n Yacute: \"\\u00DD\",\n THORN: \"\\u00DE\",\n szlig: \"\\u00DF\",\n agrave: \"\\u00E0\",\n aacute: \"\\u00E1\",\n acirc: \"\\u00E2\",\n atilde: \"\\u00E3\",\n auml: \"\\u00E4\",\n aring: \"\\u00E5\",\n aelig: \"\\u00E6\",\n ccedil: \"\\u00E7\",\n egrave: \"\\u00E8\",\n eacute: \"\\u00E9\",\n ecirc: \"\\u00EA\",\n euml: \"\\u00EB\",\n igrave: \"\\u00EC\",\n iacute: \"\\u00ED\",\n icirc: \"\\u00EE\",\n iuml: \"\\u00EF\",\n eth: \"\\u00F0\",\n ntilde: \"\\u00F1\",\n ograve: \"\\u00F2\",\n oacute: \"\\u00F3\",\n ocirc: \"\\u00F4\",\n otilde: \"\\u00F5\",\n ouml: \"\\u00F6\",\n divide: \"\\u00F7\",\n oslash: \"\\u00F8\",\n ugrave: \"\\u00F9\",\n uacute: \"\\u00FA\",\n ucirc: \"\\u00FB\",\n uuml: \"\\u00FC\",\n yacute: \"\\u00FD\",\n thorn: \"\\u00FE\",\n yuml: \"\\u00FF\",\n OElig: \"\\u0152\",\n oelig: \"\\u0153\",\n Scaron: \"\\u0160\",\n scaron: \"\\u0161\",\n Yuml: \"\\u0178\",\n fnof: \"\\u0192\",\n circ: \"\\u02C6\",\n tilde: \"\\u02DC\",\n Alpha: \"\\u0391\",\n Beta: \"\\u0392\",\n Gamma: \"\\u0393\",\n Delta: \"\\u0394\",\n Epsilon: \"\\u0395\",\n Zeta: \"\\u0396\",\n Eta: \"\\u0397\",\n Theta: \"\\u0398\",\n Iota: \"\\u0399\",\n Kappa: \"\\u039A\",\n Lambda: \"\\u039B\",\n Mu: \"\\u039C\",\n Nu: \"\\u039D\",\n Xi: \"\\u039E\",\n Omicron: \"\\u039F\",\n Pi: \"\\u03A0\",\n Rho: \"\\u03A1\",\n Sigma: \"\\u03A3\",\n Tau: \"\\u03A4\",\n Upsilon: \"\\u03A5\",\n Phi: \"\\u03A6\",\n Chi: \"\\u03A7\",\n Psi: \"\\u03A8\",\n Omega: \"\\u03A9\",\n alpha: \"\\u03B1\",\n beta: \"\\u03B2\",\n gamma: \"\\u03B3\",\n delta: \"\\u03B4\",\n epsilon: \"\\u03B5\",\n zeta: \"\\u03B6\",\n eta: \"\\u03B7\",\n theta: \"\\u03B8\",\n iota: \"\\u03B9\",\n kappa: \"\\u03BA\",\n lambda: \"\\u03BB\",\n mu: \"\\u03BC\",\n nu: \"\\u03BD\",\n xi: \"\\u03BE\",\n omicron: \"\\u03BF\",\n pi: \"\\u03C0\",\n rho: \"\\u03C1\",\n sigmaf: \"\\u03C2\",\n sigma: \"\\u03C3\",\n tau: \"\\u03C4\",\n upsilon: \"\\u03C5\",\n phi: \"\\u03C6\",\n chi: \"\\u03C7\",\n psi: \"\\u03C8\",\n omega: \"\\u03C9\",\n thetasym: \"\\u03D1\",\n upsih: \"\\u03D2\",\n piv: \"\\u03D6\",\n ensp: \"\\u2002\",\n emsp: \"\\u2003\",\n thinsp: \"\\u2009\",\n zwnj: \"\\u200C\",\n zwj: \"\\u200D\",\n lrm: \"\\u200E\",\n rlm: \"\\u200F\",\n ndash: \"\\u2013\",\n mdash: \"\\u2014\",\n lsquo: \"\\u2018\",\n rsquo: \"\\u2019\",\n sbquo: \"\\u201A\",\n ldquo: \"\\u201C\",\n rdquo: \"\\u201D\",\n bdquo: \"\\u201E\",\n dagger: \"\\u2020\",\n Dagger: \"\\u2021\",\n bull: \"\\u2022\",\n hellip: \"\\u2026\",\n permil: \"\\u2030\",\n prime: \"\\u2032\",\n Prime: \"\\u2033\",\n lsaquo: \"\\u2039\",\n rsaquo: \"\\u203A\",\n oline: \"\\u203E\",\n frasl: \"\\u2044\",\n euro: \"\\u20AC\",\n image: \"\\u2111\",\n weierp: \"\\u2118\",\n real: \"\\u211C\",\n trade: \"\\u2122\",\n alefsym: \"\\u2135\",\n larr: \"\\u2190\",\n uarr: \"\\u2191\",\n rarr: \"\\u2192\",\n darr: \"\\u2193\",\n harr: \"\\u2194\",\n crarr: \"\\u21B5\",\n lArr: \"\\u21D0\",\n uArr: \"\\u21D1\",\n rArr: \"\\u21D2\",\n dArr: \"\\u21D3\",\n hArr: \"\\u21D4\",\n forall: \"\\u2200\",\n part: \"\\u2202\",\n exist: \"\\u2203\",\n empty: \"\\u2205\",\n nabla: \"\\u2207\",\n isin: \"\\u2208\",\n notin: \"\\u2209\",\n ni: \"\\u220B\",\n prod: \"\\u220F\",\n sum: \"\\u2211\",\n minus: \"\\u2212\",\n lowast: \"\\u2217\",\n radic: \"\\u221A\",\n prop: \"\\u221D\",\n infin: \"\\u221E\",\n ang: \"\\u2220\",\n and: \"\\u2227\",\n or: \"\\u2228\",\n cap: \"\\u2229\",\n cup: \"\\u222A\",\n int: \"\\u222B\",\n there4: \"\\u2234\",\n sim: \"\\u223C\",\n cong: \"\\u2245\",\n asymp: \"\\u2248\",\n ne: \"\\u2260\",\n equiv: \"\\u2261\",\n le: \"\\u2264\",\n ge: \"\\u2265\",\n sub: \"\\u2282\",\n sup: \"\\u2283\",\n nsub: \"\\u2284\",\n sube: \"\\u2286\",\n supe: \"\\u2287\",\n oplus: \"\\u2295\",\n otimes: \"\\u2297\",\n perp: \"\\u22A5\",\n sdot: \"\\u22C5\",\n lceil: \"\\u2308\",\n rceil: \"\\u2309\",\n lfloor: \"\\u230A\",\n rfloor: \"\\u230B\",\n lang: \"\\u2329\",\n rang: \"\\u232A\",\n loz: \"\\u25CA\",\n spades: \"\\u2660\",\n clubs: \"\\u2663\",\n hearts: \"\\u2665\",\n diams: \"\\u2666\",\n};\nexport default entities;\n","// @flow\n\nimport * as charCodes from \"charcodes\";\n\nimport XHTMLEntities from \"./xhtml\";\nimport type Parser from \"../../parser\";\nimport { TokenType, types as tt } from \"../../tokenizer/types\";\nimport { TokContext, types as tc } from \"../../tokenizer/context\";\nimport * as N from \"../../types\";\nimport { isIdentifierChar, isIdentifierStart } from \"../../util/identifier\";\nimport type { Pos, Position } from \"../../util/location\";\nimport { isNewLine } from \"../../util/whitespace\";\n\nconst HEX_NUMBER = /^[\\da-fA-F]+$/;\nconst DECIMAL_NUMBER = /^\\d+$/;\n\n// Be aware that this file is always executed and not only when the plugin is enabled.\n// Therefore this contexts and tokens do always exist.\ntc.j_oTag = new TokContext(\"<tag\", false);\ntc.j_cTag = new TokContext(\"</tag\", false);\ntc.j_expr = new TokContext(\"<tag>...</tag>\", true, true);\n\ntt.jsxName = new TokenType(\"jsxName\");\ntt.jsxText = new TokenType(\"jsxText\", { beforeExpr: true });\ntt.jsxTagStart = new TokenType(\"jsxTagStart\", { startsExpr: true });\ntt.jsxTagEnd = new TokenType(\"jsxTagEnd\");\n\ntt.jsxTagStart.updateContext = function() {\n this.state.context.push(tc.j_expr); // treat as beginning of JSX expression\n this.state.context.push(tc.j_oTag); // start opening tag context\n this.state.exprAllowed = false;\n};\n\ntt.jsxTagEnd.updateContext = function(prevType) {\n const out = this.state.context.pop();\n if ((out === tc.j_oTag && prevType === tt.slash) || out === tc.j_cTag) {\n this.state.context.pop();\n this.state.exprAllowed = this.curContext() === tc.j_expr;\n } else {\n this.state.exprAllowed = true;\n }\n};\n\nfunction isFragment(object: ?N.JSXElement): boolean {\n return object\n ? object.type === \"JSXOpeningFragment\" ||\n object.type === \"JSXClosingFragment\"\n : false;\n}\n\n// Transforms JSX element name to string.\n\nfunction getQualifiedJSXName(\n object: N.JSXIdentifier | N.JSXNamespacedName | N.JSXMemberExpression,\n): string {\n if (object.type === \"JSXIdentifier\") {\n return object.name;\n }\n\n if (object.type === \"JSXNamespacedName\") {\n return object.namespace.name + \":\" + object.name.name;\n }\n\n if (object.type === \"JSXMemberExpression\") {\n return (\n getQualifiedJSXName(object.object) +\n \".\" +\n getQualifiedJSXName(object.property)\n );\n }\n\n // istanbul ignore next\n throw new Error(\"Node had unexpected type: \" + object.type);\n}\n\nexport default (superClass: Class<Parser>): Class<Parser> =>\n class extends superClass {\n // Reads inline JSX contents token.\n\n jsxReadToken(): void {\n let out = \"\";\n let chunkStart = this.state.pos;\n for (;;) {\n if (this.state.pos >= this.length) {\n throw this.raise(this.state.start, \"Unterminated JSX contents\");\n }\n\n const ch = this.input.charCodeAt(this.state.pos);\n\n switch (ch) {\n case charCodes.lessThan:\n case charCodes.leftCurlyBrace:\n if (this.state.pos === this.state.start) {\n if (ch === charCodes.lessThan && this.state.exprAllowed) {\n ++this.state.pos;\n return this.finishToken(tt.jsxTagStart);\n }\n return super.getTokenFromCode(ch);\n }\n out += this.input.slice(chunkStart, this.state.pos);\n return this.finishToken(tt.jsxText, out);\n\n case charCodes.ampersand:\n out += this.input.slice(chunkStart, this.state.pos);\n out += this.jsxReadEntity();\n chunkStart = this.state.pos;\n break;\n\n default:\n if (isNewLine(ch)) {\n out += this.input.slice(chunkStart, this.state.pos);\n out += this.jsxReadNewLine(true);\n chunkStart = this.state.pos;\n } else {\n ++this.state.pos;\n }\n }\n }\n }\n\n jsxReadNewLine(normalizeCRLF: boolean): string {\n const ch = this.input.charCodeAt(this.state.pos);\n let out;\n ++this.state.pos;\n if (\n ch === charCodes.carriageReturn &&\n this.input.charCodeAt(this.state.pos) === charCodes.lineFeed\n ) {\n ++this.state.pos;\n out = normalizeCRLF ? \"\\n\" : \"\\r\\n\";\n } else {\n out = String.fromCharCode(ch);\n }\n ++this.state.curLine;\n this.state.lineStart = this.state.pos;\n\n return out;\n }\n\n jsxReadString(quote: number): void {\n let out = \"\";\n let chunkStart = ++this.state.pos;\n for (;;) {\n if (this.state.pos >= this.length) {\n throw this.raise(this.state.start, \"Unterminated string constant\");\n }\n\n const ch = this.input.charCodeAt(this.state.pos);\n if (ch === quote) break;\n if (ch === charCodes.ampersand) {\n out += this.input.slice(chunkStart, this.state.pos);\n out += this.jsxReadEntity();\n chunkStart = this.state.pos;\n } else if (isNewLine(ch)) {\n out += this.input.slice(chunkStart, this.state.pos);\n out += this.jsxReadNewLine(false);\n chunkStart = this.state.pos;\n } else {\n ++this.state.pos;\n }\n }\n out += this.input.slice(chunkStart, this.state.pos++);\n return this.finishToken(tt.string, out);\n }\n\n jsxReadEntity(): string {\n let str = \"\";\n let count = 0;\n let entity;\n let ch = this.input[this.state.pos];\n\n const startPos = ++this.state.pos;\n while (this.state.pos < this.length && count++ < 10) {\n ch = this.input[this.state.pos++];\n if (ch === \";\") {\n if (str[0] === \"#\") {\n if (str[1] === \"x\") {\n str = str.substr(2);\n if (HEX_NUMBER.test(str)) {\n entity = String.fromCodePoint(parseInt(str, 16));\n }\n } else {\n str = str.substr(1);\n if (DECIMAL_NUMBER.test(str)) {\n entity = String.fromCodePoint(parseInt(str, 10));\n }\n }\n } else {\n entity = XHTMLEntities[str];\n }\n break;\n }\n str += ch;\n }\n if (!entity) {\n this.state.pos = startPos;\n return \"&\";\n }\n return entity;\n }\n\n // Read a JSX identifier (valid tag or attribute name).\n //\n // Optimized version since JSX identifiers can\"t contain\n // escape characters and so can be read as single slice.\n // Also assumes that first character was already checked\n // by isIdentifierStart in readToken.\n\n jsxReadWord(): void {\n let ch;\n const start = this.state.pos;\n do {\n ch = this.input.charCodeAt(++this.state.pos);\n } while (isIdentifierChar(ch) || ch === charCodes.dash);\n return this.finishToken(\n tt.jsxName,\n this.input.slice(start, this.state.pos),\n );\n }\n\n // Parse next token as JSX identifier\n\n jsxParseIdentifier(): N.JSXIdentifier {\n const node = this.startNode();\n if (this.match(tt.jsxName)) {\n node.name = this.state.value;\n } else if (this.state.type.keyword) {\n node.name = this.state.type.keyword;\n } else {\n this.unexpected();\n }\n this.next();\n return this.finishNode(node, \"JSXIdentifier\");\n }\n\n // Parse namespaced identifier.\n\n jsxParseNamespacedName(): N.JSXNamespacedName {\n const startPos = this.state.start;\n const startLoc = this.state.startLoc;\n const name = this.jsxParseIdentifier();\n if (!this.eat(tt.colon)) return name;\n\n const node = this.startNodeAt(startPos, startLoc);\n node.namespace = name;\n node.name = this.jsxParseIdentifier();\n return this.finishNode(node, \"JSXNamespacedName\");\n }\n\n // Parses element name in any form - namespaced, member\n // or single identifier.\n\n jsxParseElementName():\n | N.JSXIdentifier\n | N.JSXNamespacedName\n | N.JSXMemberExpression {\n const startPos = this.state.start;\n const startLoc = this.state.startLoc;\n let node = this.jsxParseNamespacedName();\n if (node.type === \"JSXNamespacedName\") {\n return node;\n }\n while (this.eat(tt.dot)) {\n const newNode = this.startNodeAt(startPos, startLoc);\n newNode.object = node;\n newNode.property = this.jsxParseIdentifier();\n node = this.finishNode(newNode, \"JSXMemberExpression\");\n }\n return node;\n }\n\n // Parses any type of JSX attribute value.\n\n jsxParseAttributeValue(): N.Expression {\n let node;\n switch (this.state.type) {\n case tt.braceL:\n node = this.startNode();\n this.next();\n node = this.jsxParseExpressionContainer(node);\n if (node.expression.type === \"JSXEmptyExpression\") {\n this.raise(\n node.start,\n \"JSX attributes must only be assigned a non-empty expression\",\n );\n }\n return node;\n\n case tt.jsxTagStart:\n case tt.string:\n return this.parseExprAtom();\n\n default:\n throw this.raise(\n this.state.start,\n \"JSX value should be either an expression or a quoted JSX text\",\n );\n }\n }\n\n // JSXEmptyExpression is unique type since it doesn't actually parse anything,\n // and so it should start at the end of last read token (left brace) and finish\n // at the beginning of the next one (right brace).\n\n jsxParseEmptyExpression(): N.JSXEmptyExpression {\n const node = this.startNodeAt(\n this.state.lastTokEnd,\n this.state.lastTokEndLoc,\n );\n return this.finishNodeAt(\n node,\n \"JSXEmptyExpression\",\n this.state.start,\n this.state.startLoc,\n );\n }\n\n // Parse JSX spread child\n\n jsxParseSpreadChild(node: N.JSXSpreadChild): N.JSXSpreadChild {\n this.next(); // ellipsis\n node.expression = this.parseExpression();\n this.expect(tt.braceR);\n\n return this.finishNode(node, \"JSXSpreadChild\");\n }\n\n // Parses JSX expression enclosed into curly brackets.\n\n jsxParseExpressionContainer(\n node: N.JSXExpressionContainer,\n ): N.JSXExpressionContainer {\n if (this.match(tt.braceR)) {\n node.expression = this.jsxParseEmptyExpression();\n } else {\n node.expression = this.parseExpression();\n }\n this.expect(tt.braceR);\n return this.finishNode(node, \"JSXExpressionContainer\");\n }\n\n // Parses following JSX attribute name-value pair.\n\n jsxParseAttribute(): N.JSXAttribute {\n const node = this.startNode();\n if (this.eat(tt.braceL)) {\n this.expect(tt.ellipsis);\n node.argument = this.parseMaybeAssign();\n this.expect(tt.braceR);\n return this.finishNode(node, \"JSXSpreadAttribute\");\n }\n node.name = this.jsxParseNamespacedName();\n node.value = this.eat(tt.eq) ? this.jsxParseAttributeValue() : null;\n return this.finishNode(node, \"JSXAttribute\");\n }\n\n // Parses JSX opening tag starting after \"<\".\n\n jsxParseOpeningElementAt(\n startPos: number,\n startLoc: Position,\n ): N.JSXOpeningElement {\n const node = this.startNodeAt(startPos, startLoc);\n if (this.match(tt.jsxTagEnd)) {\n this.expect(tt.jsxTagEnd);\n return this.finishNode(node, \"JSXOpeningFragment\");\n }\n node.name = this.jsxParseElementName();\n return this.jsxParseOpeningElementAfterName(node);\n }\n\n jsxParseOpeningElementAfterName(\n node: N.JSXOpeningElement,\n ): N.JSXOpeningElement {\n const attributes: N.JSXAttribute[] = [];\n while (!this.match(tt.slash) && !this.match(tt.jsxTagEnd)) {\n attributes.push(this.jsxParseAttribute());\n }\n node.attributes = attributes;\n node.selfClosing = this.eat(tt.slash);\n this.expect(tt.jsxTagEnd);\n return this.finishNode(node, \"JSXOpeningElement\");\n }\n\n // Parses JSX closing tag starting after \"</\".\n\n jsxParseClosingElementAt(\n startPos: number,\n startLoc: Position,\n ): N.JSXClosingElement {\n const node = this.startNodeAt(startPos, startLoc);\n if (this.match(tt.jsxTagEnd)) {\n this.expect(tt.jsxTagEnd);\n return this.finishNode(node, \"JSXClosingFragment\");\n }\n node.name = this.jsxParseElementName();\n this.expect(tt.jsxTagEnd);\n return this.finishNode(node, \"JSXClosingElement\");\n }\n\n // Parses entire JSX element, including it\"s opening tag\n // (starting after \"<\"), attributes, contents and closing tag.\n\n jsxParseElementAt(startPos: number, startLoc: Position): N.JSXElement {\n const node = this.startNodeAt(startPos, startLoc);\n const children = [];\n const openingElement = this.jsxParseOpeningElementAt(startPos, startLoc);\n let closingElement = null;\n\n if (!openingElement.selfClosing) {\n contents: for (;;) {\n switch (this.state.type) {\n case tt.jsxTagStart:\n startPos = this.state.start;\n startLoc = this.state.startLoc;\n this.next();\n if (this.eat(tt.slash)) {\n closingElement = this.jsxParseClosingElementAt(\n startPos,\n startLoc,\n );\n break contents;\n }\n children.push(this.jsxParseElementAt(startPos, startLoc));\n break;\n\n case tt.jsxText:\n children.push(this.parseExprAtom());\n break;\n\n case tt.braceL: {\n const node = this.startNode();\n this.next();\n if (this.match(tt.ellipsis)) {\n children.push(this.jsxParseSpreadChild(node));\n } else {\n children.push(this.jsxParseExpressionContainer(node));\n }\n\n break;\n }\n // istanbul ignore next - should never happen\n default:\n throw this.unexpected();\n }\n }\n\n if (isFragment(openingElement) && !isFragment(closingElement)) {\n this.raise(\n // $FlowIgnore\n closingElement.start,\n \"Expected corresponding JSX closing tag for <>\",\n );\n } else if (!isFragment(openingElement) && isFragment(closingElement)) {\n this.raise(\n // $FlowIgnore\n closingElement.start,\n \"Expected corresponding JSX closing tag for <\" +\n getQualifiedJSXName(openingElement.name) +\n \">\",\n );\n } else if (!isFragment(openingElement) && !isFragment(closingElement)) {\n if (\n // $FlowIgnore\n getQualifiedJSXName(closingElement.name) !==\n getQualifiedJSXName(openingElement.name)\n ) {\n this.raise(\n // $FlowIgnore\n closingElement.start,\n \"Expected corresponding JSX closing tag for <\" +\n getQualifiedJSXName(openingElement.name) +\n \">\",\n );\n }\n }\n }\n\n if (isFragment(openingElement)) {\n node.openingFragment = openingElement;\n node.closingFragment = closingElement;\n } else {\n node.openingElement = openingElement;\n node.closingElement = closingElement;\n }\n node.children = children;\n if (this.isRelational(\"<\")) {\n throw this.raise(\n this.state.start,\n \"Adjacent JSX elements must be wrapped in an enclosing tag. \" +\n \"Did you want a JSX fragment <>...</>?\",\n );\n }\n\n return isFragment(openingElement)\n ? this.finishNode(node, \"JSXFragment\")\n : this.finishNode(node, \"JSXElement\");\n }\n\n // Parses entire JSX element from current position.\n\n jsxParseElement(): N.JSXElement {\n const startPos = this.state.start;\n const startLoc = this.state.startLoc;\n this.next();\n return this.jsxParseElementAt(startPos, startLoc);\n }\n\n // ==================================\n // Overrides\n // ==================================\n\n parseExprAtom(refShortHandDefaultPos: ?Pos): N.Expression {\n if (this.match(tt.jsxText)) {\n return this.parseLiteral(this.state.value, \"JSXText\");\n } else if (this.match(tt.jsxTagStart)) {\n return this.jsxParseElement();\n } else if (\n this.isRelational(\"<\") &&\n this.input.charCodeAt(this.state.pos) !== charCodes.exclamationMark\n ) {\n // In case we encounter an lt token here it will always be the start of\n // jsx as the lt sign is not allowed in places that expect an expression\n this.finishToken(tt.jsxTagStart);\n return this.jsxParseElement();\n } else {\n return super.parseExprAtom(refShortHandDefaultPos);\n }\n }\n\n getTokenFromCode(code: number): void {\n if (this.state.inPropertyName) return super.getTokenFromCode(code);\n\n const context = this.curContext();\n\n if (context === tc.j_expr) {\n return this.jsxReadToken();\n }\n\n if (context === tc.j_oTag || context === tc.j_cTag) {\n if (isIdentifierStart(code)) {\n return this.jsxReadWord();\n }\n\n if (code === charCodes.greaterThan) {\n ++this.state.pos;\n return this.finishToken(tt.jsxTagEnd);\n }\n\n if (\n (code === charCodes.quotationMark || code === charCodes.apostrophe) &&\n context === tc.j_oTag\n ) {\n return this.jsxReadString(code);\n }\n }\n\n if (\n code === charCodes.lessThan &&\n this.state.exprAllowed &&\n this.input.charCodeAt(this.state.pos + 1) !== charCodes.exclamationMark\n ) {\n ++this.state.pos;\n return this.finishToken(tt.jsxTagStart);\n }\n\n return super.getTokenFromCode(code);\n }\n\n updateContext(prevType: TokenType): void {\n if (this.match(tt.braceL)) {\n const curContext = this.curContext();\n if (curContext === tc.j_oTag) {\n this.state.context.push(tc.braceExpression);\n } else if (curContext === tc.j_expr) {\n this.state.context.push(tc.templateQuasi);\n } else {\n super.updateContext(prevType);\n }\n this.state.exprAllowed = true;\n } else if (this.match(tt.slash) && prevType === tt.jsxTagStart) {\n this.state.context.length -= 2; // do not consider JSX expr -> JSX open tag -> ... anymore\n this.state.context.push(tc.j_cTag); // reconsider as closing tag context\n this.state.exprAllowed = false;\n } else {\n return super.updateContext(prevType);\n }\n }\n };\n","// @flow\nimport {\n SCOPE_ARROW,\n SCOPE_ASYNC,\n SCOPE_DIRECT_SUPER,\n SCOPE_FUNCTION,\n SCOPE_GENERATOR,\n SCOPE_SIMPLE_CATCH,\n SCOPE_SUPER,\n SCOPE_PROGRAM,\n SCOPE_VAR,\n SCOPE_CLASS,\n BIND_SCOPE_FUNCTION,\n BIND_SCOPE_VAR,\n BIND_SCOPE_LEXICAL,\n BIND_KIND_VALUE,\n type ScopeFlags,\n type BindingTypes,\n} from \"./scopeflags\";\nimport * as N from \"../types\";\n\n// Start an AST node, attaching a start offset.\nexport class Scope {\n flags: ScopeFlags;\n // A list of var-declared names in the current lexical scope\n var: string[] = [];\n // A list of lexically-declared names in the current lexical scope\n lexical: string[] = [];\n // A list of lexically-declared FunctionDeclaration names in the current lexical scope\n functions: string[] = [];\n\n constructor(flags: ScopeFlags) {\n this.flags = flags;\n }\n}\n\ntype raiseFunction = (number, string) => void;\n\n// The functions in this module keep track of declared variables in the\n// current scope in order to detect duplicate variable names.\nexport default class ScopeHandler<IScope: Scope = Scope> {\n scopeStack: Array<IScope> = [];\n raise: raiseFunction;\n inModule: boolean;\n undefinedExports: Map<string, number> = new Map();\n undefinedPrivateNames: Map<string, number> = new Map();\n\n constructor(raise: raiseFunction, inModule: boolean) {\n this.raise = raise;\n this.inModule = inModule;\n }\n\n get inFunction() {\n return (this.currentVarScope().flags & SCOPE_FUNCTION) > 0;\n }\n get inGenerator() {\n return (this.currentVarScope().flags & SCOPE_GENERATOR) > 0;\n }\n // the following loop always exit because SCOPE_PROGRAM is SCOPE_VAR\n // $FlowIgnore\n get inAsync() {\n for (let i = this.scopeStack.length - 1; ; i--) {\n const scope = this.scopeStack[i];\n const isVarScope = scope.flags & SCOPE_VAR;\n const isClassScope = scope.flags & SCOPE_CLASS;\n if (isClassScope && !isVarScope) {\n // If it meets a class scope before a var scope, it means it is a class property initializer\n // which does not have an [Await] parameter in its grammar\n return false;\n } else if (isVarScope) {\n return (scope.flags & SCOPE_ASYNC) > 0;\n }\n }\n }\n get allowSuper() {\n return (this.currentThisScope().flags & SCOPE_SUPER) > 0;\n }\n get allowDirectSuper() {\n return (this.currentThisScope().flags & SCOPE_DIRECT_SUPER) > 0;\n }\n get inClass() {\n return (this.currentThisScope().flags & SCOPE_CLASS) > 0;\n }\n get inNonArrowFunction() {\n return (this.currentThisScope().flags & SCOPE_FUNCTION) > 0;\n }\n get treatFunctionsAsVar() {\n return this.treatFunctionsAsVarInScope(this.currentScope());\n }\n\n createScope(flags: ScopeFlags): Scope {\n return new Scope(flags);\n }\n // This method will be overwritten by subclasses\n +createScope: (flags: ScopeFlags) => IScope;\n\n enter(flags: ScopeFlags) {\n this.scopeStack.push(this.createScope(flags));\n }\n\n exit() {\n this.scopeStack.pop();\n }\n\n // The spec says:\n // > At the top level of a function, or script, function declarations are\n // > treated like var declarations rather than like lexical declarations.\n treatFunctionsAsVarInScope(scope: IScope): boolean {\n return !!(\n scope.flags & SCOPE_FUNCTION ||\n (!this.inModule && scope.flags & SCOPE_PROGRAM)\n );\n }\n\n declareName(name: string, bindingType: BindingTypes, pos: number) {\n let scope = this.currentScope();\n if (bindingType & BIND_SCOPE_LEXICAL || bindingType & BIND_SCOPE_FUNCTION) {\n this.checkRedeclarationInScope(scope, name, bindingType, pos);\n\n if (bindingType & BIND_SCOPE_FUNCTION) {\n scope.functions.push(name);\n } else {\n scope.lexical.push(name);\n }\n\n if (bindingType & BIND_SCOPE_LEXICAL) {\n this.maybeExportDefined(scope, name);\n }\n } else if (bindingType & BIND_SCOPE_VAR) {\n for (let i = this.scopeStack.length - 1; i >= 0; --i) {\n scope = this.scopeStack[i];\n this.checkRedeclarationInScope(scope, name, bindingType, pos);\n scope.var.push(name);\n this.maybeExportDefined(scope, name);\n\n if (scope.flags & SCOPE_VAR) break;\n }\n }\n if (this.inModule && scope.flags & SCOPE_PROGRAM) {\n this.undefinedExports.delete(name);\n }\n }\n\n maybeExportDefined(scope: IScope, name: string) {\n if (this.inModule && scope.flags & SCOPE_PROGRAM) {\n this.undefinedExports.delete(name);\n }\n }\n\n checkRedeclarationInScope(\n scope: IScope,\n name: string,\n bindingType: BindingTypes,\n pos: number,\n ) {\n if (this.isRedeclaredInScope(scope, name, bindingType)) {\n this.raise(pos, `Identifier '${name}' has already been declared`);\n }\n }\n\n isRedeclaredInScope(\n scope: IScope,\n name: string,\n bindingType: BindingTypes,\n ): boolean {\n if (!(bindingType & BIND_KIND_VALUE)) return false;\n\n if (bindingType & BIND_SCOPE_LEXICAL) {\n return (\n scope.lexical.indexOf(name) > -1 ||\n scope.functions.indexOf(name) > -1 ||\n scope.var.indexOf(name) > -1\n );\n }\n\n if (bindingType & BIND_SCOPE_FUNCTION) {\n return (\n scope.lexical.indexOf(name) > -1 ||\n (!this.treatFunctionsAsVarInScope(scope) &&\n scope.var.indexOf(name) > -1)\n );\n }\n\n return (\n (scope.lexical.indexOf(name) > -1 &&\n !(scope.flags & SCOPE_SIMPLE_CATCH && scope.lexical[0] === name)) ||\n (!this.treatFunctionsAsVarInScope(scope) &&\n scope.functions.indexOf(name) > -1)\n );\n }\n\n checkLocalExport(id: N.Identifier) {\n if (\n this.scopeStack[0].lexical.indexOf(id.name) === -1 &&\n this.scopeStack[0].var.indexOf(id.name) === -1 &&\n // In strict mode, scope.functions will always be empty.\n // Modules are strict by default, but the `scriptMode` option\n // can overwrite this behavior.\n this.scopeStack[0].functions.indexOf(id.name) === -1\n ) {\n this.undefinedExports.set(id.name, id.start);\n }\n }\n\n currentScope(): IScope {\n return this.scopeStack[this.scopeStack.length - 1];\n }\n\n // $FlowIgnore\n currentVarScope(): IScope {\n for (let i = this.scopeStack.length - 1; ; i--) {\n const scope = this.scopeStack[i];\n if (scope.flags & SCOPE_VAR) {\n return scope;\n }\n }\n }\n\n // Could be useful for `arguments`, `this`, `new.target`, `super()`, `super.property`, and `super[property]`.\n // $FlowIgnore\n currentThisScope(): IScope {\n for (let i = this.scopeStack.length - 1; ; i--) {\n const scope = this.scopeStack[i];\n if (\n (scope.flags & SCOPE_VAR || scope.flags & SCOPE_CLASS) &&\n !(scope.flags & SCOPE_ARROW)\n ) {\n return scope;\n }\n }\n }\n}\n","// @flow\n\nimport ScopeHandler, { Scope } from \"../../util/scope\";\nimport {\n BIND_KIND_TYPE,\n BIND_FLAGS_TS_ENUM,\n BIND_FLAGS_TS_CONST_ENUM,\n BIND_FLAGS_TS_EXPORT_ONLY,\n BIND_KIND_VALUE,\n BIND_FLAGS_CLASS,\n type ScopeFlags,\n type BindingTypes,\n} from \"../../util/scopeflags\";\nimport * as N from \"../../types\";\n\nclass TypeScriptScope extends Scope {\n types: string[] = [];\n\n // enums (which are also in .types)\n enums: string[] = [];\n\n // const enums (which are also in .enums and .types)\n constEnums: string[] = [];\n\n // classes (which are also in .lexical) and interface (which are also in .types)\n classes: string[] = [];\n\n // namespaces and ambient functions (or classes) are too difficult to track,\n // especially without type analysis.\n // We need to track them anyway, to avoid \"X is not defined\" errors\n // when exporting them.\n exportOnlyBindings: string[] = [];\n}\n\n// See https://github.com/babel/babel/pull/9766#discussion_r268920730 for an\n// explanation of how typescript handles scope.\n\nexport default class TypeScriptScopeHandler extends ScopeHandler<TypeScriptScope> {\n createScope(flags: ScopeFlags): TypeScriptScope {\n return new TypeScriptScope(flags);\n }\n\n declareName(name: string, bindingType: BindingTypes, pos: number) {\n const scope = this.currentScope();\n if (bindingType & BIND_FLAGS_TS_EXPORT_ONLY) {\n this.maybeExportDefined(scope, name);\n scope.exportOnlyBindings.push(name);\n return;\n }\n\n super.declareName(...arguments);\n\n if (bindingType & BIND_KIND_TYPE) {\n if (!(bindingType & BIND_KIND_VALUE)) {\n // \"Value\" bindings have already been registered by the superclass.\n this.checkRedeclarationInScope(scope, name, bindingType, pos);\n this.maybeExportDefined(scope, name);\n }\n scope.types.push(name);\n }\n if (bindingType & BIND_FLAGS_TS_ENUM) scope.enums.push(name);\n if (bindingType & BIND_FLAGS_TS_CONST_ENUM) scope.constEnums.push(name);\n if (bindingType & BIND_FLAGS_CLASS) scope.classes.push(name);\n }\n\n isRedeclaredInScope(\n scope: TypeScriptScope,\n name: string,\n bindingType: BindingTypes,\n ): boolean {\n if (scope.enums.indexOf(name) > -1) {\n if (bindingType & BIND_FLAGS_TS_ENUM) {\n // Enums can be merged with other enums if they are both\n // const or both non-const.\n const isConst = !!(bindingType & BIND_FLAGS_TS_CONST_ENUM);\n const wasConst = scope.constEnums.indexOf(name) > -1;\n return isConst !== wasConst;\n }\n return true;\n }\n if (bindingType & BIND_FLAGS_CLASS && scope.classes.indexOf(name) > -1) {\n if (scope.lexical.indexOf(name) > -1) {\n // Classes can be merged with interfaces\n return !!(bindingType & BIND_KIND_VALUE);\n } else {\n // Interface can be merged with other classes or interfaces\n return false;\n }\n }\n if (bindingType & BIND_KIND_TYPE && scope.types.indexOf(name) > -1) {\n return true;\n }\n\n return super.isRedeclaredInScope(...arguments);\n }\n\n checkLocalExport(id: N.Identifier) {\n if (\n this.scopeStack[0].types.indexOf(id.name) === -1 &&\n this.scopeStack[0].exportOnlyBindings.indexOf(id.name) === -1\n ) {\n super.checkLocalExport(id);\n }\n }\n}\n","// @flow\n\n/*:: declare var invariant; */\n\nimport type { TokenType } from \"../../tokenizer/types\";\nimport type State from \"../../tokenizer/state\";\nimport { types as tt } from \"../../tokenizer/types\";\nimport { types as ct } from \"../../tokenizer/context\";\nimport * as N from \"../../types\";\nimport type { Pos, Position } from \"../../util/location\";\nimport type Parser from \"../../parser\";\nimport {\n type BindingTypes,\n BIND_NONE,\n SCOPE_TS_MODULE,\n SCOPE_OTHER,\n BIND_TS_ENUM,\n BIND_TS_CONST_ENUM,\n BIND_TS_TYPE,\n BIND_TS_INTERFACE,\n BIND_TS_AMBIENT,\n BIND_TS_NAMESPACE,\n BIND_CLASS,\n BIND_LEXICAL,\n} from \"../../util/scopeflags\";\nimport TypeScriptScopeHandler from \"./scope\";\nimport * as charCodes from \"charcodes\";\n\ntype TsModifier =\n | \"readonly\"\n | \"abstract\"\n | \"declare\"\n | \"static\"\n | \"public\"\n | \"private\"\n | \"protected\";\n\nfunction nonNull<T>(x: ?T): T {\n if (x == null) {\n // $FlowIgnore\n throw new Error(`Unexpected ${x} value.`);\n }\n return x;\n}\n\nfunction assert(x: boolean): void {\n if (!x) {\n throw new Error(\"Assert fail\");\n }\n}\n\ntype ParsingContext =\n | \"EnumMembers\"\n | \"HeritageClauseElement\"\n | \"TupleElementTypes\"\n | \"TypeMembers\"\n | \"TypeParametersOrArguments\";\n\n// Doesn't handle \"void\" or \"null\" because those are keywords, not identifiers.\nfunction keywordTypeFromName(\n value: string,\n): N.TsKeywordTypeType | typeof undefined {\n switch (value) {\n case \"any\":\n return \"TSAnyKeyword\";\n case \"boolean\":\n return \"TSBooleanKeyword\";\n case \"bigint\":\n return \"TSBigIntKeyword\";\n case \"never\":\n return \"TSNeverKeyword\";\n case \"number\":\n return \"TSNumberKeyword\";\n case \"object\":\n return \"TSObjectKeyword\";\n case \"string\":\n return \"TSStringKeyword\";\n case \"symbol\":\n return \"TSSymbolKeyword\";\n case \"undefined\":\n return \"TSUndefinedKeyword\";\n case \"unknown\":\n return \"TSUnknownKeyword\";\n default:\n return undefined;\n }\n}\n\nexport default (superClass: Class<Parser>): Class<Parser> =>\n class extends superClass {\n getScopeHandler(): Class<TypeScriptScopeHandler> {\n return TypeScriptScopeHandler;\n }\n\n tsIsIdentifier(): boolean {\n // TODO: actually a bit more complex in TypeScript, but shouldn't matter.\n // See https://github.com/Microsoft/TypeScript/issues/15008\n return this.match(tt.name);\n }\n\n tsNextTokenCanFollowModifier() {\n // Note: TypeScript's implementation is much more complicated because\n // more things are considered modifiers there.\n // This implementation only handles modifiers not handled by @babel/parser itself. And \"static\".\n // TODO: Would be nice to avoid lookahead. Want a hasLineBreakUpNext() method...\n this.next();\n return (\n !this.hasPrecedingLineBreak() &&\n !this.match(tt.parenL) &&\n !this.match(tt.parenR) &&\n !this.match(tt.colon) &&\n !this.match(tt.eq) &&\n !this.match(tt.question) &&\n !this.match(tt.bang)\n );\n }\n\n /** Parses a modifier matching one the given modifier names. */\n tsParseModifier<T: TsModifier>(allowedModifiers: T[]): ?T {\n if (!this.match(tt.name)) {\n return undefined;\n }\n\n const modifier = this.state.value;\n if (\n allowedModifiers.indexOf(modifier) !== -1 &&\n this.tsTryParse(this.tsNextTokenCanFollowModifier.bind(this))\n ) {\n return modifier;\n }\n return undefined;\n }\n\n /** Parses a list of modifiers, in any order.\n * If you need a specific order, you must call this function multiple times:\n * this.tsParseModifiers([\"public\"]);\n * this.tsParseModifiers([\"abstract\", \"readonly\"]);\n */\n tsParseModifiers<T: TsModifier>(\n allowedModifiers: T[],\n ): { [key: TsModifier]: ?true, __proto__: null } {\n const modifiers = Object.create(null);\n\n while (true) {\n const startPos = this.state.start;\n const modifier: ?T = this.tsParseModifier(allowedModifiers);\n\n if (!modifier) break;\n\n if (Object.hasOwnProperty.call(modifiers, modifier)) {\n this.raise(startPos, `Duplicate modifier: '${modifier}'`);\n }\n modifiers[modifier] = true;\n }\n\n return modifiers;\n }\n\n tsIsListTerminator(kind: ParsingContext): boolean {\n switch (kind) {\n case \"EnumMembers\":\n case \"TypeMembers\":\n return this.match(tt.braceR);\n case \"HeritageClauseElement\":\n return this.match(tt.braceL);\n case \"TupleElementTypes\":\n return this.match(tt.bracketR);\n case \"TypeParametersOrArguments\":\n return this.isRelational(\">\");\n }\n\n throw new Error(\"Unreachable\");\n }\n\n tsParseList<T: N.Node>(kind: ParsingContext, parseElement: () => T): T[] {\n const result: T[] = [];\n while (!this.tsIsListTerminator(kind)) {\n // Skipping \"parseListElement\" from the TS source since that's just for error handling.\n result.push(parseElement());\n }\n return result;\n }\n\n tsParseDelimitedList<T: N.Node>(\n kind: ParsingContext,\n parseElement: () => T,\n ): T[] {\n return nonNull(\n this.tsParseDelimitedListWorker(\n kind,\n parseElement,\n /* expectSuccess */ true,\n ),\n );\n }\n\n /**\n * If !expectSuccess, returns undefined instead of failing to parse.\n * If expectSuccess, parseElement should always return a defined value.\n */\n tsParseDelimitedListWorker<T: N.Node>(\n kind: ParsingContext,\n parseElement: () => ?T,\n expectSuccess: boolean,\n ): ?(T[]) {\n const result = [];\n\n while (true) {\n if (this.tsIsListTerminator(kind)) {\n break;\n }\n\n const element = parseElement();\n if (element == null) {\n return undefined;\n }\n result.push(element);\n\n if (this.eat(tt.comma)) {\n continue;\n }\n\n if (this.tsIsListTerminator(kind)) {\n break;\n }\n\n if (expectSuccess) {\n // This will fail with an error about a missing comma\n this.expect(tt.comma);\n }\n return undefined;\n }\n\n return result;\n }\n\n tsParseBracketedList<T: N.Node>(\n kind: ParsingContext,\n parseElement: () => T,\n bracket: boolean,\n skipFirstToken: boolean,\n ): T[] {\n if (!skipFirstToken) {\n if (bracket) {\n this.expect(tt.bracketL);\n } else {\n this.expectRelational(\"<\");\n }\n }\n\n const result = this.tsParseDelimitedList(kind, parseElement);\n\n if (bracket) {\n this.expect(tt.bracketR);\n } else {\n this.expectRelational(\">\");\n }\n\n return result;\n }\n\n tsParseImportType(): N.TsImportType {\n const node: N.TsImportType = this.startNode();\n this.expect(tt._import);\n this.expect(tt.parenL);\n if (!this.match(tt.string)) {\n this.raise(\n this.state.start,\n \"Argument in a type import must be a string literal\",\n );\n }\n\n // For compatibility to estree we cannot call parseLiteral directly here\n node.argument = this.parseExprAtom();\n this.expect(tt.parenR);\n\n if (this.eat(tt.dot)) {\n node.qualifier = this.tsParseEntityName(/* allowReservedWords */ true);\n }\n if (this.isRelational(\"<\")) {\n node.typeParameters = this.tsParseTypeArguments();\n }\n return this.finishNode(node, \"TSImportType\");\n }\n\n tsParseEntityName(allowReservedWords: boolean): N.TsEntityName {\n let entity: N.TsEntityName = this.parseIdentifier();\n while (this.eat(tt.dot)) {\n const node: N.TsQualifiedName = this.startNodeAtNode(entity);\n node.left = entity;\n node.right = this.parseIdentifier(allowReservedWords);\n entity = this.finishNode(node, \"TSQualifiedName\");\n }\n return entity;\n }\n\n tsParseTypeReference(): N.TsTypeReference {\n const node: N.TsTypeReference = this.startNode();\n node.typeName = this.tsParseEntityName(/* allowReservedWords */ false);\n if (!this.hasPrecedingLineBreak() && this.isRelational(\"<\")) {\n node.typeParameters = this.tsParseTypeArguments();\n }\n return this.finishNode(node, \"TSTypeReference\");\n }\n\n tsParseThisTypePredicate(lhs: N.TsThisType): N.TsTypePredicate {\n this.next();\n const node: N.TsTypePredicate = this.startNodeAtNode(lhs);\n node.parameterName = lhs;\n node.typeAnnotation = this.tsParseTypeAnnotation(/* eatColon */ false);\n return this.finishNode(node, \"TSTypePredicate\");\n }\n\n tsParseThisTypeNode(): N.TsThisType {\n const node: N.TsThisType = this.startNode();\n this.next();\n return this.finishNode(node, \"TSThisType\");\n }\n\n tsParseTypeQuery(): N.TsTypeQuery {\n const node: N.TsTypeQuery = this.startNode();\n this.expect(tt._typeof);\n if (this.match(tt._import)) {\n node.exprName = this.tsParseImportType();\n } else {\n node.exprName = this.tsParseEntityName(/* allowReservedWords */ true);\n }\n return this.finishNode(node, \"TSTypeQuery\");\n }\n\n tsParseTypeParameter(): N.TsTypeParameter {\n const node: N.TsTypeParameter = this.startNode();\n node.name = this.parseIdentifierName(node.start);\n node.constraint = this.tsEatThenParseType(tt._extends);\n node.default = this.tsEatThenParseType(tt.eq);\n return this.finishNode(node, \"TSTypeParameter\");\n }\n\n tsTryParseTypeParameters(): ?N.TsTypeParameterDeclaration {\n if (this.isRelational(\"<\")) {\n return this.tsParseTypeParameters();\n }\n }\n\n tsParseTypeParameters() {\n const node: N.TsTypeParameterDeclaration = this.startNode();\n\n if (this.isRelational(\"<\") || this.match(tt.jsxTagStart)) {\n this.next();\n } else {\n this.unexpected();\n }\n\n node.params = this.tsParseBracketedList(\n \"TypeParametersOrArguments\",\n this.tsParseTypeParameter.bind(this),\n /* bracket */ false,\n /* skipFirstToken */ true,\n );\n return this.finishNode(node, \"TSTypeParameterDeclaration\");\n }\n\n tsTryNextParseConstantContext(): ?N.TsTypeReference {\n if (this.lookahead().type === tt._const) {\n this.next();\n return this.tsParseTypeReference();\n }\n return null;\n }\n\n // Note: In TypeScript implementation we must provide `yieldContext` and `awaitContext`,\n // but here it's always false, because this is only used for types.\n tsFillSignature(\n returnToken: TokenType,\n signature: N.TsSignatureDeclaration,\n ): void {\n // Arrow fns *must* have return token (`=>`). Normal functions can omit it.\n const returnTokenRequired = returnToken === tt.arrow;\n signature.typeParameters = this.tsTryParseTypeParameters();\n this.expect(tt.parenL);\n signature.parameters = this.tsParseBindingListForSignature();\n if (returnTokenRequired) {\n signature.typeAnnotation = this.tsParseTypeOrTypePredicateAnnotation(\n returnToken,\n );\n } else if (this.match(returnToken)) {\n signature.typeAnnotation = this.tsParseTypeOrTypePredicateAnnotation(\n returnToken,\n );\n }\n }\n\n tsParseBindingListForSignature(): $ReadOnlyArray<\n N.Identifier | N.RestElement | N.ObjectPattern | N.ArrayPattern,\n > {\n return this.parseBindingList(tt.parenR, charCodes.rightParenthesis).map(\n pattern => {\n if (\n pattern.type !== \"Identifier\" &&\n pattern.type !== \"RestElement\" &&\n pattern.type !== \"ObjectPattern\" &&\n pattern.type !== \"ArrayPattern\"\n ) {\n this.raise(\n pattern.start,\n \"Name in a signature must be an Identifier, ObjectPattern or ArrayPattern,\" +\n `instead got ${pattern.type}`,\n );\n }\n return (pattern: any);\n },\n );\n }\n\n tsParseTypeMemberSemicolon(): void {\n if (!this.eat(tt.comma)) {\n this.semicolon();\n }\n }\n\n tsParseSignatureMember(\n kind: \"TSCallSignatureDeclaration\" | \"TSConstructSignatureDeclaration\",\n node: N.TsCallSignatureDeclaration | N.TsConstructSignatureDeclaration,\n ): N.TsCallSignatureDeclaration | N.TsConstructSignatureDeclaration {\n this.tsFillSignature(tt.colon, node);\n this.tsParseTypeMemberSemicolon();\n return this.finishNode(node, kind);\n }\n\n tsIsUnambiguouslyIndexSignature() {\n this.next(); // Skip '{'\n return this.eat(tt.name) && this.match(tt.colon);\n }\n\n tsTryParseIndexSignature(node: N.Node): ?N.TsIndexSignature {\n if (\n !(\n this.match(tt.bracketL) &&\n this.tsLookAhead(this.tsIsUnambiguouslyIndexSignature.bind(this))\n )\n ) {\n return undefined;\n }\n\n this.expect(tt.bracketL);\n const id = this.parseIdentifier();\n id.typeAnnotation = this.tsParseTypeAnnotation();\n this.resetEndLocation(id); // set end position to end of type\n\n this.expect(tt.bracketR);\n node.parameters = [id];\n\n const type = this.tsTryParseTypeAnnotation();\n if (type) node.typeAnnotation = type;\n this.tsParseTypeMemberSemicolon();\n return this.finishNode(node, \"TSIndexSignature\");\n }\n\n tsParsePropertyOrMethodSignature(\n node: N.TsPropertySignature | N.TsMethodSignature,\n readonly: boolean,\n ): N.TsPropertySignature | N.TsMethodSignature {\n if (this.eat(tt.question)) node.optional = true;\n const nodeAny: any = node;\n\n if (!readonly && (this.match(tt.parenL) || this.isRelational(\"<\"))) {\n const method: N.TsMethodSignature = nodeAny;\n this.tsFillSignature(tt.colon, method);\n this.tsParseTypeMemberSemicolon();\n return this.finishNode(method, \"TSMethodSignature\");\n } else {\n const property: N.TsPropertySignature = nodeAny;\n if (readonly) property.readonly = true;\n const type = this.tsTryParseTypeAnnotation();\n if (type) property.typeAnnotation = type;\n this.tsParseTypeMemberSemicolon();\n return this.finishNode(property, \"TSPropertySignature\");\n }\n }\n\n tsParseTypeMember(): N.TsTypeElement {\n const node: any = this.startNode();\n\n if (this.match(tt.parenL) || this.isRelational(\"<\")) {\n return this.tsParseSignatureMember(\"TSCallSignatureDeclaration\", node);\n }\n\n if (this.match(tt._new)) {\n const id: N.Identifier = this.startNode();\n this.next();\n if (this.match(tt.parenL) || this.isRelational(\"<\")) {\n return this.tsParseSignatureMember(\n \"TSConstructSignatureDeclaration\",\n node,\n );\n } else {\n node.key = this.createIdentifier(id, \"new\");\n return this.tsParsePropertyOrMethodSignature(node, false);\n }\n }\n\n const readonly = !!this.tsParseModifier([\"readonly\"]);\n\n const idx = this.tsTryParseIndexSignature(node);\n if (idx) {\n if (readonly) node.readonly = true;\n return idx;\n }\n\n this.parsePropertyName(node, /* isPrivateNameAllowed */ false);\n return this.tsParsePropertyOrMethodSignature(node, readonly);\n }\n\n tsParseTypeLiteral(): N.TsTypeLiteral {\n const node: N.TsTypeLiteral = this.startNode();\n node.members = this.tsParseObjectTypeMembers();\n return this.finishNode(node, \"TSTypeLiteral\");\n }\n\n tsParseObjectTypeMembers(): $ReadOnlyArray<N.TsTypeElement> {\n this.expect(tt.braceL);\n const members = this.tsParseList(\n \"TypeMembers\",\n this.tsParseTypeMember.bind(this),\n );\n this.expect(tt.braceR);\n return members;\n }\n\n tsIsStartOfMappedType(): boolean {\n this.next();\n if (this.eat(tt.plusMin)) {\n return this.isContextual(\"readonly\");\n }\n if (this.isContextual(\"readonly\")) {\n this.next();\n }\n if (!this.match(tt.bracketL)) {\n return false;\n }\n this.next();\n if (!this.tsIsIdentifier()) {\n return false;\n }\n this.next();\n return this.match(tt._in);\n }\n\n tsParseMappedTypeParameter(): N.TsTypeParameter {\n const node: N.TsTypeParameter = this.startNode();\n node.name = this.parseIdentifierName(node.start);\n node.constraint = this.tsExpectThenParseType(tt._in);\n return this.finishNode(node, \"TSTypeParameter\");\n }\n\n tsParseMappedType(): N.TsMappedType {\n const node: N.TsMappedType = this.startNode();\n\n this.expect(tt.braceL);\n\n if (this.match(tt.plusMin)) {\n node.readonly = this.state.value;\n this.next();\n this.expectContextual(\"readonly\");\n } else if (this.eatContextual(\"readonly\")) {\n node.readonly = true;\n }\n\n this.expect(tt.bracketL);\n node.typeParameter = this.tsParseMappedTypeParameter();\n this.expect(tt.bracketR);\n\n if (this.match(tt.plusMin)) {\n node.optional = this.state.value;\n this.next();\n this.expect(tt.question);\n } else if (this.eat(tt.question)) {\n node.optional = true;\n }\n\n node.typeAnnotation = this.tsTryParseType();\n this.semicolon();\n this.expect(tt.braceR);\n\n return this.finishNode(node, \"TSMappedType\");\n }\n\n tsParseTupleType(): N.TsTupleType {\n const node: N.TsTupleType = this.startNode();\n node.elementTypes = this.tsParseBracketedList(\n \"TupleElementTypes\",\n this.tsParseTupleElementType.bind(this),\n /* bracket */ true,\n /* skipFirstToken */ false,\n );\n\n // Validate the elementTypes to ensure:\n // No mandatory elements may follow optional elements\n // If there's a rest element, it must be at the end of the tuple\n let seenOptionalElement = false;\n node.elementTypes.forEach(elementNode => {\n if (elementNode.type === \"TSOptionalType\") {\n seenOptionalElement = true;\n } else if (seenOptionalElement && elementNode.type !== \"TSRestType\") {\n this.raise(\n elementNode.start,\n \"A required element cannot follow an optional element.\",\n );\n }\n });\n\n return this.finishNode(node, \"TSTupleType\");\n }\n\n tsParseTupleElementType(): N.TsType {\n // parses `...TsType[]`\n if (this.match(tt.ellipsis)) {\n const restNode: N.TsRestType = this.startNode();\n this.next(); // skips ellipsis\n restNode.typeAnnotation = this.tsParseType();\n if (\n this.match(tt.comma) &&\n this.lookaheadCharCode() !== charCodes.rightSquareBracket\n ) {\n this.raiseRestNotLast(this.state.start);\n }\n return this.finishNode(restNode, \"TSRestType\");\n }\n\n const type = this.tsParseType();\n // parses `TsType?`\n if (this.eat(tt.question)) {\n const optionalTypeNode: N.TsOptionalType = this.startNodeAtNode(type);\n optionalTypeNode.typeAnnotation = type;\n return this.finishNode(optionalTypeNode, \"TSOptionalType\");\n }\n return type;\n }\n\n tsParseParenthesizedType(): N.TsParenthesizedType {\n const node = this.startNode();\n this.expect(tt.parenL);\n node.typeAnnotation = this.tsParseType();\n this.expect(tt.parenR);\n return this.finishNode(node, \"TSParenthesizedType\");\n }\n\n tsParseFunctionOrConstructorType(\n type: \"TSFunctionType\" | \"TSConstructorType\",\n ): N.TsFunctionOrConstructorType {\n const node: N.TsFunctionOrConstructorType = this.startNode();\n if (type === \"TSConstructorType\") {\n this.expect(tt._new);\n }\n this.tsFillSignature(tt.arrow, node);\n return this.finishNode(node, type);\n }\n\n tsParseLiteralTypeNode(): N.TsLiteralType {\n const node: N.TsLiteralType = this.startNode();\n node.literal = (() => {\n switch (this.state.type) {\n case tt.num:\n case tt.string:\n case tt._true:\n case tt._false:\n // For compatibility to estree we cannot call parseLiteral directly here\n return this.parseExprAtom();\n default:\n throw this.unexpected();\n }\n })();\n return this.finishNode(node, \"TSLiteralType\");\n }\n\n tsParseTemplateLiteralType(): N.TsType {\n const node: N.TsLiteralType = this.startNode();\n const templateNode = this.parseTemplate(false);\n if (templateNode.expressions.length > 0) {\n this.raise(\n templateNode.expressions[0].start,\n \"Template literal types cannot have any substitution\",\n );\n }\n node.literal = templateNode;\n return this.finishNode(node, \"TSLiteralType\");\n }\n\n tsParseThisTypeOrThisTypePredicate(): N.TsThisType | N.TsTypePredicate {\n const thisKeyword = this.tsParseThisTypeNode();\n if (this.isContextual(\"is\") && !this.hasPrecedingLineBreak()) {\n return this.tsParseThisTypePredicate(thisKeyword);\n } else {\n return thisKeyword;\n }\n }\n\n tsParseNonArrayType(): N.TsType {\n switch (this.state.type) {\n case tt.name:\n case tt._void:\n case tt._null: {\n const type = this.match(tt._void)\n ? \"TSVoidKeyword\"\n : this.match(tt._null)\n ? \"TSNullKeyword\"\n : keywordTypeFromName(this.state.value);\n if (\n type !== undefined &&\n this.lookaheadCharCode() !== charCodes.dot\n ) {\n const node: N.TsKeywordType = this.startNode();\n this.next();\n return this.finishNode(node, type);\n }\n return this.tsParseTypeReference();\n }\n case tt.string:\n case tt.num:\n case tt._true:\n case tt._false:\n return this.tsParseLiteralTypeNode();\n case tt.plusMin:\n if (this.state.value === \"-\") {\n const node: N.TsLiteralType = this.startNode();\n if (this.lookahead().type !== tt.num) {\n throw this.unexpected();\n }\n node.literal = this.parseMaybeUnary();\n return this.finishNode(node, \"TSLiteralType\");\n }\n break;\n case tt._this:\n return this.tsParseThisTypeOrThisTypePredicate();\n case tt._typeof:\n return this.tsParseTypeQuery();\n case tt._import:\n return this.tsParseImportType();\n case tt.braceL:\n return this.tsLookAhead(this.tsIsStartOfMappedType.bind(this))\n ? this.tsParseMappedType()\n : this.tsParseTypeLiteral();\n case tt.bracketL:\n return this.tsParseTupleType();\n case tt.parenL:\n return this.tsParseParenthesizedType();\n case tt.backQuote:\n return this.tsParseTemplateLiteralType();\n }\n\n throw this.unexpected();\n }\n\n tsParseArrayTypeOrHigher(): N.TsType {\n let type = this.tsParseNonArrayType();\n while (!this.hasPrecedingLineBreak() && this.eat(tt.bracketL)) {\n if (this.match(tt.bracketR)) {\n const node: N.TsArrayType = this.startNodeAtNode(type);\n node.elementType = type;\n this.expect(tt.bracketR);\n type = this.finishNode(node, \"TSArrayType\");\n } else {\n const node: N.TsIndexedAccessType = this.startNodeAtNode(type);\n node.objectType = type;\n node.indexType = this.tsParseType();\n this.expect(tt.bracketR);\n type = this.finishNode(node, \"TSIndexedAccessType\");\n }\n }\n return type;\n }\n\n tsParseTypeOperator(\n operator: \"keyof\" | \"unique\" | \"readonly\",\n ): N.TsTypeOperator {\n const node: N.TsTypeOperator = this.startNode();\n this.expectContextual(operator);\n node.operator = operator;\n node.typeAnnotation = this.tsParseTypeOperatorOrHigher();\n\n if (operator === \"readonly\") {\n this.tsCheckTypeAnnotationForReadOnly(node);\n }\n\n return this.finishNode(node, \"TSTypeOperator\");\n }\n\n tsCheckTypeAnnotationForReadOnly(node: N.Node) {\n switch (node.typeAnnotation.type) {\n case \"TSTupleType\":\n case \"TSArrayType\":\n return;\n default:\n this.raise(\n node.start,\n \"'readonly' type modifier is only permitted on array and tuple literal types.\",\n );\n }\n }\n\n tsParseInferType(): N.TsInferType {\n const node = this.startNode();\n this.expectContextual(\"infer\");\n const typeParameter = this.startNode();\n typeParameter.name = this.parseIdentifierName(typeParameter.start);\n node.typeParameter = this.finishNode(typeParameter, \"TSTypeParameter\");\n return this.finishNode(node, \"TSInferType\");\n }\n\n tsParseTypeOperatorOrHigher(): N.TsType {\n const operator = [\"keyof\", \"unique\", \"readonly\"].find(kw =>\n this.isContextual(kw),\n );\n return operator\n ? this.tsParseTypeOperator(operator)\n : this.isContextual(\"infer\")\n ? this.tsParseInferType()\n : this.tsParseArrayTypeOrHigher();\n }\n\n tsParseUnionOrIntersectionType(\n kind: \"TSUnionType\" | \"TSIntersectionType\",\n parseConstituentType: () => N.TsType,\n operator: TokenType,\n ): N.TsType {\n this.eat(operator);\n let type = parseConstituentType();\n if (this.match(operator)) {\n const types = [type];\n while (this.eat(operator)) {\n types.push(parseConstituentType());\n }\n const node: N.TsUnionType | N.TsIntersectionType = this.startNodeAtNode(\n type,\n );\n node.types = types;\n type = this.finishNode(node, kind);\n }\n return type;\n }\n\n tsParseIntersectionTypeOrHigher(): N.TsType {\n return this.tsParseUnionOrIntersectionType(\n \"TSIntersectionType\",\n this.tsParseTypeOperatorOrHigher.bind(this),\n tt.bitwiseAND,\n );\n }\n\n tsParseUnionTypeOrHigher() {\n return this.tsParseUnionOrIntersectionType(\n \"TSUnionType\",\n this.tsParseIntersectionTypeOrHigher.bind(this),\n tt.bitwiseOR,\n );\n }\n\n tsIsStartOfFunctionType() {\n if (this.isRelational(\"<\")) {\n return true;\n }\n return (\n this.match(tt.parenL) &&\n this.tsLookAhead(this.tsIsUnambiguouslyStartOfFunctionType.bind(this))\n );\n }\n\n tsSkipParameterStart(): boolean {\n if (this.match(tt.name) || this.match(tt._this)) {\n this.next();\n return true;\n }\n\n if (this.match(tt.braceL)) {\n let braceStackCounter = 1;\n this.next();\n\n while (braceStackCounter > 0) {\n if (this.match(tt.braceL)) {\n ++braceStackCounter;\n } else if (this.match(tt.braceR)) {\n --braceStackCounter;\n }\n this.next();\n }\n return true;\n }\n\n if (this.match(tt.bracketL)) {\n let braceStackCounter = 1;\n this.next();\n\n while (braceStackCounter > 0) {\n if (this.match(tt.bracketL)) {\n ++braceStackCounter;\n } else if (this.match(tt.bracketR)) {\n --braceStackCounter;\n }\n this.next();\n }\n return true;\n }\n\n return false;\n }\n\n tsIsUnambiguouslyStartOfFunctionType(): boolean {\n this.next();\n if (this.match(tt.parenR) || this.match(tt.ellipsis)) {\n // ( )\n // ( ...\n return true;\n }\n if (this.tsSkipParameterStart()) {\n if (\n this.match(tt.colon) ||\n this.match(tt.comma) ||\n this.match(tt.question) ||\n this.match(tt.eq)\n ) {\n // ( xxx :\n // ( xxx ,\n // ( xxx ?\n // ( xxx =\n return true;\n }\n if (this.match(tt.parenR)) {\n this.next();\n if (this.match(tt.arrow)) {\n // ( xxx ) =>\n return true;\n }\n }\n }\n return false;\n }\n\n tsParseTypeOrTypePredicateAnnotation(\n returnToken: TokenType,\n ): N.TsTypeAnnotation {\n return this.tsInType(() => {\n const t: N.TsTypeAnnotation = this.startNode();\n this.expect(returnToken);\n\n const asserts = this.tsTryParse(\n this.tsParseTypePredicateAsserts.bind(this),\n );\n\n if (asserts && this.match(tt._this)) {\n // When asserts is false, thisKeyword is handled by tsParseNonArrayType\n // : asserts this is type\n let thisTypePredicate = this.tsParseThisTypeOrThisTypePredicate();\n // if it turns out to be a `TSThisType`, wrap it with `TSTypePredicate`\n // : asserts this\n if (thisTypePredicate.type === \"TSThisType\") {\n const node: N.TsTypePredicate = this.startNodeAtNode(t);\n node.parameterName = (thisTypePredicate: N.TsThisType);\n node.asserts = true;\n thisTypePredicate = this.finishNode(node, \"TSTypePredicate\");\n } else {\n (thisTypePredicate: N.TsTypePredicate).asserts = true;\n }\n t.typeAnnotation = thisTypePredicate;\n return this.finishNode(t, \"TSTypeAnnotation\");\n }\n\n const typePredicateVariable =\n this.tsIsIdentifier() &&\n this.tsTryParse(this.tsParseTypePredicatePrefix.bind(this));\n\n if (!typePredicateVariable) {\n if (!asserts) {\n // : type\n return this.tsParseTypeAnnotation(/* eatColon */ false, t);\n }\n\n const node: N.TsTypePredicate = this.startNodeAtNode(t);\n // : asserts foo\n node.parameterName = this.parseIdentifier();\n node.asserts = asserts;\n t.typeAnnotation = this.finishNode(node, \"TSTypePredicate\");\n return this.finishNode(t, \"TSTypeAnnotation\");\n }\n\n // : asserts foo is type\n const type = this.tsParseTypeAnnotation(/* eatColon */ false);\n const node = this.startNodeAtNode(t);\n node.parameterName = typePredicateVariable;\n node.typeAnnotation = type;\n node.asserts = asserts;\n t.typeAnnotation = this.finishNode(node, \"TSTypePredicate\");\n return this.finishNode(t, \"TSTypeAnnotation\");\n });\n }\n\n tsTryParseTypeOrTypePredicateAnnotation(): ?N.TsTypeAnnotation {\n return this.match(tt.colon)\n ? this.tsParseTypeOrTypePredicateAnnotation(tt.colon)\n : undefined;\n }\n\n tsTryParseTypeAnnotation(): ?N.TsTypeAnnotation {\n return this.match(tt.colon) ? this.tsParseTypeAnnotation() : undefined;\n }\n\n tsTryParseType(): ?N.TsType {\n return this.tsEatThenParseType(tt.colon);\n }\n\n tsParseTypePredicatePrefix(): ?N.Identifier {\n const id = this.parseIdentifier();\n if (this.isContextual(\"is\") && !this.hasPrecedingLineBreak()) {\n this.next();\n return id;\n }\n }\n\n tsParseTypePredicateAsserts(): boolean {\n if (\n !this.match(tt.name) ||\n this.state.value !== \"asserts\" ||\n this.hasPrecedingLineBreak()\n ) {\n return false;\n }\n const containsEsc = this.state.containsEsc;\n this.next();\n if (!this.match(tt.name) && !this.match(tt._this)) {\n return false;\n }\n\n if (containsEsc) {\n this.raise(\n this.state.lastTokStart,\n \"Escape sequence in keyword asserts\",\n );\n }\n\n return true;\n }\n\n tsParseTypeAnnotation(\n eatColon = true,\n t: N.TsTypeAnnotation = this.startNode(),\n ): N.TsTypeAnnotation {\n this.tsInType(() => {\n if (eatColon) this.expect(tt.colon);\n t.typeAnnotation = this.tsParseType();\n });\n return this.finishNode(t, \"TSTypeAnnotation\");\n }\n\n /** Be sure to be in a type context before calling this, using `tsInType`. */\n tsParseType(): N.TsType {\n // Need to set `state.inType` so that we don't parse JSX in a type context.\n assert(this.state.inType);\n const type = this.tsParseNonConditionalType();\n if (this.hasPrecedingLineBreak() || !this.eat(tt._extends)) {\n return type;\n }\n const node: N.TsConditionalType = this.startNodeAtNode(type);\n node.checkType = type;\n node.extendsType = this.tsParseNonConditionalType();\n this.expect(tt.question);\n node.trueType = this.tsParseType();\n this.expect(tt.colon);\n node.falseType = this.tsParseType();\n return this.finishNode(node, \"TSConditionalType\");\n }\n\n tsParseNonConditionalType(): N.TsType {\n if (this.tsIsStartOfFunctionType()) {\n return this.tsParseFunctionOrConstructorType(\"TSFunctionType\");\n }\n if (this.match(tt._new)) {\n // As in `new () => Date`\n return this.tsParseFunctionOrConstructorType(\"TSConstructorType\");\n }\n return this.tsParseUnionTypeOrHigher();\n }\n\n tsParseTypeAssertion(): N.TsTypeAssertion {\n const node: N.TsTypeAssertion = this.startNode();\n const _const = this.tsTryNextParseConstantContext();\n node.typeAnnotation = _const || this.tsNextThenParseType();\n this.expectRelational(\">\");\n node.expression = this.parseMaybeUnary();\n return this.finishNode(node, \"TSTypeAssertion\");\n }\n\n tsParseHeritageClause(\n descriptor: string,\n ): $ReadOnlyArray<N.TsExpressionWithTypeArguments> {\n const originalStart = this.state.start;\n\n const delimitedList = this.tsParseDelimitedList(\n \"HeritageClauseElement\",\n this.tsParseExpressionWithTypeArguments.bind(this),\n );\n\n if (!delimitedList.length) {\n this.raise(originalStart, `'${descriptor}' list cannot be empty.`);\n }\n\n return delimitedList;\n }\n\n tsParseExpressionWithTypeArguments(): N.TsExpressionWithTypeArguments {\n const node: N.TsExpressionWithTypeArguments = this.startNode();\n // Note: TS uses parseLeftHandSideExpressionOrHigher,\n // then has grammar errors later if it's not an EntityName.\n node.expression = this.tsParseEntityName(/* allowReservedWords */ false);\n if (this.isRelational(\"<\")) {\n node.typeParameters = this.tsParseTypeArguments();\n }\n\n return this.finishNode(node, \"TSExpressionWithTypeArguments\");\n }\n\n tsParseInterfaceDeclaration(\n node: N.TsInterfaceDeclaration,\n ): N.TsInterfaceDeclaration {\n node.id = this.parseIdentifier();\n this.checkLVal(\n node.id,\n BIND_TS_INTERFACE,\n undefined,\n \"typescript interface declaration\",\n );\n node.typeParameters = this.tsTryParseTypeParameters();\n if (this.eat(tt._extends)) {\n node.extends = this.tsParseHeritageClause(\"extends\");\n }\n const body: N.TSInterfaceBody = this.startNode();\n body.body = this.tsInType(this.tsParseObjectTypeMembers.bind(this));\n node.body = this.finishNode(body, \"TSInterfaceBody\");\n return this.finishNode(node, \"TSInterfaceDeclaration\");\n }\n\n tsParseTypeAliasDeclaration(\n node: N.TsTypeAliasDeclaration,\n ): N.TsTypeAliasDeclaration {\n node.id = this.parseIdentifier();\n this.checkLVal(node.id, BIND_TS_TYPE, undefined, \"typescript type alias\");\n\n node.typeParameters = this.tsTryParseTypeParameters();\n node.typeAnnotation = this.tsExpectThenParseType(tt.eq);\n this.semicolon();\n return this.finishNode(node, \"TSTypeAliasDeclaration\");\n }\n\n tsInNoContext<T>(cb: () => T): T {\n const oldContext = this.state.context;\n this.state.context = [oldContext[0]];\n try {\n return cb();\n } finally {\n this.state.context = oldContext;\n }\n }\n\n /**\n * Runs `cb` in a type context.\n * This should be called one token *before* the first type token,\n * so that the call to `next()` is run in type context.\n */\n tsInType<T>(cb: () => T): T {\n const oldInType = this.state.inType;\n this.state.inType = true;\n try {\n return cb();\n } finally {\n this.state.inType = oldInType;\n }\n }\n\n tsEatThenParseType(token: TokenType): N.TsType | typeof undefined {\n return !this.match(token) ? undefined : this.tsNextThenParseType();\n }\n\n tsExpectThenParseType(token: TokenType): N.TsType {\n return this.tsDoThenParseType(() => this.expect(token));\n }\n\n tsNextThenParseType(): N.TsType {\n return this.tsDoThenParseType(() => this.next());\n }\n\n tsDoThenParseType(cb: () => void): N.TsType {\n return this.tsInType(() => {\n cb();\n return this.tsParseType();\n });\n }\n\n tsParseEnumMember(): N.TsEnumMember {\n const node: N.TsEnumMember = this.startNode();\n // Computed property names are grammar errors in an enum, so accept just string literal or identifier.\n node.id = this.match(tt.string)\n ? this.parseExprAtom()\n : this.parseIdentifier(/* liberal */ true);\n if (this.eat(tt.eq)) {\n node.initializer = this.parseMaybeAssign();\n }\n return this.finishNode(node, \"TSEnumMember\");\n }\n\n tsParseEnumDeclaration(\n node: N.TsEnumDeclaration,\n isConst: boolean,\n ): N.TsEnumDeclaration {\n if (isConst) node.const = true;\n node.id = this.parseIdentifier();\n this.checkLVal(\n node.id,\n isConst ? BIND_TS_CONST_ENUM : BIND_TS_ENUM,\n undefined,\n \"typescript enum declaration\",\n );\n\n this.expect(tt.braceL);\n node.members = this.tsParseDelimitedList(\n \"EnumMembers\",\n this.tsParseEnumMember.bind(this),\n );\n this.expect(tt.braceR);\n return this.finishNode(node, \"TSEnumDeclaration\");\n }\n\n tsParseModuleBlock(): N.TsModuleBlock {\n const node: N.TsModuleBlock = this.startNode();\n this.scope.enter(SCOPE_OTHER);\n\n this.expect(tt.braceL);\n // Inside of a module block is considered \"top-level\", meaning it can have imports and exports.\n this.parseBlockOrModuleBlockBody(\n (node.body = []),\n /* directives */ undefined,\n /* topLevel */ true,\n /* end */ tt.braceR,\n );\n this.scope.exit();\n return this.finishNode(node, \"TSModuleBlock\");\n }\n\n tsParseModuleOrNamespaceDeclaration(\n node: N.TsModuleDeclaration,\n nested?: boolean = false,\n ): N.TsModuleDeclaration {\n node.id = this.parseIdentifier();\n\n if (!nested) {\n this.checkLVal(\n node.id,\n BIND_TS_NAMESPACE,\n null,\n \"module or namespace declaration\",\n );\n }\n\n if (this.eat(tt.dot)) {\n const inner = this.startNode();\n this.tsParseModuleOrNamespaceDeclaration(inner, true);\n node.body = inner;\n } else {\n this.scope.enter(SCOPE_TS_MODULE);\n node.body = this.tsParseModuleBlock();\n this.scope.exit();\n }\n return this.finishNode(node, \"TSModuleDeclaration\");\n }\n\n tsParseAmbientExternalModuleDeclaration(\n node: N.TsModuleDeclaration,\n ): N.TsModuleDeclaration {\n if (this.isContextual(\"global\")) {\n node.global = true;\n node.id = this.parseIdentifier();\n } else if (this.match(tt.string)) {\n node.id = this.parseExprAtom();\n } else {\n this.unexpected();\n }\n if (this.match(tt.braceL)) {\n this.scope.enter(SCOPE_TS_MODULE);\n node.body = this.tsParseModuleBlock();\n this.scope.exit();\n } else {\n this.semicolon();\n }\n\n return this.finishNode(node, \"TSModuleDeclaration\");\n }\n\n tsParseImportEqualsDeclaration(\n node: N.TsImportEqualsDeclaration,\n isExport?: boolean,\n ): N.TsImportEqualsDeclaration {\n node.isExport = isExport || false;\n node.id = this.parseIdentifier();\n this.checkLVal(\n node.id,\n BIND_LEXICAL,\n undefined,\n \"import equals declaration\",\n );\n this.expect(tt.eq);\n node.moduleReference = this.tsParseModuleReference();\n this.semicolon();\n return this.finishNode(node, \"TSImportEqualsDeclaration\");\n }\n\n tsIsExternalModuleReference(): boolean {\n return (\n this.isContextual(\"require\") &&\n this.lookaheadCharCode() === charCodes.leftParenthesis\n );\n }\n\n tsParseModuleReference(): N.TsModuleReference {\n return this.tsIsExternalModuleReference()\n ? this.tsParseExternalModuleReference()\n : this.tsParseEntityName(/* allowReservedWords */ false);\n }\n\n tsParseExternalModuleReference(): N.TsExternalModuleReference {\n const node: N.TsExternalModuleReference = this.startNode();\n this.expectContextual(\"require\");\n this.expect(tt.parenL);\n if (!this.match(tt.string)) {\n throw this.unexpected();\n }\n // For compatibility to estree we cannot call parseLiteral directly here\n node.expression = this.parseExprAtom();\n this.expect(tt.parenR);\n return this.finishNode(node, \"TSExternalModuleReference\");\n }\n\n // Utilities\n\n tsLookAhead<T>(f: () => T): T {\n const state = this.state.clone();\n const res = f();\n this.state = state;\n return res;\n }\n\n tsTryParseAndCatch<T: ?N.NodeBase>(f: () => T): ?T {\n const result = this.tryParse(abort => f() || abort());\n\n if (result.aborted || !result.node) return undefined;\n if (result.error) this.state = result.failState;\n return result.node;\n }\n\n tsTryParse<T>(f: () => ?T): ?T {\n const state = this.state.clone();\n const result = f();\n if (result !== undefined && result !== false) {\n return result;\n } else {\n this.state = state;\n return undefined;\n }\n }\n\n tsTryParseDeclare(nany: any): ?N.Declaration {\n if (this.isLineTerminator()) {\n return;\n }\n let starttype = this.state.type;\n let kind;\n\n if (this.isContextual(\"let\")) {\n starttype = tt._var;\n kind = \"let\";\n }\n\n switch (starttype) {\n case tt._function:\n return this.parseFunctionStatement(\n nany,\n /* async */ false,\n /* declarationPosition */ true,\n );\n case tt._class:\n // While this is also set by tsParseExpressionStatement, we need to set it\n // before parsing the class declaration to now how to register it in the scope.\n nany.declare = true;\n return this.parseClass(\n nany,\n /* isStatement */ true,\n /* optionalId */ false,\n );\n case tt._const:\n if (this.match(tt._const) && this.isLookaheadContextual(\"enum\")) {\n // `const enum = 0;` not allowed because \"enum\" is a strict mode reserved word.\n this.expect(tt._const);\n this.expectContextual(\"enum\");\n return this.tsParseEnumDeclaration(nany, /* isConst */ true);\n }\n // falls through\n case tt._var:\n kind = kind || this.state.value;\n return this.parseVarStatement(nany, kind);\n case tt.name: {\n const value = this.state.value;\n if (value === \"global\") {\n return this.tsParseAmbientExternalModuleDeclaration(nany);\n } else {\n return this.tsParseDeclaration(nany, value, /* next */ true);\n }\n }\n }\n }\n\n // Note: this won't be called unless the keyword is allowed in `shouldParseExportDeclaration`.\n tsTryParseExportDeclaration(): ?N.Declaration {\n return this.tsParseDeclaration(\n this.startNode(),\n this.state.value,\n /* next */ true,\n );\n }\n\n tsParseExpressionStatement(node: any, expr: N.Identifier): ?N.Declaration {\n switch (expr.name) {\n case \"declare\": {\n const declaration = this.tsTryParseDeclare(node);\n if (declaration) {\n declaration.declare = true;\n return declaration;\n }\n break;\n }\n case \"global\":\n // `global { }` (with no `declare`) may appear inside an ambient module declaration.\n // Would like to use tsParseAmbientExternalModuleDeclaration here, but already ran past \"global\".\n if (this.match(tt.braceL)) {\n this.scope.enter(SCOPE_TS_MODULE);\n const mod: N.TsModuleDeclaration = node;\n mod.global = true;\n mod.id = expr;\n mod.body = this.tsParseModuleBlock();\n this.scope.exit();\n return this.finishNode(mod, \"TSModuleDeclaration\");\n }\n break;\n\n default:\n return this.tsParseDeclaration(node, expr.name, /* next */ false);\n }\n }\n\n // Common to tsTryParseDeclare, tsTryParseExportDeclaration, and tsParseExpressionStatement.\n tsParseDeclaration(\n node: any,\n value: string,\n next: boolean,\n ): ?N.Declaration {\n switch (value) {\n case \"abstract\":\n if (this.tsCheckLineTerminatorAndMatch(tt._class, next)) {\n const cls: N.ClassDeclaration = node;\n cls.abstract = true;\n if (next) {\n this.next();\n if (!this.match(tt._class)) {\n this.unexpected(null, tt._class);\n }\n }\n return this.parseClass(\n cls,\n /* isStatement */ true,\n /* optionalId */ false,\n );\n }\n break;\n\n case \"enum\":\n if (next || this.match(tt.name)) {\n if (next) this.next();\n return this.tsParseEnumDeclaration(node, /* isConst */ false);\n }\n break;\n\n case \"interface\":\n if (this.tsCheckLineTerminatorAndMatch(tt.name, next)) {\n if (next) this.next();\n return this.tsParseInterfaceDeclaration(node);\n }\n break;\n\n case \"module\":\n if (next) this.next();\n if (this.match(tt.string)) {\n return this.tsParseAmbientExternalModuleDeclaration(node);\n } else if (this.tsCheckLineTerminatorAndMatch(tt.name, next)) {\n return this.tsParseModuleOrNamespaceDeclaration(node);\n }\n break;\n\n case \"namespace\":\n if (this.tsCheckLineTerminatorAndMatch(tt.name, next)) {\n if (next) this.next();\n return this.tsParseModuleOrNamespaceDeclaration(node);\n }\n break;\n\n case \"type\":\n if (this.tsCheckLineTerminatorAndMatch(tt.name, next)) {\n if (next) this.next();\n return this.tsParseTypeAliasDeclaration(node);\n }\n break;\n }\n }\n\n tsCheckLineTerminatorAndMatch(tokenType: TokenType, next: boolean) {\n return (next || this.match(tokenType)) && !this.isLineTerminator();\n }\n\n tsTryParseGenericAsyncArrowFunction(\n startPos: number,\n startLoc: Position,\n ): ?N.ArrowFunctionExpression {\n if (!this.isRelational(\"<\")) {\n return undefined;\n }\n const res: ?N.ArrowFunctionExpression = this.tsTryParseAndCatch(() => {\n const node: N.ArrowFunctionExpression = this.startNodeAt(\n startPos,\n startLoc,\n );\n node.typeParameters = this.tsParseTypeParameters();\n // Don't use overloaded parseFunctionParams which would look for \"<\" again.\n super.parseFunctionParams(node);\n node.returnType = this.tsTryParseTypeOrTypePredicateAnnotation();\n this.expect(tt.arrow);\n return node;\n });\n\n if (!res) {\n return undefined;\n }\n\n return this.parseArrowExpression(\n res,\n /* params are already set */ null,\n /* async */ true,\n );\n }\n\n tsParseTypeArguments(): N.TsTypeParameterInstantiation {\n const node = this.startNode();\n node.params = this.tsInType(() =>\n // Temporarily remove a JSX parsing context, which makes us scan different tokens.\n this.tsInNoContext(() => {\n this.expectRelational(\"<\");\n return this.tsParseDelimitedList(\n \"TypeParametersOrArguments\",\n this.tsParseType.bind(this),\n );\n }),\n );\n // This reads the next token after the `>` too, so do this in the enclosing context.\n // But be sure not to parse a regex in the jsx expression `<C<number> />`, so set exprAllowed = false\n this.state.exprAllowed = false;\n this.expectRelational(\">\");\n return this.finishNode(node, \"TSTypeParameterInstantiation\");\n }\n\n tsIsDeclarationStart(): boolean {\n if (this.match(tt.name)) {\n switch (this.state.value) {\n case \"abstract\":\n case \"declare\":\n case \"enum\":\n case \"interface\":\n case \"module\":\n case \"namespace\":\n case \"type\":\n return true;\n }\n }\n\n return false;\n }\n\n // ======================================================\n // OVERRIDES\n // ======================================================\n\n isExportDefaultSpecifier(): boolean {\n if (this.tsIsDeclarationStart()) return false;\n return super.isExportDefaultSpecifier();\n }\n\n parseAssignableListItem(\n allowModifiers: ?boolean,\n decorators: N.Decorator[],\n ): N.Pattern | N.TSParameterProperty {\n // Store original location/position to include modifiers in range\n const startPos = this.state.start;\n const startLoc = this.state.startLoc;\n\n let accessibility: ?N.Accessibility;\n let readonly = false;\n if (allowModifiers) {\n accessibility = this.parseAccessModifier();\n readonly = !!this.tsParseModifier([\"readonly\"]);\n }\n\n const left = this.parseMaybeDefault();\n this.parseAssignableListItemTypes(left);\n const elt = this.parseMaybeDefault(left.start, left.loc.start, left);\n if (accessibility || readonly) {\n const pp: N.TSParameterProperty = this.startNodeAt(startPos, startLoc);\n if (decorators.length) {\n pp.decorators = decorators;\n }\n if (accessibility) pp.accessibility = accessibility;\n if (readonly) pp.readonly = readonly;\n if (elt.type !== \"Identifier\" && elt.type !== \"AssignmentPattern\") {\n this.raise(\n pp.start,\n \"A parameter property may not be declared using a binding pattern.\",\n );\n }\n pp.parameter = ((elt: any): N.Identifier | N.AssignmentPattern);\n return this.finishNode(pp, \"TSParameterProperty\");\n }\n\n if (decorators.length) {\n left.decorators = decorators;\n }\n\n return elt;\n }\n\n parseFunctionBodyAndFinish(\n node: N.BodilessFunctionOrMethodBase,\n type: string,\n isMethod?: boolean = false,\n ): void {\n if (this.match(tt.colon)) {\n node.returnType = this.tsParseTypeOrTypePredicateAnnotation(tt.colon);\n }\n\n const bodilessType =\n type === \"FunctionDeclaration\"\n ? \"TSDeclareFunction\"\n : type === \"ClassMethod\"\n ? \"TSDeclareMethod\"\n : undefined;\n if (bodilessType && !this.match(tt.braceL) && this.isLineTerminator()) {\n this.finishNode(node, bodilessType);\n return;\n }\n\n super.parseFunctionBodyAndFinish(node, type, isMethod);\n }\n\n registerFunctionStatementId(node: N.Function): void {\n if (!node.body && node.id) {\n // Function ids are validated after parsing their body.\n // For bodyless function, we need to do it here.\n this.checkLVal(node.id, BIND_TS_AMBIENT, null, \"function name\");\n } else {\n super.registerFunctionStatementId(...arguments);\n }\n }\n\n parseSubscript(\n base: N.Expression,\n startPos: number,\n startLoc: Position,\n noCalls: ?boolean,\n state: N.ParseSubscriptState,\n ): N.Expression {\n if (!this.hasPrecedingLineBreak() && this.match(tt.bang)) {\n this.state.exprAllowed = false;\n this.next();\n\n const nonNullExpression: N.TsNonNullExpression = this.startNodeAt(\n startPos,\n startLoc,\n );\n nonNullExpression.expression = base;\n return this.finishNode(nonNullExpression, \"TSNonNullExpression\");\n }\n\n if (this.isRelational(\"<\")) {\n // tsTryParseAndCatch is expensive, so avoid if not necessary.\n // There are number of things we are going to \"maybe\" parse, like type arguments on\n // tagged template expressions. If any of them fail, walk it back and continue.\n const result = this.tsTryParseAndCatch(() => {\n if (!noCalls && this.atPossibleAsync(base)) {\n // Almost certainly this is a generic async function `async <T>() => ...\n // But it might be a call with a type argument `async<T>();`\n const asyncArrowFn = this.tsTryParseGenericAsyncArrowFunction(\n startPos,\n startLoc,\n );\n if (asyncArrowFn) {\n return asyncArrowFn;\n }\n }\n\n const node: N.CallExpression = this.startNodeAt(startPos, startLoc);\n node.callee = base;\n\n const typeArguments = this.tsParseTypeArguments();\n\n if (typeArguments) {\n if (!noCalls && this.eat(tt.parenL)) {\n // possibleAsync always false here, because we would have handled it above.\n // $FlowIgnore (won't be any undefined arguments)\n node.arguments = this.parseCallExpressionArguments(\n tt.parenR,\n /* possibleAsync */ false,\n );\n node.typeParameters = typeArguments;\n return this.finishCallExpression(node, state.optionalChainMember);\n } else if (this.match(tt.backQuote)) {\n return this.parseTaggedTemplateExpression(\n startPos,\n startLoc,\n base,\n state,\n typeArguments,\n );\n }\n }\n\n this.unexpected();\n });\n\n if (result) return result;\n }\n\n return super.parseSubscript(base, startPos, startLoc, noCalls, state);\n }\n\n parseNewArguments(node: N.NewExpression): void {\n if (this.isRelational(\"<\")) {\n // tsTryParseAndCatch is expensive, so avoid if not necessary.\n // 99% certain this is `new C<T>();`. But may be `new C < T;`, which is also legal.\n const typeParameters = this.tsTryParseAndCatch(() => {\n const args = this.tsParseTypeArguments();\n if (!this.match(tt.parenL)) this.unexpected();\n return args;\n });\n if (typeParameters) {\n node.typeParameters = typeParameters;\n }\n }\n\n super.parseNewArguments(node);\n }\n\n parseExprOp(\n left: N.Expression,\n leftStartPos: number,\n leftStartLoc: Position,\n minPrec: number,\n noIn: ?boolean,\n ) {\n if (\n nonNull(tt._in.binop) > minPrec &&\n !this.hasPrecedingLineBreak() &&\n this.isContextual(\"as\")\n ) {\n const node: N.TsAsExpression = this.startNodeAt(\n leftStartPos,\n leftStartLoc,\n );\n node.expression = left;\n const _const = this.tsTryNextParseConstantContext();\n if (_const) {\n node.typeAnnotation = _const;\n } else {\n node.typeAnnotation = this.tsNextThenParseType();\n }\n this.finishNode(node, \"TSAsExpression\");\n return this.parseExprOp(\n node,\n leftStartPos,\n leftStartLoc,\n minPrec,\n noIn,\n );\n }\n\n return super.parseExprOp(left, leftStartPos, leftStartLoc, minPrec, noIn);\n }\n\n checkReservedWord(\n word: string, // eslint-disable-line no-unused-vars\n startLoc: number, // eslint-disable-line no-unused-vars\n checkKeywords: boolean, // eslint-disable-line no-unused-vars\n // eslint-disable-next-line no-unused-vars\n isBinding: boolean,\n ): void {\n // Don't bother checking for TypeScript code.\n // Strict mode words may be allowed as in `declare namespace N { const static: number; }`.\n // And we have a type checker anyway, so don't bother having the parser do it.\n }\n\n /*\n Don't bother doing this check in TypeScript code because:\n 1. We may have a nested export statement with the same name:\n export const x = 0;\n export namespace N {\n export const x = 1;\n }\n 2. We have a type checker to warn us about this sort of thing.\n */\n checkDuplicateExports() {}\n\n parseImport(node: N.Node): N.AnyImport {\n if (this.match(tt.name) && this.lookahead().type === tt.eq) {\n return this.tsParseImportEqualsDeclaration(node);\n }\n return super.parseImport(node);\n }\n\n parseExport(node: N.Node): N.AnyExport {\n if (this.match(tt._import)) {\n // `export import A = B;`\n this.expect(tt._import);\n return this.tsParseImportEqualsDeclaration(node, /* isExport */ true);\n } else if (this.eat(tt.eq)) {\n // `export = x;`\n const assign: N.TsExportAssignment = node;\n assign.expression = this.parseExpression();\n this.semicolon();\n return this.finishNode(assign, \"TSExportAssignment\");\n } else if (this.eatContextual(\"as\")) {\n // `export as namespace A;`\n const decl: N.TsNamespaceExportDeclaration = node;\n // See `parseNamespaceExportDeclaration` in TypeScript's own parser\n this.expectContextual(\"namespace\");\n decl.id = this.parseIdentifier();\n this.semicolon();\n return this.finishNode(decl, \"TSNamespaceExportDeclaration\");\n } else {\n return super.parseExport(node);\n }\n }\n\n isAbstractClass(): boolean {\n return (\n this.isContextual(\"abstract\") && this.lookahead().type === tt._class\n );\n }\n\n parseExportDefaultExpression(): N.Expression | N.Declaration {\n if (this.isAbstractClass()) {\n const cls = this.startNode();\n this.next(); // Skip \"abstract\"\n this.parseClass(cls, true, true);\n cls.abstract = true;\n return cls;\n }\n\n // export default interface allowed in:\n // https://github.com/Microsoft/TypeScript/pull/16040\n if (this.state.value === \"interface\") {\n const result = this.tsParseDeclaration(\n this.startNode(),\n this.state.value,\n true,\n );\n\n if (result) return result;\n }\n\n return super.parseExportDefaultExpression();\n }\n\n parseStatementContent(context: ?string, topLevel: ?boolean): N.Statement {\n if (this.state.type === tt._const) {\n const ahead = this.lookahead();\n if (ahead.type === tt.name && ahead.value === \"enum\") {\n const node: N.TsEnumDeclaration = this.startNode();\n this.expect(tt._const);\n this.expectContextual(\"enum\");\n return this.tsParseEnumDeclaration(node, /* isConst */ true);\n }\n }\n return super.parseStatementContent(context, topLevel);\n }\n\n parseAccessModifier(): ?N.Accessibility {\n return this.tsParseModifier([\"public\", \"protected\", \"private\"]);\n }\n\n parseClassMember(\n classBody: N.ClassBody,\n member: any,\n state: { hadConstructor: boolean },\n constructorAllowsSuper: boolean,\n ): void {\n const accessibility = this.parseAccessModifier();\n if (accessibility) member.accessibility = accessibility;\n\n super.parseClassMember(classBody, member, state, constructorAllowsSuper);\n }\n\n parseClassMemberWithIsStatic(\n classBody: N.ClassBody,\n member: N.ClassMember | N.TsIndexSignature,\n state: { hadConstructor: boolean },\n isStatic: boolean,\n constructorAllowsSuper: boolean,\n ): void {\n const modifiers = this.tsParseModifiers([\n \"abstract\",\n \"readonly\",\n \"declare\",\n ]);\n\n Object.assign(member, modifiers);\n\n const idx = this.tsTryParseIndexSignature(member);\n if (idx) {\n classBody.body.push(idx);\n\n if (modifiers.abstract) {\n this.raise(\n member.start,\n \"Index signatures cannot have the 'abstract' modifier\",\n );\n }\n if (isStatic) {\n this.raise(\n member.start,\n \"Index signatures cannot have the 'static' modifier\",\n );\n }\n if ((member: any).accessibility) {\n this.raise(\n member.start,\n `Index signatures cannot have an accessibility modifier ('${\n (member: any).accessibility\n }')`,\n );\n }\n\n return;\n }\n\n /*:: invariant(member.type !== \"TSIndexSignature\") */\n\n super.parseClassMemberWithIsStatic(\n classBody,\n member,\n state,\n isStatic,\n constructorAllowsSuper,\n );\n }\n\n parsePostMemberNameModifiers(\n methodOrProp: N.ClassMethod | N.ClassProperty | N.ClassPrivateProperty,\n ): void {\n const optional = this.eat(tt.question);\n if (optional) methodOrProp.optional = true;\n\n if ((methodOrProp: any).readonly && this.match(tt.parenL)) {\n this.raise(\n methodOrProp.start,\n \"Class methods cannot have the 'readonly' modifier\",\n );\n }\n\n if ((methodOrProp: any).declare && this.match(tt.parenL)) {\n this.raise(\n methodOrProp.start,\n \"Class methods cannot have the 'declare' modifier\",\n );\n }\n }\n\n // Note: The reason we do this in `parseExpressionStatement` and not `parseStatement`\n // is that e.g. `type()` is valid JS, so we must try parsing that first.\n // If it's really a type, we will parse `type` as the statement, and can correct it here\n // by parsing the rest.\n parseExpressionStatement(\n node: N.ExpressionStatement,\n expr: N.Expression,\n ): N.Statement {\n const decl =\n expr.type === \"Identifier\"\n ? this.tsParseExpressionStatement(node, expr)\n : undefined;\n return decl || super.parseExpressionStatement(node, expr);\n }\n\n // export type\n // Should be true for anything parsed by `tsTryParseExportDeclaration`.\n shouldParseExportDeclaration(): boolean {\n if (this.tsIsDeclarationStart()) return true;\n return super.shouldParseExportDeclaration();\n }\n\n // An apparent conditional expression could actually be an optional parameter in an arrow function.\n parseConditional(\n expr: N.Expression,\n noIn: ?boolean,\n startPos: number,\n startLoc: Position,\n refNeedsArrowPos?: ?Pos,\n ): N.Expression {\n // only do the expensive clone if there is a question mark\n // and if we come from inside parens\n if (!refNeedsArrowPos || !this.match(tt.question)) {\n return super.parseConditional(\n expr,\n noIn,\n startPos,\n startLoc,\n refNeedsArrowPos,\n );\n }\n\n const result = this.tryParse(() =>\n super.parseConditional(expr, noIn, startPos, startLoc),\n );\n\n if (!result.node) {\n // $FlowIgnore\n refNeedsArrowPos.start = result.error.pos || this.state.start;\n return expr;\n }\n if (result.error) this.state = result.failState;\n return result.node;\n }\n\n // Note: These \"type casts\" are *not* valid TS expressions.\n // But we parse them here and change them when completing the arrow function.\n parseParenItem(\n node: N.Expression,\n startPos: number,\n startLoc: Position,\n ): N.Expression {\n node = super.parseParenItem(node, startPos, startLoc);\n if (this.eat(tt.question)) {\n node.optional = true;\n // Include questionmark in location of node\n // Don't use this.finishNode() as otherwise we might process comments twice and\n // include already consumed parens\n this.resetEndLocation(node);\n }\n\n if (this.match(tt.colon)) {\n const typeCastNode: N.TsTypeCastExpression = this.startNodeAt(\n startPos,\n startLoc,\n );\n typeCastNode.expression = node;\n typeCastNode.typeAnnotation = this.tsParseTypeAnnotation();\n\n return this.finishNode(typeCastNode, \"TSTypeCastExpression\");\n }\n\n return node;\n }\n\n parseExportDeclaration(node: N.ExportNamedDeclaration): ?N.Declaration {\n // Store original location/position\n const startPos = this.state.start;\n const startLoc = this.state.startLoc;\n\n // \"export declare\" is equivalent to just \"export\".\n const isDeclare = this.eatContextual(\"declare\");\n\n let declaration: ?N.Declaration;\n\n if (this.match(tt.name)) {\n declaration = this.tsTryParseExportDeclaration();\n }\n if (!declaration) {\n declaration = super.parseExportDeclaration(node);\n }\n\n if (declaration && isDeclare) {\n // Reset location to include `declare` in range\n this.resetStartLocation(declaration, startPos, startLoc);\n\n declaration.declare = true;\n }\n\n return declaration;\n }\n\n parseClassId(\n node: N.Class,\n isStatement: boolean,\n optionalId: ?boolean,\n ): void {\n if ((!isStatement || optionalId) && this.isContextual(\"implements\")) {\n return;\n }\n\n super.parseClassId(\n node,\n isStatement,\n optionalId,\n (node: any).declare ? BIND_TS_AMBIENT : BIND_CLASS,\n );\n const typeParameters = this.tsTryParseTypeParameters();\n if (typeParameters) node.typeParameters = typeParameters;\n }\n\n parseClassPropertyAnnotation(\n node: N.ClassProperty | N.ClassPrivateProperty,\n ): void {\n if (!node.optional && this.eat(tt.bang)) {\n node.definite = true;\n }\n\n const type = this.tsTryParseTypeAnnotation();\n if (type) node.typeAnnotation = type;\n }\n\n parseClassProperty(node: N.ClassProperty): N.ClassProperty {\n this.parseClassPropertyAnnotation(node);\n\n if (node.declare && this.match(tt.equal)) {\n this.raise(\n this.state.start,\n \"'declare' class fields cannot have an initializer\",\n );\n }\n\n return super.parseClassProperty(node);\n }\n\n parseClassPrivateProperty(\n node: N.ClassPrivateProperty,\n ): N.ClassPrivateProperty {\n // $FlowIgnore\n if (node.abstract) {\n this.raise(\n node.start,\n \"Private elements cannot have the 'abstract' modifier.\",\n );\n }\n\n // $FlowIgnore\n if (node.accessibility) {\n this.raise(\n node.start,\n `Private elements cannot have an accessibility modifier ('${node.accessibility}')`,\n );\n }\n\n this.parseClassPropertyAnnotation(node);\n return super.parseClassPrivateProperty(node);\n }\n\n pushClassMethod(\n classBody: N.ClassBody,\n method: N.ClassMethod,\n isGenerator: boolean,\n isAsync: boolean,\n isConstructor: boolean,\n allowsDirectSuper: boolean,\n ): void {\n const typeParameters = this.tsTryParseTypeParameters();\n if (typeParameters) method.typeParameters = typeParameters;\n super.pushClassMethod(\n classBody,\n method,\n isGenerator,\n isAsync,\n isConstructor,\n allowsDirectSuper,\n );\n }\n\n pushClassPrivateMethod(\n classBody: N.ClassBody,\n method: N.ClassPrivateMethod,\n isGenerator: boolean,\n isAsync: boolean,\n ): void {\n const typeParameters = this.tsTryParseTypeParameters();\n if (typeParameters) method.typeParameters = typeParameters;\n super.pushClassPrivateMethod(classBody, method, isGenerator, isAsync);\n }\n\n parseClassSuper(node: N.Class): void {\n super.parseClassSuper(node);\n if (node.superClass && this.isRelational(\"<\")) {\n node.superTypeParameters = this.tsParseTypeArguments();\n }\n if (this.eatContextual(\"implements\")) {\n node.implements = this.tsParseHeritageClause(\"implements\");\n }\n }\n\n parseObjPropValue(prop: N.ObjectMember, ...args): void {\n const typeParameters = this.tsTryParseTypeParameters();\n if (typeParameters) prop.typeParameters = typeParameters;\n\n super.parseObjPropValue(prop, ...args);\n }\n\n parseFunctionParams(node: N.Function, allowModifiers?: boolean): void {\n const typeParameters = this.tsTryParseTypeParameters();\n if (typeParameters) node.typeParameters = typeParameters;\n super.parseFunctionParams(node, allowModifiers);\n }\n\n // `let x: number;`\n parseVarId(\n decl: N.VariableDeclarator,\n kind: \"var\" | \"let\" | \"const\",\n ): void {\n super.parseVarId(decl, kind);\n if (decl.id.type === \"Identifier\" && this.eat(tt.bang)) {\n decl.definite = true;\n }\n\n const type = this.tsTryParseTypeAnnotation();\n if (type) {\n decl.id.typeAnnotation = type;\n this.resetEndLocation(decl.id); // set end position to end of type\n }\n }\n\n // parse the return type of an async arrow function - let foo = (async (): number => {});\n parseAsyncArrowFromCallExpression(\n node: N.ArrowFunctionExpression,\n call: N.CallExpression,\n ): N.ArrowFunctionExpression {\n if (this.match(tt.colon)) {\n node.returnType = this.tsParseTypeAnnotation();\n }\n return super.parseAsyncArrowFromCallExpression(node, call);\n }\n\n parseMaybeAssign(...args): N.Expression {\n // Note: When the JSX plugin is on, type assertions (`<T> x`) aren't valid syntax.\n\n let state: ?State;\n let jsx;\n let typeCast;\n\n if (this.match(tt.jsxTagStart)) {\n // Prefer to parse JSX if possible. But may be an arrow fn.\n state = this.state.clone();\n\n jsx = this.tryParse(() => super.parseMaybeAssign(...args), state);\n /*:: invariant(!jsx.aborted) */\n\n if (!jsx.error) return jsx.node;\n\n // Remove `tc.j_expr` and `tc.j_oTag` from context added\n // by parsing `jsxTagStart` to stop the JSX plugin from\n // messing with the tokens\n const { context } = this.state;\n if (context[context.length - 1] === ct.j_oTag) {\n context.length -= 2;\n } else if (context[context.length - 1] === ct.j_expr) {\n context.length -= 1;\n }\n }\n\n if (!(jsx && jsx.error) && !this.isRelational(\"<\")) {\n return super.parseMaybeAssign(...args);\n }\n\n // Either way, we're looking at a '<': tt.jsxTagStart or relational.\n\n let typeParameters: N.TsTypeParameterDeclaration;\n state = state || this.state.clone();\n\n const arrow = this.tryParse(abort => {\n // This is similar to TypeScript's `tryParseParenthesizedArrowFunctionExpression`.\n typeParameters = this.tsParseTypeParameters();\n const expr = super.parseMaybeAssign(...args);\n\n if (\n expr.type !== \"ArrowFunctionExpression\" ||\n (expr.extra && expr.extra.parenthesized)\n ) {\n abort();\n }\n\n // Correct TypeScript code should have at least 1 type parameter, but don't crash on bad code.\n if (typeParameters && typeParameters.params.length !== 0) {\n this.resetStartLocationFromNode(expr, typeParameters);\n }\n expr.typeParameters = typeParameters;\n return expr;\n }, state);\n\n if (!arrow.error && !arrow.aborted) return arrow.node;\n\n if (!jsx) {\n // Try parsing a type cast instead of an arrow function.\n // This will never happen outside of JSX.\n // (Because in JSX the '<' should be a jsxTagStart and not a relational.\n assert(!this.hasPlugin(\"jsx\"));\n\n // This will start with a type assertion (via parseMaybeUnary).\n // But don't directly call `this.tsParseTypeAssertion` because we want to handle any binary after it.\n typeCast = this.tryParse(() => super.parseMaybeAssign(...args), state);\n /*:: invariant(!typeCast.aborted) */\n if (!typeCast.error) return typeCast.node;\n }\n\n if (jsx && jsx.node) {\n /*:: invariant(jsx.failState) */\n this.state = jsx.failState;\n return jsx.node;\n }\n\n if (arrow.node) {\n /*:: invariant(arrow.failState) */\n this.state = arrow.failState;\n return arrow.node;\n }\n\n if (typeCast && typeCast.node) {\n /*:: invariant(typeCast.failState) */\n this.state = typeCast.failState;\n return typeCast.node;\n }\n\n if (jsx && jsx.thrown) throw jsx.error;\n if (arrow.thrown) throw arrow.error;\n if (typeCast && typeCast.thrown) throw typeCast.error;\n\n throw (jsx && jsx.error) || arrow.error || (typeCast && typeCast.error);\n }\n\n // Handle type assertions\n parseMaybeUnary(refShorthandDefaultPos?: ?Pos): N.Expression {\n if (!this.hasPlugin(\"jsx\") && this.isRelational(\"<\")) {\n return this.tsParseTypeAssertion();\n } else {\n return super.parseMaybeUnary(refShorthandDefaultPos);\n }\n }\n\n parseArrow(node: N.ArrowFunctionExpression): ?N.ArrowFunctionExpression {\n if (this.match(tt.colon)) {\n // This is different from how the TS parser does it.\n // TS uses lookahead. The Babel Parser parses it as a parenthesized expression and converts.\n\n const result = this.tryParse(abort => {\n const returnType = this.tsParseTypeOrTypePredicateAnnotation(\n tt.colon,\n );\n if (this.canInsertSemicolon() || !this.match(tt.arrow)) abort();\n return returnType;\n });\n\n if (result.aborted) return;\n\n if (!result.thrown) {\n if (result.error) this.state = result.failState;\n node.returnType = result.node;\n }\n }\n\n return super.parseArrow(node);\n }\n\n // Allow type annotations inside of a parameter list.\n parseAssignableListItemTypes(param: N.Pattern) {\n if (this.eat(tt.question)) {\n if (param.type !== \"Identifier\") {\n this.raise(\n param.start,\n \"A binding pattern parameter cannot be optional in an implementation signature.\",\n );\n }\n\n ((param: any): N.Identifier).optional = true;\n }\n const type = this.tsTryParseTypeAnnotation();\n if (type) param.typeAnnotation = type;\n this.resetEndLocation(param);\n\n return param;\n }\n\n toAssignable(\n node: N.Node,\n isBinding: ?boolean,\n contextDescription: string,\n ): N.Node {\n switch (node.type) {\n case \"TSTypeCastExpression\":\n return super.toAssignable(\n this.typeCastToParameter(node),\n isBinding,\n contextDescription,\n );\n case \"TSParameterProperty\":\n return super.toAssignable(node, isBinding, contextDescription);\n case \"TSAsExpression\":\n case \"TSNonNullExpression\":\n case \"TSTypeAssertion\":\n node.expression = this.toAssignable(\n node.expression,\n isBinding,\n contextDescription,\n );\n return node;\n default:\n return super.toAssignable(node, isBinding, contextDescription);\n }\n }\n\n checkLVal(\n expr: N.Expression,\n bindingType: BindingTypes = BIND_NONE,\n checkClashes: ?{ [key: string]: boolean },\n contextDescription: string,\n ): void {\n switch (expr.type) {\n case \"TSTypeCastExpression\":\n // Allow \"typecasts\" to appear on the left of assignment expressions,\n // because it may be in an arrow function.\n // e.g. `const f = (foo: number = 0) => foo;`\n return;\n case \"TSParameterProperty\":\n this.checkLVal(\n expr.parameter,\n bindingType,\n checkClashes,\n \"parameter property\",\n );\n return;\n case \"TSAsExpression\":\n case \"TSNonNullExpression\":\n case \"TSTypeAssertion\":\n this.checkLVal(\n expr.expression,\n bindingType,\n checkClashes,\n contextDescription,\n );\n return;\n default:\n super.checkLVal(expr, bindingType, checkClashes, contextDescription);\n return;\n }\n }\n\n parseBindingAtom(): N.Pattern {\n switch (this.state.type) {\n case tt._this:\n // \"this\" may be the name of a parameter, so allow it.\n return this.parseIdentifier(/* liberal */ true);\n default:\n return super.parseBindingAtom();\n }\n }\n\n parseMaybeDecoratorArguments(expr: N.Expression): N.Expression {\n if (this.isRelational(\"<\")) {\n const typeArguments = this.tsParseTypeArguments();\n\n if (this.match(tt.parenL)) {\n const call = super.parseMaybeDecoratorArguments(expr);\n call.typeParameters = typeArguments;\n return call;\n }\n\n this.unexpected(this.state.start, tt.parenL);\n }\n\n return super.parseMaybeDecoratorArguments(expr);\n }\n\n // === === === === === === === === === === === === === === === ===\n // Note: All below methods are duplicates of something in flow.js.\n // Not sure what the best way to combine these is.\n // === === === === === === === === === === === === === === === ===\n\n isClassMethod(): boolean {\n return this.isRelational(\"<\") || super.isClassMethod();\n }\n\n isClassProperty(): boolean {\n return (\n this.match(tt.bang) || this.match(tt.colon) || super.isClassProperty()\n );\n }\n\n parseMaybeDefault(...args): N.Pattern {\n const node = super.parseMaybeDefault(...args);\n\n if (\n node.type === \"AssignmentPattern\" &&\n node.typeAnnotation &&\n node.right.start < node.typeAnnotation.start\n ) {\n this.raise(\n node.typeAnnotation.start,\n \"Type annotations must come before default assignments, \" +\n \"e.g. instead of `age = 25: number` use `age: number = 25`\",\n );\n }\n\n return node;\n }\n\n // ensure that inside types, we bypass the jsx parser plugin\n getTokenFromCode(code: number): void {\n if (this.state.inType && (code === 62 || code === 60)) {\n return this.finishOp(tt.relational, 1);\n } else {\n return super.getTokenFromCode(code);\n }\n }\n\n toAssignableList(\n exprList: N.Expression[],\n isBinding: ?boolean,\n ): $ReadOnlyArray<N.Pattern> {\n for (let i = 0; i < exprList.length; i++) {\n const expr = exprList[i];\n if (!expr) continue;\n switch (expr.type) {\n case \"TSTypeCastExpression\":\n exprList[i] = this.typeCastToParameter(expr);\n break;\n case \"TSAsExpression\":\n case \"TSTypeAssertion\":\n if (!isBinding) {\n exprList[i] = this.typeCastToParameter(expr);\n } else {\n this.raise(\n expr.start,\n \"Unexpected type cast in parameter position.\",\n );\n }\n break;\n }\n }\n return super.toAssignableList(...arguments);\n }\n\n typeCastToParameter(node: N.TsTypeCastExpression): N.Node {\n node.expression.typeAnnotation = node.typeAnnotation;\n\n this.resetEndLocation(\n node.expression,\n node.typeAnnotation.end,\n node.typeAnnotation.loc.end,\n );\n\n return node.expression;\n }\n\n toReferencedList(\n exprList: $ReadOnlyArray<?N.Expression>,\n isInParens?: boolean, // eslint-disable-line no-unused-vars\n ): $ReadOnlyArray<?N.Expression> {\n for (let i = 0; i < exprList.length; i++) {\n const expr = exprList[i];\n if (expr && expr.type === \"TSTypeCastExpression\") {\n this.raise(expr.start, \"Did not expect a type annotation here.\");\n }\n }\n\n return exprList;\n }\n\n shouldParseArrow() {\n return this.match(tt.colon) || super.shouldParseArrow();\n }\n\n shouldParseAsyncArrow(): boolean {\n return this.match(tt.colon) || super.shouldParseAsyncArrow();\n }\n\n canHaveLeadingDecorator() {\n // Avoid unnecessary lookahead in checking for abstract class unless needed!\n return super.canHaveLeadingDecorator() || this.isAbstractClass();\n }\n\n jsxParseOpeningElementAfterName(\n node: N.JSXOpeningElement,\n ): N.JSXOpeningElement {\n if (this.isRelational(\"<\")) {\n const typeArguments = this.tsTryParseAndCatch(() =>\n this.tsParseTypeArguments(),\n );\n if (typeArguments) node.typeParameters = typeArguments;\n }\n return super.jsxParseOpeningElementAfterName(node);\n }\n\n getGetterSetterExpectedParamCount(\n method: N.ObjectMethod | N.ClassMethod,\n ): number {\n const baseCount = super.getGetterSetterExpectedParamCount(method);\n const firstParam = method.params[0];\n const hasContextParam =\n firstParam &&\n firstParam.type === \"Identifier\" &&\n firstParam.name === \"this\";\n\n return hasContextParam ? baseCount + 1 : baseCount;\n }\n };\n","// @flow\n\nimport * as charCodes from \"charcodes\";\n\nimport { types as tt, TokenType } from \"../tokenizer/types\";\nimport type Parser from \"../parser\";\nimport * as N from \"../types\";\n\ntt.placeholder = new TokenType(\"%%\", { startsExpr: true });\n\nexport type PlaceholderTypes =\n | \"Identifier\"\n | \"StringLiteral\"\n | \"Expression\"\n | \"Statement\"\n | \"Declaration\"\n | \"BlockStatement\"\n | \"ClassBody\"\n | \"Pattern\";\n\n// $PropertyType doesn't support enums. Use a fake \"switch\" (GetPlaceholderNode)\n//type MaybePlaceholder<T: PlaceholderTypes> = $PropertyType<N, T> | N.Placeholder<T>;\n\ntype _Switch<Value, Cases, Index> = $Call<\n (\n $ElementType<$ElementType<Cases, Index>, 0>,\n ) => $ElementType<$ElementType<Cases, Index>, 1>,\n Value,\n>;\ntype $Switch<Value, Cases> = _Switch<Value, Cases, *>;\n\ntype NodeOf<T: PlaceholderTypes> = $Switch<\n T,\n [\n [\"Identifier\", N.Identifier],\n [\"StringLiteral\", N.StringLiteral],\n [\"Expression\", N.Expression],\n [\"Statement\", N.Statement],\n [\"Declaration\", N.Declaration],\n [\"BlockStatement\", N.BlockStatement],\n [\"ClassBody\", N.ClassBody],\n [\"Pattern\", N.Pattern],\n ],\n>;\n\n// Placeholder<T> breaks everything, because its type is incompatible with\n// the substituted nodes.\ntype MaybePlaceholder<T: PlaceholderTypes> = NodeOf<T>; // | Placeholder<T>\n\nexport default (superClass: Class<Parser>): Class<Parser> =>\n class extends superClass {\n parsePlaceholder<T: PlaceholderTypes>(\n expectedNode: T,\n ): /*?N.Placeholder<T>*/ ?MaybePlaceholder<T> {\n if (this.match(tt.placeholder)) {\n const node = this.startNode();\n this.next();\n this.assertNoSpace(\"Unexpected space in placeholder.\");\n\n // We can't use this.parseIdentifier because\n // we don't want nested placeholders.\n node.name = super.parseIdentifier(/* liberal */ true);\n\n this.assertNoSpace(\"Unexpected space in placeholder.\");\n this.expect(tt.placeholder);\n return this.finishPlaceholder(node, expectedNode);\n }\n }\n\n finishPlaceholder<T: PlaceholderTypes>(\n node: N.Node,\n expectedNode: T,\n ): /*N.Placeholder<T>*/ MaybePlaceholder<T> {\n const isFinished = !!(node.expectedNode && node.type === \"Placeholder\");\n node.expectedNode = expectedNode;\n\n return isFinished ? node : this.finishNode(node, \"Placeholder\");\n }\n\n /* ============================================================ *\n * tokenizer/index.js *\n * ============================================================ */\n\n getTokenFromCode(code: number) {\n if (\n code === charCodes.percentSign &&\n this.input.charCodeAt(this.state.pos + 1) === charCodes.percentSign\n ) {\n return this.finishOp(tt.placeholder, 2);\n }\n\n return super.getTokenFromCode(...arguments);\n }\n\n /* ============================================================ *\n * parser/expression.js *\n * ============================================================ */\n\n parseExprAtom(): MaybePlaceholder<\"Expression\"> {\n return (\n this.parsePlaceholder(\"Expression\") || super.parseExprAtom(...arguments)\n );\n }\n\n parseIdentifier(): MaybePlaceholder<\"Identifier\"> {\n // NOTE: This function only handles identifiers outside of\n // expressions and binding patterns, since they are already\n // handled by the parseExprAtom and parseBindingAtom functions.\n // This is needed, for example, to parse \"class %%NAME%% {}\".\n return (\n this.parsePlaceholder(\"Identifier\") ||\n super.parseIdentifier(...arguments)\n );\n }\n\n checkReservedWord(word: string): void {\n // Sometimes we call #checkReservedWord(node.name), expecting\n // that node is an Identifier. If it is a Placeholder, name\n // will be undefined.\n if (word !== undefined) super.checkReservedWord(...arguments);\n }\n\n /* ============================================================ *\n * parser/lval.js *\n * ============================================================ */\n\n parseBindingAtom(): MaybePlaceholder<\"Pattern\"> {\n return (\n this.parsePlaceholder(\"Pattern\") || super.parseBindingAtom(...arguments)\n );\n }\n\n checkLVal(expr: N.Expression): void {\n if (expr.type !== \"Placeholder\") super.checkLVal(...arguments);\n }\n\n toAssignable(node: N.Node): N.Node {\n if (\n node &&\n node.type === \"Placeholder\" &&\n node.expectedNode === \"Expression\"\n ) {\n node.expectedNode = \"Pattern\";\n return node;\n }\n return super.toAssignable(...arguments);\n }\n\n /* ============================================================ *\n * parser/statement.js *\n * ============================================================ */\n\n verifyBreakContinue(node: N.BreakStatement | N.ContinueStatement) {\n if (node.label && node.label.type === \"Placeholder\") return;\n super.verifyBreakContinue(...arguments);\n }\n\n parseExpressionStatement(\n node: MaybePlaceholder<\"Statement\">,\n expr: N.Expression,\n ): MaybePlaceholder<\"Statement\"> {\n if (\n expr.type !== \"Placeholder\" ||\n (expr.extra && expr.extra.parenthesized)\n ) {\n return super.parseExpressionStatement(...arguments);\n }\n\n if (this.match(tt.colon)) {\n const stmt: N.LabeledStatement = node;\n stmt.label = this.finishPlaceholder(expr, \"Identifier\");\n this.next();\n stmt.body = this.parseStatement(\"label\");\n return this.finishNode(stmt, \"LabeledStatement\");\n }\n\n this.semicolon();\n\n node.name = expr.name;\n return this.finishPlaceholder(node, \"Statement\");\n }\n\n parseBlock(): MaybePlaceholder<\"BlockStatement\"> {\n return (\n this.parsePlaceholder(\"BlockStatement\") ||\n super.parseBlock(...arguments)\n );\n }\n\n parseFunctionId(): ?MaybePlaceholder<\"Identifier\"> {\n return (\n this.parsePlaceholder(\"Identifier\") ||\n super.parseFunctionId(...arguments)\n );\n }\n\n parseClass<T: N.Class>(\n node: T,\n isStatement: /* T === ClassDeclaration */ boolean,\n optionalId?: boolean,\n ): T {\n const type = isStatement ? \"ClassDeclaration\" : \"ClassExpression\";\n\n this.next();\n this.takeDecorators(node);\n\n const placeholder = this.parsePlaceholder(\"Identifier\");\n if (placeholder) {\n if (\n this.match(tt._extends) ||\n this.match(tt.placeholder) ||\n this.match(tt.braceL)\n ) {\n node.id = placeholder;\n } else if (optionalId || !isStatement) {\n node.id = null;\n node.body = this.finishPlaceholder(placeholder, \"ClassBody\");\n return this.finishNode(node, type);\n } else {\n this.unexpected(null, \"A class name is required\");\n }\n } else {\n this.parseClassId(node, isStatement, optionalId);\n }\n\n this.parseClassSuper(node);\n node.body =\n this.parsePlaceholder(\"ClassBody\") ||\n this.parseClassBody(!!node.superClass);\n return this.finishNode(node, type);\n }\n\n parseExport(node: N.Node): N.Node {\n const placeholder = this.parsePlaceholder(\"Identifier\");\n if (!placeholder) return super.parseExport(...arguments);\n\n if (!this.isContextual(\"from\") && !this.match(tt.comma)) {\n // export %%DECL%%;\n node.specifiers = [];\n node.source = null;\n node.declaration = this.finishPlaceholder(placeholder, \"Declaration\");\n return this.finishNode(node, \"ExportNamedDeclaration\");\n }\n\n // export %%NAME%% from \"foo\";\n this.expectPlugin(\"exportDefaultFrom\");\n const specifier = this.startNode();\n specifier.exported = placeholder;\n node.specifiers = [this.finishNode(specifier, \"ExportDefaultSpecifier\")];\n\n return super.parseExport(node);\n }\n\n maybeParseExportDefaultSpecifier(node: N.Node): boolean {\n if (node.specifiers && node.specifiers.length > 0) {\n // \"export %%NAME%%\" has already been parsed by #parseExport.\n return true;\n }\n return super.maybeParseExportDefaultSpecifier(...arguments);\n }\n\n checkExport(node: N.ExportNamedDeclaration): void {\n const { specifiers } = node;\n if (specifiers && specifiers.length) {\n node.specifiers = specifiers.filter(\n node => node.exported.type === \"Placeholder\",\n );\n }\n super.checkExport(node);\n node.specifiers = specifiers;\n }\n\n parseImport(\n node: N.Node,\n ): N.ImportDeclaration | N.TsImportEqualsDeclaration {\n const placeholder = this.parsePlaceholder(\"Identifier\");\n if (!placeholder) return super.parseImport(...arguments);\n\n node.specifiers = [];\n\n if (!this.isContextual(\"from\") && !this.match(tt.comma)) {\n // import %%STRING%%;\n node.source = this.finishPlaceholder(placeholder, \"StringLiteral\");\n this.semicolon();\n return this.finishNode(node, \"ImportDeclaration\");\n }\n\n // import %%DEFAULT%% ...\n const specifier = this.startNodeAtNode(placeholder);\n specifier.local = placeholder;\n this.finishNode(specifier, \"ImportDefaultSpecifier\");\n node.specifiers.push(specifier);\n\n if (this.eat(tt.comma)) {\n // import %%DEFAULT%%, * as ...\n const hasStarImport = this.maybeParseStarImportSpecifier(node);\n\n // import %%DEFAULT%%, { ...\n if (!hasStarImport) this.parseNamedImportSpecifiers(node);\n }\n\n this.expectContextual(\"from\");\n node.source = this.parseImportSource();\n this.semicolon();\n return this.finishNode(node, \"ImportDeclaration\");\n }\n\n parseImportSource(): MaybePlaceholder<\"StringLiteral\"> {\n // import ... from %%STRING%%;\n\n return (\n this.parsePlaceholder(\"StringLiteral\") ||\n super.parseImportSource(...arguments)\n );\n }\n };\n","import type Parser from \"../parser\";\nimport { types as tt } from \"../tokenizer/types\";\nimport * as N from \"../types\";\n\nexport default (superClass: Class<Parser>): Class<Parser> =>\n class extends superClass {\n parseV8Intrinsic(): N.Expression {\n if (this.match(tt.modulo)) {\n const v8IntrinsicStart = this.state.start;\n // let the `loc` of Identifier starts from `%`\n const node = this.startNode();\n this.eat(tt.modulo);\n if (this.match(tt.name)) {\n const name = this.parseIdentifierName(this.state.start);\n const identifier = this.createIdentifier(node, name);\n identifier.type = \"V8IntrinsicIdentifier\";\n if (this.match(tt.parenL)) {\n return identifier;\n }\n }\n this.unexpected(v8IntrinsicStart);\n }\n }\n\n /* ============================================================ *\n * parser/expression.js *\n * ============================================================ */\n\n parseExprAtom(): N.Expression {\n return this.parseV8Intrinsic() || super.parseExprAtom(...arguments);\n }\n };\n","// @flow\n\nimport type Parser from \"./parser\";\n\nexport type Plugin = string | [string, Object];\n\nexport type PluginList = $ReadOnlyArray<Plugin>;\n\nexport type MixinPlugin = (superClass: Class<Parser>) => Class<Parser>;\n\nexport function hasPlugin(plugins: PluginList, name: string): boolean {\n return plugins.some(plugin => {\n if (Array.isArray(plugin)) {\n return plugin[0] === name;\n } else {\n return plugin === name;\n }\n });\n}\n\nexport function getPluginOption(\n plugins: PluginList,\n name: string,\n option: string,\n) {\n const plugin = plugins.find(plugin => {\n if (Array.isArray(plugin)) {\n return plugin[0] === name;\n } else {\n return plugin === name;\n }\n });\n\n if (plugin && Array.isArray(plugin)) {\n return plugin[1][option];\n }\n\n return null;\n}\n\nconst PIPELINE_PROPOSALS = [\"minimal\", \"smart\", \"fsharp\"];\n\nexport function validatePlugins(plugins: PluginList) {\n if (hasPlugin(plugins, \"decorators\")) {\n if (hasPlugin(plugins, \"decorators-legacy\")) {\n throw new Error(\n \"Cannot use the decorators and decorators-legacy plugin together\",\n );\n }\n\n const decoratorsBeforeExport = getPluginOption(\n plugins,\n \"decorators\",\n \"decoratorsBeforeExport\",\n );\n if (decoratorsBeforeExport == null) {\n throw new Error(\n \"The 'decorators' plugin requires a 'decoratorsBeforeExport' option,\" +\n \" whose value must be a boolean. If you are migrating from\" +\n \" Babylon/Babel 6 or want to use the old decorators proposal, you\" +\n \" should use the 'decorators-legacy' plugin instead of 'decorators'.\",\n );\n } else if (typeof decoratorsBeforeExport !== \"boolean\") {\n throw new Error(\"'decoratorsBeforeExport' must be a boolean.\");\n }\n }\n\n if (hasPlugin(plugins, \"flow\") && hasPlugin(plugins, \"typescript\")) {\n throw new Error(\"Cannot combine flow and typescript plugins.\");\n }\n\n if (hasPlugin(plugins, \"placeholders\") && hasPlugin(plugins, \"v8intrinsic\")) {\n throw new Error(\"Cannot combine placeholders and v8intrinsic plugins.\");\n }\n\n if (\n hasPlugin(plugins, \"pipelineOperator\") &&\n !PIPELINE_PROPOSALS.includes(\n getPluginOption(plugins, \"pipelineOperator\", \"proposal\"),\n )\n ) {\n throw new Error(\n \"'pipelineOperator' requires 'proposal' option whose value should be one of: \" +\n PIPELINE_PROPOSALS.map(p => `'${p}'`).join(\", \"),\n );\n }\n}\n\n// These plugins are defined using a mixin which extends the parser class.\n\nimport estree from \"./plugins/estree\";\nimport flow from \"./plugins/flow\";\nimport jsx from \"./plugins/jsx\";\nimport typescript from \"./plugins/typescript\";\nimport placeholders from \"./plugins/placeholders\";\nimport v8intrinsic from \"./plugins/v8intrinsic\";\n\n// NOTE: order is important. estree must come first; placeholders must come last.\nexport const mixinPlugins: { [name: string]: MixinPlugin } = {\n estree,\n jsx,\n flow,\n typescript,\n v8intrinsic,\n placeholders,\n};\n\nexport const mixinPluginNames: $ReadOnlyArray<string> = Object.keys(\n mixinPlugins,\n);\n","// @flow\n\nimport type { PluginList } from \"./plugin-utils\";\n\n// A second optional argument can be given to further configure\n// the parser process. These options are recognized:\n\nexport type SourceType = \"script\" | \"module\" | \"unambiguous\";\n\nexport type Options = {\n sourceType: SourceType,\n sourceFilename?: string,\n startLine: number,\n allowAwaitOutsideFunction: boolean,\n allowReturnOutsideFunction: boolean,\n allowImportExportEverywhere: boolean,\n allowSuperOutsideMethod: boolean,\n allowUndeclaredExports: boolean,\n plugins: PluginList,\n strictMode: ?boolean,\n ranges: boolean,\n tokens: boolean,\n createParenthesizedExpressions: boolean,\n errorRecovery: boolean,\n};\n\nexport const defaultOptions: Options = {\n // Source type (\"script\" or \"module\") for different semantics\n sourceType: \"script\",\n // Source filename.\n sourceFilename: undefined,\n // Line from which to start counting source. Useful for\n // integration with other tools.\n startLine: 1,\n // When enabled, await at the top level is not considered an\n // error.\n allowAwaitOutsideFunction: false,\n // When enabled, a return at the top level is not considered an\n // error.\n allowReturnOutsideFunction: false,\n // When enabled, import/export statements are not constrained to\n // appearing at the top of the program.\n allowImportExportEverywhere: false,\n // TODO\n allowSuperOutsideMethod: false,\n // When enabled, export statements can reference undeclared variables.\n allowUndeclaredExports: false,\n // An array of plugins to enable\n plugins: [],\n // TODO\n strictMode: null,\n // Nodes have their start and end characters offsets recorded in\n // `start` and `end` properties (directly on the node, rather than\n // the `loc` object, which holds line/column data. To also add a\n // [semi-standardized][range] `range` property holding a `[start,\n // end]` array with the same numbers, set the `ranges` option to\n // `true`.\n //\n // [range]: https://bugzilla.mozilla.org/show_bug.cgi?id=745678\n ranges: false,\n // Adds all parsed tokens to a `tokens` property on the `File` node\n tokens: false,\n // Whether to create ParenthesizedExpression AST nodes (if false\n // the parser sets extra.parenthesized on the expression nodes instead).\n createParenthesizedExpressions: false,\n // When enabled, errors are attached to the AST instead of being directly thrown.\n // Some errors will still throw, because @babel/parser can't always recover.\n errorRecovery: false,\n};\n\n// Interpret and default an options object\n\nexport function getOptions(opts: ?Options): Options {\n const options: any = {};\n for (const key of Object.keys(defaultOptions)) {\n options[key] = opts && opts[key] != null ? opts[key] : defaultOptions[key];\n }\n return options;\n}\n","// @flow\n\nimport { lineBreakG } from \"./whitespace\";\n\nexport type Pos = {\n start: number,\n};\n\n// These are used when `options.locations` is on, for the\n// `startLoc` and `endLoc` properties.\n\nexport class Position {\n line: number;\n column: number;\n\n constructor(line: number, col: number) {\n this.line = line;\n this.column = col;\n }\n}\n\nexport class SourceLocation {\n start: Position;\n end: Position;\n filename: string;\n identifierName: ?string;\n\n constructor(start: Position, end?: Position) {\n this.start = start;\n // $FlowIgnore (may start as null, but initialized later)\n this.end = end;\n }\n}\n\n// The `getLineInfo` function is mostly useful when the\n// `locations` option is off (for performance reasons) and you\n// want to find the line/column position for a given character\n// offset. `input` should be the code string that the offset refers\n// into.\n\nexport function getLineInfo(input: string, offset: number): Position {\n let line = 1;\n let lineStart = 0;\n let match;\n lineBreakG.lastIndex = 0;\n while ((match = lineBreakG.exec(input)) && match.index < offset) {\n line++;\n lineStart = lineBreakG.lastIndex;\n }\n\n return new Position(line, offset - lineStart);\n}\n","// @flow\n\nimport type { Options } from \"../options\";\nimport type State from \"../tokenizer/state\";\nimport type { PluginsMap } from \"./index\";\nimport type ScopeHandler from \"../util/scope\";\nimport type ClassScopeHandler from \"../util/class-scope\";\n\nexport default class BaseParser {\n // Properties set by constructor in index.js\n options: Options;\n inModule: boolean;\n scope: ScopeHandler<*>;\n classScope: ClassScopeHandler;\n plugins: PluginsMap;\n filename: ?string;\n sawUnambiguousESM: boolean = false;\n ambiguousScriptDifferentAst: boolean = false;\n\n // Initialized by Tokenizer\n state: State;\n // input and length are not in state as they are constant and we do\n // not want to ever copy them, which happens if state gets cloned\n input: string;\n length: number;\n\n hasPlugin(name: string): boolean {\n return this.plugins.has(name);\n }\n\n getPluginOption(plugin: string, name: string) {\n // $FlowIssue\n if (this.hasPlugin(plugin)) return this.plugins.get(plugin)[name];\n }\n}\n","// @flow\n\n/**\n * Based on the comment attachment algorithm used in espree and estraverse.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright\n * notice, this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nimport BaseParser from \"./base\";\nimport type { Comment, Node } from \"../types\";\n\nfunction last<T>(stack: $ReadOnlyArray<T>): T {\n return stack[stack.length - 1];\n}\n\nexport default class CommentsParser extends BaseParser {\n addComment(comment: Comment): void {\n if (this.filename) comment.loc.filename = this.filename;\n this.state.trailingComments.push(comment);\n this.state.leadingComments.push(comment);\n }\n\n adjustCommentsAfterTrailingComma(\n node: Node,\n elements: (Node | null)[],\n // When the current node is followed by a token which hasn't a respective AST node, we\n // need to take all the trailing comments to prevent them from being attached to an\n // unrelated node. e.g. in\n // var { x } /* cmt */ = { y }\n // we don't want /* cmt */ to be attached to { y }.\n // On the other hand, in\n // fn(x) [new line] /* cmt */ [new line] y\n // /* cmt */ is both a trailing comment of fn(x) and a leading comment of y\n takeAllComments?: boolean,\n ) {\n if (this.state.leadingComments.length === 0) {\n return;\n }\n\n let lastElement = null;\n let i = elements.length;\n while (lastElement === null && i > 0) {\n lastElement = elements[--i];\n }\n if (lastElement === null) {\n return;\n }\n\n for (let j = 0; j < this.state.leadingComments.length; j++) {\n if (\n this.state.leadingComments[j].end < this.state.commentPreviousNode.end\n ) {\n this.state.leadingComments.splice(j, 1);\n j--;\n }\n }\n\n const newTrailingComments = [];\n for (let i = 0; i < this.state.leadingComments.length; i++) {\n const leadingComment = this.state.leadingComments[i];\n if (leadingComment.end < node.end) {\n newTrailingComments.push(leadingComment);\n\n // Perf: we don't need to splice if we are going to reset the array anyway\n if (!takeAllComments) {\n this.state.leadingComments.splice(i, 1);\n i--;\n }\n } else {\n if (node.trailingComments === undefined) {\n node.trailingComments = [];\n }\n node.trailingComments.push(leadingComment);\n }\n }\n if (takeAllComments) this.state.leadingComments = [];\n\n if (newTrailingComments.length > 0) {\n lastElement.trailingComments = newTrailingComments;\n } else if (lastElement.trailingComments !== undefined) {\n lastElement.trailingComments = [];\n }\n }\n\n processComment(node: Node): void {\n if (node.type === \"Program\" && node.body.length > 0) return;\n\n const stack = this.state.commentStack;\n\n let firstChild, lastChild, trailingComments, i, j;\n\n if (this.state.trailingComments.length > 0) {\n // If the first comment in trailingComments comes after the\n // current node, then we're good - all comments in the array will\n // come after the node and so it's safe to add them as official\n // trailingComments.\n if (this.state.trailingComments[0].start >= node.end) {\n trailingComments = this.state.trailingComments;\n this.state.trailingComments = [];\n } else {\n // Otherwise, if the first comment doesn't come after the\n // current node, that means we have a mix of leading and trailing\n // comments in the array and that leadingComments contains the\n // same items as trailingComments. Reset trailingComments to\n // zero items and we'll handle this by evaluating leadingComments\n // later.\n this.state.trailingComments.length = 0;\n }\n } else if (stack.length > 0) {\n const lastInStack = last(stack);\n if (\n lastInStack.trailingComments &&\n lastInStack.trailingComments[0].start >= node.end\n ) {\n trailingComments = lastInStack.trailingComments;\n delete lastInStack.trailingComments;\n }\n }\n\n // Eating the stack.\n if (stack.length > 0 && last(stack).start >= node.start) {\n firstChild = stack.pop();\n }\n\n while (stack.length > 0 && last(stack).start >= node.start) {\n lastChild = stack.pop();\n }\n\n if (!lastChild && firstChild) lastChild = firstChild;\n\n // Adjust comments that follow a trailing comma on the last element in a\n // comma separated list of nodes to be the trailing comments on the last\n // element\n if (firstChild) {\n switch (node.type) {\n case \"ObjectExpression\":\n this.adjustCommentsAfterTrailingComma(node, node.properties);\n break;\n case \"ObjectPattern\":\n this.adjustCommentsAfterTrailingComma(node, node.properties, true);\n break;\n case \"CallExpression\":\n this.adjustCommentsAfterTrailingComma(node, node.arguments);\n break;\n case \"ArrayExpression\":\n this.adjustCommentsAfterTrailingComma(node, node.elements);\n break;\n case \"ArrayPattern\":\n this.adjustCommentsAfterTrailingComma(node, node.elements, true);\n break;\n }\n } else if (\n this.state.commentPreviousNode &&\n ((this.state.commentPreviousNode.type === \"ImportSpecifier\" &&\n node.type !== \"ImportSpecifier\") ||\n (this.state.commentPreviousNode.type === \"ExportSpecifier\" &&\n node.type !== \"ExportSpecifier\"))\n ) {\n this.adjustCommentsAfterTrailingComma(node, [\n this.state.commentPreviousNode,\n ]);\n }\n\n if (lastChild) {\n if (lastChild.leadingComments) {\n if (\n lastChild !== node &&\n lastChild.leadingComments.length > 0 &&\n last(lastChild.leadingComments).end <= node.start\n ) {\n node.leadingComments = lastChild.leadingComments;\n delete lastChild.leadingComments;\n } else {\n // A leading comment for an anonymous class had been stolen by its first ClassMethod,\n // so this takes back the leading comment.\n // See also: https://github.com/eslint/espree/issues/158\n for (i = lastChild.leadingComments.length - 2; i >= 0; --i) {\n if (lastChild.leadingComments[i].end <= node.start) {\n node.leadingComments = lastChild.leadingComments.splice(0, i + 1);\n break;\n }\n }\n }\n }\n } else if (this.state.leadingComments.length > 0) {\n if (last(this.state.leadingComments).end <= node.start) {\n if (this.state.commentPreviousNode) {\n for (j = 0; j < this.state.leadingComments.length; j++) {\n if (\n this.state.leadingComments[j].end <\n this.state.commentPreviousNode.end\n ) {\n this.state.leadingComments.splice(j, 1);\n j--;\n }\n }\n }\n if (this.state.leadingComments.length > 0) {\n node.leadingComments = this.state.leadingComments;\n this.state.leadingComments = [];\n }\n } else {\n // https://github.com/eslint/espree/issues/2\n //\n // In special cases, such as return (without a value) and\n // debugger, all comments will end up as leadingComments and\n // will otherwise be eliminated. This step runs when the\n // commentStack is empty and there are comments left\n // in leadingComments.\n //\n // This loop figures out the stopping point between the actual\n // leading and trailing comments by finding the location of the\n // first comment that comes after the given node.\n for (i = 0; i < this.state.leadingComments.length; i++) {\n if (this.state.leadingComments[i].end > node.start) {\n break;\n }\n }\n\n // Split the array based on the location of the first comment\n // that comes after the node. Keep in mind that this could\n // result in an empty array, and if so, the array must be\n // deleted.\n const leadingComments = this.state.leadingComments.slice(0, i);\n\n if (leadingComments.length) {\n node.leadingComments = leadingComments;\n }\n\n // Similarly, trailing comments are attached later. The variable\n // must be reset to null if there are no trailing comments.\n trailingComments = this.state.leadingComments.slice(i);\n if (trailingComments.length === 0) {\n trailingComments = null;\n }\n }\n }\n\n this.state.commentPreviousNode = node;\n\n if (trailingComments) {\n if (\n trailingComments.length &&\n trailingComments[0].start >= node.start &&\n last(trailingComments).end <= node.end\n ) {\n node.innerComments = trailingComments;\n } else {\n node.trailingComments = trailingComments;\n }\n }\n\n stack.push(node);\n }\n}\n","// @flow\n\nimport { getLineInfo, type Position } from \"../util/location\";\nimport CommentsParser from \"./comments\";\n\n// This function is used to raise exceptions on parse errors. It\n// takes an offset integer (into the current `input`) to indicate\n// the location of the error, attaches the position to the end\n// of the error message, and then raises a `SyntaxError` with that\n// message.\n\nexport default class LocationParser extends CommentsParser {\n +isLookahead: boolean;\n\n getLocationForPosition(pos: number): Position {\n let loc;\n if (pos === this.state.start) loc = this.state.startLoc;\n else if (pos === this.state.lastTokStart) loc = this.state.lastTokStartLoc;\n else if (pos === this.state.end) loc = this.state.endLoc;\n else if (pos === this.state.lastTokEnd) loc = this.state.lastTokEndLoc;\n else loc = getLineInfo(this.input, pos);\n\n return loc;\n }\n\n raise(\n pos: number,\n message: string,\n {\n missingPluginNames,\n code,\n }: {\n missingPluginNames?: Array<string>,\n code?: string,\n } = {},\n ): Error | empty {\n const loc = this.getLocationForPosition(pos);\n\n message += ` (${loc.line}:${loc.column})`;\n // $FlowIgnore\n const err: SyntaxError & { pos: number, loc: Position } = new SyntaxError(\n message,\n );\n err.pos = pos;\n err.loc = loc;\n if (missingPluginNames) {\n err.missingPlugin = missingPluginNames;\n }\n if (code !== undefined) {\n err.code = code;\n }\n\n if (this.options.errorRecovery) {\n if (!this.isLookahead) this.state.errors.push(err);\n return err;\n } else {\n throw err;\n }\n }\n}\n","// @flow\n\nimport type { Options } from \"../options\";\nimport * as N from \"../types\";\nimport { Position } from \"../util/location\";\n\nimport { types as ct, type TokContext } from \"./context\";\nimport type { Token } from \"./index\";\nimport { types as tt, type TokenType } from \"./types\";\n\ntype TopicContextState = {\n // When a topic binding has been currently established,\n // then this is 1. Otherwise, it is 0. This is forwards compatible\n // with a future plugin for multiple lexical topics.\n maxNumOfResolvableTopics: number,\n\n // When a topic binding has been currently established, and if that binding\n // has been used as a topic reference `#`, then this is 0. Otherwise, it is\n // `null`. This is forwards compatible with a future plugin for multiple\n // lexical topics.\n maxTopicIndex: null | 0,\n};\n\nexport default class State {\n strict: boolean;\n curLine: number;\n\n // And, if locations are used, the {line, column} object\n // corresponding to those offsets\n startLoc: Position;\n endLoc: Position;\n\n init(options: Options): void {\n this.strict =\n options.strictMode === false ? false : options.sourceType === \"module\";\n\n this.curLine = options.startLine;\n this.startLoc = this.endLoc = this.curPosition();\n }\n\n errors: SyntaxError[] = [];\n\n // Used to signify the start of a potential arrow function\n potentialArrowAt: number = -1;\n\n // Used to signify the start of an expression which looks like a\n // typed arrow function, but it isn't\n // e.g. a ? (b) : c => d\n // ^\n noArrowAt: number[] = [];\n\n // Used to signify the start of an expression whose params, if it looks like\n // an arrow function, shouldn't be converted to assignable nodes.\n // This is used to defer the validation of typed arrow functions inside\n // conditional expressions.\n // e.g. a ? (b) : c => d\n // ^\n noArrowParamsConversionAt: number[] = [];\n\n // Flags to track\n inParameters: boolean = false;\n maybeInArrowParameters: boolean = false;\n inPipeline: boolean = false;\n inType: boolean = false;\n noAnonFunctionType: boolean = false;\n inPropertyName: boolean = false;\n hasFlowComment: boolean = false;\n isIterator: boolean = false;\n\n // For the smartPipelines plugin:\n topicContext: TopicContextState = {\n maxNumOfResolvableTopics: 0,\n maxTopicIndex: null,\n };\n\n // For the F# plugin\n soloAwait: boolean = false;\n inFSharpPipelineDirectBody: boolean = false;\n\n // Labels in scope.\n labels: Array<{\n kind: ?(\"loop\" | \"switch\"),\n name?: ?string,\n statementStart?: number,\n }> = [];\n\n // Leading decorators. Last element of the stack represents the decorators in current context.\n // Supports nesting of decorators, e.g. @foo(@bar class inner {}) class outer {}\n // where @foo belongs to the outer class and @bar to the inner\n decoratorStack: Array<Array<N.Decorator>> = [[]];\n\n // Positions to delayed-check that yield/await does not exist in default parameters.\n yieldPos: number = -1;\n awaitPos: number = -1;\n\n // Token store.\n tokens: Array<Token | N.Comment> = [];\n\n // Comment store.\n comments: Array<N.Comment> = [];\n\n // Comment attachment store\n trailingComments: Array<N.Comment> = [];\n leadingComments: Array<N.Comment> = [];\n commentStack: Array<{\n start: number,\n leadingComments: ?Array<N.Comment>,\n trailingComments: ?Array<N.Comment>,\n type: string,\n }> = [];\n // $FlowIgnore this is initialized when the parser starts.\n commentPreviousNode: N.Node = null;\n\n // The current position of the tokenizer in the input.\n pos: number = 0;\n lineStart: number = 0;\n\n // Properties of the current token:\n // Its type\n type: TokenType = tt.eof;\n\n // For tokens that include more information than their type, the value\n value: any = null;\n\n // Its start and end offset\n start: number = 0;\n end: number = 0;\n\n // Position information for the previous token\n // $FlowIgnore this is initialized when generating the second token.\n lastTokEndLoc: Position = null;\n // $FlowIgnore this is initialized when generating the second token.\n lastTokStartLoc: Position = null;\n lastTokStart: number = 0;\n lastTokEnd: number = 0;\n\n // The context stack is used to superficially track syntactic\n // context to predict whether a regular expression is allowed in a\n // given position.\n context: Array<TokContext> = [ct.braceStatement];\n exprAllowed: boolean = true;\n\n // Used to signal to callers of `readWord1` whether the word\n // contained any escape sequences. This is needed because words with\n // escape sequences must not be interpreted as keywords.\n containsEsc: boolean = false;\n\n // TODO\n containsOctal: boolean = false;\n octalPosition: ?number = null;\n\n // Names of exports store. `default` is stored as a name for both\n // `export default foo;` and `export { foo as default };`.\n exportedIdentifiers: Array<string> = [];\n\n curPosition(): Position {\n return new Position(this.curLine, this.pos - this.lineStart);\n }\n\n clone(skipArrays?: boolean): State {\n const state = new State();\n const keys = Object.keys(this);\n for (let i = 0, length = keys.length; i < length; i++) {\n const key = keys[i];\n // $FlowIgnore\n let val = this[key];\n\n if (!skipArrays && Array.isArray(val)) {\n val = val.slice();\n }\n\n // $FlowIgnore\n state[key] = val;\n }\n\n return state;\n }\n}\n","// @flow\n\nimport type { Options } from \"../options\";\nimport type { Position } from \"../util/location\";\nimport * as charCodes from \"charcodes\";\nimport { isIdentifierStart, isIdentifierChar } from \"../util/identifier\";\nimport { types as tt, keywords as keywordTypes, type TokenType } from \"./types\";\nimport { type TokContext, types as ct } from \"./context\";\nimport LocationParser from \"../parser/location\";\nimport { SourceLocation } from \"../util/location\";\nimport {\n lineBreak,\n lineBreakG,\n isNewLine,\n isWhitespace,\n skipWhiteSpace,\n} from \"../util/whitespace\";\nimport State from \"./state\";\n\nconst VALID_REGEX_FLAGS = new Set([\"g\", \"m\", \"s\", \"i\", \"y\", \"u\"]);\n\n// The following character codes are forbidden from being\n// an immediate sibling of NumericLiteralSeparator _\n\nconst forbiddenNumericSeparatorSiblings = {\n decBinOct: [\n charCodes.dot,\n charCodes.uppercaseB,\n charCodes.uppercaseE,\n charCodes.uppercaseO,\n charCodes.underscore, // multiple separators are not allowed\n charCodes.lowercaseB,\n charCodes.lowercaseE,\n charCodes.lowercaseO,\n ],\n hex: [\n charCodes.dot,\n charCodes.uppercaseX,\n charCodes.underscore, // multiple separators are not allowed\n charCodes.lowercaseX,\n ],\n};\n\nconst allowedNumericSeparatorSiblings = {};\nallowedNumericSeparatorSiblings.bin = [\n // 0 - 1\n charCodes.digit0,\n charCodes.digit1,\n];\nallowedNumericSeparatorSiblings.oct = [\n // 0 - 7\n ...allowedNumericSeparatorSiblings.bin,\n\n charCodes.digit2,\n charCodes.digit3,\n charCodes.digit4,\n charCodes.digit5,\n charCodes.digit6,\n charCodes.digit7,\n];\nallowedNumericSeparatorSiblings.dec = [\n // 0 - 9\n ...allowedNumericSeparatorSiblings.oct,\n\n charCodes.digit8,\n charCodes.digit9,\n];\n\nallowedNumericSeparatorSiblings.hex = [\n // 0 - 9, A - F, a - f,\n ...allowedNumericSeparatorSiblings.dec,\n\n charCodes.uppercaseA,\n charCodes.uppercaseB,\n charCodes.uppercaseC,\n charCodes.uppercaseD,\n charCodes.uppercaseE,\n charCodes.uppercaseF,\n\n charCodes.lowercaseA,\n charCodes.lowercaseB,\n charCodes.lowercaseC,\n charCodes.lowercaseD,\n charCodes.lowercaseE,\n charCodes.lowercaseF,\n];\n\n// Object type used to represent tokens. Note that normally, tokens\n// simply exist as properties on the parser object. This is only\n// used for the onToken callback and the external tokenizer.\n\nexport class Token {\n constructor(state: State) {\n this.type = state.type;\n this.value = state.value;\n this.start = state.start;\n this.end = state.end;\n this.loc = new SourceLocation(state.startLoc, state.endLoc);\n }\n\n type: TokenType;\n value: any;\n start: number;\n end: number;\n loc: SourceLocation;\n}\n\n// ## Tokenizer\n\nexport default class Tokenizer extends LocationParser {\n // Forward-declarations\n // parser/util.js\n +unexpected: (pos?: ?number, messageOrType?: string | TokenType) => empty;\n\n isLookahead: boolean;\n\n constructor(options: Options, input: string) {\n super();\n this.state = new State();\n this.state.init(options);\n this.input = input;\n this.length = input.length;\n this.isLookahead = false;\n }\n\n // Move to the next token\n\n next(): void {\n if (!this.isLookahead) {\n this.checkKeywordEscapes();\n if (this.options.tokens) {\n this.state.tokens.push(new Token(this.state));\n }\n }\n\n this.state.lastTokEnd = this.state.end;\n this.state.lastTokStart = this.state.start;\n this.state.lastTokEndLoc = this.state.endLoc;\n this.state.lastTokStartLoc = this.state.startLoc;\n this.nextToken();\n }\n\n // TODO\n\n eat(type: TokenType): boolean {\n if (this.match(type)) {\n this.next();\n return true;\n } else {\n return false;\n }\n }\n\n // TODO\n\n match(type: TokenType): boolean {\n return this.state.type === type;\n }\n\n // TODO\n\n lookahead(): State {\n const old = this.state;\n this.state = old.clone(true);\n\n this.isLookahead = true;\n this.next();\n this.isLookahead = false;\n\n const curr = this.state;\n this.state = old;\n return curr;\n }\n\n nextTokenStart(): number {\n const thisTokEnd = this.state.pos;\n skipWhiteSpace.lastIndex = thisTokEnd;\n const skip = skipWhiteSpace.exec(this.input);\n // $FlowIgnore: The skipWhiteSpace ensures to match any string\n return thisTokEnd + skip[0].length;\n }\n\n lookaheadCharCode(): number {\n return this.input.charCodeAt(this.nextTokenStart());\n }\n\n // Toggle strict mode. Re-reads the next number or string to please\n // pedantic tests (`\"use strict\"; 010;` should fail).\n\n setStrict(strict: boolean): void {\n this.state.strict = strict;\n if (!this.match(tt.num) && !this.match(tt.string)) return;\n this.state.pos = this.state.start;\n while (this.state.pos < this.state.lineStart) {\n this.state.lineStart =\n this.input.lastIndexOf(\"\\n\", this.state.lineStart - 2) + 1;\n --this.state.curLine;\n }\n this.nextToken();\n }\n\n curContext(): TokContext {\n return this.state.context[this.state.context.length - 1];\n }\n\n // Read a single token, updating the parser object's token-related\n // properties.\n\n nextToken(): void {\n const curContext = this.curContext();\n if (!curContext || !curContext.preserveSpace) this.skipSpace();\n\n this.state.containsOctal = false;\n this.state.octalPosition = null;\n this.state.start = this.state.pos;\n this.state.startLoc = this.state.curPosition();\n if (this.state.pos >= this.length) {\n this.finishToken(tt.eof);\n return;\n }\n\n if (curContext.override) {\n curContext.override(this);\n } else {\n this.getTokenFromCode(this.input.codePointAt(this.state.pos));\n }\n }\n\n pushComment(\n block: boolean,\n text: string,\n start: number,\n end: number,\n startLoc: Position,\n endLoc: Position,\n ): void {\n const comment = {\n type: block ? \"CommentBlock\" : \"CommentLine\",\n value: text,\n start: start,\n end: end,\n loc: new SourceLocation(startLoc, endLoc),\n };\n\n if (this.options.tokens) this.state.tokens.push(comment);\n this.state.comments.push(comment);\n this.addComment(comment);\n }\n\n skipBlockComment(): void {\n const startLoc = this.state.curPosition();\n const start = this.state.pos;\n const end = this.input.indexOf(\"*/\", this.state.pos + 2);\n if (end === -1) throw this.raise(start, \"Unterminated comment\");\n\n this.state.pos = end + 2;\n lineBreakG.lastIndex = start;\n let match;\n while (\n (match = lineBreakG.exec(this.input)) &&\n match.index < this.state.pos\n ) {\n ++this.state.curLine;\n this.state.lineStart = match.index + match[0].length;\n }\n\n // If we are doing a lookahead right now we need to advance the position (above code)\n // but we do not want to push the comment to the state.\n if (this.isLookahead) return;\n\n this.pushComment(\n true,\n this.input.slice(start + 2, end),\n start,\n this.state.pos,\n startLoc,\n this.state.curPosition(),\n );\n }\n\n skipLineComment(startSkip: number): void {\n const start = this.state.pos;\n const startLoc = this.state.curPosition();\n let ch = this.input.charCodeAt((this.state.pos += startSkip));\n if (this.state.pos < this.length) {\n while (!isNewLine(ch) && ++this.state.pos < this.length) {\n ch = this.input.charCodeAt(this.state.pos);\n }\n }\n\n // If we are doing a lookahead right now we need to advance the position (above code)\n // but we do not want to push the comment to the state.\n if (this.isLookahead) return;\n\n this.pushComment(\n false,\n this.input.slice(start + startSkip, this.state.pos),\n start,\n this.state.pos,\n startLoc,\n this.state.curPosition(),\n );\n }\n\n // Called at the start of the parse and after every token. Skips\n // whitespace and comments, and.\n\n skipSpace(): void {\n loop: while (this.state.pos < this.length) {\n const ch = this.input.charCodeAt(this.state.pos);\n switch (ch) {\n case charCodes.space:\n case charCodes.nonBreakingSpace:\n case charCodes.tab:\n ++this.state.pos;\n break;\n case charCodes.carriageReturn:\n if (\n this.input.charCodeAt(this.state.pos + 1) === charCodes.lineFeed\n ) {\n ++this.state.pos;\n }\n\n case charCodes.lineFeed:\n case charCodes.lineSeparator:\n case charCodes.paragraphSeparator:\n ++this.state.pos;\n ++this.state.curLine;\n this.state.lineStart = this.state.pos;\n break;\n\n case charCodes.slash:\n switch (this.input.charCodeAt(this.state.pos + 1)) {\n case charCodes.asterisk:\n this.skipBlockComment();\n break;\n\n case charCodes.slash:\n this.skipLineComment(2);\n break;\n\n default:\n break loop;\n }\n break;\n\n default:\n if (isWhitespace(ch)) {\n ++this.state.pos;\n } else {\n break loop;\n }\n }\n }\n }\n\n // Called at the end of every token. Sets `end`, `val`, and\n // maintains `context` and `exprAllowed`, and skips the space after\n // the token, so that the next one's `start` will point at the\n // right position.\n\n finishToken(type: TokenType, val: any): void {\n this.state.end = this.state.pos;\n this.state.endLoc = this.state.curPosition();\n const prevType = this.state.type;\n this.state.type = type;\n this.state.value = val;\n\n if (!this.isLookahead) this.updateContext(prevType);\n }\n\n // ### Token reading\n\n // This is the function that is called to fetch the next token. It\n // is somewhat obscure, because it works in character codes rather\n // than characters, and because operator parsing has been inlined\n // into it.\n //\n // All in the name of speed.\n\n // number sign is \"#\"\n readToken_numberSign(): void {\n if (this.state.pos === 0 && this.readToken_interpreter()) {\n return;\n }\n\n const nextPos = this.state.pos + 1;\n const next = this.input.charCodeAt(nextPos);\n if (next >= charCodes.digit0 && next <= charCodes.digit9) {\n throw this.raise(this.state.pos, \"Unexpected digit after hash token\");\n }\n\n if (\n this.hasPlugin(\"classPrivateProperties\") ||\n this.hasPlugin(\"classPrivateMethods\") ||\n this.getPluginOption(\"pipelineOperator\", \"proposal\") === \"smart\"\n ) {\n this.finishOp(tt.hash, 1);\n } else {\n throw this.raise(this.state.pos, \"Unexpected character '#'\");\n }\n }\n\n readToken_dot(): void {\n const next = this.input.charCodeAt(this.state.pos + 1);\n if (next >= charCodes.digit0 && next <= charCodes.digit9) {\n this.readNumber(true);\n return;\n }\n\n if (\n next === charCodes.dot &&\n this.input.charCodeAt(this.state.pos + 2) === charCodes.dot\n ) {\n this.state.pos += 3;\n this.finishToken(tt.ellipsis);\n } else {\n ++this.state.pos;\n this.finishToken(tt.dot);\n }\n }\n\n readToken_slash(): void {\n // '/'\n if (this.state.exprAllowed && !this.state.inType) {\n ++this.state.pos;\n this.readRegexp();\n return;\n }\n\n const next = this.input.charCodeAt(this.state.pos + 1);\n if (next === charCodes.equalsTo) {\n this.finishOp(tt.assign, 2);\n } else {\n this.finishOp(tt.slash, 1);\n }\n }\n\n readToken_interpreter(): boolean {\n if (this.state.pos !== 0 || this.length < 2) return false;\n\n const start = this.state.pos;\n this.state.pos += 1;\n\n let ch = this.input.charCodeAt(this.state.pos);\n if (ch !== charCodes.exclamationMark) return false;\n\n while (!isNewLine(ch) && ++this.state.pos < this.length) {\n ch = this.input.charCodeAt(this.state.pos);\n }\n\n const value = this.input.slice(start + 2, this.state.pos);\n\n this.finishToken(tt.interpreterDirective, value);\n\n return true;\n }\n\n readToken_mult_modulo(code: number): void {\n // '%*'\n let type = code === charCodes.asterisk ? tt.star : tt.modulo;\n let width = 1;\n let next = this.input.charCodeAt(this.state.pos + 1);\n const exprAllowed = this.state.exprAllowed;\n\n // Exponentiation operator **\n if (code === charCodes.asterisk && next === charCodes.asterisk) {\n width++;\n next = this.input.charCodeAt(this.state.pos + 2);\n type = tt.exponent;\n }\n\n if (next === charCodes.equalsTo && !exprAllowed) {\n width++;\n type = tt.assign;\n }\n\n this.finishOp(type, width);\n }\n\n readToken_pipe_amp(code: number): void {\n // '||' '&&' '||=' '&&='\n const next = this.input.charCodeAt(this.state.pos + 1);\n\n if (next === code) {\n if (this.input.charCodeAt(this.state.pos + 2) === charCodes.equalsTo) {\n this.finishOp(tt.assign, 3);\n } else {\n this.finishOp(\n code === charCodes.verticalBar ? tt.logicalOR : tt.logicalAND,\n 2,\n );\n }\n return;\n }\n\n if (code === charCodes.verticalBar) {\n // '|>'\n if (next === charCodes.greaterThan) {\n this.finishOp(tt.pipeline, 2);\n return;\n }\n }\n\n if (next === charCodes.equalsTo) {\n this.finishOp(tt.assign, 2);\n return;\n }\n\n this.finishOp(\n code === charCodes.verticalBar ? tt.bitwiseOR : tt.bitwiseAND,\n 1,\n );\n }\n\n readToken_caret(): void {\n // '^'\n const next = this.input.charCodeAt(this.state.pos + 1);\n if (next === charCodes.equalsTo) {\n this.finishOp(tt.assign, 2);\n } else {\n this.finishOp(tt.bitwiseXOR, 1);\n }\n }\n\n readToken_plus_min(code: number): void {\n // '+-'\n const next = this.input.charCodeAt(this.state.pos + 1);\n\n if (next === code) {\n if (\n next === charCodes.dash &&\n !this.inModule &&\n this.input.charCodeAt(this.state.pos + 2) === charCodes.greaterThan &&\n (this.state.lastTokEnd === 0 ||\n lineBreak.test(\n this.input.slice(this.state.lastTokEnd, this.state.pos),\n ))\n ) {\n // A `-->` line comment\n this.skipLineComment(3);\n this.skipSpace();\n this.nextToken();\n return;\n }\n this.finishOp(tt.incDec, 2);\n return;\n }\n\n if (next === charCodes.equalsTo) {\n this.finishOp(tt.assign, 2);\n } else {\n this.finishOp(tt.plusMin, 1);\n }\n }\n\n readToken_lt_gt(code: number): void {\n // '<>'\n const next = this.input.charCodeAt(this.state.pos + 1);\n let size = 1;\n\n if (next === code) {\n size =\n code === charCodes.greaterThan &&\n this.input.charCodeAt(this.state.pos + 2) === charCodes.greaterThan\n ? 3\n : 2;\n if (this.input.charCodeAt(this.state.pos + size) === charCodes.equalsTo) {\n this.finishOp(tt.assign, size + 1);\n return;\n }\n this.finishOp(tt.bitShift, size);\n return;\n }\n\n if (\n next === charCodes.exclamationMark &&\n code === charCodes.lessThan &&\n !this.inModule &&\n this.input.charCodeAt(this.state.pos + 2) === charCodes.dash &&\n this.input.charCodeAt(this.state.pos + 3) === charCodes.dash\n ) {\n // `<!--`, an XML-style comment that should be interpreted as a line comment\n this.skipLineComment(4);\n this.skipSpace();\n this.nextToken();\n return;\n }\n\n if (next === charCodes.equalsTo) {\n // <= | >=\n size = 2;\n }\n\n this.finishOp(tt.relational, size);\n }\n\n readToken_eq_excl(code: number): void {\n // '=!'\n const next = this.input.charCodeAt(this.state.pos + 1);\n if (next === charCodes.equalsTo) {\n this.finishOp(\n tt.equality,\n this.input.charCodeAt(this.state.pos + 2) === charCodes.equalsTo\n ? 3\n : 2,\n );\n return;\n }\n if (code === charCodes.equalsTo && next === charCodes.greaterThan) {\n // '=>'\n this.state.pos += 2;\n this.finishToken(tt.arrow);\n return;\n }\n this.finishOp(code === charCodes.equalsTo ? tt.eq : tt.bang, 1);\n }\n\n readToken_question(): void {\n // '?'\n const next = this.input.charCodeAt(this.state.pos + 1);\n const next2 = this.input.charCodeAt(this.state.pos + 2);\n if (next === charCodes.questionMark && !this.state.inType) {\n if (next2 === charCodes.equalsTo) {\n // '??='\n this.finishOp(tt.assign, 3);\n } else {\n // '??'\n this.finishOp(tt.nullishCoalescing, 2);\n }\n } else if (\n next === charCodes.dot &&\n !(next2 >= charCodes.digit0 && next2 <= charCodes.digit9)\n ) {\n // '.' not followed by a number\n this.state.pos += 2;\n this.finishToken(tt.questionDot);\n } else {\n ++this.state.pos;\n this.finishToken(tt.question);\n }\n }\n\n getTokenFromCode(code: number): void {\n switch (code) {\n // The interpretation of a dot depends on whether it is followed\n // by a digit or another two dots.\n\n case charCodes.dot:\n this.readToken_dot();\n return;\n\n // Punctuation tokens.\n case charCodes.leftParenthesis:\n ++this.state.pos;\n this.finishToken(tt.parenL);\n return;\n case charCodes.rightParenthesis:\n ++this.state.pos;\n this.finishToken(tt.parenR);\n return;\n case charCodes.semicolon:\n ++this.state.pos;\n this.finishToken(tt.semi);\n return;\n case charCodes.comma:\n ++this.state.pos;\n this.finishToken(tt.comma);\n return;\n case charCodes.leftSquareBracket:\n ++this.state.pos;\n this.finishToken(tt.bracketL);\n return;\n case charCodes.rightSquareBracket:\n ++this.state.pos;\n this.finishToken(tt.bracketR);\n return;\n case charCodes.leftCurlyBrace:\n ++this.state.pos;\n this.finishToken(tt.braceL);\n return;\n case charCodes.rightCurlyBrace:\n ++this.state.pos;\n this.finishToken(tt.braceR);\n return;\n\n case charCodes.colon:\n if (\n this.hasPlugin(\"functionBind\") &&\n this.input.charCodeAt(this.state.pos + 1) === charCodes.colon\n ) {\n this.finishOp(tt.doubleColon, 2);\n } else {\n ++this.state.pos;\n this.finishToken(tt.colon);\n }\n return;\n\n case charCodes.questionMark:\n this.readToken_question();\n return;\n\n case charCodes.graveAccent:\n ++this.state.pos;\n this.finishToken(tt.backQuote);\n return;\n\n case charCodes.digit0: {\n const next = this.input.charCodeAt(this.state.pos + 1);\n // '0x', '0X' - hex number\n if (next === charCodes.lowercaseX || next === charCodes.uppercaseX) {\n this.readRadixNumber(16);\n return;\n }\n // '0o', '0O' - octal number\n if (next === charCodes.lowercaseO || next === charCodes.uppercaseO) {\n this.readRadixNumber(8);\n return;\n }\n // '0b', '0B' - binary number\n if (next === charCodes.lowercaseB || next === charCodes.uppercaseB) {\n this.readRadixNumber(2);\n return;\n }\n }\n // Anything else beginning with a digit is an integer, octal\n // number, or float.\n case charCodes.digit1:\n case charCodes.digit2:\n case charCodes.digit3:\n case charCodes.digit4:\n case charCodes.digit5:\n case charCodes.digit6:\n case charCodes.digit7:\n case charCodes.digit8:\n case charCodes.digit9:\n this.readNumber(false);\n return;\n\n // Quotes produce strings.\n case charCodes.quotationMark:\n case charCodes.apostrophe:\n this.readString(code);\n return;\n\n // Operators are parsed inline in tiny state machines. '=' (charCodes.equalsTo) is\n // often referred to. `finishOp` simply skips the amount of\n // characters it is given as second argument, and returns a token\n // of the type given by its first argument.\n\n case charCodes.slash:\n this.readToken_slash();\n return;\n\n case charCodes.percentSign:\n case charCodes.asterisk:\n this.readToken_mult_modulo(code);\n return;\n\n case charCodes.verticalBar:\n case charCodes.ampersand:\n this.readToken_pipe_amp(code);\n return;\n\n case charCodes.caret:\n this.readToken_caret();\n return;\n\n case charCodes.plusSign:\n case charCodes.dash:\n this.readToken_plus_min(code);\n return;\n\n case charCodes.lessThan:\n case charCodes.greaterThan:\n this.readToken_lt_gt(code);\n return;\n\n case charCodes.equalsTo:\n case charCodes.exclamationMark:\n this.readToken_eq_excl(code);\n return;\n\n case charCodes.tilde:\n this.finishOp(tt.tilde, 1);\n return;\n\n case charCodes.atSign:\n ++this.state.pos;\n this.finishToken(tt.at);\n return;\n\n case charCodes.numberSign:\n this.readToken_numberSign();\n return;\n\n case charCodes.backslash:\n this.readWord();\n return;\n\n default:\n if (isIdentifierStart(code)) {\n this.readWord();\n return;\n }\n }\n\n throw this.raise(\n this.state.pos,\n `Unexpected character '${String.fromCodePoint(code)}'`,\n );\n }\n\n finishOp(type: TokenType, size: number): void {\n const str = this.input.slice(this.state.pos, this.state.pos + size);\n this.state.pos += size;\n this.finishToken(type, str);\n }\n\n readRegexp(): void {\n const start = this.state.pos;\n let escaped, inClass;\n for (;;) {\n if (this.state.pos >= this.length) {\n throw this.raise(start, \"Unterminated regular expression\");\n }\n const ch = this.input.charAt(this.state.pos);\n if (lineBreak.test(ch)) {\n throw this.raise(start, \"Unterminated regular expression\");\n }\n if (escaped) {\n escaped = false;\n } else {\n if (ch === \"[\") {\n inClass = true;\n } else if (ch === \"]\" && inClass) {\n inClass = false;\n } else if (ch === \"/\" && !inClass) {\n break;\n }\n escaped = ch === \"\\\\\";\n }\n ++this.state.pos;\n }\n const content = this.input.slice(start, this.state.pos);\n ++this.state.pos;\n\n let mods = \"\";\n\n while (this.state.pos < this.length) {\n const char = this.input[this.state.pos];\n const charCode = this.input.codePointAt(this.state.pos);\n\n if (VALID_REGEX_FLAGS.has(char)) {\n if (mods.indexOf(char) > -1) {\n this.raise(this.state.pos + 1, \"Duplicate regular expression flag\");\n }\n } else if (\n isIdentifierChar(charCode) ||\n charCode === charCodes.backslash\n ) {\n this.raise(this.state.pos + 1, \"Invalid regular expression flag\");\n } else {\n break;\n }\n\n ++this.state.pos;\n mods += char;\n }\n\n this.finishToken(tt.regexp, {\n pattern: content,\n flags: mods,\n });\n }\n\n // Read an integer in the given radix. Return null if zero digits\n // were read, the integer value otherwise. When `len` is given, this\n // will return `null` unless the integer has exactly `len` digits.\n // When `forceLen` is `true`, it means that we already know that in case\n // of a malformed number we have to skip `len` characters anyway, instead\n // of bailing out early. For example, in \"\\u{123Z}\" we want to read up to }\n // anyway, while in \"\\u00Z\" we will stop at Z instead of consuming four\n // characters (and thus the closing quote).\n\n readInt(\n radix: number,\n len?: number,\n forceLen?: boolean,\n allowNumSeparator: boolean = true,\n ): number | null {\n const start = this.state.pos;\n const forbiddenSiblings =\n radix === 16\n ? forbiddenNumericSeparatorSiblings.hex\n : forbiddenNumericSeparatorSiblings.decBinOct;\n const allowedSiblings =\n radix === 16\n ? allowedNumericSeparatorSiblings.hex\n : radix === 10\n ? allowedNumericSeparatorSiblings.dec\n : radix === 8\n ? allowedNumericSeparatorSiblings.oct\n : allowedNumericSeparatorSiblings.bin;\n\n let invalid = false;\n let total = 0;\n\n for (let i = 0, e = len == null ? Infinity : len; i < e; ++i) {\n const code = this.input.charCodeAt(this.state.pos);\n let val;\n\n if (this.hasPlugin(\"numericSeparator\")) {\n if (code === charCodes.underscore) {\n const prev = this.input.charCodeAt(this.state.pos - 1);\n const next = this.input.charCodeAt(this.state.pos + 1);\n if (allowedSiblings.indexOf(next) === -1) {\n this.raise(\n this.state.pos,\n \"A numeric separator is only allowed between two digits\",\n );\n } else if (\n forbiddenSiblings.indexOf(prev) > -1 ||\n forbiddenSiblings.indexOf(next) > -1 ||\n Number.isNaN(next)\n ) {\n this.raise(\n this.state.pos,\n \"A numeric separator is only allowed between two digits\",\n );\n }\n\n if (!allowNumSeparator) {\n this.raise(\n this.state.pos,\n \"Numeric separators are not allowed inside unicode escape sequences or hex escape sequences\",\n );\n }\n\n // Ignore this _ character\n ++this.state.pos;\n continue;\n }\n }\n\n if (code >= charCodes.lowercaseA) {\n val = code - charCodes.lowercaseA + charCodes.lineFeed;\n } else if (code >= charCodes.uppercaseA) {\n val = code - charCodes.uppercaseA + charCodes.lineFeed;\n } else if (charCodes.isDigit(code)) {\n val = code - charCodes.digit0; // 0-9\n } else {\n val = Infinity;\n }\n if (val >= radix) {\n // If we are in \"errorRecovery\" mode and we found a digit which is too big,\n // don't break the loop.\n\n if (this.options.errorRecovery && val <= 9) {\n val = 0;\n this.raise(\n this.state.start + i + 2,\n \"Expected number in radix \" + radix,\n );\n } else if (forceLen) {\n val = 0;\n invalid = true;\n } else {\n break;\n }\n }\n ++this.state.pos;\n total = total * radix + val;\n }\n if (\n this.state.pos === start ||\n (len != null && this.state.pos - start !== len) ||\n invalid\n ) {\n return null;\n }\n\n return total;\n }\n\n readRadixNumber(radix: number): void {\n const start = this.state.pos;\n let isBigInt = false;\n\n this.state.pos += 2; // 0x\n const val = this.readInt(radix);\n if (val == null) {\n this.raise(this.state.start + 2, \"Expected number in radix \" + radix);\n }\n\n if (this.hasPlugin(\"bigInt\")) {\n if (this.input.charCodeAt(this.state.pos) === charCodes.lowercaseN) {\n ++this.state.pos;\n isBigInt = true;\n }\n }\n\n if (isIdentifierStart(this.input.codePointAt(this.state.pos))) {\n throw this.raise(this.state.pos, \"Identifier directly after number\");\n }\n\n if (isBigInt) {\n const str = this.input.slice(start, this.state.pos).replace(/[_n]/g, \"\");\n this.finishToken(tt.bigint, str);\n return;\n }\n\n this.finishToken(tt.num, val);\n }\n\n // Read an integer, octal integer, or floating-point number.\n\n readNumber(startsWithDot: boolean): void {\n const start = this.state.pos;\n let isFloat = false;\n let isBigInt = false;\n let isNonOctalDecimalInt = false;\n\n if (!startsWithDot && this.readInt(10) === null) {\n this.raise(start, \"Invalid number\");\n }\n let octal =\n this.state.pos - start >= 2 &&\n this.input.charCodeAt(start) === charCodes.digit0;\n if (octal) {\n if (this.state.strict) {\n this.raise(\n start,\n \"Legacy octal literals are not allowed in strict mode\",\n );\n }\n if (/[89]/.test(this.input.slice(start, this.state.pos))) {\n octal = false;\n isNonOctalDecimalInt = true;\n }\n }\n\n let next = this.input.charCodeAt(this.state.pos);\n if (next === charCodes.dot && !octal) {\n ++this.state.pos;\n this.readInt(10);\n isFloat = true;\n next = this.input.charCodeAt(this.state.pos);\n }\n\n if (\n (next === charCodes.uppercaseE || next === charCodes.lowercaseE) &&\n !octal\n ) {\n next = this.input.charCodeAt(++this.state.pos);\n if (next === charCodes.plusSign || next === charCodes.dash) {\n ++this.state.pos;\n }\n if (this.readInt(10) === null) this.raise(start, \"Invalid number\");\n isFloat = true;\n next = this.input.charCodeAt(this.state.pos);\n }\n\n // disallow numeric separators in non octal decimals and legacy octal likes\n if (this.hasPlugin(\"numericSeparator\") && (octal || isNonOctalDecimalInt)) {\n const underscorePos = this.input\n .slice(start, this.state.pos)\n .indexOf(\"_\");\n if (underscorePos > 0) {\n this.raise(\n underscorePos + start,\n \"Numeric separator can not be used after leading 0\",\n );\n }\n }\n\n if (this.hasPlugin(\"bigInt\")) {\n if (next === charCodes.lowercaseN) {\n // disallow floats, legacy octal syntax and non octal decimals\n // new style octal (\"0o\") is handled in this.readRadixNumber\n if (isFloat || octal || isNonOctalDecimalInt) {\n this.raise(start, \"Invalid BigIntLiteral\");\n }\n ++this.state.pos;\n isBigInt = true;\n }\n }\n\n if (isIdentifierStart(this.input.codePointAt(this.state.pos))) {\n throw this.raise(this.state.pos, \"Identifier directly after number\");\n }\n\n // remove \"_\" for numeric literal separator, and \"n\" for BigInts\n const str = this.input.slice(start, this.state.pos).replace(/[_n]/g, \"\");\n\n if (isBigInt) {\n this.finishToken(tt.bigint, str);\n return;\n }\n\n const val = octal ? parseInt(str, 8) : parseFloat(str);\n this.finishToken(tt.num, val);\n }\n\n // Read a string value, interpreting backslash-escapes.\n\n readCodePoint(throwOnInvalid: boolean): number | null {\n const ch = this.input.charCodeAt(this.state.pos);\n let code;\n\n if (ch === charCodes.leftCurlyBrace) {\n const codePos = ++this.state.pos;\n code = this.readHexChar(\n this.input.indexOf(\"}\", this.state.pos) - this.state.pos,\n true,\n throwOnInvalid,\n );\n ++this.state.pos;\n if (code !== null && code > 0x10ffff) {\n if (throwOnInvalid) {\n this.raise(codePos, \"Code point out of bounds\");\n } else {\n return null;\n }\n }\n } else {\n code = this.readHexChar(4, false, throwOnInvalid);\n }\n return code;\n }\n\n readString(quote: number): void {\n let out = \"\",\n chunkStart = ++this.state.pos;\n for (;;) {\n if (this.state.pos >= this.length) {\n throw this.raise(this.state.start, \"Unterminated string constant\");\n }\n const ch = this.input.charCodeAt(this.state.pos);\n if (ch === quote) break;\n if (ch === charCodes.backslash) {\n out += this.input.slice(chunkStart, this.state.pos);\n // $FlowFixMe\n out += this.readEscapedChar(false);\n chunkStart = this.state.pos;\n } else if (\n ch === charCodes.lineSeparator ||\n ch === charCodes.paragraphSeparator\n ) {\n ++this.state.pos;\n ++this.state.curLine;\n this.state.lineStart = this.state.pos;\n } else if (isNewLine(ch)) {\n throw this.raise(this.state.start, \"Unterminated string constant\");\n } else {\n ++this.state.pos;\n }\n }\n out += this.input.slice(chunkStart, this.state.pos++);\n this.finishToken(tt.string, out);\n }\n\n // Reads template string tokens.\n\n readTmplToken(): void {\n let out = \"\",\n chunkStart = this.state.pos,\n containsInvalid = false;\n for (;;) {\n if (this.state.pos >= this.length) {\n throw this.raise(this.state.start, \"Unterminated template\");\n }\n const ch = this.input.charCodeAt(this.state.pos);\n if (\n ch === charCodes.graveAccent ||\n (ch === charCodes.dollarSign &&\n this.input.charCodeAt(this.state.pos + 1) ===\n charCodes.leftCurlyBrace)\n ) {\n if (this.state.pos === this.state.start && this.match(tt.template)) {\n if (ch === charCodes.dollarSign) {\n this.state.pos += 2;\n this.finishToken(tt.dollarBraceL);\n return;\n } else {\n ++this.state.pos;\n this.finishToken(tt.backQuote);\n return;\n }\n }\n out += this.input.slice(chunkStart, this.state.pos);\n this.finishToken(tt.template, containsInvalid ? null : out);\n return;\n }\n if (ch === charCodes.backslash) {\n out += this.input.slice(chunkStart, this.state.pos);\n const escaped = this.readEscapedChar(true);\n if (escaped === null) {\n containsInvalid = true;\n } else {\n out += escaped;\n }\n chunkStart = this.state.pos;\n } else if (isNewLine(ch)) {\n out += this.input.slice(chunkStart, this.state.pos);\n ++this.state.pos;\n switch (ch) {\n case charCodes.carriageReturn:\n if (this.input.charCodeAt(this.state.pos) === charCodes.lineFeed) {\n ++this.state.pos;\n }\n case charCodes.lineFeed:\n out += \"\\n\";\n break;\n default:\n out += String.fromCharCode(ch);\n break;\n }\n ++this.state.curLine;\n this.state.lineStart = this.state.pos;\n chunkStart = this.state.pos;\n } else {\n ++this.state.pos;\n }\n }\n }\n\n // Used to read escaped characters\n\n readEscapedChar(inTemplate: boolean): string | null {\n const throwOnInvalid = !inTemplate;\n const ch = this.input.charCodeAt(++this.state.pos);\n ++this.state.pos;\n switch (ch) {\n case charCodes.lowercaseN:\n return \"\\n\";\n case charCodes.lowercaseR:\n return \"\\r\";\n case charCodes.lowercaseX: {\n const code = this.readHexChar(2, false, throwOnInvalid);\n return code === null ? null : String.fromCharCode(code);\n }\n case charCodes.lowercaseU: {\n const code = this.readCodePoint(throwOnInvalid);\n return code === null ? null : String.fromCodePoint(code);\n }\n case charCodes.lowercaseT:\n return \"\\t\";\n case charCodes.lowercaseB:\n return \"\\b\";\n case charCodes.lowercaseV:\n return \"\\u000b\";\n case charCodes.lowercaseF:\n return \"\\f\";\n case charCodes.carriageReturn:\n if (this.input.charCodeAt(this.state.pos) === charCodes.lineFeed) {\n ++this.state.pos;\n }\n case charCodes.lineFeed:\n this.state.lineStart = this.state.pos;\n ++this.state.curLine;\n case charCodes.lineSeparator:\n case charCodes.paragraphSeparator:\n return \"\";\n case charCodes.digit8:\n case charCodes.digit9:\n if (inTemplate) {\n return null;\n }\n default:\n if (ch >= charCodes.digit0 && ch <= charCodes.digit7) {\n const codePos = this.state.pos - 1;\n // $FlowFixMe\n let octalStr = this.input\n .substr(this.state.pos - 1, 3)\n .match(/^[0-7]+/)[0];\n let octal = parseInt(octalStr, 8);\n if (octal > 255) {\n octalStr = octalStr.slice(0, -1);\n octal = parseInt(octalStr, 8);\n }\n this.state.pos += octalStr.length - 1;\n const next = this.input.charCodeAt(this.state.pos);\n if (\n octalStr !== \"0\" ||\n next === charCodes.digit8 ||\n next === charCodes.digit9\n ) {\n if (inTemplate) {\n return null;\n } else if (this.state.strict) {\n this.raise(codePos, \"Octal literal in strict mode\");\n } else if (!this.state.containsOctal) {\n // These properties are only used to throw an error for an octal which occurs\n // in a directive which occurs prior to a \"use strict\" directive.\n this.state.containsOctal = true;\n this.state.octalPosition = codePos;\n }\n }\n\n return String.fromCharCode(octal);\n }\n\n return String.fromCharCode(ch);\n }\n }\n\n // Used to read character escape sequences ('\\x', '\\u').\n\n readHexChar(\n len: number,\n forceLen: boolean,\n throwOnInvalid: boolean,\n ): number | null {\n const codePos = this.state.pos;\n const n = this.readInt(16, len, forceLen, false);\n if (n === null) {\n if (throwOnInvalid) {\n this.raise(codePos, \"Bad character escape sequence\");\n } else {\n this.state.pos = codePos - 1;\n }\n }\n return n;\n }\n\n // Read an identifier, and return it as a string. Sets `this.state.containsEsc`\n // to whether the word contained a '\\u' escape.\n //\n // Incrementally adds only escaped chars, adding other chunks as-is\n // as a micro-optimization.\n\n readWord1(): string {\n let word = \"\";\n this.state.containsEsc = false;\n const start = this.state.pos;\n let chunkStart = this.state.pos;\n\n while (this.state.pos < this.length) {\n const ch = this.input.codePointAt(this.state.pos);\n if (isIdentifierChar(ch)) {\n this.state.pos += ch <= 0xffff ? 1 : 2;\n } else if (this.state.isIterator && ch === charCodes.atSign) {\n ++this.state.pos;\n } else if (ch === charCodes.backslash) {\n this.state.containsEsc = true;\n\n word += this.input.slice(chunkStart, this.state.pos);\n const escStart = this.state.pos;\n const identifierCheck =\n this.state.pos === start ? isIdentifierStart : isIdentifierChar;\n\n if (this.input.charCodeAt(++this.state.pos) !== charCodes.lowercaseU) {\n this.raise(\n this.state.pos,\n \"Expecting Unicode escape sequence \\\\uXXXX\",\n );\n continue;\n }\n\n ++this.state.pos;\n const esc = this.readCodePoint(true);\n if (esc !== null) {\n if (!identifierCheck(esc)) {\n this.raise(escStart, \"Invalid Unicode escape\");\n }\n\n word += String.fromCodePoint(esc);\n }\n chunkStart = this.state.pos;\n } else {\n break;\n }\n }\n return word + this.input.slice(chunkStart, this.state.pos);\n }\n\n isIterator(word: string): boolean {\n return word === \"@@iterator\" || word === \"@@asyncIterator\";\n }\n\n // Read an identifier or keyword token. Will check for reserved\n // words when necessary.\n\n readWord(): void {\n const word = this.readWord1();\n const type = keywordTypes.get(word) || tt.name;\n\n // Allow @@iterator and @@asyncIterator as a identifier only inside type\n if (\n this.state.isIterator &&\n (!this.isIterator(word) || !this.state.inType)\n ) {\n this.raise(this.state.pos, `Invalid identifier ${word}`);\n }\n\n this.finishToken(type, word);\n }\n\n checkKeywordEscapes(): void {\n const kw = this.state.type.keyword;\n if (kw && this.state.containsEsc) {\n this.raise(this.state.start, `Escape sequence in keyword ${kw}`);\n }\n }\n\n braceIsBlock(prevType: TokenType): boolean {\n const parent = this.curContext();\n if (parent === ct.functionExpression || parent === ct.functionStatement) {\n return true;\n }\n if (\n prevType === tt.colon &&\n (parent === ct.braceStatement || parent === ct.braceExpression)\n ) {\n return !parent.isExpr;\n }\n\n // The check for `tt.name && exprAllowed` detects whether we are\n // after a `yield` or `of` construct. See the `updateContext` for\n // `tt.name`.\n if (\n prevType === tt._return ||\n (prevType === tt.name && this.state.exprAllowed)\n ) {\n return lineBreak.test(\n this.input.slice(this.state.lastTokEnd, this.state.start),\n );\n }\n\n if (\n prevType === tt._else ||\n prevType === tt.semi ||\n prevType === tt.eof ||\n prevType === tt.parenR ||\n prevType === tt.arrow\n ) {\n return true;\n }\n\n if (prevType === tt.braceL) {\n return parent === ct.braceStatement;\n }\n\n if (\n prevType === tt._var ||\n prevType === tt._const ||\n prevType === tt.name\n ) {\n return false;\n }\n\n if (prevType === tt.relational) {\n // `class C<T> { ... }`\n return true;\n }\n\n return !this.state.exprAllowed;\n }\n\n updateContext(prevType: TokenType): void {\n const type = this.state.type;\n let update;\n\n if (type.keyword && (prevType === tt.dot || prevType === tt.questionDot)) {\n this.state.exprAllowed = false;\n } else if ((update = type.updateContext)) {\n update.call(this, prevType);\n } else {\n this.state.exprAllowed = type.beforeExpr;\n }\n }\n}\n","// @flow\n\nimport { types as tt, type TokenType } from \"../tokenizer/types\";\nimport Tokenizer from \"../tokenizer\";\nimport State from \"../tokenizer/state\";\nimport type { Node } from \"../types\";\nimport { lineBreak, skipWhiteSpace } from \"../util/whitespace\";\nimport { isIdentifierChar } from \"../util/identifier\";\nimport * as charCodes from \"charcodes\";\n\nconst literal = /^('|\")((?:\\\\?.)*?)\\1/;\n\ntype TryParse<Node, Error, Thrown, Aborted, FailState> = {\n node: Node,\n error: Error,\n thrown: Thrown,\n aborted: Aborted,\n failState: FailState,\n};\n\n// ## Parser utilities\n\nexport default class UtilParser extends Tokenizer {\n // TODO\n\n addExtra(node: Node, key: string, val: any): void {\n if (!node) return;\n\n const extra = (node.extra = node.extra || {});\n extra[key] = val;\n }\n\n // TODO\n\n isRelational(op: \"<\" | \">\"): boolean {\n return this.match(tt.relational) && this.state.value === op;\n }\n\n isLookaheadRelational(op: \"<\" | \">\"): boolean {\n const next = this.nextTokenStart();\n if (this.input.charAt(next) === op) {\n if (next + 1 === this.input.length) {\n return true;\n }\n const afterNext = this.input.charCodeAt(next + 1);\n return afterNext !== op.charCodeAt(0) && afterNext !== charCodes.equalsTo;\n }\n return false;\n }\n\n // TODO\n\n expectRelational(op: \"<\" | \">\"): void {\n if (this.isRelational(op)) {\n this.next();\n } else {\n this.unexpected(null, tt.relational);\n }\n }\n\n // Tests whether parsed token is a contextual keyword.\n\n isContextual(name: string): boolean {\n return (\n this.match(tt.name) &&\n this.state.value === name &&\n !this.state.containsEsc\n );\n }\n\n isUnparsedContextual(nameStart: number, name: string): boolean {\n const nameEnd = nameStart + name.length;\n return (\n this.input.slice(nameStart, nameEnd) === name &&\n (nameEnd === this.input.length ||\n !isIdentifierChar(this.input.charCodeAt(nameEnd)))\n );\n }\n\n isLookaheadContextual(name: string): boolean {\n const next = this.nextTokenStart();\n return this.isUnparsedContextual(next, name);\n }\n\n // Consumes contextual keyword if possible.\n\n eatContextual(name: string): boolean {\n return this.isContextual(name) && this.eat(tt.name);\n }\n\n // Asserts that following token is given contextual keyword.\n\n expectContextual(name: string, message?: string): void {\n if (!this.eatContextual(name)) this.unexpected(null, message);\n }\n\n // Test whether a semicolon can be inserted at the current position.\n\n canInsertSemicolon(): boolean {\n return (\n this.match(tt.eof) ||\n this.match(tt.braceR) ||\n this.hasPrecedingLineBreak()\n );\n }\n\n hasPrecedingLineBreak(): boolean {\n return lineBreak.test(\n this.input.slice(this.state.lastTokEnd, this.state.start),\n );\n }\n\n // TODO\n\n isLineTerminator(): boolean {\n return this.eat(tt.semi) || this.canInsertSemicolon();\n }\n\n // Consume a semicolon, or, failing that, see if we are allowed to\n // pretend that there is a semicolon at this position.\n\n semicolon(): void {\n if (!this.isLineTerminator()) this.unexpected(null, tt.semi);\n }\n\n // Expect a token of a given type. If found, consume it, otherwise,\n // raise an unexpected token error at given pos.\n\n expect(type: TokenType, pos?: ?number): void {\n this.eat(type) || this.unexpected(pos, type);\n }\n\n // Throws if the current token and the prev one are separated by a space.\n assertNoSpace(message: string = \"Unexpected space.\"): void {\n if (this.state.start > this.state.lastTokEnd) {\n this.raise(this.state.lastTokEnd, message);\n }\n }\n\n // Raise an unexpected token error. Can take the expected token type\n // instead of a message string.\n\n unexpected(\n pos: ?number,\n messageOrType: string | TokenType = \"Unexpected token\",\n ): empty {\n if (typeof messageOrType !== \"string\") {\n messageOrType = `Unexpected token, expected \"${messageOrType.label}\"`;\n }\n throw this.raise(pos != null ? pos : this.state.start, messageOrType);\n }\n\n expectPlugin(name: string, pos?: ?number): true {\n if (!this.hasPlugin(name)) {\n throw this.raise(\n pos != null ? pos : this.state.start,\n `This experimental syntax requires enabling the parser plugin: '${name}'`,\n { missingPluginNames: [name] },\n );\n }\n\n return true;\n }\n\n expectOnePlugin(names: Array<string>, pos?: ?number): void {\n if (!names.some(n => this.hasPlugin(n))) {\n throw this.raise(\n pos != null ? pos : this.state.start,\n `This experimental syntax requires enabling one of the following parser plugin(s): '${names.join(\n \", \",\n )}'`,\n { missingPluginNames: names },\n );\n }\n }\n\n checkYieldAwaitInDefaultParams() {\n if (\n this.state.yieldPos !== -1 &&\n (this.state.awaitPos === -1 || this.state.yieldPos < this.state.awaitPos)\n ) {\n this.raise(\n this.state.yieldPos,\n \"Yield cannot be used as name inside a generator function\",\n );\n }\n if (this.state.awaitPos !== -1) {\n this.raise(\n this.state.awaitPos,\n \"Await cannot be used as name inside an async function\",\n );\n }\n }\n\n strictDirective(start: number): boolean {\n for (;;) {\n // Try to find string literal.\n skipWhiteSpace.lastIndex = start;\n // $FlowIgnore\n start += skipWhiteSpace.exec(this.input)[0].length;\n const match = literal.exec(this.input.slice(start));\n if (!match) break;\n if (match[2] === \"use strict\") return true;\n start += match[0].length;\n\n // Skip semicolon, if any.\n skipWhiteSpace.lastIndex = start;\n // $FlowIgnore\n start += skipWhiteSpace.exec(this.input)[0].length;\n if (this.input[start] === \";\") {\n start++;\n }\n }\n\n return false;\n }\n\n // tryParse will clone parser state.\n // It is expensive and should be used with cautions\n tryParse<T: Node | $ReadOnlyArray<Node>>(\n fn: (abort: (node?: T) => empty) => T,\n oldState: State = this.state.clone(),\n ):\n | TryParse<T, null, false, false, null>\n | TryParse<T | null, SyntaxError, boolean, false, State>\n | TryParse<T | null, null, false, true, State> {\n const abortSignal: { node: T | null } = { node: null };\n try {\n const node = fn((node = null) => {\n abortSignal.node = node;\n throw abortSignal;\n });\n if (this.state.errors.length > oldState.errors.length) {\n const failState = this.state;\n this.state = oldState;\n return {\n node,\n error: (failState.errors[oldState.errors.length]: SyntaxError),\n thrown: false,\n aborted: false,\n failState,\n };\n }\n\n return {\n node,\n error: null,\n thrown: false,\n aborted: false,\n failState: null,\n };\n } catch (error) {\n const failState = this.state;\n this.state = oldState;\n if (error instanceof SyntaxError) {\n return { node: null, error, thrown: true, aborted: false, failState };\n }\n if (error === abortSignal) {\n return {\n node: abortSignal.node,\n error: null,\n thrown: false,\n aborted: true,\n failState,\n };\n }\n\n throw error;\n }\n }\n}\n","// @flow\n\nimport type Parser from \"./index\";\nimport UtilParser from \"./util\";\nimport { SourceLocation, type Position } from \"../util/location\";\nimport type { Comment, Node as NodeType, NodeBase } from \"../types\";\n\n// Start an AST node, attaching a start offset.\n\nclass Node implements NodeBase {\n constructor(parser: Parser, pos: number, loc: Position) {\n this.type = \"\";\n this.start = pos;\n this.end = 0;\n this.loc = new SourceLocation(loc);\n if (parser && parser.options.ranges) this.range = [pos, 0];\n if (parser && parser.filename) this.loc.filename = parser.filename;\n }\n\n type: string;\n start: number;\n end: number;\n loc: SourceLocation;\n range: [number, number];\n leadingComments: Array<Comment>;\n trailingComments: Array<Comment>;\n innerComments: Array<Comment>;\n extra: { [key: string]: any };\n\n __clone(): this {\n // $FlowIgnore\n const newNode: any = new Node();\n const keys = Object.keys(this);\n for (let i = 0, length = keys.length; i < length; i++) {\n const key = keys[i];\n // Do not clone comments that are already attached to the node\n if (\n key !== \"leadingComments\" &&\n key !== \"trailingComments\" &&\n key !== \"innerComments\"\n ) {\n // $FlowIgnore\n newNode[key] = this[key];\n }\n }\n\n return newNode;\n }\n}\n\nexport class NodeUtils extends UtilParser {\n startNode<T: NodeType>(): T {\n // $FlowIgnore\n return new Node(this, this.state.start, this.state.startLoc);\n }\n\n startNodeAt<T: NodeType>(pos: number, loc: Position): T {\n // $FlowIgnore\n return new Node(this, pos, loc);\n }\n\n /** Start a new node with a previous node's location. */\n startNodeAtNode<T: NodeType>(type: NodeType): T {\n return this.startNodeAt(type.start, type.loc.start);\n }\n\n // Finish an AST node, adding `type` and `end` properties.\n\n finishNode<T: NodeType>(node: T, type: string): T {\n return this.finishNodeAt(\n node,\n type,\n this.state.lastTokEnd,\n this.state.lastTokEndLoc,\n );\n }\n\n // Finish node at given position\n\n finishNodeAt<T: NodeType>(\n node: T,\n type: string,\n pos: number,\n loc: Position,\n ): T {\n if (process.env.NODE_ENV !== \"production\" && node.end > 0) {\n throw new Error(\n \"Do not call finishNode*() twice on the same node.\" +\n \" Instead use resetEndLocation() or change type directly.\",\n );\n }\n node.type = type;\n node.end = pos;\n node.loc.end = loc;\n if (this.options.ranges) node.range[1] = pos;\n this.processComment(node);\n return node;\n }\n\n resetStartLocation(node: NodeBase, start: number, startLoc: Position): void {\n node.start = start;\n node.loc.start = startLoc;\n if (this.options.ranges) node.range[0] = start;\n }\n\n resetEndLocation(\n node: NodeBase,\n end?: number = this.state.lastTokEnd,\n endLoc?: Position = this.state.lastTokEndLoc,\n ): void {\n node.end = end;\n node.loc.end = endLoc;\n if (this.options.ranges) node.range[1] = end;\n }\n\n /**\n * Reset the start location of node to the start location of locationNode\n */\n resetStartLocationFromNode(node: NodeBase, locationNode: NodeBase): void {\n this.resetStartLocation(node, locationNode.start, locationNode.loc.start);\n }\n}\n","// @flow\n\nimport * as charCodes from \"charcodes\";\nimport { types as tt, type TokenType } from \"../tokenizer/types\";\nimport type {\n TSParameterProperty,\n Decorator,\n Expression,\n Identifier,\n Node,\n ObjectExpression,\n ObjectPattern,\n Pattern,\n RestElement,\n SpreadElement,\n} from \"../types\";\nimport type { Pos, Position } from \"../util/location\";\nimport {\n isStrictBindOnlyReservedWord,\n isStrictBindReservedWord,\n} from \"../util/identifier\";\nimport { NodeUtils } from \"./node\";\nimport { type BindingTypes, BIND_NONE } from \"../util/scopeflags\";\n\nconst unwrapParenthesizedExpression = (node: Node) => {\n return node.type === \"ParenthesizedExpression\"\n ? unwrapParenthesizedExpression(node.expression)\n : node;\n};\n\nexport default class LValParser extends NodeUtils {\n // Forward-declaration: defined in expression.js\n +parseIdentifier: (liberal?: boolean) => Identifier;\n +parseMaybeAssign: (\n noIn?: ?boolean,\n refShorthandDefaultPos?: ?Pos,\n afterLeftParse?: Function,\n refNeedsArrowPos?: ?Pos,\n ) => Expression;\n +parseObj: <T: ObjectPattern | ObjectExpression>(\n isPattern: boolean,\n refShorthandDefaultPos?: ?Pos,\n ) => T;\n // Forward-declaration: defined in statement.js\n +parseDecorator: () => Decorator;\n\n // Convert existing expression atom to assignable pattern\n // if possible.\n // NOTE: There is a corresponding \"isAssignable\" method in flow.js.\n // When this one is updated, please check if also that one needs to be updated.\n\n toAssignable(\n node: Node,\n isBinding: ?boolean,\n contextDescription: string,\n ): Node {\n if (node) {\n if (\n (this.options.createParenthesizedExpressions &&\n node.type === \"ParenthesizedExpression\") ||\n node.extra?.parenthesized\n ) {\n const parenthesized = unwrapParenthesizedExpression(node);\n if (\n parenthesized.type !== \"Identifier\" &&\n parenthesized.type !== \"MemberExpression\"\n ) {\n this.raise(node.start, \"Invalid parenthesized assignment pattern\");\n }\n }\n\n switch (node.type) {\n case \"Identifier\":\n case \"ObjectPattern\":\n case \"ArrayPattern\":\n case \"AssignmentPattern\":\n break;\n\n case \"ObjectExpression\":\n node.type = \"ObjectPattern\";\n for (\n let i = 0, length = node.properties.length, last = length - 1;\n i < length;\n i++\n ) {\n const prop = node.properties[i];\n const isLast = i === last;\n this.toAssignableObjectExpressionProp(prop, isBinding, isLast);\n\n if (\n isLast &&\n prop.type === \"RestElement\" &&\n node.extra?.trailingComma\n ) {\n this.raiseRestNotLast(node.extra.trailingComma);\n }\n }\n break;\n\n case \"ObjectProperty\":\n this.toAssignable(node.value, isBinding, contextDescription);\n break;\n\n case \"SpreadElement\": {\n this.checkToRestConversion(node);\n\n node.type = \"RestElement\";\n const arg = node.argument;\n this.toAssignable(arg, isBinding, contextDescription);\n break;\n }\n\n case \"ArrayExpression\":\n node.type = \"ArrayPattern\";\n this.toAssignableList(\n node.elements,\n isBinding,\n contextDescription,\n node.extra?.trailingComma,\n );\n break;\n\n case \"AssignmentExpression\":\n if (node.operator !== \"=\") {\n this.raise(\n node.left.end,\n \"Only '=' operator can be used for specifying default value.\",\n );\n }\n\n node.type = \"AssignmentPattern\";\n delete node.operator;\n this.toAssignable(node.left, isBinding, contextDescription);\n break;\n\n case \"ParenthesizedExpression\":\n node.expression = this.toAssignable(\n node.expression,\n isBinding,\n contextDescription,\n );\n break;\n\n case \"MemberExpression\":\n if (!isBinding) break;\n\n default:\n // We don't know how to deal with this node. It will\n // be reported by a later call to checkLVal\n }\n }\n return node;\n }\n\n toAssignableObjectExpressionProp(\n prop: Node,\n isBinding: ?boolean,\n isLast: boolean,\n ) {\n if (prop.type === \"ObjectMethod\") {\n const error =\n prop.kind === \"get\" || prop.kind === \"set\"\n ? \"Object pattern can't contain getter or setter\"\n : \"Object pattern can't contain methods\";\n\n this.raise(prop.key.start, error);\n } else if (prop.type === \"SpreadElement\" && !isLast) {\n this.raiseRestNotLast(prop.start);\n } else {\n this.toAssignable(prop, isBinding, \"object destructuring pattern\");\n }\n }\n\n // Convert list of expression atoms to binding list.\n\n toAssignableList(\n exprList: Expression[],\n isBinding: ?boolean,\n contextDescription: string,\n trailingCommaPos?: ?number,\n ): $ReadOnlyArray<Pattern> {\n let end = exprList.length;\n if (end) {\n const last = exprList[end - 1];\n if (last && last.type === \"RestElement\") {\n --end;\n } else if (last && last.type === \"SpreadElement\") {\n last.type = \"RestElement\";\n const arg = last.argument;\n this.toAssignable(arg, isBinding, contextDescription);\n if (\n arg.type !== \"Identifier\" &&\n arg.type !== \"MemberExpression\" &&\n arg.type !== \"ArrayPattern\" &&\n arg.type !== \"ObjectPattern\"\n ) {\n this.unexpected(arg.start);\n }\n\n if (trailingCommaPos) {\n this.raiseTrailingCommaAfterRest(trailingCommaPos);\n }\n\n --end;\n }\n }\n for (let i = 0; i < end; i++) {\n const elt = exprList[i];\n if (elt) {\n this.toAssignable(elt, isBinding, contextDescription);\n if (elt.type === \"RestElement\") {\n this.raiseRestNotLast(elt.start);\n }\n }\n }\n return exprList;\n }\n\n // Convert list of expression atoms to a list of\n\n toReferencedList(\n exprList: $ReadOnlyArray<?Expression>,\n isParenthesizedExpr?: boolean, // eslint-disable-line no-unused-vars\n ): $ReadOnlyArray<?Expression> {\n return exprList;\n }\n\n toReferencedListDeep(\n exprList: $ReadOnlyArray<?Expression>,\n isParenthesizedExpr?: boolean,\n ): void {\n this.toReferencedList(exprList, isParenthesizedExpr);\n\n for (const expr of exprList) {\n if (expr && expr.type === \"ArrayExpression\") {\n this.toReferencedListDeep(expr.elements);\n }\n }\n }\n\n // Parses spread element.\n\n parseSpread(\n refShorthandDefaultPos: ?Pos,\n refNeedsArrowPos?: ?Pos,\n ): SpreadElement {\n const node = this.startNode();\n this.next();\n node.argument = this.parseMaybeAssign(\n false,\n refShorthandDefaultPos,\n undefined,\n refNeedsArrowPos,\n );\n return this.finishNode(node, \"SpreadElement\");\n }\n\n parseRestBinding(): RestElement {\n const node = this.startNode();\n this.next();\n node.argument = this.parseBindingAtom();\n return this.finishNode(node, \"RestElement\");\n }\n\n // Parses lvalue (assignable) atom.\n parseBindingAtom(): Pattern {\n switch (this.state.type) {\n case tt.bracketL: {\n const node = this.startNode();\n this.next();\n node.elements = this.parseBindingList(\n tt.bracketR,\n charCodes.rightSquareBracket,\n true,\n );\n return this.finishNode(node, \"ArrayPattern\");\n }\n\n case tt.braceL:\n return this.parseObj(true);\n }\n\n return this.parseIdentifier();\n }\n\n parseBindingList(\n close: TokenType,\n closeCharCode: $Values<typeof charCodes>,\n allowEmpty?: boolean,\n allowModifiers?: boolean,\n ): $ReadOnlyArray<Pattern | TSParameterProperty> {\n const elts: Array<Pattern | TSParameterProperty> = [];\n let first = true;\n while (!this.eat(close)) {\n if (first) {\n first = false;\n } else {\n this.expect(tt.comma);\n }\n if (allowEmpty && this.match(tt.comma)) {\n // $FlowFixMe This method returns `$ReadOnlyArray<?Pattern>` if `allowEmpty` is set.\n elts.push(null);\n } else if (this.eat(close)) {\n break;\n } else if (this.match(tt.ellipsis)) {\n elts.push(this.parseAssignableListItemTypes(this.parseRestBinding()));\n this.checkCommaAfterRest(closeCharCode);\n this.expect(close);\n break;\n } else {\n const decorators = [];\n if (this.match(tt.at) && this.hasPlugin(\"decorators\")) {\n this.raise(\n this.state.start,\n \"Stage 2 decorators cannot be used to decorate parameters\",\n );\n }\n while (this.match(tt.at)) {\n decorators.push(this.parseDecorator());\n }\n elts.push(this.parseAssignableListItem(allowModifiers, decorators));\n }\n }\n return elts;\n }\n\n parseAssignableListItem(\n allowModifiers: ?boolean,\n decorators: Decorator[],\n ): Pattern | TSParameterProperty {\n const left = this.parseMaybeDefault();\n this.parseAssignableListItemTypes(left);\n const elt = this.parseMaybeDefault(left.start, left.loc.start, left);\n if (decorators.length) {\n left.decorators = decorators;\n }\n return elt;\n }\n\n parseAssignableListItemTypes(param: Pattern): Pattern {\n return param;\n }\n\n // Parses assignment pattern around given atom if possible.\n\n parseMaybeDefault(\n startPos?: ?number,\n startLoc?: ?Position,\n left?: ?Pattern,\n ): Pattern {\n startLoc = startLoc || this.state.startLoc;\n startPos = startPos || this.state.start;\n left = left || this.parseBindingAtom();\n if (!this.eat(tt.eq)) return left;\n\n const node = this.startNodeAt(startPos, startLoc);\n node.left = left;\n node.right = this.parseMaybeAssign();\n return this.finishNode(node, \"AssignmentPattern\");\n }\n\n // Verify that a node is an lval — something that can be assigned\n // to.\n\n checkLVal(\n expr: Expression,\n bindingType: BindingTypes = BIND_NONE,\n checkClashes: ?{ [key: string]: boolean },\n contextDescription: string,\n disallowLetBinding?: boolean,\n strictModeChanged?: boolean = false,\n ): void {\n switch (expr.type) {\n case \"Identifier\":\n if (\n this.state.strict &&\n // \"Global\" reserved words have already been checked by parseIdentifier,\n // unless they have been found in the id or parameters of a strict-mode\n // function in a sloppy context.\n (strictModeChanged\n ? isStrictBindReservedWord(expr.name, this.inModule)\n : isStrictBindOnlyReservedWord(expr.name))\n ) {\n this.raise(\n expr.start,\n `${bindingType === BIND_NONE ? \"Assigning to\" : \"Binding\"} '${\n expr.name\n }' in strict mode`,\n );\n }\n\n if (checkClashes) {\n // we need to prefix this with an underscore for the cases where we have a key of\n // `__proto__`. there's a bug in old V8 where the following wouldn't work:\n //\n // > var obj = Object.create(null);\n // undefined\n // > obj.__proto__\n // null\n // > obj.__proto__ = true;\n // true\n // > obj.__proto__\n // null\n const key = `_${expr.name}`;\n\n if (checkClashes[key]) {\n this.raise(expr.start, \"Argument name clash\");\n } else {\n checkClashes[key] = true;\n }\n }\n if (disallowLetBinding && expr.name === \"let\") {\n this.raise(\n expr.start,\n \"'let' is not allowed to be used as a name in 'let' or 'const' declarations.\",\n );\n }\n if (!(bindingType & BIND_NONE)) {\n this.scope.declareName(expr.name, bindingType, expr.start);\n }\n break;\n\n case \"MemberExpression\":\n if (bindingType !== BIND_NONE) {\n this.raise(expr.start, \"Binding member expression\");\n }\n break;\n\n case \"ObjectPattern\":\n for (let prop of expr.properties) {\n if (prop.type === \"ObjectProperty\") prop = prop.value;\n // If we find here an ObjectMethod, it's because this was originally\n // an ObjectExpression which has then been converted.\n // toAssignable already reported this error with a nicer message.\n else if (prop.type === \"ObjectMethod\") continue;\n\n this.checkLVal(\n prop,\n bindingType,\n checkClashes,\n \"object destructuring pattern\",\n disallowLetBinding,\n );\n }\n break;\n\n case \"ArrayPattern\":\n for (const elem of expr.elements) {\n if (elem) {\n this.checkLVal(\n elem,\n bindingType,\n checkClashes,\n \"array destructuring pattern\",\n disallowLetBinding,\n );\n }\n }\n break;\n\n case \"AssignmentPattern\":\n this.checkLVal(\n expr.left,\n bindingType,\n checkClashes,\n \"assignment pattern\",\n );\n break;\n\n case \"RestElement\":\n this.checkLVal(\n expr.argument,\n bindingType,\n checkClashes,\n \"rest element\",\n );\n break;\n\n case \"ParenthesizedExpression\":\n this.checkLVal(\n expr.expression,\n bindingType,\n checkClashes,\n \"parenthesized expression\",\n );\n break;\n\n default: {\n const message =\n (bindingType === BIND_NONE\n ? \"Invalid\"\n : /* istanbul ignore next */ \"Binding invalid\") +\n \" left-hand side\" +\n (contextDescription\n ? \" in \" + contextDescription\n : /* istanbul ignore next */ \"expression\");\n this.raise(expr.start, message);\n }\n }\n }\n\n checkToRestConversion(node: SpreadElement): void {\n if (\n node.argument.type !== \"Identifier\" &&\n node.argument.type !== \"MemberExpression\"\n ) {\n this.raise(node.argument.start, \"Invalid rest operator's argument\");\n }\n }\n\n checkCommaAfterRest(close: $Values<typeof charCodes>): void {\n if (this.match(tt.comma)) {\n if (this.lookaheadCharCode() === close) {\n this.raiseTrailingCommaAfterRest(this.state.start);\n } else {\n this.raiseRestNotLast(this.state.start);\n }\n }\n }\n\n raiseRestNotLast(pos: number) {\n throw this.raise(pos, `Rest element must be last element`);\n }\n\n raiseTrailingCommaAfterRest(pos: number) {\n this.raise(pos, `Unexpected trailing comma after rest element`);\n }\n}\n","// @flow\n\n// A recursive descent parser operates by defining functions for all\n// syntactic elements, and recursively calling those, each function\n// advancing the input stream and returning an AST node. Precedence\n// of constructs (for example, the fact that `!x[1]` means `!(x[1])`\n// instead of `(!x)[1]` is handled by the fact that the parser\n// function that parses unary prefix operators is called first, and\n// in turn calls the function that parses `[]` subscripts — that\n// way, it'll receive the node for `x[1]` already parsed, and wraps\n// *that* in the unary operator node.\n//\n// Acorn uses an [operator precedence parser][opp] to handle binary\n// operator precedence, because it is much more compact than using\n// the technique outlined above, which uses different, nesting\n// functions to specify precedence, for all of the ten binary\n// precedence levels that JavaScript defines.\n//\n// [opp]: http://en.wikipedia.org/wiki/Operator-precedence_parser\n\nimport { types as tt, type TokenType } from \"../tokenizer/types\";\nimport { types as ct } from \"../tokenizer/context\";\nimport * as N from \"../types\";\nimport LValParser from \"./lval\";\nimport {\n isKeyword,\n isReservedWord,\n isStrictReservedWord,\n isStrictBindReservedWord,\n} from \"../util/identifier\";\nimport type { Pos, Position } from \"../util/location\";\nimport * as charCodes from \"charcodes\";\nimport {\n BIND_OUTSIDE,\n BIND_VAR,\n functionFlags,\n SCOPE_ARROW,\n SCOPE_CLASS,\n SCOPE_DIRECT_SUPER,\n SCOPE_SUPER,\n SCOPE_PROGRAM,\n SCOPE_ASYNC,\n} from \"../util/scopeflags\";\n\nexport default class ExpressionParser extends LValParser {\n // Forward-declaration: defined in statement.js\n +parseBlock: (\n allowDirectives?: boolean,\n createNewLexicalScope?: boolean,\n ) => N.BlockStatement;\n +parseClass: (\n node: N.Class,\n isStatement: boolean,\n optionalId?: boolean,\n ) => N.Class;\n +parseDecorators: (allowExport?: boolean) => void;\n +parseFunction: <T: N.NormalFunction>(\n node: T,\n statement?: number,\n allowExpressionBody?: boolean,\n isAsync?: boolean,\n ) => T;\n +parseFunctionParams: (node: N.Function, allowModifiers?: boolean) => void;\n +takeDecorators: (node: N.HasDecorators) => void;\n\n // Check if property __proto__ has been used more than once.\n // If the expression is a destructuring assignment, then __proto__ may appear\n // multiple times. Otherwise, __proto__ is a duplicated key.\n\n checkDuplicatedProto(\n prop: N.ObjectMember | N.SpreadElement,\n protoRef: { used: boolean, start?: number },\n ): void {\n if (\n prop.type === \"SpreadElement\" ||\n prop.computed ||\n prop.kind ||\n // $FlowIgnore\n prop.shorthand\n ) {\n return;\n }\n\n const key = prop.key;\n // It is either an Identifier or a String/NumericLiteral\n const name = key.type === \"Identifier\" ? key.name : String(key.value);\n\n if (name === \"__proto__\") {\n // Store the first redefinition's position\n if (protoRef.used && !protoRef.start) {\n protoRef.start = key.start;\n }\n\n protoRef.used = true;\n }\n }\n\n // Convenience method to parse an Expression only\n getExpression(): N.Expression {\n let scopeFlags = SCOPE_PROGRAM;\n if (this.hasPlugin(\"topLevelAwait\") && this.inModule) {\n scopeFlags |= SCOPE_ASYNC;\n }\n this.scope.enter(scopeFlags);\n this.nextToken();\n const expr = this.parseExpression();\n if (!this.match(tt.eof)) {\n this.unexpected();\n }\n expr.comments = this.state.comments;\n expr.errors = this.state.errors;\n return expr;\n }\n\n // ### Expression parsing\n\n // These nest, from the most general expression type at the top to\n // 'atomic', nondivisible expression types at the bottom. Most of\n // the functions will simply let the function (s) below them parse,\n // and, *if* the syntactic construct they handle is present, wrap\n // the AST node that the inner parser gave them in another node.\n\n // Parse a full expression. The optional arguments are used to\n // forbid the `in` operator (in for loops initialization expressions)\n // and provide reference for storing '=' operator inside shorthand\n // property assignment in contexts where both object expression\n // and object pattern might appear (so it's possible to raise\n // delayed syntax error at correct position).\n\n parseExpression(noIn?: boolean, refShorthandDefaultPos?: Pos): N.Expression {\n const startPos = this.state.start;\n const startLoc = this.state.startLoc;\n const expr = this.parseMaybeAssign(noIn, refShorthandDefaultPos);\n if (this.match(tt.comma)) {\n const node = this.startNodeAt(startPos, startLoc);\n node.expressions = [expr];\n while (this.eat(tt.comma)) {\n node.expressions.push(\n this.parseMaybeAssign(noIn, refShorthandDefaultPos),\n );\n }\n this.toReferencedList(node.expressions);\n return this.finishNode(node, \"SequenceExpression\");\n }\n return expr;\n }\n\n // Parse an assignment expression. This includes applications of\n // operators like `+=`.\n\n parseMaybeAssign(\n noIn?: ?boolean,\n refShorthandDefaultPos?: ?Pos,\n afterLeftParse?: Function,\n refNeedsArrowPos?: ?Pos,\n ): N.Expression {\n const startPos = this.state.start;\n const startLoc = this.state.startLoc;\n if (this.isContextual(\"yield\")) {\n if (this.scope.inGenerator) {\n let left = this.parseYield(noIn);\n if (afterLeftParse) {\n left = afterLeftParse.call(this, left, startPos, startLoc);\n }\n return left;\n } else {\n // The tokenizer will assume an expression is allowed after\n // `yield`, but this isn't that kind of yield\n this.state.exprAllowed = false;\n }\n }\n\n let failOnShorthandAssign;\n if (refShorthandDefaultPos) {\n failOnShorthandAssign = false;\n } else {\n refShorthandDefaultPos = { start: 0 };\n failOnShorthandAssign = true;\n }\n\n if (this.match(tt.parenL) || this.match(tt.name)) {\n this.state.potentialArrowAt = this.state.start;\n }\n\n let left = this.parseMaybeConditional(\n noIn,\n refShorthandDefaultPos,\n refNeedsArrowPos,\n );\n if (afterLeftParse) {\n left = afterLeftParse.call(this, left, startPos, startLoc);\n }\n if (this.state.type.isAssign) {\n const node = this.startNodeAt(startPos, startLoc);\n const operator = this.state.value;\n node.operator = operator;\n\n if (operator === \"??=\") {\n this.expectPlugin(\"logicalAssignment\");\n }\n if (operator === \"||=\" || operator === \"&&=\") {\n this.expectPlugin(\"logicalAssignment\");\n }\n node.left = this.match(tt.eq)\n ? this.toAssignable(left, undefined, \"assignment expression\")\n : left;\n\n if (refShorthandDefaultPos.start >= node.left.start) {\n refShorthandDefaultPos.start = 0; // reset because shorthand default was used correctly\n }\n\n this.checkLVal(left, undefined, undefined, \"assignment expression\");\n\n this.next();\n node.right = this.parseMaybeAssign(noIn);\n return this.finishNode(node, \"AssignmentExpression\");\n } else if (failOnShorthandAssign && refShorthandDefaultPos.start) {\n this.unexpected(refShorthandDefaultPos.start);\n }\n\n return left;\n }\n\n // Parse a ternary conditional (`?:`) operator.\n\n parseMaybeConditional(\n noIn: ?boolean,\n refShorthandDefaultPos: Pos,\n refNeedsArrowPos?: ?Pos,\n ): N.Expression {\n const startPos = this.state.start;\n const startLoc = this.state.startLoc;\n const potentialArrowAt = this.state.potentialArrowAt;\n const expr = this.parseExprOps(noIn, refShorthandDefaultPos);\n\n if (\n expr.type === \"ArrowFunctionExpression\" &&\n expr.start === potentialArrowAt\n ) {\n return expr;\n }\n if (refShorthandDefaultPos && refShorthandDefaultPos.start) return expr;\n\n return this.parseConditional(\n expr,\n noIn,\n startPos,\n startLoc,\n refNeedsArrowPos,\n );\n }\n\n parseConditional(\n expr: N.Expression,\n noIn: ?boolean,\n startPos: number,\n startLoc: Position,\n // FIXME: Disabling this for now since can't seem to get it to play nicely\n // eslint-disable-next-line no-unused-vars\n refNeedsArrowPos?: ?Pos,\n ): N.Expression {\n if (this.eat(tt.question)) {\n const node = this.startNodeAt(startPos, startLoc);\n node.test = expr;\n node.consequent = this.parseMaybeAssign();\n this.expect(tt.colon);\n node.alternate = this.parseMaybeAssign(noIn);\n return this.finishNode(node, \"ConditionalExpression\");\n }\n return expr;\n }\n\n // Start the precedence parser.\n\n parseExprOps(noIn: ?boolean, refShorthandDefaultPos: Pos): N.Expression {\n const startPos = this.state.start;\n const startLoc = this.state.startLoc;\n const potentialArrowAt = this.state.potentialArrowAt;\n const expr = this.parseMaybeUnary(refShorthandDefaultPos);\n\n if (\n expr.type === \"ArrowFunctionExpression\" &&\n expr.start === potentialArrowAt\n ) {\n return expr;\n }\n if (refShorthandDefaultPos && refShorthandDefaultPos.start) {\n return expr;\n }\n\n return this.parseExprOp(expr, startPos, startLoc, -1, noIn);\n }\n\n // Parse binary operators with the operator precedence parsing\n // algorithm. `left` is the left-hand side of the operator.\n // `minPrec` provides context that allows the function to stop and\n // defer further parser to one of its callers when it encounters an\n // operator that has a lower precedence than the set it is parsing.\n\n parseExprOp(\n left: N.Expression,\n leftStartPos: number,\n leftStartLoc: Position,\n minPrec: number,\n noIn: ?boolean,\n ): N.Expression {\n const prec = this.state.type.binop;\n if (prec != null && (!noIn || !this.match(tt._in))) {\n if (prec > minPrec) {\n const operator = this.state.value;\n if (operator === \"|>\" && this.state.inFSharpPipelineDirectBody) {\n return left;\n }\n const node = this.startNodeAt(leftStartPos, leftStartLoc);\n node.left = left;\n node.operator = operator;\n if (\n operator === \"**\" &&\n left.type === \"UnaryExpression\" &&\n (this.options.createParenthesizedExpressions ||\n !(left.extra && left.extra.parenthesized))\n ) {\n this.raise(\n left.argument.start,\n \"Illegal expression. Wrap left hand side or entire exponentiation in parentheses.\",\n );\n }\n\n const op = this.state.type;\n\n if (op === tt.pipeline) {\n this.expectPlugin(\"pipelineOperator\");\n this.state.inPipeline = true;\n this.checkPipelineAtInfixOperator(left, leftStartPos);\n }\n\n this.next();\n\n if (\n op === tt.pipeline &&\n this.getPluginOption(\"pipelineOperator\", \"proposal\") === \"minimal\"\n ) {\n if (\n this.match(tt.name) &&\n this.state.value === \"await\" &&\n this.scope.inAsync\n ) {\n throw this.raise(\n this.state.start,\n `Unexpected \"await\" after pipeline body; await must have parentheses in minimal proposal`,\n );\n }\n }\n\n node.right = this.parseExprOpRightExpr(op, prec, noIn);\n\n /* this check is for all ?? operators\n * a ?? b && c for this example\n * b && c => This is considered as a logical expression in the ast tree\n * a => Identifier\n * so for ?? operator we need to check in this case the right expression to have parenthesis\n * second case a && b ?? c\n * here a && b => This is considered as a logical expression in the ast tree\n * c => identifier\n * so now here for ?? operator we need to check the left expression to have parenthesis\n * if the parenthesis is missing we raise an error and throw it\n */\n if (op === tt.nullishCoalescing) {\n if (\n left.type === \"LogicalExpression\" &&\n left.operator !== \"??\" &&\n !(left.extra && left.extra.parenthesized)\n ) {\n throw this.raise(\n left.start,\n `Nullish coalescing operator(??) requires parens when mixing with logical operators`,\n );\n } else if (\n node.right.type === \"LogicalExpression\" &&\n node.right.operator !== \"??\" &&\n !(node.right.extra && node.right.extra.parenthesized)\n ) {\n throw this.raise(\n node.right.start,\n `Nullish coalescing operator(??) requires parens when mixing with logical operators`,\n );\n }\n }\n\n this.finishNode(\n node,\n op === tt.logicalOR ||\n op === tt.logicalAND ||\n op === tt.nullishCoalescing\n ? \"LogicalExpression\"\n : \"BinaryExpression\",\n );\n\n return this.parseExprOp(\n node,\n leftStartPos,\n leftStartLoc,\n minPrec,\n noIn,\n );\n }\n }\n return left;\n }\n\n // Helper function for `parseExprOp`. Parse the right-hand side of binary-\n // operator expressions, then apply any operator-specific functions.\n\n parseExprOpRightExpr(\n op: TokenType,\n prec: number,\n noIn: ?boolean,\n ): N.Expression {\n const startPos = this.state.start;\n const startLoc = this.state.startLoc;\n switch (op) {\n case tt.pipeline:\n switch (this.getPluginOption(\"pipelineOperator\", \"proposal\")) {\n case \"smart\":\n return this.withTopicPermittingContext(() => {\n return this.parseSmartPipelineBody(\n this.parseExprOpBaseRightExpr(op, prec, noIn),\n startPos,\n startLoc,\n );\n });\n case \"fsharp\":\n return this.withSoloAwaitPermittingContext(() => {\n return this.parseFSharpPipelineBody(prec, noIn);\n });\n }\n // falls through\n\n default:\n return this.parseExprOpBaseRightExpr(op, prec, noIn);\n }\n }\n\n // Helper function for `parseExprOpRightExpr`. Parse the right-hand side of\n // binary-operator expressions without applying any operator-specific functions.\n\n parseExprOpBaseRightExpr(\n op: TokenType,\n prec: number,\n noIn: ?boolean,\n ): N.Expression {\n const startPos = this.state.start;\n const startLoc = this.state.startLoc;\n\n return this.parseExprOp(\n this.parseMaybeUnary(),\n startPos,\n startLoc,\n op.rightAssociative ? prec - 1 : prec,\n noIn,\n );\n }\n\n // Parse unary operators, both prefix and postfix.\n\n parseMaybeUnary(refShorthandDefaultPos: ?Pos): N.Expression {\n if (this.isContextual(\"await\") && this.isAwaitAllowed()) {\n return this.parseAwait();\n } else if (this.state.type.prefix) {\n const node = this.startNode();\n const update = this.match(tt.incDec);\n node.operator = this.state.value;\n node.prefix = true;\n\n if (node.operator === \"throw\") {\n this.expectPlugin(\"throwExpressions\");\n }\n this.next();\n\n node.argument = this.parseMaybeUnary();\n\n if (refShorthandDefaultPos && refShorthandDefaultPos.start) {\n this.unexpected(refShorthandDefaultPos.start);\n }\n\n if (update) {\n this.checkLVal(node.argument, undefined, undefined, \"prefix operation\");\n } else if (this.state.strict && node.operator === \"delete\") {\n const arg = node.argument;\n\n if (arg.type === \"Identifier\") {\n this.raise(node.start, \"Deleting local variable in strict mode\");\n } else if (\n arg.type === \"MemberExpression\" &&\n arg.property.type === \"PrivateName\"\n ) {\n this.raise(node.start, \"Deleting a private field is not allowed\");\n }\n }\n\n return this.finishNode(\n node,\n update ? \"UpdateExpression\" : \"UnaryExpression\",\n );\n }\n\n const startPos = this.state.start;\n const startLoc = this.state.startLoc;\n let expr = this.parseExprSubscripts(refShorthandDefaultPos);\n if (refShorthandDefaultPos && refShorthandDefaultPos.start) return expr;\n while (this.state.type.postfix && !this.canInsertSemicolon()) {\n const node = this.startNodeAt(startPos, startLoc);\n node.operator = this.state.value;\n node.prefix = false;\n node.argument = expr;\n this.checkLVal(expr, undefined, undefined, \"postfix operation\");\n this.next();\n expr = this.finishNode(node, \"UpdateExpression\");\n }\n return expr;\n }\n\n // Parse call, dot, and `[]`-subscript expressions.\n\n parseExprSubscripts(refShorthandDefaultPos: ?Pos): N.Expression {\n const startPos = this.state.start;\n const startLoc = this.state.startLoc;\n const potentialArrowAt = this.state.potentialArrowAt;\n const expr = this.parseExprAtom(refShorthandDefaultPos);\n\n if (\n expr.type === \"ArrowFunctionExpression\" &&\n expr.start === potentialArrowAt\n ) {\n return expr;\n }\n\n if (refShorthandDefaultPos && refShorthandDefaultPos.start) {\n return expr;\n }\n\n return this.parseSubscripts(expr, startPos, startLoc);\n }\n\n parseSubscripts(\n base: N.Expression,\n startPos: number,\n startLoc: Position,\n noCalls?: ?boolean,\n ): N.Expression {\n const state = {\n optionalChainMember: false,\n maybeAsyncArrow: this.atPossibleAsync(base),\n stop: false,\n };\n do {\n base = this.parseSubscript(base, startPos, startLoc, noCalls, state);\n\n // After parsing a subscript, this isn't \"async\" for sure.\n state.maybeAsyncArrow = false;\n } while (!state.stop);\n return base;\n }\n\n /**\n * @param state Set 'state.stop = true' to indicate that we should stop parsing subscripts.\n * state.optionalChainMember to indicate that the member is currently in OptionalChain\n */\n parseSubscript(\n base: N.Expression,\n startPos: number,\n startLoc: Position,\n noCalls: ?boolean,\n state: N.ParseSubscriptState,\n ): N.Expression {\n if (!noCalls && this.eat(tt.doubleColon)) {\n const node = this.startNodeAt(startPos, startLoc);\n node.object = base;\n node.callee = this.parseNoCallExpr();\n state.stop = true;\n return this.parseSubscripts(\n this.finishNode(node, \"BindExpression\"),\n startPos,\n startLoc,\n noCalls,\n );\n }\n let optional = false;\n if (this.match(tt.questionDot)) {\n state.optionalChainMember = optional = true;\n if (noCalls && this.lookaheadCharCode() === charCodes.leftParenthesis) {\n state.stop = true;\n return base;\n }\n this.next();\n }\n const computed = this.eat(tt.bracketL);\n if (\n (optional && !this.match(tt.parenL) && !this.match(tt.backQuote)) ||\n computed ||\n this.eat(tt.dot)\n ) {\n const node = this.startNodeAt(startPos, startLoc);\n node.object = base;\n node.property = computed\n ? this.parseExpression()\n : optional\n ? this.parseIdentifier(true)\n : this.parseMaybePrivateName(true);\n node.computed = computed;\n\n if (node.property.type === \"PrivateName\") {\n if (node.object.type === \"Super\") {\n this.raise(startPos, \"Private fields can't be accessed on super\");\n }\n this.classScope.usePrivateName(\n node.property.id.name,\n node.property.start,\n );\n }\n\n if (computed) {\n this.expect(tt.bracketR);\n }\n\n if (state.optionalChainMember) {\n node.optional = optional;\n return this.finishNode(node, \"OptionalMemberExpression\");\n } else {\n return this.finishNode(node, \"MemberExpression\");\n }\n } else if (!noCalls && this.match(tt.parenL)) {\n const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;\n const oldYieldPos = this.state.yieldPos;\n const oldAwaitPos = this.state.awaitPos;\n this.state.maybeInArrowParameters = true;\n this.state.yieldPos = -1;\n this.state.awaitPos = -1;\n\n this.next();\n\n let node = this.startNodeAt(startPos, startLoc);\n node.callee = base;\n\n if (optional) {\n node.optional = true;\n node.arguments = this.parseCallExpressionArguments(tt.parenR, false);\n } else {\n node.arguments = this.parseCallExpressionArguments(\n tt.parenR,\n state.maybeAsyncArrow,\n base.type === \"Import\",\n base.type !== \"Super\",\n node,\n );\n }\n this.finishCallExpression(node, state.optionalChainMember);\n\n if (state.maybeAsyncArrow && this.shouldParseAsyncArrow() && !optional) {\n state.stop = true;\n\n node = this.parseAsyncArrowFromCallExpression(\n this.startNodeAt(startPos, startLoc),\n node,\n );\n this.checkYieldAwaitInDefaultParams();\n this.state.yieldPos = oldYieldPos;\n this.state.awaitPos = oldAwaitPos;\n } else {\n this.toReferencedListDeep(node.arguments);\n\n // We keep the old value if it isn't null, for cases like\n // (x = async(yield)) => {}\n //\n // Hi developer of the future :) If you are implementing generator\n // arrow functions, please read the note below about \"await\" and\n // verify if the same logic is needed for yield.\n if (oldYieldPos !== -1) this.state.yieldPos = oldYieldPos;\n\n // Await is trickier than yield. When parsing a possible arrow function\n // (e.g. something starting with `async(`) we don't know if its possible\n // parameters will actually be inside an async arrow function or if it is\n // a normal call expression.\n // If it ended up being a call expression, if we are in a context where\n // await expression are disallowed (and thus \"await\" is an identifier)\n // we must be careful not to leak this.state.awaitPos to an even outer\n // context, where \"await\" could not be an identifier.\n // For example, this code is valid because \"await\" isn't directly inside\n // an async function:\n //\n // async function a() {\n // function b(param = async (await)) {\n // }\n // }\n //\n if (\n (!this.isAwaitAllowed() && !oldMaybeInArrowParameters) ||\n oldAwaitPos !== -1\n ) {\n this.state.awaitPos = oldAwaitPos;\n }\n }\n\n this.state.maybeInArrowParameters = oldMaybeInArrowParameters;\n\n return node;\n } else if (this.match(tt.backQuote)) {\n return this.parseTaggedTemplateExpression(\n startPos,\n startLoc,\n base,\n state,\n );\n } else {\n state.stop = true;\n return base;\n }\n }\n\n parseTaggedTemplateExpression(\n startPos: number,\n startLoc: Position,\n base: N.Expression,\n state: N.ParseSubscriptState,\n typeArguments?: ?N.TsTypeParameterInstantiation,\n ): N.TaggedTemplateExpression {\n const node: N.TaggedTemplateExpression = this.startNodeAt(\n startPos,\n startLoc,\n );\n node.tag = base;\n node.quasi = this.parseTemplate(true);\n if (typeArguments) node.typeParameters = typeArguments;\n if (state.optionalChainMember) {\n this.raise(\n startPos,\n \"Tagged Template Literals are not allowed in optionalChain\",\n );\n }\n return this.finishNode(node, \"TaggedTemplateExpression\");\n }\n\n atPossibleAsync(base: N.Expression): boolean {\n return (\n base.type === \"Identifier\" &&\n base.name === \"async\" &&\n this.state.lastTokEnd === base.end &&\n !this.canInsertSemicolon() &&\n this.input.slice(base.start, base.end) === \"async\"\n );\n }\n\n finishCallExpression<T: N.CallExpression | N.OptionalCallExpression>(\n node: T,\n optional: boolean,\n ): N.Expression {\n if (node.callee.type === \"Import\") {\n if (node.arguments.length !== 1) {\n this.raise(node.start, \"import() requires exactly one argument\");\n } else {\n const importArg = node.arguments[0];\n if (importArg && importArg.type === \"SpreadElement\") {\n this.raise(importArg.start, \"... is not allowed in import()\");\n }\n }\n }\n return this.finishNode(\n node,\n optional ? \"OptionalCallExpression\" : \"CallExpression\",\n );\n }\n\n parseCallExpressionArguments(\n close: TokenType,\n possibleAsyncArrow: boolean,\n dynamicImport?: boolean,\n allowPlaceholder?: boolean,\n nodeForExtra?: ?N.Node,\n ): $ReadOnlyArray<?N.Expression> {\n const elts = [];\n let innerParenStart;\n let first = true;\n const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody;\n this.state.inFSharpPipelineDirectBody = false;\n\n while (!this.eat(close)) {\n if (first) {\n first = false;\n } else {\n this.expect(tt.comma);\n if (this.match(close)) {\n if (dynamicImport) {\n this.raise(\n this.state.lastTokStart,\n \"Trailing comma is disallowed inside import(...) arguments\",\n );\n }\n if (nodeForExtra) {\n this.addExtra(\n nodeForExtra,\n \"trailingComma\",\n this.state.lastTokStart,\n );\n }\n this.next();\n break;\n }\n }\n\n // we need to make sure that if this is an async arrow functions,\n // that we don't allow inner parens inside the params\n if (this.match(tt.parenL) && !innerParenStart) {\n innerParenStart = this.state.start;\n }\n\n elts.push(\n this.parseExprListItem(\n false,\n possibleAsyncArrow ? { start: 0 } : undefined,\n possibleAsyncArrow ? { start: 0 } : undefined,\n allowPlaceholder,\n ),\n );\n }\n\n // we found an async arrow function so let's not allow any inner parens\n if (possibleAsyncArrow && innerParenStart && this.shouldParseAsyncArrow()) {\n this.unexpected();\n }\n\n this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;\n\n return elts;\n }\n\n shouldParseAsyncArrow(): boolean {\n return this.match(tt.arrow) && !this.canInsertSemicolon();\n }\n\n parseAsyncArrowFromCallExpression(\n node: N.ArrowFunctionExpression,\n call: N.CallExpression,\n ): N.ArrowFunctionExpression {\n this.expect(tt.arrow);\n this.parseArrowExpression(\n node,\n call.arguments,\n true,\n call.extra?.trailingComma,\n );\n return node;\n }\n\n // Parse a no-call expression (like argument of `new` or `::` operators).\n\n parseNoCallExpr(): N.Expression {\n const startPos = this.state.start;\n const startLoc = this.state.startLoc;\n return this.parseSubscripts(this.parseExprAtom(), startPos, startLoc, true);\n }\n\n // Parse an atomic expression — either a single token that is an\n // expression, an expression started by a keyword like `function` or\n // `new`, or an expression wrapped in punctuation like `()`, `[]`,\n // or `{}`.\n\n parseExprAtom(refShorthandDefaultPos?: ?Pos): N.Expression {\n // If a division operator appears in an expression position, the\n // tokenizer got confused, and we force it to read a regexp instead.\n if (this.state.type === tt.slash) this.readRegexp();\n\n const canBeArrow = this.state.potentialArrowAt === this.state.start;\n let node;\n\n switch (this.state.type) {\n case tt._super:\n node = this.startNode();\n this.next();\n if (\n this.match(tt.parenL) &&\n !this.scope.allowDirectSuper &&\n !this.options.allowSuperOutsideMethod\n ) {\n this.raise(\n node.start,\n \"super() is only valid inside a class constructor of a subclass. \" +\n \"Maybe a typo in the method name ('constructor') or not extending another class?\",\n );\n } else if (\n !this.scope.allowSuper &&\n !this.options.allowSuperOutsideMethod\n ) {\n this.raise(\n node.start,\n \"super is only allowed in object methods and classes\",\n );\n }\n\n if (\n !this.match(tt.parenL) &&\n !this.match(tt.bracketL) &&\n !this.match(tt.dot)\n ) {\n this.raise(\n node.start,\n \"super can only be used with function calls (i.e. super()) or \" +\n \"in property accesses (i.e. super.prop or super[prop])\",\n );\n }\n\n return this.finishNode(node, \"Super\");\n\n case tt._import:\n node = this.startNode();\n this.next();\n\n if (this.match(tt.dot)) {\n return this.parseImportMetaProperty(node);\n }\n\n if (!this.match(tt.parenL)) {\n this.raise(\n this.state.lastTokStart,\n \"import can only be used in import() or import.meta\",\n );\n }\n return this.finishNode(node, \"Import\");\n case tt._this:\n node = this.startNode();\n this.next();\n return this.finishNode(node, \"ThisExpression\");\n\n case tt.name: {\n node = this.startNode();\n const containsEsc = this.state.containsEsc;\n const id = this.parseIdentifier();\n\n if (\n !containsEsc &&\n id.name === \"async\" &&\n this.match(tt._function) &&\n !this.canInsertSemicolon()\n ) {\n const last = this.state.context.length - 1;\n if (this.state.context[last] !== ct.functionStatement) {\n // Since \"async\" is an identifier and normally identifiers\n // can't be followed by expression, the tokenizer assumes\n // that \"function\" starts a statement.\n // Fixing it in the tokenizer would mean tracking not only the\n // previous token (\"async\"), but also the one before to know\n // its beforeExpr value.\n // It's easier and more efficient to adjust the context here.\n throw new Error(\"Internal error\");\n }\n this.state.context[last] = ct.functionExpression;\n\n this.next();\n return this.parseFunction(node, undefined, true);\n } else if (\n canBeArrow &&\n !containsEsc &&\n id.name === \"async\" &&\n this.match(tt.name) &&\n !this.canInsertSemicolon()\n ) {\n const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;\n const oldYieldPos = this.state.yieldPos;\n const oldAwaitPos = this.state.awaitPos;\n this.state.maybeInArrowParameters = true;\n this.state.yieldPos = -1;\n this.state.awaitPos = -1;\n const params = [this.parseIdentifier()];\n this.expect(tt.arrow);\n this.checkYieldAwaitInDefaultParams();\n this.state.maybeInArrowParameters = oldMaybeInArrowParameters;\n this.state.yieldPos = oldYieldPos;\n this.state.awaitPos = oldAwaitPos;\n // let foo = async bar => {};\n this.parseArrowExpression(node, params, true);\n return node;\n }\n\n if (canBeArrow && this.match(tt.arrow) && !this.canInsertSemicolon()) {\n this.next();\n this.parseArrowExpression(node, [id], false);\n return node;\n }\n\n return id;\n }\n\n case tt._do: {\n this.expectPlugin(\"doExpressions\");\n const node = this.startNode();\n this.next();\n const oldLabels = this.state.labels;\n this.state.labels = [];\n node.body = this.parseBlock();\n this.state.labels = oldLabels;\n return this.finishNode(node, \"DoExpression\");\n }\n\n case tt.regexp: {\n const value = this.state.value;\n node = this.parseLiteral(value.value, \"RegExpLiteral\");\n node.pattern = value.pattern;\n node.flags = value.flags;\n return node;\n }\n\n case tt.num:\n return this.parseLiteral(this.state.value, \"NumericLiteral\");\n\n case tt.bigint:\n return this.parseLiteral(this.state.value, \"BigIntLiteral\");\n\n case tt.string:\n return this.parseLiteral(this.state.value, \"StringLiteral\");\n\n case tt._null:\n node = this.startNode();\n this.next();\n return this.finishNode(node, \"NullLiteral\");\n\n case tt._true:\n case tt._false:\n return this.parseBooleanLiteral();\n\n case tt.parenL:\n return this.parseParenAndDistinguishExpression(canBeArrow);\n\n case tt.bracketL: {\n const oldInFSharpPipelineDirectBody = this.state\n .inFSharpPipelineDirectBody;\n this.state.inFSharpPipelineDirectBody = false;\n node = this.startNode();\n this.next();\n node.elements = this.parseExprList(\n tt.bracketR,\n true,\n refShorthandDefaultPos,\n node,\n );\n if (!this.state.maybeInArrowParameters) {\n // This could be an array pattern:\n // ([a: string, b: string]) => {}\n // In this case, we don't have to call toReferencedList. We will\n // call it, if needed, when we are sure that it is a parenthesized\n // expression by calling toReferencedListDeep.\n this.toReferencedList(node.elements);\n }\n this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;\n return this.finishNode(node, \"ArrayExpression\");\n }\n case tt.braceL: {\n const oldInFSharpPipelineDirectBody = this.state\n .inFSharpPipelineDirectBody;\n this.state.inFSharpPipelineDirectBody = false;\n const ret = this.parseObj(false, refShorthandDefaultPos);\n this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;\n return ret;\n }\n case tt._function:\n return this.parseFunctionExpression();\n\n case tt.at:\n this.parseDecorators();\n\n case tt._class:\n node = this.startNode();\n this.takeDecorators(node);\n return this.parseClass(node, false);\n\n case tt._new:\n return this.parseNew();\n\n case tt.backQuote:\n return this.parseTemplate(false);\n\n case tt.doubleColon: {\n node = this.startNode();\n this.next();\n node.object = null;\n const callee = (node.callee = this.parseNoCallExpr());\n if (callee.type === \"MemberExpression\") {\n return this.finishNode(node, \"BindExpression\");\n } else {\n throw this.raise(\n callee.start,\n \"Binding should be performed on object property.\",\n );\n }\n }\n\n case tt.hash: {\n if (this.state.inPipeline) {\n node = this.startNode();\n\n if (\n this.getPluginOption(\"pipelineOperator\", \"proposal\") !== \"smart\"\n ) {\n this.raise(\n node.start,\n \"Primary Topic Reference found but pipelineOperator not passed 'smart' for 'proposal' option.\",\n );\n }\n\n this.next();\n\n if (!this.primaryTopicReferenceIsAllowedInCurrentTopicContext()) {\n this.raise(\n node.start,\n `Topic reference was used in a lexical context without topic binding`,\n );\n }\n\n this.registerTopicReference();\n return this.finishNode(node, \"PipelinePrimaryTopicReference\");\n }\n }\n\n default:\n throw this.unexpected();\n }\n }\n\n parseBooleanLiteral(): N.BooleanLiteral {\n const node = this.startNode();\n node.value = this.match(tt._true);\n this.next();\n return this.finishNode(node, \"BooleanLiteral\");\n }\n\n parseMaybePrivateName(\n isPrivateNameAllowed: boolean,\n ): N.PrivateName | N.Identifier {\n const isPrivate = this.match(tt.hash);\n\n if (isPrivate) {\n this.expectOnePlugin([\"classPrivateProperties\", \"classPrivateMethods\"]);\n if (!isPrivateNameAllowed) {\n this.raise(\n this.state.pos,\n \"Private names can only be used as the name of a class element (i.e. class C { #p = 42; #m() {} } )\\n or a property of member expression (i.e. this.#p).\",\n );\n }\n const node = this.startNode();\n this.next();\n this.assertNoSpace(\"Unexpected space between # and identifier\");\n node.id = this.parseIdentifier(true);\n return this.finishNode(node, \"PrivateName\");\n } else {\n return this.parseIdentifier(true);\n }\n }\n\n parseFunctionExpression(): N.FunctionExpression | N.MetaProperty {\n const node = this.startNode();\n\n // We do not do parseIdentifier here because when parseFunctionExpression\n // is called we already know that the current token is a \"name\" with the value \"function\"\n // This will improve perf a tiny little bit as we do not do validation but more importantly\n // here is that parseIdentifier will remove an item from the expression stack\n // if \"function\" or \"class\" is parsed as identifier (in objects e.g.), which should not happen here.\n let meta = this.startNode();\n this.next();\n meta = this.createIdentifier(meta, \"function\");\n\n if (this.scope.inGenerator && this.eat(tt.dot)) {\n return this.parseMetaProperty(node, meta, \"sent\");\n }\n return this.parseFunction(node);\n }\n\n parseMetaProperty(\n node: N.MetaProperty,\n meta: N.Identifier,\n propertyName: string,\n ): N.MetaProperty {\n node.meta = meta;\n\n if (meta.name === \"function\" && propertyName === \"sent\") {\n if (this.isContextual(propertyName)) {\n this.expectPlugin(\"functionSent\");\n } else if (!this.hasPlugin(\"functionSent\")) {\n // The code wasn't `function.sent` but just `function.`, so a simple error is less confusing.\n this.unexpected();\n }\n }\n\n const containsEsc = this.state.containsEsc;\n\n node.property = this.parseIdentifier(true);\n\n if (node.property.name !== propertyName || containsEsc) {\n this.raise(\n node.property.start,\n `The only valid meta property for ${meta.name} is ${meta.name}.${propertyName}`,\n );\n }\n\n return this.finishNode(node, \"MetaProperty\");\n }\n\n parseImportMetaProperty(node: N.MetaProperty): N.MetaProperty {\n const id = this.createIdentifier(this.startNodeAtNode(node), \"import\");\n this.expect(tt.dot);\n\n if (this.isContextual(\"meta\")) {\n this.expectPlugin(\"importMeta\");\n\n if (!this.inModule) {\n this.raise(\n id.start,\n `import.meta may appear only with 'sourceType: \"module\"'`,\n { code: \"BABEL_PARSER_SOURCETYPE_MODULE_REQUIRED\" },\n );\n }\n this.sawUnambiguousESM = true;\n } else if (!this.hasPlugin(\"importMeta\")) {\n this.raise(\n id.start,\n `Dynamic imports require a parameter: import('a.js')`,\n );\n }\n\n return this.parseMetaProperty(node, id, \"meta\");\n }\n\n parseLiteral<T: N.Literal>(\n value: any,\n type: /*T[\"kind\"]*/ string,\n startPos?: number,\n startLoc?: Position,\n ): T {\n startPos = startPos || this.state.start;\n startLoc = startLoc || this.state.startLoc;\n\n const node = this.startNodeAt(startPos, startLoc);\n this.addExtra(node, \"rawValue\", value);\n this.addExtra(node, \"raw\", this.input.slice(startPos, this.state.end));\n node.value = value;\n this.next();\n return this.finishNode(node, type);\n }\n\n parseParenAndDistinguishExpression(canBeArrow: boolean): N.Expression {\n const startPos = this.state.start;\n const startLoc = this.state.startLoc;\n\n let val;\n this.expect(tt.parenL);\n\n const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;\n const oldYieldPos = this.state.yieldPos;\n const oldAwaitPos = this.state.awaitPos;\n const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody;\n this.state.maybeInArrowParameters = true;\n this.state.yieldPos = -1;\n this.state.awaitPos = -1;\n this.state.inFSharpPipelineDirectBody = false;\n\n const innerStartPos = this.state.start;\n const innerStartLoc = this.state.startLoc;\n const exprList = [];\n const refShorthandDefaultPos = { start: 0 };\n const refNeedsArrowPos = { start: 0 };\n let first = true;\n let spreadStart;\n let optionalCommaStart;\n\n while (!this.match(tt.parenR)) {\n if (first) {\n first = false;\n } else {\n this.expect(tt.comma, refNeedsArrowPos.start || null);\n if (this.match(tt.parenR)) {\n optionalCommaStart = this.state.start;\n break;\n }\n }\n\n if (this.match(tt.ellipsis)) {\n const spreadNodeStartPos = this.state.start;\n const spreadNodeStartLoc = this.state.startLoc;\n spreadStart = this.state.start;\n exprList.push(\n this.parseParenItem(\n this.parseRestBinding(),\n spreadNodeStartPos,\n spreadNodeStartLoc,\n ),\n );\n\n this.checkCommaAfterRest(charCodes.rightParenthesis);\n\n break;\n } else {\n exprList.push(\n this.parseMaybeAssign(\n false,\n refShorthandDefaultPos,\n this.parseParenItem,\n refNeedsArrowPos,\n ),\n );\n }\n }\n\n const innerEndPos = this.state.start;\n const innerEndLoc = this.state.startLoc;\n this.expect(tt.parenR);\n\n this.state.maybeInArrowParameters = oldMaybeInArrowParameters;\n this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;\n\n let arrowNode = this.startNodeAt(startPos, startLoc);\n if (\n canBeArrow &&\n this.shouldParseArrow() &&\n (arrowNode = this.parseArrow(arrowNode))\n ) {\n this.checkYieldAwaitInDefaultParams();\n this.state.yieldPos = oldYieldPos;\n this.state.awaitPos = oldAwaitPos;\n for (const param of exprList) {\n if (param.extra && param.extra.parenthesized) {\n this.unexpected(param.extra.parenStart);\n }\n }\n\n this.parseArrowExpression(arrowNode, exprList, false);\n return arrowNode;\n }\n\n // We keep the old value if it isn't null, for cases like\n // (x = (yield)) => {}\n if (oldYieldPos !== -1) this.state.yieldPos = oldYieldPos;\n if (oldAwaitPos !== -1) this.state.awaitPos = oldAwaitPos;\n\n if (!exprList.length) {\n this.unexpected(this.state.lastTokStart);\n }\n if (optionalCommaStart) this.unexpected(optionalCommaStart);\n if (spreadStart) this.unexpected(spreadStart);\n if (refShorthandDefaultPos.start) {\n this.unexpected(refShorthandDefaultPos.start);\n }\n if (refNeedsArrowPos.start) this.unexpected(refNeedsArrowPos.start);\n\n this.toReferencedListDeep(exprList, /* isParenthesizedExpr */ true);\n if (exprList.length > 1) {\n val = this.startNodeAt(innerStartPos, innerStartLoc);\n val.expressions = exprList;\n this.finishNodeAt(val, \"SequenceExpression\", innerEndPos, innerEndLoc);\n } else {\n val = exprList[0];\n }\n\n if (!this.options.createParenthesizedExpressions) {\n this.addExtra(val, \"parenthesized\", true);\n this.addExtra(val, \"parenStart\", startPos);\n return val;\n }\n\n const parenExpression = this.startNodeAt(startPos, startLoc);\n parenExpression.expression = val;\n this.finishNode(parenExpression, \"ParenthesizedExpression\");\n return parenExpression;\n }\n\n shouldParseArrow(): boolean {\n return !this.canInsertSemicolon();\n }\n\n parseArrow(node: N.ArrowFunctionExpression): ?N.ArrowFunctionExpression {\n if (this.eat(tt.arrow)) {\n return node;\n }\n }\n\n parseParenItem(\n node: N.Expression,\n startPos: number, // eslint-disable-line no-unused-vars\n startLoc: Position, // eslint-disable-line no-unused-vars\n ): N.Expression {\n return node;\n }\n\n // New's precedence is slightly tricky. It must allow its argument to\n // be a `[]` or dot subscript expression, but not a call — at least,\n // not without wrapping it in parentheses. Thus, it uses the noCalls\n // argument to parseSubscripts to prevent it from consuming the\n // argument list.\n\n parseNew(): N.NewExpression | N.MetaProperty {\n const node = this.startNode();\n\n let meta = this.startNode();\n this.next();\n meta = this.createIdentifier(meta, \"new\");\n\n if (this.eat(tt.dot)) {\n const metaProp = this.parseMetaProperty(node, meta, \"target\");\n\n if (!this.scope.inNonArrowFunction && !this.scope.inClass) {\n let error = \"new.target can only be used in functions\";\n\n if (this.hasPlugin(\"classProperties\")) {\n error += \" or class properties\";\n }\n\n this.raise(metaProp.start, error);\n }\n\n return metaProp;\n }\n\n node.callee = this.parseNoCallExpr();\n\n if (node.callee.type === \"Import\") {\n this.raise(node.callee.start, \"Cannot use new with import(...)\");\n } else if (\n node.callee.type === \"OptionalMemberExpression\" ||\n node.callee.type === \"OptionalCallExpression\"\n ) {\n this.raise(\n this.state.lastTokEnd,\n \"constructors in/after an Optional Chain are not allowed\",\n );\n } else if (this.eat(tt.questionDot)) {\n this.raise(\n this.state.start,\n \"constructors in/after an Optional Chain are not allowed\",\n );\n }\n\n this.parseNewArguments(node);\n return this.finishNode(node, \"NewExpression\");\n }\n\n parseNewArguments(node: N.NewExpression): void {\n if (this.eat(tt.parenL)) {\n const args = this.parseExprList(tt.parenR);\n this.toReferencedList(args);\n // $FlowFixMe (parseExprList should be all non-null in this case)\n node.arguments = args;\n } else {\n node.arguments = [];\n }\n }\n\n // Parse template expression.\n\n parseTemplateElement(isTagged: boolean): N.TemplateElement {\n const elem = this.startNode();\n if (this.state.value === null) {\n if (!isTagged) {\n this.raise(this.state.start + 1, \"Invalid escape sequence in template\");\n }\n }\n elem.value = {\n raw: this.input\n .slice(this.state.start, this.state.end)\n .replace(/\\r\\n?/g, \"\\n\"),\n cooked: this.state.value,\n };\n this.next();\n elem.tail = this.match(tt.backQuote);\n return this.finishNode(elem, \"TemplateElement\");\n }\n\n parseTemplate(isTagged: boolean): N.TemplateLiteral {\n const node = this.startNode();\n this.next();\n node.expressions = [];\n let curElt = this.parseTemplateElement(isTagged);\n node.quasis = [curElt];\n while (!curElt.tail) {\n this.expect(tt.dollarBraceL);\n node.expressions.push(this.parseExpression());\n this.expect(tt.braceR);\n node.quasis.push((curElt = this.parseTemplateElement(isTagged)));\n }\n this.next();\n return this.finishNode(node, \"TemplateLiteral\");\n }\n\n // Parse an object literal or binding pattern.\n\n parseObj<T: N.ObjectPattern | N.ObjectExpression>(\n isPattern: boolean,\n refShorthandDefaultPos?: ?Pos,\n ): T {\n const propHash: any = Object.create(null);\n let first = true;\n const node = this.startNode();\n\n node.properties = [];\n this.next();\n\n while (!this.eat(tt.braceR)) {\n if (first) {\n first = false;\n } else {\n this.expect(tt.comma);\n if (this.match(tt.braceR)) {\n this.addExtra(node, \"trailingComma\", this.state.lastTokStart);\n this.next();\n break;\n }\n }\n\n const prop = this.parseObjectMember(isPattern, refShorthandDefaultPos);\n // $FlowIgnore RestElement will never be returned if !isPattern\n if (!isPattern) this.checkDuplicatedProto(prop, propHash);\n\n // $FlowIgnore\n if (prop.shorthand) {\n this.addExtra(prop, \"shorthand\", true);\n }\n\n node.properties.push(prop);\n }\n\n if (!this.match(tt.eq) && propHash.start !== undefined) {\n this.raise(propHash.start, \"Redefinition of __proto__ property\");\n }\n\n return this.finishNode(\n node,\n isPattern ? \"ObjectPattern\" : \"ObjectExpression\",\n );\n }\n\n isAsyncProp(prop: N.ObjectProperty): boolean {\n return (\n !prop.computed &&\n prop.key.type === \"Identifier\" &&\n prop.key.name === \"async\" &&\n (this.match(tt.name) ||\n this.match(tt.num) ||\n this.match(tt.string) ||\n this.match(tt.bracketL) ||\n this.state.type.keyword ||\n this.match(tt.star)) &&\n !this.hasPrecedingLineBreak()\n );\n }\n\n parseObjectMember(\n isPattern: boolean,\n refShorthandDefaultPos: ?Pos,\n ): N.ObjectMember | N.SpreadElement | N.RestElement {\n let decorators = [];\n if (this.match(tt.at)) {\n if (this.hasPlugin(\"decorators\")) {\n this.raise(\n this.state.start,\n \"Stage 2 decorators disallow object literal property decorators\",\n );\n }\n\n // we needn't check if decorators (stage 0) plugin is enabled since it's checked by\n // the call to this.parseDecorator\n while (this.match(tt.at)) {\n decorators.push(this.parseDecorator());\n }\n }\n\n const prop = this.startNode();\n let isGenerator = false;\n let isAsync = false;\n let startPos;\n let startLoc;\n\n if (this.match(tt.ellipsis)) {\n if (decorators.length) this.unexpected();\n if (isPattern) {\n this.next();\n // Don't use parseRestBinding() as we only allow Identifier here.\n prop.argument = this.parseIdentifier();\n this.checkCommaAfterRest(charCodes.rightCurlyBrace);\n return this.finishNode(prop, \"RestElement\");\n }\n\n return this.parseSpread();\n }\n\n if (decorators.length) {\n prop.decorators = decorators;\n decorators = [];\n }\n\n prop.method = false;\n\n if (isPattern || refShorthandDefaultPos) {\n startPos = this.state.start;\n startLoc = this.state.startLoc;\n }\n\n if (!isPattern) {\n isGenerator = this.eat(tt.star);\n }\n\n const containsEsc = this.state.containsEsc;\n this.parsePropertyName(prop, /* isPrivateNameAllowed */ false);\n\n if (!isPattern && !containsEsc && !isGenerator && this.isAsyncProp(prop)) {\n isAsync = true;\n isGenerator = this.eat(tt.star);\n this.parsePropertyName(prop, /* isPrivateNameAllowed */ false);\n } else {\n isAsync = false;\n }\n\n this.parseObjPropValue(\n prop,\n startPos,\n startLoc,\n isGenerator,\n isAsync,\n isPattern,\n refShorthandDefaultPos,\n containsEsc,\n );\n\n return prop;\n }\n\n isGetterOrSetterMethod(prop: N.ObjectMethod, isPattern: boolean): boolean {\n return (\n !isPattern &&\n !prop.computed &&\n prop.key.type === \"Identifier\" &&\n (prop.key.name === \"get\" || prop.key.name === \"set\") &&\n (this.match(tt.string) || // get \"string\"() {}\n this.match(tt.num) || // get 1() {}\n this.match(tt.bracketL) || // get [\"string\"]() {}\n this.match(tt.name) || // get foo() {}\n !!this.state.type.keyword) // get debugger() {}\n );\n }\n\n getGetterSetterExpectedParamCount(\n method: N.ObjectMethod | N.ClassMethod,\n ): number {\n return method.kind === \"get\" ? 0 : 1;\n }\n\n // get methods aren't allowed to have any parameters\n // set methods must have exactly 1 parameter which is not a rest parameter\n checkGetterSetterParams(method: N.ObjectMethod | N.ClassMethod): void {\n const paramCount = this.getGetterSetterExpectedParamCount(method);\n const start = method.start;\n if (method.params.length !== paramCount) {\n if (method.kind === \"get\") {\n this.raise(start, \"getter must not have any formal parameters\");\n } else {\n this.raise(start, \"setter must have exactly one formal parameter\");\n }\n }\n\n if (\n method.kind === \"set\" &&\n method.params[method.params.length - 1].type === \"RestElement\"\n ) {\n this.raise(\n start,\n \"setter function argument must not be a rest parameter\",\n );\n }\n }\n\n parseObjectMethod(\n prop: N.ObjectMethod,\n isGenerator: boolean,\n isAsync: boolean,\n isPattern: boolean,\n containsEsc: boolean,\n ): ?N.ObjectMethod {\n if (isAsync || isGenerator || this.match(tt.parenL)) {\n if (isPattern) this.unexpected();\n prop.kind = \"method\";\n prop.method = true;\n return this.parseMethod(\n prop,\n isGenerator,\n isAsync,\n /* isConstructor */ false,\n false,\n \"ObjectMethod\",\n );\n }\n\n if (!containsEsc && this.isGetterOrSetterMethod(prop, isPattern)) {\n if (isGenerator || isAsync) this.unexpected();\n prop.kind = prop.key.name;\n this.parsePropertyName(prop, /* isPrivateNameAllowed */ false);\n this.parseMethod(\n prop,\n /* isGenerator */ false,\n /* isAsync */ false,\n /* isConstructor */ false,\n false,\n \"ObjectMethod\",\n );\n this.checkGetterSetterParams(prop);\n return prop;\n }\n }\n\n parseObjectProperty(\n prop: N.ObjectProperty,\n startPos: ?number,\n startLoc: ?Position,\n isPattern: boolean,\n refShorthandDefaultPos: ?Pos,\n ): ?N.ObjectProperty {\n prop.shorthand = false;\n\n if (this.eat(tt.colon)) {\n prop.value = isPattern\n ? this.parseMaybeDefault(this.state.start, this.state.startLoc)\n : this.parseMaybeAssign(false, refShorthandDefaultPos);\n\n return this.finishNode(prop, \"ObjectProperty\");\n }\n\n if (!prop.computed && prop.key.type === \"Identifier\") {\n this.checkReservedWord(prop.key.name, prop.key.start, true, true);\n\n if (isPattern) {\n prop.value = this.parseMaybeDefault(\n startPos,\n startLoc,\n prop.key.__clone(),\n );\n } else if (this.match(tt.eq) && refShorthandDefaultPos) {\n if (!refShorthandDefaultPos.start) {\n refShorthandDefaultPos.start = this.state.start;\n }\n prop.value = this.parseMaybeDefault(\n startPos,\n startLoc,\n prop.key.__clone(),\n );\n } else {\n prop.value = prop.key.__clone();\n }\n prop.shorthand = true;\n\n return this.finishNode(prop, \"ObjectProperty\");\n }\n }\n\n parseObjPropValue(\n prop: any,\n startPos: ?number,\n startLoc: ?Position,\n isGenerator: boolean,\n isAsync: boolean,\n isPattern: boolean,\n refShorthandDefaultPos: ?Pos,\n containsEsc: boolean,\n ): void {\n const node =\n this.parseObjectMethod(\n prop,\n isGenerator,\n isAsync,\n isPattern,\n containsEsc,\n ) ||\n this.parseObjectProperty(\n prop,\n startPos,\n startLoc,\n isPattern,\n refShorthandDefaultPos,\n );\n\n if (!node) this.unexpected();\n\n // $FlowFixMe\n return node;\n }\n\n parsePropertyName(\n prop: N.ObjectOrClassMember | N.ClassMember | N.TsNamedTypeElementBase,\n isPrivateNameAllowed: boolean,\n ): N.Expression | N.Identifier {\n if (this.eat(tt.bracketL)) {\n (prop: $FlowSubtype<N.ObjectOrClassMember>).computed = true;\n prop.key = this.parseMaybeAssign();\n this.expect(tt.bracketR);\n } else {\n const oldInPropertyName = this.state.inPropertyName;\n this.state.inPropertyName = true;\n // We check if it's valid for it to be a private name when we push it.\n (prop: $FlowFixMe).key =\n this.match(tt.num) || this.match(tt.string) || this.match(tt.bigint)\n ? this.parseExprAtom()\n : this.parseMaybePrivateName(isPrivateNameAllowed);\n\n if (prop.key.type !== \"PrivateName\") {\n // ClassPrivateProperty is never computed, so we don't assign in that case.\n prop.computed = false;\n }\n\n this.state.inPropertyName = oldInPropertyName;\n }\n\n return prop.key;\n }\n\n // Initialize empty function node.\n\n initFunction(node: N.BodilessFunctionOrMethodBase, isAsync: ?boolean): void {\n node.id = null;\n node.generator = false;\n node.async = !!isAsync;\n }\n\n // Parse object or class method.\n\n parseMethod<T: N.MethodLike>(\n node: T,\n isGenerator: boolean,\n isAsync: boolean,\n isConstructor: boolean,\n allowDirectSuper: boolean,\n type: string,\n inClassScope: boolean = false,\n ): T {\n const oldYieldPos = this.state.yieldPos;\n const oldAwaitPos = this.state.awaitPos;\n this.state.yieldPos = -1;\n this.state.awaitPos = -1;\n\n this.initFunction(node, isAsync);\n node.generator = !!isGenerator;\n const allowModifiers = isConstructor; // For TypeScript parameter properties\n this.scope.enter(\n functionFlags(isAsync, node.generator) |\n SCOPE_SUPER |\n (inClassScope ? SCOPE_CLASS : 0) |\n (allowDirectSuper ? SCOPE_DIRECT_SUPER : 0),\n );\n this.parseFunctionParams((node: any), allowModifiers);\n this.parseFunctionBodyAndFinish(node, type, true);\n this.scope.exit();\n\n this.state.yieldPos = oldYieldPos;\n this.state.awaitPos = oldAwaitPos;\n\n return node;\n }\n\n // Parse arrow function expression.\n // If the parameters are provided, they will be converted to an\n // assignable list.\n parseArrowExpression(\n node: N.ArrowFunctionExpression,\n params: ?(N.Expression[]),\n isAsync: boolean,\n trailingCommaPos: ?number,\n ): N.ArrowFunctionExpression {\n this.scope.enter(functionFlags(isAsync, false) | SCOPE_ARROW);\n this.initFunction(node, isAsync);\n\n const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;\n const oldYieldPos = this.state.yieldPos;\n const oldAwaitPos = this.state.awaitPos;\n this.state.maybeInArrowParameters = false;\n this.state.yieldPos = -1;\n this.state.awaitPos = -1;\n\n if (params) this.setArrowFunctionParameters(node, params, trailingCommaPos);\n this.parseFunctionBody(node, true);\n\n this.scope.exit();\n this.state.maybeInArrowParameters = oldMaybeInArrowParameters;\n this.state.yieldPos = oldYieldPos;\n this.state.awaitPos = oldAwaitPos;\n\n return this.finishNode(node, \"ArrowFunctionExpression\");\n }\n\n setArrowFunctionParameters(\n node: N.ArrowFunctionExpression,\n params: N.Expression[],\n trailingCommaPos: ?number,\n ): void {\n node.params = this.toAssignableList(\n params,\n true,\n \"arrow function parameters\",\n trailingCommaPos,\n );\n }\n\n parseFunctionBodyAndFinish(\n node: N.BodilessFunctionOrMethodBase,\n type: string,\n isMethod?: boolean = false,\n ): void {\n // $FlowIgnore (node is not bodiless if we get here)\n this.parseFunctionBody(node, false, isMethod);\n this.finishNode(node, type);\n }\n\n // Parse function body and check parameters.\n parseFunctionBody(\n node: N.Function,\n allowExpression: ?boolean,\n isMethod?: boolean = false,\n ): void {\n const isExpression = allowExpression && !this.match(tt.braceL);\n const oldStrict = this.state.strict;\n let useStrict = false;\n\n const oldInParameters = this.state.inParameters;\n this.state.inParameters = false;\n\n if (isExpression) {\n node.body = this.parseMaybeAssign();\n this.checkParams(node, false, allowExpression, false);\n } else {\n const nonSimple = !this.isSimpleParamList(node.params);\n if (!oldStrict || nonSimple) {\n useStrict = this.strictDirective(this.state.end);\n // If this is a strict mode function, verify that argument names\n // are not repeated, and it does not try to bind the words `eval`\n // or `arguments`.\n if (useStrict && nonSimple) {\n // This logic is here to align the error location with the estree plugin\n const errorPos =\n // $FlowIgnore\n (node.kind === \"method\" || node.kind === \"constructor\") &&\n // $FlowIgnore\n !!node.key\n ? node.key.end\n : node.start;\n this.raise(\n errorPos,\n \"Illegal 'use strict' directive in function with non-simple parameter list\",\n );\n }\n }\n // Start a new scope with regard to labels\n // flag (restore them to their old value afterwards).\n const oldLabels = this.state.labels;\n this.state.labels = [];\n if (useStrict) this.state.strict = true;\n // Add the params to varDeclaredNames to ensure that an error is thrown\n // if a let/const declaration in the function clashes with one of the params.\n this.checkParams(\n node,\n !oldStrict && !useStrict && !allowExpression && !isMethod && !nonSimple,\n allowExpression,\n !oldStrict && useStrict,\n );\n node.body = this.parseBlock(true, false);\n this.state.labels = oldLabels;\n }\n\n this.state.inParameters = oldInParameters;\n // Ensure the function name isn't a forbidden identifier in strict mode, e.g. 'eval'\n if (this.state.strict && node.id) {\n this.checkLVal(\n node.id,\n BIND_OUTSIDE,\n undefined,\n \"function name\",\n undefined,\n !oldStrict && useStrict,\n );\n }\n this.state.strict = oldStrict;\n }\n\n isSimpleParamList(\n params: $ReadOnlyArray<N.Pattern | N.TSParameterProperty>,\n ): boolean {\n for (let i = 0, len = params.length; i < len; i++) {\n if (params[i].type !== \"Identifier\") return false;\n }\n return true;\n }\n\n checkParams(\n node: N.Function,\n allowDuplicates: boolean,\n // eslint-disable-next-line no-unused-vars\n isArrowFunction: ?boolean,\n strictModeChanged?: boolean = true,\n ): void {\n // $FlowIssue\n const nameHash: {} = Object.create(null);\n for (let i = 0; i < node.params.length; i++) {\n this.checkLVal(\n node.params[i],\n BIND_VAR,\n allowDuplicates ? null : nameHash,\n \"function parameter list\",\n undefined,\n strictModeChanged,\n );\n }\n }\n\n // Parses a comma-separated list of expressions, and returns them as\n // an array. `close` is the token type that ends the list, and\n // `allowEmpty` can be turned on to allow subsequent commas with\n // nothing in between them to be parsed as `null` (which is needed\n // for array literals).\n\n parseExprList(\n close: TokenType,\n allowEmpty?: boolean,\n refShorthandDefaultPos?: ?Pos,\n nodeForExtra?: ?N.Node,\n ): $ReadOnlyArray<?N.Expression> {\n const elts = [];\n let first = true;\n\n while (!this.eat(close)) {\n if (first) {\n first = false;\n } else {\n this.expect(tt.comma);\n if (this.match(close)) {\n if (nodeForExtra) {\n this.addExtra(\n nodeForExtra,\n \"trailingComma\",\n this.state.lastTokStart,\n );\n }\n this.next();\n break;\n }\n }\n\n elts.push(this.parseExprListItem(allowEmpty, refShorthandDefaultPos));\n }\n return elts;\n }\n\n parseExprListItem(\n allowEmpty: ?boolean,\n refShorthandDefaultPos: ?Pos,\n refNeedsArrowPos: ?Pos,\n allowPlaceholder: ?boolean,\n ): ?N.Expression {\n let elt;\n if (allowEmpty && this.match(tt.comma)) {\n elt = null;\n } else if (this.match(tt.ellipsis)) {\n const spreadNodeStartPos = this.state.start;\n const spreadNodeStartLoc = this.state.startLoc;\n elt = this.parseParenItem(\n this.parseSpread(refShorthandDefaultPos, refNeedsArrowPos),\n spreadNodeStartPos,\n spreadNodeStartLoc,\n );\n } else if (this.match(tt.question)) {\n this.expectPlugin(\"partialApplication\");\n if (!allowPlaceholder) {\n this.raise(this.state.start, \"Unexpected argument placeholder\");\n }\n const node = this.startNode();\n this.next();\n elt = this.finishNode(node, \"ArgumentPlaceholder\");\n } else {\n elt = this.parseMaybeAssign(\n false,\n refShorthandDefaultPos,\n this.parseParenItem,\n refNeedsArrowPos,\n );\n }\n return elt;\n }\n\n // Parse the next token as an identifier. If `liberal` is true (used\n // when parsing properties), it will also convert keywords into\n // identifiers.\n // This shouldn't be used to parse the keywords of meta properties, since they\n // are not identifiers and cannot contain escape sequences.\n\n parseIdentifier(liberal?: boolean): N.Identifier {\n const node = this.startNode();\n const name = this.parseIdentifierName(node.start, liberal);\n\n return this.createIdentifier(node, name);\n }\n\n createIdentifier(node: N.Identifier, name: string): N.Identifier {\n node.name = name;\n node.loc.identifierName = name;\n\n return this.finishNode(node, \"Identifier\");\n }\n\n parseIdentifierName(pos: number, liberal?: boolean): string {\n let name: string;\n\n if (this.match(tt.name)) {\n name = this.state.value;\n } else if (this.state.type.keyword) {\n name = this.state.type.keyword;\n\n // `class` and `function` keywords push new context into this.context.\n // But there is no chance to pop the context if the keyword is consumed\n // as an identifier such as a property name.\n // If the previous token is a dot, this does not apply because the\n // context-managing code already ignored the keyword\n if (\n (name === \"class\" || name === \"function\") &&\n (this.state.lastTokEnd !== this.state.lastTokStart + 1 ||\n this.input.charCodeAt(this.state.lastTokStart) !== charCodes.dot)\n ) {\n this.state.context.pop();\n }\n } else {\n throw this.unexpected();\n }\n\n if (liberal) {\n // If the current token is not used as a keyword, set its type to \"tt.name\".\n // This will prevent this.next() from throwing about unexpected escapes.\n this.state.type = tt.name;\n } else {\n this.checkReservedWord(\n name,\n this.state.start,\n !!this.state.type.keyword,\n false,\n );\n }\n\n this.next();\n\n return name;\n }\n\n checkReservedWord(\n word: string,\n startLoc: number,\n checkKeywords: boolean,\n isBinding: boolean,\n ): void {\n if (this.scope.inGenerator && word === \"yield\") {\n this.raise(\n startLoc,\n \"Can not use 'yield' as identifier inside a generator\",\n );\n return;\n }\n\n if (word === \"await\") {\n if (this.scope.inAsync) {\n this.raise(\n startLoc,\n \"Can not use 'await' as identifier inside an async function\",\n );\n return;\n }\n if (\n this.state.awaitPos === -1 &&\n (this.state.maybeInArrowParameters || this.isAwaitAllowed())\n ) {\n this.state.awaitPos = this.state.start;\n }\n }\n\n if (\n this.scope.inClass &&\n !this.scope.inNonArrowFunction &&\n word === \"arguments\"\n ) {\n this.raise(\n startLoc,\n \"'arguments' is not allowed in class field initializer\",\n );\n return;\n }\n if (checkKeywords && isKeyword(word)) {\n this.raise(startLoc, `Unexpected keyword '${word}'`);\n return;\n }\n\n const reservedTest = !this.state.strict\n ? isReservedWord\n : isBinding\n ? isStrictBindReservedWord\n : isStrictReservedWord;\n\n if (reservedTest(word, this.inModule)) {\n if (!this.scope.inAsync && word === \"await\") {\n this.raise(\n startLoc,\n \"Can not use keyword 'await' outside an async function\",\n );\n } else {\n this.raise(startLoc, `Unexpected reserved word '${word}'`);\n }\n }\n }\n\n isAwaitAllowed(): boolean {\n if (this.scope.inFunction) return this.scope.inAsync;\n if (this.options.allowAwaitOutsideFunction) return true;\n if (this.hasPlugin(\"topLevelAwait\")) {\n return this.inModule && this.scope.inAsync;\n }\n return false;\n }\n\n // Parses await expression inside async function.\n\n parseAwait(): N.AwaitExpression {\n const node = this.startNode();\n\n this.next();\n\n if (this.state.inParameters) {\n this.raise(\n node.start,\n \"await is not allowed in async function parameters\",\n );\n } else if (this.state.awaitPos === -1) {\n this.state.awaitPos = node.start;\n }\n if (this.eat(tt.star)) {\n this.raise(\n node.start,\n \"await* has been removed from the async functions proposal. Use Promise.all() instead.\",\n );\n }\n\n if (!this.scope.inFunction && !this.options.allowAwaitOutsideFunction) {\n if (\n this.hasPrecedingLineBreak() ||\n // All the following expressions are ambiguous:\n // await + 0, await - 0, await ( 0 ), await [ 0 ], await / 0 /u, await ``\n this.match(tt.plusMin) ||\n this.match(tt.parenL) ||\n this.match(tt.bracketL) ||\n this.match(tt.backQuote) ||\n // Sometimes the tokenizer generates tt.slash for regexps, and this is\n // handler by parseExprAtom\n this.match(tt.regexp) ||\n this.match(tt.slash) ||\n // This code could be parsed both as a modulo operator or as an intrinsic:\n // await %x(0)\n (this.hasPlugin(\"v8intrinsic\") && this.match(tt.modulo))\n ) {\n this.ambiguousScriptDifferentAst = true;\n } else {\n this.sawUnambiguousESM = true;\n }\n }\n\n if (!this.state.soloAwait) {\n node.argument = this.parseMaybeUnary();\n }\n\n return this.finishNode(node, \"AwaitExpression\");\n }\n\n // Parses yield expression inside generator.\n\n parseYield(noIn?: ?boolean): N.YieldExpression {\n const node = this.startNode();\n\n if (this.state.inParameters) {\n this.raise(node.start, \"yield is not allowed in generator parameters\");\n } else if (this.state.yieldPos === -1) {\n this.state.yieldPos = node.start;\n }\n\n this.next();\n if (\n this.match(tt.semi) ||\n (!this.match(tt.star) && !this.state.type.startsExpr) ||\n this.hasPrecedingLineBreak()\n ) {\n node.delegate = false;\n node.argument = null;\n } else {\n node.delegate = this.eat(tt.star);\n node.argument = this.parseMaybeAssign(noIn);\n }\n return this.finishNode(node, \"YieldExpression\");\n }\n\n // Validates a pipeline (for any of the pipeline Babylon plugins) at the point\n // of the infix operator `|>`.\n\n checkPipelineAtInfixOperator(left: N.Expression, leftStartPos: number) {\n if (this.getPluginOption(\"pipelineOperator\", \"proposal\") === \"smart\") {\n if (left.type === \"SequenceExpression\") {\n // Ensure that the pipeline head is not a comma-delimited\n // sequence expression.\n this.raise(\n leftStartPos,\n `Pipeline head should not be a comma-separated sequence expression`,\n );\n }\n }\n }\n\n parseSmartPipelineBody(\n childExpression: N.Expression,\n startPos: number,\n startLoc: Position,\n ): N.PipelineBody {\n const pipelineStyle = this.checkSmartPipelineBodyStyle(childExpression);\n\n this.checkSmartPipelineBodyEarlyErrors(\n childExpression,\n pipelineStyle,\n startPos,\n );\n\n return this.parseSmartPipelineBodyInStyle(\n childExpression,\n pipelineStyle,\n startPos,\n startLoc,\n );\n }\n\n checkSmartPipelineBodyEarlyErrors(\n childExpression: N.Expression,\n pipelineStyle: N.PipelineStyle,\n startPos: number,\n ): void {\n if (this.match(tt.arrow)) {\n // If the following token is invalidly `=>`, then throw a human-friendly error\n // instead of something like 'Unexpected token, expected \";\"'.\n throw this.raise(\n this.state.start,\n `Unexpected arrow \"=>\" after pipeline body; arrow function in pipeline body must be parenthesized`,\n );\n } else if (\n pipelineStyle === \"PipelineTopicExpression\" &&\n childExpression.type === \"SequenceExpression\"\n ) {\n this.raise(\n startPos,\n `Pipeline body may not be a comma-separated sequence expression`,\n );\n }\n }\n\n parseSmartPipelineBodyInStyle(\n childExpression: N.Expression,\n pipelineStyle: N.PipelineStyle,\n startPos: number,\n startLoc: Position,\n ): N.PipelineBody {\n const bodyNode = this.startNodeAt(startPos, startLoc);\n switch (pipelineStyle) {\n case \"PipelineBareFunction\":\n bodyNode.callee = childExpression;\n break;\n case \"PipelineBareConstructor\":\n bodyNode.callee = childExpression.callee;\n break;\n case \"PipelineBareAwaitedFunction\":\n bodyNode.callee = childExpression.argument;\n break;\n case \"PipelineTopicExpression\":\n if (!this.topicReferenceWasUsedInCurrentTopicContext()) {\n this.raise(\n startPos,\n `Pipeline is in topic style but does not use topic reference`,\n );\n }\n bodyNode.expression = childExpression;\n break;\n default:\n throw new Error(\n `Internal @babel/parser error: Unknown pipeline style (${pipelineStyle})`,\n );\n }\n return this.finishNode(bodyNode, pipelineStyle);\n }\n\n checkSmartPipelineBodyStyle(expression: N.Expression): N.PipelineStyle {\n switch (expression.type) {\n default:\n return this.isSimpleReference(expression)\n ? \"PipelineBareFunction\"\n : \"PipelineTopicExpression\";\n }\n }\n\n isSimpleReference(expression: N.Expression): boolean {\n switch (expression.type) {\n case \"MemberExpression\":\n return (\n !expression.computed && this.isSimpleReference(expression.object)\n );\n case \"Identifier\":\n return true;\n default:\n return false;\n }\n }\n\n // Enable topic references from outer contexts within smart pipeline bodies.\n // The function modifies the parser's topic-context state to enable or disable\n // the use of topic references with the smartPipelines plugin. They then run a\n // callback, then they reset the parser to the old topic-context state that it\n // had before the function was called.\n\n withTopicPermittingContext<T>(callback: () => T): T {\n const outerContextTopicState = this.state.topicContext;\n this.state.topicContext = {\n // Enable the use of the primary topic reference.\n maxNumOfResolvableTopics: 1,\n // Hide the use of any topic references from outer contexts.\n maxTopicIndex: null,\n };\n\n try {\n return callback();\n } finally {\n this.state.topicContext = outerContextTopicState;\n }\n }\n\n // Disable topic references from outer contexts within syntax constructs\n // such as the bodies of iteration statements.\n // The function modifies the parser's topic-context state to enable or disable\n // the use of topic references with the smartPipelines plugin. They then run a\n // callback, then they reset the parser to the old topic-context state that it\n // had before the function was called.\n\n withTopicForbiddingContext<T>(callback: () => T): T {\n const outerContextTopicState = this.state.topicContext;\n this.state.topicContext = {\n // Disable the use of the primary topic reference.\n maxNumOfResolvableTopics: 0,\n // Hide the use of any topic references from outer contexts.\n maxTopicIndex: null,\n };\n\n try {\n return callback();\n } finally {\n this.state.topicContext = outerContextTopicState;\n }\n }\n\n withSoloAwaitPermittingContext<T>(callback: () => T): T {\n const outerContextSoloAwaitState = this.state.soloAwait;\n this.state.soloAwait = true;\n\n try {\n return callback();\n } finally {\n this.state.soloAwait = outerContextSoloAwaitState;\n }\n }\n\n // Register the use of a primary topic reference (`#`) within the current\n // topic context.\n registerTopicReference(): void {\n this.state.topicContext.maxTopicIndex = 0;\n }\n\n primaryTopicReferenceIsAllowedInCurrentTopicContext(): boolean {\n return this.state.topicContext.maxNumOfResolvableTopics >= 1;\n }\n\n topicReferenceWasUsedInCurrentTopicContext(): boolean {\n return (\n this.state.topicContext.maxTopicIndex != null &&\n this.state.topicContext.maxTopicIndex >= 0\n );\n }\n\n parseFSharpPipelineBody(prec: number, noIn: ?boolean): N.Expression {\n const startPos = this.state.start;\n const startLoc = this.state.startLoc;\n\n this.state.potentialArrowAt = this.state.start;\n const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody;\n this.state.inFSharpPipelineDirectBody = true;\n\n const ret = this.parseExprOp(\n this.parseMaybeUnary(),\n startPos,\n startLoc,\n prec,\n noIn,\n );\n\n this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;\n\n return ret;\n }\n}\n","// @flow\n\nimport * as N from \"../types\";\nimport { types as tt, type TokenType } from \"../tokenizer/types\";\nimport ExpressionParser from \"./expression\";\nimport {\n isIdentifierChar,\n isIdentifierStart,\n keywordRelationalOperator,\n} from \"../util/identifier\";\nimport { lineBreak } from \"../util/whitespace\";\nimport * as charCodes from \"charcodes\";\nimport {\n BIND_CLASS,\n BIND_LEXICAL,\n BIND_VAR,\n BIND_FUNCTION,\n functionFlags,\n SCOPE_CLASS,\n SCOPE_OTHER,\n SCOPE_SIMPLE_CATCH,\n SCOPE_SUPER,\n CLASS_ELEMENT_OTHER,\n CLASS_ELEMENT_INSTANCE_GETTER,\n CLASS_ELEMENT_INSTANCE_SETTER,\n CLASS_ELEMENT_STATIC_GETTER,\n CLASS_ELEMENT_STATIC_SETTER,\n type BindingTypes,\n} from \"../util/scopeflags\";\n\nconst loopLabel = { kind: \"loop\" },\n switchLabel = { kind: \"switch\" };\n\nconst FUNC_NO_FLAGS = 0b000,\n FUNC_STATEMENT = 0b001,\n FUNC_HANGING_STATEMENT = 0b010,\n FUNC_NULLABLE_ID = 0b100;\n\nexport default class StatementParser extends ExpressionParser {\n // ### Statement parsing\n\n // Parse a program. Initializes the parser, reads any number of\n // statements, and wraps them in a Program node. Optionally takes a\n // `program` argument. If present, the statements will be appended\n // to its body instead of creating a new node.\n\n parseTopLevel(file: N.File, program: N.Program): N.File {\n program.sourceType = this.options.sourceType;\n\n program.interpreter = this.parseInterpreterDirective();\n\n this.parseBlockBody(program, true, true, tt.eof);\n\n if (\n this.inModule &&\n !this.options.allowUndeclaredExports &&\n this.scope.undefinedExports.size > 0\n ) {\n for (const [name] of Array.from(this.scope.undefinedExports)) {\n const pos = this.scope.undefinedExports.get(name);\n // $FlowIssue\n this.raise(pos, `Export '${name}' is not defined`);\n }\n }\n\n file.program = this.finishNode(program, \"Program\");\n file.comments = this.state.comments;\n\n if (this.options.tokens) file.tokens = this.state.tokens;\n\n return this.finishNode(file, \"File\");\n }\n\n // TODO\n\n stmtToDirective(stmt: N.Statement): N.Directive {\n const expr = stmt.expression;\n\n const directiveLiteral = this.startNodeAt(expr.start, expr.loc.start);\n const directive = this.startNodeAt(stmt.start, stmt.loc.start);\n\n const raw = this.input.slice(expr.start, expr.end);\n const val = (directiveLiteral.value = raw.slice(1, -1)); // remove quotes\n\n this.addExtra(directiveLiteral, \"raw\", raw);\n this.addExtra(directiveLiteral, \"rawValue\", val);\n\n directive.value = this.finishNodeAt(\n directiveLiteral,\n \"DirectiveLiteral\",\n expr.end,\n expr.loc.end,\n );\n\n return this.finishNodeAt(directive, \"Directive\", stmt.end, stmt.loc.end);\n }\n\n parseInterpreterDirective(): N.InterpreterDirective | null {\n if (!this.match(tt.interpreterDirective)) {\n return null;\n }\n\n const node = this.startNode();\n node.value = this.state.value;\n this.next();\n return this.finishNode(node, \"InterpreterDirective\");\n }\n\n isLet(context: ?string): boolean {\n if (!this.isContextual(\"let\")) {\n return false;\n }\n const next = this.nextTokenStart();\n const nextCh = this.input.charCodeAt(next);\n // For ambiguous cases, determine if a LexicalDeclaration (or only a\n // Statement) is allowed here. If context is not empty then only a Statement\n // is allowed. However, `let [` is an explicit negative lookahead for\n // ExpressionStatement, so special-case it first.\n if (nextCh === charCodes.leftSquareBracket) return true;\n if (context) return false;\n\n if (nextCh === charCodes.leftCurlyBrace) return true;\n\n if (isIdentifierStart(nextCh)) {\n let pos = next + 1;\n while (isIdentifierChar(this.input.charCodeAt(pos))) {\n ++pos;\n }\n const ident = this.input.slice(next, pos);\n if (!keywordRelationalOperator.test(ident)) return true;\n }\n return false;\n }\n\n // Parse a single statement.\n //\n // If expecting a statement and finding a slash operator, parse a\n // regular expression literal. This is to handle cases like\n // `if (foo) /blah/.exec(foo)`, where looking at the previous token\n // does not help.\n\n parseStatement(context: ?string, topLevel?: boolean): N.Statement {\n if (this.match(tt.at)) {\n this.parseDecorators(true);\n }\n return this.parseStatementContent(context, topLevel);\n }\n\n parseStatementContent(context: ?string, topLevel: ?boolean): N.Statement {\n let starttype = this.state.type;\n const node = this.startNode();\n let kind;\n\n if (this.isLet(context)) {\n starttype = tt._var;\n kind = \"let\";\n }\n\n // Most types of statements are recognized by the keyword they\n // start with. Many are trivial to parse, some require a bit of\n // complexity.\n\n switch (starttype) {\n case tt._break:\n case tt._continue:\n // $FlowFixMe\n return this.parseBreakContinueStatement(node, starttype.keyword);\n case tt._debugger:\n return this.parseDebuggerStatement(node);\n case tt._do:\n return this.parseDoStatement(node);\n case tt._for:\n return this.parseForStatement(node);\n case tt._function:\n if (this.lookaheadCharCode() === charCodes.dot) break;\n if (context) {\n if (this.state.strict) {\n this.raise(\n this.state.start,\n \"In strict mode code, functions can only be declared at top level or inside a block\",\n );\n } else if (context !== \"if\" && context !== \"label\") {\n this.raise(\n this.state.start,\n \"In non-strict mode code, functions can only be declared at top level, \" +\n \"inside a block, or as the body of an if statement\",\n );\n }\n }\n return this.parseFunctionStatement(node, false, !context);\n\n case tt._class:\n if (context) this.unexpected();\n return this.parseClass(node, true);\n\n case tt._if:\n return this.parseIfStatement(node);\n case tt._return:\n return this.parseReturnStatement(node);\n case tt._switch:\n return this.parseSwitchStatement(node);\n case tt._throw:\n return this.parseThrowStatement(node);\n case tt._try:\n return this.parseTryStatement(node);\n\n case tt._const:\n case tt._var:\n kind = kind || this.state.value;\n if (context && kind !== \"var\") {\n this.raise(\n this.state.start,\n \"Lexical declaration cannot appear in a single-statement context\",\n );\n }\n return this.parseVarStatement(node, kind);\n\n case tt._while:\n return this.parseWhileStatement(node);\n case tt._with:\n return this.parseWithStatement(node);\n case tt.braceL:\n return this.parseBlock();\n case tt.semi:\n return this.parseEmptyStatement(node);\n case tt._export:\n case tt._import: {\n const nextTokenCharCode = this.lookaheadCharCode();\n if (\n nextTokenCharCode === charCodes.leftParenthesis ||\n nextTokenCharCode === charCodes.dot\n ) {\n break;\n }\n\n if (!this.options.allowImportExportEverywhere && !topLevel) {\n this.raise(\n this.state.start,\n \"'import' and 'export' may only appear at the top level\",\n );\n }\n\n this.next();\n\n let result;\n if (starttype === tt._import) {\n result = this.parseImport(node);\n\n if (\n result.type === \"ImportDeclaration\" &&\n (!result.importKind || result.importKind === \"value\")\n ) {\n this.sawUnambiguousESM = true;\n }\n } else {\n result = this.parseExport(node);\n\n if (\n (result.type === \"ExportNamedDeclaration\" &&\n (!result.exportKind || result.exportKind === \"value\")) ||\n (result.type === \"ExportAllDeclaration\" &&\n (!result.exportKind || result.exportKind === \"value\")) ||\n result.type === \"ExportDefaultDeclaration\"\n ) {\n this.sawUnambiguousESM = true;\n }\n }\n\n this.assertModuleNodeAllowed(node);\n\n return result;\n }\n\n default: {\n if (this.isAsyncFunction()) {\n if (context) {\n this.raise(\n this.state.start,\n \"Async functions can only be declared at the top level or inside a block\",\n );\n }\n this.next();\n return this.parseFunctionStatement(node, true, !context);\n }\n }\n }\n\n // If the statement does not start with a statement keyword or a\n // brace, it's an ExpressionStatement or LabeledStatement. We\n // simply start parsing an expression, and afterwards, if the\n // next token is a colon and the expression was a simple\n // Identifier node, we switch to interpreting it as a label.\n const maybeName = this.state.value;\n const expr = this.parseExpression();\n\n if (\n starttype === tt.name &&\n expr.type === \"Identifier\" &&\n this.eat(tt.colon)\n ) {\n return this.parseLabeledStatement(node, maybeName, expr, context);\n } else {\n return this.parseExpressionStatement(node, expr);\n }\n }\n\n assertModuleNodeAllowed(node: N.Node): void {\n if (!this.options.allowImportExportEverywhere && !this.inModule) {\n this.raise(\n node.start,\n `'import' and 'export' may appear only with 'sourceType: \"module\"'`,\n {\n code: \"BABEL_PARSER_SOURCETYPE_MODULE_REQUIRED\",\n },\n );\n }\n }\n\n takeDecorators(node: N.HasDecorators): void {\n const decorators = this.state.decoratorStack[\n this.state.decoratorStack.length - 1\n ];\n if (decorators.length) {\n node.decorators = decorators;\n this.resetStartLocationFromNode(node, decorators[0]);\n this.state.decoratorStack[this.state.decoratorStack.length - 1] = [];\n }\n }\n\n canHaveLeadingDecorator(): boolean {\n return this.match(tt._class);\n }\n\n parseDecorators(allowExport?: boolean): void {\n const currentContextDecorators = this.state.decoratorStack[\n this.state.decoratorStack.length - 1\n ];\n while (this.match(tt.at)) {\n const decorator = this.parseDecorator();\n currentContextDecorators.push(decorator);\n }\n\n if (this.match(tt._export)) {\n if (!allowExport) {\n this.unexpected();\n }\n\n if (\n this.hasPlugin(\"decorators\") &&\n !this.getPluginOption(\"decorators\", \"decoratorsBeforeExport\")\n ) {\n this.raise(\n this.state.start,\n \"Using the export keyword between a decorator and a class is not allowed. \" +\n \"Please use `export @dec class` instead.\",\n );\n }\n } else if (!this.canHaveLeadingDecorator()) {\n throw this.raise(\n this.state.start,\n \"Leading decorators must be attached to a class declaration\",\n );\n }\n }\n\n parseDecorator(): N.Decorator {\n this.expectOnePlugin([\"decorators-legacy\", \"decorators\"]);\n\n const node = this.startNode();\n this.next();\n\n if (this.hasPlugin(\"decorators\")) {\n // Every time a decorator class expression is evaluated, a new empty array is pushed onto the stack\n // So that the decorators of any nested class expressions will be dealt with separately\n this.state.decoratorStack.push([]);\n\n const startPos = this.state.start;\n const startLoc = this.state.startLoc;\n let expr: N.Expression;\n\n if (this.eat(tt.parenL)) {\n expr = this.parseExpression();\n this.expect(tt.parenR);\n } else {\n expr = this.parseIdentifier(false);\n\n while (this.eat(tt.dot)) {\n const node = this.startNodeAt(startPos, startLoc);\n node.object = expr;\n node.property = this.parseIdentifier(true);\n node.computed = false;\n expr = this.finishNode(node, \"MemberExpression\");\n }\n }\n\n node.expression = this.parseMaybeDecoratorArguments(expr);\n this.state.decoratorStack.pop();\n } else {\n node.expression = this.parseExprSubscripts();\n }\n return this.finishNode(node, \"Decorator\");\n }\n\n parseMaybeDecoratorArguments(expr: N.Expression): N.Expression {\n if (this.eat(tt.parenL)) {\n const node = this.startNodeAtNode(expr);\n node.callee = expr;\n node.arguments = this.parseCallExpressionArguments(tt.parenR, false);\n this.toReferencedList(node.arguments);\n return this.finishNode(node, \"CallExpression\");\n }\n\n return expr;\n }\n\n parseBreakContinueStatement(\n node: N.BreakStatement | N.ContinueStatement,\n keyword: string,\n ): N.BreakStatement | N.ContinueStatement {\n const isBreak = keyword === \"break\";\n this.next();\n\n if (this.isLineTerminator()) {\n node.label = null;\n } else {\n node.label = this.parseIdentifier();\n this.semicolon();\n }\n\n this.verifyBreakContinue(node, keyword);\n\n return this.finishNode(\n node,\n isBreak ? \"BreakStatement\" : \"ContinueStatement\",\n );\n }\n\n verifyBreakContinue(\n node: N.BreakStatement | N.ContinueStatement,\n keyword: string,\n ) {\n const isBreak = keyword === \"break\";\n let i;\n for (i = 0; i < this.state.labels.length; ++i) {\n const lab = this.state.labels[i];\n if (node.label == null || lab.name === node.label.name) {\n if (lab.kind != null && (isBreak || lab.kind === \"loop\")) break;\n if (node.label && isBreak) break;\n }\n }\n if (i === this.state.labels.length) {\n this.raise(node.start, \"Unsyntactic \" + keyword);\n }\n }\n\n parseDebuggerStatement(node: N.DebuggerStatement): N.DebuggerStatement {\n this.next();\n this.semicolon();\n return this.finishNode(node, \"DebuggerStatement\");\n }\n\n parseHeaderExpression(): N.Expression {\n this.expect(tt.parenL);\n const val = this.parseExpression();\n this.expect(tt.parenR);\n return val;\n }\n\n parseDoStatement(node: N.DoWhileStatement): N.DoWhileStatement {\n this.next();\n this.state.labels.push(loopLabel);\n\n node.body =\n // For the smartPipelines plugin: Disable topic references from outer\n // contexts within the loop body. They are permitted in test expressions,\n // outside of the loop body.\n this.withTopicForbiddingContext(() =>\n // Parse the loop body's body.\n this.parseStatement(\"do\"),\n );\n\n this.state.labels.pop();\n\n this.expect(tt._while);\n node.test = this.parseHeaderExpression();\n this.eat(tt.semi);\n return this.finishNode(node, \"DoWhileStatement\");\n }\n\n // Disambiguating between a `for` and a `for`/`in` or `for`/`of`\n // loop is non-trivial. Basically, we have to parse the init `var`\n // statement or expression, disallowing the `in` operator (see\n // the second parameter to `parseExpression`), and then check\n // whether the next token is `in` or `of`. When there is no init\n // part (semicolon immediately after the opening parenthesis), it\n // is a regular `for` loop.\n\n parseForStatement(node: N.Node): N.ForLike {\n this.next();\n this.state.labels.push(loopLabel);\n\n let awaitAt = -1;\n if (this.isAwaitAllowed() && this.eatContextual(\"await\")) {\n awaitAt = this.state.lastTokStart;\n }\n this.scope.enter(SCOPE_OTHER);\n this.expect(tt.parenL);\n\n if (this.match(tt.semi)) {\n if (awaitAt > -1) {\n this.unexpected(awaitAt);\n }\n return this.parseFor(node, null);\n }\n\n const isLet = this.isLet();\n if (this.match(tt._var) || this.match(tt._const) || isLet) {\n const init = this.startNode();\n const kind = isLet ? \"let\" : this.state.value;\n this.next();\n this.parseVar(init, true, kind);\n this.finishNode(init, \"VariableDeclaration\");\n\n if (\n (this.match(tt._in) || this.isContextual(\"of\")) &&\n init.declarations.length === 1\n ) {\n return this.parseForIn(node, init, awaitAt);\n }\n if (awaitAt > -1) {\n this.unexpected(awaitAt);\n }\n return this.parseFor(node, init);\n }\n\n const refShorthandDefaultPos = { start: 0 };\n const init = this.parseExpression(true, refShorthandDefaultPos);\n if (this.match(tt._in) || this.isContextual(\"of\")) {\n const description = this.isContextual(\"of\")\n ? \"for-of statement\"\n : \"for-in statement\";\n this.toAssignable(init, undefined, description);\n this.checkLVal(init, undefined, undefined, description);\n return this.parseForIn(node, init, awaitAt);\n } else if (refShorthandDefaultPos.start) {\n this.unexpected(refShorthandDefaultPos.start);\n }\n if (awaitAt > -1) {\n this.unexpected(awaitAt);\n }\n return this.parseFor(node, init);\n }\n\n parseFunctionStatement(\n node: N.FunctionDeclaration,\n isAsync?: boolean,\n declarationPosition?: boolean,\n ): N.FunctionDeclaration {\n this.next();\n return this.parseFunction(\n node,\n FUNC_STATEMENT | (declarationPosition ? 0 : FUNC_HANGING_STATEMENT),\n isAsync,\n );\n }\n\n parseIfStatement(node: N.IfStatement): N.IfStatement {\n this.next();\n node.test = this.parseHeaderExpression();\n node.consequent = this.parseStatement(\"if\");\n node.alternate = this.eat(tt._else) ? this.parseStatement(\"if\") : null;\n return this.finishNode(node, \"IfStatement\");\n }\n\n parseReturnStatement(node: N.ReturnStatement): N.ReturnStatement {\n if (!this.scope.inFunction && !this.options.allowReturnOutsideFunction) {\n this.raise(this.state.start, \"'return' outside of function\");\n }\n\n this.next();\n\n // In `return` (and `break`/`continue`), the keywords with\n // optional arguments, we eagerly look for a semicolon or the\n // possibility to insert one.\n\n if (this.isLineTerminator()) {\n node.argument = null;\n } else {\n node.argument = this.parseExpression();\n this.semicolon();\n }\n\n return this.finishNode(node, \"ReturnStatement\");\n }\n\n parseSwitchStatement(node: N.SwitchStatement): N.SwitchStatement {\n this.next();\n node.discriminant = this.parseHeaderExpression();\n const cases = (node.cases = []);\n this.expect(tt.braceL);\n this.state.labels.push(switchLabel);\n this.scope.enter(SCOPE_OTHER);\n\n // Statements under must be grouped (by label) in SwitchCase\n // nodes. `cur` is used to keep the node that we are currently\n // adding statements to.\n\n let cur;\n for (let sawDefault; !this.match(tt.braceR); ) {\n if (this.match(tt._case) || this.match(tt._default)) {\n const isCase = this.match(tt._case);\n if (cur) this.finishNode(cur, \"SwitchCase\");\n cases.push((cur = this.startNode()));\n cur.consequent = [];\n this.next();\n if (isCase) {\n cur.test = this.parseExpression();\n } else {\n if (sawDefault) {\n this.raise(this.state.lastTokStart, \"Multiple default clauses\");\n }\n sawDefault = true;\n cur.test = null;\n }\n this.expect(tt.colon);\n } else {\n if (cur) {\n cur.consequent.push(this.parseStatement(null));\n } else {\n this.unexpected();\n }\n }\n }\n this.scope.exit();\n if (cur) this.finishNode(cur, \"SwitchCase\");\n this.next(); // Closing brace\n this.state.labels.pop();\n return this.finishNode(node, \"SwitchStatement\");\n }\n\n parseThrowStatement(node: N.ThrowStatement): N.ThrowStatement {\n this.next();\n if (\n lineBreak.test(this.input.slice(this.state.lastTokEnd, this.state.start))\n ) {\n this.raise(this.state.lastTokEnd, \"Illegal newline after throw\");\n }\n node.argument = this.parseExpression();\n this.semicolon();\n return this.finishNode(node, \"ThrowStatement\");\n }\n\n parseTryStatement(node: N.TryStatement): N.TryStatement {\n this.next();\n\n node.block = this.parseBlock();\n node.handler = null;\n\n if (this.match(tt._catch)) {\n const clause = this.startNode();\n this.next();\n if (this.match(tt.parenL)) {\n this.expect(tt.parenL);\n clause.param = this.parseBindingAtom();\n const simple = clause.param.type === \"Identifier\";\n this.scope.enter(simple ? SCOPE_SIMPLE_CATCH : 0);\n this.checkLVal(clause.param, BIND_LEXICAL, null, \"catch clause\");\n this.expect(tt.parenR);\n } else {\n clause.param = null;\n this.scope.enter(SCOPE_OTHER);\n }\n\n clause.body =\n // For the smartPipelines plugin: Disable topic references from outer\n // contexts within the function body. They are permitted in function\n // default-parameter expressions, which are part of the outer context,\n // outside of the function body.\n this.withTopicForbiddingContext(() =>\n // Parse the catch clause's body.\n this.parseBlock(false, false),\n );\n this.scope.exit();\n\n node.handler = this.finishNode(clause, \"CatchClause\");\n }\n\n node.finalizer = this.eat(tt._finally) ? this.parseBlock() : null;\n\n if (!node.handler && !node.finalizer) {\n this.raise(node.start, \"Missing catch or finally clause\");\n }\n\n return this.finishNode(node, \"TryStatement\");\n }\n\n parseVarStatement(\n node: N.VariableDeclaration,\n kind: \"var\" | \"let\" | \"const\",\n ): N.VariableDeclaration {\n this.next();\n this.parseVar(node, false, kind);\n this.semicolon();\n return this.finishNode(node, \"VariableDeclaration\");\n }\n\n parseWhileStatement(node: N.WhileStatement): N.WhileStatement {\n this.next();\n node.test = this.parseHeaderExpression();\n this.state.labels.push(loopLabel);\n\n node.body =\n // For the smartPipelines plugin:\n // Disable topic references from outer contexts within the loop body.\n // They are permitted in test expressions, outside of the loop body.\n this.withTopicForbiddingContext(() =>\n // Parse loop body.\n this.parseStatement(\"while\"),\n );\n\n this.state.labels.pop();\n\n return this.finishNode(node, \"WhileStatement\");\n }\n\n parseWithStatement(node: N.WithStatement): N.WithStatement {\n if (this.state.strict) {\n this.raise(this.state.start, \"'with' in strict mode\");\n }\n this.next();\n node.object = this.parseHeaderExpression();\n\n node.body =\n // For the smartPipelines plugin:\n // Disable topic references from outer contexts within the function body.\n // They are permitted in function default-parameter expressions, which are\n // part of the outer context, outside of the function body.\n this.withTopicForbiddingContext(() =>\n // Parse the statement body.\n this.parseStatement(\"with\"),\n );\n\n return this.finishNode(node, \"WithStatement\");\n }\n\n parseEmptyStatement(node: N.EmptyStatement): N.EmptyStatement {\n this.next();\n return this.finishNode(node, \"EmptyStatement\");\n }\n\n parseLabeledStatement(\n node: N.LabeledStatement,\n maybeName: string,\n expr: N.Identifier,\n context: ?string,\n ): N.LabeledStatement {\n for (const label of this.state.labels) {\n if (label.name === maybeName) {\n this.raise(expr.start, `Label '${maybeName}' is already declared`);\n }\n }\n\n const kind = this.state.type.isLoop\n ? \"loop\"\n : this.match(tt._switch)\n ? \"switch\"\n : null;\n for (let i = this.state.labels.length - 1; i >= 0; i--) {\n const label = this.state.labels[i];\n if (label.statementStart === node.start) {\n label.statementStart = this.state.start;\n label.kind = kind;\n } else {\n break;\n }\n }\n\n this.state.labels.push({\n name: maybeName,\n kind: kind,\n statementStart: this.state.start,\n });\n node.body = this.parseStatement(\n context\n ? context.indexOf(\"label\") === -1\n ? context + \"label\"\n : context\n : \"label\",\n );\n\n this.state.labels.pop();\n node.label = expr;\n return this.finishNode(node, \"LabeledStatement\");\n }\n\n parseExpressionStatement(\n node: N.ExpressionStatement,\n expr: N.Expression,\n ): N.Statement {\n node.expression = expr;\n this.semicolon();\n return this.finishNode(node, \"ExpressionStatement\");\n }\n\n // Parse a semicolon-enclosed block of statements, handling `\"use\n // strict\"` declarations when `allowStrict` is true (used for\n // function bodies).\n\n parseBlock(\n allowDirectives?: boolean = false,\n createNewLexicalScope?: boolean = true,\n ): N.BlockStatement {\n const node = this.startNode();\n this.expect(tt.braceL);\n if (createNewLexicalScope) {\n this.scope.enter(SCOPE_OTHER);\n }\n this.parseBlockBody(node, allowDirectives, false, tt.braceR);\n if (createNewLexicalScope) {\n this.scope.exit();\n }\n return this.finishNode(node, \"BlockStatement\");\n }\n\n isValidDirective(stmt: N.Statement): boolean {\n return (\n stmt.type === \"ExpressionStatement\" &&\n stmt.expression.type === \"StringLiteral\" &&\n !stmt.expression.extra.parenthesized\n );\n }\n\n parseBlockBody(\n node: N.BlockStatementLike,\n allowDirectives: ?boolean,\n topLevel: boolean,\n end: TokenType,\n ): void {\n const body = (node.body = []);\n const directives = (node.directives = []);\n this.parseBlockOrModuleBlockBody(\n body,\n allowDirectives ? directives : undefined,\n topLevel,\n end,\n );\n }\n\n // Undefined directives means that directives are not allowed.\n parseBlockOrModuleBlockBody(\n body: N.Statement[],\n directives: ?(N.Directive[]),\n topLevel: boolean,\n end: TokenType,\n ): void {\n let parsedNonDirective = false;\n let oldStrict;\n let octalPosition;\n\n while (!this.eat(end)) {\n if (!parsedNonDirective && this.state.containsOctal && !octalPosition) {\n octalPosition = this.state.octalPosition;\n }\n\n const stmt = this.parseStatement(null, topLevel);\n\n if (directives && !parsedNonDirective && this.isValidDirective(stmt)) {\n const directive = this.stmtToDirective(stmt);\n directives.push(directive);\n\n if (oldStrict === undefined && directive.value.value === \"use strict\") {\n oldStrict = this.state.strict;\n this.setStrict(true);\n\n if (octalPosition) {\n this.raise(octalPosition, \"Octal literal in strict mode\");\n }\n }\n\n continue;\n }\n\n parsedNonDirective = true;\n body.push(stmt);\n }\n\n if (oldStrict === false) {\n this.setStrict(false);\n }\n }\n\n // Parse a regular `for` loop. The disambiguation code in\n // `parseStatement` will already have parsed the init statement or\n // expression.\n\n parseFor(\n node: N.ForStatement,\n init: ?(N.VariableDeclaration | N.Expression),\n ): N.ForStatement {\n node.init = init;\n this.expect(tt.semi);\n node.test = this.match(tt.semi) ? null : this.parseExpression();\n this.expect(tt.semi);\n node.update = this.match(tt.parenR) ? null : this.parseExpression();\n this.expect(tt.parenR);\n\n node.body =\n // For the smartPipelines plugin: Disable topic references from outer\n // contexts within the loop body. They are permitted in test expressions,\n // outside of the loop body.\n this.withTopicForbiddingContext(() =>\n // Parse the loop body.\n this.parseStatement(\"for\"),\n );\n\n this.scope.exit();\n this.state.labels.pop();\n\n return this.finishNode(node, \"ForStatement\");\n }\n\n // Parse a `for`/`in` and `for`/`of` loop, which are almost\n // same from parser's perspective.\n\n parseForIn(\n node: N.ForInOf,\n init: N.VariableDeclaration | N.AssignmentPattern,\n awaitAt: number,\n ): N.ForInOf {\n const isForIn = this.match(tt._in);\n this.next();\n\n if (isForIn) {\n if (awaitAt > -1) this.unexpected(awaitAt);\n } else {\n node.await = awaitAt > -1;\n }\n\n if (\n init.type === \"VariableDeclaration\" &&\n init.declarations[0].init != null &&\n (!isForIn ||\n this.state.strict ||\n init.kind !== \"var\" ||\n init.declarations[0].id.type !== \"Identifier\")\n ) {\n this.raise(\n init.start,\n `${\n isForIn ? \"for-in\" : \"for-of\"\n } loop variable declaration may not have an initializer`,\n );\n } else if (init.type === \"AssignmentPattern\") {\n this.raise(init.start, \"Invalid left-hand side in for-loop\");\n }\n\n node.left = init;\n node.right = isForIn ? this.parseExpression() : this.parseMaybeAssign();\n this.expect(tt.parenR);\n\n node.body =\n // For the smartPipelines plugin:\n // Disable topic references from outer contexts within the loop body.\n // They are permitted in test expressions, outside of the loop body.\n this.withTopicForbiddingContext(() =>\n // Parse loop body.\n this.parseStatement(\"for\"),\n );\n\n this.scope.exit();\n this.state.labels.pop();\n\n return this.finishNode(node, isForIn ? \"ForInStatement\" : \"ForOfStatement\");\n }\n\n // Parse a list of variable declarations.\n\n parseVar(\n node: N.VariableDeclaration,\n isFor: boolean,\n kind: \"var\" | \"let\" | \"const\",\n ): N.VariableDeclaration {\n const declarations = (node.declarations = []);\n const isTypescript = this.hasPlugin(\"typescript\");\n node.kind = kind;\n for (;;) {\n const decl = this.startNode();\n this.parseVarId(decl, kind);\n if (this.eat(tt.eq)) {\n decl.init = this.parseMaybeAssign(isFor);\n } else {\n if (\n kind === \"const\" &&\n !(this.match(tt._in) || this.isContextual(\"of\"))\n ) {\n // `const` with no initializer is allowed in TypeScript.\n // It could be a declaration like `const x: number;`.\n if (!isTypescript) {\n this.unexpected();\n }\n } else if (\n decl.id.type !== \"Identifier\" &&\n !(isFor && (this.match(tt._in) || this.isContextual(\"of\")))\n ) {\n this.raise(\n this.state.lastTokEnd,\n \"Complex binding patterns require an initialization value\",\n );\n }\n decl.init = null;\n }\n declarations.push(this.finishNode(decl, \"VariableDeclarator\"));\n if (!this.eat(tt.comma)) break;\n }\n return node;\n }\n\n parseVarId(decl: N.VariableDeclarator, kind: \"var\" | \"let\" | \"const\"): void {\n decl.id = this.parseBindingAtom();\n this.checkLVal(\n decl.id,\n kind === \"var\" ? BIND_VAR : BIND_LEXICAL,\n undefined,\n \"variable declaration\",\n kind !== \"var\",\n );\n }\n\n // Parse a function declaration or literal (depending on the\n // `isStatement` parameter).\n\n parseFunction<T: N.NormalFunction>(\n node: T,\n statement?: number = FUNC_NO_FLAGS,\n isAsync?: boolean = false,\n ): T {\n const isStatement = statement & FUNC_STATEMENT;\n const isHangingStatement = statement & FUNC_HANGING_STATEMENT;\n const requireId = !!isStatement && !(statement & FUNC_NULLABLE_ID);\n\n this.initFunction(node, isAsync);\n\n if (this.match(tt.star) && isHangingStatement) {\n this.raise(\n this.state.start,\n \"Generators can only be declared at the top level or inside a block\",\n );\n }\n node.generator = this.eat(tt.star);\n\n if (isStatement) {\n node.id = this.parseFunctionId(requireId);\n }\n\n const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;\n const oldYieldPos = this.state.yieldPos;\n const oldAwaitPos = this.state.awaitPos;\n this.state.maybeInArrowParameters = false;\n this.state.yieldPos = -1;\n this.state.awaitPos = -1;\n this.scope.enter(functionFlags(node.async, node.generator));\n\n if (!isStatement) {\n node.id = this.parseFunctionId();\n }\n\n this.parseFunctionParams(node);\n\n // For the smartPipelines plugin: Disable topic references from outer\n // contexts within the function body. They are permitted in test\n // expressions, outside of the function body.\n this.withTopicForbiddingContext(() => {\n // Parse the function body.\n this.parseFunctionBodyAndFinish(\n node,\n isStatement ? \"FunctionDeclaration\" : \"FunctionExpression\",\n );\n });\n\n this.scope.exit();\n\n if (isStatement && !isHangingStatement) {\n // We need to register this _after_ parsing the function body\n // because of TypeScript body-less function declarations,\n // which shouldn't be added to the scope.\n this.registerFunctionStatementId(node);\n }\n\n this.state.maybeInArrowParameters = oldMaybeInArrowParameters;\n this.state.yieldPos = oldYieldPos;\n this.state.awaitPos = oldAwaitPos;\n\n return node;\n }\n\n parseFunctionId(requireId?: boolean): ?N.Identifier {\n return requireId || this.match(tt.name) ? this.parseIdentifier() : null;\n }\n\n parseFunctionParams(node: N.Function, allowModifiers?: boolean): void {\n const oldInParameters = this.state.inParameters;\n this.state.inParameters = true;\n\n this.expect(tt.parenL);\n node.params = this.parseBindingList(\n tt.parenR,\n charCodes.rightParenthesis,\n /* allowEmpty */ false,\n allowModifiers,\n );\n\n this.state.inParameters = oldInParameters;\n this.checkYieldAwaitInDefaultParams();\n }\n\n registerFunctionStatementId(node: N.Function): void {\n if (!node.id) return;\n\n // If it is a regular function declaration in sloppy mode, then it is\n // subject to Annex B semantics (BIND_FUNCTION). Otherwise, the binding\n // mode depends on properties of the current scope (see\n // treatFunctionsAsVar).\n this.scope.declareName(\n node.id.name,\n this.state.strict || node.generator || node.async\n ? this.scope.treatFunctionsAsVar\n ? BIND_VAR\n : BIND_LEXICAL\n : BIND_FUNCTION,\n node.id.start,\n );\n }\n\n // Parse a class declaration or literal (depending on the\n // `isStatement` parameter).\n\n parseClass<T: N.Class>(\n node: T,\n isStatement: /* T === ClassDeclaration */ boolean,\n optionalId?: boolean,\n ): T {\n this.next();\n this.takeDecorators(node);\n\n // A class definition is always strict mode code.\n const oldStrict = this.state.strict;\n this.state.strict = true;\n\n this.parseClassId(node, isStatement, optionalId);\n this.parseClassSuper(node);\n node.body = this.parseClassBody(!!node.superClass);\n\n this.state.strict = oldStrict;\n\n return this.finishNode(\n node,\n isStatement ? \"ClassDeclaration\" : \"ClassExpression\",\n );\n }\n\n isClassProperty(): boolean {\n return this.match(tt.eq) || this.match(tt.semi) || this.match(tt.braceR);\n }\n\n isClassMethod(): boolean {\n return this.match(tt.parenL);\n }\n\n isNonstaticConstructor(method: N.ClassMethod | N.ClassProperty): boolean {\n return (\n !method.computed &&\n !method.static &&\n (method.key.name === \"constructor\" || // Identifier\n method.key.value === \"constructor\") // String literal\n );\n }\n\n parseClassBody(constructorAllowsSuper: boolean): N.ClassBody {\n this.classScope.enter();\n\n const state = { hadConstructor: false };\n let decorators: N.Decorator[] = [];\n const classBody: N.ClassBody = this.startNode();\n classBody.body = [];\n\n this.expect(tt.braceL);\n\n // For the smartPipelines plugin: Disable topic references from outer\n // contexts within the class body. They are permitted in test expressions,\n // outside of the class body.\n this.withTopicForbiddingContext(() => {\n while (!this.eat(tt.braceR)) {\n if (this.eat(tt.semi)) {\n if (decorators.length > 0) {\n throw this.raise(\n this.state.lastTokEnd,\n \"Decorators must not be followed by a semicolon\",\n );\n }\n continue;\n }\n\n if (this.match(tt.at)) {\n decorators.push(this.parseDecorator());\n continue;\n }\n\n const member = this.startNode();\n\n // steal the decorators if there are any\n if (decorators.length) {\n member.decorators = decorators;\n this.resetStartLocationFromNode(member, decorators[0]);\n decorators = [];\n }\n\n this.parseClassMember(classBody, member, state, constructorAllowsSuper);\n\n if (\n member.kind === \"constructor\" &&\n member.decorators &&\n member.decorators.length > 0\n ) {\n this.raise(\n member.start,\n \"Decorators can't be used with a constructor. Did you mean '@dec class { ... }'?\",\n );\n }\n }\n });\n\n if (decorators.length) {\n throw this.raise(\n this.state.start,\n \"You have trailing decorators with no method\",\n );\n }\n\n this.classScope.exit();\n\n return this.finishNode(classBody, \"ClassBody\");\n }\n\n parseClassMember(\n classBody: N.ClassBody,\n member: N.ClassMember,\n state: { hadConstructor: boolean },\n constructorAllowsSuper: boolean,\n ): void {\n let isStatic = false;\n const containsEsc = this.state.containsEsc;\n\n if (this.match(tt.name) && this.state.value === \"static\") {\n const key = this.parseIdentifier(true); // eats 'static'\n\n if (this.isClassMethod()) {\n const method: N.ClassMethod = (member: any);\n\n // a method named 'static'\n method.kind = \"method\";\n method.computed = false;\n method.key = key;\n method.static = false;\n this.pushClassMethod(\n classBody,\n method,\n false,\n false,\n /* isConstructor */ false,\n false,\n );\n return;\n } else if (this.isClassProperty()) {\n const prop: N.ClassProperty = (member: any);\n\n // a property named 'static'\n prop.computed = false;\n prop.key = key;\n prop.static = false;\n classBody.body.push(this.parseClassProperty(prop));\n return;\n } else if (containsEsc) {\n throw this.unexpected();\n }\n\n // otherwise something static\n isStatic = true;\n }\n\n this.parseClassMemberWithIsStatic(\n classBody,\n member,\n state,\n isStatic,\n constructorAllowsSuper,\n );\n }\n\n parseClassMemberWithIsStatic(\n classBody: N.ClassBody,\n member: N.ClassMember,\n state: { hadConstructor: boolean },\n isStatic: boolean,\n constructorAllowsSuper: boolean,\n ) {\n const publicMethod: $FlowSubtype<N.ClassMethod> = member;\n const privateMethod: $FlowSubtype<N.ClassPrivateMethod> = member;\n const publicProp: $FlowSubtype<N.ClassMethod> = member;\n const privateProp: $FlowSubtype<N.ClassPrivateMethod> = member;\n\n const method: typeof publicMethod | typeof privateMethod = publicMethod;\n const publicMember: typeof publicMethod | typeof publicProp = publicMethod;\n\n member.static = isStatic;\n\n if (this.eat(tt.star)) {\n // a generator\n method.kind = \"method\";\n this.parseClassPropertyName(method);\n\n if (method.key.type === \"PrivateName\") {\n // Private generator method\n this.pushClassPrivateMethod(classBody, privateMethod, true, false);\n return;\n }\n\n if (this.isNonstaticConstructor(publicMethod)) {\n this.raise(publicMethod.key.start, \"Constructor can't be a generator\");\n }\n\n this.pushClassMethod(\n classBody,\n publicMethod,\n true,\n false,\n /* isConstructor */ false,\n false,\n );\n\n return;\n }\n\n const containsEsc = this.state.containsEsc;\n const key = this.parseClassPropertyName(member);\n const isPrivate = key.type === \"PrivateName\";\n // Check the key is not a computed expression or string literal.\n const isSimple = key.type === \"Identifier\";\n const maybeQuestionTokenStart = this.state.start;\n\n this.parsePostMemberNameModifiers(publicMember);\n\n if (this.isClassMethod()) {\n method.kind = \"method\";\n\n if (isPrivate) {\n this.pushClassPrivateMethod(classBody, privateMethod, false, false);\n return;\n }\n\n // a normal method\n const isConstructor = this.isNonstaticConstructor(publicMethod);\n let allowsDirectSuper = false;\n if (isConstructor) {\n publicMethod.kind = \"constructor\";\n\n // TypeScript allows multiple overloaded constructor declarations.\n if (state.hadConstructor && !this.hasPlugin(\"typescript\")) {\n this.raise(key.start, \"Duplicate constructor in the same class\");\n }\n state.hadConstructor = true;\n allowsDirectSuper = constructorAllowsSuper;\n }\n\n this.pushClassMethod(\n classBody,\n publicMethod,\n false,\n false,\n isConstructor,\n allowsDirectSuper,\n );\n } else if (this.isClassProperty()) {\n if (isPrivate) {\n this.pushClassPrivateProperty(classBody, privateProp);\n } else {\n this.pushClassProperty(classBody, publicProp);\n }\n } else if (\n isSimple &&\n key.name === \"async\" &&\n !containsEsc &&\n !this.isLineTerminator()\n ) {\n // an async method\n const isGenerator = this.eat(tt.star);\n\n if (publicMember.optional) {\n this.unexpected(maybeQuestionTokenStart);\n }\n\n method.kind = \"method\";\n // The so-called parsed name would have been \"async\": get the real name.\n this.parseClassPropertyName(method);\n this.parsePostMemberNameModifiers(publicMember);\n\n if (method.key.type === \"PrivateName\") {\n // private async method\n this.pushClassPrivateMethod(\n classBody,\n privateMethod,\n isGenerator,\n true,\n );\n } else {\n if (this.isNonstaticConstructor(publicMethod)) {\n this.raise(\n publicMethod.key.start,\n \"Constructor can't be an async function\",\n );\n }\n\n this.pushClassMethod(\n classBody,\n publicMethod,\n isGenerator,\n true,\n /* isConstructor */ false,\n false,\n );\n }\n } else if (\n isSimple &&\n (key.name === \"get\" || key.name === \"set\") &&\n !containsEsc &&\n !(this.match(tt.star) && this.isLineTerminator())\n ) {\n // `get\\n*` is an uninitialized property named 'get' followed by a generator.\n // a getter or setter\n method.kind = key.name;\n // The so-called parsed name would have been \"get/set\": get the real name.\n this.parseClassPropertyName(publicMethod);\n\n if (method.key.type === \"PrivateName\") {\n // private getter/setter\n this.pushClassPrivateMethod(classBody, privateMethod, false, false);\n } else {\n if (this.isNonstaticConstructor(publicMethod)) {\n this.raise(\n publicMethod.key.start,\n \"Constructor can't have get/set modifier\",\n );\n }\n this.pushClassMethod(\n classBody,\n publicMethod,\n false,\n false,\n /* isConstructor */ false,\n false,\n );\n }\n\n this.checkGetterSetterParams(publicMethod);\n } else if (this.isLineTerminator()) {\n // an uninitialized class property (due to ASI, since we don't otherwise recognize the next token)\n if (isPrivate) {\n this.pushClassPrivateProperty(classBody, privateProp);\n } else {\n this.pushClassProperty(classBody, publicProp);\n }\n } else {\n this.unexpected();\n }\n }\n\n parseClassPropertyName(member: N.ClassMember): N.Expression | N.Identifier {\n const key = this.parsePropertyName(member, /* isPrivateNameAllowed */ true);\n\n if (\n !member.computed &&\n member.static &&\n ((key: $FlowSubtype<N.Identifier>).name === \"prototype\" ||\n (key: $FlowSubtype<N.StringLiteral>).value === \"prototype\")\n ) {\n this.raise(\n key.start,\n \"Classes may not have static property named prototype\",\n );\n }\n\n if (key.type === \"PrivateName\" && key.id.name === \"constructor\") {\n this.raise(\n key.start,\n \"Classes may not have a private field named '#constructor'\",\n );\n }\n\n return key;\n }\n\n pushClassProperty(classBody: N.ClassBody, prop: N.ClassProperty) {\n if (\n !prop.computed &&\n (prop.key.name === \"constructor\" || prop.key.value === \"constructor\")\n ) {\n // Non-computed field, which is either an identifier named \"constructor\"\n // or a string literal named \"constructor\"\n this.raise(\n prop.key.start,\n \"Classes may not have a field named 'constructor'\",\n );\n }\n\n classBody.body.push(this.parseClassProperty(prop));\n }\n\n pushClassPrivateProperty(\n classBody: N.ClassBody,\n prop: N.ClassPrivateProperty,\n ) {\n this.expectPlugin(\"classPrivateProperties\", prop.key.start);\n\n const node = this.parseClassPrivateProperty(prop);\n classBody.body.push(node);\n\n this.classScope.declarePrivateName(\n node.key.id.name,\n CLASS_ELEMENT_OTHER,\n node.key.start,\n );\n }\n\n pushClassMethod(\n classBody: N.ClassBody,\n method: N.ClassMethod,\n isGenerator: boolean,\n isAsync: boolean,\n isConstructor: boolean,\n allowsDirectSuper: boolean,\n ): void {\n classBody.body.push(\n this.parseMethod(\n method,\n isGenerator,\n isAsync,\n isConstructor,\n allowsDirectSuper,\n \"ClassMethod\",\n true,\n ),\n );\n }\n\n pushClassPrivateMethod(\n classBody: N.ClassBody,\n method: N.ClassPrivateMethod,\n isGenerator: boolean,\n isAsync: boolean,\n ): void {\n this.expectPlugin(\"classPrivateMethods\", method.key.start);\n\n const node = this.parseMethod(\n method,\n isGenerator,\n isAsync,\n /* isConstructor */ false,\n false,\n \"ClassPrivateMethod\",\n true,\n );\n classBody.body.push(node);\n\n const kind =\n node.kind === \"get\"\n ? node.static\n ? CLASS_ELEMENT_STATIC_GETTER\n : CLASS_ELEMENT_INSTANCE_GETTER\n : node.kind === \"set\"\n ? node.static\n ? CLASS_ELEMENT_STATIC_SETTER\n : CLASS_ELEMENT_INSTANCE_SETTER\n : CLASS_ELEMENT_OTHER;\n this.classScope.declarePrivateName(node.key.id.name, kind, node.key.start);\n }\n\n // Overridden in typescript.js\n parsePostMemberNameModifiers(\n // eslint-disable-next-line no-unused-vars\n methodOrProp: N.ClassMethod | N.ClassProperty,\n ): void {}\n\n // Overridden in typescript.js\n parseAccessModifier(): ?N.Accessibility {\n return undefined;\n }\n\n parseClassPrivateProperty(\n node: N.ClassPrivateProperty,\n ): N.ClassPrivateProperty {\n this.scope.enter(SCOPE_CLASS | SCOPE_SUPER);\n\n node.value = this.eat(tt.eq) ? this.parseMaybeAssign() : null;\n this.semicolon();\n\n this.scope.exit();\n\n return this.finishNode(node, \"ClassPrivateProperty\");\n }\n\n parseClassProperty(node: N.ClassProperty): N.ClassProperty {\n if (!node.typeAnnotation) {\n this.expectPlugin(\"classProperties\");\n }\n\n this.scope.enter(SCOPE_CLASS | SCOPE_SUPER);\n\n if (this.match(tt.eq)) {\n this.expectPlugin(\"classProperties\");\n this.next();\n node.value = this.parseMaybeAssign();\n } else {\n node.value = null;\n }\n this.semicolon();\n\n this.scope.exit();\n\n return this.finishNode(node, \"ClassProperty\");\n }\n\n parseClassId(\n node: N.Class,\n isStatement: boolean,\n optionalId: ?boolean,\n bindingType: BindingTypes = BIND_CLASS,\n ): void {\n if (this.match(tt.name)) {\n node.id = this.parseIdentifier();\n if (isStatement) {\n this.checkLVal(node.id, bindingType, undefined, \"class name\");\n }\n } else {\n if (optionalId || !isStatement) {\n node.id = null;\n } else {\n this.unexpected(null, \"A class name is required\");\n }\n }\n }\n\n parseClassSuper(node: N.Class): void {\n node.superClass = this.eat(tt._extends) ? this.parseExprSubscripts() : null;\n }\n\n // Parses module export declaration.\n\n parseExport(node: N.Node): N.AnyExport {\n const hasDefault = this.maybeParseExportDefaultSpecifier(node);\n const parseAfterDefault = !hasDefault || this.eat(tt.comma);\n const hasStar = parseAfterDefault && this.eatExportStar(node);\n const hasNamespace =\n hasStar && this.maybeParseExportNamespaceSpecifier(node);\n const parseAfterNamespace =\n parseAfterDefault && (!hasNamespace || this.eat(tt.comma));\n const isFromRequired = hasDefault || hasStar;\n\n if (hasStar && !hasNamespace) {\n if (hasDefault) this.unexpected();\n this.parseExportFrom(node, true);\n\n return this.finishNode(node, \"ExportAllDeclaration\");\n }\n\n const hasSpecifiers = this.maybeParseExportNamedSpecifiers(node);\n\n if (\n (hasDefault && parseAfterDefault && !hasStar && !hasSpecifiers) ||\n (hasNamespace && parseAfterNamespace && !hasSpecifiers)\n ) {\n throw this.unexpected(null, tt.braceL);\n }\n\n let hasDeclaration;\n if (isFromRequired || hasSpecifiers) {\n hasDeclaration = false;\n this.parseExportFrom(node, isFromRequired);\n } else {\n hasDeclaration = this.maybeParseExportDeclaration(node);\n }\n\n if (isFromRequired || hasSpecifiers || hasDeclaration) {\n this.checkExport(node, true, false, !!node.source);\n return this.finishNode(node, \"ExportNamedDeclaration\");\n }\n\n if (this.eat(tt._default)) {\n // export default ...\n node.declaration = this.parseExportDefaultExpression();\n this.checkExport(node, true, true);\n\n return this.finishNode(node, \"ExportDefaultDeclaration\");\n }\n\n throw this.unexpected(null, tt.braceL);\n }\n\n // eslint-disable-next-line no-unused-vars\n eatExportStar(node: N.Node): boolean {\n return this.eat(tt.star);\n }\n\n maybeParseExportDefaultSpecifier(node: N.Node): boolean {\n if (this.isExportDefaultSpecifier()) {\n // export defaultObj ...\n this.expectPlugin(\"exportDefaultFrom\");\n const specifier = this.startNode();\n specifier.exported = this.parseIdentifier(true);\n node.specifiers = [this.finishNode(specifier, \"ExportDefaultSpecifier\")];\n return true;\n }\n return false;\n }\n\n maybeParseExportNamespaceSpecifier(node: N.Node): boolean {\n if (this.isContextual(\"as\")) {\n if (!node.specifiers) node.specifiers = [];\n\n const specifier = this.startNodeAt(\n this.state.lastTokStart,\n this.state.lastTokStartLoc,\n );\n\n this.next();\n\n specifier.exported = this.parseIdentifier(true);\n node.specifiers.push(\n this.finishNode(specifier, \"ExportNamespaceSpecifier\"),\n );\n return true;\n }\n return false;\n }\n\n maybeParseExportNamedSpecifiers(node: N.Node): boolean {\n if (this.match(tt.braceL)) {\n if (!node.specifiers) node.specifiers = [];\n node.specifiers.push(...this.parseExportSpecifiers());\n\n node.source = null;\n node.declaration = null;\n\n return true;\n }\n return false;\n }\n\n maybeParseExportDeclaration(node: N.Node): boolean {\n if (this.shouldParseExportDeclaration()) {\n if (this.isContextual(\"async\")) {\n const next = this.nextTokenStart();\n\n // export async;\n if (!this.isUnparsedContextual(next, \"function\")) {\n this.unexpected(next, `Unexpected token, expected \"function\"`);\n }\n }\n\n node.specifiers = [];\n node.source = null;\n node.declaration = this.parseExportDeclaration(node);\n\n return true;\n }\n return false;\n }\n\n isAsyncFunction(): boolean {\n if (!this.isContextual(\"async\")) return false;\n const next = this.nextTokenStart();\n return (\n !lineBreak.test(this.input.slice(this.state.pos, next)) &&\n this.isUnparsedContextual(next, \"function\")\n );\n }\n\n parseExportDefaultExpression(): N.Expression | N.Declaration {\n const expr = this.startNode();\n\n const isAsync = this.isAsyncFunction();\n\n if (this.match(tt._function) || isAsync) {\n this.next();\n if (isAsync) {\n this.next();\n }\n\n return this.parseFunction(\n expr,\n FUNC_STATEMENT | FUNC_NULLABLE_ID,\n isAsync,\n );\n } else if (this.match(tt._class)) {\n return this.parseClass(expr, true, true);\n } else if (this.match(tt.at)) {\n if (\n this.hasPlugin(\"decorators\") &&\n this.getPluginOption(\"decorators\", \"decoratorsBeforeExport\")\n ) {\n this.raise(\n this.state.start,\n \"Decorators must be placed *before* the 'export' keyword.\" +\n \" You can set the 'decoratorsBeforeExport' option to false to use\" +\n \" the 'export @decorator class {}' syntax\",\n );\n }\n this.parseDecorators(false);\n return this.parseClass(expr, true, true);\n } else if (this.match(tt._const) || this.match(tt._var) || this.isLet()) {\n throw this.raise(\n this.state.start,\n \"Only expressions, functions or classes are allowed as the `default` export.\",\n );\n } else {\n const res = this.parseMaybeAssign();\n this.semicolon();\n return res;\n }\n }\n\n // eslint-disable-next-line no-unused-vars\n parseExportDeclaration(node: N.ExportNamedDeclaration): ?N.Declaration {\n return this.parseStatement(null);\n }\n\n isExportDefaultSpecifier(): boolean {\n if (this.match(tt.name)) {\n return this.state.value !== \"async\" && this.state.value !== \"let\";\n }\n\n if (!this.match(tt._default)) {\n return false;\n }\n\n const next = this.nextTokenStart();\n return (\n this.input.charCodeAt(next) === charCodes.comma ||\n this.isUnparsedContextual(next, \"from\")\n );\n }\n\n parseExportFrom(node: N.ExportNamedDeclaration, expect?: boolean): void {\n if (this.eatContextual(\"from\")) {\n node.source = this.parseImportSource();\n this.checkExport(node);\n } else {\n if (expect) {\n this.unexpected();\n } else {\n node.source = null;\n }\n }\n\n this.semicolon();\n }\n\n shouldParseExportDeclaration(): boolean {\n if (this.match(tt.at)) {\n this.expectOnePlugin([\"decorators\", \"decorators-legacy\"]);\n if (this.hasPlugin(\"decorators\")) {\n if (this.getPluginOption(\"decorators\", \"decoratorsBeforeExport\")) {\n this.unexpected(\n this.state.start,\n \"Decorators must be placed *before* the 'export' keyword.\" +\n \" You can set the 'decoratorsBeforeExport' option to false to use\" +\n \" the 'export @decorator class {}' syntax\",\n );\n } else {\n return true;\n }\n }\n }\n\n return (\n this.state.type.keyword === \"var\" ||\n this.state.type.keyword === \"const\" ||\n this.state.type.keyword === \"function\" ||\n this.state.type.keyword === \"class\" ||\n this.isLet() ||\n this.isAsyncFunction()\n );\n }\n\n checkExport(\n node: N.ExportNamedDeclaration,\n checkNames?: boolean,\n isDefault?: boolean,\n isFrom?: boolean,\n ): void {\n if (checkNames) {\n // Check for duplicate exports\n if (isDefault) {\n // Default exports\n this.checkDuplicateExports(node, \"default\");\n } else if (node.specifiers && node.specifiers.length) {\n // Named exports\n for (const specifier of node.specifiers) {\n this.checkDuplicateExports(specifier, specifier.exported.name);\n // $FlowIgnore\n if (!isFrom && specifier.local) {\n // check for keywords used as local names\n this.checkReservedWord(\n specifier.local.name,\n specifier.local.start,\n true,\n false,\n );\n // check if export is defined\n // $FlowIgnore\n this.scope.checkLocalExport(specifier.local);\n }\n }\n } else if (node.declaration) {\n // Exported declarations\n if (\n node.declaration.type === \"FunctionDeclaration\" ||\n node.declaration.type === \"ClassDeclaration\"\n ) {\n const id = node.declaration.id;\n if (!id) throw new Error(\"Assertion failure\");\n\n this.checkDuplicateExports(node, id.name);\n } else if (node.declaration.type === \"VariableDeclaration\") {\n for (const declaration of node.declaration.declarations) {\n this.checkDeclaration(declaration.id);\n }\n }\n }\n }\n\n const currentContextDecorators = this.state.decoratorStack[\n this.state.decoratorStack.length - 1\n ];\n if (currentContextDecorators.length) {\n const isClass =\n node.declaration &&\n (node.declaration.type === \"ClassDeclaration\" ||\n node.declaration.type === \"ClassExpression\");\n if (!node.declaration || !isClass) {\n throw this.raise(\n node.start,\n \"You can only use decorators on an export when exporting a class\",\n );\n }\n this.takeDecorators(node.declaration);\n }\n }\n\n checkDeclaration(node: N.Pattern | N.ObjectProperty): void {\n if (node.type === \"Identifier\") {\n this.checkDuplicateExports(node, node.name);\n } else if (node.type === \"ObjectPattern\") {\n for (const prop of node.properties) {\n this.checkDeclaration(prop);\n }\n } else if (node.type === \"ArrayPattern\") {\n for (const elem of node.elements) {\n if (elem) {\n this.checkDeclaration(elem);\n }\n }\n } else if (node.type === \"ObjectProperty\") {\n this.checkDeclaration(node.value);\n } else if (node.type === \"RestElement\") {\n this.checkDeclaration(node.argument);\n } else if (node.type === \"AssignmentPattern\") {\n this.checkDeclaration(node.left);\n }\n }\n\n checkDuplicateExports(\n node:\n | N.Identifier\n | N.ExportNamedDeclaration\n | N.ExportSpecifier\n | N.ExportDefaultSpecifier,\n name: string,\n ): void {\n if (this.state.exportedIdentifiers.indexOf(name) > -1) {\n this.raise(\n node.start,\n name === \"default\"\n ? \"Only one default export allowed per module.\"\n : `\\`${name}\\` has already been exported. Exported identifiers must be unique.`,\n );\n }\n this.state.exportedIdentifiers.push(name);\n }\n\n // Parses a comma-separated list of module exports.\n\n parseExportSpecifiers(): Array<N.ExportSpecifier> {\n const nodes = [];\n let first = true;\n\n // export { x, y as z } [from '...']\n this.expect(tt.braceL);\n\n while (!this.eat(tt.braceR)) {\n if (first) {\n first = false;\n } else {\n this.expect(tt.comma);\n if (this.eat(tt.braceR)) break;\n }\n\n const node = this.startNode();\n node.local = this.parseIdentifier(true);\n node.exported = this.eatContextual(\"as\")\n ? this.parseIdentifier(true)\n : node.local.__clone();\n nodes.push(this.finishNode(node, \"ExportSpecifier\"));\n }\n\n return nodes;\n }\n\n // Parses import declaration.\n\n parseImport(node: N.Node): N.AnyImport {\n // import '...'\n node.specifiers = [];\n if (!this.match(tt.string)) {\n const hasDefault = this.maybeParseDefaultImportSpecifier(node);\n const parseNext = !hasDefault || this.eat(tt.comma);\n const hasStar = parseNext && this.maybeParseStarImportSpecifier(node);\n if (parseNext && !hasStar) this.parseNamedImportSpecifiers(node);\n this.expectContextual(\"from\");\n }\n node.source = this.parseImportSource();\n this.semicolon();\n return this.finishNode(node, \"ImportDeclaration\");\n }\n\n parseImportSource(): N.StringLiteral {\n if (!this.match(tt.string)) this.unexpected();\n return this.parseExprAtom();\n }\n\n // eslint-disable-next-line no-unused-vars\n shouldParseDefaultImport(node: N.ImportDeclaration): boolean {\n return this.match(tt.name);\n }\n\n parseImportSpecifierLocal(\n node: N.ImportDeclaration,\n specifier: N.Node,\n type: string,\n contextDescription: string,\n ): void {\n specifier.local = this.parseIdentifier();\n this.checkLVal(\n specifier.local,\n BIND_LEXICAL,\n undefined,\n contextDescription,\n );\n node.specifiers.push(this.finishNode(specifier, type));\n }\n\n maybeParseDefaultImportSpecifier(node: N.ImportDeclaration): boolean {\n if (this.shouldParseDefaultImport(node)) {\n // import defaultObj, { x, y as z } from '...'\n this.parseImportSpecifierLocal(\n node,\n this.startNode(),\n \"ImportDefaultSpecifier\",\n \"default import specifier\",\n );\n return true;\n }\n return false;\n }\n\n maybeParseStarImportSpecifier(node: N.ImportDeclaration): boolean {\n if (this.match(tt.star)) {\n const specifier = this.startNode();\n this.next();\n this.expectContextual(\"as\");\n\n this.parseImportSpecifierLocal(\n node,\n specifier,\n \"ImportNamespaceSpecifier\",\n \"import namespace specifier\",\n );\n return true;\n }\n return false;\n }\n\n parseNamedImportSpecifiers(node: N.ImportDeclaration) {\n let first = true;\n this.expect(tt.braceL);\n while (!this.eat(tt.braceR)) {\n if (first) {\n first = false;\n } else {\n // Detect an attempt to deep destructure\n if (this.eat(tt.colon)) {\n throw this.raise(\n this.state.start,\n \"ES2015 named imports do not destructure. \" +\n \"Use another statement for destructuring after the import.\",\n );\n }\n\n this.expect(tt.comma);\n if (this.eat(tt.braceR)) break;\n }\n\n this.parseImportSpecifier(node);\n }\n }\n\n parseImportSpecifier(node: N.ImportDeclaration): void {\n const specifier = this.startNode();\n specifier.imported = this.parseIdentifier(true);\n if (this.eatContextual(\"as\")) {\n specifier.local = this.parseIdentifier();\n } else {\n this.checkReservedWord(\n specifier.imported.name,\n specifier.start,\n true,\n true,\n );\n specifier.local = specifier.imported.__clone();\n }\n this.checkLVal(\n specifier.local,\n BIND_LEXICAL,\n undefined,\n \"import specifier\",\n );\n node.specifiers.push(this.finishNode(specifier, \"ImportSpecifier\"));\n }\n}\n","// @flow\n\nimport {\n CLASS_ELEMENT_KIND_ACCESSOR,\n CLASS_ELEMENT_FLAG_STATIC,\n type ClassElementTypes,\n} from \"./scopeflags\";\n\nexport class ClassScope {\n // A list of private named declared in the current class\n privateNames: Set<string> = new Set();\n\n // A list of private getters of setters without their counterpart\n loneAccessors: Map<string, ClassElementTypes> = new Map();\n\n // A list of private names used before being defined, mapping to\n // their position.\n undefinedPrivateNames: Map<string, number> = new Map();\n}\n\ntype raiseFunction = (number, string) => void;\n\nexport default class ClassScopeHandler {\n stack: Array<ClassScope> = [];\n raise: raiseFunction;\n undefinedPrivateNames: Map<string, number> = new Map();\n\n constructor(raise: raiseFunction) {\n this.raise = raise;\n }\n\n current(): ClassScope {\n return this.stack[this.stack.length - 1];\n }\n\n enter() {\n this.stack.push(new ClassScope());\n }\n\n exit() {\n const oldClassScope = this.stack.pop();\n\n // Migrate the usage of not yet defined private names to the outer\n // class scope, or raise an error if we reached the top-level scope.\n\n const current = this.current();\n\n // Array.from is needed because this is compiled to an array-like for loop\n for (const [name, pos] of Array.from(oldClassScope.undefinedPrivateNames)) {\n if (current) {\n if (!current.undefinedPrivateNames.has(name)) {\n current.undefinedPrivateNames.set(name, pos);\n }\n } else {\n this.raiseUndeclaredPrivateName(name, pos);\n }\n }\n }\n\n declarePrivateName(\n name: string,\n elementType: ClassElementTypes,\n pos: number,\n ) {\n const classScope = this.current();\n let redefined = classScope.privateNames.has(name);\n\n if (elementType & CLASS_ELEMENT_KIND_ACCESSOR) {\n const accessor = redefined && classScope.loneAccessors.get(name);\n if (accessor) {\n const oldStatic = accessor & CLASS_ELEMENT_FLAG_STATIC;\n const newStatic = elementType & CLASS_ELEMENT_FLAG_STATIC;\n\n const oldKind = accessor & CLASS_ELEMENT_KIND_ACCESSOR;\n const newKind = elementType & CLASS_ELEMENT_KIND_ACCESSOR;\n\n // The private name can be duplicated only if it is used by\n // two accessors with different kind (get and set), and if\n // they have the same placement (static or not).\n redefined = oldKind === newKind || oldStatic !== newStatic;\n\n if (!redefined) classScope.loneAccessors.delete(name);\n } else if (!redefined) {\n classScope.loneAccessors.set(name, elementType);\n }\n }\n\n if (redefined) {\n this.raise(pos, `Duplicate private name #${name}`);\n }\n\n classScope.privateNames.add(name);\n classScope.undefinedPrivateNames.delete(name);\n }\n\n usePrivateName(name: string, pos: number) {\n let classScope;\n for (classScope of this.stack) {\n if (classScope.privateNames.has(name)) return;\n }\n\n if (classScope) {\n classScope.undefinedPrivateNames.set(name, pos);\n } else {\n // top-level\n this.raiseUndeclaredPrivateName(name, pos);\n }\n }\n\n raiseUndeclaredPrivateName(name: string, pos: number) {\n this.raise(pos, `Private name #${name} is not defined`);\n }\n}\n","// @flow\n\nimport type { Options } from \"../options\";\nimport type { File, JSXOpeningElement } from \"../types\";\nimport type { PluginList } from \"../plugin-utils\";\nimport { getOptions } from \"../options\";\nimport StatementParser from \"./statement\";\nimport { SCOPE_ASYNC, SCOPE_PROGRAM } from \"../util/scopeflags\";\nimport ScopeHandler from \"../util/scope\";\nimport ClassScopeHandler from \"../util/class-scope\";\n\nexport type PluginsMap = Map<string, { [string]: any }>;\n\nexport default class Parser extends StatementParser {\n // Forward-declaration so typescript plugin can override jsx plugin\n +jsxParseOpeningElementAfterName: (\n node: JSXOpeningElement,\n ) => JSXOpeningElement;\n\n constructor(options: ?Options, input: string) {\n options = getOptions(options);\n super(options, input);\n\n const ScopeHandler = this.getScopeHandler();\n\n this.options = options;\n this.inModule = this.options.sourceType === \"module\";\n this.scope = new ScopeHandler(this.raise.bind(this), this.inModule);\n this.classScope = new ClassScopeHandler(this.raise.bind(this));\n this.plugins = pluginsMap(this.options.plugins);\n this.filename = options.sourceFilename;\n }\n\n // This can be overwritten, for example, by the TypeScript plugin.\n getScopeHandler(): Class<ScopeHandler<*>> {\n return ScopeHandler;\n }\n\n parse(): File {\n let scopeFlags = SCOPE_PROGRAM;\n if (this.hasPlugin(\"topLevelAwait\") && this.inModule) {\n scopeFlags |= SCOPE_ASYNC;\n }\n this.scope.enter(scopeFlags);\n const file = this.startNode();\n const program = this.startNode();\n this.nextToken();\n file.errors = null;\n this.parseTopLevel(file, program);\n file.errors = this.state.errors;\n return file;\n }\n}\n\nfunction pluginsMap(plugins: PluginList): PluginsMap {\n const pluginMap: PluginsMap = new Map();\n for (const plugin of plugins) {\n const [name, options] = Array.isArray(plugin) ? plugin : [plugin, {}];\n if (!pluginMap.has(name)) pluginMap.set(name, options || {});\n }\n return pluginMap;\n}\n","// @flow\n\nimport { type Options } from \"./options\";\nimport {\n hasPlugin,\n validatePlugins,\n mixinPluginNames,\n mixinPlugins,\n type PluginList,\n} from \"./plugin-utils\";\nimport Parser from \"./parser\";\n\nimport { types as tokTypes } from \"./tokenizer/types\";\nimport \"./tokenizer/context\";\n\nimport type { Expression, File } from \"./types\";\n\nexport function parse(input: string, options?: Options): File {\n if (options && options.sourceType === \"unambiguous\") {\n options = {\n ...options,\n };\n try {\n options.sourceType = \"module\";\n const parser = getParser(options, input);\n const ast = parser.parse();\n\n if (parser.sawUnambiguousESM) {\n return ast;\n }\n\n if (parser.ambiguousScriptDifferentAst) {\n // Top level await introduces code which can be both a valid script and\n // a valid module, but which produces different ASTs:\n // await\n // 0\n // can be parsed either as an AwaitExpression, or as two ExpressionStatements.\n try {\n options.sourceType = \"script\";\n return getParser(options, input).parse();\n } catch {}\n } else {\n // This is both a valid module and a valid script, but\n // we parse it as a script by default\n ast.program.sourceType = \"script\";\n }\n\n return ast;\n } catch (moduleError) {\n try {\n options.sourceType = \"script\";\n return getParser(options, input).parse();\n } catch {}\n\n throw moduleError;\n }\n } else {\n return getParser(options, input).parse();\n }\n}\n\nexport function parseExpression(input: string, options?: Options): Expression {\n const parser = getParser(options, input);\n if (parser.options.strictMode) {\n parser.state.strict = true;\n }\n return parser.getExpression();\n}\n\nexport { tokTypes };\n\nfunction getParser(options: ?Options, input: string): Parser {\n let cls = Parser;\n if (options && options.plugins) {\n validatePlugins(options.plugins);\n cls = getParserClass(options.plugins);\n }\n\n return new cls(options, input);\n}\n\nconst parserClassCache: { [key: string]: Class<Parser> } = {};\n\n/** Get a Parser class with plugins applied. */\nfunction getParserClass(pluginsFromOptions: PluginList): Class<Parser> {\n const pluginList = mixinPluginNames.filter(name =>\n hasPlugin(pluginsFromOptions, name),\n );\n\n const key = pluginList.join(\"/\");\n let cls = parserClassCache[key];\n if (!cls) {\n cls = Parser;\n for (const plugin of pluginList) {\n cls = mixinPlugins[plugin](cls);\n }\n parserClassCache[key] = cls;\n }\n return cls;\n}\n"],"names":["beforeExpr","startsExpr","isLoop","isAssign","prefix","postfix","TokenType","constructor","label","conf","keyword","rightAssociative","binop","updateContext","keywords","Map","createKeyword","name","options","token","set","createBinop","types","num","bigint","regexp","string","eof","bracketL","bracketR","braceL","braceBarL","braceR","braceBarR","parenL","parenR","comma","semi","colon","doubleColon","dot","question","questionDot","arrow","template","ellipsis","backQuote","dollarBraceL","at","hash","interpreterDirective","eq","assign","incDec","bang","tilde","pipeline","nullishCoalescing","logicalOR","logicalAND","bitwiseOR","bitwiseXOR","bitwiseAND","equality","relational","bitShift","plusMin","modulo","star","slash","exponent","_break","_case","_catch","_continue","_debugger","_default","_do","_else","_finally","_for","_function","_if","_return","_switch","_throw","_try","_var","_const","_while","_with","_new","_this","_super","_class","_extends","_export","_import","_null","_true","_false","_in","_instanceof","_typeof","_void","_delete","SCOPE_OTHER","SCOPE_PROGRAM","SCOPE_FUNCTION","SCOPE_ASYNC","SCOPE_GENERATOR","SCOPE_ARROW","SCOPE_SIMPLE_CATCH","SCOPE_SUPER","SCOPE_DIRECT_SUPER","SCOPE_CLASS","SCOPE_TS_MODULE","SCOPE_VAR","functionFlags","isAsync","isGenerator","BIND_KIND_VALUE","BIND_KIND_TYPE","BIND_SCOPE_VAR","BIND_SCOPE_LEXICAL","BIND_SCOPE_FUNCTION","BIND_SCOPE_OUTSIDE","BIND_FLAGS_NONE","BIND_FLAGS_CLASS","BIND_FLAGS_TS_ENUM","BIND_FLAGS_TS_CONST_ENUM","BIND_FLAGS_TS_EXPORT_ONLY","BIND_CLASS","BIND_LEXICAL","BIND_VAR","BIND_FUNCTION","BIND_TS_INTERFACE","BIND_TS_TYPE","BIND_TS_ENUM","BIND_TS_AMBIENT","BIND_NONE","BIND_OUTSIDE","BIND_TS_CONST_ENUM","BIND_TS_NAMESPACE","CLASS_ELEMENT_FLAG_STATIC","CLASS_ELEMENT_KIND_GETTER","CLASS_ELEMENT_KIND_SETTER","CLASS_ELEMENT_KIND_ACCESSOR","CLASS_ELEMENT_STATIC_GETTER","CLASS_ELEMENT_STATIC_SETTER","CLASS_ELEMENT_INSTANCE_GETTER","CLASS_ELEMENT_INSTANCE_SETTER","CLASS_ELEMENT_OTHER","isSimpleProperty","node","type","kind","method","superClass","estreeParseRegExpLiteral","pattern","flags","regex","RegExp","e","estreeParseLiteral","estreeParseBigIntLiteral","value","bigInt","BigInt","String","parseLiteral","directiveToStmt","directive","directiveLiteral","stmt","startNodeAt","start","loc","expression","raw","extra","finishNodeAt","end","slice","initFunction","checkDeclaration","checkGetterSetterParams","prop","paramCount","params","length","raise","checkLVal","expr","bindingType","checkClashes","contextDescription","disallowLetBinding","properties","forEach","checkDuplicatedProto","protoRef","computed","shorthand","key","used","isValidDirective","parenthesized","stmtToDirective","parseBlockBody","allowDirectives","topLevel","directiveStatements","directives","map","d","body","concat","pushClassMethod","classBody","isConstructor","allowsDirectSuper","parseMethod","typeParameters","push","parseExprAtom","refShorthandDefaultPos","state","tt","startPos","startLoc","parseFunctionBody","allowExpression","isMethod","allowDirectSuper","inClassScope","funcNode","startNode","finishNode","parseObjectMethod","isPattern","containsEsc","parseObjectProperty","toAssignable","isBinding","toAssignableObjectExpressionProp","isLast","finishCallExpression","optional","callee","source","arguments","toReferencedListDeep","exprList","isParenthesizedExpr","lineBreak","lineBreakG","isNewLine","code","skipWhiteSpace","isWhitespace","TokContext","isExpr","preserveSpace","override","braceStatement","braceExpression","templateQuasi","parenStatement","parenExpression","p","readTmplToken","functionExpression","functionStatement","context","exprAllowed","out","pop","curContext","prevType","allowed","scope","inGenerator","isIterator","braceIsBlock","statementParens","test","input","lastTokEnd","b_stat","reservedWords","strict","strictBind","reservedWordsStrictSet","Set","reservedWordsStrictBindSet","isReservedWord","word","inModule","isStrictReservedWord","has","isStrictBindOnlyReservedWord","isStrictBindReservedWord","isKeyword","keywordRelationalOperator","nonASCIIidentifierStartChars","nonASCIIidentifierChars","nonASCIIidentifierStart","nonASCIIidentifier","astralIdentifierStartCodes","astralIdentifierCodes","isInAstralSet","pos","i","isIdentifierStart","fromCharCode","isIteratorStart","current","next","isIdentifierChar","reservedTypes","isEsModuleType","bodyElement","declaration","hasTypeImportKind","importKind","isMaybeDefaultImport","exportSuggestions","const","let","interface","partition","list","list1","list2","FLOW_PRAGMA_REGEX","flowPragma","undefined","shouldParseTypes","getPluginOption","shouldParseEnums","finishToken","val","addComment","comment","matches","exec","Error","flowParseTypeInitialiser","tok","oldInType","inType","expect","flowParseType","flowParsePredicate","moduloLoc","moduloPos","checksLoc","expectContextual","line","column","eat","parseExpression","flowParseTypeAndPredicateInitialiser","predicate","match","flowParseDeclareClass","flowParseInterfaceish","flowParseDeclareFunction","id","parseIdentifier","typeNode","typeContainer","isRelational","flowParseTypeParameterDeclaration","tmp","flowParseFunctionTypeParams","rest","returnType","typeAnnotation","resetEndLocation","semicolon","flowParseDeclare","insideModule","flowParseDeclareVariable","eatContextual","flowParseDeclareModuleExports","lastTokStart","flowParseDeclareModule","isContextual","flowParseDeclareTypeAlias","flowParseDeclareOpaqueType","flowParseDeclareInterface","flowParseDeclareExportDeclaration","unexpected","flowParseTypeAnnotatableIdentifier","declareName","enter","bodyNode","parseImport","exit","hasModuleExport","errorMessage","default","isLet","suggestion","parseExport","exportKind","flowParseTypeAnnotation","flowParseTypeAlias","flowParseOpaqueType","isClass","flowParseRestrictedIdentifier","extends","implements","mixins","flowParseInterfaceExtends","flowParseObjectType","allowStatic","allowExact","allowSpread","allowProto","allowInexact","flowParseQualifiedTypeIdentifier","flowParseTypeParameterInstantiation","flowParseInterface","checkNotUnderscore","checkReservedType","liberal","right","declare","supertype","impltype","flowParseTypeParameter","requireDefault","nodeStart","variance","flowParseVariance","ident","bound","jsxTagStart","defaultRequired","typeParameter","expectRelational","oldNoAnonFunctionType","noAnonFunctionType","flowParseTypeParameterInstantiationCallOrNew","flowParseTypeOrImplicitInstantiation","flowParseInterfaceType","flowParseObjectPropertyKey","flowParseObjectTypeIndexer","isStatic","static","lookahead","flowParseObjectTypeInternalSlot","flowParseObjectTypeMethodish","flowParseFunctionTypeParam","flowParseObjectTypeCallProperty","valueNode","callProperties","indexers","internalSlots","endDelim","exact","inexact","protoStart","inexactStart","propOrInexact","flowParseObjectTypeProperty","flowObjectTypeSemicolon","isInexactToken","argument","proto","flowCheckGetterSetterParams","property","node2","qualification","flowParseGenericType","flowParseTypeofType","flowParsePrimaryType","flowParseTupleType","lh","reinterpretTypeAsFunctionTypeParam","flowIdentToTypeAnnotation","isGroupedType","createIdentifier","flowParsePostfixType","canInsertSemicolon","elementType","flowParsePrefixType","flowParseAnonFunctionWithoutParens","param","flowParseIntersectionType","flowParseUnionType","allowPrimitiveOverride","typeCastToParameter","allowExpressionBody","forwardNoArrowParamsConversionAt","parseFunctionBodyAndFinish","parseStatement","flowParseEnumDeclaration","parseExpressionStatement","shouldParseExportDeclaration","isExportDefaultSpecifier","parseExportDefaultExpression","parseConditional","noIn","refNeedsArrowPos","result","tryParse","error","failState","clone","originalNoArrowAt","noArrowAt","consequent","failed","tryParseConditionalConsequent","valid","invalid","getArrowLikeExpressions","alternate","parseMaybeAssign","noArrowParamsConversionAt","disallowInvalid","stack","arrows","finishArrowValidation","every","isAssignable","toAssignableList","trailingComma","checkParams","parse","indexOf","parseParenItem","typeCastNode","assertModuleNodeAllowed","decl","parseExportDeclaration","declarationNode","specifiers","parseExportSpecifiers","parseExportFrom","eatExportStar","maybeParseExportNamespaceSpecifier","hasNamespace","parseClassId","isStatement","optionalId","getTokenFromCode","charCodeAt","finishOp","readWord","last","elements","element","operator","trailingCommaPos","toReferencedList","parseClassProperty","parseClassPrivateProperty","isClassMethod","isClassProperty","isNonstaticConstructor","pushClassPrivateMethod","parseClassSuper","superTypeParameters","implemented","parsePropertyName","isPrivateNameAllowed","parseObjPropValue","parseAssignableListItemTypes","parseMaybeDefault","left","shouldParseDefaultImport","parseImportSpecifierLocal","specifier","local","maybeParseDefaultImportSpecifier","parseImportSpecifier","firstIdentLoc","firstIdent","specifierTypeKind","isLookaheadContextual","as_ident","imported","__clone","nodeIsTypeImport","specifierIsTypeImport","checkReservedWord","parseFunctionParams","allowModifiers","parseVarId","parseAsyncArrowFromCallExpression","call","shouldParseAsyncArrow","afterLeftParse","jsx","hasPlugin","tc","j_oTag","j_expr","arrowExpression","resetStartLocationFromNode","thrown","parseArrow","shouldParseArrow","setArrowFunctionParameters","allowDuplicates","isArrowFunction","parseParenAndDistinguishExpression","canBeArrow","parseSubscripts","base","noCalls","parseCallExpressionArguments","abort","parseAsyncArrowWithTypeParameters","aborted","parseSubscript","subscriptState","isLookaheadRelational","optionalChainMember","stop","typeArguments","parseNewArguments","targs","parseArrowExpression","readToken_mult_modulo","hasFlowComment","nextToken","readToken_pipe_amp","parseTopLevel","file","program","fileNode","skipBlockComment","skipFlowComment","hasFlowCommentCompletion","shiftToFirstNonWhiteSpace","includes","ch2","ch3","flowEnumErrorBooleanMemberNotInitialized","enumName","memberName","flowEnumErrorInvalidMemberName","toUpperCase","flowEnumErrorDuplicateMemberName","flowEnumErrorInconsistentMemberValues","flowEnumErrorInvalidExplicitType","suppliedType","message","flowEnumErrorInvalidMemberInitializer","explicitType","flowEnumErrorNumberMemberNotInitialized","flowEnumErrorStringMemberInconsistentlyInitailized","flowEnumMemberInit","endOfInit","literal","parseBooleanLiteral","flowEnumMemberRaw","init","flowEnumCheckExplicitTypeMismatch","expectedType","flowEnumMembers","seenNames","members","booleanMembers","numberMembers","stringMembers","defaultedMembers","memberNode","add","flowEnumStringMembers","initializedMembers","member","flowEnumParseExplicitType","flowEnumBody","nameLoc","empty","boolsLen","numsLen","strsLen","defaultedLen","entities","quot","amp","apos","lt","gt","nbsp","iexcl","cent","pound","curren","yen","brvbar","sect","uml","copy","ordf","laquo","not","shy","reg","macr","deg","plusmn","sup2","sup3","acute","micro","para","middot","cedil","sup1","ordm","raquo","frac14","frac12","frac34","iquest","Agrave","Aacute","Acirc","Atilde","Auml","Aring","AElig","Ccedil","Egrave","Eacute","Ecirc","Euml","Igrave","Iacute","Icirc","Iuml","ETH","Ntilde","Ograve","Oacute","Ocirc","Otilde","Ouml","times","Oslash","Ugrave","Uacute","Ucirc","Uuml","Yacute","THORN","szlig","agrave","aacute","acirc","atilde","auml","aring","aelig","ccedil","egrave","eacute","ecirc","euml","igrave","iacute","icirc","iuml","eth","ntilde","ograve","oacute","ocirc","otilde","ouml","divide","oslash","ugrave","uacute","ucirc","uuml","yacute","thorn","yuml","OElig","oelig","Scaron","scaron","Yuml","fnof","circ","Alpha","Beta","Gamma","Delta","Epsilon","Zeta","Eta","Theta","Iota","Kappa","Lambda","Mu","Nu","Xi","Omicron","Pi","Rho","Sigma","Tau","Upsilon","Phi","Chi","Psi","Omega","alpha","beta","gamma","delta","epsilon","zeta","eta","theta","iota","kappa","lambda","mu","nu","xi","omicron","pi","rho","sigmaf","sigma","tau","upsilon","phi","chi","psi","omega","thetasym","upsih","piv","ensp","emsp","thinsp","zwnj","zwj","lrm","rlm","ndash","mdash","lsquo","rsquo","sbquo","ldquo","rdquo","bdquo","dagger","Dagger","bull","hellip","permil","prime","Prime","lsaquo","rsaquo","oline","frasl","euro","image","weierp","real","trade","alefsym","larr","uarr","rarr","darr","harr","crarr","lArr","uArr","rArr","dArr","hArr","forall","part","exist","nabla","isin","notin","ni","prod","sum","minus","lowast","radic","infin","ang","and","or","cap","cup","int","there4","sim","cong","asymp","ne","equiv","le","ge","sub","sup","nsub","sube","supe","oplus","otimes","perp","sdot","lceil","rceil","lfloor","rfloor","lang","rang","loz","spades","clubs","hearts","diams","HEX_NUMBER","DECIMAL_NUMBER","j_cTag","jsxName","jsxText","jsxTagEnd","isFragment","object","getQualifiedJSXName","namespace","jsxReadToken","chunkStart","ch","jsxReadEntity","jsxReadNewLine","normalizeCRLF","curLine","lineStart","jsxReadString","quote","str","count","entity","substr","fromCodePoint","parseInt","XHTMLEntities","jsxReadWord","jsxParseIdentifier","jsxParseNamespacedName","jsxParseElementName","newNode","jsxParseAttributeValue","jsxParseExpressionContainer","jsxParseEmptyExpression","lastTokEndLoc","jsxParseSpreadChild","jsxParseAttribute","jsxParseOpeningElementAt","jsxParseOpeningElementAfterName","attributes","selfClosing","jsxParseClosingElementAt","jsxParseElementAt","children","openingElement","closingElement","contents","openingFragment","closingFragment","jsxParseElement","refShortHandDefaultPos","inPropertyName","Scope","var","lexical","functions","ScopeHandler","scopeStack","undefinedExports","undefinedPrivateNames","inFunction","currentVarScope","inAsync","isVarScope","isClassScope","allowSuper","currentThisScope","inClass","inNonArrowFunction","treatFunctionsAsVar","treatFunctionsAsVarInScope","currentScope","createScope","checkRedeclarationInScope","maybeExportDefined","delete","isRedeclaredInScope","checkLocalExport","TypeScriptScope","enums","constEnums","classes","exportOnlyBindings","TypeScriptScopeHandler","isConst","wasConst","nonNull","x","assert","keywordTypeFromName","getScopeHandler","tsIsIdentifier","tsNextTokenCanFollowModifier","hasPrecedingLineBreak","tsParseModifier","allowedModifiers","modifier","tsTryParse","bind","tsParseModifiers","modifiers","Object","create","hasOwnProperty","tsIsListTerminator","tsParseList","parseElement","tsParseDelimitedList","tsParseDelimitedListWorker","expectSuccess","tsParseBracketedList","bracket","skipFirstToken","tsParseImportType","qualifier","tsParseEntityName","tsParseTypeArguments","allowReservedWords","startNodeAtNode","tsParseTypeReference","typeName","tsParseThisTypePredicate","lhs","parameterName","tsParseTypeAnnotation","tsParseThisTypeNode","tsParseTypeQuery","exprName","tsParseTypeParameter","parseIdentifierName","constraint","tsEatThenParseType","tsTryParseTypeParameters","tsParseTypeParameters","tsTryNextParseConstantContext","tsFillSignature","returnToken","signature","returnTokenRequired","parameters","tsParseBindingListForSignature","tsParseTypeOrTypePredicateAnnotation","parseBindingList","tsParseTypeMemberSemicolon","tsParseSignatureMember","tsIsUnambiguouslyIndexSignature","tsTryParseIndexSignature","tsLookAhead","tsTryParseTypeAnnotation","tsParsePropertyOrMethodSignature","readonly","nodeAny","tsParseTypeMember","idx","tsParseTypeLiteral","tsParseObjectTypeMembers","tsIsStartOfMappedType","tsParseMappedTypeParameter","tsExpectThenParseType","tsParseMappedType","tsTryParseType","tsParseTupleType","elementTypes","tsParseTupleElementType","seenOptionalElement","elementNode","restNode","tsParseType","lookaheadCharCode","raiseRestNotLast","optionalTypeNode","tsParseParenthesizedType","tsParseFunctionOrConstructorType","tsParseLiteralTypeNode","tsParseTemplateLiteralType","templateNode","parseTemplate","expressions","tsParseThisTypeOrThisTypePredicate","thisKeyword","tsParseNonArrayType","parseMaybeUnary","tsParseArrayTypeOrHigher","objectType","indexType","tsParseTypeOperator","tsParseTypeOperatorOrHigher","tsCheckTypeAnnotationForReadOnly","tsParseInferType","find","kw","tsParseUnionOrIntersectionType","parseConstituentType","tsParseIntersectionTypeOrHigher","tsParseUnionTypeOrHigher","tsIsStartOfFunctionType","tsIsUnambiguouslyStartOfFunctionType","tsSkipParameterStart","braceStackCounter","tsInType","t","asserts","tsParseTypePredicateAsserts","thisTypePredicate","typePredicateVariable","tsParseTypePredicatePrefix","tsTryParseTypeOrTypePredicateAnnotation","eatColon","tsParseNonConditionalType","checkType","extendsType","trueType","falseType","tsParseTypeAssertion","tsNextThenParseType","tsParseHeritageClause","descriptor","originalStart","delimitedList","tsParseExpressionWithTypeArguments","tsParseInterfaceDeclaration","tsParseTypeAliasDeclaration","tsInNoContext","cb","oldContext","tsDoThenParseType","tsParseEnumMember","initializer","tsParseEnumDeclaration","tsParseModuleBlock","parseBlockOrModuleBlockBody","tsParseModuleOrNamespaceDeclaration","nested","inner","tsParseAmbientExternalModuleDeclaration","global","tsParseImportEqualsDeclaration","isExport","moduleReference","tsParseModuleReference","tsIsExternalModuleReference","tsParseExternalModuleReference","f","res","tsTryParseAndCatch","tsTryParseDeclare","nany","isLineTerminator","starttype","parseFunctionStatement","parseClass","parseVarStatement","tsParseDeclaration","tsTryParseExportDeclaration","tsParseExpressionStatement","mod","tsCheckLineTerminatorAndMatch","cls","abstract","tokenType","tsTryParseGenericAsyncArrowFunction","tsIsDeclarationStart","parseAssignableListItem","decorators","accessibility","parseAccessModifier","elt","pp","parameter","bodilessType","registerFunctionStatementId","nonNullExpression","atPossibleAsync","asyncArrowFn","parseTaggedTemplateExpression","args","parseExprOp","leftStartPos","leftStartLoc","minPrec","checkKeywords","checkDuplicateExports","isAbstractClass","parseStatementContent","ahead","parseClassMember","constructorAllowsSuper","parseClassMemberWithIsStatic","parsePostMemberNameModifiers","methodOrProp","isDeclare","resetStartLocation","parseClassPropertyAnnotation","definite","equal","typeCast","ct","parseBindingAtom","parseMaybeDecoratorArguments","isInParens","canHaveLeadingDecorator","getGetterSetterExpectedParamCount","baseCount","firstParam","hasContextParam","placeholder","parsePlaceholder","expectedNode","assertNoSpace","finishPlaceholder","isFinished","verifyBreakContinue","parseBlock","parseFunctionId","takeDecorators","parseClassBody","expectPlugin","exported","maybeParseExportDefaultSpecifier","checkExport","filter","hasStarImport","maybeParseStarImportSpecifier","parseNamedImportSpecifiers","parseImportSource","parseV8Intrinsic","v8IntrinsicStart","identifier","plugins","some","plugin","Array","isArray","option","PIPELINE_PROPOSALS","validatePlugins","decoratorsBeforeExport","join","mixinPlugins","estree","flow","typescript","v8intrinsic","placeholders","mixinPluginNames","keys","defaultOptions","sourceType","sourceFilename","startLine","allowAwaitOutsideFunction","allowReturnOutsideFunction","allowImportExportEverywhere","allowSuperOutsideMethod","allowUndeclaredExports","strictMode","ranges","tokens","createParenthesizedExpressions","errorRecovery","getOptions","opts","Position","col","SourceLocation","getLineInfo","offset","lastIndex","index","BaseParser","sawUnambiguousESM","ambiguousScriptDifferentAst","get","CommentsParser","filename","trailingComments","leadingComments","adjustCommentsAfterTrailingComma","takeAllComments","lastElement","j","commentPreviousNode","splice","newTrailingComments","leadingComment","processComment","commentStack","firstChild","lastChild","lastInStack","innerComments","LocationParser","getLocationForPosition","lastTokStartLoc","endLoc","missingPluginNames","err","SyntaxError","missingPlugin","isLookahead","errors","State","potentialArrowAt","inParameters","maybeInArrowParameters","inPipeline","topicContext","maxNumOfResolvableTopics","maxTopicIndex","soloAwait","inFSharpPipelineDirectBody","labels","decoratorStack","yieldPos","awaitPos","comments","containsOctal","octalPosition","exportedIdentifiers","curPosition","skipArrays","isDigit","VALID_REGEX_FLAGS","forbiddenNumericSeparatorSiblings","decBinOct","hex","allowedNumericSeparatorSiblings","bin","oct","dec","Token","Tokenizer","checkKeywordEscapes","old","curr","nextTokenStart","thisTokEnd","skip","setStrict","lastIndexOf","skipSpace","codePointAt","pushComment","block","text","skipLineComment","startSkip","loop","readToken_numberSign","readToken_interpreter","nextPos","readToken_dot","readNumber","readToken_slash","readRegexp","width","readToken_caret","readToken_plus_min","readToken_lt_gt","size","readToken_eq_excl","readToken_question","next2","readRadixNumber","readString","escaped","charAt","content","mods","char","charCode","readInt","radix","len","forceLen","allowNumSeparator","forbiddenSiblings","allowedSiblings","total","Infinity","prev","Number","isNaN","isBigInt","replace","startsWithDot","isFloat","isNonOctalDecimalInt","octal","underscorePos","parseFloat","readCodePoint","throwOnInvalid","codePos","readHexChar","readEscapedChar","containsInvalid","inTemplate","octalStr","n","readWord1","escStart","identifierCheck","esc","keywordTypes","parent","update","UtilParser","addExtra","op","afterNext","isUnparsedContextual","nameStart","nameEnd","messageOrType","expectOnePlugin","names","checkYieldAwaitInDefaultParams","strictDirective","fn","oldState","abortSignal","Node","parser","range","NodeUtils","locationNode","unwrapParenthesizedExpression","LValParser","checkToRestConversion","arg","raiseTrailingCommaAfterRest","parseSpread","parseRestBinding","parseObj","close","closeCharCode","allowEmpty","elts","first","checkCommaAfterRest","parseDecorator","strictModeChanged","elem","ExpressionParser","getExpression","scopeFlags","parseYield","failOnShorthandAssign","parseMaybeConditional","parseExprOps","prec","checkPipelineAtInfixOperator","parseExprOpRightExpr","withTopicPermittingContext","parseSmartPipelineBody","parseExprOpBaseRightExpr","withSoloAwaitPermittingContext","parseFSharpPipelineBody","isAwaitAllowed","parseAwait","parseExprSubscripts","maybeAsyncArrow","parseNoCallExpr","parseMaybePrivateName","classScope","usePrivateName","oldMaybeInArrowParameters","oldYieldPos","oldAwaitPos","tag","quasi","importArg","possibleAsyncArrow","dynamicImport","allowPlaceholder","nodeForExtra","innerParenStart","oldInFSharpPipelineDirectBody","parseExprListItem","parseImportMetaProperty","parseFunction","oldLabels","parseExprList","ret","parseFunctionExpression","parseDecorators","parseNew","primaryTopicReferenceIsAllowedInCurrentTopicContext","registerTopicReference","isPrivate","meta","parseMetaProperty","propertyName","innerStartPos","innerStartLoc","spreadStart","optionalCommaStart","spreadNodeStartPos","spreadNodeStartLoc","innerEndPos","innerEndLoc","arrowNode","parenStart","metaProp","parseTemplateElement","isTagged","cooked","tail","curElt","quasis","propHash","parseObjectMember","isAsyncProp","isGetterOrSetterMethod","oldInPropertyName","generator","async","isExpression","oldStrict","useStrict","oldInParameters","nonSimple","isSimpleParamList","errorPos","nameHash","identifierName","reservedTest","delegate","childExpression","pipelineStyle","checkSmartPipelineBodyStyle","checkSmartPipelineBodyEarlyErrors","parseSmartPipelineBodyInStyle","topicReferenceWasUsedInCurrentTopicContext","isSimpleReference","callback","outerContextTopicState","withTopicForbiddingContext","outerContextSoloAwaitState","loopLabel","switchLabel","FUNC_NO_FLAGS","FUNC_STATEMENT","FUNC_HANGING_STATEMENT","FUNC_NULLABLE_ID","StatementParser","interpreter","parseInterpreterDirective","from","nextCh","parseBreakContinueStatement","parseDebuggerStatement","parseDoStatement","parseForStatement","parseIfStatement","parseReturnStatement","parseSwitchStatement","parseThrowStatement","parseTryStatement","parseWhileStatement","parseWithStatement","parseEmptyStatement","nextTokenCharCode","isAsyncFunction","maybeName","parseLabeledStatement","allowExport","currentContextDecorators","decorator","isBreak","lab","parseHeaderExpression","awaitAt","parseFor","parseVar","declarations","parseForIn","description","declarationPosition","discriminant","cases","cur","sawDefault","isCase","handler","clause","simple","finalizer","statementStart","createNewLexicalScope","parsedNonDirective","isForIn","await","isFor","isTypescript","statement","isHangingStatement","requireId","hadConstructor","publicMethod","privateMethod","publicProp","privateProp","publicMember","parseClassPropertyName","isSimple","maybeQuestionTokenStart","pushClassPrivateProperty","pushClassProperty","declarePrivateName","hasDefault","parseAfterDefault","hasStar","parseAfterNamespace","isFromRequired","hasSpecifiers","maybeParseExportNamedSpecifiers","hasDeclaration","maybeParseExportDeclaration","checkNames","isDefault","isFrom","nodes","parseNext","ClassScope","privateNames","loneAccessors","ClassScopeHandler","oldClassScope","raiseUndeclaredPrivateName","redefined","accessor","oldStatic","newStatic","oldKind","newKind","Parser","pluginsMap","pluginMap","getParser","ast","moduleError","getParserClass","parserClassCache","pluginsFromOptions","pluginList"],"mappings":"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"} |