[foreign-jextract] RFR: 8239493: Add classfile generation to jextract
Jorn Vernee
jvernee at openjdk.java.net
Tue Apr 7 09:57:41 UTC 2020
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. 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
-------------
Commit messages:
- Implement hybrid class file generation
Changes: https://git.openjdk.java.net/panama-foreign/pull/102/files
Webrev: https://webrevs.openjdk.java.net/panama-foreign/102/webrev.00
Issue: https://bugs.openjdk.java.net/browse/JDK-8239493
Stats: 1861 lines in 19 files changed: 1007 ins; 739 del; 115 mod
Patch: https://git.openjdk.java.net/panama-foreign/pull/102.diff
Fetch: git fetch https://git.openjdk.java.net/panama-foreign pull/102/head:pull/102
PR: https://git.openjdk.java.net/panama-foreign/pull/102
More information about the panama-dev
mailing list