diff options
| author | Edvard Thörnros <edvard.thornros@gmail.com> | 2021-01-09 18:37:08 +0100 |
|---|---|---|
| committer | Edvard Thörnros <edvard.thornros@gmail.com> | 2021-01-09 18:37:08 +0100 |
| commit | 97e77b94646fe97a2c83ba85ba1813eb9bd0346a (patch) | |
| tree | 8b8209e34700904c4e02cf623b1cb1930b52982d /src/vm.rs | |
| parent | efaab433309170e8330a7722e90c26a93dbec252 (diff) | |
| download | sylt-97e77b94646fe97a2c83ba85ba1813eb9bd0346a.tar.gz | |
Parsing simple mathematical expressions
Diffstat (limited to 'src/vm.rs')
| -rw-r--r-- | src/vm.rs | 12 |
1 files changed, 12 insertions, 0 deletions
@@ -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(); |
