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