@@ -19,9 +19,7 @@ type reader =
19
19
fn next ( ) -> char ;
20
20
fn init ( ) ;
21
21
fn bump ( ) ;
22
- fn mark ( ) ;
23
- fn get_mark_chpos ( ) -> uint ;
24
- fn get_mark_str ( ) -> str ;
22
+ fn get_str_from ( uint ) -> str ;
25
23
fn get_interner ( ) -> @interner:: interner [ str ] ;
26
24
fn get_chpos ( ) -> uint ;
27
25
fn get_byte_pos ( ) -> uint ;
@@ -38,21 +36,16 @@ fn new_reader(&codemap::codemap cm, str src, codemap::filemap filemap,
38
36
mutable uint col,
39
37
mutable uint pos,
40
38
mutable char ch,
41
- mutable uint mark_pos,
42
- mutable uint mark_chpos,
43
39
mutable uint chpos,
44
40
mutable str[ ] strs,
45
41
codemap:: filemap fm,
46
42
@interner:: interner[ str] itr) {
47
43
fn is_eof ( ) -> bool { ret ch == -1 as char ; }
48
- fn mark ( ) { mark_pos = pos; mark_chpos = chpos; }
49
- fn get_mark_str ( ) -> str {
44
+ fn get_str_from ( uint start ) -> str {
50
45
// I'm pretty skeptical about this subtraction. What if there's a
51
46
// multi-byte character before the mark?
52
- ret str:: slice ( src, mark_pos - 1 u,
53
- pos - 1 u) ;
47
+ ret str:: slice ( src, start - 1 u, pos - 1 u) ;
54
48
}
55
- fn get_mark_chpos ( ) -> uint { ret mark_chpos; }
56
49
fn get_chpos ( ) -> uint { ret chpos; }
57
50
fn get_byte_pos ( ) -> uint { ret pos; }
58
51
fn curr ( ) -> char { ret ch; }
@@ -90,9 +83,8 @@ fn new_reader(&codemap::codemap cm, str src, codemap::filemap filemap,
90
83
}
91
84
let str[ ] strs = ~[ ] ;
92
85
auto rd =
93
- reader ( cm, src, str:: byte_len ( src) , 0 u, 0 u, -1 as char , 0 u,
94
- filemap. start_pos . ch , filemap. start_pos . ch , strs, filemap,
95
- itr) ;
86
+ reader ( cm, src, str:: byte_len ( src) , 0 u, 0 u, -1 as char ,
87
+ filemap. start_pos . ch , strs, filemap, itr) ;
96
88
rd. init ( ) ;
97
89
ret rd;
98
90
}
@@ -346,11 +338,17 @@ fn scan_numeric_escape(&reader rdr, uint n_hex_digits) -> char {
346
338
ret accum_int as char ;
347
339
}
348
340
349
- fn next_token ( & reader rdr) -> token:: token {
350
- auto accum_str = "" ;
341
+ fn next_token ( & reader rdr) -> tup ( token:: token , uint , uint ) {
351
342
consume_whitespace_and_comments ( rdr) ;
352
- if ( rdr. is_eof ( ) ) { ret token:: EOF ; }
353
- rdr. mark ( ) ;
343
+ auto start_chpos = rdr. get_chpos ( ) ;
344
+ auto start_bpos = rdr. get_byte_pos ( ) ;
345
+ auto tok = if rdr. is_eof ( ) { token:: EOF }
346
+ else { next_token_inner ( rdr) } ;
347
+ ret tup( tok, start_chpos, start_bpos) ;
348
+ }
349
+
350
+ fn next_token_inner ( & reader rdr) -> token:: token {
351
+ auto accum_str = "" ;
354
352
auto c = rdr. curr ( ) ;
355
353
if ( is_alpha ( c) || c == '_' ) {
356
354
while ( is_alnum ( c) || c == '_' ) {
@@ -762,11 +760,10 @@ fn gather_comments_and_literals(&codemap::codemap cm, str path)
762
760
break ;
763
761
}
764
762
auto tok = next_token ( rdr) ;
765
- if ( is_lit ( tok) ) {
766
- literals += ~[ rec ( lit=rdr. get_mark_str ( ) ,
767
- pos=rdr. get_mark_chpos ( ) ) ] ;
763
+ if ( is_lit ( tok. _0 ) ) {
764
+ literals += ~[ rec ( lit=rdr. get_str_from ( tok. _2 ) , pos=tok. _1 ) ] ;
768
765
}
769
- log "tok: " + token:: to_str ( rdr, tok) ;
766
+ log "tok: " + token:: to_str ( rdr, tok. _0 ) ;
770
767
first_read = false ;
771
768
}
772
769
ret rec ( cmnts=comments, lits=literals) ;
0 commit comments