summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema/SemaCodeComplete.cpp
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2010-08-23 21:54:33 +0000
committerDouglas Gregor <dgregor@apple.com>2010-08-23 21:54:33 +0000
commitce0e85680959942183f8f9d191c0ca8a6ae54fd8 (patch)
tree4614c16ee18f3fba1976fc527094dac9eea8f5b9 /clang/lib/Sema/SemaCodeComplete.cpp
parent00202ee32902b50dc3c918c1a6a7f398b042ad6d (diff)
downloadbcm5719-llvm-ce0e85680959942183f8f9d191c0ca8a6ae54fd8.tar.gz
bcm5719-llvm-ce0e85680959942183f8f9d191c0ca8a6ae54fd8.zip
Include __FUNCTION__, __PRETTY_FUNCTION_, __func__ in code-completion
results for expression contexts within a function. llvm-svn: 111851
Diffstat (limited to 'clang/lib/Sema/SemaCodeComplete.cpp')
-rw-r--r--clang/lib/Sema/SemaCodeComplete.cpp38
1 files changed, 38 insertions, 0 deletions
diff --git a/clang/lib/Sema/SemaCodeComplete.cpp b/clang/lib/Sema/SemaCodeComplete.cpp
index 1d91c3fa812..d886e64bb53 100644
--- a/clang/lib/Sema/SemaCodeComplete.cpp
+++ b/clang/lib/Sema/SemaCodeComplete.cpp
@@ -2189,6 +2189,18 @@ static void AddMacroResults(Preprocessor &PP, ResultBuilder &Results,
Results.ExitScope();
}
+static void AddPrettyFunctionResults(const LangOptions &LangOpts,
+ ResultBuilder &Results) {
+ typedef CodeCompleteConsumer::Result Result;
+
+ Results.EnterNewScope();
+ Results.AddResult(Result("__PRETTY_FUNCTION__", CCP_Constant));
+ Results.AddResult(Result("__FUNCTION__", CCP_Constant));
+ if (LangOpts.C99 || LangOpts.CPlusPlus0x)
+ Results.AddResult(Result("__func__", CCP_Constant));
+ Results.ExitScope();
+}
+
static void HandleCodeCompleteResults(Sema *S,
CodeCompleteConsumer *CodeCompleter,
CodeCompletionContext Context,
@@ -2280,8 +2292,29 @@ void Sema::CodeCompleteOrdinaryName(Scope *S,
AddOrdinaryNameResults(CompletionContext, S, *this, Results);
Results.ExitScope();
+ switch (CompletionContext) {
+ case PCC_Expression:
+ case PCC_Statement:
+ case PCC_RecoveryInFunction:
+ if (S->getFnParent())
+ AddPrettyFunctionResults(PP.getLangOptions(), Results);
+ break;
+
+ case PCC_Namespace:
+ case PCC_Class:
+ case PCC_ObjCInterface:
+ case PCC_ObjCImplementation:
+ case PCC_ObjCInstanceVariableList:
+ case PCC_Template:
+ case PCC_MemberTemplate:
+ case PCC_ForInit:
+ case PCC_Condition:
+ break;
+ }
+
if (CodeCompleter->includeMacros())
AddMacroResults(PP, Results);
+
HandleCodeCompleteResults(this, CodeCompleter,
mapCodeCompletionContext(*this, CompletionContext),
Results.data(),Results.size());
@@ -2373,6 +2406,11 @@ void Sema::CodeCompleteExpression(Scope *S,
|| Data.PreferredType->isMemberPointerType()
|| Data.PreferredType->isBlockPointerType();
+ if (S->getFnParent() &&
+ !Data.ObjCCollection &&
+ !Data.IntegralConstantExpression)
+ AddPrettyFunctionResults(PP.getLangOptions(), Results);
+
if (CodeCompleter->includeMacros())
AddMacroResults(PP, Results, PreferredTypeIsPointer);
HandleCodeCompleteResults(this, CodeCompleter,
OpenPOWER on IntegriCloud