From: Argyrios Kyrtzidis Date: Tue, 17 Feb 2009 20:21:51 +0000 (+0000) Subject: Now that ObjC decls have DeclContexts too, remove an ugly hack from IdentifierResolver. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=7fd46dac4ab51de4d224f6bc7ce197913220a70c;p=clang Now that ObjC decls have DeclContexts too, remove an ugly hack from IdentifierResolver. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@64802 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Sema/IdentifierResolver.cpp b/lib/Sema/IdentifierResolver.cpp index 781d89a0e9..6efedb4895 100644 --- a/lib/Sema/IdentifierResolver.cpp +++ b/lib/Sema/IdentifierResolver.cpp @@ -42,39 +42,6 @@ public: }; -//===----------------------------------------------------------------------===// -// LookupContext Implementation -//===----------------------------------------------------------------------===// - -/// getContext - Returns translation unit context for non Decls and -/// for EnumConstantDecls returns the parent context of their EnumDecl. -DeclContext *IdentifierResolver::LookupContext::getContext(Decl *D) { - DeclContext *Ctx = D->getDeclContext(); - - if (!Ctx) // FIXME: HACK! We shouldn't end up with a NULL context here. - return TUCtx(); - - Ctx = Ctx->getLookupContext(); - - if (isa(Ctx)) - return TUCtx(); - - return Ctx; -} - -/// isEqOrContainedBy - Returns true of the given context is the same or a -/// parent of this one. -bool IdentifierResolver::LookupContext::isEqOrContainedBy( - const LookupContext &PC) const { - if (PC.isTU()) return true; - - for (LookupContext Next = *this; !Next.isTU(); Next = Next.getParent()) - if (Next.Ctx == PC.Ctx) return true; - - return false; -} - - //===----------------------------------------------------------------------===// // IdDeclInfo Implementation //===----------------------------------------------------------------------===// @@ -155,7 +122,7 @@ bool IdentifierResolver::isDeclInScope(Decl *D, DeclContext *Ctx, return false; } - return LookupContext(D) == LookupContext(Ctx->getPrimaryContext()); + return D->getDeclContext()->getLookupContext() == Ctx->getPrimaryContext(); } /// AddDecl - Link the decl to its shadowed decl chain. diff --git a/lib/Sema/IdentifierResolver.h b/lib/Sema/IdentifierResolver.h index 50b894a725..067900eac1 100644 --- a/lib/Sema/IdentifierResolver.h +++ b/lib/Sema/IdentifierResolver.h @@ -28,58 +28,6 @@ namespace clang { /// implements efficent decl lookup based on a declaration name. class IdentifierResolver { - /// LookupContext - A wrapper for DeclContext. DeclContext is only part of - /// Decls, LookupContext can be used with all decls (assumes - /// translation unit context for non Decls). - class LookupContext { - const DeclContext *Ctx; - - /// TUCtx - Provides a common value for translation unit context for all - /// decls. - /// FIXME: When (if ?) all decls can point to their translation unit context - /// remove this hack. - static inline DeclContext *TUCtx() { - return reinterpret_cast(-1); - } - - /// getContext - Returns translation unit context for non Decls and - /// for EnumConstantDecls returns the parent context of their EnumDecl. - static DeclContext *getContext(Decl *D); - - public: - LookupContext(Decl *D) { - Ctx = getContext(D); - } - LookupContext(const DeclContext *DC) { - if (!DC || isa(DC)) - Ctx = TUCtx(); - else - Ctx = DC; - } - - bool isTU() const { - return (Ctx == TUCtx()); - } - - /// getParent - Returns the parent context. This should not be called for - /// a translation unit context. - LookupContext getParent() const { - assert(!isTU() && "TU has no parent!"); - return LookupContext(Ctx->getParent()); - } - - /// isEqOrContainedBy - Returns true of the given context is the same or a - /// parent of this one. - bool isEqOrContainedBy(const LookupContext &PC) const; - - bool operator==(const LookupContext &RHS) const { - return Ctx == RHS.Ctx; - } - bool operator!=(const LookupContext &RHS) const { - return Ctx != RHS.Ctx; - } - }; - /// IdDeclInfo - Keeps track of information about decls associated /// to a particular declaration name. IdDeclInfos are lazily /// constructed and assigned to a declaration name the first time a