diff options
| author | Edvard Thörnros <edvard.thornros@gmail.com> | 2021-01-09 22:05:56 +0100 |
|---|---|---|
| committer | Edvard Thörnros <edvard.thornros@gmail.com> | 2021-01-09 22:05:56 +0100 |
| commit | a894b3642114f63209fb4b787187ba249672ccee (patch) | |
| tree | 449156f6a34d928788d60c7f8b18682d040216ea /src/vm.rs | |
| parent | 3ede943556bebb85427415f21ec231973da9e080 (diff) | |
| download | sylt-a894b3642114f63209fb4b787187ba249672ccee.tar.gz | |
Add line numbers
Diffstat (limited to 'src/vm.rs')
| -rw-r--r-- | src/vm.rs | 14 |
1 files changed, 14 insertions, 0 deletions
@@ -117,6 +117,19 @@ impl VM { self.stack.get(self.stack.len() - amount) } + fn print_error(&self) { + let find_line = || { + for i in (0..=self.ip).rev() { + if let Some(line) = self.block.line_offsets.get(&i) { + return *line; + } + } + return 0; + }; + + println!("RUNTIME ERROR OR LINE: {}", find_line()); + } + pub fn run(&mut self) -> Result<(), VMError>{ const PRINT_WHILE_RUNNING: bool = true; const PRINT_BLOCK: bool = true; @@ -229,6 +242,7 @@ impl VM { Op::AssertEqual => { let (a, b) = self.pop_twice(); if a != b { + self.print_error(); println!("Assert failed for '{:?}' and '{:?}'", a, b); } self.stack.push(Value::Bool(a == b)); |
