diff options
author | Douglas Gregor <dgregor@apple.com> | 2009-09-21 20:51:25 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2009-09-21 20:51:25 +0000 |
commit | 791215b7a24666912c0b71175d2ca5ba082f666e (patch) | |
tree | 4f0dd84cffc925b37b0986ba06123638eb8082e0 /lib/Sema/SemaCodeComplete.cpp | |
parent | 90b4fd48a6b42c2fc7b162a5e61e5f8bfa17d4ee (diff) |
Code completion for ordinary names when we're starting a declaration, expression, or statement
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@82481 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Sema/SemaCodeComplete.cpp')
-rw-r--r-- | lib/Sema/SemaCodeComplete.cpp | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/lib/Sema/SemaCodeComplete.cpp b/lib/Sema/SemaCodeComplete.cpp index 79904c9c53..52e7d0e005 100644 --- a/lib/Sema/SemaCodeComplete.cpp +++ b/lib/Sema/SemaCodeComplete.cpp @@ -104,6 +104,7 @@ namespace { /// results of name lookup. All of the predicates have the same type, so that /// //@{ + bool IsOrdinaryName(NamedDecl *ND) const; bool IsNestedNameSpecifier(NamedDecl *ND) const; bool IsEnum(NamedDecl *ND) const; bool IsClassOrStruct(NamedDecl *ND) const; @@ -316,6 +317,16 @@ void ResultBuilder::ExitScope() { ShadowMaps.pop_back(); } +/// \brief Determines whether this given declaration will be found by +/// ordinary name lookup. +bool ResultBuilder::IsOrdinaryName(NamedDecl *ND) const { + unsigned IDNS = Decl::IDNS_Ordinary; + if (SemaRef.getLangOptions().CPlusPlus) + IDNS |= Decl::IDNS_Tag; + + return ND->getIdentifierNamespace() & IDNS; +} + /// \brief Determines whether the given declaration is suitable as the /// start of a C++ nested-name-specifier, e.g., a class or namespace. bool ResultBuilder::IsNestedNameSpecifier(NamedDecl *ND) const { @@ -874,6 +885,13 @@ static void HandleCodeCompleteResults(CodeCompleteConsumer *CodeCompleter, CodeCompleter->ProcessCodeCompleteResults(Results, NumResults); } +void Sema::CodeCompleteOrdinaryName(Scope *S) { + ResultBuilder Results(*this, &ResultBuilder::IsOrdinaryName); + CollectLookupResults(S, Context.getTranslationUnitDecl(), 0, CurContext, + Results); + HandleCodeCompleteResults(CodeCompleter, Results.data(), Results.size()); +} + void Sema::CodeCompleteMemberReferenceExpr(Scope *S, ExprTy *BaseE, SourceLocation OpLoc, bool IsArrow) { |