diff options
| author | bors <bors@rust-lang.org> | 2013-11-24 19:07:44 -0800 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2013-11-24 19:07:44 -0800 |
| commit | 09eca11805fd523b569047d0ec257cfbf439a73c (patch) | |
| tree | f22ef10e7ad84533e25e0374a39424745376bf53 /src/libsyntax | |
| parent | 861cced1193b13be87c6098cca93264e15cac351 (diff) | |
| parent | 2431ac3080859e158f2a7379f939c40f27081ea7 (diff) | |
| download | rust-09eca11805fd523b569047d0ec257cfbf439a73c.tar.gz rust-09eca11805fd523b569047d0ec257cfbf439a73c.zip | |
auto merge of #10637 : luqmana/rust/nmt, r=cmr
There's no need for it to be @mut.
Diffstat (limited to 'src/libsyntax')
| -rw-r--r-- | src/libsyntax/diagnostic.rs | 53 |
1 files changed, 30 insertions, 23 deletions
diff --git a/src/libsyntax/diagnostic.rs b/src/libsyntax/diagnostic.rs index 15b82730629..bb908919678 100644 --- a/src/libsyntax/diagnostic.rs +++ b/src/libsyntax/diagnostic.rs @@ -12,6 +12,7 @@ use codemap::{Pos, Span}; use codemap; use std::io; +use std::io::stdio::StdWriter; use std::local_data; use extra::term; @@ -197,38 +198,44 @@ fn diagnosticcolor(lvl: level) -> term::color::Color { } fn print_maybe_styled(msg: &str, color: term::attr::Attr) { - local_data_key!(tls_terminal: @Option<term::Terminal>) + local_data_key!(tls_terminal: ~Option<term::Terminal<StdWriter>>) - let stderr = @mut io::stderr() as @mut io::Writer; fn is_stderr_screen() -> bool { use std::libc; unsafe { libc::isatty(libc::STDERR_FILENO) != 0 } } + fn write_pretty<T: Writer>(term: &mut term::Terminal<T>, s: &str, c: term::attr::Attr) { + term.attr(c); + term.write(s.as_bytes()); + term.reset(); + } if is_stderr_screen() { - let t = match local_data::get(tls_terminal, |v| v.map(|k| *k)) { - None => { - let t = term::Terminal::new(stderr); - let tls = @match t { - Ok(t) => Some(t), - Err(_) => None - }; - local_data::set(tls_terminal, tls); - &*tls + local_data::get_mut(tls_terminal, |term| { + match term { + Some(term) => { + match **term { + Some(ref mut term) => write_pretty(term, msg, color), + None => io::stderr().write(msg.as_bytes()) + } + } + None => { + let t = ~match term::Terminal::new(io::stderr()) { + Ok(mut term) => { + write_pretty(&mut term, msg, color); + Some(term) + } + Err(_) => { + io::stderr().write(msg.as_bytes()); + None + } + }; + local_data::set(tls_terminal, t); + } } - Some(tls) => &*tls - }; - - match t { - &Some(ref term) => { - term.attr(color); - write!(stderr, "{}", msg); - term.reset(); - }, - _ => write!(stderr, "{}", msg) - } + }); } else { - write!(stderr, "{}", msg); + io::stderr().write(msg.as_bytes()); } } |
