UNPKG

@neo-one/smart-contract-compiler

Version:

NEO•ONE TypeScript smart contract compiler.

48 lines (46 loc) 8.1 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const ts_utils_1 = require("@neo-one/ts-utils"); const BuiltinCall_1 = require("../BuiltinCall"); class AssertEqual extends BuiltinCall_1.BuiltinCall { emitCall(sb, node, optionsIn) { const options = sb.pushValueOptions(optionsIn); if (ts_utils_1.tsUtils.argumented.getArguments(node).length < 2) { return; } const received = ts_utils_1.tsUtils.argumented.getArguments(node)[0]; const expected = ts_utils_1.tsUtils.argumented.getArguments(node)[1]; sb.visit(expected, options); sb.visit(received, options); sb.emitOp(node, 'TUCK'); sb.emitOp(node, 'OVER'); sb.emitHelper(node, options, sb.helpers.if({ condition: () => { sb.emitHelper(node, options, sb.helpers.equalsEqualsEquals({ leftType: sb.context.analysis.getType(received), rightType: sb.context.analysis.getType(expected), })); }, whenTrue: () => { sb.emitOp(node, 'DROP'); sb.emitOp(node, 'DROP'); }, whenFalse: () => { sb.emitPushString(node, ' to equal '); sb.emitHelper(node, options, sb.helpers.wrapString); sb.emitOp(node, 'ROT'); sb.emitPushString(node, 'Expected '); sb.emitHelper(node, options, sb.helpers.wrapString); sb.emitPushInt(node, 4); sb.emitOp(node, 'PACK'); sb.emitHelper(node, options, sb.helpers.consoleLog); sb.emitOp(received, 'THROW'); }, })); } } exports.AssertEqual = AssertEqual; exports.add = (builtins) => { builtins.addTestValue('assertEqual', new AssertEqual()); }; //# sourceMappingURL=data:application/json;charset=utf8;base64,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QUFHWSxRQUFBLEdBQUcsR0FBRyxDQUFDLFFBQWtCLEVBQVEsRUFBRTtJQUM5QyxRQUFRLENBQUMsWUFBWSxDQUFDLGFBQWEsRUFBRSxJQUFJLFdBQVcsRUFBRSxDQUFDLENBQUM7QUFDMUQsQ0FBQyxDQUFDIiwiZmlsZSI6Im5lby1vbmUtc21hcnQtY29udHJhY3QtY29tcGlsZXIvc3JjL2NvbXBpbGUvYnVpbHRpbnMvYXNzZXJ0RXF1YWwvaW5kZXguanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0c1V0aWxzIH0gZnJvbSAnQG5lby1vbmUvdHMtdXRpbHMnO1xuaW1wb3J0IHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuaW1wb3J0IHsgU2NyaXB0QnVpbGRlciB9IGZyb20gJy4uLy4uL3NiJztcbmltcG9ydCB7IFZpc2l0T3B0aW9ucyB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IEJ1aWx0aW5DYWxsIH0gZnJvbSAnLi4vQnVpbHRpbkNhbGwnO1xuaW1wb3J0IHsgQnVpbHRpbnMgfSBmcm9tICcuLi9CdWlsdGlucyc7XG5cbmV4cG9ydCBjbGFzcyBBc3NlcnRFcXVhbCBleHRlbmRzIEJ1aWx0aW5DYWxsIHtcbiAgcHVibGljIGVtaXRDYWxsKHNiOiBTY3JpcHRCdWlsZGVyLCBub2RlOiB0cy5DYWxsRXhwcmVzc2lvbiwgb3B0aW9uc0luOiBWaXNpdE9wdGlvbnMpOiB2b2lkIHtcbiAgICBjb25zdCBvcHRpb25zID0gc2IucHVzaFZhbHVlT3B0aW9ucyhvcHRpb25zSW4pO1xuXG4gICAgaWYgKHRzVXRpbHMuYXJndW1lbnRlZC5nZXRBcmd1bWVudHMobm9kZSkubGVuZ3RoIDwgMikge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCByZWNlaXZlZCA9IHRzVXRpbHMuYXJndW1lbnRlZC5nZXRBcmd1bWVudHMobm9kZSlbMF07XG4gICAgY29uc3QgZXhwZWN0ZWQgPSB0c1V0aWxzLmFyZ3VtZW50ZWQuZ2V0QXJndW1lbnRzKG5vZGUpWzFdO1xuXG4gICAgLy8gW2V4cGVjdGVkVmFsXVxuICAgIHNiLnZpc2l0KGV4cGVjdGVkLCBvcHRpb25zKTtcbiAgICAvLyBbcmVjZWl2ZWRWYWwsIGV4cGVjdGVkVmFsXVxuICAgIHNiLnZpc2l0KHJlY2VpdmVkLCBvcHRpb25zKTtcbiAgICAvLyBbcmVjZWl2ZWRWYWwsIGV4cGVjdGVkVmFsLCByZWNlaXZlZFZhbF1cbiAgICBzYi5lbWl0T3Aobm9kZSwgJ1RVQ0snKTtcbiAgICAvLyBbZXhwZWN0ZWRWYWwsIHJlY2VpdmVkVmFsLCBleHBlY3RlZFZhbCwgcmVjZWl2ZWRWYWxdXG4gICAgc2IuZW1pdE9wKG5vZGUsICdPVkVSJyk7XG4gICAgc2IuZW1pdEhlbHBlcihcbiAgICAgIG5vZGUsXG4gICAgICBvcHRpb25zLFxuICAgICAgc2IuaGVscGVycy5pZih7XG4gICAgICAgIGNvbmRpdGlvbjogKCkgPT4ge1xuICAgICAgICAgIC8vIFtib29sZWFuLCBleHBlY3RlZFZhbCwgcmVjZWl2ZWRWYWxdXG4gICAgICAgICAgc2IuZW1pdEhlbHBlcihcbiAgICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgICAgc2IuaGVscGVycy5lcXVhbHNFcXVhbHNFcXVhbHMoe1xuICAgICAgICAgICAgICBsZWZ0VHlwZTogc2IuY29udGV4dC5hbmFseXNpcy5nZXRUeXBlKHJlY2VpdmVkKSxcbiAgICAgICAgICAgICAgcmlnaHRUeXBlOiBzYi5jb250ZXh0LmFuYWx5c2lzLmdldFR5cGUoZXhwZWN0ZWQpLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgKTtcbiAgICAgICAgfSxcbiAgICAgICAgd2hlblRydWU6ICgpID0+IHtcbiAgICAgICAgICAvLyBbcmVjZWl2ZWRWYWxdXG4gICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdEUk9QJyk7XG4gICAgICAgICAgLy8gW11cbiAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ0RST1AnKTtcbiAgICAgICAgfSxcbiAgICAgICAgd2hlbkZhbHNlOiAoKSA9PiB7XG4gICAgICAgICAgLy8gW3N0cmluZywgZXhwZWN0ZWRWYWwsIHJlY2VpdmVkVmFsXVxuICAgICAgICAgIHNiLmVtaXRQdXNoU3RyaW5nKG5vZGUsICcgdG8gZXF1YWwgJyk7XG4gICAgICAgICAgLy8gW3ZhbCwgZXhwZWN0ZWRWYWwsIHJlY2VpdmVkVmFsXVxuICAgICAgICAgIHNiLmVtaXRIZWxwZXIobm9kZSwgb3B0aW9ucywgc2IuaGVscGVycy53cmFwU3RyaW5nKTtcbiAgICAgICAgICAvLyBbcmVjZWl2ZWRWYWwsIHZhbCwgZXhwZWN0ZWRWYWxdXG4gICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdST1QnKTtcbiAgICAgICAgICAvLyBbc3RyaW5nLCByZWNlaXZlZFZhbCwgdmFsLCBleHBlY3RlZFZhbF1cbiAgICAgICAgICBzYi5lbWl0UHVzaFN0cmluZyhub2RlLCAnRXhwZWN0ZWQgJyk7XG4gICAgICAgICAgLy8gW3ZhbCwgcmVjZWl2ZWRWYWwsIHZhbCwgZXhwZWN0ZWRWYWxdXG4gICAgICAgICAgc2IuZW1pdEhlbHBlcihub2RlLCBvcHRpb25zLCBzYi5oZWxwZXJzLndyYXBTdHJpbmcpO1xuICAgICAgICAgIC8vIFs0LCB2YWwsIHJlY2VpdmVkVmFsLCB2YWwsIGV4cGVjdGVkVmFsXVxuICAgICAgICAgIHNiLmVtaXRQdXNoSW50KG5vZGUsIDQpO1xuICAgICAgICAgIC8vIFthcnJdXG4gICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdQQUNLJyk7XG4gICAgICAgICAgLy8gW11cbiAgICAgICAgICBzYi5lbWl0SGVscGVyKG5vZGUsIG9wdGlvbnMsIHNiLmhlbHBlcnMuY29uc29sZUxvZyk7XG4gICAgICAgICAgLy8gW11cbiAgICAgICAgICBzYi5lbWl0T3AocmVjZWl2ZWQsICdUSFJPVycpO1xuICAgICAgICB9LFxuICAgICAgfSksXG4gICAgKTtcbiAgfVxufVxuXG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmUgZXhwb3J0LW5hbWVcbmV4cG9ydCBjb25zdCBhZGQgPSAoYnVpbHRpbnM6IEJ1aWx0aW5zKTogdm9pZCA9PiB7XG4gIGJ1aWx0aW5zLmFkZFRlc3RWYWx1ZSgnYXNzZXJ0RXF1YWwnLCBuZXcgQXNzZXJ0RXF1YWwoKSk7XG59O1xuIl19