On Wed, 17 May 2023 18:18:03 GMT, Maurizio Cimadamore <mcimadam...@openjdk.org> 
wrote:

>> This patch adds an instance method on `Linker`, namely 
>> `Linker::canonicalLayouts` which returns all the layouts known by the linker 
>> as implementing some ABI type. For instance, if I call this on my machine 
>> (Linux/x64) I get this:
>> 
>> 
>> jshell> import java.lang.foreign.*;
>> 
>> jshell> Linker.nativeLinker().canonicalLayouts()
>> $2 ==> {char16_t=c16, int8_t=b8, long=j64, size_t=j64, bool=z8, int=i32, 
>> long long=j64, int64_t=j64, void*=a64, float=f32, char=b8, int16_t=s16, 
>> int32_t=i32, short=s16, double=d64}
>> 
>> 
>> This can be useful to discover the ABI types supported by a linker 
>> implementation, as well as for, in the future, add support for more exotic 
>> (and platform-dependent) linker types, such as `long double` or `complex 
>> long`.
>
> Maurizio Cimadamore has updated the pull request incrementally with one 
> additional commit since the last revision:
> 
>   Tweak javadoc

> I don't see `char16_t` defined either and i believe that type is an alias for 
> `uint_least16_t`, which is a type of _at least_ 16 bits. We need to use a C 
> type of `unsigned short` or `uint16_t`:
> 
>     * Java `ValueLayout.JAVA_SHORT` <-> C `short`
> 
>     * Java `ValueLayout.JAVA_CHAR` <-> C `unsigned short`
> 
> 
> ?
Good point on "unsigned short". 
> 
> For canonical type names we may want to prefer types specified by the C 
> language over those defined by the C library in standard headers?

Yes, I think better to stick with standard C types - IMHO with the exception of 
size_t which is very ubiquitous.

-------------

PR Comment: https://git.openjdk.org/jdk/pull/14037#issuecomment-1553609560

Reply via email to