[foreign-abi] RFR: Revisit FunctionDescriptor

Maurizio Cimadamore maurizio.cimadamore at oracle.com
Tue Feb 4 12:15:49 UTC 2020


What about having two factory methods (as we have in other layout 
classes) - e.g.

FunctionDescriptor.of( ... )
FunctionDescriptor.ofVariadic(...)

Maurizio

On 04/02/2020 10:14, Jorn Vernee wrote:
> Ah, I missed the use in RuntimeHelper. That seems to be the only real 
> use case.
>
> Wrt using annotations instead, I guess what I'm saying is; I don't see 
> that much value in being able to attach this single bit of information 
> to a FunctionDescriptor, but I see more value in being able to attach 
> any kind of information to a FunctionDescriptor. Since the ABI 
> machinery doesn't use it either, the variadic flag seems like an 
> arbitrary appendage. Something like that feels more at home as an 
> annotation (a mechanism for arbitrary appendages).
>
> Though, my main gripe is with having to read (and write) the extra 
> boolean argument all the time when a FunctionDescriptor is created, 
> even though this extra visual information is rarely relevant (and 
> indeed, it is irrelevant if you're reading just foreign-abi code). 
> That's the main thing I'd like to remove. Since the flag is currently 
> being used, I'd suggest replacing the boolean flag passed to the 
> factory with an asVariadic() method.
>
> New webrev: 
> http://cr.openjdk.java.net/~jvernee/panama/webrevs/cleanup_fd/webrev.01/
>
> Thoughts?
>
> Jorn
>
> On 03/02/2020 19:10, Maurizio Cimadamore wrote:
>> (without having looked at the code) - jextract runtime support is 
>> currently using the varargs info to generate varargs MethodHandle 
>> which do the specialization. As you say, we can tackle that problem 
>> with annotations, although I'm not sure of what's the net gain in 
>> moving things around. At this point I guess I'd prefer jextract to 
>> not generate any magic annotation - the Declaration.Function class 
>> knows whether a function is a varargs or not, so there's no need to 
>> truck that info into the runtime.
>>
>> Maurizio
>>
>> On 03/02/2020 16:19, Jorn Vernee wrote:
>>> Hi,
>>>
>>> Please review the following patch that revisits FunctionDescriptor: 
>>> 1. Adds appendArgumentLayouts, and changeReturnLayout combinator 
>>> methods. 2. Removes the variadic flag. This flag was not really 
>>> being used in practice, since we can not link variadic functions 
>>> directly any ways. Using the new appendArgumentLayouts method we can 
>>> 'specialize' a base FD with different argument layouts representing 
>>> vararg arguments. I think if a similar flag is needed in the future, 
>>> we should consider adding annotations to FunctionDescriptor, and 
>>> making it an annotation instead, but currently it doesn't seem like 
>>> it's pulling it's weight by being in the API.
>>>
>>> Webrev: 
>>> http://cr.openjdk.java.net/~jvernee/panama/webrevs/cleanup_fd/webrev.00/ 
>>>
>>> Bugs: https://bugs.openjdk.java.net/browse/JDK-8238226, 
>>> https://bugs.openjdk.java.net/browse/JDK-8237580
>>>
>>> Again, this patch applies on top of the Binding cleanup patch.
>>>
>>> Thanks,
>>> Jorn
>>>


More information about the panama-dev mailing list