diff options
author | ed <ed@FreeBSD.org> | 2009-06-06 08:21:31 +0000 |
---|---|---|
committer | ed <ed@FreeBSD.org> | 2009-06-06 08:21:31 +0000 |
commit | 265c92560db8af7e64dc328cb612076086a62bd1 (patch) | |
tree | 06d57bb7679a2140aef96db7105a0bd5f16a4358 /lib/AST/DeclObjC.cpp | |
parent | 9e262ca77e924f9d84a864b031a1b931d03c5e38 (diff) | |
download | FreeBSD-src-265c92560db8af7e64dc328cb612076086a62bd1.zip FreeBSD-src-265c92560db8af7e64dc328cb612076086a62bd1.tar.gz |
Import clang, at r72995.
Diffstat (limited to 'lib/AST/DeclObjC.cpp')
-rw-r--r-- | lib/AST/DeclObjC.cpp | 22 |
1 files changed, 16 insertions, 6 deletions
diff --git a/lib/AST/DeclObjC.cpp b/lib/AST/DeclObjC.cpp index f4bb895..21aefdd 100644 --- a/lib/AST/DeclObjC.cpp +++ b/lib/AST/DeclObjC.cpp @@ -42,6 +42,19 @@ void ObjCListBase::set(void *const* InList, unsigned Elts, ASTContext &Ctx) { // ObjCInterfaceDecl //===----------------------------------------------------------------------===// +/// getIvarDecl - This method looks up an ivar in this ContextDecl. +/// +ObjCIvarDecl * +ObjCContainerDecl::getIvarDecl(ASTContext &Context, IdentifierInfo *Id) const { + lookup_const_iterator Ivar, IvarEnd; + for (llvm::tie(Ivar, IvarEnd) = lookup(Context, Id); + Ivar != IvarEnd; ++Ivar) { + if (ObjCIvarDecl *ivar = dyn_cast<ObjCIvarDecl>(*Ivar)) + return ivar; + } + return 0; +} + // Get the local instance method declared in this interface. ObjCMethodDecl * ObjCContainerDecl::getInstanceMethod(ASTContext &Context, Selector Sel) const { @@ -139,12 +152,9 @@ ObjCIvarDecl *ObjCInterfaceDecl::lookupInstanceVariable( ASTContext &Context, IdentifierInfo *ID, ObjCInterfaceDecl *&clsDeclared) { ObjCInterfaceDecl* ClassDecl = this; while (ClassDecl != NULL) { - for (ivar_iterator I = ClassDecl->ivar_begin(), E = ClassDecl->ivar_end(); - I != E; ++I) { - if ((*I)->getIdentifier() == ID) { - clsDeclared = ClassDecl; - return *I; - } + if (ObjCIvarDecl *I = ClassDecl->getIvarDecl(Context, ID)) { + clsDeclared = ClassDecl; + return I; } // look into properties. for (ObjCInterfaceDecl::prop_iterator I = ClassDecl->prop_begin(Context), |