Skip to content

Commit cbd5d14

Browse files
committed
---
yaml --- r: 148848 b: refs/heads/try2 c: b211b00 h: refs/heads/master v: v3
1 parent 9941993 commit cbd5d14

File tree

8 files changed

+1350
-1047
lines changed

8 files changed

+1350
-1047
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ refs/heads/snap-stage3: 78a7676898d9f80ab540c6df5d4c9ce35bb50463
55
refs/heads/try: 519addf6277dbafccbb4159db4b710c37eaa2ec5
66
refs/tags/release-0.1: 1f5c5126e96c79d22cb7862f75304136e204f105
77
refs/heads/ndm: f3868061cd7988080c30d6d5bf352a5a5fe2460b
8-
refs/heads/try2: ef00c6a278cdd3bd00f44133573e1f5e2e951520
8+
refs/heads/try2: b211b00d21fc7c03c3c378ad5eab60666a00fc08
99
refs/heads/dist-snap: ba4081a5a8573875fed17545846f6f6902c8ba8d
1010
refs/tags/release-0.2: c870d2dffb391e14efb05aa27898f1f6333a9596
1111
refs/tags/release-0.3: b5f0d0f648d9a6153664837026ba1be43d3e2503

branches/try2/src/libsyntax/diagnostic.rs

Lines changed: 64 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -189,58 +189,61 @@ impl Level {
189189
}
190190
}
191191

