]> git.lizzy.rs Git - rust.git/commitdiff
Replace RacyFlag with OnceCell
authorAleksey Kladov <aleksey.kladov@gmail.com>
Wed, 11 Nov 2020 02:11:40 +0000 (03:11 +0100)
committerAleksey Kladov <aleksey.kladov@gmail.com>
Wed, 11 Nov 2020 02:11:40 +0000 (03:11 +0100)
Cargo.lock
crates/hir_ty/Cargo.toml
crates/hir_ty/src/tests.rs
crates/stdx/src/lib.rs

index 1a4a63550d117a5609afea12dfedd988367da9f9..1ae6bed65497476f18318eb4e638cc879ffa694a 100644 (file)
@@ -612,6 +612,7 @@ dependencies = [
  "hir_expand",
  "itertools",
  "log",
+ "once_cell",
  "profile",
  "rustc-hash",
  "scoped-tls",
@@ -1053,9 +1054,9 @@ checksum = "8d3b63360ec3cb337817c2dbd47ab4a0f170d285d8e5a2064600f3def1402397"
 
 [[package]]
 name = "once_cell"
-version = "1.4.1"
+version = "1.5.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "260e51e7efe62b592207e9e13a68e43692a7a279171d6ba57abd208bf23645ad"
+checksum = "95c43eba5c640051fbde86a3377842386a94281df3ff0a5f0365c2075ed5c66f"
 
 [[package]]
 name = "oorandom"
index fdc65a5c3243b11f02127f3d8ab905196c3e55e4..cf5c38a23578cca3c262d0556cef52a83018cea1 100644 (file)
@@ -35,3 +35,4 @@ expect-test = "1.0"
 tracing = "0.1"
 tracing-subscriber = { version = "0.2", default-features = false, features = ["env-filter", "registry"] }
 tracing-tree = { version = "0.1.4" }
+once_cell = { version = "1.5.0", features = ["unstable"] }
index 104ef334c6897deb729185e81dd3e85f18963d0b..0a400cb705080e688e5805a695c74107e52f43f4 100644 (file)
@@ -22,7 +22,8 @@
     AssocItemId, DefWithBodyId, LocalModuleId, Lookup, ModuleDefId,
 };
 use hir_expand::{db::AstDatabase, InFile};
-use stdx::{format_to, RacyFlag};
+use once_cell::race::OnceBool;
+use stdx::format_to;
 use syntax::{
     algo,
     ast::{self, AstNode},
@@ -40,8 +41,8 @@
 // `env UPDATE_EXPECT=1 cargo test -p hir_ty` to update the snapshots.
 
 fn setup_tracing() -> Option<tracing::subscriber::DefaultGuard> {
-    static ENABLE: RacyFlag = RacyFlag::new();
-    if !ENABLE.get(|| env::var("CHALK_DEBUG").is_ok()) {
+    static ENABLE: OnceBool = OnceBool::new();
+    if !ENABLE.get_or_init(|| env::var("CHALK_DEBUG").is_ok()) {
         return None;
     }
 
index 59d89f47d1c2d9946f2bdd90030883be5e7934ab..374ed59105dbe524f574b96365a8277291045bb6 100644 (file)
@@ -1,8 +1,5 @@
 //! Missing batteries for standard libraries.
-use std::{
-    sync::atomic::{AtomicUsize, Ordering},
-    time::Instant,
-};
+use std::time::Instant;
 
 mod macros;
 pub mod panic_context;
@@ -150,31 +147,6 @@ pub fn partition_point<T, P>(slice: &[T], mut pred: P) -> usize
     left
 }
 
-pub struct RacyFlag(AtomicUsize);
-
-impl RacyFlag {
-    pub const fn new() -> RacyFlag {
-        RacyFlag(AtomicUsize::new(!0))
-    }
-
-    pub fn get(&self, init: impl FnMut() -> bool) -> bool {
-        let mut init = Some(init);
-        self.get_impl(&mut || init.take().map_or(false, |mut f| f()))
-    }
-
-    fn get_impl(&self, init: &mut dyn FnMut() -> bool) -> bool {
-        match self.0.load(Ordering::Relaxed) {
-            0 => false,
-            1 => true,
-            _ => {
-                let res = init();
-                self.0.store(if res { 1 } else { 0 }, Ordering::Relaxed);
-                res
-            }
-        }
-    }
-}
-
 #[cfg(test)]
 mod tests {
     use super::*;