summaryrefslogtreecommitdiffstats
path: root/lib/Sema/Lookup.h
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Sema/Lookup.h')
-rw-r--r--lib/Sema/Lookup.h25
1 files changed, 19 insertions, 6 deletions
diff --git a/lib/Sema/Lookup.h b/lib/Sema/Lookup.h
index f310c25..0961299 100644
--- a/lib/Sema/Lookup.h
+++ b/lib/Sema/Lookup.h
@@ -124,7 +124,6 @@ public:
};
typedef UnresolvedSetImpl::iterator iterator;
- typedef bool (*ResultFilter)(NamedDecl*, unsigned IDNS);
LookupResult(Sema &SemaRef, DeclarationName Name, SourceLocation NameLoc,
Sema::LookupNameKind LookupKind,
@@ -136,7 +135,6 @@ public:
Name(Name),
NameLoc(NameLoc),
LookupKind(LookupKind),
- IsAcceptableFn(0),
IDNS(0),
Redecl(Redecl != Sema::NotForRedeclaration),
HideTags(true),
@@ -156,7 +154,6 @@ public:
Name(Other.Name),
NameLoc(Other.NameLoc),
LookupKind(Other.LookupKind),
- IsAcceptableFn(Other.IsAcceptableFn),
IDNS(Other.IDNS),
Redecl(Other.Redecl),
HideTags(Other.HideTags),
@@ -242,8 +239,7 @@ public:
/// \brief Tests whether the given declaration is acceptable.
bool isAcceptableDecl(NamedDecl *D) const {
- assert(IsAcceptableFn);
- return IsAcceptableFn(D, IDNS);
+ return D->isInIdentifierNamespace(IDNS);
}
/// \brief Returns the identifier namespace mask for this lookup.
@@ -282,6 +278,18 @@ public:
NamingClass = Record;
}
+ /// \brief Returns the base object type associated with this lookup;
+ /// important for [class.protected]. Most lookups do not have an
+ /// associated base object.
+ QualType getBaseObjectType() const {
+ return BaseObjectType;
+ }
+
+ /// \brief Sets the base object type for this lookup.
+ void setBaseObjectType(QualType T) {
+ BaseObjectType = T;
+ }
+
/// \brief Add a declaration to these results with its natural access.
/// Does not test the acceptance criteria.
void addDecl(NamedDecl *D) {
@@ -331,6 +339,11 @@ public:
} else {
ResultKind = Found;
resolveKind();
+
+ if (Paths && (ResultKind != Ambiguous)) {
+ deletePaths(Paths);
+ Paths = 0;
+ }
}
}
@@ -550,6 +563,7 @@ private:
UnresolvedSet<8> Decls;
CXXBasePaths *Paths;
CXXRecordDecl *NamingClass;
+ QualType BaseObjectType;
// Parameters.
Sema &SemaRef;
@@ -557,7 +571,6 @@ private:
SourceLocation NameLoc;
SourceRange NameContextRange;
Sema::LookupNameKind LookupKind;
- ResultFilter IsAcceptableFn; // set by configure()
unsigned IDNS; // set by configure()
bool Redecl;
OpenPOWER on IntegriCloud