@ibyar/expressions 3.1.1 → 5.0.0

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/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 { 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 - 1, 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 += 6)]);\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"]}
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 - 1, 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 += 6)]);\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\tcase 'u':\n\t\t\t\tif (/using\\s/.test(this.expression.substring(this.pos, this.pos + 6))) {\n\t\t\t\t\tthis.current = this.newToken(Token.USING, [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\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"]}