@@ -30,11 +30,16 @@ type Node<'Item, 'State, 'Result> =
3030/// <param name =" transitiveDeps " >Transitive dependencies of a node</param >
3131/// <param name =" folder " >A way to fold a single result into existing state</param >
3232let combineResults
33+ ( emptyState : 'State )
3334 ( deps : Node < 'Item , 'State , 'Result >[])
3435 ( transitiveDeps : Node < 'Item , 'State , 'Result >[])
3536 ( folder : 'State -> 'Result -> 'State )
3637 : 'State
3738 =
39+ match deps with
40+ | [||] -> emptyState
41+ | _ ->
42+
3843 let biggestDep =
3944 let sizeMetric node =
4045 // Could also use eg. total file size/AST size
@@ -54,7 +59,10 @@ let combineResults
5459
5560 // Add single-file results of remaining transitive deps one-by-one using folder
5661 // Note: Good to preserve order here so that folding happens in file order
57- let included = HashSet( biggestDep.Info.TransitiveDeps)
62+ let included =
63+ let set = HashSet( biggestDep.Info.TransitiveDeps)
64+ set.Add biggestDep.Info.Item |> ignore
65+ set
5866 let resultsToAdd =
5967 transitiveDeps
6068 |> Array.filter ( fun dep -> included.Contains dep.Info.Item = false )
@@ -71,6 +79,7 @@ let processGraph<'Item, 'State, 'Result when 'Item : equality>
7179 ( graph : Graph < 'Item >)
7280 ( doWork : 'Item -> 'State -> 'Result )
7381 ( folder : 'State -> 'Result -> 'State )
82+ ( emptyState : 'State )
7483 ( parallelism : int )
7584 : 'State
7685 =
@@ -108,7 +117,7 @@ let processGraph<'Item, 'State, 'Result when 'Item : equality>
108117 =
109118 let deps = lookupMany node.Info.Deps
110119 let transitiveDeps = lookupMany node.Info.TransitiveDeps
111- let inputState = combineResults deps transitiveDeps folder
120+ let inputState = combineResults emptyState deps transitiveDeps folder
112121 let singleRes = doWork node.Info.Item inputState
113122 let state = folder inputState singleRes
114123 node.Result <- Some ( state, singleRes)
@@ -123,7 +132,7 @@ let processGraph<'Item, 'State, 'Result when 'Item : equality>
123132 x.ProcessedDepsCount <- x.ProcessedDepsCount + 1
124133 x.ProcessedDepsCount
125134 )
126- pdc = node .Info.Deps.Length
135+ pdc = x .Info.Deps.Length
127136 )
128137 unblocked
129138
@@ -137,5 +146,5 @@ let processGraph<'Item, 'State, 'Result when 'Item : equality>
137146 cts.Token
138147
139148 let nodesArray = nodes.Values |> Seq.toArray
140- let state = combineResults nodesArray nodesArray folder
149+ let state = combineResults emptyState nodesArray nodesArray folder
141150 state
0 commit comments