[foreign-jextract] RFR 8236434: Initial jextract API implementation
Maurizio Cimadamore
maurizio.cimadamore at oracle.com
Fri Dec 20 21:45:29 UTC 2019
On 20/12/2019 16:15, Jorn Vernee wrote:
> Hi,
>
> Some files seem to be missing from the webrev. I only see Declaration
> in the exported package, and when building it complains about missing
> types (e.g. Position, Type).
Whoops - seems like 3 files were not `hg added` - attempt no. 2:
http://cr.openjdk.java.net/~mcimadamore/panama/8236434_v2
Maurizio
>
> Jorn
>
> On 20/12/2019 16:25, Maurizio Cimadamore wrote:
>> 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