@@ -20,16 +20,15 @@ use util::interner;
20
20
use diagnostic:: { span_handler, mk_span_handler, mk_handler, emitter} ;
21
21
use lexer:: { reader, string_reader} ;
22
22
use parse:: token:: { ident_interner, mk_ident_interner} ;
23
- use codemap:: { CodeMap , FileMap , CharPos , BytePos } ;
23
+ use codemap:: { CodeMap , FileMap , CharPos , BytePos , FilePos } ;
24
24
25
25
type parse_sess = @{
26
26
cm : @codemap:: CodeMap ,
27
27
mut next_id : node_id ,
28
28
span_diagnostic : span_handler ,
29
29
interner : @ident_interner ,
30
- // these two must be kept up to date
31
- mut chpos : CharPos ,
32
- mut byte_pos : BytePos
30
+ // must be kept up to date
31
+ mut pos : FilePos
33
32
} ;
34
33
35
34
fn new_parse_sess ( demitter : Option < emitter > ) -> parse_sess {
@@ -38,7 +37,10 @@ fn new_parse_sess(demitter: Option<emitter>) -> parse_sess {
38
37
mut next_id: 1 ,
39
38
span_diagnostic: mk_span_handler ( mk_handler ( demitter) , cm) ,
40
39
interner: mk_ident_interner ( ) ,
41
- mut chpos: CharPos ( 0 u) , mut byte_pos: BytePos ( 0 u) } ;
40
+ mut pos: FilePos {
41
+ ch : CharPos ( 0 u) ,
42
+ byte : BytePos ( 0 u)
43
+ } } ;
42
44
}
43
45
44
46
fn new_parse_sess_special_handler ( sh : span_handler , cm : @codemap:: CodeMap )
@@ -47,7 +49,10 @@ fn new_parse_sess_special_handler(sh: span_handler, cm: @codemap::CodeMap)
47
49
mut next_id: 1 ,
48
50
span_diagnostic: sh,
49
51
interner: mk_ident_interner ( ) ,
50
- mut chpos: CharPos ( 0 u) , mut byte_pos: BytePos ( 0 u) } ;
52
+ mut pos: FilePos {
53
+ ch : CharPos ( 0 u) ,
54
+ byte : BytePos ( 0 u)
55
+ } } ;
51
56
}
52
57
53
58
fn parse_crate_from_file ( input : & Path , cfg : ast:: crate_cfg ,
@@ -71,8 +76,7 @@ fn parse_crate_from_crate_file(input: &Path, cfg: ast::crate_cfg,
71
76
let leading_attrs = p.parse_inner_attrs_and_next();
72
77
let { inner: crate_attrs, next: first_cdir_attr } = leading_attrs;
73
78
let cdirs = p.parse_crate_directives(token::EOF, first_cdir_attr);
74
- sess.chpos = rdr.chpos;
75
- sess.byte_pos = sess.byte_pos + rdr.pos;
79
+ eval::update_parse_sess_position(&sess, &rdr);
76
80
let cx = @{sess: sess, cfg: /* FIXME (#2543) */ copy p.cfg};
77
81
let companionmod = input.filestem().map(|s| Path(*s));
78
82
let (m, attrs) = eval::eval_crate_directives_to_mod(
@@ -92,8 +96,7 @@ fn parse_crate_from_source_file(input: &Path, cfg: ast::crate_cfg,
92
96
let (p, rdr) = new_parser_etc_from_file(sess, cfg, input,
93
97
parser::SOURCE_FILE);
94
98
let r = p.parse_crate_mod(cfg);
95
- sess.chpos = rdr.chpos;
96
- sess.byte_pos = sess.byte_pos + rdr.pos;
99
+ eval::update_parse_sess_position(&sess, &rdr);
97
100
return r;
98
101
}
99
102
@@ -103,8 +106,7 @@ fn parse_crate_from_source_str(name: ~str, source: @~str, cfg: ast::crate_cfg,
103
106
codemap::FssNone, source);
104
107
let r = p.parse_crate_mod(cfg);
105
108
p.abort_if_errors();
106
- sess.chpos = rdr.chpos;
107
- sess.byte_pos = sess.byte_pos + rdr.pos;
109
+ eval::update_parse_sess_position(&sess, &rdr);
108
110
return r;
109
111
}
110
112
@@ -114,8 +116,7 @@ fn parse_expr_from_source_str(name: ~str, source: @~str, cfg: ast::crate_cfg,
114
116
codemap::FssNone, source);
115
117
let r = p.parse_expr();
116
118
p.abort_if_errors();
117
- sess.chpos = rdr.chpos;
118
- sess.byte_pos = sess.byte_pos + rdr.pos;
119
+ eval::update_parse_sess_position(&sess, &rdr);
119
120
return r;
120
121
}
121
122
@@ -126,8 +127,7 @@ fn parse_item_from_source_str(name: ~str, source: @~str, cfg: ast::crate_cfg,
126
127
codemap::FssNone, source);
127
128
let r = p.parse_item(attrs);
128
129
p.abort_if_errors();
129
- sess.chpos = rdr.chpos;
130
- sess.byte_pos = sess.byte_pos + rdr.pos;
130
+ eval::update_parse_sess_position(&sess, &rdr);
131
131
return r;
132
132
}
133
133
@@ -138,8 +138,7 @@ fn parse_stmt_from_source_str(name: ~str, source: @~str, cfg: ast::crate_cfg,
138
138
codemap::FssNone, source);
139
139
let r = p.parse_stmt(attrs);
140
140
p.abort_if_errors();
141
- sess.chpos = rdr.chpos;
142
- sess.byte_pos = sess.byte_pos + rdr.pos;
141
+ eval::update_parse_sess_position(&sess, &rdr);
143
142
return r;
144
143
}
145
144
@@ -156,8 +155,7 @@ fn parse_from_source_str<T>(f: fn (p: Parser) -> T,
156
155
p.reader.fatal(~" expected end-of-string") ;
157
156
}
158
157
p. abort_if_errors ( ) ;
159
- sess. chpos = rdr. chpos ;
160
- sess. byte_pos = sess. byte_pos + rdr. pos ;
158
+ eval:: update_parse_sess_position ( & sess, & rdr) ;
161
159
move r
162
160
}
163
161
@@ -174,7 +172,7 @@ fn new_parser_etc_from_source_str(sess: parse_sess, cfg: ast::crate_cfg,
174
172
source : @~str ) -> ( Parser , string_reader ) {
175
173
let ftype = parser:: SOURCE_FILE ;
176
174
let filemap = @FileMap :: new_w_substr
177
- ( name, ss, source, sess. chpos , sess . byte_pos ) ;
175
+ ( name, ss, source, sess. pos ) ;
178
176
sess. cm . files . push ( filemap) ;
179
177
let srdr = lexer:: new_string_reader ( sess. span_diagnostic , filemap,
180
178
sess. interner ) ;
@@ -199,7 +197,7 @@ fn new_parser_etc_from_file(sess: parse_sess, cfg: ast::crate_cfg,
199
197
}
200
198
let src = @result:: unwrap ( res) ;
201
199
let filemap = @FileMap :: new ( path. to_str ( ) , src,
202
- sess. chpos , sess . byte_pos ) ;
200
+ sess. pos ) ;
203
201
sess. cm . files . push ( filemap) ;
204
202
let srdr = lexer:: new_string_reader ( sess. span_diagnostic , filemap,
205
203
sess. interner ) ;
0 commit comments