]> git.lizzy.rs Git - rust.git/commitdiff
Make 1.f parse as a field access on the integer 1
authorMarijn Haverbeke <marijnh@gmail.com>
Fri, 16 Dec 2011 09:11:00 +0000 (10:11 +0100)
committerMarijn Haverbeke <marijnh@gmail.com>
Fri, 16 Dec 2011 10:46:57 +0000 (11:46 +0100)
A dot is only considered part of a number when not followed by a letter

Closes #1306

src/comp/syntax/parse/lexer.rs
src/libcore/float.rs
src/libstd/json.rs
src/test/run-pass/float2.rs

index 299a7ecafeb8cfe8a22d882a9560589006f3314b..3529a512a89db94f468b270aa1d3f195269a4c0b 100644 (file)
@@ -240,7 +240,7 @@ fn scan_number(c: char, rdr: reader) -> token::token {
         }
     }
     let is_float = false;
-    if rdr.curr() == '.' {
+    if rdr.curr() == '.' && !(is_alpha(rdr.next()) || rdr.next() == '_') {
         is_float = true;
         rdr.bump();
         let dec_part = scan_digits(rdr, 10u);
index 1477fdf7d8014549c9c29aeba6c16da098db43cb..ab27b938b53f4b826cbfb70f563e9f3c2d4b8556 100644 (file)
@@ -173,14 +173,14 @@ fn from_str(num: str) -> float {
    }
 
    if c == '.' {//Examine decimal part
-      let decimal = 1.f;
+      let decimal = 1f;
       while(pos < len) {
          let char_range = str::char_range_at(num, pos);
          c = char_range.ch;
          pos = char_range.next;
          alt c {
             '0' | '1' | '2' | '3' | '4' | '5' | '6'| '7' | '8' | '9'  {
-                 decimal /= 10.f;
+                 decimal /= 10f;
                  total += (((c as int) - ('0' as int)) as float)*decimal;
              }
              'e' | 'E' {
index bdd8547e84eeace087885b21a9df93a3151af655..945845e6c5582ed3bb4e3b31be30be449b0994db 100644 (file)
@@ -171,11 +171,11 @@ fn from_str_float(s: str) -> (option::t<json>, str) {
     let pos = 0u;
     let len = str::byte_len(s);
     let res = 0f;
-    let neg = 1.f;
+    let neg = 1f;
 
     alt str::char_at(s, 0u) {
         '-' {
-            neg = -1.f;
+            neg = -1f;
             pos = 1u;
         }
         '+' {
@@ -205,7 +205,7 @@ fn from_str_float(s: str) -> (option::t<json>, str) {
         ret (some(num(neg * res)), str::char_slice(s, pos, str::char_len(s)));
     }
 
-    let dec = 1.f;
+    let dec = 1f;
     while (pos < len) {
         let opos = pos;
         let chr = str::char_range_at(s, pos);
@@ -213,7 +213,7 @@ fn from_str_float(s: str) -> (option::t<json>, str) {
         pos = chr.next;
         alt c {
             '0' to '9' {
-                dec /= 10.f;
+                dec /= 10f;
                 res += (((c as int) - ('0' as int)) as float) * dec;
             }
             _ { ret (some(num(neg * res)),
index 26b5a64ebe5a19d93a3ce73058741fb4d9c404b7..f777a9b1a2aef84eba37b79bf9b9f761c454af65 100644 (file)
@@ -7,7 +7,7 @@ fn main() {
     let d = 1E6;
     let e = 3.0f32;
     let f = 5.9f64;
-    let g = 1.e6f32;
+    let g = 1e6f32;
     let h = 1.0e7f64;
     let i = 1.0E7f64;
     let j = 3.1e+9;