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

Athijegannathan Sundararajan sundar at openjdk.java.net
Fri Jul 24 14:59:09 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?

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

> 90:             macroTable.enterMacro(name, tokens, cursor);
> 91:             return Optional.empty();
> 92:         }

Better to have a DEBUG message for skipped macros. Useful for debugging. Perhaps try..catch RuntimeException with
DEBUG/rethrow in catch is good as well.

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

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


More information about the panama-dev mailing list