@neo-one/smart-contract-compiler
Version:
NEO•ONE TypeScript smart contract compiler.
38 lines (36 loc) • 6.38 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const ts_utils_1 = require("@neo-one/ts-utils");
const constants_1 = require("../../../constants");
const BuiltinInstanceMemberCall_1 = require("../../BuiltinInstanceMemberCall");
class ArrayStoragePush extends BuiltinInstanceMemberCall_1.BuiltinInstanceMemberCall {
canCall() {
return true;
}
emitCall(sb, func, node, optionsIn, visited) {
const options = sb.pushValueOptions(optionsIn);
if (!visited) {
sb.visit(ts_utils_1.tsUtils.expression.getExpression(func), options);
}
sb.emitOp(node, 'DUP');
sb.emitHelper(node, options, sb.helpers.getArrayStorageLength);
ts_utils_1.tsUtils.argumented.getArguments(node).forEach((arg) => {
sb.emitOp(node, 'SWAP');
sb.emitOp(node, 'TUCK');
sb.emitOp(node, 'OVER');
sb.emitHelper(node, options, sb.helpers.wrapNumber);
sb.visit(arg, options);
sb.emitHelper(node, optionsIn, sb.helpers.setStructuredStorage({ type: constants_1.Types.ArrayStorage, keyType: undefined, knownKeyType: constants_1.Types.Number }));
sb.emitOp(node, 'INC');
});
if (optionsIn.pushValue) {
sb.emitOp(node, 'TUCK');
}
sb.emitHelper(node, options, sb.helpers.putArrayStorageLength);
if (optionsIn.pushValue) {
sb.emitHelper(node, options, sb.helpers.wrapNumber);
}
}
}
exports.ArrayStoragePush = ArrayStoragePush;
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInB1c2gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxnREFBNEM7QUFFNUMsa0RBQTJDO0FBRzNDLCtFQUE0RTtBQUk1RSxNQUFhLGdCQUFpQixTQUFRLHFEQUF5QjtJQUN0RCxPQUFPO1FBQ1osT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRU0sUUFBUSxDQUNiLEVBQWlCLEVBQ2pCLElBQThCLEVBQzlCLElBQXVCLEVBQ3ZCLFNBQXVCLEVBQ3ZCLE9BQWdCO1FBRWhCLE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMvQyxJQUFJLENBQUMsT0FBTyxFQUFFO1lBRVosRUFBRSxDQUFDLEtBQUssQ0FBQyxrQkFBTyxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7U0FDM0Q7UUFHRCxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztRQUV2QixFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQy9ELGtCQUFPLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUVwRCxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztZQUV4QixFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztZQUV4QixFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztZQUV4QixFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUVwRCxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUV2QixFQUFFLENBQUMsVUFBVSxDQUNYLElBQUksRUFDSixTQUFTLEVBQ1QsRUFBRSxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLElBQUksRUFBRSxpQkFBSyxDQUFDLFlBQVksRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxpQkFBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQzlHLENBQUM7WUFFRixFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN6QixDQUFDLENBQUMsQ0FBQztRQUNILElBQUksU0FBUyxDQUFDLFNBQVMsRUFBRTtZQUV2QixFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztTQUN6QjtRQUVELEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDL0QsSUFBSSxTQUFTLENBQUMsU0FBUyxFQUFFO1lBRXZCLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQ3JEO0lBQ0gsQ0FBQztDQUNGO0FBckRELDRDQXFEQyIsImZpbGUiOiJuZW8tb25lLXNtYXJ0LWNvbnRyYWN0LWNvbXBpbGVyL3NyYy9jb21waWxlL2J1aWx0aW5zL2NvbnRyYWN0L2FycmF5U3RvcmFnZS9wdXNoLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHNVdGlscyB9IGZyb20gJ0BuZW8tb25lL3RzLXV0aWxzJztcbmltcG9ydCB0cyBmcm9tICd0eXBlc2NyaXB0JztcbmltcG9ydCB7IFR5cGVzIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IFNjcmlwdEJ1aWxkZXIgfSBmcm9tICcuLi8uLi8uLi9zYic7XG5pbXBvcnQgeyBWaXNpdE9wdGlvbnMgfSBmcm9tICcuLi8uLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBCdWlsdGluSW5zdGFuY2VNZW1iZXJDYWxsIH0gZnJvbSAnLi4vLi4vQnVpbHRpbkluc3RhbmNlTWVtYmVyQ2FsbCc7XG5pbXBvcnQgeyBDYWxsTWVtYmVyTGlrZUV4cHJlc3Npb24gfSBmcm9tICcuLi8uLi90eXBlcyc7XG5cbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZSBleHBvcnQtbmFtZVxuZXhwb3J0IGNsYXNzIEFycmF5U3RvcmFnZVB1c2ggZXh0ZW5kcyBCdWlsdGluSW5zdGFuY2VNZW1iZXJDYWxsIHtcbiAgcHVibGljIGNhbkNhbGwoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwdWJsaWMgZW1pdENhbGwoXG4gICAgc2I6IFNjcmlwdEJ1aWxkZXIsXG4gICAgZnVuYzogQ2FsbE1lbWJlckxpa2VFeHByZXNzaW9uLFxuICAgIG5vZGU6IHRzLkNhbGxFeHByZXNzaW9uLFxuICAgIG9wdGlvbnNJbjogVmlzaXRPcHRpb25zLFxuICAgIHZpc2l0ZWQ6IGJvb2xlYW4sXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IG9wdGlvbnMgPSBzYi5wdXNoVmFsdWVPcHRpb25zKG9wdGlvbnNJbik7XG4gICAgaWYgKCF2aXNpdGVkKSB7XG4gICAgICAvLyBbYXJyYXlWYWxdXG4gICAgICBzYi52aXNpdCh0c1V0aWxzLmV4cHJlc3Npb24uZ2V0RXhwcmVzc2lvbihmdW5jKSwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgLy8gW3ZhbCwgdmFsXVxuICAgIHNiLmVtaXRPcChub2RlLCAnRFVQJyk7XG4gICAgLy8gW2lkeCwgdmFsXVxuICAgIHNiLmVtaXRIZWxwZXIobm9kZSwgb3B0aW9ucywgc2IuaGVscGVycy5nZXRBcnJheVN0b3JhZ2VMZW5ndGgpO1xuICAgIHRzVXRpbHMuYXJndW1lbnRlZC5nZXRBcmd1bWVudHMobm9kZSkuZm9yRWFjaCgoYXJnKSA9PiB7XG4gICAgICAvLyBbdmFsLCBpZHhdXG4gICAgICBzYi5lbWl0T3Aobm9kZSwgJ1NXQVAnKTtcbiAgICAgIC8vIFt2YWwsIGlkeCwgdmFsXVxuICAgICAgc2IuZW1pdE9wKG5vZGUsICdUVUNLJyk7XG4gICAgICAvLyBbaWR4LCB2YWwsIGlkeCwgdmFsXVxuICAgICAgc2IuZW1pdE9wKG5vZGUsICdPVkVSJyk7XG4gICAgICAvLyBbaWR4VmFsLCB2YWwsIGlkeCwgdmFsXVxuICAgICAgc2IuZW1pdEhlbHBlcihub2RlLCBvcHRpb25zLCBzYi5oZWxwZXJzLndyYXBOdW1iZXIpO1xuICAgICAgLy8gW3ZhbHVlVmFsLCBpZHhWYWwsIHZhbCwgaWR4LCB2YWxdXG4gICAgICBzYi52aXNpdChhcmcsIG9wdGlvbnMpO1xuICAgICAgLy8gW2lkeCwgdmFsXVxuICAgICAgc2IuZW1pdEhlbHBlcihcbiAgICAgICAgbm9kZSxcbiAgICAgICAgb3B0aW9uc0luLFxuICAgICAgICBzYi5oZWxwZXJzLnNldFN0cnVjdHVyZWRTdG9yYWdlKHsgdHlwZTogVHlwZXMuQXJyYXlTdG9yYWdlLCBrZXlUeXBlOiB1bmRlZmluZWQsIGtub3duS2V5VHlwZTogVHlwZXMuTnVtYmVyIH0pLFxuICAgICAgKTtcbiAgICAgIC8vIFtpZHgsIHZhbF1cbiAgICAgIHNiLmVtaXRPcChub2RlLCAnSU5DJyk7XG4gICAgfSk7XG4gICAgaWYgKG9wdGlvbnNJbi5wdXNoVmFsdWUpIHtcbiAgICAgIC8vIFtpZHgsIHZhbCwgaWR4XVxuICAgICAgc2IuZW1pdE9wKG5vZGUsICdUVUNLJyk7XG4gICAgfVxuICAgIC8vIFtpZHhdXG4gICAgc2IuZW1pdEhlbHBlcihub2RlLCBvcHRpb25zLCBzYi5oZWxwZXJzLnB1dEFycmF5U3RvcmFnZUxlbmd0aCk7XG4gICAgaWYgKG9wdGlvbnNJbi5wdXNoVmFsdWUpIHtcbiAgICAgIC8vIFt2YWxdXG4gICAgICBzYi5lbWl0SGVscGVyKG5vZGUsIG9wdGlvbnMsIHNiLmhlbHBlcnMud3JhcE51bWJlcik7XG4gICAgfVxuICB9XG59XG4iXX0=