From: Douglas Gregor Date: Wed, 24 Oct 2012 17:01:35 +0000 (+0000) Subject: Move PreprocessorOptions into the Lex library, and make it intrusively X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=14e71f04136de056c08ffb9ccd44b4ca391cc8a5;p=clang Move PreprocessorOptions into the Lex library, and make it intrusively reference-counted. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@166587 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/Frontend/CompilerInvocation.h b/include/clang/Frontend/CompilerInvocation.h index 5509e77a1b..bd5846b0d6 100644 --- a/include/clang/Frontend/CompilerInvocation.h +++ b/include/clang/Frontend/CompilerInvocation.h @@ -15,13 +15,13 @@ #include "clang/Basic/FileSystemOptions.h" #include "clang/Basic/DiagnosticOptions.h" #include "clang/Lex/HeaderSearchOptions.h" +#include "clang/Lex/PreprocessorOptions.h" #include "clang/StaticAnalyzer/Core/AnalyzerOptions.h" #include "clang/Frontend/MigratorOptions.h" #include "clang/Frontend/CodeGenOptions.h" #include "clang/Frontend/DependencyOutputOptions.h" #include "clang/Frontend/FrontendOptions.h" #include "clang/Frontend/LangStandard.h" -#include "clang/Frontend/PreprocessorOptions.h" #include "clang/Frontend/PreprocessorOutputOptions.h" #include "llvm/ADT/IntrusiveRefCntPtr.h" #include "llvm/ADT/StringRef.h" @@ -62,6 +62,9 @@ protected: /// Options controlling the \#include directive. IntrusiveRefCntPtr HeaderSearchOpts; + /// Options controlling the preprocessor (aside from \#include handling). + IntrusiveRefCntPtr PreprocessorOpts; + public: CompilerInvocationBase(); @@ -81,6 +84,11 @@ public: const HeaderSearchOptions &getHeaderSearchOpts() const { return *HeaderSearchOpts; } + + PreprocessorOptions &getPreprocessorOpts() { return *PreprocessorOpts; } + const PreprocessorOptions &getPreprocessorOpts() const { + return *PreprocessorOpts; + } }; /// \brief Helper class for holding the data necessary to invoke the compiler. @@ -106,9 +114,6 @@ class CompilerInvocation : public CompilerInvocationBase { /// Options controlling the frontend itself. FrontendOptions FrontendOpts; - /// Options controlling the preprocessor (aside from \#include handling). - PreprocessorOptions PreprocessorOpts; - /// Options controlling preprocessed output. PreprocessorOutputOptions PreprocessorOutputOpts; @@ -192,11 +197,6 @@ public: return FrontendOpts; } - PreprocessorOptions &getPreprocessorOpts() { return PreprocessorOpts; } - const PreprocessorOptions &getPreprocessorOpts() const { - return PreprocessorOpts; - } - PreprocessorOutputOptions &getPreprocessorOutputOpts() { return PreprocessorOutputOpts; } diff --git a/include/clang/Frontend/PreprocessorOptions.h b/include/clang/Lex/PreprocessorOptions.h similarity index 97% rename from include/clang/Frontend/PreprocessorOptions.h rename to include/clang/Lex/PreprocessorOptions.h index d86a923d43..4f323606ee 100644 --- a/include/clang/Frontend/PreprocessorOptions.h +++ b/include/clang/Lex/PreprocessorOptions.h @@ -7,9 +7,10 @@ // //===----------------------------------------------------------------------===// -#ifndef LLVM_CLANG_FRONTEND_PREPROCESSOROPTIONS_H_ -#define LLVM_CLANG_FRONTEND_PREPROCESSOROPTIONS_H_ +#ifndef LLVM_CLANG_LEX_PREPROCESSOROPTIONS_H_ +#define LLVM_CLANG_LEX_PREPROCESSOROPTIONS_H_ +#include "llvm/ADT/IntrusiveRefCntPtr.h" #include "llvm/ADT/SmallVector.h" #include "llvm/ADT/StringRef.h" #include @@ -38,7 +39,7 @@ enum ObjCXXARCStandardLibraryKind { /// PreprocessorOptions - This class is used for passing the various options /// used in preprocessor initialization to InitializePreprocessor(). -class PreprocessorOptions { +class PreprocessorOptions : public llvm::RefCountedBase { public: std::vector > Macros; std::vector Includes; diff --git a/lib/ARCMigrate/FileRemapper.cpp b/lib/ARCMigrate/FileRemapper.cpp index e9b49b3039..28ca9a56b2 100644 --- a/lib/ARCMigrate/FileRemapper.cpp +++ b/lib/ARCMigrate/FileRemapper.cpp @@ -8,7 +8,7 @@ //===----------------------------------------------------------------------===// #include "clang/ARCMigrate/FileRemapper.h" -#include "clang/Frontend/PreprocessorOptions.h" +#include "clang/Lex/PreprocessorOptions.h" #include "clang/Basic/FileManager.h" #include "clang/Basic/Diagnostic.h" #include "llvm/Support/MemoryBuffer.h" diff --git a/lib/Frontend/CompilerInvocation.cpp b/lib/Frontend/CompilerInvocation.cpp index b941609318..78dc0d5fb0 100644 --- a/lib/Frontend/CompilerInvocation.cpp +++ b/lib/Frontend/CompilerInvocation.cpp @@ -37,14 +37,16 @@ using namespace clang; CompilerInvocationBase::CompilerInvocationBase() : LangOpts(new LangOptions()), TargetOpts(new TargetOptions()), DiagnosticOpts(new DiagnosticOptions()), - HeaderSearchOpts(new HeaderSearchOptions()) {} + HeaderSearchOpts(new HeaderSearchOptions()), + PreprocessorOpts(new PreprocessorOptions()) {} CompilerInvocationBase::CompilerInvocationBase(const CompilerInvocationBase &X) : RefCountedBase(), LangOpts(new LangOptions(*X.getLangOpts())), TargetOpts(new TargetOptions(X.getTargetOpts())), DiagnosticOpts(new DiagnosticOptions(X.getDiagnosticOpts())), - HeaderSearchOpts(new HeaderSearchOptions(X.getHeaderSearchOpts())) {} + HeaderSearchOpts(new HeaderSearchOptions(X.getHeaderSearchOpts())), + PreprocessorOpts(new PreprocessorOptions(X.getPreprocessorOpts())) {} //===----------------------------------------------------------------------===// // Utility functions. diff --git a/lib/Frontend/InitPreprocessor.cpp b/lib/Frontend/InitPreprocessor.cpp index 24e7dcd95c..8703379724 100644 --- a/lib/Frontend/InitPreprocessor.cpp +++ b/lib/Frontend/InitPreprocessor.cpp @@ -17,9 +17,9 @@ #include "clang/Basic/TargetInfo.h" #include "clang/Frontend/FrontendDiagnostic.h" #include "clang/Frontend/FrontendOptions.h" -#include "clang/Frontend/PreprocessorOptions.h" #include "clang/Lex/HeaderSearch.h" #include "clang/Lex/Preprocessor.h" +#include "clang/Lex/PreprocessorOptions.h" #include "clang/Basic/FileManager.h" #include "clang/Basic/SourceManager.h" #include "clang/Serialization/ASTReader.h"