summary refs log tree commit diff
path: root/src/libcore
diff options
context:
space:
mode:
authorBrian Anderson <banderson@mozilla.com>2012-06-01 16:10:22 -0700
committerBrian Anderson <banderson@mozilla.com>2012-06-01 16:10:37 -0700
commit7b862a52781e8939d8917c355f0833b25ea5bbd6 (patch)
treec1837e75d54e6e2b98c6dc174c2bad6cdf42b549 /src/libcore
parent630c084da618036769506308e58c06d27b42d029 (diff)
downloadrust-7b862a52781e8939d8917c355f0833b25ea5bbd6.tar.gz
rust-7b862a52781e8939d8917c355f0833b25ea5bbd6.zip
core: Fix handling of 0-padded floats with precision in #fmt
Diffstat (limited to 'src/libcore')
-rw-r--r--src/libcore/extfmt.rs7
1 files changed, 4 insertions, 3 deletions
diff --git a/src/libcore/extfmt.rs b/src/libcore/extfmt.rs
index 86466bb8de1..30a3bc1ef69 100644
--- a/src/libcore/extfmt.rs
+++ b/src/libcore/extfmt.rs
@@ -339,7 +339,7 @@ mod rt {
                 s = " " + s;
             }
         }
-        ret pad(cv, s, pad_signed);
+        ret pad(cv, s, pad_float);
     }
     fn conv_poly<T>(cv: conv, v: T) -> str {
         let s = sys::log_str(v);
@@ -376,7 +376,7 @@ mod rt {
               count_implied { 1u }
             };
     }
-    enum pad_mode { pad_signed, pad_unsigned, pad_nozero, }
+    enum pad_mode { pad_signed, pad_unsigned, pad_nozero, pad_float }
     fn pad(cv: conv, &s: str, mode: pad_mode) -> str unsafe {
         let uwidth : uint = alt cv.width {
           count_implied { ret s; }
@@ -396,6 +396,7 @@ mod rt {
         let {might_zero_pad, signed} = alt mode {
           pad_nozero {   {might_zero_pad:false, signed:false} }
           pad_signed {   {might_zero_pad:true,  signed:true } }
+          pad_float {   {might_zero_pad:true,  signed:true } }
           pad_unsigned { {might_zero_pad:true,  signed:false} }
         };
         fn have_precision(cv: conv) -> bool {
@@ -403,7 +404,7 @@ mod rt {
         }
         let zero_padding = {
             if might_zero_pad && have_flag(cv.flags, flag_left_zero_pad) &&
-                !have_precision(cv) {
+                (!have_precision(cv) || mode == pad_float) {
                 padchar = '0';
                 true
             } else {