#[cfg(target_os = "none")]
#[macro_export]
macro_rules! print {
($($arg:tt)*) => {{
$crate::console::_print(::core::format_args!($($arg)*));
}};
}
#[cfg(target_os = "none")]
#[macro_export]
macro_rules! println {
() => {
$crate::print!("\n")
};
($($arg:tt)*) => {{
$crate::console::_print(::core::format_args!("{}\n", format_args!($($arg)*)));
}};
}
#[cfg(target_os = "none")]
#[macro_export]
macro_rules! panic_println {
() => {{
$crate::console::_panic_print(::core::format_args!("\n"));
}};
($($arg:tt)*) => {{
$crate::console::_panic_print(::core::format_args!("{}\n", format_args!($($arg)*)));
}};
}
#[cfg(not(target_os = "none"))]
#[macro_export]
macro_rules! panic_println {
($($arg:tt)*) => {
println!($($arg)*);
};
}
#[cfg(target_os = "none")]
#[macro_export]
macro_rules! dbg {
() => {
$crate::println!("[{}:{}]", ::core::file!(), ::core::line!())
};
($val:expr $(,)?) => {
match $val {
tmp => {
$crate::println!("[{}:{}] {} = {:#?}",
::core::file!(), ::core::line!(), ::core::stringify!($val), &tmp);
tmp
}
}
};
($($val:expr),+ $(,)?) => {
($($crate::dbg!($val)),+,)
};
}
#[allow(unused_macro_rules)]
#[cfg(not(any(
target_arch = "riscv64",
all(target_arch = "x86_64", feature = "newlib"),
feature = "common-os"
)))]
macro_rules! kernel_function {
($f:ident()) => {{
use $crate::errno::ToErrno;
if false {
$f();
}
#[allow(unreachable_code)]
#[allow(unused_unsafe)]
unsafe {
$crate::arch::switch::kernel_function0($f).set_errno()
}
}};
($f:ident($arg1:expr)) => {{
use $crate::errno::ToErrno;
if false {
$f($arg1);
}
#[allow(unreachable_code)]
#[allow(unused_unsafe)]
unsafe {
$crate::arch::switch::kernel_function1($f, $arg1).set_errno()
}
}};
($f:ident($arg1:expr, $arg2:expr)) => {{
use $crate::errno::ToErrno;
if false {
$f($arg1, $arg2);
}
#[allow(unreachable_code)]
#[allow(unused_unsafe)]
unsafe {
$crate::arch::switch::kernel_function2($f, $arg1, $arg2).set_errno()
}
}};
($f:ident($arg1:expr, $arg2:expr, $arg3:expr)) => {{
use $crate::errno::ToErrno;
if false {
$f($arg1, $arg2, $arg3);
}
#[allow(unreachable_code)]
#[allow(unused_unsafe)]
unsafe {
$crate::arch::switch::kernel_function3($f, $arg1, $arg2, $arg3).set_errno()
}
}};
($f:ident($arg1:expr, $arg2:expr, $arg3:expr, $arg4:expr)) => {{
use $crate::errno::ToErrno;
if false {
$f($arg1, $arg2, $arg3, $arg4);
}
#[allow(unreachable_code)]
#[allow(unused_unsafe)]
unsafe {
$crate::arch::switch::kernel_function4($f, $arg1, $arg2, $arg3, $arg4).set_errno()
}
}};
($f:ident($arg1:expr, $arg2:expr, $arg3:expr, $arg4:expr, $arg5:expr)) => {{
use $crate::errno::ToErrno;
if false {
$f($arg1, $arg2, $arg3, $arg4, $arg5);
}
#[allow(unreachable_code)]
#[allow(unused_unsafe)]
unsafe {
$crate::arch::switch::kernel_function5($f, $arg1, $arg2, $arg3, $arg4, $arg5)
.set_errno()
}
}};
($f:ident($arg1:expr, $arg2:expr, $arg3:expr, $arg4:expr, $arg5:expr, $arg6:expr)) => {{
use $crate::errno::ToErrno;
if false {
$f($arg1, $arg2, $arg3, $arg4, $arg5, $arg6);
}
#[allow(unreachable_code)]
#[allow(unused_unsafe)]
unsafe {
$crate::arch::switch::kernel_function6($f, $arg1, $arg2, $arg3, $arg4, $arg5, $arg6)
.set_errno()
}
}};
}
#[cfg(any(
target_arch = "riscv64",
all(target_arch = "x86_64", feature = "newlib"),
feature = "common-os"
))]
macro_rules! kernel_function {
($f:ident($($x:tt)*)) => {{
use $crate::errno::ToErrno;
#[allow(unreachable_code)]
$f($($x)*).set_errno()
}};
}
#[allow(unused_macros)]
macro_rules! hermit_var {
($name:expr) => {{
use alloc::borrow::Cow;
match crate::env::var($name) {
Some(val) => Some(Cow::from(val)),
None => option_env!($name).map(Cow::Borrowed),
}
}};
}
#[allow(unused_macros)]
macro_rules! hermit_var_or {
($name:expr, $default:expr) => {
hermit_var!($name).as_deref().unwrap_or($default)
};
}