about summary refs log tree commit diff
path: root/src/comp/syntax/parse
diff options
context:
space:
mode:
authorBrian Anderson <banderson@mozilla.com>2012-01-13 17:22:15 -0800
committerBrian Anderson <banderson@mozilla.com>2012-01-13 22:07:55 -0800
commitf4bd03b99837442c519e71625c9135a27f1dcc1b (patch)
treef7fdb65fb24a7f222ddb1a25097edd87479c8e86 /src/comp/syntax/parse
parente90701c546fbdfdccd12aea72f8c084642caef5f (diff)
downloadrust-f4bd03b99837442c519e71625c9135a27f1dcc1b.tar.gz
rust-f4bd03b99837442c519e71625c9135a27f1dcc1b.zip
rustc: Replace the lexer's error handling with diagnostic impl
Diffstat (limited to 'src/comp/syntax/parse')
-rw-r--r--src/comp/syntax/parse/lexer.rs20
-rw-r--r--src/comp/syntax/parse/parser.rs6
2 files changed, 18 insertions, 8 deletions
diff --git a/src/comp/syntax/parse/lexer.rs b/src/comp/syntax/parse/lexer.rs
index cc0850d88b0..18fb155dc84 100644
--- a/src/comp/syntax/parse/lexer.rs
+++ b/src/comp/syntax/parse/lexer.rs
@@ -10,6 +10,7 @@ import driver::diagnostic;
 
 type reader = @{
     cm: codemap::codemap,
+    diagnostic: diagnostic::handler,
     src: str,
     len: uint,
     mutable col: uint,
@@ -48,14 +49,18 @@ impl reader for reader {
         } else { self.curr = -1 as char; }
     }
     fn err(m: str) {
-        diagnostic::emit_error(
-            some((self.cm, ast_util::mk_sp(self.chpos, self.chpos))), m);
+        self.diagnostic.span_err(
+            ast_util::mk_sp(self.chpos, self.chpos),
+            m);
     }
 }
 
-fn new_reader(cm: codemap::codemap, src: str, filemap: codemap::filemap,
+fn new_reader(cm: codemap::codemap,
+              diagnostic: diagnostic::handler,
+              src: str, filemap: codemap::filemap,
               itr: @interner::interner<str>) -> reader {
-    let r = @{cm: cm, src: src, len: str::byte_len(src),
+    let r = @{cm: cm, diagnostic: diagnostic,
+              src: src, len: str::byte_len(src),
               mutable col: 0u, mutable pos: 0u, mutable curr: -1 as char,
               mutable chpos: filemap.start_pos.ch, mutable strs: [],
               filemap: filemap, interner: itr};
@@ -666,12 +671,15 @@ fn is_lit(t: token::token) -> bool {
 
 type lit = {lit: str, pos: uint};
 
-fn gather_comments_and_literals(cm: codemap::codemap, path: str,
+fn gather_comments_and_literals(cm: codemap::codemap,
+                                diagnostic: diagnostic::handler,
+                                path: str,
                                 srdr: io::reader) ->
    {cmnts: [cmnt], lits: [lit]} {
     let src = str::unsafe_from_bytes(srdr.read_whole_stream());
     let itr = @interner::mk::<str>(str::hash, str::eq);
-    let rdr = new_reader(cm, src, codemap::new_filemap(path, 0u, 0u), itr);
+    let rdr = new_reader(cm, diagnostic, src,
+                         codemap::new_filemap(path, 0u, 0u), itr);
     let comments: [cmnt] = [];
     let literals: [lit] = [];
     let first_read: bool = true;
diff --git a/src/comp/syntax/parse/parser.rs b/src/comp/syntax/parse/parser.rs
index deb96a131f0..30f2ab6d371 100644
--- a/src/comp/syntax/parse/parser.rs
+++ b/src/comp/syntax/parse/parser.rs
@@ -102,7 +102,8 @@ fn new_parser_from_file(sess: parse_sess, cfg: ast::crate_cfg, path: str,
     let filemap = codemap::new_filemap(path, chpos, byte_pos);
     sess.cm.files += [filemap];
     let itr = @interner::mk(str::hash, str::eq);
-    let rdr = lexer::new_reader(sess.cm, src, filemap, itr);
+    let rdr = lexer::new_reader(sess.cm, sess.diagnostic,
+                                src, filemap, itr);
     ret new_parser(sess, cfg, rdr, ftype);
 }
 
@@ -112,7 +113,8 @@ fn new_parser_from_source_str(sess: parse_sess, cfg: ast::crate_cfg,
     let filemap = codemap::new_filemap(name, 0u, 0u);
     sess.cm.files += [filemap];
     let itr = @interner::mk(str::hash, str::eq);
-    let rdr = lexer::new_reader(sess.cm, source, filemap, itr);
+    let rdr = lexer::new_reader(sess.cm, sess.diagnostic,
+                                source, filemap, itr);
     ret new_parser(sess, cfg, rdr, ftype);
 }