mirror of
https://github.com/rust-lang/rust.git
synced 2026-05-30 04:56:25 +03:00
core: Fix handling of 0-padded floats with precision in #fmt
This commit is contained in:
@@ -339,7 +339,7 @@ fn conv_float(cv: conv, f: float) -> str {
|
||||
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 @@ fn get_int_precision(cv: conv) -> uint {
|
||||
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 @@ fn pad(cv: conv, &s: str, mode: pad_mode) -> str unsafe {
|
||||
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 @@ fn have_precision(cv: conv) -> bool {
|
||||
}
|
||||
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 {
|
||||
|
||||
@@ -199,6 +199,7 @@ fn part5() {
|
||||
}
|
||||
fn part6() {
|
||||
// Precision overrides 0-padding
|
||||
// FIXME #2481: Recent gcc's report some of these as warnings
|
||||
|
||||
test(#fmt["%06.5d", 0], " 00000");
|
||||
test(#fmt["%06.5u", 0u], " 00000");
|
||||
@@ -211,7 +212,10 @@ fn part6() {
|
||||
test(#fmt["%06.5x", 127u], " 0007f");
|
||||
test(#fmt["%06.5X", 127u], " 0007F");
|
||||
test(#fmt["%06.5o", 10u], " 00012");
|
||||
test(#fmt["%08.5f", 5.82], " 5.82000");
|
||||
|
||||
// Precision does not override zero-padding for floats
|
||||
test(#fmt["%08.5f", 5.82], "05.82000");
|
||||
|
||||
// Signed combinations
|
||||
|
||||
test(#fmt["% 5d", 1], " 1");
|
||||
|
||||
Reference in New Issue
Block a user