From: Mark Thom Date: Sun, 31 Mar 2019 17:35:19 +0000 (-0600) Subject: do a better job recognizing and bracketing operators X-Git-Tag: v0.8.110~136 X-Git-Url: https://git.sagredo.dev/?a=commitdiff_plain;h=701cbc7a19ac6c34ac79ea12be4ca4182346a94a;p=scryer-prolog.git do a better job recognizing and bracketing operators --- diff --git a/Cargo.toml b/Cargo.toml index 2868ac9e..a913faff 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,7 +14,7 @@ cfg-if = "0.1.7" downcast = "0.10.0" num = "0.2" ordered-float = "0.5.0" -prolog_parser = "0.8.8" +prolog_parser = { version = "0.8.9", path = "../prolog_parser" } readline_rs_compat = { version = "0.1.7", optional = true } ref_thread_local = "0.0.0" diff --git a/src/prolog/heap_print.rs b/src/prolog/heap_print.rs index dfa1b2bc..c74509b8 100644 --- a/src/prolog/heap_print.rs +++ b/src/prolog/heap_print.rs @@ -536,7 +536,7 @@ impl<'a, Outputter: HCValueOutputter> HCPrinter<'a, Outputter> fn print_atom(&mut self, atom: &ClauseName) { push_space_if_amb!(self, atom.as_str(), { match atom.as_str() { - "" => self.append_str("''"), + "''" => self.append_str("''"), s => self.print_op_addendum(s) } }); diff --git a/src/prolog/machine/machine_state_impl.rs b/src/prolog/machine/machine_state_impl.rs index 481482cc..dd3935e3 100644 --- a/src/prolog/machine/machine_state_impl.rs +++ b/src/prolog/machine/machine_state_impl.rs @@ -1880,8 +1880,10 @@ impl MachineState { } } - fn try_functor_compound_case(&mut self, name: ClauseName, arity: usize) { - let name = Addr::Con(Constant::Atom(name, None)); + fn try_functor_compound_case(&mut self, name: ClauseName, arity: usize, + spec: Option<(usize, Specifier)>) + { + let name = Addr::Con(Constant::Atom(name, spec)); let arity = Addr::Con(integer!(arity)); self.try_functor_unify_components(name, arity); @@ -1898,12 +1900,12 @@ impl MachineState { self.try_functor_unify_components(a1, Addr::Con(integer!(0))), Addr::Str(o) => match self.heap[o].clone() { - HeapCellValue::NamedStr(arity, name, _) => - self.try_functor_compound_case(name, arity), + HeapCellValue::NamedStr(arity, name, spec) => + self.try_functor_compound_case(name, arity, spec), _ => self.fail = true }, Addr::Lis(_) => - self.try_functor_compound_case(clause_name!("."), 2), + self.try_functor_compound_case(clause_name!("."), 2, None), Addr::AttrVar(..) | Addr::HeapCell(_) | Addr::StackCell(..) => { let name = self.store(self.deref(self[temp_v!(2)].clone())); let arity = self.store(self.deref(self[temp_v!(3)].clone()));