diff options
| author | Niko Matsakis <niko@alum.mit.edu> | 2012-12-05 15:13:24 -0800 |
|---|---|---|
| committer | Niko Matsakis <niko@alum.mit.edu> | 2013-01-08 15:41:53 -0800 |
| commit | c3a74d87bd5a8f8bd32350f74a3fa4fb1f9bf5e6 (patch) | |
| tree | d57ad7fd251f4dfbe2d43e32ca160372503e17a6 /src/libsyntax | |
| parent | 3b71d14442a1942ecf45fc4ac619f473e8367ae6 (diff) | |
| download | rust-c3a74d87bd5a8f8bd32350f74a3fa4fb1f9bf5e6.tar.gz rust-c3a74d87bd5a8f8bd32350f74a3fa4fb1f9bf5e6.zip | |
Implement GLB algorithm. (Issue #2263)
r=brson
Diffstat (limited to 'src/libsyntax')
| -rw-r--r-- | src/libsyntax/codemap.rs | 4 | ||||
| -rw-r--r-- | src/libsyntax/diagnostic.rs | 12 |
2 files changed, 14 insertions, 2 deletions
diff --git a/src/libsyntax/codemap.rs b/src/libsyntax/codemap.rs index b717d084789..1f26711abb9 100644 --- a/src/libsyntax/codemap.rs +++ b/src/libsyntax/codemap.rs @@ -315,6 +315,10 @@ pub impl CodeMap { } pub fn span_to_str(&self, sp: span) -> ~str { + if self.files.len() == 0 && sp == ast_util::dummy_sp() { + return ~"no-location"; + } + let lo = self.lookup_char_pos_adj(sp.lo); let hi = self.lookup_char_pos_adj(sp.hi); return fmt!("%s:%u:%u: %u:%u", lo.filename, diff --git a/src/libsyntax/diagnostic.rs b/src/libsyntax/diagnostic.rs index 71113a46838..ddffa04622f 100644 --- a/src/libsyntax/diagnostic.rs +++ b/src/libsyntax/diagnostic.rs @@ -17,9 +17,11 @@ use core::io; use core::option; use core::str; use core::vec; +use core::dvec::DVec; + use std::term; -export emitter, emit; +export emitter, collect, emit; export level, fatal, error, warning, note; export span_handler, handler, mk_span_handler, mk_handler; export codemap_span_handler, codemap_handler; @@ -143,7 +145,7 @@ fn mk_handler(emitter: Option<emitter>) -> handler { Some(e) => e, None => { let f = fn@(cmsp: Option<(@codemap::CodeMap, span)>, - msg: &str, t: level) { + msg: &str, t: level) { emit(cmsp, msg, t); }; f @@ -206,6 +208,12 @@ fn print_diagnostic(topic: ~str, lvl: level, msg: &str) { io::stderr().write_str(fmt!(" %s\n", msg)); } +fn collect(messages: @DVec<~str>) + -> fn@(Option<(@codemap::CodeMap, span)>, &str, level) +{ + |_o, msg: &str, _l| { messages.push(msg.to_str()); } +} + fn emit(cmsp: Option<(@codemap::CodeMap, span)>, msg: &str, lvl: level) { match cmsp { Some((cm, sp)) => { |
