Skip to content

Commit 55c3589

Browse files
committed
---
yaml --- r: 2232 b: refs/heads/master c: 2e12fbf h: refs/heads/master v: v3
1 parent 100b855 commit 55c3589

File tree

4 files changed

+26
-1
lines changed

4 files changed

+26
-1
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
---
2-
refs/heads/master: 66b59e4b056ade5f0a5e5a8fd64534aeea9b952c
2+
refs/heads/master: 2e12fbfc06abdf1547528047b1438204ca4121a1

trunk/src/comp/front/extfmt.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import std.ExtFmt.CT.ty_char;
2525
import std.ExtFmt.CT.ty_int;
2626
import std.ExtFmt.CT.ty_bits;
2727
import std.ExtFmt.CT.ty_hex;
28+
import std.ExtFmt.CT.ty_octal;
2829
import std.ExtFmt.CT.flag;
2930
import std.ExtFmt.CT.flag_left_justify;
3031
import std.ExtFmt.CT.flag_left_zero_pad;
@@ -236,6 +237,9 @@ fn pieces_to_expr(vec[piece] pieces, vec[@ast.expr] args) -> @ast.expr {
236237
case (ty_bits) {
237238
rt_type = "ty_bits";
238239
}
240+
case (ty_octal) {
241+
rt_type = "ty_octal";
242+
}
239243
case (_) {
240244
rt_type = "ty_default";
241245
}
@@ -381,6 +385,9 @@ fn pieces_to_expr(vec[piece] pieces, vec[@ast.expr] args) -> @ast.expr {
381385
case (ty_bits) {
382386
ret make_conv_call(arg.span, "uint", cnv, arg);
383387
}
388+
case (ty_octal) {
389+
ret make_conv_call(arg.span, "uint", cnv, arg);
390+
}
384391
case (_) {
385392
log_err unsupported;
386393
fail;

trunk/src/lib/ExtFmt.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ mod CT {
4646
ty_int(signedness);
4747
ty_bits;
4848
ty_hex(caseness);
49+
ty_octal;
4950
// FIXME: More types
5051
}
5152

@@ -289,6 +290,8 @@ mod CT {
289290
t = ty_hex(case_upper);
290291
} else if (_str.eq(tstr, "t")) {
291292
t = ty_bits;
293+
} else if (_str.eq(tstr, "o")) {
294+
t = ty_octal;
292295
} else {
293296
log_err "unknown type in conversion";
294297
fail;
@@ -326,6 +329,7 @@ mod RT {
326329
ty_bits;
327330
ty_hex_upper;
328331
ty_hex_lower;
332+
ty_octal;
329333
}
330334

331335
// FIXME: May not want to use a vector here for flags;
@@ -365,6 +369,9 @@ mod RT {
365369
case (ty_bits) {
366370
res = uint_to_str_prec(u, 2u, prec);
367371
}
372+
case (ty_octal) {
373+
res = uint_to_str_prec(u, 8u, prec);
374+
}
368375
}
369376
ret pad(cv, res, pad_unsigned);
370377
}

trunk/src/test/run-pass/syntax-extension-fmt.rs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,15 @@ fn main() {
2424
test(#fmt("%c", 'A'), "A");
2525
test(#fmt("%x", 0xff_u), "ff");
2626
test(#fmt("%X", 0x12ab_u), "12AB");
27+
test(#fmt("%o", 10u), "12");
2728
test(#fmt("%t", 0b11010101_u), "11010101");
2829

2930
// 32-bit limits
3031
test(#fmt("%i", -2147483648), "-2147483648");
3132
test(#fmt("%i", 2147483647), "2147483647");
3233
test(#fmt("%u", 4294967295u), "4294967295");
3334
test(#fmt("%x", 0xffffffff_u), "ffffffff");
35+
test(#fmt("%o", 0xffffffff_u), "37777777777");
3436
test(#fmt("%t", 0xffffffff_u), "11111111111111111111111111111111");
3537

3638
// Widths
@@ -42,6 +44,7 @@ fn main() {
4244
test(#fmt("%10b", true), " true");
4345
test(#fmt("%10x", 0xff_u), " ff");
4446
test(#fmt("%10X", 0xff_u), " FF");
47+
test(#fmt("%10o", 10u), " 12");
4548
test(#fmt("%10t", 0xff_u), " 11111111");
4649
test(#fmt("%10c", 'A'), " A");
4750

@@ -53,6 +56,7 @@ fn main() {
5356
test(#fmt("%-10b", true), "true ");
5457
test(#fmt("%-10x", 0xff_u), "ff ");
5558
test(#fmt("%-10X", 0xff_u), "FF ");
59+
test(#fmt("%-10o", 10u), "12 ");
5660
test(#fmt("%-10t", 0xff_u), "11111111 ");
5761
test(#fmt("%-10c", 'A'), "A ");
5862

@@ -66,6 +70,7 @@ fn main() {
6670
test(#fmt("%.u", 10u), "10");
6771
test(#fmt("%.s", "test"), "");
6872
test(#fmt("%.x", 127u), "7f");
73+
test(#fmt("%.o", 10u), "12");
6974
test(#fmt("%.t", 3u), "11");
7075
test(#fmt("%.c", 'A'), "A");
7176

@@ -78,6 +83,7 @@ fn main() {
7883
test(#fmt("%.0u", 10u), "10");
7984
test(#fmt("%.0s", "test"), "");
8085
test(#fmt("%.0x", 127u), "7f");
86+
test(#fmt("%.0o", 10u), "12");
8187
test(#fmt("%.0t", 3u), "11");
8288
test(#fmt("%.0c", 'A'), "A");
8389

@@ -90,6 +96,7 @@ fn main() {
9096
test(#fmt("%.1u", 10u), "10");
9197
test(#fmt("%.1s", "test"), "t");
9298
test(#fmt("%.1x", 127u), "7f");
99+
test(#fmt("%.1o", 10u), "12");
93100
test(#fmt("%.1t", 3u), "11");
94101
test(#fmt("%.1c", 'A'), "A");
95102

@@ -102,6 +109,7 @@ fn main() {
102109
test(#fmt("%.5u", 10u), "00010");
103110
test(#fmt("%.5s", "test"), "test");
104111
test(#fmt("%.5x", 127u), "0007f");
112+
test(#fmt("%.5o", 10u), "00012");
105113
test(#fmt("%.5t", 3u), "00011");
106114
test(#fmt("%.5c", 'A'), "A");
107115

@@ -134,6 +142,7 @@ fn main() {
134142
test(#fmt("%05u", 1u), "00001");
135143
test(#fmt("%05x", 127u), "0007f");
136144
test(#fmt("%05X", 127u), "0007F");
145+
test(#fmt("%05o", 10u), "00012");
137146
test(#fmt("%05t", 3u), "00011");
138147
// 0-padding a string is undefined but glibc does this:
139148
test(#fmt("%05s", "test"), " test");
@@ -147,6 +156,7 @@ fn main() {
147156
test(#fmt("%-05u", 1u), "1 ");
148157
test(#fmt("%-05x", 127u), "7f ");
149158
test(#fmt("%-05X", 127u), "7F ");
159+
test(#fmt("%-05o", 10u), "12 ");
150160
test(#fmt("%-05t", 3u), "11 ");
151161
test(#fmt("%-05s", "test"), "test ");
152162
test(#fmt("%-05c", 'A'), "A ");
@@ -163,6 +173,7 @@ fn main() {
163173
test(#fmt("%06.5c", 'A'), " A");
164174
test(#fmt("%06.5x", 127u), " 0007f");
165175
test(#fmt("%06.5X", 127u), " 0007F");
176+
test(#fmt("%06.5o", 10u), " 00012");
166177

167178
// TODO: Padding and +
168179
// TODO: Padding and ' '

0 commit comments

Comments
 (0)