|
@@ -2495,7 +2495,7 @@ CodeCompletionResult::CreateCodeCompletionString(ASTContext &Ctx,
|
|
|
}
|
|
|
|
|
|
if (Kind == RK_Macro) {
|
|
|
- MacroInfo *MI = PP.getMacroInfo(Macro);
|
|
|
+ MacroInfo *MI = PP.getMacroInfoHistory(Macro);
|
|
|
assert(MI && "Not a macro?");
|
|
|
|
|
|
Result.AddTypedTextChunk(
|
|
@@ -2902,6 +2902,7 @@ CXCursorKind clang::getCursorKindForDecl(Decl *D) {
|
|
|
}
|
|
|
|
|
|
static void AddMacroResults(Preprocessor &PP, ResultBuilder &Results,
|
|
|
+ bool IncludeUndefined,
|
|
|
bool TargetTypeIsPointer = false) {
|
|
|
typedef CodeCompletionResult Result;
|
|
|
|
|
@@ -2910,11 +2911,8 @@ static void AddMacroResults(Preprocessor &PP, ResultBuilder &Results,
|
|
|
for (Preprocessor::macro_iterator M = PP.macro_begin(),
|
|
|
MEnd = PP.macro_end();
|
|
|
M != MEnd; ++M) {
|
|
|
- // FIXME: Eventually, we'd want to be able to look back to the macro
|
|
|
- // definition that was actually active at the point of code completion (even
|
|
|
- // if that macro has since been #undef'd).
|
|
|
- if (M->first->hasMacroDefinition())
|
|
|
- Results.AddResult(Result(M->first,
|
|
|
+ if (IncludeUndefined || M->first->hasMacroDefinition())
|
|
|
+ Results.AddResult(Result(M->first,
|
|
|
getMacroUsagePriority(M->first->getName(),
|
|
|
PP.getLangOpts(),
|
|
|
TargetTypeIsPointer)));
|
|
@@ -3213,7 +3211,7 @@ void Sema::CodeCompleteOrdinaryName(Scope *S,
|
|
|
}
|
|
|
|
|
|
if (CodeCompleter->includeMacros())
|
|
|
- AddMacroResults(PP, Results);
|
|
|
+ AddMacroResults(PP, Results, false);
|
|
|
|
|
|
HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
|
|
|
Results.data(),Results.size());
|
|
@@ -3344,7 +3342,7 @@ void Sema::CodeCompleteExpression(Scope *S,
|
|
|
AddPrettyFunctionResults(PP.getLangOpts(), Results);
|
|
|
|
|
|
if (CodeCompleter->includeMacros())
|
|
|
- AddMacroResults(PP, Results, PreferredTypeIsPointer);
|
|
|
+ AddMacroResults(PP, Results, false, PreferredTypeIsPointer);
|
|
|
HandleCodeCompleteResults(this, CodeCompleter,
|
|
|
CodeCompletionContext(CodeCompletionContext::CCC_Expression,
|
|
|
Data.PreferredType),
|
|
@@ -3736,7 +3734,7 @@ void Sema::CodeCompleteCase(Scope *S) {
|
|
|
//so only say we include macros if the code completer says we do
|
|
|
enum CodeCompletionContext::Kind kind = CodeCompletionContext::CCC_Other;
|
|
|
if (CodeCompleter->includeMacros()) {
|
|
|
- AddMacroResults(PP, Results);
|
|
|
+ AddMacroResults(PP, Results, false);
|
|
|
kind = CodeCompletionContext::CCC_OtherWithMacros;
|
|
|
}
|
|
|
|
|
@@ -3959,7 +3957,7 @@ void Sema::CodeCompleteAfterIf(Scope *S) {
|
|
|
AddPrettyFunctionResults(PP.getLangOpts(), Results);
|
|
|
|
|
|
if (CodeCompleter->includeMacros())
|
|
|
- AddMacroResults(PP, Results);
|
|
|
+ AddMacroResults(PP, Results, false);
|
|
|
|
|
|
HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
|
|
|
Results.data(),Results.size());
|
|
@@ -4960,7 +4958,7 @@ void Sema::CodeCompleteObjCPassingType(Scope *S, ObjCDeclSpec &DS,
|
|
|
CodeCompleter->includeGlobals());
|
|
|
|
|
|
if (CodeCompleter->includeMacros())
|
|
|
- AddMacroResults(PP, Results);
|
|
|
+ AddMacroResults(PP, Results, false);
|
|
|
|
|
|
HandleCodeCompleteResults(this, CodeCompleter,
|
|
|
CodeCompletionContext::CCC_Type,
|
|
@@ -5190,7 +5188,7 @@ void Sema::CodeCompleteObjCMessageReceiver(Scope *S) {
|
|
|
Results.ExitScope();
|
|
|
|
|
|
if (CodeCompleter->includeMacros())
|
|
|
- AddMacroResults(PP, Results);
|
|
|
+ AddMacroResults(PP, Results, false);
|
|
|
HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
|
|
|
Results.data(), Results.size());
|
|
|
|
|
@@ -7190,7 +7188,7 @@ void Sema::CodeCompletePreprocessorExpression() {
|
|
|
CodeCompletionContext::CCC_PreprocessorExpression);
|
|
|
|
|
|
if (!CodeCompleter || CodeCompleter->includeMacros())
|
|
|
- AddMacroResults(PP, Results);
|
|
|
+ AddMacroResults(PP, Results, true);
|
|
|
|
|
|
// defined (<macro>)
|
|
|
Results.EnterNewScope();
|
|
@@ -7239,7 +7237,7 @@ void Sema::GatherGlobalCodeCompletions(CodeCompletionAllocator &Allocator,
|
|
|
}
|
|
|
|
|
|
if (!CodeCompleter || CodeCompleter->includeMacros())
|
|
|
- AddMacroResults(PP, Builder);
|
|
|
+ AddMacroResults(PP, Builder, true);
|
|
|
|
|
|
Results.clear();
|
|
|
Results.insert(Results.end(),
|