diff --git a/src/comp/driver/rustc.rs b/src/comp/driver/rustc.rs index c7084138c98a0..9c7923a2ffe63 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 d284ffdadca1e..4b6fc258f5f23 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 6966cafbe048c..a0cd519641be2 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 0000000000000..9a241ba36cf36 --- /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 f885f9d0ef770..94f5906460991 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.