X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=dump-class.hs;h=f62ea1e1f040e52f20bd8c18e4072444a45aa13a;hb=33dc6f7bdcdc770332723ea519df4c923eb3d933;hp=37a52e614dd189f7b7cc01be1360eb35cf6e9b2e;hpb=f6998fe3bda57731151b1438ad10dde0572f3e7f;p=hs-java.git diff --git a/dump-class.hs b/dump-class.hs index 37a52e6..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 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 + clsFile <- decodeFile clspath + putStrLn $ showListIx $ M.assocs $ constsPool (clsFile :: Class File) cls <- parseClassFile 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 = decodeMethod bytecode - in forM_ (codeInstructions code) $ \i -> do - putStr " " - print i - + dumpClass cls _ -> error "Synopsis: dump-class File.class"