diff options
author | Douglas Gregor <dgregor@apple.com> | 2010-08-23 21:54:33 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2010-08-23 21:54:33 +0000 |
commit | ce0e85680959942183f8f9d191c0ca8a6ae54fd8 (patch) | |
tree | 4614c16ee18f3fba1976fc527094dac9eea8f5b9 /clang/lib/Sema/SemaCodeComplete.cpp | |
parent | 00202ee32902b50dc3c918c1a6a7f398b042ad6d (diff) | |
download | bcm5719-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.cpp | 38 |
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, |