Currently we only allow non-primitive Java types to used with foreign_type
pragmas. This means that for foreign types that map on to Java primitive types
we have to use their boxed form (e.g. java.lang.Long, java.lang.Float etc) in
the foreign_type pragma. Doing so results in unnecessary boxing and is a
source of errors (e.g. accidently comparing for reference equality instead of
value equality).
This change causes the MLDS->Java code generator to recognise primitive
foreign_types and generate code that works for them directly. (In effect
their handling is not really different to how the builtin types are handled.)
doc/reference.texi:
Change the language so Java foreign types are allowed to be a
primitive Java types.
compiler/mlds_to_java.m:
Recognise foreign types that are defined as primitive types in Java and
generate code that avoids the need for (some) boxing of them.
library/array.m:
Handle arrays of Java bytes, shorts, longs and floats specially.
(boolean, char, int and double were already handled thus.)
NEWS:
Announce the above.
tests/hard_coded/Mmakefile:
tests/hard_coded/test_java_foreign_primitive.{m,exp}:
Test that foreign types work with primitive types in Java.