1 {-# LANGUAGE OverloadedStrings #-}
6 import System.Environment
7 import qualified Data.ByteString.Lazy as B
18 [clspath,outpath] -> do
19 cls <- parseClassFile clspath
20 clsfile <- decodeFile clspath :: IO ClassFile
23 putStrLn "Constants pool:"
24 forM_ (assocs $ constantPool cls) $ \(i, c) ->
25 putStrLn $ printf " #%d:\t%s" i (show c)
27 forM_ (methods cls) $ \m -> do
29 B.putStr (methodName m)
30 print (methodSignature m)
31 case attrByName m "Code" of
32 Nothing -> putStrLn "(no code)\n"
33 Just bytecode -> let code = decodeMethod bytecode
34 in forM_ (codeInstructions code) $ \i -> do
37 putStrLn $ "Source pool:\n" ++ showListIx (constsPool clsfile)
38 let result = classFile cls
39 putStrLn $ "Result pool:\n" ++ showListIx (constsPool result)
40 B.writeFile outpath (encodeClass cls)
42 _ -> error "Synopsis: rebuild-class File.class Output.class"