From ded0fb9e21d4b8794fa668941474b26d45ef6f3d Mon Sep 17 00:00:00 2001 From: Vincent Ambo Date: Mon, 8 Aug 2022 02:51:28 +0300 Subject: feat(tvix/eval): implement equality operator Change-Id: I9dd54aed72cd7e67593dc76f5a046ebbda40c26f Reviewed-on: https://cl.tvl.fyi/c/depot/+/6078 Tested-by: BuildkiteCI Autosubmit: tazjin Reviewed-by: grfn --- tvix/eval/src/vm.rs | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) (limited to 'tvix/eval/src/vm.rs') diff --git a/tvix/eval/src/vm.rs b/tvix/eval/src/vm.rs index da79867ef3..25a9074c75 100644 --- a/tvix/eval/src/vm.rs +++ b/tvix/eval/src/vm.rs @@ -92,10 +92,24 @@ impl VM { } }, - OpCode::OpInvert => todo!(), - OpCode::OpNull => todo!(), - OpCode::OpTrue => todo!(), - OpCode::OpFalse => todo!(), + OpCode::OpEqual => { + let v2 = self.pop(); + let v1 = self.pop(); + + let eq = match (v1, v2) { + (Value::Float(f), Value::Integer(i)) + | (Value::Integer(i), Value::Float(f)) => f == (i as f64), + + _ => v2 == v2, + }; + + self.push(Value::Bool(eq)) + } + + OpCode::OpInvert => todo!("invert"), + OpCode::OpNull => todo!("null"), + OpCode::OpTrue => todo!("true"), + OpCode::OpFalse => todo!("false"), } if self.ip == self.chunk.code.len() { -- cgit 1.4.1