printMapBB Nothing = putStrLn "No BasicBlock"
printMapBB (Just hmap) = do
putStr "BlockIDs: "
- let keys = fst $ unzip $ M.toList hmap
+ let keys = M.keys hmap
mapM_ (putStr . (flip (++)) ", " . show) keys
putStrLn "\n\nBasicBlocks:"
printMapBB' keys hmap
testCFG :: Maybe (Method Direct) -> Maybe MapBB
-testCFG (Just m) = case attrByName m "Code" of
- Nothing -> Nothing
- Just bytecode -> Just $ buildCFG $ codeInstructions $ decodeMethod bytecode
-testCFG _ = Nothing
+testCFG m = do
+ m' <- m
+ bytecode <- attrByName m' "Code"
+ return $ buildCFG $ codeInstructions $ decodeMethod bytecode
buildCFG :: [Instruction] -> MapBB
IF _ w16 -> twotargets w16
IF_ICMP _ w16 -> twotargets w16
IF_ACMP _ w16 -> twotargets w16
+ IFNONNULL w16 -> twotargets w16
+ IFNULL w16 -> twotargets w16
GOTO w16 -> onetarget w16
IRETURN -> notarget
ARETURN -> notarget