0 | module ControlFlow.CFG.Conversion
2 | import ControlFlow.CFG
3 | import ControlFlow.CFG.Simple
6 | Simplify : CFG.Vertex a -> Simple.Vertex a
7 | Simplify vertex v ins outs = vertex v (Just ins) (Just outs)
10 | Unsimplify : Simple.Vertex a -> CFG.Vertex a
11 | Unsimplify vertex v _ Nothing = Void
12 | Unsimplify vertex v Nothing _ = Void
13 | Unsimplify vertex v (Just ins) (Just outs) = vertex v ins outs
18 | simplify : CFG vertex (Defined ins) (Defined outs) -> CFG (Simplify vertex) ins outs
19 | simplify (SingleVertex {vins = Just ins, vouts = Just outs} v) = SingleVertex v
20 | simplify Empty = Empty
21 | simplify (Cycle node loop) = Cycle (simplify node) (simplify loop)
22 | simplify (Series g g') = Series (simplify g) (simplify g')
23 | simplify (Parallel g g') = Parallel (simplify g) (simplify g')
24 | simplify (IFlip g) = IFlip (simplify g)
25 | simplify (OFlip g) = OFlip (simplify g)
27 | simplify (SingleVertex {vins = Nothing} v) impossible
28 | simplify (SingleVertex {vouts = Nothing} v) impossible
34 | unsimplify : Simple.CFG vertex ins outs -> CFG (Unsimplify vertex) (Defined ins) (Defined outs)
35 | unsimplify (SingleVertex {vins, vouts} v) = SingleVertex {vins = Just vins, vouts = Just vouts} v
36 | unsimplify Empty = Empty
37 | unsimplify (Cycle node loop) = Cycle (unsimplify node) (unsimplify loop)
38 | unsimplify (Series g g') = Series (unsimplify g) (unsimplify g')
39 | unsimplify (Parallel g g') = Parallel (unsimplify g) (unsimplify g')
40 | unsimplify (IFlip g) = IFlip (unsimplify g)
41 | unsimplify (OFlip g) = OFlip (unsimplify g)