Now that ObjC decls have DeclContexts too, remove an ugly hack from IdentifierResolver.
llvm-svn: 64802
This commit is contained in:
parent
0cf6625ff8
commit
13c9cc8b37
|
@ -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<TranslationUnitDecl>(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.
|
||||
|
|
|
@ -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<DeclContext*>(-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<TranslationUnitDecl>(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
|
||||
|
|
Loading…
Reference in New Issue