[cfe-commits] r48669 - in /cfe/trunk: Driver/ASTConsumers.h Driver/RewriteTest.cpp Driver/clang.cpp test/Rewriter/objc-ivar-receiver-1.m

Chris Lattner sabre at nondot.org
Fri Mar 21 17:08:40 PDT 2008


Author: lattner
Date: Fri Mar 21 19:08:40 2008
New Revision: 48669

URL: http://llvm.org/viewvc/llvm-project?rev=48669&view=rev
Log:
Teach the rewriter how to respect the -o option.

Modified:
    cfe/trunk/Driver/ASTConsumers.h
    cfe/trunk/Driver/RewriteTest.cpp
    cfe/trunk/Driver/clang.cpp
    cfe/trunk/test/Rewriter/objc-ivar-receiver-1.m

Modified: cfe/trunk/Driver/ASTConsumers.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/Driver/ASTConsumers.h?rev=48669&r1=48668&r2=48669&view=diff

==============================================================================
--- cfe/trunk/Driver/ASTConsumers.h (original)
+++ cfe/trunk/Driver/ASTConsumers.h Fri Mar 21 19:08:40 2008
@@ -50,6 +50,7 @@
                                 const std::string& FunctionName); 
 
 ASTConsumer *CreateCodeRewriterTest(const std::string& InFile,
+                                    const std::string& OutFile,
                                     Diagnostic &Diags,
                                     const LangOptions &LOpts);
 

Modified: cfe/trunk/Driver/RewriteTest.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/Driver/RewriteTest.cpp?rev=48669&r1=48668&r2=48669&view=diff

==============================================================================
--- cfe/trunk/Driver/RewriteTest.cpp (original)
+++ cfe/trunk/Driver/RewriteTest.cpp Fri Mar 21 19:08:40 2008
@@ -23,7 +23,9 @@
 #include "llvm/ADT/SmallPtrSet.h"
 #include "llvm/Support/MemoryBuffer.h"
 #include "llvm/Support/CommandLine.h"
+#include "llvm/System/Path.h"
 #include <sstream>
+#include <fstream>
 using namespace clang;
 using llvm::utostr;
 
@@ -81,6 +83,8 @@
     // Needed for header files being rewritten
     bool IsHeader;
     
+    std::ostream &OutFile;
+    
     static const int OBJC_ABI_VERSION =7 ;
   public:
     void Initialize(ASTContext &context);
@@ -89,8 +93,9 @@
     // Top Level Driver code.
     virtual void HandleTopLevelDecl(Decl *D);
     void HandleDeclInMainFile(Decl *D);
-    RewriteTest(bool isHeader, Diagnostic &D, const LangOptions &LOpts) : 
-      Diags(D), LangOpts(LOpts) {
+    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)");
@@ -231,9 +236,28 @@
 }    
 
 ASTConsumer *clang::CreateCodeRewriterTest(const std::string& InFile,
+                                           const std::string& OutFile,
                                            Diagnostic &Diags, 
                                            const LangOptions &LOpts) {
-  return new RewriteTest(IsHeaderFile(InFile), Diags, 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);
 }
 
 void RewriteTest::Initialize(ASTContext &context) {
@@ -429,13 +453,12 @@
   if (const RewriteBuffer *RewriteBuf = 
       Rewrite.getRewriteBufferFor(MainFileID)) {
     //printf("Changed:\n");
-    std::string S(RewriteBuf->begin(), RewriteBuf->end());
-    printf("%s\n", S.c_str());
+    OutFile << std::string(RewriteBuf->begin(), RewriteBuf->end());
   } else {
-    printf("No changes\n");
+    fprintf(stderr, "No changes\n");
   }
   // Emit metadata.
-  printf("%s", ResultStr.c_str());
+  OutFile << ResultStr;
 }
 
 //===----------------------------------------------------------------------===//

Modified: cfe/trunk/Driver/clang.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/Driver/clang.cpp?rev=48669&r1=48668&r2=48669&view=diff

==============================================================================
--- cfe/trunk/Driver/clang.cpp (original)
+++ cfe/trunk/Driver/clang.cpp Fri Mar 21 19:08:40 2008
@@ -1044,7 +1044,7 @@
       return CreateASTSerializer(InFile, OutputFile, Diag, LangOpts);
       
     case RewriteTest:
-      return CreateCodeRewriterTest(InFile, Diag, LangOpts);
+      return CreateCodeRewriterTest(InFile, OutputFile, Diag, LangOpts);
   }
 }
 

Modified: cfe/trunk/test/Rewriter/objc-ivar-receiver-1.m
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Rewriter/objc-ivar-receiver-1.m?rev=48669&r1=48668&r2=48669&view=diff

==============================================================================
--- cfe/trunk/test/Rewriter/objc-ivar-receiver-1.m (original)
+++ cfe/trunk/test/Rewriter/objc-ivar-receiver-1.m Fri Mar 21 19:08:40 2008
@@ -1,5 +1,5 @@
 // RUN: clang -rewrite-test %s 
-// RUN: clang -rewrite-test %s | grep 'newInv->_container'
+// RUN: clang -rewrite-test %s -o - | grep 'newInv->_container'
 
 @interface NSMutableArray 
 - (void)addObject:(id)addObject;





More information about the cfe-commits mailing list