48 lines
1.4 KiB
JavaScript
48 lines
1.4 KiB
JavaScript
|
"use strict";
|
||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||
|
exports.Import = void 0;
|
||
|
const ast_1 = require("./ast");
|
||
|
class Import {
|
||
|
constructor(parent, symbols) {
|
||
|
this.parent = parent;
|
||
|
this.symbols = symbols;
|
||
|
this.byText = new Map();
|
||
|
this.offset = parent ? parent.offset + parent.length : 1;
|
||
|
this.length = symbols.length;
|
||
|
for (let i = 0; i < symbols.length; i++) {
|
||
|
const symbol = symbols[i];
|
||
|
this.byText.set(symbol, this.offset + i);
|
||
|
}
|
||
|
}
|
||
|
getId(symbol) {
|
||
|
const id = this.byText.get(symbol);
|
||
|
if (id !== undefined)
|
||
|
return id;
|
||
|
if (this.parent)
|
||
|
this.parent.getId(symbol);
|
||
|
return undefined;
|
||
|
}
|
||
|
getText(id) {
|
||
|
if (id < this.offset)
|
||
|
return this.parent ? this.parent.getText(id) : undefined;
|
||
|
return this.symbols[id - this.offset];
|
||
|
}
|
||
|
add(symbol) {
|
||
|
let id = this.byText.get(symbol);
|
||
|
if (id !== undefined)
|
||
|
return id;
|
||
|
const length = this.symbols.length;
|
||
|
id = this.offset + length;
|
||
|
this.symbols.push(symbol);
|
||
|
this.length++;
|
||
|
this.byText.set(symbol, id);
|
||
|
return id;
|
||
|
}
|
||
|
toAst() {
|
||
|
const map = new Map();
|
||
|
map.set(7, (0, ast_1.toAst)(this.symbols, this));
|
||
|
return new ast_1.ObjAstNode(map);
|
||
|
}
|
||
|
}
|
||
|
exports.Import = Import;
|
||
|
//# sourceMappingURL=Import.js.map
|