[cfe-commits] r76297 - in /cfe/trunk: include/clang/AST/Decl.h include/clang/AST/Redeclarable.h lib/AST/Decl.cpp

Argyrios Kyrtzidis kyrtzidis at apple.com
Sat Jul 18 12:19:13 PDT 2009


On Jul 18, 2009, at 11:40 AM, Chris Lattner wrote:

>
> On Jul 18, 2009, at 1:50 AM, Argiris Kirtzidis wrote:
>
>> Author: akirtzidis
>> Date: Sat Jul 18 03:50:13 2009
>> New Revision: 76297
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=76297&view=rev
>> Log:
>> Introduce the Redeclarable template class, which serves as a base
>> type defining the common interface for Decls that can be redeclared.
>> Make FunctionDecl and VarDecl use it.
>
> This is nice Argiris, but is there a way to do with with containment
> instead of multiple inheritance?

I don't quite see the problem in this case, it only adds a  
PointerIntPair and a public interface to the derived subclass that  
will get used through
the subclass (e.g. through FunctionDecl), Redeclarable is not actually  
supposed to get used anywhere else by client code and the rest of the  
code
is not supposed to be aware of it (you can cast to it but what's the  
point).
Can you elaborate on what do you think the problem is ?

>  Alternatively, maybe there should be
> a new class between "RedeclarableDecl" that inherits from ValueDecl
> that VarDecl and FunctionDecl inherit from.

Injecting a whole new Decl subclass into the Decl hierarchy just for  
this doesn't seem like a good idea.
And there are other classes that may use Redeclarable, like  
FunctionTemplateDecl and ClassTemplateDecl, which also can be redeclared
but derive from TemplateDecl (which derive from NamedDecl).

-Argiris



More information about the cfe-commits mailing list