forked from OSchip/llvm-project
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. llvm-svn: 119285
This commit is contained in:
parent
18fb1665bf
commit
c65929299d
|
@ -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);
|
||||
|
|
|
@ -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,
|
||||
|
|
Loading…
Reference in New Issue