hs-java-0.1: dump-class.hs
{-# LANGUAGE OverloadedStrings #-}
module Main where
import Control.Monad
import Data.Array
import System.Environment
import qualified Data.ByteString.Lazy as B
import Text.Printf
import JVM.Types
import JVM.Converter
import JVM.Assembler
main = do
args <- getArgs
case args of
[clspath] -> do
cls <- parseClassFile clspath
putStr "Class: "
B.putStrLn (this cls)
putStrLn "Constants pool:"
forM_ (assocs $ constantPool cls) $ \(i, c) ->
putStrLn $ printf " #%d:\t%s" i (show c)
putStrLn "Methods:"
forM_ (methods cls) $ \m -> do
putStr ">> Method "
B.putStr (methodName m)
print (methodSignature m)
case attrByName m "Code" of
Nothing -> putStrLn "(no code)\n"
Just bytecode -> let code = decodeMethod bytecode
in forM_ (codeInstructions code) $ \i -> do
putStr " "
print i
_ -> error "Synopsis: dump-class File.class"