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