[m-rev.] diff: post_typecheck and parallelism

Zoltan Somogyi zs at csse.unimelb.edu.au
Thu Oct 14 13:44:30 AEDT 2010


Allow the post-typecheck pass to be done in parallel on different predicates.

compiler/post_typecheck.m:
	Make the change described above.

	Make the post_typecheck_finish_preds predicate do what its name says
	by moving the code to find missing type definitions to a different
	predicate.

	Improve the interface of post_typecheck_finish_preds with its caller.

	Inline a predicate in its caller where this improves the clarity
	of the code.

compiler/mercury_compile_front_end.m:
	Conform to the change above.

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/extra
cvs diff: Diffing boehm_gc/include
cvs diff: Diffing boehm_gc/include/extra
cvs diff: Diffing boehm_gc/include/private
cvs diff: Diffing boehm_gc/libatomic_ops
cvs diff: Diffing boehm_gc/libatomic_ops/doc
cvs diff: Diffing boehm_gc/libatomic_ops/src
cvs diff: Diffing boehm_gc/libatomic_ops/src/atomic_ops
cvs diff: Diffing boehm_gc/libatomic_ops/src/atomic_ops/sysdeps
cvs diff: Diffing boehm_gc/libatomic_ops/src/atomic_ops/sysdeps/armcc
cvs diff: Diffing boehm_gc/libatomic_ops/src/atomic_ops/sysdeps/gcc
cvs diff: Diffing boehm_gc/libatomic_ops/src/atomic_ops/sysdeps/hpc
cvs diff: Diffing boehm_gc/libatomic_ops/src/atomic_ops/sysdeps/ibmc
cvs diff: Diffing boehm_gc/libatomic_ops/src/atomic_ops/sysdeps/icc
cvs diff: Diffing boehm_gc/libatomic_ops/src/atomic_ops/sysdeps/msftc
cvs diff: Diffing boehm_gc/libatomic_ops/src/atomic_ops/sysdeps/sunc
cvs diff: Diffing boehm_gc/libatomic_ops/tests
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/tests
cvs diff: Diffing boehm_gc/m4
cvs diff: Diffing boehm_gc/tests
cvs diff: Diffing browser
cvs diff: Diffing bytecode
cvs diff: Diffing compiler
Index: compiler/mercury_compile_front_end.m
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/compiler/mercury_compile_front_end.m,v
retrieving revision 1.5
diff -u -b -r1.5 mercury_compile_front_end.m
--- compiler/mercury_compile_front_end.m	5 Aug 2010 03:07:08 -0000	1.5
+++ compiler/mercury_compile_front_end.m	13 Oct 2010 06:29:17 -0000
@@ -248,29 +248,47 @@
         !:FoundError = yes,
         io.set_exit_status(1, !IO)
     ;
