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

Maurizio Cimadamore mcimadamore at openjdk.java.net
Fri Jul 24 14:59:10 UTC 2020


On Fri, 24 Jul 2020 14:46:56 GMT, Athijegannathan Sundararajan <sundar 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.

this is not skipped though - it is just deferred

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

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


More information about the panama-dev mailing list