Skip to content

Commit ef011e8

Browse files
committed
---
yaml --- r: 36330 b: refs/heads/try2 c: 4a5b28f h: refs/heads/master v: v3
1 parent 0a67a35 commit ef011e8

File tree

6 files changed

+49
-97
lines changed

6 files changed

+49
-97
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ refs/heads/snap-stage3: eb8fd119c65c67f3b1b8268cc7341c22d39b7b61
55
refs/heads/try: d324a424d8f84b1eb049b12cf34182bda91b0024
66
refs/tags/release-0.1: 1f5c5126e96c79d22cb7862f75304136e204f105
77
refs/heads/ndm: f3868061cd7988080c30d6d5bf352a5a5fe2460b
8-
refs/heads/try2: 2374154ded19a247be0053d71f5bcdd22b95462a
8+
refs/heads/try2: 4a5b28ff0cae0e48d8e3e0cf45728e438390d7ee
99
refs/heads/incoming: d9317a174e434d4c99fc1a37fd7dc0d2f5328d37
1010
refs/heads/dist-snap: 22efa39382d41b084fde1719df7ae8ce5697d8c9
1111
refs/tags/release-0.2: c870d2dffb391e14efb05aa27898f1f6333a9596

branches/try2/src/libsyntax/codemap.rs

Lines changed: 17 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -201,25 +201,6 @@ pub struct FileMap {
201201
}
202202

203203
pub impl FileMap {
204-
static fn new_w_substr(+filename: FileName, +substr: FileSubstr,
205-
src: @~str,
206-
+start_pos: BytePos)
207-
-> FileMap {
208-
return FileMap {
209-
name: filename, substr: substr, src: src,
210-
start_pos: start_pos,
211-
mut lines: ~[],
212-
multibyte_chars: DVec()
213-
};
214-
}
215-
216-
static fn new(+filename: FileName, src: @~str,
217-
+start_pos: BytePos)
218-
-> FileMap {
219-
return FileMap::new_w_substr(filename, FssNone, src,
220-
start_pos);
221-
}
222-
223204
fn next_line(&self, +pos: BytePos) {
224205
self.lines.push(pos);
225206
}
@@ -262,20 +243,30 @@ pub impl CodeMap {
262243
}
263244
}
264245

