UNPKG

@neo-one/smart-contract-compiler

Version:

NEO•ONE TypeScript smart contract compiler.

32 lines (30 loc) 5.54 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const ts_utils_1 = require("@neo-one/ts-utils"); const Helper_1 = require("../Helper"); class InvokeSmartContractMethodHelper extends Helper_1.Helper { constructor({ method }) { super(); this.method = method; } emit(sb, node, optionsIn) { const options = sb.pushValueOptions(optionsIn); sb.withProgramCounter((finallyPC) => { sb.withProgramCounter((catchPC) => { const rootOptions = sb.finallyPCOptions(sb.catchPCOptions(options, catchPC.getLast()), finallyPC.getLast()); sb.visit(ts_utils_1.tsUtils.body.getBodyOrThrow(this.method), rootOptions); sb.emitHelper(this.method, rootOptions, sb.helpers.wrapUndefined); sb.emitHelper(this.method, rootOptions, sb.helpers.return); }); sb.emitOp(node, 'DROP'); sb.emitHelper(node, options, sb.helpers.throwCompletion); }); sb.emitOp(node, 'DROP'); sb.emitOp(node, 'DROP'); if (!optionsIn.pushValue) { sb.emitOp(node, 'DROP'); } } } exports.InvokeSmartContractMethodHelper = InvokeSmartContractMethodHelper; //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkludm9rZVNtYXJ0Q29udHJhY3RNZXRob2RIZWxwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxnREFBNEM7QUFJNUMsc0NBQW1DO0FBY25DLE1BQWEsK0JBQWdDLFNBQVEsZUFBTTtJQUd6RCxZQUFtQixFQUFFLE1BQU0sRUFBMEM7UUFDbkUsS0FBSyxFQUFFLENBQUM7UUFDUixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztJQUN2QixDQUFDO0lBRU0sSUFBSSxDQUFDLEVBQWlCLEVBQUUsSUFBYSxFQUFFLFNBQXVCO1FBQ25FLE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUUvQyxFQUFFLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRTtZQUNsQyxFQUFFLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtnQkFDaEMsTUFBTSxXQUFXLEdBQUcsRUFBRSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO2dCQUM1RyxFQUFFLENBQUMsS0FBSyxDQUFDLGtCQUFPLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUM7Z0JBQ2hFLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDbEUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFdBQVcsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzdELENBQUMsQ0FBQyxDQUFDO1lBR0gsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFHeEIsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDM0QsQ0FBQyxDQUFDLENBQUM7UUFHSCxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztRQUV4QixFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztRQUV4QixJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRTtZQUV4QixFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztTQUN6QjtJQUNILENBQUM7Q0FDRjtBQXBDRCwwRUFvQ0MiLCJmaWxlIjoibmVvLW9uZS1zbWFydC1jb250cmFjdC1jb21waWxlci9zcmMvY29tcGlsZS9oZWxwZXIvY29udHJhY3QvSW52b2tlU21hcnRDb250cmFjdE1ldGhvZEhlbHBlci5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHRzVXRpbHMgfSBmcm9tICdAbmVvLW9uZS90cy11dGlscyc7XG5pbXBvcnQgdHMgZnJvbSAndHlwZXNjcmlwdCc7XG5pbXBvcnQgeyBTY3JpcHRCdWlsZGVyIH0gZnJvbSAnLi4vLi4vc2InO1xuaW1wb3J0IHsgVmlzaXRPcHRpb25zIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgSGVscGVyIH0gZnJvbSAnLi4vSGVscGVyJztcblxudHlwZSBNZXRob2RUeXBlID1cbiAgfCB0cy5NZXRob2REZWNsYXJhdGlvblxuICB8IHRzLkdldEFjY2Vzc29yRGVjbGFyYXRpb25cbiAgfCB0cy5TZXRBY2Nlc3NvckRlY2xhcmF0aW9uXG4gIHwgdHMuQ29uc3RydWN0b3JEZWNsYXJhdGlvbjtcblxuZXhwb3J0IGludGVyZmFjZSBJbnZva2VTbWFydENvbnRyYWN0TWV0aG9kSGVscGVyT3B0aW9ucyB7XG4gIHJlYWRvbmx5IG1ldGhvZDogTWV0aG9kVHlwZTtcbn1cblxuLy8gSW5wdXQ6IFtdXG4vLyBPdXRwdXQ6IFtdXG5leHBvcnQgY2xhc3MgSW52b2tlU21hcnRDb250cmFjdE1ldGhvZEhlbHBlciBleHRlbmRzIEhlbHBlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgbWV0aG9kOiBNZXRob2RUeXBlO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcih7IG1ldGhvZCB9OiBJbnZva2VTbWFydENvbnRyYWN0TWV0aG9kSGVscGVyT3B0aW9ucykge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5tZXRob2QgPSBtZXRob2Q7XG4gIH1cblxuICBwdWJsaWMgZW1pdChzYjogU2NyaXB0QnVpbGRlciwgbm9kZTogdHMuTm9kZSwgb3B0aW9uc0luOiBWaXNpdE9wdGlvbnMpOiB2b2lkIHtcbiAgICBjb25zdCBvcHRpb25zID0gc2IucHVzaFZhbHVlT3B0aW9ucyhvcHRpb25zSW4pO1xuXG4gICAgc2Iud2l0aFByb2dyYW1Db3VudGVyKChmaW5hbGx5UEMpID0+IHtcbiAgICAgIHNiLndpdGhQcm9ncmFtQ291bnRlcigoY2F0Y2hQQykgPT4ge1xuICAgICAgICBjb25zdCByb290T3B0aW9ucyA9IHNiLmZpbmFsbHlQQ09wdGlvbnMoc2IuY2F0Y2hQQ09wdGlvbnMob3B0aW9ucywgY2F0Y2hQQy5nZXRMYXN0KCkpLCBmaW5hbGx5UEMuZ2V0TGFzdCgpKTtcbiAgICAgICAgc2IudmlzaXQodHNVdGlscy5ib2R5LmdldEJvZHlPclRocm93KHRoaXMubWV0aG9kKSwgcm9vdE9wdGlvbnMpO1xuICAgICAgICBzYi5lbWl0SGVscGVyKHRoaXMubWV0aG9kLCByb290T3B0aW9ucywgc2IuaGVscGVycy53cmFwVW5kZWZpbmVkKTtcbiAgICAgICAgc2IuZW1pdEhlbHBlcih0aGlzLm1ldGhvZCwgcm9vdE9wdGlvbnMsIHNiLmhlbHBlcnMucmV0dXJuKTtcbiAgICAgIH0pO1xuICAgICAgLy8gRXJyb3IgdGhyb3duLCBkcm9wIHRoZSBUSFJPV19DT01QTEVUSU9OIGFuZCByZWhhbmRsZSBpdCBmb3IgdHJhY2VcbiAgICAgIC8vIFtlcnJvcl1cbiAgICAgIHNiLmVtaXRPcChub2RlLCAnRFJPUCcpO1xuICAgICAgLy8gV2UgZG9uJ3QgcGFzcyB0aGUgZmluYWxseVBDIGluIGhlcmUgYmVjYXVzZSB3ZSBhY3R1YWxseSB3YW50IHRvIGJyZWFrIG91dCBvZiB0aGlzIGNhbGxcbiAgICAgIC8vIFtdXG4gICAgICBzYi5lbWl0SGVscGVyKG5vZGUsIG9wdGlvbnMsIHNiLmhlbHBlcnMudGhyb3dDb21wbGV0aW9uKTtcbiAgICB9KTtcbiAgICAvLyBEcm9wIHRoZSBGSU5BTExZX0NPTVBMRVRJT05cbiAgICAvLyBbbm9ybWFsLCB2YWxdXG4gICAgc2IuZW1pdE9wKG5vZGUsICdEUk9QJyk7XG4gICAgLy8gW3ZhbF1cbiAgICBzYi5lbWl0T3Aobm9kZSwgJ0RST1AnKTtcblxuICAgIGlmICghb3B0aW9uc0luLnB1c2hWYWx1ZSkge1xuICAgICAgLy8gW11cbiAgICAgIHNiLmVtaXRPcChub2RlLCAnRFJPUCcpO1xuICAgIH1cbiAgfVxufVxuIl19