about summary refs log tree commit diff
diff options
context:
space:
mode:
authorDavid Rajchenbach-Teller <dteller@mozilla.com>2011-10-11 16:16:41 +0200
committerMarijn Haverbeke <marijnh@gmail.com>2011-10-11 16:41:34 +0200
commit2ec85135e2048ae527d9db6840641a0b13808b89 (patch)
tree440d33c22c32896f5d396b2f3e5e8b38f428017d
parent33167f7decfdc70c9dca6c41f80883f12c13cfbc (diff)
[Move] Moved str_to_float, float_to_str from compiler to lib
-rw-r--r--src/comp/driver/rustc.rs2
-rw-r--r--src/comp/middle/typeck.rs4
-rw-r--r--src/comp/util/common.rs40
-rw-r--r--src/lib/float.rs44
-rw-r--r--src/lib/std.rc1
5 files changed, 51 insertions, 40 deletions
diff --git a/src/comp/driver/rustc.rs b/src/comp/driver/rustc.rs
index c7084138c98..9c7923a2ffe 100644
--- a/src/comp/driver/rustc.rs
+++ b/src/comp/driver/rustc.rs
@@ -94,7 +94,7 @@ fn time<@T>(do_it: bool, what: str, thunk: fn() -> T) -> T {
     let rv = thunk();
     let end = std::time::precise_time_s();
     log_err #fmt["time: %s took %s s", what,
-                 common::float_to_str(end - start, 3u)];
+                 std::float::float_to_str(end - start, 3u)];
     ret rv;
 }
 
diff --git a/src/comp/middle/typeck.rs b/src/comp/middle/typeck.rs
index d284ffdadca..4b6fc258f5f 100644
--- a/src/comp/middle/typeck.rs
+++ b/src/comp/middle/typeck.rs
@@ -1303,8 +1303,8 @@ fn valid_range_bounds(l1: @ast::lit, l2: @ast::lit) -> bool {
     alt l1.node {
       ast::lit_float(s1) | ast::lit_mach_float(_, s1) {
         let s2 = lit_as_float(l2);
-        let f1 = util::common::str_to_float(s1);
-        let f2 = util::common::str_to_float(s2);
+        let f1 = std::float::str_to_float(s1);
+        let f2 = std::float::str_to_float(s2);
         ret *util::common::min(f1, f2) == f1
       }
       ast::lit_uint(_) | ast::lit_char(_) {
diff --git a/src/comp/util/common.rs b/src/comp/util/common.rs
index 6966cafbe04..a0cd519641b 100644
--- a/src/comp/util/common.rs
+++ b/src/comp/util/common.rs
@@ -156,8 +156,8 @@ fn lit_in_range(l: @ast::lit, m1: @ast::lit, m2: @ast::lit) -> bool {
       frange(f1, f2) {
         alt l.node {
           ast::lit_float(f3) | ast::lit_mach_float(_, f3) {
-            str_to_float(f3) >= *min(f1, f2) &&
-            str_to_float(f3) <= *max(f1, f2)
+            std::float::str_to_float(f3) >= *min(f1, f2) &&
+            std::float::str_to_float(f3) <= *max(f1, f2)
           }
           _ { fail }
         }
@@ -232,7 +232,7 @@ fn lits_to_range(l: @ast::lit, r: @ast::lit) -> range {
       }
       ast::lit_float(f1) | ast::lit_mach_float(_, f1) {
         alt r.node { ast::lit_float(f2) | ast::lit_mach_float(_, f2) {
-          frange(str_to_float(f1), str_to_float(f2))
+          frange(std::float::str_to_float(f1), std::float::str_to_float(f2))
         }
         _ { fail } }
       }
@@ -293,41 +293,7 @@ fn is_main_name(path: [ast::ident]) -> bool {
     str::eq(option::get(std::vec::last(path)), "main")
 }
 
-// FIXME mode this to std::float when editing the stdlib no longer
-// requires a snapshot
-fn float_to_str(num: float, digits: uint) -> str {
-    let accum = if num < 0.0 { num = -num; "-" } else { "" };
-    let trunc = num as uint;
-    let frac = num - (trunc as float);
-    accum += uint::str(trunc);
-    if frac == 0.0 || digits == 0u { ret accum; }
-    accum += ".";
-    while digits > 0u && frac > 0.0 {
-        frac *= 10.0;
-        let digit = frac as uint;
-        accum += uint::str(digit);
-        frac -= digit as float;
-        digits -= 1u;
-    }
-    ret accum;
-}
-
-fn str_to_float(num: str) -> float {
-    let digits = str::split(num, '.' as u8);
-    let total = int::from_str(digits[0]) as float;
 
-    fn dec_val(c: char) -> int { ret (c as int) - ('0' as int); }
-
-    let right = digits[1];
-    let len = str::char_len(digits[1]);
-    let i = 1u;
-    while (i < len) {
-        total += dec_val(str::pop_char(right)) as float /
-                 (int::pow(10, i) as float);
-        i += 1u;
-    }
-    ret total;
-}
 
 //
 // Local Variables:
diff --git a/src/lib/float.rs b/src/lib/float.rs
new file mode 100644
index 00000000000..9a241ba36cf
--- /dev/null
+++ b/src/lib/float.rs
@@ -0,0 +1,44 @@
+fn float_to_str(num: float, digits: uint) -> str {
+    let accum = if num < 0.0 { num = -num; "-" } else { "" };
+    let trunc = num as uint;
+    let frac = num - (trunc as float);
+    accum += uint::str(trunc);
+    if frac == 0.0 || digits == 0u { ret accum; }
+    accum += ".";
+    while digits > 0u && frac > 0.0 {
+        frac *= 10.0;
+        let digit = frac as uint;
+        accum += uint::str(digit);
+        frac -= digit as float;
+        digits -= 1u;
+    }
+    ret accum;
+}
+
+fn str_to_float(num: str) -> float {
+    let digits = str::split(num, '.' as u8);
+    let total = int::from_str(digits[0]) as float;
+
+    fn dec_val(c: char) -> int { ret (c as int) - ('0' as int); }
+
+    let right = digits[1];
+    let len = str::char_len(digits[1]);
+    let i = 1u;
+    while (i < len) {
+        total += dec_val(str::pop_char(right)) as float /
+                 (int::pow(10, i) as float);
+        i += 1u;
+    }
+    ret total;
+}
+
+//
+// Local Variables:
+// mode: rust
+// fill-column: 78;
+// indent-tabs-mode: nil
+// c-basic-offset: 4
+// buffer-file-coding-system: utf-8-unix
+// compile-command: "make -k -C $RBUILD 2>&1 | sed -e 's/\\/x\\//x:\\//g'";
+// End:
+//
diff --git a/src/lib/std.rc b/src/lib/std.rc
index f885f9d0ef7..94f59064609 100644
--- a/src/lib/std.rc
+++ b/src/lib/std.rc
@@ -16,6 +16,7 @@ mod u8;
 mod u64;
 mod vec;
 mod str;
+mod float;
 
 // General io and system-services modules.