Skip to content

Commit 7fc7ebd

Browse files
committed
The lexer's get_mark_str should slice by byte position, not char. Closes #654
1 parent eef61a5 commit 7fc7ebd

File tree

1 file changed

+4
-3
lines changed

1 file changed

+4
-3
lines changed

src/comp/syntax/parse/lexer.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,14 +37,15 @@ fn new_reader(&codemap::codemap cm, io::reader rdr, codemap::filemap filemap,
3737
mutable uint col,
3838
mutable uint pos,
3939
mutable char ch,
40+
mutable uint mark_pos,
4041
mutable uint mark_chpos,
4142
mutable uint chpos,
4243
mutable vec[str] strs,
4344
codemap::filemap fm,
4445
@interner::interner[str] itr) {
4546
fn is_eof() -> bool { ret ch == -1 as char; }
46-
fn mark() { mark_chpos = chpos; }
47-
fn get_mark_str() -> str { ret str::slice(file, mark_chpos, chpos); }
47+
fn mark() { mark_pos = pos; mark_chpos = chpos; }
48+
fn get_mark_str() -> str { ret str::slice(file, mark_pos, pos); }
4849
fn get_mark_chpos() -> uint { ret mark_chpos; }
4950
fn get_chpos() -> uint { ret chpos; }
5051
fn curr() -> char { ret ch; }
@@ -80,7 +81,7 @@ fn new_reader(&codemap::codemap cm, io::reader rdr, codemap::filemap filemap,
8081
auto file = str::unsafe_from_bytes(rdr.read_whole_stream());
8182
let vec[str] strs = [];
8283
auto rd =
83-
reader(cm, file, str::byte_len(file), 0u, 0u, -1 as char,
84+
reader(cm, file, str::byte_len(file), 0u, 0u, -1 as char, 0u,
8485
filemap.start_pos, filemap.start_pos, strs, filemap, itr);
8586
rd.init();
8687
ret rd;

0 commit comments

Comments
 (0)