1
Fork 0

library: Destabilize Lazy{Cell,Lock}::{force,deref}_mut

This commit is contained in:
Jubilee Young 2024-09-17 09:31:57 -07:00
parent d0a2ca4867
commit d9cdb71497
5 changed files with 9 additions and 28 deletions

View file

@ -1,6 +1,6 @@
use super::UnsafeCell; use super::UnsafeCell;
use crate::hint::unreachable_unchecked; use crate::hint::unreachable_unchecked;
use crate::ops::{Deref, DerefMut}; use crate::ops::Deref;
use crate::{fmt, mem}; use crate::{fmt, mem};
enum State<T, F> { enum State<T, F> {
@ -122,11 +122,10 @@ impl<T, F: FnOnce() -> T> LazyCell<T, F> {
/// Forces the evaluation of this lazy value and returns a mutable reference to /// Forces the evaluation of this lazy value and returns a mutable reference to
/// the result. /// the result.
/// ///
/// This is equivalent to the `DerefMut` impl, but is explicit.
///
/// # Examples /// # Examples
/// ///
/// ``` /// ```
/// #![feature(lazy_get)]
/// use std::cell::LazyCell; /// use std::cell::LazyCell;
/// ///
/// let mut lazy = LazyCell::new(|| 92); /// let mut lazy = LazyCell::new(|| 92);
@ -135,11 +134,9 @@ impl<T, F: FnOnce() -> T> LazyCell<T, F> {
/// assert_eq!(*p, 92); /// assert_eq!(*p, 92);
/// *p = 44; /// *p = 44;
/// assert_eq!(*lazy, 44); /// assert_eq!(*lazy, 44);
/// *lazy = 55; // Using `DerefMut`
/// assert_eq!(*lazy, 55);
/// ``` /// ```
#[inline] #[inline]
#[stable(feature = "lazy_deref_mut", since = "CURRENT_RUSTC_VERSION")] #[unstable(feature = "lazy_get", issue = "129333")]
pub fn force_mut(this: &mut LazyCell<T, F>) -> &mut T { pub fn force_mut(this: &mut LazyCell<T, F>) -> &mut T {
#[cold] #[cold]
/// # Safety /// # Safety
@ -286,14 +283,6 @@ impl<T, F: FnOnce() -> T> Deref for LazyCell<T, F> {
} }
} }
#[stable(feature = "lazy_deref_mut", since = "CURRENT_RUSTC_VERSION")]
impl<T, F: FnOnce() -> T> DerefMut for LazyCell<T, F> {
#[inline]
fn deref_mut(&mut self) -> &mut T {
LazyCell::force_mut(self)
}
}
#[stable(feature = "lazy_cell", since = "1.80.0")] #[stable(feature = "lazy_cell", since = "1.80.0")]
impl<T: Default> Default for LazyCell<T> { impl<T: Default> Default for LazyCell<T> {
/// Creates a new lazy value using `Default` as the initializing function. /// Creates a new lazy value using `Default` as the initializing function.

View file

@ -172,6 +172,7 @@
#![feature(is_ascii_octdigit)] #![feature(is_ascii_octdigit)]
#![feature(is_val_statically_known)] #![feature(is_val_statically_known)]
#![feature(isqrt)] #![feature(isqrt)]
#![feature(lazy_get)]
#![feature(link_cfg)] #![feature(link_cfg)]
#![feature(offset_of_enum)] #![feature(offset_of_enum)]
#![feature(panic_internals)] #![feature(panic_internals)]

View file

@ -77,6 +77,7 @@
#![feature(iterator_try_collect)] #![feature(iterator_try_collect)]
#![feature(iterator_try_reduce)] #![feature(iterator_try_reduce)]
#![feature(layout_for_ptr)] #![feature(layout_for_ptr)]
#![feature(lazy_get)]
#![feature(maybe_uninit_fill)] #![feature(maybe_uninit_fill)]
#![feature(maybe_uninit_uninit_array_transpose)] #![feature(maybe_uninit_uninit_array_transpose)]
#![feature(maybe_uninit_write_slice)] #![feature(maybe_uninit_write_slice)]

View file

@ -336,6 +336,7 @@
#![feature(hasher_prefixfree_extras)] #![feature(hasher_prefixfree_extras)]
#![feature(hashmap_internals)] #![feature(hashmap_internals)]
#![feature(ip)] #![feature(ip)]
#![feature(lazy_get)]
#![feature(maybe_uninit_slice)] #![feature(maybe_uninit_slice)]
#![feature(maybe_uninit_write_slice)] #![feature(maybe_uninit_write_slice)]
#![feature(panic_can_unwind)] #![feature(panic_can_unwind)]

View file

@ -1,7 +1,7 @@
use super::once::ExclusiveState; use super::once::ExclusiveState;
use crate::cell::UnsafeCell; use crate::cell::UnsafeCell;
use crate::mem::ManuallyDrop; use crate::mem::ManuallyDrop;
use crate::ops::{Deref, DerefMut}; use crate::ops::Deref;
use crate::panic::{RefUnwindSafe, UnwindSafe}; use crate::panic::{RefUnwindSafe, UnwindSafe};
use crate::sync::Once; use crate::sync::Once;
use crate::{fmt, ptr}; use crate::{fmt, ptr};
@ -137,11 +137,10 @@ impl<T, F: FnOnce() -> T> LazyLock<T, F> {
/// Forces the evaluation of this lazy value and returns a mutable reference to /// Forces the evaluation of this lazy value and returns a mutable reference to
/// the result. /// the result.
/// ///
/// This is equivalent to the `DerefMut` impl, but is explicit.
///
/// # Examples /// # Examples
/// ///
/// ``` /// ```
/// #![feature(lazy_get)]
/// use std::sync::LazyLock; /// use std::sync::LazyLock;
/// ///
/// let mut lazy = LazyLock::new(|| 92); /// let mut lazy = LazyLock::new(|| 92);
@ -150,11 +149,9 @@ impl<T, F: FnOnce() -> T> LazyLock<T, F> {
/// assert_eq!(*p, 92); /// assert_eq!(*p, 92);
/// *p = 44; /// *p = 44;
/// assert_eq!(*lazy, 44); /// assert_eq!(*lazy, 44);
/// *lazy = 55; // Using `DerefMut`
/// assert_eq!(*lazy, 55);
/// ``` /// ```
#[inline] #[inline]
#[stable(feature = "lazy_deref_mut", since = "CURRENT_RUSTC_VERSION")] #[unstable(feature = "lazy_get", issue = "129333")]
pub fn force_mut(this: &mut LazyLock<T, F>) -> &mut T { pub fn force_mut(this: &mut LazyLock<T, F>) -> &mut T {
#[cold] #[cold]
/// # Safety /// # Safety
@ -317,14 +314,6 @@ impl<T, F: FnOnce() -> T> Deref for LazyLock<T, F> {
} }
} }
#[stable(feature = "lazy_deref_mut", since = "CURRENT_RUSTC_VERSION")]
impl<T, F: FnOnce() -> T> DerefMut for LazyLock<T, F> {
#[inline]
fn deref_mut(&mut self) -> &mut T {
LazyLock::force_mut(self)
}
}
#[stable(feature = "lazy_cell", since = "1.80.0")] #[stable(feature = "lazy_cell", since = "1.80.0")]
impl<T: Default> Default for LazyLock<T> { impl<T: Default> Default for LazyLock<T> {
/// Creates a new lazy value using `Default` as the initializing function. /// Creates a new lazy value using `Default` as the initializing function.