UNPKG

@neo-one/smart-contract-compiler

Version:

NEO•ONE TypeScript smart contract compiler.

46 lines (44 loc) 5.5 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); 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=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlNjb3BlQ2FwdHVyaW5nU2NyaXB0QnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUNBLG9DQUF5RDtBQUN6RCwyREFBd0Q7QUFHeEQsTUFBYSwyQkFBNEIsU0FBUSxxQ0FBaUM7SUFBbEY7O1FBQ21CLGtCQUFhLEdBQXFCLEVBQUUsQ0FBQztRQUNyQyxtQkFBYyxHQUE2QyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBeUN4RixDQUFDO0lBdkNRLE9BQU87UUFDWixLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDaEIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFTSxTQUFTO1FBQ2QsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDO0lBQzdCLENBQUM7SUFFUyxXQUFXLENBQUMsSUFBYSxFQUFFLEtBQWEsRUFBRSxNQUFtQztRQUNyRixNQUFNLEtBQUssR0FBRyxJQUFJLHNCQUFjLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztRQUN0RCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUUvQixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFTyxhQUFhO1FBQ25CLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDbkMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMzQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxZQUFZLENBQUMsS0FBcUI7UUFDeEMsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xELElBQUksT0FBTyxLQUFLLFNBQVMsRUFBRTtZQUN6QixPQUFPLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1NBQzlDO1FBRUQsSUFBSSxRQUFRLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEMsSUFBSSxRQUFRLEtBQUssU0FBUyxFQUFFO1lBQzFCLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7WUFDNUIsUUFBUSxHQUFHLE1BQU0sS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFFN0YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1NBQ3BDO1FBRUQsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztDQUNGO0FBM0NELGtFQTJDQyIsImZpbGUiOiJuZW8tb25lLXNtYXJ0LWNvbnRyYWN0LWNvbXBpbGVyL3NyYy9jb21waWxlL3NiL1Njb3BlQ2FwdHVyaW5nU2NyaXB0QnVpbGRlci5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0cyBmcm9tICd0eXBlc2NyaXB0JztcbmltcG9ydCB7IENhcHR1cmluZ1Njb3BlLCBSZXNvbHZlZFNjb3BlIH0gZnJvbSAnLi4vc2NvcGUnO1xuaW1wb3J0IHsgQmFzZVNjcmlwdEJ1aWxkZXIgfSBmcm9tICcuL0Jhc2VTY3JpcHRCdWlsZGVyJztcbmltcG9ydCB7IFNjcmlwdEJ1aWxkZXIgfSBmcm9tICcuL1NjcmlwdEJ1aWxkZXInO1xuXG5leHBvcnQgY2xhc3MgU2NvcGVDYXB0dXJpbmdTY3JpcHRCdWlsZGVyIGV4dGVuZHMgQmFzZVNjcmlwdEJ1aWxkZXI8Q2FwdHVyaW5nU2NvcGU+IGltcGxlbWVudHMgU2NyaXB0QnVpbGRlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgbXV0YWJsZVNjb3BlczogQ2FwdHVyaW5nU2NvcGVbXSA9IFtdO1xuICBwcml2YXRlIHJlYWRvbmx5IHJlc29sdmVkU2NvcGVzOiBNYXA8dHMuTm9kZSwgTWFwPG51bWJlciwgUmVzb2x2ZWRTY29wZT4+ID0gbmV3IE1hcCgpO1xuXG4gIHB1YmxpYyBwcm9jZXNzKCk6IHZvaWQge1xuICAgIHN1cGVyLnByb2Nlc3MoKTtcbiAgICB0aGlzLnJlc29sdmVTY29wZXMoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRTY29wZXMoKTogTWFwPHRzLk5vZGUsIE1hcDxudW1iZXIsIFJlc29sdmVkU2NvcGU+PiB7XG4gICAgcmV0dXJuIHRoaXMucmVzb2x2ZWRTY29wZXM7XG4gIH1cblxuICBwcm90ZWN0ZWQgY3JlYXRlU2NvcGUobm9kZTogdHMuTm9kZSwgaW5kZXg6IG51bWJlciwgcGFyZW50PzogQ2FwdHVyaW5nU2NvcGUgfCB1bmRlZmluZWQpOiBDYXB0dXJpbmdTY29wZSB7XG4gICAgY29uc3Qgc2NvcGUgPSBuZXcgQ2FwdHVyaW5nU2NvcGUobm9kZSwgaW5kZXgsIHBhcmVudCk7XG4gICAgdGhpcy5tdXRhYmxlU2NvcGVzLnB1c2goc2NvcGUpO1xuXG4gICAgcmV0dXJuIHNjb3BlO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlU2NvcGVzKCk6IHZvaWQge1xuICAgIHRoaXMubXV0YWJsZVNjb3Blcy5mb3JFYWNoKChzY29wZSkgPT4ge1xuICAgICAgdGhpcy5yZXNvbHZlU2NvcGUoc2NvcGUpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlU2NvcGUoc2NvcGU6IENhcHR1cmluZ1Njb3BlKTogUmVzb2x2ZWRTY29wZSB7XG4gICAgbGV0IGZvck5vZGUgPSB0aGlzLnJlc29sdmVkU2NvcGVzLmdldChzY29wZS5ub2RlKTtcbiAgICBpZiAoZm9yTm9kZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBmb3JOb2RlID0gbmV3IE1hcCgpO1xuICAgICAgdGhpcy5yZXNvbHZlZFNjb3Blcy5zZXQoc2NvcGUubm9kZSwgZm9yTm9kZSk7XG4gICAgfVxuXG4gICAgbGV0IHJlc29sdmVkID0gZm9yTm9kZS5nZXQoc2NvcGUuaW5kZXgpO1xuICAgIGlmIChyZXNvbHZlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBwYXJlbnQgPSBzY29wZS5wYXJlbnQ7XG4gICAgICByZXNvbHZlZCA9IHBhcmVudCA9PT0gdW5kZWZpbmVkID8gc2NvcGUucmVzb2x2ZSgpIDogc2NvcGUucmVzb2x2ZSh0aGlzLnJlc29sdmVTY29wZShwYXJlbnQpKTtcblxuICAgICAgZm9yTm9kZS5zZXQoc2NvcGUuaW5kZXgsIHJlc29sdmVkKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzb2x2ZWQ7XG4gIH1cbn1cbiJdfQ==