diff options
| author | Matt Carberry <carberry.matt@gmail.com> | 2013-11-02 21:26:29 -0700 |
|---|---|---|
| committer | Matt Carberry <carberry.matt@gmail.com> | 2013-11-02 21:26:29 -0700 |
| commit | 519b86b8a810e12fe4247c56ffb894579c6b22e7 (patch) | |
| tree | 837c99dc2a3ca5afffe7371fb0059c2aa445bdb3 /src | |
| parent | e0c01ca15383513eb2981b6ee532c33ea546b4a8 (diff) | |
| download | rust-519b86b8a810e12fe4247c56ffb894579c6b22e7.tar.gz rust-519b86b8a810e12fe4247c56ffb894579c6b22e7.zip | |
Added octal literal support.
Diffstat (limited to 'src')
| -rw-r--r-- | src/etc/gedit/share/gtksourceview-3.0/language-specs/rust.lang | 5 | ||||
| -rw-r--r-- | src/etc/kate/rust.xml | 1 | ||||
| -rw-r--r-- | src/etc/vim/syntax/rust.vim | 6 | ||||
| -rw-r--r-- | src/libsyntax/parse/lexer.rs | 13 | ||||
| -rw-r--r-- | src/test/compile-fail/no-oct-float-literal.rs | 17 |
5 files changed, 41 insertions, 1 deletions
diff --git a/src/etc/gedit/share/gtksourceview-3.0/language-specs/rust.lang b/src/etc/gedit/share/gtksourceview-3.0/language-specs/rust.lang index 1c1bb0a0012..b8841ebe568 100644 --- a/src/etc/gedit/share/gtksourceview-3.0/language-specs/rust.lang +++ b/src/etc/gedit/share/gtksourceview-3.0/language-specs/rust.lang @@ -224,6 +224,10 @@ [0-9a-fA-F] </define-regex> + <define-regex id="oct_digit" extended="true"> + [0-7] + </define-regex> + <context id="number" style-ref="number"> <match extended="true"> ((?<=\.\.)|(?<![\w\.])) @@ -231,6 +235,7 @@ [1-9][0-9_]*\%{num_suffix}?| 0[0-9_]*\%{num_suffix}?| 0b[01_]+\%{int_suffix}?| + 0o(\%{oct_digit}|_)+\%{int_suffix}?| 0x(\%{hex_digit}|_)+\%{int_suffix}? ) ((?![\w\.].)|(?=\.\.)) diff --git a/src/etc/kate/rust.xml b/src/etc/kate/rust.xml index 17e3e06db35..5efd393fc35 100644 --- a/src/etc/kate/rust.xml +++ b/src/etc/kate/rust.xml @@ -199,6 +199,7 @@ <Detect2Chars char="/" char1="/" attribute="Comment" context="Commentar 1"/> <Detect2Chars char="/" char1="*" attribute="Comment" context="Commentar 2" beginRegion="Comment"/> <RegExpr String="0x[0-9a-fA-F_]+&rustIntSuf;" attribute="Number" context="#stay"/> + <RegExpr String="0o[0-7_]+&rustIntSuf;" attribute="Number" context="#stay"/> <RegExpr String="0b[0-1_]+&rustIntSuf;" attribute="Number" context="#stay"/> <RegExpr String="[0-9][0-9_]*\.[0-9_]*([eE][+-]?[0-9_]+)?(f32|f64|f)?" attribute="Number" context="#stay"/> <RegExpr String="[0-9][0-9_]*&rustIntSuf;" attribute="Number" context="#stay"/> diff --git a/src/etc/vim/syntax/rust.vim b/src/etc/vim/syntax/rust.vim index a0a239284ce..abac8a32d78 100644 --- a/src/etc/vim/syntax/rust.vim +++ b/src/etc/vim/syntax/rust.vim @@ -160,7 +160,10 @@ syn match rustNumber display "\<[0-9][0-9_]*\(i\|i8\|i16\|i32\|i64\)\>" syn match rustHexNumber display "\<0x[a-fA-F0-9_]\+\>" syn match rustHexNumber display "\<0x[a-fA-F0-9_]\+\(u\|u8\|u16\|u32\|u64\)\>" -syn match rustHexNumber display "\<0x[a-fA-F0-9_]\+\(i8\|i16\|i32\|i64\)\>" +syn match rustHexNumber display "\<0x[0-9_]\+\(i8\|i16\|i32\|i64\)\>" +syn match rustOctNumber display "\<0o[0-7_]\+\>" +syn match rustOctNumber display "\<0o[0-7_]\+\(u\|u8\|u16\|u32\|u64\)\>" +syn match rustOctNumber display "\<0o[0-7_]\+\(i8\|i16\|i32\|i64\)\>" syn match rustBinNumber display "\<0b[01_]\+\>" syn match rustBinNumber display "\<0b[01_]\+\(u\|u8\|u16\|u32\|u64\)\>" syn match rustBinNumber display "\<0b[01_]\+\(i8\|i16\|i32\|i64\)\>" @@ -198,6 +201,7 @@ syn region rustFoldBraces start="{" end="}" transparent fold " Default highlighting {{{1 hi def link rustHexNumber rustNumber +hi def link rustOctNumber rustNumber hi def link rustBinNumber rustNumber hi def link rustIdentifierPrime rustIdentifier hi def link rustTrait rustType 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"), _ => () diff --git a/src/test/compile-fail/no-oct-float-literal.rs b/src/test/compile-fail/no-oct-float-literal.rs new file mode 100644 index 00000000000..511116b1c55 --- /dev/null +++ b/src/test/compile-fail/no-oct-float-literal.rs @@ -0,0 +1,17 @@ +// Copyright 2013 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or +// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license +// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// error-pattern:octal float literal is not supported + +fn main() { + 0o123f64; + 0o123.456; + 0o123p4f; +} |
