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: 15
Branches: main
Support currying of multi-moded predicates or functions when the mode to curry
can be determined from the insts of the higher-order arguments. e.g.
mymap(P, L0, L) :-
map(wrap(P), L0, L).
:- pred wrap(...).
:- mode wrap(in(pred(...) is det), ...) is det.
:- mode wrap(in(pred(...) is cc_multi, ...) is cc_multi.
...
compiler/post_typecheck.m:
Don't abort immediately on taking the address of a multi-moded
predicate. Leave the proc_id as invalid_proc_id and handle that
in polymorphism.m.
compiler/polymorphism.m:
Convert higher order terms to lambda goals even if the proc_id is
invalid (as above) moded by arbitrarily using the first mode. Then
polymorphism can proceed as usual. Mark the goals with feature
`feature_lambda_undetermined_mode', which tells mode checking to
handle it.
Add a predicate to fix up such lambda goals once mode checking does
figure out which mode should be called.
compiler/modecheck_unify.m:
compiler/mode_errors.m:
Handle goals with the `feature_lambda_undetermined_mode'. Try to
select a unique mode for the curried predicate then fix up the lambda
goal.
compiler/hlds_goal.m:
compiler/saved_vars.m:
Add `feature_lambda_undetermined_mode'.
compiler/goal_util.m:
Add a predicate to return all the pred_ids called in a goal
with the associated argument variables.
NEWS:
doc/reference_manual.texi:
Document and announce the change.
tests/hard_coded/Mmakefile:
tests/hard_coded/multimode_addr.exp:
tests/hard_coded/multimode_addr.m:
tests/invalid/Mmakefile:
tests/invalid/multimode_addr_problems.err_exp:
tests/invalid/multimode_addr_problems.m:
Add tests.