fix root reading of complete strings (#2882)

This commit is contained in:
Mark Thom
2025-04-12 17:32:11 -07:00
committed by Mark Thom
parent 46f259bf7d
commit 907e64e185

View File

@@ -345,7 +345,7 @@ impl<'a> TermWriter<'a> {
fn push_cell(&mut self, cell: HeapCellValue) -> Result<(), CompilationError> {
self.heap
.push_cell(cell)
.map_err(|h| CompilationError::FiniteMemoryInHeap(h))
.map_err(CompilationError::FiniteMemoryInHeap)
}
fn term_as_addr(&mut self, term: &TermRef, h: usize) -> HeapCellValue {
@@ -435,16 +435,22 @@ impl<'a> TermWriter<'a> {
continue;
}
TermRef::CompleteString(lvl, _, src) => {
if let Level::Root = lvl {
self.push_stub_addr()?;
}
let cell = self
.heap
.allocate_cstr(src)
.map_err(CompilationError::FiniteMemoryInHeap)?;
let h = self.heap.cell_len();
let new_h = self.heap.cell_len();
self.push_cell(cell)?;
if !matches!(lvl, Level::Root) {
self.modify_head_of_queue(&term, h);
self.modify_head_of_queue(&term, new_h);
} else {
self.heap[h] = cell;
}
continue;
@@ -462,7 +468,7 @@ impl<'a> TermWriter<'a> {
let tail_h = self.heap.cell_len();
self.push_stub_addr()?;
if let Level::Root = lvl {
if matches!(lvl, Level::Root) {
self.heap[h] = cell;
} else {
self.push_cell(cell)?;