diff options
author | Douglas Gregor <dgregor@apple.com> | 2009-02-04 16:44:47 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2009-02-04 16:44:47 +0000 |
commit | 94eabf33559de43bd1d13ed297178bb45ddd610d (patch) | |
tree | d1b8086da44301dd7ba0499363e5dda330f238a8 /clang/lib/Sema/Sema.h | |
parent | 7bad6d1d32ad67605e188c61f300ee71a7485891 (diff) | |
download | bcm5719-llvm-94eabf33559de43bd1d13ed297178bb45ddd610d.tar.gz bcm5719-llvm-94eabf33559de43bd1d13ed297178bb45ddd610d.zip |
Bring operator name lookup (as required for C++ operator overloading)
into the general name-lookup fold. This cleans up some ugly,
not-quite-working code in the handling of operator overloading.
llvm-svn: 63735
Diffstat (limited to 'clang/lib/Sema/Sema.h')
-rw-r--r-- | clang/lib/Sema/Sema.h | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/clang/lib/Sema/Sema.h b/clang/lib/Sema/Sema.h index 6b8d852db39..724a57ed42b 100644 --- a/clang/lib/Sema/Sema.h +++ b/clang/lib/Sema/Sema.h @@ -488,9 +488,11 @@ public: const FunctionTypeProto *Proto, Expr *Object, Expr **Args, unsigned NumArgs, OverloadCandidateSet& CandidateSet); - void AddOperatorCandidates(OverloadedOperatorKind Op, Scope *S, + bool AddOperatorCandidates(OverloadedOperatorKind Op, Scope *S, + SourceLocation OpLoc, Expr **Args, unsigned NumArgs, - OverloadCandidateSet& CandidateSet); + OverloadCandidateSet& CandidateSet, + SourceRange OpRange = SourceRange()); void AddBuiltinCandidate(QualType ResultTy, QualType *ParamTys, Expr **Args, unsigned NumArgs, OverloadCandidateSet& CandidateSet, @@ -502,10 +504,6 @@ public: void AddArgumentDependentLookupCandidates(DeclarationName Name, Expr **Args, unsigned NumArgs, OverloadCandidateSet& CandidateSet); - void AddOverloadCandidates(const OverloadedFunctionDecl *Ovl, - Expr **Args, unsigned NumArgs, - OverloadCandidateSet& CandidateSet, - bool SuppressUserConversions = false); bool isBetterOverloadCandidate(const OverloadCandidate& Cand1, const OverloadCandidate& Cand2); OverloadingResult BestViableFunction(OverloadCandidateSet& CandidateSet, @@ -585,6 +583,11 @@ public: /// Member name lookup, which finds the names of /// class/struct/union members. LookupMemberName, + // Look up of an operator name (e.g., operator+) for use with + // operator overloading. This lookup is similar to ordinary name + // lookup, but will ignore any declarations that are class + // members. + LookupOperatorName, /// Look up of a name that precedes the '::' scope resolution /// operator in C++. This lookup completely ignores operator, /// function, and enumerator names (C++ [basic.lookup.qual]p1). @@ -839,6 +842,10 @@ public: case Sema::LookupMemberName: return D->isInIdentifierNamespace(IDNS); + case Sema::LookupOperatorName: + return D->isInIdentifierNamespace(IDNS) && + !D->getDeclContext()->isRecord(); + case Sema::LookupNestedNameSpecifierName: return isa<TypedefDecl>(D) || D->isInIdentifierNamespace(Decl::IDNS_Tag); |