[m-rev.] diff: fix warnings from state variable transformation

Zoltan Somogyi zs at cs.mu.OZ.AU
Wed Oct 20 08:16:07 AEST 2004


Fix some annoying warnings caused by the state variable transformation.
They occurred when compiling the source code of elk, my draft parser generator.

compiler/hlds_goal.m:
	Add a goal feature that marks the goal as one that shouldn't have
	singleton warnings generated for it, and document the rationale for it.

	Fix some old XXXs.

compiler/make_hlds.m:
	Respect that flag when looking for singletons.

	Attach the flag to the unifications created to ensure that all branches
	of a branched constrol structure end up with the same version of a
	state variable.

compiler/saved_vars.m:
	Handle the new goal feature.

Zoltan.

cvs diff: Diffing .
cvs diff: Diffing analysis
cvs diff: Diffing bindist
cvs diff: Diffing boehm_gc
cvs diff: Diffing boehm_gc/Mac_files
cvs diff: Diffing boehm_gc/cord
cvs diff: Diffing boehm_gc/cord/private
cvs diff: Diffing boehm_gc/doc
cvs diff: Diffing boehm_gc/include
cvs diff: Diffing boehm_gc/include/private
cvs diff: Diffing boehm_gc/tests
cvs diff: Diffing browser
cvs diff: Diffing bytecode
cvs diff: Diffing compiler
Index: compiler/hlds_goal.m
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/compiler/hlds_goal.m,v
retrieving revision 1.118
diff -u -r1.118 hlds_goal.m
--- compiler/hlds_goal.m	22 Jun 2004 08:54:48 -0000	1.118
+++ compiler/hlds_goal.m	4 Oct 2004 00:32:53 -0000
@@ -166,7 +166,11 @@
 					% The mode of the predicate
 			foreign_args	:: list(foreign_arg),
 			foreign_extra_args :: list(foreign_arg),
-					% XXX
+					% Extra arguments added when compiler
+					% passes such as tabling stuff more
+					% code into a foreign proc than the
+					% declared interface of the called
+					% Mercury procedure would allow.
 			foreign_impl	:: pragma_foreign_code_impl
 					% Extra information for model_non
 					% pragma_foreign_codes; none for others.
@@ -242,8 +246,6 @@
 			arg_type	:: (type)
 		).
 
-	% Some compiler transforms give to XXX
-
 :- func foreign_arg_var(foreign_arg) = prog_var.
 :- func foreign_arg_maybe_name_mode(foreign_arg) = maybe(pair(string, mode)).
 :- func foreign_arg_type(foreign_arg) = (type).
@@ -786,7 +788,7 @@
 				% generated by a tabled procedure.
 	;	tailcall	% This goal represents a tail call. This marker
 				% is used by deep profiling.
-	;	keep_constant_binding.
+	;	keep_constant_binding
 				% This feature should only be attached to
 				% unsafe_cast goals that cast a value of an
 				% user-defined type to an integer. It tells
@@ -794,6 +796,39 @@
 				% is known to be bound to a given constant,
 				% then the second variable should be set
 				% to the corresponding local tag value.
+	;	dont_warn_singleton.
+				% Don't warn about singletons in this goal.
+				% Intended to be used by the state variable
+				% transformation, for situations such as the
+				% following:
+				%
+				% p(X, !.S, ...) :-
+				%	(
+				%		X = a,
+				%		!:S = f(!.S, ...)
+				%	;
+				%		X = b,
+				%		<code A>
+				%	),
+				%	<code B>.
+				%
+				% The state variable transformation creates a
+				% new variable for the new value of !:S in the
+				% disjunction. If code A doesn't define !:S,
+				% the state variable transformation inserts an
+				% unification after it, unifying the variables
+				% representing !.S and !:S. If code B doesn't
+				% refer to S, then quantification will restrict
+				% the scope of the variable representing !:S 
+				% to each disjunct, and the unification
+				% inserted after code A will refer to a
+				% singleton variable.
+				%
+				% Since it is not reasonable to expect the
+				% state variable transformation to do the job
+				% of quantification as well, we simply make it
+				% mark the unifications it creates, and get
+				% the singleton warning code to respect it.
 
 	% We can think of the goal that defines a procedure to be a tree,
 	% whose leaves are primitive goals and whose interior nodes are
