[m-rev.] for review: improve declarative debugger user interface

Ian MacLarty maclarty at cs.mu.OZ.AU
Sat Apr 30 22:05:48 AEST 2005


For review by anyone.

Estimated hours taken: 7
Branches: main

Improve the declarative debugger interface.

The two main changes are to use the mdb help system and not re-display
the question after the user issues a command which does not answer the 
question.  For example if the user issues an `info' command, then previously 
the question would be redisplayed after the requested information and if the 
question is big then the information would be scrolled off the screen.

browser/declarative_analyser.m:
	Remove extra new line characters when printing info.  These are
	no longer necessary since the question is not redisplayed.

browser/declarative_debugger.m:
	Pass the help system from mdb to the oracle state when 
	initialising the diagnoser.

browser/declarative_oracle.m:
	Pass the help system to the user state when initialising the
	oracle state.

browser/declarative_user.m:
	Add two new fields to the user state: one to keep a reference to
	the help system and one to indicate whether the current question
	should be displayed when getting a user input.

	Allow the user to redisplay the question by issuing a `print' command
	with no arguments.  If the question is not to be displayed the show
	a "dd>" prompt.

	Change the `abort' command to `quit'.  This is more consistent
	with the rest of mdb.

doc/commands:
	Add a script to print all the commands in a section in the
	user guide.

doc/generate_mdb_doc:
	Generate help for the declarative debugger.

doc/mdb_categories:
	Add a category, `decl', for commands that can be executed inside
	the declarative debugger.  Change the `dd' category to mdb_dd,
	because 1) `help dd' used to show help about the `dd' category AND 
	the `dd' command and 2) `dd' is too general a category name now that we
	have a `decl' category.

	Add an item, `decl_debug' to the concepts category.
	
doc/user_guide.texi:
	Document some dd commands which previously weren't documented here.

	Add a short overview of the declarative debugger.  This is
	displayed when the user issues a `help' command from within the
	dd.

	Move the bit about the behaviour when no command is given to
	before the list of commands.  This is necessary so util/info_to_mdb.c
	doesn't include this in the help of the last command in the list.

tests/debugger/declarative/app.exp:
tests/debugger/declarative/app.inp:
tests/debugger/declarative/browse_arg.exp:
tests/debugger/declarative/browse_arg.inp:
tests/debugger/declarative/browser_mode.exp:
tests/debugger/declarative/browser_mode.inp:
tests/debugger/declarative/confirm_abort.exp:
tests/debugger/declarative/confirm_abort.inp:
tests/debugger/declarative/dependency.exp:
tests/debugger/declarative/dependency.inp:
tests/debugger/declarative/find_origin.exp:
tests/debugger/declarative/find_origin.exp2:
tests/debugger/declarative/info.exp:
tests/debugger/declarative/info.inp:
tests/debugger/declarative/io_stream_test.exp:
tests/debugger/declarative/io_stream_test.exp2:
tests/debugger/declarative/mapinit.exp:
tests/debugger/declarative/mapinit.inp:
tests/debugger/declarative/output_term_dep.exp:
tests/debugger/declarative/output_term_dep.inp:
tests/debugger/declarative/resume.exp:
tests/debugger/declarative/resume.inp:
tests/debugger/declarative/skip.exp:
tests/debugger/declarative/skip.inp:
tests/debugger/declarative/tabled_read_decl.exp:
	Update tests.

trace/mercury_trace_declarative.c:
trace/mercury_trace_help.c:
trace/mercury_trace_help.h:
	Pass the help system to the frontend.

Index: browser/declarative_analyser.m
===================================================================
RCS file: /home/mercury1/repository/mercury/browser/declarative_analyser.m,v
retrieving revision 1.23
diff -u -b -r1.23 declarative_analyser.m
--- browser/declarative_analyser.m	15 Apr 2005 05:42:33 -0000	1.23
+++ browser/declarative_analyser.m	30 Apr 2005 09:30:21 -0000
@@ -1276,8 +1276,8 @@
 	ReasonStr = reason_to_string(Reason),
 	ReasonSent = "The current question was chosen because " ++ ReasonStr,
 	WrappedReason = string.word_wrap(ReasonSent, 72),
- 	io.format(OutStream, "\n%s\n%s\n\n", [s(InfoMessage), 
-		s(WrappedReason)], !IO),
+ 	io.format(OutStream, "%s\n%s\n", [s(InfoMessage), s(WrappedReason)], 
+		!IO),
 	Node = get_edt_node(SearchSpace, LastId),
 	edt_question(Analyser ^ io_action_map, Store, Node,
 		OracleQuestion),
Index: browser/declarative_debugger.m
===================================================================
RCS file: /home/mercury1/repository/mercury/browser/declarative_debugger.m,v
retrieving revision 1.55
diff -u -b -r1.55 declarative_debugger.m
--- browser/declarative_debugger.m	6 Apr 2005 01:11:29 -0000	1.55
+++ browser/declarative_debugger.m	30 Apr 2005 08:23:21 -0000
@@ -61,6 +61,7 @@
 :- import_module mdb.declarative_analyser.
 :- import_module mdb.declarative_execution.
 :- import_module mdb.declarative_tree.
+:- import_module mdb.help.
 :- import_module mdb.io_action.
 :- import_module mdb.term_rep.
 :- import_module mdbcomp.program_representation.
@@ -271,7 +272,7 @@
 
 :- pred diagnoser_state_init(io_action_map::in, io.input_stream::in,
 	io.output_stream::in, browser_info.browser_persistent_state::in,
-	diagnoser_state(R)::out) is det.
+	help.system::in, diagnoser_state(R)::out) is det.
 
 :- pred diagnosis(S::in, analysis_type(edt_node(R))::in, int::in, int::in,
 	int::in, diagnoser_response(R)::out,
@@ -309,7 +310,10 @@
 :- import_module mdb.util.
 :- import_module mdbcomp.prim_data.
 
-:- import_module exception, int, map, bool.
+:- import_module bool.
+:- import_module exception.
+:- import_module int.
+:- import_module map.
 
 unravel_decl_atom(DeclAtom, TraceAtom, IoActions) :-
 	(
@@ -357,14 +361,14 @@
 diagnoser_set_oracle(Oracle, diagnoser(Analyser, _), 
 	diagnoser(Analyser, Oracle)).
 
-diagnoser_state_init(IoActionMap, InStr, OutStr, Browser, Diagnoser) :-
+diagnoser_state_init(IoActionMap, InStr, OutStr, Browser, HelpSystem, 
+		Diagnoser) :-
 	analyser_state_init(IoActionMap, Analyser),
-	oracle_state_init(InStr, OutStr, Browser, Oracle),
+	oracle_state_init(InStr, OutStr, Browser, HelpSystem, Oracle),
 	Diagnoser = diagnoser(Analyser, Oracle).
 
 diagnosis(Store, AnalysisType, UseOldIoActionMap, IoActionStart, IoActionEnd,
-		Response, !Diagnoser, !Browser,
-		!IO) :-
+		Response, !Diagnoser, !Browser, !IO) :-
 	mdb.declarative_oracle.set_browser_state(!.Browser, !.Diagnoser ^
 		oracle_state, Oracle),
 	!:Diagnoser = !.Diagnoser ^ oracle_state := Oracle,
@@ -530,14 +534,15 @@
 	% make it easier to call from C code.
 	%
 :- pred diagnoser_state_init_store(io.input_stream::in, io.output_stream::in,
-	browser_info.browser_persistent_state::in, 
+	browser_info.browser_persistent_state::in, help.system::in,
 	diagnoser_state(trace_node_id)::out) is det.
 
-:- pragma export(diagnoser_state_init_store(in, in, in, out),
+:- pragma export(diagnoser_state_init_store(in, in, in, in, out),
 		"MR_DD_decl_diagnosis_state_init").
 
-diagnoser_state_init_store(InStr, OutStr, Browser, Diagnoser) :-
-	diagnoser_state_init(map.init, InStr, OutStr, Browser, Diagnoser).
+diagnoser_state_init_store(InStr, OutStr, Browser, HelpSystem, Diagnoser) :-
+	diagnoser_state_init(map.init, InStr, OutStr, Browser, HelpSystem,
+		Diagnoser).
 
 :- pred set_fallback_search_mode(
 	mdb.declarative_analyser.search_mode::in,
@@ -601,7 +606,7 @@
 	browser_info.browser_persistent_state::out, io::di, io::uo) 
 	is cc_multi.
 
-:- pragma export(diagnosis_resume_previous(in, in, in, in,out, in, out, in,
+:- pragma export(diagnosis_resume_previous(in, in, in, in, out, in, out, in,
 	out, di, uo), "MR_DD_decl_diagnosis_resume_previous").
 
 diagnosis_resume_previous(Store, UseOldIoActionMap, IoActionStart, IoActionEnd,
Index: browser/declarative_oracle.m
===================================================================
RCS file: /home/mercury1/repository/mercury/browser/declarative_oracle.m,v
retrieving revision 1.41
diff -u -b -r1.41 declarative_oracle.m
--- browser/declarative_oracle.m	11 Apr 2005 06:43:33 -0000	1.41
+++ browser/declarative_oracle.m	30 Apr 2005 03:21:40 -0000
@@ -27,11 +27,14 @@
 :- interface.
 
 :- import_module mdb.browser_info.
-:- import_module mdbcomp.prim_data.
 :- import_module mdb.declarative_debugger.
 :- import_module mdb.declarative_execution.
+:- import_module mdb.help.
+:- import_module mdbcomp.prim_data.
 
-:- import_module io, bool, string.
+:- import_module bool. 
+:- import_module io. 
+:- import_module string.
 
 	% A response that the oracle gives to a query about the
 	% truth of an EDT node.
@@ -50,7 +53,8 @@
 	% Produce a new oracle state.
 	%
 :- pred oracle_state_init(io.input_stream::in, io.output_stream::in, 
-	browser_info.browser_persistent_state::in, oracle_state::out) is det.
+	browser_info.browser_persistent_state::in, help.system::in, 
+	oracle_state::out) is det.
 
 	% Add a module to the set of modules trusted by the oracle
 	%
@@ -254,10 +258,10 @@
 			trusted_id_counter	:: counter
 		).
 
-oracle_state_init(InStr, OutStr, Browser, Oracle) :-
+oracle_state_init(InStr, OutStr, Browser, HelpSystem, Oracle) :-
 	oracle_kb_init(Current),
 	oracle_kb_init(Old),
-	user_state_init(InStr, OutStr, Browser, User),
+	user_state_init(InStr, OutStr, Browser, HelpSystem, User),
 	% Trust the standard library by default.
 	bimap.set(bimap.init, standard_library, 0, Trusted),
 	counter.init(1, Counter),
Index: browser/declarative_user.m
===================================================================
RCS file: /home/mercury1/repository/mercury/browser/declarative_user.m,v
retrieving revision 1.47
diff -u -b -r1.47 declarative_user.m
--- browser/declarative_user.m	6 Apr 2005 01:11:29 -0000	1.47
+++ browser/declarative_user.m	30 Apr 2005 09:14:15 -0000
@@ -18,6 +18,7 @@
 
 :- import_module mdb.browser_info.
 :- import_module mdb.declarative_debugger.
+:- import_module mdb.help.
 
 :- import_module io.
 
@@ -39,7 +40,8 @@
 :- type user_state.
 
 :- pred user_state_init(io.input_stream::in, io.output_stream::in, 
-	browser_info.browser_persistent_state::in, user_state::out) is det.
+	browser_info.browser_persistent_state::in, help.system::in, 
+	user_state::out) is det.
 
 	% This predicate handles the interactive part of the declarative
 	% debugging process.  The user is presented with a question,
@@ -69,14 +71,14 @@
 
 :- import_module mdb.browse.
 :- import_module mdb.browser_term.
-:- import_module mdb.io_action.
-:- import_module mdb.util.
 :- import_module mdb.declarative_execution.
 :- import_module mdb.declarative_tree.
-:- import_module mdbcomp.prim_data.
-:- import_module mdbcomp.program_representation.
+:- import_module mdb.io_action.
 :- import_module mdb.parse.
 :- import_module mdb.term_rep.
+:- import_module mdb.util.
+:- import_module mdbcomp.prim_data.
+:- import_module mdbcomp.program_representation.
 
 :- import_module bool.
 :- import_module char.
@@ -92,20 +94,43 @@
 	--->	user(
 			instr	:: io.input_stream,
 			outstr	:: io.output_stream,
-			browser	:: browser_persistent_state
+			browser			:: browser_persistent_state,
+
+				% yes if the question should be displayed when 
+				% querying the user.  This is used to 
+				% supress the displaying of the question after
+				% the user issues a command which does not
+				% answer the question (such as an `info'
+				% command).
+			display_question	:: bool,
+			help_system		:: help.system
 		).
 
