about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMasaki Hara <ackie.h.gmai@gmail.com>2017-05-12 22:00:06 +0900
committerMasaki Hara <ackie.h.gmai@gmail.com>2017-05-12 22:00:06 +0900
commit7b535e1096b8a1f0d076d4b6f6aac623adb7d23f (patch)
treea486223e7d44833f75c773b3a695cd4a0cc07ef7
parent141e8a6a0203d546b9775ba6ecdc5eb1d748c3d4 (diff)
downloadrust-7b535e1096b8a1f0d076d4b6f6aac623adb7d23f.tar.gz
rust-7b535e1096b8a1f0d076d4b6f6aac623adb7d23f.zip
Disallow ._ in float literal.
-rw-r--r--src/libsyntax/parse/lexer/mod.rs4
-rw-r--r--src/test/parse-fail/underscore-suffix-for-float.rs13
-rw-r--r--src/test/run-pass/underscore-method-after-integer.rs19
3 files changed, 33 insertions, 3 deletions
diff --git a/src/libsyntax/parse/lexer/mod.rs b/src/libsyntax/parse/lexer/mod.rs
index ded1f0b599a..a83b19c7334 100644
--- a/src/libsyntax/parse/lexer/mod.rs
+++ b/src/libsyntax/parse/lexer/mod.rs
@@ -754,9 +754,7 @@ impl<'a> StringReader<'a> {
         // integer literal followed by field/method access or a range pattern
         // (`0..2` and `12.foo()`)
         if self.ch_is('.') && !self.nextch_is('.') &&
-           !self.nextch()
-                .unwrap_or('\0')
-                .is_xid_start() {
+           !ident_start(self.nextch()) {
             // might have stuff after the ., and if it does, it needs to start
             // with a number
             self.bump();
diff --git a/src/test/parse-fail/underscore-suffix-for-float.rs b/src/test/parse-fail/underscore-suffix-for-float.rs
new file mode 100644
index 00000000000..df7d9aa374d
--- /dev/null
+++ b/src/test/parse-fail/underscore-suffix-for-float.rs
@@ -0,0 +1,13 @@
+// Copyright 2017 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.
+
+fn main() {
+    let a = 42._; //~ ERROR unexpected token: `_`
+}
diff --git a/src/test/run-pass/underscore-method-after-integer.rs b/src/test/run-pass/underscore-method-after-integer.rs
new file mode 100644
index 00000000000..af912564211
--- /dev/null
+++ b/src/test/run-pass/underscore-method-after-integer.rs
@@ -0,0 +1,19 @@
+// Copyright 2017 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.
+
+trait Tr : Sized {
+    fn _method_on_numbers(self) {}
+}
+
+impl Tr for i32 {}
+
+fn main() {
+    42._method_on_numbers();
+}