Index: compiler/make_hlds.m
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/compiler/make_hlds.m,v
retrieving revision 1.482
diff -u -r1.482 make_hlds.m
--- compiler/make_hlds.m	16 Oct 2004 15:07:32 -0000	1.482
+++ compiler/make_hlds.m	18 Oct 2004 00:54:21 -0000
@@ -5716,8 +5716,8 @@
 		{ quantification__goal_vars(SubGoal, SubGoalVars) },
 		{ goal_info_get_context(GoalInfo, Context) },
 		{ set__init(EmptySet) },
-		warn_singletons(Vars, EmptySet, SubGoalVars, VarSet, Context,
-			PredCallId)
+		warn_singletons(Vars, GoalInfo, EmptySet, SubGoalVars, VarSet,
+			Context, PredCallId)
 	;
 		[]
 	),
@@ -5736,7 +5736,7 @@
 		{ set__union(CondVars, ThenVars, CondThenVars) },
 		{ goal_info_get_context(GoalInfo, Context) },
 		{ set__init(EmptySet) },
-		warn_singletons(Vars, EmptySet, CondThenVars, VarSet,
+		warn_singletons(Vars, GoalInfo, EmptySet, CondThenVars, VarSet,
 			Context, PredCallId)
 	;
 		[]
@@ -5751,16 +5751,16 @@
 		GoalInfo, QuantVars, VarSet, PredCallId, _) -->
 	{ goal_info_get_nonlocals(GoalInfo, NonLocals) },
 	{ goal_info_get_context(GoalInfo, Context) },
-	warn_singletons(Args, NonLocals, QuantVars, VarSet, Context,
+	warn_singletons(Args, GoalInfo, NonLocals, QuantVars, VarSet, Context,
 		PredCallId).
 
 warn_singletons_in_goal_2(generic_call(GenericCall, Args0, _, _),
-			GoalInfo, QuantVars, VarSet, PredCallId, _) -->
+		GoalInfo, QuantVars, VarSet, PredCallId, _) -->
 	{ goal_util__generic_call_vars(GenericCall, Args1) },
 	{ list__append(Args0, Args1, Args) },
 	{ goal_info_get_nonlocals(GoalInfo, NonLocals) },
 	{ goal_info_get_context(GoalInfo, Context) },
