16
16
#include " swift/AST/DiagnosticEngine.h"
17
17
#include " swift/AST/DiagnosticsFrontend.h"
18
18
#include " swift/AST/Module.h"
19
+ #include " swift/AST/PrettyStackTrace.h"
19
20
#include " swift/AST/SourceFile.h"
20
21
#include " swift/Basic/LangOptions.h"
22
+ #include " swift/Basic/PrettyStackTrace.h"
21
23
#include " swift/Basic/SourceManager.h"
22
24
#include " swift/Driver/FrontendUtil.h"
23
25
#include " swift/Frontend/Frontend.h"
@@ -167,6 +169,8 @@ bool CompletionInstance::performCachedOperaitonIfPossible(
167
169
llvm::MemoryBuffer *completionBuffer, unsigned int Offset,
168
170
DiagnosticConsumer *DiagC,
169
171
llvm::function_ref<void (CompilerInstance &, bool )> Callback) {
172
+ llvm::PrettyStackTraceString trace (
173
+ " While performing cached completion if possible" );
170
174
171
175
if (!CachedCI)
172
176
return false ;
@@ -218,7 +222,7 @@ bool CompletionInstance::performCachedOperaitonIfPossible(
218
222
219
223
auto &newInfo = newState->getCodeCompletionDelayedDeclState ();
220
224
unsigned newBufferID;
221
-
225
+ DeclContext *traceDC = nullptr ;
222
226
switch (newInfo.Kind ) {
223
227
case CodeCompletionDelayedDeclKind::FunctionBody: {
224
228
// If the interface has changed, AST must be refreshed.
@@ -285,6 +289,7 @@ bool CompletionInstance::performCachedOperaitonIfPossible(
285
289
if (AFD->isBodySkipped ())
286
290
AFD->setBodyDelayed (AFD->getBodySourceRange ());
287
291
292
+ traceDC = AFD;
288
293
break ;
289
294
}
290
295
case CodeCompletionDelayedDeclKind::Decl:
@@ -329,6 +334,7 @@ bool CompletionInstance::performCachedOperaitonIfPossible(
329
334
performImportResolution (*newSF);
330
335
bindExtensions (*newSF);
331
336
337
+ traceDC = newM;
332
338
#ifndef NDEBUG
333
339
const auto *reparsedState = newSF->getDelayedParserState ();
334
340
assert (reparsedState->hasCodeCompletionDelayedDeclState () &&
@@ -341,13 +347,17 @@ bool CompletionInstance::performCachedOperaitonIfPossible(
341
347
}
342
348
}
343
349
344
- if (DiagC)
345
- CI. addDiagnosticConsumer (DiagC );
350
+ {
351
+ PrettyStackTraceDeclContext trace ( " performing cached completion " , traceDC );
346
352
347
- Callback (CI, /* reusingASTContext=*/ true );
353
+ if (DiagC)
354
+ CI.addDiagnosticConsumer (DiagC);
348
355
349
- if (DiagC)
350
- CI.removeDiagnosticConsumer (DiagC);
356
+ Callback (CI, /* reusingASTContext=*/ true );
357
+
358
+ if (DiagC)
359
+ CI.removeDiagnosticConsumer (DiagC);
360
+ }
351
361
352
362
CachedReuseCount += 1 ;
353
363
@@ -360,6 +370,7 @@ bool CompletionInstance::performNewOperation(
360
370
llvm::MemoryBuffer *completionBuffer, unsigned int Offset,
361
371
std::string &Error, DiagnosticConsumer *DiagC,
362
372
llvm::function_ref<void (CompilerInstance &, bool )> Callback) {
373
+ llvm::PrettyStackTraceString trace (" While performing new completion" );
363
374
364
375
auto TheInstance = std::make_unique<CompilerInstance>();
365
376
{
0 commit comments