fixed the last span/line number bug

This commit is contained in:
nora 2021-09-19 14:18:02 +02:00
parent 8acef7bbff
commit a24b93fd23
3 changed files with 15 additions and 21 deletions

View file

@ -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,
}

View file

@ -72,7 +72,13 @@ pub fn parse(text: &str, file_name: String) -> Result<Code, String> {
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
))
}
}
}

22
test.m8
View file

@ -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