@neo-one/smart-contract-compiler
Version:
NEO•ONE TypeScript smart contract compiler.
51 lines (49 loc) • 8.79 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const Helper_1 = require("../Helper");
class ArrForEachFuncHelper extends Helper_1.Helper {
emit(sb, node, optionsIn) {
const options = sb.pushValueOptions(optionsIn);
sb.emitHelper(node, options, sb.helpers.getCallable({}));
sb.emitOp(node, 'SWAP');
sb.emitOp(node, 'DUP');
sb.emitOp(node, 'ARRAYSIZE');
sb.emitPushInt(node, 0);
sb.emitHelper(node, options, sb.helpers.forLoop({
condition: () => {
sb.emitOp(node, 'SWAP');
sb.emitOp(node, 'TUCK');
sb.emitOp(node, 'OVER');
sb.emitOp(node, 'GT');
},
each: (innerOptions) => {
sb.emitOp(node, 'DUP');
sb.emitHelper(node, options, sb.helpers.wrapNumber);
sb.emitPushInt(node, 3);
sb.emitOp(node, 'PICK');
sb.emitPushInt(node, 2);
sb.emitOp(node, 'PICK');
sb.emitOp(node, 'PICKITEM');
sb.emitPushInt(node, 2);
sb.emitOp(node, 'PACK');
sb.emitPushInt(node, 4);
sb.emitOp(node, 'PICK');
sb.emitHelper(node, sb.noPushValueOptions(innerOptions), sb.helpers.call);
},
incrementor: () => {
sb.emitOp(node, 'INC');
},
cleanup: () => {
sb.emitOp(node, 'DROP');
sb.emitOp(node, 'DROP');
sb.emitOp(node, 'DROP');
sb.emitOp(node, 'DROP');
if (optionsIn.pushValue) {
sb.emitHelper(node, options, sb.helpers.wrapUndefined);
}
},
}));
}
}
exports.ArrForEachFuncHelper = ArrForEachFuncHelper;
//# sourceMappingURL=data:application/json;charset=utf8;base64,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Q0FBQyxDQUFDO2dCQUV4QixFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztnQkFFeEIsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBRXhCLElBQUksU0FBUyxDQUFDLFNBQVMsRUFBRTtvQkFDdkIsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUM7aUJBQ3hEO1lBQ0gsQ0FBQztTQUNGLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztDQUNGO0FBNUVELG9EQTRFQyIsImZpbGUiOiJuZW8tb25lLXNtYXJ0LWNvbnRyYWN0LWNvbXBpbGVyL3NyYy9jb21waWxlL2hlbHBlci9hcnIvQXJyRm9yRWFjaEZ1bmNIZWxwZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHMgZnJvbSAndHlwZXNjcmlwdCc7XG5pbXBvcnQgeyBTY3JpcHRCdWlsZGVyIH0gZnJvbSAnLi4vLi4vc2InO1xuaW1wb3J0IHsgVmlzaXRPcHRpb25zIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgSGVscGVyIH0gZnJvbSAnLi4vSGVscGVyJztcblxuLy8gSW5wdXQ6IFtvYmplY3RWYWwsIGFycl1cbi8vIE91dHB1dDogW11cbmV4cG9ydCBjbGFzcyBBcnJGb3JFYWNoRnVuY0hlbHBlciBleHRlbmRzIEhlbHBlciB7XG4gIHB1YmxpYyBlbWl0KHNiOiBTY3JpcHRCdWlsZGVyLCBub2RlOiB0cy5Ob2RlLCBvcHRpb25zSW46IFZpc2l0T3B0aW9ucyk6IHZvaWQge1xuICAgIGNvbnN0IG9wdGlvbnMgPSBzYi5wdXNoVmFsdWVPcHRpb25zKG9wdGlvbnNJbik7XG5cbiAgICAvLyBbY2FsbGFibGUsIGFycl1cbiAgICBzYi5lbWl0SGVscGVyKG5vZGUsIG9wdGlvbnMsIHNiLmhlbHBlcnMuZ2V0Q2FsbGFibGUoe30pKTtcbiAgICAvLyBbYXJyLCBjYWxsYWJsZV1cbiAgICBzYi5lbWl0T3Aobm9kZSwgJ1NXQVAnKTtcbiAgICAvLyBbYXJyLCBhcnIsIGNhbGxhYmxlXVxuICAgIHNiLmVtaXRPcChub2RlLCAnRFVQJyk7XG4gICAgLy8gW3NpemUsIGFyciwgY2FsbGFibGVdXG4gICAgc2IuZW1pdE9wKG5vZGUsICdBUlJBWVNJWkUnKTtcbiAgICAvLyBbaWR4LCBzaXplLCBhcnIsIGNhbGxhYmxlXVxuICAgIHNiLmVtaXRQdXNoSW50KG5vZGUsIDApO1xuICAgIHNiLmVtaXRIZWxwZXIoXG4gICAgICBub2RlLFxuICAgICAgb3B0aW9ucyxcbiAgICAgIHNiLmhlbHBlcnMuZm9yTG9vcCh7XG4gICAgICAgIGNvbmRpdGlvbjogKCkgPT4ge1xuICAgICAgICAgIC8vIFtzaXplLCBpZHgsIGFyciwgY2FsbGFibGVdXG4gICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdTV0FQJyk7XG4gICAgICAgICAgLy8gW3NpemUsIGlkeCwgc2l6ZSwgYXJyLCBjYWxsYWJsZV1cbiAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ1RVQ0snKTtcbiAgICAgICAgICAvLyBbaWR4LCBzaXplLCBpZHgsIHNpemUsIGFyciwgY2FsbGFibGVdXG4gICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdPVkVSJyk7XG4gICAgICAgICAgLy8gc2l6ZSA+IGlkeFxuICAgICAgICAgIC8vIFtzaXplID4gaWR4LCBpZHgsIHNpemUsIGFyciwgY2FsbGFibGVdXG4gICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdHVCcpO1xuICAgICAgICB9LFxuICAgICAgICBlYWNoOiAoaW5uZXJPcHRpb25zKSA9PiB7XG4gICAgICAgICAgLy8gW2lkeCwgaWR4LCBzaXplLCBhcnIsIGNhbGxhYmxlXVxuICAgICAgICAgIHNiLmVtaXRPcChub2RlLCAnRFVQJyk7XG4gICAgICAgICAgLy8gW2lkeFZhbCwgaWR4LCBzaXplLCBhcnIsIGNhbGxhYmxlXVxuICAgICAgICAgIHNiLmVtaXRIZWxwZXIobm9kZSwgb3B0aW9ucywgc2IuaGVscGVycy53cmFwTnVtYmVyKTtcbiAgICAgICAgICAvLyBbMywgaWR4VmFsLCBpZHgsIHNpemUsIGFyciwgY2FsbGFibGVdXG4gICAgICAgICAgc2IuZW1pdFB1c2hJbnQobm9kZSwgMyk7XG4gICAgICAgICAgLy8gW2FyciwgaWR4VmFsLCBpZHgsIHNpemUsIGFyciwgY2FsbGFibGVdXG4gICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdQSUNLJyk7XG4gICAgICAgICAgLy8gWzIsIGFyciwgaWR4VmFsLCBpZHgsIHNpemUsIGFyciwgY2FsbGFibGVdXG4gICAgICAgICAgc2IuZW1pdFB1c2hJbnQobm9kZSwgMik7XG4gICAgICAgICAgLy8gW2lkeCwgYXJyLCBpZHhWYWwsIGlkeCwgc2l6ZSwgYXJyLCBjYWxsYWJsZV1cbiAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ1BJQ0snKTtcbiAgICAgICAgICAvLyBbdmFsLCBpZHhWYWwsIGlkeCwgc2l6ZSwgYXJyLCBjYWxsYWJsZV1cbiAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ1BJQ0tJVEVNJyk7XG4gICAgICAgICAgLy8gWzIsIHZhbCwgaWR4VmFsLCBpZHgsIHNpemUsIGFyciwgY2FsbGFibGVdXG4gICAgICAgICAgc2IuZW1pdFB1c2hJbnQobm9kZSwgMik7XG4gICAgICAgICAgLy8gW2FyZ3NhcnIsIGlkeCwgc2l6ZSwgYXJyLCBjYWxsYWJsZV1cbiAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ1BBQ0snKTtcbiAgICAgICAgICAvLyBbNCwgYXJnc2FyciwgaWR4LCBzaXplLCBhcnIsIGNhbGxhYmxlXVxuICAgICAgICAgIHNiLmVtaXRQdXNoSW50KG5vZGUsIDQpO1xuICAgICAgICAgIC8vIFtjYWxsYWJsZSwgYXJnc2FyciwgaWR4LCBzaXplLCBhcnIsIGNhbGxhYmxlXVxuICAgICAgICAgIHNiLmVtaXRPcChub2RlLCAnUElDSycpO1xuICAgICAgICAgIC8vIFtpZHgsIHNpemUsIGFyciwgY2FsbGFibGVdXG4gICAgICAgICAgc2IuZW1pdEhlbHBlcihub2RlLCBzYi5ub1B1c2hWYWx1ZU9wdGlvbnMoaW5uZXJPcHRpb25zKSwgc2IuaGVscGVycy5jYWxsKTtcbiAgICAgICAgfSxcbiAgICAgICAgaW5jcmVtZW50b3I6ICgpID0+IHtcbiAgICAgICAgICAvLyBbaWR4LCBzaXplLCBhcnIsIGNhbGxhYmxlXVxuICAgICAgICAgIHNiLmVtaXRPcChub2RlLCAnSU5DJyk7XG4gICAgICAgIH0sXG4gICAgICAgIGNsZWFudXA6ICgpID0+IHtcbiAgICAgICAgICAvLyBbc2l6ZSwgYXJyLCBjYWxsYWJsZV1cbiAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ0RST1AnKTtcbiAgICAgICAgICAvLyBbYXJyLCBjYWxsYWJsZV1cbiAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ0RST1AnKTtcbiAgICAgICAgICAvLyBbY2FsbGFibGVdXG4gICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdEUk9QJyk7XG4gICAgICAgICAgLy8gW11cbiAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ0RST1AnKTtcblxuICAgICAgICAgIGlmIChvcHRpb25zSW4ucHVzaFZhbHVlKSB7XG4gICAgICAgICAgICBzYi5lbWl0SGVscGVyKG5vZGUsIG9wdGlvbnMsIHNiLmhlbHBlcnMud3JhcFVuZGVmaW5lZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgfSksXG4gICAgKTtcbiAgfVxufVxuIl19