X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=dump-class.hs;h=3c52965c8a0a9efd1f0c1facd0c1e48066bcdc2d;hb=f2bcec63fb2eecb74d83b117bd56aa180680f3c2;hp=bb6512f6ad3a7a80b214720e9613019d6429a44c;hpb=75ef14887a83273e60e35c2f0e47d099550c9628;p=hs-java.git diff --git a/dump-class.hs b/dump-class.hs index bb6512f..3c52965 100644 --- a/dump-class.hs +++ b/dump-class.hs @@ -3,35 +3,23 @@ module Main where import Control.Monad import Data.Array +import Data.Binary import System.Environment import qualified Data.ByteString.Lazy as B import Text.Printf -import Data.BinaryState import JVM.Types +import JVM.ClassFile import JVM.Converter -import JVM.Assembler +import JVM.Dump main = do args <- getArgs case args of [clspath] -> do - cls <- decompileFile clspath - putStr "Class: " - B.putStrLn (this cls) - putStrLn "Constants pool:" - forM_ (assocs $ constantPool cls) $ \(i, c) -> - putStrLn $ printf " #%d:\t%s" i (show c) - putStrLn "Methods:" - forM_ (methods cls) $ \m -> do - putStr ">> Method " - B.putStr (methodName m) - print (methodSignature m) - case attrByName m "Code" of - Nothing -> putStrLn "(no code)\n" - Just bytecode -> let code = decodeS (0 :: Integer) bytecode - in forM_ (codeInstructions code) $ \i -> do - putStr " " - print i + clsFile <- decodeFile clspath + putStrLn $ showListIx $ constsPool clsFile + cls <- parseClassFile clspath + dumpClass cls + _ -> error "Synopsis: dump-class File.class" - _ -> error "Synopsis: disassemble File.class"