X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=dump-class.hs;h=f62ea1e1f040e52f20bd8c18e4072444a45aa13a;hb=5bdf787f7b1d30e8ea73d31f9d5e5c1263aa9856;hp=bb6512f6ad3a7a80b214720e9613019d6429a44c;hpb=75ef14887a83273e60e35c2f0e47d099550c9628;p=hs-java.git diff --git a/dump-class.hs b/dump-class.hs index bb6512f..f62ea1e 100644 --- a/dump-class.hs +++ b/dump-class.hs @@ -1,37 +1,22 @@ {-# LANGUAGE OverloadedStrings #-} 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 qualified Data.Map as M -import Data.BinaryState -import JVM.Types +import JVM.Common +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 $ M.assocs $ constsPool (clsFile :: Class File) + cls <- parseClassFile clspath + dumpClass cls + _ -> error "Synopsis: dump-class File.class" - _ -> error "Synopsis: disassemble File.class"