From 6ddfef63830bb58655572e368300759717b134c7 Mon Sep 17 00:00:00 2001 From: Mark Thom Date: Fri, 6 Mar 2020 21:19:53 -0700 Subject: [PATCH] count single character atoms as characters when generating first argument indices --- src/prolog/indexing.rs | 9 +++++++++ src/prolog/machine/machine_state_impl.rs | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/prolog/indexing.rs b/src/prolog/indexing.rs index 03208733..fe694d19 100644 --- a/src/prolog/indexing.rs +++ b/src/prolog/indexing.rs @@ -74,6 +74,15 @@ impl CodeOffsets { code.push(Self::add_index(is_initial_index, index)); } &Term::Constant(_, ref constant) => { + if let Constant::Atom(ref name, _) = constant { + if !name.as_str().is_empty() && name.as_str().chars().skip(1).next().is_none() { + let c = name.as_str().chars().next().unwrap(); + let code = self.constants.entry(Constant::Char(c)).or_insert(vec![]); + + code.push(Self::add_index(code.is_empty(), index)); + } + } + let code = self.constants.entry(constant.clone()).or_insert(Vec::new()); let is_initial_index = code.is_empty(); diff --git a/src/prolog/machine/machine_state_impl.rs b/src/prolog/machine/machine_state_impl.rs index 10468a36..fec48045 100644 --- a/src/prolog/machine/machine_state_impl.rs +++ b/src/prolog/machine/machine_state_impl.rs @@ -1806,7 +1806,7 @@ impl MachineState { let a1 = self.registers[1].clone(); let addr = self.store(self.deref(a1)); - let offset = match addr { + let offset = match addr { Addr::Con(constant) => match hm.get(&constant) { Some(offset) => *offset, _ => 0, -- 2.54.0