Introduce libclang-level options for C++ precompiled preambles,
separating out chaining precompiled preambles from non-chaining ones. llvm-svn: 117457
This commit is contained in:
parent
9d798a07e4
commit
f5a1854655
|
@ -713,7 +713,22 @@ enum CXTranslationUnit_Flags {
|
|||
* introduces some overhead to reparsing but improves the performance of
|
||||
* code-completion operations.
|
||||
*/
|
||||
CXTranslationUnit_CacheCompletionResults = 0x08
|
||||
CXTranslationUnit_CacheCompletionResults = 0x08,
|
||||
/**
|
||||
* \brief Enable precompiled preambles in C++.
|
||||
*
|
||||
* Note: this is a *temporary* option that is available only while
|
||||
* we are testing C++ precompiled preamble support.
|
||||
*/
|
||||
CXTranslationUnit_CXXPrecompiledPreamble = 0x10,
|
||||
|
||||
/**
|
||||
* \brief Enabled chained precompiled preambles in C++.
|
||||
*
|
||||
* Note: this is a *temporary* option that is available only while
|
||||
* we are testing C++ precompiled preamble support.
|
||||
*/
|
||||
CXTranslationUnit_CXXChainedPCH = 0x20
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
|
@ -546,7 +546,9 @@ public:
|
|||
bool CaptureDiagnostics = false,
|
||||
bool PrecompilePreamble = false,
|
||||
bool CompleteTranslationUnit = true,
|
||||
bool CacheCodeCompletionResults = false);
|
||||
bool CacheCodeCompletionResults = false,
|
||||
bool CXXPrecompilePreamble = false,
|
||||
bool CXXChainedPCH = false);
|
||||
|
||||
/// \brief Reparse the source files using the same command-line options that
|
||||
/// were originally used to produce this translation unit.
|
||||
|
|
|
@ -1328,8 +1328,7 @@ bool ASTUnit::LoadFromCompilerInvocation(bool PrecompilePreamble) {
|
|||
|
||||
|
||||
llvm::MemoryBuffer *OverrideMainBuffer = 0;
|
||||
// FIXME: When C++ PCH is ready, allow use of it for a precompiled preamble.
|
||||
if (PrecompilePreamble && !Invocation->getLangOpts().CPlusPlus) {
|
||||
if (PrecompilePreamble) {
|
||||
PreambleRebuildCounter = 1;
|
||||
OverrideMainBuffer
|
||||
= getMainBufferWithPrecompiledPreamble(*Invocation);
|
||||
|
@ -1386,7 +1385,9 @@ ASTUnit *ASTUnit::LoadFromCommandLine(const char **ArgBegin,
|
|||
bool CaptureDiagnostics,
|
||||
bool PrecompilePreamble,
|
||||
bool CompleteTranslationUnit,
|
||||
bool CacheCodeCompletionResults) {
|
||||
bool CacheCodeCompletionResults,
|
||||
bool CXXPrecompilePreamble,
|
||||
bool CXXChainedPCH) {
|
||||
bool CreatedDiagnosticsObject = false;
|
||||
|
||||
if (!Diags.getPtr()) {
|
||||
|
@ -1457,6 +1458,16 @@ ASTUnit *ASTUnit::LoadFromCommandLine(const char **ArgBegin,
|
|||
// Override the resources path.
|
||||
CI->getHeaderSearchOpts().ResourceDir = ResourceFilesPath;
|
||||
|
||||
// Check whether we should precompile the preamble and/or use chained PCH.
|
||||
// FIXME: This is a temporary hack while we debug C++ chained PCH.
|
||||
if (CI->getLangOpts().CPlusPlus) {
|
||||
PrecompilePreamble = PrecompilePreamble && CXXPrecompilePreamble;
|
||||
|
||||
if (PrecompilePreamble && !CXXChainedPCH &&
|
||||
!CI->getPreprocessorOpts().ImplicitPCHInclude.empty())
|
||||
PrecompilePreamble = false;
|
||||
}
|
||||
|
||||
// Create the AST unit.
|
||||
llvm::OwningPtr<ASTUnit> AST;
|
||||
AST.reset(new ASTUnit(false));
|
||||
|
|
|
@ -1972,7 +1972,8 @@ CXTranslationUnit clang_createTranslationUnit(CXIndex CIdx,
|
|||
|
||||
unsigned clang_defaultEditingTranslationUnitOptions() {
|
||||
return CXTranslationUnit_PrecompiledPreamble |
|
||||
CXTranslationUnit_CacheCompletionResults;
|
||||
CXTranslationUnit_CacheCompletionResults |
|
||||
CXTranslationUnit_CXXPrecompiledPreamble;
|
||||
}
|
||||
|
||||
CXTranslationUnit
|
||||
|
@ -2020,6 +2021,10 @@ static void clang_parseTranslationUnit_Impl(void *UserData) {
|
|||
= ((options & CXTranslationUnit_Incomplete) == 0);
|
||||
bool CacheCodeCompetionResults
|
||||
= options & CXTranslationUnit_CacheCompletionResults;
|
||||
bool CXXPrecompilePreamble
|
||||
= options & CXTranslationUnit_CXXPrecompiledPreamble;
|
||||
bool CXXChainedPCH
|
||||
= options & CXTranslationUnit_CXXChainedPCH;
|
||||
|
||||
// Configure the diagnostics.
|
||||
DiagnosticOptions DiagOpts;
|
||||
|
@ -2084,7 +2089,9 @@ static void clang_parseTranslationUnit_Impl(void *UserData) {
|
|||
/*CaptureDiagnostics=*/true,
|
||||
PrecompilePreamble,
|
||||
CompleteTranslationUnit,
|
||||
CacheCodeCompetionResults));
|
||||
CacheCodeCompetionResults,
|
||||
CXXPrecompilePreamble,
|
||||
CXXChainedPCH));
|
||||
|
||||
if (NumErrors != Diags->getNumErrors()) {
|
||||
// Make sure to check that 'Unit' is non-NULL.
|
||||
|
|
Loading…
Reference in New Issue