call project_attributes from top-level (#846)
This commit is contained in:
@@ -17,11 +17,10 @@ pub(super) struct AttrVarInitializer {
|
|||||||
pub(super) cp: LocalCodePtr,
|
pub(super) cp: LocalCodePtr,
|
||||||
pub(super) instigating_p: LocalCodePtr,
|
pub(super) instigating_p: LocalCodePtr,
|
||||||
pub(super) verify_attrs_loc: usize,
|
pub(super) verify_attrs_loc: usize,
|
||||||
pub(super) project_attrs_loc: usize,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl AttrVarInitializer {
|
impl AttrVarInitializer {
|
||||||
pub(super) fn new(verify_attrs_loc: usize, project_attrs_loc: usize) -> Self {
|
pub(super) fn new(verify_attrs_loc: usize) -> Self {
|
||||||
AttrVarInitializer {
|
AttrVarInitializer {
|
||||||
attribute_goals: vec![],
|
attribute_goals: vec![],
|
||||||
attr_var_queue: vec![],
|
attr_var_queue: vec![],
|
||||||
@@ -29,7 +28,6 @@ impl AttrVarInitializer {
|
|||||||
instigating_p: LocalCodePtr::default(),
|
instigating_p: LocalCodePtr::default(),
|
||||||
cp: LocalCodePtr::default(),
|
cp: LocalCodePtr::default(),
|
||||||
verify_attrs_loc,
|
verify_attrs_loc,
|
||||||
project_attrs_loc,
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ impl MachineState {
|
|||||||
e: 0,
|
e: 0,
|
||||||
num_of_args: 0,
|
num_of_args: 0,
|
||||||
cp: LocalCodePtr::default(),
|
cp: LocalCodePtr::default(),
|
||||||
attr_var_init: AttrVarInitializer::new(0, 0),
|
attr_var_init: AttrVarInitializer::new(0),
|
||||||
fail: false,
|
fail: false,
|
||||||
heap: Heap::new(),
|
heap: Heap::new(),
|
||||||
mode: MachineMode::Write,
|
mode: MachineMode::Write,
|
||||||
|
|||||||
@@ -200,12 +200,6 @@ impl Machine {
|
|||||||
self.machine_st.attr_var_init.verify_attrs_loc = code_index.local().unwrap();
|
self.machine_st.attr_var_init.verify_attrs_loc = code_index.local().unwrap();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Some(module) = self.indices.modules.get(&clause_name!("$project_atts")) {
|
|
||||||
if let Some(code_index) = module.code_dir.get(&(clause_name!("driver"), 2)) {
|
|
||||||
self.machine_st.attr_var_init.project_attrs_loc = code_index.local().unwrap();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn run_top_level(&mut self) {
|
pub fn run_top_level(&mut self) {
|
||||||
|
|||||||
@@ -1,11 +1,9 @@
|
|||||||
:- module('$project_atts', [copy_term/3]).
|
:- module('$project_atts', [copy_term/3]).
|
||||||
|
|
||||||
driver(QueryVars, AttrVars) :-
|
project_attributes(QueryVars, AttrVars) :-
|
||||||
gather_attr_modules(AttrVars, Modules0),
|
gather_attr_modules(AttrVars, Modules0),
|
||||||
sort(Modules0, Modules),
|
sort(Modules0, Modules),
|
||||||
call_project_attributes(Modules, QueryVars, AttrVars),
|
call_project_attributes(Modules, QueryVars, AttrVars).
|
||||||
call_attribute_goals(Modules, '$project_atts':call_query_var_goals, QueryVars),
|
|
||||||
call_attribute_goals(Modules, '$project_atts':call_attr_var_goals, AttrVars).
|
|
||||||
|
|
||||||
enqueue_goals(Goals0) :-
|
enqueue_goals(Goals0) :-
|
||||||
nonvar(Goals0),
|
nonvar(Goals0),
|
||||||
|
|||||||
@@ -266,6 +266,7 @@ trailing_period_is_ambiguous(Value) :-
|
|||||||
write_eqs_and_read_input(B, VarList) :-
|
write_eqs_and_read_input(B, VarList) :-
|
||||||
term_variables(VarList, Vars0),
|
term_variables(VarList, Vars0),
|
||||||
'$term_attributed_variables'(VarList, AttrVars),
|
'$term_attributed_variables'(VarList, AttrVars),
|
||||||
|
'$project_atts':project_attributes(Vars0, AttrVars),
|
||||||
copy_term(AttrVars, AttrVars, AttrGoals),
|
copy_term(AttrVars, AttrVars, AttrGoals),
|
||||||
term_variables(AttrGoals, AttrGoalVars),
|
term_variables(AttrGoals, AttrGoalVars),
|
||||||
append([Vars0, AttrGoalVars, AttrVars], Vars),
|
append([Vars0, AttrGoalVars, AttrVars], Vars),
|
||||||
|
|||||||
Reference in New Issue
Block a user