]> granicus.if.org Git - clang/commit
Implement caching of code-completion results for macro definitions
authorDouglas Gregor <dgregor@apple.com>
Fri, 13 Aug 2010 22:48:40 +0000 (22:48 +0000)
committerDouglas Gregor <dgregor@apple.com>
Fri, 13 Aug 2010 22:48:40 +0000 (22:48 +0000)
commit87c08a5d6b9e1e44ae6f554df40139d3a6f60b33
treecabd7c3f202bd39288d6caf39d63b32c0818cd0b
parentcd2d2b7814e0104ed41a8da159a06a8ca77b70d8
Implement caching of code-completion results for macro definitions
when the CXTranslationUnit_CacheCompletionResults option is given to
clang_parseTranslationUnit(). Essentially, we compute code-completion
results for macro definitions after we have parsed the file, then
store an ASTContext-agnostic version of those results (completion
string, cursor kind, priority, and active contexts) in the
ASTUnit. When performing code completion in that ASTUnit, we splice
the macro definition results into the results provided by the actual
code-completion (which has had macros turned off) before libclang gets
those results. We use completion context information to only splice in
those results that make sense for that context.

With a completion involving all of the macros from Cocoa.h and a few other
system libraries (totally ~8500 macro definitions) living in a
precompiled header, we get about a 9% performance improvement from
code completion, since we no longer have to deserialize all of the
macro definitions from the precompiled header.

Note that macro definitions are merely the canary; the cache is
designed to also support other top-level declarations, which should be
a bigger performance win. That optimization will be next.

Note also that there is no mechanism for determining when to throw
away the cache and recompute its contents.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@111051 91177308-0d34-0410-b5e6-96231b3b80d8
include/clang/Frontend/ASTUnit.h
include/clang/Sema/CodeCompleteConsumer.h
include/clang/Sema/Sema.h
lib/Frontend/ASTUnit.cpp
lib/Sema/CodeCompleteConsumer.cpp
lib/Sema/Sema.cpp
lib/Sema/SemaCodeComplete.cpp
test/Index/complete-macros.c
tools/c-index-test/c-index-test.c
tools/libclang/CIndex.cpp
tools/libclang/CIndexCodeCompletion.cpp