2015-10-05 10:40:30 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								/*************************************************************************
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								*									 *
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  *	 YAP Prolog 							 *
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								*									 *
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  *	Yap Prolog was developed at NCCUP - Universidade do Porto	 *
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								*									 *
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								* Copyright L.Damas, V.S.Costa and Universidade do Porto 1985-1997	 *
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								*									 *
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								**************************************************************************
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								*									 *
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								* File:		debug.pl						 *
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								* Last rev:								 *
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								* mods:									 *
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								* comments:	YAP debugger						 *
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								*									 *
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								*************************************************************************/
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								:- system_module( '$_debug', [], ['$do_spy'/4,
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        '$init_debugger'/0,
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        '$skipeol'/1]).
							 
						 
					
						
							
								
									
										
										
										
											2014-09-11 14:06:57 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								/** @defgroup Deb_Interaction Interacting with the debugger
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								@ingroup YAPProgramming
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								Debugging with YAP is similar to debugging with C-Prolog. Both systems
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								include a procedural debugger, based on Byrd's four port model. In this
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								model, execution is seen at the procedure level: each activation of a
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								procedure is seen as a box with control flowing into and out of that
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								box.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-11-25 12:03:48 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								In the four port model control is caught at four key points: before
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								entering the procedure, after exiting the procedure (meaning successful
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								evaluation of all queries activated by the procedure), after backtracking but
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								before trying new alternative to the procedure and after failing the
							 
						 
					
						
							
								
									
										
										
										
											2014-09-11 14:06:57 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								procedure. Each one of these points is named a port:
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								~~~~~
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								           *--------------------------------------*
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								   Call    |                                      |    Exit
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								---------> +  descendant(X,Y) :- offspring(X,Y).  + --------->
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								           |                                      |
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								           |  descendant(X,Z) :-                  |
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								<--------- +     offspring(X,Y), descendant(Y,Z). + <---------
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								   Fail    |                                      |    Redo
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								           *--------------------------------------*
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								~~~~~
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+ `Call`
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    The call port is activated before initial invocation of
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								procedure. Afterwards, execution will try to match the goal with the
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								head of existing clauses for the procedure.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+ `Exit`
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    This port is activated if the procedure succeeds.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								Control will  now leave the procedure and return to its ancestor.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+ `Redo`
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    If the goal, or goals, activated after the call port
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								fail  then backtracking will eventually return control to this procedure
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								through  the redo port.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+ `Fail`
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    If all clauses for this predicate fail, then the
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								invocation fails,  and control will try to redo the ancestor of this
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								invocation.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								To start debugging, the user will either call `trace` or spy the
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								relevant procedures, entering debug mode, and start execution of the
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								program. When finding the first spy-point, YAP's debugger will take
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								control and show a message of the form:
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								~~~~~
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								* (1)  call:  quicksort([1,2,3],_38) ?
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								~~~~~
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								The debugger message will be shown while creeping, or at spy-points,
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								and it includes four or five fields:
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-11-25 12:03:48 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+
							 
						 
					
						
							
								
									
										
										
										
											2014-09-11 14:06:57 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								The first three characters are used to point out special states of the
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								debugger. If the port is exit and the first character is '?', the
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								current call is non-deterministic, that is, it still has alternatives to
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								be tried. If the second character is a `\*`, execution is at a
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								spy-point. If the third character is a `>`, execution has returned
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								either from a skip, a fail or a redo command.
							 
						 
					
						
							
								
									
										
										
										
											2014-11-25 12:03:48 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+
							 
						 
					
						
							
								
									
										
										
										
											2014-09-11 14:06:57 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								The second field is the activation number, and uniquely identifies the
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								activation. The number will start from 1 and will be incremented for
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								each activation found by the debugger.
							 
						 
					
						
							
								
									
										
										
										
											2014-11-25 12:03:48 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+
							 
						 
					
						
							
								
									
										
										
										
											2014-09-11 14:06:57 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								In the third field, the debugger shows the active port.
							 
						 
					
						
							
								
									
										
										
										
											2014-11-25 12:03:48 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+
							 
						 
					
						
							
								
									
										
										
										
											2014-09-11 14:06:57 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								The fourth field is the goal. The goal is written by
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								`write_term/3` on the standard error stream, using the options
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								given by debugger_print_options.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								If the active port is leashed, the debugger will prompt the user with a
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								`?`, and wait for a command. A debugger command is just a
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								character, followed by a return. By default, only the call and redo
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								entries are leashed, but the leash/1 predicate can be used in
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								order to make the debugger stop where needed.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-11-25 12:03:48 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								There are several commands available, but the user only needs to
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								remember the help command, which is `h`. This command shows all the
							 
						 
					
						
							
								
									
										
										
										
											2014-09-11 14:06:57 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								available options, which are:
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+ `c` - creep
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    this command makes YAP continue execution and stop at the next
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								leashed port.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+ `return` - creep
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    the same as c
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+ `l` - leap
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    YAP will execute until it meets a port for a spied predicate; this mode
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								keeps all computation history for debugging purposes, so it is more
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								expensive than standard execution. Use <tt>k</tt> or <tt>z</tt> for fast execution.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+ `k` - quasi-leap
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    similar to leap but faster since the computation history is
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								not kept; useful when leap becomes too slow.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+ `z` - zip
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    same as <tt>k</tt>
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+ `s` - skip
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    YAP will continue execution without showing any messages until
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								returning to the current activation. Spy-points will be  ignored in this
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								mode. Note that this command keeps all debugging history, use <tt>t</tt> for fast execution. This command is meaningless, and therefore illegal, in the fail
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								and exit ports.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+ `t` - fast-skip
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    similar to skip but faster since computation history is not
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								kept; useful if skip becomes slow.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+ `f [ _GoalId_]` - fail
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    If given no argument, forces YAP to fail the goal, skipping the fail
							 
						 
					
						
							
								
									
										
										
										
											2014-11-25 12:03:48 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								port and backtracking to the parent.
							 
						 
					
						
							
								
									
										
										
										
											2014-09-11 14:06:57 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								If <tt>f</tt> receives a goal number as
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								the argument, the command fails all the way to the goal. If goal  _GoalId_ has completed execution, YAP fails until meeting the first active ancestor.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+ `r` [ _GoalId_] - retry
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    This command forces YAP to jump back call to the port. Note that any
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								side effects of the goal cannot be undone. This command is not available
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								at the call port.  If <tt>f</tt> receives a goal number as the argument, the
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								command retries goal  _GoalId_ instead. If goal  _GoalId_ has
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								completed execution, YAP fails until meeting the first active ancestor.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+ `a` - abort
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    execution will be aborted, and the interpreter will return to the
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								top-level. YAP disactivates debug mode, but spypoints are not removed.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+ `n` - nodebug
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    stop debugging and continue execution. The command will not clear active
							 
						 
					
						
							
								
									
										
										
										
											2015-06-19 01:11:30 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								§spy-points.
							 
						 
					
						
							
								
									
										
										
										
											2014-09-11 14:06:57 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+ `e` - exit
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    leave YAP.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+ `h` - help
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    show the debugger commands.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+ `!` Query
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    execute a query. YAP will not show the result of the query.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+ `b` - break
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    break active execution and launch a break level. This is  the same as `!break`.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+ `+` - spy this goal
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    start spying the active goal. The same as `! spy  G` where  _G_
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								is the active goal.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+ `-` - nospy this goal
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    stop spying the active goal. The same as `! nospy G` where  _G_ is
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								the active goal.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+ `p` - print
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    shows the active goal using print/1
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+ `d` - display
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    shows the active goal using display/1
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+ `<Depth` - debugger write depth
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    sets the maximum write depth, both for composite terms and lists, that
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								will be used by the debugger. For more
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								information about `write_depth/2` ( (see Input/Output Control)).
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+ `<` - full term
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    resets to the default of ten the debugger's maximum write depth. For
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								more information about `write_depth/2` ( (see Input/Output Control)).
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+ `A` - alternatives
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-11-25 12:03:48 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    show the list of backtrack points in the current execution.
							 
						 
					
						
							
								
									
										
										
										
											2014-09-11 14:06:57 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+ `g [ _N_]`
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    show the list of ancestors in the current debugging environment. If it
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								receives  _N_, show the first  _N_ ancestors.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								The debugging information, when fast-skip `quasi-leap` is used, will
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								be lost.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								*/
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2001-04-09 19:54:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								/*-----------------------------------------------------------------------------
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
												spy
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								-----------------------------------------------------------------------------*/
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2003-08-27 13:37:10 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								% ok, I may have a spy point for this goal, or not.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								%  if I do, I should check what mode I am in.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								% Goal/Mode          Have Spy     Not Spied
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								% Creep                 Stop        Stop
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								% Leap                  Stop        Create CP
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								% Skip               Create CP     Create CP
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								% FastLeap              Stop        Ignore
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								% FastIgnore           Ignore       Ignore
							 
						 
					
						
							
								
									
										
										
										
											2014-11-25 12:03:48 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2001-04-09 19:54:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2003-08-27 13:37:10 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								%	flag		description		initial possible values
							 
						 
					
						
							
								
									
										
										
										
											2001-04-09 19:54:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2003-08-27 13:37:10 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								%	spy_gn		goal number		1	1...
							 
						 
					
						
							
								
									
										
										
										
											2001-08-08 21:17:27 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								%	spy_trace	trace		0	0, 1
							 
						 
					
						
							
								
									
										
										
										
											2003-08-27 13:37:10 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								%	spy_skip	leap			off	Num (stop level)
							 
						 
					
						
							
								
									
										
										
										
											2006-12-13 16:10:26 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								%	debug_prompt	stop at spy points	on	on,off
							 
						 
					
						
							
								
									
										
										
										
											2001-04-09 19:54:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								% a flip-flop is also used
							 
						 
					
						
							
								
									
										
										
										
											2003-08-27 13:37:10 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								%	when 1 spying is enabled *(the same as spy stop).
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2001-04-09 19:54:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								%'$spy'(G) :- write(user_error,'$spy'(G)), nl, fail.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								%
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								% handle suspended goals
							 
						 
					
						
							
								
									
										
										
										
											2001-09-12 15:52:28 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								% take care with hidden goals.
							 
						 
					
						
							
								
									
										
										
										
											2001-04-09 19:54:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								%
							 
						 
					
						
							
								
									
										
										
										
											2001-09-12 15:52:28 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								% $spy may be called from user code, so be careful.
							 
						 
					
						
							
								
									
										
										
										
											2006-12-13 16:10:26 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$spy'([Mod|G]) :-
							 
						 
					
						
							
								
									
										
										
										
											2015-06-19 01:11:30 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									current_prolog_flag(debug, false), !,
							 
						 
					
						
							
								
									
										
										
										
											2008-10-24 14:26:44 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									'$execute_nonstop'(G,Mod).
							 
						 
					
						
							
								
									
										
										
										
											2001-11-15 00:01:43 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$spy'([Mod|G]) :-
							 
						 
					
						
							
								
									
										
										
										
											2017-03-23 12:28:46 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									'$stop_creeping'(_),
							 
						 
					
						
							
								
									
										
										
										
											2014-11-25 12:03:48 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									CP is '$last_choice_pt',
							 
						 
					
						
							
								
									
										
										
										
											2015-03-17 23:09:33 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									'$debugger_input',
							 
						 
					
						
							
								
									
										
										
										
											2013-02-08 10:36:45 -06:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									'$do_spy'(G, Mod, CP, spy).
							 
						 
					
						
							
								
									
										
										
										
											2003-11-27 21:47:44 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-04-08 11:29:29 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$spy'([Mod|G], A1) :-
							 
						 
					
						
							
								
									
										
										
										
											2016-08-16 09:47:10 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									G =.. L,
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									lists:append( L, [A1], NL),
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									NG =.. NL,
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									'$spy'([Mod|NG]).
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-04-08 11:29:29 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$spy'([Mod|G], A1, A2) :-
							 
						 
					
						
							
								
									
										
										
										
											2016-08-16 09:47:10 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									G =.. L,
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									lists:append( L, [A1, A2], NL),
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									NG =.. NL,
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									'$spy'([Mod|NG]).
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-04-08 11:29:29 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$spy'([Mod|G], A1, A2, A3) :-
							 
						 
					
						
							
								
									
										
										
										
											2016-08-16 09:47:10 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									G =.. L,
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									lists:append( L, [A1, A2, A3], NL),
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									NG =.. NL,
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									'$spy'([Mod|NG]).
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-04-08 11:29:29 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$spy'([Mod|G], A1, A2, A3, A4) :-
							 
						 
					
						
							
								
									
										
										
										
											2016-08-16 09:47:10 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									G =.. L,
							 
						 
					
						
							
								
									
										
										
										
											2017-04-08 11:29:29 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									lists:append( L, [A1,A2,A3,A4], NL),
							 
						 
					
						
							
								
									
										
										
										
											2016-08-16 09:47:10 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									NG =.. NL,
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									'$spy'([Mod|NG]).
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-04-08 11:29:29 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$spy'([Mod|G], A1, A2, A3, A4, A5) :-
							 
						 
					
						
							
								
									
										
										
										
											2016-08-16 09:47:10 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									G =.. L,
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									lists:append( L, [A1, A2, A3, A4, A5], NL),
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									NG =.. NL,
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									'$spy'([Mod|NG]).
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-04-08 11:29:29 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$spy'([Mod|G], A1, A2, A3, A4, A5, A6) :-
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									G =.. L,
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									lists:append( L, [A1, A2, A3, A4, A5, A6], NL),
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									NG =.. NL,
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									'$spy'([Mod|NG]).
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								'$spy'([Mod|G], A1, A2, A3, A4, A5, A6, A7) :-
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									G =.. L,
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									lists:append( L, [A1, A2, A3, A4, A5, A6, A7 ], NL),
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									NG =.. NL,
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									'$spy'([Mod|NG]).
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-07-22 19:31:03 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								/**
							 
						 
					
						
							
								
									
										
										
										
											2015-03-23 16:16:48 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  * @pred debugger_input.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  * name of stream used for debugging,
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  * must be always connected to a tty.
							 
						 
					
						
							
								
									
										
										
										
											2015-07-22 19:31:03 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  *
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  * '$debugger_input': try to connect the debugger to an open terminal.
							 
						 
					
						
							
								
									
										
										
										
											2015-03-17 23:09:33 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								*/
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								'$debugger_input' :-
							 
						 
					
						
							
								
									
										
										
										
											2015-03-23 16:16:48 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									stream_property(_,alias(debugger_input)),
							 
						 
					
						
							
								
									
										
										
										
											2015-03-17 23:09:33 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									!.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								'$debugger_input' :-
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        stream_property(S,tty(true)),
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        stream_property(S,input),
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									!,
							 
						 
					
						
							
								
									
										
										
										
											2015-03-23 16:16:48 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									set_stream(S,alias(debugger_input)).
							 
						 
					
						
							
								
									
										
										
										
											2015-03-17 23:09:33 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$debugger_input' :-
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									current_prolog_flag(unix, true ), !,
							 
						 
					
						
							
								
									
										
										
										
											2015-03-24 09:38:52 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        open('/dev/tty', read, _S, [alias(debugger_input),bom(false)]).
							 
						 
					
						
							
								
									
										
										
										
											2015-03-17 23:09:33 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$debugger_input' :-
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        current_prolog_flag(windows, true ), !,
							 
						 
					
						
							
								
									
										
										
										
											2015-03-24 09:38:52 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        open('CONIN$', read, _S, [alias(debugger_input),bom(false)]).
							 
						 
					
						
							
								
									
										
										
										
											2015-03-17 23:09:33 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-07-22 19:31:03 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								'$trace_meta_call'( G, M, CP ) :-
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									'$do_spy'(G, M, CP, spy ).
							 
						 
					
						
							
								
									
										
										
										
											2016-01-03 02:06:09 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-07-22 19:31:03 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								% last argument to do_spy says that we are at the end of a context. It
							 
						 
					
						
							
								
									
										
										
										
											2003-11-27 21:47:44 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								% is required to know whether we are controlled by the debugger.
							 
						 
					
						
							
								
									
										
										
										
											2013-02-13 09:06:06 -06:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								%'$do_spy'(V, M, CP, Flag) :-
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								%	writeln('$do_spy'(V, M, CP, Flag)), fail.
							 
						 
					
						
							
								
									
										
										
										
											2013-02-08 10:36:45 -06:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$do_spy'(V, M, CP, Flag) :-
							 
						 
					
						
							
								
									
										
										
										
											2016-01-03 02:06:09 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        '$stop_creeping'(_),
							 
						 
					
						
							
								
									
										
										
										
											2013-02-08 10:36:45 -06:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									var(V), !,
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									'$do_spy'(call(V), M, CP, Flag).
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								'$do_spy'(!, _, CP, _) :-
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									!, '$$cut_by'(CP).
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								'$do_spy'('$cut_by'(M), _, _, _) :-
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									!, '$$cut_by'(M).
							 
						 
					
						
							
								
									
										
										
										
											2016-04-14 18:06:52 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$do_spy'('$$cut_by'(M), _, _, _) :-
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									!, '$$cut_by'(M).
							 
						 
					
						
							
								
									
										
										
										
											2003-11-27 21:47:44 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$do_spy'(true, _, _, _) :- !.
							 
						 
					
						
							
								
									
										
										
										
											2005-02-08 04:05:39 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								%'$do_spy'(fail, _, _, _) :- !, fail.
							 
						 
					
						
							
								
									
										
										
										
											2008-08-30 02:39:36 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$do_spy'(M:G, _, CP, CalledFromDebugger) :- !,
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									'$do_spy'(G, M, CP, CalledFromDebugger).
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								'$do_spy'((A,B), M, CP, CalledFromDebugger) :- !,
							 
						 
					
						
							
								
									
										
										
										
											2013-02-13 09:06:06 -06:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									'$do_spy'(A, M, CP, debugger),
							 
						 
					
						
							
								
									
										
										
										
											2008-08-30 02:39:36 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									'$do_spy'(B, M, CP, CalledFromDebugger).
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								'$do_spy'((T->A;B), M, CP, CalledFromDebugger) :- !,
							 
						 
					
						
							
								
									
										
										
										
											2013-02-13 09:06:06 -06:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									( '$do_spy'(T, M, CP, debugger) -> '$do_spy'(A, M, CP, CalledFromDebugger)
							 
						 
					
						
							
								
									
										
										
										
											2003-01-29 14:47:17 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									;
							 
						 
					
						
							
								
									
										
										
										
											2016-01-03 02:06:09 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-08-30 02:39:36 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									  '$do_spy'(B, M, CP, CalledFromDebugger)
							 
						 
					
						
							
								
									
										
										
										
											2003-01-29 14:47:17 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									).
							 
						 
					
						
							
								
									
										
										
										
											2008-08-30 02:39:36 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$do_spy'((T->A|B), M, CP, CalledFromDebugger) :- !,
							 
						 
					
						
							
								
									
										
										
										
											2015-09-21 17:05:36 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									(
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									 '$do_spy'(T, M, CP, debugger)
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									->
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									  '$do_spy'(A, M, CP, CalledFromDebugger)
							 
						 
					
						
							
								
									
										
										
										
											2003-01-29 14:47:17 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									;
							 
						 
					
						
							
								
									
										
										
										
											2016-01-03 02:06:09 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        'stop_creeping'(_),
							 
						 
					
						
							
								
									
										
										
										
											2008-08-30 02:39:36 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									  '$do_spy'(B, M, CP, CalledFromDebugger)
							 
						 
					
						
							
								
									
										
										
										
											2003-01-29 14:47:17 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									).
							 
						 
					
						
							
								
									
										
										
										
											2013-02-13 09:06:06 -06:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$do_spy'((T->A), M, CP, CalledFromDebugger) :- !,
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									( '$do_spy'(T, M, CP, debugger) -> '$do_spy'(A, M, CP,  CalledFromDebugger) ).
							 
						 
					
						
							
								
									
										
										
										
											2008-08-30 02:39:36 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$do_spy'((A;B), M, CP, CalledFromDebugger) :- !,
							 
						 
					
						
							
								
									
										
										
										
											2005-02-08 04:05:39 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									(
							 
						 
					
						
							
								
									
										
										
										
											2013-02-08 10:36:45 -06:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									  '$do_spy'(A, M, CP, CalledFromDebugger)
							 
						 
					
						
							
								
									
										
										
										
											2003-01-29 14:47:17 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									;
							 
						 
					
						
							
								
									
										
										
										
											2016-01-03 02:06:09 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								     '$stop_creeping'(_),
							 
						 
					
						
							
								
									
										
										
										
											2015-11-12 14:56:31 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								     '$do_spy'(B, M, CP, CalledFromDebugger)
							 
						 
					
						
							
								
									
										
										
										
											2003-01-29 14:47:17 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									).
							 
						 
					
						
							
								
									
										
										
										
											2008-08-30 02:39:36 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$do_spy'((A|B), M, CP, CalledFromDebugger) :- !,
							 
						 
					
						
							
								
									
										
										
										
											2003-08-27 13:37:10 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									(
							 
						 
					
						
							
								
									
										
										
										
											2015-07-22 19:31:03 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									  '$do_spy'(A, M, CP, CalledFromDebugger )
							 
						 
					
						
							
								
									
										
										
										
											2003-01-29 14:47:17 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									;
							 
						 
					
						
							
								
									
										
										
										
											2016-01-03 02:06:09 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								     '$stop_creeping'(_) ,
							 
						 
					
						
							
								
									
										
										
										
											2015-11-12 14:56:31 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								     '$do_spy'(B, M, CP, CalledFromDebugger )
							 
						 
					
						
							
								
									
										
										
										
											2003-01-29 14:47:17 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									).
							 
						 
					
						
							
								
									
										
										
										
											2008-08-30 02:39:36 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$do_spy'((\+G), M, CP, CalledFromDebugger) :- !,
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									\+ '$do_spy'(G, M, CP, CalledFromDebugger).
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								'$do_spy'((not(G)), M, CP, CalledFromDebugger) :- !,
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									\+ '$do_spy'(G, M, CP, CalledFromDebugger).
							 
						 
					
						
							
								
									
										
										
										
											2017-04-08 11:29:29 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$do_spy'(once(G), M, CP, CalledFromDebugger) :- !,
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									once( '$do_spy'(G, M, CP, CalledFromDebugger) ).
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								'$do_spy'(ignore(G), M, CP, CalledFromDebugger) :- !,
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									ignore( '$do_spy'(G, M, CP, CalledFromDebugger) ).
							 
						 
					
						
							
								
									
										
										
										
											2008-08-30 02:39:36 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$do_spy'(G, Module, _, CalledFromDebugger) :-
							 
						 
					
						
							
								
									
										
										
										
											2015-09-21 17:05:36 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        '__NB_getval__'('$spy_gn',L,fail),		/* get goal no.			*/
							 
						 
					
						
							
								
									
										
										
										
											2006-12-13 16:10:26 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									L1 is L+1,			/* bump it			*/
							 
						 
					
						
							
								
									
										
										
										
											2015-09-21 17:05:36 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									'__NB_setval__'('$spy_gn',L1),	/* and save it globaly		*/
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        '__NB_getval__'('$spy_glist',History,true),	/* get goal list		*/
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									'__B_setval__'('$spy_glist',[info(L,Module,G,_Retry,_Det,_HasFoundAnswers)|History]),
							 
						 
					
						
							
								
									
										
										
										
											2015-07-22 19:31:03 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									/* and update it		*/
							 
						 
					
						
							
								
									
										
										
										
											2014-11-25 12:03:48 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									'$loop_spy'(L, G, Module, CalledFromDebugger).
							 
						 
					
						
							
								
									
										
										
										
											2003-08-27 13:37:10 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								% we are skipping, so we can just call the goal,
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								% while leaving the minimal structure in place.
							 
						 
					
						
							
								
									
										
										
										
											2008-08-30 02:39:36 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$loop_spy'(GoalNumber, G, Module, CalledFromDebugger) :-
							 
						 
					
						
							
								
									
										
										
										
											2013-02-13 09:06:06 -06:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									'$current_choice_point'(CP),
							 
						 
					
						
							
								
									
										
										
										
											2008-08-30 02:39:36 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									'$system_catch'('$loop_spy2'(GoalNumber, G, Module, CalledFromDebugger, CP),
							 
						 
					
						
							
								
									
										
										
										
											2016-07-31 10:42:15 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										    Module, Error,
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										    '$TraceError'(Error, GoalNumber, G, Module, CalledFromDebugger)).
							 
						 
					
						
							
								
									
										
										
										
											2004-01-29 13:37:10 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-07-31 10:42:15 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								/**
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  * @pred '$TraceError'(+Exception, +CurrentGoalId, +CurrentGoal, +Module, +Status)
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  *
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  * forward exception until leaving the debugger or
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  * finding a matching frame:
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  *
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								*/
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								%%% - retry: forward throw while the call is newer than goal
							 
						 
					
						
							
								
									
										
										
										
											2017-04-08 11:29:29 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$TraceError'( abort, _, _, _, _) :-
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    '$stop_creeping'(_),
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    abort.
							 
						 
					
						
							
								
									
										
										
										
											2016-07-31 10:42:15 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$TraceError'('$forward'('$retry_spy'(G0)), GoalNumber, G, Module, CalledFromDebugger) :-
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									( G0 >= GoalNumber
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  ->
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									'$loop_spy'(GoalNumber, G, Module, CalledFromDebugger)
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									throw('$forward'('$retry_spy'(G0)))
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  ).
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								%%% - backtrack long distance
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								'$TraceError'('$forward'('$fail_spy'(G0)), GoalNumber, G, Module, CalledFromDebugger) :-
							 
						 
					
						
							
								
									
										
										
										
											2009-11-04 00:10:27 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									G0 >= GoalNumber, !,
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									'$loop_fail'(GoalNumber, G, Module, CalledFromDebugger).
							 
						 
					
						
							
								
									
										
										
										
											2016-07-31 10:42:15 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$TraceError'('$forward'('$fail_spy'(GoalNumber)), _, _, _, _) :- !,
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									throw(error('$fail_spy'(GoalNumber))).
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								%%%
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								%%% - forward through the debugger
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								'$TraceError'('$forward'('$wrapper'(Event)), _, _, _, _) :-
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									!,
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									throw(Event).
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								%%% - anything else, leave to the user and restore the catch
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								'$TraceError'(Event, GoalNumber, G, Module, CalledFromDebugger) :-
							 
						 
					
						
							
								
									
										
										
										
											2009-11-04 00:10:27 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									'$debug_error'(Event),
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									'$system_catch'(
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										     ('$trace'(exception(Event),G,Module,GoalNumber,_),fail),
							 
						 
					
						
							
								
									
										
										
										
											2009-04-22 16:13:08 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										     Module,
							 
						 
					
						
							
								
									
										
										
										
											2016-07-31 10:42:15 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										     Error,
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										     '$TraceError'(Error, GoalNumber, G, Module, CalledFromDebugger)
							 
						 
					
						
							
								
									
										
										
										
											2009-04-22 16:13:08 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										    ).
							 
						 
					
						
							
								
									
										
										
										
											2003-08-27 13:37:10 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2005-11-26 02:57:25 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$debug_error'(Event) :-
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									'$Error'(Event), fail.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								'$debug_error'(_).
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2007-01-24 14:20:04 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								% just fail here, don't really need to call debugger, the user knows what he
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								% wants to do
							 
						 
					
						
							
								
									
										
										
										
											2013-02-08 10:36:45 -06:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$loop_fail'(_GoalNumber, _G, _Module, CalledFromDebugger) :-
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									'$continue_debugging'(fail, CalledFromDebugger),
							 
						 
					
						
							
								
									
										
										
										
											2007-01-24 14:20:04 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									fail.
							 
						 
					
						
							
								
									
										
										
										
											2003-11-27 21:47:44 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-01-03 02:06:09 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								/**
							 
						 
					
						
							
								
									
										
										
										
											2015-11-13 13:20:29 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								 * core routine for the debugger
							 
						 
					
						
							
								
									
										
										
										
											2016-01-03 02:06:09 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								 *
							 
						 
					
						
							
								
									
										
										
										
											2015-11-13 13:20:29 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								 * @param _ GoalNumbera id
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 * @param _ S9c
							 
						 
					
						
							
								
									
										
										
										
											2016-01-03 02:06:09 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								 * @param _
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 * @param Retry
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 * @param Det
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 * @param false
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 *
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 * @return
							 
						 
					
						
							
								
									
										
										
										
											2015-11-13 13:20:29 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								*/
							 
						 
					
						
							
								
									
										
										
										
											2014-11-25 12:03:48 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$loop_spy2'(GoalNumber, G, Module, CalledFromDebugger, CP) :-
							 
						 
					
						
							
								
									
										
										
										
											2003-08-27 13:37:10 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								/* the following choice point is where the predicate is  called */
							 
						 
					
						
							
								
									
										
										
										
											2015-09-21 17:05:36 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									   '__NB_getval__'('$spy_glist',[Info|_],true),	/* get goal list		*/
							 
						 
					
						
							
								
									
										
										
										
											2010-01-25 10:21:21 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									   Info = info(_,_,_,Retry,Det,false),
							 
						 
					
						
							
								
									
										
										
										
											2009-11-17 00:09:23 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									   (
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									    /* call port */
							 
						 
					
						
							
								
									
										
										
										
											2003-08-27 13:37:10 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									    '$enter_goal'(GoalNumber, G, Module),
							 
						 
					
						
							
								
									
										
										
										
											2008-08-30 02:39:36 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									    '$spycall'(G, Module, CalledFromDebugger, Retry),
							 
						 
					
						
							
								
									
										
										
										
											2016-01-03 02:06:09 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									    '$stop_creeping'(_) ,
							 
						 
					
						
							
								
									
										
										
										
											2013-02-13 09:06:06 -06:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									    % make sure we are in system mode when running the debugger.
							 
						 
					
						
							
								
									
										
										
										
											2006-12-13 16:10:26 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									    (
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									      '$debugger_deterministic_goal'(G) ->
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									      Det=true
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									    ;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									      Det=false
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									    ),
							 
						 
					
						
							
								
									
										
										
										
											2013-02-08 10:36:45 -06:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									    /* go execute the continuation	*/
							 
						 
					
						
							
								
									
										
										
										
											2003-08-27 13:37:10 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									    (
							 
						 
					
						
							
								
									
										
										
										
											2013-02-08 10:36:45 -06:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									       /* exit port */
							 
						 
					
						
							
								
									
										
										
										
											2015-11-12 14:56:31 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								         Retry = false,
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								         /* found an answer, so it can redo */
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								         nb_setarg(6, Info, true),
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								         '$show_trace'(exit,G,Module,GoalNumber,Det),	/* output message at exit	*/
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        /* exit port */
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        /* get rid of deterministic computations */
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        (
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								         Det == true
							 
						 
					
						
							
								
									
										
										
										
											2006-12-13 16:10:26 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										->
							 
						 
					
						
							
								
									
										
										
										
											2015-11-12 14:56:31 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								         '$$cut_by'(CP)
							 
						 
					
						
							
								
									
										
										
										
											2006-12-13 16:10:26 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										;
							 
						 
					
						
							
								
									
										
										
										
											2015-11-12 14:56:31 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								         true
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        ),
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								         '$continue_debugging'(exit, CalledFromDebugger)
							 
						 
					
						
							
								
									
										
										
										
											2013-02-08 10:36:45 -06:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									     ;
							 
						 
					
						
							
								
									
										
										
										
											2015-11-12 14:56:31 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									     /* make sure we are in system mode when running the debugger. */
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								         /* backtracking from exit				*/
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								         /* we get here when we want to redo a goal		*/
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								         /* redo port */
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								         (
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								          arg(6, Info, true)
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								         ->
							 
						 
					
						
							
								
									
										
										
										
											2016-01-03 02:06:09 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								          '$stop_creeping'(_) ,
							 
						 
					
						
							
								
									
										
										
										
											2015-11-12 14:56:31 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								          '$show_trace'(redo,G,Module,GoalNumber,_), /* inform user_error		*/
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								         nb_setarg(6, Info, false)
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								         ;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								          true
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								         ),
							 
						 
					
						
							
								
									
										
										
										
											2013-02-08 10:36:45 -06:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									     '$continue_debugging'(fail, CalledFromDebugger),
							 
						 
					
						
							
								
									
										
										
										
											2015-11-12 14:56:31 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									     fail			/* to backtrack to spycall	*/
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        )
							 
						 
					
						
							
								
									
										
										
										
											2002-12-13 20:00:41 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									  ;
							 
						 
					
						
							
								
									
										
										
										
											2016-01-03 02:06:09 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        '$stop_creeping'(_) ,
							 
						 
					
						
							
								
									
										
										
										
											2006-12-13 16:10:26 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									    '$show_trace'(fail,G,Module,GoalNumber,_), /* inform at fail port		*/
							 
						 
					
						
							
								
									
										
										
										
											2015-11-12 14:56:31 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								       '$continue_debugging'(fail, CalledFromDebugger),
							 
						 
					
						
							
								
									
										
										
										
											2005-10-18 17:04:43 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									    /* fail port */
							 
						 
					
						
							
								
									
										
										
										
											2003-08-27 13:37:10 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									    fail
							 
						 
					
						
							
								
									
										
										
										
											2015-11-12 14:56:31 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								       ).
							 
						 
					
						
							
								
									
										
										
										
											2014-11-25 12:03:48 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2003-08-27 13:37:10 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$enter_goal'(GoalNumber, G, Module) :-
							 
						 
					
						
							
								
									
										
										
										
											2006-12-13 16:10:26 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    '$zip'(GoalNumber, G, Module), !.
							 
						 
					
						
							
								
									
										
										
										
											2003-08-27 13:37:10 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$enter_goal'(GoalNumber, G, Module) :-
							 
						 
					
						
							
								
									
										
										
										
											2006-12-13 16:10:26 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    '$trace'(call, G, Module, GoalNumber, _).
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								'$show_trace'(_, G, Module, GoalNumber,_) :-
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									'$zip'(GoalNumber, G, Module), !.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								'$show_trace'(P,G,Module,GoalNumber,Deterministic) :-
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									'$trace'(P,G,Module,GoalNumber,Deterministic).
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								%
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								% skip a goal or a port
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								%
							 
						 
					
						
							
								
									
										
										
										
											2015-11-05 17:26:04 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$zip'(_GoalNumber, _G, _Module) :-
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									current_prolog_flag(debug, false),
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									!.
							 
						 
					
						
							
								
									
										
										
										
											2006-12-13 16:10:26 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$zip'(GoalNumber, G, Module) :-
							 
						 
					
						
							
								
									
										
										
										
											2015-09-21 17:05:36 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    '__NB_getval__'('$debug_run',StopPoint,fail),
							 
						 
					
						
							
								
									
										
										
										
											2006-12-13 16:10:26 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    % zip mode off, we cannot zip
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    StopPoint \= off,
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    (
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      % skip spy points (eg, s).
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      StopPoint == spy
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ->
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      \+ '$pred_being_spied'(G, Module)
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      % skip goals (eg, l).
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      number(StopPoint)
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ->
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      StopPoint < GoalNumber
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ).
							 
						 
					
						
							
								
									
										
										
										
											2003-08-27 13:37:10 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-08-30 02:39:36 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-11-25 12:03:48 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								%
							 
						 
					
						
							
								
									
										
										
										
											2015-12-15 09:28:43 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$spycall'(G, M, _, _) :-
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    current_prolog_flag( debug, false),
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    !,
							 
						 
					
						
							
								
									
										
										
										
											2016-02-11 06:17:30 -08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    '$execute_nonstop'(G,M).
							 
						 
					
						
							
								
									
										
										
										
											2007-01-24 14:20:04 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$spycall'(G, M, _, _) :-
							 
						 
					
						
							
								
									
										
										
										
											2015-09-21 17:05:36 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									'__NB_getval__'('$debug_jump',true, fail),
							 
						 
					
						
							
								
									
										
										
										
											2006-12-14 09:15:18 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									!,
							 
						 
					
						
							
								
									
										
										
										
											2015-07-22 19:31:03 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									( '$is_metapredicate'(G, M)
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									->
							 
						 
					
						
							
								
									
										
										
										
											2016-02-11 06:17:30 -08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									    '$expand_meta_call'(M:G, [], G1)
							 
						 
					
						
							
								
									
										
										
										
											2015-07-22 19:31:03 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									;
							 
						 
					
						
							
								
									
										
										
										
											2016-02-11 06:17:30 -08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									G = G1
							 
						 
					
						
							
								
									
										
										
										
											2015-07-22 19:31:03 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									),
							 
						 
					
						
							
								
									
										
										
										
											2015-04-24 10:03:44 -06:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									'$execute_nonstop'(G1,M).
							 
						 
					
						
							
								
									
										
										
										
											2016-04-14 18:06:52 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$spycall'(G, M, CalledFromDebugger, InRedo) :-
							 
						 
					
						
							
								
									
										
										
										
											2016-01-03 02:06:09 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									 '$is_metapredicate'(G, M),
							 
						 
					
						
							
								
									
										
										
										
											2016-01-04 14:11:09 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									 '$debugger_expand_meta_call'(M:G, [], G10),
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									 G10 \== M:G,
							 
						 
					
						
							
								
									
										
										
										
											2016-04-14 18:06:52 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									 !,
							 
						 
					
						
							
								
									
										
										
										
											2016-01-04 14:11:09 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									 '$debugger_input',
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									 G10 = NM:NG,
							 
						 
					
						
							
								
									
										
										
										
											2016-04-14 18:06:52 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									 '$spycall_f'(NG, NM, CalledFromDebugger, InRedo).
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								'$spycall'(G, M, CalledFromDebugger, InRedo) :-
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									 '$spycall_f'(G, M, CalledFromDebugger, InRedo).
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								'$spycall_f'(G, M, _, _) :-
							 
						 
					
						
							
								
									
										
										
										
											2016-01-31 10:46:14 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									( '$is_system_predicate'(G,M) ; '$tabled_predicate'(G,M) ),
							 
						 
					
						
							
								
									
										
										
										
											2016-02-11 06:17:30 -08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									!,
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									'$continue_debugging_goal'(yes, '$execute_nonstop'(G,M)).
							 
						 
					
						
							
								
									
										
										
										
											2016-04-14 18:06:52 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$spycall_f'(G, M, CalledFromDebugger, InRedo) :-
							 
						 
					
						
							
								
									
										
										
										
											2014-02-19 00:04:26 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									'$spycall_expanded'(G, M, CalledFromDebugger, InRedo).
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								'$spycall_expanded'(G, M, CalledFromDebugger, InRedo) :-
							 
						 
					
						
							
								
									
										
										
										
											2005-10-21 16:09:03 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									'$undefined'(G, M), !,
							 
						 
					
						
							
								
									
										
										
										
											2016-07-31 10:42:15 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									'$get_undefined_pred'(G, M,  Goal, NM), NM \= M,
							 
						 
					
						
							
								
									
										
										
										
											2010-12-03 12:40:30 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									'$spycall'(Goal, NM, CalledFromDebugger, InRedo).
							 
						 
					
						
							
								
									
										
										
										
											2016-01-03 02:06:09 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$spycall_expanded'(G, M, _CalledFromDebugger, InRedo) :-
							 
						 
					
						
							
								
									
										
										
										
											2005-08-02 03:09:52 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									CP is '$last_choice_pt',
							 
						 
					
						
							
								
									
										
										
										
											2008-08-30 02:39:36 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									(
							 
						 
					
						
							
								
									
										
										
										
											2016-01-03 02:06:09 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								      '$is_source'( G, M )                        % use the interpreter
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ->
							 
						 
					
						
							
								
									
										
										
										
											2016-01-04 14:11:09 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									(
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									    '$clause'(G, M, Cl, _)
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										     *->
							 
						 
					
						
							
								
									
										
										
										
											2016-01-03 02:06:09 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    % I may backtrack to here from far away
							 
						 
					
						
							
								
									
										
										
										
											2016-01-04 14:11:09 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										     ( '$do_spy'(Cl, M, CP, debugger) ; InRedo = true )
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									)
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									 ;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									 (
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									     '$static_clause'(G,M,_,R)
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									*->
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									'$stop_creeping'(_),
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    (
							 
						 
					
						
							
								
									
										
										
										
											2016-05-10 15:22:25 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									'$creep'('$execute_clause'(G, M, R, CP), M)
							 
						 
					
						
							
								
									
										
										
										
											2016-01-04 14:11:09 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								     ;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								     InRedo = true
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    )
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									 )
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									 ;
							 
						 
					
						
							
								
									
										
										
										
											2016-02-11 06:17:30 -08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									( '$continue_debugging_goal'(yes, '$execute_nonstop'(G,M) ) ;  InRedo = true )
							 
						 
					
						
							
								
									
										
										
										
											2016-01-03 02:06:09 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    ).
							 
						 
					
						
							
								
									
										
										
										
											2016-01-04 14:11:09 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    % I may backtrack to here from far away
							 
						 
					
						
							
								
									
										
										
										
											2001-04-09 19:54:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-12-13 08:42:57 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								%
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								%
							 
						 
					
						
							
								
									
										
										
										
											2015-07-22 19:31:03 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$creep'('$execute_clause'(G,Mod,Ref,CP),_M) :-
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									(
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									 '$$save_by'(CP1),
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									 '$creep',
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									 '$execute_clause'(G,Mod,Ref,CP),
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									 '$$save_by'(CP2),
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									 (CP1 == CP2 -> ! ; ( true ; '$creep', fail ) ),
							 
						 
					
						
							
								
									
										
										
										
											2016-01-03 02:06:09 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									  '$stop_creeping'(_)
							 
						 
					
						
							
								
									
										
										
										
											2015-07-22 19:31:03 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									;
							 
						 
					
						
							
								
									
										
										
										
											2016-01-03 02:06:09 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								     '$stop_creeping'(_) ,
							 
						 
					
						
							
								
									
										
										
										
											2015-07-22 19:31:03 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									 fail
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									).
							 
						 
					
						
							
								
									
										
										
										
											2013-12-13 08:42:57 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$creep'(G,M) :-
							 
						 
					
						
							
								
									
										
										
										
											2013-02-08 10:36:45 -06:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									(
							 
						 
					
						
							
								
									
										
										
										
											2013-02-13 09:06:06 -06:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									 '$$save_by'(CP1),
							 
						 
					
						
							
								
									
										
										
										
											2013-12-13 08:42:57 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									 '$creep',
							 
						 
					
						
							
								
									
										
										
										
											2013-02-08 10:36:45 -06:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									 '$execute_nonstop'(G,M),
							 
						 
					
						
							
								
									
										
										
										
											2013-02-13 09:06:06 -06:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									 '$$save_by'(CP2),
							 
						 
					
						
							
								
									
										
										
										
											2013-12-13 08:42:57 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									 (CP1 == CP2 -> ! ; ( true ; '$creep', fail ) ),
							 
						 
					
						
							
								
									
										
										
										
											2016-01-03 02:06:09 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									  '$stop_creeping'(_)
							 
						 
					
						
							
								
									
										
										
										
											2013-02-08 10:36:45 -06:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									  fail
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									).
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-11-13 13:20:29 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-01-03 02:06:09 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								/**
							 
						 
					
						
							
								
									
										
										
										
											2015-11-13 13:20:29 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								 * call predicate M:G within the ddebugger
							 
						 
					
						
							
								
									
										
										
										
											2016-01-03 02:06:09 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								 *
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 *
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 * @return
							 
						 
					
						
							
								
									
										
										
										
											2015-11-13 13:20:29 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								*/
							 
						 
					
						
							
								
									
										
										
										
											2015-07-22 19:31:03 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$trace'(G,M) :-
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									(
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									 '$$save_by'(CP1),
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									 '$creep',
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									 '$execute0'( G, M ),
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									 '$$save_by'(CP2),
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									 (CP1 == CP2 -> ! ; ( true ; '$creep', fail ) ),
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									  '$stop_creeping'
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									  fail
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									).
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2007-03-26 15:18:43 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$tabled_predicate'(G,M) :-
							 
						 
					
						
							
								
									
										
										
										
											2015-06-19 01:11:30 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									'$predicate_flags'(G,M,F,F),
							 
						 
					
						
							
								
									
										
										
										
											2007-03-26 15:18:43 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									F /\ 0x00000040 =\= 0.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-02-13 09:06:06 -06:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								%'$trace'(P,G,Module,L,Deterministic) :-
							 
						 
					
						
							
								
									
										
										
										
											2015-09-21 17:05:36 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								%	'__NB_getval__'('$system_mode',On,fail), writeln(On), fail.
							 
						 
					
						
							
								
									
										
										
										
											2006-12-13 16:10:26 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$trace'(P,G,Module,L,Deterministic) :-
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									% at this point we are done with leap or skip
							 
						 
					
						
							
								
									
										
										
										
											2015-09-21 17:05:36 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									'__NB_setval__'('$debug_run',off),
							 
						 
					
						
							
								
									
										
										
										
											2015-07-22 19:31:03 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									% but creep is default
							 
						 
					
						
							
								
									
										
										
										
											2015-09-21 17:05:36 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									'__NB_setval__'('$trace',on),
							 
						 
					
						
							
								
									
										
										
										
											2006-12-13 16:10:26 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									% make sure we run this code outside debugging mode.
							 
						 
					
						
							
								
									
										
										
										
											2016-01-04 14:11:09 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								%	set_prolog_flag(debug, false),
							 
						 
					
						
							
								
									
										
										
										
											2006-12-13 16:10:26 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									repeat,
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									'$trace_msg'(P,G,Module,L,Deterministic),
							 
						 
					
						
							
								
									
										
										
										
											2014-11-25 12:03:48 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									(
							 
						 
					
						
							
								
									
										
										
										
											2007-10-08 23:02:16 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									  '$unleashed'(P) ->
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									  '$action'(10,P,L,G,Module,Debug),
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									  put_code(user_error, 10)
							 
						 
					
						
							
								
									
										
										
										
											2006-12-13 16:10:26 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									  ;
							 
						 
					
						
							
								
									
										
										
										
											2015-03-23 16:16:48 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									 write(user_error,' ? '), get_code(debugger_input,C),
							 
						 
					
						
							
								
									
										
										
										
											2006-12-13 16:10:26 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									  '$action'(C,P,L,G,Module,Debug)
							 
						 
					
						
							
								
									
										
										
										
											2008-09-02 03:48:02 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									),
							 
						 
					
						
							
								
									
										
										
										
											2016-01-04 14:11:09 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								/*	(Debug = on
							 
						 
					
						
							
								
									
										
										
										
											2008-09-02 03:48:02 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									->
							 
						 
					
						
							
								
									
										
										
										
											2015-06-19 01:11:30 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									 set_prolog_flag(debug, true)
							 
						 
					
						
							
								
									
										
										
										
											2008-09-02 03:48:02 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									 Debug = zip
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									->
							 
						 
					
						
							
								
									
										
										
										
											2015-06-19 01:11:30 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									 set_prolog_flag(debug, true)
							 
						 
					
						
							
								
									
										
										
										
											2008-09-02 03:48:02 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									;
							 
						 
					
						
							
								
									
										
										
										
											2015-06-19 01:11:30 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									 set_prolog_flag(debug, false)
							 
						 
					
						
							
								
									
										
										
										
											2016-01-04 14:11:09 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									), */
							 
						 
					
						
							
								
									
										
										
										
											2006-12-13 16:10:26 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									!.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								'$trace_msg'(P,G,Module,L,Deterministic) :-
							 
						 
					
						
							
								
									
										
										
										
											2001-04-09 19:54:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
									flush_output(user_output),
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									flush_output(user_error),
							 
						 
					
						
							
								
									
										
										
										
											2009-11-04 00:10:27 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									functor(P,P0,_),
							 
						 
					
						
							
								
									
										
										
										
											2006-12-13 16:10:26 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									(P = exit, Deterministic \= true -> Det = '?' ; Det = ' '),
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									('$pred_being_spied'(G,Module) -> CSPY = '*' ; CSPY = ' '),
							 
						 
					
						
							
								
									
										
										
										
											2006-03-24 16:26:31 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								% vsc: fix this
							 
						 
					
						
							
								
									
										
										
										
											2006-12-13 16:10:26 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										%		( SL = L -> SLL = '>' ; SLL = ' '),
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									SLL = ' ',
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									( Module\=prolog,
							 
						 
					
						
							
								
									
										
										
										
											2009-11-17 00:13:54 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									  Module\=user
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									->
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									    GW = Module:G
							 
						 
					
						
							
								
									
										
										
										
											2006-12-13 16:10:26 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									;
							 
						 
					
						
							
								
									
										
										
										
											2014-11-25 12:03:48 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									    GW = G
							 
						 
					
						
							
								
									
										
										
										
											2006-12-13 16:10:26 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									),
							 
						 
					
						
							
								
									
										
										
										
											2009-11-17 00:23:22 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									format(user_error,'~a~a~a       (~d)    ~q:',[Det,CSPY,SLL,L,P0]),
							 
						 
					
						
							
								
									
										
										
										
											2009-11-17 00:13:54 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									'$debugger_write'(user_error,GW).
							 
						 
					
						
							
								
									
										
										
										
											2005-07-06 15:10:18 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-09-02 03:48:02 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$unleashed'(call) :- get_value('$leash',L), L /\ 2'1000 =:= 0. %'
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								'$unleashed'(exit) :- get_value('$leash',L), L /\ 2'0100 =:= 0. %'
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								'$unleashed'(redo) :- get_value('$leash',L), L /\ 2'0010 =:= 0. %'
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								'$unleashed'(fail) :- get_value('$leash',L), L /\ 2'0001 =:= 0. %'
							 
						 
					
						
							
								
									
										
										
										
											2002-01-10 18:01:14 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								% the same as fail.
							 
						 
					
						
							
								
									
										
										
										
											2009-11-04 00:10:27 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$unleashed'(exception(_)) :- get_value('$leash',L), L /\ 2'0001 =:= 0.  %'
							 
						 
					
						
							
								
									
										
										
										
											2001-04-09 19:54:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2002-01-10 18:01:14 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$debugger_write'(Stream, G) :-
							 
						 
					
						
							
								
									
										
										
										
											2015-08-07 16:57:53 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									current_prolog_flag( debugger_print_options, OUT ), !,
							 
						 
					
						
							
								
									
										
										
										
											2001-04-09 19:54:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
									write_term(Stream, G, OUT).
							 
						 
					
						
							
								
									
										
										
										
											2002-01-10 18:01:14 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$debugger_write'(Stream, G) :-
							 
						 
					
						
							
								
									
										
										
										
											2001-04-09 19:54:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
									writeq(Stream, G).
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-02-11 12:06:27 -06:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$action'(13,P,CallNumber,G,Module,Zip) :- !,	% newline 	creep
							 
						 
					
						
							
								
									
										
										
										
											2015-03-17 23:09:33 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									get_code( debugger_input,C),
							 
						 
					
						
							
								
									
										
										
										
											2010-02-11 12:06:27 -06:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									'$action'(C,P,CallNumber,G,Module,Zip).
							 
						 
					
						
							
								
									
										
										
										
											2009-11-04 12:29:09 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$action'(10,_,_,_,_,on) :- !,			% newline 	creep
							 
						 
					
						
							
								
									
										
										
										
											2015-09-21 17:05:36 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									'__NB_setval__'('$debug_jump',false).
							 
						 
					
						
							
								
									
										
										
										
											2008-09-02 03:48:02 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$action'(0'!,_,_,_,_,_) :- !,			% ! 'g		execute
							 
						 
					
						
							
								
									
										
										
										
											2015-03-23 16:16:48 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									read(debugger_input, G),
							 
						 
					
						
							
								
									
										
										
										
											2001-04-09 19:54:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
									% don't allow yourself to be caught by creep.
							 
						 
					
						
							
								
									
										
										
										
											2016-01-04 14:11:09 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								%	current_prolog_flag(debug, OldDeb),
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								%	 set_prolog_flag(debug, false),
							 
						 
					
						
							
								
									
										
										
										
											2001-04-09 19:54:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
									( '$execute'(G) -> true ; true),
							 
						 
					
						
							
								
									
										
										
										
											2015-07-22 19:31:03 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									% at this point we are done with leap or skip
							 
						 
					
						
							
								
									
										
										
										
											2015-09-21 17:05:36 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									'__NB_setval__'('$debug_run',off),
							 
						 
					
						
							
								
									
										
										
										
											2015-07-22 19:31:03 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									% but creep is default
							 
						 
					
						
							
								
									
										
										
										
											2015-09-21 17:05:36 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									'__NB_setval__'('$trace',on),
							 
						 
					
						
							
								
									
										
										
										
											2016-01-04 14:11:09 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								%	set_prolog_flag(debug, OldDeb),
							 
						 
					
						
							
								
									
										
										
										
											2008-09-02 03:48:02 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								%	'$skipeol'(0'!),                        % '
							 
						 
					
						
							
								
									
										
										
										
											2003-08-27 13:37:10 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									fail.
							 
						 
					
						
							
								
									
										
										
										
											2016-01-03 02:06:09 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    '$action'(0'<,_,_,_,_,_) :- !,			% <'Depth
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    	'$new_deb_depth',
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    	'$skipeol'(0'<),
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    	fail.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        '$action'(0'C,_,_,_,_,_) :-
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        yap_flag(system_options, Opts),
							 
						 
					
						
							
								
									
										
										
										
											2016-01-04 14:11:09 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    lists:memberchk( call_tracer, Opts),
							 
						 
					
						
							
								
									
										
										
										
											2016-01-03 02:06:09 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            !,			% <'Depth
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        	'$skipeol'(0'C),
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        	'__NB_setval__'('$debug_jump',false).
							 
						 
					
						
							
								
									
										
										
										
											2008-09-02 03:48:02 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$action'(0'^,_,_,G,_,_) :- !,			% '
							 
						 
					
						
							
								
									
										
										
										
											2003-08-27 13:37:10 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									'$print_deb_sterm'(G),
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									'$skipeol'(0'^),
							 
						 
					
						
							
								
									
										
										
										
											2001-04-09 19:54:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
									fail.
							 
						 
					
						
							
								
									
										
										
										
											2008-09-02 03:48:02 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$action'(0'a,_,_,_,_,off) :- !,		% 'a		abort
							 
						 
					
						
							
								
									
										
										
										
											2006-03-06 14:04:57 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									'$skipeol'(0'a),
							 
						 
					
						
							
								
									
										
										
										
											2017-04-08 11:29:29 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    '$stop_creeping'(_),
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    nodebug,
							 
						 
					
						
							
								
									
										
										
										
											2003-08-27 13:37:10 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									abort.
							 
						 
					
						
							
								
									
										
										
										
											2008-09-02 03:48:02 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$action'(0'b,_,_,_,_,_) :- !,			% 'b		break
							 
						 
					
						
							
								
									
										
										
										
											2003-08-27 13:37:10 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									'$skipeol'(0'b),
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									break,
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									fail.
							 
						 
					
						
							
								
									
										
										
										
											2008-09-02 03:48:02 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$action'(0'A,_,_,_,_,_) :- !,			% 'b		break
							 
						 
					
						
							
								
									
										
										
										
											2006-03-06 14:04:57 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									'$skipeol'(0'A),
							 
						 
					
						
							
								
									
										
										
										
											2016-07-31 10:42:15 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									'$stack_dump',
							 
						 
					
						
							
								
									
										
										
										
											2006-03-06 14:04:57 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									fail.
							 
						 
					
						
							
								
									
										
										
										
											2008-09-02 03:48:02 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$action'(0'c,_,_,_,_,on) :- !,			% 'c		creep
							 
						 
					
						
							
								
									
										
										
										
											2008-10-10 00:39:24 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									'$skipeol'(0'c),
							 
						 
					
						
							
								
									
										
										
										
											2015-09-21 17:05:36 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									'__NB_setval__'('$debug_jump',false).
							 
						 
					
						
							
								
									
										
										
										
											2008-09-02 03:48:02 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$action'(0'e,_,_,_,_,_) :- !,			% 'e		exit
							 
						 
					
						
							
								
									
										
										
										
											2003-08-27 13:37:10 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									'$skipeol'(0'e),
							 
						 
					
						
							
								
									
										
										
										
											2001-04-09 19:54:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
									halt.
							 
						 
					
						
							
								
									
										
										
										
											2008-09-02 03:48:02 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$action'(0'f,_,CallId,_,_,_) :- !,		% 'f		fail
							 
						 
					
						
							
								
									
										
										
										
											2009-04-22 11:31:31 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									'$scan_number'(0'f, CallId, GoalId),    %'f
							 
						 
					
						
							
								
									
										
										
										
											2016-07-31 10:42:15 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									throw('$forward'('$fail_spy'(GoalId))).
							 
						 
					
						
							
								
									
										
										
										
											2008-09-02 03:48:02 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$action'(0'h,_,_,_,_,_) :- !,			% 'h		help
							 
						 
					
						
							
								
									
										
										
										
											2002-01-18 04:24:10 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									'$action_help',
							 
						 
					
						
							
								
									
										
										
										
											2003-08-27 13:37:10 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									'$skipeol'(104),
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									fail.
							 
						 
					
						
							
								
									
										
										
										
											2008-09-02 03:48:02 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$action'(0'?,_,_,_,_,_) :- !,			% '?		help
							 
						 
					
						
							
								
									
										
										
										
											2002-01-18 04:24:10 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									'$action_help',
							 
						 
					
						
							
								
									
										
										
										
											2003-08-27 13:37:10 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									'$skipeol'(104),
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									fail.
							 
						 
					
						
							
								
									
										
										
										
											2008-09-02 03:48:02 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$action'(0'p,_,_,G,Module,_) :- !,		% 'p		print
							 
						 
					
						
							
								
									
										
										
										
											2002-04-26 19:29:22 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									((Module = prolog ; Module = user) ->
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									    print(user_error,G), nl(user_error)
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									    print(user_error,Module:G), nl(user_error)
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									),
							 
						 
					
						
							
								
									
										
										
										
											2003-08-27 13:37:10 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									'$skipeol'(0'p),
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									fail.
							 
						 
					
						
							
								
									
										
										
										
											2008-09-02 03:48:02 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$action'(0'd,_,_,G,Module,_) :- !,		% 'd		display
							 
						 
					
						
							
								
									
										
										
										
											2002-04-26 19:29:22 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									((Module = prolog ; Module = user) ->
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									    display(user_error,G), nl(user_error)
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									    display(user_error,Module:G), nl(user_error)
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									),
							 
						 
					
						
							
								
									
										
										
										
											2003-08-27 13:37:10 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									'$skipeol'(0'd),
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									fail.
							 
						 
					
						
							
								
									
										
										
										
											2008-09-02 03:48:02 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$action'(0'l,_,_,_,_,on) :- !,			% 'l		leap
							 
						 
					
						
							
								
									
										
										
										
											2003-08-27 13:37:10 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									'$skipeol'(0'l),
							 
						 
					
						
							
								
									
										
										
										
											2015-09-21 17:05:36 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									'__NB_setval__'('$debug_run',spy),
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									'__NB_setval__'('$debug_jump',false).
							 
						 
					
						
							
								
									
										
										
										
											2008-09-02 03:48:02 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$action'(0'z,_,_,_,_,zip) :- !,		% 'z		zip, fast leap
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									'$skipeol'(0'z),			% 'z
							 
						 
					
						
							
								
									
										
										
										
											2015-09-21 17:05:36 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									'__NB_setval__'('$debug_run',spy),
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									'__NB_setval__'('$debug_jump',true).
							 
						 
					
						
							
								
									
										
										
										
											2006-12-13 16:10:26 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									% skip first call (for current goal),
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									% stop next time.
							 
						 
					
						
							
								
									
										
										
										
											2008-09-02 03:48:02 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$action'(0'k,_,_,_,_,zip) :- !,		% 'k		zip, fast leap
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									'$skipeol'(0'k),			% '
							 
						 
					
						
							
								
									
										
										
										
											2015-09-21 17:05:36 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									'__NB_setval__'('$debug_run',spy),
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									'__NB_setval__'('$debug_jump',true).
							 
						 
					
						
							
								
									
										
										
										
											2003-11-27 21:47:44 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									% skip first call (for current goal),
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									% stop next time.
							 
						 
					
						
							
								
									
										
										
										
											2008-09-02 03:48:02 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$action'(0'n,_,_,_,_,off) :- !,			% 'n		nodebug
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									'$skipeol'(0'n),				% '
							 
						 
					
						
							
								
									
										
										
										
											2006-12-13 16:10:26 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									% tell debugger never to stop.
							 
						 
					
						
							
								
									
										
										
										
											2016-02-11 06:17:30 -08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									'__NB_setval__'('$debug_run', -1),
							 
						 
					
						
							
								
									
										
										
										
											2015-09-21 17:05:36 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									'__NB_setval__'('$debug_jump',true),
							 
						 
					
						
							
								
									
										
										
										
											2006-12-13 16:10:26 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									nodebug.
							 
						 
					
						
							
								
									
										
										
										
											2016-07-31 10:42:15 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$action'(0'r,_,CallId,_,_,_) :- !,		        % 'r		retry
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    '$scan_number'(0'r,CallId,ScanNumber),		% '
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
												%	set_prolog_flag(debug, true),
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    throw('$forward'('$retry_spy'(ScanNumber))).
							 
						 
					
						
							
								
									
										
										
										
											2008-09-02 03:48:02 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$action'(0'r,_,CallId,_,_,_) :- !,		        % 'r		retry
							 
						 
					
						
							
								
									
										
										
										
											2015-11-13 13:20:29 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    '$scan_number'(0'r,CallId,ScanNumber),		% '
							 
						 
					
						
							
								
									
										
										
										
											2016-01-04 14:11:09 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								%	set_prolog_flag(debug, true),
							 
						 
					
						
							
								
									
										
										
										
											2016-07-31 10:42:15 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									throw('$forward'('$wrapper'(ScanNumber))).
							 
						 
					
						
							
								
									
										
										
										
											2008-09-02 03:48:02 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$action'(0's,P,CallNumber,_,_,on) :- !,		% 's		skip
							 
						 
					
						
							
								
									
										
										
										
											2014-11-25 12:03:48 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									'$skipeol'(0's),				% '
							 
						 
					
						
							
								
									
										
										
										
											2015-11-13 13:20:29 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									(
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								     (P=call; P=redo) ->
							 
						 
					
						
							
								
									
										
										
										
											2015-09-21 17:05:36 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									  '__NB_setval__'('$debug_run',CallNumber),
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									  '__NB_setval__'('$debug_jump',false)
							 
						 
					
						
							
								
									
										
										
										
											2003-08-27 13:37:10 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									;
							 
						 
					
						
							
								
									
										
										
										
											2008-09-02 03:48:02 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									    '$ilgl'(0's)				% '
							 
						 
					
						
							
								
									
										
										
										
											2002-05-10 15:04:03 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									).
							 
						 
					
						
							
								
									
										
										
										
											2008-09-02 03:48:02 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$action'(0't,P,CallNumber,_,_,zip) :- !,		% 't		fast skip
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									'$skipeol'(0't),				% '
							 
						 
					
						
							
								
									
										
										
										
											2002-05-10 15:04:03 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									( (P=call; P=redo) ->
							 
						 
					
						
							
								
									
										
										
										
											2015-09-21 17:05:36 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									  '__NB_setval__'('$debug_run',CallNumber),
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									  '__NB_setval__'('$debug_jump',true)
							 
						 
					
						
							
								
									
										
										
										
											2006-12-13 16:10:26 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									;
							 
						 
					
						
							
								
									
										
										
										
											2008-09-02 03:48:02 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									    '$ilgl'(0't)				% '
							 
						 
					
						
							
								
									
										
										
										
											2002-05-10 15:04:03 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									).
							 
						 
					
						
							
								
									
										
										
										
											2008-09-02 03:48:02 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$action'(0'+,_,_,G,M,_) :- !,			% '+		spy this
							 
						 
					
						
							
								
									
										
										
										
											2002-04-26 19:29:22 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									functor(G,F,N), spy(M:(F/N)),
							 
						 
					
						
							
								
									
										
										
										
											2008-09-02 03:48:02 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									'$skipeol'(0'+),			% '
							 
						 
					
						
							
								
									
										
										
										
											2003-08-27 13:37:10 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									fail.
							 
						 
					
						
							
								
									
										
										
										
											2008-09-02 03:48:02 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$action'(0'-,_,_,G,M,_) :- !,			% '-		nospy this
							 
						 
					
						
							
								
									
										
										
										
											2002-04-26 19:29:22 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									functor(G,F,N), nospy(M:(F/N)),
							 
						 
					
						
							
								
									
										
										
										
											2008-09-02 03:48:02 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									'$skipeol'(0'-),			% '
							 
						 
					
						
							
								
									
										
										
										
											2003-08-27 13:37:10 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									fail.
							 
						 
					
						
							
								
									
										
										
										
											2008-09-02 03:48:02 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$action'(0'g,_,_,_,_,_) :- !,			% 'g		ancestors
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        '$scan_number'(0'g,-1,HowMany),         % '
							 
						 
					
						
							
								
									
										
										
										
											2006-12-13 16:10:26 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        '$show_ancestors'(HowMany),
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									fail.
							 
						 
					
						
							
								
									
										
										
										
											2016-07-31 10:42:15 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$action'(0'T,exception(G),_,_,_,_) :- !,	% 'T		throw
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									throw( '$forward'('$wrapper'(G))).
							 
						 
					
						
							
								
									
										
										
										
											2006-12-13 16:10:26 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$action'(C,_,_,_,_,_) :-
							 
						 
					
						
							
								
									
										
										
										
											2003-08-27 13:37:10 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									'$skipeol'(C),
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									'$ilgl'(C),
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									fail.
							 
						 
					
						
							
								
									
										
										
										
											2002-01-18 04:24:10 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-02-08 10:36:45 -06:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								% first argument is exit, zip or fail
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								% second is creep, meta_creep, spy, or debugger
							 
						 
					
						
							
								
									
										
										
										
											2013-02-13 09:06:06 -06:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								%'$continue_debugging'(Exit, Debugger) :-
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								%	writeln('$continue_debugging'(Exit, Debugger)), fail.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								% that's what follows
							 
						 
					
						
							
								
									
										
										
										
											2015-11-05 17:26:04 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$continue_debugging'(_, _) :-
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									false,
							 
						 
					
						
							
								
									
										
										
										
											2016-01-04 14:11:09 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								%	current_prolog_flag( debug, false ),
							 
						 
					
						
							
								
									
										
										
										
											2015-11-05 17:26:04 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									!.
							 
						 
					
						
							
								
									
										
										
										
											2013-02-13 09:06:06 -06:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$continue_debugging'(_, debugger) :- !.
							 
						 
					
						
							
								
									
										
										
										
											2008-08-30 02:39:36 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								% do not need to debug!
							 
						 
					
						
							
								
									
										
										
										
											2013-02-13 09:06:06 -06:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								% go back to original sequence.
							 
						 
					
						
							
								
									
										
										
										
											2013-12-13 08:42:57 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$continue_debugging'(zip, _) :- !.
							 
						 
					
						
							
								
									
										
										
										
											2013-02-13 09:06:06 -06:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$continue_debugging'(_, creep) :- !,
							 
						 
					
						
							
								
									
										
										
										
											2008-08-30 02:39:36 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									'$creep'.
							 
						 
					
						
							
								
									
										
										
										
											2016-05-16 09:22:29 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$continue_debugging'(_, spy) :-
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									b_getval('$debug_jump',false),
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									!,
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									'$creep'.
							 
						 
					
						
							
								
									
										
										
										
											2013-12-13 08:42:57 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$continue_debugging'(fail, _) :- !.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								'$continue_debugging'(_, _).
							 
						 
					
						
							
								
									
										
										
										
											2008-08-30 02:39:36 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2003-11-27 21:47:44 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								% if we are in the interpreter, don't need to care about forcing a trace, do we?
							 
						 
					
						
							
								
									
										
										
										
											2013-02-13 09:06:06 -06:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$continue_debugging_goal'(yes,G) :- !,
							 
						 
					
						
							
								
									
										
										
										
											2008-08-30 02:39:36 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									'$execute_dgoal'(G).
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								% do not need to debug!
							 
						 
					
						
							
								
									
										
										
										
											2013-02-13 09:06:06 -06:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$continue_debugging_goal'(_,G) :-
							 
						 
					
						
							
								
									
										
										
										
											2015-09-21 17:05:36 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									'__NB_getval__'('$debug_run',Zip, fail),
							 
						 
					
						
							
								
									
										
										
										
											2012-10-19 18:13:48 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        (Zip == nodebug ;  number(Zip) ; Zip == spy ), !,
							 
						 
					
						
							
								
									
										
										
										
											2008-08-30 02:39:36 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									'$execute_dgoal'(G).
							 
						 
					
						
							
								
									
										
										
										
											2013-02-13 09:06:06 -06:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$continue_debugging_goal'(_,G) :-
							 
						 
					
						
							
								
									
										
										
										
											2008-08-30 02:39:36 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									'$execute_creep_dgoal'(G).
							 
						 
					
						
							
								
									
										
										
										
											2014-11-25 12:03:48 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-08-30 02:39:36 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$execute_dgoal'('$execute_nonstop'(G,M)) :-
							 
						 
					
						
							
								
									
										
										
										
											2013-03-03 20:26:48 -06:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									 '$execute_nonstop'(G,M).
							 
						 
					
						
							
								
									
										
										
										
											2008-08-30 02:39:36 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$execute_dgoal'('$execute_clause'(G, M, R, CP)) :-
							 
						 
					
						
							
								
									
										
										
										
											2013-03-03 20:26:48 -06:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									 '$execute_clause'(G, M, R, CP).
							 
						 
					
						
							
								
									
										
										
										
											2008-08-30 02:39:36 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								'$execute_creep_dgoal'('$execute_nonstop'(G,M)) :-
							 
						 
					
						
							
								
									
										
										
										
											2013-02-08 10:36:45 -06:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									'$creep',
							 
						 
					
						
							
								
									
										
										
										
											2008-08-30 02:39:36 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									'$execute_nonstop'(G,M).
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								'$execute_creep_dgoal'('$execute_clause'(G, M, R, CP)) :-
							 
						 
					
						
							
								
									
										
										
										
											2013-02-08 10:36:45 -06:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									'$creep',
							 
						 
					
						
							
								
									
										
										
										
											2008-08-30 02:39:36 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									'$execute_clause'(G, M, R, CP).
							 
						 
					
						
							
								
									
										
										
										
											2006-12-13 16:10:26 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								'$show_ancestors'(HowMany) :-
							 
						 
					
						
							
								
									
										
										
										
											2015-11-05 17:26:04 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									'__NB_getval__'('$spy_glist',[_|History], fail),
							 
						 
					
						
							
								
									
										
										
										
											2006-12-13 16:10:26 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									(
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									  History == []
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									->
							 
						 
					
						
							
								
									
										
										
										
											2008-02-22 15:08:37 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									  print_message(help, ancestors([]))
							 
						 
					
						
							
								
									
										
										
										
											2006-12-13 16:10:26 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									  '$show_ancestors'(History,HowMany),
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									  nl(user_error)
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									).
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								'$show_ancestors'([],_).
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								'$show_ancestors'([_|_],0) :- !.
							 
						 
					
						
							
								
									
										
										
										
											2010-01-25 10:21:21 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$show_ancestors'([info(L,M,G,Retry,Det,_Exited)|History],HowMany) :-
							 
						 
					
						
							
								
									
										
										
										
											2006-12-13 16:10:26 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									'$show_ancestor'(L,M,G,Retry,Det,HowMany,HowMany1),
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									'$show_ancestors'(History,HowMany1).
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								% skip exit port, we're looking at true ancestors
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								'$show_ancestor'(_,_,_,_,Det,HowMany,HowMany) :-
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									nonvar(Det), !.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								% look at retry
							 
						 
					
						
							
								
									
										
										
										
											2007-01-24 14:20:04 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$show_ancestor'(GoalNumber, M, G, Retry, _, HowMany, HowMany1) :-
							 
						 
					
						
							
								
									
										
										
										
											2006-12-13 16:10:26 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									nonvar(Retry), !,
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									HowMany1 is HowMany-1,
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									'$trace_msg'(redo, G, M, GoalNumber, _), nl(user_error).
							 
						 
					
						
							
								
									
										
										
										
											2007-01-24 14:20:04 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$show_ancestor'(GoalNumber, M, G, _, _, HowMany, HowMany1) :-
							 
						 
					
						
							
								
									
										
										
										
											2006-12-13 16:10:26 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									HowMany1 is HowMany-1,
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									'$trace_msg'(call, G, M, GoalNumber, _), nl(user_error).
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2003-08-27 13:37:10 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2002-01-18 04:24:10 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$action_help' :-
							 
						 
					
						
							
								
									
										
										
										
											2006-12-13 16:10:26 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									format(user_error,'newline  creep       a       abort~n', []),
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									format(user_error,'c        creep       e       exit~n', []),
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									format(user_error,'f Goal   fail        h       help~n', []),
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									format(user_error,'l        leap        r Goal  retry~n', []),
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									format(user_error,'s        skip        t       fastskip~n', []),
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									format(user_error,'q        quasiskip   k       quasileap~n', []),
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									format(user_error,'b        break       n       no debug~n', []),
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									format(user_error,'p        print       d       display~n', []),
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									format(user_error,'<D       depth D     <       full term~n', []),
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									format(user_error,'+        spy this    -       nospy this~n', []),
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									format(user_error,'^        view subg   ^^      view using~n', []),
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									format(user_error,'A        choices     g [N]   ancestors~n', []),
							 
						 
					
						
							
								
									
										
										
										
											2016-07-31 10:42:15 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									format(user_error,'T        throw       ~n', []),
							 
						 
					
						
							
								
									
										
										
										
											2006-12-13 16:10:26 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									format(user_error,'! g execute goal~n', []).
							 
						 
					
						
							
								
									
										
										
										
											2014-11-25 12:03:48 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2003-08-27 13:37:10 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$ilgl'(C) :-
							 
						 
					
						
							
								
									
										
										
										
											2008-02-22 15:08:37 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									print_message(warning, trace_command(C)),
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									print_message(help, trace_help),
							 
						 
					
						
							
								
									
										
										
										
											2004-07-15 15:47:08 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									fail.
							 
						 
					
						
							
								
									
										
										
										
											2003-08-27 13:37:10 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								'$skipeol'(10) :- !.
							 
						 
					
						
							
								
									
										
										
										
											2015-03-17 23:09:33 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$skipeol'(_) :- get_code( debugger_input,C), '$skipeol'(C).
							 
						 
					
						
							
								
									
										
										
										
											2001-04-09 19:54:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2003-08-27 13:37:10 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$scan_number'(_, _, Nb) :-
							 
						 
					
						
							
								
									
										
										
										
											2015-03-17 23:09:33 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									get_code( debugger_input,C),
							 
						 
					
						
							
								
									
										
										
										
											2003-08-27 13:37:10 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									'$scan_number2'(C, Nb), !.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								'$scan_number'(_, CallId, CallId).
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								'$scan_number2'(10, _) :- !, fail.
							 
						 
					
						
							
								
									
										
										
										
											2008-09-02 03:48:02 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$scan_number2'(0' , Nb) :- !, % '
							 
						 
					
						
							
								
									
										
										
										
											2015-03-17 23:09:33 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									get_code( debugger_input,C),
							 
						 
					
						
							
								
									
										
										
										
											2003-08-27 13:37:10 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									'$scan_number2'(C , Nb).
							 
						 
					
						
							
								
									
										
										
										
											2008-09-02 03:48:02 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$scan_number2'(0'	, Nb) :- !, %'
							 
						 
					
						
							
								
									
										
										
										
											2015-03-17 23:09:33 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									get_code( debugger_input,C),
							 
						 
					
						
							
								
									
										
										
										
											2003-08-27 13:37:10 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									'$scan_number2'(C, Nb).
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								'$scan_number2'(C, Nb) :-
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									'$scan_number3'(C, 0, Nb).
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								'$scan_number3'(10,  Nb, Nb) :- !, Nb > 0.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								'$scan_number3'( C, Nb0, Nb) :-
							 
						 
					
						
							
								
									
										
										
										
											2006-12-13 16:10:26 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									C >= "0", C =< "9",
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									NbI is Nb0*10+(C-"0"),
							 
						 
					
						
							
								
									
										
										
										
											2015-03-17 23:09:33 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									get_code( debugger_input, NC),
							 
						 
					
						
							
								
									
										
										
										
											2003-08-27 13:37:10 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									'$scan_number3'( NC, NbI, Nb).
							 
						 
					
						
							
								
									
										
										
										
											2014-11-25 12:03:48 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2001-04-09 19:54:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								'$print_deb_sterm'(G) :-
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									'$get_sterm_list'(L), !,
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									'$deb_get_sterm_in_g'(L,G,A),
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									recorda('$debug_sub_skel',L,_),
							 
						 
					
						
							
								
									
										
										
										
											2006-12-13 16:10:26 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									format(user_error,'~n~w~n~n',[A]).
							 
						 
					
						
							
								
									
										
										
										
											2001-10-30 16:42:05 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$print_deb_sterm'(_) :- '$skipeol'(94).
							 
						 
					
						
							
								
									
										
										
										
											2001-04-09 19:54:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								'$get_sterm_list'(L) :-
							 
						 
					
						
							
								
									
										
										
										
											2015-03-17 23:09:33 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									get_code( debugger_input_input,C),
							 
						 
					
						
							
								
									
										
										
										
											2001-04-09 19:54:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
									'$deb_inc_in_sterm_oldie'(C,L0,CN),
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									'$get_sterm_list'(L0,CN,0,L).
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								'$deb_inc_in_sterm_oldie'(94,L0,CN) :- !,
							 
						 
					
						
							
								
									
										
										
										
											2015-03-23 16:16:48 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									get_code( debugger_input,CN),
							 
						 
					
						
							
								
									
										
										
										
											2003-08-27 13:37:10 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									( recorded('$debug_sub_skel',L0,_) -> true ;
							 
						 
					
						
							
								
									
										
										
										
											2001-04-09 19:54:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
									  CN = [] ).
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								'$deb_inc_in_sterm_oldie'(C,[],C).
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								'$get_sterm_list'(L0,C,N,L) :-
							 
						 
					
						
							
								
									
										
										
										
											2015-03-23 16:16:48 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									( C =:= "^", N =\= 0 -> get_code(debugger_input, CN),
							 
						 
					
						
							
								
									
										
										
										
											2001-04-09 19:54:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
												'$get_sterm_list'([N|L0],CN,0,L) ;
							 
						 
					
						
							
								
									
										
										
										
											2015-03-23 16:16:48 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									  C >= "0", C =< "9" -> NN is 10*N+C-"0", get_code(debugger_input, CN),
							 
						 
					
						
							
								
									
										
										
										
											2001-04-09 19:54:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
												'$get_sterm_list'(L0,CN,NN,L);
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									  C =:= 10 -> (N =:= 0 -> L = L0 ; L=[N|L0]) ).
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								'$deb_get_sterm_in_g'([],G,G).
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								'$deb_get_sterm_in_g'([H|T],G,A) :-
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									'$deb_get_sterm_in_g'(T,G,A1),
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									arg(H,A1,A).
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2002-01-02 03:54:15 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$new_deb_depth' :-
							 
						 
					
						
							
								
									
										
										
										
											2015-03-17 23:09:33 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									get_code( debugger_input,C),
							 
						 
					
						
							
								
									
										
										
										
											2002-11-20 20:01:33 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									'$get_deb_depth'(C,D),
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									'$set_deb_depth'(D).
							 
						 
					
						
							
								
									
										
										
										
											2002-01-02 03:54:15 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2002-11-20 20:01:33 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$get_deb_depth'(10,10) :-  !. % default depth is 0
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								'$get_deb_depth'(C,XF) :-
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									'$get_deb_depth_char_by_char'(C,0,XF).
							 
						 
					
						
							
								
									
										
										
										
											2001-04-09 19:54:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2002-11-20 20:01:33 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$get_deb_depth_char_by_char'(10,X,X) :- !.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								'$get_deb_depth_char_by_char'(C,X0,XF) :-
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									C >= "0", C =< "9", !,
							 
						 
					
						
							
								
									
										
										
										
											2001-04-09 19:54:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
									XI is X0*10+C-"0",
							 
						 
					
						
							
								
									
										
										
										
											2015-03-17 23:09:33 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									get_code( debugger_input,NC),
							 
						 
					
						
							
								
									
										
										
										
											2002-11-20 20:01:33 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									'$get_deb_depth_char_by_char'(NC,XI,XF).
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								% reset when given garbage.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								'$get_deb_depth_char_by_char'(C,_,10) :- '$skipeol'(C).
							 
						 
					
						
							
								
									
										
										
										
											2001-04-09 19:54:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2002-01-02 03:54:15 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$set_deb_depth'(D) :-
							 
						 
					
						
							
								
									
										
										
										
											2016-01-04 14:11:09 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									yap_flag(debugger_print_options,L),
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									'$delete_if_there'(L, max_depth(_), max_depth(D), LN),
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									yap_flag(debugger_print_options,LN).
							 
						 
					
						
							
								
									
										
										
										
											2014-11-25 12:03:48 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-01-04 14:11:09 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$delete_if_there'([], _, TN, [TN]).
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								'$delete_if_there'([T|L], T, TN, [TN|L]).
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								'$delete_if_there'([Q|L], T, TN, [Q|LN]) :-
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									'$delete_if_there'(L, T, TN, LN).
							 
						 
					
						
							
								
									
										
										
										
											2002-01-02 03:54:15 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2006-03-06 14:04:57 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$debugger_deterministic_goal'(G) :-
							 
						 
					
						
							
								
									
										
										
										
											2007-01-24 14:20:04 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									yap_hacks:current_choicepoints(CPs0),
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								%	$cps(CPs0),
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									'$debugger_skip_traces'(CPs0,CPs1),
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									'$debugger_skip_loop_spy2'(CPs1,CPs2),
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									'$debugger_skip_spycall'(CPs2,CPs3),
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									'$debugger_skip_loop_spy2'(CPs3,[Catch|_]),
							 
						 
					
						
							
								
									
										
										
										
											2016-07-31 10:42:15 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									yap_hacks:choicepoint(Catch,_,prolog,'$catch',3,'$catch'(_,'$TraceError'(_,_,G,_,_),_),_).
							 
						 
					
						
							
								
									
										
										
										
											2006-03-06 14:04:57 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2006-12-13 16:10:26 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								'$cps'([CP|CPs]) :-
							 
						 
					
						
							
								
									
										
										
										
											2007-01-24 14:20:04 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    yap_hacks:choicepoint(CP,A,B,C,D,E,F),
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    write(A:B:C:D:E:F),nl,
							 
						 
					
						
							
								
									
										
										
										
											2006-12-13 16:10:26 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    '$cps'(CPs).
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								'$cps'([]).
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2007-01-24 14:20:04 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$debugger_skip_spycall'([CP|CPs],CPs1) :-
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									yap_hacks:choicepoint(CP,_,prolog,'$spycall',4,(_;_),_), !,
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									'$debugger_skip_spycall'(CPs,CPs1).
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								'$debugger_skip_spycall'(CPs,CPs).
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2006-12-13 16:10:26 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$debugger_skip_traces'([CP|CPs],CPs1) :-
							 
						 
					
						
							
								
									
										
										
										
											2007-01-24 10:01:40 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									yap_hacks:choicepoint(CP,_,prolog,'$trace',4,(_;_),_), !,
							 
						 
					
						
							
								
									
										
										
										
											2006-12-13 16:10:26 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									'$debugger_skip_traces'(CPs,CPs1).
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								'$debugger_skip_traces'(CPs,CPs).
							 
						 
					
						
							
								
									
										
										
										
											2006-03-06 14:04:57 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2006-12-13 16:10:26 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$debugger_skip_loop_spy2'([CP|CPs],CPs1) :-
							 
						 
					
						
							
								
									
										
										
										
											2007-01-24 10:01:40 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									yap_hacks:choicepoint(CP,_,prolog,'$loop_spy2',5,(_;_),_), !,
							 
						 
					
						
							
								
									
										
										
										
											2006-12-13 16:10:26 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									'$debugger_skip_loop_spy2'(CPs,CPs1).
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								'$debugger_skip_loop_spy2'(CPs,CPs).
							 
						 
					
						
							
								
									
										
										
										
											2015-07-22 19:31:03 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-04-14 18:06:52 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$debugger_expand_meta_call'( G, VL, M:G2 ) :-
							 
						 
					
						
							
								
									
										
										
										
											2016-04-14 12:00:09 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    '$expand_meta_call'( G, VL, G0 ),
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    '$yap_strip_module'( G0, M, G1 ),
							 
						 
					
						
							
								
									
										
										
										
											2016-01-04 14:11:09 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    (
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									'$is_system_predicate'(G0,M) ->
							 
						 
					
						
							
								
									
										
										
										
											2016-04-14 12:00:09 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									    '$debugger_process_meta_arguments'(G1, M, G2)
							 
						 
					
						
							
								
									
										
										
										
											2016-01-04 14:11:09 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								     ;
							 
						 
					
						
							
								
									
										
										
										
											2016-04-14 12:00:09 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								     G1 = G2
							 
						 
					
						
							
								
									
										
										
										
											2016-01-04 14:11:09 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    ).
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-07-22 19:31:03 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$debugger_process_meta_arguments'(G, M, G1) :-
							 
						 
					
						
							
								
									
										
										
										
											2016-03-29 02:02:43 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									'$yap_strip_module'( M:G, MM, GM ),
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									functor(GM,F,N),
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									'$meta_predicate'(F,MM,N,D), !, % we're in an argument
							 
						 
					
						
							
								
									
										
										
										
											2015-07-22 19:31:03 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									D =.. [F|BMs],
							 
						 
					
						
							
								
									
										
										
										
											2016-03-29 02:02:43 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									GM =.. [F|BGs],
							 
						 
					
						
							
								
									
										
										
										
											2015-07-22 19:31:03 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									'$ldebugger_process_meta_args'(BGs, M, BMs, BG1s),
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									G1 =.. [F|BG1s].
							 
						 
					
						
							
								
									
										
										
										
											2016-01-31 19:41:10 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$debugger_process_meta_arguments'(G, _M, G).
							 
						 
					
						
							
								
									
										
										
										
											2015-07-22 19:31:03 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								'$ldebugger_process_meta_args'([], _, [], []).
							 
						 
					
						
							
								
									
										
										
										
											2015-12-15 09:28:43 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$ldebugger_process_meta_args'([G|BGs], M, [N|BMs], ['$spy'([M1|G1])|BG1s]) :-
							 
						 
					
						
							
								
									
										
										
										
											2015-11-13 13:20:29 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    number(N),
							 
						 
					
						
							
								
									
										
										
										
											2015-12-15 09:28:43 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    N >= 0,
							 
						 
					
						
							
								
									
										
										
										
											2016-03-29 02:02:43 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									'$yap_strip_module'( M:G, M1, G1 ),
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									functor(G1, Na, _),
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									Na \= '$trace_call',
							 
						 
					
						
							
								
									
										
										
										
											2015-07-22 19:31:03 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									!,
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									'$ldebugger_process_meta_args'(BGs, M, BMs, BG1s).
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								'$ldebugger_process_meta_args'([G|BGs], M, [_|BMs], [G|BG1s]) :-
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									'$ldebugger_process_meta_args'(BGs, M, BMs, BG1s).
							 
						 
					
						
							
								
									
										
										
										
											2015-11-13 13:20:29 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-12-15 09:28:43 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$trace_call'(G1,M1) :-
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    '$trace_call'( call(M1:G1 )).
							 
						 
					
						
							
								
									
										
										
										
											2015-11-13 13:20:29 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								'$trace_call'(G1,M1, A1) :-
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    '$trace_call'( call(M1:G1, A1 )).
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								'$trace_call'(G1,M1, A1, A2) :-
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    '$trace_call'( call(M1:G1, A1, A2 )).
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								'$trace_call'(G1,M1, A1, A2, A3) :-
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    '$trace_call'( call(M1:G1, A1, A2, A3 )).
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								'$trace_call'(G1,M1, A1, A2, A3, A4) :-
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    '$trace_call'( call(M1:G1, A1, A2, A3, A4 )).
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								'$trace_call'(G1,M1, A1, A2, A3, A4, A5) :-
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    '$trace_call'( call(M1:G1, A1, A2, A3, A4, A5 )).
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								'$trace_call'(G1,M1, A1, A2, A3, A4, A5, A6 ) :-
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    '$trace_call'( call(M1:G1, A1, A2, A3, A4, A5, A6  )).
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								'$trace_call'(G1,M1, A1, A2, A3, A4, A5, A6, A7) :-
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    '$trace_call'( call(M1:G1, A1, A2, A3, A4, A5, A6, A7 )).
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								'$trace_call'(G1,M1, A1, A2, A3, A4, A5, A6, A7, A8) :-
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    '$trace_call'( call(M1:G1, A1, A2, A3, A4, A5, A6, A7, A8 )).
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								'$trace_call'(G1,M1, A1, A2, A3, A4, A5, A6, A7, A8, A9) :-
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    '$trace_call'( call(M1:G1, A1, A2, A3, A4, A5, A6, A7, A8, A9 )).
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								'$trace_call'(G1,M1, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10) :-
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    '$trace_call'( call(M1:G1, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10 )).
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								'$trace_call'(G1,M1, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11) :-
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    '$trace_call'( call(M1:G1, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11 )).
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								'$trace_call'(G1,M1, EA1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12) :-
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    '$trace_call'( call(M1:G1, EA1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12 )).