This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Thoughts on Gengtype and Single Inheritance


On 8/31/12, Laurynas Biveinis <laurynas.biveinis@gmail.com> wrote:
>>>> GRAMMAR
>>>>
>>>> Support adding a second discriminator.  This support is not for
>>>> multiple inheritance, but for single inheritance when a second
>>>> discriminator is used to further refine it.  Look at struct
>>>> tree_omp_clause.  It contains a sub union.  We can represent the
>>>> hierarchy like:
>>>>
>>>> struct tree_omp_clause : tree_common {
>>>>   location_t locus;
>>>>   enum omp_clause_code code;
>>>> };
>>>>
>>>> struct tree_omp_default_clause : tree_omp_clause {
>>>>   enum omp_clause_default_kind default_kind;
>>>> };
>>>>
>>>> struct tree_omp_schedule_clause : tree_omp_clause {
>>>>   enum omp_clause_schedule_kind schedule_kind;
>>>> };
>>>>
>>>> struct tree_omp_reduction_clause : tree_omp_clause {
>>>>   enum tree_code reduction_code;
>>>> };
>>>>
>>>> We use TREE_CODE to understand that we have at least a tree_omp_clause
>>>> and then we use tree_common.code to to distinguish these last three.
>>>>
>>>> Another possible case is tree_type_symtab inside tree_type_common.
>>>>
>>>> The syntax would be something like the following.
>>>>
>>>> enum F { F1, F2, F3, F4, F5 };
>>>>
>>>> class CTYPE GTY ((desc ("%h.kind"), tag ("F1")))
>>>> : GTY ((tag ("EC"))) public BTYPE
>>>> { public: enum F kind; something *pq; ... };
>>>>
>>>> class FTYPE : GTY ((tag ("F2"))) public CTYPE { ... };
>>>
>>> I wonder if the second discriminator support is easily generalizable
>>> to enabling any derived class being a root class on it own with its
>>> own subtree? If I understand correctly, the GTY syntax would be the
>>> same.
>>
>> If I understand correctly, you are suggesting multiple inheritance
>> via enums.  I think it is possible, but I think the tag syntax
>> would need to be changed to more directly associate the tag with
>> the variable.
>>
>> --
>> Lawrence Crowl
>
> I was trying to talk about single inheritance, not multiple
> inheritance nor composition here, but perhaps I misunderstood it
> myself.
>
> As I saw it, there is a hierarchy rooted at tree_common. For its child
> tree_omp_clause there is further sub-hierarchy. It's all single
> inheritance, and the second discriminator here would be the first
> discriminator, if tree_omp_clause were not a child of other class.

Yes, that is correct.

-- 
Lawrence Crowl


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]