}
fn generate_init_goal_code(
- &mut self,
+ &mut self,
) -> Result<Code, SessionError> {
- let query_terms = mem::replace(&mut self.initialization_goals.0, vec![]);
- let queue = mem::replace(&mut self.initialization_goals.1, VecDeque::new());
+ let query_terms = mem::replace(&mut self.initialization_goals.0, vec![]);
+ let queue = mem::replace(&mut self.initialization_goals.1, VecDeque::new());
- compile_query(query_terms, queue)
- .map(|(code, _)| code)
- .map_err(SessionError::from)
+ compile_query(query_terms, queue)
+ .map(|(code, _)| code)
+ .map_err(SessionError::from)
}
fn set_code_index(
result
}
- pub(crate) fn gather_items(
+ pub(crate)
+ fn gather_items(
&mut self,
wam: &mut Machine,
src: &mut ParsingStream<Stream>,
let init_goal_code = compiler.generate_init_goal_code()?;
if init_goal_code.len() > 0 {
- if !wam.run_init_code(init_goal_code) {
+ if !wam.run_init_code(init_goal_code) {
println!("Warning: initialization goal for {} failed",
compiler.listing_src.name());
}
append([Vars0, AttrVars, AttrGoalVars], Vars),
charsio:extend_var_list(Vars, VarList, NewVarList, fabricated),
'$get_b_value'(B0),
- gather_equations(NewVarList, Goals, AttrGoals),
+ gather_equations(NewVarList, NewVarList, Goals, AttrGoals),
( bb_get('$first_answer', true) ->
write(' '),
bb_put('$first_answer', false)
is_a_different_variable([_ = Binding | Pairs], Value) :-
( Value == Binding, !
- ; is_a_different_variable(Pairs, Value)
+ ; is_a_different_variable(Pairs, Var)
).
-gather_equations([], Goals, Goals).
-gather_equations([Var = Value | Pairs], Goals, Goals1) :-
+gather_equations([], MasterList, Goals, Goals).
+gather_equations([Var = Value | Pairs], MasterList, Goals, Goals1) :-
+ select((Var = _), MasterList, MasterPairs),
( ( nonvar(Value)
- ; is_a_different_variable(Pairs, Value)
+ ; is_a_different_variable(MasterPairs, Value)
) ->
Goals = [Var = Value | Goals0],
- gather_equations(Pairs, Goals0, Goals1)
- ; gather_equations(Pairs, Goals, Goals1)
+ gather_equations(Pairs, MasterList, Goals0, Goals1)
+ ; gather_equations(Pairs, MasterList, Goals, Goals1)
).
print_exception(E) :-