aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrian Anderson <[email protected]>2011-04-18 21:25:22 -0400
committerBrian Anderson <[email protected]>2011-04-18 21:36:04 -0400
commit869b28e393f1b87723c9186097bd6acd16366fbd (patch)
tree6d5069e96da7cff50446c4261968d02bcc2f06b0
parentSupport 0 flag in #fmt (diff)
downloadrust-869b28e393f1b87723c9186097bd6acd16366fbd.tar.xz
rust-869b28e393f1b87723c9186097bd6acd16366fbd.zip
Left-justification overrides 0-padding in #fmt
-rw-r--r--src/lib/ExtFmt.rs46
-rw-r--r--src/test/run-pass/syntax-extension-fmt.rs12
2 files changed, 35 insertions, 23 deletions
diff --git a/src/lib/ExtFmt.rs b/src/lib/ExtFmt.rs
index ec778f6d..938e86b6 100644
--- a/src/lib/ExtFmt.rs
+++ b/src/lib/ExtFmt.rs
@@ -467,33 +467,35 @@ mod RT {
auto uwidth = width as uint;
auto strlen = _str.char_len(s);
if (strlen < uwidth) {
- auto zero_padding = false;
- auto signed = false;
auto padchar = ' ';
- alt (pt) {
- case (pad_nozero) {
- // fallthrough
- }
- case (pad_signed) {
- signed = true;
- if (have_flag(cv.flags, flag_left_zero_pad)) {
- padchar = '0';
- zero_padding = true;
- }
- }
- case (pad_unsigned) {
- if (have_flag(cv.flags, flag_left_zero_pad)) {
- padchar = '0';
- zero_padding = true;
- }
- }
- }
-
auto diff = uwidth - strlen;
- auto padstr = str_init_elt(padchar, diff);
if (have_flag(cv.flags, flag_left_justify)) {
+ auto padstr = str_init_elt(padchar, diff);
ret s + padstr;
} else {
+ auto zero_padding = false;
+ auto signed = false;
+ alt (pt) {
+ case (pad_nozero) {
+ // fallthrough
+ }
+ case (pad_signed) {
+ signed = true;
+ if (have_flag(cv.flags, flag_left_zero_pad)) {
+ padchar = '0';
+ zero_padding = true;
+ }
+ }
+ case (pad_unsigned) {
+ if (have_flag(cv.flags, flag_left_zero_pad)) {
+ padchar = '0';
+ zero_padding = true;
+ }
+ }
+ }
+
+ auto padstr = str_init_elt(padchar, diff);
+
// This is completely heinous. If we have a signed
// value then potentially rip apart the intermediate
// result and insert some zeros. It may make sense
diff --git a/src/test/run-pass/syntax-extension-fmt.rs b/src/test/run-pass/syntax-extension-fmt.rs
index 46d5036a..c3b2cd76 100644
--- a/src/test/run-pass/syntax-extension-fmt.rs
+++ b/src/test/run-pass/syntax-extension-fmt.rs
@@ -139,7 +139,17 @@ fn main() {
test(#fmt("%05s", "test"), " test");
test(#fmt("%05b", true), " true");
- // TODO: Left-justify overrides 0-padding
+ // Left-justify overrides 0-padding
+ test(#fmt("%-05d", 0), "0 ");
+ test(#fmt("%-05d", 1), "1 ");
+ test(#fmt("%-05d", -1), "-1 ");
+ test(#fmt("%-05u", 1u), "1 ");
+ test(#fmt("%-05x", 127u), "7f ");
+ test(#fmt("%-05X", 127u), "7F ");
+ test(#fmt("%-05t", 3u), "11 ");
+ test(#fmt("%-05s", "test"), "test ");
+ test(#fmt("%-05b", true), "true ");
+
// TODO: Precision overrides 0-padding
// TODO: Padding and +
// TODO: Padding and ' '