From 907e64e1859d819af2bced15774c9568e68bf058 Mon Sep 17 00:00:00 2001 From: Mark Thom Date: Sat, 12 Apr 2025 17:32:11 -0700 Subject: [PATCH] fix root reading of complete strings (#2882) --- src/read.rs | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/read.rs b/src/read.rs index 7b476b3e..4c6b033c 100644 --- a/src/read.rs +++ b/src/read.rs @@ -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)?; -- 2.54.0