]> Repositorios git - scryer-prolog.git/commitdiff
get rid of dynamic lookup for
authorMark Thom <[email protected]>
Mon, 13 Aug 2018 05:17:34 +0000 (23:17 -0600)
committerMark Thom <[email protected]>
Mon, 13 Aug 2018 05:17:34 +0000 (23:17 -0600)
$call_with_default_policy.

src/prolog/ast.rs
src/prolog/machine/machine_state.rs
src/prolog/machine/machine_state_impl.rs
src/prolog/machine/system_calls.rs

index 47f06da58e6ca086b05e0488ab19871f16a6a8bf..7c5bc6e1b13502388049cf8a816f7c8d4a852f68 100644 (file)
@@ -709,7 +709,6 @@ pub struct Rule {
 
 #[derive(Copy, Clone, PartialEq)]
 pub enum SystemClauseType {
-    CallWithDefaultPolicy,
     CheckCutPoint,
     GetBValue,
     GetSCCCleaner,
@@ -742,7 +741,6 @@ impl SystemClauseType {
 
     pub fn name(&self) -> ClauseName {
         match self {
-            &SystemClauseType::CallWithDefaultPolicy => clause_name!("$call_with_default_policy"),
             &SystemClauseType::CheckCutPoint => clause_name!("$check_cp"),
             &SystemClauseType::GetBValue => clause_name!("$get_b_value"),
             &SystemClauseType::GetSCCCleaner => clause_name!("$get_scc_cleaner"),
@@ -774,7 +772,6 @@ impl SystemClauseType {
 
     pub fn from(name: &str, arity: usize) -> Option<SystemClauseType> {
         match (name, arity) {
-            ("$call_with_default_policy", 1) => Some(SystemClauseType::CallWithDefaultPolicy),
             ("$check_cp", 1) => Some(SystemClauseType::CheckCutPoint),
             ("$get_b_value", 1) => Some(SystemClauseType::GetBValue),
             ("$get_scc_cleaner", 1) => Some(SystemClauseType::GetSCCCleaner),
index 32c8d923b31803e2fb6860dbf3e5b065971b151b..73be6ceb66ed86d73bd1ce2afa016a7ec39561ae 100644 (file)
@@ -429,8 +429,8 @@ pub(crate) trait CallPolicy: Any {
         Ok(())
     }
 
-    fn context_call<'a>(&mut self, machine_st: &mut MachineState, name: ClauseName, arity: usize,
-                        idx: CodeIndex, code_dirs: Box<CodeDirsAdapter<'a> + 'a>)
+    fn context_call(&mut self, machine_st: &mut MachineState, name: ClauseName, arity: usize,
+                        idx: CodeIndex, code_dirs: CodeDirs)
                         -> CallResult
     {
         if machine_st.last_call {
@@ -441,7 +441,7 @@ pub(crate) trait CallPolicy: Any {
     }
 
     fn try_call<'a>(&mut self, machine_st: &mut MachineState, name: ClauseName, arity: usize,
-                    idx: CodeIndex, code_dirs: Box<CodeDirsAdapter<'a> + 'a>)
+                    idx: CodeIndex, code_dirs: CodeDirs)
                     -> CallResult
     {
         match idx.0.borrow().0 {
@@ -478,7 +478,7 @@ pub(crate) trait CallPolicy: Any {
     }
 
     fn try_execute<'a>(&mut self, machine_st: &mut MachineState, name: ClauseName,
-                       arity: usize, idx: CodeIndex, code_dirs: Box<CodeDirsAdapter<'a> + 'a>)
+                       arity: usize, idx: CodeIndex, code_dirs: CodeDirs)
                        -> CallResult
     {
         match idx.0.borrow().0 {
@@ -515,7 +515,7 @@ pub(crate) trait CallPolicy: Any {
     }
 
     fn call_builtin<'a>(&mut self, machine_st: &mut MachineState, ct: &BuiltInClauseType,
-                        code_dirs: Box<CodeDirsAdapter<'a> + 'a>)
+                        code_dirs: CodeDirs)
                         -> CallResult
     {
         match ct {
@@ -651,7 +651,7 @@ pub(crate) trait CallPolicy: Any {
     }
 
     fn call_n<'a>(&mut self, machine_st: &mut MachineState, arity: usize,
-                  code_dirs: Box<CodeDirsAdapter<'a> + 'a>)
+                  code_dirs: CodeDirs)
                   -> CallResult
     {
         if let Some((name, arity)) = machine_st.setup_call_n(arity) {
@@ -699,7 +699,7 @@ pub(crate) trait CallPolicy: Any {
 
 impl CallPolicy for CWILCallPolicy {
     fn context_call<'a>(&mut self, machine_st: &mut MachineState, name: ClauseName,
-                        arity: usize, idx: CodeIndex, code_dirs: Box<CodeDirsAdapter<'a> + 'a>)
+                        arity: usize, idx: CodeIndex, code_dirs: CodeDirs)
                         -> CallResult
     {
         self.prev_policy.context_call(machine_st, name, arity, idx, code_dirs)?;
@@ -731,7 +731,7 @@ impl CallPolicy for CWILCallPolicy {
     }
 
     fn call_builtin<'a>(&mut self, machine_st: &mut MachineState, ct: &BuiltInClauseType,
-                        code_dirs: Box<CodeDirsAdapter<'a> + 'a>)
+                        code_dirs: CodeDirs)
                         -> CallResult
     {
         self.prev_policy.call_builtin(machine_st, ct, code_dirs)?;
@@ -739,7 +739,7 @@ impl CallPolicy for CWILCallPolicy {
     }
 
     fn call_n<'a>(&mut self, machine_st: &mut MachineState, arity: usize,
-                  code_dirs: Box<CodeDirsAdapter<'a> + 'a>)
+                  code_dirs: CodeDirs)
                   -> CallResult
     {
         self.prev_policy.call_n(machine_st, arity, code_dirs)?;
index df4301bd17860cfc6d82fffd43894d362c1e83a2..f199f0585cae93b27be01e57cebd4dcce2d5e01b 100644 (file)
@@ -1830,14 +1830,14 @@ impl MachineState {
                 
         match ct {
             &ClauseType::BuiltIn(ref ct) =>
-                try_or_fail!(self, call_policy.call_builtin(self, ct, Box::new(code_dirs))),
+                try_or_fail!(self, call_policy.call_builtin(self, ct, code_dirs)),
             &ClauseType::CallN =>
-                try_or_fail!(self, call_policy.call_n(self, arity, Box::new(code_dirs))),
+                try_or_fail!(self, call_policy.call_n(self, arity, code_dirs)),
             &ClauseType::Inlined(ref ct) =>
                 self.execute_inlined(ct),
             &ClauseType::Named(ref name, ref idx) | &ClauseType::Op(ref name, _, ref idx) =>
                 try_or_fail!(self, call_policy.context_call(self, name.clone(), arity, idx.clone(),
-                                                            Box::new(code_dirs))),
+                                                            code_dirs)),
             &ClauseType::System(ref ct) =>
                 try_or_fail!(self, self.system_call(ct, code_dirs, call_policy, cut_policy))                
         };
index 2b1a430622ae18509becc9d0b5c7b331979c0a3f..d4eec16781bcc03688b609e296c1e7ac89b70486 100644 (file)
@@ -187,14 +187,6 @@ impl MachineState {
                                   -> CallResult
     {
         match ct {
-            // this system call is only to be used within the builtins module.
-            // TODO: in the future I'd like to use serde to serialize/deserialize builtins
-            // and thereby avoid this kludge, but for now it's ok.
-            &SystemClauseType::CallWithDefaultPolicy =>
-                if let Some(builtins) = code_dirs.modules.get(&clause_name!("builtins")) {
-                    let mut call_policy = DefaultCallPolicy {};
-                    return call_policy.call_n(self, 1, Box::new(builtins));
-                },
             &SystemClauseType::CheckCutPoint => {
                 let addr = self.store(self.deref(self[temp_v!(1)].clone()));