summaryrefslogtreecommitdiffstats
path: root/clang
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2009-12-11 18:44:16 +0000
committerDouglas Gregor <dgregor@apple.com>2009-12-11 18:44:16 +0000
commit0f622367d374eb254f18d99fab22a4cc2688f0f9 (patch)
tree68eba49684dd7a0738d3908ee2335347f0373a49 /clang
parent800f2f0ff032b1f6994456ae01e31ac0778d00de (diff)
downloadbcm5719-llvm-0f622367d374eb254f18d99fab22a4cc2688f0f9.tar.gz
bcm5719-llvm-0f622367d374eb254f18d99fab22a4cc2688f0f9.zip
Add a function's cv-qualifiers to the code-completion results as an
informative chunk. llvm-svn: 91139
Diffstat (limited to 'clang')
-rw-r--r--clang/lib/Sema/SemaCodeComplete.cpp28
-rw-r--r--clang/test/CodeCompletion/member-access.cpp4
2 files changed, 26 insertions, 6 deletions
diff --git a/clang/lib/Sema/SemaCodeComplete.cpp b/clang/lib/Sema/SemaCodeComplete.cpp
index f1861655514..140cb5c8a7f 100644
--- a/clang/lib/Sema/SemaCodeComplete.cpp
+++ b/clang/lib/Sema/SemaCodeComplete.cpp
@@ -947,10 +947,11 @@ static void AddTemplateParameterChunks(ASTContext &Context,
/// \brief Add a qualifier to the given code-completion string, if the
/// provided nested-name-specifier is non-NULL.
-void AddQualifierToCompletionString(CodeCompletionString *Result,
- NestedNameSpecifier *Qualifier,
- bool QualifierIsInformative,
- ASTContext &Context) {
+static void
+AddQualifierToCompletionString(CodeCompletionString *Result,
+ NestedNameSpecifier *Qualifier,
+ bool QualifierIsInformative,
+ ASTContext &Context) {
if (!Qualifier)
return;
@@ -965,6 +966,23 @@ void AddQualifierToCompletionString(CodeCompletionString *Result,
Result->AddTextChunk(PrintedNNS);
}
+static void AddFunctionTypeQualsToCompletionString(CodeCompletionString *Result,
+ FunctionDecl *Function) {
+ const FunctionProtoType *Proto
+ = Function->getType()->getAs<FunctionProtoType>();
+ if (!Proto || !Proto->getTypeQuals())
+ return;
+
+ std::string QualsStr;
+ if (Proto->getTypeQuals() & Qualifiers::Const)
+ QualsStr += " const";
+ if (Proto->getTypeQuals() & Qualifiers::Volatile)
+ QualsStr += " volatile";
+ if (Proto->getTypeQuals() & Qualifiers::Restrict)
+ QualsStr += " restrict";
+ Result->AddInformativeChunk(QualsStr);
+}
+
/// \brief If possible, create a new code completion string for the given
/// result.
///
@@ -1038,6 +1056,7 @@ CodeCompleteConsumer::Result::CreateCodeCompletionString(Sema &S) {
Result->AddChunk(Chunk(CodeCompletionString::CK_LeftParen));
AddFunctionParameterChunks(S.Context, Function, Result);
Result->AddChunk(Chunk(CodeCompletionString::CK_RightParen));
+ AddFunctionTypeQualsToCompletionString(Result, Function);
return Result;
}
@@ -1091,6 +1110,7 @@ CodeCompleteConsumer::Result::CreateCodeCompletionString(Sema &S) {
Result->AddChunk(Chunk(CodeCompletionString::CK_LeftParen));
AddFunctionParameterChunks(S.Context, Function, Result);
Result->AddChunk(Chunk(CodeCompletionString::CK_RightParen));
+ AddFunctionTypeQualsToCompletionString(Result, Function);
return Result;
}
diff --git a/clang/test/CodeCompletion/member-access.cpp b/clang/test/CodeCompletion/member-access.cpp
index 6fefb64c705..d03180b182d 100644
--- a/clang/test/CodeCompletion/member-access.cpp
+++ b/clang/test/CodeCompletion/member-access.cpp
@@ -11,7 +11,7 @@ struct Base2 {
struct Base3 : Base1, Base2 {
void memfun1(float);
- void memfun1(double);
+ void memfun1(double) const;
void memfun2(int);
};
@@ -34,7 +34,7 @@ void test(const Proxy &p) {
// CHECK-CC1: member3 : 0
// CHECK-CC1: member4 : 0
// CHECK-CC1: memfun1 : 0 : [#Base3::#]memfun1(<#float#>)
- // CHECK-CC1: memfun1 : 0 : [#Base3::#]memfun1(<#double#>)
+ // CHECK-CC1: memfun1 : 0 : [#Base3::#]memfun1(<#double#>)[# const#]
// CHECK-CC1: memfun2 : 0 : [#Base3::#]memfun2(<#int#>)
// CHECK-CC1: memfun3 : 0 : memfun3(<#int#>)
// CHECK-CC1: memfun1 : 0 (Hidden) : Base2::memfun1(<#int#>)
OpenPOWER on IntegriCloud