-user_state_init(InStr, OutStr, Browser, user(InStr, OutStr, Browser)).
+user_state_init(InStr, OutStr, Browser, HelpSystem, 
+	user(InStr, OutStr, Browser, yes, HelpSystem)).
 
 %-----------------------------------------------------------------------------%
 
 query_user(UserQuestion, Response, !User, !IO) :-
 	Question = get_decl_question(UserQuestion),
+	(
+		!.User ^ display_question = yes,
 	write_decl_question(Question, !.User, !IO),
 	user_question_prompt(UserQuestion, Prompt),
+		!:User = !.User ^ display_question := no
+	;
+		!.User ^ display_question = no,
+		Prompt = "dd> "
+	),
 	get_command(Prompt, Command, !User, !IO),
-	handle_command(Command, UserQuestion, Response, !User, 
-		!IO).
+	handle_command(Command, UserQuestion, Response, !User, !IO),
+	(
+		Response \= show_info(_)
+	->
+		!:User = !.User ^ display_question := yes
+	;
+		true
+	).
 
 :- pred handle_command(user_command::in, user_question(T)::in,
 	user_response(T)::out, user_state::in, user_state::out, 
@@ -158,8 +183,10 @@
 			query_user(UserQuestion, Response, 
 				!User, !IO)
 		;
+			%
 			% If the user marks the predicate or function,
-			% we make the call invalid.
+			% we make the atom erroneous.
+			%
 			MaybeMark = yes([]),
 			Node = get_decl_question_node(Question),
 			Answer = truth_value(Node, erroneous),
@@ -233,16 +260,33 @@
 	print_chosen_io_actions(IoActions, From, To, !.User, !IO),
 	query_user(UserQuestion, Response, !User, !IO).
 
+handle_command(ask, UserQuestion, Response, !User, !IO) :-
+	!:User = !.User ^ display_question := yes,
+	query_user(UserQuestion, Response, !User, !IO).
+
 handle_command(pd, UserQuestion, Response, !User, !IO) :-
 	Question = get_decl_question(UserQuestion),
 	Node = get_decl_question_node(Question),
 	Response = exit_diagnosis(Node).
 
-handle_command(abort, _, Response, !User, !IO) :-
+handle_command(quit, _, Response, !User, !IO) :-
 	Response = abort_diagnosis.
 
-handle_command(help, UserQuestion, Response, !User, !IO) :-
-	user_help_message(!.User, !IO),
+handle_command(help(MaybeCmd), UserQuestion, Response, !User, !IO) :-
+	(
+		MaybeCmd = yes(Cmd),
+		Path = ["decl", Cmd]
+	;
+		MaybeCmd = no,
+		Path = ["concepts", "decl_debug"]
+	),
+	help.path(!.User ^ help_system, Path, !.User ^ outstr, Res, !IO),
+	(
+		Res = help.ok
+	;
+		Res = help.error(Message),
+		io.write_strings([Message, "\n"], !IO)
+	),
 	query_user(UserQuestion, Response, !User, !IO).
 
 handle_command(empty_command, UserQuestion, Response, !User, 
@@ -263,11 +307,9 @@
 			Command = inadmissible
 		)
 	),
-	handle_command(Command, UserQuestion, Response, !User, 
-		!IO).
+	handle_command(Command, UserQuestion, Response, !User, !IO).
 
-handle_command(illegal_command, UserQuestion, Response, !User, 
-		!IO) :-
+handle_command(illegal_command, UserQuestion, Response, !User, !IO) :-
 	io.write_string(!.User ^ outstr, "Unknown command, 'h' for help.\n", 
 		!IO),
 	query_user(UserQuestion, Response, !User, !IO).
@@ -664,11 +706,16 @@
 			% Print some information about the current question.
 	;	info
 
+			% The user wants the current question re-asked.
+	;	ask
+
 			% Abort this diagnosis session.
-	;	abort			
+	;	quit			
 			
-			% Request help before answering.
-	;	help			
+			% Request help before answering.  If the maybe argument
+			% is no then a general help message is displayed,
+			% otherwise help on the given command is displayed.
+	;	help(maybe(string))	
 
 			% User just pressed return.
 	;	empty_command		
