[cfe-commits] r58866 - in /cfe/trunk: include/clang/AST/DeclBase.h include/clang/Basic/DiagnosticKinds.def lib/Parse/ParseDecl.cpp lib/Sema/SemaDecl.cpp test/SemaCXX/destructor.cpp
Argiris Kirtzidis
akyrtzi at gmail.com
Tue Nov 11 12:24:39 PST 2008
Chris Lattner wrote:
>
>> +++ cfe/trunk/include/clang/AST/DeclBase.h Fri Nov 7 16:02:30 2008
>> @@ -310,6 +310,10 @@
>> }
>> }
>>
>> + bool isCXXRecord() const {
>> + return DeclKind == Decl::CXXRecord;
>> + }
>> +
>
> Why do you need this? Why not just use isa<CXXRecordDecl>(D)?
DC.isCXXRecord() is prettier :-)
And another minor point is that isa<> on a DeclContext will incur an
out-of-line function call.
Douglas Gregor wrote:
>
> On Nov 11, 2008, at 1:20 AM, Chris Lattner wrote:
>
>> Stepping back one level, is cramming a ~ into an identifier really the
>> right way to go here? Maybe we should use a smart pointer of some
>> kind instead of relying on IdentifierInfo*? We will eventually need
>> something richer like this to handle template-id's, right?
>
>
> The benefit to cramming the '~' into the identifier is that, once
> we've done it, we get the right name for the destructor throughout the
> compiler because its identifier is a human-readable name. We're
> currently doing the same kind of hack with conversion functions, e.g.,
> "operator int const *", where we paste "operator" and then the type
> name to create the identifier for the declarator.
>
> One possible fix would be to give the the Declarator a dummy name
> (e.g., "<destructor>", "<conversion function">) or make use of the
> flags that say that this isn't a normal named declarator, then make
> NamedDecl::getName() virtual and override it for destructors,
> conversion operators, etc., to form the name on-demand. Since
> getName() isn't invoked unless we're emitting a
> diagnostic---definitely not in the hot path---it's probably a good
> tradeoff. We'll have to be a little careful throughough, since
> getIdentifier() and getName() will have different strings associated
> with them.
>
Another benefit of using different IdentifierInfos for "~C" and "C" is
that the unique IdentifierInfo for the destructor allows it to be cached
by the IdentifierResolver.
-Argiris
More information about the cfe-commits
mailing list