[foreign-abi] RFR 8236004: Memory access var handles should support MemoryAddress carrier

Maurizio Cimadamore maurizio.cimadamore at oracle.com
Thu Dec 19 09:27:11 UTC 2019


I've pushed this - if we want to add more test we can do that as a 
separate push.

Cheers
Maurizio

On 18/12/2019 18:03, Maurizio Cimadamore wrote:
>
> On 18/12/2019 17:43, Paul Sandoz wrote:
>> Some subtle stuff going on here!
>>
>> The current patch looks correct to me.
>>
>> Having a few negative tests, passing in bogus arguments is useful. I 
>> can send out a webrev if you like.
>
> OK - thanks!
>
> Maurizio
>
>>
>>> On Dec 18, 2019, at 8:12 AM, Maurizio Cimadamore 
>>> <maurizio.cimadamore at oracle.com> wrote:
>>>
>>>
>>> On 18/12/2019 13:42, Maurizio Cimadamore wrote:
>>>> X-VarHandleMemoryAddressView.java.template:
>>>> - In the long2addr method I'd prefer using invokeExact instead of 
>>>> invoke, to make sure the call always gets inlined.
>>> Forgot - this was deliberate too - the target type is not (and 
>>> cannot be) the same as the declared return type (MemoyAddress) 
>>> because that's in a different module. So invoke() is, I believe, the 
>>> only hacky option here.
>>>
>> Since this is trusted code we can use MH.linkToStatic.  Then, if need 
>> be, change it to invokeExact when the API exits incubation.
>>
>> Using MH.linkToStatic is a little more complicated as you need to 
>> pass in a trailing MemberName, which can be created from a Method e.g.:
>>
>>
>>    Method m = … // get method for 
>> jdk.incubator.foreign.MemoryAddress.ofLong(long )MemoryAddress
>>    ADDRESS_MEMBER_NAME = new MemberName(m)
>>
>>   …
>>
>>    return ($type$) MethodHandle.linkToStatic(value, 
>> ADDRESS_MEMBER_NAME);
>>
>> Paul.


More information about the panama-dev mailing list