UNPKG

@neo-one/smart-contract-compiler

Version:

NEO•ONE TypeScript smart contract compiler.

40 lines (38 loc) 6.54 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const ts_utils_1 = require("@neo-one/ts-utils"); const BuiltinInstanceMemberCall_1 = require("../BuiltinInstanceMemberCall"); class BufferSlice extends BuiltinInstanceMemberCall_1.BuiltinInstanceMemberCall { canCall(_sb, _func, node) { return ts_utils_1.tsUtils.argumented.getArguments(node).length <= 2; } emitCall(sb, func, node, optionsIn, visited) { const options = sb.pushValueOptions(optionsIn); const expr = ts_utils_1.tsUtils.expression.getExpression(func); if (!visited) { sb.visit(expr, options); } sb.emitHelper(node, options, sb.helpers.unwrapBuffer); const args = ts_utils_1.tsUtils.argumented.getArguments(node); if (args.length === 1) { sb.visit(args[0], options); sb.emitHelper(node, options, sb.helpers.unwrapNumber); sb.emitHelper(node, options, sb.helpers.bufferSlice({})); } else if (args.length === 2) { sb.visit(args[1], options); sb.emitHelper(node, options, sb.helpers.unwrapNumber); sb.visit(args[0], options); sb.emitHelper(node, options, sb.helpers.unwrapNumber); sb.emitHelper(node, options, sb.helpers.bufferSlice({ hasEnd: true })); } if (optionsIn.pushValue) { sb.emitHelper(node, options, sb.helpers.wrapBuffer); } else { sb.emitOp(node, 'DROP'); } } } exports.BufferSlice = BufferSlice; //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNsaWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsZ0RBQTRDO0FBSTVDLDRFQUF5RTtBQUl6RSxNQUFhLFdBQVksU0FBUSxxREFBeUI7SUFDakQsT0FBTyxDQUFDLEdBQWtCLEVBQUUsS0FBK0IsRUFBRSxJQUF1QjtRQUN6RixPQUFPLGtCQUFPLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFTSxRQUFRLENBQ2IsRUFBaUIsRUFDakIsSUFBOEIsRUFDOUIsSUFBdUIsRUFDdkIsU0FBdUIsRUFDdkIsT0FBZ0I7UUFFaEIsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQy9DLE1BQU0sSUFBSSxHQUFHLGtCQUFPLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwRCxJQUFJLENBQUMsT0FBTyxFQUFFO1lBRVosRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7U0FDekI7UUFHRCxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN0RCxNQUFNLElBQUksR0FBRyxrQkFBTyxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkQsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUVyQixFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUUzQixFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUV0RCxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUMxRDthQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFFNUIsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFFM0IsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUM7WUFFdEQsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFFM0IsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUM7WUFFdEQsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztTQUN4RTtRQUVELElBQUksU0FBUyxDQUFDLFNBQVMsRUFBRTtZQUV2QixFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUNyRDthQUFNO1lBQ0wsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7U0FDekI7SUFDSCxDQUFDO0NBQ0Y7QUFqREQsa0NBaURDIiwiZmlsZSI6Im5lby1vbmUtc21hcnQtY29udHJhY3QtY29tcGlsZXIvc3JjL2NvbXBpbGUvYnVpbHRpbnMvYnVmZmVyL3NsaWNlLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHNVdGlscyB9IGZyb20gJ0BuZW8tb25lL3RzLXV0aWxzJztcbmltcG9ydCB0cyBmcm9tICd0eXBlc2NyaXB0JztcbmltcG9ydCB7IFNjcmlwdEJ1aWxkZXIgfSBmcm9tICcuLi8uLi9zYic7XG5pbXBvcnQgeyBWaXNpdE9wdGlvbnMgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBCdWlsdGluSW5zdGFuY2VNZW1iZXJDYWxsIH0gZnJvbSAnLi4vQnVpbHRpbkluc3RhbmNlTWVtYmVyQ2FsbCc7XG5pbXBvcnQgeyBDYWxsTWVtYmVyTGlrZUV4cHJlc3Npb24gfSBmcm9tICcuLi90eXBlcyc7XG5cbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZSBleHBvcnQtbmFtZVxuZXhwb3J0IGNsYXNzIEJ1ZmZlclNsaWNlIGV4dGVuZHMgQnVpbHRpbkluc3RhbmNlTWVtYmVyQ2FsbCB7XG4gIHB1YmxpYyBjYW5DYWxsKF9zYjogU2NyaXB0QnVpbGRlciwgX2Z1bmM6IENhbGxNZW1iZXJMaWtlRXhwcmVzc2lvbiwgbm9kZTogdHMuQ2FsbEV4cHJlc3Npb24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHNVdGlscy5hcmd1bWVudGVkLmdldEFyZ3VtZW50cyhub2RlKS5sZW5ndGggPD0gMjtcbiAgfVxuXG4gIHB1YmxpYyBlbWl0Q2FsbChcbiAgICBzYjogU2NyaXB0QnVpbGRlcixcbiAgICBmdW5jOiBDYWxsTWVtYmVyTGlrZUV4cHJlc3Npb24sXG4gICAgbm9kZTogdHMuQ2FsbEV4cHJlc3Npb24sXG4gICAgb3B0aW9uc0luOiBWaXNpdE9wdGlvbnMsXG4gICAgdmlzaXRlZDogYm9vbGVhbixcbiAgKTogdm9pZCB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHNiLnB1c2hWYWx1ZU9wdGlvbnMob3B0aW9uc0luKTtcbiAgICBjb25zdCBleHByID0gdHNVdGlscy5leHByZXNzaW9uLmdldEV4cHJlc3Npb24oZnVuYyk7XG4gICAgaWYgKCF2aXNpdGVkKSB7XG4gICAgICAvLyBbdmFsXVxuICAgICAgc2IudmlzaXQoZXhwciwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgLy8gW2J1ZmZlcl1cbiAgICBzYi5lbWl0SGVscGVyKG5vZGUsIG9wdGlvbnMsIHNiLmhlbHBlcnMudW53cmFwQnVmZmVyKTtcbiAgICBjb25zdCBhcmdzID0gdHNVdGlscy5hcmd1bWVudGVkLmdldEFyZ3VtZW50cyhub2RlKTtcbiAgICBpZiAoYXJncy5sZW5ndGggPT09IDEpIHtcbiAgICAgIC8vIFt2YWwsIGJ1ZmZlcl1cbiAgICAgIHNiLnZpc2l0KGFyZ3NbMF0sIG9wdGlvbnMpO1xuICAgICAgLy8gW251bWJlciwgYnVmZmVyXVxuICAgICAgc2IuZW1pdEhlbHBlcihub2RlLCBvcHRpb25zLCBzYi5oZWxwZXJzLnVud3JhcE51bWJlcik7XG4gICAgICAvLyBbYnVmZmVyXVxuICAgICAgc2IuZW1pdEhlbHBlcihub2RlLCBvcHRpb25zLCBzYi5oZWxwZXJzLmJ1ZmZlclNsaWNlKHt9KSk7XG4gICAgfSBlbHNlIGlmIChhcmdzLmxlbmd0aCA9PT0gMikge1xuICAgICAgLy8gW2VuZFZhbCwgYnVmZmVyXVxuICAgICAgc2IudmlzaXQoYXJnc1sxXSwgb3B0aW9ucyk7XG4gICAgICAvLyBbZW5kLCBidWZmZXJdXG4gICAgICBzYi5lbWl0SGVscGVyKG5vZGUsIG9wdGlvbnMsIHNiLmhlbHBlcnMudW53cmFwTnVtYmVyKTtcbiAgICAgIC8vIFtzdGFydFZhbCwgZW5kLCBidWZmZXJdXG4gICAgICBzYi52aXNpdChhcmdzWzBdLCBvcHRpb25zKTtcbiAgICAgIC8vIFtzdGFydCwgZW5kLCBidWZmZXJdXG4gICAgICBzYi5lbWl0SGVscGVyKG5vZGUsIG9wdGlvbnMsIHNiLmhlbHBlcnMudW53cmFwTnVtYmVyKTtcbiAgICAgIC8vIFtidWZmZXJdXG4gICAgICBzYi5lbWl0SGVscGVyKG5vZGUsIG9wdGlvbnMsIHNiLmhlbHBlcnMuYnVmZmVyU2xpY2UoeyBoYXNFbmQ6IHRydWUgfSkpO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zSW4ucHVzaFZhbHVlKSB7XG4gICAgICAvLyBbdmFsXVxuICAgICAgc2IuZW1pdEhlbHBlcihub2RlLCBvcHRpb25zLCBzYi5oZWxwZXJzLndyYXBCdWZmZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzYi5lbWl0T3Aobm9kZSwgJ0RST1AnKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==