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