@neo-one/smart-contract-compiler
Version:
NEO•ONE TypeScript smart contract compiler.
48 lines (46 loc) • 6.7 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const Helper_1 = require("../../Helper");
class FindObjectPropertyHelper extends Helper_1.Helper {
constructor({ accessor, dataExists, data, getObject }) {
super();
this.accessor = accessor;
this.dataExists = dataExists;
this.data = data;
this.getObject = getObject;
}
emit(sb, node, options) {
if (!options.pushValue) {
sb.emitOp(node, 'DROP');
sb.emitOp(node, 'DROP');
return;
}
sb.emitHelper(node, options, sb.helpers.findObjectPropertyBase({
whenHasProperty: () => {
sb.emitOp(node, 'PICKITEM');
sb.emitOp(node, 'DUP');
sb.emitHelper(node, options, sb.helpers.if({
condition: () => {
sb.emitOp(node, 'ARRAYSIZE');
sb.emitPushInt(node, 2);
sb.emitOp(node, 'EQUAL');
},
whenTrue: () => {
this.accessor();
},
whenFalse: () => {
this.dataExists();
},
}));
},
whenNotHasProperty: () => {
sb.emitOp(node, 'DROP');
sb.emitOp(node, 'DROP');
this.data();
},
getObject: this.getObject,
}));
}
}
exports.FindObjectPropertyHelper = FindObjectPropertyHelper;
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkZpbmRPYmplY3RQcm9wZXJ0eUhlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUlBLHlDQUFzQztBQVd0QyxNQUFhLHdCQUF5QixTQUFRLGVBQU07SUFNbEQsWUFBbUIsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQW1DO1FBQzNGLEtBQUssRUFBRSxDQUFDO1FBQ1IsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDekIsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7UUFDN0IsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7SUFDN0IsQ0FBQztJQUVNLElBQUksQ0FBQyxFQUFpQixFQUFFLElBQWEsRUFBRSxPQUFxQjtRQUNqRSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRTtZQUN0QixFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztZQUN4QixFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztZQUV4QixPQUFPO1NBQ1I7UUFFRCxFQUFFLENBQUMsVUFBVSxDQUNYLElBQUksRUFDSixPQUFPLEVBQ1AsRUFBRSxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQztZQUNoQyxlQUFlLEVBQUUsR0FBRyxFQUFFO2dCQUVwQixFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQztnQkFFNUIsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ3ZCLEVBQUUsQ0FBQyxVQUFVLENBQ1gsSUFBSSxFQUNKLE9BQU8sRUFDUCxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztvQkFDWixTQUFTLEVBQUUsR0FBRyxFQUFFO3dCQUVkLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDO3dCQUU3QixFQUFFLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQzt3QkFFeEIsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7b0JBQzNCLENBQUM7b0JBQ0QsUUFBUSxFQUFFLEdBQUcsRUFBRTt3QkFDYixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQ2xCLENBQUM7b0JBQ0QsU0FBUyxFQUFFLEdBQUcsRUFBRTt3QkFDZCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7b0JBQ3BCLENBQUM7aUJBQ0YsQ0FBQyxDQUNILENBQUM7WUFDSixDQUFDO1lBQ0Qsa0JBQWtCLEVBQUUsR0FBRyxFQUFFO2dCQUV2QixFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztnQkFFeEIsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBQ3hCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNkLENBQUM7WUFDRCxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7U0FDMUIsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0NBQ0Y7QUEvREQsNERBK0RDIiwiZmlsZSI6Im5lby1vbmUtc21hcnQtY29udHJhY3QtY29tcGlsZXIvc3JjL2NvbXBpbGUvaGVscGVyL3R5cGVzL29iamVjdC9GaW5kT2JqZWN0UHJvcGVydHlIZWxwZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHMgZnJvbSAndHlwZXNjcmlwdCc7XG5cbmltcG9ydCB7IFNjcmlwdEJ1aWxkZXIgfSBmcm9tICcuLi8uLi8uLi9zYic7XG5pbXBvcnQgeyBWaXNpdE9wdGlvbnMgfSBmcm9tICcuLi8uLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBIZWxwZXIgfSBmcm9tICcuLi8uLi9IZWxwZXInO1xuXG5leHBvcnQgaW50ZXJmYWNlIEZpbmRPYmplY3RQcm9wZXJ0eUhlbHBlck9wdGlvbnMge1xuICByZWFkb25seSBhY2Nlc3NvcjogKCkgPT4gdm9pZDtcbiAgcmVhZG9ubHkgZGF0YUV4aXN0czogKCkgPT4gdm9pZDtcbiAgcmVhZG9ubHkgZGF0YTogKCkgPT4gdm9pZDtcbiAgcmVhZG9ubHkgZ2V0T2JqZWN0OiAoc2I6IFNjcmlwdEJ1aWxkZXIpID0+IEhlbHBlcjtcbn1cblxuLy8gSW5wdXQ6IFtzdHJpbmdQcm9wLCBvYmplY3RWYWxdXG4vLyBPdXRwdXQ6IFt2YWxdXG5leHBvcnQgY2xhc3MgRmluZE9iamVjdFByb3BlcnR5SGVscGVyIGV4dGVuZHMgSGVscGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBhY2Nlc3NvcjogKCkgPT4gdm9pZDtcbiAgcHJpdmF0ZSByZWFkb25seSBkYXRhRXhpc3RzOiAoKSA9PiB2b2lkO1xuICBwcml2YXRlIHJlYWRvbmx5IGRhdGE6ICgpID0+IHZvaWQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgZ2V0T2JqZWN0OiAoc2I6IFNjcmlwdEJ1aWxkZXIpID0+IEhlbHBlcjtcblxuICBwdWJsaWMgY29uc3RydWN0b3IoeyBhY2Nlc3NvciwgZGF0YUV4aXN0cywgZGF0YSwgZ2V0T2JqZWN0IH06IEZpbmRPYmplY3RQcm9wZXJ0eUhlbHBlck9wdGlvbnMpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuYWNjZXNzb3IgPSBhY2Nlc3NvcjtcbiAgICB0aGlzLmRhdGFFeGlzdHMgPSBkYXRhRXhpc3RzO1xuICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gICAgdGhpcy5nZXRPYmplY3QgPSBnZXRPYmplY3Q7XG4gIH1cblxuICBwdWJsaWMgZW1pdChzYjogU2NyaXB0QnVpbGRlciwgbm9kZTogdHMuTm9kZSwgb3B0aW9uczogVmlzaXRPcHRpb25zKTogdm9pZCB7XG4gICAgaWYgKCFvcHRpb25zLnB1c2hWYWx1ZSkge1xuICAgICAgc2IuZW1pdE9wKG5vZGUsICdEUk9QJyk7XG4gICAgICBzYi5lbWl0T3Aobm9kZSwgJ0RST1AnKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHNiLmVtaXRIZWxwZXIoXG4gICAgICBub2RlLFxuICAgICAgb3B0aW9ucyxcbiAgICAgIHNiLmhlbHBlcnMuZmluZE9iamVjdFByb3BlcnR5QmFzZSh7XG4gICAgICAgIHdoZW5IYXNQcm9wZXJ0eTogKCkgPT4ge1xuICAgICAgICAgIC8vIFtwcm9wVmFsXVxuICAgICAgICAgIHNiLmVtaXRPcChub2RlLCAnUElDS0lURU0nKTtcbiAgICAgICAgICAvLyBbcHJvcFZhbCwgcHJvcFZhbF1cbiAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ0RVUCcpO1xuICAgICAgICAgIHNiLmVtaXRIZWxwZXIoXG4gICAgICAgICAgICBub2RlLFxuICAgICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICAgIHNiLmhlbHBlcnMuaWYoe1xuICAgICAgICAgICAgICBjb25kaXRpb246ICgpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBbc2l6ZSwgcHJvcFZhbF1cbiAgICAgICAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ0FSUkFZU0laRScpO1xuICAgICAgICAgICAgICAgIC8vIFsyLCBzaXplLCBwcm9wVmFsXVxuICAgICAgICAgICAgICAgIHNiLmVtaXRQdXNoSW50KG5vZGUsIDIpO1xuICAgICAgICAgICAgICAgIC8vIFtzaXplID09PSAyLCBwcm9wVmFsXVxuICAgICAgICAgICAgICAgIHNiLmVtaXRPcChub2RlLCAnRVFVQUwnKTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgd2hlblRydWU6ICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmFjY2Vzc29yKCk7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHdoZW5GYWxzZTogKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YUV4aXN0cygpO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgKTtcbiAgICAgICAgfSxcbiAgICAgICAgd2hlbk5vdEhhc1Byb3BlcnR5OiAoKSA9PiB7XG4gICAgICAgICAgLy8gW29ial1cbiAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ0RST1AnKTtcbiAgICAgICAgICAvLyBbXVxuICAgICAgICAgIHNiLmVtaXRPcChub2RlLCAnRFJPUCcpO1xuICAgICAgICAgIHRoaXMuZGF0YSgpO1xuICAgICAgICB9LFxuICAgICAgICBnZXRPYmplY3Q6IHRoaXMuZ2V0T2JqZWN0LFxuICAgICAgfSksXG4gICAgKTtcbiAgfVxufVxuIl19