diff options
| author | Brian Anderson <andersrb@gmail.com> | 2012-01-25 15:22:10 -0800 |
|---|---|---|
| committer | Brian Anderson <andersrb@gmail.com> | 2012-01-25 15:22:10 -0800 |
| commit | 08c6cb5f708efa7484ca27d6b14b86d6ae58b692 (patch) | |
| tree | af20f920390cb36c465e438a4b70d54159536d20 /src/comp/syntax/parse | |
| parent | ab223e06181434dd7b98fa27a8f902f2d15d7759 (diff) | |
| parent | 60a146bf0f76c47d24cb4b01a408a329425d11f9 (diff) | |
| download | rust-08c6cb5f708efa7484ca27d6b14b86d6ae58b692.tar.gz rust-08c6cb5f708efa7484ca27d6b14b86d6ae58b692.zip | |
Merge pull request #1664 from kevina/issue-1612
See Issue #1612
Diffstat (limited to 'src/comp/syntax/parse')
| -rw-r--r-- | src/comp/syntax/parse/eval.rs | 4 | ||||
| -rw-r--r-- | src/comp/syntax/parse/lexer.rs | 20 | ||||
| -rw-r--r-- | src/comp/syntax/parse/parser.rs | 27 |
3 files changed, 26 insertions, 25 deletions
diff --git a/src/comp/syntax/parse/eval.rs b/src/comp/syntax/parse/eval.rs index ca7af9e273d..2530c794c94 100644 --- a/src/comp/syntax/parse/eval.rs +++ b/src/comp/syntax/parse/eval.rs @@ -79,7 +79,7 @@ fn parse_companion_mod(cx: ctx, prefix: str, suffix: option::t<str>) let first_item_outer_attrs = inner_attrs.next; let m0 = parse_mod_items(p0, token::EOF, first_item_outer_attrs); cx.sess.chpos = p0.reader.chpos; - cx.sess.byte_pos = p0.reader.pos; + cx.sess.byte_pos = cx.sess.byte_pos + p0.reader.pos; ret (m0.view_items, m0.items, inner_attrs.inner); } else { ret ([], [], []); @@ -117,7 +117,7 @@ fn eval_crate_directive(cx: ctx, cdir: @ast::crate_directive, prefix: str, ast::item_mod(m0), mod_attrs); // Thread defids, chpos and byte_pos through the parsers cx.sess.chpos = p0.reader.chpos; - cx.sess.byte_pos = p0.reader.pos; + cx.sess.byte_pos = cx.sess.byte_pos + p0.reader.pos; items += [i]; } ast::cdir_dir_mod(id, cdirs, attrs) { diff --git a/src/comp/syntax/parse/lexer.rs b/src/comp/syntax/parse/lexer.rs index f51838ef28e..66e0f87d982 100644 --- a/src/comp/syntax/parse/lexer.rs +++ b/src/comp/syntax/parse/lexer.rs @@ -11,7 +11,7 @@ import driver::diagnostic; type reader = @{ cm: codemap::codemap, span_diagnostic: diagnostic::span_handler, - src: str, + src: @str, len: uint, mutable col: uint, mutable pos: uint, @@ -27,11 +27,11 @@ impl reader for reader { fn get_str_from(start: uint) -> str { // I'm pretty skeptical about this subtraction. What if there's a // multi-byte character before the mark? - ret str::slice(self.src, start - 1u, self.pos - 1u); + ret str::slice(*self.src, start - 1u, self.pos - 1u); } fn next() -> char { if self.pos < self.len { - ret str::char_at(self.src, self.pos); + ret str::char_at(*self.src, self.pos); } else { ret -1 as char; } } fn bump() { @@ -43,7 +43,7 @@ impl reader for reader { self.filemap.start_pos.byte); self.col = 0u; } - let next = str::char_range_at(self.src, self.pos); + let next = str::char_range_at(*self.src, self.pos); self.pos = next.next; self.curr = next.ch; } else { self.curr = -1 as char; } @@ -57,16 +57,16 @@ impl reader for reader { fn new_reader(cm: codemap::codemap, span_diagnostic: diagnostic::span_handler, - src: str, filemap: codemap::filemap, + filemap: codemap::filemap, itr: @interner::interner<str>) -> reader { let r = @{cm: cm, span_diagnostic: span_diagnostic, - src: src, len: str::byte_len(src), + src: filemap.src, len: str::byte_len(*filemap.src), mutable col: 0u, mutable pos: 0u, mutable curr: -1 as char, mutable chpos: filemap.start_pos.ch, mutable strs: [], filemap: filemap, interner: itr}; if r.pos < r.len { - let next = str::char_range_at(r.src, r.pos); + let next = str::char_range_at(*r.src, r.pos); r.pos = next.next; r.curr = next.ch; } @@ -672,10 +672,10 @@ fn gather_comments_and_literals(cm: codemap::codemap, path: str, srdr: io::reader) -> {cmnts: [cmnt], lits: [lit]} { - let src = str::unsafe_from_bytes(srdr.read_whole_stream()); + let src = @str::unsafe_from_bytes(srdr.read_whole_stream()); let itr = @interner::mk::<str>(str::hash, str::eq); - let rdr = new_reader(cm, span_diagnostic, src, - codemap::new_filemap(path, 0u, 0u), itr); + let rdr = new_reader(cm, span_diagnostic, + codemap::new_filemap(path, src, 0u, 0u), itr); let comments: [cmnt] = []; let literals: [lit] = []; let first_read: bool = true; diff --git a/src/comp/syntax/parse/parser.rs b/src/comp/syntax/parse/parser.rs index eca22f38adf..4d8acc6fa44 100644 --- a/src/comp/syntax/parse/parser.rs +++ b/src/comp/syntax/parse/parser.rs @@ -98,27 +98,28 @@ fn new_parser_from_file(sess: parse_sess, cfg: ast::crate_cfg, path: str, let src = alt io::read_whole_file_str(path) { result::ok(src) { // FIXME: This copy is unfortunate - src + @src } result::err(e) { sess.span_diagnostic.handler().fatal(e) } }; - let filemap = codemap::new_filemap(path, sess.chpos, sess.byte_pos); + let filemap = codemap::new_filemap(path, src, + sess.chpos, sess.byte_pos); sess.cm.files += [filemap]; let itr = @interner::mk(str::hash, str::eq); - let rdr = lexer::new_reader(sess.cm, sess.span_diagnostic, src, filemap, - itr); + let rdr = lexer::new_reader(sess.cm, sess.span_diagnostic, filemap, itr); ret new_parser(sess, cfg, rdr, ftype); } fn new_parser_from_source_str(sess: parse_sess, cfg: ast::crate_cfg, - name: str, source: str) -> parser { + name: str, source: @str) -> parser { let ftype = SOURCE_FILE; - let filemap = codemap::new_filemap(name, sess.chpos, sess.byte_pos); + let filemap = codemap::new_filemap(name, source, + sess.chpos, sess.byte_pos); sess.cm.files += [filemap]; let itr = @interner::mk(str::hash, str::eq); - let rdr = lexer::new_reader(sess.cm, sess.span_diagnostic, source, + let rdr = lexer::new_reader(sess.cm, sess.span_diagnostic, filemap, itr); ret new_parser(sess, cfg, rdr, ftype); } @@ -2457,26 +2458,26 @@ fn parse_crate_from_source_file(input: str, cfg: ast::crate_cfg, let p = new_parser_from_file(sess, cfg, input, SOURCE_FILE); let r = parse_crate_mod(p, cfg); sess.chpos = p.reader.chpos; - sess.byte_pos = p.reader.pos; + sess.byte_pos = sess.byte_pos + p.reader.pos; ret r; } -fn parse_expr_from_source_str(name: str, source: str, cfg: ast::crate_cfg, +fn parse_expr_from_source_str(name: str, source: @str, cfg: ast::crate_cfg, sess: parse_sess) -> @ast::expr { let p = new_parser_from_source_str(sess, cfg, name, source); let r = parse_expr(p); sess.chpos = p.reader.chpos; - sess.byte_pos = p.reader.pos; + sess.byte_pos = sess.byte_pos + p.reader.pos; ret r; } -fn parse_crate_from_source_str(name: str, source: str, cfg: ast::crate_cfg, +fn parse_crate_from_source_str(name: str, source: @str, cfg: ast::crate_cfg, sess: parse_sess) -> @ast::crate { let p = new_parser_from_source_str(sess, cfg, name, source); let r = parse_crate_mod(p, cfg); sess.chpos = p.reader.chpos; - sess.byte_pos = p.reader.pos; + sess.byte_pos = sess.byte_pos + p.reader.pos; ret r; } @@ -2578,7 +2579,7 @@ fn parse_crate_from_crate_file(input: str, cfg: ast::crate_cfg, let first_cdir_attr = leading_attrs.next; let cdirs = parse_crate_directives(p, token::EOF, first_cdir_attr); sess.chpos = p.reader.chpos; - sess.byte_pos = p.reader.pos; + sess.byte_pos = sess.byte_pos + p.reader.pos; let cx = @{p: p, sess: sess, |
