aboutsummaryrefslogtreecommitdiff
path: root/src/comp/front
diff options
context:
space:
mode:
authorBrian Anderson <[email protected]>2011-04-17 18:19:26 -0400
committerBrian Anderson <[email protected]>2011-04-17 18:19:26 -0400
commit86a43c24d627131c7c543ffc2df7793939141404 (patch)
tree33891d314a6d14457b9628455c7a3b8a868ef5b6 /src/comp/front
parentSupport #fmt precision for bools, with same rules as strings (diff)
downloadrust-86a43c24d627131c7c543ffc2df7793939141404.tar.xz
rust-86a43c24d627131c7c543ffc2df7793939141404.zip
Support + flag in #fmt
Diffstat (limited to 'src/comp/front')
-rw-r--r--src/comp/front/extfmt.rs30
1 files changed, 27 insertions, 3 deletions
diff --git a/src/comp/front/extfmt.rs b/src/comp/front/extfmt.rs
index 3aa24a90..c05c74d1 100644
--- a/src/comp/front/extfmt.rs
+++ b/src/comp/front/extfmt.rs
@@ -29,7 +29,7 @@ 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_plus_if_positive;
+import std.ExtFmt.CT.flag_sign_always;
import std.ExtFmt.CT.flag_alternate;
import std.ExtFmt.CT.count;
import std.ExtFmt.CT.count_is;
@@ -176,6 +176,10 @@ fn pieces_to_expr(vec[piece] pieces, vec[@ast.expr] args) -> @ast.expr {
auto fstr = "flag_left_justify";
flagexprs += vec(make_rt_path_expr(sp, fstr));
}
+ case (flag_sign_always) {
+ auto fstr = "flag_sign_always";
+ flagexprs += vec(make_rt_path_expr(sp, fstr));
+ }
}
}
@@ -279,6 +283,26 @@ fn pieces_to_expr(vec[piece] pieces, vec[@ast.expr] args) -> @ast.expr {
alt (f) {
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;
+ }
+ }
+ }
case (_) {
log unsupported;
fail;
@@ -361,8 +385,8 @@ fn pieces_to_expr(vec[piece] pieces, vec[@ast.expr] args) -> @ast.expr {
case (flag_left_space_pad) {
log "flag: left space pad";
}
- case (flag_plus_if_positive) {
- log "flag: plus if positive";
+ case (flag_sign_always) {
+ log "flag: sign always";
}
case (flag_alternate) {
log "flag: alternate";