diff options
| author | Edvard Thörnros <edvard.thornros@gmail.com> | 2021-01-09 17:30:09 +0100 |
|---|---|---|
| committer | Edvard Thörnros <edvard.thornros@gmail.com> | 2021-01-09 17:30:09 +0100 |
| commit | efaab433309170e8330a7722e90c26a93dbec252 (patch) | |
| tree | 86794243d8351f5761cfac6ddb9cce67a2ee6359 /src/vm.rs | |
| parent | 158c2c284fa61be972dd868e2f262f9e04a0edb4 (diff) | |
| download | sylt-efaab433309170e8330a7722e90c26a93dbec252.tar.gz | |
Start on compiler
Diffstat (limited to 'src/vm.rs')
| -rw-r--r-- | src/vm.rs | 20 |
1 files changed, 20 insertions, 0 deletions
@@ -112,6 +112,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!(); } |
