@neo-one/smart-contract-compiler
Version:
NEO•ONE TypeScript smart contract compiler.
34 lines (32 loc) • 1.03 kB
JavaScript
export class JumpTable {
constructor() {
this.mutableJumpNumber = 0;
this.mutableTable = [];
}
add(sb, node, body) {
const jumpNumber = this.mutableJumpNumber;
this.mutableJumpNumber += 1;
const { bytecode } = sb.capture(() => {
body();
});
this.mutableTable.push({ jumpNumber, node, bytecode });
return jumpNumber;
}
emitTable(sb, outerNode) {
this.mutableTable.forEach(({ node, jumpNumber, bytecode }) => {
sb.emitHelper(node, {}, sb.helpers.if({
condition: () => {
sb.emitOp(node, 'DUP');
sb.emitPushInt(node, jumpNumber);
sb.emitOp(node, 'NUMEQUAL');
},
whenTrue: () => {
sb.emitOp(node, 'DROP');
sb.emitBytecode(bytecode);
},
}));
});
sb.emitOp(outerNode, 'THROW');
}
}
//# sourceMappingURL=JumpTable.js.map