diff options
author | Daniel Dunbar <daniel@zuster.org> | 2009-04-22 04:39:47 +0000 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2009-04-22 04:39:47 +0000 |
commit | d4ae6c038ea8dd2faaadd1f9da725ec37b4f7ef9 (patch) | |
tree | bef05313f4b219338fb2bb7edf65e097a2754cdf /lib/AST/DeclObjC.cpp | |
parent | 3b3a45858c6b2a45114e91902c3bf3c4b7f5f302 (diff) |
Revert r69771, I missed some (obvious) details. :/
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@69773 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/AST/DeclObjC.cpp')
-rw-r--r-- | lib/AST/DeclObjC.cpp | 28 |
1 files changed, 5 insertions, 23 deletions
diff --git a/lib/AST/DeclObjC.cpp b/lib/AST/DeclObjC.cpp index de10230991..d9bec6d31a 100644 --- a/lib/AST/DeclObjC.cpp +++ b/lib/AST/DeclObjC.cpp @@ -380,32 +380,14 @@ ObjCInterfaceDecl::FindCategoryDeclaration(IdentifierInfo *CategoryId) const { /// const FieldDecl * ObjCInterfaceDecl::lookupFieldDeclForIvar(ASTContext &Context, - const ObjCIvarDecl *OIVD) const { + const ObjCIvarDecl *IVar) const { assert(!isForwardDecl() && "Invalid interface decl!"); const RecordDecl *RecordForDecl = Context.addRecordToClass(this); + assert(RecordForDecl && "lookupFieldDeclForIvar no storage for class"); DeclContext::lookup_const_result Lookup = - RecordForDecl->lookup(Context, OIVD->getDeclName()); - - if (Lookup.first != Lookup.second) - return cast<FieldDecl>(*Lookup.first); - - // If lookup failed, try the superclass. - // - // FIXME: This is very non-performant. However, the root problem - // here is not the lookup itself. The main issue is that we should - // be able to map from an IvarDecl back to the context it lives - // inside; then this problem goes away. Currently, however, - // IvarDecl's live inside the translation unit!!!! - // - // Fixing IvarDecl's is less obvious than it might appear, we need - // to choose where synthesized ivars should live, and we also need - // to decide where to put IvarDecl's which appeared in an - // implementation context (either in the situation where they must - // duplicate the instance variables, or if there was no instance - // declaration). - const ObjCInterfaceDecl *OID = getSuperClass(); - assert(OID && "field decl not found!"); - return OID->lookupFieldDeclForIvar(Context, OIVD); + RecordForDecl->lookup(Context, IVar->getDeclName()); + assert((Lookup.first != Lookup.second) && "field decl not found"); + return cast<FieldDecl>(*Lookup.first); } //===----------------------------------------------------------------------===// |