@neo-one/smart-contract-compiler
Version:
NEO•ONE TypeScript smart contract compiler.
57 lines (55 loc) • 8.39 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const Helper_1 = require("../Helper");
class ArrFilterHelper extends Helper_1.Helper {
constructor(options) {
super();
this.map = options.map;
this.withIndex = options.withIndex || false;
}
emit(sb, node, options) {
const handleResult = (innerOptions) => {
sb.emitHelper(node, innerOptions, sb.helpers.if({
condition: () => {
this.map(innerOptions);
},
whenTrue: () => {
sb.emitOp(node, 'TUCK');
sb.emitOp(node, 'SWAP');
sb.emitOp(node, 'APPEND');
},
whenFalse: () => {
sb.emitOp(node, 'NIP');
},
}));
};
if (this.withIndex) {
sb.emitSysCall(node, 'Neo.Iterator.Create');
sb.emitPushInt(node, 0);
sb.emitOp(node, 'NEWARRAY');
sb.emitHelper(node, options, sb.helpers.rawIteratorReduce({
each: (innerOptions) => {
sb.emitOp(node, 'ROT');
sb.emitOp(node, 'TUCK');
sb.emitPushInt(node, 3);
sb.emitOp(node, 'ROLL');
sb.emitOp(node, 'SWAP');
handleResult(innerOptions);
},
}));
}
else {
sb.emitSysCall(node, 'Neo.Enumerator.Create');
sb.emitPushInt(node, 0);
sb.emitOp(node, 'NEWARRAY');
sb.emitHelper(node, options, sb.helpers.rawEnumeratorReduce({
each: (innerOptions) => {
sb.emitOp(node, 'OVER');
handleResult(innerOptions);
},
}));
}
}
}
exports.ArrFilterHelper = ArrFilterHelper;
//# sourceMappingURL=data:application/json;charset=utf8;base64,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QUFDO2dCQUM3QixDQUFDO2FBQ0YsQ0FBQyxDQUNILENBQUM7U0FDSDtJQUNILENBQUM7Q0FDRjtBQXZGRCwwQ0F1RkMiLCJmaWxlIjoibmVvLW9uZS1zbWFydC1jb250cmFjdC1jb21waWxlci9zcmMvY29tcGlsZS9oZWxwZXIvYXJyL0FyckZpbHRlckhlbHBlci5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0cyBmcm9tICd0eXBlc2NyaXB0JztcbmltcG9ydCB7IFNjcmlwdEJ1aWxkZXIgfSBmcm9tICcuLi8uLi9zYic7XG5pbXBvcnQgeyBWaXNpdE9wdGlvbnMgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBIZWxwZXIgfSBmcm9tICcuLi9IZWxwZXInO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFyckZpbHRlckhlbHBlck9wdGlvbnMge1xuICByZWFkb25seSBtYXA6IChvcHRpb25zOiBWaXNpdE9wdGlvbnMpID0+IHZvaWQ7XG4gIHJlYWRvbmx5IHdpdGhJbmRleD86IGJvb2xlYW47XG59XG5cbi8vIElucHV0OiBbYXJyXVxuLy8gT3V0cHV0OiBbYXJyXVxuZXhwb3J0IGNsYXNzIEFyckZpbHRlckhlbHBlciBleHRlbmRzIEhlbHBlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgbWFwOiAob3B0aW9uczogVmlzaXRPcHRpb25zKSA9PiB2b2lkO1xuICBwcml2YXRlIHJlYWRvbmx5IHdpdGhJbmRleDogYm9vbGVhbjtcblxuICBwdWJsaWMgY29uc3RydWN0b3Iob3B0aW9uczogQXJyRmlsdGVySGVscGVyT3B0aW9ucykge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5tYXAgPSBvcHRpb25zLm1hcDtcbiAgICB0aGlzLndpdGhJbmRleCA9IG9wdGlvbnMud2l0aEluZGV4IHx8IGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGVtaXQoc2I6IFNjcmlwdEJ1aWxkZXIsIG5vZGU6IHRzLk5vZGUsIG9wdGlvbnM6IFZpc2l0T3B0aW9ucyk6IHZvaWQge1xuICAgIGNvbnN0IGhhbmRsZVJlc3VsdCA9IChpbm5lck9wdGlvbnM6IFZpc2l0T3B0aW9ucykgPT4ge1xuICAgICAgc2IuZW1pdEhlbHBlcihcbiAgICAgICAgbm9kZSxcbiAgICAgICAgaW5uZXJPcHRpb25zLFxuICAgICAgICBzYi5oZWxwZXJzLmlmKHtcbiAgICAgICAgICBjb25kaXRpb246ICgpID0+IHtcbiAgICAgICAgICAgIC8vIFtib29sZWFuLCBhY2N1bSwgdmFsXVxuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lIG5vLW1hcC13aXRob3V0LXVzYWdlXG4gICAgICAgICAgICB0aGlzLm1hcChpbm5lck9wdGlvbnMpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgd2hlblRydWU6ICgpID0+IHtcbiAgICAgICAgICAgIC8vIFthY2N1bSwgdmFsLCBhY2N1bV1cbiAgICAgICAgICAgIHNiLmVtaXRPcChub2RlLCAnVFVDSycpO1xuICAgICAgICAgICAgLy8gW3ZhbCwgYWNjdW0sIGFjY3VtXVxuICAgICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdTV0FQJyk7XG4gICAgICAgICAgICAvLyBbYWNjdW1dXG4gICAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ0FQUEVORCcpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgd2hlbkZhbHNlOiAoKSA9PiB7XG4gICAgICAgICAgICAvLyBbYWNjdW1dXG4gICAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ05JUCcpO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMud2l0aEluZGV4KSB7XG4gICAgICAvLyBbaXRlcmF0b3JdXG4gICAgICBzYi5lbWl0U3lzQ2FsbChub2RlLCAnTmVvLkl0ZXJhdG9yLkNyZWF0ZScpO1xuICAgICAgLy8gWzAsIGl0ZXJhdG9yXVxuICAgICAgc2IuZW1pdFB1c2hJbnQobm9kZSwgMCk7XG4gICAgICAvLyBbYWNjdW0sIGl0ZXJhdG9yXVxuICAgICAgc2IuZW1pdE9wKG5vZGUsICdORVdBUlJBWScpO1xuICAgICAgLy8gW2FjY3VtXVxuICAgICAgc2IuZW1pdEhlbHBlcihcbiAgICAgICAgbm9kZSxcbiAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgc2IuaGVscGVycy5yYXdJdGVyYXRvclJlZHVjZSh7XG4gICAgICAgICAgZWFjaDogKGlubmVyT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgLy8gW3ZhbCwgYWNjdW0sIGlkeF1cbiAgICAgICAgICAgIHNiLmVtaXRPcChub2RlLCAnUk9UJyk7XG4gICAgICAgICAgICAvLyBbdmFsLCBhY2N1bSwgdmFsLCBpZHhdXG4gICAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ1RVQ0snKTtcbiAgICAgICAgICAgIC8vIFszLCB2YWwsIGFjY3VtLCB2YWwsIGlkeF1cbiAgICAgICAgICAgIHNiLmVtaXRQdXNoSW50KG5vZGUsIDMpO1xuICAgICAgICAgICAgLy8gW2lkeCwgdmFsLCBhY2N1bSwgdmFsXVxuICAgICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdST0xMJyk7XG4gICAgICAgICAgICAvLyBbdmFsLCBpZHgsIGFjY3VtLCB2YWxdXG4gICAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ1NXQVAnKTtcbiAgICAgICAgICAgIC8vIFthY2N1bV1cbiAgICAgICAgICAgIGhhbmRsZVJlc3VsdChpbm5lck9wdGlvbnMpO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gW2VudW1lcmF0b3JdXG4gICAgICBzYi5lbWl0U3lzQ2FsbChub2RlLCAnTmVvLkVudW1lcmF0b3IuQ3JlYXRlJyk7XG4gICAgICAvLyBbMCwgZW51bWVyYXRvcl1cbiAgICAgIHNiLmVtaXRQdXNoSW50KG5vZGUsIDApO1xuICAgICAgLy8gW2FjY3VtLCBlbnVtZXJhdG9yXVxuICAgICAgc2IuZW1pdE9wKG5vZGUsICdORVdBUlJBWScpO1xuICAgICAgLy8gW2FjY3VtXVxuICAgICAgc2IuZW1pdEhlbHBlcihcbiAgICAgICAgbm9kZSxcbiAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgc2IuaGVscGVycy5yYXdFbnVtZXJhdG9yUmVkdWNlKHtcbiAgICAgICAgICBlYWNoOiAoaW5uZXJPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICAvLyBbdmFsLCBhY2N1bSwgdmFsXVxuICAgICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdPVkVSJyk7XG4gICAgICAgICAgICAvLyBbYWNjdW1dXG4gICAgICAgICAgICBoYW5kbGVSZXN1bHQoaW5uZXJPcHRpb25zKTtcbiAgICAgICAgICB9LFxuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG4iXX0=