[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