From 97e77b94646fe97a2c83ba85ba1813eb9bd0346a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Edvard=20Th=C3=B6rnros?= Date: Sat, 9 Jan 2021 18:37:08 +0100 Subject: Parsing simple mathematical expressions --- src/vm.rs | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'src/vm.rs') diff --git a/src/vm.rs b/src/vm.rs index 6b64928..7ab2235 100644 --- a/src/vm.rs +++ b/src/vm.rs @@ -10,10 +10,13 @@ pub enum Value { pub enum Op { Pop, Constant(Value), + Add, Sub, Mul, Div, + Neg, + Print, Return, } @@ -91,6 +94,15 @@ impl VM { self.stack.push(value); } + Op::Neg => { + let a = self.stack.pop().unwrap(); + match a { + Value::Float(a) => self.stack.push(Value::Float(-a)), + Value::Int(a) => self.stack.push(Value::Int(-a)), + _ => unimplemented!("Cannot negate '{:?}'.", a), + } + } + Op::Add => { let b = self.stack.pop().unwrap(); let a = self.stack.pop().unwrap(); -- cgit v1.2.1