[foreign] RFR 8215211: cleanup JType/TypeDIctionary

Sundararajan Athijegannathan sundararajan.athijegannathan at oracle.com
Wed Dec 12 08:43:16 UTC 2018


Very nice! I built & tested the patch on Mac and also ran our platform 
specific samples (on mac). All fine.

One question: why is the EnumTree part in typedef handler is removed?

Other than that +1

-Sundar

On 11/12/18, 9:32 PM, Maurizio Cimadamore wrote:
> Hi,
> please review this jextract patch:
>
> http://cr.openjdk.java.net/~mcimadamore/panama/8215211_v2/
>
> The goal is to simplify the JType hierarchy and the TypeDictionary 
> class. JType is currently a very rich hierarchy that is capable of 
> modeling basically any clang type/cursor. In a way, JType is 
> overlapping a lot with the recently added jextract tree 
> representation; it feels like JType can be greatly simplified, and we 
> can just rely on trees for structural info.
>
> Simplifying the JType hierarchy has many benefits - in the patch you 
> will notice that we no longer need a lot of instance tests and casts.
>
> The second issue is with TypeDictionary, whose lookup/define logic is 
> scattered across TypeDictionary and HeaderFile::define. There's also a 
> very complex lookup scheme which starts from TypeDictionary::lookup 
> and then ends up in Context then back to HeaderFile::define. This is 
> all very hard to follow.
>
> I've now centralized all type resolution logic in TypeDictionary, 
> which now features two functions: lookup and enterIfAbsent, which 
> internally share the same 'getInternal'. TypeDictionary will simply 
> create a JType from a clang Type, and the only thing a TypeDictionary 
> has to keep track of, is the use of the anonymous function types 
> created during the 'enter' phase. Note that such enter phase has now 
> been moved into a proper tree visitor.
>
> This simplify things quite a bit, to the point that 
> AsmCodeFactory::addType becomes a simple visitor call. I think more 
> rounds of cleanup are possible, but, to get there, we need to simplify 
> the logic of Context/HeaderFile::processTree, which requires having a 
> more precise mapping between clang compilation units and jextract 
> trees. For instance, we currently parse everything into the same 
> 'header tree', even if we end up generating multiple classes; 
> secondly, we sorely miss a CallbackTree, so we have to do a lot of 
> gymnastic in order to understand which classfiles need to be generated 
> for functional interfaces.
>
> Note: I seem to recall that function pointer typedef should emit, a 
> named functional interface matching the name of the typedef. But the I 
> noted that this is not the way things work in the current impl, so I 
> did not bother too much with that (but I can address that if required, 
> although doing so will cause breakages in tests, so I'd prefer to do 
> that separately).
>
> Cheers
> Maurizio
>


More information about the panama-dev mailing list