From 49228150cf2ab8a0e5f608889c664afe549f227a Mon Sep 17 00:00:00 2001 From: Neil Brown Date: Sun, 28 Oct 2007 17:04:45 +0000 Subject: [PATCH] Refactored a couple of clauses in the building of the control-flow graph --- common/FlowGraph.hs | 29 +++++++++++++---------------- 1 file changed, 13 insertions(+), 16 deletions(-) diff --git a/common/FlowGraph.hs b/common/FlowGraph.hs index 6859c11..6eed7f8 100644 --- a/common/FlowGraph.hs +++ b/common/FlowGraph.hs @@ -135,24 +135,21 @@ buildFlowGraph blank f s return (nStart, nEnd) _ -> return (-1,-1) buildStructured _ (A.OnlyP _ p) = buildProcess p - buildStructured outer (A.OnlyO _ (A.Option m es p)) - = do nexp <- addNode' m (A.ExpressionList m es) - (nbodys, nbodye) <- buildProcess p - addEdge ESeq nexp nbodys + buildStructured outer (A.OnlyO _ opt) + = do (s,e) <- + case opt of + (A.Option m es p) -> do + nexp <- addNode' m (A.ExpressionList m es) + (nbodys, nbodye) <- buildProcess p + addEdge ESeq nexp nbodys + return (nexp,nbodye) + (A.Else _ p) -> buildProcess p case outer of Case (cStart, cEnd) -> - do addEdge ESeq cStart nexp - addEdge ESeq nbodye cEnd - _ -> throwError "Option found inside CASE statement" - return (nexp,nbodye) - buildStructured outer (A.OnlyO _ (A.Else m p)) - = do (nbodys, nbodye) <- buildProcess p - case outer of - Case (cStart, cEnd) -> - do addEdge ESeq cStart nbodys - addEdge ESeq nbodye cEnd - _ -> throwError "Option found inside CASE statement" - return (nbodys,nbodye) + do addEdge ESeq cStart s + addEdge ESeq e cEnd + _ -> throwError "Option found outside CASE statement" + return (s,e) buildStructured outer (A.Spec m spec str) = do n <- addNode' m spec (s,e) <- buildStructured outer str