[foreign] RFC 8219042: Cross-header layout resolution does not work

Maurizio Cimadamore maurizio.cimadamore at oracle.com
Fri Feb 15 19:13:08 UTC 2019


Hi,
the following patch clears up some of the issues around layout 
resolution, by making the resolution support more regular. Instead of 
second-guessing the user intent, this patch puts forward a well-defined 
resolution scheme which is independent on the order in which struct 
types are allocated, allows for better performances (by avoiding tons of 
reflective scans) and allow for explicit extension of the lookup context.
Webrev:

http://cr.openjdk.java.net/~mcimadamore/panama/8219042_v3/

The rule of the game are:

* each Panama annotation @Native{Struct, Header, Callback} defines a 
'resolutionContext' attribute which points to an array of j.l.Class

* Every Panama construct C is associated with a default resolution root 
set, which is a singleton set, composed of the outermost class in which 
C is defined

* if additional resolution roots are provided in the annotation, these 
are added to the default resolution set

* each class in the resolution root set is traversed, from outermost to 
innnermost, looking for named entities (such as structs) which are then 
added to the resolution context


This allows us to clean up the existing code, removing calls to 
'scanMethods' from the classes generating bound implementation of the 
Panama interfaces. This also makes the binder more robust and separates 
the resolution logic from what jextract might want to do in the future 
(which is an important point: not all structs interfaces will be 
generated by jextract, although that will be the common case).


I've added a test for jextract (although clang/FFI is already exercising 
this logic), and also a more complete test where I check various 
scenarios of layout resolution:

* multiple structs nested in same enclosing interafce
* multiple structs in separate toplevel classes; this has both a 
negative test (no resolutionContext in the annotation) and a positive 
test (the right resolutionContext is set)

Thanks to Jorn, Sundar for the helpful discussions!

Maurizio



More information about the panama-dev mailing list