Skip to content

Commit

Permalink
Re-make MaybeLazy::default lazy
Browse files Browse the repository at this point in the history
  • Loading branch information
Urgau committed Jun 18, 2024
1 parent 99879cd commit d7ef5e6
Showing 1 changed file with 4 additions and 1 deletion.
5 changes: 4 additions & 1 deletion compiler/rustc_target/src/spec/maybe_lazy.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ use std::ops::Deref;
use std::sync::LazyLock;

enum MaybeLazyInner<T: 'static + ToOwned + ?Sized, F> {
LazyStaticFn(LazyLock<T::Owned>),
Lazy(LazyLock<T::Owned, F>),
Cow(Cow<'static, T>),
}
Expand Down Expand Up @@ -60,6 +61,7 @@ impl<T: 'static + ?Sized + ToOwned<Owned: Clone>, F: FnOnce() -> T::Owned> Clone
fn clone(&self) -> Self {
MaybeLazy {
inner: MaybeLazyInner::Cow(match &self.inner {
MaybeLazyInner::LazyStaticFn(f) => Cow::Owned((*f).to_owned()),
MaybeLazyInner::Lazy(f) => Cow::Owned((*f).to_owned()),
MaybeLazyInner::Cow(c) => c.clone(),
}),
Expand All @@ -72,7 +74,7 @@ impl<T: 'static + ?Sized + ToOwned<Owned: Default>, F: FnOnce() -> T::Owned> Def
{
#[inline]
fn default() -> MaybeLazy<T, F> {
MaybeLazy::owned(T::Owned::default())
MaybeLazy { inner: MaybeLazyInner::LazyStaticFn(LazyLock::new(T::Owned::default)) }
}
}

Expand All @@ -85,6 +87,7 @@ impl<T: 'static + ?Sized + ToOwned<Owned: Borrow<T>>, F: FnOnce() -> T::Owned> D
#[inline]
fn deref(&self) -> &T {
match &self.inner {
MaybeLazyInner::LazyStaticFn(f) => (&**f).borrow(),
MaybeLazyInner::Lazy(f) => (&**f).borrow(),
MaybeLazyInner::Cow(c) => &*c,
}
Expand Down

0 comments on commit d7ef5e6

Please sign in to comment.