use std::sync::{Mutex, MutexGuard, OnceLock};
fn lock() -> &'static Mutex<()> {
static LOCK: OnceLock<Mutex<()>> = OnceLock::new();
LOCK.get_or_init(|| Mutex::new(()))
}
pub fn global_state_lock() -> MutexGuard<'static, ()> {
let g = match lock().lock() {
Ok(g) => g,
Err(poisoned) => poisoned.into_inner(),
};
crate::ported::options::opt_state_set("exec", true);
crate::ported::options::opt_state_set("promptpercent", true);
crate::ported::options::opt_state_set("promptbang", true);
crate::ported::utils::inittyptab();
crate::ported::utils::errflag.store(0, std::sync::atomic::Ordering::Relaxed);
crate::ported::options::opt_state_set("octalzeroes", false);
crate::ported::options::opt_state_set("cbases", false);
crate::ported::options::opt_state_set("ksharrays", false);
crate::ported::options::opt_state_set("casematch", true);
crate::ported::options::emulation
.store(crate::ported::zsh_h::EMULATE_ZSH, std::sync::atomic::Ordering::Relaxed);
if let Ok(mut tab) = crate::ported::hashtable::reswdtab_lock().write() {
tab.enable("repeat");
}
g
}