handle meta-calls to unbound variables.
first step to improve exceptions.
This commit is contained in:
parent
2fdf8e9bda
commit
717d6ac4c8
36
pl/debug.yap
36
pl/debug.yap
@ -290,6 +290,7 @@ debugging :-
|
|||||||
|
|
||||||
% last argument to do_spy says that we are at the end of a context. It
|
% last argument to do_spy says that we are at the end of a context. It
|
||||||
% is required to know whether we are controlled by the debugger.
|
% is required to know whether we are controlled by the debugger.
|
||||||
|
'$do_spy'(V, M, CP, Flag) :- var(V), !, '$do_spy'(call(V), M, CP, Flag).
|
||||||
'$do_spy'(!, _, CP, _) :- !, '$$cut_by'(CP).
|
'$do_spy'(!, _, CP, _) :- !, '$$cut_by'(CP).
|
||||||
'$do_spy'('$cut_by'(M), _, _, _) :- !, '$$cut_by'(M).
|
'$do_spy'('$cut_by'(M), _, _, _) :- !, '$$cut_by'(M).
|
||||||
'$do_spy'(true, _, _, _) :- !.
|
'$do_spy'(true, _, _, _) :- !.
|
||||||
@ -344,25 +345,27 @@ debugging :-
|
|||||||
'$loop_spy_event'(error(Event,Context), GoalNumber, G, Module, CalledFromDebugger)).
|
'$loop_spy_event'(error(Event,Context), GoalNumber, G, Module, CalledFromDebugger)).
|
||||||
|
|
||||||
% handle weird things happening in the debugger.
|
% handle weird things happening in the debugger.
|
||||||
|
'$loop_spy_event'('$pass'(Event), _, _, _, _) :- !,
|
||||||
|
throw(Event).
|
||||||
'$loop_spy_event'(error('$retry_spy'(G0),_), GoalNumber, G, Module, CalledFromDebugger) :-
|
'$loop_spy_event'(error('$retry_spy'(G0),_), GoalNumber, G, Module, CalledFromDebugger) :-
|
||||||
G0 >= GoalNumber, !,
|
G0 >= GoalNumber, !,
|
||||||
'$loop_spy'(GoalNumber, G, Module, CalledFromDebugger).
|
'$loop_spy'(GoalNumber, G, Module, CalledFromDebugger).
|
||||||
'$loop_spy_event'(error('$retry_spy'(GoalNumber),_), _, _, _, _) :- !,
|
'$loop_spy_event'(error('$retry_spy'(GoalNumber),_), _, _, _, _) :- !,
|
||||||
throw(error('$retry_spy'(GoalNumber),[])).
|
throw(error('$retry_spy'(GoalNumber),[])).
|
||||||
'$loop_spy_event'(error('$fail_spy'(G0),_), GoalNumber, G, Module, CalledFromDebugger) :-
|
'$loop_spy_event'(error('$fail_spy'(G0),_), GoalNumber, G, Module, CalledFromDebugger) :-
|
||||||
G0 >= GoalNumber, !,
|
G0 >= GoalNumber, !,
|
||||||
'$loop_fail'(GoalNumber, G, Module, CalledFromDebugger).
|
'$loop_fail'(GoalNumber, G, Module, CalledFromDebugger).
|
||||||
'$loop_spy_event'(error('$fail_spy'(GoalNumber),_), _, _, _, _) :- !,
|
'$loop_spy_event'(error('$fail_spy'(GoalNumber),_), _, _, _, _) :- !,
|
||||||
throw(error('$fail_spy'(GoalNumber),[])).
|
throw(error('$fail_spy'(GoalNumber),[])).
|
||||||
'$loop_spy_event'(error('$done_spy'(G0),_), GoalNumber, G, _, CalledFromDebugger) :-
|
'$loop_spy_event'(error('$done_spy'(G0),_), GoalNumber, G, _, CalledFromDebugger) :-
|
||||||
G0 >= GoalNumber, !,
|
G0 >= GoalNumber, !,
|
||||||
'$continue_debugging'(CalledFromDebugger).
|
'$continue_debugging'(CalledFromDebugger).
|
||||||
'$loop_spy_event'(error('$done_spy'(GoalNumber),_), _, _, _, _) :- !,
|
'$loop_spy_event'(error('$done_spy'(GoalNumber),_), _, _, _, _) :- !,
|
||||||
throw(error('$done_spy'(GoalNumber),[])).
|
throw(error('$done_spy'(GoalNumber),[])).
|
||||||
'$loop_spy_event'(Event, GoalNumber, G, Module, CalledFromDebugger) :-
|
'$loop_spy_event'(Event, GoalNumber, G, Module, CalledFromDebugger) :-
|
||||||
'$debug_error'(Event),
|
'$debug_error'(Event),
|
||||||
'$system_catch'(
|
'$system_catch'(
|
||||||
('$trace'(exception,G,Module,GoalNumber,_),fail),
|
('$trace'(exception(Event),G,Module,GoalNumber,_),fail),
|
||||||
Module,
|
Module,
|
||||||
error(NewEvent,NewContext),
|
error(NewEvent,NewContext),
|
||||||
'$loop_spy_event'(error(NewEvent,NewContext), GoalNumber, G, Module, CalledFromDebugger)
|
'$loop_spy_event'(error(NewEvent,NewContext), GoalNumber, G, Module, CalledFromDebugger)
|
||||||
@ -539,6 +542,7 @@ debugging :-
|
|||||||
'$trace_msg'(P,G,Module,L,Deterministic) :-
|
'$trace_msg'(P,G,Module,L,Deterministic) :-
|
||||||
flush_output(user_output),
|
flush_output(user_output),
|
||||||
flush_output(user_error),
|
flush_output(user_error),
|
||||||
|
functor(P,P0,_),
|
||||||
(P = exit, Deterministic \= true -> Det = '?' ; Det = ' '),
|
(P = exit, Deterministic \= true -> Det = '?' ; Det = ' '),
|
||||||
('$pred_being_spied'(G,Module) -> CSPY = '*' ; CSPY = ' '),
|
('$pred_being_spied'(G,Module) -> CSPY = '*' ; CSPY = ' '),
|
||||||
% vsc: fix this
|
% vsc: fix this
|
||||||
@ -546,9 +550,9 @@ debugging :-
|
|||||||
SLL = ' ',
|
SLL = ' ',
|
||||||
( Module\=prolog,
|
( Module\=prolog,
|
||||||
Module\=user ->
|
Module\=user ->
|
||||||
format(user_error,'~a~a~a (~d) ~q: ~a:',[Det,CSPY,SLL,L,P,Module])
|
format(user_error,'~a~a~a (~d) ~q: ~a:',[Det,CSPY,SLL,L,P0,Module])
|
||||||
;
|
;
|
||||||
format(user_error,'~a~a~a (~d) ~q:',[Det,CSPY,SLL,L,P])
|
format(user_error,'~a~a~a (~d) ~q:',[Det,CSPY,SLL,L,P0])
|
||||||
),
|
),
|
||||||
'$debugger_write'(user_error,G).
|
'$debugger_write'(user_error,G).
|
||||||
|
|
||||||
@ -557,7 +561,7 @@ debugging :-
|
|||||||
'$unleashed'(redo) :- get_value('$leash',L), L /\ 2'0010 =:= 0. %'
|
'$unleashed'(redo) :- get_value('$leash',L), L /\ 2'0010 =:= 0. %'
|
||||||
'$unleashed'(fail) :- get_value('$leash',L), L /\ 2'0001 =:= 0. %'
|
'$unleashed'(fail) :- get_value('$leash',L), L /\ 2'0001 =:= 0. %'
|
||||||
% the same as fail.
|
% the same as fail.
|
||||||
'$unleashed'(exception) :- get_value('$leash',L), L /\ 2'0001 =:= 0. %'
|
'$unleashed'(exception(_)) :- get_value('$leash',L), L /\ 2'0001 =:= 0. %'
|
||||||
|
|
||||||
'$debugger_write'(Stream, G) :-
|
'$debugger_write'(Stream, G) :-
|
||||||
recorded('$print_options','$debugger'(OUT),_), !,
|
recorded('$print_options','$debugger'(OUT),_), !,
|
||||||
@ -565,6 +569,8 @@ debugging :-
|
|||||||
'$debugger_write'(Stream, G) :-
|
'$debugger_write'(Stream, G) :-
|
||||||
writeq(Stream, G).
|
writeq(Stream, G).
|
||||||
|
|
||||||
|
%'$action'(10,_,_,_,_,on) :- % newline creep
|
||||||
|
% nb_setval('$debug_jump',false).
|
||||||
'$action'(10,_,_,_,_,on) :- % newline creep
|
'$action'(10,_,_,_,_,on) :- % newline creep
|
||||||
nb_setval('$debug_jump',false).
|
nb_setval('$debug_jump',false).
|
||||||
'$action'(0'!,_,_,_,_,_) :- !, % ! 'g execute
|
'$action'(0'!,_,_,_,_,_) :- !, % ! 'g execute
|
||||||
|
Reference in New Issue
Block a user