Are the sufficiently bad that the expansion should happen in `ext::format`? i.e. have all the separate `expand_format`, `expand_write` etc, with the implementation (with a macro to avoid mega-repetition, presumably):

```rust
fn expand_format(args...) {
    let expr = <expr for `::std::fmt::rt::format`>;

    expand_ifmt(Some(expr), args...);
}
// ... expand_write etc.

fn expand_ifmt(call_func: Option<@expr>, ...) {
   // if `call_func` is None parse a function as the first arg,
   // otherwise use `call_func` for the final `expr_call` in `to_expr`
}
```

The FIXME could then go there.

If this is going to replace `fmt!` then we should make it properly useable, and, frankly, the errors from inside macro expansion are pretty much useless: no information about the original invocation site at all. (Is https://github.com/mozilla/rust/issues/5794 a more appropriate issue for this FIXME?)