File size: 2,219 Bytes
6b356c4 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 | #[macro_export]
#[doc(hidden)]
macro_rules! __unwrap {
($expr:expr) => {{
#[cfg(debug_assertions)]
#[allow(unused_unsafe)]
unsafe {
$expr.unwrap()
}
#[cfg(not(debug_assertions))]
unsafe {
$expr.unwrap_unchecked()
}
}};
}
#[macro_export]
#[doc(hidden)]
macro_rules! __unwrap_panic {
($result:expr) => {
match $result {
::core::result::Result::Ok(t) => t,
::core::result::Result::Err(e) => $crate::__panic(&e),
}
};
}
#[inline(never)]
#[cold]
#[doc(hidden)]
pub fn __panic(error: &dyn ::core::fmt::Display) -> ! { ::core::panic!("{error}") }
#[macro_export]
#[doc(hidden)]
macro_rules! __unreachable {
() => {{
#[cfg(debug_assertions)]
{
unreachable!()
}
#[cfg(not(debug_assertions))]
unsafe {
::core::hint::unreachable_unchecked()
}
}};
}
#[macro_export]
#[doc(hidden)]
macro_rules! __cold_path {
() => {
::core::hint::cold_path()
};
}
pub const LF: &[u8] = b"\n";
#[macro_export]
#[doc(hidden)]
macro_rules! __print {
($expr:expr) => {
$crate::_print($expr.as_bytes())
};
}
#[macro_export]
#[doc(hidden)]
macro_rules! __println {
() => {
$crate::_print($crate::LF)
};
($expr:expr) => {
$crate::_print($expr.as_bytes());
$crate::_print($crate::LF);
};
}
#[macro_export]
#[doc(hidden)]
macro_rules! __eprint {
($expr:expr) => {
$crate::_eprint($expr.as_bytes())
};
}
#[macro_export]
#[doc(hidden)]
macro_rules! __eprintln {
() => {
$crate::_eprint($crate::LF)
};
($expr:expr) => {
$crate::_eprint($expr.as_bytes());
$crate::_eprint($crate::LF);
};
}
fn print_to<T>(bytes: &'_ [u8], global_s: fn() -> T, label: &str)
where
T: std::io::Write,
{
if let Err(e) = global_s().write_all(bytes) {
panic!("failed printing to {label}: {e}");
}
}
#[doc(hidden)]
#[inline]
pub fn _print(bytes: &'_ [u8]) { print_to(bytes, std::io::stdout, "stdout"); }
#[doc(hidden)]
#[inline]
pub fn _eprint(bytes: &'_ [u8]) { print_to(bytes, std::io::stderr, "stderr"); }
|