265-
pub fn add_filemap(&self, filemap: @FileMap) {
266-
let expected_byte_pos = if self.files.len() == 0 {
246+
fn new_filemap_w_substr(+filename: FileName, +substr: FileSubstr,
247+
src: @~str) -> @FileMap {
248+
let start_pos = if self.files.len() == 0 {
267249
0
268250
} else {
269251
let last_start = self.files.last().start_pos.to_uint();
270252
let last_len = self.files.last().src.len();
271253
last_start + last_len
272254
};
273-
let actual_byte_pos = filemap.start_pos.to_uint();
274-
debug!("codemap: adding filemap: %s", filemap.name);
275-
debug!("codemap: expected offset: %u", expected_byte_pos);
276-
debug!("codemap: actual offset: %u", actual_byte_pos);
277-
assert expected_byte_pos == actual_byte_pos;
255+
256+
let filemap = @FileMap {
257+
name: filename, substr: substr, src: src,
258+
start_pos: BytePos(start_pos),
259+
mut lines: ~[],
260+
multibyte_chars: DVec()
261+
};
262+
278263
self.files.push(filemap);
264+
265+
return filemap;
266+
}
267+
268+
fn new_filemap(+filename: FileName, src: @~str) -> @FileMap {
269+
return self.new_filemap_w_substr(filename, FssNone, src);
279270
}
280271

281272
pub fn mk_substr_filename(&self, sp: span) -> ~str {

branches/try2/src/libsyntax/ext/source_util.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,12 +58,11 @@ fn expand_include(cx: ext_ctxt, sp: span, arg: ast::mac_arg,
5858
_body: ast::mac_body) -> @ast::expr {
5959
let args = get_mac_args(cx, sp, arg, 1u, option::Some(1u), ~"include");
6060
let file = expr_to_str(cx, args[0], ~"#include_str requires a string");
61-
let (p, rdr) = parse::new_parser_etc_from_file(
61+
let p = parse::new_parser_from_file(
6262
cx.parse_sess(), cx.cfg(),
6363
&res_rel_file(cx, sp, &Path(file)),
6464
parse::parser::SOURCE_FILE);
6565
let e = p.parse_expr();
66-
parse::update_parse_sess_position(&cx.parse_sess(), &rdr);
6766
return e;
6867
}
6968

branches/try2/src/libsyntax/parse.rs

Lines changed: 23 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ export parse_crate_from_source_str;
1111
export parse_expr_from_source_str, parse_item_from_source_str;
1212
export parse_stmt_from_source_str;
1313
export parse_from_source_str;
14-
export update_parse_sess_position;
1514

1615
use parser::Parser;
1716
use attr::parser_attr;
@@ -28,8 +27,6 @@ type parse_sess = @{
2827
mut next_id: node_id,
2928
span_diagnostic: span_handler,
3029
interner: @ident_interner,
31-
// must be kept up to date
32-
mut pos: BytePos
3330
};
3431

3532
fn new_parse_sess(demitter: Option<emitter>) -> parse_sess {
@@ -38,7 +35,6 @@ fn new_parse_sess(demitter: Option<emitter>) -> parse_sess {
3835
mut next_id: 1,
3936
span_diagnostic: mk_span_handler(mk_handler(demitter), cm),
4037
interner: mk_ident_interner(),
41-
mut pos: BytePos(0)
4238
};
4339
}
4440

@@ -48,7 +44,6 @@ fn new_parse_sess_special_handler(sh: span_handler, cm: @codemap::CodeMap)
4844
mut next_id: 1,
4945
span_diagnostic: sh,
5046
interner: mk_ident_interner(),
51-
mut pos: BytePos(0)
5247
};
5348
}
5449

@@ -66,14 +61,13 @@ fn parse_crate_from_file(input: &Path, cfg: ast::crate_cfg,
6661
6762
fn parse_crate_from_crate_file(input: &Path, cfg: ast::crate_cfg,
6863
sess: parse_sess) -> @ast::crate {
69-
let (p, rdr) = new_parser_etc_from_file(sess, cfg, input,
70-
parser::CRATE_FILE);
64+
let p = new_parser_from_file(sess, cfg, input,
65+
parser::CRATE_FILE);
7166
let lo = p.span.lo;
7267
let prefix = input.dir_path();
7368
let leading_attrs = p.parse_inner_attrs_and_next();
7469
let { inner: crate_attrs, next: first_cdir_attr } = leading_attrs;
7570
let cdirs = p.parse_crate_directives(token::EOF, first_cdir_attr);
76-
update_parse_sess_position(&sess, &rdr);
7771
let cx = @{sess: sess, cfg: /* FIXME (#2543) */ copy p.cfg};
7872
let companionmod = input.filestem().map(|s| Path(*s));
7973
let (m, attrs) = eval::eval_crate_directives_to_mod(
@@ -90,52 +84,47 @@ fn parse_crate_from_crate_file(input: &Path, cfg: ast::crate_cfg,
9084
9185
fn parse_crate_from_source_file(input: &Path, cfg: ast::crate_cfg,
9286
sess: parse_sess) -> @ast::crate {
93-
let (p, rdr) = new_parser_etc_from_file(sess, cfg, input,
94-
parser::SOURCE_FILE);
87+
let p = new_parser_from_file(sess, cfg, input,
88+
parser::SOURCE_FILE);
9589
let r = p.parse_crate_mod(cfg);
96-
update_parse_sess_position(&sess, &rdr);
9790
return r;
9891
}
9992
10093
fn parse_crate_from_source_str(name: ~str, source: @~str, cfg: ast::crate_cfg,
10194
sess: parse_sess) -> @ast::crate {
102-
let (p, rdr) = new_parser_etc_from_source_str(sess, cfg, name,
103-
codemap::FssNone, source);
95+
let p = new_parser_from_source_str(sess, cfg, name,
96+
codemap::FssNone, source);
10497
let r = p.parse_crate_mod(cfg);
10598
p.abort_if_errors();
106-
update_parse_sess_position(&sess, &rdr);
10799
return r;
108100
}
109101
110102
fn parse_expr_from_source_str(name: ~str, source: @~str, cfg: ast::crate_cfg,
111103
sess: parse_sess) -> @ast::expr {
112-
let (p, rdr) = new_parser_etc_from_source_str(sess, cfg, name,
113-
codemap::FssNone, source);
104+
let p = new_parser_from_source_str(sess, cfg, name,
105+
codemap::FssNone, source);
114106
let r = p.parse_expr();
115107
p.abort_if_errors();
116-
update_parse_sess_position(&sess, &rdr);
117108
return r;
118109
}
119110
120111
fn parse_item_from_source_str(name: ~str, source: @~str, cfg: ast::crate_cfg,
121112
+attrs: ~[ast::attribute],
122113
sess: parse_sess) -> Option<@ast::item> {
123-
let (p, rdr) = new_parser_etc_from_source_str(sess, cfg, name,
124-
codemap::FssNone, source);
114+
let p = new_parser_from_source_str(sess, cfg, name,
115+
codemap::FssNone, source);
125116
let r = p.parse_item(attrs);
126117
p.abort_if_errors();
127-
update_parse_sess_position(&sess, &rdr);
128118
return r;
129119
}
130120
131121
fn parse_stmt_from_source_str(name: ~str, source: @~str, cfg: ast::crate_cfg,
132122
+attrs: ~[ast::attribute],
133123
sess: parse_sess) -> @ast::stmt {
134-
let (p, rdr) = new_parser_etc_from_source_str(sess, cfg, name,
135-
codemap::FssNone, source);
124+
let p = new_parser_from_source_str(sess, cfg, name,
125+
codemap::FssNone, source);
136126
let r = p.parse_stmt(attrs);
137127
p.abort_if_errors();
138-
update_parse_sess_position(&sess, &rdr);
139128
return r;
140129
}
141130
@@ -145,14 +134,13 @@ fn parse_from_source_str<T>(f: fn (p: Parser) -> T,
145134
sess: parse_sess)
146135
-> T
147136
{
148-
let (p, rdr) = new_parser_etc_from_source_str(sess, cfg, name, ss,
149-
source);
137+
let p = new_parser_from_source_str(sess, cfg, name, ss,
138+
source);
150139
let r = f(p);
151140
if !p.reader.is_eof() {
152141
p.reader.fatal(~"expected end-of-string");
153142
}
154143
p.abort_if_errors();
155-
update_parse_sess_position(&sess, &rdr);
156144
move r
157145
}
158146

@@ -164,47 +152,28 @@ fn next_node_id(sess: parse_sess) -> node_id {
164152
return rv;
165153
}
166154

167-
fn new_parser_etc_from_source_str(sess: parse_sess, cfg: ast::crate_cfg,
168-
+name: ~str, +ss: codemap::FileSubstr,
169-
source: @~str) -> (Parser, string_reader) {
170-
let ftype = parser::SOURCE_FILE;
171-
let filemap = @FileMap::new_w_substr
172-
(name, ss, source, sess.pos);
173-
sess.cm.add_filemap(filemap);
174-
let srdr = lexer::new_string_reader(sess.span_diagnostic, filemap,
175-
sess.interner);
176-
return (Parser(sess, cfg, srdr as reader, ftype), srdr);
177-
}
178-
179155
fn new_parser_from_source_str(sess: parse_sess, cfg: ast::crate_cfg,
180156
+name: ~str, +ss: codemap::FileSubstr,
181157
source: @~str) -> Parser {
182-
let (p, _) = new_parser_etc_from_source_str(sess, cfg, name, ss, source);
183-
move p
158+
let ftype = parser::SOURCE_FILE;
159+
let filemap = sess.cm.new_filemap_w_substr(name, ss, source);
160+
let srdr = lexer::new_string_reader(sess.span_diagnostic, filemap,
161+
sess.interner);
162+
return Parser(sess, cfg, srdr as reader, ftype);
184163
}
185164

186-
187-
fn new_parser_etc_from_file(sess: parse_sess, cfg: ast::crate_cfg,
188-
path: &Path, ftype: parser::file_type) ->
189-
(Parser, string_reader) {
165+
fn new_parser_from_file(sess: parse_sess, cfg: ast::crate_cfg,
166+
path: &Path, ftype: parser::file_type) -> Parser {
190167
let res = io::read_whole_file_str(path);
191168
match res {
192169
result::Ok(_) => { /* Continue. */ }
193170
result::Err(e) => sess.span_diagnostic.handler().fatal(e)
194171
}
195172
let src = @result::unwrap(res);
196-
let filemap = @FileMap::new(path.to_str(), src,
197-
sess.pos);
198-
sess.cm.add_filemap(filemap);
173+
let filemap = sess.cm.new_filemap(path.to_str(), src);
199174
let srdr = lexer::new_string_reader(sess.span_diagnostic, filemap,
200175
sess.interner);
201-
return (Parser(sess, cfg, srdr as reader, ftype), srdr);
202-
}
203-
204-
fn new_parser_from_file(sess: parse_sess, cfg: ast::crate_cfg, path: &Path,
205-
ftype: parser::file_type) -> Parser {
206-
let (p, _) = new_parser_etc_from_file(sess, cfg, path, ftype);
207-
move p
176+
return Parser(sess, cfg, srdr as reader, ftype);
208177
}
209178

210179
fn new_parser_from_tt(sess: parse_sess, cfg: ast::crate_cfg,
@@ -213,7 +182,3 @@ fn new_parser_from_tt(sess: parse_sess, cfg: ast::crate_cfg,
213182
None, tt);
214183
return Parser(sess, cfg, trdr as reader, parser::SOURCE_FILE)
215184
}
216-
217-
fn update_parse_sess_position(sess: &parse_sess, r: &lexer::string_reader) {
218-
sess.pos = r.last_pos
219-
}

branches/try2/src/libsyntax/parse/comments.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -292,7 +292,8 @@ fn gather_comments_and_literals(span_diagnostic: diagnostic::span_handler,
292292
{cmnts: ~[cmnt], lits: ~[lit]} {
293293
let src = @str::from_bytes(srdr.read_whole_stream());
294294
let itr = parse::token::mk_fake_ident_interner();
295-
let filemap = @FileMap::new(path, src, BytePos(0));
295+
let cm = CodeMap::new();
296+
let filemap = cm.new_filemap(path, src);
296297
let rdr = lexer::new_low_level_string_reader(
297298
span_diagnostic, filemap, itr);
298299

branches/try2/src/libsyntax/parse/eval.rs

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
use parse::update_parse_sess_position;
21
use parser::{Parser, SOURCE_FILE};
32
use attr::parser_attr;
43

@@ -63,11 +62,10 @@ fn parse_companion_mod(cx: ctx, prefix: &Path, suffix: &Option<Path>)
6362
let modpath = &companion_file(prefix, suffix);
6463
if file_exists(modpath) {
6564
debug!("found companion mod");
66-
let (p0, r0) = new_parser_etc_from_file(cx.sess, cx.cfg,
67-
modpath, SOURCE_FILE);
65+
let p0 = new_parser_from_file(cx.sess, cx.cfg,
66+
modpath, SOURCE_FILE);
6867
let inner_attrs = p0.parse_inner_attrs_and_next();
6968
let m0 = p0.parse_mod_items(token::EOF, inner_attrs.next);
70-
update_parse_sess_position(&cx.sess, &r0);
7169
return (m0.view_items, m0.items, inner_attrs.inner);
7270
} else {
7371
return (~[], ~[], ~[]);
@@ -93,9 +91,9 @@ fn eval_crate_directive(cx: ctx, cdir: @ast::crate_directive, prefix: &Path,
9391
} else {
9492
prefix.push_many(file_path.components)
9593
};
96-
let (p0, r0) =
97-
new_parser_etc_from_file(cx.sess, cx.cfg,
98-
&full_path, SOURCE_FILE);
94+
let p0 =
95+
new_parser_from_file(cx.sess, cx.cfg,
96+
&full_path, SOURCE_FILE);
9997
let inner_attrs = p0.parse_inner_attrs_and_next();
10098
let mod_attrs = vec::append(attrs, inner_attrs.inner);
10199
let first_item_outer_attrs = inner_attrs.next;
@@ -104,8 +102,6 @@ fn eval_crate_directive(cx: ctx, cdir: @ast::crate_directive, prefix: &Path,
104102
let i = p0.mk_item(cdir.span.lo, cdir.span.hi,
105103
/* FIXME (#2543) */ copy id,
106104
ast::item_mod(m0), vis, mod_attrs);
107-
// Thread defids, chpos and byte_pos through the parsers
108-
update_parse_sess_position(&cx.sess, &r0);
109105
items.push(i);
110106
}
111107
ast::cdir_dir_mod(vis, id, cdirs, attrs) => {

0 commit comments

Comments
 (0)