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

Alkis Evlogimenos alkis at cs.uiuc.edu
Wed Mar 23 17:04:40 PST 2005



Changes in directory llvm-java/tools/classdump:

classdump.cpp updated: 1.19 -> 1.20
---
Log message:

Add option to dump constant pool of a classfile.


---
Diffs of the changes:  (+39 -4)

 classdump.cpp |   43 +++++++++++++++++++++++++++++++++++++++----
 1 files changed, 39 insertions(+), 4 deletions(-)


Index: llvm-java/tools/classdump/classdump.cpp
diff -u llvm-java/tools/classdump/classdump.cpp:1.19 llvm-java/tools/classdump/classdump.cpp:1.20
--- llvm-java/tools/classdump/classdump.cpp:1.19	Sat Feb 12 13:05:16 2005
+++ llvm-java/tools/classdump/classdump.cpp	Wed Mar 23 19:04:28 2005
@@ -22,11 +22,24 @@
 
 using namespace llvm;
 
-static cl::opt<std::string>
-InputClass(cl::Positional, cl::desc("<input class>"));
-
 namespace {
 
+  enum DumpType { code, constantPool };
+
+  cl::opt<std::string>
+  InputClass(cl::Positional, cl::desc("<input class>"));
+
+  cl::opt<DumpType>
+  DumpMode(
+    "dumptype",
+    cl::desc("Dump type: (default = code)"),
+    cl::Prefix,
+    cl::values(
+      clEnumVal(code,         "code"),
+      clEnumVal(constantPool, "constant pool"),
+      clEnumValEnd),
+    cl::init(code));
+
   using namespace llvm::Java;
 
   class ClassDump : public BytecodeParser<ClassDump> {
@@ -638,7 +651,29 @@
   try {
     const Java::ClassFile* cf(Java::ClassFile::get(InputClass));
 
-    ClassDump(cf, std::cout);
+    switch (DumpMode) {
+    default:
+      std::cerr << "no dump type selected";
+      abort();
+    case code: {
+      ClassDump(cf, std::cout);
+      break;
+    }
+    case constantPool: {
+      for (unsigned i = 0, e = cf->getNumConstants(); i != e; ++i) {
+        Constant* c = cf->getConstant(i);
+        std::cout.width(6);
+        std::cout << i << ": ";
+        std::cout.width(0);
+        if (c)
+          std::cout << *cf->getConstant(i);
+        else
+          std::cout << "empty";
+        std::cout << '\n';
+      }
+      break;
+    }
+    }
   }
   catch (std::exception& e) {
     std::cerr << e.what() << '\n';






More information about the llvm-commits mailing list