@neo-one/smart-contract-compiler
Version:
NEO•ONE TypeScript smart contract compiler.
32 lines (30 loc) • 1.22 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.IterStorageHelper = void 0;
const Helper_1 = require("../Helper");
class IterStorageHelper extends Helper_1.Helper {
emit(sb, node, optionsIn) {
const options = sb.pushValueOptions(optionsIn);
sb.emitOp(node, 'DUP');
sb.emitSysCall(node, 'Neo.Storage.GetReadOnlyContext');
sb.emitSysCall(node, 'Neo.Storage.Find');
sb.emitOp(node, 'SWAP');
const key = sb.scope.addUnique();
sb.scope.set(sb, node, options, key);
sb.emitHelper(node, options, sb.helpers.cacheStorage);
sb.emitHelper(node, options, sb.helpers.mapFilter({
map: (innerOptions) => {
sb.emitOp(node, 'NIP');
sb.scope.get(sb, node, innerOptions, key);
sb.emitOp(node, 'TUCK');
sb.emitOp(node, 'SIZE');
sb.emitOp(node, 'LEFT');
sb.emitOp(node, 'EQUAL');
},
}));
sb.emitSysCall(node, 'Neo.Iterator.Create');
sb.emitSysCall(node, 'Neo.Iterator.Concat');
}
}
exports.IterStorageHelper = IterStorageHelper;
//# sourceMappingURL=IterStorageHelper.js.map