fix setup_call_cleanup and friends.
This commit is contained in:
parent
06d30b9fc9
commit
d2da5bfe26
6
C/exec.c
6
C/exec.c
@ -1439,7 +1439,11 @@ static int is_cleanup_cp(choiceptr cp_b)
|
|||||||
#else
|
#else
|
||||||
pe = cp_b->cp_ap->u.p.p;
|
pe = cp_b->cp_ap->u.p.p;
|
||||||
#endif /* YAPOR */
|
#endif /* YAPOR */
|
||||||
return (pe == PredSafeCallCleanup);
|
/*
|
||||||
|
it has to be a cleanup and it has to be a completed goal,
|
||||||
|
otherwise the throw will be caught anyway.
|
||||||
|
*/
|
||||||
|
return pe == PredSafeCallCleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
static Int
|
static Int
|
||||||
|
@ -33,7 +33,6 @@
|
|||||||
Bind(pt, MkAtomTerm(AtomCut));
|
Bind(pt, MkAtomTerm(AtomCut));
|
||||||
Yap_WakeUp(pt);
|
Yap_WakeUp(pt);
|
||||||
}
|
}
|
||||||
pt1--;
|
|
||||||
} else if ((*pt & (LogUpdMask|IndexMask)) == (LogUpdMask|IndexMask)) {
|
} else if ((*pt & (LogUpdMask|IndexMask)) == (LogUpdMask|IndexMask)) {
|
||||||
LogUpdIndex *cl = ClauseFlagsToLogUpdIndex(pt);
|
LogUpdIndex *cl = ClauseFlagsToLogUpdIndex(pt);
|
||||||
int erase;
|
int erase;
|
||||||
|
@ -67,9 +67,7 @@ setup_call_cleanup(Setup, Goal, Cleanup) :-
|
|||||||
setup_call_catcher_cleanup(Setup, Goal, Catcher, Cleanup) :-
|
setup_call_catcher_cleanup(Setup, Goal, Catcher, Cleanup) :-
|
||||||
yap_hacks:disable_interrupts,
|
yap_hacks:disable_interrupts,
|
||||||
'$do_setup'(Setup),
|
'$do_setup'(Setup),
|
||||||
catch('$safe_call_cleanup'(Goal,Cleanup,Catcher,Exception),
|
'$safe_call_cleanup'(Goal,Cleanup,Catcher,Exception).
|
||||||
Exception,
|
|
||||||
'$cleanup_exception'(Exception,Catcher,Cleanup)).
|
|
||||||
|
|
||||||
% this is simple, do nothing
|
% this is simple, do nothing
|
||||||
'$do_setup'(A:true) :- atom(A), !.
|
'$do_setup'(A:true) :- atom(A), !.
|
||||||
@ -96,9 +94,9 @@ setup_call_catcher_cleanup(Setup, Goal, Catcher, Cleanup) :-
|
|||||||
|
|
||||||
'$safe_call_cleanup'(Goal, Cleanup, Catcher, Exception) :-
|
'$safe_call_cleanup'(Goal, Cleanup, Catcher, Exception) :-
|
||||||
yap_hacks:current_choice_point(MyCP1),
|
yap_hacks:current_choice_point(MyCP1),
|
||||||
'$freeze_goal'(Catcher, '$clean_call'(Exception, Cleanup)),
|
'$freeze_goal'(Catcher, '$clean_call'(Active, Cleanup)),
|
||||||
yap_hacks:trail_suspension_marker(Catcher),
|
|
||||||
(
|
(
|
||||||
|
yap_hacks:trail_suspension_marker(Catcher),
|
||||||
yap_hacks:enable_interrupts,
|
yap_hacks:enable_interrupts,
|
||||||
yap_hacks:current_choice_point(CP0),
|
yap_hacks:current_choice_point(CP0),
|
||||||
'$execute'(Goal),
|
'$execute'(Goal),
|
||||||
|
Reference in New Issue
Block a user