With #144, the slices from the generated symbol containers can be reused directly in the linking phase. However, in a grammar such as:
interface Base { Name string }
interface ExtendA extends Base {...}
interface ExtendB extends Base {...}
RefA: Ref=[ExtendA:ID]
RefB: Ref=[ExtendB:ID]
RefBase: Ref=[Base:ID]
The generated container allocates a slice for ExtendA and ExtendB, but will generate a merged container for Base. This makes sense, as it generally reduces heap allocations, but reduces linking performance, due to the amount of allocations required to generate and iterate trough the merged container. We should consider whether it makes sense to optionally lower the types of ExtendA and ExtendB into Base (in addition to keeping their own slices). This could be a generator option, as seen in #130.
With #144, the slices from the generated symbol containers can be reused directly in the linking phase. However, in a grammar such as:
The generated container allocates a slice for
ExtendAandExtendB, but will generate a merged container forBase. This makes sense, as it generally reduces heap allocations, but reduces linking performance, due to the amount of allocations required to generate and iterate trough the merged container. We should consider whether it makes sense to optionally lower the types ofExtendAandExtendBintoBase(in addition to keeping their own slices). This could be a generator option, as seen in #130.