stdlib: Make io failures recoverable by returning a result

This commit is contained in:
Brian Anderson 2011-10-28 21:19:59 -07:00
parent 2b62a80202
commit 2cebef095e
11 changed files with 123 additions and 37 deletions

View file

@ -1,4 +1,4 @@
import std::{vec, uint, str, term, io, option};
import std::{vec, uint, str, term, io, option, result};
import std::option::{some, none};
type filename = str;
@ -154,7 +154,13 @@ fn maybe_highlight_lines(sp: option::t<span>, cm: codemap,
// FIXME: reading in the entire file is the worst possible way to
// get access to the necessary lines.
let file = io::read_whole_file_str(lines.name);
let file = alt io::read_whole_file_str(lines.name) {
result::ok(file) { file }
result::err(e) {
emit_error(none, e, cm);
fail;
}
};
let fm = get_filemap(cm, lines.name);
// arbitrarily only print up to six lines of the error

View file

@ -1,5 +1,5 @@
import std::{io, vec, str, option, either};
import std::{io, vec, str, option, either, result};
import std::option::{some, none};
import std::either::{left, right};
import std::map::{hashmap, new_str_hash};
@ -53,7 +53,16 @@ type parser =
fn new_parser_from_file(sess: parse_sess, cfg: ast::crate_cfg, path: str,
chpos: uint, byte_pos: uint, ftype: file_type) ->
parser {
let src = io::read_whole_file_str(path);
let src = alt io::read_whole_file_str(path) {
result::ok(src) {
// FIXME: This copy is unfortunate
src
}
result::err(e) {
codemap::emit_error(none, e, sess.cm);
fail;
}
};
let filemap = codemap::new_filemap(path, chpos, byte_pos);
sess.cm.files += [filemap];
let itr = @interner::mk(str::hash, str::eq);