@@ -676,42 +723,6 @@
 			% None of the above.
 	;	illegal_command.	
 
-:- pred user_help_message(user_state::in, io::di, io::uo) is det.
-
-user_help_message(User, !IO) :-
-	io.write_strings(User ^ outstr, [
-		"According to the intended interpretation of the program,",
-		" answer one of:\n",
-		"\ty\tyes\t\tthe node is correct\n",
-		"\tn\tno\t\tthe node is incorrect\n",
-		"\ti\tinadmissible\tthe input arguments are out of range\n",
-		"\ts\tskip\t\tskip this question\n",
-		"\tt [module]\ttrust [module]\t\n",
-		"\t\tTrust the predicate/function about which\n",
-		"\t\tthe current question is being asked.  If the word\n",
-		"\t\t`module' is given as an argument then trust all the\n",
-		"\t\tpredicates/functions in the same module as the\n",
-		"\t\tpredicate/function about which the current question is\n",
-		"\t\tbeing asked.\n",
-		"\tb [-x] [<n>]\tbrowse [-x] [<n>]\n",
-		"\t\tBrowse the atom, or its nth argument.\n",
-		"\t\tIf the `-x' or `--xml' option is given, then browse\n",
-		"\t\tthe term with an XML browser.\n",
-		"\tb io <n>\tbrowse io <n>\tbrowse the atom's nth I/O action\n",
-		"\tp <n>\tprint <n>\tprint the nth argument of the atom\n",
-		"\tp <n-m>\tprint <n-m>\tprint the nth to the mth arguments of the atom\n",
-		"\tp io <n>\tprint io <n>\tprint the atom's nth I/O action\n",
-		"\tp io <n-m>\tprint io <n-m>\tprint the atom's nth to mth I/O actions\n",
-		"\tset [-APBfpv] <param> <value>\t",
-		"set a term browser parameter value\n",
-		"\tinfo\t\t\tDisplay some information about the current\n",
-		"\t\t\t\tquestion and the state of the bug search.\n",
-		"\tpd\t\t\tcommence procedural debugging from this point\n",
-		"\ta\tabort\t\t",
-			"abort this diagnosis session and return to mdb\n",
-		"\th, ?\thelp\t\tthis help message\n"
-	], !IO).
-
 :- pred user_confirm_bug_help(user_state::in, io::di, io::uo) is det.
 
 user_confirm_bug_help(User, !IO) :-
@@ -719,8 +730,8 @@
 		"Answer one of:\n",
 		"\ty\tyes\t\tconfirm that the suspect is a bug\n",
 		"\tn\tno\t\tdo not accept that the suspect is a bug\n",
-%		"\tb\tbrowse\t\tbrowse the suspect\n",
-		"\ta\tabort\t\t",
+		"\tb\tbrowse\t\tbrowse the suspect\n",
+		"\tq\tquit\t\t",
 			"abort this diagnosis session and return to mdb\n",
 		"\th, ?\thelp\t\tthis help message\n"
 	], !IO).
@@ -752,10 +763,10 @@
 		io.error_message(Error, Msg),
 		io.write_string(User ^ outstr, Msg, !IO),
 		io.nl(User ^ outstr, !IO),
-		Command = abort
+		Command = quit
 	;
 		Result = eof,
-		Command = abort
+		Command = quit
 	).
 
 :- pred cmd_handler(string::in, 
@@ -771,11 +782,11 @@
 cmd_handler("s",	one_word_cmd(skip)).
 cmd_handler("skip",	one_word_cmd(skip)).
 cmd_handler("pd",	one_word_cmd(pd)).
-cmd_handler("a",	one_word_cmd(abort)).
-cmd_handler("abort",	one_word_cmd(abort)).
-cmd_handler("?",	one_word_cmd(help)).
-cmd_handler("h",	one_word_cmd(help)).
-cmd_handler("help",	one_word_cmd(help)).
+cmd_handler("q",		one_word_cmd(quit)).
+cmd_handler("quit",		one_word_cmd(quit)).
+cmd_handler("?",		help_cmd).
+cmd_handler("h",		help_cmd).
+cmd_handler("help",		help_cmd).
 cmd_handler("info",	one_word_cmd(info)).
 cmd_handler("b",	browse_arg_cmd).
 cmd_handler("browse",	browse_arg_cmd).
@@ -811,6 +822,7 @@
 
 :- func print_arg_cmd(list(string)::in) = (user_command::out) is semidet.
 
+print_arg_cmd([]) = ask.
 print_arg_cmd([Arg]) = print_arg(From, To) :-
 	string_to_range(Arg, From, To).
 print_arg_cmd(["io", Arg]) = print_io(From, To) :-
@@ -829,6 +841,11 @@
 trust_arg_cmd([]) = trust_predicate.
 trust_arg_cmd(["module"]) = trust_module.
 
+:- func help_cmd(list(string)::in) = (user_command::out) is semidet.
+
+help_cmd([]) = help(no).
+help_cmd([Cmd]) = help(yes(Cmd)).
+
 string_to_range(Arg, From, To) :-
 	( string.to_int(Arg, Num) ->
 		From = Num,
@@ -864,7 +881,7 @@
 	->
 		Response = overrule_bug
 	;
-		Command = abort
+		Command = quit
 	->
 		Response = abort_diagnosis
 	;
Index: doc/commands
===================================================================
RCS file: doc/commands
diff -N doc/commands
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ doc/commands	30 Apr 2005 08:28:07 -0000
@@ -0,0 +1,7 @@
+#!/bin/sh
+#
+# Print a list of commands in a portion of mdb help text.
+# Usage: commands file
+#
+grep "^\`" $1 | sed "s/^\(\`[a-z]\+\>\).*$/\"\1',\"/" | sort -u \
+| xargs echo | sed "s/, \(\`[a-z]\+'\)\,$/ and \1\./"
Index: doc/generate_mdb_doc
===================================================================
RCS file: /home/mercury1/repository/mercury/doc/generate_mdb_doc,v
retrieving revision 1.8
diff -u -b -r1.8 generate_mdb_doc
--- doc/generate_mdb_doc	16 Nov 2004 00:45:11 -0000	1.8
+++ doc/generate_mdb_doc	30 Apr 2005 06:48:58 -0000
@@ -14,6 +14,18 @@
 info -f ./mercury_user_guide.info -o $tmp -n "Mercury debugger concepts"
 ../util/info_to_mdb concepts $tmp >> mdb_doc
 
+# Document the declarative debugger.
+info -f ./mercury_user_guide.info -o $tmp -n "Declarative debugging overview"
+echo "document concepts 10 decl_debug"                           >> mdb_doc
+sed 's/^   //' < $tmp | sed -n '6,1000s/^/     /p'               >> mdb_doc 
+echo                                                             >> mdb_doc
+info -f ./mercury_user_guide.info -o $tmp -n "Declarative debugging commands"
+echo "The following commands are available from within the \
+declarative debugger:" `./commands $tmp` | \
+fold -w72 -s | sed "s/^/     /"                                  >> mdb_doc
+echo end                                                         >> mdb_doc
+../util/info_to_mdb decl $tmp >> mdb_doc
+
 debug_cmd_path="debug debugger"
 for section in interactive forward backward browsing breakpoint \
 	i/o parameter help declarative misc exp developer
@@ -21,7 +33,7 @@
 	case $section in
 		interactive)	category=queries ;;
 		i/o)		category=table_io ;;
-		declarative)	category=dd ;;
+		declarative)	category=mdb_dd ;;
 		*)		category=$section ;;
 	esac
 	info -f ./mercury_user_guide.info -o $tmp $debug_cmd_path $section
Index: doc/mdb_categories
===================================================================
RCS file: /home/mercury1/repository/mercury/doc/mdb_categories,v
retrieving revision 1.25
diff -u -b -r1.25 mdb_categories
--- doc/mdb_categories	14 Apr 2005 11:29:36 -0000	1.25
+++ doc/mdb_categories	30 Apr 2005 07:48:27 -0000
@@ -3,7 +3,7 @@
              The concepts for which documentation is available are
              `break_points', `strict_commands', `print_level',
              `default_print_level', `current_environment',
-             and `procedure_specification'.
+             `procedure_specification' and `decl_debug'.
 
 end
 document_category 150 queries
@@ -54,9 +54,15 @@
              For help on the `help' command, type `help help help'.
 
 end
