[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