From c4b7bd1745195cd34ef6e491d4ded88b7e17e680 Mon Sep 17 00:00:00 2001 From: Neil Brown Date: Sun, 10 Feb 2008 15:16:46 +0000 Subject: [PATCH] Implemented handling of replicated IFs in flow-graphs --- common/FlowGraph.hs | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/common/FlowGraph.hs b/common/FlowGraph.hs index 373f051..2ad3897 100644 --- a/common/FlowGraph.hs +++ b/common/FlowGraph.hs @@ -362,6 +362,18 @@ buildStructured f outer (A.Rep m rep str) route Right (s',e') -> do addEdge (EStartPar pId) s s' addEdge (EEndPar pId) e' e return $ Right (s,e) + OIf prev end -> + do repNode <- addNode' (findMeta rep) labelReplicator rep alter + addEdge ESeq prev repNode + nodes <- buildStructured f (OIf repNode end) str (route33 route A.Rep) + + case nodes of + Left False -> return $ Right (repNode, repNode) + Left True -> return $ Right (repNode, repNode) + Right (p,e) -> do addEdge ESeq p repNode + return $ Right (repNode, repNode) + + return $ Right (repNode, end) _ -> throwError $ "Cannot have replicators inside context: " ++ show outer buildStructured f outer (A.Only _ o) route = f outer (route22 route A.Only) o >>* Right