-document_category 850 dd
-dd         - Commands related to declarative debugging.  These are `dd', 
+document_category 850 mdb_dd
+mdb_dd     - mdb commands related to declarative debugging.  These are `dd', 
              `trust', `trusted' and `untrust'.
+
+end
+document_category 860 decl
+decl       - Commands available from within the declarative debugger.  These 
+	     are `yes', `no', `inadmissible', `trust', `skip', `browse',
+	     `print', `set', `help', `info', `ask', `mark', `pd' and `quit'.
 
 end
 document_category 900 misc
Index: doc/user_guide.texi
===================================================================
RCS file: /home/mercury1/repository/mercury/doc/user_guide.texi,v
retrieving revision 1.432
diff -u -b -r1.432 user_guide.texi
--- doc/user_guide.texi	27 Apr 2005 03:21:22 -0000	1.432
+++ doc/user_guide.texi	30 Apr 2005 08:32:02 -0000
@@ -3907,9 +3907,9 @@
 
 Note that this is a work in progress,
 so there are some limitations in the implementation.
-The main limitations are pointed out in the following sections.
 
 @menu
+* Declarative debugging overview::
 * Declarative debugging concepts::
 * Oracle questions::
 * Declarative debugging commands::
@@ -3918,6 +3918,21 @@
 * Improving the search::
 @end menu
 
+ at node Declarative debugging overview
+ at subsection Overview
+
+The declarative debugger tries to find a bug in your program by asking
+questions about the correctness of calls executed in your program.
+
+Because pure Mercury code does not have any side effects, the declarative
+debugger can make inferences such as ``if a call produces incorrect output
+from correct input, then there must be a bug in the code executed by one of 
+the descendents of the call''.
+
+The declarative debugger is therefore able to automate much of the 
+`detective work' that must be done manually when using the
+procedural debugger.
+
 @node Declarative debugging concepts
 @subsection Concepts
 
@@ -4048,15 +4063,20 @@
 @subsection Commands
 
 At the above mentioned prompts, the following commands may be given.
-Each command (with the exception of @samp{pd})
-can also be abbreviated to just its first letter.
- at sp 1
+Most commands can be abbreviated by their first letter.
+
+It is also legal to press return without specifying a command.
+If there is a default answer (@pxref{Oracle questions}),
+pressing return is equivalent to giving that answer.
+If there is no default answer,
+pressing return is equivalent to the skip command.
+
 @table @code
 @item yes
-Answer that the assertion is correct.
+Answer `yes' to the current question.
 @sp 1
 @item no
