Add PreprocessorOutputOptions to CompilerInvocation, and move initialization to

clang-cc/Options.cpp

llvm-svn: 86828
This commit is contained in:
Daniel Dunbar 2009-11-11 10:07:44 +00:00
parent 531f6c662b
commit 22bdabf05f
6 changed files with 60 additions and 35 deletions

View File

@ -15,6 +15,7 @@
#include "clang/Frontend/DiagnosticOptions.h"
#include "clang/Frontend/HeaderSearchOptions.h"
#include "clang/Frontend/PreprocessorOptions.h"
#include "clang/Frontend/PreprocessorOutputOptions.h"
#include "llvm/ADT/StringMap.h"
#include <string>
@ -42,13 +43,13 @@ class CompilerInvocation {
/// Options controlling the preprocessor (aside from #include handling).
PreprocessorOptions PreprocessorOpts;
/// Options controlling preprocessed output.
PreprocessorOutputOptions PreprocessorOutputOpts;
/// The location for the output file. This is optional only for compiler
/// invocations which have no output.
std::string OutputFile;
/// Set of target-specific code generation features to enable/disable.
llvm::StringMap<bool> TargetFeatures;
public:
CompilerInvocation() {}
@ -58,11 +59,6 @@ public:
std::string &getOutputFile() { return OutputFile; }
const std::string &getOutputFile() const { return OutputFile; }
llvm::StringMap<bool> &getTargetFeatures() { return TargetFeatures; }
const llvm::StringMap<bool> &getTargetFeatures() const {
return TargetFeatures;
}
/// @}
/// @name Option Subgroups
/// @{
@ -88,6 +84,13 @@ public:
return PreprocessorOpts;
}
PreprocessorOutputOptions &getPreprocessorOutputOpts() {
return PreprocessorOutputOpts;
}
const PreprocessorOutputOptions &getPreprocessorOutputOpts() const {
return PreprocessorOutputOpts;
}
/// @}
};

View File

@ -59,7 +59,7 @@ bool ProcessWarningOptions(Diagnostic &Diags,
/// DoPrintPreprocessedInput - Implement -E mode.
void DoPrintPreprocessedInput(Preprocessor &PP, llvm::raw_ostream* OS,
PreprocessorOutputOptions &Opts);
const PreprocessorOutputOptions &Opts);
/// RewriteMacrosInInput - Implement -rewrite-macros mode.
void RewriteMacrosInInput(Preprocessor &PP, llvm::raw_ostream* OS);

View File

