@@ -13,6 +13,7 @@ use crate::cycle::{
1313use crate :: database:: RawDatabase ;
1414use crate :: function:: delete:: DeletedEntries ;
1515use crate :: function:: sync:: { ClaimResult , SyncTable } ;
16+ use crate :: hash:: FxIndexSet ;
1617use crate :: ingredient:: { Ingredient , WaitForResult } ;
1718use crate :: key:: DatabaseKeyIndex ;
1819use crate :: plumbing:: { self , MemoIngredientMap } ;
@@ -288,26 +289,27 @@ where
288289 self . maybe_changed_after ( db, input, revision, cycle_heads)
289290 }
290291
291- fn minimum_serialized_edges ( & self , zalsa : & Zalsa , edge : QueryEdge ) -> Vec < QueryEdge > {
292+ fn collect_minimum_serialized_edges (
293+ & self ,
294+ zalsa : & Zalsa ,
295+ edge : QueryEdge ,
296+ serialized_edges : & mut FxIndexSet < QueryEdge > ,
297+ ) {
292298 let input = edge. key ( ) . key_index ( ) ;
293299
294300 let Some ( memo) =
295301 self . get_memo_from_table_for ( zalsa, input, self . memo_ingredient_index ( zalsa, input) )
296302 else {
297- return Vec :: new ( ) ;
303+ return ;
298304 } ;
299305
300306 let origin = memo. revisions . origin . as_ref ( ) ;
301307
302308 // Collect the minimum dependency tree.
303- origin
304- . edges ( )
305- . iter ( )
306- . flat_map ( |& edge| {
307- let dependency = zalsa. lookup_ingredient ( edge. key ( ) . ingredient_index ( ) ) ;
308- dependency. minimum_serialized_edges ( zalsa, edge)
309- } )
310- . collect ( )
309+ for edge in origin. edges ( ) {
310+ let dependency = zalsa. lookup_ingredient ( edge. key ( ) . ingredient_index ( ) ) ;
311+ dependency. collect_minimum_serialized_edges ( zalsa, * edge, serialized_edges)
312+ }
311313 }
312314
313315 /// Returns `final` only if the memo has the `verified_final` flag set and the cycle recovery strategy is not `FallbackImmediate`.
@@ -588,7 +590,7 @@ mod persistence {
588590 flattened_edges. insert ( edge) ;
589591 } else {
590592 // Otherwise, serialize the minimum edges necessary to cover the dependency.
591- flattened_edges . extend ( dependency. minimum_serialized_edges ( zalsa, edge) ) ;
593+ dependency. collect_minimum_serialized_edges ( zalsa, edge, & mut flattened_edges ) ;
592594 }
593595 }
594596
0 commit comments