diff options
| author | Edvard Thörnros <edvard.thornros@gmail.com> | 2021-01-31 21:29:52 +0100 |
|---|---|---|
| committer | Edvard Thörnros <edvard.thornros@gmail.com> | 2021-01-31 21:29:52 +0100 |
| commit | 906e4946a54e8ae70dab3a5ab9d2ca5a3c34d0f4 (patch) | |
| tree | bd6f648e2287bf4ed7b6279009b4bf133698d13f /src/vm.rs | |
| parent | 16a80551298c91e516b813ec205761e7fed2328b (diff) | |
| download | sylt-906e4946a54e8ae70dab3a5ab9d2ca5a3c34d0f4.tar.gz | |
add noisy error on invalid stack
Diffstat (limited to 'src/vm.rs')
| -rw-r--r-- | src/vm.rs | 16 |
1 files changed, 15 insertions, 1 deletions
@@ -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 { |
