+{-# LANGUAGE OverloadedStrings #-}
+module Main where
+
+import Frontend
+import Graph
+import Data.Maybe
+import Control.Monad.State
+import Data.Set as S
+import Control.Monad
+
+import Mate.BasicBlocks
+
+import JVM.ClassFile
+import JVM.Converter
+import JVM.Assembler
+
+import Mate.Utilities
+import qualified Data.ByteString.Lazy as B
+
+printG' :: Ord k => G k -> [k]
+printG' g = evalState (foldGM ((: []), (++)) (\node -> let (Just v) = value node in v) [] g) S.empty
+
+value (Node val _ _) = Just val
+value (Leaf val ) = Just val
+value Nil = Nothing
+
+
+main = do con@(Just (ins,cls)) <- getMethodIO "../tests/AbsurdlyHuge.class" "absurdlyHuge"
+ let perform' = do
+ let method = "absurdlyHuge"
+ let msig = methodSignature $ (classMethods cls) !! 1
+ --B.putStrLn (method `B.append` ": " `B.append` (encode msig))
+ let result = testCFG $ lookupMethod method cls
+ printMapBB result
+ let perform = do
+ let tagged = getInstructions ins
+ let backRefs = splitBlocksBackRef tagged
+ let splitted = splitBlocks backRefs tagged
+ let transitions = getTransitions splitted
+ let nodes = getNodes splitted
+ --print "nodes:"
+ --print nodes
+ --print "transitions"
+ --print transitions
+ let (Just finalCyclicStructure) = indirectCFGToG splitted
+ print "Final result"
+ print $ printG' finalCyclicStructure
+ forM_ [0..100] (\x -> do perform)
+
+