UNPKG

@neo-one/smart-contract-compiler

Version:

NEO•ONE TypeScript smart contract compiler.

47 lines (45 loc) 1.54 kB
"use strict"; 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