#[allow(dead_code)]
pub(crate) unsafe fn is_ruby_vm_started() -> bool {
#[cfg(ruby_engine = "mri")]
let ret = {
#[cfg(all(ruby_gt_2_4, ruby_lte_3_2))]
let ret = !crate::hidden::ruby_current_vm_ptr.is_null();
#[cfg(any(ruby_lte_2_4, ruby_gt_3_2))]
let ret = crate::rb_cBasicObject != 0;
ret
};
#[cfg(ruby_engine = "truffleruby")]
let ret = crate::rb_cBasicObject != 0;
ret
}
#[macro_export]
macro_rules! debug_ruby_assert_type {
($obj:expr, $type:expr, $message:expr) => {
#[cfg(ruby_ruby_debug = "true")]
{
#[allow(clippy::macro_metavars_in_unsafe)]
unsafe {
assert!(
!$crate::SPECIAL_CONST_P($obj) && $crate::RB_BUILTIN_TYPE($obj) == $type,
$message
);
}
}
#[cfg(not(ruby_ruby_debug = "true"))]
{
let _ = ($obj, $type, $message); }
};
}
#[cfg(test)]
mod tests {
use super::*;
use rusty_fork::rusty_fork_test;
use std::ptr::addr_of_mut;
rusty_fork_test! {
#[test]
fn test_is_ruby_vm_started() {
assert!(!unsafe { is_ruby_vm_started() });
let mut argc = 0;
let mut argv: [*mut std::os::raw::c_char; 0] = [];
let mut argv_ptr = argv.as_mut_ptr();
unsafe { crate::ruby_sysinit(&mut argc, &mut argv_ptr) };
let mut stack_marker: crate::VALUE = 0;
unsafe { crate::ruby_init_stack(addr_of_mut!(stack_marker) as *mut _) };
match unsafe { crate::ruby_setup() } {
0 => {}
code => panic!("Failed to setup Ruby (error code: {})", code),
};
assert!(unsafe { is_ruby_vm_started() });
}
}
}