-        % Only report error messages for unbound type variables if we didn't
-        % get any type errors already; this avoids a lot of spurious
-        % diagnostics.
-        PostTypeCheckReportErrors = bool.not(FoundTypeError),
-        module_info_get_valid_predids(PredIds, !HLDS),
-        post_typecheck_finish_preds(PredIds, PostTypeCheckReportErrors,
-            NumPostTypeCheckErrors, !HLDS, !Specs),
+        check_for_missing_type_defns(!.HLDS, MissingTypeDefnSpecs),
+        !:Specs = !.Specs ++ MissingTypeDefnSpecs,
+        SomeMissingTypeDefns = contains_errors(Globals, MissingTypeDefnSpecs),
+
+        post_typecheck_finish_preds(!HLDS, NumPostTypeCheckErrors,
+            PostTypeCheckAlwaysSpecs, PostTypeCheckNoTypeErrorSpecs),
+        % If the main part of typecheck detected some errors, then some of
+        % the errors we detect during post-typecheck could be avalanche
+        % messages. We get post_typecheck to put all such messages into
+        % PostTypeCheckNoTypeErrorSpecs, and we report them only if did not
+        % find any errors during typecheck.
+        (
+            FoundTypeError = no,
+            PostTypeCheckSpecs = PostTypeCheckAlwaysSpecs
+                ++ PostTypeCheckNoTypeErrorSpecs,
+            !:Specs = !.Specs ++ PostTypeCheckSpecs
+        ;
+            FoundTypeError = yes,
+            !:Specs = !.Specs ++ PostTypeCheckAlwaysSpecs
+        ),
+        (
+            ( SomeMissingTypeDefns = yes
+            ; NumPostTypeCheckErrors > 0
+            )
+        ->
+            PostTypeCheckErrors = yes
+        ;
+            PostTypeCheckErrors = no
+        ),
         maybe_dump_hlds(!.HLDS, 19, "post_typecheck", !DumpInfo, !IO),
 
         % Stop here if `--typecheck-only' was specified.
         globals.lookup_bool_option(Globals, typecheck_only, TypecheckOnly),
         (
             TypecheckOnly = yes,
-            ( NumPostTypeCheckErrors > 0 ->
-                !:FoundError = yes
-            ;
-                true
-            )
+            !:FoundError = bool.or(!.FoundError, PostTypeCheckErrors)
         ;
             TypecheckOnly = no,
             (
                 ( FoundTypeError = yes
-                ; NumPostTypeCheckErrors > 0
+                ; PostTypeCheckErrors = yes
                 )
             ->
                 % XXX It would be nice if we could go on and mode-check the
Index: compiler/post_typecheck.m
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/compiler/post_typecheck.m,v
retrieving revision 1.139
diff -u -b -r1.139 post_typecheck.m
--- compiler/post_typecheck.m	4 Nov 2009 03:44:50 -0000	1.139
+++ compiler/post_typecheck.m	13 Oct 2010 06:27:15 -0000
@@ -46,31 +46,47 @@
 :- import_module parse_tree.error_util.
 :- import_module parse_tree.prog_data.
 
-:- import_module bool.
 :- import_module list.
 
 %-----------------------------------------------------------------------------%
 
-    % post_typecheck_finish_preds(PredIds, ReportTypeErrors, NumErrors,
-    %   !ModuleInfo, !Specs):
+    % Check that every abstract type in the module has at least one definition
+    % in either the interface or implementation of the module.
     %
-    % Check that the all of the types which have been inferred for the
-    % variables in the clause 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, and if
-    % ReportErrors = yes, return the appropriate warning/error messages.
-    % Also bind any unbound type variables to the type `void'. Note that
-    % when checking assertions we take the conservative approach of warning
-    % about unbound type variables. There may be cases for which this doesn't
-    % make sense. NumErrors will be nonzero if there were errors which
-    % should prevent further processing (e.g. polymorphism or mode analysis).
+    % Note that a type may have several definitions, e.g. some foreign
+    % definitions and a default Mercury definition.
     %
