diff options
author | Steve Naroff <snaroff@apple.com> | 2008-03-28 22:26:09 +0000 |
---|---|---|
committer | Steve Naroff <snaroff@apple.com> | 2008-03-28 22:26:09 +0000 |
commit | f9e7c90129a8def10559c344a920133c2215158e (patch) | |
tree | 1f010580f4397ff1aef4e3ff7e6e86800f0966ff /clang/Driver/RewriteTest.cpp | |
parent | 0de4199ca0c706b7b5826a9b41c4988bf210d03e (diff) | |
download | bcm5719-llvm-f9e7c90129a8def10559c344a920133c2215158e.tar.gz bcm5719-llvm-f9e7c90129a8def10559c344a920133c2215158e.zip |
Only have the rewriter produce a file when there are no errors.
llvm-svn: 48926
Diffstat (limited to 'clang/Driver/RewriteTest.cpp')
-rw-r--r-- | clang/Driver/RewriteTest.cpp | 69 |
1 files changed, 39 insertions, 30 deletions
diff --git a/clang/Driver/RewriteTest.cpp b/clang/Driver/RewriteTest.cpp index afd34b968e4..c5645762486 100644 --- a/clang/Driver/RewriteTest.cpp +++ b/clang/Driver/RewriteTest.cpp @@ -84,8 +84,9 @@ namespace { // Needed for header files being rewritten bool IsHeader; - std::ostream &OutFile; - + std::string InFileName; + std::string OutFileName; + std::string Preamble; static const int OBJC_ABI_VERSION =7 ; @@ -96,13 +97,8 @@ namespace { // Top Level Driver code. virtual void HandleTopLevelDecl(Decl *D); void HandleDeclInMainFile(Decl *D); - RewriteTest(bool isHeader, std::ostream &outFile, - Diagnostic &D, const LangOptions &LOpts) - : Diags(D), LangOpts(LOpts), OutFile(outFile) { - IsHeader = isHeader; - RewriteFailedDiag = Diags.getCustomDiagID(Diagnostic::Warning, - "rewriting sub-expression within a macro (may not be correct)"); - } + RewriteTest(std::string inFile, std::string outFile, + Diagnostic &D, const LangOptions &LOpts); ~RewriteTest(); void ReplaceStmt(Stmt *Old, Stmt *New) { @@ -239,29 +235,21 @@ static bool IsHeaderFile(const std::string &Filename) { return Ext == "h" || Ext == "hh" || Ext == "H"; } +RewriteTest::RewriteTest(std::string inFile, std::string outFile, + Diagnostic &D, const LangOptions &LOpts) + : Diags(D), LangOpts(LOpts) { + IsHeader = IsHeaderFile(inFile); + InFileName = inFile; + OutFileName = outFile; + RewriteFailedDiag = Diags.getCustomDiagID(Diagnostic::Warning, + "rewriting sub-expression within a macro (may not be correct)"); +} + ASTConsumer *clang::CreateCodeRewriterTest(const std::string& InFile, const std::string& OutFile, Diagnostic &Diags, const LangOptions &LOpts) { - // Create the output file. - - std::ostream *Out; - if (OutFile == "-") { - Out = llvm::cout.stream(); - } else if (!OutFile.empty()) { - Out = new std::ofstream(OutFile.c_str(), - std::ios_base::binary|std::ios_base::out); - } else if (InFile == "-") { - Out = llvm::cout.stream(); - } else { - llvm::sys::Path Path(InFile); - Path.eraseSuffix(); - Path.appendSuffix("cpp"); - Out = new std::ofstream(Path.toString().c_str(), - std::ios_base::binary|std::ios_base::out); - } - - return new RewriteTest(IsHeaderFile(InFile), *Out, Diags, LOpts); + return new RewriteTest(InFile, OutFile, Diags, LOpts); } void RewriteTest::Initialize(ASTContext &context) { @@ -436,6 +424,27 @@ RewriteTest::~RewriteTest() { // Rewrite tabs if we care. //RewriteTabs(); + if (Diags.hasErrorOccurred()) + return; + + // Create the output file. + + std::ostream *OutFile; + if (OutFileName == "-") { + OutFile = llvm::cout.stream(); + } else if (!OutFileName.empty()) { + OutFile = new std::ofstream(OutFileName.c_str(), + std::ios_base::binary|std::ios_base::out); + } else if (InFileName == "-") { + OutFile = llvm::cout.stream(); + } else { + llvm::sys::Path Path(InFileName); + Path.eraseSuffix(); + Path.appendSuffix("cpp"); + OutFile = new std::ofstream(Path.toString().c_str(), + std::ios_base::binary|std::ios_base::out); + } + RewriteInclude(); InsertText(SourceLocation::getFileLoc(MainFileID, 0), @@ -450,12 +459,12 @@ RewriteTest::~RewriteTest() { if (const RewriteBuffer *RewriteBuf = Rewrite.getRewriteBufferFor(MainFileID)) { //printf("Changed:\n"); - OutFile << std::string(RewriteBuf->begin(), RewriteBuf->end()); + *OutFile << std::string(RewriteBuf->begin(), RewriteBuf->end()); } else { fprintf(stderr, "No changes\n"); } // Emit metadata. - OutFile << ResultStr; + *OutFile << ResultStr; } //===----------------------------------------------------------------------===// |