@@ -24,24 +24,25 @@ use core::either;
24
24
use core:: str;
25
25
use core:: u64;
26
26
27
- pub use ext:: tt:: transcribe:: { tt_reader, new_tt_reader} ;
27
+ pub use ext:: tt:: transcribe:: { tt_reader, tt_reader_ , new_tt_reader} ;
28
28
29
- use std;
29
+ // use std;
30
30
31
31
pub trait reader {
32
- fn is_eof ( ) -> bool ;
33
- fn next_token ( ) -> TokenAndSpan ;
34
- fn fatal ( ~str ) -> !;
35
- fn span_diag ( ) -> span_handler ;
36
- pure fn interner ( ) -> @token:: ident_interner ;
37
- fn peek ( ) -> TokenAndSpan ;
38
- fn dup ( ) -> reader ;
32
+ fn is_eof ( & self ) -> bool ;
33
+ fn next_token ( & self ) -> TokenAndSpan ;
34
+ fn fatal ( & self , ~str ) -> !;
35
+ fn span_diag ( & self ) -> span_handler ;
36
+ pure fn interner ( & self ) -> @token:: ident_interner ;
37
+ fn peek ( & self ) -> TokenAndSpan ;
38
+ fn dup ( & self ) -> reader ;
39
39
}
40
40
41
41
#[ deriving_eq]
42
42
pub struct TokenAndSpan { tok : token:: Token , sp : span }
43
43
44
- pub type string_reader = @{
44
+ pub type string_reader = @string_reader_ ;
45
+ pub type string_reader_ = {
45
46
span_diagnostic : span_handler ,
46
47
src : @~str ,
47
48
// The absolute offset within the codemap of the next character to read
@@ -90,7 +91,7 @@ pub fn new_low_level_string_reader(span_diagnostic: span_handler,
90
91
// duplicating the string reader is probably a bad idea, in
91
92
// that using them will cause interleaved pushes of line
92
93
// offsets to the underlying filemap...
93
- fn dup_string_reader ( & & r: string_reader ) -> string_reader {
94
+ fn dup_string_reader ( r : & string_reader_ ) -> string_reader {
94
95
@{ span_diagnostic: r. span_diagnostic , src: r. src ,
95
96
mut pos: r. pos ,
96
97
mut last_pos: r. last_pos ,
@@ -99,28 +100,28 @@ fn dup_string_reader(&&r: string_reader) -> string_reader {
99
100
mut peek_tok: r. peek_tok , mut peek_span: r. peek_span }
100
101
}
101
102
102
- impl string_reader : reader {
103
- fn is_eof ( ) -> bool { is_eof ( self ) }
103
+ impl string_reader_ : reader {
104
+ fn is_eof ( & self ) -> bool { is_eof ( self ) }
104
105
// return the next token. EFFECT: advances the string_reader.
105
- fn next_token ( ) -> TokenAndSpan {
106
+ fn next_token ( & self ) -> TokenAndSpan {
106
107
let ret_val = TokenAndSpan { tok : self . peek_tok , sp : self . peek_span } ;
107
108
string_advance_token ( self ) ;
108
109
return ret_val;
109
110
}
110
- fn fatal ( m : ~str ) -> ! {
111
+ fn fatal ( & self , m : ~str ) -> ! {
111
112
self . span_diagnostic . span_fatal ( copy self . peek_span , m)
112
113
}
113
- fn span_diag ( ) -> span_handler { self . span_diagnostic }
114
- pure fn interner ( ) -> @token:: ident_interner { self . interner }
115
- fn peek ( ) -> TokenAndSpan {
114
+ fn span_diag ( & self ) -> span_handler { self . span_diagnostic }
115
+ pure fn interner ( & self ) -> @token:: ident_interner { self . interner }
116
+ fn peek ( & self ) -> TokenAndSpan {
116
117
TokenAndSpan { tok : self . peek_tok , sp : self . peek_span }
117
118
}
118
- fn dup ( ) -> reader { dup_string_reader ( self ) as reader }
119
+ fn dup ( & self ) -> reader { dup_string_reader ( self ) as reader }
119
120
}
120
121
121
- pub impl tt_reader : reader {
122
- fn is_eof ( ) -> bool { self . cur_tok == token:: EOF }
123
- fn next_token ( ) -> TokenAndSpan {
122
+ pub impl tt_reader_ : reader {
123
+ fn is_eof ( & self ) -> bool { self . cur_tok == token:: EOF }
124
+ fn next_token ( & self ) -> TokenAndSpan {
124
125
/* weird resolve bug: if the following `if`, or any of its
125
126
statements are removed, we get resolution errors */
126
127
if false {
@@ -129,19 +130,19 @@ pub impl tt_reader: reader {
129
130
}
130
131
tt_next_token ( self )
131
132
}
132
- fn fatal ( m : ~str ) -> ! {
133
+ fn fatal ( & self , m : ~str ) -> ! {
133
134
self . sp_diag . span_fatal ( copy self . cur_span , m) ;
134
135
}
135
- fn span_diag ( ) -> span_handler { self . sp_diag }
136
- pure fn interner ( ) -> @token:: ident_interner { self . interner }
137
- fn peek ( ) -> TokenAndSpan {
136
+ fn span_diag ( & self ) -> span_handler { self . sp_diag }
137
+ pure fn interner ( & self ) -> @token:: ident_interner { self . interner }
138
+ fn peek ( & self ) -> TokenAndSpan {
138
139
TokenAndSpan { tok : self . cur_tok , sp : self . cur_span }
139
140
}
140
- fn dup ( ) -> reader { dup_tt_reader ( self ) as reader }
141
+ fn dup ( & self ) -> reader { dup_tt_reader ( self ) as reader }
141
142
}
142
143
143
144
// EFFECT: advance peek_tok and peek_span to refer to the next token.
144
- fn string_advance_token ( & & r: string_reader ) {
145
+ fn string_advance_token ( r : & string_reader_ ) {
145
146
match ( consume_whitespace_and_comments ( r) ) {
146
147
Some ( comment) => {
147
148
r. peek_tok = comment. tok ;
@@ -159,11 +160,11 @@ fn string_advance_token(&&r: string_reader) {
159
160
}
160
161
}
161
162
162
- fn byte_offset ( rdr : string_reader ) -> BytePos {
163
+ fn byte_offset ( rdr : & string_reader_ ) -> BytePos {
163
164
( rdr. pos - rdr. filemap . start_pos )
164
165
}
165
166
166
- pub fn get_str_from ( rdr : string_reader , start : BytePos ) -> ~str {
167
+ pub fn get_str_from ( rdr : & string_reader_ , start : BytePos ) -> ~str {
167
168
unsafe {
168
169
// I'm pretty skeptical about this subtraction. What if there's a
169
170
// multi-byte character before the mark?
@@ -174,7 +175,7 @@ pub fn get_str_from(rdr: string_reader, start: BytePos) -> ~str {
174
175
175
176
// EFFECT: advance the StringReader by one character. If a newline is
176
177
// discovered, add it to the FileMap's list of line start offsets.
177
- pub fn bump ( rdr : string_reader ) {
178
+ pub fn bump ( rdr : & string_reader_ ) {
178
179
rdr. last_pos = rdr. pos ;
179
180
let current_byte_offset = byte_offset ( rdr) . to_uint ( ) ; ;
180
181
if current_byte_offset < ( * rdr. src ) . len ( ) {
@@ -198,10 +199,10 @@ pub fn bump(rdr: string_reader) {
198
199
rdr. curr = -1 as char ;
199
200
}
200
201
}
201
- pub fn is_eof ( rdr : string_reader ) -> bool {
202
+ pub fn is_eof ( rdr : & string_reader_ ) -> bool {
202
203
rdr. curr == -1 as char
203
204
}
204
- pub fn nextch ( rdr : string_reader ) -> char {
205
+ pub fn nextch ( rdr : & string_reader_ ) -> char {
205
206
let offset = byte_offset ( rdr) . to_uint ( ) ;
206
207
if offset < ( * rdr. src ) . len ( ) {
207
208
return str:: char_at ( * rdr. src , offset) ;
@@ -246,7 +247,7 @@ fn is_bin_digit(c: char) -> bool { return c == '0' || c == '1'; }
246
247
247
248
// EFFECT: eats whitespace and comments.
248
249
// returns a Some(sugared-doc-attr) if one exists, None otherwise.
249
- fn consume_whitespace_and_comments ( rdr : string_reader )
250
+ fn consume_whitespace_and_comments ( rdr : & string_reader_ )
250
251
-> Option < TokenAndSpan > {
251
252
while is_whitespace ( rdr. curr ) { bump ( rdr) ; }
252
253
return consume_any_line_comment ( rdr) ;
@@ -255,7 +256,7 @@ fn consume_whitespace_and_comments(rdr: string_reader)
255
256
// PRECONDITION: rdr.curr is not whitespace
256
257
// EFFECT: eats any kind of comment.
257
258
// returns a Some(sugared-doc-attr) if one exists, None otherwise
258
- fn consume_any_line_comment ( rdr : string_reader )
259
+ fn consume_any_line_comment ( rdr : & string_reader_ )
259
260
-> Option < TokenAndSpan > {
260
261
if rdr. curr == '/' {
261
262
match nextch ( rdr) {
@@ -298,7 +299,7 @@ fn consume_any_line_comment(rdr: string_reader)
298
299
}
299
300
300
301
// might return a sugared-doc-attr
301
- fn consume_block_comment ( rdr : string_reader )
302
+ fn consume_block_comment ( rdr : & string_reader_ )
302
303
-> Option < TokenAndSpan > {
303
304
304
305
// block comments starting with "/**" or "/*!" are doc-comments
@@ -337,7 +338,7 @@ fn consume_block_comment(rdr: string_reader)
337
338
return consume_whitespace_and_comments ( rdr) ;
338
339
}
339
340
340
- fn scan_exponent ( rdr : string_reader ) -> Option < ~str > {
341
+ fn scan_exponent ( rdr : & string_reader_ ) -> Option < ~str > {
341
342
let mut c = rdr. curr ;
342
343
let mut rslt = ~"";
343
344
if c == 'e' || c == 'E' {
@@ -355,7 +356,7 @@ fn scan_exponent(rdr: string_reader) -> Option<~str> {
355
356
} else { return None :: < ~str > ; }
356
357
}
357
358
358
- fn scan_digits ( rdr : string_reader , radix : uint ) -> ~str {
359
+ fn scan_digits ( rdr : & string_reader_ , radix : uint ) -> ~str {
359
360
let mut rslt = ~"";
360
361
loop {
361
362
let c = rdr. curr ;
@@ -370,7 +371,7 @@ fn scan_digits(rdr: string_reader, radix: uint) -> ~str {
370
371
} ;
371
372
}
372
373
373
- fn scan_number( c : char , rdr : string_reader ) -> token:: Token {
374
+ fn scan_number( c : char , rdr : & string_reader_ ) -> token:: Token {
374
375
let mut num_str, base = 10 u, c = c, n = nextch ( rdr) ;
375
376
if c == '0' && n == 'x' {
376
377
bump ( rdr) ;
@@ -486,7 +487,7 @@ fn scan_number(c: char, rdr: string_reader) -> token::Token {
486
487
}
487
488
}
488
489
489
- fn scan_numeric_escape ( rdr : string_reader , n_hex_digits : uint ) -> char {
490
+ fn scan_numeric_escape ( rdr : & string_reader_ , n_hex_digits : uint ) -> char {
490
491
let mut accum_int = 0 , i = n_hex_digits;
491
492
while i != 0 u {
492
493
let n = rdr. curr ;
@@ -501,7 +502,7 @@ fn scan_numeric_escape(rdr: string_reader, n_hex_digits: uint) -> char {
501
502
return accum_int as char ;
502
503
}
503
504
504
- fn next_token_inner( rdr : string_reader ) -> token:: Token {
505
+ fn next_token_inner( rdr : & string_reader_ ) -> token:: Token {
505
506
let mut accum_str = ~"";
506
507
let mut c = rdr. curr ;
507
508
if ( c >= 'a' && c <= 'z' )
@@ -526,7 +527,7 @@ fn next_token_inner(rdr: string_reader) -> token::Token {
526
527
if is_dec_digit ( c) {
527
528
return scan_number ( c, rdr) ;
528
529
}
529
- fn binop ( rdr : string_reader , op : token:: binop ) -> token:: Token {
530
+ fn binop ( rdr : & string_reader_ , op : token:: binop ) -> token:: Token {
530
531
bump ( rdr) ;
531
532
if rdr. curr == '=' {
532
533
bump ( rdr) ;
@@ -719,7 +720,7 @@ fn next_token_inner(rdr: string_reader) -> token::Token {
719
720
}
720
721
}
721
722
722
- fn consume_whitespace ( rdr : string_reader ) {
723
+ fn consume_whitespace ( rdr : & string_reader_ ) {
723
724
while is_whitespace ( rdr. curr ) && !is_eof ( rdr) { bump ( rdr) ; }
724
725
}
725
726
@@ -730,7 +731,7 @@ pub mod test {
730
731
use util:: interner;
731
732
use diagnostic;
732
733
use util:: testing:: { check_equal, check_equal_ptr} ;
733
- #[ test ] fn t1 ( ) {
734
+ #[ tetst ] fn t1 ( ) {
734
735
let teststr =
735
736
@~"/* my source file * /
736
737
fn main ( ) { io:: println ( ~\" zebra\" ) ; } \n ";
0 commit comments