mirror of
https://github.com/intel/llvm.git
synced 2026-02-06 15:18:53 +08:00
Teach ASTContext and Preprocessor to hold on to references to the same
LangOptions, rather than making distinct copies of LangOptions. Granted, LangOptions doesn't actually get modified, but this will eventually make it easier to construct ASTContext and Preprocessor before we know all of the LangOptions. llvm-svn: 138959
This commit is contained in:
@@ -316,7 +316,7 @@ class ASTContext : public llvm::RefCountedBase<ASTContext> {
|
||||
|
||||
/// LangOpts - The language options used to create the AST associated with
|
||||
/// this ASTContext object.
|
||||
LangOptions LangOpts;
|
||||
LangOptions &LangOpts;
|
||||
|
||||
/// \brief The allocator used to create AST objects.
|
||||
///
|
||||
@@ -478,7 +478,7 @@ public:
|
||||
mutable QualType AutoDeductTy; // Deduction against 'auto'.
|
||||
mutable QualType AutoRRefDeductTy; // Deduction against 'auto &&'.
|
||||
|
||||
ASTContext(const LangOptions& LOpts, SourceManager &SM, const TargetInfo &t,
|
||||
ASTContext(LangOptions& LOpts, SourceManager &SM, const TargetInfo &t,
|
||||
IdentifierTable &idents, SelectorTable &sels,
|
||||
Builtin::Context &builtins,
|
||||
unsigned size_reserve);
|
||||
|
||||
@@ -249,7 +249,10 @@ private:
|
||||
/// \brief Whether we want to include nested macro expansions in the
|
||||
/// detailed preprocessing record.
|
||||
bool NestedMacroExpansions;
|
||||
|
||||
|
||||
/// \brief The language options used when we load an AST file.
|
||||
LangOptions ASTFileLangOpts;
|
||||
|
||||
static void ConfigureDiags(llvm::IntrusiveRefCntPtr<Diagnostic> &Diags,
|
||||
const char **ArgBegin, const char **ArgEnd,
|
||||
ASTUnit &AST, bool CaptureDiagnostics);
|
||||
|
||||
@@ -58,7 +58,7 @@ class ModuleLoader;
|
||||
///
|
||||
class Preprocessor : public llvm::RefCountedBase<Preprocessor> {
|
||||
Diagnostic *Diags;
|
||||
LangOptions Features;
|
||||
LangOptions &Features;
|
||||
const TargetInfo &Target;
|
||||
FileManager &FileMgr;
|
||||
SourceManager &SourceMgr;
|
||||
@@ -298,7 +298,7 @@ private: // Cached tokens state.
|
||||
MacroInfo *getInfoForMacro(IdentifierInfo *II) const;
|
||||
|
||||
public:
|
||||
Preprocessor(Diagnostic &diags, const LangOptions &opts,
|
||||
Preprocessor(Diagnostic &diags, LangOptions &opts,
|
||||
const TargetInfo &target,
|
||||
SourceManager &SM, HeaderSearch &Headers,
|
||||
ModuleLoader &TheModuleLoader,
|
||||
|
||||
@@ -224,7 +224,7 @@ private:
|
||||
SourceManager &SourceMgr;
|
||||
FileManager &FileMgr;
|
||||
Diagnostic &Diags;
|
||||
|
||||
|
||||
/// \brief The semantic analysis object that will be processing the
|
||||
/// AST files and the translation unit that uses it.
|
||||
Sema *SemaObj;
|
||||
|
||||
@@ -212,7 +212,7 @@ static const LangAS::Map &getAddressSpaceMap(const TargetInfo &T,
|
||||
}
|
||||
}
|
||||
|
||||
ASTContext::ASTContext(const LangOptions& LOpts, SourceManager &SM,
|
||||
ASTContext::ASTContext(LangOptions& LOpts, SourceManager &SM,
|
||||
const TargetInfo &t,
|
||||
IdentifierTable &idents, SelectorTable &sels,
|
||||
Builtin::Context &builtins,
|
||||
|
||||
@@ -572,7 +572,6 @@ ASTUnit *ASTUnit::LoadFromASTFile(const std::string &Filename,
|
||||
|
||||
// Gather Info for preprocessor construction later on.
|
||||
|
||||
LangOptions LangInfo;
|
||||
HeaderSearch &HeaderInfo = *AST->HeaderInfo.get();
|
||||
std::string TargetTriple;
|
||||
std::string Predefines;
|
||||
@@ -587,8 +586,8 @@ ASTUnit *ASTUnit::LoadFromASTFile(const std::string &Filename,
|
||||
llvm::CrashRecoveryContextCleanupRegistrar<ASTReader>
|
||||
ReaderCleanup(Reader.get());
|
||||
|
||||
Reader->setListener(new ASTInfoCollector(LangInfo, HeaderInfo, TargetTriple,
|
||||
Predefines, Counter));
|
||||
Reader->setListener(new ASTInfoCollector(AST->ASTFileLangOpts, HeaderInfo,
|
||||
TargetTriple, Predefines, Counter));
|
||||
|
||||
switch (Reader->ReadAST(Filename, serialization::MK_MainFile)) {
|
||||
case ASTReader::Success:
|
||||
@@ -615,8 +614,9 @@ ASTUnit *ASTUnit::LoadFromASTFile(const std::string &Filename,
|
||||
TargetOpts.Triple = TargetTriple;
|
||||
AST->Target = TargetInfo::CreateTargetInfo(AST->getDiagnostics(),
|
||||
TargetOpts);
|
||||
AST->PP = new Preprocessor(AST->getDiagnostics(), LangInfo, *AST->Target,
|
||||
AST->getSourceManager(), HeaderInfo, *AST);
|
||||
AST->PP = new Preprocessor(AST->getDiagnostics(), AST->ASTFileLangOpts,
|
||||
*AST->Target, AST->getSourceManager(), HeaderInfo,
|
||||
*AST);
|
||||
Preprocessor &PP = *AST->PP;
|
||||
|
||||
PP.setPredefines(Reader->getSuggestedPredefines());
|
||||
@@ -625,7 +625,7 @@ ASTUnit *ASTUnit::LoadFromASTFile(const std::string &Filename,
|
||||
|
||||
// Create and initialize the ASTContext.
|
||||
|
||||
AST->Ctx = new ASTContext(LangInfo,
|
||||
AST->Ctx = new ASTContext(AST->ASTFileLangOpts,
|
||||
AST->getSourceManager(),
|
||||
*AST->Target,
|
||||
PP.getIdentifierTable(),
|
||||
|
||||
@@ -49,7 +49,7 @@ using namespace clang;
|
||||
//===----------------------------------------------------------------------===//
|
||||
ExternalPreprocessorSource::~ExternalPreprocessorSource() { }
|
||||
|
||||
Preprocessor::Preprocessor(Diagnostic &diags, const LangOptions &opts,
|
||||
Preprocessor::Preprocessor(Diagnostic &diags, LangOptions &opts,
|
||||
const TargetInfo &target, SourceManager &SM,
|
||||
HeaderSearch &Headers, ModuleLoader &TheModuleLoader,
|
||||
IdentifierInfoLookup* IILookup,
|
||||
|
||||
Reference in New Issue
Block a user