a11a2ad5ef29046b199856757c9da16993572154
[hs-java.git] / disassemble.hs
1 {-# LANGUAGE OverloadedStrings #-}
2 import Control.Monad
3 import System.Environment
4 import qualified Data.ByteString.Lazy as B
5
6 import Data.BinaryState
7 import JVM.Types
8 import JVM.Converter
9 import JVM.Assembler
10
11 main = do
12   args <- getArgs
13   case args of
14     [clspath] -> do
15       cls <- decompileFile clspath
16       putStr "Class: "
17       B.putStrLn (this cls)
18       putStrLn "Methods:"
19       forM_ (methods cls) $ \m -> do
20         putStr ">> Method "
21         B.putStrLn (methodName m)
22         case attrByName m "Code" of
23           Nothing -> putStrLn "(no code)\n"
24           Just bytecode -> let (Code code) = decodeS (0 :: Integer) bytecode
25                            in  forM_ code print
26
27     _ -> error "Synopsis: disassemble File.class"