@ibyar/expressions 0.3.6 → 0.3.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +30 -18
- package/api/definition/function.js +6 -0
- package/api/definition/function.js.map +1 -1
- package/package.json +6 -2
- package/v8/parser.d.ts +1 -0
- package/v8/parser.js +103 -57
- package/v8/parser.js.map +1 -1
- package/v8/stream.js +5 -1
- package/v8/stream.js.map +1 -1
package/v8/stream.js
CHANGED
|
@@ -1207,7 +1207,11 @@ export class TokenStreamImpl extends TokenStream {
|
|
|
1207
1207
|
}
|
|
1208
1208
|
createError(message) {
|
|
1209
1209
|
let coords = this.getCoordinates();
|
|
1210
|
-
|
|
1210
|
+
const subStart = Math.max(0, this.pos - 25);
|
|
1211
|
+
const subEnd = Math.min(this.pos + 25, this.expression.length);
|
|
1212
|
+
return `@[line: ${coords.line}, column: ${coords.column}] current token: ${JSON.stringify(this.current)}
|
|
1213
|
+
${message}
|
|
1214
|
+
\`${this.expression.substring(subStart, subEnd)}\``;
|
|
1211
1215
|
}
|
|
1212
1216
|
}
|
|
1213
1217
|
TokenStreamImpl.REGEXP_FLAGS = ['g', 'i', 'm', 's', 'u', 'y'];
|
package/v8/stream.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stream.js","sourceRoot":"","sources":["../../../src/expressions/v8/stream.ts"],"names":[],"mappings":"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","sourcesContent":["import { ExpressionNode } from '../api/expression.js';\nimport { Token, TokenExpression } from './token.js';\nimport {\n\tBigIntLiteral, GlobalThisNode, NumberLiteral, OfNode, Identifier,\n\tRegExpLiteral, StringLiteral, SymbolNode, AsNode\n} from '../api/definition/values.js';\nimport { BreakStatement, ContinueStatement } from '../api/statement/control/terminate.js';\n\nconst EOFToken = Object.freeze(new TokenExpression(Token.EOS)) as TokenExpression;\n\nexport interface PreTemplateLiteral extends ExpressionNode { };\nexport class PreTemplateLiteral {\n\tconstructor(public strings: string[], public expressions: string[]) { }\n}\n\nexport abstract class TokenStream {\n\tpublic static getTokenStream(source: string | TokenExpression[]): TokenStream {\n\t\tif (Array.isArray(source)) {\n\t\t\treturn new TokenStreamer(source);\n\t\t}\n\t\telse if (typeof source === 'string') {\n\t\t\treturn new TokenStreamImpl(source);\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\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): TokenStream {\n\t\texpect ??= Token.EOS;\n\t\tif (Token.isClosePair(expect)) {\n\t\t\treturn this.getPairStreamer(Token.openOf(expect), expect);\n\t\t}\n\t\treturn this.getStreamerTo(expect);\n\t}\n\tprivate getStreamerTo(expect: Token): TokenStream {\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 === 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\treturn new TokenStreamer(tokens);\n\t}\n\tprivate getPairStreamer(open: Token, close: Token): TokenStream {\n\t\t// check pair\n\t\tlet count = 0;\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 === 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\tbreak;\n\t\t\t\t}\n\t\t\t\telse if (count > 0) {\n\t\t\t\t\tcount--;\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\treturn new TokenStreamer(tokens);\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 createError(message: String): string;\n}\n\nexport class TokenStreamer extends TokenStream {\n\tconstructor(private tokens: TokenExpression[]) {\n\t\tsuper();\n\t}\n\tnext(): TokenExpression {\n\t\tif (this.pos === this.tokens.length) {\n\t\t\treturn EOFToken;\n\t\t}\n\t\tthis.last = this.current;\n\t\treturn this.current = this.tokens[this.pos++];\n\t}\n\tcreateError(message: String): string {\n\t\treturn 'parse error [' + this.pos + ']: ' + message;\n\t}\n\thasLineTerminatorBeforeNext(): boolean {\n\t\treturn false;\n\t}\n}\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\n\tconstructor(private expression: string) {\n\t\tsuper();\n\t}\n\tprivate newToken(type: Token, value?: ExpressionNode): TokenExpression {\n\t\treturn new TokenExpression(type, value);\n\t}\n\tnext(): TokenExpression {\n\t\tif (this.pos >= this.expression.length) {\n\t\t\treturn EOFToken;\n\t\t}\n\t\tthis.last = this.current;\n\t\tif (this.isWhitespace() || this.isComment()) {\n\t\t\treturn this.next();\n\t\t} else if (\n\t\t\tthis.isRadixInteger()\n\t\t\t|| this.isNumber()\n\t\t\t// || this.isRegExp()\n\t\t\t|| this.isString()\n\t\t\t|| this.isTemplateLiteral()\n\t\t\t|| this.isCurlY()\n\t\t\t|| this.isParentheses()\n\t\t\t|| this.isBracket()\n\t\t\t|| this.isComma()\n\t\t\t|| this.isSemicolon()\n\t\t\t|| this.isOperator()\n\t\t\t|| this.isStatement()\n\t\t\t|| this.isProperty()) {\n\t\t\treturn this.current;\n\t\t} else {\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\tprivate isString() {\n\t\tconst quote = this.expression.charAt(this.pos);\n\t\tif (quote === '\\'' || quote === '\"') {\n\t\t\tconst startPos = this.pos;\n\t\t\tlet index = this.expression.indexOf(quote, startPos + 1);\n\t\t\twhile (index >= 0 && this.pos < this.expression.length) {\n\t\t\t\tthis.pos = index + 1;\n\t\t\t\tif (this.expression.charAt(index - 1) !== '\\\\') {\n\t\t\t\t\tconst rawString = this.expression.substring(startPos + 1, index);\n\t\t\t\t\tconst stringNode = new StringLiteral(this.unescape(rawString), quote);\n\t\t\t\t\tthis.current = this.newToken(Token.STRING, stringNode);\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tindex = this.expression.indexOf(quote, index + 1);\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\tconst strings: string[] = [], exprs: string[] = [];\n\t\t\tlet start = this.pos + 1;\n\t\t\tlet i = start;\n\t\t\tfor (; i < this.expression.length; i++) {\n\t\t\t\tif (this.expression[i] === '$' && this.expression[i + 1] === '{') {\n\t\t\t\t\tstrings.push(this.expression.substring(start, i));\n\t\t\t\t\ti += 2;\n\t\t\t\t\tstart = i;\n\t\t\t\t\tlet openCount = 0;\n\t\t\t\t\tfor (; i < this.expression.length; i++) {\n\t\t\t\t\t\tif (this.expression[i] === '$' && this.expression[i + 1] === '{') {\n\t\t\t\t\t\t\t// if (openCount === 0) {\n\t\t\t\t\t\t\t// \tstart = i;\n\t\t\t\t\t\t\t// }\n\t\t\t\t\t\t\topenCount++;\n\t\t\t\t\t\t\ti++;\n\t\t\t\t\t\t} else if (openCount === 0 && this.expression[i] === '}') {\n\t\t\t\t\t\t\texprs.push(this.expression.substring(start, i));\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t} else if (this.expression[i] === '}') {\n\t\t\t\t\t\t\topenCount--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tstart = i + 1;\n\t\t\t\t}\n\t\t\t\telse if (this.expression[i] === '`') {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tstrings.push(this.expression.substring(start, i));\n\t\t\tthis.current = this.newToken(Token.TEMPLATE_LITERALS, new PreTemplateLiteral(strings, exprs));\n\t\t\tthis.pos = i + 1;\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\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.L_PARENTHESES);\n\t\t\tthis.pos++;\n\t\t\treturn true;\n\t\t} else if (char === ')') {\n\t\t\tthis.current = this.newToken(Token.R_PARENTHESES);\n\t\t\tthis.pos++;\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\tprivate isBracket() {\n\t\tconst char = this.expression.charAt(this.pos);\n\t\tif (char === '[') {\n\t\t\tthis.current = this.newToken(Token.L_BRACKETS);\n\t\t\tthis.pos++;\n\t\t\treturn true;\n\t\t} else if (char === ']') {\n\t\t\tthis.current = this.newToken(Token.R_BRACKETS);\n\t\t\tthis.pos++;\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\tprivate isCurlY() {\n\t\tconst char = this.expression.charAt(this.pos);\n\t\tif (char === '{') {\n\t\t\tthis.current = this.newToken(Token.L_CURLY);\n\t\t\tthis.pos++;\n\t\t\treturn true;\n\t\t} else if (char === '}') {\n\t\t\tthis.current = this.newToken(Token.R_CURLY);\n\t\t\tthis.pos++;\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\tprivate isComma() {\n\t\tconst char = this.expression.charAt(this.pos);\n\t\tif (char === ',') {\n\t\t\tthis.current = this.newToken(Token.COMMA);\n\t\t\tthis.pos++;\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tprivate isSemicolon() {\n\t\tconst char = this.expression.charAt(this.pos);\n\t\tif (char === ';') {\n\t\t\tthis.current = this.newToken(Token.SEMICOLON);\n\t\t\tthis.pos++;\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\tprivate isProperty() {\n\t\tlet startPos = this.pos;\n\t\tlet i = startPos;\n\t\tlet hasLetter = false;\n\t\tlet isPrivate = false;\n\t\t// check is private property \n\t\tif (this.expression.charAt(i) === '#') {\n\t\t\tisPrivate = true;\n\t\t\ti++;\n\t\t}\n\t\tfor (; i < this.expression.length; i++) {\n\t\t\tconst char = this.expression.charAt(i);\n\t\t\tif (char.toUpperCase() === char.toLowerCase()) {\n\t\t\t\tif (i === this.pos && (char === '$' || char === '_')) {\n\t\t\t\t\tif (char === '_') {\n\t\t\t\t\t\thasLetter = true;\n\t\t\t\t\t}\n\t\t\t\t\tcontinue;\n\t\t\t\t} else if (i === this.pos || !hasLetter || (char !== '_' && (char < '0' || char > '9'))) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\thasLetter = true;\n\t\t\t}\n\t\t}\n\t\tif (hasLetter) {\n\t\t\tconst prop = this.expression.substring(startPos, i);\n\t\t\tlet node: ExpressionNode;\n\t\t\tswitch (prop) {\n\t\t\t\tcase 'this': this.current = this.newToken(Token.THIS); break;\n\t\t\t\tcase 'null': this.current = this.newToken(Token.NULL_LITERAL); break;\n\t\t\t\tcase 'undefined': this.current = this.newToken(Token.UNDEFINED_LITERAL); break;\n\t\t\t\tcase 'true': this.current = this.newToken(Token.TRUE_LITERAL); break;\n\t\t\t\tcase 'false': this.current = this.newToken(Token.FALSE_LITERAL); break;\n\n\t\t\t\tcase 'globalThis': this.current = this.newToken(Token.IDENTIFIER, GlobalThisNode); break;\n\t\t\t\tcase 'Symbol': this.current = this.newToken(Token.IDENTIFIER, SymbolNode); break;\n\t\t\t\tcase 'of': this.current = this.newToken(Token.IDENTIFIER, OfNode); break;\n\t\t\t\tcase 'as': this.current = this.newToken(Token.IDENTIFIER, AsNode); break;\n\n\t\t\t\tdefault:\n\t\t\t\t\tif (isPrivate) {\n\t\t\t\t\t\tnode = new Identifier(`#${prop}`);\n\t\t\t\t\t\tthis.current = this.newToken(Token.PRIVATE_NAME, node);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnode = new Identifier(prop);\n\t\t\t\t\t\tthis.current = this.newToken(Token.IDENTIFIER, node);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tthis.pos += prop.length;\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\tprivate isWhitespace() {\n\t\tlet result = false;\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\tprivate isComment() {\n\t\tconst char = this.expression.charAt(this.pos);\n\t\tconst nextChar = this.expression.charAt(this.pos + 1);\n\t\tif (char === '/' && nextChar === '*') {\n\t\t\tthis.pos = this.expression.indexOf('*/', this.pos) + 2;\n\t\t\tif (this.pos === 1) {\n\t\t\t\tthis.pos = this.expression.length;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t\tif (char === '/' && nextChar === '/') {\n\t\t\tthis.pos = this.expression.indexOf('\\n', this.pos) + 1;\n\t\t\tif (this.pos === -1) {\n\t\t\t\tthis.pos = this.expression.length;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\tpublic scanRegExpPattern() {\n\t\tconst peek = this.peek()\n\t\tif (peek.isType(Token.DIV) || peek.isType(Token.DIV_ASSIGN)) {\n\t\t\tthis.next();\n\t\t\tlet pattern = peek.isType(Token.DIV_ASSIGN) ? '=' : '';\n\n\t\t\tlet start = this.pos;\n\t\t\tlet currentPos = this.pos;\n\t\t\tcurrentPos = this.expression.indexOf('/', currentPos + 1);\n\t\t\twhile (currentPos !== -1 && this.expression.charAt(currentPos - 1) === '\\\\') {\n\t\t\t\tpattern += this.expression.substring(start, currentPos - 1);\n\t\t\t\tstart = currentPos;\n\t\t\t\tcurrentPos = this.expression.indexOf('/', currentPos + 1);\n\t\t\t}\n\t\t\tif (currentPos === -1) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tpattern += this.expression.substring(start, currentPos);\n\t\t\tcurrentPos++;\n\t\t\tlet flags = '';\n\t\t\tconst remainFlags = TokenStreamImpl.REGEXP_FLAGS.slice();\n\t\t\twhile (true) {\n\t\t\t\tconst nextChar = this.expression.charAt(currentPos);\n\t\t\t\tif (/[\\.\\s]/.test(nextChar)) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tconst nextCharIndex = remainFlags.indexOf(nextChar);\n\t\t\t\tif (nextCharIndex === -1) {\n\t\t\t\t\tif (flags.includes(nextChar)) {\n\t\t\t\t\t\tthrow new Error(this.createError('Invalid regular expression flags'));\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tflags += nextChar;\n\t\t\t\t\tremainFlags.splice(nextCharIndex, 1);\n\t\t\t\t\tcurrentPos++;\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst regexNode = new RegExpLiteral(new RegExp(pattern, flags));\n\t\t\tthis.current = this.newToken(Token.REGEXP_LITERAL, regexNode);\n\t\t\tthis.pos = currentPos;\n\t\t\treturn true;\n\n\t\t}\n\t\treturn false;\n\t}\n\tprivate unescape(v: string) {\n\t\tlet index = v.indexOf('\\\\');\n\t\tif (index < 0) {\n\t\t\treturn v;\n\t\t}\n\n\t\tlet buffer = v.substring(0, index);\n\t\twhile (index >= 0) {\n\t\t\tconst c = v.charAt(++index);\n\t\t\tswitch (c) {\n\t\t\t\tcase '\\'':\n\t\t\t\tcase '\"':\n\t\t\t\tcase '\\\\':\n\t\t\t\tcase '/':\n\t\t\t\t\tbuffer += c;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'b':\n\t\t\t\t\tbuffer += '\\b';\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'f':\n\t\t\t\t\tbuffer += '\\f';\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'n':\n\t\t\t\t\tbuffer += '\\n';\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'r':\n\t\t\t\t\tbuffer += '\\r';\n\t\t\t\t\tbreak;\n\t\t\t\tcase 't':\n\t\t\t\t\tbuffer += '\\t';\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'u': {\n\t\t\t\t\t// interpret the following 4 characters as the hex of the unicode code point\n\t\t\t\t\tlet codePoint = v.substring(index + 1, index + 5);\n\t\t\t\t\tif (!TokenStreamImpl.UnicodePattern.test(codePoint)) {\n\t\t\t\t\t\tthrow new Error(this.createError('Illegal escape sequence: \\\\u' + codePoint));\n\t\t\t\t\t}\n\t\t\t\t\tbuffer += String.fromCharCode(parseInt(codePoint, 16));\n\t\t\t\t\tindex += 4;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'x': {\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 + 1, index + 3);\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\tthrow new Error(this.createError('Illegal escape sequence: \"\\\\' + c + '\"'));\n\t\t\t}\n\t\t\t++index;\n\t\t\tlet backslash = v.indexOf('\\\\', index);\n\t\t\tbuffer += v.substring(index, backslash < 0 ? v.length : backslash);\n\t\t\tindex = backslash;\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 numNode = new NumberLiteral(parseInt(this.expression.substring(startPos, pos), radix));\n\t\t\tthis.current = this.newToken(Token.NUMBER, numNode);\n\t\t\tthis.pos = pos;\n\t\t}\n\t\treturn valid;\n\t}\n\tprivate isNumber() {\n\t\tlet valid = false;\n\t\tlet pos = this.pos;\n\t\tlet startPos = pos;\n\t\tlet resetPos = pos;\n\t\tlet foundDot = false;\n\t\tlet foundDigits = false;\n\t\tlet 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 {\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\tif (this.expression.charAt(pos) === 'n') {\n\t\t\t\tconst bigintNode = new BigIntLiteral(BigInt(this.expression.substring(startPos, pos)));\n\t\t\t\tthis.current = this.newToken(Token.BIGINT, bigintNode);\n\t\t\t\tpos++;\n\t\t\t} else {\n\t\t\t\tconst numNode = new NumberLiteral(parseFloat(this.expression.substring(startPos, pos)));\n\t\t\t\tthis.current = this.newToken(Token.NUMBER, numNode);\n\t\t\t}\n\t\t\tthis.pos = pos;\n\t\t} else {\n\t\t\tthis.pos = resetPos;\n\t\t}\n\t\treturn valid;\n\t}\n\tprivate isOperator() {\n\t\tconst char = this.expression.charAt(this.pos);\n\t\tswitch (char) {\n\t\t\tcase '+':\n\t\t\t\tif (this.expression.charAt(this.pos + 1) === '+') {\n\t\t\t\t\tthis.current = this.newToken(Token.INC);\n\t\t\t\t\tthis.pos += 2;\n\t\t\t\t} else if (this.expression.charAt(this.pos + 1) === '=') {\n\t\t\t\t\tthis.current = this.newToken(Token.ADD_ASSIGN);\n\t\t\t\t\tthis.pos += 2;\n\t\t\t\t} else {\n\t\t\t\t\tthis.current = this.newToken(Token.ADD);\n\t\t\t\t\tthis.pos++;\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\tcase '-':\n\t\t\t\tif (this.expression.charAt(this.pos + 1) === '-') {\n\t\t\t\t\tthis.current = this.newToken(Token.DEC);\n\t\t\t\t\tthis.pos += 2;\n\t\t\t\t} else if (this.expression.charAt(this.pos + 1) === '=') {\n\t\t\t\t\tthis.current = this.newToken(Token.SUB_ASSIGN);\n\t\t\t\t\tthis.pos += 2;\n\t\t\t\t} else {\n\t\t\t\t\tthis.current = this.newToken(Token.SUB);\n\t\t\t\t\tthis.pos++;\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\tcase '=':\n\t\t\t\tif (this.expression.charAt(this.pos + 1) === '=') {\n\t\t\t\t\tif (this.expression.charAt(this.pos + 2) === '=') {\n\t\t\t\t\t\tthis.current = this.newToken(Token.EQ_STRICT);\n\t\t\t\t\t\tthis.pos += 3;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.current = this.newToken(Token.EQ);\n\t\t\t\t\t\tthis.pos += 2;\n\t\t\t\t\t}\n\t\t\t\t} else if (this.expression.charAt(this.pos + 1) === '>') {\n\t\t\t\t\tthis.current = this.newToken(Token.ARROW);\n\t\t\t\t\tthis.pos += 2;\n\t\t\t\t} else {\n\t\t\t\t\tthis.current = this.newToken(Token.ASSIGN);\n\t\t\t\t\tthis.pos++;\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\tcase '*':\n\t\t\t\tif (this.expression.charAt(this.pos + 1) === '*') {\n\t\t\t\t\tif (this.expression.charAt(this.pos + 2) === '=') {\n\t\t\t\t\t\tthis.current = this.newToken(Token.EXP_ASSIGN);\n\t\t\t\t\t\tthis.pos += 3;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.current = this.newToken(Token.EXP);\n\t\t\t\t\t\tthis.pos += 2;\n\t\t\t\t\t}\n\t\t\t\t} else if (this.expression.charAt(this.pos + 1) === '=') {\n\t\t\t\t\tthis.current = this.newToken(Token.MUL_ASSIGN);\n\t\t\t\t\tthis.pos += 2;\n\t\t\t\t} else {\n\t\t\t\t\tthis.current = this.newToken(Token.MUL);\n\t\t\t\t\tthis.pos++;\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\tcase '/':\n\t\t\t\tif (this.expression.charAt(this.pos + 1) === '=') {\n\t\t\t\t\tthis.current = this.newToken(Token.DIV_ASSIGN);\n\t\t\t\t\tthis.pos += 2;\n\t\t\t\t} else {\n\t\t\t\t\tthis.current = this.newToken(Token.DIV);\n\t\t\t\t\tthis.pos++;\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\tcase '%':\n\t\t\t\tif (this.expression.charAt(this.pos + 1) === '%') {\n\t\t\t\t\tif (this.expression.charAt(this.pos + 1) === '=') {\n\t\t\t\t\t\tthis.current = this.newToken(Token.MODULO_ASSIGN);\n\t\t\t\t\t\tthis.pos += 3;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.current = this.newToken(Token.MODULO);\n\t\t\t\t\t\tthis.pos += 2;\n\t\t\t\t\t}\n\t\t\t\t} else if (this.expression.charAt(this.pos + 1) === '=') {\n\t\t\t\t\tthis.current = this.newToken(Token.MOD_ASSIGN);\n\t\t\t\t\tthis.pos += 2;\n\t\t\t\t} else {\n\t\t\t\t\tthis.current = this.newToken(Token.MOD);\n\t\t\t\t\tthis.pos++;\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\tcase '^':\n\t\t\t\tif (this.expression.charAt(this.pos + 1) === '=') {\n\t\t\t\t\tthis.current = this.newToken(Token.BIT_XOR_ASSIGN);\n\t\t\t\t\tthis.pos += 2;\n\t\t\t\t} else {\n\t\t\t\t\tthis.current = this.newToken(Token.BIT_XOR);\n\t\t\t\t\tthis.pos++;\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\tcase '>':\n\t\t\t\tif (this.expression.charAt(this.pos + 1) === '>') {\n\t\t\t\t\tif (this.expression.charAt(this.pos + 2) === '>') {\n\t\t\t\t\t\tif (this.expression.charAt(this.pos + 3) === '=') {\n\t\t\t\t\t\t\tthis.current = this.newToken(Token.SHR_ASSIGN);\n\t\t\t\t\t\t\tthis.pos += 4;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.current = this.newToken(Token.SHR);\n\t\t\t\t\t\t\tthis.pos += 3;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (this.expression.charAt(this.pos + 2) === '=') {\n\t\t\t\t\t\tthis.current = this.newToken(Token.SAR_ASSIGN);\n\t\t\t\t\t\tthis.pos += 3;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.current = this.newToken(Token.SAR);\n\t\t\t\t\t\tthis.pos += 2;\n\t\t\t\t\t}\n\t\t\t\t} else if (this.expression.charAt(this.pos + 1) === '=') {\n\t\t\t\t\tthis.current = this.newToken(Token.GTE);\n\t\t\t\t\tthis.pos += 2;\n\t\t\t\t} else if (this.expression.charAt(this.pos + 1) === '?') {\n\t\t\t\t\tif (this.expression.charAt(this.pos + 2) === '=') {\n\t\t\t\t\t\tthis.current = this.newToken(Token.LARGER_ASSIGN);\n\t\t\t\t\t\tthis.pos += 3;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.current = this.newToken(Token.LARGER);\n\t\t\t\t\t\tthis.pos += 2;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tthis.current = this.newToken(Token.GT);\n\t\t\t\t\tthis.pos++;\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\tcase '<':\n\t\t\t\tif (this.expression.charAt(this.pos + 1) === '<') {\n\t\t\t\t\tif (this.expression.charAt(this.pos + 2) === '=') {\n\t\t\t\t\t\tthis.current = this.newToken(Token.SHL_ASSIGN);\n\t\t\t\t\t\tthis.pos += 3;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.current = this.newToken(Token.SHL);\n\t\t\t\t\t\tthis.pos += 2;\n\t\t\t\t\t}\n\t\t\t\t} else if (this.expression.charAt(this.pos + 1) === '=') {\n\t\t\t\t\tif (this.expression.charAt(this.pos + 2) === '>') {\n\t\t\t\t\t\tthis.current = this.newToken(Token.SPACESHIP);\n\t\t\t\t\t\tthis.pos += 3;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.current = this.newToken(Token.LTE);\n\t\t\t\t\t\tthis.pos += 2;\n\t\t\t\t\t}\n\t\t\t\t} else if (this.expression.charAt(this.pos + 1) === '?') {\n\t\t\t\t\tif (this.expression.charAt(this.pos + 2) === '=') {\n\t\t\t\t\t\tthis.current = this.newToken(Token.SMALLER_ASSIGN);\n\t\t\t\t\t\tthis.pos += 3;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.current = this.newToken(Token.SMALLER);\n\t\t\t\t\t\tthis.pos += 2;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tthis.current = this.newToken(Token.LT);\n\t\t\t\t\tthis.pos++;\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\tcase '|':\n\t\t\t\tif (this.expression.charAt(this.pos + 1) === '|') {\n\t\t\t\t\tif (this.expression.charAt(this.pos + 2) === '=') {\n\t\t\t\t\t\tthis.current = this.newToken(Token.OR_ASSIGN);\n\t\t\t\t\t\tthis.pos += 3;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.current = this.newToken(Token.OR);\n\t\t\t\t\t\tthis.pos += 2;\n\t\t\t\t\t}\n\t\t\t\t} else if (this.expression.charAt(this.pos + 1) === '=') {\n\t\t\t\t\tthis.current = this.newToken(Token.BIT_OR_ASSIGN);\n\t\t\t\t\tthis.pos += 2;\n\t\t\t\t} else if (this.expression.charAt(this.pos + 1) === '>') {\n\t\t\t\t\tthis.current = this.newToken(Token.PIPELINE);\n\t\t\t\t\tthis.pos += 2;\n\t\t\t\t} else {\n\t\t\t\t\tthis.current = this.newToken(Token.BIT_OR);\n\t\t\t\t\tthis.pos++;\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\tcase '&':\n\t\t\t\tif (this.expression.charAt(this.pos + 1) === '&') {\n\t\t\t\t\tif (this.expression.charAt(this.pos + 2) === '=') {\n\t\t\t\t\t\tthis.current = this.newToken(Token.AND_ASSIGN);\n\t\t\t\t\t\tthis.pos += 3;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.current = this.newToken(Token.AND);\n\t\t\t\t\t\tthis.pos += 2;\n\t\t\t\t\t}\n\t\t\t\t} else if (this.expression.charAt(this.pos + 1) === '=') {\n\t\t\t\t\tthis.current = this.newToken(Token.BIT_AND_ASSIGN);\n\t\t\t\t\tthis.pos += 2;\n\t\t\t\t} else {\n\t\t\t\t\tthis.current = this.newToken(Token.BIT_AND);\n\t\t\t\t\tthis.pos++;\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\tcase '?':\n\t\t\t\tif (this.expression.charAt(this.pos + 1) === '?') {\n\t\t\t\t\tif (this.expression.charAt(this.pos + 2) === '=') {\n\t\t\t\t\t\tthis.current = this.newToken(Token.NULLISH_ASSIGN);\n\t\t\t\t\t\tthis.pos += 3;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.current = this.newToken(Token.NULLISH);\n\t\t\t\t\t\tthis.pos += 2;\n\t\t\t\t\t}\n\t\t\t\t} else if (this.expression.substring(this.pos + 1, this.pos + 3) == '::') {\n\t\t\t\t\tthis.current = this.newToken(Token.QUESTION_BIND);\n\t\t\t\t\tthis.pos += 3;\n\t\t\t\t} else if (this.expression.charAt(this.pos + 1) === '.') {\n\t\t\t\t\tthis.current = this.newToken(Token.QUESTION_PERIOD);\n\t\t\t\t\tthis.pos += 2;\n\t\t\t\t} else {\n\t\t\t\t\tthis.current = this.newToken(Token.CONDITIONAL);\n\t\t\t\t\tthis.pos++;\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\tcase '!':\n\t\t\t\tif (this.expression.charAt(this.pos + 1) === '=') {\n\t\t\t\t\tif (this.expression.charAt(this.pos + 2) === '=') {\n\t\t\t\t\t\tthis.current = this.newToken(Token.NE_STRICT);\n\t\t\t\t\t\tthis.pos += 3;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.current = this.newToken(Token.NE);\n\t\t\t\t\t\tthis.pos += 2;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tthis.current = this.newToken(Token.NOT);\n\t\t\t\t\tthis.pos++;\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\tcase '.':\n\t\t\t\tif (/\\.\\.\\./.test(this.expression.substring(this.pos, this.pos + 3))) {\n\t\t\t\t\tthis.current = this.newToken(Token.ELLIPSIS);\n\t\t\t\t\tthis.pos += 3;\n\t\t\t\t\treturn true;\n\t\t\t\t} else {\n\t\t\t\t\tthis.current = this.newToken(Token.PERIOD);\n\t\t\t\t\tthis.pos++;\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t// no break\n\t\t\tcase ':':\n\t\t\t\tif (this.expression.charAt(this.pos + 1) === ':') {\n\t\t\t\t\tthis.current = this.newToken(Token.QUESTION_BIND);\n\t\t\t\t\tthis.pos += 2;\n\t\t\t\t} else {\n\t\t\t\t\tthis.current = this.newToken(Token.COLON);\n\t\t\t\t\tthis.pos++;\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\tcase '~':\n\t\t\t\tthis.current = this.newToken(Token.BIT_NOT);\n\t\t\t\tthis.pos++;\n\t\t\t\treturn true;\n\t\t\tcase 'a':\n\t\t\t\tif (/async\\s/.test(this.expression.substring(this.pos, this.pos + 6))) {\n\t\t\t\t\tthis.current = this.newToken(Token.ASYNC);\n\t\t\t\t\tthis.pos += 5;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tif (/await\\s/.test(this.expression.substring(this.pos, this.pos + 6))) {\n\t\t\t\t\tthis.current = this.newToken(Token.AWAIT);\n\t\t\t\t\tthis.pos += 5;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\tcase 'i':\t\t\t// in, instanceof\n\t\t\t\tif (this.expression.charAt(this.pos + 1) === 'n') {\n\t\t\t\t\tif (/instanceof\\s/.test(this.expression.substring(this.pos, this.pos + 11))) {\n\t\t\t\t\t\tthis.current = this.newToken(Token.INSTANCEOF);\n\t\t\t\t\t\tthis.pos += 11;\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t} else if (/\\s/.test(this.expression.charAt(this.pos + 2))) {\n\t\t\t\t\t\tthis.current = this.newToken(Token.IN);\n\t\t\t\t\t\tthis.pos += 3;\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\tcase 't':\t\t\t// typeof\n\t\t\t\tif (/typeof\\s/.test(this.expression.substring(this.pos, this.pos + 7))) {\n\t\t\t\t\tthis.current = this.newToken(Token.TYPEOF);\n\t\t\t\t\tthis.pos += 7;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\tcase 'v':\t\t\t// void\n\t\t\t\tif (/void\\s/.test(this.expression.substring(this.pos, this.pos + 5))) {\n\t\t\t\t\tthis.current = this.newToken(Token.VOID);\n\t\t\t\t\tthis.pos += 5;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\tcase 'd':\t\t\t// delete\n\t\t\t\tif (/delete\\s/.test(this.expression.substring(this.pos, this.pos + 7))) {\n\t\t\t\t\tthis.current = this.newToken(Token.DELETE);\n\t\t\t\t\tthis.pos += 7;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\tcase 'n':\t\t\t// new\n\t\t\t\tif (/new\\s/.test(this.expression.substring(this.pos, this.pos + 4))) {\n\t\t\t\t\tthis.current = this.newToken(Token.NEW);\n\t\t\t\t\tthis.pos += 4;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\tcase 'n':\t\t\t// new\n\t\t\t\tif (/new\\s/.test(this.expression.substring(this.pos, this.pos + 4))) {\n\t\t\t\t\tthis.current = this.newToken(Token.NEW);\n\t\t\t\t\tthis.pos += 4;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\tcase 'y':\t\t\t// void\n\t\t\t\tif (/yield\\s/.test(this.expression.substring(this.pos, this.pos + 6))) {\n\t\t\t\t\tthis.current = this.newToken(Token.YIELD);\n\t\t\t\t\tthis.pos += 6;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\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, BreakStatement.BREAK_INSTANCE);\n\t\t\t\t\tthis.pos += 5;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\tcase 'c':\n\t\t\t\tif (/case[\\s~!+-\\/\\('\"`]/.test(this.expression.substring(this.pos, this.pos + 5))) {\n\t\t\t\t\tthis.current = this.newToken(Token.CASE);\n\t\t\t\t\tthis.pos += 4;\n\t\t\t\t\treturn true;\n\t\t\t\t} else if (/const\\s/.test(this.expression.substring(this.pos, this.pos + 6))) {\n\t\t\t\t\tthis.current = this.newToken(Token.CONST);\n\t\t\t\t\tthis.pos += 6;\n\t\t\t\t\treturn true;\n\t\t\t\t} else if (/catch[\\s\\{\\(]/.test(this.expression.substring(this.pos, this.pos + 6))) {\n\t\t\t\t\tthis.current = this.newToken(Token.CATCH);\n\t\t\t\t\tthis.pos += 5;\n\t\t\t\t\treturn true;\n\t\t\t\t} else if (/class\\s/.test(this.expression.substring(this.pos, this.pos + 6))) {\n\t\t\t\t\tthis.current = this.newToken(Token.CLASS);\n\t\t\t\t\tthis.pos += 6;\n\t\t\t\t\treturn true;\n\t\t\t\t} else if (/continue[\\s;]/.test(this.expression.substring(this.pos, this.pos + 9))) {\n\t\t\t\t\tthis.current = this.newToken(Token.CONTINUE, ContinueStatement.CONTINUE_INSTANCE);\n\t\t\t\t\tthis.pos += 8;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\tcase 'd':\n\t\t\t\tif (/^(do\\s?\\{)/.test(this.expression.substring(this.pos, this.pos + 4))) {\n\t\t\t\t\tthis.current = this.newToken(Token.DO);\n\t\t\t\t\tthis.pos += 2;\n\t\t\t\t\treturn true;\n\t\t\t\t} else if (/^(default\\s?:)/.test(this.expression.substring(this.pos, this.pos + 9))) {\n\t\t\t\t\tthis.current = this.newToken(Token.DEFAULT);\n\t\t\t\t\tthis.pos += 7;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\tcase 'e':\n\t\t\t\tif (/else[\\s\\{]?/.test(this.expression.substring(this.pos, this.pos + 5))) {\n\t\t\t\t\tthis.current = this.newToken(Token.ELSE);\n\t\t\t\t\tthis.pos += 4;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tif (/export\\s/.test(this.expression.substring(this.pos, this.pos + 7))) {\n\t\t\t\t\tthis.current = this.newToken(Token.EXPORT);\n\t\t\t\t\tthis.pos += 7;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tif (/extends\\s/.test(this.expression.substring(this.pos, this.pos + 8))) {\n\t\t\t\t\tthis.current = this.newToken(Token.EXTENDS);\n\t\t\t\t\tthis.pos += 8;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\tcase 'g':\n\t\t\t\tif (/get\\s/.test(this.expression.substring(this.pos, this.pos + 4))) {\n\t\t\t\t\tthis.current = this.newToken(Token.GET);\n\t\t\t\t\tthis.pos += 4;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\tcase 'f':\n\t\t\t\tif (/for[\\s\\(]/.test(this.expression.substring(this.pos, this.pos + 4))) {\n\t\t\t\t\tthis.current = this.newToken(Token.FOR);\n\t\t\t\t\tthis.pos += 3;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tif (/finally[\\s\\{]/.test(this.expression.substring(this.pos, this.pos + 8))) {\n\t\t\t\t\tthis.current = this.newToken(Token.FINALLY);\n\t\t\t\t\tthis.pos += 7;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tif (/function[\\s\\*\\(]/.test(this.expression.substring(this.pos, this.pos + 9))) {\n\t\t\t\t\tthis.current = this.newToken(Token.FUNCTION);\n\t\t\t\t\tthis.pos += 8;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\tcase 'i':\n\t\t\t\tif (/if[\\s\\(]?/.test(this.expression.substring(this.pos, this.pos + 3))) {\n\t\t\t\t\tthis.current = this.newToken(Token.IF);\n\t\t\t\t\tthis.pos += 2;\n\t\t\t\t\treturn true;\n\t\t\t\t} else if (/in\\s/.test(this.expression.substring(this.pos, this.pos + 3))) {\n\t\t\t\t\tthis.current = this.newToken(Token.IN);\n\t\t\t\t\tthis.pos += 3;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\telse if (/import\\s/.test(this.expression.substring(this.pos, this.pos + 7))) {\n\t\t\t\t\tthis.current = this.newToken(Token.IMPORT);\n\t\t\t\t\tthis.pos += 7;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\tcase 'l':\n\t\t\t\tif (/let\\s/.test(this.expression.substring(this.pos, this.pos + 4))) {\n\t\t\t\t\tthis.current = this.newToken(Token.LET);\n\t\t\t\t\tthis.pos += 4;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\tcase 't':\n\t\t\t\tif (/try[\\s\\{]/.test(this.expression.substring(this.pos, this.pos + 4))) {\n\t\t\t\t\tthis.current = this.newToken(Token.TRY);\n\t\t\t\t\tthis.pos += 3;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tif (/throw\\s/.test(this.expression.substring(this.pos, this.pos + 6))) {\n\t\t\t\t\tthis.current = this.newToken(Token.THROW);\n\t\t\t\t\tthis.pos += 6;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\tcase 'r':\n\t\t\t\tif (/return[\\s~!+-\\/\\('\"`]/.test(this.expression.substring(this.pos, this.pos + 7))) {\n\t\t\t\t\tthis.current = this.newToken(Token.RETURN);\n\t\t\t\t\tthis.pos += 6;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t// case 'of':\n\t\t\t// \tif (/of\\s/.test(this.expression.substring(this.pos, this.pos + 3))) {\n\t\t\t// \t\tthis.current = this.newToken(Token.OF);\n\t\t\t// \t\tthis.pos += 3;\n\t\t\t// \t\treturn true;\n\t\t\t// \t}\n\t\t\t// \treturn false;\n\t\t\tcase 's':\n\t\t\t\tif (/switch[\\s\\(]?/.test(this.expression.substring(this.pos, this.pos + 7))) {\n\t\t\t\t\tthis.current = this.newToken(Token.SWITCH);\n\t\t\t\t\tthis.pos += 6;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tif (/static\\s/.test(this.expression.substring(this.pos, this.pos + 7))) {\n\t\t\t\t\tthis.current = this.newToken(Token.STATIC);\n\t\t\t\t\tthis.pos += 7;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tif (/set\\s/.test(this.expression.substring(this.pos, this.pos + 4))) {\n\t\t\t\t\tthis.current = this.newToken(Token.SET);\n\t\t\t\t\tthis.pos += 4;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tif (/super[\\.\\(]?/.test(this.expression.substring(this.pos, this.pos + 6))) {\n\t\t\t\t\tthis.current = this.newToken(Token.SUPER);\n\t\t\t\t\tthis.pos += 5;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\tcase 'w':\n\t\t\t\tif (/while[\\s\\(]?/.test(this.expression.substring(this.pos, this.pos + 6))) {\n\t\t\t\t\tthis.current = this.newToken(Token.WHILE);\n\t\t\t\t\tthis.pos += 5;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\tcase 'v':\n\t\t\t\tif (/var\\s/.test(this.expression.substring(this.pos, this.pos + 4))) {\n\t\t\t\t\tthis.current = this.newToken(Token.VAR);\n\t\t\t\t\tthis.pos += 4;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t}\n\tprotected getCoordinates() {\n\t\tlet line = 0, column, newline = -1;\n\t\tdo {\n\t\t\tline++;\n\t\t\tcolumn = this.pos - newline;\n\t\t\tnewline = this.expression.indexOf('\\n', newline + 1);\n\t\t} while (newline >= 0 && newline < this.pos);\n\t\treturn { line, column };\n\t}\n\tpublic createError(message: String): string {\n\t\tlet coords = this.getCoordinates();\n\t\treturn `@[line: ${coords.line}, column: ${coords.column}] current token: ${JSON.stringify(this.current)}\\n\\t==> ${message}`;\n\t}\n}\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 {\n\tBigIntLiteral, GlobalThisNode, NumberLiteral, OfNode, Identifier,\n\tRegExpLiteral, StringLiteral, SymbolNode, AsNode\n} from '../api/definition/values.js';\nimport { BreakStatement, ContinueStatement } from '../api/statement/control/terminate.js';\n\nconst EOFToken = Object.freeze(new TokenExpression(Token.EOS)) as TokenExpression;\n\nexport interface PreTemplateLiteral extends ExpressionNode { };\nexport class PreTemplateLiteral {\n\tconstructor(public strings: string[], public expressions: string[]) { }\n}\n\nexport abstract class TokenStream {\n\tpublic static getTokenStream(source: string | TokenExpression[]): TokenStream {\n\t\tif (Array.isArray(source)) {\n\t\t\treturn new TokenStreamer(source);\n\t\t}\n\t\telse if (typeof source === 'string') {\n\t\t\treturn new TokenStreamImpl(source);\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\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): TokenStream {\n\t\texpect ??= Token.EOS;\n\t\tif (Token.isClosePair(expect)) {\n\t\t\treturn this.getPairStreamer(Token.openOf(expect), expect);\n\t\t}\n\t\treturn this.getStreamerTo(expect);\n\t}\n\tprivate getStreamerTo(expect: Token): TokenStream {\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 === 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\treturn new TokenStreamer(tokens);\n\t}\n\tprivate getPairStreamer(open: Token, close: Token): TokenStream {\n\t\t// check pair\n\t\tlet count = 0;\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 === 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\tbreak;\n\t\t\t\t}\n\t\t\t\telse if (count > 0) {\n\t\t\t\t\tcount--;\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\treturn new TokenStreamer(tokens);\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 createError(message: String): string;\n}\n\nexport class TokenStreamer extends TokenStream {\n\tconstructor(private tokens: TokenExpression[]) {\n\t\tsuper();\n\t}\n\tnext(): TokenExpression {\n\t\tif (this.pos === this.tokens.length) {\n\t\t\treturn EOFToken;\n\t\t}\n\t\tthis.last = this.current;\n\t\treturn this.current = this.tokens[this.pos++];\n\t}\n\tcreateError(message: String): string {\n\t\treturn 'parse error [' + this.pos + ']: ' + message;\n\t}\n\thasLineTerminatorBeforeNext(): boolean {\n\t\treturn false;\n\t}\n}\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\n\tconstructor(private expression: string) {\n\t\tsuper();\n\t}\n\tprivate newToken(type: Token, value?: ExpressionNode): TokenExpression {\n\t\treturn new TokenExpression(type, value);\n\t}\n\tnext(): TokenExpression {\n\t\tif (this.pos >= this.expression.length) {\n\t\t\treturn EOFToken;\n\t\t}\n\t\tthis.last = this.current;\n\t\tif (this.isWhitespace() || this.isComment()) {\n\t\t\treturn this.next();\n\t\t} else if (\n\t\t\tthis.isRadixInteger()\n\t\t\t|| this.isNumber()\n\t\t\t// || this.isRegExp()\n\t\t\t|| this.isString()\n\t\t\t|| this.isTemplateLiteral()\n\t\t\t|| this.isCurlY()\n\t\t\t|| this.isParentheses()\n\t\t\t|| this.isBracket()\n\t\t\t|| this.isComma()\n\t\t\t|| this.isSemicolon()\n\t\t\t|| this.isOperator()\n\t\t\t|| this.isStatement()\n\t\t\t|| this.isProperty()) {\n\t\t\treturn this.current;\n\t\t} else {\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\tprivate isString() {\n\t\tconst quote = this.expression.charAt(this.pos);\n\t\tif (quote === '\\'' || quote === '\"') {\n\t\t\tconst startPos = this.pos;\n\t\t\tlet index = this.expression.indexOf(quote, startPos + 1);\n\t\t\twhile (index >= 0 && this.pos < this.expression.length) {\n\t\t\t\tthis.pos = index + 1;\n\t\t\t\tif (this.expression.charAt(index - 1) !== '\\\\') {\n\t\t\t\t\tconst rawString = this.expression.substring(startPos + 1, index);\n\t\t\t\t\tconst stringNode = new StringLiteral(this.unescape(rawString), quote);\n\t\t\t\t\tthis.current = this.newToken(Token.STRING, stringNode);\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tindex = this.expression.indexOf(quote, index + 1);\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\tconst strings: string[] = [], exprs: string[] = [];\n\t\t\tlet start = this.pos + 1;\n\t\t\tlet i = start;\n\t\t\tfor (; i < this.expression.length; i++) {\n\t\t\t\tif (this.expression[i] === '$' && this.expression[i + 1] === '{') {\n\t\t\t\t\tstrings.push(this.expression.substring(start, i));\n\t\t\t\t\ti += 2;\n\t\t\t\t\tstart = i;\n\t\t\t\t\tlet openCount = 0;\n\t\t\t\t\tfor (; i < this.expression.length; i++) {\n\t\t\t\t\t\tif (this.expression[i] === '$' && this.expression[i + 1] === '{') {\n\t\t\t\t\t\t\t// if (openCount === 0) {\n\t\t\t\t\t\t\t// \tstart = i;\n\t\t\t\t\t\t\t// }\n\t\t\t\t\t\t\topenCount++;\n\t\t\t\t\t\t\ti++;\n\t\t\t\t\t\t} else if (openCount === 0 && this.expression[i] === '}') {\n\t\t\t\t\t\t\texprs.push(this.expression.substring(start, i));\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t} else if (this.expression[i] === '}') {\n\t\t\t\t\t\t\topenCount--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tstart = i + 1;\n\t\t\t\t}\n\t\t\t\telse if (this.expression[i] === '`') {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tstrings.push(this.expression.substring(start, i));\n\t\t\tthis.current = this.newToken(Token.TEMPLATE_LITERALS, new PreTemplateLiteral(strings, exprs));\n\t\t\tthis.pos = i + 1;\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\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.L_PARENTHESES);\n\t\t\tthis.pos++;\n\t\t\treturn true;\n\t\t} else if (char === ')') {\n\t\t\tthis.current = this.newToken(Token.R_PARENTHESES);\n\t\t\tthis.pos++;\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\tprivate isBracket() {\n\t\tconst char = this.expression.charAt(this.pos);\n\t\tif (char === '[') {\n\t\t\tthis.current = this.newToken(Token.L_BRACKETS);\n\t\t\tthis.pos++;\n\t\t\treturn true;\n\t\t} else if (char === ']') {\n\t\t\tthis.current = this.newToken(Token.R_BRACKETS);\n\t\t\tthis.pos++;\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\tprivate isCurlY() {\n\t\tconst char = this.expression.charAt(this.pos);\n\t\tif (char === '{') {\n\t\t\tthis.current = this.newToken(Token.L_CURLY);\n\t\t\tthis.pos++;\n\t\t\treturn true;\n\t\t} else if (char === '}') {\n\t\t\tthis.current = this.newToken(Token.R_CURLY);\n\t\t\tthis.pos++;\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\tprivate isComma() {\n\t\tconst char = this.expression.charAt(this.pos);\n\t\tif (char === ',') {\n\t\t\tthis.current = this.newToken(Token.COMMA);\n\t\t\tthis.pos++;\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tprivate isSemicolon() {\n\t\tconst char = this.expression.charAt(this.pos);\n\t\tif (char === ';') {\n\t\t\tthis.current = this.newToken(Token.SEMICOLON);\n\t\t\tthis.pos++;\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\tprivate isProperty() {\n\t\tlet startPos = this.pos;\n\t\tlet i = startPos;\n\t\tlet hasLetter = false;\n\t\tlet isPrivate = false;\n\t\t// check is private property \n\t\tif (this.expression.charAt(i) === '#') {\n\t\t\tisPrivate = true;\n\t\t\ti++;\n\t\t}\n\t\tfor (; i < this.expression.length; i++) {\n\t\t\tconst char = this.expression.charAt(i);\n\t\t\tif (char.toUpperCase() === char.toLowerCase()) {\n\t\t\t\tif (i === this.pos && (char === '$' || char === '_')) {\n\t\t\t\t\tif (char === '_') {\n\t\t\t\t\t\thasLetter = true;\n\t\t\t\t\t}\n\t\t\t\t\tcontinue;\n\t\t\t\t} else if (i === this.pos || !hasLetter || (char !== '_' && (char < '0' || char > '9'))) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\thasLetter = true;\n\t\t\t}\n\t\t}\n\t\tif (hasLetter) {\n\t\t\tconst prop = this.expression.substring(startPos, i);\n\t\t\tlet node: ExpressionNode;\n\t\t\tswitch (prop) {\n\t\t\t\tcase 'this': this.current = this.newToken(Token.THIS); break;\n\t\t\t\tcase 'null': this.current = this.newToken(Token.NULL_LITERAL); break;\n\t\t\t\tcase 'undefined': this.current = this.newToken(Token.UNDEFINED_LITERAL); break;\n\t\t\t\tcase 'true': this.current = this.newToken(Token.TRUE_LITERAL); break;\n\t\t\t\tcase 'false': this.current = this.newToken(Token.FALSE_LITERAL); break;\n\n\t\t\t\tcase 'globalThis': this.current = this.newToken(Token.IDENTIFIER, GlobalThisNode); break;\n\t\t\t\tcase 'Symbol': this.current = this.newToken(Token.IDENTIFIER, SymbolNode); break;\n\t\t\t\tcase 'of': this.current = this.newToken(Token.IDENTIFIER, OfNode); break;\n\t\t\t\tcase 'as': this.current = this.newToken(Token.IDENTIFIER, AsNode); break;\n\n\t\t\t\tdefault:\n\t\t\t\t\tif (isPrivate) {\n\t\t\t\t\t\tnode = new Identifier(`#${prop}`);\n\t\t\t\t\t\tthis.current = this.newToken(Token.PRIVATE_NAME, node);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnode = new Identifier(prop);\n\t\t\t\t\t\tthis.current = this.newToken(Token.IDENTIFIER, node);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tthis.pos += prop.length;\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\tprivate isWhitespace() {\n\t\tlet result = false;\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\tprivate isComment() {\n\t\tconst char = this.expression.charAt(this.pos);\n\t\tconst nextChar = this.expression.charAt(this.pos + 1);\n\t\tif (char === '/' && nextChar === '*') {\n\t\t\tthis.pos = this.expression.indexOf('*/', this.pos) + 2;\n\t\t\tif (this.pos === 1) {\n\t\t\t\tthis.pos = this.expression.length;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t\tif (char === '/' && nextChar === '/') {\n\t\t\tthis.pos = this.expression.indexOf('\\n', this.pos) + 1;\n\t\t\tif (this.pos === -1) {\n\t\t\t\tthis.pos = this.expression.length;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\tpublic scanRegExpPattern() {\n\t\tconst peek = this.peek()\n\t\tif (peek.isType(Token.DIV) || peek.isType(Token.DIV_ASSIGN)) {\n\t\t\tthis.next();\n\t\t\tlet pattern = peek.isType(Token.DIV_ASSIGN) ? '=' : '';\n\n\t\t\tlet start = this.pos;\n\t\t\tlet currentPos = this.pos;\n\t\t\tcurrentPos = this.expression.indexOf('/', currentPos + 1);\n\t\t\twhile (currentPos !== -1 && this.expression.charAt(currentPos - 1) === '\\\\') {\n\t\t\t\tpattern += this.expression.substring(start, currentPos - 1);\n\t\t\t\tstart = currentPos;\n\t\t\t\tcurrentPos = this.expression.indexOf('/', currentPos + 1);\n\t\t\t}\n\t\t\tif (currentPos === -1) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tpattern += this.expression.substring(start, currentPos);\n\t\t\tcurrentPos++;\n\t\t\tlet flags = '';\n\t\t\tconst remainFlags = TokenStreamImpl.REGEXP_FLAGS.slice();\n\t\t\twhile (true) {\n\t\t\t\tconst nextChar = this.expression.charAt(currentPos);\n\t\t\t\tif (/[\\.\\s]/.test(nextChar)) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tconst nextCharIndex = remainFlags.indexOf(nextChar);\n\t\t\t\tif (nextCharIndex === -1) {\n\t\t\t\t\tif (flags.includes(nextChar)) {\n\t\t\t\t\t\tthrow new Error(this.createError('Invalid regular expression flags'));\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tflags += nextChar;\n\t\t\t\t\tremainFlags.splice(nextCharIndex, 1);\n\t\t\t\t\tcurrentPos++;\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst regexNode = new RegExpLiteral(new RegExp(pattern, flags));\n\t\t\tthis.current = this.newToken(Token.REGEXP_LITERAL, regexNode);\n\t\t\tthis.pos = currentPos;\n\t\t\treturn true;\n\n\t\t}\n\t\treturn false;\n\t}\n\tprivate unescape(v: string) {\n\t\tlet index = v.indexOf('\\\\');\n\t\tif (index < 0) {\n\t\t\treturn v;\n\t\t}\n\n\t\tlet buffer = v.substring(0, index);\n\t\twhile (index >= 0) {\n\t\t\tconst c = v.charAt(++index);\n\t\t\tswitch (c) {\n\t\t\t\tcase '\\'':\n\t\t\t\tcase '\"':\n\t\t\t\tcase '\\\\':\n\t\t\t\tcase '/':\n\t\t\t\t\tbuffer += c;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'b':\n\t\t\t\t\tbuffer += '\\b';\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'f':\n\t\t\t\t\tbuffer += '\\f';\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'n':\n\t\t\t\t\tbuffer += '\\n';\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'r':\n\t\t\t\t\tbuffer += '\\r';\n\t\t\t\t\tbreak;\n\t\t\t\tcase 't':\n\t\t\t\t\tbuffer += '\\t';\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'u': {\n\t\t\t\t\t// interpret the following 4 characters as the hex of the unicode code point\n\t\t\t\t\tlet codePoint = v.substring(index + 1, index + 5);\n\t\t\t\t\tif (!TokenStreamImpl.UnicodePattern.test(codePoint)) {\n\t\t\t\t\t\tthrow new Error(this.createError('Illegal escape sequence: \\\\u' + codePoint));\n\t\t\t\t\t}\n\t\t\t\t\tbuffer += String.fromCharCode(parseInt(codePoint, 16));\n\t\t\t\t\tindex += 4;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'x': {\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 + 1, index + 3);\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\tthrow new Error(this.createError('Illegal escape sequence: \"\\\\' + c + '\"'));\n\t\t\t}\n\t\t\t++index;\n\t\t\tlet backslash = v.indexOf('\\\\', index);\n\t\t\tbuffer += v.substring(index, backslash < 0 ? v.length : backslash);\n\t\t\tindex = backslash;\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 numNode = new NumberLiteral(parseInt(this.expression.substring(startPos, pos), radix));\n\t\t\tthis.current = this.newToken(Token.NUMBER, numNode);\n\t\t\tthis.pos = pos;\n\t\t}\n\t\treturn valid;\n\t}\n\tprivate isNumber() {\n\t\tlet valid = false;\n\t\tlet pos = this.pos;\n\t\tlet startPos = pos;\n\t\tlet resetPos = pos;\n\t\tlet foundDot = false;\n\t\tlet foundDigits = false;\n\t\tlet 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 {\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\tif (this.expression.charAt(pos) === 'n') {\n\t\t\t\tconst bigintNode = new BigIntLiteral(BigInt(this.expression.substring(startPos, pos)));\n\t\t\t\tthis.current = this.newToken(Token.BIGINT, bigintNode);\n\t\t\t\tpos++;\n\t\t\t} else {\n\t\t\t\tconst numNode = new NumberLiteral(parseFloat(this.expression.substring(startPos, pos)));\n\t\t\t\tthis.current = this.newToken(Token.NUMBER, numNode);\n\t\t\t}\n\t\t\tthis.pos = pos;\n\t\t} else {\n\t\t\tthis.pos = resetPos;\n\t\t}\n\t\treturn valid;\n\t}\n\tprivate isOperator() {\n\t\tconst char = this.expression.charAt(this.pos);\n\t\tswitch (char) {\n\t\t\tcase '+':\n\t\t\t\tif (this.expression.charAt(this.pos + 1) === '+') {\n\t\t\t\t\tthis.current = this.newToken(Token.INC);\n\t\t\t\t\tthis.pos += 2;\n\t\t\t\t} else if (this.expression.charAt(this.pos + 1) === '=') {\n\t\t\t\t\tthis.current = this.newToken(Token.ADD_ASSIGN);\n\t\t\t\t\tthis.pos += 2;\n\t\t\t\t} else {\n\t\t\t\t\tthis.current = this.newToken(Token.ADD);\n\t\t\t\t\tthis.pos++;\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\tcase '-':\n\t\t\t\tif (this.expression.charAt(this.pos + 1) === '-') {\n\t\t\t\t\tthis.current = this.newToken(Token.DEC);\n\t\t\t\t\tthis.pos += 2;\n\t\t\t\t} else if (this.expression.charAt(this.pos + 1) === '=') {\n\t\t\t\t\tthis.current = this.newToken(Token.SUB_ASSIGN);\n\t\t\t\t\tthis.pos += 2;\n\t\t\t\t} else {\n\t\t\t\t\tthis.current = this.newToken(Token.SUB);\n\t\t\t\t\tthis.pos++;\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\tcase '=':\n\t\t\t\tif (this.expression.charAt(this.pos + 1) === '=') {\n\t\t\t\t\tif (this.expression.charAt(this.pos + 2) === '=') {\n\t\t\t\t\t\tthis.current = this.newToken(Token.EQ_STRICT);\n\t\t\t\t\t\tthis.pos += 3;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.current = this.newToken(Token.EQ);\n\t\t\t\t\t\tthis.pos += 2;\n\t\t\t\t\t}\n\t\t\t\t} else if (this.expression.charAt(this.pos + 1) === '>') {\n\t\t\t\t\tthis.current = this.newToken(Token.ARROW);\n\t\t\t\t\tthis.pos += 2;\n\t\t\t\t} else {\n\t\t\t\t\tthis.current = this.newToken(Token.ASSIGN);\n\t\t\t\t\tthis.pos++;\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\tcase '*':\n\t\t\t\tif (this.expression.charAt(this.pos + 1) === '*') {\n\t\t\t\t\tif (this.expression.charAt(this.pos + 2) === '=') {\n\t\t\t\t\t\tthis.current = this.newToken(Token.EXP_ASSIGN);\n\t\t\t\t\t\tthis.pos += 3;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.current = this.newToken(Token.EXP);\n\t\t\t\t\t\tthis.pos += 2;\n\t\t\t\t\t}\n\t\t\t\t} else if (this.expression.charAt(this.pos + 1) === '=') {\n\t\t\t\t\tthis.current = this.newToken(Token.MUL_ASSIGN);\n\t\t\t\t\tthis.pos += 2;\n\t\t\t\t} else {\n\t\t\t\t\tthis.current = this.newToken(Token.MUL);\n\t\t\t\t\tthis.pos++;\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\tcase '/':\n\t\t\t\tif (this.expression.charAt(this.pos + 1) === '=') {\n\t\t\t\t\tthis.current = this.newToken(Token.DIV_ASSIGN);\n\t\t\t\t\tthis.pos += 2;\n\t\t\t\t} else {\n\t\t\t\t\tthis.current = this.newToken(Token.DIV);\n\t\t\t\t\tthis.pos++;\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\tcase '%':\n\t\t\t\tif (this.expression.charAt(this.pos + 1) === '%') {\n\t\t\t\t\tif (this.expression.charAt(this.pos + 1) === '=') {\n\t\t\t\t\t\tthis.current = this.newToken(Token.MODULO_ASSIGN);\n\t\t\t\t\t\tthis.pos += 3;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.current = this.newToken(Token.MODULO);\n\t\t\t\t\t\tthis.pos += 2;\n\t\t\t\t\t}\n\t\t\t\t} else if (this.expression.charAt(this.pos + 1) === '=') {\n\t\t\t\t\tthis.current = this.newToken(Token.MOD_ASSIGN);\n\t\t\t\t\tthis.pos += 2;\n\t\t\t\t} else {\n\t\t\t\t\tthis.current = this.newToken(Token.MOD);\n\t\t\t\t\tthis.pos++;\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\tcase '^':\n\t\t\t\tif (this.expression.charAt(this.pos + 1) === '=') {\n\t\t\t\t\tthis.current = this.newToken(Token.BIT_XOR_ASSIGN);\n\t\t\t\t\tthis.pos += 2;\n\t\t\t\t} else {\n\t\t\t\t\tthis.current = this.newToken(Token.BIT_XOR);\n\t\t\t\t\tthis.pos++;\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\tcase '>':\n\t\t\t\tif (this.expression.charAt(this.pos + 1) === '>') {\n\t\t\t\t\tif (this.expression.charAt(this.pos + 2) === '>') {\n\t\t\t\t\t\tif (this.expression.charAt(this.pos + 3) === '=') {\n\t\t\t\t\t\t\tthis.current = this.newToken(Token.SHR_ASSIGN);\n\t\t\t\t\t\t\tthis.pos += 4;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.current = this.newToken(Token.SHR);\n\t\t\t\t\t\t\tthis.pos += 3;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (this.expression.charAt(this.pos + 2) === '=') {\n\t\t\t\t\t\tthis.current = this.newToken(Token.SAR_ASSIGN);\n\t\t\t\t\t\tthis.pos += 3;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.current = this.newToken(Token.SAR);\n\t\t\t\t\t\tthis.pos += 2;\n\t\t\t\t\t}\n\t\t\t\t} else if (this.expression.charAt(this.pos + 1) === '=') {\n\t\t\t\t\tthis.current = this.newToken(Token.GTE);\n\t\t\t\t\tthis.pos += 2;\n\t\t\t\t} else if (this.expression.charAt(this.pos + 1) === '?') {\n\t\t\t\t\tif (this.expression.charAt(this.pos + 2) === '=') {\n\t\t\t\t\t\tthis.current = this.newToken(Token.LARGER_ASSIGN);\n\t\t\t\t\t\tthis.pos += 3;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.current = this.newToken(Token.LARGER);\n\t\t\t\t\t\tthis.pos += 2;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tthis.current = this.newToken(Token.GT);\n\t\t\t\t\tthis.pos++;\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\tcase '<':\n\t\t\t\tif (this.expression.charAt(this.pos + 1) === '<') {\n\t\t\t\t\tif (this.expression.charAt(this.pos + 2) === '=') {\n\t\t\t\t\t\tthis.current = this.newToken(Token.SHL_ASSIGN);\n\t\t\t\t\t\tthis.pos += 3;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.current = this.newToken(Token.SHL);\n\t\t\t\t\t\tthis.pos += 2;\n\t\t\t\t\t}\n\t\t\t\t} else if (this.expression.charAt(this.pos + 1) === '=') {\n\t\t\t\t\tif (this.expression.charAt(this.pos + 2) === '>') {\n\t\t\t\t\t\tthis.current = this.newToken(Token.SPACESHIP);\n\t\t\t\t\t\tthis.pos += 3;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.current = this.newToken(Token.LTE);\n\t\t\t\t\t\tthis.pos += 2;\n\t\t\t\t\t}\n\t\t\t\t} else if (this.expression.charAt(this.pos + 1) === '?') {\n\t\t\t\t\tif (this.expression.charAt(this.pos + 2) === '=') {\n\t\t\t\t\t\tthis.current = this.newToken(Token.SMALLER_ASSIGN);\n\t\t\t\t\t\tthis.pos += 3;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.current = this.newToken(Token.SMALLER);\n\t\t\t\t\t\tthis.pos += 2;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tthis.current = this.newToken(Token.LT);\n\t\t\t\t\tthis.pos++;\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\tcase '|':\n\t\t\t\tif (this.expression.charAt(this.pos + 1) === '|') {\n\t\t\t\t\tif (this.expression.charAt(this.pos + 2) === '=') {\n\t\t\t\t\t\tthis.current = this.newToken(Token.OR_ASSIGN);\n\t\t\t\t\t\tthis.pos += 3;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.current = this.newToken(Token.OR);\n\t\t\t\t\t\tthis.pos += 2;\n\t\t\t\t\t}\n\t\t\t\t} else if (this.expression.charAt(this.pos + 1) === '=') {\n\t\t\t\t\tthis.current = this.newToken(Token.BIT_OR_ASSIGN);\n\t\t\t\t\tthis.pos += 2;\n\t\t\t\t} else if (this.expression.charAt(this.pos + 1) === '>') {\n\t\t\t\t\tthis.current = this.newToken(Token.PIPELINE);\n\t\t\t\t\tthis.pos += 2;\n\t\t\t\t} else {\n\t\t\t\t\tthis.current = this.newToken(Token.BIT_OR);\n\t\t\t\t\tthis.pos++;\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\tcase '&':\n\t\t\t\tif (this.expression.charAt(this.pos + 1) === '&') {\n\t\t\t\t\tif (this.expression.charAt(this.pos + 2) === '=') {\n\t\t\t\t\t\tthis.current = this.newToken(Token.AND_ASSIGN);\n\t\t\t\t\t\tthis.pos += 3;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.current = this.newToken(Token.AND);\n\t\t\t\t\t\tthis.pos += 2;\n\t\t\t\t\t}\n\t\t\t\t} else if (this.expression.charAt(this.pos + 1) === '=') {\n\t\t\t\t\tthis.current = this.newToken(Token.BIT_AND_ASSIGN);\n\t\t\t\t\tthis.pos += 2;\n\t\t\t\t} else {\n\t\t\t\t\tthis.current = this.newToken(Token.BIT_AND);\n\t\t\t\t\tthis.pos++;\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\tcase '?':\n\t\t\t\tif (this.expression.charAt(this.pos + 1) === '?') {\n\t\t\t\t\tif (this.expression.charAt(this.pos + 2) === '=') {\n\t\t\t\t\t\tthis.current = this.newToken(Token.NULLISH_ASSIGN);\n\t\t\t\t\t\tthis.pos += 3;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.current = this.newToken(Token.NULLISH);\n\t\t\t\t\t\tthis.pos += 2;\n\t\t\t\t\t}\n\t\t\t\t} else if (this.expression.substring(this.pos + 1, this.pos + 3) == '::') {\n\t\t\t\t\tthis.current = this.newToken(Token.QUESTION_BIND);\n\t\t\t\t\tthis.pos += 3;\n\t\t\t\t} else if (this.expression.charAt(this.pos + 1) === '.') {\n\t\t\t\t\tthis.current = this.newToken(Token.QUESTION_PERIOD);\n\t\t\t\t\tthis.pos += 2;\n\t\t\t\t} else {\n\t\t\t\t\tthis.current = this.newToken(Token.CONDITIONAL);\n\t\t\t\t\tthis.pos++;\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\tcase '!':\n\t\t\t\tif (this.expression.charAt(this.pos + 1) === '=') {\n\t\t\t\t\tif (this.expression.charAt(this.pos + 2) === '=') {\n\t\t\t\t\t\tthis.current = this.newToken(Token.NE_STRICT);\n\t\t\t\t\t\tthis.pos += 3;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.current = this.newToken(Token.NE);\n\t\t\t\t\t\tthis.pos += 2;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tthis.current = this.newToken(Token.NOT);\n\t\t\t\t\tthis.pos++;\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\tcase '.':\n\t\t\t\tif (/\\.\\.\\./.test(this.expression.substring(this.pos, this.pos + 3))) {\n\t\t\t\t\tthis.current = this.newToken(Token.ELLIPSIS);\n\t\t\t\t\tthis.pos += 3;\n\t\t\t\t\treturn true;\n\t\t\t\t} else {\n\t\t\t\t\tthis.current = this.newToken(Token.PERIOD);\n\t\t\t\t\tthis.pos++;\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t// no break\n\t\t\tcase ':':\n\t\t\t\tif (this.expression.charAt(this.pos + 1) === ':') {\n\t\t\t\t\tthis.current = this.newToken(Token.QUESTION_BIND);\n\t\t\t\t\tthis.pos += 2;\n\t\t\t\t} else {\n\t\t\t\t\tthis.current = this.newToken(Token.COLON);\n\t\t\t\t\tthis.pos++;\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\tcase '~':\n\t\t\t\tthis.current = this.newToken(Token.BIT_NOT);\n\t\t\t\tthis.pos++;\n\t\t\t\treturn true;\n\t\t\tcase 'a':\n\t\t\t\tif (/async\\s/.test(this.expression.substring(this.pos, this.pos + 6))) {\n\t\t\t\t\tthis.current = this.newToken(Token.ASYNC);\n\t\t\t\t\tthis.pos += 5;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tif (/await\\s/.test(this.expression.substring(this.pos, this.pos + 6))) {\n\t\t\t\t\tthis.current = this.newToken(Token.AWAIT);\n\t\t\t\t\tthis.pos += 5;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\tcase 'i':\t\t\t// in, instanceof\n\t\t\t\tif (this.expression.charAt(this.pos + 1) === 'n') {\n\t\t\t\t\tif (/instanceof\\s/.test(this.expression.substring(this.pos, this.pos + 11))) {\n\t\t\t\t\t\tthis.current = this.newToken(Token.INSTANCEOF);\n\t\t\t\t\t\tthis.pos += 11;\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t} else if (/\\s/.test(this.expression.charAt(this.pos + 2))) {\n\t\t\t\t\t\tthis.current = this.newToken(Token.IN);\n\t\t\t\t\t\tthis.pos += 3;\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\tcase 't':\t\t\t// typeof\n\t\t\t\tif (/typeof\\s/.test(this.expression.substring(this.pos, this.pos + 7))) {\n\t\t\t\t\tthis.current = this.newToken(Token.TYPEOF);\n\t\t\t\t\tthis.pos += 7;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\tcase 'v':\t\t\t// void\n\t\t\t\tif (/void\\s/.test(this.expression.substring(this.pos, this.pos + 5))) {\n\t\t\t\t\tthis.current = this.newToken(Token.VOID);\n\t\t\t\t\tthis.pos += 5;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\tcase 'd':\t\t\t// delete\n\t\t\t\tif (/delete\\s/.test(this.expression.substring(this.pos, this.pos + 7))) {\n\t\t\t\t\tthis.current = this.newToken(Token.DELETE);\n\t\t\t\t\tthis.pos += 7;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\tcase 'n':\t\t\t// new\n\t\t\t\tif (/new\\s/.test(this.expression.substring(this.pos, this.pos + 4))) {\n\t\t\t\t\tthis.current = this.newToken(Token.NEW);\n\t\t\t\t\tthis.pos += 4;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\tcase 'n':\t\t\t// new\n\t\t\t\tif (/new\\s/.test(this.expression.substring(this.pos, this.pos + 4))) {\n\t\t\t\t\tthis.current = this.newToken(Token.NEW);\n\t\t\t\t\tthis.pos += 4;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\tcase 'y':\t\t\t// void\n\t\t\t\tif (/yield\\s/.test(this.expression.substring(this.pos, this.pos + 6))) {\n\t\t\t\t\tthis.current = this.newToken(Token.YIELD);\n\t\t\t\t\tthis.pos += 6;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\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, BreakStatement.BREAK_INSTANCE);\n\t\t\t\t\tthis.pos += 5;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\tcase 'c':\n\t\t\t\tif (/case[\\s~!+-\\/\\('\"`]/.test(this.expression.substring(this.pos, this.pos + 5))) {\n\t\t\t\t\tthis.current = this.newToken(Token.CASE);\n\t\t\t\t\tthis.pos += 4;\n\t\t\t\t\treturn true;\n\t\t\t\t} else if (/const\\s/.test(this.expression.substring(this.pos, this.pos + 6))) {\n\t\t\t\t\tthis.current = this.newToken(Token.CONST);\n\t\t\t\t\tthis.pos += 6;\n\t\t\t\t\treturn true;\n\t\t\t\t} else if (/catch[\\s\\{\\(]/.test(this.expression.substring(this.pos, this.pos + 6))) {\n\t\t\t\t\tthis.current = this.newToken(Token.CATCH);\n\t\t\t\t\tthis.pos += 5;\n\t\t\t\t\treturn true;\n\t\t\t\t} else if (/class\\s/.test(this.expression.substring(this.pos, this.pos + 6))) {\n\t\t\t\t\tthis.current = this.newToken(Token.CLASS);\n\t\t\t\t\tthis.pos += 6;\n\t\t\t\t\treturn true;\n\t\t\t\t} else if (/continue[\\s;]/.test(this.expression.substring(this.pos, this.pos + 9))) {\n\t\t\t\t\tthis.current = this.newToken(Token.CONTINUE, ContinueStatement.CONTINUE_INSTANCE);\n\t\t\t\t\tthis.pos += 8;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\tcase 'd':\n\t\t\t\tif (/^(do\\s?\\{)/.test(this.expression.substring(this.pos, this.pos + 4))) {\n\t\t\t\t\tthis.current = this.newToken(Token.DO);\n\t\t\t\t\tthis.pos += 2;\n\t\t\t\t\treturn true;\n\t\t\t\t} else if (/^(default\\s?:)/.test(this.expression.substring(this.pos, this.pos + 9))) {\n\t\t\t\t\tthis.current = this.newToken(Token.DEFAULT);\n\t\t\t\t\tthis.pos += 7;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\tcase 'e':\n\t\t\t\tif (/else[\\s\\{]?/.test(this.expression.substring(this.pos, this.pos + 5))) {\n\t\t\t\t\tthis.current = this.newToken(Token.ELSE);\n\t\t\t\t\tthis.pos += 4;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tif (/export\\s/.test(this.expression.substring(this.pos, this.pos + 7))) {\n\t\t\t\t\tthis.current = this.newToken(Token.EXPORT);\n\t\t\t\t\tthis.pos += 7;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tif (/extends\\s/.test(this.expression.substring(this.pos, this.pos + 8))) {\n\t\t\t\t\tthis.current = this.newToken(Token.EXTENDS);\n\t\t\t\t\tthis.pos += 8;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\tcase 'g':\n\t\t\t\tif (/get\\s/.test(this.expression.substring(this.pos, this.pos + 4))) {\n\t\t\t\t\tthis.current = this.newToken(Token.GET);\n\t\t\t\t\tthis.pos += 4;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\tcase 'f':\n\t\t\t\tif (/for[\\s\\(]/.test(this.expression.substring(this.pos, this.pos + 4))) {\n\t\t\t\t\tthis.current = this.newToken(Token.FOR);\n\t\t\t\t\tthis.pos += 3;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tif (/finally[\\s\\{]/.test(this.expression.substring(this.pos, this.pos + 8))) {\n\t\t\t\t\tthis.current = this.newToken(Token.FINALLY);\n\t\t\t\t\tthis.pos += 7;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tif (/function[\\s\\*\\(]/.test(this.expression.substring(this.pos, this.pos + 9))) {\n\t\t\t\t\tthis.current = this.newToken(Token.FUNCTION);\n\t\t\t\t\tthis.pos += 8;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\tcase 'i':\n\t\t\t\tif (/if[\\s\\(]?/.test(this.expression.substring(this.pos, this.pos + 3))) {\n\t\t\t\t\tthis.current = this.newToken(Token.IF);\n\t\t\t\t\tthis.pos += 2;\n\t\t\t\t\treturn true;\n\t\t\t\t} else if (/in\\s/.test(this.expression.substring(this.pos, this.pos + 3))) {\n\t\t\t\t\tthis.current = this.newToken(Token.IN);\n\t\t\t\t\tthis.pos += 3;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\telse if (/import\\s/.test(this.expression.substring(this.pos, this.pos + 7))) {\n\t\t\t\t\tthis.current = this.newToken(Token.IMPORT);\n\t\t\t\t\tthis.pos += 7;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\tcase 'l':\n\t\t\t\tif (/let\\s/.test(this.expression.substring(this.pos, this.pos + 4))) {\n\t\t\t\t\tthis.current = this.newToken(Token.LET);\n\t\t\t\t\tthis.pos += 4;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\tcase 't':\n\t\t\t\tif (/try[\\s\\{]/.test(this.expression.substring(this.pos, this.pos + 4))) {\n\t\t\t\t\tthis.current = this.newToken(Token.TRY);\n\t\t\t\t\tthis.pos += 3;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tif (/throw\\s/.test(this.expression.substring(this.pos, this.pos + 6))) {\n\t\t\t\t\tthis.current = this.newToken(Token.THROW);\n\t\t\t\t\tthis.pos += 6;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\tcase 'r':\n\t\t\t\tif (/return[\\s~!+-\\/\\('\"`]/.test(this.expression.substring(this.pos, this.pos + 7))) {\n\t\t\t\t\tthis.current = this.newToken(Token.RETURN);\n\t\t\t\t\tthis.pos += 6;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t// case 'of':\n\t\t\t// \tif (/of\\s/.test(this.expression.substring(this.pos, this.pos + 3))) {\n\t\t\t// \t\tthis.current = this.newToken(Token.OF);\n\t\t\t// \t\tthis.pos += 3;\n\t\t\t// \t\treturn true;\n\t\t\t// \t}\n\t\t\t// \treturn false;\n\t\t\tcase 's':\n\t\t\t\tif (/switch[\\s\\(]?/.test(this.expression.substring(this.pos, this.pos + 7))) {\n\t\t\t\t\tthis.current = this.newToken(Token.SWITCH);\n\t\t\t\t\tthis.pos += 6;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tif (/static\\s/.test(this.expression.substring(this.pos, this.pos + 7))) {\n\t\t\t\t\tthis.current = this.newToken(Token.STATIC);\n\t\t\t\t\tthis.pos += 7;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tif (/set\\s/.test(this.expression.substring(this.pos, this.pos + 4))) {\n\t\t\t\t\tthis.current = this.newToken(Token.SET);\n\t\t\t\t\tthis.pos += 4;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tif (/super[\\.\\(]?/.test(this.expression.substring(this.pos, this.pos + 6))) {\n\t\t\t\t\tthis.current = this.newToken(Token.SUPER);\n\t\t\t\t\tthis.pos += 5;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\tcase 'w':\n\t\t\t\tif (/while[\\s\\(]?/.test(this.expression.substring(this.pos, this.pos + 6))) {\n\t\t\t\t\tthis.current = this.newToken(Token.WHILE);\n\t\t\t\t\tthis.pos += 5;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\tcase 'v':\n\t\t\t\tif (/var\\s/.test(this.expression.substring(this.pos, this.pos + 4))) {\n\t\t\t\t\tthis.current = this.newToken(Token.VAR);\n\t\t\t\t\tthis.pos += 4;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t}\n\tprotected getCoordinates() {\n\t\tlet line = 0, column, newline = -1;\n\t\tdo {\n\t\t\tline++;\n\t\t\tcolumn = this.pos - newline;\n\t\t\tnewline = this.expression.indexOf('\\n', newline + 1);\n\t\t} while (newline >= 0 && newline < this.pos);\n\t\treturn { line, column };\n\t}\n\tpublic createError(message: String): string {\n\t\tlet coords = this.getCoordinates();\n\t\tconst subStart = Math.max(0, this.pos - 25);\n\t\tconst subEnd = Math.min(this.pos + 25, this.expression.length);\n\t\treturn `@[line: ${coords.line}, column: ${coords.column}] current token: ${JSON.stringify(this.current)}\n\t\t\t${message}\n\t\t\t\\`${this.expression.substring(subStart, subEnd)}\\``;\n\t}\n}\n"]}
|