UNPKG

@neo-one/smart-contract-compiler

Version:

NEO•ONE TypeScript smart contract compiler.

61 lines (59 loc) 2.64 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.add = void 0; const tslib_1 = require("tslib"); const ts_utils_1 = require("@neo-one/ts-utils"); const typescript_1 = tslib_1.__importDefault(require("typescript")); const constants_1 = require("../../constants"); const BuiltinCall_1 = require("../BuiltinCall"); class CreateEventNotifier extends BuiltinCall_1.BuiltinCall { emitCall(sb, node, options) { if (!options.pushValue) { return; } const args = ts_utils_1.tsUtils.argumented.getArguments(node); if (args.length < 1) { return; } const arg = args[0]; if (!typescript_1.default.isStringLiteral(arg)) { return; } const eventName = ts_utils_1.tsUtils.literal.getLiteralValue(arg); const type = sb.context.analysis.getType(node); const result = sb.context.analysis.extractSignatureForType(node, type, { error: true }); if (result === undefined) { return; } const { paramDecls, paramTypes } = result; sb.emitHelper(node, options, sb.helpers.createFunctionArray({ body: (innerOptionsIn) => { const innerOptions = sb.pushValueOptions(innerOptionsIn); sb.emitHelper(node, innerOptions, sb.helpers.parameters({ params: paramDecls, asArgsArr: true, map: (param, innerInnerOptions, isRestElement) => { let tpe = paramTypes.get(param); if (type !== undefined && isRestElement) { tpe = ts_utils_1.tsUtils.type_.getArrayType(type); } sb.emitHelper(node, innerInnerOptions, sb.helpers.unwrapValRecursive({ type: tpe })); }, })); sb.emitOp(node, 'UNPACK'); sb.emitPushString(node, eventName); sb.emitOp(node, 'SWAP'); sb.emitOp(node, 'INC'); sb.emitOp(node, 'PACK'); sb.emitSysCall(node, 'Neo.Runtime.Notify'); sb.emitHelper(node, innerOptions, sb.helpers.wrapUndefined); sb.emitHelper(node, innerOptions, sb.helpers.return); }, })); sb.emitHelper(node, options, sb.helpers.createFunctionObject({ property: constants_1.InternalObjectProperty.Call })); } } exports.add = (builtins) => { builtins.addContractValue('createEventNotifier', new CreateEventNotifier()); }; //# sourceMappingURL=createEventNotifier.js.map