diff options
| author | Brian Anderson <[email protected]> | 2011-04-17 19:50:58 -0400 |
|---|---|---|
| committer | Brian Anderson <[email protected]> | 2011-04-17 19:50:58 -0400 |
| commit | 9976bb93d6c2ab46979c2bc13480266069fd8b3e (patch) | |
| tree | 036dee6d7f8d2b9f96b6611d407caf687f755cd3 /src/comp/front | |
| parent | Support + flag in #fmt (diff) | |
| download | rust-9976bb93d6c2ab46979c2bc13480266069fd8b3e.tar.xz rust-9976bb93d6c2ab46979c2bc13480266069fd8b3e.zip | |
Support the space flag in #fmt
Diffstat (limited to 'src/comp/front')
| -rw-r--r-- | src/comp/front/extfmt.rs | 54 |
1 files changed, 35 insertions, 19 deletions
diff --git a/src/comp/front/extfmt.rs b/src/comp/front/extfmt.rs index c05c74d1..287c7e55 100644 --- a/src/comp/front/extfmt.rs +++ b/src/comp/front/extfmt.rs @@ -28,7 +28,7 @@ import std.ExtFmt.CT.ty_hex; import std.ExtFmt.CT.flag; import std.ExtFmt.CT.flag_left_justify; import std.ExtFmt.CT.flag_left_zero_pad; -import std.ExtFmt.CT.flag_left_space_pad; +import std.ExtFmt.CT.flag_space_for_sign; import std.ExtFmt.CT.flag_sign_always; import std.ExtFmt.CT.flag_alternate; import std.ExtFmt.CT.count; @@ -180,6 +180,10 @@ fn pieces_to_expr(vec[piece] pieces, vec[@ast.expr] args) -> @ast.expr { auto fstr = "flag_sign_always"; flagexprs += vec(make_rt_path_expr(sp, fstr)); } + case (flag_space_for_sign) { + auto fstr = "flag_space_for_sign"; + flagexprs += vec(make_rt_path_expr(sp, fstr)); + } } } @@ -268,6 +272,25 @@ fn pieces_to_expr(vec[piece] pieces, vec[@ast.expr] args) -> @ast.expr { fn make_new_conv(conv cnv, @ast.expr arg) -> @ast.expr { + // FIXME: Extract all this validation into ExtFmt.CT + fn is_signed_type(conv cnv) -> bool { + alt (cnv.ty) { + case (ty_int(?s)) { + alt (s) { + case (signed) { + ret true; + } + case (unsigned) { + ret false; + } + } + } + case (_) { + ret false; + } + } + } + auto unsupported = "conversion not supported in #fmt string"; alt (cnv.param) { @@ -284,23 +307,16 @@ fn pieces_to_expr(vec[piece] pieces, vec[@ast.expr] args) -> @ast.expr { case (flag_left_justify) { } case (flag_sign_always) { - auto err = "+ flag only valid in signed #fmt conversions"; - alt (cnv.ty) { - case (ty_int(?s)) { - alt (s) { - case (signed) { - // Valid - } - case (unsigned) { - log err; - fail; - } - } - } - case (_) { - log err; - fail; - } + if (!is_signed_type(cnv)) { + log "+ flag only valid in signed #fmt conversions"; + fail; + } + } + case (flag_space_for_sign) { + if (!is_signed_type(cnv)) { + log "space flag only valid in " + + "signed #fmt conversions"; + fail; } } case (_) { @@ -382,7 +398,7 @@ fn pieces_to_expr(vec[piece] pieces, vec[@ast.expr] args) -> @ast.expr { case (flag_left_zero_pad) { log "flag: left zero pad"; } - case (flag_left_space_pad) { + case (flag_space_for_sign) { log "flag: left space pad"; } case (flag_sign_always) { |