Minor updates.
[hs-java.git] / disassemble.hs
1 {-# LANGUAGE OverloadedStrings #-}
2 import Control.Monad
3 import Data.Array
4 import System.Environment
5 import qualified Data.ByteString.Lazy as B
6 import Text.Printf
7
8 import Data.BinaryState
9 import JVM.Types
10 import JVM.Converter
11 import JVM.Assembler
12
13 main = do
14   args <- getArgs
15   case args of
16     [clspath] -> do
17       cls <- decompileFile clspath
18       putStr "Class: "
19       B.putStrLn (this cls)
20       putStrLn "Constants pool:"
21       forM_ (assocs $ constantPool cls) $ \(i, c) ->
22         putStrLn $ printf "  #%d:\t%s" i (show c)
23       putStrLn "Methods:"
24       forM_ (methods cls) $ \m -> do
25         putStr ">> Method "
26         B.putStr (methodName m)
27         print (methodSignature m)
28         case attrByName m "Code" of
29           Nothing -> putStrLn "(no code)\n"
30           Just bytecode -> let code = decodeS (0 :: Integer) bytecode
31                            in  forM_ (codeInstructions code) $ \i -> do
32                                  putStr "  "
33                                  print i
34
35     _ -> error "Synopsis: disassemble File.class"