UNPKG

@neo-one/smart-contract-compiler

Version:

NEO•ONE TypeScript smart contract compiler.

43 lines (41 loc) 1.34 kB
import { CapturingScope } from '../scope'; import { BaseScriptBuilder } from './BaseScriptBuilder'; export class ScopeCapturingScriptBuilder extends 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 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; } } //# sourceMappingURL=ScopeCapturingScriptBuilder.js.map