192-
fn print_maybe_styled(msg: &str, color: term::attr::Attr) {
193-
local_data_key!(tls_terminal: ~Option<term::Terminal<StdWriter>>)
192+
fn print_maybe_styled(msg: &str, color: term::attr::Attr) -> io::IoResult<()> {
193+
local_data_key!(tls_terminal: Option<term::Terminal<StdWriter>>)
194+
194195

195196
fn is_stderr_screen() -> bool {
196197
use std::libc;
197198
unsafe { libc::isatty(libc::STDERR_FILENO) != 0 }
198199
}
199-
fn write_pretty<T: Writer>(term: &mut term::Terminal<T>, s: &str, c: term::attr::Attr) {
200-
term.attr(c);
201-
term.write(s.as_bytes());
202-
term.reset();
200+
fn write_pretty<T: Writer>(term: &mut term::Terminal<T>, s: &str,
201+
c: term::attr::Attr) -> io::IoResult<()> {
202+
if_ok!(term.attr(c));
203+
if_ok!(term.write(s.as_bytes()));
204+
if_ok!(term.reset());
205+
Ok(())
203206
}
204207

205208
if is_stderr_screen() {
206209
local_data::get_mut(tls_terminal, |term| {
207210
match term {
208211
Some(term) => {
209-
match **term {
212+
match *term {
210213
Some(ref mut term) => write_pretty(term, msg, color),
211214
None => io::stderr().write(msg.as_bytes())
212215
}
213216
}
214217
None => {
215-
let t = ~match term::Terminal::new(io::stderr()) {
218+
let (t, ret) = match term::Terminal::new(io::stderr()) {
216219
Ok(mut term) => {
217-
write_pretty(&mut term, msg, color);
218-
Some(term)
220+
let r = write_pretty(&mut term, msg, color);
221+
(Some(term), r)
219222
}
220223
Err(_) => {
221-
io::stderr().write(msg.as_bytes());
222-
None
224+
(None, io::stderr().write(msg.as_bytes()))
223225
}
224226
};
225227
local_data::set(tls_terminal, t);
228+
ret
226229
}
227230
}
228-
});
231+
})
229232
} else {
230-
io::stderr().write(msg.as_bytes());
233+
io::stderr().write(msg.as_bytes())
231234
}
232235
}
233236

234-
fn print_diagnostic(topic: &str, lvl: Level, msg: &str) {
235-
let mut stderr = io::stderr();
236-
237+
fn print_diagnostic(topic: &str, lvl: Level, msg: &str) -> io::IoResult<()> {
237238
if !topic.is_empty() {
238-
write!(&mut stderr as &mut io::Writer, "{} ", topic);
239+
let mut stderr = io::stderr();
240+
if_ok!(write!(&mut stderr as &mut io::Writer, "{} ", topic));
239241
}
240242

241-
print_maybe_styled(format!("{}: ", lvl.to_str()),
242-
term::attr::ForegroundColor(lvl.color()));
243-
print_maybe_styled(format!("{}\n", msg), term::attr::Bold);
243+
if_ok!(print_maybe_styled(format!("{}: ", lvl.to_str()),
244+
term::attr::ForegroundColor(lvl.color())));
245+
if_ok!(print_maybe_styled(format!("{}\n", msg), term::attr::Bold));
246+
Ok(())
244247
}
245248

246249
pub struct DefaultEmitter;
@@ -250,20 +253,28 @@ impl Emitter for DefaultEmitter {
250253
cmsp: Option<(&codemap::CodeMap, Span)>,
251254
msg: &str,
252255
lvl: Level) {
253-
match cmsp {
256+
let error = match cmsp {
254257
Some((cm, sp)) => emit(cm, sp, msg, lvl, false),
255258
None => print_diagnostic("", lvl, msg),
259+
};
260+
261+
match error {
262+
Ok(()) => {}
263+
Err(e) => fail!("failed to print diagnostics: {}", e),
256264
}
257265
}
258266

259267
fn custom_emit(&self, cm: &codemap::CodeMap,
260268
sp: Span, msg: &str, lvl: Level) {
261-
emit(cm, sp, msg, lvl, true);
269+
match emit(cm, sp, msg, lvl, true) {
270+
Ok(()) => {}
271+
Err(e) => fail!("failed to print diagnostics: {}", e),
272+
}
262273
}
263274
}
264275

265276
fn emit(cm: &codemap::CodeMap, sp: Span,
266-
msg: &str, lvl: Level, custom: bool) {
277+
msg: &str, lvl: Level, custom: bool) -> io::IoResult<()> {
267278
let ss = cm.span_to_str(sp);
268279
let lines = cm.span_to_lines(sp);
269280
if custom {
@@ -272,19 +283,19 @@ fn emit(cm: &codemap::CodeMap, sp: Span,
272283
// the span)
273284
let span_end = Span { lo: sp.hi, hi: sp.hi, expn_info: sp.expn_info};
274285
let ses = cm.span_to_str(span_end);
275-
print_diagnostic(ses, lvl, msg);
276-
custom_highlight_lines(cm, sp, lvl, lines);
286+
if_ok!(print_diagnostic(ses, lvl, msg));
287+
if_ok!(custom_highlight_lines(cm, sp, lvl, lines));
277288
} else {
278-
print_diagnostic(ss, lvl, msg);
279-
highlight_lines(cm, sp, lvl, lines);
289+
if_ok!(print_diagnostic(ss, lvl, msg));
290+
if_ok!(highlight_lines(cm, sp, lvl, lines));
280291
}
281-
print_macro_backtrace(cm, sp);
292+
print_macro_backtrace(cm, sp)
282293
}
283294

284295
fn highlight_lines(cm: &codemap::CodeMap,
285296
sp: Span,
286297
lvl: Level,
287-
lines: &codemap::FileLines) {
298+
lines: &codemap::FileLines) -> io::IoResult<()> {
288299
let fm = lines.file;
289300
let mut err = io::stderr();
290301
let err = &mut err as &mut io::Writer;
@@ -297,12 +308,13 @@ fn highlight_lines(cm: &codemap::CodeMap,
297308
}
298309
// Print the offending lines
299310
for line in display_lines.iter() {
300-
write!(err, "{}:{} {}\n", fm.name, *line + 1, fm.get_line(*line as int));
311+
if_ok!(write!(err, "{}:{} {}\n", fm.name, *line + 1,
312+
fm.get_line(*line as int)));
301313
}
302314
if elided {
303315
let last_line = display_lines[display_lines.len() - 1u];
304316
let s = format!("{}:{} ", fm.name, last_line + 1u);
305-
write!(err, "{0:1$}...\n", "", s.len());
317+
if_ok!(write!(err, "{0:1$}...\n", "", s.len()));
306318
}
307319

308320
// FIXME (#3260)
@@ -334,16 +346,18 @@ fn highlight_lines(cm: &codemap::CodeMap,
334346
_ => s.push_char(' '),
335347
};
336348
}
337-
write!(err, "{}", s);
349+
if_ok!(write!(err, "{}", s));
338350
let mut s = ~"^";
339351
let hi = cm.lookup_char_pos(sp.hi);
340352
if hi.col != lo.col {
341353
// the ^ already takes up one space
342354
let num_squigglies = hi.col.to_uint()-lo.col.to_uint()-1u;
343355
for _ in range(0, num_squigglies) { s.push_char('~'); }
344356
}
345-
print_maybe_styled(s + "\n", term::attr::ForegroundColor(lvl.color()));
357+
if_ok!(print_maybe_styled(s + "\n",
358+
term::attr::ForegroundColor(lvl.color())));
346359
}
360+
Ok(())
347361
}
348362

349363
// Here are the differences between this and the normal `highlight_lines`:
@@ -355,23 +369,23 @@ fn highlight_lines(cm: &codemap::CodeMap,
355369
fn custom_highlight_lines(cm: &codemap::CodeMap,
356370
sp: Span,
357371
lvl: Level,
358-
lines: &codemap::FileLines) {
372+
lines: &codemap::FileLines) -> io::IoResult<()> {
359373
let fm = lines.file;
360374
let mut err = io::stderr();
361375
let err = &mut err as &mut io::Writer;
362376

363377
let lines = lines.lines.as_slice();
364378
if lines.len() > MAX_LINES {
365-
write!(err, "{}:{} {}\n", fm.name,
366-
lines[0] + 1, fm.get_line(lines[0] as int));
367-
write!(err, "...\n");
379+
if_ok!(write!(err, "{}:{} {}\n", fm.name,
380+
lines[0] + 1, fm.get_line(lines[0] as int)));
381+
if_ok!(write!(err, "...\n"));
368382
let last_line = lines[lines.len()-1];
369-
write!(err, "{}:{} {}\n", fm.name,
370-
last_line + 1, fm.get_line(last_line as int));
383+
if_ok!(write!(err, "{}:{} {}\n", fm.name,
384+
last_line + 1, fm.get_line(last_line as int)));
371385
} else {
372386
for line in lines.iter() {
373-
write!(err, "{}:{} {}\n", fm.name,
374-
*line + 1, fm.get_line(*line as int));
387+
if_ok!(write!(err, "{}:{} {}\n", fm.name,
388+
*line + 1, fm.get_line(*line as int)));
375389
}
376390
}
377391
let last_line_start = format!("{}:{} ", fm.name, lines[lines.len()-1]+1);
@@ -381,22 +395,24 @@ fn custom_highlight_lines(cm: &codemap::CodeMap,
381395
let mut s = ~"";
382396
for _ in range(0, skip) { s.push_char(' '); }
383397
s.push_char('^');
384-
print_maybe_styled(s + "\n", term::attr::ForegroundColor(lvl.color()));
398+
print_maybe_styled(s + "\n", term::attr::ForegroundColor(lvl.color()))
385399
}
386400

387-
fn print_macro_backtrace(cm: &codemap::CodeMap, sp: Span) {
401+
fn print_macro_backtrace(cm: &codemap::CodeMap, sp: Span) -> io::IoResult<()> {
388402
for ei in sp.expn_info.iter() {
389403
let ss = ei.callee.span.as_ref().map_or(~"", |span| cm.span_to_str(*span));
390404
let (pre, post) = match ei.callee.format {
391405
codemap::MacroAttribute => ("#[", "]"),
392406
codemap::MacroBang => ("", "!")
393407
};
394-
print_diagnostic(ss, Note,
395-
format!("in expansion of {}{}{}", pre, ei.callee.name, post));
408+
if_ok!(print_diagnostic(ss, Note,
409+
format!("in expansion of {}{}{}", pre,
410+
ei.callee.name, post)));
396411
let ss = cm.span_to_str(ei.call_site);
397-
print_diagnostic(ss, Note, "expansion site");
398-
print_macro_backtrace(cm, ei.call_site);
412+
if_ok!(print_diagnostic(ss, Note, "expansion site"));
413+
if_ok!(print_macro_backtrace(cm, ei.call_site));
399414
}
415+
Ok(())
400416
}
401417

402418
pub fn expect<T:Clone>(diag: @SpanHandler, opt: Option<T>, msg: || -> ~str)

branches/try2/src/libsyntax/ext/source_util.rs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ use parse::token::get_ident_interner;
2020
use parse::token;
2121
use print::pprust;
2222

23-
use std::io;
2423
use std::io::File;
2524
use std::rc::Rc;
2625
use std::str;
@@ -109,9 +108,9 @@ pub fn expand_include_str(cx: &mut ExtCtxt, sp: Span, tts: &[ast::TokenTree])
109108
None => return MacResult::dummy_expr()
110109
};
111110
let file = res_rel_file(cx, sp, &Path::new(file));
112-
let bytes = match io::result(|| File::open(&file).read_to_end()) {
111+
let bytes = match File::open(&file).read_to_end() {
113112
Err(e) => {
114-
cx.span_err(sp, format!("couldn't read {}: {}", file.display(), e.desc));
113+
cx.span_err(sp, format!("couldn't read {}: {}", file.display(), e));
115114
return MacResult::dummy_expr();
116115
}
117116
Ok(bytes) => bytes,
@@ -141,9 +140,9 @@ pub fn expand_include_bin(cx: &mut ExtCtxt, sp: Span, tts: &[ast::TokenTree])
141140
None => return MacResult::dummy_expr()
142141
};
143142
let file = res_rel_file(cx, sp, &Path::new(file));
144-
match io::result(|| File::open(&file).read_to_end()) {
143+
match File::open(&file).read_to_end() {
145144
Err(e) => {
146-
cx.span_err(sp, format!("couldn't read {}: {}", file.display(), e.desc));
145+
cx.span_err(sp, format!("couldn't read {}: {}", file.display(), e));
147146
return MacResult::dummy_expr();
148147
}
149148
Ok(bytes) => {

branches/try2/src/libsyntax/lib.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,11 @@ This API is completely unstable and subject to change.
3333
extern mod extra;
3434
extern mod term;
3535

36+
#[cfg(stage0)]
37+
macro_rules! if_ok (
38+
($e:expr) => (match $e { Ok(e) => e, Err(e) => return Err(e) })
39+
)
40+
3641
pub mod util {
3742
pub mod interner;
3843
#[cfg(test)]

branches/try2/src/libsyntax/parse/comments.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -350,7 +350,8 @@ pub fn gather_comments_and_literals(span_diagnostic:
350350
path: ~str,
351351
srdr: &mut io::Reader)
352352
-> (~[Comment], ~[Literal]) {
353-
let src = str::from_utf8_owned(srdr.read_to_end()).unwrap();
353+
let src = srdr.read_to_end().unwrap();
354+
let src = str::from_utf8_owned(src).unwrap();
354355
let cm = CodeMap::new();
355356
let filemap = cm.new_filemap(path, src);
356357
let rdr = lexer::new_low_level_string_reader(span_diagnostic, filemap);

branches/try2/src/libsyntax/parse/mod.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ use parse::attr::ParserAttr;
1919
use parse::parser::Parser;
2020

2121
use std::cell::RefCell;
22-
use std::io;
2322
use std::io::File;
2423
use std::str;
2524

@@ -232,10 +231,10 @@ pub fn file_to_filemap(sess: @ParseSess, path: &Path, spanopt: Option<Span>)
232231
None => sess.span_diagnostic.handler().fatal(msg),
233232
}
234233
};
235-
let bytes = match io::result(|| File::open(path).read_to_end()) {
234+
let bytes = match File::open(path).read_to_end() {
236235
Ok(bytes) => bytes,
237236
Err(e) => {
238-
err(format!("couldn't read {}: {}", path.display(), e.desc));
237+
err(format!("couldn't read {}: {}", path.display(), e));
239238
unreachable!()
240239
}
241240
};

0 commit comments

Comments
 (0)