[cfe-commits] r57298 - in /cfe/trunk: Driver/RewriteBlocks.cpp include/clang/AST/Decl.h include/clang/AST/DeclBase.h include/clang/AST/Expr.h lib/AST/Decl.cpp lib/AST/DeclBase.cpp lib/AST/DeclSerialization.cpp lib/AST/Expr.cpp lib/AST/StmtPrinter.cpp lib/AST/StmtSerialization.cpp lib/Sema/SemaExpr.cpp

steve naroff snaroff at apple.com
Wed Oct 8 14:25:24 PDT 2008


On Oct 8, 2008, at 2:17 PM, Argiris Kirtzidis wrote:

> Hi Steve,
>
> Here's a couple of things needed so that BlockDecl <-> DeclContext  
> conversions work properly.
>
>
> Steve Naroff wrote:
>> +  // Implement isa/cast/dyncast/etc.
>> +  static bool classof(const Decl *D) { return D->getKind() ==  
>> Block; }
>> +  static bool classof(const TranslationUnitDecl *D) { return true; }
>
> The second method should have BlockDecl parameter.
>

Yep...cut/paste error. Thanks!

>> Modified: cfe/trunk/include/clang/AST/DeclBase.h
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/DeclBase.h?rev=57298&r1=57297&r2=57298&view=diff
>>
>> = 
>> = 
>> = 
>> = 
>> = 
>> = 
>> = 
>> = 
>> = 
>> =====================================================================
>> --- cfe/trunk/include/clang/AST/DeclBase.h (original)
>> +++ cfe/trunk/include/clang/AST/DeclBase.h Wed Oct  8 12:01:13 2008
>> @@ -27,6 +27,7 @@
>> class EnumDecl;
>> class ObjCMethodDecl;
>> class ObjCInterfaceDecl;
>> +class BlockDecl;
>>  /// Decl - This represents one declaration (or definition), e.g. a  
>> variable,  /// typedef, function, struct, etc.  @@ -81,6 +82,7 @@
>>            ObjCPropertyImpl,
>>          LinkageSpec,
>>          FileScopeAsm,
>> +	     Block, // [DeclContext]
>>        // For each non-leaf class, we now define a mapping to the  
>> first/last member
>>     // of the class, to allow efficient classof.
>> @@ -243,6 +245,7 @@
>> ///   EnumDecl
>> ///   ObjCMethodDecl
>> ///   ObjCInterfaceDecl
>> +///   BlockDecl
>> ///
>> class DeclContext {
>>   /// DeclKind - This indicates which class this is.
>> @@ -295,6 +298,7 @@
>>    bool isFunctionOrMethod() const {
>>     switch (DeclKind) {
>> +      case Decl::Block:
>>       case Decl::Function:
>>       case Decl::CXXMethod:
>>       case Decl::ObjCMethod:
>> @@ -320,6 +324,7 @@
>>       case Decl::Enum:
>>       case Decl::ObjCMethod:
>>       case Decl::ObjCInterface:
>> +      case Decl::Block:
>>         return true;
>>       default:
>>         if (D->getKind() >= Decl::FunctionFirst &&
>> @@ -339,6 +344,7 @@
>>   static bool classof(const EnumDecl *D) { return true; }
>>   static bool classof(const ObjCMethodDecl *D) { return true; }
>>   static bool classof(const ObjCInterfaceDecl *D) { return true; }
>> +  static bool classof(const BlockDecl *D) { return true; }
>>
>
> You should also add this line to the DeclContext::CastTo() template:
>
>     case Decl::Block:
>       return static_cast<BlockDecl*>(const_cast<From*>(D));
>

I just found/fixed this 30 seconds before reading your email:-)

Thanks for reviewing!

snaroff

>
> -Argiris




More information about the cfe-commits mailing list