diff options
author | Steve Naroff <snaroff@apple.com> | 2008-04-02 18:30:49 +0000 |
---|---|---|
committer | Steve Naroff <snaroff@apple.com> | 2008-04-02 18:30:49 +0000 |
commit | 3110251f13981689f384eb3c0aba2afffea18d9d (patch) | |
tree | 7deff2f30e1588968d248f507ad6564f33a7ecb3 /lib/Sema/SemaDecl.cpp | |
parent | 5744dc294e2d658a904e6bb258c0875fbac0d4a1 (diff) |
Change ObjCInterfaceDecl to inherit from NamedDecl (not TypeDecl). While ObjCInterfaceDecl is arguably a TypeDecl, it isn't a ScopedDecl. Since TypeDecl's are scoped, it makes sense to simply treat them as NamedDecl's. I could have fiddled a bit more with the hierarchy (in terms of creating a non-scoped TypeDecl), however this probably isn't worth the effort.
I also finished unifying access to scope decl change by converting Sema::getObjCInterfaceDecl() to use Sema::LookupDecl(). This is much cleaner now:-)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@49107 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Sema/SemaDecl.cpp')
-rw-r--r-- | lib/Sema/SemaDecl.cpp | 19 |
1 files changed, 7 insertions, 12 deletions
diff --git a/lib/Sema/SemaDecl.cpp b/lib/Sema/SemaDecl.cpp index c5901f0b91..c9ea54fa0e 100644 --- a/lib/Sema/SemaDecl.cpp +++ b/lib/Sema/SemaDecl.cpp @@ -86,19 +86,11 @@ void Sema::ActOnPopScope(SourceLocation Loc, Scope *S) { /// getObjCInterfaceDecl - Look up a for a class declaration in the scope. /// return 0 if one not found. -/// FIXME: removed this when ObjCInterfaceDecl's aren't ScopedDecl's. ObjCInterfaceDecl *Sema::getObjCInterfaceDecl(IdentifierInfo *Id) { - ScopedDecl *IDecl; - // Scan up the scope chain looking for a decl that matches this identifier - // that is in the appropriate namespace. - for (IDecl = Id->getFETokenInfo<ScopedDecl>(); IDecl; - IDecl = IDecl->getNext()) - if (IDecl->getIdentifierNamespace() == Decl::IDNS_Ordinary) - break; - - if (ObjCCompatibleAliasDecl *ADecl = - dyn_cast_or_null<ObjCCompatibleAliasDecl>(IDecl)) - return ADecl->getClassInterface(); + // The third "scope" argument is 0 since we aren't enabling lazy built-in + // creation from this context. + Decl *IDecl = LookupDecl(Id, Decl::IDNS_Ordinary, 0, false); + return dyn_cast_or_null<ObjCInterfaceDecl>(IDecl); } @@ -130,6 +122,9 @@ Decl *Sema::LookupDecl(const IdentifierInfo *II, unsigned NSI, // Unlike typedef's, they can only be introduced at file-scope (and are // therefore not scoped decls). They can, however, be shadowed by // other names in IDNS_Ordinary. + ObjCInterfaceDeclsTy::iterator IDI = ObjCInterfaceDecls.find(II); + if (IDI != ObjCInterfaceDecls.end()) + return IDI->second; ObjCAliasTy::iterator I = ObjCAliasDecls.find(II); if (I != ObjCAliasDecls.end()) return I->second->getClassInterface(); |