+#![cfg_attr(test, allow(unused))]
+
use crate::io::prelude::*;
use crate::cell::RefCell;
}
}
+/// Stderr used by eprint! and eprintln! macros, and panics
+thread_local! {
+ static LOCAL_STDERR: RefCell<Option<Box<dyn Write + Send>>> = {
+ RefCell::new(None)
+ }
+}
+
/// A handle to a raw instance of the standard input stream of this process.
///
/// This handle is not synchronized or buffered in any fashion. Constructed via
issue = "0")]
#[doc(hidden)]
pub fn set_panic(sink: Option<Box<dyn Write + Send>>) -> Option<Box<dyn Write + Send>> {
- use crate::panicking::LOCAL_STDERR;
use crate::mem;
LOCAL_STDERR.with(move |slot| {
mem::replace(&mut *slot.borrow_mut(), sink)
reason = "implementation detail which may disappear or be replaced at any time",
issue = "0")]
#[doc(hidden)]
+#[cfg(not(test))]
pub fn _print(args: fmt::Arguments) {
print_to(args, &LOCAL_STDOUT, stdout, "stdout");
}
reason = "implementation detail which may disappear or be replaced at any time",
issue = "0")]
#[doc(hidden)]
+#[cfg(not(test))]
pub fn _eprint(args: fmt::Arguments) {
- use crate::panicking::LOCAL_STDERR;
print_to(args, &LOCAL_STDERR, stderr, "stderr");
}
+#[cfg(test)]
+pub use realstd::io::{_eprint, _print};
+
#[cfg(test)]
mod tests {
use crate::panic::{UnwindSafe, RefUnwindSafe};