RFR: 7903644: typedef of anonymous struct generates a redundant class

Maurizio Cimadamore mcimadamore at openjdk.org
Thu Jan 25 17:30:11 UTC 2024


On Thu, 25 Jan 2024 17:24:45 GMT, Maurizio Cimadamore <mcimadamore at openjdk.org> wrote:

> This PR tweaks jextract so that typedefs of anonymous structs only generate one class (that of the struct).
> 
> This required some changes in both `NameMangler` (to make sure that the special naming rule was applied), and then in `OutputFactory`, to make sure that in such case the typedef class is not emitted.
> 
> I've tweaked a number of tests which now reflect the "less verbose" jextract output - as such I don't think we need to add further tests.

src/main/java/org/openjdk/jextract/impl/NameMangler.java line 211:

> 209:             // We may potentially generate a class for a typedef. Make sure
> 210:             // class name is unique in the current nesting context.
> 211:             javaName = curScope.uniqueNestedClassName(typedef.name());

This logic is a bit subtle: we have to avoid calling `uniqueNestedClassName` in case there's a struct that will inherit the typedef name - otherwise the mangler will see _two_ attempts to add the typedef name to the current scope, which will result in extra mangling.

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

PR Review Comment: https://git.openjdk.org/jextract/pull/195#discussion_r1466707509


More information about the jextract-dev mailing list