UNPKG

@neo-one/smart-contract-compiler

Version:

NEO•ONE TypeScript smart contract compiler.

95 lines (93 loc) 17.2 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const Helper_1 = require("../Helper"); class ExpHelper extends Helper_1.Helper { emit(sb, node, optionsIn) { const options = sb.pushValueOptions(optionsIn); sb.emitHelper(node, options, sb.helpers.if({ condition: () => { sb.emitOp(node, 'TUCK'); sb.emitPushInt(node, 0); sb.emitOp(node, 'NUMEQUAL'); }, whenTrue: () => { sb.emitOp(node, 'DROP'); sb.emitOp(node, 'DROP'); sb.emitPushInt(node, 1); }, whenFalse: () => { sb.emitHelper(node, options, sb.helpers.if({ condition: () => { sb.emitOp(node, 'OVER'); sb.emitPushInt(node, 0); sb.emitOp(node, 'LT'); }, whenTrue: () => { sb.emitPushInt(node, 1); sb.emitOp(node, 'SWAP'); sb.emitOp(node, 'DIV'); sb.emitOp(node, 'SWAP'); sb.emitOp(node, 'NEGATE'); sb.emitOp(node, 'SWAP'); }, })); const y = sb.scope.addUnique(); const n = sb.scope.addUnique(); const x = sb.scope.addUnique(); sb.scope.set(sb, node, options, x); sb.scope.set(sb, node, options, n); sb.emitPushInt(node, 1); sb.scope.set(sb, node, options, y); sb.emitHelper(node, options, sb.helpers.forLoop({ condition: () => { sb.scope.get(sb, node, options, n); sb.emitPushInt(node, 1); sb.emitOp(node, 'GT'); }, each: () => { sb.emitHelper(node, options, sb.helpers.if({ condition: () => { sb.scope.get(sb, node, options, n); sb.emitOp(node, 'DUP'); sb.emitPushInt(node, 2); sb.emitOp(node, 'MOD'); sb.emitPushInt(node, 0); sb.emitOp(node, 'NUMEQUAL'); }, whenTrue: () => { sb.emitPushInt(node, 2); sb.emitOp(node, 'DIV'); sb.scope.set(sb, node, options, n); sb.scope.get(sb, node, options, x); sb.emitOp(node, 'DUP'); sb.emitOp(node, 'MUL'); sb.scope.set(sb, node, options, x); }, whenFalse: () => { sb.emitOp(node, 'DEC'); sb.emitPushInt(node, 2); sb.emitOp(node, 'DIV'); sb.scope.set(sb, node, options, n); sb.scope.get(sb, node, options, x); sb.emitOp(node, 'DUP'); sb.scope.get(sb, node, options, y); sb.emitOp(node, 'MUL'); sb.scope.set(sb, node, options, y); sb.emitOp(node, 'DUP'); sb.emitOp(node, 'MUL'); sb.scope.set(sb, node, options, x); }, })); }, cleanup: () => { }, })); sb.scope.get(sb, node, options, x); sb.scope.get(sb, node, options, y); sb.emitOp(node, 'MUL'); }, })); } } exports.ExpHelper = ExpHelper; //# sourceMappingURL=data:application/json;charset=utf8;base64,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Q0FBQztnQ0FFdkIsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0NBRW5DLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dDQUVuQyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztnQ0FFdkIsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0NBRXZCLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDOzRCQUNyQyxDQUFDOzRCQUNELFNBQVMsRUFBRSxHQUFHLEVBQUU7Z0NBRWQsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0NBRXZCLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO2dDQUV4QixFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztnQ0FFdkIsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0NBRW5DLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dDQUVuQyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztnQ0FFdkIsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0NBRW5DLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO2dDQUV2QixFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztnQ0FFbkMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0NBRXZCLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO2dDQUV2QixFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQzs0QkFDckMsQ0FBQzt5QkFDRixDQUFDLENBQ0gsQ0FBQztvQkFDSixDQUFDO29CQUNELE9BQU8sRUFBRSxHQUFHLEVBQUU7b0JBRWQsQ0FBQztpQkFDRixDQUFDLENBQ0gsQ0FBQztnQkFHRixFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFFbkMsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBRW5DLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3pCLENBQUM7U0FDRixDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQTlKRCw4QkE4SkMiLCJmaWxlIjoibmVvLW9uZS1zbWFydC1jb250cmFjdC1jb21waWxlci9zcmMvY29tcGlsZS9oZWxwZXIvY29tbW9uL0V4cEhlbHBlci5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0cyBmcm9tICd0eXBlc2NyaXB0JztcblxuaW1wb3J0IHsgU2NyaXB0QnVpbGRlciB9IGZyb20gJy4uLy4uL3NiJztcbmltcG9ydCB7IFZpc2l0T3B0aW9ucyB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IEhlbHBlciB9IGZyb20gJy4uL0hlbHBlcic7XG5cbi8vIElucHV0OiBbbiwgeF1cbi8vIE91dHB1dDogW251bWJlcl1cbmV4cG9ydCBjbGFzcyBFeHBIZWxwZXIgZXh0ZW5kcyBIZWxwZXIge1xuICBwdWJsaWMgZW1pdChzYjogU2NyaXB0QnVpbGRlciwgbm9kZTogdHMuTm9kZSwgb3B0aW9uc0luOiBWaXNpdE9wdGlvbnMpOiB2b2lkIHtcbiAgICBjb25zdCBvcHRpb25zID0gc2IucHVzaFZhbHVlT3B0aW9ucyhvcHRpb25zSW4pO1xuXG4gICAgc2IuZW1pdEhlbHBlcihcbiAgICAgIG5vZGUsXG4gICAgICBvcHRpb25zLFxuICAgICAgc2IuaGVscGVycy5pZih7XG4gICAgICAgIGNvbmRpdGlvbjogKCkgPT4ge1xuICAgICAgICAgIC8vIFtuLCB4LCBuXVxuICAgICAgICAgIHNiLmVtaXRPcChub2RlLCAnVFVDSycpO1xuICAgICAgICAgIC8vIFswLCBuLCB4LCBuXVxuICAgICAgICAgIHNiLmVtaXRQdXNoSW50KG5vZGUsIDApO1xuICAgICAgICAgIC8vIFtuID09PSAwLCB4LCBuXVxuICAgICAgICAgIHNiLmVtaXRPcChub2RlLCAnTlVNRVFVQUwnKTtcbiAgICAgICAgfSxcbiAgICAgICAgd2hlblRydWU6ICgpID0+IHtcbiAgICAgICAgICAvLyBbbl1cbiAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ0RST1AnKTtcbiAgICAgICAgICAvLyBbXVxuICAgICAgICAgIHNiLmVtaXRPcChub2RlLCAnRFJPUCcpO1xuICAgICAgICAgIC8vIFsxXVxuICAgICAgICAgIHNiLmVtaXRQdXNoSW50KG5vZGUsIDEpO1xuICAgICAgICB9LFxuICAgICAgICB3aGVuRmFsc2U6ICgpID0+IHtcbiAgICAgICAgICBzYi5lbWl0SGVscGVyKFxuICAgICAgICAgICAgbm9kZSxcbiAgICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICAgICBzYi5oZWxwZXJzLmlmKHtcbiAgICAgICAgICAgICAgY29uZGl0aW9uOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gW24sIHgsIG5dXG4gICAgICAgICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdPVkVSJyk7XG4gICAgICAgICAgICAgICAgLy8gWzAsIG4sIHgsIG5dXG4gICAgICAgICAgICAgICAgc2IuZW1pdFB1c2hJbnQobm9kZSwgMCk7XG4gICAgICAgICAgICAgICAgLy8gW24gPCAwLCB4LCBuXVxuICAgICAgICAgICAgICAgIHNiLmVtaXRPcChub2RlLCAnTFQnKTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgd2hlblRydWU6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBbMSwgeCwgbl1cbiAgICAgICAgICAgICAgICBzYi5lbWl0UHVzaEludChub2RlLCAxKTtcbiAgICAgICAgICAgICAgICAvLyBbeCwgMSwgbl1cbiAgICAgICAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ1NXQVAnKTtcbiAgICAgICAgICAgICAgICAvLyBbeCwgbl1cbiAgICAgICAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ0RJVicpO1xuICAgICAgICAgICAgICAgIC8vIFtuLCB4XVxuICAgICAgICAgICAgICAgIHNiLmVtaXRPcChub2RlLCAnU1dBUCcpO1xuICAgICAgICAgICAgICAgIC8vIFtuLCB4XVxuICAgICAgICAgICAgICAgIHNiLmVtaXRPcChub2RlLCAnTkVHQVRFJyk7XG4gICAgICAgICAgICAgICAgLy8gW3gsIG5dXG4gICAgICAgICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdTV0FQJyk7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgY29uc3QgeSA9IHNiLnNjb3BlLmFkZFVuaXF1ZSgpO1xuICAgICAgICAgIGNvbnN0IG4gPSBzYi5zY29wZS5hZGRVbmlxdWUoKTtcbiAgICAgICAgICBjb25zdCB4ID0gc2Iuc2NvcGUuYWRkVW5pcXVlKCk7XG5cbiAgICAgICAgICAvLyBbbl1cbiAgICAgICAgICBzYi5zY29wZS5zZXQoc2IsIG5vZGUsIG9wdGlvbnMsIHgpO1xuICAgICAgICAgIC8vIFtdXG4gICAgICAgICAgc2Iuc2NvcGUuc2V0KHNiLCBub2RlLCBvcHRpb25zLCBuKTtcbiAgICAgICAgICAvLyBbMV1cbiAgICAgICAgICBzYi5lbWl0UHVzaEludChub2RlLCAxKTtcbiAgICAgICAgICAvLyBbXVxuICAgICAgICAgIHNiLnNjb3BlLnNldChzYiwgbm9kZSwgb3B0aW9ucywgeSk7XG4gICAgICAgICAgc2IuZW1pdEhlbHBlcihcbiAgICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgICAgc2IuaGVscGVycy5mb3JMb29wKHtcbiAgICAgICAgICAgICAgY29uZGl0aW9uOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gW25dXG4gICAgICAgICAgICAgICAgc2Iuc2NvcGUuZ2V0KHNiLCBub2RlLCBvcHRpb25zLCBuKTtcbiAgICAgICAgICAgICAgICAvLyBbMSwgbl1cbiAgICAgICAgICAgICAgICBzYi5lbWl0UHVzaEludChub2RlLCAxKTtcbiAgICAgICAgICAgICAgICAvLyBbbiA+IDFdXG4gICAgICAgICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdHVCcpO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBlYWNoOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgc2IuZW1pdEhlbHBlcihcbiAgICAgICAgICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgICAgICAgICAgc2IuaGVscGVycy5pZih7XG4gICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbjogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIC8vIFtuXVxuICAgICAgICAgICAgICAgICAgICAgIHNiLnNjb3BlLmdldChzYiwgbm9kZSwgb3B0aW9ucywgbik7XG4gICAgICAgICAgICAgICAgICAgICAgLy8gW24sIG5dXG4gICAgICAgICAgICAgICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdEVVAnKTtcbiAgICAgICAgICAgICAgICAgICAgICAvLyBbMiwgbiwgbl1cbiAgICAgICAgICAgICAgICAgICAgICBzYi5lbWl0UHVzaEludChub2RlLCAyKTtcbiAgICAgICAgICAgICAgICAgICAgICAvLyBbbiAlIDIsIG5dXG4gICAgICAgICAgICAgICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdNT0QnKTtcbiAgICAgICAgICAgICAgICAgICAgICAvLyBbMCwgbiAlIDIsIG5dXG4gICAgICAgICAgICAgICAgICAgICAgc2IuZW1pdFB1c2hJbnQobm9kZSwgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgLy8gW24gJSAyID09IDAsIG5dXG4gICAgICAgICAgICAgICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdOVU1FUVVBTCcpO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB3aGVuVHJ1ZTogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIC8vIFsyLCBuXVxuICAgICAgICAgICAgICAgICAgICAgIHNiLmVtaXRQdXNoSW50KG5vZGUsIDIpO1xuICAgICAgICAgICAgICAgICAgICAgIC8vIFtuIC8gMl1cbiAgICAgICAgICAgICAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ0RJVicpO1xuICAgICAgICAgICAgICAgICAgICAgIC8vIFtdXG4gICAgICAgICAgICAgICAgICAgICAgc2Iuc2NvcGUuc2V0KHNiLCBub2RlLCBvcHRpb25zLCBuKTtcbiAgICAgICAgICAgICAgICAgICAgICAvLyBbeF1cbiAgICAgICAgICAgICAgICAgICAgICBzYi5zY29wZS5nZXQoc2IsIG5vZGUsIG9wdGlvbnMsIHgpO1xuICAgICAgICAgICAgICAgICAgICAgIC8vIFt4LCB4XVxuICAgICAgICAgICAgICAgICAgICAgIHNiLmVtaXRPcChub2RlLCAnRFVQJyk7XG4gICAgICAgICAgICAgICAgICAgICAgLy8gW3ggKiB4XVxuICAgICAgICAgICAgICAgICAgICAgIHNiLmVtaXRPcChub2RlLCAnTVVMJyk7XG4gICAgICAgICAgICAgICAgICAgICAgLy8gW11cbiAgICAgICAgICAgICAgICAgICAgICBzYi5zY29wZS5zZXQoc2IsIG5vZGUsIG9wdGlvbnMsIHgpO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB3aGVuRmFsc2U6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAvLyBbbiAtIDFdXG4gICAgICAgICAgICAgICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdERUMnKTtcbiAgICAgICAgICAgICAgICAgICAgICAvLyBbMiwgbl1cbiAgICAgICAgICAgICAgICAgICAgICBzYi5lbWl0UHVzaEludChub2RlLCAyKTtcbiAgICAgICAgICAgICAgICAgICAgICAvLyBbbiAvIDJdXG4gICAgICAgICAgICAgICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdESVYnKTtcbiAgICAgICAgICAgICAgICAgICAgICAvLyBbXVxuICAgICAgICAgICAgICAgICAgICAgIHNiLnNjb3BlLnNldChzYiwgbm9kZSwgb3B0aW9ucywgbik7XG4gICAgICAgICAgICAgICAgICAgICAgLy8gW3hdXG4gICAgICAgICAgICAgICAgICAgICAgc2Iuc2NvcGUuZ2V0KHNiLCBub2RlLCBvcHRpb25zLCB4KTtcbiAgICAgICAgICAgICAgICAgICAgICAvLyBbeCwgeF1cbiAgICAgICAgICAgICAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ0RVUCcpO1xuICAgICAgICAgICAgICAgICAgICAgIC8vIFt5LCB4LCB4XVxuICAgICAgICAgICAgICAgICAgICAgIHNiLnNjb3BlLmdldChzYiwgbm9kZSwgb3B0aW9ucywgeSk7XG4gICAgICAgICAgICAgICAgICAgICAgLy8gW3ggKiB5LCB4XVxuICAgICAgICAgICAgICAgICAgICAgIHNiLmVtaXRPcChub2RlLCAnTVVMJyk7XG4gICAgICAgICAgICAgICAgICAgICAgLy8gW3hdXG4gICAgICAgICAgICAgICAgICAgICAgc2Iuc2NvcGUuc2V0KHNiLCBub2RlLCBvcHRpb25zLCB5KTtcbiAgICAgICAgICAgICAgICAgICAgICAvLyBbeCwgeF1cbiAgICAgICAgICAgICAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ0RVUCcpO1xuICAgICAgICAgICAgICAgICAgICAgIC8vIFt4ICogeF1cbiAgICAgICAgICAgICAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ01VTCcpO1xuICAgICAgICAgICAgICAgICAgICAgIC8vIFtdXG4gICAgICAgICAgICAgICAgICAgICAgc2Iuc2NvcGUuc2V0KHNiLCBub2RlLCBvcHRpb25zLCB4KTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGNsZWFudXA6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBkbyBub3RoaW5nXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgLy8gW3hdXG4gICAgICAgICAgc2Iuc2NvcGUuZ2V0KHNiLCBub2RlLCBvcHRpb25zLCB4KTtcbiAgICAgICAgICAvLyBbeSwgeF1cbiAgICAgICAgICBzYi5zY29wZS5nZXQoc2IsIG5vZGUsIG9wdGlvbnMsIHkpO1xuICAgICAgICAgIC8vIFt4ICogeV1cbiAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ01VTCcpO1xuICAgICAgICB9LFxuICAgICAgfSksXG4gICAgKTtcbiAgfVxufVxuIl19