{-# LANGUAGE OverloadedStrings #-}
module Main where
-import Control.Monad
-import Data.Array
+import Data.Binary
import System.Environment
-import qualified Data.ByteString.Lazy as B
-import Text.Printf
+import qualified Data.Map as M
-import JVM.Types
+import JVM.Common
+import JVM.ClassFile
import JVM.Converter
-import JVM.Assembler
+import JVM.Dump
main = do
args <- getArgs
case args of
[clspath] -> do
+ clsFile <- decodeFile clspath
+ putStrLn $ showListIx $ M.elems $ constsPool (clsFile :: Class Pointers)
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
-
+ dumpClass cls
_ -> error "Synopsis: dump-class File.class"