[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