@neo-one/smart-contract-compiler
Version:
NEO•ONE TypeScript smart contract compiler.
55 lines (53 loc) • 8.42 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const Helper_1 = require("../Helper");
class RawIteratorForEachFuncBaseHelper extends Helper_1.Helper {
constructor({ handleNext, hasFilter = false }) {
super();
this.handleNext = handleNext;
this.hasFilter = hasFilter;
}
emit(sb, node, optionsIn) {
const options = sb.pushValueOptions(optionsIn);
sb.emitHelper(node, options, sb.helpers.getCallable({}));
sb.emitOp(node, 'SWAP');
sb.emitHelper(node, options, sb.helpers.forLoop({
condition: () => {
sb.emitOp(node, 'DUP');
sb.emitSysCall(node, 'Neo.Enumerator.Next');
},
each: (innerOptionsIn) => {
const innerOptions = sb.pushValueOptions(innerOptionsIn);
sb.emitOp(node, 'DUP');
const handleCall = () => {
sb.emitPushInt(node, 2);
sb.emitOp(node, 'PICK');
sb.emitHelper(node, sb.noPushValueOptions(innerOptions), sb.helpers.call);
};
if (this.hasFilter) {
sb.emitHelper(node, innerOptions, sb.helpers.if({
condition: () => {
this.handleNext(innerOptions);
},
whenTrue: () => {
handleCall();
},
whenFalse: () => {
sb.emitOp(node, 'DROP');
},
}));
}
else {
this.handleNext(innerOptions);
handleCall();
}
},
cleanup: () => {
sb.emitOp(node, 'DROP');
sb.emitOp(node, 'DROP');
},
}));
}
}
exports.RawIteratorForEachFuncBaseHelper = RawIteratorForEachFuncBaseHelper;
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlJhd0l0ZXJhdG9yRm9yRWFjaEZ1bmNCYXNlSGVscGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBR0Esc0NBQW1DO0FBU25DLE1BQWEsZ0NBQWlDLFNBQVEsZUFBTTtJQUkxRCxZQUFtQixFQUFFLFVBQVUsRUFBRSxTQUFTLEdBQUcsS0FBSyxFQUEyQztRQUMzRixLQUFLLEVBQUUsQ0FBQztRQUNSLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1FBQzdCLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO0lBQzdCLENBQUM7SUFFTSxJQUFJLENBQUMsRUFBaUIsRUFBRSxJQUFhLEVBQUUsU0FBdUI7UUFDbkUsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRy9DLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRXpELEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3hCLEVBQUUsQ0FBQyxVQUFVLENBQ1gsSUFBSSxFQUNKLE9BQU8sRUFDUCxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQztZQUNqQixTQUFTLEVBQUUsR0FBRyxFQUFFO2dCQUVkLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUV2QixFQUFFLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO1lBQzlDLENBQUM7WUFDRCxJQUFJLEVBQUUsQ0FBQyxjQUFjLEVBQUUsRUFBRTtnQkFDdkIsTUFBTSxZQUFZLEdBQUcsRUFBRSxDQUFDLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxDQUFDO2dCQUV6RCxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFFdkIsTUFBTSxVQUFVLEdBQUcsR0FBRyxFQUFFO29CQUV0QixFQUFFLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFFeEIsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7b0JBRXhCLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUM1RSxDQUFDLENBQUM7Z0JBRUYsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO29CQUNsQixFQUFFLENBQUMsVUFBVSxDQUNYLElBQUksRUFDSixZQUFZLEVBQ1osRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7d0JBQ1osU0FBUyxFQUFFLEdBQUcsRUFBRTs0QkFFZCxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDO3dCQUNoQyxDQUFDO3dCQUNELFFBQVEsRUFBRSxHQUFHLEVBQUU7NEJBRWIsVUFBVSxFQUFFLENBQUM7d0JBQ2YsQ0FBQzt3QkFDRCxTQUFTLEVBQUUsR0FBRyxFQUFFOzRCQUVkLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO3dCQUMxQixDQUFDO3FCQUNGLENBQUMsQ0FDSCxDQUFDO2lCQUNIO3FCQUFNO29CQUVMLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUM7b0JBRTlCLFVBQVUsRUFBRSxDQUFDO2lCQUNkO1lBQ0gsQ0FBQztZQUNELE9BQU8sRUFBRSxHQUFHLEVBQUU7Z0JBRVosRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBRXhCLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQzFCLENBQUM7U0FDRixDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQTVFRCw0RUE0RUMiLCJmaWxlIjoibmVvLW9uZS1zbWFydC1jb250cmFjdC1jb21waWxlci9zcmMvY29tcGlsZS9oZWxwZXIvaXRlcmF0b3IvUmF3SXRlcmF0b3JGb3JFYWNoRnVuY0Jhc2VIZWxwZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHMgZnJvbSAndHlwZXNjcmlwdCc7XG5pbXBvcnQgeyBTY3JpcHRCdWlsZGVyIH0gZnJvbSAnLi4vLi4vc2InO1xuaW1wb3J0IHsgVmlzaXRPcHRpb25zIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgSGVscGVyIH0gZnJvbSAnLi4vSGVscGVyJztcblxuZXhwb3J0IGludGVyZmFjZSBSYXdJdGVyYXRvckZvckVhY2hGdW5jQmFzZUhlbHBlck9wdGlvbnMge1xuICByZWFkb25seSBoYW5kbGVOZXh0OiAob3B0aW9uczogVmlzaXRPcHRpb25zKSA9PiB2b2lkO1xuICByZWFkb25seSBoYXNGaWx0ZXI/OiBib29sZWFuO1xufVxuXG4vLyBJbnB1dDogW29iamVjdFZhbCwgaXRlcmF0b3JdXG4vLyBPdXRwdXQ6IFtdXG5leHBvcnQgY2xhc3MgUmF3SXRlcmF0b3JGb3JFYWNoRnVuY0Jhc2VIZWxwZXIgZXh0ZW5kcyBIZWxwZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IGhhbmRsZU5leHQ6IChvcHRpb25zOiBWaXNpdE9wdGlvbnMpID0+IHZvaWQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgaGFzRmlsdGVyOiBib29sZWFuO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcih7IGhhbmRsZU5leHQsIGhhc0ZpbHRlciA9IGZhbHNlIH06IFJhd0l0ZXJhdG9yRm9yRWFjaEZ1bmNCYXNlSGVscGVyT3B0aW9ucykge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5oYW5kbGVOZXh0ID0gaGFuZGxlTmV4dDtcbiAgICB0aGlzLmhhc0ZpbHRlciA9IGhhc0ZpbHRlcjtcbiAgfVxuXG4gIHB1YmxpYyBlbWl0KHNiOiBTY3JpcHRCdWlsZGVyLCBub2RlOiB0cy5Ob2RlLCBvcHRpb25zSW46IFZpc2l0T3B0aW9ucyk6IHZvaWQge1xuICAgIGNvbnN0IG9wdGlvbnMgPSBzYi5wdXNoVmFsdWVPcHRpb25zKG9wdGlvbnNJbik7XG5cbiAgICAvLyBbY2FsbGFibGUsIGl0ZXJhdG9yXVxuICAgIHNiLmVtaXRIZWxwZXIobm9kZSwgb3B0aW9ucywgc2IuaGVscGVycy5nZXRDYWxsYWJsZSh7fSkpO1xuICAgIC8vIFtpdGVyYXRvciwgY2FsbGFibGVdXG4gICAgc2IuZW1pdE9wKG5vZGUsICdTV0FQJyk7XG4gICAgc2IuZW1pdEhlbHBlcihcbiAgICAgIG5vZGUsXG4gICAgICBvcHRpb25zLFxuICAgICAgc2IuaGVscGVycy5mb3JMb29wKHtcbiAgICAgICAgY29uZGl0aW9uOiAoKSA9PiB7XG4gICAgICAgICAgLy8gW2l0ZXJhdG9yLCBpdGVyYXRvciwgY2FsbGFibGVdXG4gICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdEVVAnKTtcbiAgICAgICAgICAvLyBbYm9vbGVhbiwgaXRlcmF0b3IsIGNhbGxhYmxlXVxuICAgICAgICAgIHNiLmVtaXRTeXNDYWxsKG5vZGUsICdOZW8uRW51bWVyYXRvci5OZXh0Jyk7XG4gICAgICAgIH0sXG4gICAgICAgIGVhY2g6IChpbm5lck9wdGlvbnNJbikgPT4ge1xuICAgICAgICAgIGNvbnN0IGlubmVyT3B0aW9ucyA9IHNiLnB1c2hWYWx1ZU9wdGlvbnMoaW5uZXJPcHRpb25zSW4pO1xuICAgICAgICAgIC8vIFtpdGVyYXRvciwgaXRlcmF0b3IsIGNhbGxhYmxlXVxuICAgICAgICAgIHNiLmVtaXRPcChub2RlLCAnRFVQJyk7XG5cbiAgICAgICAgICBjb25zdCBoYW5kbGVDYWxsID0gKCkgPT4ge1xuICAgICAgICAgICAgLy8gWzIsIGFyZ3NhcnIsIGl0ZXJhdG9yLCBjYWxsYWJsZV1cbiAgICAgICAgICAgIHNiLmVtaXRQdXNoSW50KG5vZGUsIDIpO1xuICAgICAgICAgICAgLy8gW2NhbGxhYmxlLCBhcmdzYXJyLCBpdGVyYXRvciwgY2FsbGFibGVdXG4gICAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ1BJQ0snKTtcbiAgICAgICAgICAgIC8vIFtpdGVyYXRvciwgY2FsbGFibGVdXG4gICAgICAgICAgICBzYi5lbWl0SGVscGVyKG5vZGUsIHNiLm5vUHVzaFZhbHVlT3B0aW9ucyhpbm5lck9wdGlvbnMpLCBzYi5oZWxwZXJzLmNhbGwpO1xuICAgICAgICAgIH07XG5cbiAgICAgICAgICBpZiAodGhpcy5oYXNGaWx0ZXIpIHtcbiAgICAgICAgICAgIHNiLmVtaXRIZWxwZXIoXG4gICAgICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgICAgIGlubmVyT3B0aW9ucyxcbiAgICAgICAgICAgICAgc2IuaGVscGVycy5pZih7XG4gICAgICAgICAgICAgICAgY29uZGl0aW9uOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAvLyBbYm9vbGVhbiwgYXJnc2FyciwgaXRlcmF0b3IsIGNhbGxhYmxlXVxuICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVOZXh0KGlubmVyT3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB3aGVuVHJ1ZTogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgLy8gW2l0ZXJhdG9yLCBjYWxsYWJsZV1cbiAgICAgICAgICAgICAgICAgIGhhbmRsZUNhbGwoKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHdoZW5GYWxzZTogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgLy8gW2l0ZXJhdG9yLCBjYWxsYWJsZV1cbiAgICAgICAgICAgICAgICAgIHNiLmVtaXRPcChub2RlLCAnRFJPUCcpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gW2FyZ3NhcnIsIGl0ZXJhdG9yLCBjYWxsYWJsZV1cbiAgICAgICAgICAgIHRoaXMuaGFuZGxlTmV4dChpbm5lck9wdGlvbnMpO1xuICAgICAgICAgICAgLy8gW2l0ZXJhdG9yLCBjYWxsYWJsZV1cbiAgICAgICAgICAgIGhhbmRsZUNhbGwoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNsZWFudXA6ICgpID0+IHtcbiAgICAgICAgICAvLyBbY2FsbGFibGVdXG4gICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdEUk9QJyk7XG4gICAgICAgICAgLy8gW11cbiAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ0RST1AnKTtcbiAgICAgICAgfSxcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cbn1cbiJdfQ==