-Answer that the assertion is wrong.
+Answer `no' to the current question.
 @sp 1
 @item inadmissible
 Answer that the call is inadmissible.
@@ -4074,7 +4094,7 @@
 @item skip
 Skip this question and ask a different one if possible.
 @sp 1
- at item browse [@var{n}]
+ at item browse [--xml] [@var{n}]
 Start the interactive term browser and browse the @var{n}th argument 
 before answering.  If the argument number
 is omitted then browse the whole call as if it were a data term.
@@ -4086,12 +4106,30 @@
 in @ref{Browsing commands} or type @samp{help} from within the 
 interactive query browser.
 @sp 1
+Giving the @samp{--xml} or @samp{-x} option causes the term to be displayed
+in an XML browser.
+ at sp 1
+ at item browse io [--xml] @var{n}
+Browse the @var{n}th IO action.
+ at sp 1
+ at item print [@var{n}]
+Print the @var{n}th argument of the current question.  If no
+argument is given then display the current question.
+ at sp 1
+ at item print io @var{n}
+Print the @var{n}th IO action.
+ at sp 1
+ at item set @var{param} @var{value}
+Updates the given configuration parameter.
+The parameters that can be configured are
+ at samp{format}, @samp{depth}, @samp{size}, @samp{width} and @samp{lines}.
+ at sp 1
 @item mark [@var{term-path}]
 The @samp{mark} command can only be given from within the interactive
 term browser and asserts that the marked subterm is incorrect.  The 
-debugger uses this information to better direct the bug search.  If no
-argument is given the the current subterm is taken to be incorrect.  If a 
- at var{term-path} is given then the subterm at @var{tern-path} relative to
+declarative debugger uses this information to better direct the bug search.  
+If no argument is given the the current subterm is taken to be incorrect.  
+If a @var{term-path} is given then the subterm at @var{tern-path} relative to
 the current subterm will be considered incorrect.
 @sp 1
 @item pd
@@ -4099,10 +4137,10 @@
 This command is notionally the inverse of the @samp{dd} command
 in the procedural debugger.
 The session can be resumed with a @samp{dd --resume} command.
- at item abort
+ at item quit
 End the declarative debugging session and return to
 the event at which the @samp{dd} command was given.  
-The session can be resume with a @samp{dd --resume} command.
+The session can be resumed with a @samp{dd --resume} command.
 @sp 1
 @item info
 List the filename and line number of the predicate the current question
@@ -4112,15 +4150,10 @@
 how many events are yet to be eliminated and the reason for asking
 the current question.
 @sp 1
- at item help
-Summarize the list of available commands.
+ at item help [@var{command}]
+Summarize the list of available commands or give help on a specific
+command.
 @end table
-
-It is also legal to press return without specifying a command.
-If there is a default answer (@pxref{Oracle questions}),
-pressing return is equivalent to giving that answer.
-If there is no default answer,
-pressing return is equivalent to the skip command.
 
 @node Diagnoses
 @subsection Diagnoses
Index: tests/debugger/mdb_command_test.inp
===================================================================
RCS file: /home/mercury1/repository/tests/debugger/mdb_command_test.inp,v
retrieving revision 1.40
diff -u -b -r1.40 mdb_command_test.inp
--- tests/debugger/mdb_command_test.inp	10 Feb 2005 04:10:32 -0000	1.40
+++ tests/debugger/mdb_command_test.inp	30 Apr 2005 11:47:48 -0000
@@ -1,3 +1,15 @@
+yes                  xyzzy xyzzy xyzzy xyzzy xyzzy
+no                   xyzzy xyzzy xyzzy xyzzy xyzzy
+inadmissible         xyzzy xyzzy xyzzy xyzzy xyzzy
+trust                xyzzy xyzzy xyzzy xyzzy xyzzy
+skip                 xyzzy xyzzy xyzzy xyzzy xyzzy
+browse               xyzzy xyzzy xyzzy xyzzy xyzzy
+print                xyzzy xyzzy xyzzy xyzzy xyzzy
+set                  xyzzy xyzzy xyzzy xyzzy xyzzy
+mark                 xyzzy xyzzy xyzzy xyzzy xyzzy
+pd                   xyzzy xyzzy xyzzy xyzzy xyzzy
+quit                 xyzzy xyzzy xyzzy xyzzy xyzzy
+info                 xyzzy xyzzy xyzzy xyzzy xyzzy
 query                xyzzy xyzzy xyzzy xyzzy xyzzy
 cc_query             xyzzy xyzzy xyzzy xyzzy xyzzy
 io_query             xyzzy xyzzy xyzzy xyzzy xyzzy
Index: tests/debugger/declarative/app.exp
===================================================================
RCS file: /home/mercury1/repository/tests/debugger/declarative/app.exp,v
retrieving revision 1.18
diff -u -b -r1.18 app.exp
--- tests/debugger/declarative/app.exp	6 Jan 2005 03:20:11 -0000	1.18
+++ tests/debugger/declarative/app.exp	30 Apr 2005 09:09:41 -0000
@@ -18,7 +18,7 @@
 app([4, 5], [6, 7, 8], [4, ...])
 Valid? yes
 app([3, 4, 5], [6, 7, 8], [3, ...])
-Valid? abort
+Valid? quit
 Diagnosis aborted.
       E6:     C5 EXIT pred app.app/3-0 (det) app.m:26 (app.m:28)
 mdb> continue
Index: tests/debugger/declarative/app.inp
===================================================================
RCS file: /home/mercury1/repository/tests/debugger/declarative/app.inp,v
retrieving revision 1.7
diff -u -b -r1.7 app.inp
--- tests/debugger/declarative/app.inp	16 Dec 2004 00:12:40 -0000	1.7
+++ tests/debugger/declarative/app.inp	30 Apr 2005 07:26:22 -0000
@@ -8,7 +8,7 @@
 finish -n
 dd
 yes
-abort
+quit
 continue
 continue
 continue
Index: tests/debugger/declarative/browse_arg.exp
===================================================================
RCS file: /home/mercury1/repository/tests/debugger/declarative/browse_arg.exp,v
retrieving revision 1.6
diff -u -b -r1.6 browse_arg.exp
--- tests/debugger/declarative/browse_arg.exp	11 Apr 2005 06:49:51 -0000	1.6
+++ tests/debugger/declarative/browse_arg.exp	30 Apr 2005 09:13:28 -0000
@@ -17,8 +17,8 @@
 browser> ls
 baz(1, bar)
 browser> quit
-p(1, baz(1, bar))
-Valid? set format verbose
+dd> set format verbose
+dd> print
 p
 1-1
 2-baz
@@ -26,6 +26,7 @@
   2-bar
 
 Valid? set -B format pretty
+dd> p
 p
 1-1
 2-baz
@@ -33,6 +34,7 @@
   2-bar
 
 Valid? set -P format pretty
+dd> p
 p(1, baz(1, bar))
 Valid? b -x 2
 Saving term to XML file...
@@ -42,8 +44,7 @@
 	<Int type="int">1</Int>
 	<bar functor="bar" type="browse_arg.foo" arity="0" />
 </baz>
-p(1, baz(1, bar))
-Valid? b --xml
+dd> b --xml
 Saving term to XML file...
 Launching XML browser (this may take some time) ...
 <?xml version="1.0"?>
@@ -64,8 +65,7 @@
 		</List>
 	</List>
 </predicate>
-p(1, baz(1, bar))
-Valid? no
+dd> no
 Found incorrect contour:
 p(1, baz(1, bar))
 Is this a bug? yes
Index: tests/debugger/declarative/browse_arg.inp
===================================================================
RCS file: /home/mercury1/repository/tests/debugger/declarative/browse_arg.inp,v
retrieving revision 1.4
diff -u -b -r1.4 browse_arg.inp
--- tests/debugger/declarative/browse_arg.inp	11 Apr 2005 06:49:51 -0000	1.4
+++ tests/debugger/declarative/browse_arg.inp	30 Apr 2005 09:11:36 -0000
@@ -11,8 +11,11 @@
 ls
 quit
 set format verbose
+print
 set -B format pretty
+p
 set -P format pretty
+p
 b -x 2
 b --xml
 no
Index: tests/debugger/declarative/browser_mode.exp
===================================================================
RCS file: /home/mercury1/repository/tests/debugger/declarative/browser_mode.exp,v
retrieving revision 1.2
diff -u -b -r1.2 browser_mode.exp
--- tests/debugger/declarative/browser_mode.exp	27 Jan 2005 02:38:58 -0000	1.2
+++ tests/debugger/declarative/browser_mode.exp	30 Apr 2005 09:10:31 -0000
@@ -20,8 +20,7 @@
 browser> mode
 Output
 browser> quit
-p('a', 30)
-Valid? a
+dd> q
 Diagnosis aborted.
       E3:     C2 EXIT pred browser_mode.p/2-0 (nondet)
 mdb> break r
@@ -42,15 +41,13 @@
 browser> mode
 Input
 browser> quit
-Call r('b', _)
-Unsatisfiable? b
+dd> b
 browser> mode 2
 Unbound
 browser> mode 1
 Input
 browser> quit
-Call r('b', _)
-Unsatisfiable? a
+dd> q
 Diagnosis aborted.
       E8:     C3 FAIL pred browser_mode.r/2-0 (semidet)
 mdb> quit -y
Index: tests/debugger/declarative/browser_mode.inp
===================================================================
RCS file: /home/mercury1/repository/tests/debugger/declarative/browser_mode.inp,v
retrieving revision 1.1
diff -u -b -r1.1 browser_mode.inp
--- tests/debugger/declarative/browser_mode.inp	18 Jan 2005 03:56:53 -0000	1.1
+++ tests/debugger/declarative/browser_mode.inp	30 Apr 2005 07:26:22 -0000
@@ -12,7 +12,7 @@
 cd ../2
 mode
 quit
-a
+q
 break r
 c
 c
@@ -27,5 +27,5 @@
 mode 2
 mode 1
 quit
-a
+q
 quit -y
Index: tests/debugger/declarative/confirm_abort.exp
===================================================================
RCS file: /home/mercury1/repository/tests/debugger/declarative/confirm_abort.exp,v
retrieving revision 1.3
diff -u -b -r1.3 confirm_abort.exp
--- tests/debugger/declarative/confirm_abort.exp	19 Nov 2004 11:54:29 -0000	1.3
+++ tests/debugger/declarative/confirm_abort.exp	30 Apr 2005 09:15:10 -0000
@@ -19,7 +19,8 @@
 Answer one of:
 	y	yes		confirm that the suspect is a bug
 	n	no		do not accept that the suspect is a bug
-	a	abort		abort this diagnosis session and return to mdb
+	b	browse		browse the suspect
+	q	quit		abort this diagnosis session and return to mdb
 	h, ?	help		this help message
 Found incorrect contour:
 q(27)
@@ -27,7 +28,8 @@
 Answer one of:
 	y	yes		confirm that the suspect is a bug
 	n	no		do not accept that the suspect is a bug
-	a	abort		abort this diagnosis session and return to mdb
+	b	browse		browse the suspect
+	q	quit		abort this diagnosis session and return to mdb
 	h, ?	help		this help message
 Found incorrect contour:
 q(27)
@@ -35,18 +37,19 @@
 Answer one of:
 	y	yes		confirm that the suspect is a bug
 	n	no		do not accept that the suspect is a bug
-	a	abort		abort this diagnosis session and return to mdb
+	b	browse		browse the suspect
+	q	quit		abort this diagnosis session and return to mdb
 	h, ?	help		this help message
 Found incorrect contour:
 q(27)
-Is this a bug? abort
+Is this a bug? quit
        5:      2  2 EXIT pred confirm_abort.p/1-0 (det) confirm_abort.m:15 (confirm_abort.m:8)
 mdb> dd
 p(27)
 Valid? [no] n
 Found incorrect contour:
 q(27)
-Is this a bug? a
+Is this a bug? q
        5:      2  2 EXIT pred confirm_abort.p/1-0 (det) confirm_abort.m:15 (confirm_abort.m:8)
 mdb> dd
 p(27)
Index: tests/debugger/declarative/confirm_abort.inp
===================================================================
RCS file: /home/mercury1/repository/tests/debugger/declarative/confirm_abort.inp,v
retrieving revision 1.2
diff -u -b -r1.2 confirm_abort.inp
--- tests/debugger/declarative/confirm_abort.inp	19 Nov 2004 11:54:29 -0000	1.2
+++ tests/debugger/declarative/confirm_abort.inp	30 Apr 2005 07:26:22 -0000
@@ -9,10 +9,10 @@
 help
 h
 ?
-abort
+quit
 dd
 n
-a
+q
 dd
 n
 y
Index: tests/debugger/declarative/dependency.exp
===================================================================
RCS file: /home/mercury1/repository/tests/debugger/declarative/dependency.exp,v
retrieving revision 1.9
diff -u -b -r1.9 dependency.exp
--- tests/debugger/declarative/dependency.exp	11 Apr 2005 06:43:35 -0000	1.9
+++ tests/debugger/declarative/dependency.exp	30 Apr 2005 09:16:07 -0000
@@ -8,8 +8,7 @@
 turn_on_origin_debug
 Valid? browse 1
 Invalid argument number
-turn_on_origin_debug
-Valid? abort
+dd> quit
 Diagnosis aborted.
        3:      2  2 EXIT pred dependency.turn_on_origin_debug/0-0 (det) dependency.m:69 (dependency.m:12)
 mdb> step
@@ -41,7 +40,7 @@
 browser> mark
 Origin: primitive_op("dependency.m", 22, unification)
 p(1)
-Valid? abort
+Valid? quit
 Diagnosis aborted.
       18:      3  2 EXIT pred dependency.test/1-0 (cc_multi) dependency.m:19 (dependency.m:13)
 mdb> dd
@@ -57,7 +56,7 @@
 browser> mark
 Origin: primitive_op("dependency.m", 29, unification)
 p(1)
-Valid? abort
+Valid? quit
 Diagnosis aborted.
       18:      3  2 EXIT pred dependency.test/1-0 (cc_multi) dependency.m:19 (dependency.m:13)
 mdb> dd
@@ -67,7 +66,7 @@
 browser> mark
 Origin: primitive_op("dependency.m", 41, unification)
 p(1)
-Valid? abort
+Valid? quit
 Diagnosis aborted.
       18:      3  2 EXIT pred dependency.test/1-0 (cc_multi) dependency.m:19 (dependency.m:13)
 mdb> dd
@@ -77,7 +76,7 @@
 browser> mark
 Origin: primitive_op("dependency.m", 22, unification)
 p(1)
-Valid? abort
+Valid? quit
 Diagnosis aborted.
       18:      3  2 EXIT pred dependency.test/1-0 (cc_multi) dependency.m:19 (dependency.m:13)
 mdb> dd
@@ -87,7 +86,7 @@
 browser> mark
 Origin: output(r, any_head_var_from_back(1), [1])
 r(1, [|](3, [|](4, [])), -(3, 4))
-Valid? abort
+Valid? quit
 Diagnosis aborted.
       18:      3  2 EXIT pred dependency.test/1-0 (cc_multi) dependency.m:19 (dependency.m:13)
 mdb> dd
@@ -97,7 +96,7 @@
 browser> mark
 Origin: primitive_op("dependency.m", 43, unification)
 p(1)
-Valid? abort
+Valid? quit
 Diagnosis aborted.
       18:      3  2 EXIT pred dependency.test/1-0 (cc_multi) dependency.m:19 (dependency.m:13)
 mdb> continue
Index: tests/debugger/declarative/dependency.inp
===================================================================
RCS file: /home/mercury1/repository/tests/debugger/declarative/dependency.inp,v
retrieving revision 1.3
diff -u -b -r1.3 dependency.inp
--- tests/debugger/declarative/dependency.inp	5 Nov 2004 06:30:21 -0000	1.3
+++ tests/debugger/declarative/dependency.inp	30 Apr 2005 07:26:22 -0000
@@ -3,7 +3,7 @@
 goto 3
 dd
 browse 1
-abort
+quit
 step
 finish
 set depth 20
@@ -14,7 +14,7 @@
 browse 1
 ^1
 mark
-abort
+quit
 dd
 browse 1
 ^2^1
@@ -22,25 +22,25 @@
 browse 2
 print
 mark
-abort
+quit
 dd
 browse 1
 ^2^2^1
 mark
-abort
+quit
 dd
 browse 1
 ^2^2^2^1
 mark
-abort
+quit
 dd
 browse 1
 ^2^2^2^2^1
 mark
-abort
+quit
 dd
 browse 1
 ^2^2^2^2^2
 mark
-abort
+quit
 continue
Index: tests/debugger/declarative/find_origin.exp
===================================================================
RCS file: /home/mercury1/repository/tests/debugger/declarative/find_origin.exp,v
retrieving revision 1.4
diff -u -b -r1.4 find_origin.exp
--- tests/debugger/declarative/find_origin.exp	27 Jan 2005 02:38:58 -0000	1.4
+++ tests/debugger/declarative/find_origin.exp	30 Apr 2005 09:16:42 -0000
@@ -41,8 +41,7 @@
 browser> p
 find_origin.polytest4(u("hello"), u("hello"))
 browser> quit
-polytest4(u("hello"), u("hello"))
-Valid? no
+dd> no
 lambda_find_origin_148(u(string), u(u("hello")), u(u("hello")))
 Valid? y
 Call lambda_find_origin_148(u(string), u(u("hello")), v(u("hello")))
Index: tests/debugger/declarative/find_origin.exp2
===================================================================
RCS file: /home/mercury1/repository/tests/debugger/declarative/find_origin.exp2,v
retrieving revision 1.4
diff -u -b -r1.4 find_origin.exp2
--- tests/debugger/declarative/find_origin.exp2	27 Jan 2005 02:38:58 -0000	1.4
+++ tests/debugger/declarative/find_origin.exp2	30 Apr 2005 12:01:06 -0000
@@ -41,8 +41,7 @@
 browser> p
 find_origin.polytest4(u("hello"), u("hello"))
 browser> quit
-polytest4(u("hello"), u("hello"))
-Valid? no
+dd> no
 lambda_find_origin_148(u(string), u(u("hello")), u(u("hello")))
 Valid? y
 Call lambda_find_origin_148(u(string), u(u("hello")), v(u("hello")))
Index: tests/debugger/declarative/info.exp
===================================================================
RCS file: /home/mercury1/repository/tests/debugger/declarative/info.exp,v
retrieving revision 1.2
diff -u -b -r1.2 info.exp
--- tests/debugger/declarative/info.exp	11 Apr 2005 06:43:35 -0000	1.2
+++ tests/debugger/declarative/info.exp	30 Apr 2005 09:18:01 -0000
@@ -13,40 +13,31 @@
 mdb> dd -s divide_and_query
 last([1, 2, 3, 4, 5, 6, 7, 8, ...], t/1)
 Valid? info
-
 Context of current question   : info.m:43 (info.m:15)
 Search mode                   : divide and query     
 Estimated questions remaining : 5                    
 Number of suspect events      : 30                   
 The current question was chosen because this is the node where the `dd'
 command was issued.
