Skip to content

Commit 62f4316

Browse files
authored
Rollup merge of rust-lang#55205 - ljedrz:faster_fxhashmap/set_population, r=estebank
Improve a few cases of collecting to an FxHash(Map/Set) Either use `collect` or procure specified capacity when possible.
2 parents df511e9 + 73d4eec commit 62f4316

File tree

4 files changed

+15
-19
lines changed

4 files changed

+15
-19
lines changed

src/librustc/infer/lexical_region_resolve/graphviz.rs

+1-4
Original file line numberDiff line numberDiff line change
@@ -230,10 +230,7 @@ impl<'a, 'gcx, 'tcx> dot::GraphWalk<'a> for ConstraintGraph<'a, 'gcx, 'tcx> {
230230
type Node = Node;
231231
type Edge = Edge<'tcx>;
232232
fn nodes(&self) -> dot::Nodes<'_, Node> {
233-
let mut set = FxHashSet::default();
234-
for node in self.node_ids.keys() {
235-
set.insert(*node);
236-
}
233+
let set = self.node_ids.keys().cloned().collect::<FxHashSet<_>>();
237234
debug!("constraint graph has {} nodes", set.len());
238235
set.into_iter().collect()
239236
}

src/librustc/middle/dependency_format.rs

+3-4
Original file line numberDiff line numberDiff line change
@@ -94,12 +94,11 @@ pub enum Linkage {
9494

9595
pub fn calculate<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>) {
9696
let sess = &tcx.sess;
97-
let mut fmts = FxHashMap::default();
98-
for &ty in sess.crate_types.borrow().iter() {
97+
let fmts = sess.crate_types.borrow().iter().map(|&ty| {
9998
let linkage = calculate_type(tcx, ty);
10099
verify_ok(tcx, &linkage);
101-
fmts.insert(ty, linkage);
102-
}
100+
(ty, linkage)
101+
}).collect::<FxHashMap<_, _>>();
103102
sess.abort_if_errors();
104103
sess.dependency_formats.set(fmts);
105104
}

src/librustc/ty/query/on_disk_cache.rs

+6-3
Original file line numberDiff line numberDiff line change
@@ -174,10 +174,13 @@ impl<'sess> OnDiskCache<'sess> {
174174
tcx.dep_graph.with_ignore(|| {
175175
// Allocate SourceFileIndices
176176
let (file_to_file_index, file_index_to_stable_id) = {
177-
let mut file_to_file_index = FxHashMap::default();
178-
let mut file_index_to_stable_id = FxHashMap::default();
177+
let files = tcx.sess.source_map().files();
178+
let mut file_to_file_index = FxHashMap::with_capacity_and_hasher(
179+
files.len(), Default::default());
180+
let mut file_index_to_stable_id = FxHashMap::with_capacity_and_hasher(
181+
files.len(), Default::default());
179182

180-
for (index, file) in tcx.sess.source_map().files().iter().enumerate() {
183+
for (index, file) in files.iter().enumerate() {
181184
let index = SourceFileIndex(index as u32);
182185
let file_ptr: *const SourceFile = &**file as *const _;
183186
file_to_file_index.insert(file_ptr, index);

src/librustc_typeck/check/mod.rs

+5-8
Original file line numberDiff line numberDiff line change
@@ -3510,10 +3510,9 @@ impl<'a, 'gcx, 'tcx> FnCtxt<'a, 'gcx, 'tcx> {
35103510
_ => span_bug!(span, "non-ADT passed to check_expr_struct_fields")
35113511
};
35123512

3513-
let mut remaining_fields = FxHashMap::default();
3514-
for (i, field) in variant.fields.iter().enumerate() {
3515-
remaining_fields.insert(field.ident.modern(), (i, field));
3516-
}
3513+
let mut remaining_fields = variant.fields.iter().enumerate().map(|(i, field)|
3514+
(field.ident.modern(), (i, field))
3515+
).collect::<FxHashMap<_, _>>();
35173516

35183517
let mut seen_fields = FxHashMap::default();
35193518

@@ -5051,10 +5050,8 @@ impl<'a, 'gcx, 'tcx> FnCtxt<'a, 'gcx, 'tcx> {
50515050
// provided (if any) into their appropriate spaces. We'll also report
50525051
// errors if type parameters are provided in an inappropriate place.
50535052

5054-
let mut generic_segs = FxHashSet::default();
5055-
for PathSeg(_, index) in &path_segs {
5056-
generic_segs.insert(index);
5057-
}
5053+
let generic_segs = path_segs.iter().map(|PathSeg(_, index)| index)
5054+
.collect::<FxHashSet<_>>();
50585055
AstConv::prohibit_generics(self, segments.iter().enumerate().filter_map(|(index, seg)| {
50595056
if !generic_segs.contains(&index) {
50605057
Some(seg)

0 commit comments

Comments
 (0)