summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema/SemaCodeComplete.cpp
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2009-09-21 20:51:25 +0000
committerDouglas Gregor <dgregor@apple.com>2009-09-21 20:51:25 +0000
commit9d64c5e3a515289ae2c7ae80a35ac4e37fa2f4cc (patch)
tree75c811d816377004939562ae2ccf4ebc25f02ed0 /clang/lib/Sema/SemaCodeComplete.cpp
parenta74039426db114c93768acc1a705aaf09b7f6eb8 (diff)
downloadbcm5719-llvm-9d64c5e3a515289ae2c7ae80a35ac4e37fa2f4cc.tar.gz
bcm5719-llvm-9d64c5e3a515289ae2c7ae80a35ac4e37fa2f4cc.zip
Code completion for ordinary names when we're starting a declaration, expression, or statement
llvm-svn: 82481
Diffstat (limited to 'clang/lib/Sema/SemaCodeComplete.cpp')
-rw-r--r--clang/lib/Sema/SemaCodeComplete.cpp18
1 files changed, 18 insertions, 0 deletions
diff --git a/clang/lib/Sema/SemaCodeComplete.cpp b/clang/lib/Sema/SemaCodeComplete.cpp
index 79904c9c532..52e7d0e0050 100644
--- a/clang/lib/Sema/SemaCodeComplete.cpp
+++ b/clang/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) {
OpenPOWER on IntegriCloud