Rollup merge of #139584 - oli-obk:horrible-experiment-1, r=petrochenkov

Avoid a reverse map that is only used in diagnostics paths

r? `@petrochenkov`

iterating a map until a value matches and returning the key is bad obviously, but it happens very rarely and only on diagnostics paths. It would also be a lot cheaper with https://github.com/rust-lang/rust/pull/138995. Which is actually why I'm trying this out, that PR adds a new entry in `create_def`, which makes `create_def` show up in cachegrind. So I'm trying out if removing adding an entry in `create_def` is a perf improvement
This commit is contained in:
Jacob Pratt 2025-04-11 21:20:59 +02:00 committed by GitHub
commit bc05aaeeaa
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
9 changed files with 59 additions and 49 deletions

View file

@ -109,6 +109,16 @@ impl<T, I: Iterator<Item = T>> UnordItems<T, I> {
pub fn collect<C: From<UnordItems<T, I>>>(self) -> C {
self.into()
}
/// If the iterator has only one element, returns it, otherwise returns `None`.
#[track_caller]
pub fn get_only(mut self) -> Option<T> {
let item = self.0.next();
if self.0.next().is_some() {
return None;
}
item
}
}
impl<T> UnordItems<T, std::iter::Empty<T>> {