@ibyar/expressions 0.8.3 → 0.8.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +0 -3
- package/api/abstract.d.ts +6 -2
- package/api/abstract.js +15 -8
- package/api/abstract.js.map +1 -1
- package/api/class/class.d.ts +15 -18
- package/api/class/class.js +49 -61
- package/api/class/class.js.map +1 -1
- package/api/class/decorator.d.ts +2 -2
- package/api/class/decorator.js +6 -6
- package/api/class/decorator.js.map +1 -1
- package/api/computing/call.d.ts +2 -2
- package/api/computing/call.js +8 -8
- package/api/computing/call.js.map +1 -1
- package/api/computing/debugger.d.ts +1 -2
- package/api/computing/debugger.js +2 -3
- package/api/computing/debugger.js.map +1 -1
- package/api/computing/new.d.ts +2 -2
- package/api/computing/new.js +7 -7
- package/api/computing/new.js.map +1 -1
- package/api/computing/rest.d.ts +2 -2
- package/api/computing/rest.js +6 -6
- package/api/computing/rest.js.map +1 -1
- package/api/computing/return.d.ts +2 -2
- package/api/computing/return.js +6 -6
- package/api/computing/return.js.map +1 -1
- package/api/computing/spread.d.ts +2 -2
- package/api/computing/spread.js +6 -6
- package/api/computing/spread.js.map +1 -1
- package/api/computing/throw.d.ts +4 -4
- package/api/computing/throw.js +18 -18
- package/api/computing/throw.js.map +1 -1
- package/api/computing/yield.d.ts +2 -2
- package/api/computing/yield.js +7 -7
- package/api/computing/yield.js.map +1 -1
- package/api/definition/array.d.ts +3 -3
- package/api/definition/array.js +14 -14
- package/api/definition/array.js.map +1 -1
- package/api/definition/bind.d.ts +2 -2
- package/api/definition/bind.js +9 -9
- package/api/definition/bind.js.map +1 -1
- package/api/definition/comment.d.ts +3 -3
- package/api/definition/comment.js +6 -6
- package/api/definition/comment.js.map +1 -1
- package/api/definition/function.d.ts +17 -16
- package/api/definition/function.js +60 -55
- package/api/definition/function.js.map +1 -1
- package/api/definition/member.d.ts +2 -2
- package/api/definition/member.js +13 -9
- package/api/definition/member.js.map +1 -1
- package/api/definition/object.d.ts +4 -4
- package/api/definition/object.js +22 -22
- package/api/definition/object.js.map +1 -1
- package/api/definition/statement.d.ts +2 -2
- package/api/definition/statement.js +6 -6
- package/api/definition/statement.js.map +1 -1
- package/api/definition/values.d.ts +15 -37
- package/api/definition/values.js +49 -74
- package/api/definition/values.js.map +1 -1
- package/api/expression.d.ts +42 -8
- package/api/expression.js.map +1 -1
- package/api/index.d.ts +1 -0
- package/api/index.js +1 -0
- package/api/index.js.map +1 -1
- package/api/module/common.d.ts +3 -3
- package/api/module/common.js +9 -9
- package/api/module/common.js.map +1 -1
- package/api/module/export.d.ts +5 -5
- package/api/module/export.js +30 -29
- package/api/module/export.js.map +1 -1
- package/api/module/import.d.ts +4 -4
- package/api/module/import.js +24 -23
- package/api/module/import.js.map +1 -1
- package/api/operators/assignment.d.ts +3 -3
- package/api/operators/assignment.js +5 -5
- package/api/operators/assignment.js.map +1 -1
- package/api/operators/await.d.ts +3 -3
- package/api/operators/await.js +7 -7
- package/api/operators/await.js.map +1 -1
- package/api/operators/binary.d.ts +1 -1
- package/api/operators/binary.js +1 -1
- package/api/operators/binary.js.map +1 -1
- package/api/operators/chaining.d.ts +2 -2
- package/api/operators/chaining.js +6 -6
- package/api/operators/chaining.js.map +1 -1
- package/api/operators/comma.d.ts +2 -2
- package/api/operators/comma.js +6 -6
- package/api/operators/comma.js.map +1 -1
- package/api/operators/grouping.d.ts +2 -2
- package/api/operators/grouping.js +6 -6
- package/api/operators/grouping.js.map +1 -1
- package/api/operators/logical.d.ts +1 -1
- package/api/operators/logical.js +1 -1
- package/api/operators/logical.js.map +1 -1
- package/api/operators/pipeline.d.ts +3 -3
- package/api/operators/pipeline.js +8 -8
- package/api/operators/pipeline.js.map +1 -1
- package/api/operators/ternary.d.ts +2 -2
- package/api/operators/ternary.js +8 -8
- package/api/operators/ternary.js.map +1 -1
- package/api/operators/types.d.ts +1 -1
- package/api/operators/unary.d.ts +3 -3
- package/api/operators/unary.js +7 -7
- package/api/operators/unary.js.map +1 -1
- package/api/operators/update.d.ts +3 -3
- package/api/operators/update.js +8 -8
- package/api/operators/update.js.map +1 -1
- package/api/program.d.ts +3 -3
- package/api/program.js +7 -7
- package/api/program.js.map +1 -1
- package/api/statement/control/block.d.ts +2 -2
- package/api/statement/control/block.js +6 -6
- package/api/statement/control/block.js.map +1 -1
- package/api/statement/control/empty.d.ts +2 -3
- package/api/statement/control/empty.js +6 -7
- package/api/statement/control/empty.js.map +1 -1
- package/api/statement/control/if.d.ts +2 -2
- package/api/statement/control/if.js +8 -8
- package/api/statement/control/if.js.map +1 -1
- package/api/statement/control/switch.d.ts +4 -6
- package/api/statement/control/switch.js +19 -20
- package/api/statement/control/switch.js.map +1 -1
- package/api/statement/control/terminate.d.ts +4 -4
- package/api/statement/control/terminate.js +11 -15
- package/api/statement/control/terminate.js.map +1 -1
- package/api/statement/control/with.d.ts +21 -0
- package/api/statement/control/with.js +67 -0
- package/api/statement/control/with.js.map +1 -0
- package/api/statement/declarations/declares.d.ts +4 -4
- package/api/statement/declarations/declares.js +14 -14
- package/api/statement/declarations/declares.js.map +1 -1
- package/api/statement/iterations/for.d.ts +7 -7
- package/api/statement/iterations/for.js +35 -35
- package/api/statement/iterations/for.js.map +1 -1
- package/api/statement/iterations/while.d.ts +3 -3
- package/api/statement/iterations/while.js +14 -14
- package/api/statement/iterations/while.js.map +1 -1
- package/package.json +14 -4
- package/scope/finalizer.d.ts +1 -1
- package/scope/pool.d.ts +1 -1
- package/scope/proxy.d.ts +1 -1
- package/scope/proxy.js +1 -0
- package/scope/proxy.js.map +1 -1
- package/scope/scope.d.ts +2 -2
- package/scope/scope.js +13 -16
- package/scope/scope.js.map +1 -1
- package/scope/stack.js +23 -23
- package/scope/stack.js.map +1 -1
- package/v8/enums.d.ts +4 -2
- package/v8/enums.js.map +1 -1
- package/v8/factory.d.ts +148 -0
- package/v8/factory.js +499 -0
- package/v8/factory.js.map +1 -0
- package/v8/inline.d.ts +49 -49
- package/v8/inline.js +314 -305
- package/v8/inline.js.map +1 -1
- package/v8/node.d.ts +141 -0
- package/v8/node.js +2 -0
- package/v8/node.js.map +1 -0
- package/v8/nodes.d.ts +0 -14
- package/v8/nodes.js +1 -152
- package/v8/nodes.js.map +1 -1
- package/v8/parser.d.ts +21 -18
- package/v8/parser.js +97 -84
- package/v8/parser.js.map +1 -1
- package/v8/stream.d.ts +2 -1
- package/v8/stream.js +221 -311
- package/v8/stream.js.map +1 -1
- package/v8/token.d.ts +3 -1
- package/v8/token.js +7 -5
- package/v8/token.js.map +1 -1
- package/visit/visitor.d.ts +1 -1
package/v8/stream.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stream.js","sourceRoot":"","sources":["../../../src/expressions/v8/stream.ts"],"names":[],"mappings":"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","sourcesContent":["import { ExpressionNode } from '../api/expression.js';\nimport { Token, TokenExpression } from './token.js';\nimport {\n\tGlobalThisNode, OfNode, Identifier,\n\tSymbolNode, AsNode, Literal,\n\tThisNode, NullNode, UndefinedNode,\n\tTrueNode, FalseNode, DefaultNode,\n\tYieldIdentifier, ConstructorIdentifier,\n\tArgumentsIdentifier, NameIdentifier,\n\tEvalIdentifier, SuperIdentifier, LetIdentifier,\n\tSetIdentifier, GetIdentifier, AwaitIdentifier, AsyncIdentifier\n} from '../api/definition/values.js';\nimport { PrivateIdentifier } from '../api/class/class.js';\nimport { DebuggerStatement } from '../api/computing/debugger.js';\nimport { isStrict, LanguageMode } from './language.js';\n\nconst FORBIDDEN_CODE_POINT = ['200b', '200c', '200d', 'feff'];\n\nexport const IdentifierRegex = /^[_A-Za-z\\u00A1-\\uFFFF][_A-Za-z0-9\\u00A1-\\uFFFF]*/;\n\nexport const IdentifierStartRegex = /[_$a-zA-Z\\xA0-\\uFFFF]/;\n\nexport const IdentifierPartRegex = /[_$a-zA-Z0-9\\xA0-\\uFFFF]/;\n\nconst EOFToken = Object.freeze(new TokenExpression(Token.EOS)) as TokenExpression;\n\nexport interface PreTemplateLiteral extends ExpressionNode { };\nexport class PreTemplateLiteral {\n\tconstructor(public strings: string[], public expressions: string[]) { }\n}\n\nexport interface TemplateStringLiteral extends ExpressionNode { };\nexport class TemplateStringLiteral {\n\tconstructor(public string: string) { }\n}\n\nexport abstract class TokenStream {\n\tpublic static getTokenStream(source: string | TokenExpression[], mode?: LanguageMode): TokenStream {\n\t\tif (Array.isArray(source)) {\n\t\t\treturn new TokenStreamer(source, mode);\n\t\t}\n\t\telse if (typeof source === 'string') {\n\t\t\treturn new TokenStreamImpl(source, mode);\n\t\t}\n\t\tthrow new Error(`Can't build token stream for ${source}`);\n\t}\n\tprotected pos = 0;\n\tprotected savedPosition = 0;\n\tprotected current: TokenExpression;\n\tprotected savedCurrent: TokenExpression;\n\tprotected last?: TokenExpression;\n\tconstructor(protected mode = LanguageMode.Strict) { }\n\tsetLanguageMode(mode: LanguageMode) {\n\t\tthis.mode = mode;\n\t}\n\tgetLanguageMode() {\n\t\treturn this.mode;\n\t}\n\tsave() {\n\t\tthis.savedPosition = this.pos;\n\t\tthis.savedCurrent = this.current;\n\t}\n\trestore(): void {\n\t\tthis.pos = this.savedPosition;\n\t\tthis.current = this.savedCurrent;\n\t\tthis.last = undefined;\n\t}\n\treset(): void {\n\t\tthis.pos = 0;\n\t\tthis.savedPosition = 0;\n\t\tthis.current = this.savedCurrent = undefined as any;\n\t}\n\tlastToken(): TokenExpression | undefined {\n\t\treturn this.last;\n\t}\n\tcurrentToken() {\n\t\treturn this.current;\n\t}\n\tseekTo(expect: Token): boolean {\n\t\tlet token: TokenExpression;\n\t\twhile (true) {\n\t\t\ttoken = this.next();\n\t\t\tif (token.token === expect) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\telse if (token.token === Token.EOS) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}\n\tgetPos(): number {\n\t\treturn this.pos;\n\t}\n\tsetPos(pos: number): void {\n\t\tthis.pos = pos;\n\t\tthis.current = undefined as any;\n\t}\n\tgetSavedPos(): number {\n\t\treturn this.savedPosition;\n\t}\n\tgetStreamer(expect: Token = Token.EOS): TokenStream {\n\t\tconst tokens: TokenExpression[] = [];\n\t\tthis.readTill(expect, tokens);\n\t\treturn new TokenStreamer(tokens);\n\t}\n\treadTill(expect: Token = Token.EOS, tokens: TokenExpression[]): void {\n\t\tif (Token.isClosePair(expect)) {\n\t\t\tthis.readTokensPair(Token.openOf(expect), expect, tokens);\n\t\t} else {\n\t\t\tthis.readTokens(expect, tokens);\n\t\t}\n\t}\n\treadTokens(expect: Token, tokens: TokenExpression[]): void {\n\t\tlet token: TokenExpression;\n\t\twhile (true) {\n\t\t\ttoken = this.next();\n\t\t\tif (token.token === expect || token.token === Token.EOS) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\ttokens.push(token);\n\t\t}\n\t}\n\treadTokensConsiderPair(tokens: TokenExpression[], ...expect: Token[]): void {\n\t\tlet token: TokenExpression, open: Token;\n\t\twhile (true) {\n\t\t\tif (Token.isOpenPair(open = this.peek().token)) {\n\t\t\t\tthis.readTokensPair(open, Token.closeOf(open), tokens);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\ttoken = this.next();\n\t\t\tif (expect.includes(token.token) || token.token === Token.EOS) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\ttokens.push(token);\n\t\t}\n\t}\n\treadTokensPair(open: Token, close: Token, tokens: TokenExpression[]): void {\n\t\t// check pair\n\t\tlet count = 0;\n\t\tlet token: TokenExpression;\n\t\twhile (true) {\n\t\t\ttoken = this.next();\n\t\t\tif (token.token === open) {\n\t\t\t\tcount++;\n\t\t\t}\n\t\t\telse if (token.token === close) {\n\t\t\t\tif (count > 0) {\n\t\t\t\t\tcount--;\n\t\t\t\t}\n\t\t\t\tif (count === 0) {\n\t\t\t\t\ttokens.push(token);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (token.token === Token.EOS) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\ttokens.push(token);\n\t\t}\n\t}\n\tpublic toTokens(): TokenExpression[] {\n\t\tconst tokens: TokenExpression[] = [];\n\t\tlet token: TokenExpression;\n\t\twhile (true) {\n\t\t\ttoken = this.next();\n\t\t\tif (token.token === Token.EOS) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\ttokens.push(token);\n\t\t}\n\t\treturn tokens;\n\t}\n\t[Symbol.iterator](): IterableIterator<TokenExpression> {\n\t\tthis.pos = 0;\n\t\tconst self = this;\n\t\treturn {\n\t\t\t[Symbol.iterator]: function () {\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tnext: () => {\n\t\t\t\tconst value = self.next();\n\t\t\t\tconst done = value.isType(Token.EOS);\n\t\t\t\treturn { value, done };\n\t\t\t}\n\t\t}\n\t}\n\tscanRegExpPattern(): boolean {\n\t\treturn false;\n\t};\n\tpeek() {\n\t\tthis.save();\n\t\tconst exp = this.next();\n\t\tthis.restore();\n\t\treturn exp;\n\t}\n\tpeekAhead() {\n\t\tthis.save();\n\t\tthis.next();\n\t\tconst exp = this.next();\n\t\tthis.restore();\n\t\treturn exp;\n\t}\n\tpeekPosition() {\n\t\tthis.save();\n\t\tthis.next();\n\t\tconst pos = this.pos;\n\t\tthis.restore();\n\t\treturn pos;\n\t}\n\tpeekAheadPosition() {\n\t\tthis.save();\n\t\tthis.next();\n\t\tthis.next();\n\t\tconst pos = this.pos;\n\t\tthis.restore();\n\t\treturn pos;\n\t}\n\n\tabstract next(): TokenExpression;\n\tabstract hasLineTerminatorBeforeNext(): boolean;\n\tabstract hasLineTerminatorAfterNext(): boolean;\n\tabstract createError(message: String): string;\n\tabstract scanTemplateContinuation(): TokenExpression;\n}\n\nexport class TokenStreamer extends TokenStream {\n\tconstructor(private tokens: TokenExpression[], mode?: LanguageMode) {\n\t\tsuper(mode);\n\t}\n\tnext(): TokenExpression {\n\t\tif (this.pos === this.tokens.length) {\n\t\t\treturn EOFToken;\n\t\t}\n\t\tthis.last = this.current;\n\t\treturn this.current = this.tokens[this.pos++];\n\t}\n\tcreateError(message: String): string {\n\t\treturn 'parse error [' + this.pos + ']: ' + message;\n\t}\n\thasLineTerminatorBeforeNext(): boolean {\n\t\treturn false;\n\t}\n\thasLineTerminatorAfterNext(): boolean {\n\t\treturn false;\n\t}\n\tscanTemplateContinuation(): TokenExpression {\n\t\treturn this.next();\n\t}\n}\n\nexport class TokenStreamImpl extends TokenStream {\n\tstatic REGEXP_FLAGS = ['g', 'i', 'm', 's', 'u', 'y'];\n\tstatic UnicodePattern = /^[0-9a-f]{4}$/i;\n\tstatic DecimalPattern = /^[0-9a-f]{2}$/i;\n\tstatic AsciiPattern = /^[0-7]{1,3}$/i;\n\tstatic OctalPattern = /^[0-7]+$/i;\n\n\tconstructor(private expression: string, mode?: LanguageMode) {\n\t\tsuper(mode);\n\t}\n\tprivate newToken(type: Token, value?: ExpressionNode): TokenExpression {\n\t\treturn new TokenExpression(type, value);\n\t}\n\tnext(): TokenExpression {\n\t\tif (this.pos >= this.expression.length) {\n\t\t\treturn this.current = EOFToken;\n\t\t}\n\t\tthis.last = this.current;\n\t\tif (this.isWhitespace() || this.isComment()) {\n\t\t\treturn this.next();\n\t\t} else if (\n\t\t\tthis.isRadixInteger()\n\t\t\t|| this.isNumber()\n\t\t\t// || this.isRegExp()\n\t\t\t|| this.isString()\n\t\t\t|| this.isTemplateLiteral()\n\t\t\t|| this.isCurlY()\n\t\t\t|| this.isParentheses()\n\t\t\t|| this.isBracket()\n\t\t\t|| this.isComma()\n\t\t\t|| this.isSemicolon()\n\t\t\t|| this.isOperator()\n\t\t\t|| this.isStatement()\n\t\t\t|| this.isProperty()) {\n\t\t\treturn this.current;\n\t\t} else if (this.pos >= this.expression.length) {\n\t\t\treturn this.current = EOFToken;\n\t\t} else {\n\t\t\tthrow new Error(this.createError('Unknown character \"' + this.expression.charAt(this.pos) + '\"'));\n\t\t}\n\t}\n\thasLineTerminatorBeforeNext(): boolean {\n\t\tconst limit = this.peekPosition();\n\t\tconst str = this.expression.substring(this.pos, limit);\n\t\treturn /(?:\\r?\\n)/g.test(str);\n\t}\n\thasLineTerminatorAfterNext(): boolean {\n\t\tconst start = this.peekPosition();\n\t\tconst end = this.peekAheadPosition();\n\t\tconst str = this.expression.substring(start, end);\n\t\treturn /(?:\\r?\\n)/g.test(str);\n\t}\n\tprivate isString() {\n\t\tconst quote = this.expression.charAt(this.pos);\n\t\tif (quote === '\\'' || quote === '\"') {\n\t\t\tconst start = this.pos;\n\t\t\tlet literal: string[] = [];\n\t\t\tlet c0: string = '';\n\t\t\tconst advance = () => {\n\t\t\t\tc0 = this.expression.charAt(++this.pos);\n\t\t\t};\n\t\t\tconst advanceUntil = (check: (char: string) => boolean) => {\n\t\t\t\twhile (true) {\n\t\t\t\t\tc0 = this.expression.charAt(++this.pos);\n\t\t\t\t\tif (this.pos >= this.expression.length) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tconst result = check(c0);\n\t\t\t\t\tif (result) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\tconst addLiteralChar = (char: string) => literal.push(char);\n\n\t\t\twhile (true) {\n\t\t\t\tadvanceUntil(char => {\n\t\t\t\t\tif (char.charCodeAt(0) > 127) {\n\t\t\t\t\t\tif (this.isStringLiteralLineTerminator(char)) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\taddLiteralChar(char);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tif (this.mayTerminateString(char)) return true;\n\t\t\t\t\taddLiteralChar(c0);\n\t\t\t\t\treturn false;\n\t\t\t\t});\n\t\t\t\twhile (c0 === '\\\\') {\n\t\t\t\t\tadvance();\n\t\t\t\t\tconst char = this.scanEscape(false);\n\t\t\t\t\tif (char == '' || !char) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\taddLiteralChar(char);\n\t\t\t\t\tadvance();\n\t\t\t\t}\n\t\t\t\tif (c0 === quote) {\n\t\t\t\t\tadvance();\n\t\t\t\t\tconst end = this.pos;\n\t\t\t\t\tconst string = literal.join('');\n\t\t\t\t\tconst rawString = this.expression.substring(start, end);\n\t\t\t\t\tconst stringNode = new Literal<string>(string, rawString);\n\t\t\t\t\tthis.current = this.newToken(Token.STRING, stringNode);\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tif (c0 == '' || this.pos >= this.expression.length) {\n\t\t\t\t\t// Unterminated string literal\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\taddLiteralChar(c0);\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\tprivate isTemplateLiteral(): boolean {\n\t\tconst quote = this.expression.charAt(this.pos);\n\t\tif (quote === '`') {\n\t\t\tthis.pos++;\n\t\t\tthis.current = this.scanTemplateSpan();\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\tprivate scanTemplateSpan(): TokenExpression {\n\t\t// When scanning a TemplateSpan, we are looking for the following construct:\n\t\t// TEMPLATE_SPAN ::\n\t\t// ` LiteralChars* ${\n\t\t// | } LiteralChars* ${\n\t\t//\n\t\t// TEMPLATE_TAIL ::\n\t\t// ` LiteralChars* `\n\t\t// | } LiteralChar* `\n\t\t//\n\t\t// A TEMPLATE_SPAN should always be followed by an Expression, while a\n\t\t// TEMPLATE_TAIL terminates a TemplateLiteral and does not need to be\n\t\t// followed by an Expression.\n\n\t\t// These scoped helpers save and restore the original error state, so that we\n\t\t// can specially treat invalid escape sequences in templates (which are\n\t\t// handled by the parser).\n\n\t\tlet result = Token.TEMPLATE_SPAN;\n\t\tlet literal: string[] = [],\n\t\t\tc0: string = this.expression.charAt(this.pos);\n\t\tconst advance = () => {\n\t\t\tthis.pos++;\n\t\t\tc0 = this.expression.charAt(this.pos);\n\t\t};\n\t\tconst addLiteralChar = (char: string) => literal.push(char);\n\t\twhile (true) {\n\t\t\tlet c = c0;\n\t\t\tif (c == '`') {\n\t\t\t\tadvance(); // Consume '`'\n\t\t\t\tresult = Token.TEMPLATE_TAIL;\n\t\t\t\tbreak;\n\t\t\t} else if (c == '$' && this.expression.charAt(this.pos + 1) == '{') {\n\t\t\t\tadvance();\t// Consume '$'\n\t\t\t\tadvance();\t// Consume '{'\n\t\t\t\tbreak;\n\t\t\t} else if (c == '\\\\') {\n\t\t\t\tadvance(); // Consume '\\\\'\n\t\t\t\tif (this.isLineTerminator(c0)) {\n\t\t\t\t\t// The TV of LineContinuation :: \\ LineTerminatorSequence is the empty\n\t\t\t\t\t// code unit sequence.\n\t\t\t\t\tlet lastChar = c0;\n\t\t\t\t\tadvance();\n\t\t\t\t\tif (lastChar == '\\r') {\n\t\t\t\t\t\t// Also skip \\n.\n\t\t\t\t\t\tif (c0 == '\\n') advance();\n\t\t\t\t\t\tlastChar = '\\n';\n\t\t\t\t\t}\n\t\t\t\t\taddLiteralChar(lastChar);\n\t\t\t\t} else {\n\t\t\t\t\tconst char = this.scanEscape(true);\n\t\t\t\t\tif (char === false) {\n\t\t\t\t\t\tthrow new SyntaxError(this.createError('Unterminated Template Escape char'));\n\t\t\t\t\t}\n\t\t\t\t\taddLiteralChar(char);\n\t\t\t\t\tadvance();\n\t\t\t\t}\n\t\t\t} else if (c == '' || this.pos >= this.expression.length) {\n\t\t\t\t// Unterminated template literal\n\t\t\t\tbreak;\n\t\t\t} else {\n\t\t\t\tadvance(); // Consume c.\n\t\t\t\t// The TRV of LineTerminatorSequence :: <CR> is the CV 0x000A.\n\t\t\t\t// The TRV of LineTerminatorSequence :: <CR><LF> is the sequence\n\t\t\t\t// consisting of the CV 0x000A.\n\t\t\t\tif (c == '\\r') {\n\t\t\t\t\tif (c0 == '\\n') advance(); // Consume '\\n'\n\t\t\t\t\tc = '\\n';\n\t\t\t\t}\n\t\t\t\taddLiteralChar(c);\n\t\t\t}\n\t\t}\n\t\treturn this.newToken(result, new TemplateStringLiteral(literal.join('')));\n\t}\n\tpublic scanTemplateContinuation(): TokenExpression {\n\t\tif (this.current.isNotType(Token.RBRACE)) {\n\t\t\tthrow new SyntaxError(this.createError('Unterminated Template Expr'));\n\t\t}\n\t\treturn this.scanTemplateSpan();\n\t}\n\tprivate scanEscape(scanTemplateSpan: boolean): string | false {\n\t\tlet c0: string = this.expression.charAt(this.pos);\n\t\tlet c: string | false = c0;\n\t\t// Skip escaped newlines.\n\t\tif (!scanTemplateSpan && this.isLineTerminator(c)) {\n\t\t\t// Allow escaped CR+LF newlines in multiline string literals.\n\t\t\tif (c == '\\r' && this.expression.charAt(this.pos + 1) == '\\n') this.pos++;\n\t\t\treturn '\\n';\n\t\t}\n\n\t\tswitch (c) {\n\t\t\tcase 'b': c = '\\b'; break;\n\t\t\tcase 'f': c = '\\f'; break;\n\t\t\tcase 'n': c = '\\n'; break;\n\t\t\tcase 'r': c = '\\r'; break;\n\t\t\tcase 't': c = '\\t'; break;\n\t\t\tcase 'u': {\n\t\t\t\tthis.pos++;\n\t\t\t\tc = this.scanUnicodeEscape();\n\t\t\t\tif (c === false) return false;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'v':\n\t\t\t\tc = '\\v';\n\t\t\t\tbreak;\n\t\t\tcase 'x': {\n\t\t\t\tthis.pos++;\n\t\t\t\tc = this.scanHexNumber(2);\n\t\t\t\tif (c === false) return false;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase '0':\n\t\t\tcase '1':\n\t\t\tcase '2':\n\t\t\tcase '3':\n\t\t\tcase '4':\n\t\t\tcase '5':\n\t\t\tcase '6':\n\t\t\tcase '7':\n\t\t\t\tthis.pos++;\n\t\t\t\tc = this.scanOctalEscape(c, 2);\n\t\t\t\tbreak;\n\t\t\tcase '8':\n\t\t\tcase '9':\n\t\t\t\t// '\\8' and '\\9' are disallowed in strict mode.\n\t\t\t\t// Re-use the octal error state to propagate the error.\n\t\t\t\tthrow new SyntaxError(this.createError(`'\\\\8' and '\\\\9' are disallowed in strict mode.`));\n\t\t}\n\t\t// Other escaped characters are interpreted as their non-escaped version.\n\t\treturn c;\n\t}\n\tprivate scanUnicodeEscape(): string | false {\n\t\t// Accept both \\uxxxx and \\u{xxxxxx}. In the latter case, the number of\n\t\t// hex digits between { } is arbitrary. \\ and u have already been read.\n\t\tlet c0: string = this.expression.charAt(this.pos);\n\t\tif (c0 == '{') {\n\t\t\tthis.pos++;\n\t\t\tconst cp = this.scanUnlimitedLengthHexNumber(0x10ffff);\n\t\t\tc0 = this.expression.charAt(++this.pos);\n\t\t\tif (c0 != '}') {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn cp;\n\t\t}\n\t\treturn this.scanHexNumber(4);\n\t}\n\tprivate scanHexNumber(length: number): string | false {\n\t\tif (length > 4) { // prevent overflow\n\t\t\tthrow new RangeError(this.createError('ScanHexNumber: length should be less than or equal to 4'));\n\t\t}\n\t\tlet x = 0;\n\t\tlet scanned = this.pos;\n\t\tlet c0: string = this.expression.charAt(scanned);\n\t\tfor (let i = 0; i < length; i++) {\n\t\t\tlet d = this.hexValue(c0);\n\t\t\tif (d < 0) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tx = x * 16 + d;\n\t\t\tc0 = this.expression.charAt(++scanned);\n\t\t}\n\t\tthis.pos = scanned - 1;\n\t\treturn String.fromCodePoint(x);\n\t}\n\tprivate scanUnlimitedLengthHexNumber(max_value: number) {\n\t\tlet x = 0;\n\t\tlet scanned = this.pos;\n\t\tlet c0: string = this.expression.charAt(scanned);\n\t\tlet d = this.hexValue(c0);\n\t\tif (d < 0) {\n\t\t\tthrow new RangeError(this.createError('Invalid code'));\n\t\t}\n\t\twhile (d >= 0) {\n\t\t\tx = x * 16 + d;\n\t\t\tif (x > max_value) {\n\t\t\t\tthrow new RangeError(this.createError('Undefined Unicode Code Point'));\n\t\t\t}\n\t\t\tc0 = this.expression.charAt(++scanned);\n\t\t\td = this.hexValue(c0);\n\t\t}\n\t\tthis.pos = scanned - 1;\n\t\treturn String.fromCodePoint(x);\n\t}\n\tprivate hexValue(c: string) {\n\t\tlet x = c.charCodeAt(0) - '0'.charCodeAt(0);\n\t\tif (x <= 9) return x;\n\t\tx = (x | 0x20) - ('a'.charCodeAt(0) - '0'.charCodeAt(0)); // detect 0x11..0x16 and 0x31..0x36.\n\t\tif (x <= 5) return x + 10;\n\t\treturn -1;\n\t}\n\tprivate scanOctalEscape(c: string, length: number): string | false {\n\t\tif (!('0' <= c && c <= '7')) {\n\t\t\tthrow new SyntaxError(this.createError('Invalid octal escape sequence'));\n\t\t}\n\t\tconst zero = '0'.charCodeAt(0);\n\t\tlet x = c.charCodeAt(0) - zero;\n\t\tlet scanned = 0;\n\t\tlet i: number = 0;\n\t\tlet char: string = '';\n\t\tfor (; i < length; i++) {\n\t\t\tchar = this.expression.charAt(this.pos + i);\n\t\t\tlet d = char.charCodeAt(0) - zero;\n\t\t\tif (d < 0 || d > 7) break;\n\t\t\tconst nx = x * 8 + d;\n\t\t\tif (nx >= 256) break;\n\t\t\tx = nx;\n\t\t\tscanned++;\n\t\t}\n\t\tthis.pos += scanned - 1;\n\t\treturn String.fromCharCode(x);\n\t}\n\tprivate isParentheses() {\n\t\tconst char = this.expression.charAt(this.pos);\n\t\tif (char === '(') {\n\t\t\tthis.current = this.newToken(Token.LPAREN);\n\t\t\tthis.pos++;\n\t\t\treturn true;\n\t\t} else if (char === ')') {\n\t\t\tthis.current = this.newToken(Token.RPAREN);\n\t\t\tthis.pos++;\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\tprivate isBracket() {\n\t\tconst char = this.expression.charAt(this.pos);\n\t\tif (char === '[') {\n\t\t\tthis.current = this.newToken(Token.LBRACK);\n\t\t\tthis.pos++;\n\t\t\treturn true;\n\t\t} else if (char === ']') {\n\t\t\tthis.current = this.newToken(Token.RBRACK);\n\t\t\tthis.pos++;\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\tprivate isCurlY() {\n\t\tconst char = this.expression.charAt(this.pos);\n\t\tif (char === '{') {\n\t\t\tthis.current = this.newToken(Token.LBRACE);\n\t\t\tthis.pos++;\n\t\t\treturn true;\n\t\t} else if (char === '}') {\n\t\t\tthis.current = this.newToken(Token.RBRACE);\n\t\t\tthis.pos++;\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\tprivate isComma() {\n\t\tconst char = this.expression.charAt(this.pos);\n\t\tif (char === ',') {\n\t\t\tthis.current = this.newToken(Token.COMMA);\n\t\t\tthis.pos++;\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tprivate isSemicolon() {\n\t\tconst char = this.expression.charAt(this.pos);\n\t\tif (char === ';') {\n\t\t\tthis.current = this.newToken(Token.SEMICOLON);\n\t\t\tthis.pos++;\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\tprivate isProperty() {\n\t\tlet startPos = this.pos;\n\t\tlet i = startPos;\n\t\tlet isPrivate = false;\n\t\tlet escape = false;\n\t\tlet escapeFlag = false;\n\t\t// check is private property \n\t\tlet char = this.expression.charAt(i);\n\t\tif (char === '#') {\n\t\t\tisPrivate = true;\n\t\t\tstartPos++;\n\t\t\ti++;\n\t\t}\n\t\tchar = this.expression.charAt(i);\n\t\tif (!IdentifierStartRegex.test(char)) {\n\t\t\tif (char === '\\\\' && this.expression.charAt(i + 1) === 'u') {\n\t\t\t\ti += 2;\n\t\t\t\tescapeFlag = escape = true;\n\t\t\t\t// need to valid the unicode char\n\t\t\t} else {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} else {\n\t\t\ti++;\n\t\t}\n\n\t\tfor (; i < this.expression.length; i++) {\n\t\t\tchar = this.expression.charAt(i);\n\t\t\tif (!IdentifierPartRegex.test(char)) {\n\t\t\t\tif (char === '\\\\' && this.expression.charAt(i + 1) === 'u') {\n\t\t\t\t\ti++;\n\t\t\t\t\tescapeFlag = escape = true;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif ('{' === char && escapeFlag) {\n\t\t\t\t\tconst end = this.expression.indexOf('}', i + 1);\n\t\t\t\t\tif (end === -1) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tescapeFlag = false;\n\t\t\t\t\ti = end;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tlet identifierName = this.expression.substring(startPos, i);\n\t\tif (escape) {\n\t\t\tidentifierName = this.unescape(identifierName);\n\t\t\tif (!IdentifierRegex.test(identifierName)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tthis.pos = i;\n\t\t} else {\n\t\t\tthis.pos += identifierName.length + (isPrivate ? 1 : 0);\n\t\t}\n\t\tlet node: ExpressionNode;\n\t\tif (isPrivate) {\n\t\t\tnode = new PrivateIdentifier(identifierName);\n\t\t\tthis.current = this.newToken(Token.PRIVATE_NAME, node);\n\t\t} else {\n\t\t\tswitch (identifierName) {\n\t\t\t\tcase 'this': this.current = this.newToken(Token.THIS, ThisNode); break;\n\t\t\t\tcase 'null': this.current = this.newToken(Token.NULL_LITERAL, NullNode); break;\n\t\t\t\tcase 'undefined': this.current = this.newToken(Token.UNDEFINED_LITERAL, UndefinedNode); break;\n\t\t\t\tcase 'true': this.current = this.newToken(Token.TRUE_LITERAL, TrueNode); break;\n\t\t\t\tcase 'false': this.current = this.newToken(Token.FALSE_LITERAL, FalseNode); break;\n\n\t\t\t\tcase 'globalThis': this.current = this.newToken(Token.IDENTIFIER, GlobalThisNode); break;\n\t\t\t\tcase 'Symbol': this.current = this.newToken(Token.IDENTIFIER, SymbolNode); break;\n\t\t\t\tcase 'of': this.current = this.newToken(Token.IDENTIFIER, OfNode); break;\n\t\t\t\tcase 'as': this.current = this.newToken(Token.IDENTIFIER, AsNode); break;\n\t\t\t\tcase 'default': this.current = this.newToken(Token.DEFAULT, DefaultNode); break;\n\t\t\t\tcase 'yield': this.current = this.newToken(Token.YIELD, YieldIdentifier); break;\n\t\t\t\tcase 'constructor': this.current = this.newToken(Token.IDENTIFIER, ConstructorIdentifier); break;\n\t\t\t\tcase 'arguments': this.current = this.newToken(Token.IDENTIFIER, ArgumentsIdentifier); break;\n\t\t\t\tcase 'name': this.current = this.newToken(Token.IDENTIFIER, NameIdentifier); break;\n\t\t\t\tcase 'eval': this.current = this.newToken(Token.IDENTIFIER, EvalIdentifier); break;\n\t\t\t\tcase 'debugger': this.current = this.newToken(Token.DEBUGGER, DebuggerStatement.INSTANCE); break;\n\t\t\t\tcase 'class': this.current = this.newToken(Token.CLASS); break;\n\t\t\t\tcase 'await': this.current = this.newToken(Token.AWAIT, AwaitIdentifier); break;\n\t\t\t\tcase 'async': this.current = this.newToken(Token.ASYNC, AsyncIdentifier); break;\n\n\t\t\t\tdefault:\n\t\t\t\t\tnode = new Identifier(identifierName);\n\t\t\t\t\tthis.current = this.newToken(Token.IDENTIFIER, node);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\n\t}\n\tprivate isWhitespace() {\n\t\tlet result = false;\n\t\twhile (FORBIDDEN_CODE_POINT.includes(this.expression.charCodeAt(this.pos).toString(16)!)) {\n\t\t\tthis.pos++;\n\t\t}\n\t\tlet char = this.expression.charAt(this.pos);\n\t\twhile (/\\s/.test(char)) {\n\t\t\tresult = true;\n\t\t\tthis.pos++;\n\t\t\tif (this.pos >= this.expression.length) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tchar = this.expression.charAt(this.pos);\n\t\t}\n\t\treturn result;\n\t}\n\t/**\n\t * [JavaScript 5 Comment Types](https://developer.adobe.com/experience-manager/reference-materials/6-5/javadoc/org/mozilla/javascript/ast/Comment.html)\n\t * @returns boolean\n\t */\n\tprivate isComment() {\n\t\tconst char = this.expression.charAt(this.pos);\n\t\tconst nextChar = this.expression.charAt(this.pos + 1);\n\t\tlet closeTag: string;\n\t\tlet endPos: number;\n\t\tswitch (true) {\n\t\t\t// // line comments\n\t\t\tcase (char === '/' && nextChar === '/'):\n\t\t\t\tcloseTag = '\\n';\n\t\t\t\tendPos = this.expression.indexOf(closeTag, this.pos)\n\t\t\t\tbreak;\n\t\t\t// /* block comments *\\/ and /** jsdoc comments *\\/\n\t\t\tcase (char === '/' && nextChar === '*'):\n\t\t\t\tcloseTag = '*/';\n\t\t\t\tendPos = this.expression.indexOf(closeTag, this.pos);\n\t\t\t\tif (endPos === -1) {\n\t\t\t\t\tthrow new SyntaxError(this.createError('Invalid or unexpected token'));\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t// <!-- html-open line comments\n\t\t\tcase (char === '<' && nextChar === '!'):\n\t\t\t\tif ('<!--' === this.expression.substring(this.pos, this.pos + 4)) {\n\t\t\t\t\tif (isStrict(this.mode)) {\n\t\t\t\t\t\tthrow new SyntaxError('Html Comment not allowed In Module');\n\t\t\t\t\t}\n\t\t\t\t\tconst nextLinePos = this.expression.indexOf('\\n', this.pos);\n\t\t\t\t\tconst closePos = this.expression.indexOf('-->', this.pos);\n\t\t\t\t\tif (nextLinePos < closePos) {\n\t\t\t\t\t\tcloseTag = '\\n';\n\t\t\t\t\t\tendPos = nextLinePos;\n\t\t\t\t\t} else if (closePos < nextLinePos) {\n\t\t\t\t\t\tcloseTag = '-->';\n\t\t\t\t\t\tendPos = closePos;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcloseTag = '';\n\t\t\t\t\t\tendPos = -1;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t// ^\\\\s*--> html-close line comments\n\t\t\tcase (char === '-' && nextChar === '-'):\n\t\t\t\tif ('-->' === this.expression.substring(this.pos, this.pos + 3)) {\n\t\t\t\t\tif (isStrict(this.mode)) {\n\t\t\t\t\t\tthrow new SyntaxError('Html Comment not allowed In Module');\n\t\t\t\t\t}\n\t\t\t\t\t// check if '-->' is the first non-whitespace on the line\n\t\t\t\t\tlet indexOfLastLine = this.expression.lastIndexOf('\\n', this.pos + 1);\n\t\t\t\t\tif (indexOfLastLine == -1) {\n\t\t\t\t\t\tindexOfLastLine = 0;\n\t\t\t\t\t}\n\t\t\t\t\tlet lastLine = this.expression.substring(indexOfLastLine, this.pos + 3);\n\t\t\t\t\tif (!/^\\s*-->$/g.test(lastLine)) {\n\t\t\t\t\t\t// test with close of block comments\n\t\t\t\t\t\tlet lastBlockCommentPos = lastLine.lastIndexOf('*/');\n\t\t\t\t\t\tif (lastBlockCommentPos == -1) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlastLine = lastLine.substring(lastBlockCommentPos + 2);\n\t\t\t\t\t\tif (!/^\\s*-->$/g.test(lastLine)) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tendPos = this.expression.indexOf('\\n', this.pos)\n\t\t\t\t\tcloseTag = '\\n';\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t\tthis.pos = endPos == -1 ? this.expression.length : endPos + closeTag.length;\n\t\treturn true;\n\t}\n\tprivate isLineTerminator(c: string) {\n\t\treturn /[\\n\\r\\u2028\\u2029]/.test(c);\n\t}\n\tprivate isStringLiteralLineTerminator(c: string) {\n\t\treturn /[\\n\\r]/.test(c);\n\t}\n\tprivate mayTerminateString(c: string) {\n\t\treturn (c == '\\'' || c == '\"' || c == '\\n' || c == '\\r' || c == '\\\\');\n\t}\n\tpublic scanRegExpPattern() {\n\t\tconst peek = this.peek();\n\t\tif (peek.isType(Token.DIV) || peek.isType(Token.DIV_ASSIGN)) {\n\t\t\tthis.next();\n\t\t\tlet pattern = peek.isType(Token.DIV_ASSIGN) ? '=' : '';\n\t\t\tlet currentPos = this.pos;\n\t\t\tlet inCharacterClass = false;\n\t\t\tlet c = this.expression.charAt(currentPos);\n\t\t\twhile (c !== '/' || inCharacterClass) {\n\t\t\t\tif (c == '' || this.isLineTerminator(c)) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tif (c === '\\\\') { // Escape sequence.\n\t\t\t\t\tpattern += c;\n\t\t\t\t\tc = this.expression.charAt(++currentPos);\n\t\t\t\t\tif (c == '' || this.isLineTerminator(c)) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tpattern += c;\n\t\t\t\t\tc = this.expression.charAt(++currentPos);\n\t\t\t\t} else {\n\t\t\t\t\tif (c == '[') inCharacterClass = true;\n\t\t\t\t\tif (c == ']') inCharacterClass = false;\n\t\t\t\t\tpattern += c;\n\t\t\t\t\tc = this.expression.charAt(++currentPos);\n\t\t\t\t}\n\t\t\t}\n\t\t\tcurrentPos++; // consume '/'\n\n\t\t\tlet flags = '';\n\t\t\tconst remainFlags = TokenStreamImpl.REGEXP_FLAGS.slice();\n\t\t\twhile (true) {\n\t\t\t\tconst code = this.expression.charCodeAt(currentPos);\n\t\t\t\tconst nextChar = this.expression.charAt(currentPos);\n\t\t\t\tif (/[\\.\\s]/.test(nextChar) || Number.isNaN(code) /* || FORBIDDEN_CODE_POINT.includes(code.toString(16))*/) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tconst nextCharIndex = remainFlags.indexOf(nextChar);\n\t\t\t\tif (nextCharIndex === -1) {\n\t\t\t\t\tif (flags.includes(nextChar)) {\n\t\t\t\t\t\tthrow new Error(this.createError('Invalid regular expression flags'));\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tflags += nextChar;\n\t\t\t\t\tremainFlags.splice(nextCharIndex, 1);\n\t\t\t\t\tcurrentPos++;\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst regexNode = new Literal<RegExp>(new RegExp(pattern, flags), `/${pattern}/${flags}`, { pattern, flags });\n\t\t\tthis.current = this.newToken(Token.REGEXP_LITERAL, regexNode);\n\t\t\tthis.pos = currentPos;\n\t\t\treturn true;\n\n\t\t}\n\t\treturn false;\n\t}\n\tprivate unescape(v: string) {\n\t\tlet index = v.indexOf('\\\\');\n\t\tif (index < 0) {\n\t\t\treturn v;\n\t\t}\n\n\t\tlet buffer = v.substring(0, index);\n\t\twhile (index >= 0) {\n\t\t\tconst c = v.charAt(++index);\n\t\t\tswitch (c) {\n\t\t\t\tcase '\\b':\n\t\t\t\tcase '\\f':\n\t\t\t\tcase '\\n':\n\t\t\t\tcase '\\r':\n\t\t\t\tcase '\\t':\n\t\t\t\tcase '\\v':\n\t\t\t\t\tindex++;\n\t\t\t\t\tbuffer += '\\\\' + c;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'b':\n\t\t\t\t\tindex++;\n\t\t\t\t\tbuffer += '\\b';\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'f':\n\t\t\t\t\tindex++;\n\t\t\t\t\tbuffer += '\\f';\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'n':\n\t\t\t\t\tindex++;\n\t\t\t\t\tbuffer += '\\n';\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'r':\n\t\t\t\t\tindex++;\n\t\t\t\t\tbuffer += '\\r';\n\t\t\t\t\tbreak;\n\t\t\t\tcase 't':\n\t\t\t\t\tindex++;\n\t\t\t\t\tbuffer += '\\t';\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'v':\n\t\t\t\t\tindex++;\n\t\t\t\t\tbuffer += '\\v';\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'u': {\n\t\t\t\t\tindex++;\n\t\t\t\t\t// interpret the following 4 characters as the hex of the unicode code point\n\t\t\t\t\tif ('{' === v.charAt(index)) {\n\t\t\t\t\t\tindex++;\n\t\t\t\t\t\tconst start = index;\n\t\t\t\t\t\tconst end = v.indexOf('}', start + 1);\n\t\t\t\t\t\tconst codePoint = v.substring(start, end);\n\t\t\t\t\t\tbuffer += String.fromCodePoint(parseInt(codePoint, 16));\n\t\t\t\t\t\tindex = end + 1;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst codePoint = v.substring(index, index + 4);\n\t\t\t\t\t\tif (!TokenStreamImpl.UnicodePattern.test(codePoint)) {\n\t\t\t\t\t\t\tthrow new Error(this.createError('Illegal escape sequence: \\\\u ' + codePoint));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbuffer += String.fromCodePoint(parseInt(codePoint, 16));\n\t\t\t\t\t\tindex += 4;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'x': {\n\t\t\t\t\tindex++;\n\t\t\t\t\t// interpret the following 2 characters as the hex of the decimal code point\n\t\t\t\t\tlet codePoint = v.substring(index, index + 2);\n\t\t\t\t\tif (!TokenStreamImpl.DecimalPattern.test(codePoint)) {\n\t\t\t\t\t\tthrow new Error(this.createError('Illegal escape sequence: \\\\x ' + codePoint));\n\t\t\t\t\t}\n\t\t\t\t\tbuffer += String.fromCharCode(parseInt(codePoint, 16));\n\t\t\t\t\tindex += 2;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tdefault:\n\t\t\t\t\tif (!Number.isNaN(parseInt(c, 8))) {\n\t\t\t\t\t\tlet codePoint = c;\n\t\t\t\t\t\tfor (const i of [1, 2]) {\n\t\t\t\t\t\t\tconst tempChar = v.charAt(index + i);\n\t\t\t\t\t\t\tif (!Number.isNaN(parseInt(tempChar, 8))) {\n\t\t\t\t\t\t\t\tcodePoint += tempChar;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!TokenStreamImpl.AsciiPattern.test(codePoint)) {\n\t\t\t\t\t\t\tthrow new Error(this.createError('Illegal escape sequence: ASCII 8 base, ' + codePoint));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbuffer += String.fromCharCode(parseInt(codePoint, 8));\n\t\t\t\t\t\tindex += codePoint.length;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tindex++;\n\t\t\t\t\tbuffer += c;\n\t\t\t\t\tbreak;\n\t\t\t\t// throw new Error(this.createError('Illegal escape sequence: \"\\\\' + c + '\"'));\n\t\t\t}\n\t\t\tlet backslash = v.indexOf('\\\\', index);\n\t\t\tif (backslash == -1) {\n\t\t\t\tbuffer += v.substring(index, v.length);\n\t\t\t\tbreak;\n\t\t\t} else {\n\t\t\t\tbuffer += v.substring(index, backslash);\n\t\t\t\tindex = backslash;\n\t\t\t}\n\t\t}\n\t\treturn buffer;\n\t}\n\tprivate isRadixInteger() {\n\t\tlet pos = this.pos;\n\t\tif (pos >= this.expression.length - 2 || this.expression.charAt(pos) !== '0') {\n\t\t\treturn false;\n\t\t}\n\t\t++pos;\n\n\t\tlet radix;\n\t\tlet validDigit;\n\t\tif (this.expression.charAt(pos) === 'x') {\n\t\t\tradix = 16;\n\t\t\tvalidDigit = /^[0-9a-f]$/i;\n\t\t\t++pos;\n\t\t} else if (this.expression.charAt(pos) === 'b') {\n\t\t\tradix = 2;\n\t\t\tvalidDigit = /^[01]$/i;\n\t\t\t++pos;\n\t\t} else {\n\t\t\treturn false;\n\t\t}\n\n\t\tlet valid = false;\n\t\tlet startPos = pos;\n\n\t\twhile (pos < this.expression.length) {\n\t\t\tconst c = this.expression.charAt(pos);\n\t\t\tif (validDigit.test(c)) {\n\t\t\t\tpos++;\n\t\t\t\tvalid = true;\n\t\t\t} else {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif (valid) {\n\t\t\tconst string = this.expression.substring(startPos, pos);\n\t\t\tconst rawString = this.expression.substring(this.pos, pos);\n\t\t\tconst numNode = new Literal<number>(parseInt(string, radix), rawString);\n\t\t\tthis.current = this.newToken(Token.NUMBER, numNode);\n\t\t\tthis.pos = pos;\n\t\t}\n\t\treturn valid;\n\t}\n\tprivate isNumber() {\n\t\tlet valid = false;\n\t\tlet pos = this.pos;\n\t\tlet startPos = pos;\n\t\tlet resetPos = pos;\n\t\tlet foundDot = false;\n\t\tlet foundDigits = false;\n\t\tlet isOctal = false;\n\t\tlet c;\n\n\t\twhile (pos < this.expression.length) {\n\t\t\tc = this.expression.charAt(pos);\n\t\t\tif ((c >= '0' && c <= '9') || (!foundDot && c === '.')) {\n\t\t\t\tif (c === '.') {\n\t\t\t\t\tfoundDot = true;\n\t\t\t\t} else {\n\t\t\t\t\tfoundDigits = true;\n\t\t\t\t}\n\t\t\t\tpos++;\n\t\t\t\tvalid = foundDigits;\n\t\t\t} else if ('o' == c.toLowerCase()) {\n\t\t\t\tif (pos == startPos + 1) {\n\t\t\t\t\tpos++;\n\t\t\t\t\tisOctal = true;\n\t\t\t\t} else {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif (valid) {\n\t\t\tresetPos = pos;\n\t\t}\n\n\t\tif (c === 'e' || c === 'E') {\n\t\t\tpos++;\n\t\t\tlet acceptSign = true;\n\t\t\tlet validExponent = false;\n\t\t\twhile (pos < this.expression.length) {\n\t\t\t\tc = this.expression.charAt(pos);\n\t\t\t\tif (acceptSign && (c === '+' || c === '-')) {\n\t\t\t\t\tacceptSign = false;\n\t\t\t\t} else if (c >= '0' && c <= '9') {\n\t\t\t\t\tvalidExponent = true;\n\t\t\t\t\tacceptSign = false;\n\t\t\t\t} else {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tpos++;\n\t\t\t}\n\n\t\t\tif (!validExponent) {\n\t\t\t\tpos = resetPos;\n\t\t\t}\n\t\t}\n\n\t\tif (valid) {\n\t\t\tconst rawString = this.expression.substring(startPos, pos);\n\t\t\tif (this.expression.charAt(pos) === 'n') {\n\t\t\t\tconst bigintNode = new Literal<BigInt>(BigInt(rawString), rawString + 'n', undefined, rawString);\n\t\t\t\tthis.current = this.newToken(Token.BIGINT, bigintNode);\n\t\t\t\tpos++;\n\t\t\t} else {\n\t\t\t\tlet numNode: Literal<number>;\n\t\t\t\tif (isOctal) {\n\t\t\t\t\tconst octal = rawString.substring(2);\n\t\t\t\t\tif (TokenStreamImpl.OctalPattern.test(octal)) {\n\t\t\t\t\t\tnumNode = new Literal<number>(parseInt(octal, 8), rawString);\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tnumNode = new Literal<number>(parseFloat(rawString), rawString);\n\t\t\t\t}\n\t\t\t\tthis.current = this.newToken(Token.NUMBER, numNode);\n\t\t\t}\n\t\t\tthis.pos = pos;\n\t\t} else {\n\t\t\tthis.pos = resetPos;\n\t\t}\n\t\treturn valid;\n\t}\n\tprivate isOperator() {\n\t\tconst char = this.expression.charAt(this.pos);\n\t\tswitch (char) {\n\t\t\tcase '+':\n\t\t\t\tif (this.expression.charAt(this.pos + 1) === '+') {\n\t\t\t\t\tthis.current = this.newToken(Token.INC);\n\t\t\t\t\tthis.pos += 2;\n\t\t\t\t} else if (this.expression.charAt(this.pos + 1) === '=') {\n\t\t\t\t\tthis.current = this.newToken(Token.ADD_ASSIGN);\n\t\t\t\t\tthis.pos += 2;\n\t\t\t\t} else {\n\t\t\t\t\tthis.current = this.newToken(Token.ADD);\n\t\t\t\t\tthis.pos++;\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\tcase '-':\n\t\t\t\tif (this.expression.charAt(this.pos + 1) === '-') {\n\t\t\t\t\tthis.current = this.newToken(Token.DEC);\n\t\t\t\t\tthis.pos += 2;\n\t\t\t\t} else if (this.expression.charAt(this.pos + 1) === '=') {\n\t\t\t\t\tthis.current = this.newToken(Token.SUB_ASSIGN);\n\t\t\t\t\tthis.pos += 2;\n\t\t\t\t} else {\n\t\t\t\t\tthis.current = this.newToken(Token.SUB);\n\t\t\t\t\tthis.pos++;\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\tcase '=':\n\t\t\t\tif (this.expression.charAt(this.pos + 1) === '=') {\n\t\t\t\t\tif (this.expression.charAt(this.pos + 2) === '=') {\n\t\t\t\t\t\tthis.current = this.newToken(Token.EQ_STRICT);\n\t\t\t\t\t\tthis.pos += 3;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.current = this.newToken(Token.EQ);\n\t\t\t\t\t\tthis.pos += 2;\n\t\t\t\t\t}\n\t\t\t\t} else if (this.expression.charAt(this.pos + 1) === '>') {\n\t\t\t\t\tthis.current = this.newToken(Token.ARROW);\n\t\t\t\t\tthis.pos += 2;\n\t\t\t\t} else {\n\t\t\t\t\tthis.current = this.newToken(Token.ASSIGN);\n\t\t\t\t\tthis.pos++;\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\tcase '*':\n\t\t\t\tif (this.expression.charAt(this.pos + 1) === '*') {\n\t\t\t\t\tif (this.expression.charAt(this.pos + 2) === '=') {\n\t\t\t\t\t\tthis.current = this.newToken(Token.EXP_ASSIGN);\n\t\t\t\t\t\tthis.pos += 3;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.current = this.newToken(Token.EXP);\n\t\t\t\t\t\tthis.pos += 2;\n\t\t\t\t\t}\n\t\t\t\t} else if (this.expression.charAt(this.pos + 1) === '=') {\n\t\t\t\t\tthis.current = this.newToken(Token.MUL_ASSIGN);\n\t\t\t\t\tthis.pos += 2;\n\t\t\t\t} else {\n\t\t\t\t\tthis.current = this.newToken(Token.MUL);\n\t\t\t\t\tthis.pos++;\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\tcase '/':\n\t\t\t\tif (this.expression.charAt(this.pos + 1) === '=') {\n\t\t\t\t\tthis.current = this.newToken(Token.DIV_ASSIGN);\n\t\t\t\t\tthis.pos += 2;\n\t\t\t\t} else {\n\t\t\t\t\tthis.current = this.newToken(Token.DIV);\n\t\t\t\t\tthis.pos++;\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\tcase '%':\n\t\t\t\tif (this.expression.charAt(this.pos + 1) === '%') {\n\t\t\t\t\tif (this.expression.charAt(this.pos + 1) === '=') {\n\t\t\t\t\t\tthis.current = this.newToken(Token.MODULO_ASSIGN);\n\t\t\t\t\t\tthis.pos += 3;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.current = this.newToken(Token.MODULO);\n\t\t\t\t\t\tthis.pos += 2;\n\t\t\t\t\t}\n\t\t\t\t} else if (this.expression.charAt(this.pos + 1) === '=') {\n\t\t\t\t\tthis.current = this.newToken(Token.MOD_ASSIGN);\n\t\t\t\t\tthis.pos += 2;\n\t\t\t\t} else {\n\t\t\t\t\tthis.current = this.newToken(Token.MOD);\n\t\t\t\t\tthis.pos++;\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\tcase '^':\n\t\t\t\tif (this.expression.charAt(this.pos + 1) === '=') {\n\t\t\t\t\tthis.current = this.newToken(Token.BIT_XOR_ASSIGN);\n\t\t\t\t\tthis.pos += 2;\n\t\t\t\t} else {\n\t\t\t\t\tthis.current = this.newToken(Token.BIT_XOR);\n\t\t\t\t\tthis.pos++;\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\tcase '>':\n\t\t\t\tif (this.expression.charAt(this.pos + 1) === '>') {\n\t\t\t\t\tif (this.expression.charAt(this.pos + 2) === '>') {\n\t\t\t\t\t\tif (this.expression.charAt(this.pos + 3) === '=') {\n\t\t\t\t\t\t\tthis.current = this.newToken(Token.SHR_ASSIGN);\n\t\t\t\t\t\t\tthis.pos += 4;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.current = this.newToken(Token.SHR);\n\t\t\t\t\t\t\tthis.pos += 3;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (this.expression.charAt(this.pos + 2) === '=') {\n\t\t\t\t\t\tthis.current = this.newToken(Token.SAR_ASSIGN);\n\t\t\t\t\t\tthis.pos += 3;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.current = this.newToken(Token.SAR);\n\t\t\t\t\t\tthis.pos += 2;\n\t\t\t\t\t}\n\t\t\t\t} else if (this.expression.charAt(this.pos + 1) === '=') {\n\t\t\t\t\tthis.current = this.newToken(Token.GTE);\n\t\t\t\t\tthis.pos += 2;\n\t\t\t\t} else if (this.expression.charAt(this.pos + 1) === '?') {\n\t\t\t\t\tif (this.expression.charAt(this.pos + 2) === '=') {\n\t\t\t\t\t\tthis.current = this.newToken(Token.LARGER_ASSIGN);\n\t\t\t\t\t\tthis.pos += 3;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.current = this.newToken(Token.LARGER);\n\t\t\t\t\t\tthis.pos += 2;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tthis.current = this.newToken(Token.GT);\n\t\t\t\t\tthis.pos++;\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\tcase '<':\n\t\t\t\tif (this.expression.charAt(this.pos + 1) === '<') {\n\t\t\t\t\tif (this.expression.charAt(this.pos + 2) === '=') {\n\t\t\t\t\t\tthis.current = this.newToken(Token.SHL_ASSIGN);\n\t\t\t\t\t\tthis.pos += 3;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.current = this.newToken(Token.SHL);\n\t\t\t\t\t\tthis.pos += 2;\n\t\t\t\t\t}\n\t\t\t\t} else if (this.expression.charAt(this.pos + 1) === '=') {\n\t\t\t\t\tif (this.expression.charAt(this.pos + 2) === '>') {\n\t\t\t\t\t\tthis.current = this.newToken(Token.SPACESHIP);\n\t\t\t\t\t\tthis.pos += 3;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.current = this.newToken(Token.LTE);\n\t\t\t\t\t\tthis.pos += 2;\n\t\t\t\t\t}\n\t\t\t\t} else if (this.expression.charAt(this.pos + 1) === '?') {\n\t\t\t\t\tif (this.expression.charAt(this.pos + 2) === '=') {\n\t\t\t\t\t\tthis.current = this.newToken(Token.SMALLER_ASSIGN);\n\t\t\t\t\t\tthis.pos += 3;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.current = this.newToken(Token.SMALLER);\n\t\t\t\t\t\tthis.pos += 2;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tthis.current = this.newToken(Token.LT);\n\t\t\t\t\tthis.pos++;\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\tcase '|':\n\t\t\t\tif (this.expression.charAt(this.pos + 1) === '|') {\n\t\t\t\t\tif (this.expression.charAt(this.pos + 2) === '=') {\n\t\t\t\t\t\tthis.current = this.newToken(Token.OR_ASSIGN);\n\t\t\t\t\t\tthis.pos += 3;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.current = this.newToken(Token.OR);\n\t\t\t\t\t\tthis.pos += 2;\n\t\t\t\t\t}\n\t\t\t\t} else if (this.expression.charAt(this.pos + 1) === '=') {\n\t\t\t\t\tthis.current = this.newToken(Token.BIT_OR_ASSIGN);\n\t\t\t\t\tthis.pos += 2;\n\t\t\t\t} else if (this.expression.charAt(this.pos + 1) === '>') {\n\t\t\t\t\tthis.current = this.newToken(Token.PIPELINE);\n\t\t\t\t\tthis.pos += 2;\n\t\t\t\t} else {\n\t\t\t\t\tthis.current = this.newToken(Token.BIT_OR);\n\t\t\t\t\tthis.pos++;\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\tcase '&':\n\t\t\t\tif (this.expression.charAt(this.pos + 1) === '&') {\n\t\t\t\t\tif (this.expression.charAt(this.pos + 2) === '=') {\n\t\t\t\t\t\tthis.current = this.newToken(Token.AND_ASSIGN);\n\t\t\t\t\t\tthis.pos += 3;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.current = this.newToken(Token.AND);\n\t\t\t\t\t\tthis.pos += 2;\n\t\t\t\t\t}\n\t\t\t\t} else if (this.expression.charAt(this.pos + 1) === '=') {\n\t\t\t\t\tthis.current = this.newToken(Token.BIT_AND_ASSIGN);\n\t\t\t\t\tthis.pos += 2;\n\t\t\t\t} else {\n\t\t\t\t\tthis.current = this.newToken(Token.BIT_AND);\n\t\t\t\t\tthis.pos++;\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\tcase '?':\n\t\t\t\tif (this.expression.charAt(this.pos + 1) === '?') {\n\t\t\t\t\tif (this.expression.charAt(this.pos + 2) === '=') {\n\t\t\t\t\t\tthis.current = this.newToken(Token.NULLISH_ASSIGN);\n\t\t\t\t\t\tthis.pos += 3;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.current = this.newToken(Token.NULLISH);\n\t\t\t\t\t\tthis.pos += 2;\n\t\t\t\t\t}\n\t\t\t\t} else if (this.expression.substring(this.pos + 1, this.pos + 3) == '::') {\n\t\t\t\t\tthis.current = this.newToken(Token.QUESTION_BIND);\n\t\t\t\t\tthis.pos += 3;\n\t\t\t\t} else if (this.expression.charAt(this.pos + 1) === '.') {\n\t\t\t\t\tthis.current = this.newToken(Token.QUESTION_PERIOD);\n\t\t\t\t\tthis.pos += 2;\n\t\t\t\t} else {\n\t\t\t\t\tthis.current = this.newToken(Token.CONDITIONAL);\n\t\t\t\t\tthis.pos++;\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\tcase '!':\n\t\t\t\tif (this.expression.charAt(this.pos + 1) === '=') {\n\t\t\t\t\tif (this.expression.charAt(this.pos + 2) === '=') {\n\t\t\t\t\t\tthis.current = this.newToken(Token.NE_STRICT);\n\t\t\t\t\t\tthis.pos += 3;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.current = this.newToken(Token.NE);\n\t\t\t\t\t\tthis.pos += 2;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tthis.current = this.newToken(Token.NOT);\n\t\t\t\t\tthis.pos++;\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\tcase '.':\n\t\t\t\tif (/\\.\\.\\./.test(this.expression.substring(this.pos, this.pos + 3))) {\n\t\t\t\t\tthis.current = this.newToken(Token.ELLIPSIS);\n\t\t\t\t\tthis.pos += 3;\n\t\t\t\t\treturn true;\n\t\t\t\t} else {\n\t\t\t\t\tthis.current = this.newToken(Token.PERIOD);\n\t\t\t\t\tthis.pos++;\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t// no break\n\t\t\tcase ':':\n\t\t\t\tif (this.expression.charAt(this.pos + 1) === ':') {\n\t\t\t\t\tthis.current = this.newToken(Token.QUESTION_BIND);\n\t\t\t\t\tthis.pos += 2;\n\t\t\t\t} else {\n\t\t\t\t\tthis.current = this.newToken(Token.COLON);\n\t\t\t\t\tthis.pos++;\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\tcase '~':\n\t\t\t\tthis.current = this.newToken(Token.BIT_NOT);\n\t\t\t\tthis.pos++;\n\t\t\t\treturn true;\n\t\t\tcase 'a':\n\t\t\t\tif (/async\\s/.test(this.expression.substring(this.pos, this.pos + 6))) {\n\t\t\t\t\tthis.current = this.newToken(Token.ASYNC, AsyncIdentifier);\n\t\t\t\t\tthis.pos += 5;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tif (/await\\s/.test(this.expression.substring(this.pos, this.pos + 6))) {\n\t\t\t\t\tthis.current = this.newToken(Token.AWAIT, AwaitIdentifier);\n\t\t\t\t\tthis.pos += 5;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\tcase 'i':\t\t\t// in, instanceof\n\t\t\t\tif (this.expression.charAt(this.pos + 1) === 'n') {\n\t\t\t\t\tif (/instanceof\\s/.test(this.expression.substring(this.pos, this.pos + 11))) {\n\t\t\t\t\t\tthis.current = this.newToken(Token.INSTANCEOF);\n\t\t\t\t\t\tthis.pos += 11;\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t} else if (/\\s/.test(this.expression.charAt(this.pos + 2))) {\n\t\t\t\t\t\tthis.current = this.newToken(Token.IN);\n\t\t\t\t\t\tthis.pos += 3;\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\tcase 't':\t\t\t// typeof\n\t\t\t\tif (/typeof\\s/.test(this.expression.substring(this.pos, this.pos + 7))) {\n\t\t\t\t\tthis.current = this.newToken(Token.TYPEOF);\n\t\t\t\t\tthis.pos += 7;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\tcase 'v':\t\t\t// void\n\t\t\t\tif (/void\\s/.test(this.expression.substring(this.pos, this.pos + 5))) {\n\t\t\t\t\tthis.current = this.newToken(Token.VOID);\n\t\t\t\t\tthis.pos += 5;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\tcase 'd':\t\t\t// delete\n\t\t\t\tif (/delete\\s/.test(this.expression.substring(this.pos, this.pos + 7))) {\n\t\t\t\t\tthis.current = this.newToken(Token.DELETE);\n\t\t\t\t\tthis.pos += 7;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\tcase 'n':\t\t\t// new\n\t\t\t\tif (/new\\s/.test(this.expression.substring(this.pos, this.pos + 4))) {\n\t\t\t\t\tthis.current = this.newToken(Token.NEW);\n\t\t\t\t\tthis.pos += 4;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\tcase 'n':\t\t\t// new\n\t\t\t\tif (/new\\s/.test(this.expression.substring(this.pos, this.pos + 4))) {\n\t\t\t\t\tthis.current = this.newToken(Token.NEW);\n\t\t\t\t\tthis.pos += 4;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t}\n\tprivate isStatement() {\n\t\tconst char = this.expression.charAt(this.pos);\n\t\tswitch (char) {\n\t\t\t// case 'a':\n\t\t\t// \tif (/as\\s/.test(this.expression.substring(this.pos, this.pos + 3))) {\n\t\t\t// \t\tthis.current = this.newToken(Token.AS);\n\t\t\t// \t\tthis.pos += 3;\n\t\t\t// \t\treturn true;\n\t\t\t// \t}\n\t\t\t// return false;\n\t\t\tcase 'b':\n\t\t\t\tif (/break\\s?;?/.test(this.expression.substring(this.pos, this.pos + 7))) {\n\t\t\t\t\tthis.current = this.newToken(Token.BREAK);\n\t\t\t\t\tthis.pos += 5;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\tcase 'c':\n\t\t\t\tif (/case[\\s~!+-\\/\\('\"`]/.test(this.expression.substring(this.pos, this.pos + 5))) {\n\t\t\t\t\tthis.current = this.newToken(Token.CASE);\n\t\t\t\t\tthis.pos += 4;\n\t\t\t\t\treturn true;\n\t\t\t\t} else if (/const\\s/.test(this.expression.substring(this.pos, this.pos + 6))) {\n\t\t\t\t\tthis.current = this.newToken(Token.CONST);\n\t\t\t\t\tthis.pos += 6;\n\t\t\t\t\treturn true;\n\t\t\t\t} else if (/catch[\\s\\{\\(]/.test(this.expression.substring(this.pos, this.pos + 6))) {\n\t\t\t\t\tthis.current = this.newToken(Token.CATCH);\n\t\t\t\t\tthis.pos += 5;\n\t\t\t\t\treturn true;\n\t\t\t\t} else if (/class\\s/.test(this.expression.substring(this.pos, this.pos + 6))) {\n\t\t\t\t\tthis.current = this.newToken(Token.CLASS);\n\t\t\t\t\tthis.pos += 6;\n\t\t\t\t\treturn true;\n\t\t\t\t} else if (/continue[\\s;]/.test(this.expression.substring(this.pos, this.pos + 9))) {\n\t\t\t\t\tthis.current = this.newToken(Token.CONTINUE);\n\t\t\t\t\tthis.pos += 8;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\tcase 'd':\n\t\t\t\tif (/do[\\s|\\{]/.test(this.expression.substring(this.pos, this.pos + 3))) {\n\t\t\t\t\tthis.current = this.newToken(Token.DO);\n\t\t\t\t\tthis.pos += 2;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\tcase 'e':\n\t\t\t\tif (/else[\\s|\\{]/.test(this.expression.substring(this.pos, this.pos + 5))) {\n\t\t\t\t\tthis.current = this.newToken(Token.ELSE);\n\t\t\t\t\tthis.pos += 4;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tif (/export\\s/.test(this.expression.substring(this.pos, this.pos + 7))) {\n\t\t\t\t\tthis.current = this.newToken(Token.EXPORT);\n\t\t\t\t\tthis.pos += 7;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tif (/extends\\s/.test(this.expression.substring(this.pos, this.pos + 8))) {\n\t\t\t\t\tthis.current = this.newToken(Token.EXTENDS);\n\t\t\t\t\tthis.pos += 8;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\tcase 'g':\n\t\t\t\tif (/get\\s/.test(this.expression.substring(this.pos, this.pos + 4))) {\n\t\t\t\t\tthis.current = this.newToken(Token.GET, GetIdentifier);\n\t\t\t\t\tthis.pos += 4;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\tcase 'f':\n\t\t\t\tif (/for[\\s\\(]/.test(this.expression.substring(this.pos, this.pos + 4))) {\n\t\t\t\t\tthis.current = this.newToken(Token.FOR);\n\t\t\t\t\tthis.pos += 3;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tif (/finally[\\s\\{]/.test(this.expression.substring(this.pos, this.pos + 8))) {\n\t\t\t\t\tthis.current = this.newToken(Token.FINALLY);\n\t\t\t\t\tthis.pos += 7;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tif (/function[\\s\\*\\(]/.test(this.expression.substring(this.pos, this.pos + 9))) {\n\t\t\t\t\tthis.current = this.newToken(Token.FUNCTION);\n\t\t\t\t\tthis.pos += 8;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\tcase 'i':\n\t\t\t\tif (/if[\\s|\\(]/.test(this.expression.substring(this.pos, this.pos + 3))) {\n\t\t\t\t\tthis.current = this.newToken(Token.IF);\n\t\t\t\t\tthis.pos += 2;\n\t\t\t\t\treturn true;\n\t\t\t\t} else if (/in\\s/.test(this.expression.substring(this.pos, this.pos + 3))) {\n\t\t\t\t\tthis.current = this.newToken(Token.IN);\n\t\t\t\t\tthis.pos += 3;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\telse if (/import\\s/.test(this.expression.substring(this.pos, this.pos + 7))) {\n\t\t\t\t\tthis.current = this.newToken(Token.IMPORT);\n\t\t\t\t\tthis.pos += 7;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\tcase 'l':\n\t\t\t\tif (/let\\s/.test(this.expression.substring(this.pos, this.pos + 4))) {\n\t\t\t\t\tthis.current = this.newToken(Token.LET, LetIdentifier);\n\t\t\t\t\tthis.pos += 4;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\tcase 't':\n\t\t\t\tif (/try[\\s\\{]/.test(this.expression.substring(this.pos, this.pos + 4))) {\n\t\t\t\t\tthis.current = this.newToken(Token.TRY);\n\t\t\t\t\tthis.pos += 3;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tif (/throw\\s/.test(this.expression.substring(this.pos, this.pos + 6))) {\n\t\t\t\t\tthis.current = this.newToken(Token.THROW);\n\t\t\t\t\tthis.pos += 6;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\tcase 'r':\n\t\t\t\tif (/return[\\s~!+-\\/\\('\"`]/.test(this.expression.substring(this.pos, this.pos + 7))) {\n\t\t\t\t\tthis.current = this.newToken(Token.RETURN);\n\t\t\t\t\tthis.pos += 6;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t// case 'of':\n\t\t\t// \tif (/of\\s/.test(this.expression.substring(this.pos, this.pos + 3))) {\n\t\t\t// \t\tthis.current = this.newToken(Token.OF);\n\t\t\t// \t\tthis.pos += 3;\n\t\t\t// \t\treturn true;\n\t\t\t// \t}\n\t\t\t// \treturn false;\n\t\t\tcase 's':\n\t\t\t\tif (/switch(\\s|\\()/.test(this.expression.substring(this.pos, this.pos + 7))) {\n\t\t\t\t\tthis.current = this.newToken(Token.SWITCH);\n\t\t\t\t\tthis.pos += 6;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tif (/static\\s/.test(this.expression.substring(this.pos, this.pos + 7))) {\n\t\t\t\t\tthis.current = this.newToken(Token.STATIC);\n\t\t\t\t\tthis.pos += 7;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tif (/set\\s/.test(this.expression.substring(this.pos, this.pos + 4))) {\n\t\t\t\t\tthis.current = this.newToken(Token.SET, SetIdentifier);\n\t\t\t\t\tthis.pos += 4;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tif (/super[\\.\\(]?/.test(this.expression.substring(this.pos, this.pos + 6))) {\n\t\t\t\t\tthis.current = this.newToken(Token.SUPER, SuperIdentifier);\n\t\t\t\t\tthis.pos += 5;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\tcase 'w':\n\t\t\t\tif (/while(\\s|\\()/.test(this.expression.substring(this.pos, this.pos + 6))) {\n\t\t\t\t\tthis.current = this.newToken(Token.WHILE);\n\t\t\t\t\tthis.pos += 5;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\tcase 'v':\n\t\t\t\tif (/var\\s/.test(this.expression.substring(this.pos, this.pos + 4))) {\n\t\t\t\t\tthis.current = this.newToken(Token.VAR);\n\t\t\t\t\tthis.pos += 4;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t}\n\tprotected getCoordinates() {\n\t\tlet line = 0, column, newline = -1;\n\t\tdo {\n\t\t\tline++;\n\t\t\tcolumn = this.pos - newline;\n\t\t\tnewline = this.expression.indexOf('\\n', newline + 1);\n\t\t} while (newline >= 0 && newline < this.pos);\n\t\treturn { line, column };\n\t}\n\tpublic createError(message: String): string {\n\t\tlet coords = this.getCoordinates();\n\t\tconst lastLinePos = this.expression.lastIndexOf('\\n', this.pos) + 1;\n\t\tlet nextLinePos = this.expression.indexOf('\\n', this.pos + 1);\n\t\tif (nextLinePos == -1) {\n\t\t\tnextLinePos = this.expression.length;\n\t\t}\n\t\tconst subStart = Math.max(lastLinePos, this.pos - 25);\n\t\tconst subEnd = Math.min(nextLinePos, this.pos + 25, this.expression.length);\n\n\t\tconst errorAt = this.expression.substring(subStart, subEnd);\n\t\tconst indictor = new Array<string>(subEnd - subStart).fill(' ');\n\t\tindictor[this.pos - subStart] = '^';\n\t\tconst errorIndictor = indictor.join('');\n\t\treturn `\n\t\t\t> ${message}\n\t\t\t> token name: '${this.current?.token?.getName()}' ${this.current?.value ? `parsed: ${this.current.value.toString()}` : ''}\n\t\t\t> ${coords.line}:${coords.column}\\t${errorAt}\n\t\t\t> ${coords.line}:${coords.column}\\t${errorIndictor}\n\t\t\t`;\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"stream.js","sourceRoot":"","sources":["../../../src/expressions/v8/stream.ts"],"names":[],"mappings":"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","sourcesContent":["import { ExpressionNode } from '../api/expression.js';\nimport { Token, TokenExpression } from './token.js';\nimport { Identifier, Literal } from '../api/definition/values.js';\nimport { PrivateIdentifier, Super } from '../api/class/class.js';\nimport { DebuggerStatement } from '../api/computing/debugger.js';\nimport { isStrict, LanguageMode } from './language.js';\n\nconst FORBIDDEN_CODE_POINT = ['200b', '200c', '200d', 'feff'];\n\nexport const IdentifierRegex = /^[_A-Za-z\\u00A1-\\uFFFF][_A-Za-z0-9\\u00A1-\\uFFFF]*/;\n\nexport const IdentifierStartRegex = /[_$a-zA-Z\\xA0-\\uFFFF]/;\n\nexport const IdentifierPartRegex = /[_$a-zA-Z0-9\\xA0-\\uFFFF]/;\n\nexport interface PreTemplateLiteral extends ExpressionNode { };\nexport class PreTemplateLiteral {\n\tconstructor(public strings: string[], public expressions: string[]) { }\n}\n\nexport interface TemplateStringLiteral extends ExpressionNode { };\nexport class TemplateStringLiteral {\n\tconstructor(public string: string, public range: [number, number]) { }\n}\n\nexport abstract class TokenStream {\n\tpublic static getTokenStream(source: string | TokenExpression[], mode?: LanguageMode): TokenStream {\n\t\tif (Array.isArray(source)) {\n\t\t\treturn new TokenStreamer(source, mode);\n\t\t}\n\t\telse if (typeof source === 'string') {\n\t\t\treturn new TokenStreamImpl(source, mode);\n\t\t}\n\t\tthrow new Error(`Can't build token stream for ${source}`);\n\t}\n\tprotected pos = 0;\n\tprotected savedPosition = 0;\n\tprotected current: TokenExpression;\n\tprotected savedCurrent: TokenExpression;\n\tprotected last?: TokenExpression;\n\tconstructor(protected mode = LanguageMode.Strict) { }\n\tsetLanguageMode(mode: LanguageMode) {\n\t\tthis.mode = mode;\n\t}\n\tgetLanguageMode() {\n\t\treturn this.mode;\n\t}\n\tsave() {\n\t\tthis.savedPosition = this.pos;\n\t\tthis.savedCurrent = this.current;\n\t}\n\trestore(): void {\n\t\tthis.pos = this.savedPosition;\n\t\tthis.current = this.savedCurrent;\n\t\tthis.last = undefined;\n\t}\n\treset(): void {\n\t\tthis.pos = 0;\n\t\tthis.savedPosition = 0;\n\t\tthis.current = this.savedCurrent = undefined as any;\n\t}\n\tlastToken(): TokenExpression | undefined {\n\t\treturn this.last;\n\t}\n\tcurrentToken() {\n\t\treturn this.current;\n\t}\n\tseekTo(expect: Token): boolean {\n\t\tlet token: TokenExpression;\n\t\twhile (true) {\n\t\t\ttoken = this.next();\n\t\t\tif (token.token === expect) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\telse if (token.token === Token.EOS) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}\n\tgetPos(): number {\n\t\treturn this.pos;\n\t}\n\tsetPos(pos: number): void {\n\t\tthis.pos = pos;\n\t\tthis.current = undefined as any;\n\t}\n\tgetSavedPos(): number {\n\t\treturn this.savedPosition;\n\t}\n\tgetStreamer(expect: Token = Token.EOS): TokenStream {\n\t\tconst tokens: TokenExpression[] = [];\n\t\tthis.readTill(expect, tokens);\n\t\treturn new TokenStreamer(tokens);\n\t}\n\treadTill(expect: Token = Token.EOS, tokens: TokenExpression[]): void {\n\t\tif (Token.isClosePair(expect)) {\n\t\t\tthis.readTokensPair(Token.openOf(expect), expect, tokens);\n\t\t} else {\n\t\t\tthis.readTokens(expect, tokens);\n\t\t}\n\t}\n\treadTokens(expect: Token, tokens: TokenExpression[]): void {\n\t\tlet token: TokenExpression;\n\t\twhile (true) {\n\t\t\ttoken = this.next();\n\t\t\tif (token.token === expect || token.token === Token.EOS) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\ttokens.push(token);\n\t\t}\n\t}\n\treadTokensConsiderPair(tokens: TokenExpression[], ...expect: Token[]): void {\n\t\tlet token: TokenExpression, open: Token;\n\t\twhile (true) {\n\t\t\tif (Token.isOpenPair(open = this.peek().token)) {\n\t\t\t\tthis.readTokensPair(open, Token.closeOf(open), tokens);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\ttoken = this.next();\n\t\t\tif (expect.includes(token.token) || token.token === Token.EOS) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\ttokens.push(token);\n\t\t}\n\t}\n\treadTokensPair(open: Token, close: Token, tokens: TokenExpression[]): void {\n\t\t// check pair\n\t\tlet count = 0;\n\t\tlet token: TokenExpression;\n\t\twhile (true) {\n\t\t\ttoken = this.next();\n\t\t\tif (token.token === open) {\n\t\t\t\tcount++;\n\t\t\t}\n\t\t\telse if (token.token === close) {\n\t\t\t\tif (count > 0) {\n\t\t\t\t\tcount--;\n\t\t\t\t}\n\t\t\t\tif (count === 0) {\n\t\t\t\t\ttokens.push(token);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (token.token === Token.EOS) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\ttokens.push(token);\n\t\t}\n\t}\n\tpublic toTokens(): TokenExpression[] {\n\t\tconst tokens: TokenExpression[] = [];\n\t\tlet token: TokenExpression;\n\t\twhile (true) {\n\t\t\ttoken = this.next();\n\t\t\tif (token.token === Token.EOS) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\ttokens.push(token);\n\t\t}\n\t\treturn tokens;\n\t}\n\t[Symbol.iterator](): IterableIterator<TokenExpression> {\n\t\tthis.pos = 0;\n\t\tconst self = this;\n\t\treturn {\n\t\t\t[Symbol.iterator]: function () {\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tnext: () => {\n\t\t\t\tconst value = self.next();\n\t\t\t\tconst done = value.isType(Token.EOS);\n\t\t\t\treturn { value, done };\n\t\t\t}\n\t\t}\n\t}\n\tscanRegExpPattern(): boolean {\n\t\treturn false;\n\t};\n\tpeek() {\n\t\tthis.save();\n\t\tconst exp = this.next();\n\t\tthis.restore();\n\t\treturn exp;\n\t}\n\tpeekAhead() {\n\t\tthis.save();\n\t\tthis.next();\n\t\tconst exp = this.next();\n\t\tthis.restore();\n\t\treturn exp;\n\t}\n\tpeekPosition() {\n\t\tthis.save();\n\t\tthis.next();\n\t\tconst pos = this.pos;\n\t\tthis.restore();\n\t\treturn pos;\n\t}\n\tpeekAheadPosition() {\n\t\tthis.save();\n\t\tthis.next();\n\t\tthis.next();\n\t\tconst pos = this.pos;\n\t\tthis.restore();\n\t\treturn pos;\n\t}\n\n\tabstract next(): TokenExpression;\n\tabstract hasLineTerminatorBeforeNext(): boolean;\n\tabstract hasLineTerminatorAfterNext(): boolean;\n\tabstract createError(message: String): string;\n\tabstract scanTemplateContinuation(): TokenExpression;\n}\n\nexport class TokenStreamer extends TokenStream {\n\tconstructor(private tokens: TokenExpression[], mode?: LanguageMode) {\n\t\tsuper(mode);\n\t}\n\tnext(): TokenExpression {\n\t\tif (this.pos === this.tokens.length) {\n\t\t\treturn new TokenExpression(Token.EOS, [-1, -1]);\n\t\t}\n\t\tthis.last = this.current;\n\t\treturn this.current = this.tokens[this.pos++];\n\t}\n\tcreateError(message: String): string {\n\t\treturn 'parse error [' + this.pos + ']: ' + message;\n\t}\n\thasLineTerminatorBeforeNext(): boolean {\n\t\treturn false;\n\t}\n\thasLineTerminatorAfterNext(): boolean {\n\t\treturn false;\n\t}\n\tscanTemplateContinuation(): TokenExpression {\n\t\treturn this.next();\n\t}\n}\n\nexport class TokenStreamImpl extends TokenStream {\n\tstatic REGEXP_FLAGS = ['g', 'i', 'm', 's', 'u', 'y'];\n\tstatic UnicodePattern = /^[0-9a-f]{4}$/i;\n\tstatic DecimalPattern = /^[0-9a-f]{2}$/i;\n\tstatic AsciiPattern = /^[0-7]{1,3}$/i;\n\tstatic OctalPattern = /^[0-7]+$/i;\n\n\tconstructor(private expression: string, mode?: LanguageMode) {\n\t\tsuper(mode);\n\t}\n\tprivate newToken(type: Token, range: [number, number], value?: ExpressionNode): TokenExpression {\n\t\treturn new TokenExpression(type, range, value);\n\t}\n\tnext(): TokenExpression {\n\t\tif (this.pos >= this.expression.length) {\n\t\t\treturn this.current = this.newToken(Token.EOS, [this.expression.length, this.expression.length]);\n\t\t}\n\t\tthis.last = this.current;\n\t\tif (this.isWhitespace() || this.isComment()) {\n\t\t\treturn this.next();\n\t\t} else if (\n\t\t\tthis.isRadixInteger()\n\t\t\t|| this.isNumber()\n\t\t\t// || this.isRegExp()\n\t\t\t|| this.isString()\n\t\t\t|| this.isTemplateLiteral()\n\t\t\t|| this.isCurlY()\n\t\t\t|| this.isParentheses()\n\t\t\t|| this.isBracket()\n\t\t\t|| this.isComma()\n\t\t\t|| this.isSemicolon()\n\t\t\t|| this.isOperator()\n\t\t\t|| this.isStatement()\n\t\t\t|| this.isProperty()) {\n\t\t\treturn this.current;\n\t\t} else if (this.pos >= this.expression.length) {\n\t\t\treturn this.current = this.newToken(Token.EOS, [this.expression.length, this.expression.length]);\n\t\t} else {\n\t\t\tthrow new Error(this.createError('Unknown character \"' + this.expression.charAt(this.pos) + '\"'));\n\t\t}\n\t}\n\thasLineTerminatorBeforeNext(): boolean {\n\t\tconst limit = this.peekPosition();\n\t\tconst str = this.expression.substring(this.pos, limit);\n\t\treturn /(?:\\r?\\n)/g.test(str);\n\t}\n\thasLineTerminatorAfterNext(): boolean {\n\t\tconst start = this.peekPosition();\n\t\tconst end = this.peekAheadPosition();\n\t\tconst str = this.expression.substring(start, end);\n\t\treturn /(?:\\r?\\n)/g.test(str);\n\t}\n\tprivate isString() {\n\t\tconst quote = this.expression.charAt(this.pos);\n\t\tif (quote === '\\'' || quote === '\"') {\n\t\t\tconst start = this.pos;\n\t\t\tlet literal: string[] = [];\n\t\t\tlet c0: string = '';\n\t\t\tconst advance = () => {\n\t\t\t\tc0 = this.expression.charAt(++this.pos);\n\t\t\t};\n\t\t\tconst advanceUntil = (check: (char: string) => boolean) => {\n\t\t\t\twhile (true) {\n\t\t\t\t\tc0 = this.expression.charAt(++this.pos);\n\t\t\t\t\tif (this.pos >= this.expression.length) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tconst result = check(c0);\n\t\t\t\t\tif (result) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\tconst addLiteralChar = (char: string) => literal.push(char);\n\n\t\t\twhile (true) {\n\t\t\t\tadvanceUntil(char => {\n\t\t\t\t\tif (char.charCodeAt(0) > 127) {\n\t\t\t\t\t\tif (this.isStringLiteralLineTerminator(char)) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\taddLiteralChar(char);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tif (this.mayTerminateString(char)) return true;\n\t\t\t\t\taddLiteralChar(c0);\n\t\t\t\t\treturn false;\n\t\t\t\t});\n\t\t\t\twhile (c0 === '\\\\') {\n\t\t\t\t\tadvance();\n\t\t\t\t\tconst char = this.scanEscape(false);\n\t\t\t\t\tif (char == '' || !char) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\taddLiteralChar(char);\n\t\t\t\t\tadvance();\n\t\t\t\t}\n\t\t\t\tif (c0 === quote) {\n\t\t\t\t\tadvance();\n\t\t\t\t\tconst end = this.pos;\n\t\t\t\t\tconst string = literal.join('');\n\t\t\t\t\tconst rawString = this.expression.substring(start, end);\n\t\t\t\t\tconst range: [number, number] = [start, end];\n\t\t\t\t\tconst stringNode = new Literal<string>(string, rawString, undefined, undefined, range);\n\t\t\t\t\tthis.current = this.newToken(Token.STRING, range, stringNode);\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tif (c0 == '' || this.pos >= this.expression.length) {\n\t\t\t\t\t// Unterminated string literal\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\taddLiteralChar(c0);\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\tprivate isTemplateLiteral(): boolean {\n\t\tconst quote = this.expression.charAt(this.pos);\n\t\tif (quote === '`') {\n\t\t\tthis.pos++;\n\t\t\tthis.current = this.scanTemplateSpan();\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\tprivate scanTemplateSpan(): TokenExpression {\n\t\t// When scanning a TemplateSpan, we are looking for the following construct:\n\t\t// TEMPLATE_SPAN ::\n\t\t// ` LiteralChars* ${\n\t\t// | } LiteralChars* ${\n\t\t//\n\t\t// TEMPLATE_TAIL ::\n\t\t// ` LiteralChars* `\n\t\t// | } LiteralChar* `\n\t\t//\n\t\t// A TEMPLATE_SPAN should always be followed by an Expression, while a\n\t\t// TEMPLATE_TAIL terminates a TemplateLiteral and does not need to be\n\t\t// followed by an Expression.\n\n\t\t// These scoped helpers save and restore the original error state, so that we\n\t\t// can specially treat invalid escape sequences in templates (which are\n\t\t// handled by the parser).\n\n\t\tconst start = this.pos;\n\t\tlet result = Token.TEMPLATE_SPAN;\n\t\tlet literal: string[] = [],\n\t\t\tc0: string = this.expression.charAt(this.pos);\n\t\tconst advance = () => {\n\t\t\tthis.pos++;\n\t\t\tc0 = this.expression.charAt(this.pos);\n\t\t};\n\t\tconst addLiteralChar = (char: string) => literal.push(char);\n\t\twhile (true) {\n\t\t\tlet c = c0;\n\t\t\tif (c == '`') {\n\t\t\t\tadvance(); // Consume '`'\n\t\t\t\tresult = Token.TEMPLATE_TAIL;\n\t\t\t\tbreak;\n\t\t\t} else if (c == '$' && this.expression.charAt(this.pos + 1) == '{') {\n\t\t\t\tadvance();\t// Consume '$'\n\t\t\t\tadvance();\t// Consume '{'\n\t\t\t\tbreak;\n\t\t\t} else if (c == '\\\\') {\n\t\t\t\tadvance(); // Consume '\\\\'\n\t\t\t\tif (this.isLineTerminator(c0)) {\n\t\t\t\t\t// The TV of LineContinuation :: \\ LineTerminatorSequence is the empty\n\t\t\t\t\t// code unit sequence.\n\t\t\t\t\tlet lastChar = c0;\n\t\t\t\t\tadvance();\n\t\t\t\t\tif (lastChar == '\\r') {\n\t\t\t\t\t\t// Also skip \\n.\n\t\t\t\t\t\tif (c0 == '\\n') advance();\n\t\t\t\t\t\tlastChar = '\\n';\n\t\t\t\t\t}\n\t\t\t\t\taddLiteralChar(lastChar);\n\t\t\t\t} else {\n\t\t\t\t\tconst char = this.scanEscape(true);\n\t\t\t\t\tif (char === false) {\n\t\t\t\t\t\tthrow new SyntaxError(this.createError('Unterminated Template Escape char'));\n\t\t\t\t\t}\n\t\t\t\t\taddLiteralChar(char);\n\t\t\t\t\tadvance();\n\t\t\t\t}\n\t\t\t} else if (c == '' || this.pos >= this.expression.length) {\n\t\t\t\t// Unterminated template literal\n\t\t\t\tbreak;\n\t\t\t} else {\n\t\t\t\tadvance(); // Consume c.\n\t\t\t\t// The TRV of LineTerminatorSequence :: <CR> is the CV 0x000A.\n\t\t\t\t// The TRV of LineTerminatorSequence :: <CR><LF> is the sequence\n\t\t\t\t// consisting of the CV 0x000A.\n\t\t\t\tif (c == '\\r') {\n\t\t\t\t\tif (c0 == '\\n') advance(); // Consume '\\n'\n\t\t\t\t\tc = '\\n';\n\t\t\t\t}\n\t\t\t\taddLiteralChar(c);\n\t\t\t}\n\t\t}\n\t\tconst range: [number, number] = [start, this.pos];\n\t\treturn this.newToken(result, range, new TemplateStringLiteral(literal.join(''), range));\n\t}\n\tpublic scanTemplateContinuation(): TokenExpression {\n\t\tif (this.current.isNotType(Token.RBRACE)) {\n\t\t\tthrow new SyntaxError(this.createError('Unterminated Template Expr'));\n\t\t}\n\t\treturn this.scanTemplateSpan();\n\t}\n\tprivate scanEscape(scanTemplateSpan: boolean): string | false {\n\t\tlet c0: string = this.expression.charAt(this.pos);\n\t\tlet c: string | false = c0;\n\t\t// Skip escaped newlines.\n\t\tif (!scanTemplateSpan && this.isLineTerminator(c)) {\n\t\t\t// Allow escaped CR+LF newlines in multiline string literals.\n\t\t\tif (c == '\\r' && this.expression.charAt(this.pos + 1) == '\\n') this.pos++;\n\t\t\treturn '\\n';\n\t\t}\n\n\t\tswitch (c) {\n\t\t\tcase 'b': c = '\\b'; break;\n\t\t\tcase 'f': c = '\\f'; break;\n\t\t\tcase 'n': c = '\\n'; break;\n\t\t\tcase 'r': c = '\\r'; break;\n\t\t\tcase 't': c = '\\t'; break;\n\t\t\tcase 'u': {\n\t\t\t\tthis.pos++;\n\t\t\t\tc = this.scanUnicodeEscape();\n\t\t\t\tif (c === false) return false;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'v':\n\t\t\t\tc = '\\v';\n\t\t\t\tbreak;\n\t\t\tcase 'x': {\n\t\t\t\tthis.pos++;\n\t\t\t\tc = this.scanHexNumber(2);\n\t\t\t\tif (c === false) return false;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase '0':\n\t\t\tcase '1':\n\t\t\tcase '2':\n\t\t\tcase '3':\n\t\t\tcase '4':\n\t\t\tcase '5':\n\t\t\tcase '6':\n\t\t\tcase '7':\n\t\t\t\tthis.pos++;\n\t\t\t\tc = this.scanOctalEscape(c, 2);\n\t\t\t\tbreak;\n\t\t\tcase '8':\n\t\t\tcase '9':\n\t\t\t\t// '\\8' and '\\9' are disallowed in strict mode.\n\t\t\t\t// Re-use the octal error state to propagate the error.\n\t\t\t\tthrow new SyntaxError(this.createError(`'\\\\8' and '\\\\9' are disallowed in strict mode.`));\n\t\t}\n\t\t// Other escaped characters are interpreted as their non-escaped version.\n\t\treturn c;\n\t}\n\tprivate scanUnicodeEscape(): string | false {\n\t\t// Accept both \\uxxxx and \\u{xxxxxx}. In the latter case, the number of\n\t\t// hex digits between { } is arbitrary. \\ and u have already been read.\n\t\tlet c0: string = this.expression.charAt(this.pos);\n\t\tif (c0 == '{') {\n\t\t\tthis.pos++;\n\t\t\tconst cp = this.scanUnlimitedLengthHexNumber(0x10ffff);\n\t\t\tc0 = this.expression.charAt(++this.pos);\n\t\t\tif (c0 != '}') {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn cp;\n\t\t}\n\t\treturn this.scanHexNumber(4);\n\t}\n\tprivate scanHexNumber(length: number): string | false {\n\t\tif (length > 4) { // prevent overflow\n\t\t\tthrow new RangeError(this.createError('ScanHexNumber: length should be less than or equal to 4'));\n\t\t}\n\t\tlet x = 0;\n\t\tlet scanned = this.pos;\n\t\tlet c0: string = this.expression.charAt(scanned);\n\t\tfor (let i = 0; i < length; i++) {\n\t\t\tlet d = this.hexValue(c0);\n\t\t\tif (d < 0) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tx = x * 16 + d;\n\t\t\tc0 = this.expression.charAt(++scanned);\n\t\t}\n\t\tthis.pos = scanned - 1;\n\t\treturn String.fromCodePoint(x);\n\t}\n\tprivate scanUnlimitedLengthHexNumber(max_value: number) {\n\t\tlet x = 0;\n\t\tlet scanned = this.pos;\n\t\tlet c0: string = this.expression.charAt(scanned);\n\t\tlet d = this.hexValue(c0);\n\t\tif (d < 0) {\n\t\t\tthrow new RangeError(this.createError('Invalid code'));\n\t\t}\n\t\twhile (d >= 0) {\n\t\t\tx = x * 16 + d;\n\t\t\tif (x > max_value) {\n\t\t\t\tthrow new RangeError(this.createError('Undefined Unicode Code Point'));\n\t\t\t}\n\t\t\tc0 = this.expression.charAt(++scanned);\n\t\t\td = this.hexValue(c0);\n\t\t}\n\t\tthis.pos = scanned - 1;\n\t\treturn String.fromCodePoint(x);\n\t}\n\tprivate hexValue(c: string) {\n\t\tlet x = c.charCodeAt(0) - '0'.charCodeAt(0);\n\t\tif (x <= 9) return x;\n\t\tx = (x | 0x20) - ('a'.charCodeAt(0) - '0'.charCodeAt(0)); // detect 0x11..0x16 and 0x31..0x36.\n\t\tif (x <= 5) return x + 10;\n\t\treturn -1;\n\t}\n\tprivate scanOctalEscape(c: string, length: number): string | false {\n\t\tif (!('0' <= c && c <= '7')) {\n\t\t\tthrow new SyntaxError(this.createError('Invalid octal escape sequence'));\n\t\t}\n\t\tconst zero = '0'.charCodeAt(0);\n\t\tlet x = c.charCodeAt(0) - zero;\n\t\tlet scanned = 0;\n\t\tlet i: number = 0;\n\t\tlet char: string = '';\n\t\tfor (; i < length; i++) {\n\t\t\tchar = this.expression.charAt(this.pos + i);\n\t\t\tlet d = char.charCodeAt(0) - zero;\n\t\t\tif (d < 0 || d > 7) break;\n\t\t\tconst nx = x * 8 + d;\n\t\t\tif (nx >= 256) break;\n\t\t\tx = nx;\n\t\t\tscanned++;\n\t\t}\n\t\tthis.pos += scanned - 1;\n\t\treturn String.fromCharCode(x);\n\t}\n\tprivate isParentheses() {\n\t\tconst char = this.expression.charAt(this.pos);\n\t\tif (char === '(') {\n\t\t\tthis.current = this.newToken(Token.LPAREN, [this.pos, ++this.pos]);\n\t\t\treturn true;\n\t\t} else if (char === ')') {\n\t\t\tthis.current = this.newToken(Token.RPAREN, [this.pos, ++this.pos]);\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\tprivate isBracket() {\n\t\tconst char = this.expression.charAt(this.pos);\n\t\tif (char === '[') {\n\t\t\tthis.current = this.newToken(Token.LBRACK, [this.pos, ++this.pos]);\n\t\t\treturn true;\n\t\t} else if (char === ']') {\n\t\t\tthis.current = this.newToken(Token.RBRACK, [this.pos, ++this.pos]);\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\tprivate isCurlY() {\n\t\tconst char = this.expression.charAt(this.pos);\n\t\tif (char === '{') {\n\t\t\tthis.current = this.newToken(Token.LBRACE, [this.pos, ++this.pos]);\n\t\t\treturn true;\n\t\t} else if (char === '}') {\n\t\t\tthis.current = this.newToken(Token.RBRACE, [this.pos, ++this.pos]);\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\tprivate isComma() {\n\t\tconst char = this.expression.charAt(this.pos);\n\t\tif (char === ',') {\n\t\t\tthis.current = this.newToken(Token.COMMA, [this.pos, ++this.pos]);\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tprivate isSemicolon() {\n\t\tconst char = this.expression.charAt(this.pos);\n\t\tif (char === ';') {\n\t\t\tthis.current = this.newToken(Token.SEMICOLON, [this.pos, ++this.pos]);\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\tprivate isProperty() {\n\t\tlet startPos = this.pos;\n\t\tlet i = startPos;\n\t\tlet isPrivate = false;\n\t\tlet escape = false;\n\t\tlet escapeFlag = false;\n\t\t// check is private property \n\t\tlet char = this.expression.charAt(i);\n\t\tif (char === '#') {\n\t\t\tisPrivate = true;\n\t\t\tstartPos++;\n\t\t\ti++;\n\t\t}\n\t\tchar = this.expression.charAt(i);\n\t\tif (!IdentifierStartRegex.test(char)) {\n\t\t\tif (char === '\\\\' && this.expression.charAt(i + 1) === 'u') {\n\t\t\t\ti += 2;\n\t\t\t\tescapeFlag = escape = true;\n\t\t\t\t// need to valid the unicode char\n\t\t\t} else {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} else {\n\t\t\ti++;\n\t\t}\n\n\t\tfor (; i < this.expression.length; i++) {\n\t\t\tchar = this.expression.charAt(i);\n\t\t\tif (!IdentifierPartRegex.test(char)) {\n\t\t\t\tif (char === '\\\\' && this.expression.charAt(i + 1) === 'u') {\n\t\t\t\t\ti++;\n\t\t\t\t\tescapeFlag = escape = true;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif ('{' === char && escapeFlag) {\n\t\t\t\t\tconst end = this.expression.indexOf('}', i + 1);\n\t\t\t\t\tif (end === -1) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tescapeFlag = false;\n\t\t\t\t\ti = end;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tlet identifierName = this.expression.substring(startPos, i);\n\t\tif (escape) {\n\t\t\tidentifierName = this.unescape(identifierName);\n\t\t\tif (!IdentifierRegex.test(identifierName)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tthis.pos = i;\n\t\t} else {\n\t\t\tthis.pos += identifierName.length + (isPrivate ? 1 : 0);\n\t\t}\n\t\tlet node: ExpressionNode;\n\t\tif (isPrivate) {\n\t\t\tconst range: [number, number] = [startPos - 1, this.pos];\n\t\t\tnode = new PrivateIdentifier(identifierName, range);\n\t\t\tthis.current = this.newToken(Token.PRIVATE_NAME, range, node);\n\t\t} else {\n\t\t\tconst range: [number, number] = [startPos, this.pos];\n\t\t\tswitch (identifierName) {\n\t\t\t\tcase 'this': this.current = this.newToken(Token.THIS, range); break;\n\t\t\t\tcase 'null': this.current = this.newToken(Token.NULL_LITERAL, range, new Literal<null>(null, undefined, undefined, undefined, range)); break;\n\t\t\t\tcase 'undefined': this.current = this.newToken(Token.UNDEFINED_LITERAL, range, new Literal<undefined>(undefined, undefined, undefined, undefined, range)); break;\n\t\t\t\tcase 'true': this.current = this.newToken(Token.TRUE_LITERAL, range, new Literal<boolean>(true, undefined, undefined, undefined, range)); break;\n\t\t\t\tcase 'false': this.current = this.newToken(Token.FALSE_LITERAL, range, new Literal<boolean>(false, undefined, undefined, undefined, range)); break;\n\n\t\t\t\tcase 'globalThis': this.current = this.newToken(Token.IDENTIFIER, range, new Identifier('globalThis', range)); break;\n\t\t\t\tcase 'Symbol': this.current = this.newToken(Token.IDENTIFIER, range, new Identifier('Symbol', range)); break;\n\t\t\t\tcase 'of': this.current = this.newToken(Token.IDENTIFIER, range, new Identifier('of', range)); break;\n\t\t\t\tcase 'as': this.current = this.newToken(Token.IDENTIFIER, range, new Identifier('as', range)); break;\n\t\t\t\tcase 'default': this.current = this.newToken(Token.DEFAULT, range, new Identifier('default', range)); break;\n\t\t\t\tcase 'yield': this.current = this.newToken(Token.YIELD, range, new Identifier('yield', range)); break;\n\t\t\t\tcase 'constructor': this.current = this.newToken(Token.IDENTIFIER, range, new Identifier('constructor', range)); break;\n\t\t\t\tcase 'arguments': this.current = this.newToken(Token.IDENTIFIER, range, new Identifier('arguments', range)); break;\n\t\t\t\tcase 'name': this.current = this.newToken(Token.IDENTIFIER, range, new Identifier('name', range)); break;\n\t\t\t\tcase 'eval': this.current = this.newToken(Token.IDENTIFIER, range, new Identifier('eval', range)); break;\n\t\t\t\tcase 'debugger': this.current = this.newToken(Token.DEBUGGER, range, new DebuggerStatement(range)); break;\n\t\t\t\tcase 'class': this.current = this.newToken(Token.CLASS, range); break;\n\t\t\t\tcase 'await': this.current = this.newToken(Token.AWAIT, range, new Identifier('await', range)); break;\n\t\t\t\tcase 'async': this.current = this.newToken(Token.ASYNC, range, new Identifier('async', range)); break;\n\n\t\t\t\tdefault:\n\t\t\t\t\tnode = new Identifier(identifierName, range);\n\t\t\t\t\tthis.current = this.newToken(Token.IDENTIFIER, range, node);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\n\t}\n\tprivate isWhitespace() {\n\t\tlet result = false;\n\t\twhile (FORBIDDEN_CODE_POINT.includes(this.expression.charCodeAt(this.pos).toString(16)!)) {\n\t\t\tthis.pos++;\n\t\t}\n\t\tlet char = this.expression.charAt(this.pos);\n\t\twhile (/\\s/.test(char)) {\n\t\t\tresult = true;\n\t\t\tthis.pos++;\n\t\t\tif (this.pos >= this.expression.length) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tchar = this.expression.charAt(this.pos);\n\t\t}\n\t\treturn result;\n\t}\n\t/**\n\t * [JavaScript 5 Comment Types](https://developer.adobe.com/experience-manager/reference-materials/6-5/javadoc/org/mozilla/javascript/ast/Comment.html)\n\t * @returns boolean\n\t */\n\tprivate isComment() {\n\t\tconst char = this.expression.charAt(this.pos);\n\t\tconst nextChar = this.expression.charAt(this.pos + 1);\n\t\tlet closeTag: string;\n\t\tlet endPos: number;\n\t\tswitch (true) {\n\t\t\t// // line comments\n\t\t\tcase (char === '/' && nextChar === '/'):\n\t\t\t\tcloseTag = '\\n';\n\t\t\t\tendPos = this.expression.indexOf(closeTag, this.pos)\n\t\t\t\tbreak;\n\t\t\t// /* block comments *\\/ and /** jsdoc comments *\\/\n\t\t\tcase (char === '/' && nextChar === '*'):\n\t\t\t\tcloseTag = '*/';\n\t\t\t\tendPos = this.expression.indexOf(closeTag, this.pos);\n\t\t\t\tif (endPos === -1) {\n\t\t\t\t\tthrow new SyntaxError(this.createError('Invalid or unexpected token'));\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t// <!-- html-open line comments\n\t\t\tcase (char === '<' && nextChar === '!'):\n\t\t\t\tif ('<!--' === this.expression.substring(this.pos, this.pos + 4)) {\n\t\t\t\t\tif (isStrict(this.mode)) {\n\t\t\t\t\t\tthrow new SyntaxError('Html Comment not allowed In Module');\n\t\t\t\t\t}\n\t\t\t\t\tconst nextLinePos = this.expression.indexOf('\\n', this.pos);\n\t\t\t\t\tconst closePos = this.expression.indexOf('-->', this.pos);\n\t\t\t\t\tif (nextLinePos < closePos) {\n\t\t\t\t\t\tcloseTag = '\\n';\n\t\t\t\t\t\tendPos = nextLinePos;\n\t\t\t\t\t} else if (closePos < nextLinePos) {\n\t\t\t\t\t\tcloseTag = '-->';\n\t\t\t\t\t\tendPos = closePos;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcloseTag = '';\n\t\t\t\t\t\tendPos = -1;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t// ^\\\\s*--> html-close line comments\n\t\t\tcase (char === '-' && nextChar === '-'):\n\t\t\t\tif ('-->' === this.expression.substring(this.pos, this.pos + 3)) {\n\t\t\t\t\tif (isStrict(this.mode)) {\n\t\t\t\t\t\tthrow new SyntaxError('Html Comment not allowed In Module');\n\t\t\t\t\t}\n\t\t\t\t\t// check if '-->' is the first non-whitespace on the line\n\t\t\t\t\tlet indexOfLastLine = this.expression.lastIndexOf('\\n', this.pos + 1);\n\t\t\t\t\tif (indexOfLastLine == -1) {\n\t\t\t\t\t\tindexOfLastLine = 0;\n\t\t\t\t\t}\n\t\t\t\t\tlet lastLine = this.expression.substring(indexOfLastLine, this.pos + 3);\n\t\t\t\t\tif (!/^\\s*-->$/g.test(lastLine)) {\n\t\t\t\t\t\t// test with close of block comments\n\t\t\t\t\t\tlet lastBlockCommentPos = lastLine.lastIndexOf('*/');\n\t\t\t\t\t\tif (lastBlockCommentPos == -1) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlastLine = lastLine.substring(lastBlockCommentPos + 2);\n\t\t\t\t\t\tif (!/^\\s*-->$/g.test(lastLine)) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tendPos = this.expression.indexOf('\\n', this.pos)\n\t\t\t\t\tcloseTag = '\\n';\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t\tthis.pos = endPos == -1 ? this.expression.length : endPos + closeTag.length;\n\t\treturn true;\n\t}\n\tprivate isLineTerminator(c: string) {\n\t\treturn /[\\n\\r\\u2028\\u2029]/.test(c);\n\t}\n\tprivate isStringLiteralLineTerminator(c: string) {\n\t\treturn /[\\n\\r]/.test(c);\n\t}\n\tprivate mayTerminateString(c: string) {\n\t\treturn (c == '\\'' || c == '\"' || c == '\\n' || c == '\\r' || c == '\\\\');\n\t}\n\tpublic scanRegExpPattern() {\n\t\tconst peek = this.peek();\n\t\tif (!(peek.isType(Token.DIV) || peek.isType(Token.DIV_ASSIGN))) {\n\t\t\treturn false;\n\t\t}\n\t\tconst start = this.pos;\n\t\tthis.next();\n\t\tlet pattern = peek.isType(Token.DIV_ASSIGN) ? '=' : '';\n\t\tlet currentPos = this.pos;\n\t\tlet inCharacterClass = false;\n\t\tlet c = this.expression.charAt(currentPos);\n\t\twhile (c !== '/' || inCharacterClass) {\n\t\t\tif (c == '' || this.isLineTerminator(c)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (c === '\\\\') { // Escape sequence.\n\t\t\t\tpattern += c;\n\t\t\t\tc = this.expression.charAt(++currentPos);\n\t\t\t\tif (c == '' || this.isLineTerminator(c)) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tpattern += c;\n\t\t\t\tc = this.expression.charAt(++currentPos);\n\t\t\t} else {\n\t\t\t\tif (c == '[') inCharacterClass = true;\n\t\t\t\tif (c == ']') inCharacterClass = false;\n\t\t\t\tpattern += c;\n\t\t\t\tc = this.expression.charAt(++currentPos);\n\t\t\t}\n\t\t}\n\t\tcurrentPos++; // consume '/'\n\n\t\tlet flags = '';\n\t\tconst remainFlags = TokenStreamImpl.REGEXP_FLAGS.slice();\n\t\twhile (true) {\n\t\t\tconst code = this.expression.charCodeAt(currentPos);\n\t\t\tconst nextChar = this.expression.charAt(currentPos);\n\t\t\tif (/[\\.\\s]/.test(nextChar) || Number.isNaN(code) /* || FORBIDDEN_CODE_POINT.includes(code.toString(16))*/) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tconst nextCharIndex = remainFlags.indexOf(nextChar);\n\t\t\tif (nextCharIndex === -1) {\n\t\t\t\tif (flags.includes(nextChar)) {\n\t\t\t\t\tthrow new Error(this.createError('Invalid regular expression flags'));\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t} else {\n\t\t\t\tflags += nextChar;\n\t\t\t\tremainFlags.splice(nextCharIndex, 1);\n\t\t\t\tcurrentPos++;\n\t\t\t}\n\t\t}\n\t\tconst range: [number, number] = [start, currentPos];\n\t\tconst regexNode = new Literal<RegExp>(new RegExp(pattern, flags), `/${pattern}/${flags}`, { pattern, flags }, undefined, range);\n\t\tthis.current = this.newToken(Token.REGEXP_LITERAL, range, regexNode);\n\t\tthis.pos = currentPos;\n\t\treturn true;\n\t}\n\tprivate unescape(v: string) {\n\t\tlet index = v.indexOf('\\\\');\n\t\tif (index < 0) {\n\t\t\treturn v;\n\t\t}\n\n\t\tlet buffer = v.substring(0, index);\n\t\twhile (index >= 0) {\n\t\t\tconst c = v.charAt(++index);\n\t\t\tswitch (c) {\n\t\t\t\tcase '\\b':\n\t\t\t\tcase '\\f':\n\t\t\t\tcase '\\n':\n\t\t\t\tcase '\\r':\n\t\t\t\tcase '\\t':\n\t\t\t\tcase '\\v':\n\t\t\t\t\tindex++;\n\t\t\t\t\tbuffer += '\\\\' + c;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'b':\n\t\t\t\t\tindex++;\n\t\t\t\t\tbuffer += '\\b';\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'f':\n\t\t\t\t\tindex++;\n\t\t\t\t\tbuffer += '\\f';\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'n':\n\t\t\t\t\tindex++;\n\t\t\t\t\tbuffer += '\\n';\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'r':\n\t\t\t\t\tindex++;\n\t\t\t\t\tbuffer += '\\r';\n\t\t\t\t\tbreak;\n\t\t\t\tcase 't':\n\t\t\t\t\tindex++;\n\t\t\t\t\tbuffer += '\\t';\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'v':\n\t\t\t\t\tindex++;\n\t\t\t\t\tbuffer += '\\v';\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'u': {\n\t\t\t\t\tindex++;\n\t\t\t\t\t// interpret the following 4 characters as the hex of the unicode code point\n\t\t\t\t\tif ('{' === v.charAt(index)) {\n\t\t\t\t\t\tindex++;\n\t\t\t\t\t\tconst start = index;\n\t\t\t\t\t\tconst end = v.indexOf('}', start + 1);\n\t\t\t\t\t\tconst codePoint = v.substring(start, end);\n\t\t\t\t\t\tbuffer += String.fromCodePoint(parseInt(codePoint, 16));\n\t\t\t\t\t\tindex = end + 1;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst codePoint = v.substring(index, index + 4);\n\t\t\t\t\t\tif (!TokenStreamImpl.UnicodePattern.test(codePoint)) {\n\t\t\t\t\t\t\tthrow new Error(this.createError('Illegal escape sequence: \\\\u ' + codePoint));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbuffer += String.fromCodePoint(parseInt(codePoint, 16));\n\t\t\t\t\t\tindex += 4;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'x': {\n\t\t\t\t\tindex++;\n\t\t\t\t\t// interpret the following 2 characters as the hex of the decimal code point\n\t\t\t\t\tlet codePoint = v.substring(index, index + 2);\n\t\t\t\t\tif (!TokenStreamImpl.DecimalPattern.test(codePoint)) {\n\t\t\t\t\t\tthrow new Error(this.createError('Illegal escape sequence: \\\\x ' + codePoint));\n\t\t\t\t\t}\n\t\t\t\t\tbuffer += String.fromCharCode(parseInt(codePoint, 16));\n\t\t\t\t\tindex += 2;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tdefault:\n\t\t\t\t\tif (!Number.isNaN(parseInt(c, 8))) {\n\t\t\t\t\t\tlet codePoint = c;\n\t\t\t\t\t\tfor (const i of [1, 2]) {\n\t\t\t\t\t\t\tconst tempChar = v.charAt(index + i);\n\t\t\t\t\t\t\tif (!Number.isNaN(parseInt(tempChar, 8))) {\n\t\t\t\t\t\t\t\tcodePoint += tempChar;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!TokenStreamImpl.AsciiPattern.test(codePoint)) {\n\t\t\t\t\t\t\tthrow new Error(this.createError('Illegal escape sequence: ASCII 8 base, ' + codePoint));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbuffer += String.fromCharCode(parseInt(codePoint, 8));\n\t\t\t\t\t\tindex += codePoint.length;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tindex++;\n\t\t\t\t\tbuffer += c;\n\t\t\t\t\tbreak;\n\t\t\t\t// throw new Error(this.createError('Illegal escape sequence: \"\\\\' + c + '\"'));\n\t\t\t}\n\t\t\tlet backslash = v.indexOf('\\\\', index);\n\t\t\tif (backslash == -1) {\n\t\t\t\tbuffer += v.substring(index, v.length);\n\t\t\t\tbreak;\n\t\t\t} else {\n\t\t\t\tbuffer += v.substring(index, backslash);\n\t\t\t\tindex = backslash;\n\t\t\t}\n\t\t}\n\t\treturn buffer;\n\t}\n\tprivate isRadixInteger() {\n\t\tlet pos = this.pos;\n\t\tif (pos >= this.expression.length - 2 || this.expression.charAt(pos) !== '0') {\n\t\t\treturn false;\n\t\t}\n\t\t++pos;\n\n\t\tlet radix;\n\t\tlet validDigit;\n\t\tif (this.expression.charAt(pos) === 'x') {\n\t\t\tradix = 16;\n\t\t\tvalidDigit = /^[0-9a-f]$/i;\n\t\t\t++pos;\n\t\t} else if (this.expression.charAt(pos) === 'b') {\n\t\t\tradix = 2;\n\t\t\tvalidDigit = /^[01]$/i;\n\t\t\t++pos;\n\t\t} else {\n\t\t\treturn false;\n\t\t}\n\n\t\tlet valid = false;\n\t\tlet startPos = pos;\n\n\t\twhile (pos < this.expression.length) {\n\t\t\tconst c = this.expression.charAt(pos);\n\t\t\tif (validDigit.test(c)) {\n\t\t\t\tpos++;\n\t\t\t\tvalid = true;\n\t\t\t} else {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif (valid) {\n\t\t\tconst string = this.expression.substring(startPos, pos);\n\t\t\tconst rawString = this.expression.substring(this.pos, pos);\n\t\t\tconst range: [number, number] = [this.pos, pos];\n\t\t\tconst numNode = new Literal<number>(parseInt(string, radix), rawString, undefined, undefined, range);\n\t\t\tthis.current = this.newToken(Token.NUMBER, range, numNode);\n\t\t\tthis.pos = pos;\n\t\t}\n\t\treturn valid;\n\t}\n\tprivate isNumber() {\n\t\tconst startPos = this.pos;\n\t\tlet valid = false;\n\t\tlet pos = this.pos;\n\t\tlet resetPos = pos;\n\t\tlet foundDot = false;\n\t\tlet foundDigits = false;\n\t\tlet isOctal = false;\n\t\tlet c;\n\n\t\twhile (pos < this.expression.length) {\n\t\t\tc = this.expression.charAt(pos);\n\t\t\tif ((c >= '0' && c <= '9') || (!foundDot && c === '.')) {\n\t\t\t\tif (c === '.') {\n\t\t\t\t\tfoundDot = true;\n\t\t\t\t} else {\n\t\t\t\t\tfoundDigits = true;\n\t\t\t\t}\n\t\t\t\tpos++;\n\t\t\t\tvalid = foundDigits;\n\t\t\t} else if ('o' == c.toLowerCase()) {\n\t\t\t\tif (pos == startPos + 1) {\n\t\t\t\t\tpos++;\n\t\t\t\t\tisOctal = true;\n\t\t\t\t} else {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif (valid) {\n\t\t\tresetPos = pos;\n\t\t}\n\n\t\tif (c === 'e' || c === 'E') {\n\t\t\tpos++;\n\t\t\tlet acceptSign = true;\n\t\t\tlet validExponent = false;\n\t\t\twhile (pos < this.expression.length) {\n\t\t\t\tc = this.expression.charAt(pos);\n\t\t\t\tif (acceptSign && (c === '+' || c === '-')) {\n\t\t\t\t\tacceptSign = false;\n\t\t\t\t} else if (c >= '0' && c <= '9') {\n\t\t\t\t\tvalidExponent = true;\n\t\t\t\t\tacceptSign = false;\n\t\t\t\t} else {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tpos++;\n\t\t\t}\n\n\t\t\tif (!validExponent) {\n\t\t\t\tpos = resetPos;\n\t\t\t}\n\t\t}\n\n\t\tif (valid) {\n\t\t\tconst rawString = this.expression.substring(startPos, pos);\n\t\t\tif (this.expression.charAt(pos) === 'n') {\n\t\t\t\tpos++;\n\t\t\t\tconst range: [number, number] = [startPos, this.pos];\n\t\t\t\tconst bigintNode = new Literal<BigInt>(BigInt(rawString), rawString + 'n', undefined, rawString, range);\n\t\t\t\tthis.current = this.newToken(Token.BIGINT, range, bigintNode);\n\t\t\t} else {\n\t\t\t\tlet numNode: Literal<number>;\n\t\t\t\tconst range: [number, number] = [startPos, this.pos];\n\t\t\t\tif (isOctal) {\n\t\t\t\t\tconst octal = rawString.substring(2);\n\t\t\t\t\tif (TokenStreamImpl.OctalPattern.test(octal)) {\n\t\t\t\t\t\tnumNode = new Literal<number>(parseInt(octal, 8), rawString, undefined, undefined, range);\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tnumNode = new Literal<number>(parseFloat(rawString), rawString, undefined, undefined, range);\n\t\t\t\t}\n\t\t\t\tthis.current = this.newToken(Token.NUMBER, range, numNode);\n\t\t\t}\n\t\t\tthis.pos = pos;\n\t\t} else {\n\t\t\tthis.pos = resetPos;\n\t\t}\n\t\treturn valid;\n\t}\n\tprivate isOperator() {\n\t\tconst char = this.expression.charAt(this.pos);\n\t\tswitch (char) {\n\t\t\tcase '+':\n\t\t\t\tif (this.expression.charAt(this.pos + 1) === '+') {\n\t\t\t\t\tthis.current = this.newToken(Token.INC, [this.pos, (this.pos += 2)]);\n\t\t\t\t} else if (this.expression.charAt(this.pos + 1) === '=') {\n\t\t\t\t\tthis.current = this.newToken(Token.ADD_ASSIGN, [this.pos, (this.pos += 2)]);\n\t\t\t\t} else {\n\t\t\t\t\tthis.current = this.newToken(Token.ADD, [this.pos, (this.pos += 1)]);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\tcase '-':\n\t\t\t\tif (this.expression.charAt(this.pos + 1) === '-') {\n\t\t\t\t\tthis.current = this.newToken(Token.DEC, [this.pos, (this.pos += 2)]);\n\t\t\t\t} else if (this.expression.charAt(this.pos + 1) === '=') {\n\t\t\t\t\tthis.current = this.newToken(Token.SUB_ASSIGN, [this.pos, (this.pos += 2)]);\n\t\t\t\t} else {\n\t\t\t\t\tthis.current = this.newToken(Token.SUB, [this.pos, (this.pos += 1)]);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\tcase '=':\n\t\t\t\tif (this.expression.charAt(this.pos + 1) === '=') {\n\t\t\t\t\tif (this.expression.charAt(this.pos + 2) === '=') {\n\t\t\t\t\t\tthis.current = this.newToken(Token.EQ_STRICT, [this.pos, (this.pos += 3)]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.current = this.newToken(Token.EQ, [this.pos, (this.pos += 2)]);\n\t\t\t\t\t}\n\t\t\t\t} else if (this.expression.charAt(this.pos + 1) === '>') {\n\t\t\t\t\tthis.current = this.newToken(Token.ARROW, [this.pos, (this.pos += 2)]);\n\t\t\t\t} else {\n\t\t\t\t\tthis.current = this.newToken(Token.ASSIGN, [this.pos, (this.pos += 1)]);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\tcase '*':\n\t\t\t\tif (this.expression.charAt(this.pos + 1) === '*') {\n\t\t\t\t\tif (this.expression.charAt(this.pos + 2) === '=') {\n\t\t\t\t\t\tthis.current = this.newToken(Token.EXP_ASSIGN, [this.pos, (this.pos += 3)]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.current = this.newToken(Token.EXP, [this.pos, (this.pos += 2)]);\n\t\t\t\t\t}\n\t\t\t\t} else if (this.expression.charAt(this.pos + 1) === '=') {\n\t\t\t\t\tthis.current = this.newToken(Token.MUL_ASSIGN, [this.pos, (this.pos += 2)]);\n\t\t\t\t} else {\n\t\t\t\t\tthis.current = this.newToken(Token.MUL, [this.pos, (this.pos += 1)]);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\tcase '/':\n\t\t\t\tif (this.expression.charAt(this.pos + 1) === '=') {\n\t\t\t\t\tthis.current = this.newToken(Token.DIV_ASSIGN, [this.pos, (this.pos += 2)]);\n\t\t\t\t} else {\n\t\t\t\t\tthis.current = this.newToken(Token.DIV, [this.pos, (this.pos += 1)]);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\tcase '%':\n\t\t\t\tif (this.expression.charAt(this.pos + 1) === '%') {\n\t\t\t\t\tif (this.expression.charAt(this.pos + 1) === '=') {\n\t\t\t\t\t\tthis.current = this.newToken(Token.MODULO_ASSIGN, [this.pos, (this.pos += 3)]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.current = this.newToken(Token.MODULO, [this.pos, (this.pos += 2)]);\n\t\t\t\t\t}\n\t\t\t\t} else if (this.expression.charAt(this.pos + 1) === '=') {\n\t\t\t\t\tthis.current = this.newToken(Token.MOD_ASSIGN, [this.pos, (this.pos += 2)]);\n\t\t\t\t} else {\n\t\t\t\t\tthis.current = this.newToken(Token.MOD, [this.pos, (this.pos += 1)]);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\tcase '^':\n\t\t\t\tif (this.expression.charAt(this.pos + 1) === '=') {\n\t\t\t\t\tthis.current = this.newToken(Token.BIT_XOR_ASSIGN, [this.pos, (this.pos += 2)]);\n\t\t\t\t} else {\n\t\t\t\t\tthis.current = this.newToken(Token.BIT_XOR, [this.pos, (this.pos += 1)]);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\tcase '>':\n\t\t\t\tif (this.expression.charAt(this.pos + 1) === '>') {\n\t\t\t\t\tif (this.expression.charAt(this.pos + 2) === '>') {\n\t\t\t\t\t\tif (this.expression.charAt(this.pos + 3) === '=') {\n\t\t\t\t\t\t\tthis.current = this.newToken(Token.SHR_ASSIGN, [this.pos, (this.pos += 4)]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.current = this.newToken(Token.SHR, [this.pos, (this.pos += 3)]);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (this.expression.charAt(this.pos + 2) === '=') {\n\t\t\t\t\t\tthis.current = this.newToken(Token.SAR_ASSIGN, [this.pos, (this.pos += 3)]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.current = this.newToken(Token.SAR, [this.pos, (this.pos += 2)]);\n\t\t\t\t\t}\n\t\t\t\t} else if (this.expression.charAt(this.pos + 1) === '=') {\n\t\t\t\t\tthis.current = this.newToken(Token.GTE, [this.pos, (this.pos += 2)]);\n\t\t\t\t} else if (this.expression.charAt(this.pos + 1) === '?') {\n\t\t\t\t\tif (this.expression.charAt(this.pos + 2) === '=') {\n\t\t\t\t\t\tthis.current = this.newToken(Token.LARGER_ASSIGN, [this.pos, (this.pos += 3)]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.current = this.newToken(Token.LARGER, [this.pos, (this.pos += 2)]);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tthis.current = this.newToken(Token.GT, [this.pos, (this.pos += 2)]);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\tcase '<':\n\t\t\t\tif (this.expression.charAt(this.pos + 1) === '<') {\n\t\t\t\t\tif (this.expression.charAt(this.pos + 2) === '=') {\n\t\t\t\t\t\tthis.current = this.newToken(Token.SHL_ASSIGN, [this.pos, (this.pos += 3)]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.current = this.newToken(Token.SHL, [this.pos, (this.pos += 2)]);\n\t\t\t\t\t}\n\t\t\t\t} else if (this.expression.charAt(this.pos + 1) === '=') {\n\t\t\t\t\tif (this.expression.charAt(this.pos + 2) === '>') {\n\t\t\t\t\t\tthis.current = this.newToken(Token.SPACESHIP, [this.pos, (this.pos += 3)]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.current = this.newToken(Token.LTE, [this.pos, (this.pos += 2)]);\n\t\t\t\t\t}\n\t\t\t\t} else if (this.expression.charAt(this.pos + 1) === '?') {\n\t\t\t\t\tif (this.expression.charAt(this.pos + 2) === '=') {\n\t\t\t\t\t\tthis.current = this.newToken(Token.SMALLER_ASSIGN, [this.pos, (this.pos += 3)]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.current = this.newToken(Token.SMALLER, [this.pos, (this.pos += 2)]);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tthis.current = this.newToken(Token.LT, [this.pos, (this.pos += 1)]);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\tcase '|':\n\t\t\t\tif (this.expression.charAt(this.pos + 1) === '|') {\n\t\t\t\t\tif (this.expression.charAt(this.pos + 2) === '=') {\n\t\t\t\t\t\tthis.current = this.newToken(Token.OR_ASSIGN, [this.pos, (this.pos += 3)]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.current = this.newToken(Token.OR, [this.pos, (this.pos += 2)]);\n\t\t\t\t\t}\n\t\t\t\t} else if (this.expression.charAt(this.pos + 1) === '=') {\n\t\t\t\t\tthis.current = this.newToken(Token.BIT_OR_ASSIGN, [this.pos, (this.pos += 2)]);\n\t\t\t\t} else if (this.expression.charAt(this.pos + 1) === '>') {\n\t\t\t\t\tthis.current = this.newToken(Token.PIPELINE, [this.pos, (this.pos += 2)]);\n\t\t\t\t} else {\n\t\t\t\t\tthis.current = this.newToken(Token.BIT_OR, [this.pos, (this.pos += 1)]);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\tcase '&':\n\t\t\t\tif (this.expression.charAt(this.pos + 1) === '&') {\n\t\t\t\t\tif (this.expression.charAt(this.pos + 2) === '=') {\n\t\t\t\t\t\tthis.current = this.newToken(Token.AND_ASSIGN, [this.pos, (this.pos += 3)]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.current = this.newToken(Token.AND, [this.pos, (this.pos += 2)]);\n\t\t\t\t\t}\n\t\t\t\t} else if (this.expression.charAt(this.pos + 1) === '=') {\n\t\t\t\t\tthis.current = this.newToken(Token.BIT_AND_ASSIGN, [this.pos, (this.pos += 2)]);\n\t\t\t\t} else {\n\t\t\t\t\tthis.current = this.newToken(Token.BIT_AND, [this.pos, (this.pos += 1)]);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\tcase '?':\n\t\t\t\tif (this.expression.charAt(this.pos + 1) === '?') {\n\t\t\t\t\tif (this.expression.charAt(this.pos + 2) === '=') {\n\t\t\t\t\t\tthis.current = this.newToken(Token.NULLISH_ASSIGN, [this.pos, (this.pos += 3)]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.current = this.newToken(Token.NULLISH, [this.pos, (this.pos += 2)]);\n\t\t\t\t\t}\n\t\t\t\t} else if (this.expression.substring(this.pos + 1, this.pos + 3) == '::') {\n\t\t\t\t\tthis.current = this.newToken(Token.QUESTION_BIND, [this.pos, (this.pos += 3)]);\n\t\t\t\t} else if (this.expression.charAt(this.pos + 1) === '.') {\n\t\t\t\t\tthis.current = this.newToken(Token.QUESTION_PERIOD, [this.pos, (this.pos += 2)]);\n\t\t\t\t} else {\n\t\t\t\t\tthis.current = this.newToken(Token.CONDITIONAL, [this.pos, (this.pos += 1)]);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\tcase '!':\n\t\t\t\tif (this.expression.charAt(this.pos + 1) === '=') {\n\t\t\t\t\tif (this.expression.charAt(this.pos + 2) === '=') {\n\t\t\t\t\t\tthis.current = this.newToken(Token.NE_STRICT, [this.pos, (this.pos += 3)]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.current = this.newToken(Token.NE, [this.pos, (this.pos += 2)]);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tthis.current = this.newToken(Token.NOT, [this.pos, (this.pos += 1)]);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\tcase '.':\n\t\t\t\tif (/\\.\\.\\./.test(this.expression.substring(this.pos, this.pos + 3))) {\n\t\t\t\t\tthis.current = this.newToken(Token.ELLIPSIS, [this.pos, (this.pos += 3)]);\n\t\t\t\t\treturn true;\n\t\t\t\t} else {\n\t\t\t\t\tthis.current = this.newToken(Token.PERIOD, [this.pos, (this.pos += 1)]);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t// no break\n\t\t\tcase ':':\n\t\t\t\tif (this.expression.charAt(this.pos + 1) === ':') {\n\t\t\t\t\tthis.current = this.newToken(Token.QUESTION_BIND, [this.pos, (this.pos += 2)]);\n\t\t\t\t} else {\n\t\t\t\t\tthis.current = this.newToken(Token.COLON, [this.pos, (this.pos += 1)]);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\tcase '~':\n\t\t\t\tthis.current = this.newToken(Token.BIT_NOT, [this.pos, (this.pos += 1)]);\n\t\t\t\treturn true;\n\t\t\tcase 'a':\n\t\t\t\tif (/async\\s/.test(this.expression.substring(this.pos, this.pos + 6))) {\n\t\t\t\t\tconst range: [number, number] = [this.pos, (this.pos += 5)];\n\t\t\t\t\tthis.current = this.newToken(Token.ASYNC, range, new Identifier('async', range));\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tif (/await\\s/.test(this.expression.substring(this.pos, this.pos + 6))) {\n\t\t\t\t\tconst range: [number, number] = [this.pos, (this.pos += 5)];\n\t\t\t\t\tthis.current = this.newToken(Token.AWAIT, range, new Identifier('await', range));\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\tcase 'i':\t\t\t// in, instanceof\n\t\t\t\tif (this.expression.charAt(this.pos + 1) === 'n') {\n\t\t\t\t\tif (/instanceof\\s/.test(this.expression.substring(this.pos, this.pos + 11))) {\n\t\t\t\t\t\tthis.current = this.newToken(Token.INSTANCEOF, [this.pos, (this.pos += 11)]);\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t} else if (/n\\s/.test(this.expression.charAt(this.pos + 2))) {\n\t\t\t\t\t\tthis.current = this.newToken(Token.IN, [this.pos, (this.pos += 3)]);\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\tcase 't':\t\t\t// typeof\n\t\t\t\tif (/typeof\\s/.test(this.expression.substring(this.pos, this.pos + 7))) {\n\t\t\t\t\tthis.current = this.newToken(Token.TYPEOF, [this.pos, (this.pos += 7)]);\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\tcase 'v':\t\t\t// void\n\t\t\t\tif (/void\\s/.test(this.expression.substring(this.pos, this.pos + 5))) {\n\t\t\t\t\tthis.current = this.newToken(Token.VOID, [this.pos, (this.pos += 5)]);\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\tcase 'd':\t\t\t// delete\n\t\t\t\tif (/delete\\s/.test(this.expression.substring(this.pos, this.pos + 7))) {\n\t\t\t\t\tthis.current = this.newToken(Token.DELETE, [this.pos, (this.pos += 7)]);\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\tcase 'n':\t\t\t// new\n\t\t\t\tif (/new\\s/.test(this.expression.substring(this.pos, this.pos + 4))) {\n\t\t\t\t\tthis.current = this.newToken(Token.NEW, [this.pos, (this.pos += 4)]);\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t}\n\tprivate isStatement() {\n\t\tconst char = this.expression.charAt(this.pos);\n\t\tswitch (char) {\n\t\t\t// case 'a':\n\t\t\t// \tif (/as\\s/.test(this.expression.substring(this.pos, this.pos + 3))) {\n\t\t\t// \t\tthis.current = this.newToken(Token.AS);\n\t\t\t// \t\tthis.pos += 3;\n\t\t\t// \t\treturn true;\n\t\t\t// \t}\n\t\t\t// return false;\n\t\t\tcase 'b':\n\t\t\t\tif (/break\\s?;?/.test(this.expression.substring(this.pos, this.pos + 7))) {\n\t\t\t\t\tthis.current = this.newToken(Token.BREAK, [this.pos, (this.pos += 5)]);\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\tcase 'c':\n\t\t\t\tif (/case[\\s~!+-\\/\\('\"`]/.test(this.expression.substring(this.pos, this.pos + 5))) {\n\t\t\t\t\tthis.current = this.newToken(Token.CASE, [this.pos, (this.pos += 4)]);\n\t\t\t\t\treturn true;\n\t\t\t\t} else if (/const\\s/.test(this.expression.substring(this.pos, this.pos + 6))) {\n\t\t\t\t\tthis.current = this.newToken(Token.CONST, [this.pos, (this.pos += 6)]);\n\t\t\t\t\treturn true;\n\t\t\t\t} else if (/catch[\\s\\{\\(]/.test(this.expression.substring(this.pos, this.pos + 6))) {\n\t\t\t\t\tthis.current = this.newToken(Token.CATCH, [this.pos, (this.pos += 5)]);\n\t\t\t\t\treturn true;\n\t\t\t\t} else if (/class\\s/.test(this.expression.substring(this.pos, this.pos + 6))) {\n\t\t\t\t\tthis.current = this.newToken(Token.CLASS, [this.pos, (this.pos += 6)]);\n\t\t\t\t\treturn true;\n\t\t\t\t} else if (/continue[\\s;]/.test(this.expression.substring(this.pos, this.pos + 9))) {\n\t\t\t\t\tthis.current = this.newToken(Token.CONTINUE, [this.pos, (this.pos += 8)]);\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\tcase 'd':\n\t\t\t\tif (/do[\\s|\\{]/.test(this.expression.substring(this.pos, this.pos + 3))) {\n\t\t\t\t\tthis.current = this.newToken(Token.DO, [this.pos, (this.pos += 2)]);\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\tcase 'e':\n\t\t\t\tif (/else[\\s|\\{]/.test(this.expression.substring(this.pos, this.pos + 5))) {\n\t\t\t\t\tthis.current = this.newToken(Token.ELSE, [this.pos, (this.pos += 4)]);\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tif (/export\\s/.test(this.expression.substring(this.pos, this.pos + 7))) {\n\t\t\t\t\tthis.current = this.newToken(Token.EXPORT, [this.pos, (this.pos += 7)]);\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tif (/extends\\s/.test(this.expression.substring(this.pos, this.pos + 8))) {\n\t\t\t\t\tthis.current = this.newToken(Token.EXTENDS, [this.pos, (this.pos += 8)]);\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\tcase 'g':\n\t\t\t\tif (/get\\s/.test(this.expression.substring(this.pos, this.pos + 4))) {\n\t\t\t\t\tconst range: [number, number] = [this.pos, (this.pos += 4)];\n\t\t\t\t\tthis.current = this.newToken(Token.GET, range, new Identifier('get', range));\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\tcase 'f':\n\t\t\t\tif (/for[\\s\\(]/.test(this.expression.substring(this.pos, this.pos + 4))) {\n\t\t\t\t\tthis.current = this.newToken(Token.FOR, [this.pos, (this.pos += 3)]);\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tif (/finally[\\s\\{]/.test(this.expression.substring(this.pos, this.pos + 8))) {\n\t\t\t\t\tthis.current = this.newToken(Token.FINALLY, [this.pos, (this.pos += 7)]);\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tif (/function[\\s\\*\\(]/.test(this.expression.substring(this.pos, this.pos + 9))) {\n\t\t\t\t\tthis.current = this.newToken(Token.FUNCTION, [this.pos, (this.pos += 8)]);\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\tcase 'i':\n\t\t\t\tif (/if[\\s|\\(]/.test(this.expression.substring(this.pos, this.pos + 3))) {\n\t\t\t\t\tthis.current = this.newToken(Token.IF, [this.pos, (this.pos += 2)]);\n\t\t\t\t\treturn true;\n\t\t\t\t} else if (/in\\s/.test(this.expression.substring(this.pos, this.pos + 3))) {\n\t\t\t\t\tthis.current = this.newToken(Token.IN, [this.pos, (this.pos += 3)]);\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\telse if (/import\\s/.test(this.expression.substring(this.pos, this.pos + 7))) {\n\t\t\t\t\tthis.current = this.newToken(Token.IMPORT, [this.pos, (this.pos += 7)]);\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\tcase 'l':\n\t\t\t\tif (/let\\s/.test(this.expression.substring(this.pos, this.pos + 4))) {\n\t\t\t\t\tconst range: [number, number] = [this.pos, (this.pos += 4)];\n\t\t\t\t\tthis.current = this.newToken(Token.LET, range, new Identifier('let', range));\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\tcase 't':\n\t\t\t\tif (/try[\\s\\{]/.test(this.expression.substring(this.pos, this.pos + 4))) {\n\t\t\t\t\tthis.current = this.newToken(Token.TRY, [this.pos, (this.pos += 3)]);\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tif (/throw\\s/.test(this.expression.substring(this.pos, this.pos + 6))) {\n\t\t\t\t\tthis.current = this.newToken(Token.THROW, [this.pos, (this.pos += 6)]);\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\tcase 'r':\n\t\t\t\tif (/return[\\s~!+-\\/\\('\"`]/.test(this.expression.substring(this.pos, this.pos + 7))) {\n\t\t\t\t\tthis.current = this.newToken(Token.RETURN, [this.pos, (this.pos += 6)]);\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t// case 'of':\n\t\t\t// \tif (/of\\s/.test(this.expression.substring(this.pos, this.pos + 3))) {\n\t\t\t// \t\tthis.current = this.newToken(Token.OF, [this.pos, (this.pos += 3)]);\n\t\t\t// \t\treturn true;\n\t\t\t// \t}\n\t\t\t// \treturn false;\n\t\t\tcase 's':\n\t\t\t\tif (/switch(\\s|\\()/.test(this.expression.substring(this.pos, this.pos + 7))) {\n\t\t\t\t\tthis.current = this.newToken(Token.SWITCH, [this.pos, (this.pos += 6)]);\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tif (/static\\s/.test(this.expression.substring(this.pos, this.pos + 7))) {\n\t\t\t\t\tthis.current = this.newToken(Token.STATIC, [this.pos, (this.pos += 7)]);\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tif (/set\\s/.test(this.expression.substring(this.pos, this.pos + 4))) {\n\t\t\t\t\tconst range: [number, number] = [this.pos, (this.pos += 4)];\n\t\t\t\t\tthis.current = this.newToken(Token.SET, range, new Identifier('set', range));\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tif (/super[\\.\\(]?/.test(this.expression.substring(this.pos, this.pos + 6))) {\n\t\t\t\t\tconst range: [number, number] = [this.pos, (this.pos += 5)];\n\t\t\t\t\tthis.current = this.newToken(Token.SUPER, range, new Super(range));\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\tcase 'w':\n\t\t\t\tif (/while(\\s|\\()/.test(this.expression.substring(this.pos, this.pos + 6))) {\n\t\t\t\t\tthis.current = this.newToken(Token.WHILE, [this.pos, (this.pos += 5)]);\n\t\t\t\t\treturn true;\n\t\t\t\t} else if (/with(\\s|\\()/.test(this.expression.substring(this.pos, this.pos + 5))) {\n\t\t\t\t\tthis.current = this.newToken(Token.WITH, [this.pos, (this.pos += 4)]);\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\tcase 'v':\n\t\t\t\tif (/var\\s/.test(this.expression.substring(this.pos, this.pos + 4))) {\n\t\t\t\t\tthis.current = this.newToken(Token.VAR, [this.pos, (this.pos += 4)]);\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t}\n\tprotected getCoordinates() {\n\t\tlet line = 0, column, newline = -1;\n\t\tdo {\n\t\t\tline++;\n\t\t\tcolumn = this.pos - newline;\n\t\t\tnewline = this.expression.indexOf('\\n', newline + 1);\n\t\t} while (newline >= 0 && newline < this.pos);\n\t\treturn { line, column };\n\t}\n\tpublic createError(message: String): string {\n\t\tlet coords = this.getCoordinates();\n\t\tconst lastLinePos = this.expression.lastIndexOf('\\n', this.pos) + 1;\n\t\tlet nextLinePos = this.expression.indexOf('\\n', this.pos + 1);\n\t\tif (nextLinePos == -1) {\n\t\t\tnextLinePos = this.expression.length;\n\t\t}\n\t\tconst subStart = Math.max(lastLinePos, this.pos - 25);\n\t\tconst subEnd = Math.min(nextLinePos, this.pos + 25, this.expression.length);\n\n\t\tconst errorAt = this.expression.substring(subStart, subEnd);\n\t\tconst indictor = new Array<string>(subEnd - subStart).fill(' ');\n\t\tindictor[this.pos - subStart] = '^';\n\t\tconst errorIndictor = indictor.join('');\n\t\treturn `\n\t\t\t> ${message}\n\t\t\t> token name: '${this.current?.token?.getName()}' ${this.current?.value ? `parsed: ${this.current.value.toString()}` : ''}\n\t\t\t> ${coords.line}:${coords.column}\\t${errorAt}\n\t\t\t> ${coords.line}:${coords.column}\\t${errorIndictor}\n\t\t\t`;\n\t}\n}\n"]}
|
package/v8/token.d.ts
CHANGED
|
@@ -337,6 +337,7 @@ export declare class Token {
|
|
|
337
337
|
static readonly VAR: Token;
|
|
338
338
|
static readonly VOID: Token;
|
|
339
339
|
static readonly WHILE: Token;
|
|
340
|
+
static readonly WITH: Token;
|
|
340
341
|
static readonly YIELD: Token;
|
|
341
342
|
static readonly NUMBER: Token;
|
|
342
343
|
static readonly BIGINT: Token;
|
|
@@ -401,8 +402,9 @@ export declare class Token {
|
|
|
401
402
|
}
|
|
402
403
|
export declare class TokenExpression {
|
|
403
404
|
token: Token;
|
|
405
|
+
range: [number, number];
|
|
404
406
|
value?: ExpressionNode | undefined;
|
|
405
|
-
constructor(token: Token, value?: ExpressionNode | undefined);
|
|
407
|
+
constructor(token: Token, range: [number, number], value?: ExpressionNode | undefined);
|
|
406
408
|
getValue<T extends ExpressionNode>(): T;
|
|
407
409
|
isType(type: Token): boolean;
|
|
408
410
|
isNotType(type: Token): boolean;
|