@@ -11,7 +11,6 @@ export parse_crate_from_source_str;
11
11
export parse_expr_from_source_str, parse_item_from_source_str;
12
12
export parse_stmt_from_source_str;
13
13
export parse_from_source_str;
14
- export update_parse_sess_position;
15
14
16
15
use parser:: Parser ;
17
16
use attr:: parser_attr;
@@ -28,8 +27,6 @@ type parse_sess = @{
28
27
mut next_id : node_id ,
29
28
span_diagnostic : span_handler ,
30
29
interner : @ident_interner ,
31
- // must be kept up to date
32
- mut pos : BytePos
33
30
} ;
34
31
35
32
fn new_parse_sess ( demitter : Option < emitter > ) -> parse_sess {
@@ -38,7 +35,6 @@ fn new_parse_sess(demitter: Option<emitter>) -> parse_sess {
38
35
mut next_id: 1 ,
39
36
span_diagnostic: mk_span_handler ( mk_handler ( demitter) , cm) ,
40
37
interner: mk_ident_interner ( ) ,
41
- mut pos: BytePos ( 0 )
42
38
} ;
43
39
}
44
40
@@ -48,7 +44,6 @@ fn new_parse_sess_special_handler(sh: span_handler, cm: @codemap::CodeMap)
48
44
mut next_id: 1 ,
49
45
span_diagnostic: sh,
50
46
interner: mk_ident_interner ( ) ,
51
- mut pos: BytePos ( 0 )
52
47
} ;
53
48
}
54
49
@@ -66,14 +61,13 @@ fn parse_crate_from_file(input: &Path, cfg: ast::crate_cfg,
66
61
67
62
fn parse_crate_from_crate_file(input: &Path, cfg: ast::crate_cfg,
68
63
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);
71
66
let lo = p.span.lo;
72
67
let prefix = input.dir_path();
73
68
let leading_attrs = p.parse_inner_attrs_and_next();
74
69
let { inner: crate_attrs, next: first_cdir_attr } = leading_attrs;
75
70
let cdirs = p.parse_crate_directives(token::EOF, first_cdir_attr);
76
- update_parse_sess_position(&sess, &rdr);
77
71
let cx = @{sess: sess, cfg: /* FIXME (#2543) */ copy p.cfg};
78
72
let companionmod = input.filestem().map(|s| Path(*s));
79
73
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,
90
84
91
85
fn parse_crate_from_source_file(input: &Path, cfg: ast::crate_cfg,
92
86
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);
95
89
let r = p.parse_crate_mod(cfg);
96
- update_parse_sess_position(&sess, &rdr);
97
90
return r;
98
91
}
99
92
100
93
fn parse_crate_from_source_str(name: ~str, source: @~str, cfg: ast::crate_cfg,
101
94
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);
104
97
let r = p.parse_crate_mod(cfg);
105
98
p.abort_if_errors();
106
- update_parse_sess_position(&sess, &rdr);
107
99
return r;
108
100
}
109
101
110
102
fn parse_expr_from_source_str(name: ~str, source: @~str, cfg: ast::crate_cfg,
111
103
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);
114
106
let r = p.parse_expr();
115
107
p.abort_if_errors();
116
- update_parse_sess_position(&sess, &rdr);
117
108
return r;
118
109
}
119
110
120
111
fn parse_item_from_source_str(name: ~str, source: @~str, cfg: ast::crate_cfg,
121
112
+attrs: ~[ast::attribute],
122
113
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);
125
116
let r = p.parse_item(attrs);
126
117
p.abort_if_errors();
127
- update_parse_sess_position(&sess, &rdr);
128
118
return r;
129
119
}
130
120
131
121
fn parse_stmt_from_source_str(name: ~str, source: @~str, cfg: ast::crate_cfg,
132
122
+attrs: ~[ast::attribute],
133
123
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);
136
126
let r = p.parse_stmt(attrs);
137
127
p.abort_if_errors();
138
- update_parse_sess_position(&sess, &rdr);
139
128
return r;
140
129
}
141
130
@@ -145,14 +134,13 @@ fn parse_from_source_str<T>(f: fn (p: Parser) -> T,
145
134
sess: parse_sess)
146
135
-> T
147
136
{
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);
150
139
let r = f(p);
151
140
if !p.reader.is_eof() {
152
141
p.reader.fatal(~" expected end-of-string") ;
153
142
}
154
143
p. abort_if_errors ( ) ;
155
- update_parse_sess_position ( & sess, & rdr) ;
156
144
move r
157
145
}
158
146
@@ -164,47 +152,28 @@ fn next_node_id(sess: parse_sess) -> node_id {
164
152
return rv;
165
153
}
166
154
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
-
179
155
fn new_parser_from_source_str ( sess : parse_sess , cfg : ast:: crate_cfg ,
180
156
+name : ~str , +ss : codemap:: FileSubstr ,
181
157
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) ;
184
163
}
185
164
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 {
190
167
let res = io:: read_whole_file_str ( path) ;
191
168
match res {
192
169
result:: Ok ( _) => { /* Continue. */ }
193
170
result:: Err ( e) => sess. span_diagnostic . handler ( ) . fatal ( e)
194
171
}
195
172
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) ;
199
174
let srdr = lexer:: new_string_reader ( sess. span_diagnostic , filemap,
200
175
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) ;
208
177
}
209
178
210
179
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,
213
182
None , tt) ;
214
183
return Parser ( sess, cfg, trdr as reader , parser:: SOURCE_FILE )
215
184
}
216
-
217
- fn update_parse_sess_position ( sess : & parse_sess , r : & lexer:: string_reader ) {
218
- sess. pos = r. last_pos
219
- }
0 commit comments