UNPKG

@neo-one/smart-contract-compiler

Version:

NEO•ONE TypeScript smart contract compiler.

68 lines (66 loc) 10.6 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const Helper_1 = require("../../Helper"); class FindObjectPropertyHelperBase extends Helper_1.Helper { constructor({ whenHasProperty, whenNotHasProperty, getObject }) { super(); this.whenHasProperty = whenHasProperty; this.whenNotHasProperty = whenNotHasProperty; this.getObject = getObject; } emit(sb, node, options) { if (!options.pushValue) { sb.emitOp(node, 'DROP'); sb.emitOp(node, 'DROP'); return; } sb.emitOp(node, 'SWAP'); const prepareLoop = () => { sb.emitOp(node, 'DUP'); sb.emitHelper(node, options, sb.helpers.getPropertyObject); sb.emitOp(node, 'DUP'); sb.emitOp(node, 'ROT'); sb.emitHelper(node, options, this.getObject(sb)); sb.emitOp(node, 'DUP'); sb.emitPushInt(node, 4); sb.emitOp(node, 'PICK'); }; prepareLoop(); sb.emitHelper(node, options, sb.helpers.forLoop({ condition: () => { sb.emitOp(node, 'HASKEY'); sb.emitOp(node, 'NOT'); sb.emitOp(node, 'ROT'); sb.emitPushString(node, '__proto__'); sb.emitOp(node, 'HASKEY'); sb.emitOp(node, 'BOOLAND'); }, each: () => { sb.emitOp(node, 'DROP'); sb.emitPushString(node, '__proto__'); sb.emitOp(node, 'PICKITEM'); sb.emitPushInt(node, 0); sb.emitOp(node, 'PICKITEM'); prepareLoop(); }, cleanup: () => { }, })); sb.emitOp(node, 'NIP'); sb.emitOp(node, 'TUCK'); sb.emitOp(node, 'OVER'); sb.emitHelper(node, options, sb.helpers.if({ condition: () => { sb.emitOp(node, 'HASKEY'); }, whenTrue: () => { this.whenHasProperty(); }, whenFalse: () => { this.whenNotHasProperty(); }, })); } } exports.FindObjectPropertyHelperBase = FindObjectPropertyHelperBase; //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkZpbmRPYmplY3RQcm9wZXJ0eUhlbHBlckJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFJQSx5Q0FBc0M7QUFTdEMsTUFBYSw0QkFBNkIsU0FBUSxlQUFNO0lBS3RELFlBQW1CLEVBQUUsZUFBZSxFQUFFLGtCQUFrQixFQUFFLFNBQVMsRUFBdUM7UUFDeEcsS0FBSyxFQUFFLENBQUM7UUFDUixJQUFJLENBQUMsZUFBZSxHQUFHLGVBQWUsQ0FBQztRQUN2QyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsa0JBQWtCLENBQUM7UUFDN0MsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7SUFDN0IsQ0FBQztJQUVNLElBQUksQ0FBQyxFQUFpQixFQUFFLElBQWEsRUFBRSxPQUFxQjtRQUNqRSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRTtZQUN0QixFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztZQUN4QixFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztZQUV4QixPQUFPO1NBQ1I7UUFHRCxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztRQUV4QixNQUFNLFdBQVcsR0FBRyxHQUFHLEVBQUU7WUFFdkIsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFFdkIsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQztZQUUzRCxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztZQUV2QixFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztZQUV2QixFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBRWpELEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBRXZCLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBRXhCLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzFCLENBQUMsQ0FBQztRQUdGLFdBQVcsRUFBRSxDQUFDO1FBRWQsRUFBRSxDQUFDLFVBQVUsQ0FDWCxJQUFJLEVBQ0osT0FBTyxFQUNQLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO1lBQ2pCLFNBQVMsRUFBRSxHQUFHLEVBQUU7Z0JBRWQsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7Z0JBRTFCLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUV2QixFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFFdkIsRUFBRSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUM7Z0JBRXJDLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO2dCQUUxQixFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztZQUM3QixDQUFDO1lBQ0QsSUFBSSxFQUFFLEdBQUcsRUFBRTtnQkFFVCxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztnQkFFeEIsRUFBRSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUM7Z0JBRXJDLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDO2dCQUU1QixFQUFFLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFFeEIsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUM7Z0JBRTVCLFdBQVcsRUFBRSxDQUFDO1lBQ2hCLENBQUM7WUFDRCxPQUFPLEVBQUUsR0FBRyxFQUFFO1lBRWQsQ0FBQztTQUNGLENBQUMsQ0FDSCxDQUFDO1FBRUYsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFdkIsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFeEIsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFeEIsRUFBRSxDQUFDLFVBQVUsQ0FDWCxJQUFJLEVBQ0osT0FBTyxFQUNQLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1osU0FBUyxFQUFFLEdBQUcsRUFBRTtnQkFFZCxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztZQUM1QixDQUFDO1lBQ0QsUUFBUSxFQUFFLEdBQUcsRUFBRTtnQkFDYixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDekIsQ0FBQztZQUNELFNBQVMsRUFBRSxHQUFHLEVBQUU7Z0JBQ2QsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDNUIsQ0FBQztTQUNGLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztDQUNGO0FBMUdELG9FQTBHQyIsImZpbGUiOiJuZW8tb25lLXNtYXJ0LWNvbnRyYWN0LWNvbXBpbGVyL3NyYy9jb21waWxlL2hlbHBlci90eXBlcy9vYmplY3QvRmluZE9iamVjdFByb3BlcnR5SGVscGVyQmFzZS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0cyBmcm9tICd0eXBlc2NyaXB0JztcblxuaW1wb3J0IHsgU2NyaXB0QnVpbGRlciB9IGZyb20gJy4uLy4uLy4uL3NiJztcbmltcG9ydCB7IFZpc2l0T3B0aW9ucyB9IGZyb20gJy4uLy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IEhlbHBlciB9IGZyb20gJy4uLy4uL0hlbHBlcic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmluZE9iamVjdFByb3BlcnR5SGVscGVyQmFzZU9wdGlvbnMge1xuICByZWFkb25seSB3aGVuSGFzUHJvcGVydHk6ICgpID0+IHZvaWQ7XG4gIHJlYWRvbmx5IHdoZW5Ob3RIYXNQcm9wZXJ0eTogKCkgPT4gdm9pZDtcbiAgcmVhZG9ubHkgZ2V0T2JqZWN0OiAoc2I6IFNjcmlwdEJ1aWxkZXIpID0+IEhlbHBlcjtcbn1cblxuLy8gSW5wdXQ6IFtzdHJpbmdQcm9wLCBvYmplY3RWYWxdXG5leHBvcnQgY2xhc3MgRmluZE9iamVjdFByb3BlcnR5SGVscGVyQmFzZSBleHRlbmRzIEhlbHBlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgd2hlbkhhc1Byb3BlcnR5OiAoKSA9PiB2b2lkO1xuICBwcml2YXRlIHJlYWRvbmx5IHdoZW5Ob3RIYXNQcm9wZXJ0eTogKCkgPT4gdm9pZDtcbiAgcHJpdmF0ZSByZWFkb25seSBnZXRPYmplY3Q6IChzYjogU2NyaXB0QnVpbGRlcikgPT4gSGVscGVyO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcih7IHdoZW5IYXNQcm9wZXJ0eSwgd2hlbk5vdEhhc1Byb3BlcnR5LCBnZXRPYmplY3QgfTogRmluZE9iamVjdFByb3BlcnR5SGVscGVyQmFzZU9wdGlvbnMpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMud2hlbkhhc1Byb3BlcnR5ID0gd2hlbkhhc1Byb3BlcnR5O1xuICAgIHRoaXMud2hlbk5vdEhhc1Byb3BlcnR5ID0gd2hlbk5vdEhhc1Byb3BlcnR5O1xuICAgIHRoaXMuZ2V0T2JqZWN0ID0gZ2V0T2JqZWN0O1xuICB9XG5cbiAgcHVibGljIGVtaXQoc2I6IFNjcmlwdEJ1aWxkZXIsIG5vZGU6IHRzLk5vZGUsIG9wdGlvbnM6IFZpc2l0T3B0aW9ucyk6IHZvaWQge1xuICAgIGlmICghb3B0aW9ucy5wdXNoVmFsdWUpIHtcbiAgICAgIHNiLmVtaXRPcChub2RlLCAnRFJPUCcpO1xuICAgICAgc2IuZW1pdE9wKG5vZGUsICdEUk9QJyk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBbb2JqZWN0VmFsLCBwcm9wXVxuICAgIHNiLmVtaXRPcChub2RlLCAnU1dBUCcpO1xuXG4gICAgY29uc3QgcHJlcGFyZUxvb3AgPSAoKSA9PiB7XG4gICAgICAvLyBbb2JqZWN0VmFsLCBvYmplY3RWYWwsIHByb3BdXG4gICAgICBzYi5lbWl0T3Aobm9kZSwgJ0RVUCcpO1xuICAgICAgLy8gW3BvYmosIG9iamVjdFZhbCwgcHJvcF1cbiAgICAgIHNiLmVtaXRIZWxwZXIobm9kZSwgb3B0aW9ucywgc2IuaGVscGVycy5nZXRQcm9wZXJ0eU9iamVjdCk7XG4gICAgICAvLyBbcG9iaiwgcG9iaiwgb2JqZWN0VmFsLCBwcm9wXVxuICAgICAgc2IuZW1pdE9wKG5vZGUsICdEVVAnKTtcbiAgICAgIC8vIFtvYmplY3RWYWwsIHBvYmosIHBvYmosIHByb3BdXG4gICAgICBzYi5lbWl0T3Aobm9kZSwgJ1JPVCcpO1xuICAgICAgLy8gW29iaiwgcG9iaiwgcG9iaiwgcHJvcF1cbiAgICAgIHNiLmVtaXRIZWxwZXIobm9kZSwgb3B0aW9ucywgdGhpcy5nZXRPYmplY3Qoc2IpKTtcbiAgICAgIC8vIFtvYmosIG9iaiwgcG9iaiwgcG9iaiwgcHJvcF1cbiAgICAgIHNiLmVtaXRPcChub2RlLCAnRFVQJyk7XG4gICAgICAvLyBbNCwgb2JqLCBvYmosIHBvYmosIHBvYmosIHByb3BdXG4gICAgICBzYi5lbWl0UHVzaEludChub2RlLCA0KTtcbiAgICAgIC8vIFtwcm9wLCBvYmosIG9iaiwgcG9iaiwgcG9iaiwgcHJvcF1cbiAgICAgIHNiLmVtaXRPcChub2RlLCAnUElDSycpO1xuICAgIH07XG5cbiAgICAvLyBbcHJvcCwgb2JqLCBvYmosIHBvYmosIHBvYmosIHByb3BdXG4gICAgcHJlcGFyZUxvb3AoKTtcblxuICAgIHNiLmVtaXRIZWxwZXIoXG4gICAgICBub2RlLFxuICAgICAgb3B0aW9ucyxcbiAgICAgIHNiLmhlbHBlcnMuZm9yTG9vcCh7XG4gICAgICAgIGNvbmRpdGlvbjogKCkgPT4ge1xuICAgICAgICAgIC8vIFtoYXNLZXksIG9iaiwgcG9iaiwgcG9iaiwgcHJvcF1cbiAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ0hBU0tFWScpO1xuICAgICAgICAgIC8vIFtub3RIYXNLZXksIG9iaiwgcG9iaiwgcG9iaiwgcHJvcF1cbiAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ05PVCcpO1xuICAgICAgICAgIC8vIFtwb2JqLCBub3RIYXNLZXksIG9iaiwgcG9iaiwgcHJvcF1cbiAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ1JPVCcpO1xuICAgICAgICAgIC8vIFsnX19wcm90b19fJywgcG9iaiwgbm90SGFzS2V5LCBvYmosIHBvYmosIHByb3BdXG4gICAgICAgICAgc2IuZW1pdFB1c2hTdHJpbmcobm9kZSwgJ19fcHJvdG9fXycpO1xuICAgICAgICAgIC8vIFtoYXNQcm90b3R5cGVLZXksIG5vdEhhc0tleSwgb2JqLCBwb2JqLCBwcm9wXVxuICAgICAgICAgIHNiLmVtaXRPcChub2RlLCAnSEFTS0VZJyk7XG4gICAgICAgICAgLy8gW2NvbmRpdGlvbiwgb2JqLCBwb2JqLCBwcm9wXVxuICAgICAgICAgIHNiLmVtaXRPcChub2RlLCAnQk9PTEFORCcpO1xuICAgICAgICB9LFxuICAgICAgICBlYWNoOiAoKSA9PiB7XG4gICAgICAgICAgLy8gW3BvYmosIHByb3BdXG4gICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdEUk9QJyk7XG4gICAgICAgICAgLy8gWydfX3Byb3RvX18nLCBwb2JqLCBwcm9wXVxuICAgICAgICAgIHNiLmVtaXRQdXNoU3RyaW5nKG5vZGUsICdfX3Byb3RvX18nKTtcbiAgICAgICAgICAvLyBbcHJvcFZhbCwgcHJvcF1cbiAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ1BJQ0tJVEVNJyk7XG4gICAgICAgICAgLy8gWzAsIHByb3BWYWwsIHByb3BdXG4gICAgICAgICAgc2IuZW1pdFB1c2hJbnQobm9kZSwgMCk7XG4gICAgICAgICAgLy8gW29iamVjdFZhbCwgcHJvcF1cbiAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ1BJQ0tJVEVNJyk7XG4gICAgICAgICAgLy8gW3Byb3AsIG9iaiwgb2JqLCBwb2JqLCBwb2JqLCBwcm9wXVxuICAgICAgICAgIHByZXBhcmVMb29wKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGNsZWFudXA6ICgpID0+IHtcbiAgICAgICAgICAvLyBkbyBub3RoaW5nXG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICApO1xuICAgIC8vIFtvYmosIHByb3BdXG4gICAgc2IuZW1pdE9wKG5vZGUsICdOSVAnKTtcbiAgICAvLyBbb2JqLCBwcm9wLCBvYmpdXG4gICAgc2IuZW1pdE9wKG5vZGUsICdUVUNLJyk7XG4gICAgLy8gW3Byb3AsIG9iaiwgcHJvcCwgb2JqXVxuICAgIHNiLmVtaXRPcChub2RlLCAnT1ZFUicpO1xuICAgIC8vIFt2YWxdXG4gICAgc2IuZW1pdEhlbHBlcihcbiAgICAgIG5vZGUsXG4gICAgICBvcHRpb25zLFxuICAgICAgc2IuaGVscGVycy5pZih7XG4gICAgICAgIGNvbmRpdGlvbjogKCkgPT4ge1xuICAgICAgICAgIC8vIFtoYXNLZXksIHByb3AsIG9ial1cbiAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ0hBU0tFWScpO1xuICAgICAgICB9LFxuICAgICAgICB3aGVuVHJ1ZTogKCkgPT4ge1xuICAgICAgICAgIHRoaXMud2hlbkhhc1Byb3BlcnR5KCk7XG4gICAgICAgIH0sXG4gICAgICAgIHdoZW5GYWxzZTogKCkgPT4ge1xuICAgICAgICAgIHRoaXMud2hlbk5vdEhhc1Byb3BlcnR5KCk7XG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICApO1xuICB9XG59XG4iXX0=