Replace `fold` with an imperative `for` loop in `format_crate.
PiperOrigin-RevId: 518853738
diff --git a/cc_bindings_from_rs/bindings.rs b/cc_bindings_from_rs/bindings.rs
index d2d79ab..abd21a5 100644
--- a/cc_bindings_from_rs/bindings.rs
+++ b/cc_bindings_from_rs/bindings.rs
@@ -1449,7 +1449,8 @@
let mut cc_details_prereqs = CcPrerequisites::default();
let mut cc_details: Vec<(LocalDefId, TokenStream)> = vec![];
let mut rs_body = TokenStream::default();
- let mut main_apis: HashMap<LocalDefId, CcSnippet> = tcx
+ let mut main_apis = HashMap::<LocalDefId, CcSnippet>::new();
+ let formatted_items = tcx
.hir()
.items()
.filter_map(|item_id| {
@@ -1458,20 +1459,18 @@
.unwrap_or_else(|err| Some(format_unsupported_def(tcx, def_id, err)))
.map(|api_snippets| (def_id, api_snippets))
})
- .sorted_by_key(|(def_id, _)| tcx.def_span(*def_id))
- .fold(HashMap::new(), |mut main_apis, (def_id, api_snippets)| {
- let old_item = main_apis.insert(def_id, api_snippets.main_api);
- assert!(old_item.is_none(), "Duplicated key: {def_id:?}");
+ .sorted_by_key(|(def_id, _)| tcx.def_span(*def_id));
+ for (def_id, api_snippets) in formatted_items {
+ let old_item = main_apis.insert(def_id, api_snippets.main_api);
+ assert!(old_item.is_none(), "Duplicated key: {def_id:?}");
- // `cc_details` don't participate in the toposort, because
- // `CcPrerequisites::defs` always use `main_api` as the predecessor
- // - `chain`ing `cc_details` after `ordered_main_apis` trivially
- // meets the prerequisites.
- cc_details.push((def_id, api_snippets.cc_details.into_tokens(&mut cc_details_prereqs)));
- rs_body.extend(api_snippets.rs_details);
-
- main_apis
- });
+ // `cc_details` don't participate in the toposort, because
+ // `CcPrerequisites::defs` always use `main_api` as the predecessor
+ // - `chain`ing `cc_details` after `ordered_main_apis` trivially
+ // meets the prerequisites.
+ cc_details.push((def_id, api_snippets.cc_details.into_tokens(&mut cc_details_prereqs)));
+ rs_body.extend(api_snippets.rs_details);
+ }
// Find the order of `main_apis` that 1) meets the requirements of
// `CcPrerequisites::defs` and 2) makes a best effort attempt to keep the