@neo-one/smart-contract-compiler
Version:
NEO•ONE TypeScript smart contract compiler.
47 lines (45 loc) • 1.54 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ScopeCapturingScriptBuilder = void 0;
const scope_1 = require("../scope");
const BaseScriptBuilder_1 = require("./BaseScriptBuilder");
class ScopeCapturingScriptBuilder extends BaseScriptBuilder_1.BaseScriptBuilder {
constructor() {
super(...arguments);
this.mutableScopes = [];
this.resolvedScopes = new Map();
}
process() {
super.process();
this.resolveScopes();
}
getScopes() {
return this.resolvedScopes;
}
createScope(node, index, parent) {
const scope = new scope_1.CapturingScope(node, index, parent);
this.mutableScopes.push(scope);
return scope;
}
resolveScopes() {
this.mutableScopes.forEach((scope) => {
this.resolveScope(scope);
});
}
resolveScope(scope) {
let forNode = this.resolvedScopes.get(scope.node);
if (forNode === undefined) {
forNode = new Map();
this.resolvedScopes.set(scope.node, forNode);
}
let resolved = forNode.get(scope.index);
if (resolved === undefined) {
const parent = scope.parent;
resolved = parent === undefined ? scope.resolve() : scope.resolve(this.resolveScope(parent));
forNode.set(scope.index, resolved);
}
return resolved;
}
}
exports.ScopeCapturingScriptBuilder = ScopeCapturingScriptBuilder;
//# sourceMappingURL=ScopeCapturingScriptBuilder.js.map