UNPKG

@neo-one/smart-contract-compiler

Version:

NEO•ONE TypeScript smart contract compiler.

34 lines (32 loc) 1.03 kB
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