[m-rev.] For review: Trust standard library

Julien Fischer juliensf at cs.mu.OZ.AU
Wed Nov 10 17:30:41 AEDT 2004


On Wed, 10 Nov 2004, Ian MacLarty wrote:

> For review by anyone.
>
> Estimated hours taken: 4
> Branches: main
>
> Trust modules in the Mercury standard library by default in the declarative
> debugger.
>
> Make trusted object id's returned by `trusted' command persistent. Previously
> each trusted object was identified by its position in the ordered list of
> trusted objects.  This meant that if an object was removed all objects after
> the removed object would have their ids decremented, so the user would have to
> issue a new `trusted' command everytime they wished to remove an object to
> confirm the id.

That last sentence is a little unclear.

>  The behaviour is now consistent with the behaviour of
> breakpoint ids which keep their id for the life of the breakpoint.
>
> Fix generation of online documentation for declarative debugger mdb commands.
>
The log message should mention what was wrong with it.

> browser/declarative_debugger.m
> 	Add and export predicate to add the standard library to the set of
> 	trusted objects.
>
> browser/declarative_oracle.m
> 	Add predicate to add the standard library to the set of trusted
> 	objects.
>
> 	Use bimap to represent set of trusted objects along with each object's
> 	id (we need to look up objects both ways).
>
I suggest changing that to "Use a bimap to ..."

> 	Adjust comment formatting to conform to standard.
>
> 	Rename trusted_module_or_predicate type to trusted_object.  Add
> 	constructor for standard_library to trusted_object type.  Include
> 	standard library when initialising the set of trusted objects.
>
> 	Change predicates adding or removing trusted objects to use new
> 	persistent object id.
>
> 	If a module belongs to the standard library and the standard library
> 	is trusted then trust the module.
>
> compiler/mlds.m
> 	Import library module since since mercury_std_library_module/1 now
> 	resides there.
>
Shift the message for compiler/mlds.m to after the next one.

> compiler/modules.m
> library/library.m
> 	Move definition of mercury_std_library_module/1 from modules.m to
> 	library.m so it can be used by the debugger.  Adjust comment
> 	accordingly.
>
> doc/generate_mdb_doc
> 	Generate declarative debugger commands documentation.
>
> doc/user_guide.texi
> 	Document `trust std lib' command.  Move mdb declarative debugging
> 	commands to their own section.
>
> tests/debugger/declarative/catch.exp2
> tests/debugger/declarative/catch.exp3
> tests/debugger/declarative/catch.inp2
> tests/debugger/declarative/solutions.exp2
> tests/debugger/declarative/solutions.inp2
> 	Untrust the standard library for these tests.
>
> tests/debugger/declarative/trust.inp
> tests/debugger/declarative/trust.exp
> 	Update test to reflect persistent trusted object ids and trusting of
> 	standard library.
>
> trace/mercury_trace_declarative.c
> trace/mercury_trace_declarative.h
> 	Add function to trust the standard library.
>
> trace/mercury_trace_internal.c
> 	Allow user to trust the standard library by issuing a `trust std lib'
> 	command.
>
> Index: browser/declarative_debugger.m
> ===================================================================
> RCS file: /home/mercury1/repository/mercury/browser/declarative_debugger.m,v
> retrieving revision 1.40
> diff -u -r1.40 declarative_debugger.m
> --- browser/declarative_debugger.m	25 Oct 2004 05:30:17 -0000	1.40
> +++ browser/declarative_debugger.m	8 Nov 2004 03:54:04 -0000
> @@ -555,6 +555,17 @@
>  		Oracle),
>  	!:Diagnoser = !.Diagnoser ^ oracle_state := Oracle.
>
> +:- pred trust_standard_library(diagnoser_state(trace_node_id)::in,
> +	diagnoser_state(trace_node_id)::out) is det.
> +
> +:- pragma export(mdb.declarative_debugger.trust_standard_library(in, out),
> +	"MR_DD_decl_trust_standard_library").
> +
> +trust_standard_library(!Diagnoser) :-
> +	declarative_oracle.trust_standard_library(!.Diagnoser ^ oracle_state,
> +		Oracle),
> +	!:Diagnoser = !.Diagnoser ^ oracle_state := Oracle.
> +
>  :- pred remove_trusted(int::in, diagnoser_state(trace_node_id)::in,
>  	diagnoser_state(trace_node_id)::out) is semidet.
>
> Index: browser/declarative_oracle.m
> ===================================================================
> RCS file: /home/mercury1/repository/mercury/browser/declarative_oracle.m,v
> retrieving revision 1.27
> diff -u -r1.27 declarative_oracle.m
> --- browser/declarative_oracle.m	25 Oct 2004 05:30:18 -0000	1.27
> +++ browser/declarative_oracle.m	9 Nov 2004 07:44:26 -0000
> @@ -62,6 +62,10 @@
>  :- pred add_trusted_pred_or_func(proc_layout::in, oracle_state::in,
>  	oracle_state::out) is det.
>
> +	% Trust all the modules in the Mercury standard library.
> +	%
> +:- pred trust_standard_library(oracle_state::in, oracle_state::out) is det.
> +
>  	% remove_trusted(N, !Oracle).
>  	% Removes the (N-1)th trusted object from the set of trusted objects.
>  	% Fails if there are fewer than N-1 trusted modules (or N < 0).
> @@ -116,7 +120,8 @@
>  :- import_module mdb__set_cc.
>  :- import_module mdb__util.
>
> -:- import_module bool, std_util, set, int.
> +:- import_module map, bool, std_util, set, int, bimap, counter, assoc_list.
> +:- import_module library.
>
>  query_oracle(Questions, Response, Oracle0, Oracle) -->
>  	{ query_oracle_list(Oracle0, Questions, Answers) },
> @@ -208,51 +213,71 @@
>  	).
>
>  %-----------------------------------------------------------------------------%
> -
> +
>  :- type oracle_state
>  	--->	oracle(
> -			kb_current	:: oracle_kb,
>  				% Current information about the intended
>  				% interpretation.  These answers have been
>  				% given, but have not since been revised.
> +			kb_current	:: oracle_kb,
>
> -			kb_revised	:: oracle_kb,
>  				% Old information about the intended
>  				% interpretation.  These answers were given
>  				% and subsequently revised, but new answers
>  				% to the questions have not yet been given.
> +			kb_revised	:: oracle_kb,
>
> -			user_state	:: user_state,
>  				% User interface.
> +			user_state	:: user_state,
>
> -			trusted :: set(trusted_module_or_predicate)
>  				% Modules and predicates/functions trusted
> -				% by the oracle.
> +				% by the oracle. The second argument is an
> +				% id used to identify an object to remove.
> +			trusted		:: bimap(trusted_object, int),
> +
> +				% Counter to allocate ids to trusted objects
> +			trusted_id_counter	:: counter
>  		).
>
>  oracle_state_init(InStr, OutStr, Browser, Oracle) :-
>  	oracle_kb_init(Current),
>  	oracle_kb_init(Old),
>  	user_state_init(InStr, OutStr, Browser, User),
> -	set.init(TrustedModules),
> -	Oracle = oracle(Current, Old, User, TrustedModules).
> +	% Trust the standard library by default.
> +	bimap.set(bimap.init, standard_library, 0, Trusted),
> +	counter.init(1, Counter),
> +	Oracle = oracle(Current, Old, User, Trusted, Counter).
>
>  %-----------------------------------------------------------------------------%
>
> -:- type trusted_module_or_predicate
> -	--->	all(string) % all predicates/functions in a module
> -	;	specific(
> -			pred_or_func,
> +:- type trusted_object
> +	--->	module(string) % all predicates/functions in a module
> +	;	predicate(
>  			string,		% module name
> -			string,		% pred or func name
> +			string,		% pred name
>  			int		% arity
> -		).
> +		)
> +	;	function(
> +			string,		% module name
> +			string,		% function name
> +			int		% arity including return value
> +		)
> +	;	standard_library.
>
>  add_trusted_module(ModuleName, !Oracle) :-
> -	insert(!.Oracle ^ trusted, all(ModuleName), Trusted),
> -	!:Oracle = !.Oracle ^ trusted := Trusted.
> +	counter.allocate(Id, !.Oracle ^ trusted_id_counter, Counter),
> +	(
> +		bimap.insert(!.Oracle ^ trusted, module(ModuleName), Id,
> +			Trusted)
> +	->
> +		!:Oracle = !.Oracle ^ trusted := Trusted,
> +		!:Oracle = !.Oracle ^ trusted_id_counter := Counter
> +	;
> +		true
> +	).
>
>  add_trusted_pred_or_func(ProcLayout, !Oracle) :-
> +	counter.allocate(Id, !.Oracle ^ trusted_id_counter, Counter),
>  	ProcId = get_proc_id_from_layout(ProcLayout),
>  	(
>  		ProcId = proc(ModuleName, PredOrFunc, _, Name, Arity, _)
> @@ -260,71 +285,80 @@
>  		ProcId = uci_proc(ModuleName, _, _, Name, Arity, _),
>  		PredOrFunc = predicate
>  	),
> -	insert(!.Oracle ^ trusted, specific(PredOrFunc, ModuleName, Name,
> -		Arity), Trusted),
> -	!:Oracle = !.Oracle ^ trusted := Trusted.
> -
> -remove_trusted(N, !Oracle) :-
> -	TrustedList = to_sorted_list(!.Oracle ^ trusted),
> -	index0(TrustedList, N, ObjectToDelete),
> -	delete_all(TrustedList, ObjectToDelete, NewTrustedList),
> -	!:Oracle = !.Oracle ^ trusted := sorted_list_to_set(NewTrustedList).
> -
> -get_trusted_list(Oracle, CommandFormat, List) :-
> -	Trusted = to_sorted_list(Oracle ^ trusted),
>  	(
> -		CommandFormat = yes,
> -		foldl(format_trust_command, Trusted, "", List)
> -	;
> -		CommandFormat = no,
> -		foldl(format_trust_display, Trusted, {0, "Trusted Objects:\n"},
> -			{I, List0}),
>  		(
> -			I = 0
> -		->
> -			List = "There are no trusted modules, predicates "++
> -				"or functions.\n"
> +			PredOrFunc = predicate,
> +			bimap.insert(!.Oracle ^ trusted, predicate(ModuleName,
> +				Name, Arity), Id, Trusted)
>  		;
> -			List = List0
> +			PredOrFunc = function,
> +			bimap.insert(!.Oracle ^ trusted, function(ModuleName,
> +				Name, Arity), Id, Trusted)
>  		)
> +	->
> +		!:Oracle = !.Oracle ^ trusted := Trusted,
> +		!:Oracle = !.Oracle ^ trusted_id_counter := Counter
> +	;
> +		true
>  	).
>
> -:- pred format_trust_command(trusted_module_or_predicate::in, string::in,
> -	string::out) is det.
> -
> -format_trust_command(all(ModuleName), S, S++"trust "++ModuleName++"\n").
> -format_trust_command(specific(PredOrFunc, ModuleName, Name, Arity), S,
> -		S++Command) :-
> +trust_standard_library(!Oracle) :-
> +	counter.allocate(Id, !.Oracle ^ trusted_id_counter, Counter),
>  	(
> -		PredOrFunc = predicate,
> -		PredOrFuncStr = "pred*",
> -		ArityStr = int_to_string(Arity)
> -	;
> -		PredOrFunc = function,
> -		PredOrFuncStr = "func*",
> -		ArityStr = int_to_string(Arity - 1)
> -	),
> -	Command = "trust "++PredOrFuncStr++ModuleName++"."++Name++"/"++
> -		ArityStr++ "\n".
> -
> -:- pred format_trust_display(trusted_module_or_predicate::in, {int,string}::in,
> -	{int,string}::out) is det.
> +		bimap.insert(!.Oracle ^ trusted, standard_library, Id,
> +			Trusted)
> +	->
> +		!:Oracle = !.Oracle ^ trusted_id_counter := Counter,
> +		!:Oracle = !.Oracle ^ trusted := Trusted
> +	;
> +		true
> +	).
>
> -format_trust_display(all(ModuleName), {I, S},
> -	{I + 1, S++int_to_string(I)++": module "++ModuleName++"\n"}).
> -format_trust_display(specific(PredOrFunc, ModuleName, Name, Arity), {I, S},
> -		{I + 1, S++Display}) :-
> +remove_trusted(Id, !Oracle) :-
> +	bimap.search(!.Oracle ^ trusted, _, Id),
> +	bimap.delete_value(Id, !.Oracle ^ trusted, Trusted),
> +	!:Oracle = !.Oracle ^ trusted := Trusted.
> +
> +get_trusted_list(Oracle, yes, CommandsStr) :-
> +	TrustedObjects = bimap.ordinates(Oracle ^ trusted),
> +	list.foldl(format_trust_command, TrustedObjects, "", CommandsStr).
> +get_trusted_list(Oracle, no, DisplayStr) :-
> +	IdToObjectMap = bimap.reverse_map(Oracle ^ trusted),
> +	map.foldl(format_trust_display, IdToObjectMap, "", DisplayStr0),
>  	(
> -		PredOrFunc = predicate,
> -		PredOrFuncStr = "pred",
> -		ArityStr = int_to_string(Arity)
> -	;
> -		PredOrFunc = function,
> -		PredOrFuncStr = "func",
> -		ArityStr = int_to_string(Arity - 1)
> -	),
> -	Display = int_to_string(I)++": "++PredOrFuncStr++" "++ModuleName++"."++
> -		Name++"/"++ArityStr++"\n".
> +		DisplayStr0 = ""
> +	->
> +		DisplayStr = "There are no trusted modules, predicates "++
> +			"or functions.\n"
> +	;
> +		DisplayStr = "Trusted Objects:\n" ++ DisplayStr0
> +	).
> +
> +:- pred format_trust_command(trusted_object::in, string::in,
> +	string::out) is det.
> +
> +format_trust_command(module(ModuleName), S, S++"trust "++ModuleName++"\n").
> +format_trust_command(predicate(ModuleName, Name, Arity), S, S++Command) :-
> +	ArityStr = int_to_string(Arity),
> +	Command = "trust pred*"++ModuleName++"."++Name++"/"++ ArityStr++"\n".
> +format_trust_command(function(ModuleName, Name, Arity), S, S++Command) :-
> +	ArityStr = int_to_string(Arity - 1),
> +	Command = "trust func*"++ModuleName++"."++Name++"/"++ ArityStr++"\n".
> +format_trust_command(standard_library, S, S++"trust std lib\n").
>
I'd leave some space around the ++ operator there. (And elsewhere in this
diff).

 +
> +:- pred format_trust_display(int::in, trusted_object::in, string::in,
> +	string::out) is det.
> +
> +format_trust_display(Id, module(ModuleName), S, S++Display) :-
> +	Display = int_to_string(Id)++ ": module "++ ModuleName++"\n".
> +format_trust_display(Id, predicate(ModuleName, Name, Arity), S, S++Display) :-
> +	Display = int_to_string(Id)++": predicate "++ModuleName++"."++
> +		Name++"/"++int_to_string(Arity)++"\n".
> +format_trust_display(Id, function(ModuleName, Name, Arity), S, S++Display) :-
> +	Display = int_to_string(Id)++": function "++ModuleName++"."++
> +		Name++"/"++int_to_string(Arity - 1)++"\n".
> +format_trust_display(Id, standard_library, S, S++Display) :-
> +	Display = int_to_string(Id)++": the Mercury standard library\n".
>
>  %-----------------------------------------------------------------------------%
>
> @@ -441,14 +475,22 @@
>  :- pred trusted(proc_layout::in, oracle_state::in) is semidet.
>
>  trusted(ProcLayout, Oracle) :-
> +	Trusted = Oracle ^ trusted,
>  	ProcId = get_proc_id_from_layout(ProcLayout),
>  	(
>  		ProcId = proc(Module, PredOrFunc, _, Name, Arity, _),
>  		(
> -			set.member(all(Module), Oracle ^ trusted)
> +			bimap.search(Trusted, standard_library, _),
> +			mercury_std_library_module(Module)
> +		;
> +			bimap.search(Trusted, module(Module), _)
> +		;
> +			PredOrFunc = predicate,
> +			bimap.search(Trusted, predicate(Module, Name, Arity),
> +				_)
>  		;
> -			set.member(specific(PredOrFunc, Module, Name, Arity),
> -				Oracle ^ trusted)
> +			PredOrFunc = function,
> +			bimap.search(Trusted, function(Module, Name, Arity), _)
>  		)
>  	;
>  		ProcId = uci_proc(_, _, _, _, _, _)
> Index: compiler/mlds.m
> ===================================================================
> RCS file: /home/mercury1/repository/mercury/compiler/mlds.m,v
> retrieving revision 1.115
> diff -u -r1.115 mlds.m
> --- compiler/mlds.m	5 Sep 2004 23:52:25 -0000	1.115
> +++ compiler/mlds.m	8 Nov 2004 01:42:06 -0000
> @@ -1740,7 +1740,7 @@
>  :- import_module parse_tree__error_util.
>  :- import_module parse_tree__modules.
>
> -:- import_module char, int, term, string, require.
> +:- import_module char, int, term, string, require, library.
>
>  %-----------------------------------------------------------------------------%
>
> Index: compiler/modules.m
> ===================================================================
> RCS file: /home/mercury1/repository/mercury/compiler/modules.m,v
> retrieving revision 1.309
> diff -u -r1.309 modules.m
> --- compiler/modules.m	27 Oct 2004 07:41:49 -0000	1.309
> +++ compiler/modules.m	7 Nov 2004 00:56:51 -0000
> @@ -54,11 +54,6 @@
>  	% of the modules in the standard library.
>  :- pred mercury_std_library_module_name(module_name::in) is semidet.
>
> -	% Succeeds iff the string is the (unqualified) name of one of the
> -	% modules in the Mercury standard library.
> -	%
> -:- pred mercury_std_library_module(string::in) is semidet.
> -
>  	% module_name_to_file_name(Module, Extension, Mkdir, FileName):
>  	%	Convert a module name and file extension to the
>  	%	corresponding file name.  If `MkDir' is yes, then
> @@ -797,80 +792,6 @@
>  	mercury_std_library_module(Name).
>  mercury_std_library_module_name(qualified(unqualified("mercury"), Name)) :-
>  	mercury_std_library_module(Name).
> -
> -mercury_std_library_module("array").
> -mercury_std_library_module("array2d").
> -mercury_std_library_module("assoc_list").
> -mercury_std_library_module("bag").
> -mercury_std_library_module("benchmarking").
> -mercury_std_library_module("bimap").
> -mercury_std_library_module("bintree").
> -mercury_std_library_module("bintree_set").
> -mercury_std_library_module("bitmap").
> -mercury_std_library_module("bool").
> -mercury_std_library_module("bt_array").
> -mercury_std_library_module("builtin").
> -mercury_std_library_module("char").
> -mercury_std_library_module("construct").
> -mercury_std_library_module("cord").
> -mercury_std_library_module("counter").
> -mercury_std_library_module("deconstruct").
> -mercury_std_library_module("dir").
> -mercury_std_library_module("enum").
> -mercury_std_library_module("eqvclass").
> -mercury_std_library_module("exception").
> -mercury_std_library_module("float").
> -mercury_std_library_module("gc").
> -mercury_std_library_module("getopt").
> -mercury_std_library_module("graph").
> -mercury_std_library_module("group").
> -mercury_std_library_module("hash_table").
> -mercury_std_library_module("int").
> -mercury_std_library_module("integer").
> -mercury_std_library_module("io").
> -mercury_std_library_module("lexer").
> -mercury_std_library_module("library").
> -mercury_std_library_module("list").
> -mercury_std_library_module("map").
> -mercury_std_library_module("math").
> -mercury_std_library_module("multi_map").
> -mercury_std_library_module("ops").
> -mercury_std_library_module("parser").
> -mercury_std_library_module("pprint").
> -mercury_std_library_module("pqueue").
> -mercury_std_library_module("private_builtin").
> -mercury_std_library_module("profiling_builtin").
> -mercury_std_library_module("prolog").
> -mercury_std_library_module("queue").
> -mercury_std_library_module("random").
> -mercury_std_library_module("rational").
> -mercury_std_library_module("rbtree").
> -mercury_std_library_module("relation").
> -mercury_std_library_module("require").
> -mercury_std_library_module("rtti_implementation").
> -mercury_std_library_module("set").
> -mercury_std_library_module("set_bbbtree").
> -mercury_std_library_module("set_ordlist").
> -mercury_std_library_module("set_unordlist").
> -mercury_std_library_module("sparse_bitset").
> -mercury_std_library_module("stack").
> -mercury_std_library_module("std_util").
> -mercury_std_library_module("store").
> -mercury_std_library_module("string").
> -mercury_std_library_module("table_builtin").
> -mercury_std_library_module("term").
> -mercury_std_library_module("term_io").
> -mercury_std_library_module("term_size_prof_builtin").
> -mercury_std_library_module("time").
> -mercury_std_library_module("tree234").
> -mercury_std_library_module("type_desc").
> -mercury_std_library_module("varset").
> -mercury_std_library_module("version_array").
> -mercury_std_library_module("version_array2d").
> -mercury_std_library_module("version_bitmap").
> -mercury_std_library_module("version_hash_table").
> -mercury_std_library_module("version_store").
> -mercury_std_library_module("version_types").
>
>  module_name_to_search_file_name(ModuleName, Ext, FileName, !IO) :-
>  	module_name_to_file_name(ModuleName, Ext, yes, no, FileName, !IO).
> Index: doc/generate_mdb_doc
> ===================================================================
> RCS file: /home/mercury1/repository/mercury/doc/generate_mdb_doc,v
> retrieving revision 1.7
> diff -u -r1.7 generate_mdb_doc
> --- doc/generate_mdb_doc	6 Nov 2002 02:02:25 -0000	1.7
> +++ doc/generate_mdb_doc	9 Nov 2004 04:22:03 -0000
> @@ -16,11 +16,12 @@
>
>  debug_cmd_path="debug debugger"
>  for section in interactive forward backward browsing breakpoint \
> -	i/o parameter help misc exp developer
> +	i/o parameter help declarative misc exp developer
>  do
>  	case $section in
>  		interactive)	category=queries ;;
>  		i/o)		category=table_io ;;
> +		declarative)	category=dd ;;
>  		*)		category=$section ;;
>  	esac
>  	info -f ./mercury_user_guide.info -o $tmp $debug_cmd_path $section
> Index: doc/user_guide.texi
> ===================================================================
> RCS file: /home/mercury1/repository/mercury/doc/user_guide.texi,v
> retrieving revision 1.396
> diff -u -r1.396 user_guide.texi
> --- doc/user_guide.texi	5 Nov 2004 05:39:07 -0000	1.396
> +++ doc/user_guide.texi	10 Nov 2004 01:48:39 -0000
> @@ -2129,6 +2129,7 @@
>  * I/O tabling commands::
>  * Parameter commands::
>  * Help commands::
> +* Declarative debugging mdb commands::
>  * Miscellaneous commands::
>  * Experimental commands::
>  * Developer commands::
> @@ -3200,6 +3201,48 @@
>  @end table
>
>  @sp 1
> + at node Declarative debugging mdb commands
> + at subsection Declarative debugging mdb commands
> +
> + at sp 1
> + at table @code
> + at item dd
> + at c @item dd [--assume-all-io-is-tabled]
> + at c The --assume-all-io-is-tabled option is for developers only. Specifying it
> + at c makes an assertion, and if the assertion is incorrect, the resulting
> + at c behaviour would be hard for non-developers to understand. The option is
> + at c therefore deliberately not documented.
> +Starts declarative debugging
> +using the current event as the initial symptom.
> +For details, see @ref{Declarative debugging}.
> + at sp 1
> + at item trust @var{module-name}|@var{proc-spec}
> + at kindex trust (mdb command)
> +Tells the declarative debugger to trust the given module, predicate or
> +function.
> + at sp 1
> +Individual predicates or functions can be trusted by just giving the
> +predicate or function name.  If there is more than one predicate or function
> +with the given name then a list of alternatives will be shown.
> + at sp 1
> +The entire Mercury standard library can be trusted by issuing a `trust std lib'
> +command.

You should mention that the standard library is trusted by default here
as well.

> + at sp 1
> +See also `trusted' and `untrust'.
> + at sp 1
> + at item trusted
> + at kindex trusted (mdb command)
> +Lists all the trusted modules, predicates and functions.  See also `trust'
> +and `untrust'.
> + at sp 1
> + at item untrust @var{num}
> + at kindex untrust (mdb command)
> +Removes the object from the list of trusted objects.  @var{num} should
> +correspond with the number shown in the list produced by issuing a `trusted'
> +command.  See also `trust' and `trusted'.
> + at end table
> +
> + at sp 1
>  @node Experimental commands
>  @subsection Experimental commands
>
> @@ -3245,35 +3288,6 @@
>  Saves current set of breakpoints and the current set of aliases
>  in the named file as a set of @samp{break} and @samp{alias} commands.
>  Sourcing the file will recreate the current breakpoints and aliases.
> - at sp 1
> - at item dd
> - at c @item dd [--assume-all-io-is-tabled]
> - at c The --assume-all-io-is-tabled option is for developers only. Specifying it
> - at c makes an assertion, and if the assertion is incorrect, the resulting
> - at c behaviour would be hard for non-developers to understand. The option is
> - at c therefore deliberately not documented.
> -Starts declarative debugging
> -using the current event as the initial symptom.
> -For details, see @ref{Declarative debugging}.
> - at sp 1
> - at item trust [@var{module-name}|@var{proc-spec}]
> - at kindex trust (mdb command)
> -Tells the declarative debugger to trust the given module, predicate or
> -function.  Individual predicates or functions can be trusted by just giving
> -the predicate or function name.  If there is more than one predicate or
> -function with the given name then a list of alternatives will be shown.
> -See also `trusted' and `untrust'.
> - at sp 1
> - at item trusted
> - at kindex trusted (mdb command)
> -Lists all the trusted modules, predicates and functions.  See also `trust'
> -and `untrust'.
> - at sp 1
> - at item untrust @var{num}
> - at kindex untrust (mdb command)
> -Removes the object from the list of trusted objects.  @var{num} should
> -correspond with the number shown the the list produced by issuing a `trusted'
> -command.  See also `trust' and `trusted'.
>  @sp 1
>  @item quit [-y]
>  @kindex quit (mdb command)
> Index: library/library.m
> ===================================================================
> RCS file: /home/mercury1/repository/mercury/library/library.m,v
> retrieving revision 1.74
> diff -u -r1.74 library.m
> --- library/library.m	27 Sep 2004 00:44:43 -0000	1.74
> +++ library/library.m	8 Nov 2004 02:48:33 -0000
> @@ -18,14 +18,18 @@
>
>  :- pred library__version(string::out) is det.
>
> +	% Succeeds iff the string is the (unqualified) name of one of the
> +	% modules in the Mercury standard library.
> +	%
> +:- pred mercury_std_library_module(string::in) is semidet.
> +

Move the predicate declaration so that this doesn't get included in the
library reference manual.

>  %---------------------------------------------------------------------------%
>
>  :- implementation.
>
> -% Note: if you add a new module to this list, you must also a new clause
> -% to mercury_std_library_module/1 in compiler/modules.m. Conversely, this
> -% should list all the modules named by mercury_std_library_module, except
> -% library itself.
> +% Note: if you add a new module to this list, you must also a new clause to
> +% mercury_std_library_module/1. Conversely, this should list all the modules
> +% named by mercury_std_library_module, except library itself.
>  %
>  % Please keep both parts of this list in alphabetical order.
>
> @@ -139,6 +143,82 @@
>  	Version = mercury.runtime.Constants.MR_VERSION + "" configured for ""
>  			+ mercury.runtime.Constants.MR_FULLARCH;
>  ").
> +

That's all for now.

Julien.
--------------------------------------------------------------------------
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