librustc: Remove the remaining direct uses of @fn from librustc.

This commit is contained in:
Patrick Walton 2013-08-29 18:34:09 -07:00
parent 1676e77db2
commit 37c32e2495
4 changed files with 84 additions and 58 deletions

View file

@ -15,9 +15,12 @@ use std::io;
use std::local_data;
use extra::term;
pub type Emitter = @fn(cmsp: Option<(@codemap::CodeMap, Span)>,
msg: &str,
lvl: level);
pub trait Emitter {
fn emit(&self,
cmsp: Option<(@codemap::CodeMap, Span)>,
msg: &str,
lvl: level);
}
// a handler deals with errors; certain errors
// (fatal, bug, unimpl) may cause immediate exit,
@ -55,7 +58,7 @@ pub trait span_handler {
struct HandlerT {
err_count: uint,
emit: Emitter,
emit: @Emitter,
}
struct CodemapT {
@ -91,11 +94,11 @@ impl span_handler for CodemapT {
impl handler for HandlerT {
fn fatal(@mut self, msg: &str) -> ! {
(self.emit)(None, msg, fatal);
self.emit.emit(None, msg, fatal);
fail!();
}
fn err(@mut self, msg: &str) {
(self.emit)(None, msg, error);
self.emit.emit(None, msg, error);
self.bump_err_count();
}
fn bump_err_count(@mut self) {
@ -120,10 +123,10 @@ impl handler for HandlerT {
self.fatal(s);
}
fn warn(@mut self, msg: &str) {
(self.emit)(None, msg, warning);
self.emit.emit(None, msg, warning);
}
fn note(@mut self, msg: &str) {
(self.emit)(None, msg, note);
self.emit.emit(None, msg, note);
}
fn bug(@mut self, msg: &str) -> ! {
self.fatal(ice_msg(msg));
@ -135,7 +138,7 @@ impl handler for HandlerT {
cmsp: Option<(@codemap::CodeMap, Span)>,
msg: &str,
lvl: level) {
(self.emit)(cmsp, msg, lvl);
self.emit.emit(cmsp, msg, lvl);
}
}
@ -145,19 +148,22 @@ pub fn ice_msg(msg: &str) -> ~str {
pub fn mk_span_handler(handler: @mut handler, cm: @codemap::CodeMap)
-> @mut span_handler {
@mut CodemapT { handler: handler, cm: cm } as @mut span_handler
@mut CodemapT {
handler: handler,
cm: cm,
} as @mut span_handler
}
pub fn mk_handler(emitter: Option<Emitter>) -> @mut handler {
let emit: Emitter = match emitter {
pub fn mk_handler(emitter: Option<@Emitter>) -> @mut handler {
let emit: @Emitter = match emitter {
Some(e) => e,
None => {
let emit: Emitter = |cmsp, msg, t| emit(cmsp, msg, t);
emit
}
None => @DefaultEmitter as @Emitter
};
@mut HandlerT { err_count: 0, emit: emit } as @mut handler
@mut HandlerT {
err_count: 0,
emit: emit,
} as @mut handler
}
#[deriving(Eq)]
@ -237,24 +243,30 @@ pub fn collect(messages: @mut ~[~str])
f
}
pub fn emit(cmsp: Option<(@codemap::CodeMap, Span)>, msg: &str, lvl: level) {
match cmsp {
Some((cm, sp)) => {
let sp = cm.adjust_span(sp);
let ss = cm.span_to_str(sp);
let lines = cm.span_to_lines(sp);
print_diagnostic(ss, lvl, msg);
highlight_lines(cm, sp, lvl, lines);
print_macro_backtrace(cm, sp);
}
None => {
print_diagnostic("", lvl, msg);
}
pub struct DefaultEmitter;
impl Emitter for DefaultEmitter {
fn emit(&self,
cmsp: Option<(@codemap::CodeMap, Span)>,
msg: &str,
lvl: level) {
match cmsp {
Some((cm, sp)) => {
let sp = cm.adjust_span(sp);
let ss = cm.span_to_str(sp);
let lines = cm.span_to_lines(sp);
print_diagnostic(ss, lvl, msg);
highlight_lines(cm, sp, lvl, lines);
print_macro_backtrace(cm, sp);
}
None => print_diagnostic("", lvl, msg),
}
}
}
fn highlight_lines(cm: @codemap::CodeMap,
sp: Span, lvl: level,
sp: Span,
lvl: level,
lines: @codemap::FileLines) {
let fm = lines.file;

View file

@ -45,7 +45,7 @@ pub struct ParseSess {
included_mod_stack: ~[Path],
}
pub fn new_parse_sess(demitter: Option<Emitter>) -> @mut ParseSess {
pub fn new_parse_sess(demitter: Option<@Emitter>) -> @mut ParseSess {
let cm = @CodeMap::new();
@mut ParseSess {
cm: cm,