@@ -1,7 +1,8 @@
11{-# OPTIONS_GHC -Wall #-}
22{-# LANGUAGE OverloadedStrings #-}
33module Optimize.Module
4− ( optimize
4+ ( Graph(..)
5+ , optimize
56 )
67 where
78
@@ -25,29 +26,36 @@ import qualified Reporting.Annotation as A
2526-- OPTIMIZE
2627
2728
28−optimize :: Can.Module -> Opt.Graph
29+data Graph =
30+ Graph
31+ { _fields :: Map.Map N.Name Int
32+ , _nodes :: Nodes
33+ }
34+
35+
36+type Nodes =
37+ Map.Map Opt.Global Opt.Node
38+
39+
40+optimize :: Can.Module -> Graph
2941optimize (Can.Module home _ _ decls unions aliases _ effects) =
3042 addEffects home effects $
3143 addUnions home unions $
3244 addAliases home aliases $
3345 addDecls home decls $
34− Opt.Graph Map.empty Map.empty
46+ Graph Map.empty Map.empty
3547
3648
3749
3850-- UNION
3951
4052
41−addUnions :: ModuleName.Canonical -> Map.Map N.Name Can.Union -> Opt.Graph -> Opt.Graph
42−addUnions home unions (Opt.Graph fields nodes) =
43− Opt.Graph fields $
53+addUnions :: ModuleName.Canonical -> Map.Map N.Name Can.Union -> Graph -> Graph
54+addUnions home unions (Graph fields nodes) =
55+ Graph fields $
4456 Map.foldr (addUnion home) nodes unions
4557
4658
47−type Nodes =
48− Map.Map Opt.Global Opt.Node
49−
50−
5159addUnion :: ModuleName.Canonical -> Can.Union -> Nodes -> Nodes
5260addUnion home (Can.Union _ ctors) nodes =
5361 foldr (addCtor home) nodes ctors
@@ -73,13 +81,13 @@ addCtor home (ctor, args) nodes =
7381-- ALIAS
7482
7583
76−addAliases :: ModuleName.Canonical -> Map.Map N.Name Can.Alias -> Opt.Graph -> Opt.Graph
84+addAliases :: ModuleName.Canonical -> Map.Map N.Name Can.Alias -> Graph -> Graph
7785addAliases home aliases graph =
7886 Map.foldrWithKey (addAlias home) graph aliases
7987
8088
81−addAlias :: ModuleName.Canonical -> N.Name -> Can.Alias -> Opt.Graph -> Opt.Graph
82−addAlias home name (Can.Alias _ _ maybeFields) graph@(Opt.Graph fieldCounts nodes) =
89+addAlias :: ModuleName.Canonical -> N.Name -> Can.Alias -> Graph -> Graph
90+addAlias home name (Can.Alias _ _ maybeFields) graph@(Graph fieldCounts nodes) =
8391 case maybeFields of
8492 Nothing ->
8593 graph
@@ -93,7 +101,7 @@ addAlias home name (Can.Alias _ _ maybeFields) graph@(Opt.Graph fieldCounts node
93101 node =
94102 Opt.Define function Set.empty Set.empty
95103 in
96− Opt.Graph
104+ Graph
97105 (foldr addOne fieldCounts fields)
98106 (Map.insert (Opt.Global home name) node nodes)
99107
@@ -112,8 +120,8 @@ addOne name fields =
112120-- ADD EFFECTS
113121
114122
115−addEffects :: ModuleName.Canonical -> Can.Effects -> Opt.Graph -> Opt.Graph
116−addEffects home effects graph@(Opt.Graph fields nodes) =
123+addEffects :: ModuleName.Canonical -> Can.Effects -> Graph -> Graph
124+addEffects home effects graph@(Graph fields nodes) =
117125 case effects of
118126 Can.NoEffects ->
119127 graph
@@ -122,7 +130,7 @@ addEffects home effects graph@(Opt.Graph fields nodes) =
122130 Map.foldrWithKey (addPort home) graph ports
123131
124132 Can.Manager _ _ _ manager ->
125− Opt.Graph fields $
133+ Graph fields $
126134 let
127135 fx = Opt.Global home "$fx$"
128136 cmd = Opt.Global home "command"
@@ -145,7 +153,7 @@ addEffects home effects graph@(Opt.Graph fields nodes) =
145153
146154
147155
148−addPort :: ModuleName.Canonical -> N.Name -> Can.Port -> Opt.Graph -> Opt.Graph
156+addPort :: ModuleName.Canonical -> N.Name -> Can.Port -> Graph -> Graph
149157addPort home name port_ graph =
150158 case port_ of
151159 Can.Incoming _ tipe ->
@@ -167,7 +175,7 @@ addPort home name port_ graph =
167175-- ADD DECLS
168176
169177
170−addDecls :: ModuleName.Canonical -> Can.Decls -> Opt.Graph -> Opt.Graph
178+addDecls :: ModuleName.Canonical -> Can.Decls -> Graph -> Graph
171179addDecls home decls graph =
172180 case decls of
173181 Can.Declare def subDecls ->
@@ -184,7 +192,7 @@ addDecls home decls graph =
184192-- ADD DEFS
185193
186194
187−addDef :: ModuleName.Canonical -> Can.Def -> Opt.Graph -> Opt.Graph
195+addDef :: ModuleName.Canonical -> Can.Def -> Graph -> Graph
188196addDef home def graph =
189197 case def of
190198 Can.Def (A.At _ name) args body ->
@@ -194,7 +202,7 @@ addDef home def graph =
194202 addDefHelp (Opt.Global home name) (map fst typedArgs) body graph
195203
196204
197−addDefHelp :: Opt.Global -> [Can.Pattern] -> Can.Expr -> Opt.Graph -> Opt.Graph
205+addDefHelp :: Opt.Global -> [Can.Pattern] -> Can.Expr -> Graph -> Graph
198206addDefHelp name args body graph =
199207 case args of
200208 [] ->
@@ -216,9 +224,9 @@ addDefHelp name args body graph =
216224 addToGraph name (Opt.Define function kernels globals) fields graph
217225
218226
219−addToGraph :: Opt.Global -> Opt.Node -> Map.Map N.Name Int -> Opt.Graph -> Opt.Graph
220−addToGraph name node fields (Opt.Graph fieldCounts nodes) =
221− Opt.Graph
227+addToGraph :: Opt.Global -> Opt.Node -> Map.Map N.Name Int -> Graph -> Graph
228+addToGraph name node fields (Graph fieldCounts nodes) =
229+ Graph
222230 (Map.unionWith (+) fields fieldCounts)
223231 (Map.insert name node nodes)
224232
@@ -227,7 +235,7 @@ addToGraph name node fields (Opt.Graph fieldCounts nodes) =
227235-- ADD RECURSIVE DEFS
228236
229237
230−addRecDefs :: ModuleName.Canonical -> [Can.Def] -> Opt.Graph -> Opt.Graph
238+addRecDefs :: ModuleName.Canonical -> [Can.Def] -> Graph -> Graph
231239addRecDefs home defs graph =
232240 let
233241 cycleValues =
@@ -266,7 +274,7 @@ addValueName def valueNames =
266274data State =
267275 State
268276 { _values :: [(N.Name, Opt.Expr)]
269− , _graph :: Opt.Graph
277+ , _graph :: Graph
270278 }
271279
272280
@@ -296,11 +304,11 @@ addRecDef home dummyName cycle state@(State values graph) def =
296304
297305
298306addRecValue :: ModuleName.Canonical -> Opt.Global -> Expr.Cycle -> N.Name -> Can.Expr -> State -> Names.Tracker State
299−addRecValue home dummyName cycle name body (State values (Opt.Graph fields nodes)) =
307+addRecValue home dummyName cycle name body (State values (Graph fields nodes)) =
300308 do obody <- Expr.optimize cycle body
301309 pure $
302310 State
303311 { _values = (name, obody) : values
304− , _graph = Opt.Graph fields $
312+ , _graph = Graph fields $
305313 Map.insert (Opt.Global home name) (Opt.Link dummyName) nodes
306314 }