:- meta_predicate \+(0).
-\+ G :- call(G), !, false.
+\+ G :- '$call'(G), !, false.
\+ _.
:- meta_predicate once(0).
-once(G) :- call(G), !.
+once(G) :- '$call'(G), !.
repeat.
staggered_if_then(G1, G2) :-
'$get_staggered_cp'(B),
- call('$call'(G1)),
+ '$call'(G1),
'$set_cp'(B),
- call('$call'(G2)).
+ '$call'(G2).
G1 ; G2 :- control_entry_point((G1 ; G2)).
:- non_counted_backtracking staggered_sc/2.
-staggered_sc(G, _) :- call('$call'(G)).
-staggered_sc(_, G) :- call('$call'(G)).
+staggered_sc(G, _) :- '$call'(G).
+staggered_sc(_, G) :- '$call'(G).
!.
'$get_current_block'(Bb),
'$call_with_default_policy'(catch(G,C,R,Bb)).
+:- meta_predicate catch(0, ?, 0, ?).
+
:- non_counted_backtracking catch/4.
+
catch(G,C,R,Bb) :-
'$install_new_block'(NBb),
- call(G),
+ '$call'(G),
'$call_with_default_policy'(end_block(Bb, NBb)).
catch(G,C,R,Bb) :-
'$reset_block'(Bb),
:- non_counted_backtracking end_block/2.
+
end_block(Bb, NBb) :-
'$clean_up_block'(NBb),
'$reset_block'(Bb).
'$fail'.
:- non_counted_backtracking handle_ball/3.
+
handle_ball(C, C, R) :-
!,
'$erase_ball',
- call(R).
+ '$call'(R).
handle_ball(_, _, _) :-
'$unwind_stack'.
:- non_counted_backtracking '$iterate_find_all_diff'/5.
'$iterate_find_all_diff'(Template, Goal, _, _, LhOffset) :-
- call(Goal),
+ '$call'(Goal),
'$copy_to_lh'(LhOffset, Template),
'$fail'.
'$iterate_find_all_diff'(_, _, Solutions0, Solutions1, LhOffset) :-
#[inline]
pub(crate) fn install_new_block(&mut self, value: HeapCellValue) -> usize {
+ let value = self.store(self.deref(value));
+
self.block = self.b;
self.unify_fixnum(Fixnum::build_with(self.block as i64), value);
#[inline(always)]
pub(crate) fn inference_level(&mut self) {
- let a1 = self.machine_st.registers[1];
+ let a1 = self.machine_st.store(self.machine_st.deref(self.machine_st.registers[1]));
let a2 = self.machine_st.store(self.machine_st.deref(self.machine_st.registers[2]));
let bp = cell_as_fixnum!(a2).get_num() as usize;