[foreign-abi] RFR 8236004: Memory access var handles should support MemoryAddress carrier
Paul Sandoz
paul.sandoz at oracle.com
Wed Dec 18 17:43:18 UTC 2019
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.
> 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