[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