fix bug in error_form
This commit is contained in:
@@ -503,22 +503,29 @@ impl MachineState {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub(super) fn error_form(&mut self, err: MachineError, src: FunctorStub) -> MachineStub {
|
pub(super) fn error_form(&mut self, err: MachineError, src: FunctorStub) -> MachineStub {
|
||||||
let location = err.location;
|
|
||||||
let err_len = err.len();
|
|
||||||
|
|
||||||
let h = self.heap.len();
|
let h = self.heap.len();
|
||||||
|
let location = err.location;
|
||||||
|
let stub_addition_len = if err.len() == 1 {
|
||||||
|
0 // if err contains 1 cell, it can be inlined at stub[1].
|
||||||
|
} else {
|
||||||
|
err.len()
|
||||||
|
};
|
||||||
|
|
||||||
let mut stub = vec![
|
let mut stub = vec![
|
||||||
atom_as_cell!(atom!("error"), 2),
|
atom_as_cell!(atom!("error"), 2),
|
||||||
str_loc_as_cell!(h + 3),
|
str_loc_as_cell!(h + 3),
|
||||||
str_loc_as_cell!(h + 3 + err_len),
|
str_loc_as_cell!(h + 3 + stub_addition_len),
|
||||||
];
|
];
|
||||||
|
|
||||||
stub.extend(err.into_iter(3));
|
if stub_addition_len > 0 {
|
||||||
|
stub.extend(err.into_iter(3));
|
||||||
|
} else {
|
||||||
|
stub[1] = err.stub[0];
|
||||||
|
}
|
||||||
|
|
||||||
if let Some((line_num, _)) = location {
|
if let Some((line_num, _)) = location {
|
||||||
stub.push(atom_as_cell!(atom!(":"), 2));
|
stub.push(atom_as_cell!(atom!(":"), 2));
|
||||||
stub.push(str_loc_as_cell!(h + 6 + err_len));
|
stub.push(str_loc_as_cell!(h + 6 + stub_addition_len));
|
||||||
stub.push(integer_as_cell!(Number::arena_from(
|
stub.push(integer_as_cell!(Number::arena_from(
|
||||||
line_num,
|
line_num,
|
||||||
&mut self.arena
|
&mut self.arena
|
||||||
|
|||||||
Reference in New Issue
Block a user