tests/warnings/*.m:
Bring the programming style of these modules up to date,
except where the problem being tested for seems to be related
to the old programming style
In the infinite_recursion test case, add code that we *should*
warn about, but currently don't.
tests/warnings/*.m:
Update the expected outputs to account for the changes in line
numbers, and the fact that the compiler computes the contexts
of (if C then T else E) if-then-elses differently from (C -> T; E)
if-then-else (it takes the context of the "then" vs the context
of the ";").
Delete arg_order_rearrangment.exp2. It was long unused, but
deleting it in CVS would not have allowed us to put it back later.
tests/invalid/*.{m,err_exp}:
tests/misc_tests/*.m:
tests/mmc_make/*.m:
tests/par_conj/*.m:
tests/purity/*.m:
tests/stm/*.m:
tests/string_format/*.m:
tests/structure_reuse/*.m:
tests/submodules/*.m:
tests/tabling/*.m:
tests/term/*.m:
tests/trailing/*.m:
tests/typeclasses/*.m:
tests/valid/*.m:
tests/warnings/*.{m,exp}:
Make these tests use four-space indentation, and ensure that
each module is imported on its own line. (I intend to use the latter
to figure out which subdirectories' tests can be executed in parallel.)
These changes usually move code to different lines. For the tests
that check compiler error messages, expect the new line numbers.
browser/cterm.m:
browser/tree234_cc.m:
Import only one module per line.
tests/hard_coded/boyer.m:
Fix something I missed.
Estimated hours taken: 50
Branches: main
Make all the pre-HLDS and front-end passes of the compiler gather up
all their error messages and print them all at once, in sorted order,
unless the user asked for progress messages, in which case we print all the
errors accumulated so far just before each printing each progress message.
This should make error message output significantly easier to interpret.
compiler/module_imports.m:
Add a new field to the module_imports structure (the main pre-HLDS
representation of the parse tree) to hold the list of error messages
generated so far.
Rename the module_imports structure as the module_and_imports
structure, since it holds the module's items as well as information
about its imports.
Update the access predicates to encourage getting the items, the error
messages and the error indication all at once.
Add mechanisms for updating the error indication and the error
messages.
Add a distinguishing prefix to the field names of the structure.
compiler/error_util.m:
compiler/hlds_error_util.m:
Add facilities for printing error messages in batches.
In error_util.m, delete an unused argument from several predicates.
compiler/mercury_compile.m:
compiler/intermod.m:
Gather up error messages to print in batches.
In the parts of the code affected by the above, explicitly pass
around a globals structure, instead of having all the predicates
get it of the I/O state. Since some code (e.g. the start recompilation
system) still uses the copy in the I/O state, we ensure that this copy
is kept in sync with the explicitly passed around copy.
Rename some predicates to avoid ambiguities.
compiler/modules.m:
Return errors in the module_and_imports structure, not separately.
Gather up error messages to print in batches.
Explicitly pass around globals structures.
compiler/read_modules.m:
Rename the read_modules type to have_read_module_map, since this is
more explicit.
For each module we have already read, remember not just the items we
read from it, but also the error messages we generated during the
reading. This is so these error messages can be printed together with
other errors from other sources.
Explicitly pass around globals structures.
compiler/prog_io.m:
compiler/purity.m:
compiler/stratify.m:
Rename several predicates to avoid ambiguities.
compiler/modes.m:
Change the interface of the main predicate to avoid the need for a
lambda expression in mercury_compile.m.
compiler/recompilation.check.m:
Add a distinguishing prefix to the field names of a structure.
Fix a wrong definition of this_file.
Conform to the changes above.
compiler/compiler_target_code.m:
compiler/deps_map.m:
compiler/make.m:
compiler/make.dependencies.m:
compiler/make.module_dep_file.m:
compiler/make.module_target.m:
compiler/make.program_target.m:
compiler/make.util.m:
compiler/make_hlds.m:
compiler/make_hlds_passes.m:
compiler/trans_opt.m:
compiler/write_deps_file.m:
Conform to the changes above.
compiler/add_clause.m:
compiler/add_pragma.m:
compiler/state_var.m:
Add an import of io, since their parent make_hlds.m does not import io
anymore.
In add_pragma, update an error message that did not mention trseg as
well as tr as indicating a trailing grade.
tests/hard_coded/Mmakefile:
Move two tests that cannot pass in debug grades due to the lack of tail
recursion to the list containing the other tests with this property.
tests/invalid/test_feature_set.err_exp:
Update the expected output of this test to expect the updated error
message from add_pragma.
tests/invalid/test_feature_set.err_exp2:
Add this file as the expected output for trailing grades.
tests/invalid/*.err_exp:
tests/warnings/*.err_exp:
Update the expected output for many tests to expect the error messages
in sorted order.
Branches: main
compiler/mercury_to_mercury.m:
Don't write an outer pair of brackets when formatting terms with '.'
or ':' as the functor, which made module-qualified types in error
messages unnecessarily ugly.
tests/hard_coded/impl_def_literal.exp:
tests/invalid/actual_expected.err_exp:
tests/invalid/bad_instance.err_exp:
tests/invalid/errors2.err_exp:
tests/invalid/ext_type.err_exp:
tests/invalid/ext_type_bug.err_exp:
tests/invalid/funcs_as_preds.err_exp:
tests/invalid/illtyped_compare.err_exp:
tests/invalid/instance_dup_var.err_exp:
tests/invalid/invalid_instance_declarations.err_exp:
tests/invalid/method_impl.err_exp:
tests/invalid/mixed_up_streams.err_exp:
tests/invalid/mpj4.err_exp:
tests/invalid/nullary_ho_func_error.err_exp:
tests/invalid/overloading.err_exp:
tests/invalid/purity/impure_func_t5.err_exp:
tests/invalid/purity/impure_pred_t1.err_exp:
tests/invalid/purity/impure_pred_t1_fixed.err_exp:
tests/invalid/purity/impure_pred_t2.err_exp:
tests/invalid/record_syntax_errors.err_exp:
tests/invalid/tc_err1.err_exp:
tests/invalid/tc_err2.err_exp:
tests/invalid/try_bad_params.err_exp:
tests/invalid/type_error_ambiguous.err_exp:
tests/misc_tests/pretty_print_test.exp:
tests/warnings/inference_test.exp:
Update test cases.
Estimated hours taken: 8
Branches: main
Modify the type and purity check passes to gather up all error messages,
and print them all at once after sorting.
compiler/typecheck.m:
compiler/typeclasses.m:
compiler/post_typecheck.m:
compiler/purity.m:
Gather up all error messages instead of printing them when generated.
In some places the gathered list of error specifications allows us
to eliminate error counts and error flags.
Eliminate the last occurrences of io.write_* in these modules,
replacing them with error_specs.
Change the error messages generated by purity.m to eliminate the
unnecessary module qualification of the name of the predicate or
function in which the error occurs.
compiler/typecheck_errors.m:
Turn the predicates here that used to print error messages
into functions that just return the error specification.
compiler/mode_errors.m:
Make a predicate used by post_typecheck.m return an error spec instead
of writing it out.
compiler/typecheck_info.m:
Record the list of errors instead of simple a count of the errors
printed.
compiler/mercury_compile.m:
Print the error message batches returned by type checking and purity
checking.
compiler/error_util.m:
Modify the way we represent severity to allow passes such as
typechecking to count the number of errors *without* printing
anything.
compiler/add_pred.m:
compiler/det_report.m:
compiler/make_hlds_warn.m:
compiler/module_qual.m:
Conform to the change in error_util.m.
compiler/Mercury.options:
Record the fact that some more compiler modules need the workaround
for trace goals.
tests/invalid/*err_exp:
tests/warnings/*exp:
Update the expected output files to conform to the changes above.
This mosly involves expecting sorted messages without duplicates.
Estimated hours taken: 14
Branches: main
Change the compiler and tools so that `.' and not `:' is now used as the
module separator in all output.
Infix `.' now has associativity yfx and priority 10.
NEWS:
Report the change.
configure.in:
Amend the test for an up-to-date Mercury compiler to check whether
it recognises `.' as a module qualifier.
compiler/code_gen.m:
compiler/error_util.m:
compiler/hlds_out.m:
compiler/prog_out.m:
compiler/prog_util.m:
compiler/rl_exprn.m:
compiler/rl_gen.m:
compiler/source_file_map.m:
compiler/unused_args.m:
library/io.m:
library/rtti_implementation.m:
library/type_desc.m:
runtime/mercury_debug.c:
runtime/mercury_deconstruct.c:
runtime/mercury_stack_trace.c:
Change `:' to `.' as module separator for output.
compiler/mercury_to_mercury.m:
compiler/prog_io_typeclass.m:
As above.
Fixed a bug where `.' was not being recognised as a module separator.
doc/reference_manual.texi:
Report the change.
library/term_io.m:
Ensure that infix `.' is written without surrounding spaces.
tests/hard_coded/dot_separator.m:
tests/hard_coded/dot_separator.exp:
tests/hard_coded/Mmakefile:
Test case added.
Estimated hours taken: 0.5
compiler/mode_errors.m:
When printing out mode inference messages,
make sure to remove the modes for the extra
type_info and type_class_info arguments inserted
by polymorphism.m.
tests/warnings/Mmakefile:
tests/warnings/inference_test.m:
tests/warnings/inference_test.exp:
Add a test case to check the type/mode/determinism
inference messages.