]> Repositorios git - scryer-prolog.git/commitdiff
provide contextual information in the return value of try_in_situ_result
authorMark Thom <[email protected]>
Fri, 20 Mar 2020 02:41:58 +0000 (20:41 -0600)
committerMark Thom <[email protected]>
Fri, 20 Mar 2020 02:41:58 +0000 (20:41 -0600)
src/prolog/machine/machine_state.rs
src/prolog/macros.rs

index ec6efb5f5c533a1028e43b0b908dcde26ea73297..62cbf9c2c034b1a4439b5de9897c25fe7f5afd86 100644 (file)
@@ -437,15 +437,15 @@ impl MachineState {
     }
 }
 
-fn try_in_situ_lookup(name: ClauseName, arity: usize, indices: &IndexStore) -> Option<usize>
+fn try_in_situ_lookup(name: ClauseName, arity: usize, indices: &IndexStore) -> Option<LocalCodePtr>
 {
     match indices.in_situ_code_dir.get(&(name.clone(), arity)) {
-        Some(p) => Some(*p),
+        Some(p) => Some(LocalCodePtr::InSituDirEntry(*p)),
         None =>
             match indices.code_dir.get(&(name, arity)) {
                 Some(ref idx) => {
                     if let IndexPtr::Index(p) = idx.0.borrow().0 {
-                        Some(p)
+                        Some(LocalCodePtr::DirEntry(p))
                     } else {
                         None
                     }
@@ -464,12 +464,12 @@ fn try_in_situ(
 ) -> CallResult {
     if let Some(p) = try_in_situ_lookup(name.clone(), arity, indices) {
         if last_call {
-            machine_st.execute_at_index(arity, LocalCodePtr::DirEntry(p));
+            machine_st.execute_at_index(arity, p);
         } else {
-            machine_st.call_at_index(arity, LocalCodePtr::DirEntry(p));
+            machine_st.call_at_index(arity, p);
         }
 
-        machine_st.p = in_situ_dir_entry!(p);
+        machine_st.p = CodePtr::Local(p);
         Ok(())
     } else {
         let stub = MachineError::functor_stub(name.clone(), arity);
@@ -760,10 +760,10 @@ pub(crate) trait CallPolicy: Any {
                 machine_st.compare_term(qt);
                 return_from_clause!(machine_st.last_call, machine_st)
             }
-            &BuiltInClauseType::Nl => {                
+            &BuiltInClauseType::Nl => {
                 write!(current_output_stream, "\n").unwrap();
                 current_output_stream.flush().unwrap();
-                
+
                 return_from_clause!(machine_st.last_call, machine_st)
             }
             &BuiltInClauseType::Read => {
@@ -997,7 +997,7 @@ impl CallPolicy for CWILCallPolicy {
             current_input_stream,
             current_output_stream
         )?;
-        
+
         self.increment(machine_st)
     }
 
@@ -1016,7 +1016,7 @@ impl CallPolicy for CWILCallPolicy {
             current_input_stream,
             current_output_stream,
         )?;
-        
+
         self.increment(machine_st)
     }
 }
index 7968aa34954a9c64541d9e8d2155cbdd008aea5a..1f85e39a1116edb726adaf7c53eceda55b59040a 100644 (file)
@@ -211,12 +211,6 @@ macro_rules! dir_entry {
     };
 }
 
-macro_rules! in_situ_dir_entry {
-    ($idx:expr) => {
-        CodePtr::Local(LocalCodePtr::InSituDirEntry($idx))
-    };
-}
-
 macro_rules! set_code_index {
     ($idx:expr, $ip:expr, $mod_name:expr) => {{
         let mut idx = $idx.0.borrow_mut();