]> Repositorios git - scryer-prolog.git/commitdiff
reference partial strings properly in read_term (#1271)
authorMark Thom <[email protected]>
Sun, 6 Feb 2022 22:14:18 +0000 (15:14 -0700)
committerMark Thom <[email protected]>
Sun, 6 Feb 2022 22:14:18 +0000 (15:14 -0700)
src/machine/machine_state.rs

index 5d8e591d615fb5e8c3d50dc2dea8cb9394c95702..5b859fa91bc21ed4e3d2885f7638b939f89a487b 100644 (file)
@@ -495,9 +495,18 @@ impl MachineState {
         loop {
             match self.read(stream, &indices.op_dir) {
                 Ok(term_write_result) => {
+                    let heap_loc = read_heap_cell!(self.heap[term_write_result.heap_loc],
+                        (HeapCellValueTag::PStr | HeapCellValueTag::PStrOffset) => {
+                            pstr_loc_as_cell!(term_write_result.heap_loc)
+                        }
+                        _ => {
+                            heap_loc_as_cell!(term_write_result.heap_loc)
+                        }
+                    );
+
                     let term = self.registers[2];
-                    unify_fn!(*self, heap_loc_as_cell!(term_write_result.heap_loc), term);
-                    let term = heap_loc_as_cell!(term_write_result.heap_loc);
+                    unify_fn!(*self, heap_loc, term);
+                    let term = heap_loc;
 
                     if self.fail {
                         return Ok(());