From 731f7bfc020a69ca277921c3d17a57fdcf0d7cc1 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Wed, 11 Nov 2020 03:11:40 +0100 Subject: Replace RacyFlag with OnceCell --- crates/hir_ty/Cargo.toml | 1 + crates/hir_ty/src/tests.rs | 7 ++++--- crates/stdx/src/lib.rs | 30 +----------------------------- 3 files changed, 6 insertions(+), 32 deletions(-) (limited to 'crates') diff --git a/crates/hir_ty/Cargo.toml b/crates/hir_ty/Cargo.toml index fdc65a5c3..cf5c38a23 100644 --- a/crates/hir_ty/Cargo.toml +++ b/crates/hir_ty/Cargo.toml @@ -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"] } diff --git a/crates/hir_ty/src/tests.rs b/crates/hir_ty/src/tests.rs index 104ef334c..0a400cb70 100644 --- a/crates/hir_ty/src/tests.rs +++ b/crates/hir_ty/src/tests.rs @@ -22,7 +22,8 @@ use hir_def::{ 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 @@ use crate::{ // `env UPDATE_EXPECT=1 cargo test -p hir_ty` to update the snapshots. fn setup_tracing() -> Option { - 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; } diff --git a/crates/stdx/src/lib.rs b/crates/stdx/src/lib.rs index 59d89f47d..374ed5910 100644 --- a/crates/stdx/src/lib.rs +++ b/crates/stdx/src/lib.rs @@ -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 @@ where 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::*; -- cgit v1.2.3