From 589dc34b99fe456a11ccb8d194ed9c19028dbd9d Mon Sep 17 00:00:00 2001 From: Mark Thom Date: Fri, 21 Feb 2020 13:08:03 -0700 Subject: [PATCH] make partial strings accept characters (#268) --- src/prolog/machine/machine_state.rs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/prolog/machine/machine_state.rs b/src/prolog/machine/machine_state.rs index 4c626b0d..3a994e9e 100644 --- a/src/prolog/machine/machine_state.rs +++ b/src/prolog/machine/machine_state.rs @@ -274,10 +274,12 @@ impl MachineState { fn try_char_list(&self, addrs: Vec) -> Result { let mut chars = String::new(); let mut iter = addrs.iter(); - + while let Some(addr) = iter.next() { + let addr = self.store(self.deref(addr.clone())); + match addr { - &Addr::Con(Constant::String(n, ref s)) + Addr::Con(Constant::String(n, ref s)) if self.flags.double_quotes.is_chars() => { if s.len() < n { chars += &s[n ..]; @@ -287,10 +289,10 @@ impl MachineState { return Err(MachineError::type_error(ValidType::Character, addr.clone())); } } - &Addr::Con(Constant::Char(c)) => { + Addr::Con(Constant::Char(c)) => { chars.push(c); } - &Addr::Con(Constant::Atom(ref name, _)) + Addr::Con(Constant::Atom(ref name, _)) if name.as_str().len() == 1 => { chars += name.as_str(); } -- 2.54.0