"hir_expand",
"itertools",
"log",
+ "once_cell",
"profile",
"rustc-hash",
"scoped-tls",
[[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"
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"] }
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},
// `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;
}
//! Missing batteries for standard libraries.
-use std::{
- sync::atomic::{AtomicUsize, Ordering},
- time::Instant,
-};
+use std::time::Instant;
mod macros;
pub mod panic_context;
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::*;