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