-
-last([1, 2, 3, 4, 5, 6, 7, 8, ...], t/1)
-Valid? n
+dd> n
 last([6, 7, 8, 9, 10], t(10))
 Valid? info
-
 Context of current question   : info.m:43 (info.m:45)
 Search mode                   : divide and query     
 Estimated questions remaining : 5                    
 Number of suspect events      : 30                   
 The current question was chosen because this node divides the suspect
 area into two regions of 15 and 15 events each.
-
-last([6, 7, 8, 9, 10], t(10))
-Valid? n
+dd> n
 last([9, 10], t(10))
 Valid? info
-
 Context of current question   : info.m:43 (info.m:45)
 Search mode                   : divide and query     
 Estimated questions remaining : 4                    
 Number of suspect events      : 15                   
 The current question was chosen because this node divides the suspect
 area into two regions of 9 and 6 events each.
-
-last([9, 10], t(10))
-Valid? a
+dd> q
 Diagnosis aborted.
       E3:     C2 EXIT pred info.last/2-0 (semidet)
 mdb> 
@@ -58,64 +49,49 @@
 Valid? n
 last([112, 103, 104, 105, 106, 107, 108], t(108))
 Valid? info
-
 Context of current question : info.m:43 (info.m:45)
 Search mode                 : top down             
 Number of suspect events    : 24                   
 The current question was chosen because this is the next node in the
 top-down search.
-
-last([112, 103, 104, 105, 106, 107, 108], t(108))
-Valid? b 2
+dd> b 2
 browser> mark
 last([108], t(108))
 Valid? info
-
 Context of current question : info.m:43 (info.m:45)
 Search mode                 : binary search on path
 Number of suspect events    : 21                   
 The current question was chosen because the marked subterm was bound by
 the unification inside the predicate info.last/2 (info.m:43). The path
 to the subterm in the atom is 2.
-
-last([108], t(108))
-Valid? y
+dd> y
 last([104, 105, 106, 107, 108], t(108))
 Valid? info
-
 Context of current question : info.m:43 (info.m:45)
 Search mode                 : binary search on path
 Number of suspect events    : 18                   
 The current question was chosen because this node divides a path of
 length 6 into two paths of length 3 and 3.
-
-last([104, 105, 106, 107, 108], t(108))
-Valid? n
+dd> n
 last([106, 107, 108], t(108))
 Valid? info
-
 Context of current question : info.m:43 (info.m:45)
 Search mode                 : binary search on path
 Number of suspect events    : 12                   
 The current question was chosen because this node divides a path of
 length 3 into two paths of length 1 and 2.
-
-last([106, 107, 108], t(108))
-Valid? b 1
+dd> b 1
 browser> cd 1
 browser> mark
 last([105, 106, 107, 108], t(108))
 Valid? info
-
 Context of current question : info.m:43 (info.m:45)
 Search mode                 : binary search on path
 Number of suspect events    : 6                    
 The current question was chosen because tracking of the marked subterm
 was stopped here, because the binding node lies in a portion of the tree
 which has been eliminated.
-
-last([105, 106, 107, 108], t(108))
-Valid? a
+dd> q
 Diagnosis aborted.
       E5:     C3 EXIT pred info.last/2-0 (semidet)
 mdb> break q
@@ -133,16 +109,13 @@
 browser> mark
 f(0, "lala") = t(t(t("lala")))
 Valid? info
-
 Context of current question : info.m:51 (info.m:34)
 Search mode                 : binary search on path
 Number of suspect events    : 6                    
 The current question was chosen because the marked subterm was bound by
 the unification inside the function info.f/3 (info.m:52). The path to
 the subterm in the atom is 3/1/1.
-
-f(0, "lala") = t(t(t("lala")))
-Valid? a
+dd> q
 Diagnosis aborted.
       E7:     C4 EXIT pred info.q/4-0 (det)
 mdb> 
