on master help sign in
Update Optimize.Module to produce an Opt.LocalGraph
commit6c3ae5ba620b623fe2f9e2b53312b23606ab7d90 authorEvan Czaplicki <evancz@users.noreply.github.com> dateSun 24 Mar 2019, 15:35 (8 years ago) parent5f1d0f5
1 file changed+31−34
compiler/src/Optimize/Module.hs+31−34
compiler/src/Optimize/Module.hs+31−34
@@ -40,13 +40,13 @@ type Annotations =
4040 Map.Map Name.Name Can.Annotation
4141
4242
43−optimize :: Annotations -> Can.Module -> Result i [W.Warning] Opt.Graph
43+optimize :: Annotations -> Can.Module -> Result i [W.Warning] Opt.LocalGraph
4444optimize annotations (Can.Module home _ decls unions aliases _ effects) =
4545 addDecls home annotations decls $
4646 addEffects home effects $
4747 addUnions home unions $
4848 addAliases home aliases $
49− Opt.Graph Map.empty Map.empty Map.empty
49+ Opt.LocalGraph Nothing Map.empty Map.empty
5050
5151
5252
@@ -57,9 +57,9 @@ type Nodes =
5757 Map.Map Opt.Global Opt.Node
5858
5959
60−addUnions :: ModuleName.Canonical -> Map.Map Name.Name Can.Union -> Opt.Graph -> Opt.Graph
61−addUnions home unions (Opt.Graph mains nodes fields) =
62− Opt.Graph mains (Map.foldr (addUnion home) nodes unions) fields
60+addUnions :: ModuleName.Canonical -> Map.Map Name.Name Can.Union -> Opt.LocalGraph -> Opt.LocalGraph
61+addUnions home unions (Opt.LocalGraph main nodes fields) =
62+ Opt.LocalGraph main (Map.foldr (addUnion home) nodes unions) fields
6363
6464
6565addUnion :: ModuleName.Canonical -> Can.Union -> Nodes -> Nodes
@@ -83,13 +83,13 @@ addCtorNode home opts nodes (Can.Ctor name index numArgs _) =
8383-- ALIAS
8484
8585
86−addAliases :: ModuleName.Canonical -> Map.Map Name.Name Can.Alias -> Opt.Graph -> Opt.Graph
86+addAliases :: ModuleName.Canonical -> Map.Map Name.Name Can.Alias -> Opt.LocalGraph -> Opt.LocalGraph
8787addAliases home aliases graph =
8888 Map.foldrWithKey (addAlias home) graph aliases
8989
9090
91−addAlias :: ModuleName.Canonical -> Name.Name -> Can.Alias -> Opt.Graph -> Opt.Graph
92−addAlias home name (Can.Alias _ tipe) graph@(Opt.Graph mains nodes fieldCounts) =
91+addAlias :: ModuleName.Canonical -> Name.Name -> Can.Alias -> Opt.LocalGraph -> Opt.LocalGraph
92+addAlias home name (Can.Alias _ tipe) graph@(Opt.LocalGraph main nodes fieldCounts) =
9393 case tipe of
9494 Can.TRecord fields Nothing ->
9595 let
@@ -100,8 +100,8 @@ addAlias home name (Can.Alias _ tipe) graph@(Opt.Graph mains nodes fieldCounts)
100100 node =
101101 Opt.Define function Set.empty
102102 in
103− Opt.Graph
104− mains
103+ Opt.LocalGraph
104+ main
105105 (Map.insert (Opt.Global home name) node nodes)
106106 (Map.foldrWithKey addRecordCtorField fieldCounts fields)
107107
@@ -118,8 +118,8 @@ addRecordCtorField name _ fields =
118118-- ADD EFFECTS
119119
120120
121−addEffects :: ModuleName.Canonical -> Can.Effects -> Opt.Graph -> Opt.Graph
122−addEffects home effects graph@(Opt.Graph mains nodes fields) =
121+addEffects :: ModuleName.Canonical -> Can.Effects -> Opt.LocalGraph -> Opt.LocalGraph
122+addEffects home effects graph@(Opt.LocalGraph main nodes fields) =
123123 case effects of
124124 Can.NoEffects ->
125125 graph
@@ -148,10 +148,10 @@ addEffects home effects graph@(Opt.Graph mains nodes fields) =
148148 Map.insert sub link $
149149 Map.insert fx (Opt.Manager Opt.Fx) nodes
150150 in
151− Opt.Graph mains newNodes fields
151+ Opt.LocalGraph main newNodes fields
152152
153153
154−addPort :: ModuleName.Canonical -> Name.Name -> Can.Port -> Opt.Graph -> Opt.Graph
154+addPort :: ModuleName.Canonical -> Name.Name -> Can.Port -> Opt.LocalGraph -> Opt.LocalGraph
155155addPort home name port_ graph =
156156 case port_ of
157157 Can.Incoming _ payloadType _ ->
@@ -173,10 +173,10 @@ addPort home name port_ graph =
173173-- HELPER
174174
175175
176−addToGraph :: Opt.Global -> Opt.Node -> Map.Map Name.Name Int -> Opt.Graph -> Opt.Graph
177−addToGraph name node fields (Opt.Graph mains nodes fieldCounts) =
178− Opt.Graph
179− mains
176+addToGraph :: Opt.Global -> Opt.Node -> Map.Map Name.Name Int -> Opt.LocalGraph -> Opt.LocalGraph
177+addToGraph name node fields (Opt.LocalGraph main nodes fieldCounts) =
178+ Opt.LocalGraph
179+ main
180180 (Map.insert name node nodes)
181181 (Map.unionWith (+) fields fieldCounts)
182182
@@ -185,19 +185,20 @@ addToGraph name node fields (Opt.Graph mains nodes fieldCounts) =
185185-- ADD DECLS
186186
187187
188−addDecls :: ModuleName.Canonical -> Annotations -> Can.Decls -> Opt.Graph -> Result i [W.Warning] Opt.Graph
188+addDecls :: ModuleName.Canonical -> Annotations -> Can.Decls -> Opt.LocalGraph -> Result i [W.Warning] Opt.LocalGraph
189189addDecls home annotations decls graph =
190190 case decls of
191191 Can.Declare def subDecls ->
192192 addDecls home annotations subDecls =<< addDef home annotations def graph
193193
194− Can.DeclareRec defs subDecls ->
194+ Can.DeclareRec d ds subDecls ->
195+ let defs = d:ds in
195196 case findMain defs of
196197 Nothing ->
197198 addDecls home annotations subDecls (addRecDefs home defs graph)
198199
199200 Just region ->
200− Result.throw $ E.BadCycle region (map defToName defs)
201+ Result.throw $ E.BadCycle region (defToName d) (map defToName ds)
201202
202203 Can.SaveTheEnvironment ->
203204 Result.ok graph
@@ -229,7 +230,7 @@ defToName def =
229230-- ADD DEFS
230231
231232
232−addDef :: ModuleName.Canonical -> Annotations -> Can.Def -> Opt.Graph -> Result i [W.Warning] Opt.Graph
233+addDef :: ModuleName.Canonical -> Annotations -> Can.Def -> Opt.LocalGraph -> Result i [W.Warning] Opt.LocalGraph
233234addDef home annotations def graph =
234235 case def of
235236 Can.Def (A.At region name) args body ->
@@ -241,8 +242,8 @@ addDef home annotations def graph =
241242 addDefHelp region annotations home name (map fst typedArgs) body graph
242243
243244
244−addDefHelp :: A.Region -> Annotations -> ModuleName.Canonical -> Name.Name -> [Can.Pattern] -> Can.Expr -> Opt.Graph -> Result i w Opt.Graph
245−addDefHelp region annotations home name args body graph@(Opt.Graph mains nodes fieldCounts) =
245+addDefHelp :: A.Region -> Annotations -> ModuleName.Canonical -> Name.Name -> [Can.Pattern] -> Can.Expr -> Opt.LocalGraph -> Result i w Opt.LocalGraph
246+addDefHelp region annotations home name args body graph@(Opt.LocalGraph _ nodes fieldCounts) =
246247 if name /= Name.main then
247248 Result.ok (addDefNode home name args body Set.empty graph)
248249 else
@@ -250,12 +251,8 @@ addDefHelp region annotations home name args body graph@(Opt.Graph mains nodes f
250251 (Can.Forall _ tipe) = annotations ! name
251252
252253 addMain (deps, fields, main) =
253− let
254− newMains = Map.insert home main mains
255− newFields = Map.unionWith (+) fields fieldCounts
256− in
257254 addDefNode home name args body deps $
258− Opt.Graph newMains nodes newFields
255+ Opt.LocalGraph (Just main) nodes (Map.unionWith (+) fields fieldCounts)
259256 in
260257 case Type.deepDealias tipe of
261258 Can.TType hm nm [_] | hm == ModuleName.virtualDom && nm == Name.node ->
@@ -275,7 +272,7 @@ addDefHelp region annotations home name args body graph@(Opt.Graph mains nodes f
275272 Result.throw (E.BadType region tipe)
276273
277274
278−addDefNode :: ModuleName.Canonical -> Name.Name -> [Can.Pattern] -> Can.Expr -> Set.Set Opt.Global -> Opt.Graph -> Opt.Graph
275+addDefNode :: ModuleName.Canonical -> Name.Name -> [Can.Pattern] -> Can.Expr -> Set.Set Opt.Global -> Opt.LocalGraph -> Opt.LocalGraph
279276addDefNode home name args body mainDeps graph =
280277 let
281278 (deps, fields, def) =
@@ -304,8 +301,8 @@ data State =
304301 }
305302
306303
307−addRecDefs :: ModuleName.Canonical -> [Can.Def] -> Opt.Graph -> Opt.Graph
308−addRecDefs home defs (Opt.Graph mains nodes fieldCounts) =
304+addRecDefs :: ModuleName.Canonical -> [Can.Def] -> Opt.LocalGraph -> Opt.LocalGraph
305+addRecDefs home defs (Opt.LocalGraph main nodes fieldCounts) =
309306 let
310307 names = reverse (map toName defs)
311308 cycleName = Opt.Global home (Name.fromManyNames names)
@@ -316,8 +313,8 @@ addRecDefs home defs (Opt.Graph mains nodes fieldCounts) =
316313 Names.run $
317314 foldM (addRecDef cycle) (State [] []) defs
318315 in
319− Opt.Graph
320− mains
316+ Opt.LocalGraph
317+ main
321318 (Map.insert cycleName (Opt.Cycle names values funcs deps) (Map.union links nodes))
322319 (Map.unionWith (+) fields fieldCounts)
323320