From 1c58b7c2ed7a1c8f145c9410cb6a4d0e861b220a Mon Sep 17 00:00:00 2001 From: Scott Olson Date: Sat, 11 Jun 2016 13:10:42 -0600 Subject: [PATCH] Add hacky stub version of CheckedBinaryOp. --- src/interpreter/mod.rs | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/interpreter/mod.rs b/src/interpreter/mod.rs index b3de02e55b0..37113f38731 100644 --- a/src/interpreter/mod.rs +++ b/src/interpreter/mod.rs @@ -861,7 +861,24 @@ fn eval_assignment(&mut self, lvalue: &mir::Lvalue<'tcx>, rvalue: &mir::Rvalue<' self.memory.write_primval(dest, val)?; } - CheckedBinaryOp(..) => unimplemented!(), + // FIXME(solson): Factor this out with BinaryOp. + CheckedBinaryOp(bin_op, ref left, ref right) => { + let left_ptr = self.eval_operand(left)?; + let left_ty = self.operand_ty(left); + let left_val = self.read_primval(left_ptr, left_ty)?; + + let right_ptr = self.eval_operand(right)?; + let right_ty = self.operand_ty(right); + let right_val = self.read_primval(right_ptr, right_ty)?; + + let val = primval::binary_op(bin_op, left_val, right_val)?; + self.memory.write_primval(dest, val)?; + + // FIXME(solson): Find the result type size properly. Perhaps refactor out + // Projection calculations so we can do the equivalent of `dest.1` here. + let s = self.type_size(left_ty, self.substs()); + self.memory.write_bool(dest.offset(s as isize), false)?; + } UnaryOp(un_op, ref operand) => { let ptr = self.eval_operand(operand)?; -- 2.44.0