From: Douglas Gregor Date: Mon, 15 Nov 2010 23:00:34 +0000 (+0000) Subject: Tweak libclang's heuristics for building precompiled preambles and X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=08bb4c622d0b79c33b4ac78ce1bec79398953daa;p=clang Tweak libclang's heuristics for building precompiled preambles and caching global code-completion results. In particular, don't perform either operation the first time we parse, but do both after the first reparse. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@119285 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Frontend/ASTUnit.cpp b/lib/Frontend/ASTUnit.cpp index ff05f45b14..5c7b770a35 100644 --- a/lib/Frontend/ASTUnit.cpp +++ b/lib/Frontend/ASTUnit.cpp @@ -326,7 +326,6 @@ void ASTUnit::CacheCodeCompletionResults() { // Make a note of the state when we performed this caching. NumTopLevelDeclsAtLastCompletionCache = top_level_size(); - CacheCodeCompletionCoolDown = 15; } void ASTUnit::ClearCachedCompletionResults() { @@ -824,12 +823,6 @@ bool ASTUnit::Parse(llvm::MemoryBuffer *OverrideMainBuffer) { } Invocation.reset(Clang.takeInvocation()); - - // If we were asked to cache code-completion results and don't have any - // results yet, do so now. - if (ShouldCacheCodeCompletionResults && CachedCompletionResults.empty()) - CacheCodeCompletionResults(); - return false; error: @@ -1350,7 +1343,7 @@ bool ASTUnit::LoadFromCompilerInvocation(bool PrecompilePreamble) { llvm::MemoryBuffer *OverrideMainBuffer = 0; if (PrecompilePreamble) { - PreambleRebuildCounter = 1; + PreambleRebuildCounter = 2; OverrideMainBuffer = getMainBufferWithPrecompiledPreamble(*Invocation); } @@ -1377,6 +1370,7 @@ ASTUnit *ASTUnit::LoadFromCompilerInvocation(CompilerInvocation *CI, AST->CaptureDiagnostics = CaptureDiagnostics; AST->CompleteTranslationUnit = CompleteTranslationUnit; AST->ShouldCacheCodeCompletionResults = CacheCodeCompletionResults; + AST->CacheCodeCompletionCoolDown = 1; AST->Invocation.reset(CI); return AST->LoadFromCompilerInvocation(PrecompilePreamble)? 0 : AST.take(); @@ -1481,6 +1475,7 @@ ASTUnit *ASTUnit::LoadFromCommandLine(const char **ArgBegin, AST->CaptureDiagnostics = CaptureDiagnostics; AST->CompleteTranslationUnit = CompleteTranslationUnit; AST->ShouldCacheCodeCompletionResults = CacheCodeCompletionResults; + AST->CacheCodeCompletionCoolDown = 1; AST->NumStoredDiagnosticsFromDriver = StoredDiagnostics.size(); AST->NumStoredDiagnosticsInPreamble = StoredDiagnostics.size(); AST->StoredDiagnostics.swap(StoredDiagnostics); diff --git a/tools/c-index-test/c-index-test.c b/tools/c-index-test/c-index-test.c index ae36a8e996..edaf116d9a 100644 --- a/tools/c-index-test/c-index-test.c +++ b/tools/c-index-test/c-index-test.c @@ -1040,6 +1040,11 @@ int perform_code_completion(int argc, const char **argv, int timing_only) { fprintf(stderr, "Unable to load translation unit!\n"); return 1; } + + if (clang_reparseTranslationUnit(TU, 0, 0, clang_defaultReparseOptions(TU))) { + fprintf(stderr, "Unable to reparse translation init!\n"); + return 1; + } for (I = 0; I != Repeats; ++I) { results = clang_codeCompleteAt(TU, filename, line, column,