@@ -155,30 +128,24 @@
 browser> mark
 fproc(1) = 2
 Valid? info
-
 Context of current question : info.m:57 (info.m:37)
 Search mode                 : binary search on path
 Number of suspect events    : 6                    
 The current question was chosen because the marked subterm was bound by
 the foreign procedure call inside the function info.fproc/2 (info.m:57).
 The path to the subterm in the atom is 2.
-
-fproc(1) = 2
-Valid? n
+dd> n
 Found incorrect contour:
 fproc(1) = 2
 Is this a bug? n
 fproc(1) = 2
 Valid? [no] info
-
 Context of current question : info.m:57 (info.m:37)
 Search mode                 : top down             
 Number of suspect events    : 6                    
 The current question was chosen because this node is being revised,
 because of an unsuccessful previous bug search.
-
-fproc(1) = 2
-Valid? [no] a
+dd> q
 Diagnosis aborted.
       E9:     C5 EXIT pred info.q/4-0 (det)
 mdb> quit -y
Index: tests/debugger/declarative/info.inp
===================================================================
RCS file: /home/mercury1/repository/tests/debugger/declarative/info.inp,v
retrieving revision 1.2
diff -u -b -r1.2 info.inp
--- tests/debugger/declarative/info.inp	11 Apr 2005 06:43:35 -0000	1.2
+++ tests/debugger/declarative/info.inp	30 Apr 2005 07:26:22 -0000
@@ -11,7 +11,7 @@
 info
 n
 info
-a
+q
 
 f
 dd
@@ -28,7 +28,7 @@
 cd 1
 mark
 info
-a
+q
 break q
 c
 delete *
@@ -38,7 +38,7 @@
 cd 1/1
 mark
 info
-a
+q
 
 f
 dd
@@ -48,5 +48,5 @@
 n
 n
 info
-a
+q
 quit -y
Index: tests/debugger/declarative/io_stream_test.exp
===================================================================
RCS file: /home/mercury1/repository/tests/debugger/declarative/io_stream_test.exp,v
retrieving revision 1.5
diff -u -b -r1.5 io_stream_test.exp
--- tests/debugger/declarative/io_stream_test.exp	6 Jan 2005 03:20:12 -0000	1.5
+++ tests/debugger/declarative/io_stream_test.exp	30 Apr 2005 09:18:24 -0000
@@ -25,11 +25,9 @@
 Valid? print 1-2
 stream(0, input, text, file("tabled_read_decl.data"))
 1456
-test(stream(0, input, text, file("tabled_read_decl.data")), 1456, _, _)
-Valid? p io 1-2
+dd> p io 1-2
 No such IO action.
-test(stream(0, input, text, file("tabled_read_decl.data")), 1456, _, _)
-Valid? no
+dd> no
 test_2(stream(0, input, text, file("tabled_read_decl.data")), 1, 1456, _, _)
 Valid? yes
 Found incorrect contour:
Index: tests/debugger/declarative/io_stream_test.exp2
===================================================================
RCS file: /home/mercury1/repository/tests/debugger/declarative/io_stream_test.exp2,v
retrieving revision 1.6
diff -u -b -r1.6 io_stream_test.exp2
--- tests/debugger/declarative/io_stream_test.exp2	6 Apr 2005 01:11:31 -0000	1.6
+++ tests/debugger/declarative/io_stream_test.exp2	30 Apr 2005 12:01:27 -0000
@@ -30,22 +30,10 @@
 Valid? print 1-2
 stream(0, input, text, file("tabled_read_decl.data"))
 1123
-test(stream(0, input, text, file("tabled_read_decl.data")), 1123, _, _)
-4 tabled IO actions:
+dd> p io 1-2
 read_char_code(stream(0, input, text, file("tabled_read_decl.data")), 49)
 read_char_code(stream(0, input, text, file("tabled_read_decl.data")), 50)
-read_char_code(stream(0, input, text, file("tabled_read_decl.data")), 51)
-read_char_code(stream(0, input, text, file("tabled_read_decl.data")), 10)
-Valid? p io 1-2
-read_char_code(stream(0, input, text, file("tabled_read_decl.data")), 49)
-read_char_code(stream(0, input, text, file("tabled_read_decl.data")), 50)
-test(stream(0, input, text, file("tabled_read_decl.data")), 1123, _, _)
-4 tabled IO actions:
-read_char_code(stream(0, input, text, file("tabled_read_decl.data")), 49)
-read_char_code(stream(0, input, text, file("tabled_read_decl.data")), 50)
-read_char_code(stream(0, input, text, file("tabled_read_decl.data")), 51)
-read_char_code(stream(0, input, text, file("tabled_read_decl.data")), 10)
-Valid? no
+dd> no
 test_2(stream(0, input, text, file("tabled_read_decl.data")), 1, 1123, _, _)
 4 tabled IO actions:
 read_char_code(stream(0, input, text, file("tabled_read_decl.data")), 49)
Index: tests/debugger/declarative/mapinit.exp
===================================================================
RCS file: /home/mercury1/repository/tests/debugger/declarative/mapinit.exp,v
retrieving revision 1.2
diff -u -b -r1.2 mapinit.exp
--- tests/debugger/declarative/mapinit.exp	16 Dec 2004 00:12:40 -0000	1.2
+++ tests/debugger/declarative/mapinit.exp	30 Apr 2005 09:18:44 -0000
@@ -7,7 +7,7 @@
       E3:     C2 EXIT pred mapinit.xmap_init/1-0 (det) mapinit.m:37 (mapinit.m:29)
 mdb> dd
 xmap_init(empty)
-Valid? a
+Valid? q
 Diagnosis aborted.
       E3:     C2 EXIT pred mapinit.xmap_init/1-0 (det) mapinit.m:37 (mapinit.m:29)
 mdb> c
Index: tests/debugger/declarative/mapinit.inp
===================================================================
RCS file: /home/mercury1/repository/tests/debugger/declarative/mapinit.inp,v
retrieving revision 1.2
diff -u -b -r1.2 mapinit.inp
--- tests/debugger/declarative/mapinit.inp	16 Dec 2004 00:12:40 -0000	1.2
+++ tests/debugger/declarative/mapinit.inp	30 Apr 2005 07:26:22 -0000
@@ -2,5 +2,5 @@
 step
 finish
 dd
-a
+q
 c
Index: tests/debugger/declarative/output_term_dep.exp
===================================================================
RCS file: /home/mercury1/repository/tests/debugger/declarative/output_term_dep.exp,v
retrieving revision 1.10
diff -u -b -r1.10 output_term_dep.exp
--- tests/debugger/declarative/output_term_dep.exp	27 Jan 2005 02:38:59 -0000	1.10
+++ tests/debugger/declarative/output_term_dep.exp	30 Apr 2005 09:20:07 -0000
@@ -140,7 +140,7 @@
 Valid? browse 2
 browser> mark
 sa(7)
-Valid? abort
+Valid? quit
 Diagnosis aborted.
      E15:     C8 EXIT pred output_term_dep.s/3-0 (nondet)
 mdb> continue
@@ -152,7 +152,7 @@
 Valid? browse 3
 browser> mark
 sc(155)
-Valid? abort
+Valid? quit
 Diagnosis aborted.
      E17:     C8 EXIT pred output_term_dep.s/3-0 (nondet)
 mdb> continue
@@ -164,7 +164,7 @@
 Valid? browse 3
 browser> mark
 sa(7)
-Valid? abort
+Valid? quit
 Diagnosis aborted.
      E19:     C8 EXIT pred output_term_dep.s/3-0 (nondet)
 mdb> continue
@@ -176,7 +176,7 @@
 Valid? browse 3
 browser> mark
 sc(155)
-Valid? abort
+Valid? quit
 Diagnosis aborted.
      E21:     C8 EXIT pred output_term_dep.s/3-0 (nondet)
 mdb> continue
Index: tests/debugger/declarative/output_term_dep.inp
===================================================================
RCS file: /home/mercury1/repository/tests/debugger/declarative/output_term_dep.inp,v
retrieving revision 1.3
diff -u -b -r1.3 output_term_dep.inp
--- tests/debugger/declarative/output_term_dep.inp	30 Apr 2002 10:12:44 -0000	1.3
+++ tests/debugger/declarative/output_term_dep.inp	30 Apr 2005 07:26:22 -0000
@@ -60,25 +60,25 @@
 dd
 browse 2
 mark
