ghaction-upx/node_modules/@babel/parser/lib/index.js.map
2020-01-23 08:49:02 +00:00

1 line
884 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{"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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"}