@neo-one/smart-contract-compiler
Version:
NEO•ONE TypeScript smart contract compiler.
68 lines (66 loc) • 10.6 kB
JavaScript
;
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=