UNPKG

@neo-one/smart-contract-compiler

Version:

NEO•ONE TypeScript smart contract compiler.

68 lines (66 loc) 9.72 kB
"use strict"; 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 ForwardValueAs extends BuiltinInstanceMemberCall_1.BuiltinInstanceMemberCall { constructor(type, isNullable = false) { super(); this.type = type; this.isNullable = isNullable; } canCall(_sb, _func, _node) { 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); } const handleValue = () => { if (this.type === constants_1.Types.Array) { sb.emitHelper(node, options, sb.helpers.arrMap({ map: (innerOptions) => { sb.emitHelper(node, innerOptions, sb.helpers.wrapForwardValue); }, })); } if (this.type === constants_1.Types.Map) { sb.emitHelper(node, options, sb.helpers.mapMap({ map: (innerOptions) => { sb.emitHelper(node, innerOptions, sb.helpers.wrapForwardValue); sb.emitOp(node, 'SWAP'); sb.emitHelper(node, innerOptions, sb.helpers.wrapForwardValue); sb.emitOp(node, 'SWAP'); }, })); } sb.emitHelper(node, options, sb.helpers.wrapVal({ type: this.type })); }; sb.emitHelper(node, options, sb.helpers.unwrapForwardValue); if (this.isNullable) { sb.emitHelper(node, options, sb.helpers.if({ condition: () => { sb.emitOp(node, 'DUP'); sb.emitPushBuffer(node, Buffer.alloc(0, 0)); sb.emitOp(node, 'EQUAL'); }, whenTrue: () => { sb.emitOp(node, 'DROP'); sb.emitHelper(node, options, sb.helpers.wrapUndefined); }, whenFalse: () => { handleValue(); }, })); } else { handleValue(); } if (!optionsIn.pushValue) { sb.emitOp(node, 'DROP'); } } } exports.ForwardValueAs = ForwardValueAs; //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkZvcndhcmRWYWx1ZUFzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsZ0RBQTRDO0FBRTVDLGtEQUEwRDtBQUcxRCwrRUFBNEU7QUFHNUUsTUFBYSxjQUFlLFNBQVEscURBQXlCO0lBQzNELFlBQW9DLElBQW1CLEVBQW1CLGFBQWEsS0FBSztRQUMxRixLQUFLLEVBQUUsQ0FBQztRQUQwQixTQUFJLEdBQUosSUFBSSxDQUFlO1FBQW1CLGVBQVUsR0FBVixVQUFVLENBQVE7SUFFNUYsQ0FBQztJQUVNLE9BQU8sQ0FBQyxHQUFrQixFQUFFLEtBQStCLEVBQUUsS0FBd0I7UUFDMUYsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRU0sUUFBUSxDQUNiLEVBQWlCLEVBQ2pCLElBQThCLEVBQzlCLElBQXVCLEVBQ3ZCLFNBQXVCLEVBQ3ZCLE9BQWdCO1FBRWhCLE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMvQyxJQUFJLENBQUMsT0FBTyxFQUFFO1lBRVosRUFBRSxDQUFDLEtBQUssQ0FBQyxrQkFBTyxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7U0FDM0Q7UUFFRCxNQUFNLFdBQVcsR0FBRyxHQUFHLEVBQUU7WUFDdkIsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLGlCQUFLLENBQUMsS0FBSyxFQUFFO2dCQUU3QixFQUFFLENBQUMsVUFBVSxDQUNYLElBQUksRUFDSixPQUFPLEVBQ1AsRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7b0JBQ2hCLEdBQUcsRUFBRSxDQUFDLFlBQVksRUFBRSxFQUFFO3dCQUNwQixFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO29CQUNqRSxDQUFDO2lCQUNGLENBQUMsQ0FDSCxDQUFDO2FBQ0g7WUFFRCxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssaUJBQUssQ0FBQyxHQUFHLEVBQUU7Z0JBRTNCLEVBQUUsQ0FBQyxVQUFVLENBQ1gsSUFBSSxFQUNKLE9BQU8sRUFDUCxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztvQkFDaEIsR0FBRyxFQUFFLENBQUMsWUFBWSxFQUFFLEVBQUU7d0JBQ3BCLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUM7d0JBQy9ELEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO3dCQUN4QixFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO3dCQUMvRCxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztvQkFDMUIsQ0FBQztpQkFDRixDQUFDLENBQ0gsQ0FBQzthQUNIO1lBRUQsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDeEUsQ0FBQyxDQUFDO1FBR0YsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUM1RCxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDbkIsRUFBRSxDQUFDLFVBQVUsQ0FDWCxJQUFJLEVBQ0osT0FBTyxFQUNQLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO2dCQUNaLFNBQVMsRUFBRSxHQUFHLEVBQUU7b0JBRWQsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7b0JBRXZCLEVBQUUsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBRTVDLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUMzQixDQUFDO2dCQUNELFFBQVEsRUFBRSxHQUFHLEVBQUU7b0JBRWIsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7b0JBRXhCLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUN6RCxDQUFDO2dCQUNELFNBQVMsRUFBRSxHQUFHLEVBQUU7b0JBRWQsV0FBVyxFQUFFLENBQUM7Z0JBQ2hCLENBQUM7YUFDRixDQUFDLENBQ0gsQ0FBQztTQUNIO2FBQU07WUFFTCxXQUFXLEVBQUUsQ0FBQztTQUNmO1FBRUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUU7WUFFeEIsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7U0FDekI7SUFDSCxDQUFDO0NBQ0Y7QUE1RkQsd0NBNEZDIiwiZmlsZSI6Im5lby1vbmUtc21hcnQtY29udHJhY3QtY29tcGlsZXIvc3JjL2NvbXBpbGUvYnVpbHRpbnMvY29udHJhY3QvZm9yd2FyZFZhbHVlL0ZvcndhcmRWYWx1ZUFzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHNVdGlscyB9IGZyb20gJ0BuZW8tb25lL3RzLXV0aWxzJztcbmltcG9ydCB0cyBmcm9tICd0eXBlc2NyaXB0JztcbmltcG9ydCB7IFR5cGVzLCBXcmFwcGFibGVUeXBlIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IFNjcmlwdEJ1aWxkZXIgfSBmcm9tICcuLi8uLi8uLi9zYic7XG5pbXBvcnQgeyBWaXNpdE9wdGlvbnMgfSBmcm9tICcuLi8uLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBCdWlsdGluSW5zdGFuY2VNZW1iZXJDYWxsIH0gZnJvbSAnLi4vLi4vQnVpbHRpbkluc3RhbmNlTWVtYmVyQ2FsbCc7XG5pbXBvcnQgeyBDYWxsTWVtYmVyTGlrZUV4cHJlc3Npb24gfSBmcm9tICcuLi8uLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBGb3J3YXJkVmFsdWVBcyBleHRlbmRzIEJ1aWx0aW5JbnN0YW5jZU1lbWJlckNhbGwge1xuICBwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSB0eXBlOiBXcmFwcGFibGVUeXBlLCBwcml2YXRlIHJlYWRvbmx5IGlzTnVsbGFibGUgPSBmYWxzZSkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBwdWJsaWMgY2FuQ2FsbChfc2I6IFNjcmlwdEJ1aWxkZXIsIF9mdW5jOiBDYWxsTWVtYmVyTGlrZUV4cHJlc3Npb24sIF9ub2RlOiB0cy5DYWxsRXhwcmVzc2lvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHVibGljIGVtaXRDYWxsKFxuICAgIHNiOiBTY3JpcHRCdWlsZGVyLFxuICAgIGZ1bmM6IENhbGxNZW1iZXJMaWtlRXhwcmVzc2lvbixcbiAgICBub2RlOiB0cy5DYWxsRXhwcmVzc2lvbixcbiAgICBvcHRpb25zSW46IFZpc2l0T3B0aW9ucyxcbiAgICB2aXNpdGVkOiBib29sZWFuLFxuICApOiB2b2lkIHtcbiAgICBjb25zdCBvcHRpb25zID0gc2IucHVzaFZhbHVlT3B0aW9ucyhvcHRpb25zSW4pO1xuICAgIGlmICghdmlzaXRlZCkge1xuICAgICAgLy8gW3ZhbF1cbiAgICAgIHNiLnZpc2l0KHRzVXRpbHMuZXhwcmVzc2lvbi5nZXRFeHByZXNzaW9uKGZ1bmMpLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBjb25zdCBoYW5kbGVWYWx1ZSA9ICgpID0+IHtcbiAgICAgIGlmICh0aGlzLnR5cGUgPT09IFR5cGVzLkFycmF5KSB7XG4gICAgICAgIC8vIFthcnJdXG4gICAgICAgIHNiLmVtaXRIZWxwZXIoXG4gICAgICAgICAgbm9kZSxcbiAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgIHNiLmhlbHBlcnMuYXJyTWFwKHtcbiAgICAgICAgICAgIG1hcDogKGlubmVyT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgICBzYi5lbWl0SGVscGVyKG5vZGUsIGlubmVyT3B0aW9ucywgc2IuaGVscGVycy53cmFwRm9yd2FyZFZhbHVlKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnR5cGUgPT09IFR5cGVzLk1hcCkge1xuICAgICAgICAvLyBbbWFwXVxuICAgICAgICBzYi5lbWl0SGVscGVyKFxuICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICBzYi5oZWxwZXJzLm1hcE1hcCh7XG4gICAgICAgICAgICBtYXA6IChpbm5lck9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgICAgc2IuZW1pdEhlbHBlcihub2RlLCBpbm5lck9wdGlvbnMsIHNiLmhlbHBlcnMud3JhcEZvcndhcmRWYWx1ZSk7XG4gICAgICAgICAgICAgIHNiLmVtaXRPcChub2RlLCAnU1dBUCcpO1xuICAgICAgICAgICAgICBzYi5lbWl0SGVscGVyKG5vZGUsIGlubmVyT3B0aW9ucywgc2IuaGVscGVycy53cmFwRm9yd2FyZFZhbHVlKTtcbiAgICAgICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdTV0FQJyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgLy8gW3ZhbF1cbiAgICAgIHNiLmVtaXRIZWxwZXIobm9kZSwgb3B0aW9ucywgc2IuaGVscGVycy53cmFwVmFsKHsgdHlwZTogdGhpcy50eXBlIH0pKTtcbiAgICB9O1xuXG4gICAgLy8gW3ZhbHVlXVxuICAgIHNiLmVtaXRIZWxwZXIobm9kZSwgb3B0aW9ucywgc2IuaGVscGVycy51bndyYXBGb3J3YXJkVmFsdWUpO1xuICAgIGlmICh0aGlzLmlzTnVsbGFibGUpIHtcbiAgICAgIHNiLmVtaXRIZWxwZXIoXG4gICAgICAgIG5vZGUsXG4gICAgICAgIG9wdGlvbnMsXG4gICAgICAgIHNiLmhlbHBlcnMuaWYoe1xuICAgICAgICAgIGNvbmRpdGlvbjogKCkgPT4ge1xuICAgICAgICAgICAgLy8gW3ZhbHVlLCB2YWx1ZV1cbiAgICAgICAgICAgIHNiLmVtaXRPcChub2RlLCAnRFVQJyk7XG4gICAgICAgICAgICAvLyBbYnVmZmVyLCB2YWx1ZSwgdmFsdWVdXG4gICAgICAgICAgICBzYi5lbWl0UHVzaEJ1ZmZlcihub2RlLCBCdWZmZXIuYWxsb2MoMCwgMCkpO1xuICAgICAgICAgICAgLy8gW2Jvb2xlYW5dXG4gICAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ0VRVUFMJyk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICB3aGVuVHJ1ZTogKCkgPT4ge1xuICAgICAgICAgICAgLy8gW11cbiAgICAgICAgICAgIHNiLmVtaXRPcChub2RlLCAnRFJPUCcpO1xuICAgICAgICAgICAgLy8gW3ZhbF1cbiAgICAgICAgICAgIHNiLmVtaXRIZWxwZXIobm9kZSwgb3B0aW9ucywgc2IuaGVscGVycy53cmFwVW5kZWZpbmVkKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHdoZW5GYWxzZTogKCkgPT4ge1xuICAgICAgICAgICAgLy8gW3ZhbF1cbiAgICAgICAgICAgIGhhbmRsZVZhbHVlKCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBbdmFsXVxuICAgICAgaGFuZGxlVmFsdWUoKTtcbiAgICB9XG5cbiAgICBpZiAoIW9wdGlvbnNJbi5wdXNoVmFsdWUpIHtcbiAgICAgIC8vIFtdXG4gICAgICBzYi5lbWl0T3Aobm9kZSwgJ0RST1AnKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==