Skip to content

Commit a184557

Browse files
authored
Rollup merge of #110451 - WaffleLapkin:ensure_return_elem, r=scottmcm
Minor changes to `IndexVec::ensure_contains_elem` & related methods r? `@scottmcm`
2 parents 3320b2a + bd1dfce commit a184557

File tree

6 files changed

+24
-26
lines changed

6 files changed

+24
-26
lines changed

compiler/rustc_ast_lowering/src/item.rs

+5-5
Original file line numberDiff line numberDiff line change
@@ -89,18 +89,18 @@ impl<'a, 'hir> ItemLowerer<'a, 'hir> {
8989
lctx.with_hir_id_owner(owner, |lctx| f(lctx));
9090

9191
for (def_id, info) in lctx.children {
92-
self.owners.ensure_contains_elem(def_id, || hir::MaybeOwner::Phantom);
93-
debug_assert!(matches!(self.owners[def_id], hir::MaybeOwner::Phantom));
94-
self.owners[def_id] = info;
92+
let owner = self.owners.ensure_contains_elem(def_id, || hir::MaybeOwner::Phantom);
93+
debug_assert!(matches!(owner, hir::MaybeOwner::Phantom));
94+
*owner = info;
9595
}
9696
}
9797

9898
pub(super) fn lower_node(
9999
&mut self,
100100
def_id: LocalDefId,
101101
) -> hir::MaybeOwner<&'hir hir::OwnerInfo<'hir>> {
102-
self.owners.ensure_contains_elem(def_id, || hir::MaybeOwner::Phantom);
103-
if let hir::MaybeOwner::Phantom = self.owners[def_id] {
102+
let owner = self.owners.ensure_contains_elem(def_id, || hir::MaybeOwner::Phantom);
103+
if let hir::MaybeOwner::Phantom = owner {
104104
let node = self.ast_index[def_id];
105105
match node {
106106
AstOwner::NonOwner => {}

compiler/rustc_ast_lowering/src/lib.rs

+7-8
Original file line numberDiff line numberDiff line change
@@ -368,8 +368,8 @@ fn index_crate<'a>(
368368
krate: &'a Crate,
369369
) -> IndexVec<LocalDefId, AstOwner<'a>> {
370370
let mut indexer = Indexer { node_id_to_def_id, index: IndexVec::new() };
371-
indexer.index.ensure_contains_elem(CRATE_DEF_ID, || AstOwner::NonOwner);
372-
indexer.index[CRATE_DEF_ID] = AstOwner::Crate(krate);
371+
*indexer.index.ensure_contains_elem(CRATE_DEF_ID, || AstOwner::NonOwner) =
372+
AstOwner::Crate(krate);
373373
visit::walk_crate(&mut indexer, krate);
374374
return indexer.index;
375375

@@ -386,22 +386,21 @@ fn index_crate<'a>(
386386

387387
fn visit_item(&mut self, item: &'a ast::Item) {
388388
let def_id = self.node_id_to_def_id[&item.id];
389-
self.index.ensure_contains_elem(def_id, || AstOwner::NonOwner);
390-
self.index[def_id] = AstOwner::Item(item);
389+
*self.index.ensure_contains_elem(def_id, || AstOwner::NonOwner) = AstOwner::Item(item);
391390
visit::walk_item(self, item)
392391
}
393392

394393
fn visit_assoc_item(&mut self, item: &'a ast::AssocItem, ctxt: visit::AssocCtxt) {
395394
let def_id = self.node_id_to_def_id[&item.id];
396-
self.index.ensure_contains_elem(def_id, || AstOwner::NonOwner);
397-
self.index[def_id] = AstOwner::AssocItem(item, ctxt);
395+
*self.index.ensure_contains_elem(def_id, || AstOwner::NonOwner) =
396+
AstOwner::AssocItem(item, ctxt);
398397
visit::walk_assoc_item(self, item, ctxt);
399398
}
400399

401400
fn visit_foreign_item(&mut self, item: &'a ast::ForeignItem) {
402401
let def_id = self.node_id_to_def_id[&item.id];
403-
self.index.ensure_contains_elem(def_id, || AstOwner::NonOwner);
404-
self.index[def_id] = AstOwner::ForeignItem(item);
402+
*self.index.ensure_contains_elem(def_id, || AstOwner::NonOwner) =
403+
AstOwner::ForeignItem(item);
405404
visit::walk_foreign_item(self, item);
406405
}
407406
}

compiler/rustc_hir_typeck/src/generator_interior/drop_ranges/mod.rs

+1-2
Original file line numberDiff line numberDiff line change
@@ -268,8 +268,7 @@ impl DropRangesBuilder {
268268

269269
fn node_mut(&mut self, id: PostOrderId) -> &mut NodeInfo {
270270
let size = self.num_values();
271-
self.nodes.ensure_contains_elem(id, || NodeInfo::new(size));
272-
&mut self.nodes[id]
271+
self.nodes.ensure_contains_elem(id, || NodeInfo::new(size))
273272
}
274273

275274
fn add_control_edge(&mut self, from: PostOrderId, to: PostOrderId) {

compiler/rustc_index/src/interval.rs

+1-2
Original file line numberDiff line numberDiff line change
@@ -261,8 +261,7 @@ impl<R: Idx, C: Step + Idx> SparseIntervalMatrix<R, C> {
261261
}
262262

263263
fn ensure_row(&mut self, row: R) -> &mut IntervalSet<C> {
264-
self.rows.ensure_contains_elem(row, || IntervalSet::new(self.column_size));
265-
&mut self.rows[row]
264+
self.rows.ensure_contains_elem(row, || IntervalSet::new(self.column_size))
266265
}
267266

268267
pub fn union_row(&mut self, row: R, from: &IntervalSet<C>) -> bool

compiler/rustc_index/src/vec.rs

+8-7
Original file line numberDiff line numberDiff line change
@@ -236,12 +236,16 @@ impl<I: Idx, T> IndexVec<I, T> {
236236
/// `elem`; if that is already true, then has no
237237
/// effect. Otherwise, inserts new values as needed by invoking
238238
/// `fill_value`.
239+
///
240+
/// Returns a reference to the `elem` entry.
239241
#[inline]
240-
pub fn ensure_contains_elem(&mut self, elem: I, fill_value: impl FnMut() -> T) {
242+
pub fn ensure_contains_elem(&mut self, elem: I, fill_value: impl FnMut() -> T) -> &mut T {
241243
let min_new_len = elem.index() + 1;
242244
if self.len() < min_new_len {
243245
self.raw.resize_with(min_new_len, fill_value);
244246
}
247+
248+
&mut self[elem]
245249
}
246250

247251
#[inline]
@@ -446,20 +450,17 @@ impl<I: Idx, J: Idx> IndexSlice<I, J> {
446450
impl<I: Idx, T> IndexVec<I, Option<T>> {
447451
#[inline]
448452
pub fn insert(&mut self, index: I, value: T) -> Option<T> {
449-
self.ensure_contains_elem(index, || None);
450-
self[index].replace(value)
453+
self.ensure_contains_elem(index, || None).replace(value)
451454
}
452455

453456
#[inline]
454457
pub fn get_or_insert_with(&mut self, index: I, value: impl FnOnce() -> T) -> &mut T {
455-
self.ensure_contains_elem(index, || None);
456-
self[index].get_or_insert_with(value)
458+
self.ensure_contains_elem(index, || None).get_or_insert_with(value)
457459
}
458460

459461
#[inline]
460462
pub fn remove(&mut self, index: I) -> Option<T> {
461-
self.ensure_contains_elem(index, || None);
462-
self[index].take()
463+
self.get_mut(index)?.take()
463464
}
464465
}
465466

compiler/rustc_metadata/src/rmeta/table.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -413,8 +413,8 @@ impl<I: Idx, const N: usize, T: FixedSizeEncoding<ByteArray = [u8; N]>> TableBui
413413
// > Space requirements could perhaps be optimized by using the HAMT `popcnt`
414414
// > trick (i.e. divide things into buckets of 32 or 64 items and then
415415
// > store bit-masks of which item in each bucket is actually serialized).
416-
self.blocks.ensure_contains_elem(i, || [0; N]);
417-
value.write_to_bytes(&mut self.blocks[i]);
416+
let block = self.blocks.ensure_contains_elem(i, || [0; N]);
417+
value.write_to_bytes(block);
418418
}
419419
}
420420

0 commit comments

Comments
 (0)