UNPKG

@neo-one/smart-contract-compiler

Version:

NEO•ONE TypeScript smart contract compiler.

60 lines (58 loc) 9.73 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); 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=data:application/json;charset=utf8;base64,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Q0FBQyxJQUFJLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztnQkFFM0MsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBRTVELEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3ZELENBQUM7U0FDRixDQUFDLENBQ0gsQ0FBQztRQUVGLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLEVBQUUsUUFBUSxFQUFFLGtDQUFzQixDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMzRyxDQUFDO0NBQ0Y7QUFHWSxRQUFBLEdBQUcsR0FBRyxDQUFDLFFBQWtCLEVBQVEsRUFBRTtJQUM5QyxRQUFRLENBQUMsZ0JBQWdCLENBQUMscUJBQXFCLEVBQUUsSUFBSSxtQkFBbUIsRUFBRSxDQUFDLENBQUM7QUFDOUUsQ0FBQyxDQUFDIiwiZmlsZSI6Im5lby1vbmUtc21hcnQtY29udHJhY3QtY29tcGlsZXIvc3JjL2NvbXBpbGUvYnVpbHRpbnMvY29udHJhY3QvY3JlYXRlRXZlbnROb3RpZmllci5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHRzVXRpbHMgfSBmcm9tICdAbmVvLW9uZS90cy11dGlscyc7XG5pbXBvcnQgdHMgZnJvbSAndHlwZXNjcmlwdCc7XG5pbXBvcnQgeyBJbnRlcm5hbE9iamVjdFByb3BlcnR5IH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IFNjcmlwdEJ1aWxkZXIgfSBmcm9tICcuLi8uLi9zYic7XG5pbXBvcnQgeyBWaXNpdE9wdGlvbnMgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBCdWlsdGluQ2FsbCB9IGZyb20gJy4uL0J1aWx0aW5DYWxsJztcbmltcG9ydCB7IEJ1aWx0aW5zIH0gZnJvbSAnLi4vQnVpbHRpbnMnO1xuXG5jbGFzcyBDcmVhdGVFdmVudE5vdGlmaWVyIGV4dGVuZHMgQnVpbHRpbkNhbGwge1xuICBwdWJsaWMgZW1pdENhbGwoc2I6IFNjcmlwdEJ1aWxkZXIsIG5vZGU6IHRzLkNhbGxFeHByZXNzaW9uLCBvcHRpb25zOiBWaXNpdE9wdGlvbnMpOiB2b2lkIHtcbiAgICBpZiAoIW9wdGlvbnMucHVzaFZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYXJncyA9IHRzVXRpbHMuYXJndW1lbnRlZC5nZXRBcmd1bWVudHMobm9kZSk7XG4gICAgaWYgKGFyZ3MubGVuZ3RoIDwgMSkge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBhcmcgPSBhcmdzWzBdO1xuICAgIGlmICghdHMuaXNTdHJpbmdMaXRlcmFsKGFyZykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBldmVudE5hbWUgPSB0c1V0aWxzLmxpdGVyYWwuZ2V0TGl0ZXJhbFZhbHVlKGFyZyk7XG4gICAgY29uc3QgdHlwZSA9IHNiLmNvbnRleHQuYW5hbHlzaXMuZ2V0VHlwZShub2RlKTtcbiAgICBjb25zdCByZXN1bHQgPSBzYi5jb250ZXh0LmFuYWx5c2lzLmV4dHJhY3RTaWduYXR1cmVGb3JUeXBlKG5vZGUsIHR5cGUsIHsgZXJyb3I6IHRydWUgfSk7XG4gICAgaWYgKHJlc3VsdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHsgcGFyYW1EZWNscywgcGFyYW1UeXBlcyB9ID0gcmVzdWx0O1xuICAgIC8vIFtmYXJyXVxuICAgIHNiLmVtaXRIZWxwZXIoXG4gICAgICBub2RlLFxuICAgICAgb3B0aW9ucyxcbiAgICAgIHNiLmhlbHBlcnMuY3JlYXRlRnVuY3Rpb25BcnJheSh7XG4gICAgICAgIGJvZHk6IChpbm5lck9wdGlvbnNJbikgPT4ge1xuICAgICAgICAgIGNvbnN0IGlubmVyT3B0aW9ucyA9IHNiLnB1c2hWYWx1ZU9wdGlvbnMoaW5uZXJPcHRpb25zSW4pO1xuXG4gICAgICAgICAgLy8gW3BhcmFtc11cbiAgICAgICAgICBzYi5lbWl0SGVscGVyKFxuICAgICAgICAgICAgbm9kZSxcbiAgICAgICAgICAgIGlubmVyT3B0aW9ucyxcbiAgICAgICAgICAgIHNiLmhlbHBlcnMucGFyYW1ldGVycyh7XG4gICAgICAgICAgICAgIHBhcmFtczogcGFyYW1EZWNscyxcbiAgICAgICAgICAgICAgYXNBcmdzQXJyOiB0cnVlLFxuICAgICAgICAgICAgICBtYXA6IChwYXJhbSwgaW5uZXJJbm5lck9wdGlvbnMsIGlzUmVzdEVsZW1lbnQpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgdHBlID0gcGFyYW1UeXBlcy5nZXQocGFyYW0pO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlICE9PSB1bmRlZmluZWQgJiYgaXNSZXN0RWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgdHBlID0gdHNVdGlscy50eXBlXy5nZXRBcnJheVR5cGUodHlwZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIFt2YWx1ZV1cbiAgICAgICAgICAgICAgICBzYi5lbWl0SGVscGVyKG5vZGUsIGlubmVySW5uZXJPcHRpb25zLCBzYi5oZWxwZXJzLnVud3JhcFZhbFJlY3Vyc2l2ZSh7IHR5cGU6IHRwZSB9KSk7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICApO1xuICAgICAgICAgIC8vIFtsZW5ndGgsIC4uLnBhcmFtc11cbiAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ1VOUEFDSycpO1xuICAgICAgICAgIC8vIFtldmVudE5hbWUsIGxlbmd0aCwgLi4ucGFyYW1zXVxuICAgICAgICAgIHNiLmVtaXRQdXNoU3RyaW5nKG5vZGUsIGV2ZW50TmFtZSk7XG4gICAgICAgICAgLy8gW2xlbmd0aCwgZXZlbnROYW1lLCAuLi5wYXJhbXNdXG4gICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdTV0FQJyk7XG4gICAgICAgICAgLy8gW2xlbmd0aCwgZXZlbnROYW1lLCAuLi5wYXJhbXNdXG4gICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdJTkMnKTtcbiAgICAgICAgICAvLyBbYXJyXVxuICAgICAgICAgIHNiLmVtaXRPcChub2RlLCAnUEFDSycpO1xuICAgICAgICAgIC8vIFtdXG4gICAgICAgICAgc2IuZW1pdFN5c0NhbGwobm9kZSwgJ05lby5SdW50aW1lLk5vdGlmeScpO1xuICAgICAgICAgIC8vIFt2YWxdXG4gICAgICAgICAgc2IuZW1pdEhlbHBlcihub2RlLCBpbm5lck9wdGlvbnMsIHNiLmhlbHBlcnMud3JhcFVuZGVmaW5lZCk7XG4gICAgICAgICAgLy8gW11cbiAgICAgICAgICBzYi5lbWl0SGVscGVyKG5vZGUsIGlubmVyT3B0aW9ucywgc2IuaGVscGVycy5yZXR1cm4pO1xuICAgICAgICB9LFxuICAgICAgfSksXG4gICAgKTtcbiAgICAvLyBbZm9iamVjdFZhbF1cbiAgICBzYi5lbWl0SGVscGVyKG5vZGUsIG9wdGlvbnMsIHNiLmhlbHBlcnMuY3JlYXRlRnVuY3Rpb25PYmplY3QoeyBwcm9wZXJ0eTogSW50ZXJuYWxPYmplY3RQcm9wZXJ0eS5DYWxsIH0pKTtcbiAgfVxufVxuXG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmUgZXhwb3J0LW5hbWVcbmV4cG9ydCBjb25zdCBhZGQgPSAoYnVpbHRpbnM6IEJ1aWx0aW5zKTogdm9pZCA9PiB7XG4gIGJ1aWx0aW5zLmFkZENvbnRyYWN0VmFsdWUoJ2NyZWF0ZUV2ZW50Tm90aWZpZXInLCBuZXcgQ3JlYXRlRXZlbnROb3RpZmllcigpKTtcbn07XG4iXX0=