aboutsummaryrefslogtreecommitdiffstats
path: root/src/vm.rs
diff options
context:
space:
mode:
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!();
}