From: Mark Thom Date: Fri, 21 Feb 2020 20:08:03 +0000 (-0700) Subject: make partial strings accept characters (#268) X-Git-Tag: v0.8.119~77 X-Git-Url: https://git.sagredo.dev/?a=commitdiff_plain;h=589dc34b99fe456a11ccb8d194ed9c19028dbd9d;p=scryer-prolog.git make partial strings accept characters (#268) --- 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(); }