UNPKG

@bitloops/bl-transpiler

Version:
93 lines 3.28 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const tslib_1 = require("tslib"); const antlr4_1 = tslib_1.__importDefault(require("antlr4")); const BitloopsLexer_js_1 = tslib_1.__importDefault(require("./BitloopsLexer.js")); class JavaScriptLexerBase extends antlr4_1.default.Lexer { constructor(input) { super(input); this.scopeStrictModes = []; this.lastToken = null; this.useStrictDefault = false; this.useStrictCurrent = false; this.templateDepth = 0; } getStrictDefault() { return this.useStrictDefault; } setUseStrictDefault(value) { this.useStrictDefault = value; this.useStrictCurrent = value; } IsStrictMode() { return this.useStrictCurrent; } IsInTemplateString() { return this.templateDepth > 0; } getCurrentToken() { return this.nextToken(); } nextToken() { var next = super.nextToken(); if (next.channel === antlr4_1.default.Token.DEFAULT_CHANNEL) { this.lastToken = next; } return next; } ProcessOpenBrace() { this.useStrictCurrent = this.scopeStrictModes.length > 0 && this.scopeStrictModes[this.scopeStrictModes.length - 1] ? true : this.useStrictDefault; this.scopeStrictModes.push(this.useStrictCurrent); } ProcessCloseBrace() { this.useStrictCurrent = this.scopeStrictModes.length > 0 ? this.scopeStrictModes.pop() : this.useStrictDefault; } ProcessStringLiteral() { if (this.lastToken === null || this.lastToken.type === BitloopsLexer_js_1.default.OpenBrace) { if (super.text === '"use strict"' || super.text === "'use strict'") { if (this.scopeStrictModes.length > 0) { this.scopeStrictModes.pop(); } this.useStrictCurrent = true; this.scopeStrictModes.push(this.useStrictCurrent); } } } IncreaseTemplateDepth() { this.templateDepth++; } DecreaseTemplateDepth() { this.templateDepth--; } IsRegexPossible() { if (this.lastToken === null) { return true; } switch (this.lastToken.type) { case BitloopsLexer_js_1.default.Identifier: case BitloopsLexer_js_1.default.NullLiteral: case BitloopsLexer_js_1.default.BooleanLiteral: case BitloopsLexer_js_1.default.This: case BitloopsLexer_js_1.default.CloseBracket: case BitloopsLexer_js_1.default.CloseParen: case BitloopsLexer_js_1.default.OctalIntegerLiteral: case BitloopsLexer_js_1.default.DecimalLiteral: case BitloopsLexer_js_1.default.HexIntegerLiteral: case BitloopsLexer_js_1.default.StringLiteral: case BitloopsLexer_js_1.default.PlusPlus: case BitloopsLexer_js_1.default.MinusMinus: return false; default: return true; } } IsStartOfFile() { return this.lastToken === null; } } exports.default = JavaScriptLexerBase; //# sourceMappingURL=BitloopsLexerBase.js.map