@neo-one/smart-contract-compiler
Version:
NEO•ONE TypeScript smart contract compiler.
60 lines (58 loc) • 9.73 kB
JavaScript
;
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=