aboutsummaryrefslogtreecommitdiffstats
path: root/src/vm.rs
diff options
context:
space:
mode:
authorEdvard Thörnros <edvard.thornros@gmail.com>2021-01-09 17:30:09 +0100
committerEdvard Thörnros <edvard.thornros@gmail.com>2021-01-09 17:30:09 +0100
commitefaab433309170e8330a7722e90c26a93dbec252 (patch)
tree86794243d8351f5761cfac6ddb9cce67a2ee6359 /src/vm.rs
parent158c2c284fa61be972dd868e2f262f9e04a0edb4 (diff)
downloadsylt-efaab433309170e8330a7722e90c26a93dbec252.tar.gz
Start on compiler
Diffstat (limited to 'src/vm.rs')
-rw-r--r--src/vm.rs20
1 files changed, 20 insertions, 0 deletions
diff --git a/src/vm.rs b/src/vm.rs
index 6a3ccd3..6b64928 100644
--- a/src/vm.rs
+++ b/src/vm.rs
@@ -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!();
}