@@ -1,7 +1,8 @@
1{-# OPTIONS_GHC -Wall #-}
1{-# OPTIONS_GHC -Wall #-}
2{-# LANGUAGE OverloadedStrings #-}
2{-# LANGUAGE OverloadedStrings #-}
3module Optimize.Module
3module Optimize.Module
4− ( optimize
5+ , optimize
@@ -25,29 +26,36 @@ import qualified Reporting.Annotation as A
25-- OPTIMIZE
26-- OPTIMIZE
31+ { _fields :: Map.Map N.Name Int
37+ Map.Map Opt.Global Opt.Node
28−optimize :: Can.Module -> Opt.Graph
40+optimize :: Can.Module -> Graph
29optimize (Can.Module home _ _ decls unions aliases _ effects) =
41optimize (Can.Module home _ _ decls unions aliases _ effects) =
30 addEffects home effects $
42 addEffects home effects $
31 addUnions home unions $
43 addUnions home unions $
32 addAliases home aliases $
44 addAliases home aliases $
33 addDecls home decls $
45 addDecls home decls $
34− Opt.Graph Map.empty Map.empty
46+ Graph Map.empty Map.empty
41−addUnions :: ModuleName.Canonical -> Map.Map N.Name Can.Union -> Opt.Graph -> Opt.Graph
53+addUnions :: ModuleName.Canonical -> Map.Map N.Name Can.Union -> Graph -> Graph
42−addUnions home unions (Opt.Graph fields nodes) =
54+addUnions home unions (Graph fields nodes) =
43− Opt.Graph fields $
55+ Graph fields $
44 Map.foldr (addUnion home) nodes unions
56 Map.foldr (addUnion home) nodes unions
48− Map.Map Opt.Global Opt.Node
51addUnion :: ModuleName.Canonical -> Can.Union -> Nodes -> Nodes
59addUnion :: ModuleName.Canonical -> Can.Union -> Nodes -> Nodes
52addUnion home (Can.Union _ ctors) nodes =
60addUnion home (Can.Union _ ctors) nodes =
53 foldr (addCtor home) nodes ctors
61 foldr (addCtor home) nodes ctors
@@ -73,13 +81,13 @@ addCtor home (ctor, args) nodes =
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
77addAliases home aliases graph =
85addAliases home aliases graph =
78 Map.foldrWithKey (addAlias home) graph aliases
86 Map.foldrWithKey (addAlias home) graph aliases
81−addAlias :: ModuleName.Canonical -> N.Name -> Can.Alias -> Opt.Graph -> Opt.Graph
89+addAlias :: ModuleName.Canonical -> N.Name -> Can.Alias -> Graph -> Graph
82−addAlias home name (Can.Alias _ _ maybeFields) graph@(Opt.Graph fieldCounts nodes) =
90+addAlias home name (Can.Alias _ _ maybeFields) graph@(Graph fieldCounts nodes) =
83 case maybeFields of
91 case maybeFields of
84 Nothing ->
92 Nothing ->
@@ -93,7 +101,7 @@ addAlias home name (Can.Alias _ _ maybeFields) graph@(Opt.Graph fieldCounts node
94 Opt.Define function Set.empty Set.empty
102 Opt.Define function Set.empty Set.empty
97 (foldr addOne fieldCounts fields)
105 (foldr addOne fieldCounts fields)
98 (Map.insert (Opt.Global home name) node nodes)
106 (Map.insert (Opt.Global home name) node nodes)
@@ -112,8 +120,8 @@ addOne name fields =
112-- ADD EFFECTS
120-- ADD EFFECTS
115−addEffects :: ModuleName.Canonical -> Can.Effects -> Opt.Graph -> Opt.Graph
123+addEffects :: ModuleName.Canonical -> Can.Effects -> Graph -> Graph
116−addEffects home effects graph@(Opt.Graph fields nodes) =
124+addEffects home effects graph@(Graph fields nodes) =
117 case effects of
125 case effects of
118 Can.NoEffects ->
126 Can.NoEffects ->
@@ -122,7 +130,7 @@ addEffects home effects graph@(Opt.Graph fields nodes) =
122 Map.foldrWithKey (addPort home) graph ports
130 Map.foldrWithKey (addPort home) graph ports
124 Can.Manager _ _ _ manager ->
132 Can.Manager _ _ _ manager ->
125− Opt.Graph fields $
133+ Graph fields $
127 fx = Opt.Global home "$fx$"
135 fx = Opt.Global home "$fx$"
128 cmd = Opt.Global home "command"
136 cmd = Opt.Global home "command"
@@ -145,7 +153,7 @@ addEffects home effects graph@(Opt.Graph fields nodes) =
148−addPort :: ModuleName.Canonical -> N.Name -> Can.Port -> Opt.Graph -> Opt.Graph
156+addPort :: ModuleName.Canonical -> N.Name -> Can.Port -> Graph -> Graph
149addPort home name port_ graph =
157addPort home name port_ graph =
150 case port_ of
158 case port_ of
151 Can.Incoming _ tipe ->
159 Can.Incoming _ tipe ->
@@ -167,7 +175,7 @@ addPort home name port_ graph =
167-- ADD DECLS
175-- ADD DECLS
170−addDecls :: ModuleName.Canonical -> Can.Decls -> Opt.Graph -> Opt.Graph
178+addDecls :: ModuleName.Canonical -> Can.Decls -> Graph -> Graph
171addDecls home decls graph =
179addDecls home decls graph =
172 case decls of
180 case decls of
173 Can.Declare def subDecls ->
181 Can.Declare def subDecls ->
@@ -184,7 +192,7 @@ addDecls home decls graph =
184-- ADD DEFS
192-- ADD DEFS
187−addDef :: ModuleName.Canonical -> Can.Def -> Opt.Graph -> Opt.Graph
195+addDef :: ModuleName.Canonical -> Can.Def -> Graph -> Graph
188addDef home def graph =
196addDef home def graph =
189 case def of
197 case def of
190 Can.Def (A.At _ name) args body ->
198 Can.Def (A.At _ name) args body ->
@@ -194,7 +202,7 @@ addDef home def graph =
194 addDefHelp (Opt.Global home name) (map fst typedArgs) body graph
202 addDefHelp (Opt.Global home name) (map fst typedArgs) body graph
197−addDefHelp :: Opt.Global -> [Can.Pattern] -> Can.Expr -> Opt.Graph -> Opt.Graph
205+addDefHelp :: Opt.Global -> [Can.Pattern] -> Can.Expr -> Graph -> Graph
198addDefHelp name args body graph =
206addDefHelp name args body graph =
199 case args of
207 case args of
@@ -216,9 +224,9 @@ addDefHelp name args body graph =
216 addToGraph name (Opt.Define function kernels globals) fields graph
224 addToGraph name (Opt.Define function kernels globals) fields graph
219−addToGraph :: Opt.Global -> Opt.Node -> Map.Map N.Name Int -> Opt.Graph -> Opt.Graph
227+addToGraph :: Opt.Global -> Opt.Node -> Map.Map N.Name Int -> Graph -> Graph
220−addToGraph name node fields (Opt.Graph fieldCounts nodes) =
228+addToGraph name node fields (Graph fieldCounts nodes) =
222 (Map.unionWith (+) fields fieldCounts)
230 (Map.unionWith (+) fields fieldCounts)
223 (Map.insert name node nodes)
231 (Map.insert name node nodes)
@@ -227,7 +235,7 @@ addToGraph name node fields (Opt.Graph fieldCounts nodes) =
227-- ADD RECURSIVE DEFS
235-- ADD RECURSIVE DEFS
230−addRecDefs :: ModuleName.Canonical -> [Can.Def] -> Opt.Graph -> Opt.Graph
238+addRecDefs :: ModuleName.Canonical -> [Can.Def] -> Graph -> Graph
231addRecDefs home defs graph =
239addRecDefs home defs graph =
233 cycleValues =
241 cycleValues =
@@ -266,7 +274,7 @@ addValueName def valueNames =
266data State =
274data State =
268 { _values :: [(N.Name, Opt.Expr)]
276 { _values :: [(N.Name, Opt.Expr)]
269− , _graph :: Opt.Graph
277+ , _graph :: Graph
@@ -296,11 +304,11 @@ addRecDef home dummyName cycle state@(State values graph) def =
298addRecValue :: ModuleName.Canonical -> Opt.Global -> Expr.Cycle -> N.Name -> Can.Expr -> State -> Names.Tracker State
306addRecValue :: 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)) =
300 do obody <- Expr.optimize cycle body
308 do obody <- Expr.optimize cycle body
303 { _values = (name, obody) : values
311 { _values = (name, obody) : values
304− , _graph = Opt.Graph fields $
312+ , _graph = Graph fields $
305 Map.insert (Opt.Global home name) (Opt.Link dummyName) nodes
313 Map.insert (Opt.Global home name) (Opt.Link dummyName) nodes