[foreign-jextract] [Rev 01] RFR: Represent typedef with Declaration.Variable instead of Declaration.Scoped

Maurizio Cimadamore mcimadamore at openjdk.java.net
Fri May 1 01:03:02 UTC 2020

On Fri, 1 May 2020 00:51:16 GMT, Henry Jen <henryjen at openjdk.org> wrote:

>> Currently jextract API only present typedef declaration for record types, and using Declaration.Scoped to do so.
>> This makes downstream tools like jextract impossible to generate more comprehensive type. For example, if the tool
>> would like to create a carrier type for size_t with similar name, because we pass through that, this is impossible.
>> This patch try to present typedef as Declaration.Variable with Kind TYPE. This will give us more transparency on
>> dealing with typedef, and enable factoring an Declaration.Variable.TYPE from a Type.Delegated.TYPEDEF.
>> This would also be useful when a tool collecting type dependencies and encounter anonymous type or types without
>> declaration, this gave the tool a chance to inject an implicit typedef to associate a type with a proper name.
>> There is one thing worth further discussion is that if we would like to consider generate array with typedef, currently
>> the array element type won't be a Type.Delegated.TYPEDEF, but canonical type. The test case try to explain what should
>> be expected for most use cases, if there is any possible way to use typedef, I'll try to add them.
> Henry Jen has updated the pull request incrementally with one additional commit since the last revision:
>   Add Declaration.Typedef

There are many tests which still depend on Variable.kind.TYPE - how can they pass, given that the code never seem to
create such vars?

src/jdk.incubator.jextract/share/classes/jdk/incubator/jextract/Declaration.java line 204:

> 203:          */
> 204:         Type type();
> 205:     }

No name?

src/jdk.incubator.jextract/share/classes/jdk/incubator/jextract/Declaration.java line 234:

> 233:              */
> 234:             TYPE;
> 235:         }

I hope this is a leftover from previous work?

src/jdk.incubator.jextract/share/classes/jdk/internal/jextract/impl/DeclarationImpl.java line 203:

> 202:             Declaration.Variable variable = (Declaration.Variable) o;
> 203:             if (variable.kind() == Kind.TYPE) {
> 204:                 if (!variable.name().equals(name())) return false;

What about this?


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

More information about the panama-dev mailing list