Use type families: done.
[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.Types
10 import JVM.ClassFile
11 import JVM.Converter
12 import JVM.Assembler
13
14 dumpClass :: Class Resolved -> IO ()
15 dumpClass cls = do
16     putStr "Class: "
17     B.putStrLn (thisClass cls)
18     putStrLn "Constants pool:"
19     forM_ (M.assocs $ constsPool cls) $ \(i, c) ->
20       putStrLn $ printf "  #%d:\t%s" i (show c)
21     putStrLn "Methods:"
22     forM_ (classMethods cls) $ \m -> do
23       putStr ">> Method "
24       B.putStr (methodName m)
25       print (methodSignature m)
26       case attrByName m "Code" of
27         Nothing -> putStrLn "(no code)\n"
28         Just bytecode -> let code = decodeMethod bytecode
29                          in  forM_ (codeInstructions code) $ \i -> do
30                                putStr "  "
31                                print i
32