[foreign-jextract] RFR: 8250518: Jextract should process macros in bulk

Jorn Vernee jvernee at openjdk.java.net
Mon Jul 27 10:31:36 UTC 2020


On Fri, 24 Jul 2020 14:42:21 GMT, Maurizio Cimadamore <mcimadamore at openjdk.org> wrote:

> This patch adds bulk processing of macros; that is, instead of having a reparsing step for every macro constant, this
> patch tweaks jextract so that all unparsed macros are processed in one go.
> The logic is quite convoluted and this work led to a major refactoring of MacroParserImpl; there is now a *table* where
> unparsed macros are kept - elements in this table are reparsed, and, based on the contents of the reparsed cursors, the
> table state is updated accordingly (the code has quite a bit of doc documenting the possible state transitions).  This
> results in some 2x performance boost in some of the heaviest extraction runs.
> One thing to notice is that one of the test required some tweaks, as the new code seems to be able to infer a sharper
> type for a macro - e.g. `foo*` instead of `void*`. I suspect this is related to `TypeMaker::resolveTypeReferences` but
> I'm not 100% sure - @slowhog  can you please take a look?

Marked as reviewed by jvernee (Committer).

src/jdk.incubator.jextract/share/classes/jdk/internal/jextract/impl/MacroParserImpl.java line 323:

> 322:                                 null : typeMaker.makeType(decl.type());
> 323:                         newEntry = entry.failure(type);
> 324:                     }

Not sure what's going on here exactly, but AFAICS passing null to `failure` will either return null, making newEntry
null, or throw an exception.

Would it be clearer to assign null to newEntry directly? (Also, maybe using a switch expression?)

-------------

PR: https://git.openjdk.java.net/panama-foreign/pull/264


More information about the panama-dev mailing list