@@ -276,6 +276,11 @@ fn hex_digit_val(c: char) -> int {
276
276
fail ! ( ) ;
277
277
}
278
278
279
+ fn oct_digit_val ( c : char ) -> int {
280
+ if in_range ( c, '0' , '7' ) { return ( c as int ) - ( '0' as int ) ; }
281
+ fail ! ( ) ;
282
+ }
283
+
279
284
fn bin_digit_value ( c : char ) -> int { if c == '0' { return 0 ; } return 1 ; }
280
285
281
286
pub fn is_whitespace ( c : char ) -> bool {
@@ -293,6 +298,8 @@ fn is_hex_digit(c: char) -> bool {
293
298
in_range ( c, 'A' , 'F' ) ;
294
299
}
295
300
301
+ fn is_oct_digit ( c : char ) -> bool { return in_range ( c, '0' , '7' ) ; }
302
+
296
303
fn is_bin_digit ( c : char ) -> bool { return c == '0' || c == '1' ; }
297
304
298
305
// EFFECT: eats whitespace and comments.
@@ -464,6 +471,10 @@ fn scan_number(c: char, rdr: @mut StringReader) -> token::Token {
464
471
bump ( rdr) ;
465
472
bump ( rdr) ;
466
473
base = 16 u;
474
+ } else if c == '0' && n == 'o' {
475
+ bump ( rdr) ;
476
+ bump ( rdr) ;
477
+ base = 8 u;
467
478
} else if c == '0' && n == 'b' {
468
479
bump ( rdr) ;
469
480
bump ( rdr) ;
@@ -529,6 +540,8 @@ fn scan_number(c: char, rdr: @mut StringReader) -> token::Token {
529
540
match base {
530
541
16 u => fatal_span ( rdr, start_bpos, rdr. last_pos ,
531
542
~"hexadecimal float literal is not supported") ,
543
+ 8 u => fatal_span ( rdr, start_bpos, rdr. last_pos ,
544
+ ~"octal float literal is not supported") ,
532
545
2 u => fatal_span ( rdr, start_bpos, rdr. last_pos ,
533
546
~"binary float literal is not supported") ,
534
547
_ => ( )
0 commit comments