From a894b3642114f63209fb4b787187ba249672ccee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Edvard=20Th=C3=B6rnros?= Date: Sat, 9 Jan 2021 22:05:56 +0100 Subject: Add line numbers --- src/vm.rs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'src/vm.rs') diff --git a/src/vm.rs b/src/vm.rs index d45e4d6..a53b5a9 100644 --- a/src/vm.rs +++ b/src/vm.rs @@ -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)); -- cgit v1.2.1