@neo-one/smart-contract-compiler
Version:
NEO•ONE TypeScript smart contract compiler.
49 lines (47 loc) • 6.79 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const constants_1 = require("../../constants");
const Helper_1 = require("../Helper");
class CacheStorageHelper extends Helper_1.Helper {
constructor() {
super(...arguments);
this.needsGlobal = true;
this.needsGlobalOut = true;
}
emitGlobal(sb, node, _options) {
sb.emitPushInt(node, constants_1.GlobalProperty.CacheStorage);
sb.emitOp(node, 'NEWMAP');
sb.emitOp(node, 'SETITEM');
}
emitGlobalOut(sb, node, optionsIn) {
const options = sb.pushValueOptions(optionsIn);
sb.emitPushInt(node, constants_1.GlobalProperty.CacheStorage);
sb.emitOp(node, 'PICKITEM');
sb.emitSysCall(node, 'Neo.Runtime.GetTrigger');
sb.emitPushInt(node, 0x10);
sb.emitHelper(node, options, sb.helpers.if({
condition: () => {
sb.emitOp(node, 'NUMEQUAL');
},
whenTrue: () => {
sb.emitHelper(node, options, sb.helpers.mapForEach({
each: () => {
sb.emitSysCall(node, 'Neo.Storage.GetContext');
sb.emitSysCall(node, 'Neo.Storage.Put');
},
}));
},
whenFalse: () => {
sb.emitOp(node, 'DROP');
},
}));
}
emit(sb, node, options) {
if (!options.pushValue) {
return;
}
sb.emitHelper(node, options, sb.helpers.getGlobalProperty({ property: constants_1.GlobalProperty.CacheStorage }));
}
}
exports.CacheStorageHelper = CacheStorageHelper;
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkNhY2hlU3RvcmFnZUhlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUNBLCtDQUFpRDtBQUdqRCxzQ0FBbUM7QUFJbkMsTUFBYSxrQkFBbUIsU0FBUSxlQUFNO0lBQTlDOztRQUNrQixnQkFBVyxHQUFZLElBQUksQ0FBQztRQUM1QixtQkFBYyxHQUFHLElBQUksQ0FBQztJQTZEeEMsQ0FBQztJQTNEUSxVQUFVLENBQUMsRUFBaUIsRUFBRSxJQUFhLEVBQUUsUUFBc0I7UUFFeEUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsMEJBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUVsRCxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztRQUUxQixFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRU0sYUFBYSxDQUFDLEVBQWlCLEVBQUUsSUFBYSxFQUFFLFNBQXVCO1FBQzVFLE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUcvQyxFQUFFLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSwwQkFBYyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRWxELEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBRTVCLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLHdCQUF3QixDQUFDLENBQUM7UUFFL0MsRUFBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDM0IsRUFBRSxDQUFDLFVBQVUsQ0FDWCxJQUFJLEVBQ0osT0FBTyxFQUNQLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1osU0FBUyxFQUFFLEdBQUcsRUFBRTtnQkFFZCxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQztZQUM5QixDQUFDO1lBQ0QsUUFBUSxFQUFFLEdBQUcsRUFBRTtnQkFFYixFQUFFLENBQUMsVUFBVSxDQUNYLElBQUksRUFDSixPQUFPLEVBQ1AsRUFBRSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUM7b0JBQ3BCLElBQUksRUFBRSxHQUFHLEVBQUU7d0JBRVQsRUFBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsd0JBQXdCLENBQUMsQ0FBQzt3QkFFL0MsRUFBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztvQkFDMUMsQ0FBQztpQkFDRixDQUFDLENBQ0gsQ0FBQztZQUNKLENBQUM7WUFDRCxTQUFTLEVBQUUsR0FBRyxFQUFFO2dCQUVkLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQzFCLENBQUM7U0FDRixDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFTSxJQUFJLENBQUMsRUFBaUIsRUFBRSxJQUFhLEVBQUUsT0FBcUI7UUFDakUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUU7WUFFdEIsT0FBTztTQUNSO1FBRUQsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsRUFBRSxRQUFRLEVBQUUsMEJBQWMsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDeEcsQ0FBQztDQUNGO0FBL0RELGdEQStEQyIsImZpbGUiOiJuZW8tb25lLXNtYXJ0LWNvbnRyYWN0LWNvbXBpbGVyL3NyYy9jb21waWxlL2hlbHBlci9zdG9yYWdlL0NhY2hlU3RvcmFnZUhlbHBlci5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0cyBmcm9tICd0eXBlc2NyaXB0JztcbmltcG9ydCB7IEdsb2JhbFByb3BlcnR5IH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IFNjcmlwdEJ1aWxkZXIgfSBmcm9tICcuLi8uLi9zYic7XG5pbXBvcnQgeyBWaXNpdE9wdGlvbnMgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBIZWxwZXIgfSBmcm9tICcuLi9IZWxwZXInO1xuXG4vLyBJbnB1dDogW11cbi8vIE91dHB1dDogW3ZhbHVlXVxuZXhwb3J0IGNsYXNzIENhY2hlU3RvcmFnZUhlbHBlciBleHRlbmRzIEhlbHBlciB7XG4gIHB1YmxpYyByZWFkb25seSBuZWVkc0dsb2JhbDogYm9vbGVhbiA9IHRydWU7XG4gIHB1YmxpYyByZWFkb25seSBuZWVkc0dsb2JhbE91dCA9IHRydWU7XG5cbiAgcHVibGljIGVtaXRHbG9iYWwoc2I6IFNjcmlwdEJ1aWxkZXIsIG5vZGU6IHRzLk5vZGUsIF9vcHRpb25zOiBWaXNpdE9wdGlvbnMpOiB2b2lkIHtcbiAgICAvLyBbbnVtYmVyLCBnbG9iYWxPYmplY3RdXG4gICAgc2IuZW1pdFB1c2hJbnQobm9kZSwgR2xvYmFsUHJvcGVydHkuQ2FjaGVTdG9yYWdlKTtcbiAgICAvLyBbbWFwLCBudW1iZXIsIGdsb2JhbE9iamVjdF1cbiAgICBzYi5lbWl0T3Aobm9kZSwgJ05FV01BUCcpO1xuICAgIC8vIFtdXG4gICAgc2IuZW1pdE9wKG5vZGUsICdTRVRJVEVNJyk7XG4gIH1cblxuICBwdWJsaWMgZW1pdEdsb2JhbE91dChzYjogU2NyaXB0QnVpbGRlciwgbm9kZTogdHMuTm9kZSwgb3B0aW9uc0luOiBWaXNpdE9wdGlvbnMpOiB2b2lkIHtcbiAgICBjb25zdCBvcHRpb25zID0gc2IucHVzaFZhbHVlT3B0aW9ucyhvcHRpb25zSW4pO1xuXG4gICAgLy8gW251bWJlciwgZ2xvYmFsT2JqZWN0XVxuICAgIHNiLmVtaXRQdXNoSW50KG5vZGUsIEdsb2JhbFByb3BlcnR5LkNhY2hlU3RvcmFnZSk7XG4gICAgLy8gW21hcF1cbiAgICBzYi5lbWl0T3Aobm9kZSwgJ1BJQ0tJVEVNJyk7XG4gICAgLy8gW251bWJlciwgbWFwXVxuICAgIHNiLmVtaXRTeXNDYWxsKG5vZGUsICdOZW8uUnVudGltZS5HZXRUcmlnZ2VyJyk7XG4gICAgLy8gW251bWJlciwgbnVtYmVyLCBtYXBdXG4gICAgc2IuZW1pdFB1c2hJbnQobm9kZSwgMHgxMCk7XG4gICAgc2IuZW1pdEhlbHBlcihcbiAgICAgIG5vZGUsXG4gICAgICBvcHRpb25zLFxuICAgICAgc2IuaGVscGVycy5pZih7XG4gICAgICAgIGNvbmRpdGlvbjogKCkgPT4ge1xuICAgICAgICAgIC8vIFtib29sZWFuLCBtYXBdXG4gICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdOVU1FUVVBTCcpO1xuICAgICAgICB9LFxuICAgICAgICB3aGVuVHJ1ZTogKCkgPT4ge1xuICAgICAgICAgIC8vIFtdXG4gICAgICAgICAgc2IuZW1pdEhlbHBlcihcbiAgICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgICAgc2IuaGVscGVycy5tYXBGb3JFYWNoKHtcbiAgICAgICAgICAgICAgZWFjaDogKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIFtjb250ZXh0LCBrZXlCdWZmZXIsIHZhbEJ1ZmZlcl1cbiAgICAgICAgICAgICAgICBzYi5lbWl0U3lzQ2FsbChub2RlLCAnTmVvLlN0b3JhZ2UuR2V0Q29udGV4dCcpO1xuICAgICAgICAgICAgICAgIC8vIFtdXG4gICAgICAgICAgICAgICAgc2IuZW1pdFN5c0NhbGwobm9kZSwgJ05lby5TdG9yYWdlLlB1dCcpO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgKTtcbiAgICAgICAgfSxcbiAgICAgICAgd2hlbkZhbHNlOiAoKSA9PiB7XG4gICAgICAgICAgLy8gW11cbiAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ0RST1AnKTtcbiAgICAgICAgfSxcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgZW1pdChzYjogU2NyaXB0QnVpbGRlciwgbm9kZTogdHMuTm9kZSwgb3B0aW9uczogVmlzaXRPcHRpb25zKTogdm9pZCB7XG4gICAgaWYgKCFvcHRpb25zLnB1c2hWYWx1ZSkge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gW21hcF1cbiAgICBzYi5lbWl0SGVscGVyKG5vZGUsIG9wdGlvbnMsIHNiLmhlbHBlcnMuZ2V0R2xvYmFsUHJvcGVydHkoeyBwcm9wZXJ0eTogR2xvYmFsUHJvcGVydHkuQ2FjaGVTdG9yYWdlIH0pKTtcbiAgfVxufVxuIl19