@ -468,7 +468,7 @@ static void DoPrintMacros(Preprocessor &PP, llvm::raw_ostream *OS) {
/// DoPrintPreprocessedInput - This implements -E mode.
///
void clang::DoPrintPreprocessedInput(Preprocessor &PP, llvm::raw_ostream *OS,
PreprocessorOutputOptions &Opts) {
const PreprocessorOutputOptions &Opts) {
// Show macros with no output is handled specially.
if (!Opts.ShowCPP) {
assert(Opts.ShowMacros && "Not yet implemented!");

View File

@ -20,6 +20,7 @@
#include "clang/Frontend/HeaderSearchOptions.h"
#include "clang/Frontend/PCHReader.h"
#include "clang/Frontend/PreprocessorOptions.h"
#include "clang/Frontend/PreprocessorOutputOptions.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/StringMap.h"
#include "llvm/Support/CommandLine.h"
@ -526,6 +527,31 @@ isysroot("isysroot", llvm::cl::value_desc("dir"), llvm::cl::init("/"),
}
//===----------------------------------------------------------------------===//
// Preprocessed Output Options
//===----------------------------------------------------------------------===//
namespace preprocessoroutputoptions {
static llvm::cl::opt<bool>
DisableLineMarkers("P", llvm::cl::desc("Disable linemarker output in -E mode"));
static llvm::cl::opt<bool>
EnableCommentOutput("C", llvm::cl::desc("Enable comment output in -E mode"));
static llvm::cl::opt<bool>
EnableMacroCommentOutput("CC",
llvm::cl::desc("Enable comment output in -E mode, "
"even from macro expansions"));
static llvm::cl::opt<bool>
DumpMacros("dM", llvm::cl::desc("Print macro definitions in -E mode instead of"
" normal output"));
static llvm::cl::opt<bool>
DumpDefines("dD", llvm::cl::desc("Print macro definitions in -E mode in "
"addition to normal output"));
}
//===----------------------------------------------------------------------===//
// Option Object Construction
//===----------------------------------------------------------------------===//
@ -1010,3 +1036,15 @@ void clang::InitializeLangOptions(LangOptions &Options, LangKind LK,
Target.setForcedLangOptions(Options);
}
void
clang::InitializePreprocessorOutputOptions(PreprocessorOutputOptions &Opts) {
using namespace preprocessoroutputoptions;
Opts.ShowCPP = !DumpMacros;
Opts.ShowMacros = DumpMacros || DumpDefines;
Opts.ShowLineMarkers = !DisableLineMarkers;
Opts.ShowComments = EnableCommentOutput;
Opts.ShowMacroComments = EnableMacroCommentOutput;
}

View File

@ -20,6 +20,7 @@ class DiagnosticOptions;
class HeaderSearchOptions;
class LangOptions;
class PreprocessorOptions;
class PreprocessorOutputOptions;
class TargetInfo;
enum LangKind {
@ -55,6 +56,8 @@ void InitializeLangOptions(LangOptions &Options, LangKind LK,
void InitializePreprocessorOptions(PreprocessorOptions &Opts);
void InitializePreprocessorOutputOptions(PreprocessorOutputOptions &Opts);
} // end namespace clang
#endif

View File

@ -454,27 +454,10 @@ static llvm::cl::opt<bool> OptPedantic("pedantic");
static llvm::cl::opt<bool> OptPedanticErrors("pedantic-errors");
static llvm::cl::opt<bool> OptNoWarnings("w");
//===----------------------------------------------------------------------===//
// Preprocessing (-E mode) Options
//===----------------------------------------------------------------------===//
static llvm::cl::opt<bool>
DisableLineMarkers("P", llvm::cl::desc("Disable linemarker output in -E mode"));
static llvm::cl::opt<bool>
EnableCommentOutput("C", llvm::cl::desc("Enable comment output in -E mode"));
static llvm::cl::opt<bool>
EnableMacroCommentOutput("CC",
llvm::cl::desc("Enable comment output in -E mode, "
"even from macro expansions"));
static llvm::cl::opt<bool>
DumpMacros("dM", llvm::cl::desc("Print macro definitions in -E mode instead of"
" normal output"));
static llvm::cl::opt<bool>
DumpDefines("dD", llvm::cl::desc("Print macro definitions in -E mode in "
"addition to normal output"));
//===----------------------------------------------------------------------===//
// Dependency file options
//===----------------------------------------------------------------------===//
static llvm::cl::opt<std::string>
DependencyFile("dependency-file",
llvm::cl::desc("Filename (or -) to write dependency output to"));
@ -920,13 +903,8 @@ static void ProcessInputFile(const CompilerInvocation &CompOpts,
case PrintPreprocessedInput: {
llvm::TimeRegion Timer(ClangFrontendTimer);
PreprocessorOutputOptions Opts;
Opts.ShowCPP = !DumpMacros;
Opts.ShowMacros = DumpMacros || DumpDefines;
Opts.ShowLineMarkers = !DisableLineMarkers;
Opts.ShowComments = EnableCommentOutput;
Opts.ShowMacroComments = EnableMacroCommentOutput;
DoPrintPreprocessedInput(PP, OS.get(), Opts);
DoPrintPreprocessedInput(PP, OS.get(),
CompOpts.getPreprocessorOutputOpts());
ClearSourceMgr = true;
}
@ -1123,6 +1101,9 @@ static void ConstructCompilerInvocation(CompilerInvocation &Opts,
// Initialize the other preprocessor options.
InitializePreprocessorOptions(Opts.getPreprocessorOpts());
// Initialize the preprocessed output options.
InitializePreprocessorOutputOptions(Opts.getPreprocessorOutputOpts());
// Finalize some code generation options.
FinalizeCompileOptions(Opts.getCompileOpts(), Opts.getLangOpts());
}