mirror of
https://github.com/Mercury-Language/mercury.git
synced 2025-12-16 06:14:59 +00:00
42 lines
1.7 KiB
Plaintext
42 lines
1.7 KiB
Plaintext
- undefined insts/modes cause spurious flow-on errors
|
|
|
|
- the name mangling code needs to be generalized
|
|
|
|
- The --static-ground-terms sometimes causes duplicate labels in the
|
|
generated C code. Example:
|
|
|
|
:- pred special_pred_info(special_pred_id, type, string, list(type),
|
|
list(mode), determinism).
|
|
:- mode special_pred_info(in, in, out, out, out, out) is det.
|
|
|
|
special_pred_info(unify, Type, "__Unify__", [Type, Type], [In, In], semidet) :-
|
|
In = (ground -> ground).
|
|
special_pred_info(index, Type, "__Index__", [Type, IntType], [In, Out], det) :-
|
|
term__context_init(Context),
|
|
IntType = term__functor(term__atom("int"), [], Context),
|
|
In = (ground -> ground),
|
|
Out = (free -> ground).
|
|
special_pred_info(compare, Type,
|
|
"__Compare__", [ResType, Type, Type], [Out, In, In], det) :-
|
|
term__context_init(Context),
|
|
ResType = term__functor(term__atom("comparison_result"), [], Context),
|
|
In = (ground -> ground),
|
|
Out = (free -> ground).
|
|
|
|
- The followcode transformation is buggy, in that it can make valid
|
|
code become invalid due to determinism errors. We need to fix
|
|
this by running determinism analysis once before followcode
|
|
to check for errors, and then running it again after followcode
|
|
this time ignoring any errors. Or alternately we could put more
|
|
intelligence into the followcode transformation pass so that it doesn't
|
|
apply the transformation if it would introduce a determinism error.
|
|
This has never occurred in practice, so it is a very low priority.
|
|
|
|
- Similarly, inlining flattens conjs which may introduce detism errors.
|
|
|
|
- The output of polymorphism is not in super-homogeneous form.
|
|
e.g. unification of pair/1. This does not cause any known bugs
|
|
at this time, since the code generator can handle that, but it
|
|
should be fixed at some stage.
|
|
|