@neo-one/smart-contract-compiler
Version:
NEO•ONE TypeScript smart contract compiler.
68 lines (66 loc) • 9.72 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 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,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SUFBSSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBRTVDLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUMzQixDQUFDO2dCQUNELFFBQVEsRUFBRSxHQUFHLEVBQUU7b0JBRWIsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7b0JBRXhCLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUN6RCxDQUFDO2dCQUNELFNBQVMsRUFBRSxHQUFHLEVBQUU7b0JBRWQsV0FBVyxFQUFFLENBQUM7Z0JBQ2hCLENBQUM7YUFDRixDQUFDLENBQ0gsQ0FBQztTQUNIO2FBQU07WUFFTCxXQUFXLEVBQUUsQ0FBQztTQUNmO1FBRUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUU7WUFFeEIsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7U0FDekI7SUFDSCxDQUFDO0NBQ0Y7QUE1RkQsd0NBNEZDIiwiZmlsZSI6Im5lby1vbmUtc21hcnQtY29udHJhY3QtY29tcGlsZXIvc3JjL2NvbXBpbGUvYnVpbHRpbnMvY29udHJhY3QvZm9yd2FyZFZhbHVlL0ZvcndhcmRWYWx1ZUFzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHNVdGlscyB9IGZyb20gJ0BuZW8tb25lL3RzLXV0aWxzJztcbmltcG9ydCB0cyBmcm9tICd0eXBlc2NyaXB0JztcbmltcG9ydCB7IFR5cGVzLCBXcmFwcGFibGVUeXBlIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IFNjcmlwdEJ1aWxkZXIgfSBmcm9tICcuLi8uLi8uLi9zYic7XG5pbXBvcnQgeyBWaXNpdE9wdGlvbnMgfSBmcm9tICcuLi8uLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBCdWlsdGluSW5zdGFuY2VNZW1iZXJDYWxsIH0gZnJvbSAnLi4vLi4vQnVpbHRpbkluc3RhbmNlTWVtYmVyQ2FsbCc7XG5pbXBvcnQgeyBDYWxsTWVtYmVyTGlrZUV4cHJlc3Npb24gfSBmcm9tICcuLi8uLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBGb3J3YXJkVmFsdWVBcyBleHRlbmRzIEJ1aWx0aW5JbnN0YW5jZU1lbWJlckNhbGwge1xuICBwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSB0eXBlOiBXcmFwcGFibGVUeXBlLCBwcml2YXRlIHJlYWRvbmx5IGlzTnVsbGFibGUgPSBmYWxzZSkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBwdWJsaWMgY2FuQ2FsbChfc2I6IFNjcmlwdEJ1aWxkZXIsIF9mdW5jOiBDYWxsTWVtYmVyTGlrZUV4cHJlc3Npb24sIF9ub2RlOiB0cy5DYWxsRXhwcmVzc2lvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHVibGljIGVtaXRDYWxsKFxuICAgIHNiOiBTY3JpcHRCdWlsZGVyLFxuICAgIGZ1bmM6IENhbGxNZW1iZXJMaWtlRXhwcmVzc2lvbixcbiAgICBub2RlOiB0cy5DYWxsRXhwcmVzc2lvbixcbiAgICBvcHRpb25zSW46IFZpc2l0T3B0aW9ucyxcbiAgICB2aXNpdGVkOiBib29sZWFuLFxuICApOiB2b2lkIHtcbiAgICBjb25zdCBvcHRpb25zID0gc2IucHVzaFZhbHVlT3B0aW9ucyhvcHRpb25zSW4pO1xuICAgIGlmICghdmlzaXRlZCkge1xuICAgICAgLy8gW3ZhbF1cbiAgICAgIHNiLnZpc2l0KHRzVXRpbHMuZXhwcmVzc2lvbi5nZXRFeHByZXNzaW9uKGZ1bmMpLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBjb25zdCBoYW5kbGVWYWx1ZSA9ICgpID0+IHtcbiAgICAgIGlmICh0aGlzLnR5cGUgPT09IFR5cGVzLkFycmF5KSB7XG4gICAgICAgIC8vIFthcnJdXG4gICAgICAgIHNiLmVtaXRIZWxwZXIoXG4gICAgICAgICAgbm9kZSxcbiAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgIHNiLmhlbHBlcnMuYXJyTWFwKHtcbiAgICAgICAgICAgIG1hcDogKGlubmVyT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgICBzYi5lbWl0SGVscGVyKG5vZGUsIGlubmVyT3B0aW9ucywgc2IuaGVscGVycy53cmFwRm9yd2FyZFZhbHVlKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnR5cGUgPT09IFR5cGVzLk1hcCkge1xuICAgICAgICAvLyBbbWFwXVxuICAgICAgICBzYi5lbWl0SGVscGVyKFxuICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICBzYi5oZWxwZXJzLm1hcE1hcCh7XG4gICAgICAgICAgICBtYXA6IChpbm5lck9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgICAgc2IuZW1pdEhlbHBlcihub2RlLCBpbm5lck9wdGlvbnMsIHNiLmhlbHBlcnMud3JhcEZvcndhcmRWYWx1ZSk7XG4gICAgICAgICAgICAgIHNiLmVtaXRPcChub2RlLCAnU1dBUCcpO1xuICAgICAgICAgICAgICBzYi5lbWl0SGVscGVyKG5vZGUsIGlubmVyT3B0aW9ucywgc2IuaGVscGVycy53cmFwRm9yd2FyZFZhbHVlKTtcbiAgICAgICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdTV0FQJyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgLy8gW3ZhbF1cbiAgICAgIHNiLmVtaXRIZWxwZXIobm9kZSwgb3B0aW9ucywgc2IuaGVscGVycy53cmFwVmFsKHsgdHlwZTogdGhpcy50eXBlIH0pKTtcbiAgICB9O1xuXG4gICAgLy8gW3ZhbHVlXVxuICAgIHNiLmVtaXRIZWxwZXIobm9kZSwgb3B0aW9ucywgc2IuaGVscGVycy51bndyYXBGb3J3YXJkVmFsdWUpO1xuICAgIGlmICh0aGlzLmlzTnVsbGFibGUpIHtcbiAgICAgIHNiLmVtaXRIZWxwZXIoXG4gICAgICAgIG5vZGUsXG4gICAgICAgIG9wdGlvbnMsXG4gICAgICAgIHNiLmhlbHBlcnMuaWYoe1xuICAgICAgICAgIGNvbmRpdGlvbjogKCkgPT4ge1xuICAgICAgICAgICAgLy8gW3ZhbHVlLCB2YWx1ZV1cbiAgICAgICAgICAgIHNiLmVtaXRPcChub2RlLCAnRFVQJyk7XG4gICAgICAgICAgICAvLyBbYnVmZmVyLCB2YWx1ZSwgdmFsdWVdXG4gICAgICAgICAgICBzYi5lbWl0UHVzaEJ1ZmZlcihub2RlLCBCdWZmZXIuYWxsb2MoMCwgMCkpO1xuICAgICAgICAgICAgLy8gW2Jvb2xlYW5dXG4gICAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ0VRVUFMJyk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICB3aGVuVHJ1ZTogKCkgPT4ge1xuICAgICAgICAgICAgLy8gW11cbiAgICAgICAgICAgIHNiLmVtaXRPcChub2RlLCAnRFJPUCcpO1xuICAgICAgICAgICAgLy8gW3ZhbF1cbiAgICAgICAgICAgIHNiLmVtaXRIZWxwZXIobm9kZSwgb3B0aW9ucywgc2IuaGVscGVycy53cmFwVW5kZWZpbmVkKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHdoZW5GYWxzZTogKCkgPT4ge1xuICAgICAgICAgICAgLy8gW3ZhbF1cbiAgICAgICAgICAgIGhhbmRsZVZhbHVlKCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBbdmFsXVxuICAgICAgaGFuZGxlVmFsdWUoKTtcbiAgICB9XG5cbiAgICBpZiAoIW9wdGlvbnNJbi5wdXNoVmFsdWUpIHtcbiAgICAgIC8vIFtdXG4gICAgICBzYi5lbWl0T3Aobm9kZSwgJ0RST1AnKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==