-:- 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.
+:- pred check_for_missing_type_defns(module_info::in, list(error_spec)::out)
+    is det.
+
+    % post_typecheck_finish_preds(!ModuleInfo, NumErrors,
+    %   AlwaysSpecs, NoTypeErrorSpecs):
+    %
+    % Check that the types of variables in predicates contain no unbound type
+    % variables other than those that occur in the types of the predicate's
+    % head variables, and that there are no unsatisfied type class constraints.
+    % Also bind any unbound type variables to the type `void'.
+    %
+    % Return two lists of error messages. AlwaysSpecs will be the messages
+    % we want to print in all cases, and NoTypeErrorSpecs will be the messages
+    % we want to print only if type checking did not find any errors. The
+    % latter will be the kinds of errors that you can get as "avalanche"
+    % messages from type errors.
+    %
+    % Separately, we return NumBadErrors, the number of errors that prevent us
+    % from proceeding further in compilation. We do this separately since some
+    % errors (e.g. bad type for main) do NOT prevent us from going further.
+    %
+    % Note that when checking assertions we take the conservative approach
+    % of warning about unbound type variables. There may be cases for which
+    % this doesn't make sense.
+    %
+:- pred post_typecheck_finish_preds(module_info::in, module_info::out,
+    int::out, list(error_spec)::out, list(error_spec)::out) is det.
 
     % As above, but return the list of procedures containing unbound inst
     % variables instead of reporting the errors directly.
+    % XXX This is incredibly misleading.
     %
 :- pred post_typecheck_finish_pred_no_io(module_info::in, list(proc_id)::out,
     pred_info::in, pred_info::out) is det.
@@ -130,6 +146,7 @@
 :- import_module parse_tree.prog_util.
 
 :- import_module assoc_list.
+:- import_module bool.
 :- import_module int.
 :- import_module map.
 :- import_module maybe.
@@ -137,6 +154,7 @@
 :- import_module set.
 :- import_module solutions.
 :- import_module string.
+:- import_module set_tree234.
 :- import_module svmap.
 :- import_module svvarset.
 :- import_module term_io.
@@ -144,69 +162,79 @@
 
 %-----------------------------------------------------------------------------%
 
-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),
-    NumMissingTypeDefns = list.length(MissingTypeDefnSpecs),
-    NumErrors = TotalNumUnsatisfiedConstraints + NumMissingTypeDefns,
-    !:Specs = !.Specs ++ MissingTypeDefnSpecs.
-
-:- 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.
-
-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).
+post_typecheck_finish_preds(!ModuleInfo, NumBadErrors,
+        AlwaysSpecs, NoTypeErrorSpecs) :-
+    module_info_get_valid_predids(ValidPredIds, !ModuleInfo),
+    ValidPredIdSet = set_tree234.list_to_set(ValidPredIds),
+    module_info_get_preds(!.ModuleInfo, PredMap0),
+    map.to_assoc_list(PredMap0, PredIdsInfos0),
+    post_typecheck_do_finish_preds(!.ModuleInfo, ValidPredIdSet,
+        PredIdsInfos0, PredIdsInfos, NumBadErrors,
+        AlwaysSpecsList, NoTypeErrorSpecsList),
+    list.condense(AlwaysSpecsList, AlwaysSpecs),
+    list.condense(NoTypeErrorSpecsList, NoTypeErrorSpecs),
+    map.from_sorted_assoc_list(PredIdsInfos, PredMap),
+    module_info_set_preds(PredMap, !ModuleInfo).
+
+:- pred post_typecheck_do_finish_preds(module_info::in,
+    set_tree234(pred_id)::in,
+    assoc_list(pred_id, pred_info)::in, assoc_list(pred_id, pred_info)::out,
+    int::out, list(list(error_spec))::out, list(list(error_spec))::out) is det.
+
+post_typecheck_do_finish_preds(_, _, [], [], 0, [], []).
+post_typecheck_do_finish_preds(ModuleInfo, ValidPredIdSet,
+        [PredIdInfo0 | PredIdsInfos0], [PredIdInfo | PredIdsInfos],
+        NumBadErrors, [HeadAlwaysSpecs | TailAlwaysSpecs],
+        [HeadNoTypeErrorSpecs | TailNoTypeErrorSpecs]) :-
+    PredIdInfo0 = PredId - PredInfo0,
+    ( set_tree234.member(ValidPredIdSet, PredId) ->
+        post_typecheck_do_finish_pred(ModuleInfo, PredId, PredInfo0, PredInfo,
+            HeadNumBadErrors, HeadAlwaysSpecs, HeadNoTypeErrorSpecs)
+    ;
+        PredInfo = PredInfo0,
+        HeadNumBadErrors = 0,
+        HeadAlwaysSpecs = [],
+        HeadNoTypeErrorSpecs = []
+    ),
+    PredIdInfo = PredId - PredInfo,
+    post_typecheck_do_finish_preds(ModuleInfo, ValidPredIdSet,
+        PredIdsInfos0, PredIdsInfos, TailNumBadErrors,
+        TailAlwaysSpecs, TailNoTypeErrorSpecs),
+    NumBadErrors = HeadNumBadErrors + TailNumBadErrors.
+
+:- pred post_typecheck_do_finish_pred(module_info::in,
+    pred_id::in, pred_info::in, pred_info::out, int::out,
+    list(error_spec)::out, list(error_spec)::out) is det.
 
-:- 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),
+post_typecheck_do_finish_pred(ModuleInfo, PredId, !PredInfo, NumBadErrors,
+        !:AlwaysSpecs, !:NoTypeErrorSpecs) :-
         (
             ( pred_info_is_imported(!.PredInfo)
             ; pred_info_is_pseudo_imported(!.PredInfo)
             )
         ->
-            post_typecheck_finish_imported_pred(!.ModuleInfo, PredId,
-                !PredInfo, !Specs)
+        % For imported preds, we just need to ensure that all constructors
+        % occurring in predicate mode declarations are module qualified.
+        post_typecheck_finish_imported_pred_no_io(ModuleInfo, ErrorProcs,
+            !PredInfo),
+        report_unbound_inst_vars(ModuleInfo, PredId, ErrorProcs, !PredInfo,
+            [], !:AlwaysSpecs),
+        check_for_indistinguishable_modes(ModuleInfo, PredId, !PredInfo,
+            !AlwaysSpecs),
+        !:NoTypeErrorSpecs = [],
+        NumBadErrors = 0
         ;
-            % 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_pred_type_bindings(!.ModuleInfo, PredId, !PredInfo,
-                ReportTypeErrors, NumUnsatisfiedConstraints, !Specs),
+        check_pred_type_bindings(ModuleInfo, PredId, !PredInfo,
+            NumBadErrors, !:NoTypeErrorSpecs),
 
-            post_typecheck_finish_pred_no_io(!.ModuleInfo, ErrorProcs,
-                !PredInfo),
-            report_unbound_inst_vars(!.ModuleInfo, PredId, ErrorProcs,
-                !PredInfo, !Specs),
-            check_for_indistinguishable_modes(!.ModuleInfo, PredId,
-                !PredInfo, !Specs),
+        post_typecheck_finish_pred_no_io(ModuleInfo, ErrorProcs, !PredInfo),
+        report_unbound_inst_vars(ModuleInfo, PredId, ErrorProcs, !PredInfo,
+            [], !:AlwaysSpecs),
+        check_for_indistinguishable_modes(ModuleInfo, PredId, !PredInfo,
+            !AlwaysSpecs),
 
             % Check that main/2 has the right type.
-            (
-                ReportTypeErrors = yes,
-                check_type_of_main(!.PredInfo, !Specs)
-            ;
-                ReportTypeErrors = no
-            ),
-
-            !:TotalNumUnsatisfiedConstraints =
-                !.TotalNumUnsatisfiedConstraints + NumUnsatisfiedConstraints
-        ),
-        module_info_set_pred_info(PredId, !.PredInfo, !ModuleInfo)
+        check_type_of_main(!.PredInfo, !AlwaysSpecs)
     ).
 
 %-----------------------------------------------------------------------------%
@@ -217,23 +245,21 @@
     % there are no unsatisfied type class constraints.
     %
 :- 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.
+    pred_info::in, pred_info::out, int::out, list(error_spec)::out) is det.
 
-check_pred_type_bindings(ModuleInfo, PredId, !PredInfo, ReportErrs, NumErrors,
-        !Specs) :-
+check_pred_type_bindings(ModuleInfo, PredId, !PredInfo, NumBadErrors,
+        !:NoTypeErrorSpecs) :-
+    pred_info_get_unproven_body_constraints(!.PredInfo, UnprovenConstraints0),
+    !:NoTypeErrorSpecs = [],
     (
-        ReportErrs = yes,
-        pred_info_get_unproven_body_constraints(!.PredInfo,
-            UnprovenConstraints0),
-        UnprovenConstraints0 = [_ | _]
-    ->
+        UnprovenConstraints0 = [_ | _],
         list.sort_and_remove_dups(UnprovenConstraints0, UnprovenConstraints),
         report_unsatisfied_constraints(ModuleInfo, PredId, !.PredInfo,
-            UnprovenConstraints, !Specs),
-        list.length(UnprovenConstraints, NumErrors)
+            UnprovenConstraints, !NoTypeErrorSpecs),
+        list.length(UnprovenConstraints, NumBadErrors)
     ;
-        NumErrors = 0
+        UnprovenConstraints0 = [],
+        NumBadErrors = 0
     ),
 
     pred_info_get_clauses_info(!.PredInfo, ClausesInfo0),
@@ -248,18 +274,8 @@
         UnresolvedVarsTypes = []
     ;
         UnresolvedVarsTypes = [_ | _],
-        module_info_get_globals(ModuleInfo, Globals),
-        globals.lookup_bool_option(Globals, warn_unresolved_polymorphism,
-            WarnUnresolvedPolymorphism),
-        (
-            ReportErrs = yes,
-            WarnUnresolvedPolymorphism = yes
-        ->
             report_unresolved_type_warning(ModuleInfo, PredId, !.PredInfo,
-                VarSet, UnresolvedVarsTypes, !Specs)
-        ;
-            true
-        ),
+            VarSet, UnresolvedVarsTypes, !NoTypeErrorSpecs),
 
         % Bind all the type variables in `Set' to `void' ...
         pred_info_get_constraint_proofs(!.PredInfo, Proofs0),