-	warn_singletons(Args, NonLocals, QuantVars, VarSet, Context,
+	warn_singletons(Args, GoalInfo, NonLocals, QuantVars, VarSet, Context,
 		PredCallId).
 
 warn_singletons_in_goal_2(unify(Var, RHS, _, _, _),
@@ -5818,14 +5818,14 @@
 		-->
 	{ goal_info_get_nonlocals(GoalInfo, NonLocals) },
 	{ goal_info_get_context(GoalInfo, Context) },
-	warn_singletons([X, Y], NonLocals, QuantVars, VarSet,
+	warn_singletons([X, Y], GoalInfo, NonLocals, QuantVars, VarSet,
 		Context, CallPredId).
 
 warn_singletons_in_unify(X, functor(_ConsId, _, Vars), GoalInfo,
 		QuantVars, VarSet, CallPredId, _) -->
 	{ goal_info_get_nonlocals(GoalInfo, NonLocals) },
 	{ goal_info_get_context(GoalInfo, Context) },
-	warn_singletons([X | Vars], NonLocals, QuantVars, VarSet,
+	warn_singletons([X | Vars], GoalInfo, NonLocals, QuantVars, VarSet,
 		Context, CallPredId).
 
 warn_singletons_in_unify(X, lambda_goal(_Purity, _PredOrFunc, _Eval, _Fix,
@@ -5837,15 +5837,16 @@
 	{ LambdaGoal = _ - LambdaGoalInfo },
 	{ goal_info_get_nonlocals(LambdaGoalInfo, LambdaNonLocals) },
 	{ goal_info_get_context(GoalInfo, Context) },
-	warn_singletons(LambdaVars, LambdaNonLocals, QuantVars, VarSet,
-		Context, CallPredId),
+	warn_singletons(LambdaVars, GoalInfo, LambdaNonLocals, QuantVars,
+		VarSet, Context, CallPredId),
 
 	%
 	% warn if X (the variable we're unifying the lambda expression with)
 	% is singleton
 	%
 	{ goal_info_get_nonlocals(GoalInfo, NonLocals) },
-	warn_singletons([X], NonLocals, QuantVars, VarSet, Context, CallPredId),
+	warn_singletons([X], GoalInfo, NonLocals, QuantVars, VarSet, Context,
+		CallPredId),
 
 	%
 	% warn if the lambda-goal contains singletons
@@ -6056,33 +6057,35 @@
 write_string_list([], !IO).
 write_string_list([X | Xs], !IO) :-
 	io__write_string(X, !IO),
-	( Xs = [] ->
-		true
+	(
+		Xs = []
 	;
+		Xs = [_ | _],
 		io__write_string(", ", !IO),
 		write_string_list(Xs, !IO)
 	).
 
 %-----------------------------------------------------------------------------%
 
-	% warn_singletons(Vars, NonLocals, QuantVars, ...):
+	% warn_singletons(Vars, GoalInfo, NonLocals, QuantVars, ...):
 	% 	Warn if any of the non-underscore variables in Vars don't
 	%	occur in NonLocals and don't have the same name as any variable
 	%	in QuantVars, or if any of the underscore variables
 	%	in Vars do occur in NonLocals.
+	%	Omit the warning if GoalInfo says we should.
 
-:- pred warn_singletons(list(prog_var)::in, set(prog_var)::in,
-	set(prog_var)::in, prog_varset::in, prog_context::in,
-	simple_call_id::in, io::di, io::uo) is det.
+:- pred warn_singletons(list(prog_var)::in, hlds_goal_info::in,
+	set(prog_var)::in, set(prog_var)::in, prog_varset::in,
+	prog_context::in, simple_call_id::in, io::di, io::uo) is det.
 
-warn_singletons(GoalVars, NonLocals, QuantVars, VarSet, Context,
-		PredOrFuncCallId) -->
+warn_singletons(GoalVars, GoalInfo, NonLocals, QuantVars, VarSet, Context,
+		PredOrFuncCallId, !IO) :-
 	% find all the variables in the goal that don't occur outside the
 	% goal (i.e. are singleton), have a variable name that doesn't
 	% start with "_" or "DCG_", and don't have the same name as any
 	% variable in QuantVars (i.e. weren't explicitly quantified).
 
-	{ solutions((pred(Var::out) is nondet :-
+	solutions((pred(Var::out) is nondet :-
 		  	list__member(Var, GoalVars),
 			\+ set__member(Var, NonLocals),
 			varset__search_name(VarSet, Var, Name),
@@ -6092,59 +6095,66 @@
 				set__member(QuantVar, QuantVars),
 				varset__search_name(VarSet, QuantVar, Name)
 			)
-		), SingletonVars) },
+		), SingletonVars),
 
 	% if there were any such variables, issue a warning
 
-	( { SingletonVars = [] } ->
-		[]
+	(
+		(
+			SingletonVars = []
+		;
+			goal_info_has_feature(GoalInfo, dont_warn_singleton)
+		)
+	->
+		true
 	;
-		prog_out__write_context(Context),
-		io__write_string("In clause for "),
-		hlds_out__write_simple_call_id(PredOrFuncCallId),
-		io__write_string(":\n"),
-		prog_out__write_context(Context),
-		( { SingletonVars = [_] } ->
-			io__write_string("  warning: variable `"),
-			mercury_output_vars(SingletonVars, VarSet, no),
-			report_warning("' occurs only once in this scope.\n")
+		prog_out__write_context(Context, !IO),
+		io__write_string("In clause for ", !IO),
+		hlds_out__write_simple_call_id(PredOrFuncCallId, !IO),
+		io__write_string(":\n", !IO),
+		prog_out__write_context(Context, !IO),
+		( SingletonVars = [_] ->
+			io__write_string("  warning: variable `", !IO),
+			mercury_output_vars(SingletonVars, VarSet, no, !IO),
+			report_warning("' occurs only once in this scope.\n",
+				!IO)
 		;
-			io__write_string("  warning: variables `"),
-			mercury_output_vars(SingletonVars, VarSet, no),
-			report_warning("' occur only once in this scope.\n")
+			io__write_string("  warning: variables `", !IO),
+			mercury_output_vars(SingletonVars, VarSet, no, !IO),
+			report_warning("' occur only once in this scope.\n",
+				!IO)
 		)
 	),
 
-	% find all the variables in the goal that do occur outside the
-	% goal (i.e. are not singleton) and have a variable name that starts
-	% with "_".
+	% Find all the variables in the goal that do occur outside the goal
+	% (i.e. are not singleton) and have a variable name that starts
+	% with "_". If there were any such variables, issue a warning.
 
-	{ solutions((pred(Var2::out) is nondet :-
+	solutions((pred(Var2::out) is nondet :-
 		  	list__member(Var2, GoalVars),
 			set__member(Var2, NonLocals),
 			varset__search_name(VarSet, Var2, Name2),
 			string__prefix(Name2, "_")
-		), MultiVars) },
-
-	% if there were any such variables, issue a warning
-
-	( { MultiVars = [] } ->
-		[]
+		), MultiVars),
+	(
+		MultiVars = []
 	;
-		prog_out__write_context(Context),
-		io__write_string("In clause for "),
-		hlds_out__write_simple_call_id(PredOrFuncCallId),
-		io__write_string(":\n"),
-		prog_out__write_context(Context),
-		( { MultiVars = [_] } ->
-			io__write_string("  warning: variable `"),
-			mercury_output_vars(MultiVars, VarSet, no),
+		MultiVars = [_ | _],
+		prog_out__write_context(Context, !IO),
+		io__write_string("In clause for ", !IO),
+		hlds_out__write_simple_call_id(PredOrFuncCallId, !IO),
+		io__write_string(":\n", !IO),
+		prog_out__write_context(Context, !IO),
+		( MultiVars = [_] ->
+			io__write_string("  warning: variable `", !IO),
+			mercury_output_vars(MultiVars, VarSet, no, !IO),
 			report_warning("' occurs more than once " ++
-				"in this scope.\n")
+				"in this scope.\n", !IO)
 		;
-			io__write_string("  warning: variables `"),
-			mercury_output_vars(MultiVars, VarSet, no),
-			report_warning("' occur more than once in this scope.\n")
+			io__write_string("  warning: variables `", !IO),
+			mercury_output_vars(MultiVars, VarSet, no, !IO),
+			report_warning(
+				"' occur more than once in this scope.\n", !IO)
 		)
 	).
 
@@ -9644,20 +9654,24 @@
 	goal_info_init(Context, GoalInfo),
 	goal_to_conj_list(Head, HeadGoals),
 	goal_to_conj_list(Body, BodyGoals),
-	Unifiers = svar_unifiers(Context, FinalSVarMap, SInfo ^ dot),
+	Unifiers = svar_unifiers(yes(dont_warn_singleton), Context,
+		FinalSVarMap, SInfo ^ dot),
 	conj_list_to_goal(HeadGoals ++ BodyGoals ++ Unifiers, GoalInfo, Goal).
 
-:- func svar_unifiers(prog_context, svar_map, svar_map) = hlds_goals.
+:- func svar_unifiers(maybe(goal_feature), prog_context, svar_map, svar_map)
+	= hlds_goals.
 
-svar_unifiers(Context, LHSMap, RHSMap) =
-	map__foldl(add_svar_unifier(RHSMap, Context), LHSMap, []).
+svar_unifiers(MaybeFeature, Context, LHSMap, RHSMap) =
+	map__foldl(add_svar_unifier(MaybeFeature, RHSMap, Context), LHSMap,
+		[]).
 
-:- func add_svar_unifier(svar_map, prog_context, svar, prog_var, hlds_goals)
-	= hlds_goals.
+:- func add_svar_unifier(maybe(goal_feature), svar_map, prog_context,
+	svar, prog_var, hlds_goals) = hlds_goals.
 
-add_svar_unifier(RHSMap, Context, StateVar, Var, Unifiers0) = Unifiers :-
+add_svar_unifier(MaybeFeature, RHSMap, Context, StateVar, Var, Unifiers0)
+		= Unifiers :-
 	( RHSVar = RHSMap ^ elem(StateVar) ->
-		Unifier = svar_unification(Context, Var, RHSVar),
+		Unifier = svar_unification(MaybeFeature, Context, Var, RHSVar),
 		Unifiers = [Unifier | Unifiers0]
 	;
 		Unifiers = Unifiers0
@@ -9665,11 +9679,19 @@
 
 %-----------------------------------------------------------------------------%
 
-:- func svar_unification(prog_context, prog_var, prog_var) = hlds_goal.
+:- func svar_unification(maybe(goal_feature), prog_context, prog_var, prog_var)
+	= hlds_goal.
 
-svar_unification(Context, SVar, Var) = Unification :-
+svar_unification(MaybeFeature, Context, SVar, Var) = Unification :-
 	hlds_goal__create_atomic_unification(SVar, var(Var), Context,
-		implicit("state variable"), [], Unification).
+		implicit("state variable"), [], Unification0),
+	(
+		MaybeFeature = no,
+		Unification = Unification0
+	;
+		MaybeFeature = yes(Feature),
+		goal_add_feature(Unification0, Feature, Unification)
+	).
 
 %-----------------------------------------------------------------------------%
 
@@ -9801,7 +9823,8 @@
 	  	% add a new unifier !:X = !.X
 	  	Dot0 = !.SInfoT ^ dot ^ det_elem(StateVar),
 		new_colon_state_var(StateVar, Dot, !VarSet, !SInfoT),
-		!:Thens = [svar_unification(Context, Dot, Dot0) | !.Thens],
+		!:Thens = [svar_unification(yes(dont_warn_singleton), Context,
+			Dot, Dot0) | !.Thens],
 		prepare_for_next_conjunct(set__make_singleton_set(StateVar),
 			!VarSet, !SInfoT)
 	;
@@ -9993,7 +10016,8 @@
 		DotX = SInfoX ^ dot ^ elem(StateVar),
 		Dot \= DotX
 	->
-	  	[svar_unification(Context, Dot, DotX) | Unifiers]
+	  	[svar_unification(yes(dont_warn_singleton), Context, Dot, DotX)
+			| Unifiers]
 	;
 	  	Unifiers
 	).
@@ -10379,8 +10403,7 @@
 	report_error(string__format("\
 cannot use !:%s in this context;", [s(Name)]), !IO),
 	prog_out__write_context(Context, !IO),
-	io__format("\
-  however !.%s may be used here.\n", [s(Name)], !IO).
+	io__format("however !.%s may be used here.\n", [s(Name)], !IO).
 
 %-----------------------------------------------------------------------------%
 
@@ -10390,8 +10413,8 @@
 report_non_visible_state_var(DorC, Context, VarSet, StateVar, !IO) :-
 	Name = varset__lookup_name(VarSet, StateVar),
 	prog_out__write_context(Context, !IO),
-	report_error(string__format("\
-state variable !%s%s is not visible in this context.",
+	report_error(string__format(
+		"state variable !%s%s is not visible in this context.",
 		[s(DorC), s(Name)]), !IO).
 
 %-----------------------------------------------------------------------------%
@@ -10402,8 +10425,8 @@
 report_unitialized_state_var(Context, VarSet, StateVar, !IO) :-
 	Name = varset__lookup_name(VarSet, StateVar),
 	prog_out__write_context(Context, !IO),
-	report_warning(string__format("\
-Warning: reference to unitialized state variable !.%s.\n",
+	report_warning(string__format(
+		"Warning: reference to unitialized state variable !.%s.\n",
 		[s(Name)]), !IO).
 
 %-----------------------------------------------------------------------------%
@@ -10414,11 +10437,10 @@
 report_illegal_func_svar_result(Context, VarSet, StateVar, !IO) :-
 	Name = varset__lookup_name(VarSet, StateVar),
 	prog_out__write_context(Context, !IO),
-	report_error(string__format("\
-!%s cannot be a function result.", [s(Name)]), !IO),
+	report_error(string__format("!%s cannot be a function result.",
+		[s(Name)]), !IO),
 	prog_out__write_context(Context, !IO),
-	io__format("\
-  You probably meant !.%s or !:%s.\n", [s(Name), s(Name)],
+	io__format("You probably meant !.%s or !:%s.\n", [s(Name), s(Name)],
   		!IO).
 
 %-----------------------------------------------------------------------------%
@@ -10429,11 +10451,11 @@
 report_illegal_bang_svar_lambda_arg(Context, VarSet, StateVar, !IO) :-
 	Name = varset__lookup_name(VarSet, StateVar),
 	prog_out__write_context(Context, !IO),
-	report_error(string__format("\
-!%s cannot be a lambda argument.", [s(Name)]), !IO),
+	report_error(string__format("!%s cannot be a lambda argument.",
+		[s(Name)]), !IO),
 	prog_out__write_context(Context, !IO),
-	io__format("\
-  Perhaps you meant !.%s or !:%s.\n", [s(Name), s(Name)], !IO).
+	io__format("Perhaps you meant !.%s or !:%s.\n",
+		[s(Name), s(Name)], !IO).
 
 %-----------------------------------------------------------------------------%
 %-----------------------------------------------------------------------------%
Index: compiler/saved_vars.m
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/compiler/saved_vars.m,v
retrieving revision 1.42
diff -u -r1.42 saved_vars.m
--- compiler/saved_vars.m	30 Jun 2004 02:48:13 -0000	1.42
+++ compiler/saved_vars.m	4 Oct 2004 00:32:53 -0000
@@ -202,6 +202,7 @@
 ok_to_duplicate(tailcall) = no.
 ok_to_duplicate(keep_constant_binding) = no.
 ok_to_duplicate(save_deep_excp_vars) = no.
+ok_to_duplicate(dont_warn_singleton) = yes.
 
 % Divide a list of goals into an initial subsequence of goals that
 % construct constants, and all other goals.
cvs diff: Diffing compiler/notes
cvs diff: Diffing debian
cvs diff: Diffing deep_profiler
cvs diff: Diffing deep_profiler/notes
cvs diff: Diffing doc
cvs diff: Diffing extras
cvs diff: Diffing extras/aditi
cvs diff: Diffing extras/cgi
cvs diff: Diffing extras/complex_numbers
cvs diff: Diffing extras/complex_numbers/samples
cvs diff: Diffing extras/complex_numbers/tests
cvs diff: Diffing extras/concurrency
cvs diff: Diffing extras/curs
cvs diff: Diffing extras/curs/samples
cvs diff: Diffing extras/curses
cvs diff: Diffing extras/curses/sample
cvs diff: Diffing extras/dynamic_linking
cvs diff: Diffing extras/error
cvs diff: Diffing extras/graphics
cvs diff: Diffing extras/graphics/easyx
cvs diff: Diffing extras/graphics/easyx/samples
cvs diff: Diffing extras/graphics/mercury_glut
cvs diff: Diffing extras/graphics/mercury_opengl
cvs diff: Diffing extras/graphics/mercury_tcltk
cvs diff: Diffing extras/graphics/samples
cvs diff: Diffing extras/graphics/samples/calc
cvs diff: Diffing extras/graphics/samples/gears
cvs diff: Diffing extras/graphics/samples/maze
cvs diff: Diffing extras/graphics/samples/pent
cvs diff: Diffing extras/lazy_evaluation
cvs diff: Diffing extras/lex
cvs diff: Diffing extras/lex/samples
cvs diff: Diffing extras/lex/tests
cvs diff: Diffing extras/logged_output
cvs diff: Diffing extras/moose
cvs diff: Diffing extras/moose/samples
cvs diff: Diffing extras/moose/tests
cvs diff: Diffing extras/morphine
cvs diff: Diffing extras/morphine/non-regression-tests
cvs diff: Diffing extras/morphine/scripts
cvs diff: Diffing extras/morphine/source
cvs diff: Diffing extras/odbc
cvs diff: Diffing extras/posix
cvs diff: Diffing extras/quickcheck
cvs diff: Diffing extras/quickcheck/tutes
cvs diff: Diffing extras/references
cvs diff: Diffing extras/references/samples
cvs diff: Diffing extras/references/tests
cvs diff: Diffing extras/stream
cvs diff: Diffing extras/trailed_update
cvs diff: Diffing extras/trailed_update/samples
cvs diff: Diffing extras/trailed_update/tests
cvs diff: Diffing extras/xml
cvs diff: Diffing extras/xml/samples
cvs diff: Diffing java
cvs diff: Diffing java/runtime
cvs diff: Diffing library
cvs diff: Diffing profiler
cvs diff: Diffing robdd
cvs diff: Diffing runtime
cvs diff: Diffing runtime/GETOPT
cvs diff: Diffing runtime/machdeps
cvs diff: Diffing samples
cvs diff: Diffing samples/c_interface
cvs diff: Diffing samples/c_interface/c_calls_mercury
cvs diff: Diffing samples/c_interface/cplusplus_calls_mercury
cvs diff: Diffing samples/c_interface/mercury_calls_c
cvs diff: Diffing samples/c_interface/mercury_calls_cplusplus
cvs diff: Diffing samples/c_interface/mercury_calls_fortran
cvs diff: Diffing samples/c_interface/simpler_c_calls_mercury
cvs diff: Diffing samples/c_interface/simpler_cplusplus_calls_mercury
cvs diff: Diffing samples/diff
cvs diff: Diffing samples/muz
cvs diff: Diffing samples/rot13
cvs diff: Diffing samples/solutions
cvs diff: Diffing samples/tests
cvs diff: Diffing samples/tests/c_interface
cvs diff: Diffing samples/tests/c_interface/c_calls_mercury
cvs diff: Diffing samples/tests/c_interface/cplusplus_calls_mercury
cvs diff: Diffing samples/tests/c_interface/mercury_calls_c
cvs diff: Diffing samples/tests/c_interface/mercury_calls_cplusplus
cvs diff: Diffing samples/tests/c_interface/mercury_calls_fortran
cvs diff: Diffing samples/tests/c_interface/simpler_c_calls_mercury
cvs diff: Diffing samples/tests/c_interface/simpler_cplusplus_calls_mercury
cvs diff: Diffing samples/tests/diff
cvs diff: Diffing samples/tests/muz
cvs diff: Diffing samples/tests/rot13
cvs diff: Diffing samples/tests/solutions
cvs diff: Diffing samples/tests/toplevel
cvs diff: Diffing scripts
cvs diff: Diffing tests
cvs diff: Diffing tests/benchmarks
cvs diff: Diffing tests/debugger
cvs diff: Diffing tests/debugger/declarative
cvs diff: Diffing tests/dppd
cvs diff: Diffing tests/general
cvs diff: Diffing tests/general/accumulator
cvs diff: Diffing tests/general/string_format
cvs diff: Diffing tests/general/structure_reuse
cvs diff: Diffing tests/grade_subdirs
cvs diff: Diffing tests/hard_coded
cvs diff: Diffing tests/hard_coded/exceptions
cvs diff: Diffing tests/hard_coded/purity
cvs diff: Diffing tests/hard_coded/sub-modules
cvs diff: Diffing tests/hard_coded/typeclasses
cvs diff: Diffing tests/invalid
cvs diff: Diffing tests/invalid/purity
cvs diff: Diffing tests/misc_tests
cvs diff: Diffing tests/mmc_make
cvs diff: Diffing tests/mmc_make/lib
cvs diff: Diffing tests/recompilation
cvs diff: Diffing tests/tabling
cvs diff: Diffing tests/term
cvs diff: Diffing tests/valid
cvs diff: Diffing tests/warnings
cvs diff: Diffing tools
cvs diff: Diffing trace
cvs diff: Diffing util
cvs diff: Diffing vim
cvs diff: Diffing vim/after
cvs diff: Diffing vim/ftplugin
cvs diff: Diffing vim/syntax
--------------------------------------------------------------------------
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