]> Repositorios git - scryer-prolog.git/commitdiff
recognize empty lists as partial strings (#328)
authorMark Thom <[email protected]>
Sun, 12 Apr 2020 05:08:15 +0000 (23:08 -0600)
committerMark Thom <[email protected]>
Sun, 12 Apr 2020 05:08:15 +0000 (23:08 -0600)
src/prolog/machine/system_calls.rs

index 9083e275112fcf9dea8a5f2673a29f512f88b850..f1004193adf74342faa3803daad5acb9a3801ae4 100644 (file)
@@ -1196,7 +1196,21 @@ impl MachineState {
                 }
             }
             &SystemClauseType::IsPartialString => {
-                let mut heap_pstr_iter = self.heap_pstr_iter(self[temp_v!(1)]);
+                let addr = self.store(self.deref(self[temp_v!(1)]));
+
+                match addr {
+                    Addr::EmptyList => {
+                        return return_from_clause!(self.last_call, self);
+                    }
+                    Addr::AttrVar(_) | Addr::HeapCell(_) | Addr::StackCell(..) => {
+                        self.fail = true;
+                        return Ok(());
+                    }
+                    _ => {
+                    }
+                }
+
+                let mut heap_pstr_iter = self.heap_pstr_iter(addr);
 
                 while let Some(_) = heap_pstr_iter.next() {}