From 3547ae2db4923ef5cf30e2c92049bcb0f2b4b9e6 Mon Sep 17 00:00:00 2001 From: Mark Thom Date: Sun, 5 May 2019 22:48:19 -0400 Subject: [PATCH] quote solo characters wherever they lead atoms --- Cargo.toml | 1 + src/main.rs | 1 + src/prolog/debray_allocator.rs | 6 ++++-- src/prolog/heap_print.rs | 4 ++-- src/prolog/lib/builtins.pl | 3 +-- src/prolog/machine/machine_indices.rs | 6 ++++-- src/prolog/machine/system_calls.rs | 2 +- 7 files changed, 14 insertions(+), 9 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 7236e498..d6f79f31 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,6 +12,7 @@ default = ["readline_rs_compat"] [dependencies] cfg-if = "0.1.7" downcast = "0.10.0" +indexmap = "1.0.2" num = "0.2" ordered-float = "0.5.0" prolog_parser = "0.8.26" diff --git a/src/main.rs b/src/main.rs index a339ad10..bc7d295a 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,5 +1,6 @@ #[macro_use] extern crate cfg_if; #[macro_use] extern crate downcast; +extern crate indexmap; #[macro_use] extern crate prolog_parser; #[macro_use] extern crate ref_thread_local; diff --git a/src/prolog/debray_allocator.rs b/src/prolog/debray_allocator.rs index a9e62954..0c5f0c16 100644 --- a/src/prolog/debray_allocator.rs +++ b/src/prolog/debray_allocator.rs @@ -1,3 +1,5 @@ +use indexmap::IndexMap; + use prolog_parser::ast::*; use prolog::allocator::*; @@ -11,7 +13,7 @@ use std::collections::{BTreeSet, HashMap}; use std::rc::Rc; pub struct DebrayAllocator { - bindings: HashMap, VarData>, + bindings: IndexMap, VarData>, arg_c: usize, temp_lb: usize, arity: usize, // 0 if not at head. @@ -207,7 +209,7 @@ impl<'a> Allocator<'a> for DebrayAllocator arity: 0, arg_c: 1, temp_lb: 1, - bindings: HashMap::new(), + bindings: IndexMap::new(), contents: HashMap::new(), in_use: BTreeSet::new() } diff --git a/src/prolog/heap_print.rs b/src/prolog/heap_print.rs index 0f1229a6..cc24a96f 100644 --- a/src/prolog/heap_print.rs +++ b/src/prolog/heap_print.rs @@ -384,12 +384,12 @@ fn non_quoted_token>(mut iter: Iter) -> bool { iter.next().is_none() } else if cut_char!(c) { iter.next().is_none() - } else if solo_char!(c) { - !iter.next().is_none() } else if c == '[' { (iter.next() == Some(']') && iter.next().is_none()) } else if c == '{' { (iter.next() == Some('}') && iter.next().is_none()) + } else if solo_char!(c) { + false // !iter.next().is_none() } else { false } diff --git a/src/prolog/lib/builtins.pl b/src/prolog/lib/builtins.pl index d573e3ea..27047628 100644 --- a/src/prolog/lib/builtins.pl +++ b/src/prolog/lib/builtins.pl @@ -249,10 +249,9 @@ must_be_var_names_list_([]). must_be_var_names_list_([VarName | VarNames]) :- ( nonvar(VarName), VarName = (Atom = _) -> ( atom(Atom) -> must_be_var_names_list_(VarNames) - ; var(Atom) -> throw(error(instantiation_error, write_term/2)) ; throw(error(domain_error(write_options, variable_names(VarName)), write_term/2)) ) - ; throw(error(instantiation_error, write_term/2)) + ; throw(error(domain_error(write_options, variable_names(VarName)), write_term/2)) ). write_term(_, Options) :- diff --git a/src/prolog/machine/machine_indices.rs b/src/prolog/machine/machine_indices.rs index 46eb8692..45db2f92 100644 --- a/src/prolog/machine/machine_indices.rs +++ b/src/prolog/machine/machine_indices.rs @@ -1,3 +1,5 @@ +use indexmap::IndexMap; + use prolog_parser::ast::*; use prolog_parser::tabled_rc::*; @@ -412,8 +414,8 @@ impl AddAssign for CodePtr { } } -pub type HeapVarDict = HashMap, Addr>; -pub type AllocVarDict = HashMap, VarData>; +pub type HeapVarDict = IndexMap, Addr>; +pub type AllocVarDict = IndexMap, VarData>; #[derive(Clone)] pub struct DynamicPredicateInfo { diff --git a/src/prolog/machine/system_calls.rs b/src/prolog/machine/system_calls.rs index a9cd571b..1002e64e 100644 --- a/src/prolog/machine/system_calls.rs +++ b/src/prolog/machine/system_calls.rs @@ -1558,7 +1558,7 @@ impl MachineState { let mut list_of_var_eqs = vec![]; - for (var, binding) in term_write_result.var_dict { + for (var, binding) in term_write_result.var_dict.into_iter().rev() { let var_atom = clause_name!(var.to_string(), indices.atom_tbl); let var_atom = Constant::Atom(var_atom, None); -- 2.54.0