]> Repositorios git - scryer-prolog.git/commitdiff
remove GetLevelAndUnify and replace it with GetCutPoint
authorMark Thom <[email protected]>
Wed, 28 Dec 2022 06:42:35 +0000 (23:42 -0700)
committerMark <[email protected]>
Fri, 23 Jun 2023 20:11:30 +0000 (14:11 -0600)
build/instructions_template.rs
src/codegen.rs
src/forms.rs
src/iterators.rs
src/lib/iso_ext.pl
src/machine/disjuncts.rs
src/machine/dispatch.rs

index a7ea3d21bbcb0a78b61d81ed845dcf825891be0d..d0a8c4d0ec7734066f35ca3f590d72956bd81c29 100644 (file)
@@ -639,8 +639,6 @@ enum InstructionTemplate {
     Cut(RegType),
     #[strum_discriminants(strum(props(Arity = "1", Name = "get_level")))]
     GetLevel(RegType),
-    #[strum_discriminants(strum(props(Arity = "1", Name = "get_level_and_unify")))]
-    GetLevelAndUnify(RegType),
     #[strum_discriminants(strum(props(Arity = "0", Name = "neck_cut")))]
     NeckCut,
     // choice instruction
@@ -1298,10 +1296,6 @@ fn generate_instruction_preface() -> TokenStream {
                         let rt_stub = reg_type_into_functor(r);
                         functor!(atom!("get_level"), [str(h, 0)], [rt_stub])
                     }
-                    &Instruction::GetLevelAndUnify(r) => {
-                        let rt_stub = reg_type_into_functor(r);
-                        functor!(atom!("get_level_and_unify"), [str(h, 0)], [rt_stub])
-                    }
                     &Instruction::NeckCut => {
                         functor!(atom!("neck_cut"))
                     }
index ec6315648cd985706ef43ab3da16c3c530af40d8..e7c6e2ac9198608cc41a361e48d4f9215809760d 100644 (file)
@@ -840,25 +840,6 @@ impl<'b> CodeGenerator<'b> {
         code.push(instr!("$set_cp", cell.get().norm(), 0));
     }
 
-    fn compile_get_level_and_unify(
-        &mut self,
-        code: &mut Code,
-        cell: &Cell<VarReg>,
-        var: Var,
-        term_loc: GenContext,
-    ) {
-        let mut target = Code::new();
-
-        self.marker.reset_arg(1);
-        self.marker.mark_var::<QueryInstruction>(var, Level::Shallow, cell, term_loc, &mut target);
-
-        if !target.is_empty() {
-            code.extend(target.into_iter());
-        }
-
-        code.push(instr!("get_level_and_unify", cell.get().norm()));
-    }
-
     fn compile_seq<'a>(
         &mut self,
         iter: ChunkedIterator<'a>,
@@ -874,9 +855,6 @@ impl<'b> CodeGenerator<'b> {
                 };
 
                 match *term {
-                    &QueryTerm::GetLevelAndUnify(ref cell, ref var) => {
-                        self.compile_get_level_and_unify(code, cell, var.clone(), term_loc)
-                    }
                     &QueryTerm::UnblockedCut(ref cell) => self.compile_unblocked_cut(code, cell),
                     &QueryTerm::BlockedCut => code.push(if chunk_num == 0 {
                         Instruction::NeckCut
index 4d7b7f475d958ce6cb1d4449b008730584a61aee..ac7649d5b56d6aa570b65a98b2997cb495518c77 100644 (file)
@@ -105,7 +105,6 @@ pub enum QueryTerm {
     Not(Vec<QueryTerm>),
     IfThen(Vec<QueryTerm>, Vec<QueryTerm>),
     Branch(Vec<Vec<QueryTerm>>),
-    GetLevelAndUnify(Cell<VarReg>, Var),
     ChunkTypeBoundary(ChunkType),
 }
 
@@ -122,7 +121,7 @@ impl QueryTerm {
             &QueryTerm::Clause(_, _, ref subterms, ..) => subterms.len(),
             &QueryTerm::Cut | &QueryTerm::Branch(_) => 0,
             &QueryTerm::IfThen(..) => 2,
-            &QueryTerm::Not(_) | &QueryTerm::GetLevelAndUnify(..) => 1,
+            &QueryTerm::Not(_) => 1,
         }
     }
 }
index eac1b185b0a7dbe224c53e7e0131b88104ca423f..e18341139ffa34972ce127eaf0c039216266664c 100644 (file)
@@ -173,10 +173,6 @@ impl<'a> QueryIterator<'a> {
             &QueryTerm::Cut => {
                 self.state_stack.push(TermIterState::Cut(lvl));
             }
-            &QueryTerm::GetLevelAndUnify(ref cell, ref var) => {
-                // TODO: get rid of it if possible. or! specialized TermIterState variant.
-                self.state_stack.push(TermIterState::Var(lvl, cell, VarPtr::from(var)));
-            }
             &QueryTerm::Not(ref terms) => {
                 self.state_stack.push(TermIterState::Fail(lvl));
                 self.state_stack.push(TermIterState::Cut(lvl));
@@ -521,11 +517,6 @@ impl<'a> ChunkedIterator<'a> {
                 ChunkedTerm::BodyTerm(&QueryTerm::Cut) => {
                     result.push(term);
                 }
-                ChunkedTerm::BodyTerm(&QueryTerm::GetLevelAndUnify(..)) => {
-                    result.push(term);
-                    arity = 1;
-                    break;
-                }
                 ChunkedTerm::BodyTerm(&QueryTerm::Clause(_, ClauseType::Inlined(_), ..)) => {
                     result.push(term);
                 }
index f22420af52ec7c54cdef525fe5e655cb28965025..d6f13df095bb0d753f4e26ca8b418799f0b88a45 100644 (file)
@@ -175,7 +175,7 @@ scc_helper(_, _, _) :-
 
 run_cleaners_with_handling :-
     '$get_scc_cleaner'(C),
-    '$get_level'(B),
+    '$get_cp'(B),
     catch(C, _, true),
     '$set_cp_by_default'(B),
     run_cleaners_with_handling.
@@ -186,7 +186,7 @@ run_cleaners_with_handling :-
 
 run_cleaners_without_handling(Cp) :-
     '$get_scc_cleaner'(C),
-    '$get_level'(B),
+    '$get_cp'(B),
     call(C),
     '$set_cp_by_default'(B),
     run_cleaners_without_handling(Cp).
@@ -258,7 +258,7 @@ call_with_inference_limit(_, _, R, Bb, B) :-
     '$remove_inference_counter'(B, _),
     (  '$get_ball'(Ball),
        '$push_ball_stack',
-       '$get_level'(Cp),
+       '$get_cp'(Cp),
        '$set_cp_by_default'(Cp)
     ;  '$remove_call_policy_check'(B),
        '$fail'
index 501aaddd37b32a81287b23da19e53adf0eb58889..ee1711e658c6e5c0a611f248cc27e67faead7f64 100644 (file)
@@ -566,7 +566,7 @@ impl VariableClassifier {
 
                             let build_stack_len = build_stack.len();
 
-                            // TODO: insert GetLevelAndUnify between
+                            // TODO: insert GetCutPoint between
                             // the two traversal states and detect
                             // that as a chunk boundary in
                             // insert_set_last_chunk_type ??
@@ -587,22 +587,6 @@ impl VariableClassifier {
                             state_stack.push(TraversalState::BuildNot(build_stack_len));
                             state_stack.push(TraversalState::Term(terms[0]));
                         }
-                        Term::Clause(_, atom!("$get_level"), terms) if terms.len() == 1 => {
-                            state_stack.push(TraversalState::IncrChunkNum);
-
-                            // TODO: need to classify this variable?
-                            // what is the difference between $get_cp and this exactly?
-                            if let Term::Var(_, ref var) = &terms[0] {
-                                build_stack.push(
-                                    QueryTerm::GetLevelAndUnify(
-                                        Cell::default(),
-                                        var.clone(),
-                                    ),
-                                );
-                            } else {
-                                return Err(CompilationError::InadmissibleQueryTerm);
-                            }
-                        }
                         Term::Clause(_, atom!(":"), mut terms) if terms.len() == 2 => {
                             let term_loc = chunk_type.to_gen_context(self.current_chunk_num);
 
index 04f394283f2f118dcb74ae11b11da9de9a0c6d56..92eca80fa29bec58446ba9bbb1b0146645f3037d 100644 (file)
@@ -1152,17 +1152,6 @@ impl Machine {
                     self.machine_st[r] = fixnum_as_cell!(Fixnum::build_with(b0 as i64));
                     self.machine_st.p += 1;
                 }
-                &Instruction::GetLevelAndUnify(r) => {
-                    // let b0 = self.machine_st[perm_v!(1)];
-                    let b0 = cell_as_fixnum!(
-                        self.machine_st.stack[stack_loc!(AndFrame, self.machine_st.e, 1)]
-                    );
-                    let a = self.machine_st.store(self.machine_st.deref(self.machine_st[r]));
-
-                    // unify_fn!(&mut self.machine_st, a, b0);
-                    self.machine_st.unify_fixnum(b0, a);
-                    step_or_fail!(self, self.machine_st.p += 1);
-                }
                 &Instruction::Cut(r) => {
                     let value = self.machine_st[r];
                     self.machine_st.cut_body(value);