about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorBrian Anderson <banderson@mozilla.com>2012-01-13 17:14:52 -0800
committerBrian Anderson <banderson@mozilla.com>2012-01-13 22:07:55 -0800
commite90701c546fbdfdccd12aea72f8c084642caef5f (patch)
tree6f1fa153513c84046bf8af5434d7c601e74aa558 /src
parent2e69c2966088f9828a321eb5aa71fdf64b19eb5f (diff)
downloadrust-e90701c546fbdfdccd12aea72f8c084642caef5f.tar.gz
rust-e90701c546fbdfdccd12aea72f8c084642caef5f.zip
rustc: Replace parser's error handling with diagnostic impl
Diffstat (limited to 'src')
-rw-r--r--src/comp/driver/driver.rs9
-rw-r--r--src/comp/syntax/parse/parser.rs19
2 files changed, 17 insertions, 11 deletions
diff --git a/src/comp/driver/driver.rs b/src/comp/driver/driver.rs
index af911e06646..f620e9dec22 100644
--- a/src/comp/driver/driver.rs
+++ b/src/comp/driver/driver.rs
@@ -452,14 +452,19 @@ fn build_session(sopts: @session::options, input: str) -> session::session {
         sopts.target_triple,
         sopts.addl_lib_search_paths);
     let codemap = codemap::new_codemap();
+    let diagnostic_handler = diagnostic::mk_codemap_handler(codemap);
     @{targ_cfg: target_cfg,
       opts: sopts,
       cstore: cstore,
-      parse_sess: @{cm: codemap, mutable next_id: 1},
+      parse_sess: @{
+          cm: codemap,
+          mutable next_id: 1,
+          diagnostic: diagnostic_handler
+      },
       codemap: codemap,
       // For a library crate, this is always none
       mutable main_fn: none,
-      diagnostic: diagnostic::mk_codemap_handler(codemap),
+      diagnostic: diagnostic_handler,
       filesearch: filesearch,
       mutable building_library: false,
       working_dir: fs::dirname(input)}
diff --git a/src/comp/syntax/parse/parser.rs b/src/comp/syntax/parse/parser.rs
index 097ac8e7162..deb96a131f0 100644
--- a/src/comp/syntax/parse/parser.rs
+++ b/src/comp/syntax/parse/parser.rs
@@ -21,7 +21,11 @@ tag restriction {
 
 tag file_type { CRATE_FILE; SOURCE_FILE; }
 
-type parse_sess = @{cm: codemap::codemap, mutable next_id: node_id};
+type parse_sess = @{
+    cm: codemap::codemap,
+    mutable next_id: node_id,
+    diagnostic: diagnostic::handler
+};
 
 fn next_node_id(sess: parse_sess) -> node_id {
     let rv = sess.next_id;
@@ -69,14 +73,13 @@ impl parser for parser {
         ret self.buffer[distance - 1u].tok;
     }
     fn fatal(m: str) -> ! {
-        self.span_fatal(self.span, m);
+        self.sess.diagnostic.span_fatal(self.span, m)
     }
     fn span_fatal(sp: span, m: str) -> ! {
-        diagnostic::emit_error(some((self.sess.cm, sp)), m);
-        fail;
+        self.sess.diagnostic.span_fatal(sp, m)
     }
     fn warn(m: str) {
-        diagnostic::emit_warning(some((self.sess.cm, self.span)), m);
+        self.sess.diagnostic.span_warn(self.span, m)
     }
     fn get_str(i: token::str_num) -> str {
         interner::get(*self.reader.interner, i)
@@ -93,8 +96,7 @@ fn new_parser_from_file(sess: parse_sess, cfg: ast::crate_cfg, path: str,
         src
       }
       result::err(e) {
-        diagnostic::emit_error(none, e);
-        fail;
+        sess.diagnostic.fatal(e)
       }
     };
     let filemap = codemap::new_filemap(path, chpos, byte_pos);
@@ -2526,8 +2528,7 @@ fn parse_crate_from_file(input: str, cfg: ast::crate_cfg, sess: parse_sess) ->
     } else if str::ends_with(input, ".rs") {
         parse_crate_from_source_file(input, cfg, sess)
     } else {
-        diagnostic::emit_error(none, "unknown input file type: " + input);
-        fail
+        sess.diagnostic.fatal("unknown input file type: " + input)
     }
 }