[foreign-jextract] [Rev 01] RFR: 8239493: Add classfile generation to jextract
Athijegannathan Sundararajan
sundar at openjdk.java.net
Tue Apr 7 11:35:01 UTC 2020
On Tue, 7 Apr 2020 10:10:52 GMT, Jorn Vernee <jvernee at openjdk.org> wrote:
>> Hi,
>>
>> This patch adds class file generation to jextract using ASM, which in some places replaces the generation done by the
>> current source code generator. In particularly, it replaces the generation of all constant fields with static getters,
>> that use dynamic constants as backing storage rather than fields. This allows for more sharing between constants, and
>> also reduces the pressure on clinit code size a lot, enabling extraction of much bigger native header files. The new
>> scheme generates an extra constant helper class which holds all these constants, and the source generator generates the
>> high-level wrapper functions. The scheme can also be extended to generate multiple constant helper classes, should we
>> run out of constant pool indices (in rare cases). This patch reworks the interface of JavaSourceBuilder, since extra
>> parameters are needed in order to do the new constant generation. For generating methods that need constants, it calls
>> into a new ConstantHelper class, which returns a DirectMethodHandleDesc describing the generated constant getter. A
>> call to this getter is then emitted. This patch also merges the HandleSourceFactory and StaticWrapperSourceFactory
>> into OutputFactory, since only the latter was ever being used, but the split in code made it a lot harder to reason
>> about the correctness of for instance changing C identifiers into java-safe ones. Because of this, the diff for
>> OuputFactory looks a bit messy, so maybe it's easier to look at the resulting file as a whole. The tests are changed
>> to look for the now generated static getters, instead of fields (`static final` fields don't work well with dynamic
>> constants, since they are eagerly initialized). As a small bonus, this patch adds the missing ABI-agnostic
>> C_LONGDOUBLE constant (this was causing some test failures). Thanks, Jorn
>
> Jorn Vernee has updated the pull request incrementally with one additional commit since the last revision:
>
> Fix incorrect copyright header
Looks good.
PS. Build/test fine on Mac OS
-------------
Marked as reviewed by sundar (Committer).
PR: https://git.openjdk.java.net/panama-foreign/pull/102
More information about the panama-dev
mailing list