Usage feedback rewriting jdk.internal.foreign.abi.BindingSpecializer

Jorn Vernee jorn.vernee at oracle.com
Tue Mar 14 15:31:37 UTC 2023


Hello,

I've re-written jdk.internal.foreign.abi.BindingSpecializer to use the 
new class file API. The patch can be found here: 
https://github.com/openjdk/panama-foreign/compare/foreign-memaccess+abi...JornVernee:panama-foreign:CFA

I did this mostly based on just the javadoc.

Some things I noted while doing this:

1. The translation is really straightforward, and there were a lot of 
places where simplification was possible. Such as, using 
CodeBuilder::constantInstruction is much nicer than manually having to 
find the right bytecode for the constant you have. Another nice thing 
was the CodeBuilder::parameterSlot method. I previously had to translate 
parameter indices to slots manually. Great work!

2. I'm not sure what the expected way of mapping a Class<?> (or 
ClassDesc) into a TypeKind is. I couldn't find a factory for that in 
TypeKind. The code I have often needs to map Class<?> objects into 
TypeKinds. I ended up writing a manual 'mapper' method instead [1].

3. Sometimes I need to emit a constant zero for a particular type. If I 
know the type is e.g. long, I can use `cb.constantInstruction(0L)`, but 
sometimes the type is not statically known, and it would be nice if 
there was a CodeBuilder::constantZero(TypeKind) for that. I've 
implemented this manually as well [2]

4. The same goes for `dup`. It would be nice if there was a 
CodeBuilder::dup(TypeKind) that automatically selects either dup or 
dup2. See [3]

5. I'll throw in a bike shed comment as well :) 
CodeBuilder::labelBinding sounds a bit strange. From the name, I 
initially wasn't sure whether this was returning an existing binding for 
a previously bound label, or binding the label I passed it. (it also 
doesn't help that the method doesn't have any javadoc at the moment). I 
think the name "bindLabel" (or just "bind", as we have in HotSpot) would 
be more intuitive.

Cheers,
Jorn

[1]: 
https://github.com/openjdk/panama-foreign/compare/foreign-memaccess+abi...JornVernee:panama-foreign:CFA#diff-2a53a53e1a977d7dbd5591e63c3b735d4db31744294625ae0d856d2a902d996eR414
[2]: 
https://github.com/openjdk/panama-foreign/compare/foreign-memaccess+abi...JornVernee:panama-foreign:CFA#diff-2a53a53e1a977d7dbd5591e63c3b735d4db31744294625ae0d856d2a902d996eR959
[3]: 
https://github.com/openjdk/panama-foreign/compare/foreign-memaccess+abi...JornVernee:panama-foreign:CFA#diff-2a53a53e1a977d7dbd5591e63c3b735d4db31744294625ae0d856d2a902d996eR947



More information about the classfile-api-dev mailing list