@neo-one/smart-contract-compiler
Version:
NEO•ONE TypeScript smart contract compiler.
43 lines (41 loc) • 1.34 kB
JavaScript
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