[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