More docs.
[hs-java.git] / JVM / Dump.hs
1 {-# LANGUAGE OverloadedStrings #-}
2 module JVM.Dump where
3
4 import Control.Monad
5 import qualified Data.Map as M
6 import qualified Data.ByteString.Lazy as B
7 import Text.Printf
8
9 import JVM.Common ()
10 import JVM.ClassFile
11 import JVM.Converter
12 import JVM.Assembler
13
14 -- | Dump a class to console.
15 dumpClass :: Class Direct -> IO ()
16 dumpClass cls = do
17     putStr "Class: "
18     B.putStrLn (thisClass cls)
19     putStrLn "Constants pool:"
20     forM_ (M.assocs $ constsPool cls) $ \(i, c) ->
21       putStrLn $ printf "  #%d:\t%s" i (show c)
22     putStrLn "Methods:"
23     forM_ (classMethods cls) $ \m -> do
24       putStr ">> Method "
25       B.putStr (methodName m)
26       print (methodSignature m)
27       case attrByName m "Code" of
28         Nothing -> putStrLn "(no code)\n"
29         Just bytecode -> let code = decodeMethod bytecode
30                          in  forM_ (codeInstructions code) $ \i -> do
31                                putStr "  "
32                                print i
33