@neo-one/smart-contract-compiler
Version:
NEO•ONE TypeScript smart contract compiler.
42 lines (40 loc) • 6.86 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const tslib_1 = require("tslib");
const StructuredStorageBaseHelper_1 = require("./StructuredStorageBaseHelper");
class StructuredStorageReduceHelper extends StructuredStorageBaseHelper_1.StructuredStorageBaseHelper {
constructor(_a) {
var { each } = _a, rest = tslib_1.__rest(_a, ["each"]);
super(rest);
this.each = each;
}
emit(sb, node, optionsIn) {
const options = sb.pushValueOptions(optionsIn);
const size = sb.scope.addUnique();
sb.emitOp(node, 'OVER');
sb.emitHelper(node, options, sb.helpers.getStructuredStorageSize({ type: this.type }));
sb.scope.set(sb, node, options, size);
sb.emitHelper(node, optionsIn, sb.helpers.structuredStorageReduceBase({
type: this.type,
each: (innerOptions) => {
sb.emitOp(node, 'SWAP');
sb.scope.get(sb, node, innerOptions, size);
sb.emitHelper(node, options, sb.helpers.if({
condition: () => {
sb.emitHelper(node, innerOptions, sb.helpers.handleValueStructuredStorage);
},
whenTrue: () => {
sb.emitOp(node, 'ROT');
this.each(innerOptions);
},
whenFalse: () => {
sb.emitOp(node, 'DROP');
sb.emitOp(node, 'DROP');
},
}));
},
}));
}
}
exports.StructuredStorageReduceHelper = StructuredStorageReduceHelper;
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlN0cnVjdHVyZWRTdG9yYWdlUmVkdWNlSGVscGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUdBLCtFQUFnSDtBQVFoSCxNQUFhLDZCQUE4QixTQUFRLHlEQUEyQjtJQUc1RSxZQUFtQixFQUF1RDtZQUF2RCxFQUFFLElBQUksT0FBaUQsRUFBL0MsbUNBQU87UUFDaEMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ1osSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7SUFDbkIsQ0FBQztJQUVNLElBQUksQ0FBQyxFQUFpQixFQUFFLElBQWEsRUFBRSxTQUF1QjtRQUNuRSxNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDL0MsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUVsQyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztRQUV4QixFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRXZGLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRXRDLEVBQUUsQ0FBQyxVQUFVLENBQ1gsSUFBSSxFQUNKLFNBQVMsRUFDVCxFQUFFLENBQUMsT0FBTyxDQUFDLDJCQUEyQixDQUFDO1lBQ3JDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNmLElBQUksRUFBRSxDQUFDLFlBQVksRUFBRSxFQUFFO2dCQUVyQixFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztnQkFFeEIsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQzNDLEVBQUUsQ0FBQyxVQUFVLENBQ1gsSUFBSSxFQUNKLE9BQU8sRUFDUCxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztvQkFDWixTQUFTLEVBQUUsR0FBRyxFQUFFO3dCQUVkLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLDRCQUE0QixDQUFDLENBQUM7b0JBQzdFLENBQUM7b0JBQ0QsUUFBUSxFQUFFLEdBQUcsRUFBRTt3QkFFYixFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQzt3QkFFdkIsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztvQkFDMUIsQ0FBQztvQkFDRCxTQUFTLEVBQUUsR0FBRyxFQUFFO3dCQUVkLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO3dCQUV4QixFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztvQkFDMUIsQ0FBQztpQkFDRixDQUFDLENBQ0gsQ0FBQztZQUNKLENBQUM7U0FDRixDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQXRERCxzRUFzREMiLCJmaWxlIjoibmVvLW9uZS1zbWFydC1jb250cmFjdC1jb21waWxlci9zcmMvY29tcGlsZS9oZWxwZXIvc3RvcmFnZS9TdHJ1Y3R1cmVkU3RvcmFnZVJlZHVjZUhlbHBlci5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0cyBmcm9tICd0eXBlc2NyaXB0JztcbmltcG9ydCB7IFNjcmlwdEJ1aWxkZXIgfSBmcm9tICcuLi8uLi9zYic7XG5pbXBvcnQgeyBWaXNpdE9wdGlvbnMgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBTdHJ1Y3R1cmVkU3RvcmFnZUJhc2VIZWxwZXIsIFN0cnVjdHVyZWRTdG9yYWdlQmFzZUhlbHBlck9wdGlvbnMgfSBmcm9tICcuL1N0cnVjdHVyZWRTdG9yYWdlQmFzZUhlbHBlcic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RydWN0dXJlZFN0b3JhZ2VSZWR1Y2VIZWxwZXJPcHRpb25zIGV4dGVuZHMgU3RydWN0dXJlZFN0b3JhZ2VCYXNlSGVscGVyT3B0aW9ucyB7XG4gIHJlYWRvbmx5IGVhY2g6IChvcHRpb25zOiBWaXNpdE9wdGlvbnMpID0+IHZvaWQ7XG59XG5cbi8vIElucHV0OiBbYWNjdW0sIHZhbF1cbi8vIE91dHB1dDogW2FjY3VtXVxuZXhwb3J0IGNsYXNzIFN0cnVjdHVyZWRTdG9yYWdlUmVkdWNlSGVscGVyIGV4dGVuZHMgU3RydWN0dXJlZFN0b3JhZ2VCYXNlSGVscGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBlYWNoOiAob3B0aW9uczogVmlzaXRPcHRpb25zKSA9PiB2b2lkO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcih7IGVhY2gsIC4uLnJlc3QgfTogU3RydWN0dXJlZFN0b3JhZ2VSZWR1Y2VIZWxwZXJPcHRpb25zKSB7XG4gICAgc3VwZXIocmVzdCk7XG4gICAgdGhpcy5lYWNoID0gZWFjaDtcbiAgfVxuXG4gIHB1YmxpYyBlbWl0KHNiOiBTY3JpcHRCdWlsZGVyLCBub2RlOiB0cy5Ob2RlLCBvcHRpb25zSW46IFZpc2l0T3B0aW9ucyk6IHZvaWQge1xuICAgIGNvbnN0IG9wdGlvbnMgPSBzYi5wdXNoVmFsdWVPcHRpb25zKG9wdGlvbnNJbik7XG4gICAgY29uc3Qgc2l6ZSA9IHNiLnNjb3BlLmFkZFVuaXF1ZSgpO1xuICAgIC8vIFt2YWwsIGFjY3VtLCB2YWxdXG4gICAgc2IuZW1pdE9wKG5vZGUsICdPVkVSJyk7XG4gICAgLy8gW3NpemUsIGFjY3VtLCB2YWxdXG4gICAgc2IuZW1pdEhlbHBlcihub2RlLCBvcHRpb25zLCBzYi5oZWxwZXJzLmdldFN0cnVjdHVyZWRTdG9yYWdlU2l6ZSh7IHR5cGU6IHRoaXMudHlwZSB9KSk7XG4gICAgLy8gW2FjY3VtLCB2YWxdXG4gICAgc2Iuc2NvcGUuc2V0KHNiLCBub2RlLCBvcHRpb25zLCBzaXplKTtcbiAgICAvLyBbYWNjdW1dXG4gICAgc2IuZW1pdEhlbHBlcihcbiAgICAgIG5vZGUsXG4gICAgICBvcHRpb25zSW4sXG4gICAgICBzYi5oZWxwZXJzLnN0cnVjdHVyZWRTdG9yYWdlUmVkdWNlQmFzZSh7XG4gICAgICAgIHR5cGU6IHRoaXMudHlwZSxcbiAgICAgICAgZWFjaDogKGlubmVyT3B0aW9ucykgPT4ge1xuICAgICAgICAgIC8vIFtpdGVyYXRvciwgYWNjdW1dXG4gICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdTV0FQJyk7XG4gICAgICAgICAgLy8gW3NpemUsIGl0ZXJhdG9yLCBhY2N1bV1cbiAgICAgICAgICBzYi5zY29wZS5nZXQoc2IsIG5vZGUsIGlubmVyT3B0aW9ucywgc2l6ZSk7XG4gICAgICAgICAgc2IuZW1pdEhlbHBlcihcbiAgICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgICAgc2IuaGVscGVycy5pZih7XG4gICAgICAgICAgICAgIGNvbmRpdGlvbjogKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIFtib29sZWFuLCBrZXlWYWwsIHZhbFZhbCwgYWNjdW1dXG4gICAgICAgICAgICAgICAgc2IuZW1pdEhlbHBlcihub2RlLCBpbm5lck9wdGlvbnMsIHNiLmhlbHBlcnMuaGFuZGxlVmFsdWVTdHJ1Y3R1cmVkU3RvcmFnZSk7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHdoZW5UcnVlOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gW2FjY3VtLCBrZXlWYWwsIHZhbFZhbF1cbiAgICAgICAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ1JPVCcpO1xuICAgICAgICAgICAgICAgIC8vIFtdXG4gICAgICAgICAgICAgICAgdGhpcy5lYWNoKGlubmVyT3B0aW9ucyk7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHdoZW5GYWxzZTogKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIFt2YWxWYWwsIGFjY3VtXVxuICAgICAgICAgICAgICAgIHNiLmVtaXRPcChub2RlLCAnRFJPUCcpO1xuICAgICAgICAgICAgICAgIC8vIFthY2N1bV1cbiAgICAgICAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ0RST1AnKTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICk7XG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICApO1xuICB9XG59XG4iXX0=