]> Repositorios git - scryer-prolog.git/commitdiff
quote solo characters wherever they lead atoms
authorMark Thom <[email protected]>
Mon, 6 May 2019 02:48:19 +0000 (22:48 -0400)
committerMark Thom <[email protected]>
Mon, 6 May 2019 02:48:19 +0000 (22:48 -0400)
Cargo.toml
src/main.rs
src/prolog/debray_allocator.rs
src/prolog/heap_print.rs
src/prolog/lib/builtins.pl
src/prolog/machine/machine_indices.rs
src/prolog/machine/system_calls.rs

index 7236e49867e13722c79a42f50f20b646f131cfdd..d6f79f31c44dc647f74612301291d2707dd57ead 100644 (file)
@@ -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"
index a339ad105dc0949d784667f232b43a638dfd96a9..bc7d295a36dac16cdcbd2adec4b0dc7ec0b9c90d 100644 (file)
@@ -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;
 
index a9e629545b96b6fe52155467f7df19df5c1aa1c6..0c5f0c165ddb1412a3938e53c199acfdd7c4d62c 100644 (file)
@@ -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<Rc<Var>, VarData>,
+    bindings: IndexMap<Rc<Var>, 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()
         }
index 0f1229a6eb52ccd51a824e46aa516bbaa57caa68..cc24a96f39bd7531f0b2039ed90e52f5647bffe5 100644 (file)
@@ -384,12 +384,12 @@ fn non_quoted_token<Iter: Iterator<Item=char>>(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
         }
index d573e3ea028735dc0e97c7898bcaa081bd92aa37..270476284c286bfd7bd75eb6bd01927a21f58095 100644 (file)
@@ -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) :-
index 46eb8692eadf9a40e2da0c107139192951e7a242..45db2f929c21d7349e4d76addc87cbaf730e0cab 100644 (file)
@@ -1,3 +1,5 @@
+use indexmap::IndexMap;
+
 use prolog_parser::ast::*;
 use prolog_parser::tabled_rc::*;
 
@@ -412,8 +414,8 @@ impl AddAssign<usize> for CodePtr {
     }
 }
 
-pub type HeapVarDict  = HashMap<Rc<Var>, Addr>;
-pub type AllocVarDict = HashMap<Rc<Var>, VarData>;
+pub type HeapVarDict  = IndexMap<Rc<Var>, Addr>;
+pub type AllocVarDict = IndexMap<Rc<Var>, VarData>;
 
 #[derive(Clone)]
 pub struct DynamicPredicateInfo {
index a9cd571b54b2b249fb2cdfb61597d7d39852ce2d..1002e64ef72e434d649f09ff6c9183622c4204cb 100644 (file)
@@ -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);