diff options
| author | bors <bors@rust-lang.org> | 2013-11-07 17:26:12 -0800 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2013-11-07 17:26:12 -0800 |
| commit | f00bb2ec0462cba7ad9be04db44a3b1255aaafc6 (patch) | |
| tree | bde8b31ecfd8bfe9e0c2010ebdf63b4879c2bbda /src/libsyntax/parse | |
| parent | a0593e50456b53347101afe5343aac01c85da63a (diff) | |
| parent | 6eba332d0e7d4915184c9952b73643b59db9c417 (diff) | |
| download | rust-f00bb2ec0462cba7ad9be04db44a3b1255aaafc6.tar.gz rust-f00bb2ec0462cba7ad9be04db44a3b1255aaafc6.zip | |
auto merge of #10243 : mattcarberry/rust/master, r=brson
Associated with Issue #6563. Useful for Apollo Guidance Computer simulation, Unix file system permissions, and maybe one or two other things.
Diffstat (limited to 'src/libsyntax/parse')
| -rw-r--r-- | src/libsyntax/parse/lexer.rs | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/src/libsyntax/parse/lexer.rs b/src/libsyntax/parse/lexer.rs index 49445312a12..06a2c557e42 100644 --- a/src/libsyntax/parse/lexer.rs +++ b/src/libsyntax/parse/lexer.rs @@ -276,6 +276,11 @@ fn hex_digit_val(c: char) -> int { fail!(); } +fn oct_digit_val(c: char) -> int { + if in_range(c, '0', '7') { return (c as int) - ('0' as int); } + fail!(); +} + fn bin_digit_value(c: char) -> int { if c == '0' { return 0; } return 1; } pub fn is_whitespace(c: char) -> bool { @@ -293,6 +298,8 @@ fn is_hex_digit(c: char) -> bool { in_range(c, 'A', 'F'); } +fn is_oct_digit(c: char) -> bool { return in_range(c, '0', '7'); } + fn is_bin_digit(c: char) -> bool { return c == '0' || c == '1'; } // EFFECT: eats whitespace and comments. @@ -464,6 +471,10 @@ fn scan_number(c: char, rdr: @mut StringReader) -> token::Token { bump(rdr); bump(rdr); base = 16u; + } else if c == '0' && n == 'o' { + bump(rdr); + bump(rdr); + base = 8u; } else if c == '0' && n == 'b' { bump(rdr); bump(rdr); @@ -529,6 +540,8 @@ fn scan_number(c: char, rdr: @mut StringReader) -> token::Token { match base { 16u => fatal_span(rdr, start_bpos, rdr.last_pos, ~"hexadecimal float literal is not supported"), + 8u => fatal_span(rdr, start_bpos, rdr.last_pos, + ~"octal float literal is not supported"), 2u => fatal_span(rdr, start_bpos, rdr.last_pos, ~"binary float literal is not supported"), _ => () |
