about summary refs log tree commit diff
diff options
context:
space:
mode:
authorJohn Kåre Alsaker <john.kare.alsaker@gmail.com>2023-09-08 14:14:57 +0200
committerJohn Kåre Alsaker <john.kare.alsaker@gmail.com>2023-09-08 14:14:57 +0200
commitc83eba92518166b9e40f43b40683d74c919af0ed (patch)
treebd6af919d3257e483d84e7139a7a94e6a55021e2
parentf49382c0508db608aa9c33d6a8c77d2955d8f62c (diff)
downloadrust-c83eba92518166b9e40f43b40683d74c919af0ed.tar.gz
rust-c83eba92518166b9e40f43b40683d74c919af0ed.zip
Add Freeze::clone
-rw-r--r--compiler/rustc_data_structures/src/sync/freeze.rs10
-rw-r--r--compiler/rustc_span/src/lib.rs10
2 files changed, 12 insertions, 8 deletions
diff --git a/compiler/rustc_data_structures/src/sync/freeze.rs b/compiler/rustc_data_structures/src/sync/freeze.rs
index ad71ae1af51..58ab91237f4 100644
--- a/compiler/rustc_data_structures/src/sync/freeze.rs
+++ b/compiler/rustc_data_structures/src/sync/freeze.rs
@@ -45,6 +45,16 @@ impl<T> FreezeLock<T> {
         }
     }
 
+    /// Clones the inner value along with the frozen state.
+    #[inline]
+    pub fn clone(&self) -> Self
+    where
+        T: Clone,
+    {
+        let lock = self.read();
+        Self::with(lock.clone(), self.is_frozen())
+    }
+
     #[inline]
     pub fn is_frozen(&self) -> bool {
         self.frozen.load(Ordering::Acquire)
diff --git a/compiler/rustc_span/src/lib.rs b/compiler/rustc_span/src/lib.rs
index 8976ee83c4e..3a869a2410a 100644
--- a/compiler/rustc_span/src/lib.rs
+++ b/compiler/rustc_span/src/lib.rs
@@ -1367,16 +1367,10 @@ impl Clone for SourceFile {
             name: self.name.clone(),
             src: self.src.clone(),
             src_hash: self.src_hash,
-            external_src: {
-                let lock = self.external_src.read();
-                FreezeLock::with(lock.clone(), self.external_src.is_frozen())
-            },
+            external_src: self.external_src.clone(),
             start_pos: self.start_pos,
             source_len: self.source_len,
-            lines: {
-                let lock = self.lines.read();
-                FreezeLock::with(lock.clone(), self.lines.is_frozen())
-            },
+            lines: self.lines.clone(),
             multibyte_chars: self.multibyte_chars.clone(),
             non_narrow_chars: self.non_narrow_chars.clone(),
             normalized_pos: self.normalized_pos.clone(),