@@ -2495,7 +2495,7 @@ CodeCompletionResult::CreateCodeCompletionString(ASTContext &Ctx,
2495
2495
}
2496
2496
2497
2497
if (Kind == RK_Macro) {
2498
- MacroInfo *MI = PP.getMacroInfo (Macro);
2498
+ MacroInfo *MI = PP.getMacroInfoHistory (Macro);
2499
2499
assert (MI && " Not a macro?" );
2500
2500
2501
2501
Result.AddTypedTextChunk (
@@ -2902,6 +2902,7 @@ CXCursorKind clang::getCursorKindForDecl(Decl *D) {
2902
2902
}
2903
2903
2904
2904
static void AddMacroResults (Preprocessor &PP, ResultBuilder &Results,
2905
+ bool IncludeUndefined,
2905
2906
bool TargetTypeIsPointer = false ) {
2906
2907
typedef CodeCompletionResult Result;
2907
2908
@@ -2910,11 +2911,8 @@ static void AddMacroResults(Preprocessor &PP, ResultBuilder &Results,
2910
2911
for (Preprocessor::macro_iterator M = PP.macro_begin (),
2911
2912
MEnd = PP.macro_end ();
2912
2913
M != MEnd; ++M) {
2913
- // FIXME: Eventually, we'd want to be able to look back to the macro
2914
- // definition that was actually active at the point of code completion (even
2915
- // if that macro has since been #undef'd).
2916
- if (M->first ->hasMacroDefinition ())
2917
- Results.AddResult (Result (M->first ,
2914
+ if (IncludeUndefined || M->first ->hasMacroDefinition ())
2915
+ Results.AddResult (Result (M->first ,
2918
2916
getMacroUsagePriority (M->first ->getName (),
2919
2917
PP.getLangOpts (),
2920
2918
TargetTypeIsPointer)));
@@ -3213,7 +3211,7 @@ void Sema::CodeCompleteOrdinaryName(Scope *S,
3213
3211
}
3214
3212
3215
3213
if (CodeCompleter->includeMacros ())
3216
- AddMacroResults (PP, Results);
3214
+ AddMacroResults (PP, Results, false );
3217
3215
3218
3216
HandleCodeCompleteResults (this , CodeCompleter, Results.getCompletionContext (),
3219
3217
Results.data (),Results.size ());
@@ -3344,7 +3342,7 @@ void Sema::CodeCompleteExpression(Scope *S,
3344
3342
AddPrettyFunctionResults (PP.getLangOpts (), Results);
3345
3343
3346
3344
if (CodeCompleter->includeMacros ())
3347
- AddMacroResults (PP, Results, PreferredTypeIsPointer);
3345
+ AddMacroResults (PP, Results, false , PreferredTypeIsPointer);
3348
3346
HandleCodeCompleteResults (this , CodeCompleter,
3349
3347
CodeCompletionContext (CodeCompletionContext::CCC_Expression,
3350
3348
Data.PreferredType ),
@@ -3736,7 +3734,7 @@ void Sema::CodeCompleteCase(Scope *S) {
3736
3734
// so only say we include macros if the code completer says we do
3737
3735
enum CodeCompletionContext::Kind kind = CodeCompletionContext::CCC_Other;
3738
3736
if (CodeCompleter->includeMacros ()) {
3739
- AddMacroResults (PP, Results);
3737
+ AddMacroResults (PP, Results, false );
3740
3738
kind = CodeCompletionContext::CCC_OtherWithMacros;
3741
3739
}
3742
3740
@@ -3959,7 +3957,7 @@ void Sema::CodeCompleteAfterIf(Scope *S) {
3959
3957
AddPrettyFunctionResults (PP.getLangOpts (), Results);
3960
3958
3961
3959
if (CodeCompleter->includeMacros ())
3962
- AddMacroResults (PP, Results);
3960
+ AddMacroResults (PP, Results, false );
3963
3961
3964
3962
HandleCodeCompleteResults (this , CodeCompleter, Results.getCompletionContext (),
3965
3963
Results.data (),Results.size ());
@@ -4960,7 +4958,7 @@ void Sema::CodeCompleteObjCPassingType(Scope *S, ObjCDeclSpec &DS,
4960
4958
CodeCompleter->includeGlobals ());
4961
4959
4962
4960
if (CodeCompleter->includeMacros ())
4963
- AddMacroResults (PP, Results);
4961
+ AddMacroResults (PP, Results, false );
4964
4962
4965
4963
HandleCodeCompleteResults (this , CodeCompleter,
4966
4964
CodeCompletionContext::CCC_Type,
@@ -5190,7 +5188,7 @@ void Sema::CodeCompleteObjCMessageReceiver(Scope *S) {
5190
5188
Results.ExitScope ();
5191
5189
5192
5190
if (CodeCompleter->includeMacros ())
5193
- AddMacroResults (PP, Results);
5191
+ AddMacroResults (PP, Results, false );
5194
5192
HandleCodeCompleteResults (this , CodeCompleter, Results.getCompletionContext (),
5195
5193
Results.data (), Results.size ());
5196
5194
@@ -7190,7 +7188,7 @@ void Sema::CodeCompletePreprocessorExpression() {
7190
7188
CodeCompletionContext::CCC_PreprocessorExpression);
7191
7189
7192
7190
if (!CodeCompleter || CodeCompleter->includeMacros ())
7193
- AddMacroResults (PP, Results);
7191
+ AddMacroResults (PP, Results, true );
7194
7192
7195
7193
// defined (<macro>)
7196
7194
Results.EnterNewScope ();
@@ -7239,7 +7237,7 @@ void Sema::GatherGlobalCodeCompletions(CodeCompletionAllocator &Allocator,
7239
7237
}
7240
7238
7241
7239
if (!CodeCompleter || CodeCompleter->includeMacros ())
7242
- AddMacroResults (PP, Builder);
7240
+ AddMacroResults (PP, Builder, true );
7243
7241
7244
7242
Results.clear ();
7245
7243
Results.insert (Results.end (),
0 commit comments