aboutsummaryrefslogtreecommitdiffstats
path: root/src/vm.rs
diff options
context:
space:
mode:
authorEdvard Thörnros <edvard.thornros@gmail.com>2021-01-31 21:29:52 +0100
committerEdvard Thörnros <edvard.thornros@gmail.com>2021-01-31 21:29:52 +0100
commit906e4946a54e8ae70dab3a5ab9d2ca5a3c34d0f4 (patch)
treebd6f648e2287bf4ed7b6279009b4bf133698d13f /src/vm.rs
parent16a80551298c91e516b813ec205761e7fed2328b (diff)
downloadsylt-906e4946a54e8ae70dab3a5ab9d2ca5a3c34d0f4.tar.gz
add noisy error on invalid stack
Diffstat (limited to 'src/vm.rs')
-rw-r--r--src/vm.rs16
1 files changed, 15 insertions, 1 deletions
diff --git a/src/vm.rs b/src/vm.rs
index 7fe9c23..562bed9 100644
--- a/src/vm.rs
+++ b/src/vm.rs
@@ -89,7 +89,10 @@ impl VM {
}
fn pop(&mut self) -> Value {
- self.stack.pop().unwrap()
+ match self.stack.pop() {
+ Some(x) => x,
+ None => self.crash_and_burn(),
+ }
}
fn poppop(&mut self) -> (Value, Value) {
@@ -117,6 +120,17 @@ impl VM {
self.frame().block.borrow().ops[ip].clone()
}
+ fn crash_and_burn(&self) -> ! {
+ println!("\n\n !!!POPING EMPTY STACK - DUMPING EVERYTHING!!!\n");
+ self.print_stack();
+ println!("\n");
+ self.frame().block.borrow().debug_print();
+ println!(" ip: {}, line: {}\n",
+ self.frame().ip.blue(),
+ self.frame().block.borrow().line(self.frame().ip).blue());
+ unreachable!();
+ }
+
fn error(&self, kind: ErrorKind, message: Option<String>) -> Error {
let frame = self.frames.last().unwrap();
Error {