diff --git a/src/db.rs b/src/db.rs index ba7b864..67b4a2d 100644 --- a/src/db.rs +++ b/src/db.rs @@ -28,12 +28,12 @@ impl Vm<'_> { match self.stmts.get(pc).cloned() { Some(Stmt::Inc(r)) => self.registers[r] += 1, Some(Stmt::Dec(r)) => self.registers[r] -= 1, - Some(Stmt::IsZero(r, line)) => { + Some(Stmt::IsZero(r, index)) => { if self.registers[r] == 0 { - self.pc = line - 1; + self.pc = index - 1; } } - Some(Stmt::Jump(line)) => self.pc = line - 1, + Some(Stmt::Jump(index)) => self.pc = index - 1, Some(Stmt::Stop) => return VmState::Stop, None => return VmState::OutOfBounds, } diff --git a/src/stmt.rs b/src/stmt.rs index f3b9d41..d58a78d 100644 --- a/src/stmt.rs +++ b/src/stmt.rs @@ -72,7 +72,13 @@ pub fn parse(text: &str, file_name: String) -> Result { statement_number += 1; statements.push((stmt, Span(line_index))); } - Err(msg) => return Err(format!("error on line '{}': {}", line_index - 1, msg)), + Err(msg) => { + return Err(format!( + "error on line '{}': {}", + Span(line_index).line_number(), + msg + )) + } } } diff --git a/test.m8 b/test.m8 index 2cc19c3..1ba61ca 100644 --- a/test.m8 +++ b/test.m8 @@ -1,20 +1,8 @@ -.test +# hi INC 1 -.test +JUMP 8 INC 2 -.test +STOP INC 3 -.test -INC 4 -.test -INC 5 -.test -INC 6 -.test -INC 7 -.test -INC 8 -.test -INC 9 -.test -INC 10 +#another comment +JUMP 4 \ No newline at end of file