X-Git-Url: http://wien.tomnetworks.com/gitweb/?p=hs-java.git;a=blobdiff_plain;f=rebuild-class.hs;h=301e158ce3fddbe0c0f044ce68e0dad044fe8952;hp=abe19187fcb99a120f83b44a994bcb3c0502f64e;hb=HEAD;hpb=8876aca404b4c111461b7582bb772d219babd3aa diff --git a/rebuild-class.hs b/rebuild-class.hs index abe1918..301e158 100644 --- a/rebuild-class.hs +++ b/rebuild-class.hs @@ -1,42 +1,25 @@ {-# LANGUAGE OverloadedStrings #-} -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,outpath] -> do cls <- parseClassFile clspath - clsfile <- decodeFile clspath :: IO ClassFile - 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 - putStrLn $ "Source pool:\n" ++ showListIx (constsPool clsfile) - let result = classFile cls - putStrLn $ "Result pool:\n" ++ showListIx (constsPool result) + clsfile <- decodeFile clspath :: IO (Class File) + dumpClass cls + putStrLn $ "Source pool:\n" ++ showListIx (M.assocs $ constsPool clsfile) + let result = classDirect2File cls + putStrLn $ "Result pool:\n" ++ showListIx (M.assocs $ constsPool result) B.writeFile outpath (encodeClass cls) _ -> error "Synopsis: rebuild-class File.class Output.class"