Skip to content

Commit 08f8753

Browse files
committed
Pull file reading out of the lexer
1 parent 05390b4 commit 08f8753

File tree

2 files changed

+11
-10
lines changed

2 files changed

+11
-10
lines changed

src/comp/syntax/parse/lexer.rs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,10 @@ type reader =
2929
fn err(str) ;
3030
};
3131

32-
fn new_reader(&codemap::codemap cm, io::reader rdr, codemap::filemap filemap,
32+
fn new_reader(&codemap::codemap cm, str src, codemap::filemap filemap,
3333
@interner::interner[str] itr) -> reader {
3434
obj reader(codemap::codemap cm,
35-
str file,
35+
str src,
3636
uint len,
3737
mutable uint col,
3838
mutable uint pos,
@@ -45,18 +45,18 @@ fn new_reader(&codemap::codemap cm, io::reader rdr, codemap::filemap filemap,
4545
@interner::interner[str] itr) {
4646
fn is_eof() -> bool { ret ch == -1 as char; }
4747
fn mark() { mark_pos = pos; mark_chpos = chpos; }
48-
fn get_mark_str() -> str { ret str::slice(file, mark_pos, pos); }
48+
fn get_mark_str() -> str { ret str::slice(src, mark_pos, pos); }
4949
fn get_mark_chpos() -> uint { ret mark_chpos; }
5050
fn get_chpos() -> uint { ret chpos; }
5151
fn curr() -> char { ret ch; }
5252
fn next() -> char {
5353
if (pos < len) {
54-
ret str::char_at(file, pos);
54+
ret str::char_at(src, pos);
5555
} else { ret -1 as char; }
5656
}
5757
fn init() {
5858
if (pos < len) {
59-
auto next = str::char_range_at(file, pos);
59+
auto next = str::char_range_at(src, pos);
6060
pos = next._1;
6161
ch = next._0;
6262
}
@@ -66,7 +66,7 @@ fn new_reader(&codemap::codemap cm, io::reader rdr, codemap::filemap filemap,
6666
col += 1u;
6767
chpos += 1u;
6868
if (ch == '\n') { codemap::next_line(fm, chpos); col = 0u; }
69-
auto next = str::char_range_at(file, pos);
69+
auto next = str::char_range_at(src, pos);
7070
pos = next._1;
7171
ch = next._0;
7272
} else { ch = -1 as char; }
@@ -78,10 +78,9 @@ fn new_reader(&codemap::codemap cm, io::reader rdr, codemap::filemap filemap,
7878
codemap::emit_error(some(rec(lo=chpos, hi=chpos)), m, cm);
7979
}
8080
}
81-
auto file = str::unsafe_from_bytes(rdr.read_whole_stream());
8281
let vec[str] strs = [];
8382
auto rd =
84-
reader(cm, file, str::byte_len(file), 0u, 0u, -1 as char, 0u,
83+
reader(cm, src, str::byte_len(src), 0u, 0u, -1 as char, 0u,
8584
filemap.start_pos, filemap.start_pos, strs, filemap, itr);
8685
rd.init();
8786
ret rd;
@@ -717,8 +716,9 @@ type lit = rec(str lit, uint pos);
717716
fn gather_comments_and_literals(&codemap::codemap cm, str path) ->
718717
rec(vec[cmnt] cmnts, vec[lit] lits) {
719718
auto srdr = io::file_reader(path);
719+
auto src = str::unsafe_from_bytes(srdr.read_whole_stream());
720720
auto itr = @interner::mk[str](str::hash, str::eq);
721-
auto rdr = new_reader(cm, srdr, codemap::new_filemap(path, 0u), itr);
721+
auto rdr = new_reader(cm, src, codemap::new_filemap(path, 0u), itr);
722722
let vec[cmnt] comments = [];
723723
let vec[lit] literals = [];
724724
let bool first_read = true;

src/comp/syntax/parse/parser.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,10 +113,11 @@ fn new_parser(parse_sess sess, ast::crate_cfg cfg,
113113
auto ftype = SOURCE_FILE;
114114
if (str::ends_with(path, ".rc")) { ftype = CRATE_FILE; }
115115
auto srdr = io::file_reader(path);
116+
auto src = str::unsafe_from_bytes(srdr.read_whole_stream());
116117
auto filemap = codemap::new_filemap(path, pos);
117118
vec::push(sess.cm.files, filemap);
118119
auto itr = @interner::mk(str::hash, str::eq);
119-
auto rdr = lexer::new_reader(sess.cm, srdr, filemap, itr);
120+
auto rdr = lexer::new_reader(sess.cm, src, filemap, itr);
120121
// Make sure npos points at first actual token:
121122

122123
lexer::consume_whitespace_and_comments(rdr);

0 commit comments

Comments
 (0)