@neo-one/smart-contract-compiler
Version:
NEO•ONE TypeScript smart contract compiler.
48 lines (46 loc) • 8.31 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const Helper_1 = require("../../Helper");
class InstanceofHelper extends Helper_1.Helper {
emit(sb, node, options) {
if (!options.pushValue) {
sb.emitOp(node, 'DROP');
sb.emitOp(node, 'DROP');
return;
}
sb.emitPushString(node, 'prototype');
sb.emitHelper(node, options, sb.helpers.getPropertyObjectProperty);
sb.emitOp(node, 'SWAP');
const prepareLoop = () => {
sb.emitOp(node, 'DUP');
sb.emitPushString(node, '__proto__');
sb.emitHelper(node, options, sb.helpers.getPropertyObjectProperty);
sb.emitOp(node, 'DUP');
sb.emitOp(node, 'ROT');
sb.emitPushInt(node, 3);
sb.emitOp(node, 'PICK');
};
prepareLoop();
sb.emitHelper(node, options, sb.helpers.forLoop({
condition: () => {
sb.emitOp(node, 'EQUAL');
sb.emitOp(node, 'DUP');
sb.emitOp(node, 'NOT');
sb.emitOp(node, 'ROT');
sb.emitHelper(node, options, sb.helpers.isUndefined);
sb.emitOp(node, 'NOT');
sb.emitOp(node, 'BOOLAND');
},
each: () => {
sb.emitOp(node, 'DROP');
prepareLoop();
},
cleanup: () => {
},
}));
sb.emitOp(node, 'NIP');
sb.emitOp(node, 'NIP');
}
}
exports.InstanceofHelper = InstanceofHelper;
//# sourceMappingURL=data:application/json;charset=utf8;base64,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L2hlbHBlci90eXBlcy9vYmplY3QvSW5zdGFuY2VvZkhlbHBlci5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0cyBmcm9tICd0eXBlc2NyaXB0JztcblxuaW1wb3J0IHsgU2NyaXB0QnVpbGRlciB9IGZyb20gJy4uLy4uLy4uL3NiJztcbmltcG9ydCB7IFZpc2l0T3B0aW9ucyB9IGZyb20gJy4uLy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IEhlbHBlciB9IGZyb20gJy4uLy4uL0hlbHBlcic7XG5cbi8vIElucHV0OiBbY29uc3RydWN0b3JPYmplY3RWYWwsIG9iamVjdFZhbF1cbi8vIE91dHB1dDogW2Jvb2xlYW5dXG5leHBvcnQgY2xhc3MgSW5zdGFuY2VvZkhlbHBlciBleHRlbmRzIEhlbHBlciB7XG4gIHB1YmxpYyBlbWl0KHNiOiBTY3JpcHRCdWlsZGVyLCBub2RlOiB0cy5Ob2RlLCBvcHRpb25zOiBWaXNpdE9wdGlvbnMpOiB2b2lkIHtcbiAgICBpZiAoIW9wdGlvbnMucHVzaFZhbHVlKSB7XG4gICAgICBzYi5lbWl0T3Aobm9kZSwgJ0RST1AnKTtcbiAgICAgIHNiLmVtaXRPcChub2RlLCAnRFJPUCcpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gWydwcm90b3R5cGUnLCBjb25zdHJ1Y3Rvck9iamVjdFZhbCwgb2JqZWN0VmFsXVxuICAgIHNiLmVtaXRQdXNoU3RyaW5nKG5vZGUsICdwcm90b3R5cGUnKTtcbiAgICAvLyBbcHJvdG90eXBlVmFsLCBvYmplY3RWYWxdXG4gICAgc2IuZW1pdEhlbHBlcihub2RlLCBvcHRpb25zLCBzYi5oZWxwZXJzLmdldFByb3BlcnR5T2JqZWN0UHJvcGVydHkpO1xuICAgIC8vIFtvYmplY3RWYWwsIHByb3RvdHlwZVZhbF1cbiAgICBzYi5lbWl0T3Aobm9kZSwgJ1NXQVAnKTtcblxuICAgIGNvbnN0IHByZXBhcmVMb29wID0gKCkgPT4ge1xuICAgICAgLy8gW29iamVjdFZhbCwgb2JqZWN0VmFsLCBwcm90b3R5cGVWYWxdXG4gICAgICBzYi5lbWl0T3Aobm9kZSwgJ0RVUCcpO1xuICAgICAgLy8gWydfX3Byb3RvX18nLCBvYmplY3RWYWwsIG9iamVjdFZhbCwgcHJvdG90eXBlVmFsXVxuICAgICAgc2IuZW1pdFB1c2hTdHJpbmcobm9kZSwgJ19fcHJvdG9fXycpO1xuICAgICAgLy8gW25leHRQcm90b3R5cGVWYWwsIG9iamVjdFZhbCwgcHJvdG90eXBlVmFsXVxuICAgICAgc2IuZW1pdEhlbHBlcihub2RlLCBvcHRpb25zLCBzYi5oZWxwZXJzLmdldFByb3BlcnR5T2JqZWN0UHJvcGVydHkpO1xuICAgICAgLy8gW25leHRQcm90b3R5cGVWYWwsIG5leHRQcm90b3R5cGVWYWwsIG9iamVjdFZhbCwgcHJvdG90eXBlVmFsXVxuICAgICAgc2IuZW1pdE9wKG5vZGUsICdEVVAnKTtcbiAgICAgIC8vIFtvYmplY3RWYWwsIG5leHRQcm90b3R5cGVWYWwsIG5leHRQcm90b3R5cGVWYWwsIHByb3RvdHlwZVZhbF1cbiAgICAgIHNiLmVtaXRPcChub2RlLCAnUk9UJyk7XG4gICAgICAvLyBbMywgb2JqZWN0VmFsLCBuZXh0UHJvdG90eXBlVmFsLCBuZXh0UHJvdG90eXBlVmFsLCBwcm90b3R5cGVWYWxdXG4gICAgICBzYi5lbWl0UHVzaEludChub2RlLCAzKTtcbiAgICAgIC8vIFtwcm90b3R5cGVWYWwsIG9iamVjdFZhbCwgbmV4dFByb3RvdHlwZVZhbCwgbmV4dFByb3RvdHlwZVZhbCwgcHJvdG90eXBlVmFsXVxuICAgICAgc2IuZW1pdE9wKG5vZGUsICdQSUNLJyk7XG4gICAgfTtcblxuICAgIC8vIFtwcm90b3R5cGVWYWwsIG9iamVjdFZhbCwgbmV4dFByb3RvdHlwZVZhbCwgbmV4dFByb3RvdHlwZVZhbCwgcHJvdG90eXBlVmFsXVxuICAgIHByZXBhcmVMb29wKCk7XG5cbiAgICBzYi5lbWl0SGVscGVyKFxuICAgICAgbm9kZSxcbiAgICAgIG9wdGlvbnMsXG4gICAgICBzYi5oZWxwZXJzLmZvckxvb3Aoe1xuICAgICAgICBjb25kaXRpb246ICgpID0+IHtcbiAgICAgICAgICAvLyBbc2FtZVByb3RvdHlwZSwgbmV4dFByb3RvdHlwZVZhbCwgbmV4dFByb3RvdHlwZVZhbCwgcHJvdG90eXBlVmFsXVxuICAgICAgICAgIHNiLmVtaXRPcChub2RlLCAnRVFVQUwnKTtcbiAgICAgICAgICAvLyBbc2FtZVByb3RvdHlwZSwgc2FtZVByb3RvdHlwZSwgbmV4dFByb3RvdHlwZVZhbCwgbmV4dFByb3RvdHlwZVZhbCwgcHJvdG90eXBlVmFsXVxuICAgICAgICAgIHNiLmVtaXRPcChub2RlLCAnRFVQJyk7XG4gICAgICAgICAgLy8gW25vdFNhbWVQcm90b3R5cGUsIHNhbWVQcm90b3R5cGUsIG5leHRQcm90b3R5cGVWYWwsIG5leHRQcm90b3R5cGVWYWwsIHByb3RvdHlwZVZhbF1cbiAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ05PVCcpO1xuICAgICAgICAgIC8vIFtuZXh0UHJvdG90eXBlVmFsLCBub3RTYW1lUHJvdG90eXBlLCBzYW1lUHJvdG90eXBlLCBuZXh0UHJvdG90eXBlVmFsLCBwcm90b3R5cGVWYWxdXG4gICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdST1QnKTtcbiAgICAgICAgICAvLyBbaXNVbmRlZmluZWQsIG5vdFNhbWVQcm90b3R5cGUsIHNhbWVQcm90b3R5cGUsIG5leHRQcm90b3R5cGVWYWwsIHByb3RvdHlwZVZhbF1cbiAgICAgICAgICBzYi5lbWl0SGVscGVyKG5vZGUsIG9wdGlvbnMsIHNiLmhlbHBlcnMuaXNVbmRlZmluZWQpO1xuICAgICAgICAgIC8vIFtoYXNQcm90b3R5cGUsIG5vdFNhbWVQcm90b3R5cGUsIHNhbWVQcm90b3R5cGUsIG5leHRQcm90b3R5cGVWYWwsIHByb3RvdHlwZVZhbF1cbiAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ05PVCcpO1xuICAgICAgICAgIC8vIFtoYXNQcm90b3R5cGVBbmROb3RTYW1lLCBzYW1lUHJvdG90eXBlLCBuZXh0UHJvdG90eXBlVmFsLCBwcm90b3R5cGVWYWxdXG4gICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdCT09MQU5EJyk7XG4gICAgICAgIH0sXG4gICAgICAgIGVhY2g6ICgpID0+IHtcbiAgICAgICAgICAvLyBbbmV4dFByb3RvdHlwZVZhbCwgcHJvdG90eXBlVmFsXVxuICAgICAgICAgIHNiLmVtaXRPcChub2RlLCAnRFJPUCcpO1xuICAgICAgICAgIC8vIFtwcm90b3R5cGVWYWwsIG9iamVjdFZhbCwgbmV4dFByb3RvdHlwZVZhbCwgbmV4dFByb3RvdHlwZVZhbCwgcHJvdG90eXBlVmFsXVxuICAgICAgICAgIHByZXBhcmVMb29wKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGNsZWFudXA6ICgpID0+IHtcbiAgICAgICAgICAvLyBkbyBub3RoaW5nXG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICApO1xuXG4gICAgLy8gW3NhbWVQcm90b3R5cGUsIHByb3RvdHlwZVZhbF1cbiAgICBzYi5lbWl0T3Aobm9kZSwgJ05JUCcpO1xuICAgIC8vIFtzYW1lUHJvdG90eXBlXVxuICAgIHNiLmVtaXRPcChub2RlLCAnTklQJyk7XG4gIH1cbn1cbiJdfQ==