@bitloops/bl-transpiler
Version:
The one and only Bitloops Language transpiler
93 lines • 3.28 kB
JavaScript
"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