aboutsummaryrefslogtreecommitdiffstats
path: root/src/vm.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/vm.rs')
-rw-r--r--src/vm.rs18
1 files changed, 16 insertions, 2 deletions
diff --git a/src/vm.rs b/src/vm.rs
index 9102f81..633b920 100644
--- a/src/vm.rs
+++ b/src/vm.rs
@@ -21,10 +21,12 @@ pub enum Op {
Or,
Not,
- Equal, // ==
- Less, // <
+ Equal, // ==
+ Less, // <
Greater, // >
+ AssertEqual,
+
Print,
Return,
}
@@ -83,6 +85,10 @@ impl VM {
(b, a)
}
+ fn _peek_up(&self, amount: usize) -> Option<&Value> {
+ self.stack.get(self.stack.len() - amount)
+ }
+
pub fn run(&mut self) {
const PRINT_WHILE_RUNNING: bool = true;
const PRINT_BLOCK: bool = true;
@@ -192,6 +198,14 @@ impl VM {
}
}
+ Op::AssertEqual => {
+ let (a, b) = self.pop_twice();
+ if a != b {
+ println!("Assert failed for '{:?}' and '{:?}'", a, b);
+ }
+ self.stack.push(Value::Bool(a == b));
+ }
+
Op::Print => {
println!("PRINT: {:?}", self.stack.pop());
}