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: 8
Branches: main, release
Fix a bug reported by Peter Hawkins.
compiler/superhomogeneous.m:
When converting lambda expressions into superhomogeneous form,
position the compiler created unifications that correspond to
output arguments *after* the original body of the lambda.
Placing them all before the body, leads to problems if the body
is impure because mode analysis cannot reorder the unifications
over the impure goal as it needs to in order for the lambda to
be mode correct.
XXX According to a comment, intermod.m:643, we allow head
unifications to be reordered w.r.t impure goals, but this doesn't
seem to extend to lambda expressions for some reason. Actually,
the rules for reordering over impure goals should be less
strict then they currently are, at least for construction
and assignment unifications. (I'll look into this separately though).
compiler/arg_info.m:
Mention how the predicates in this module diff from the newly
introduced partition_args_and_lambda_vars in superhomogenous.m.
(Because the former cannot handle undefined modes.)
compiler/state_var.m:
Generalise the predicate finish_head_and_body/6 so that it works
on an arbitrary number of conjoined goals.
compiler/mode_util.m:
Add a predicate to test whether a mode is undefined.
compiler/add_aditi.m:
compiler/add_clause.m:
Conform to the above changes.
tests/valid/Mmakefile:
tests/valid/impure_lambda_bug.m:
Test case for the above bug.