Skip to content

Commit

Permalink
Auto merge of #115491 - Zoxc:refcell-tweak, r=Mark-Simulacrum
Browse files Browse the repository at this point in the history
Outline panicking code for `RefCell::borrow` and `RefCell::borrow_mut`

This outlines panicking code for `RefCell::borrow` and `RefCell::borrow_mut` to reduce code size.
  • Loading branch information
bors committed Sep 3, 2023
2 parents 58e967a + 00c2511 commit abfc6c4
Showing 1 changed file with 24 additions and 2 deletions.
26 changes: 24 additions & 2 deletions library/core/src/cell.rs
Original file line number Diff line number Diff line change
Expand Up @@ -753,6 +753,22 @@ impl Display for BorrowMutError {
}
}

// This ensures the panicking code is outlined from `borrow_mut` for `RefCell`.
#[inline(never)]
#[track_caller]
#[cold]
fn panic_already_borrowed(err: BorrowMutError) -> ! {
panic!("already borrowed: {:?}", err)
}

// This ensures the panicking code is outlined from `borrow` for `RefCell`.
#[inline(never)]
#[track_caller]
#[cold]
fn panic_already_mutably_borrowed(err: BorrowError) -> ! {
panic!("already mutably borrowed: {:?}", err)
}

// Positive values represent the number of `Ref` active. Negative values
// represent the number of `RefMut` active. Multiple `RefMut`s can only be
// active at a time if they refer to distinct, nonoverlapping components of a
Expand Down Expand Up @@ -934,7 +950,10 @@ impl<T: ?Sized> RefCell<T> {
#[inline]
#[track_caller]
pub fn borrow(&self) -> Ref<'_, T> {
self.try_borrow().expect("already mutably borrowed")
match self.try_borrow() {
Ok(b) => b,
Err(err) => panic_already_mutably_borrowed(err),
}
}

/// Immutably borrows the wrapped value, returning an error if the value is currently mutably
Expand Down Expand Up @@ -1027,7 +1046,10 @@ impl<T: ?Sized> RefCell<T> {
#[inline]
#[track_caller]
pub fn borrow_mut(&self) -> RefMut<'_, T> {
self.try_borrow_mut().expect("already borrowed")
match self.try_borrow_mut() {
Ok(b) => b,
Err(err) => panic_already_borrowed(err),
}
}

/// Mutably borrows the wrapped value, returning an error if the value is currently borrowed.
Expand Down

0 comments on commit abfc6c4

Please sign in to comment.