From efaab433309170e8330a7722e90c26a93dbec252 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Edvard=20Th=C3=B6rnros?= Date: Sat, 9 Jan 2021 17:30:09 +0100 Subject: Start on compiler --- src/vm.rs | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'src/vm.rs') diff --git a/src/vm.rs b/src/vm.rs index 6a3ccd3..6b64928 100644 --- a/src/vm.rs +++ b/src/vm.rs @@ -111,6 +111,26 @@ impl VM { } } + Op::Mul => { + let b = self.stack.pop().unwrap(); + let a = self.stack.pop().unwrap(); + match (a, b) { + (Value::Float(a), Value::Float(b)) => self.stack.push(Value::Float(b * a)), + (Value::Int(a), Value::Int(b)) => self.stack.push(Value::Int(b * a)), + _ => unimplemented!("Cannot mul '{:?}' and '{:?}'.", a, b), + } + } + + Op::Div => { + let b = self.stack.pop().unwrap(); + let a = self.stack.pop().unwrap(); + match (a, b) { + (Value::Float(a), Value::Float(b)) => self.stack.push(Value::Float(b / a)), + (Value::Int(a), Value::Int(b)) => self.stack.push(Value::Int(b / a)), + _ => unimplemented!("Cannot mul '{:?}' and '{:?}'.", a, b), + } + } + Op::Mul => { todo!(); } -- cgit v1.2.1