On Wed, 15 Mar 2023 19:33:19 GMT, Jorn Vernee <jver...@openjdk.org> wrote:

>> src/java.base/share/classes/jdk/internal/foreign/abi/CallingSequenceBuilder.java
>>  line 208:
>> 
>>> 206:     static boolean isUnbox(Binding binding) {
>>> 207:         return switch (binding) {
>>> 208:             case Binding.VMStore unused -> true;
>> 
>> I wonder... here it might be better to capture the box/unbox nature of a 
>> binding in a virtual method in the binding class? E.g. isBox(), isUnbox() ?
>
> I prefer this approach, to be honest, since the logic for all the different 
> binding operators is in one place. It gives an overview of which operators 
> are expected in an unboxing recipe. Making them virtual methods would put 
> quite a bit of visual distance between the different `true`/`false` values.
> 
> I've been through the Binding file quite a bit, and the amount of 
> scrolling/searching needed to find a particular implementation is kind of 
> annoying.

To pull on that string some more. I think we should move the implementations of 
various Binding::verify methods here, or perhaps into a separate 
BindingVerifier class.

Ditto for the Binding::interpret implementations. They could be moved to 
BindingInterpreter. The Binding class would just be left as a simple bag of 
records + documentation for each operator.

The main motivation for this would be that, if you're looking at e.g. 
interpretation in `Binding`, there's a lot of noise that you have to filter 
through. I think it makes more sense to group these things into classes (for 
specialization/verification/interpretation), where all the code in a class is 
logically related.

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

PR: https://git.openjdk.org/jdk/pull/13047

Reply via email to