fix creeping with debugger after failing a static clause

This commit is contained in:
Vítor Santos Costa 2015-11-12 14:56:31 +00:00
parent 832599d220
commit 67c8253135

@ -307,6 +307,7 @@ be lost.
%'$do_spy'(V, M, CP, Flag) :- %'$do_spy'(V, M, CP, Flag) :-
% writeln('$do_spy'(V, M, CP, Flag)), fail. % writeln('$do_spy'(V, M, CP, Flag)), fail.
'$do_spy'(V, M, CP, Flag) :- '$do_spy'(V, M, CP, Flag) :-
'$stop_creeping',
var(V), !, var(V), !,
'$do_spy'(call(V), M, CP, Flag). '$do_spy'(call(V), M, CP, Flag).
'$do_spy'(!, _, CP, _) :- '$do_spy'(!, _, CP, _) :-
@ -323,6 +324,7 @@ be lost.
'$do_spy'((T->A;B), M, CP, CalledFromDebugger) :- !, '$do_spy'((T->A;B), M, CP, CalledFromDebugger) :- !,
( '$do_spy'(T, M, CP, debugger) -> '$do_spy'(A, M, CP, CalledFromDebugger) ( '$do_spy'(T, M, CP, debugger) -> '$do_spy'(A, M, CP, CalledFromDebugger)
; ;
'$do_spy'(B, M, CP, CalledFromDebugger) '$do_spy'(B, M, CP, CalledFromDebugger)
). ).
'$do_spy'((T->A|B), M, CP, CalledFromDebugger) :- !, '$do_spy'((T->A|B), M, CP, CalledFromDebugger) :- !,
@ -331,6 +333,7 @@ be lost.
-> ->
'$do_spy'(A, M, CP, CalledFromDebugger) '$do_spy'(A, M, CP, CalledFromDebugger)
; ;
'$stop_creeping',
'$do_spy'(B, M, CP, CalledFromDebugger) '$do_spy'(B, M, CP, CalledFromDebugger)
). ).
'$do_spy'((T->A), M, CP, CalledFromDebugger) :- !, '$do_spy'((T->A), M, CP, CalledFromDebugger) :- !,
@ -339,13 +342,15 @@ be lost.
( (
'$do_spy'(A, M, CP, CalledFromDebugger) '$do_spy'(A, M, CP, CalledFromDebugger)
; ;
'$do_spy'(B, M, CP, CalledFromDebugger) '$stop_creeping',
'$do_spy'(B, M, CP, CalledFromDebugger)
). ).
'$do_spy'((A|B), M, CP, CalledFromDebugger) :- !, '$do_spy'((A|B), M, CP, CalledFromDebugger) :- !,
( (
'$do_spy'(A, M, CP, CalledFromDebugger ) '$do_spy'(A, M, CP, CalledFromDebugger )
; ;
'$do_spy'(B, M, CP, CalledFromDebugger ) '$stop_creeping',
'$do_spy'(B, M, CP, CalledFromDebugger )
). ).
'$do_spy'((\+G), M, CP, CalledFromDebugger) :- !, '$do_spy'((\+G), M, CP, CalledFromDebugger) :- !,
\+ '$do_spy'(G, M, CP, CalledFromDebugger). \+ '$do_spy'(G, M, CP, CalledFromDebugger).
@ -427,44 +432,44 @@ be lost.
/* go execute the continuation */ /* go execute the continuation */
( (
/* exit port */ /* exit port */
Retry = false, Retry = false,
/* found an answer, so it can redo */ /* found an answer, so it can redo */
nb_setarg(6, Info, true), nb_setarg(6, Info, true),
'$show_trace'(exit,G,Module,GoalNumber,Det), /* output message at exit */ '$show_trace'(exit,G,Module,GoalNumber,Det), /* output message at exit */
/* exit port */ /* exit port */
/* get rid of deterministic computations */ /* get rid of deterministic computations */
( (
Det == true Det == true
-> ->
'$$cut_by'(CP) '$$cut_by'(CP)
; ;
true true
), ),
'$continue_debugging'(exit, CalledFromDebugger) '$continue_debugging'(exit, CalledFromDebugger)
; ;
% make sure we are in system mode when running the debugger. /* make sure we are in system mode when running the debugger. */
/* backtracking from exit */ /* backtracking from exit */
/* we get here when we want to redo a goal */ /* we get here when we want to redo a goal */
/* redo port */ /* redo port */
( (
arg(6, Info, true) arg(6, Info, true)
-> ->
'$stop_creeping', '$stop_creeping',
'$show_trace'(redo,G,Module,GoalNumber,_), /* inform user_error */ '$show_trace'(redo,G,Module,GoalNumber,_), /* inform user_error */
nb_setarg(6, Info, false) nb_setarg(6, Info, false)
; ;
true true
), ),
'$continue_debugging'(fail, CalledFromDebugger), '$continue_debugging'(fail, CalledFromDebugger),
fail /* to backtrack to spycalls */ fail /* to backtrack to spycall */
) )
; ;
'$stop_creeping', '$stop_creeping',
'$show_trace'(fail,G,Module,GoalNumber,_), /* inform at fail port */ '$show_trace'(fail,G,Module,GoalNumber,_), /* inform at fail port */
'$continue_debugging'(fail, CalledFromDebugger), '$continue_debugging'(fail, CalledFromDebugger),
/* fail port */ /* fail port */
fail fail
). ).
'$enter_goal'(GoalNumber, G, Module) :- '$enter_goal'(GoalNumber, G, Module) :-
'$zip'(GoalNumber, G, Module), !. '$zip'(GoalNumber, G, Module), !.
@ -512,7 +517,7 @@ be lost.
), ),
'$execute_nonstop'(G1,M). '$execute_nonstop'(G1,M).
'$spycall'(G, M, _, _) :- '$spycall'(G, M, _, _) :-
( (
'$system_predicate'(G,M) '$system_predicate'(G,M)
; ;
'$system_module'(M) '$system_module'(M)
@ -572,6 +577,7 @@ be lost.
(CP1 == CP2 -> ! ; ( true ; '$creep', fail ) ), (CP1 == CP2 -> ! ; ( true ; '$creep', fail ) ),
'$stop_creeping' '$stop_creeping'
; ;
'$stop_creeping',
fail fail
). ).
'$creep'(G,M) :- '$creep'(G,M) :-