Skip to content

Commit d7ef5e6

Browse files
committed
Re-make MaybeLazy::default lazy
1 parent 99879cd commit d7ef5e6

File tree

1 file changed

+4
-1
lines changed

1 file changed

+4
-1
lines changed

compiler/rustc_target/src/spec/maybe_lazy.rs

+4-1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ use std::ops::Deref;
66
use std::sync::LazyLock;
77

88
enum MaybeLazyInner<T: 'static + ToOwned + ?Sized, F> {
9+
LazyStaticFn(LazyLock<T::Owned>),
910
Lazy(LazyLock<T::Owned, F>),
1011
Cow(Cow<'static, T>),
1112
}
@@ -60,6 +61,7 @@ impl<T: 'static + ?Sized + ToOwned<Owned: Clone>, F: FnOnce() -> T::Owned> Clone
6061
fn clone(&self) -> Self {
6162
MaybeLazy {
6263
inner: MaybeLazyInner::Cow(match &self.inner {
64+
MaybeLazyInner::LazyStaticFn(f) => Cow::Owned((*f).to_owned()),
6365
MaybeLazyInner::Lazy(f) => Cow::Owned((*f).to_owned()),
6466
MaybeLazyInner::Cow(c) => c.clone(),
6567
}),
@@ -72,7 +74,7 @@ impl<T: 'static + ?Sized + ToOwned<Owned: Default>, F: FnOnce() -> T::Owned> Def
7274
{
7375
#[inline]
7476
fn default() -> MaybeLazy<T, F> {
75-
MaybeLazy::owned(T::Owned::default())
77+
MaybeLazy { inner: MaybeLazyInner::LazyStaticFn(LazyLock::new(T::Owned::default)) }
7678
}
7779
}
7880

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

0 commit comments

Comments
 (0)