Another attemp to get call_cleanup/2-3 right. Third is the charm (I hope...).
git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@1769 b08c6af1-5177-4d33-ba66-4b1c6b8b522a
This commit is contained in:
		@@ -522,6 +522,10 @@ frozen(V, LG) :-
 | 
			
		||||
	'$purge_done_goals'(G0, GF).
 | 
			
		||||
'$purge_done_goals'(['$redo_freeze'(Done, _, _)|G0], GF) :- nonvar(Done), !,
 | 
			
		||||
	'$purge_done_goals'(G0, GF).
 | 
			
		||||
'$purge_done_goals'(['$redo_freeze'(Done, _, CallCleanup)|G0], GF) :-
 | 
			
		||||
	nonvar(CallCleanup),
 | 
			
		||||
	CallCleanup = _:'$clean_call'(_), !,
 | 
			
		||||
	'$purge_done_goals'(G0, GF).
 | 
			
		||||
'$purge_done_goals'(['$redo_eq'(Done, _, _, _)|G0], GF) :- nonvar(Done), !,
 | 
			
		||||
	'$purge_done_goals'(G0, GF).
 | 
			
		||||
'$purge_done_goals'(['$redo_ground'(Done, _, _)|G0], GF) :- nonvar(Done), !,
 | 
			
		||||
 
 | 
			
		||||
@@ -189,8 +189,7 @@ call_cleanup(Goal, Cleanup) :-
 | 
			
		||||
call_cleanup(Goal, Catcher, Cleanup) :-
 | 
			
		||||
	catch('$call_cleanup'(Goal,Cleanup,Result),
 | 
			
		||||
	      Exception,
 | 
			
		||||
	      '$cleanup_exception'(Exception,Catcher,Cleanup)),
 | 
			
		||||
	Result = exit.
 | 
			
		||||
	      '$cleanup_exception'(Exception,Catcher,Cleanup)).
 | 
			
		||||
 | 
			
		||||
'$cleanup_exception'(Exception, exception(Exception), Cleanup) :-
 | 
			
		||||
	call(Cleanup).
 | 
			
		||||
@@ -205,7 +204,8 @@ call_cleanup(Goal, Catcher, Cleanup) :-
 | 
			
		||||
	    	Result = exit, !
 | 
			
		||||
		;	true
 | 
			
		||||
		)
 | 
			
		||||
	;	Result = fail
 | 
			
		||||
	;	Result = fail,
 | 
			
		||||
		fail
 | 
			
		||||
	).
 | 
			
		||||
 | 
			
		||||
'$clean_call'(Cleanup) :-
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user