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