Estimated hours taken: 6
Fix a semantic hole. Previously, unique variables could be used
as non-local variables inside a lambda goal and shared within that
lambda. This fixes the problem by requiring that all non-local
vars to a lambda must be ground-shared.
compiler/modecheck_unify.m:
Changes detailed above.
compiler/mode_errors.m:
Add a new kind of mode error, mode_error_non_local_lambda_var.
One small change to find_important_errors/3 to ensure that this
error will be reported if the lambda is an implicit call argument
unification.
compiler/inst_util.m:
Export make_shared_inst_list/4 for use by modecheck_unify.m.
compiler/instmap.m:
New predicate: instmap__set_vars/4, which sets multiple vars
in an instmap.
tests/invalid/bind_var_errors.m:
tests/invalid/bind_var_errors.err_exp:
Regression test.
Estimated hours taken: 2
Better error reporting for variables bound in illegal places.
compiler/mode_info.m:
Add a var_lock_reason, specifying the reason why a variable
is locked during mode checking.
compiler/modecheck_unify.m:
compiler/modes.m:
compiler/unique_modes.m:
Specify the reason when locking some variables.
compiler/mode_errors.m:
When reporting var locking errors, give the reason why the
var was locked.
tests/invalid/Mmakefile:
tests/invalid/bind_var_errors.err_exp:
tests/invalid/bind_var_errors.m:
Regression tests for the above changes.