@neo-one/smart-contract-compiler
Version:
NEO•ONE TypeScript smart contract compiler.
49 lines (47 loc) • 6.16 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const Helper_1 = require("../Helper");
class BindFunctionThisHelper extends Helper_1.Helper {
constructor(options) {
super();
this.overwrite = options.overwrite;
}
emit(sb, node, options) {
if (!options.pushValue) {
sb.emitOp(node, 'DROP');
sb.emitOp(node, 'DROP');
return;
}
let whenTrue;
if (this.overwrite) {
whenTrue = () => {
sb.emitOp(node, 'SWAP');
sb.emitPushInt(node, 2);
sb.emitOp(node, 'SETITEM');
};
}
else {
whenTrue = () => {
sb.emitOp(node, 'DROP');
sb.emitOp(node, 'DROP');
};
}
sb.emitHelper(node, options, sb.helpers.cloneFunction);
sb.emitOp(node, 'TUCK');
sb.emitOp(node, 'DUP');
sb.emitHelper(node, options, sb.helpers.if({
condition: () => {
sb.emitOp(node, 'ARRAYSIZE');
sb.emitPushInt(node, 3);
sb.emitOp(node, 'NUMEQUAL');
},
whenTrue,
whenFalse: () => {
sb.emitOp(node, 'SWAP');
sb.emitOp(node, 'APPEND');
},
}));
}
}
exports.BindFunctionThisHelper = BindFunctionThisHelper;
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkJpbmRGdW5jdGlvblRoaXNIZWxwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFJQSxzQ0FBbUM7QUFRbkMsTUFBYSxzQkFBdUIsU0FBUSxlQUFNO0lBR2hELFlBQW1CLE9BQXNDO1FBQ3ZELEtBQUssRUFBRSxDQUFDO1FBQ1IsSUFBSSxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDO0lBQ3JDLENBQUM7SUFFTSxJQUFJLENBQUMsRUFBaUIsRUFBRSxJQUFhLEVBQUUsT0FBcUI7UUFDakUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUU7WUFDdEIsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDeEIsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFFeEIsT0FBTztTQUNSO1FBRUQsSUFBSSxRQUFRLENBQUM7UUFDYixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDbEIsUUFBUSxHQUFHLEdBQUcsRUFBRTtnQkFFZCxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztnQkFFeEIsRUFBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBRXhCLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQzdCLENBQUMsQ0FBQztTQUNIO2FBQU07WUFDTCxRQUFRLEdBQUcsR0FBRyxFQUFFO2dCQUVkLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUV4QixFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztZQUMxQixDQUFDLENBQUM7U0FDSDtRQUdELEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRXZELEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRXhCLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRXZCLEVBQUUsQ0FBQyxVQUFVLENBQ1gsSUFBSSxFQUNKLE9BQU8sRUFDUCxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNaLFNBQVMsRUFBRSxHQUFHLEVBQUU7Z0JBRWQsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUM7Z0JBRTdCLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUV4QixFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQztZQUM5QixDQUFDO1lBQ0QsUUFBUTtZQUNSLFNBQVMsRUFBRSxHQUFHLEVBQUU7Z0JBRWQsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBRXhCLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQzVCLENBQUM7U0FDRixDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQWhFRCx3REFnRUMiLCJmaWxlIjoibmVvLW9uZS1zbWFydC1jb250cmFjdC1jb21waWxlci9zcmMvY29tcGlsZS9oZWxwZXIvZnVuY3Rpb24vQmluZEZ1bmN0aW9uVGhpc0hlbHBlci5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0cyBmcm9tICd0eXBlc2NyaXB0JztcblxuaW1wb3J0IHsgU2NyaXB0QnVpbGRlciB9IGZyb20gJy4uLy4uL3NiJztcbmltcG9ydCB7IFZpc2l0T3B0aW9ucyB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IEhlbHBlciB9IGZyb20gJy4uL0hlbHBlcic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmluZEZ1bmN0aW9uVGhpc0hlbHBlck9wdGlvbnMge1xuICByZWFkb25seSBvdmVyd3JpdGU6IGJvb2xlYW47XG59XG5cbi8vIElucHV0OiBbZnVuYywgdGhpc11cbi8vIE91dHB1dDogW2Z1bmNdXG5leHBvcnQgY2xhc3MgQmluZEZ1bmN0aW9uVGhpc0hlbHBlciBleHRlbmRzIEhlbHBlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgb3ZlcndyaXRlOiBib29sZWFuO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihvcHRpb25zOiBCaW5kRnVuY3Rpb25UaGlzSGVscGVyT3B0aW9ucykge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5vdmVyd3JpdGUgPSBvcHRpb25zLm92ZXJ3cml0ZTtcbiAgfVxuXG4gIHB1YmxpYyBlbWl0KHNiOiBTY3JpcHRCdWlsZGVyLCBub2RlOiB0cy5Ob2RlLCBvcHRpb25zOiBWaXNpdE9wdGlvbnMpOiB2b2lkIHtcbiAgICBpZiAoIW9wdGlvbnMucHVzaFZhbHVlKSB7XG4gICAgICBzYi5lbWl0T3Aobm9kZSwgJ0RST1AnKTtcbiAgICAgIHNiLmVtaXRPcChub2RlLCAnRFJPUCcpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IHdoZW5UcnVlO1xuICAgIGlmICh0aGlzLm92ZXJ3cml0ZSkge1xuICAgICAgd2hlblRydWUgPSAoKSA9PiB7XG4gICAgICAgIC8vIFt0aGlzLCBmdW5jLCBmdW5jXVxuICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ1NXQVAnKTtcbiAgICAgICAgLy8gWzIsIHRoaXMsIGZ1bmMsIGZ1bmNdXG4gICAgICAgIHNiLmVtaXRQdXNoSW50KG5vZGUsIDIpO1xuICAgICAgICAvLyBbZnVuY11cbiAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdTRVRJVEVNJyk7XG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICB3aGVuVHJ1ZSA9ICgpID0+IHtcbiAgICAgICAgLy8gW3RoaXMsIGZ1bmNdXG4gICAgICAgIHNiLmVtaXRPcChub2RlLCAnRFJPUCcpO1xuICAgICAgICAvLyBbZnVuY11cbiAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdEUk9QJyk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIFtmdW5jLCB0aGlzXVxuICAgIHNiLmVtaXRIZWxwZXIobm9kZSwgb3B0aW9ucywgc2IuaGVscGVycy5jbG9uZUZ1bmN0aW9uKTtcbiAgICAvLyBbZnVuYywgdGhpcywgZnVuY11cbiAgICBzYi5lbWl0T3Aobm9kZSwgJ1RVQ0snKTtcbiAgICAvLyBbZnVuYywgZnVuYywgdGhpcywgZnVuY11cbiAgICBzYi5lbWl0T3Aobm9kZSwgJ0RVUCcpO1xuICAgIC8vIFtmdW5jXVxuICAgIHNiLmVtaXRIZWxwZXIoXG4gICAgICBub2RlLFxuICAgICAgb3B0aW9ucyxcbiAgICAgIHNiLmhlbHBlcnMuaWYoe1xuICAgICAgICBjb25kaXRpb246ICgpID0+IHtcbiAgICAgICAgICAvLyBbc2l6ZSwgZnVuYywgdGhpcywgZnVuY11cbiAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ0FSUkFZU0laRScpO1xuICAgICAgICAgIC8vIFszLCBzaXplLCBmdW5jLCB0aGlzLCBmdW5jXVxuICAgICAgICAgIHNiLmVtaXRQdXNoSW50KG5vZGUsIDMpO1xuICAgICAgICAgIC8vIFtoYXNUaGlzLCBmdW5jLCB0aGlzLCBmdW5jXVxuICAgICAgICAgIHNiLmVtaXRPcChub2RlLCAnTlVNRVFVQUwnKTtcbiAgICAgICAgfSxcbiAgICAgICAgd2hlblRydWUsXG4gICAgICAgIHdoZW5GYWxzZTogKCkgPT4ge1xuICAgICAgICAgIC8vIFt0aGlzLCBmdW5jLCBmdW5jXVxuICAgICAgICAgIHNiLmVtaXRPcChub2RlLCAnU1dBUCcpO1xuICAgICAgICAgIC8vIFtmdW5jXVxuICAgICAgICAgIHNiLmVtaXRPcChub2RlLCAnQVBQRU5EJyk7XG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICApO1xuICB9XG59XG4iXX0=