[foreign-jextract] RFR 8236434: Initial jextract API implementation

Maurizio Cimadamore maurizio.cimadamore at oracle.com
Fri Dec 20 15:25:19 UTC 2019


Hi,
here's the initial webrev for the jextract API:

http://cr.openjdk.java.net/~mcimadamore/panama/8236434/

And here's a link to the javadoc for said API:

http://cr.openjdk.java.net/~mcimadamore/panama/jextract_javadoc

Summary:

* most of the configuration changes come from the "foreign" branch - 
that is, when building the new "foreign-jextract" branch you will need 
to specify an LLVM install (e.g. --with-libclang); I've removed few 
things that seemed to be unused, but most of the stuff is really the 
same - in principle I could have done w/o - but then it's really hard to 
use and test the API.

* In the implementation code, you will find a Java port of libclang - 
this port has been fully written using the stuff in the foreign-abi 
branch (hence, method handles and var handles). The lowest layer of this 
API is contained in the 'libclang' folder and has been autogenerated for 
the most part. In other words, there's not a single line of JNI code in 
here.

* It's interesting to note how - despite the many native calls in used 
in this port, only _one_ required breaking into privileged mode, and 
into ForeignUnsafe. I think that's pretty good!

* I've paid extra attention when using layout constants - more 
specifically, since libclang already tries to be portable and to define 
things so that they have same sizes on all platforms (e.g. a long in 
Linux becomes a 'long long' in Windows), I've defined a bunch of 
size-specific ABI layout constants in ClangLayouts, and then used these 
everywhere in the library port. In the library implementation there are 
few places where we need to use real ABI-dependent layouts (when 
creating a Type object from a clang type), so you'll see some uses of 
another set of constants defined inside LayoutUtils. Hopefully, all this 
gymnastic should result in something that works across all ABIs.

* I've added a very simple smoke test - I know we need to do more here, 
but I think it's better to start somewhere. Besides, this test should 
provide a useful basis to, eventually, build a more general framework to 
validate the result of the jextract API parsing.

* There's no minimal jextract as of yet - since this changeset is 
already very big, I think it's better to first push the API, and then 
review the extractor code separately.

Cheers
Maurizio



More information about the panama-dev mailing list