[llvm-commits] CVS: llvm-java/tools/class2llvm/class2llvm.cpp

Alkis Evlogimenos alkis at cs.uiuc.edu
Wed Nov 17 15:53:59 PST 2004



Changes in directory llvm-java/tools/class2llvm:

class2llvm.cpp updated: 1.17 -> 1.18
---
Log message:

Make tool take a '-o' option for the output filename.


---
Diffs of the changes:  (+15 -1)

Index: llvm-java/tools/class2llvm/class2llvm.cpp
diff -u llvm-java/tools/class2llvm/class2llvm.cpp:1.17 llvm-java/tools/class2llvm/class2llvm.cpp:1.18
--- llvm-java/tools/class2llvm/class2llvm.cpp:1.17	Wed Sep 29 16:02:08 2004
+++ llvm-java/tools/class2llvm/class2llvm.cpp	Wed Nov 17 17:53:49 2004
@@ -21,6 +21,7 @@
 #include <llvm/System/Signals.h>
 
 #include <cstddef>
+#include <fstream>
 #include <iostream>
 
 using namespace llvm;
@@ -28,24 +29,37 @@
 static cl::opt<std::string>
 InputClass(cl::Positional, cl::desc("<input class>"));
 
+static cl::opt<std::string>
+OutputFilename("o", cl::desc("Output filename"), cl::value_desc("filename"));
+
 int main(int argc, char* argv[])
 {
   sys::PrintStackTraceOnErrorSignal();
   cl::ParseCommandLineOptions(argc, argv,
                               "classfile to llvm utility");
 
+  std::ostream* out = &std::cout;
+  if (!OutputFilename.empty()) {
+    sys::RemoveFileOnSignal(sys::Path(OutputFilename));
+    out = new std::ofstream(OutputFilename.c_str());
+  }
+
   try {
     std::auto_ptr<Module> module = Java::compile(InputClass);
 
     PassManager passes;
     passes.add(createVerifierPass());
-    passes.add(new WriteBytecodePass(&std::cout));
+    passes.add(new WriteBytecodePass(out));
     passes.run(*module);
   }
   catch (std::exception& e) {
     std::cerr << e.what() << '\n';
+    sys::Path(OutputFilename).destroyFile();
     return EXIT_FAILURE;
   }
 
+  if (!OutputFilename.empty())
+    delete out;
+
   return EXIT_SUCCESS;
 }






More information about the llvm-commits mailing list