@neo-one/smart-contract-compiler
Version:
NEO•ONE TypeScript smart contract compiler.
28 lines (26 loc) • 5.17 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const StructuredStorageBaseHelper_1 = require("./StructuredStorageBaseHelper");
class ForEachFuncStructuredStorageHelper extends StructuredStorageBaseHelper_1.StructuredStorageBaseHelper {
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.forEachFuncStructuredStorageBase({
type: this.type,
handleNext: (innerOptions) => {
sb.scope.get(sb, node, innerOptions, size);
sb.emitHelper(node, sb.pushValueOptions(innerOptions), sb.helpers.handleValueStructuredStorage);
sb.emitOp(node, 'SWAP');
sb.emitOp(node, 'ROT');
sb.emitPushInt(node, 2);
sb.emitOp(node, 'PACK');
sb.emitOp(node, 'SWAP');
},
}));
}
}
exports.ForEachFuncStructuredStorageHelper = ForEachFuncStructuredStorageHelper;
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkZvckVhY2hGdW5jU3RydWN0dXJlZFN0b3JhZ2VIZWxwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFHQSwrRUFBNEU7QUFJNUUsTUFBYSxrQ0FBbUMsU0FBUSx5REFBMkI7SUFDMUUsSUFBSSxDQUFDLEVBQWlCLEVBQUUsSUFBYSxFQUFFLFNBQXVCO1FBQ25FLE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUUvQyxNQUFNLElBQUksR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBRWxDLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRXhCLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLHdCQUF3QixDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFdkYsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDdEMsRUFBRSxDQUFDLFVBQVUsQ0FDWCxJQUFJLEVBQ0osU0FBUyxFQUNULEVBQUUsQ0FBQyxPQUFPLENBQUMsZ0NBQWdDLENBQUM7WUFDMUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2YsVUFBVSxFQUFFLENBQUMsWUFBWSxFQUFFLEVBQUU7Z0JBRTNCLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUUzQyxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO2dCQUVoRyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztnQkFFeEIsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBRXZCLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUV4QixFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztnQkFFeEIsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDMUIsQ0FBQztTQUNGLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztDQUNGO0FBbkNELGdGQW1DQyIsImZpbGUiOiJuZW8tb25lLXNtYXJ0LWNvbnRyYWN0LWNvbXBpbGVyL3NyYy9jb21waWxlL2hlbHBlci9zdG9yYWdlL0ZvckVhY2hGdW5jU3RydWN0dXJlZFN0b3JhZ2VIZWxwZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHMgZnJvbSAndHlwZXNjcmlwdCc7XG5pbXBvcnQgeyBTY3JpcHRCdWlsZGVyIH0gZnJvbSAnLi4vLi4vc2InO1xuaW1wb3J0IHsgVmlzaXRPcHRpb25zIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgU3RydWN0dXJlZFN0b3JhZ2VCYXNlSGVscGVyIH0gZnJvbSAnLi9TdHJ1Y3R1cmVkU3RvcmFnZUJhc2VIZWxwZXInO1xuXG4vLyBJbnB1dDogW29iamVjdFZhbCwgdmFsXVxuLy8gT3V0cHV0OiBbdmFsXVxuZXhwb3J0IGNsYXNzIEZvckVhY2hGdW5jU3RydWN0dXJlZFN0b3JhZ2VIZWxwZXIgZXh0ZW5kcyBTdHJ1Y3R1cmVkU3RvcmFnZUJhc2VIZWxwZXIge1xuICBwdWJsaWMgZW1pdChzYjogU2NyaXB0QnVpbGRlciwgbm9kZTogdHMuTm9kZSwgb3B0aW9uc0luOiBWaXNpdE9wdGlvbnMpOiB2b2lkIHtcbiAgICBjb25zdCBvcHRpb25zID0gc2IucHVzaFZhbHVlT3B0aW9ucyhvcHRpb25zSW4pO1xuXG4gICAgY29uc3Qgc2l6ZSA9IHNiLnNjb3BlLmFkZFVuaXF1ZSgpO1xuICAgIC8vIFt2YWwsIG9iamVjdFZhbCwgdmFsXVxuICAgIHNiLmVtaXRPcChub2RlLCAnT1ZFUicpO1xuICAgIC8vIFtzaXplLCBvYmplY3RWYWwsIHZhbF1cbiAgICBzYi5lbWl0SGVscGVyKG5vZGUsIG9wdGlvbnMsIHNiLmhlbHBlcnMuZ2V0U3RydWN0dXJlZFN0b3JhZ2VTaXplKHsgdHlwZTogdGhpcy50eXBlIH0pKTtcbiAgICAvLyBbb2JqZWN0VmFsLCB2YWxdXG4gICAgc2Iuc2NvcGUuc2V0KHNiLCBub2RlLCBvcHRpb25zLCBzaXplKTtcbiAgICBzYi5lbWl0SGVscGVyKFxuICAgICAgbm9kZSxcbiAgICAgIG9wdGlvbnNJbixcbiAgICAgIHNiLmhlbHBlcnMuZm9yRWFjaEZ1bmNTdHJ1Y3R1cmVkU3RvcmFnZUJhc2Uoe1xuICAgICAgICB0eXBlOiB0aGlzLnR5cGUsXG4gICAgICAgIGhhbmRsZU5leHQ6IChpbm5lck9wdGlvbnMpID0+IHtcbiAgICAgICAgICAvLyBbc2l6ZSwgaXRlcmF0b3JdXG4gICAgICAgICAgc2Iuc2NvcGUuZ2V0KHNiLCBub2RlLCBpbm5lck9wdGlvbnMsIHNpemUpO1xuICAgICAgICAgIC8vIFtib29sZWFuLCBrZXlWYWwsIHZhbFZhbF1cbiAgICAgICAgICBzYi5lbWl0SGVscGVyKG5vZGUsIHNiLnB1c2hWYWx1ZU9wdGlvbnMoaW5uZXJPcHRpb25zKSwgc2IuaGVscGVycy5oYW5kbGVWYWx1ZVN0cnVjdHVyZWRTdG9yYWdlKTtcbiAgICAgICAgICAvLyBba2V5VmFsLCBib29sZWFuLCB2YWxWYWxdXG4gICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdTV0FQJyk7XG4gICAgICAgICAgLy8gW3ZhbFZhbCwga2V5VmFsLCBib29sZWFuXVxuICAgICAgICAgIHNiLmVtaXRPcChub2RlLCAnUk9UJyk7XG4gICAgICAgICAgLy8gWzIsIHZhbHVlVmFsLCBrZXlWYWwsIGJvb2xlYW5dXG4gICAgICAgICAgc2IuZW1pdFB1c2hJbnQobm9kZSwgMik7XG4gICAgICAgICAgLy8gW2FyZ3NhcnIsIGJvb2xlYW5dXG4gICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdQQUNLJyk7XG4gICAgICAgICAgLy8gW2Jvb2xlYW4sIGFyZ3NhcnJdXG4gICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdTV0FQJyk7XG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICApO1xuICB9XG59XG4iXX0=