-abort
+quit
 continue
 finish
 dd
 browse 3
 mark
-abort
+quit
 continue
 finish
 dd
 browse 3
 mark
-abort
+quit
 continue
 finish
 dd
 browse 3
 mark
-abort
+quit
 continue
 finish
 continue
Index: tests/debugger/declarative/resume.exp
===================================================================
RCS file: /home/mercury1/repository/tests/debugger/declarative/resume.exp,v
retrieving revision 1.1
diff -u -b -r1.1 resume.exp
--- tests/debugger/declarative/resume.exp	2 Mar 2005 01:20:21 -0000	1.1
+++ tests/debugger/declarative/resume.exp	30 Apr 2005 09:20:23 -0000
@@ -29,7 +29,7 @@
       E6:     C4 CALL pred resume.wrapper/6-0 (semidet)
 mdb> dd -r
 l([3, 4, 5]) = 5
-Valid? a
+Valid? q
 Diagnosis aborted.
       E6:     C4 CALL pred resume.wrapper/6-0 (semidet)
 mdb> dd -r
Index: tests/debugger/declarative/resume.inp
===================================================================
RCS file: /home/mercury1/repository/tests/debugger/declarative/resume.inp,v
retrieving revision 1.1
diff -u -b -r1.1 resume.inp
--- tests/debugger/declarative/resume.inp	2 Mar 2005 01:20:22 -0000	1.1
+++ tests/debugger/declarative/resume.inp	30 Apr 2005 07:26:22 -0000
@@ -14,7 +14,7 @@
 c
 retry
 dd -r
-a
+q
 dd -r
 pd
 print
Index: tests/debugger/declarative/skip.exp
===================================================================
RCS file: /home/mercury1/repository/tests/debugger/declarative/skip.exp,v
retrieving revision 1.2
diff -u -b -r1.2 skip.exp
--- tests/debugger/declarative/skip.exp	6 Jan 2005 03:20:13 -0000	1.2
+++ tests/debugger/declarative/skip.exp	30 Apr 2005 09:20:36 -0000
@@ -81,7 +81,7 @@
       E9:     C6 EXIT pred skip.c/2-0 (det)
 mdb> dd
 c(72, 72)
-Valid? [no] a
+Valid? [no] q
 Diagnosis aborted.
       E9:     C6 EXIT pred skip.c/2-0 (det)
 mdb> break a
Index: tests/debugger/declarative/skip.inp
===================================================================
RCS file: /home/mercury1/repository/tests/debugger/declarative/skip.inp,v
retrieving revision 1.1
diff -u -b -r1.1 skip.inp
--- tests/debugger/declarative/skip.inp	19 Nov 2004 11:54:41 -0000	1.1
+++ tests/debugger/declarative/skip.inp	30 Apr 2005 07:26:22 -0000
@@ -37,7 +37,7 @@
 y
 y
 dd
-a
+q
 break a
 c
 retry
Index: tests/debugger/declarative/tabled_read_decl.exp
===================================================================
RCS file: /home/mercury1/repository/tests/debugger/declarative/tabled_read_decl.exp,v
retrieving revision 1.13
diff -u -b -r1.13 tabled_read_decl.exp
--- tests/debugger/declarative/tabled_read_decl.exp	6 Apr 2005 01:11:31 -0000	1.13
+++ tests/debugger/declarative/tabled_read_decl.exp	30 Apr 2005 09:45:16 -0000
@@ -25,47 +25,21 @@
 Valid? print 1-2
 '<<c_pointer>>'
 1123
-test('<<c_pointer>>', 1123, _, _)
-4 tabled IO actions:
+dd> p io 1-2
 read_char_code('<<c_pointer>>', 49)
 read_char_code('<<c_pointer>>', 50)
-read_char_code('<<c_pointer>>', 51)
-read_char_code('<<c_pointer>>', 10)
-Valid? p io 1-2
-read_char_code('<<c_pointer>>', 49)
-read_char_code('<<c_pointer>>', 50)
-test('<<c_pointer>>', 1123, _, _)
-4 tabled IO actions:
-read_char_code('<<c_pointer>>', 49)
-read_char_code('<<c_pointer>>', 50)
-read_char_code('<<c_pointer>>', 51)
-read_char_code('<<c_pointer>>', 10)
-Valid? print io 2-1
+dd> print io 2-1
 read_char_code('<<c_pointer>>', 49)
 read_char_code('<<c_pointer>>', 50)
-test('<<c_pointer>>', 1123, _, _)
-4 tabled IO actions:
-read_char_code('<<c_pointer>>', 49)
-read_char_code('<<c_pointer>>', 50)
-read_char_code('<<c_pointer>>', 51)
-read_char_code('<<c_pointer>>', 10)
-Valid? browse io 4
+dd> browse io 4
 browser> print
 read_char_code('<<c_pointer>>', 10)
 browser> set num_io_actions 3
 browser> quit
-test('<<c_pointer>>', 1123, _, _)
-4 tabled IO actions: too many to show
-Valid? browse 1
+dd> browse 1
 browser> set num_io_actions 10
 browser> quit
-test('<<c_pointer>>', 1123, _, _)
-4 tabled IO actions:
-read_char_code('<<c_pointer>>', 49)
-read_char_code('<<c_pointer>>', 50)
-read_char_code('<<c_pointer>>', 51)
-read_char_code('<<c_pointer>>', 10)
-Valid? no
+dd> no
 test_2('<<c_pointer>>', 1, 1123, _, _)
 4 tabled IO actions:
 read_char_code('<<c_pointer>>', 49)
Index: trace/mercury_trace_declarative.c
===================================================================
RCS file: /home/mercury1/repository/mercury/trace/mercury_trace_declarative.c,v
retrieving revision 1.85
diff -u -b -r1.85 mercury_trace_declarative.c
--- trace/mercury_trace_declarative.c	13 Apr 2005 03:50:55 -0000	1.85
+++ trace/mercury_trace_declarative.c	30 Apr 2005 03:30:40 -0000
@@ -44,6 +44,7 @@
 
 #include "mercury_trace.h"
 #include "mercury_trace_browse.h"
+#include "mercury_trace_help.h"
 #include "mercury_trace_internal.h"
 #include "mercury_trace_tables.h"
 #include "mercury_trace_util.h"
@@ -1346,6 +1347,7 @@
 			MR_trace_node_store = 0;
 			MR_DD_decl_diagnosis_state_init(&mdb_in, &mdb_out,
 				MR_trace_browser_persistent_state,
+				MR_trace_help_system,
 				&MR_trace_front_end_state);
 		);
 		done = MR_TRUE;
Index: trace/mercury_trace_help.c
===================================================================
RCS file: /home/mercury1/repository/mercury/trace/mercury_trace_help.c,v
retrieving revision 1.24
diff -u -b -r1.24 mercury_trace_help.c
--- trace/mercury_trace_help.c	28 Jan 2005 02:47:42 -0000	1.24
+++ trace/mercury_trace_help.c	30 Apr 2005 08:21:31 -0000
@@ -41,7 +41,7 @@
 
 #include <stdio.h>
 
-static  MR_Word     MR_trace_help_system;
+MR_Word             MR_trace_help_system;
 static  MR_TypeInfo MR_trace_help_system_type;
 
 static  const char  *MR_trace_help_add_node(MR_Word path, const char *name,
Index: trace/mercury_trace_help.h
===================================================================
RCS file: /home/mercury1/repository/mercury/trace/mercury_trace_help.h,v
retrieving revision 1.2
diff -u -b -r1.2 mercury_trace_help.h
--- trace/mercury_trace_help.h	6 Mar 2002 14:35:03 -0000	1.2
+++ trace/mercury_trace_help.h	30 Apr 2005 03:30:08 -0000
@@ -16,6 +16,12 @@
 #include "mercury_trace_completion.h"
 
 /*
+** This global keeps a reference to the help system.
+*/
+
+extern  MR_Word     	MR_trace_help_system;
+
+/*
 ** These function add a help node, which must a category or an item
 ** within a category. It returns NULL if the addition was successful,
 ** and a pointer to an error message otherwise.
--------------------------------------------------------------------------
mercury-reviews mailing list
post:  mercury-reviews at cs.mu.oz.au
administrative address: owner-mercury-reviews at cs.mu.oz.au
unsubscribe: Address: mercury-reviews-request at cs.mu.oz.au Message: unsubscribe
subscribe:   Address: mercury-reviews-request at cs.mu.oz.au Message: subscribe
--------------------------------------------------------------------------



More information about the reviews mailing list