diff --git a/src/comp/syntax/ext/fmt.rs b/src/comp/syntax/ext/fmt.rs index 093799714a79..2a441341f499 100644 --- a/src/comp/syntax/ext/fmt.rs +++ b/src/comp/syntax/ext/fmt.rs @@ -241,6 +241,7 @@ fn pieces_to_expr(cx: &ext_ctxt, sp: span, pieces: &[piece], } alt cnv.ty { ty_str. { ret make_conv_call(cx, arg.span, "str", cnv, arg); } + ty_istr. { ret make_conv_call(cx, arg.span, "istr", cnv, arg); } ty_int(sign) { alt sign { signed. { ret make_conv_call(cx, arg.span, "int", cnv, arg); } @@ -297,6 +298,7 @@ fn pieces_to_expr(cx: &ext_ctxt, sp: span, pieces: &[piece], alt c.ty { ty_bool. { log "type: bool"; } ty_str. { log "type: str"; } + ty_istr. { log "type: istr"; } ty_char. { log "type: char"; } ty_int(s) { alt s { diff --git a/src/lib/extfmt.rs b/src/lib/extfmt.rs index d3e507f1b89b..84c642d28837 100644 --- a/src/lib/extfmt.rs +++ b/src/lib/extfmt.rs @@ -41,8 +41,9 @@ mod ct { ty_bits; ty_hex(caseness); ty_octal; + // FIXME: Transitional + ty_istr; // FIXME: More types - } tag flag { flag_left_justify; @@ -225,6 +226,8 @@ mod ct { ty_bool } else if str::eq(tstr, "s") { ty_str + } else if str::eq(tstr, "S") { + ty_istr } else if str::eq(tstr, "c") { ty_char } else if str::eq(tstr, "d") || str::eq(tstr, "i") { @@ -322,6 +325,10 @@ mod rt { ret pad(cv, unpadded, pad_nozero); } + fn conv_istr(cv: &conv, s: &istr) -> str { + ret conv_str(cv, istr::to_estr(s)); + } + // Convert an int to string with minimum number of digits. If precision is // 0 and num is 0 then the result is the empty string. fn int_to_str_prec(num: int, radix: uint, prec: uint) -> str { diff --git a/src/test/run-pass/syntax-extension-fmt-istr.rs b/src/test/run-pass/syntax-extension-fmt-istr.rs new file mode 100644 index 000000000000..9f2b7ae82918 --- /dev/null +++ b/src/test/run-pass/syntax-extension-fmt-istr.rs @@ -0,0 +1,6 @@ +// FIXME: This test is transitional until estrs are gone. +use std; +fn main() { + let s = #fmt[~"%S", ~"test"]; + assert s == "test"; +} \ No newline at end of file