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