UNPKG

@neo-one/smart-contract-compiler

Version:

NEO•ONE TypeScript smart contract compiler.

38 lines (36 loc) 4.17 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const ProgramCounter_1 = require("./ProgramCounter"); class LastProgramCounter extends ProgramCounter_1.ProgramCounter { constructor(startPC, offset = 0) { super(); this.startPC = startPC; this.offset = offset; this.mutableChildren = []; } plus(offset) { const pc = new LastProgramCounter(this.startPC, this.offset + offset); this.mutableChildren.push(pc); if (this.mutablePC !== undefined) { pc.setPC(this.mutablePC); } return pc; } equals(other) { return other instanceof LastProgramCounter && this.startPC === other.startPC && this.offset === other.offset; } setPC(pc) { this.mutablePC = pc; this.mutableChildren.forEach((child) => { child.setPC(pc); }); } getPC() { if (this.mutablePC === undefined) { throw new Error('Unknown PC'); } return this.mutablePC + this.offset; } } exports.LastProgramCounter = LastProgramCounter; //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkxhc3RQcm9ncmFtQ291bnRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHFEQUFrRDtBQUVsRCxNQUFhLGtCQUFtQixTQUFRLCtCQUFjO0lBSXBELFlBQW9DLE9BQWUsRUFBbUIsU0FBaUIsQ0FBQztRQUN0RixLQUFLLEVBQUUsQ0FBQztRQUQwQixZQUFPLEdBQVAsT0FBTyxDQUFRO1FBQW1CLFdBQU0sR0FBTixNQUFNLENBQVk7UUFGdkUsb0JBQWUsR0FBeUIsRUFBRSxDQUFDO0lBSTVELENBQUM7SUFFTSxJQUFJLENBQUMsTUFBYztRQUN4QixNQUFNLEVBQUUsR0FBRyxJQUFJLGtCQUFrQixDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsQ0FBQztRQUN0RSxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM5QixJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssU0FBUyxFQUFFO1lBQ2hDLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQzFCO1FBRUQsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRU0sTUFBTSxDQUFDLEtBQXFCO1FBQ2pDLE9BQU8sS0FBSyxZQUFZLGtCQUFrQixJQUFJLElBQUksQ0FBQyxPQUFPLEtBQUssS0FBSyxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLEtBQUssQ0FBQyxNQUFNLENBQUM7SUFDL0csQ0FBQztJQUVNLEtBQUssQ0FBQyxFQUFVO1FBQ3JCLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDckMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNsQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxLQUFLO1FBQ1YsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLFNBQVMsRUFBRTtZQUNoQyxNQUFNLElBQUksS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQy9CO1FBRUQsT0FBTyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDdEMsQ0FBQztDQUNGO0FBcENELGdEQW9DQyIsImZpbGUiOiJuZW8tb25lLXNtYXJ0LWNvbnRyYWN0LWNvbXBpbGVyL3NyYy9jb21waWxlL3BjL0xhc3RQcm9ncmFtQ291bnRlci5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFByb2dyYW1Db3VudGVyIH0gZnJvbSAnLi9Qcm9ncmFtQ291bnRlcic7XG5cbmV4cG9ydCBjbGFzcyBMYXN0UHJvZ3JhbUNvdW50ZXIgZXh0ZW5kcyBQcm9ncmFtQ291bnRlciB7XG4gIHByaXZhdGUgbXV0YWJsZVBDOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgbXV0YWJsZUNoaWxkcmVuOiBMYXN0UHJvZ3JhbUNvdW50ZXJbXSA9IFtdO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHN0YXJ0UEM6IG51bWJlciwgcHJpdmF0ZSByZWFkb25seSBvZmZzZXQ6IG51bWJlciA9IDApIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgcHVibGljIHBsdXMob2Zmc2V0OiBudW1iZXIpOiBQcm9ncmFtQ291bnRlciB7XG4gICAgY29uc3QgcGMgPSBuZXcgTGFzdFByb2dyYW1Db3VudGVyKHRoaXMuc3RhcnRQQywgdGhpcy5vZmZzZXQgKyBvZmZzZXQpO1xuICAgIHRoaXMubXV0YWJsZUNoaWxkcmVuLnB1c2gocGMpO1xuICAgIGlmICh0aGlzLm11dGFibGVQQyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBwYy5zZXRQQyh0aGlzLm11dGFibGVQQyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBjO1xuICB9XG5cbiAgcHVibGljIGVxdWFscyhvdGhlcjogUHJvZ3JhbUNvdW50ZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gb3RoZXIgaW5zdGFuY2VvZiBMYXN0UHJvZ3JhbUNvdW50ZXIgJiYgdGhpcy5zdGFydFBDID09PSBvdGhlci5zdGFydFBDICYmIHRoaXMub2Zmc2V0ID09PSBvdGhlci5vZmZzZXQ7XG4gIH1cblxuICBwdWJsaWMgc2V0UEMocGM6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMubXV0YWJsZVBDID0gcGM7XG4gICAgdGhpcy5tdXRhYmxlQ2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQpID0+IHtcbiAgICAgIGNoaWxkLnNldFBDKHBjKTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRQQygpOiBudW1iZXIge1xuICAgIGlmICh0aGlzLm11dGFibGVQQyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gUEMnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5tdXRhYmxlUEMgKyB0aGlzLm9mZnNldDtcbiAgfVxufVxuIl19