@@ -512,8 +528,11 @@
         words("but I'm afraid you'll have to work it out yourself."),
         words("My apologies.)")],
     Msg = simple_msg(Context,
-        [always(MainPieces), verbose_only(VerbosePieces)]),
-    Spec = error_spec(severity_warning, phase_type_check, [Msg]),
+        [option_is_set(warn_unresolved_polymorphism, yes,
+            [always(MainPieces), verbose_only(VerbosePieces)])]),
+    Severity = severity_conditional(warn_unresolved_polymorphism, yes,
+        severity_warning, no),
+    Spec = error_spec(Severity, phase_type_check, [Msg]),
     !:Specs = [Spec | !.Specs].
 
 :- func var_and_type_to_pieces(prog_varset, tvarset,
@@ -559,22 +578,6 @@
 post_typecheck_finish_pred_no_io(ModuleInfo, ErrorProcs, !PredInfo) :-
     propagate_types_into_modes(ModuleInfo, ErrorProcs, !PredInfo).
 
-    % For imported preds, we just need to ensure that all constructors
-    % occurring in predicate mode declarations are module qualified.
-    %
-:- 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.
-
-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]
-    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).
-
 post_typecheck_finish_imported_pred_no_io(ModuleInfo, ErrorProcIds,
         !PredInfo) :-
     % Make sure the vartypes field in the clauses_info is valid for imported
