UNPKG

@neo-one/smart-contract-compiler

Version:

NEO•ONE TypeScript smart contract compiler.

54 lines (52 loc) 7.86 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const ts_utils_1 = require("@neo-one/ts-utils"); const constants_1 = require("../../constants"); const BuiltinInterface_1 = require("../BuiltinInterface"); const BuiltinNew_1 = require("../BuiltinNew"); const BuiltinSlotInstanceMemberValue_1 = require("../BuiltinSlotInstanceMemberValue"); class ErrorInterface extends BuiltinInterface_1.BuiltinInterface { } class ErrorValue extends BuiltinNew_1.BuiltinNew { constructor() { super(...arguments); this.type = 'ErrorConstructor'; } emitInstanceOf(sb, node, optionsIn) { const options = sb.pushValueOptions(optionsIn); sb.visit(node, options); if (optionsIn.pushValue) { sb.emitHelper(node, options, sb.helpers.isError); sb.emitHelper(node, options, sb.helpers.wrapBoolean); } else { sb.emitOp(node, 'DROP'); } } emitNew(sb, node, optionsIn) { const options = sb.pushValueOptions(optionsIn); const args = ts_utils_1.tsUtils.argumented.getArgumentsArray(node); if (args.length === 0) { sb.emitPushString(node, ''); sb.emitHelper(node, options, sb.helpers.wrapString); } else { sb.visit(args[0], options); } sb.emitOp(node, 'NEWMAP'); sb.emitOp(node, 'TUCK'); sb.emitPushInt(node, constants_1.ErrorSlots.message); sb.emitOp(node, 'ROT'); sb.emitOp(node, 'SETITEM'); sb.emitHelper(node, optionsIn, sb.helpers.wrapError); } } class ErrorConstructorInterface extends BuiltinInterface_1.BuiltinInterface { } exports.add = (builtins) => { builtins.addInterface('Error', new ErrorInterface()); builtins.addValue('Error', new ErrorValue()); builtins.addGlobalMember('Error', 'message', new BuiltinSlotInstanceMemberValue_1.BuiltinSlotInstanceMemberValue(constants_1.Types.Error, constants_1.ErrorSlots.message)); builtins.addInterface('ErrorConstructor', new ErrorConstructorInterface()); }; //# sourceMappingURL=data:application/json;charset=utf8;base64,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QUF5QixFQUFFLENBQUMsQ0FBQztBQUM3RSxDQUFDLENBQUMiLCJmaWxlIjoibmVvLW9uZS1zbWFydC1jb250cmFjdC1jb21waWxlci9zcmMvY29tcGlsZS9idWlsdGlucy9lcnJvci9pbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHRzVXRpbHMgfSBmcm9tICdAbmVvLW9uZS90cy11dGlscyc7XG5pbXBvcnQgdHMgZnJvbSAndHlwZXNjcmlwdCc7XG5pbXBvcnQgeyBFcnJvclNsb3RzLCBUeXBlcyB9IGZyb20gJy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBTY3JpcHRCdWlsZGVyIH0gZnJvbSAnLi4vLi4vc2InO1xuaW1wb3J0IHsgVmlzaXRPcHRpb25zIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgQnVpbHRpbkludGVyZmFjZSB9IGZyb20gJy4uL0J1aWx0aW5JbnRlcmZhY2UnO1xuaW1wb3J0IHsgQnVpbHRpbk5ldyB9IGZyb20gJy4uL0J1aWx0aW5OZXcnO1xuaW1wb3J0IHsgQnVpbHRpbnMgfSBmcm9tICcuLi9CdWlsdGlucyc7XG5pbXBvcnQgeyBCdWlsdGluU2xvdEluc3RhbmNlTWVtYmVyVmFsdWUgfSBmcm9tICcuLi9CdWlsdGluU2xvdEluc3RhbmNlTWVtYmVyVmFsdWUnO1xuXG5jbGFzcyBFcnJvckludGVyZmFjZSBleHRlbmRzIEJ1aWx0aW5JbnRlcmZhY2Uge31cbmNsYXNzIEVycm9yVmFsdWUgZXh0ZW5kcyBCdWlsdGluTmV3IHtcbiAgcHVibGljIHJlYWRvbmx5IHR5cGUgPSAnRXJyb3JDb25zdHJ1Y3Rvcic7XG5cbiAgcHVibGljIGVtaXRJbnN0YW5jZU9mKHNiOiBTY3JpcHRCdWlsZGVyLCBub2RlOiB0cy5FeHByZXNzaW9uLCBvcHRpb25zSW46IFZpc2l0T3B0aW9ucyk6IHZvaWQge1xuICAgIGNvbnN0IG9wdGlvbnMgPSBzYi5wdXNoVmFsdWVPcHRpb25zKG9wdGlvbnNJbik7XG4gICAgLy8gW3ZhbF1cbiAgICBzYi52aXNpdChub2RlLCBvcHRpb25zKTtcbiAgICBpZiAob3B0aW9uc0luLnB1c2hWYWx1ZSkge1xuICAgICAgLy8gW2Jvb2xlYW5dXG4gICAgICBzYi5lbWl0SGVscGVyKG5vZGUsIG9wdGlvbnMsIHNiLmhlbHBlcnMuaXNFcnJvcik7XG4gICAgICAvLyBbdmFsXVxuICAgICAgc2IuZW1pdEhlbHBlcihub2RlLCBvcHRpb25zLCBzYi5oZWxwZXJzLndyYXBCb29sZWFuKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gW11cbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICBzYi5lbWl0T3Aobm9kZSwgJ0RST1AnKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZW1pdE5ldyhzYjogU2NyaXB0QnVpbGRlciwgbm9kZTogdHMuTmV3RXhwcmVzc2lvbiwgb3B0aW9uc0luOiBWaXNpdE9wdGlvbnMpOiB2b2lkIHtcbiAgICBjb25zdCBvcHRpb25zID0gc2IucHVzaFZhbHVlT3B0aW9ucyhvcHRpb25zSW4pO1xuICAgIGNvbnN0IGFyZ3MgPSB0c1V0aWxzLmFyZ3VtZW50ZWQuZ2V0QXJndW1lbnRzQXJyYXkobm9kZSk7XG4gICAgaWYgKGFyZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAvLyBbc3RyaW5nXVxuICAgICAgc2IuZW1pdFB1c2hTdHJpbmcobm9kZSwgJycpO1xuICAgICAgLy8gW3ZhbF1cbiAgICAgIHNiLmVtaXRIZWxwZXIobm9kZSwgb3B0aW9ucywgc2IuaGVscGVycy53cmFwU3RyaW5nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gW3ZhbF1cbiAgICAgIHNiLnZpc2l0KGFyZ3NbMF0sIG9wdGlvbnMpO1xuICAgIH1cbiAgICAvLyBbbWFwLCB2YWxdXG4gICAgc2IuZW1pdE9wKG5vZGUsICdORVdNQVAnKTtcbiAgICAvLyBbbWFwLCB2YWwsIG1hcF1cbiAgICBzYi5lbWl0T3Aobm9kZSwgJ1RVQ0snKTtcbiAgICAvLyBbbnVtYmVyLCBtYXAsIHZhbCwgbWFwXVxuICAgIHNiLmVtaXRQdXNoSW50KG5vZGUsIEVycm9yU2xvdHMubWVzc2FnZSk7XG4gICAgLy8gW3ZhbCwgbnVtYmVyLCBtYXAsIG1hcF1cbiAgICBzYi5lbWl0T3Aobm9kZSwgJ1JPVCcpO1xuICAgIC8vIFttYXBdXG4gICAgc2IuZW1pdE9wKG5vZGUsICdTRVRJVEVNJyk7XG4gICAgLy8gW3ZhbF1cbiAgICBzYi5lbWl0SGVscGVyKG5vZGUsIG9wdGlvbnNJbiwgc2IuaGVscGVycy53cmFwRXJyb3IpO1xuICB9XG59XG5jbGFzcyBFcnJvckNvbnN0cnVjdG9ySW50ZXJmYWNlIGV4dGVuZHMgQnVpbHRpbkludGVyZmFjZSB7fVxuXG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmUgZXhwb3J0LW5hbWVcbmV4cG9ydCBjb25zdCBhZGQgPSAoYnVpbHRpbnM6IEJ1aWx0aW5zKTogdm9pZCA9PiB7XG4gIGJ1aWx0aW5zLmFkZEludGVyZmFjZSgnRXJyb3InLCBuZXcgRXJyb3JJbnRlcmZhY2UoKSk7XG4gIGJ1aWx0aW5zLmFkZFZhbHVlKCdFcnJvcicsIG5ldyBFcnJvclZhbHVlKCkpO1xuICBidWlsdGlucy5hZGRHbG9iYWxNZW1iZXIoJ0Vycm9yJywgJ21lc3NhZ2UnLCBuZXcgQnVpbHRpblNsb3RJbnN0YW5jZU1lbWJlclZhbHVlKFR5cGVzLkVycm9yLCBFcnJvclNsb3RzLm1lc3NhZ2UpKTtcbiAgYnVpbHRpbnMuYWRkSW50ZXJmYWNlKCdFcnJvckNvbnN0cnVjdG9yJywgbmV3IEVycm9yQ29uc3RydWN0b3JJbnRlcmZhY2UoKSk7XG59O1xuIl19