UNPKG

@neo-one/smart-contract-compiler

Version:

NEO•ONE TypeScript smart contract compiler.

49 lines (47 loc) 1.94 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.add = exports.AssertEqual = void 0; 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=index.js.map