@@ -1603,23 +1606,15 @@
 
 %-----------------------------------------------------------------------------%
 
-    % Check that every abstract type in a module has at least one definition
-    % in either the interface or implementation of the module.  A type may
-    % have several definitions, e.g. some foreign definitions and a default
-    % Mercury definition.
-    %
-:- pred check_for_missing_definitions(module_info::in,
-    list(error_spec)::in, list(error_spec)::out) is det.
-
-check_for_missing_definitions(ModuleInfo, !Specs) :-
+check_for_missing_type_defns(ModuleInfo, Specs) :-
     module_info_get_type_table(ModuleInfo, TypeTable),
-    foldl_over_type_ctor_defns(check_for_missing_definitions_2, TypeTable,
-        !Specs).
+    foldl_over_type_ctor_defns(check_for_missing_type_defns_2, TypeTable,
+        [], Specs).
 
-:- pred check_for_missing_definitions_2(type_ctor::in, hlds_type_defn::in,
+:- pred check_for_missing_type_defns_2(type_ctor::in, hlds_type_defn::in,
     list(error_spec)::in, list(error_spec)::out) is det.
 
-check_for_missing_definitions_2(TypeCtor, TypeDefn, !Specs) :-
+check_for_missing_type_defns_2(TypeCtor, TypeDefn, !Specs) :-
     (
         get_type_defn_status(TypeDefn, ImportStatus),
         status_defined_in_this_module(ImportStatus) = yes,
cvs diff: Diffing compiler/notes
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_allegro
cvs diff: Diffing extras/graphics/mercury_allegro/examples
cvs diff: Diffing extras/graphics/mercury_allegro/samples
cvs diff: Diffing extras/graphics/mercury_allegro/samples/demo
cvs diff: Diffing extras/graphics/mercury_allegro/samples/mandel
cvs diff: Diffing extras/graphics/mercury_allegro/samples/pendulum2
cvs diff: Diffing extras/graphics/mercury_allegro/samples/speed
cvs diff: Diffing extras/graphics/mercury_cairo
cvs diff: Diffing extras/graphics/mercury_cairo/samples
cvs diff: Diffing extras/graphics/mercury_cairo/samples/data
cvs diff: Diffing extras/graphics/mercury_cairo/tutorial
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/monte
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/posix/samples
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/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/c_interface/standalone_c
cvs diff: Diffing samples/diff
cvs diff: Diffing samples/java_interface
cvs diff: Diffing samples/java_interface/java_calls_mercury
cvs diff: Diffing samples/java_interface/mercury_calls_java
cvs diff: Diffing samples/muz
cvs diff: Diffing samples/rot13
cvs diff: Diffing samples/solutions
cvs diff: Diffing samples/solver_types
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 ssdb
cvs diff: Diffing tests
cvs diff: Diffing tests/analysis
cvs diff: Diffing tests/analysis/ctgc
cvs diff: Diffing tests/analysis/excp
cvs diff: Diffing tests/analysis/ext
cvs diff: Diffing tests/analysis/sharing
cvs diff: Diffing tests/analysis/table
cvs diff: Diffing tests/analysis/trail
cvs diff: Diffing tests/analysis/unused_args
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/stm
cvs diff: Diffing tests/stm/orig
cvs diff: Diffing tests/stm/orig/stm-compiler
cvs diff: Diffing tests/stm/orig/stm-compiler/test1
cvs diff: Diffing tests/stm/orig/stm-compiler/test10
cvs diff: Diffing tests/stm/orig/stm-compiler/test2
cvs diff: Diffing tests/stm/orig/stm-compiler/test3
cvs diff: Diffing tests/stm/orig/stm-compiler/test4
cvs diff: Diffing tests/stm/orig/stm-compiler/test5
cvs diff: Diffing tests/stm/orig/stm-compiler/test6
cvs diff: Diffing tests/stm/orig/stm-compiler/test7
cvs diff: Diffing tests/stm/orig/stm-compiler/test8
cvs diff: Diffing tests/stm/orig/stm-compiler/test9
cvs diff: Diffing tests/stm/orig/stm-compiler-par
cvs diff: Diffing tests/stm/orig/stm-compiler-par/bm1
cvs diff: Diffing tests/stm/orig/stm-compiler-par/bm2
cvs diff: Diffing tests/stm/orig/stm-compiler-par/stmqueue
cvs diff: Diffing tests/stm/orig/stm-compiler-par/test1
cvs diff: Diffing tests/stm/orig/stm-compiler-par/test10
cvs diff: Diffing tests/stm/orig/stm-compiler-par/test11
cvs diff: Diffing tests/stm/orig/stm-compiler-par/test2
cvs diff: Diffing tests/stm/orig/stm-compiler-par/test3
cvs diff: Diffing tests/stm/orig/stm-compiler-par/test4
cvs diff: Diffing tests/stm/orig/stm-compiler-par/test5
cvs diff: Diffing tests/stm/orig/stm-compiler-par/test6
cvs diff: Diffing tests/stm/orig/stm-compiler-par/test7
cvs diff: Diffing tests/stm/orig/stm-compiler-par/test8
cvs diff: Diffing tests/stm/orig/stm-compiler-par/test9
cvs diff: Diffing tests/stm/orig/stm-compiler-par-asm_fast
cvs diff: Diffing tests/stm/orig/stm-compiler-par-asm_fast/test1
cvs diff: Diffing tests/stm/orig/stm-compiler-par-asm_fast/test2
cvs diff: Diffing tests/stm/orig/stm-compiler-par-asm_fast/test3
cvs diff: Diffing tests/stm/orig/stm-compiler-par-asm_fast/test4
cvs diff: Diffing tests/stm/orig/stm-compiler-par-asm_fast/test5
cvs diff: Diffing tests/stm/orig/stm-compiler-par-asm_fast/test6
cvs diff: Diffing tests/stm/orig/stm-compiler-par-asm_fast/test7
cvs diff: Diffing tests/stm/orig/stm-compiler-par-asm_fast/test8
cvs diff: Diffing tests/stm/orig/stm-compiler-par-asm_fast/test9
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