diff options
| author | John Kåre Alsaker <john.kare.alsaker@gmail.com> | 2023-08-31 22:12:47 +0200 |
|---|---|---|
| committer | John Kåre Alsaker <john.kare.alsaker@gmail.com> | 2023-09-07 13:05:05 +0200 |
| commit | f49382c0508db608aa9c33d6a8c77d2955d8f62c (patch) | |
| tree | 85be68eacbc6325822cf64fba8e4841474065607 /compiler/rustc_data_structures/src/sync/freeze.rs | |
| parent | c5996b80beaba54502fa86583b48cd6980b17b18 (diff) | |
| download | rust-f49382c0508db608aa9c33d6a8c77d2955d8f62c.tar.gz rust-f49382c0508db608aa9c33d6a8c77d2955d8f62c.zip | |
Use `Freeze` for `SourceFile.lines`
Diffstat (limited to 'compiler/rustc_data_structures/src/sync/freeze.rs')
| -rw-r--r-- | compiler/rustc_data_structures/src/sync/freeze.rs | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/compiler/rustc_data_structures/src/sync/freeze.rs b/compiler/rustc_data_structures/src/sync/freeze.rs index 88c710e5236..ad71ae1af51 100644 --- a/compiler/rustc_data_structures/src/sync/freeze.rs +++ b/compiler/rustc_data_structures/src/sync/freeze.rs @@ -3,6 +3,7 @@ use crate::sync::{AtomicBool, ReadGuard, RwLock, WriteGuard}; use crate::sync::{DynSend, DynSync}; use std::{ cell::UnsafeCell, + intrinsics::likely, marker::PhantomData, ops::{Deref, DerefMut}, sync::atomic::Ordering, @@ -49,6 +50,17 @@ impl<T> FreezeLock<T> { self.frozen.load(Ordering::Acquire) } + /// Get the inner value if frozen. + #[inline] + pub fn get(&self) -> Option<&T> { + if likely(self.frozen.load(Ordering::Acquire)) { + // SAFETY: This is frozen so the data cannot be modified. + unsafe { Some(&*self.data.get()) } + } else { + None + } + } + #[inline] pub fn read(&self) -> FreezeReadGuard<'_, T> { FreezeReadGuard { |
