619ef2c736d81a6d9dfd40ea311b55eda074d644
[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.putStrLn (methodName m)
27         case attrByName m "Code" of
28           Nothing -> putStrLn "(no code)\n"
29           Just bytecode -> let code = decodeS (0 :: Integer) bytecode
30                            in  forM_ (codeInstructions code) $ \i -> do
31                                  putStr "  "
32                                  print i
33
34     _ -> error "Synopsis: disassemble File.class"