From 97d8d079476a7f2f4ef03170cc7449edfdda9a9b Mon Sep 17 00:00:00 2001 From: Mark Thom Date: Sat, 11 Apr 2020 23:08:15 -0600 Subject: [PATCH] recognize empty lists as partial strings (#328) --- src/prolog/machine/system_calls.rs | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/prolog/machine/system_calls.rs b/src/prolog/machine/system_calls.rs index 9083e275..f1004193 100644 --- a/src/prolog/machine/system_calls.rs +++ b/src/prolog/machine/system_calls.rs @@ -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() {} -- 2.54.0