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: 12
Branches: main
Fix two problems that together caused bug Mantis bug #44.
The first bug was that unify_gen.m wasn't checking whether a variable it was
adding to a closure was of dummy type or not.
The second bug was that the code for recognizing whether a type is dummy or not
recognized only two cases: builtin dummy types such as io.state, and types
with one function symbol of arity zero. In this program, there is a notag
wrapper around a dummy type. Since the representation of a notag type is
always the same as the type it wraps, this notag type should be recognized
as a dummy type too.
compiler/unify_gen.m:
Fix the first bug by adding the required checks.
compiler/code_info.m:
Add a utility predicate to factor out some now common code in
unify_gen.m.
(The modifications to all the following files were to fix the second bug.)
compiler/hlds_data.m:
compiler/prog_type.m:
Change the type_category type (in prog_type.m) and the enum_or_dummy
type (in hlds_data.m) to separate out the representation of notag types
from other du types. This allows the fix for the second bug, and
incidentally allows some parts of the compiler to avoid the same tests
over and over.
To ensure that all places in the compiler that could need special
handling for notag types get them, rename those types to
type_ctor_category (since it does *not* take argument types into
account) and du_type_kind respectively.
Since the type_ctor_category type needs to be modified anyway,
change it to allow code that manipulates values of the type to
factor out common code fragments.
Rename some predicates, and turn some into functions where this helps
to make code (either here or in clients) more robust.
compiler/make_tags.m:
When creating a HLDS representation for a du type, record whether
it is a notag type (we already recorded whether it is enum or dummy).
compiler/type_util.m:
Fix the predicate that tests for dummy types by recognizing the third
way a type can be a dummy type.
Don't test for dummyness of the argument when deciding whether
a type could be a notag types; just record it as a notag type,
and let later lookup code use the new fixed algorithm to do the right
thing.
Add a type for recording the is_dummy_type/is_not_dummy_type
distinction.
Rename some predicates, and turn some into functions where this helps
to make code (either here or in clients) more robust.
Add an XXX about possible redundant code.
compiler/llds.m:
Use the new type instead of booleans in some places.
compiler/add_pragma.m:
compiler/add_special_pred.m:
compiler/add_type.m:
compiler/bytecode_gen.m:
compiler/continuation_info.m:
compiler/ctgc.selector.m:
compiler/ctgc.util.m:
compiler/equiv_type_hlds.m:
compiler/erl_call_gen.m:
compiler/erl_code_gen.m:
compiler/erl_code_util.m:
compiler/erl_unify_gen.m:
compiler/exception_analysis.m:
compiler/export.m:
compiler/foreign.m:
compiler/higher_order.m:
compiler/hlds_data.m:
compiler/hlds_out.m:
compiler/hlds_pred.m:
compiler/inst_match.m:
compiler/intermod.m:
compiler/llds_out.m:
compiler/ml_call_gen.m:
compiler/ml_closure_gen.m:
compiler/ml_code_gen.m:
compiler/ml_code_util.m:
compiler/ml_simplify_switch.m:
compiler/ml_switch_gen.m:
compiler/ml_type_gen.m:
compiler/ml_unify_gen.m:
compiler/mlds.m:
compiler/mlds_to_c.m:
compiler/mlds_to_gcc.m:
compiler/mlds_to_il.m:
compiler/mlds_to_java.m:
compiler/opt_debug.m:
compiler/opt_util.m:
compiler/polymorphism.m:
compiler/pragma_c_gen.m:
compiler/prog_type.m:
compiler/rtti_to_mlds.m:
compiler/simplify.m:
compiler/special_pred.m:
compiler/stack_layout.m:
compiler/switch_gen.m:
compiler/switch_util.m:
compiler/table_gen.m:
compiler/term_constr_util.m:
compiler/term_norm.m:
compiler/trace_gen.m:
compiler/trailing_analysis.m:
compiler/type_ctor_info.m:
compiler/type_util.m:
compiler/unify_proc.m:
compiler/var_locn.m:
Conform to the changes above.
Make a few analyses more precise by using the new detail in the
type_ctor_category type to make less conservative assumptions about
du types that are either notag or dummy.
In ctgc.selector.m, ctgc.util.m, make_tags.m, mlds_to_java.m
and special_pred.m, add XXXs about possible bugs.
tests/valid/fzn_debug_abort.m:
Add the bug demo program from Mantis as a regression test.
tests/valid/Mmakefile:
tests/valid/Mercury.options:
Enable the new test, and run it with the old bug-inducing option.