Skip to content

Commit 4f6d5e0

Browse files
committed
wip
1 parent d8c0ece commit 4f6d5e0

File tree

2 files changed

+43
-42
lines changed

2 files changed

+43
-42
lines changed

src/librustdoc/html/render/search_index.rs

Lines changed: 42 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@ mod serde;
33

44
use std::collections::BTreeSet;
55
use std::collections::hash_map::Entry;
6-
use std::io;
76
use std::path::Path;
87
use std::string::FromUtf8Error;
8+
use std::{io, iter};
99

1010
use ::serde::de::{self, Deserializer, Error as _};
1111
use ::serde::ser::{SerializeSeq, Serializer};
@@ -256,10 +256,14 @@ impl SerializedSearchIndex {
256256
/// The returned ID can be used to attach more data to the search result.
257257
fn add_entry(&mut self, name: Symbol, entry_data: EntryData, desc: String) -> usize {
258258
let fqp = if let Some(module_path_index) = entry_data.module_path {
259-
let mut fqp = self.path_data[module_path_index].as_ref().unwrap().module_path.clone();
260-
fqp.push(Symbol::intern(&self.names[module_path_index]));
261-
fqp.push(name);
262-
fqp
259+
self.path_data[module_path_index]
260+
.as_ref()
261+
.unwrap()
262+
.module_path
263+
.iter()
264+
.copied()
265+
.chain([Symbol::intern(&self.names[module_path_index]), name])
266+
.collect()
263267
} else {
264268
vec![name]
265269
};
@@ -306,13 +310,13 @@ impl SerializedSearchIndex {
306310

307311
pub(crate) fn union(mut self, other: &SerializedSearchIndex) -> SerializedSearchIndex {
308312
let other_entryid_offset = self.names.len();
309-
let mut map_other_pathid_to_self_pathid: Vec<usize> = Vec::new();
313+
let mut map_other_pathid_to_self_pathid = Vec::with_capacity(other.path_data.len());
310314
let mut skips = FxHashSet::default();
311315
for (other_pathid, other_path_data) in other.path_data.iter().enumerate() {
312316
if let Some(other_path_data) = other_path_data {
313-
let mut fqp = other_path_data.module_path.clone();
314317
let name = Symbol::intern(&other.names[other_pathid]);
315-
fqp.push(name);
318+
let fqp =
319+
other_path_data.module_path.iter().copied().chain(iter::once(name)).collect();
316320
let self_pathid = other_entryid_offset + other_pathid;
317321
let self_pathid = match self.crate_paths_index.entry((other_path_data.ty, fqp)) {
318322
Entry::Vacant(slot) => {
@@ -559,14 +563,9 @@ impl SerializedSearchIndex {
559563
for (size, other_list) in other_generic_inverted_index.iter().enumerate() {
560564
let self_generic_inverted_index = match self.generic_inverted_index.get_mut(i) {
561565
Some(self_generic_inverted_index) => self_generic_inverted_index,
562-
None => {
563-
self.generic_inverted_index.push(Vec::new());
564-
self.generic_inverted_index.last_mut().unwrap()
565-
}
566+
None => self.generic_inverted_index.push_mut(Vec::new()),
566567
};
567-
while self_generic_inverted_index.len() <= size {
568-
self_generic_inverted_index.push(Vec::new());
569-
}
568+
self_generic_inverted_index.resize(size, Vec::new());
570569
self_generic_inverted_index[size].extend(
571570
other_list
572571
.iter()
@@ -1819,20 +1818,23 @@ pub(crate) fn build_index(
18191818
tcx,
18201819
);
18211820
}
1822-
let mut used_in_constraints = Vec::new();
1823-
for constraint in &mut search_type.where_clause {
1824-
let mut used_in_constraint = BTreeSet::new();
1825-
for trait_ in &mut constraint[..] {
1826-
convert_render_type(
1827-
trait_,
1828-
cache,
1829-
&mut serialized_index,
1830-
&mut used_in_constraint,
1831-
tcx,
1832-
);
1833-
}
1834-
used_in_constraints.push(used_in_constraint);
1835-
}
1821+
let used_in_constraints = search_type
1822+
.where_clause
1823+
.iter_mut()
1824+
.map(|constraint| {
1825+
let mut used_in_constraint = BTreeSet::new();
1826+
for trait_ in constraint {
1827+
convert_render_type(
1828+
trait_,
1829+
cache,
1830+
&mut serialized_index,
1831+
&mut used_in_constraint,
1832+
tcx,
1833+
);
1834+
}
1835+
used_in_constraint
1836+
})
1837+
.collect::<Vec<_>>();
18361838
loop {
18371839
let mut inserted_any = false;
18381840
for (i, used_in_constraint) in used_in_constraints.iter().enumerate() {
@@ -1873,16 +1875,14 @@ pub(crate) fn build_index(
18731875
.inverted_function_inputs_index
18741876
} else {
18751877
let generic_id = usize::try_from(-index).unwrap() - 1;
1876-
for _ in serialized_index.generic_inverted_index.len()..=generic_id {
1877-
serialized_index.generic_inverted_index.push(Vec::new());
1878-
}
1878+
serialized_index.generic_inverted_index.resize(generic_id, Vec::new());
18791879
&mut serialized_index.generic_inverted_index[generic_id]
18801880
};
1881-
while postings.len() <= search_type_size {
1882-
postings.push(Vec::new());
1883-
}
1884-
if postings[search_type_size].last() != Some(&(new_entry_id as u32)) {
1885-
postings[search_type_size].push(new_entry_id as u32);
1881+
// FIXME(yotamofek): last item should have capacity of 1
1882+
postings.resize(search_type_size, Vec::new());
1883+
let posting = &mut postings[search_type_size];
1884+
if posting.last() != Some(&(new_entry_id as u32)) {
1885+
posting.push(new_entry_id as u32);
18861886
}
18871887
}
18881888
for index in used_in_function_output {
@@ -1899,11 +1899,11 @@ pub(crate) fn build_index(
18991899
}
19001900
&mut serialized_index.generic_inverted_index[generic_id]
19011901
};
1902-
while postings.len() <= search_type_size {
1903-
postings.push(Vec::new());
1904-
}
1905-
if postings[search_type_size].last() != Some(&(new_entry_id as u32)) {
1906-
postings[search_type_size].push(new_entry_id as u32);
1902+
// FIXME(yotamofek): last item should have capacity of 1
1903+
postings.resize(search_type_size, Vec::new());
1904+
let posting = &mut postings[search_type_size];
1905+
if posting.last() != Some(&(new_entry_id as u32)) {
1906+
posting.push(new_entry_id as u32);
19071907
}
19081908
}
19091909
}

src/librustdoc/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
#![feature(iter_advance_by)]
1616
#![feature(iter_intersperse)]
1717
#![feature(iter_order_by)]
18+
#![feature(push_mut)]
1819
#![feature(rustc_private)]
1920
#![feature(test)]
2021
#![feature(trim_prefix_suffix)]

0 commit comments

Comments
 (0)