[m-rev.] diff: post_typecheck stack limit
Zoltan Somogyi
zs at csse.unimelb.edu.au
Tue Dec 19 14:05:34 AEDT 2006
compiler/post_typecheck.m:
Limit stack consumption in debug grades when processing very long lists
of variables.
This reduces the time to compile training_cars_full.m from 250 seconds
to 240.
Rename some predicates to avoid ambiguities.
compiler/purity.m:
compiler/unify_proc.m:
Conform to the change to post_typecheck.m.
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/libatomic_ops-1.2
cvs diff: Diffing boehm_gc/libatomic_ops-1.2/doc
cvs diff: Diffing boehm_gc/libatomic_ops-1.2/src
cvs diff: Diffing boehm_gc/libatomic_ops-1.2/src/atomic_ops
cvs diff: Diffing boehm_gc/libatomic_ops-1.2/src/atomic_ops/sysdeps
cvs diff: Diffing boehm_gc/libatomic_ops-1.2/src/atomic_ops/sysdeps/gcc
cvs diff: Diffing boehm_gc/libatomic_ops-1.2/src/atomic_ops/sysdeps/hpc
cvs diff: Diffing boehm_gc/libatomic_ops-1.2/src/atomic_ops/sysdeps/ibmc
cvs diff: Diffing boehm_gc/libatomic_ops-1.2/src/atomic_ops/sysdeps/icc
cvs diff: Diffing boehm_gc/libatomic_ops-1.2/src/atomic_ops/sysdeps/msftc
cvs diff: Diffing boehm_gc/libatomic_ops-1.2/src/atomic_ops/sysdeps/sunc
cvs diff: Diffing boehm_gc/libatomic_ops-1.2/tests
cvs diff: Diffing boehm_gc/tests
cvs diff: Diffing boehm_gc/windows-untested
cvs diff: Diffing boehm_gc/windows-untested/vc60
cvs diff: Diffing boehm_gc/windows-untested/vc70
cvs diff: Diffing boehm_gc/windows-untested/vc71
cvs diff: Diffing browser
cvs diff: Diffing bytecode
cvs diff: Diffing compiler
Index: compiler/post_typecheck.m
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/compiler/post_typecheck.m,v
retrieving revision 1.112
diff -u -b -r1.112 post_typecheck.m
--- compiler/post_typecheck.m 6 Nov 2006 07:55:12 -0000 1.112
+++ compiler/post_typecheck.m 16 Dec 2006 09:16:14 -0000
@@ -5,11 +5,11 @@
% This file may only be copied under the terms of the GNU General
% Public License - see the file COPYING in the Mercury distribution.
%-----------------------------------------------------------------------------%
-
+%
% File : post_typecheck.m
% Author : fjh
% Purpose : finish off type checking.
-
+%
% This module does the final parts of type analysis:
%
% - it resolves predicate overloading
@@ -51,7 +51,8 @@
%-----------------------------------------------------------------------------%
- % finish_preds(PredIds, ReportTypeErrors, NumErrors, !ModuleInfo, !Specs):
+ % post_typecheck_finish_preds(PredIds, ReportTypeErrors, NumErrors,
+ % !ModuleInfo, !Specs):
%
% Check that the all of the types which have been inferred for the
% variables in the clause do not contain any unbound type variables
@@ -64,27 +65,27 @@
% make sense. NumErrors will be nonzero if there were errors which
% should prevent further processing (e.g. polymorphism or mode analysis).
%
-:- pred finish_preds(list(pred_id)::in, bool::in, int::out,
+:- pred post_typecheck_finish_preds(list(pred_id)::in, bool::in, int::out,
module_info::in, module_info::out,
list(error_spec)::in, list(error_spec)::out) is det.
% As above, but return the list of procedures containing unbound inst
% variables instead of reporting the errors directly.
%
-:- pred finish_pred_no_io(module_info::in, list(proc_id)::out,
+:- pred post_typecheck_finish_pred_no_io(module_info::in, list(proc_id)::out,
pred_info::in, pred_info::out) is det.
-:- pred finish_imported_pred_no_io(module_info::in,
+:- pred post_typecheck_finish_imported_pred_no_io(module_info::in,
list(proc_id)::out, pred_info::in, pred_info::out) is det.
-:- pred finish_ill_typed_pred(module_info::in, pred_id::in,
+:- pred post_typecheck_finish_ill_typed_pred(module_info::in, pred_id::in,
pred_info::in, pred_info::out,
list(error_spec)::in, list(error_spec)::out) is det.
% Now that the assertion has finished being typechecked, remove it
% from further processing and store it in the assertion_table.
%
-:- pred finish_promise(promise_type::in, pred_id::in,
+:- pred post_typecheck_finish_promise(promise_type::in, pred_id::in,
module_info::in, module_info::out,
list(error_spec)::in, list(error_spec)::out) is det.
@@ -142,23 +143,34 @@
%-----------------------------------------------------------------------------%
-finish_preds(PredIds, ReportTypeErrors, NumErrors, !ModuleInfo, !Specs) :-
- do_finish_preds(PredIds, ReportTypeErrors, !ModuleInfo,
+post_typecheck_finish_preds(PredIds, ReportTypeErrors, NumErrors,
+ !ModuleInfo, !Specs) :-
+ post_typecheck_do_finish_preds(PredIds, ReportTypeErrors, !ModuleInfo,
0, TotalNumUnsatisfiedConstraints, !Specs),
- check_for_missing_definitions(!.ModuleInfo,
- [], MissingTypeDefnSpecs),
+ check_for_missing_definitions(!.ModuleInfo, [], MissingTypeDefnSpecs),
NumMissingTypeDefns = list.length(MissingTypeDefnSpecs),
NumErrors = TotalNumUnsatisfiedConstraints + NumMissingTypeDefns,
!:Specs = !.Specs ++ MissingTypeDefnSpecs.
-:- pred do_finish_preds(list(pred_id)::in, bool::in,
+:- pred post_typecheck_do_finish_preds(list(pred_id)::in, bool::in,
module_info::in, module_info::out, int::in, int::out,
list(error_spec)::in, list(error_spec)::out) is det.
-do_finish_preds([], _, !ModuleInfo, !TotalNumUnsatisfiedConstraints, !Specs).
-do_finish_preds([PredId | PredIds], ReportTypeErrors, !ModuleInfo,
-!TotalNumUnsatisfiedConstraints,
- !Specs) :-
+post_typecheck_do_finish_preds([], _,
+ !ModuleInfo, !TotalNumUnsatisfiedConstraints, !Specs).
+post_typecheck_do_finish_preds([PredId | PredIds], ReportTypeErrors,
+ !ModuleInfo, !TotalNumUnsatisfiedConstraints, !Specs) :-
+ post_typecheck_do_finish_pred(PredId, ReportTypeErrors,
+ !ModuleInfo, !TotalNumUnsatisfiedConstraints, !Specs),
+ post_typecheck_do_finish_preds(PredIds, ReportTypeErrors,
+ !ModuleInfo, !TotalNumUnsatisfiedConstraints, !Specs).
+
+:- pred post_typecheck_do_finish_pred(pred_id::in, bool::in,
+ module_info::in, module_info::out, int::in, int::out,
+ list(error_spec)::in, list(error_spec)::out) is det.
+
+post_typecheck_do_finish_pred(PredId, ReportTypeErrors, !ModuleInfo,
+ !TotalNumUnsatisfiedConstraints, !Specs) :-
some [!PredInfo] (
module_info_pred_info(!.ModuleInfo, PredId, !:PredInfo),
(
@@ -166,15 +178,17 @@
; pred_info_is_pseudo_imported(!.PredInfo)
)
->
- finish_imported_pred(!.ModuleInfo, PredId, !PredInfo, !Specs)
+ post_typecheck_finish_imported_pred(!.ModuleInfo, PredId,
+ !PredInfo, !Specs)
;
% Only report error messages for unbound type variables
% if we didn't get any type errors already; this avoids
% a lot of spurious diagnostics.
- check_type_bindings(!.ModuleInfo, PredId, !PredInfo,
+ check_pred_type_bindings(!.ModuleInfo, PredId, !PredInfo,
ReportTypeErrors, NumUnsatisfiedConstraints, !Specs),
- finish_pred_no_io(!.ModuleInfo, ErrorProcs, !PredInfo),
+ post_typecheck_finish_pred_no_io(!.ModuleInfo, ErrorProcs,
+ !PredInfo),
report_unbound_inst_vars(!.ModuleInfo, PredId, ErrorProcs,
!PredInfo, !Specs),
check_for_indistinguishable_modes(!.ModuleInfo, PredId,
@@ -192,21 +206,20 @@
!.TotalNumUnsatisfiedConstraints + NumUnsatisfiedConstraints
),
module_info_set_pred_info(PredId, !.PredInfo, !ModuleInfo)
- ),
- do_finish_preds(PredIds, ReportTypeErrors, !ModuleInfo,
- !TotalNumUnsatisfiedConstraints, !Specs).
+ ).
+
%-----------------------------------------------------------------------------%
% Check that the all of the types which have been inferred for the
- % variables in the clause do not contain any unbound type variables
+ % variables in the predicate do not contain any unbound type variables
% other than those that occur in the types of head variables, and that
% there are no unsatisfied type class constraints.
%
-:- pred check_type_bindings(module_info::in, pred_id::in,
+:- pred check_pred_type_bindings(module_info::in, pred_id::in,
pred_info::in, pred_info::out, bool::in, int::out,
list(error_spec)::in, list(error_spec)::out) is det.
-check_type_bindings(ModuleInfo, PredId, !PredInfo, ReportErrs, NumErrors,
+check_pred_type_bindings(ModuleInfo, PredId, !PredInfo, ReportErrs, NumErrors,
!Specs) :-
(
ReportErrs = yes,
@@ -228,7 +241,7 @@
clauses_info_get_vartypes(ClausesInfo0, VarTypesMap0),
map.to_assoc_list(VarTypesMap0, VarTypesList),
set.init(Set0),
- check_type_bindings_2(VarTypesList, HeadTypeParams,
+ check_var_type_bindings(VarTypesList, HeadTypeParams,
[], UnresolvedVarsTypes, Set0, Set),
(
UnresolvedVarsTypes = []
@@ -253,14 +266,38 @@
pred_info_set_constraint_map(ConstraintMap, !PredInfo)
).
-:- pred check_type_bindings_2(assoc_list(prog_var, mer_type)::in,
+ % The number of variables can be huge here (hundred of thousands for
+ % Doug Auclair's training_cars program). The code below prevents stack
+ % overflows in grades that do not permit tail recursion.
+ %
+:- pred check_var_type_bindings(assoc_list(prog_var, mer_type)::in,
list(tvar)::in,
assoc_list(prog_var, mer_type)::in, assoc_list(prog_var, mer_type)::out,
set(tvar)::in, set(tvar)::out) is det.
-check_type_bindings_2([], _, !UnresolvedVarsTypes, !Set).
-check_type_bindings_2([Var - Type | VarTypes], HeadTypeParams,
- !UnresolvedVarsTypes, !Set) :-
+check_var_type_bindings(VarTypes, HeadTypeParams, !UnresolvedVarsTypes,
+ !Set) :-
+ check_var_type_bindings_2(VarTypes, HeadTypeParams, 1000, LeftOverVarTypes,
+ !UnresolvedVarsTypes, !Set),
+ (
+ LeftOverVarTypes = []
+ ;
+ LeftOverVarTypes = [_ | _],
+ check_var_type_bindings(LeftOverVarTypes, HeadTypeParams,
+ !UnresolvedVarsTypes, !Set)
+ ).
+
+:- pred check_var_type_bindings_2(assoc_list(prog_var, mer_type)::in,
+ list(tvar)::in, int::in, assoc_list(prog_var, mer_type)::out,
+ assoc_list(prog_var, mer_type)::in, assoc_list(prog_var, mer_type)::out,
+ set(tvar)::in, set(tvar)::out) is det.
+
+check_var_type_bindings_2([], _, _, [], !UnresolvedVarsTypes, !Set).
+check_var_type_bindings_2([Var - Type | VarTypes], HeadTypeParams,
+ VarsToDo, LeftOverVarTypes, !UnresolvedVarsTypes, !Set) :-
+ ( VarsToDo < 0 ->
+ LeftOverVarTypes = [Var - Type | VarTypes]
+ ;
type_vars(Type, TVars),
set.list_to_set(TVars, TVarsSet0),
set.delete_list(TVarsSet0, HeadTypeParams, TVarsSet1),
@@ -270,8 +307,9 @@
;
true
),
- check_type_bindings_2(VarTypes, HeadTypeParams,
- !UnresolvedVarsTypes, !Set).
+ check_var_type_bindings_2(VarTypes, HeadTypeParams,
+ VarsToDo - 1, LeftOverVarTypes, !UnresolvedVarsTypes, !Set)
+ ).
% Bind all the type variables in `UnboundTypeVarsSet' to the type `void'.
%
@@ -405,14 +443,14 @@
%-----------------------------------------------------------------------------%
-finish_pred_no_io(ModuleInfo, ErrorProcs, !PredInfo) :-
+post_typecheck_finish_pred_no_io(ModuleInfo, ErrorProcs, !PredInfo) :-
propagate_types_into_modes(ModuleInfo, ErrorProcs, !PredInfo).
% For ill-typed preds, we just need to set the modes up correctly
% so that any calls to that pred from correctly-typed predicates
% won't result in spurious mode errors.
%
-finish_ill_typed_pred(ModuleInfo, PredId, !PredInfo, !Specs) :-
+post_typecheck_finish_ill_typed_pred(ModuleInfo, PredId, !PredInfo, !Specs) :-
propagate_types_into_modes(ModuleInfo, ErrorProcs, !PredInfo),
report_unbound_inst_vars(ModuleInfo, PredId, ErrorProcs, !PredInfo,
!Specs),
@@ -421,19 +459,21 @@
% For imported preds, we just need to ensure that all constructors
% occurring in predicate mode declarations are module qualified.
%
-:- pred finish_imported_pred(module_info::in, pred_id::in,
+:- pred post_typecheck_finish_imported_pred(module_info::in, pred_id::in,
pred_info::in, pred_info::out,
list(error_spec)::in, list(error_spec)::out) is det.
-finish_imported_pred(ModuleInfo, PredId, !PredInfo, !Specs) :-
+post_typecheck_finish_imported_pred(ModuleInfo, PredId, !PredInfo, !Specs) :-
% XXX Maybe the rest should be replaced with a call to
% finish_ill_typed_pred? [zs]
- finish_imported_pred_no_io(ModuleInfo, ErrorProcs, !PredInfo),
+ post_typecheck_finish_imported_pred_no_io(ModuleInfo, ErrorProcs,
+ !PredInfo),
report_unbound_inst_vars(ModuleInfo, PredId, ErrorProcs, !PredInfo,
!Specs),
check_for_indistinguishable_modes(ModuleInfo, PredId, !PredInfo, !Specs).
-finish_imported_pred_no_io(ModuleInfo, ErrorProcIds, !PredInfo) :-
+post_typecheck_finish_imported_pred_no_io(ModuleInfo, ErrorProcIds,
+ !PredInfo) :-
% Make sure the var-types field in the clauses_info is valid for imported
% predicates. Unification procedures have clauses generated, so they
% already have valid var-types.
@@ -449,6 +489,7 @@
),
propagate_types_into_modes(ModuleInfo, ErrorProcIds, !PredInfo).
+post_typecheck_finish_promise(PromiseType, PromiseId, !ModuleInfo, !Specs) :-
% Now that the promise has finished being typechecked, and has had all
% of its pred_ids identified, remove the promise from the list of pred ids
% to be processed in the future and place the pred_id associated with the
@@ -458,8 +499,7 @@
% predicate that is used in an assertion which assertion it is used in,
% or for a promise ex declaration record in the promise ex table
% the predicates used by the declaration.
- %
-finish_promise(PromiseType, PromiseId, !ModuleInfo, !Specs) :-
+
% Store the declaration in the appropriate table and get the goal
% for the promise.
store_promise(PromiseType, PromiseId, !ModuleInfo, Goal),
@@ -926,8 +966,7 @@
pred_info_get_markers(!.PredInfo, Markers),
module_info_get_predicate_table(ModuleInfo, PredTable),
predicate_table_search_func_sym_arity(PredTable,
- calls_are_fully_qualified(Markers),
- PredName, Arity, PredIds),
+ calls_are_fully_qualified(Markers), PredName, Arity, PredIds),
% Check if any of the candidate functions have argument/return types
% which subsume the actual argument/return types of this function call,
@@ -937,8 +976,8 @@
list.append(ArgTypes0, [TypeOfX], ArgTypes),
pred_info_get_constraint_map(!.PredInfo, ConstraintMap),
goal_info_get_goal_path(GoalInfo0, GoalPath),
- ConstraintSearch = search_hlds_constraint_list(ConstraintMap, unproven,
- GoalPath),
+ ConstraintSearch =
+ search_hlds_constraint_list(ConstraintMap, unproven, GoalPath),
find_matching_pred_id(ModuleInfo, PredIds, TVarSet, ArgTypes,
yes(ConstraintSearch), PredId, QualifiedFuncName)
->
@@ -1241,8 +1280,7 @@
apply_rec_subst_to_type_list(ExistTSubst, ParentArgTypes,
ActualArgTypes0),
- % The kinds will be ignored when the types are converted back
- % to tvars.
+ % The kinds will be ignored when the types are converted back to tvars.
map.init(KindMap),
apply_rec_subst_to_tvar_list(KindMap, ExistTSubst, ParentExistQVars,
ActualExistQVarTypes),
@@ -1340,8 +1378,8 @@
ConsId, FieldNumber) :-
Ctor = ctor(_, _, SymName, CtorArgs, _Ctxt),
(
- get_constructor_containing_field_3(CtorArgs,
- FieldName, 1, FieldNumber0)
+ get_constructor_containing_field_3(CtorArgs, FieldName,
+ 1, FieldNumber0)
->
list.length(CtorArgs, Arity),
ConsId = cons(SymName, Arity),
Index: compiler/purity.m
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/compiler/purity.m,v
retrieving revision 1.108
diff -u -b -r1.108 purity.m
--- compiler/purity.m 6 Nov 2006 07:55:12 -0000 1.108
+++ compiler/purity.m 16 Dec 2006 09:16:14 -0000
@@ -223,7 +223,7 @@
% Only report error messages for unbound type variables if we didn't get
% any type errors already; this avoids a lot of spurious diagnostics.
ReportTypeErrors = bool.not(FoundTypeError),
- post_typecheck.finish_preds(PredIds, ReportTypeErrors, NumPostErrors,
+ post_typecheck_finish_preds(PredIds, ReportTypeErrors, NumPostErrors,
!ModuleInfo, !Specs),
( NumPostErrors > 0 ->
PostTypecheckError = yes
@@ -258,7 +258,7 @@
% Finish processing of promise declarations.
pred_info_get_goal_type(PredInfo, GoalType),
( GoalType = goal_type_promise(PromiseType) ->
- post_typecheck.finish_promise(PromiseType, PredId, !ModuleInfo, !Specs)
+ post_typecheck_finish_promise(PromiseType, PredId, !ModuleInfo, !Specs)
;
true
),
Index: compiler/unify_proc.m
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/compiler/unify_proc.m,v
retrieving revision 1.179
diff -u -b -r1.179 unify_proc.m
--- compiler/unify_proc.m 1 Dec 2006 15:04:27 -0000 1.179
+++ compiler/unify_proc.m 16 Dec 2006 09:17:29 -0000
@@ -584,11 +584,11 @@
% so just go on to post_typecheck.
(
Item = clauses,
- post_typecheck.finish_pred_no_io(!.ModuleInfo,
+ post_typecheck_finish_pred_no_io(!.ModuleInfo,
ErrorProcs, PredInfo0, PredInfo)
;
Item = declaration,
- post_typecheck.finish_imported_pred_no_io(!.ModuleInfo,
+ post_typecheck_finish_imported_pred_no_io(!.ModuleInfo,
ErrorProcs, PredInfo0, PredInfo)
),
expect(unify(ErrorProcs, []), this_file,
cvs diff: Diffing compiler/notes
cvs diff: Diffing debian
cvs diff: Diffing debian/patches
cvs diff: Diffing deep_profiler
cvs diff: Diffing deep_profiler/notes
cvs diff: Diffing doc
cvs diff: Diffing extras
cvs diff: Diffing extras/base64
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/fixed
cvs diff: Diffing extras/gator
cvs diff: Diffing extras/gator/generations
cvs diff: Diffing extras/gator/generations/1
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/log4m
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/mopenssl
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/net
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/solver_types
cvs diff: Diffing extras/solver_types/library
cvs diff: Diffing extras/stream
cvs diff: Diffing extras/stream/tests
cvs diff: Diffing extras/trailed_update
cvs diff: Diffing extras/trailed_update/samples
cvs diff: Diffing extras/trailed_update/tests
cvs diff: Diffing extras/windows_installer_generator
cvs diff: Diffing extras/windows_installer_generator/sample
cvs diff: Diffing extras/windows_installer_generator/sample/images
cvs diff: Diffing extras/xml
cvs diff: Diffing extras/xml/samples
cvs diff: Diffing extras/xml_stylesheets
cvs diff: Diffing java
cvs diff: Diffing java/runtime
cvs diff: Diffing library
cvs diff: Diffing mdbcomp
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 slice
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/par_conj
cvs diff: Diffing tests/recompilation
cvs diff: Diffing tests/tabling
cvs diff: Diffing tests/term
cvs diff: Diffing tests/trailing
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 messages to: mercury-reviews at csse.unimelb.edu.au
Administrative Queries: owner-mercury-reviews at csse.unimelb.edu.au
Subscriptions: mercury-reviews-request at csse.unimelb.edu.au
--------------------------------------------------------------------------
More information about the reviews
mailing list