on master help sign in
Make sure all names are used in the cycle name

This way it is never an empty list, in which case you would get duplicates made from no names.

commit425852759b0643a160e6f00ea2521414c4e02c81 authorEvan Czaplicki <evancz@users.noreply.github.com> dateTue 22 May 2018, 23:07 (8 years ago) parent6d6e9a7
1 file changed+13−6
compiler/src/Optimize/Module.hs+13−6
compiler/src/Optimize/Module.hs+13−6
@@ -308,9 +308,9 @@ data State =
308308addRecDefs :: ModuleName.Canonical -> [Can.Def] -> Opt.Graph -> Opt.Graph
309309addRecDefs home defs (Opt.Graph mains nodes fieldCounts) =
310310 let
311− valueNames = foldr addValueName [] defs
312− cycleName = Opt.Global home (N.toCompositeName valueNames)
313− cycle = Set.fromList valueNames
311+ names = map toName defs
312+ cycleName = Opt.Global home (N.toCompositeName names)
313+ cycle = foldr addValueName Set.empty defs
314314 links = foldr (addLink home (Opt.Link cycleName)) Map.empty defs
315315
316316 (deps, fields, State values funcs) =
@@ -323,11 +323,18 @@ addRecDefs home defs (Opt.Graph mains nodes fieldCounts) =
323323 (Map.unionWith (+) fields fieldCounts)
324324
325325
326−addValueName :: Can.Def -> [N.Name] -> [N.Name]
326+toName :: Can.Def -> N.Name
327+toName def =
328+ case def of
329+ Can.Def (A.At _ name) _ _ -> name
330+ Can.TypedDef (A.At _ name) _ _ _ _ -> name
331+
332+
333+addValueName :: Can.Def -> Set.Set N.Name -> Set.Set N.Name
327334addValueName def names =
328335 case def of
329− Can.Def (A.At _ name) args _ -> if null args then name:names else names
330− Can.TypedDef (A.At _ name) _ args _ _ -> if null args then name:names else names
336+ Can.Def (A.At _ name) args _ -> if null args then Set.insert name names else names
337+ Can.TypedDef (A.At _ name) _ args _ _ -> if null args then Set.insert name names else names
331338
332339
333340addLink :: ModuleName.Canonical -> Opt.Node -> Can.Def -> Map.Map Opt.Global Opt.Node -> Map.Map Opt.Global Opt.Node