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/parser.rs | |
| 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/parser.rs')
| -rw-r--r-- | src/comp/syntax/parse/parser.rs | 27 |
1 files changed, 14 insertions, 13 deletions
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, |
