change '$delete_all_attributes' to '$delete_all_attributes_from_var'
This commit is contained in:
@@ -5207,12 +5207,12 @@ impl Machine {
|
||||
self.delete_from_attributed_variable_list();
|
||||
step_or_fail!(self, self.machine_st.p = self.machine_st.cp);
|
||||
}
|
||||
&Instruction::CallDeleteAllAttributes(_) => {
|
||||
self.delete_all_attributes();
|
||||
&Instruction::CallDeleteAllAttributesFromVar(_) => {
|
||||
self.delete_all_attributes_from_var();
|
||||
self.machine_st.p += 1;
|
||||
}
|
||||
&Instruction::ExecuteDeleteAllAttributes(_) => {
|
||||
self.delete_all_attributes();
|
||||
&Instruction::ExecuteDeleteAllAttributesFromVar(_) => {
|
||||
self.delete_all_attributes_from_var();
|
||||
self.machine_st.p = self.machine_st.cp;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
:- module('$project_atts', [copy_term/3]).
|
||||
|
||||
:- use_module(library(dcgs)).
|
||||
:- use_module(library(error), [can_be/2]).
|
||||
:- use_module(library(lambda)).
|
||||
:- use_module(library(lists), [foldl/4]).
|
||||
:- use_module(library(lists), [foldl/4, maplist/2]).
|
||||
|
||||
project_attributes(QueryVars, AttrVars) :-
|
||||
phrase(gather_attr_modules(AttrVars), Modules0),
|
||||
@@ -97,12 +98,13 @@ gather_residual_goals([V|Vs]) -->
|
||||
foldl(V+\M^phrase(M:attribute_goals(V)), Modules),
|
||||
gather_residual_goals(Vs).
|
||||
|
||||
delete_all_attributes(Term) :- '$delete_all_attributes'(Term).
|
||||
delete_all_attributes_from_var(V) :- '$delete_all_attributes_from_var'(V).
|
||||
|
||||
copy_term(Term, Copy, Gs) :-
|
||||
'$term_attributed_variables'(Term, Vs),
|
||||
findall(Term-Gs,
|
||||
( phrase(gather_residual_goals(Vs), Gs),
|
||||
delete_all_attributes(Term)
|
||||
),
|
||||
[Copy-Gs]).
|
||||
can_be(list, Gs),
|
||||
findall(Term-Rs, term_residual_goals(Term,Rs), [Copy-Gs]).
|
||||
|
||||
term_residual_goals(Term,Rs) :-
|
||||
'$term_attributed_variables'(Term, Vs),
|
||||
phrase(gather_residual_goals(Vs), Rs),
|
||||
maplist(delete_all_attributes_from_var, Vs).
|
||||
|
||||
@@ -1037,23 +1037,13 @@ impl MachineState {
|
||||
|
||||
impl Machine {
|
||||
#[inline(always)]
|
||||
pub(crate) fn delete_all_attributes(&mut self) {
|
||||
let h = self.machine_st.heap.len();
|
||||
|
||||
self.machine_st.heap.push(heap_loc_as_cell!(h));
|
||||
self.machine_st.registers[2] = heap_loc_as_cell!(h);
|
||||
|
||||
self.term_attributed_variables();
|
||||
|
||||
let mut list_of_attr_vars = self.deref_register(2);
|
||||
|
||||
while let HeapCellValueTag::Lis = list_of_attr_vars.get_tag() {
|
||||
let attr_var_loc = list_of_attr_vars.get_value();
|
||||
pub(crate) fn delete_all_attributes_from_var(&mut self) {
|
||||
let attr_var = self.deref_register(1);
|
||||
|
||||
if let HeapCellValueTag::AttrVar = attr_var.get_tag() {
|
||||
let attr_var_loc = attr_var.get_value();
|
||||
self.machine_st.heap[attr_var_loc] = heap_loc_as_cell!(attr_var_loc);
|
||||
self.machine_st.trail(TrailRef::Ref(Ref::attr_var(attr_var_loc)));
|
||||
|
||||
list_of_attr_vars = self.machine_st.heap[attr_var_loc + 1];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user