From 4704f6d54108bcc8f9b2fb7f4b3c4e224b4a7809 Mon Sep 17 00:00:00 2001 From: 魏曹先生 <1992414357@qq.com> Date: Thu, 21 May 2026 15:02:50 +0800 Subject: Remove `once_cell` dependency and replace with `OnceLock` --- mingling_macros/src/lib.rs | 58 +++++++++++++++++++++++----------------------- 1 file changed, 29 insertions(+), 29 deletions(-) (limited to 'mingling_macros/src/lib.rs') diff --git a/mingling_macros/src/lib.rs b/mingling_macros/src/lib.rs index badb117..29c46b4 100644 --- a/mingling_macros/src/lib.rs +++ b/mingling_macros/src/lib.rs @@ -17,12 +17,12 @@ //! - **Internal registration**: `register_type!`, `register_chain!`, `register_renderer!`, //! `program_fallback_gen!`, `program_final_gen!`, `program_comp_gen!` -use once_cell::sync::Lazy; use proc_macro::TokenStream; use proc_macro2::Ident; use quote::quote; use std::collections::BTreeSet; use std::sync::Mutex; +use std::sync::OnceLock; use syn::parse_macro_input; mod chain; @@ -55,29 +55,26 @@ pub(crate) fn default_program_path() -> proc_macro2::TokenStream { quote::quote! { crate::ThisProgram } } +// Helper to get or init a OnceLock>> +pub(crate) fn get_global_set(lock: &OnceLock>>) -> &Mutex> { + lock.get_or_init(|| Mutex::new(BTreeSet::new())) +} + // Global variables #[cfg(feature = "general_renderer")] -pub(crate) static GENERAL_RENDERERS: Lazy>> = - Lazy::new(|| Mutex::new(BTreeSet::new())); +pub(crate) static GENERAL_RENDERERS: OnceLock>> = OnceLock::new(); #[cfg(feature = "comp")] -pub(crate) static COMPLETIONS: Lazy>> = - Lazy::new(|| Mutex::new(BTreeSet::new())); +pub(crate) static COMPLETIONS: OnceLock>> = OnceLock::new(); #[cfg(feature = "dispatch_tree")] -pub(crate) static COMPILE_TIME_DISPATCHERS: Lazy>> = - Lazy::new(|| Mutex::new(BTreeSet::new())); - -pub(crate) static PACKED_TYPES: Lazy>> = - Lazy::new(|| Mutex::new(BTreeSet::new())); -pub(crate) static CHAINS: Lazy>> = Lazy::new(|| Mutex::new(BTreeSet::new())); -pub(crate) static RENDERERS: Lazy>> = - Lazy::new(|| Mutex::new(BTreeSet::new())); -pub(crate) static CHAINS_EXIST: Lazy>> = - Lazy::new(|| Mutex::new(BTreeSet::new())); -pub(crate) static RENDERERS_EXIST: Lazy>> = - Lazy::new(|| Mutex::new(BTreeSet::new())); -pub(crate) static HELP_REQUESTS: Lazy>> = - Lazy::new(|| Mutex::new(BTreeSet::new())); +pub(crate) static COMPILE_TIME_DISPATCHERS: OnceLock>> = OnceLock::new(); + +pub(crate) static PACKED_TYPES: OnceLock>> = OnceLock::new(); +pub(crate) static CHAINS: OnceLock>> = OnceLock::new(); +pub(crate) static RENDERERS: OnceLock>> = OnceLock::new(); +pub(crate) static CHAINS_EXIST: OnceLock>> = OnceLock::new(); +pub(crate) static RENDERERS_EXIST: OnceLock>> = OnceLock::new(); +pub(crate) static HELP_REQUESTS: OnceLock>> = OnceLock::new(); /// Checks that a TypePath is a simple single-segment identifier (no `::` in the path). /// @@ -1137,7 +1134,10 @@ pub fn register_type(input: TokenStream) -> TokenStream { let type_ident = parse_macro_input!(input as syn::Ident); let entry_str = type_ident.to_string(); - PACKED_TYPES.lock().unwrap().insert(entry_str); + get_global_set(&PACKED_TYPES) + .lock() + .unwrap() + .insert(entry_str); TokenStream::new() } @@ -1280,18 +1280,18 @@ pub fn program_fallback_gen(input: TokenStream) -> TokenStream { pub fn program_final_gen(input: TokenStream) -> TokenStream { let name = read_name(&input); - let packed_types = PACKED_TYPES.lock().unwrap().clone(); + let packed_types = get_global_set(&PACKED_TYPES).lock().unwrap().clone(); - let renderers = RENDERERS.lock().unwrap().clone(); - let chains = CHAINS.lock().unwrap().clone(); - let renderer_exist = RENDERERS_EXIST.lock().unwrap().clone(); - let chain_exist = CHAINS_EXIST.lock().unwrap().clone(); + let renderers = get_global_set(&RENDERERS).lock().unwrap().clone(); + let chains = get_global_set(&CHAINS).lock().unwrap().clone(); + let renderer_exist = get_global_set(&RENDERERS_EXIST).lock().unwrap().clone(); + let chain_exist = get_global_set(&CHAINS_EXIST).lock().unwrap().clone(); #[cfg(feature = "general_renderer")] - let general_renderers = GENERAL_RENDERERS.lock().unwrap().clone(); + let general_renderers = get_global_set(&GENERAL_RENDERERS).lock().unwrap().clone(); #[cfg(feature = "comp")] - let completions = COMPLETIONS.lock().unwrap().clone(); + let completions = get_global_set(&COMPLETIONS).lock().unwrap().clone(); let packed_types: Vec = packed_types .iter() @@ -1341,7 +1341,7 @@ pub fn program_final_gen(input: TokenStream) -> TokenStream { let general_render = quote! {}; #[cfg(feature = "dispatch_tree")] - let compile_time_dispatchers: Vec = COMPILE_TIME_DISPATCHERS + let compile_time_dispatchers: Vec = get_global_set(&COMPILE_TIME_DISPATCHERS) .lock() .unwrap() .clone() @@ -1398,7 +1398,7 @@ pub fn program_final_gen(input: TokenStream) -> TokenStream { #[cfg(not(feature = "comp"))] let comp = quote! {}; - let help_tokens: Vec = HELP_REQUESTS + let help_tokens: Vec = get_global_set(&HELP_REQUESTS) .lock() .unwrap() .clone() -- cgit