Skip to content

Commit

Permalink
change '$delete_all_attributes' to '$delete_all_attributes_from_var'
Browse files Browse the repository at this point in the history
  • Loading branch information
mthom committed Feb 18, 2023
1 parent 0a3bc09 commit 9c77fe8
Show file tree
Hide file tree
Showing 4 changed files with 22 additions and 30 deletions.
8 changes: 4 additions & 4 deletions build/instructions_template.rs
Original file line number Diff line number Diff line change
Expand Up @@ -566,8 +566,8 @@ enum SystemClauseType {
PutToAttributedVarList,
#[strum_discriminants(strum(props(Arity = "3", Name = "$del_from_attr_list")))]
DeleteFromAttributedVarList,
#[strum_discriminants(strum(props(Arity = "1", Name = "$delete_all_attributes")))]
DeleteAllAttributes,
#[strum_discriminants(strum(props(Arity = "1", Name = "$delete_all_attributes_from_var")))]
DeleteAllAttributesFromVar,
REPL(REPLCodePtr),
}

Expand Down Expand Up @@ -1629,7 +1629,7 @@ fn generate_instruction_preface() -> TokenStream {
&Instruction::CallGetFromAttributedVarList(_) |
&Instruction::CallPutToAttributedVarList(_) |
&Instruction::CallDeleteFromAttributedVarList(_) |
&Instruction::CallDeleteAllAttributes(_) |
&Instruction::CallDeleteAllAttributesFromVar(_) |
&Instruction::CallFetchGlobalVar(_) |
&Instruction::CallFirstStream(_) |
&Instruction::CallFlushOutput(_) |
Expand Down Expand Up @@ -1845,7 +1845,7 @@ fn generate_instruction_preface() -> TokenStream {
&Instruction::ExecuteGetFromAttributedVarList(_) |
&Instruction::ExecutePutToAttributedVarList(_) |
&Instruction::ExecuteDeleteFromAttributedVarList(_) |
&Instruction::ExecuteDeleteAllAttributes(_) |
&Instruction::ExecuteDeleteAllAttributesFromVar(_) |
&Instruction::ExecuteFetchGlobalVar(_) |
&Instruction::ExecuteFirstStream(_) |
&Instruction::ExecuteFlushOutput(_) |
Expand Down
8 changes: 4 additions & 4 deletions src/machine/dispatch.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
}
Expand Down
18 changes: 10 additions & 8 deletions src/machine/project_attributes.pl
Original file line number Diff line number Diff line change
@@ -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),
Expand Down Expand Up @@ -97,12 +98,13 @@
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).
18 changes: 4 additions & 14 deletions src/machine/system_calls.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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];
}
}

Expand Down

0 comments on commit 9c77fe8

Please sign in to comment.