提交 a3e39b94 编写于 作者: A Alex Crichton

Introduce alternate forms of logging

These new macros are all based on format! instead of fmt! and purely exist for
bootstrapping purposes. After the next snapshot, all uses of logging will be
migrated to these macros, and then after the next snapshot after that we can
drop the `2` suffix on everything
上级 eb836dd6
......@@ -758,32 +758,32 @@ pub fn std_macros() -> @str {
)
)
// conditionally define debug!, but keep it type checking even
// in non-debug builds.
macro_rules! __debug (
macro_rules! debug (
($arg:expr) => (
__log(4u32, fmt!( \"%?\", $arg ))
if cfg!(debug) { __log(4u32, fmt!( \"%?\", $arg )) }
);
($( $arg:expr ),+) => (
__log(4u32, fmt!( $($arg),+ ))
if cfg!(debug) { __log(4u32, fmt!( $($arg),+ )) }
)
)
#[cfg(debug)]
#[macro_escape]
mod debug_macro {
macro_rules! debug (($($arg:expr),*) => {
__debug!($($arg),*)
})
}
macro_rules! error2 (
($($arg:tt)*) => ( __log(1u32, format!($($arg)*)))
)
#[cfg(not(debug))]
#[macro_escape]
mod debug_macro {
macro_rules! debug (($($arg:expr),*) => {
if false { __debug!($($arg),*) }
})
}
macro_rules! warn2 (
($($arg:tt)*) => ( __log(2u32, format!($($arg)*)))
)
macro_rules! info2 (
($($arg:tt)*) => ( __log(3u32, format!($($arg)*)))
)
macro_rules! debug2 (
($($arg:tt)*) => (
if cfg!(debug) { __log(4u32, format!($($arg)*)) }
)
)
macro_rules! fail(
() => (
......@@ -797,6 +797,15 @@ mod debug_macro {
)
)
macro_rules! fail2(
() => (
fail!(\"explicit failure\")
);
($($arg:tt)+) => (
::std::sys::FailWithCause::fail_with(format!($($arg)+), file!(), line!())
)
)
macro_rules! assert(
($cond:expr) => {
if !$cond {
......@@ -964,15 +973,13 @@ pub mod $c {
// allocation but should rather delegate to an invocation of
// write! instead of format!
macro_rules! print (
() => ();
($arg:expr) => ( ::std::io::print(format!(\"{}\", $arg)));
($fmt:expr, $($arg:tt)+) => ( ::std::io::print(format!($fmt, $($arg)+)))
($($arg:tt)+) => ( ::std::io::print(format!($($arg)+)))
)
// FIXME(#6846) once stdio is redesigned, this shouldn't perform an
// allocation but should rather delegate to an io::Writer
macro_rules! println (
($($arg:tt)*) => ({ print!($($arg)*); ::std::io::println(\"\"); })
($($arg:tt)+) => ({ print!($($arg)+); ::std::io::println(\"\"); })
)
// NOTE: use this after a snapshot lands to abstract the details
......
......@@ -240,7 +240,7 @@ fn test_write() {
// Just make sure that the macros are defined, there's not really a lot that we
// can do with them just yet (to test the output)
fn test_print() {
print!(1);
print!("hi");
print!("{:?}", ~[0u8]);
println!("hello");
println!("this is a {}", "test");
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册