import Data.List
import qualified Data.Map as M
import qualified Data.ByteString.Lazy as B
+import Data.Maybe
import JVM.ClassFile
import JVM.Converter
parseMethod :: Class Direct -> B.ByteString -> MethodSignature -> IO RawMethod
parseMethod cls methodname sig = do
- let method = case lookupMethodSig methodname sig cls of
- Just m -> m
- Nothing -> error $ "method " ++ (show . toString) methodname ++ " not found"
- let codeseg = case attrByName method "Code" of
- Just m -> m
- Nothing -> error $ "codeseg " ++ (show . toString) methodname ++ " not found"
+ let method = fromMaybe
+ (error $ "method " ++ (show . toString) methodname ++ " not found")
+ (lookupMethodSig methodname sig cls)
+ let codeseg = fromMaybe
+ (error $ "codeseg " ++ (show . toString) methodname ++ " not found")
+ (attrByName method "Code")
let decoded = decodeMethod codeseg
let mapbb = testCFG decoded
let locals = fromIntegral (codeMaxLocals decoded)
let nametype = methodNameType methoddirect
let argscount = methodGetArgsCount nametype + (if isStatic then 0 else 1)
- let msig = methodSignature $ classMethods cls !! 1
+ let msig = methodSignature method
printfBb "BB: analysing \"%s\"\n" $ toString (methodname `B.append` ": " `B.append` encode msig)
#ifdef DBG_BB
- case maybe_bb of
- Just m -> printMapBB $ rawMapBB m
- Nothing -> return ()
+ printMapBB mapbb
#endif
-- small example how to get information about
-- exceptions of a method