about summary refs log tree commit diff
path: root/src/libsyntax/parse
diff options
context:
space:
mode:
authorMatt Carberry <carberry.matt@gmail.com>2013-11-02 21:26:29 -0700
committerMatt Carberry <carberry.matt@gmail.com>2013-11-02 21:26:29 -0700
commit519b86b8a810e12fe4247c56ffb894579c6b22e7 (patch)
tree837c99dc2a3ca5afffe7371fb0059c2aa445bdb3 /src/libsyntax/parse
parente0c01ca15383513eb2981b6ee532c33ea546b4a8 (diff)
downloadrust-519b86b8a810e12fe4247c56ffb894579c6b22e7.tar.gz
rust-519b86b8a810e12fe4247c56ffb894579c6b22e7.zip
Added octal literal support.
Diffstat (limited to 'src/libsyntax/parse')
-rw-r--r--src/libsyntax/parse/lexer.rs13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/libsyntax/parse/lexer.rs b/src/libsyntax/parse/lexer.rs
index 7ac999c46a4..f75b17adeed 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"),
           _ => ()