about summary refs log tree commit diff
path: root/src/libsyntax
diff options
context:
space:
mode:
authorNiko Matsakis <niko@alum.mit.edu>2012-12-05 15:13:24 -0800
committerNiko Matsakis <niko@alum.mit.edu>2013-01-08 15:41:53 -0800
commitc3a74d87bd5a8f8bd32350f74a3fa4fb1f9bf5e6 (patch)
treed57ad7fd251f4dfbe2d43e32ca160372503e17a6 /src/libsyntax
parent3b71d14442a1942ecf45fc4ac619f473e8367ae6 (diff)
downloadrust-c3a74d87bd5a8f8bd32350f74a3fa4fb1f9bf5e6.tar.gz
rust-c3a74d87bd5a8f8bd32350f74a3fa4fb1f9bf5e6.zip
Implement GLB algorithm. (Issue #2263)
r=brson
Diffstat (limited to 'src/libsyntax')
-rw-r--r--src/libsyntax/codemap.rs4
-rw-r--r--src/libsyntax/diagnostic.rs12
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)) => {