@@ -195,7 +195,7 @@ fn scan_dec_digits(rdr: reader) -> str {
195
195
196
196
fn scan_number ( c : char , rdr : reader ) -> token:: token {
197
197
let accum_int = 0 ;
198
- let dec_str : str = "" ;
198
+ let num_str : str = "" ;
199
199
let is_dec_integer: bool = false ;
200
200
let n = rdr. next ( ) ;
201
201
if c == '0' && n == 'x' {
@@ -216,8 +216,8 @@ fn scan_number(c: char, rdr: reader) -> token::token {
216
216
rdr. bump ( ) ;
217
217
c = rdr. curr ( ) ;
218
218
}
219
- } else { dec_str = scan_dec_digits ( rdr) ; is_dec_integer = true ; }
220
- if is_dec_integer { accum_int = digits_to_string ( dec_str ) ; }
219
+ } else { num_str = scan_dec_digits ( rdr) ; is_dec_integer = true ; }
220
+ if is_dec_integer { accum_int = digits_to_string ( num_str ) ; }
221
221
c = rdr. curr ( ) ;
222
222
n = rdr. next ( ) ;
223
223
if c == 'u' || c == 'i' {
@@ -256,53 +256,50 @@ fn scan_number(c: char, rdr: reader) -> token::token {
256
256
ret token:: LIT_INT ( accum_int) ;
257
257
} else {
258
258
// FIXME: should cast in the target bit-width.
259
-
260
259
ret token:: LIT_UINT ( accum_int as uint ) ;
261
260
}
262
261
}
263
- c = rdr. curr ( ) ;
264
- if c == '.' {
265
- // Parse a floating-point number.
266
-
262
+ let is_float = false ;
263
+ if rdr. curr ( ) == '.' {
264
+ is_float = true ;
267
265
rdr. bump ( ) ;
268
266
let dec_part = scan_dec_digits ( rdr) ;
269
- let float_str = dec_str + "." + dec_part;
270
- c = rdr. curr ( ) ;
271
- let exponent_str = scan_exponent ( rdr) ;
272
- alt exponent_str { some( s) { float_str += s; } none. { } }
267
+ num_str += "." + dec_part;
268
+ }
269
+ alt scan_exponent ( rdr) {
270
+ some ( s) {
271
+ is_float = true ;
272
+ num_str += s;
273
+ }
274
+ none. { }
275
+ }
276
+ if rdr. curr ( ) == 'f' {
277
+ rdr. bump ( ) ;
273
278
c = rdr. curr ( ) ;
274
- if c == 'f' {
279
+ n = rdr. next ( ) ;
280
+ if c == '3' && n == '2' {
275
281
rdr. bump ( ) ;
276
- c = rdr. curr ( ) ;
277
- n = rdr. next ( ) ;
278
- if c == '3' && n == '2' {
279
- rdr. bump ( ) ;
280
- rdr. bump ( ) ;
281
- ret token:: LIT_MACH_FLOAT ( ast:: ty_f32,
282
- intern ( * rdr. get_interner ( ) ,
283
- float_str) ) ;
284
- } else if c == '6' && n == '4' {
285
- rdr. bump ( ) ;
286
- rdr. bump ( ) ;
287
- ret token:: LIT_MACH_FLOAT ( ast:: ty_f64,
288
- intern ( * rdr. get_interner ( ) ,
289
- float_str) ) ;
290
- /* FIXME: if this is out of range for either a 32-bit or
291
- 64-bit float, it won't be noticed till the back-end */
292
-
293
- }
282
+ rdr. bump ( ) ;
283
+ ret token:: LIT_MACH_FLOAT ( ast:: ty_f32,
284
+ intern ( * rdr. get_interner ( ) ,
285
+ num_str) ) ;
286
+ } else if c == '6' && n == '4' {
287
+ rdr. bump ( ) ;
288
+ rdr. bump ( ) ;
289
+ ret token:: LIT_MACH_FLOAT ( ast:: ty_f64,
290
+ intern ( * rdr. get_interner ( ) ,
291
+ num_str) ) ;
292
+ /* FIXME: if this is out of range for either a 32-bit or
293
+ 64-bit float, it won't be noticed till the back-end */
294
294
} else {
295
- ret token:: LIT_FLOAT ( interner:: intern :: < str > ( * rdr. get_interner ( ) ,
296
- float_str) ) ;
295
+ is_float = true ;
297
296
}
298
297
}
299
- let maybe_exponent = scan_exponent ( rdr) ;
300
- alt maybe_exponent {
301
- some( s) {
298
+ if is_float {
302
299
ret token:: LIT_FLOAT ( interner:: intern :: < str > ( * rdr. get_interner ( ) ,
303
- dec_str + s ) ) ;
304
- }
305
- none . { ret token :: LIT_INT ( accum_int) ; }
300
+ num_str ) ) ;
301
+ } else {
302
+ ret token:: LIT_INT ( accum_int) ;
306
303
}
307
304
}
308
305
0 commit comments