rustc: Fail when #fmt is given too many arguments

This commit is contained in:
Brian Anderson 2011-05-25 23:42:50 -04:00
parent 1b29892b5b
commit c4e9d8fb91
2 changed files with 17 additions and 1 deletions

View file

@ -499,6 +499,7 @@ fn pieces_to_expr(parser p, vec[piece] pieces, vec[@ast::expr] args)
auto sp = args.(0).span;
auto n = 0u;
auto tmp_expr = make_new_str(p, sp, "");
auto nargs = vec::len[@ast::expr](args);
for (piece pc in pieces) {
alt (pc) {
@ -507,7 +508,7 @@ fn pieces_to_expr(parser p, vec[piece] pieces, vec[@ast::expr] args)
tmp_expr = make_add_expr(p, sp, tmp_expr, s_expr);
}
case (piece_conv(?conv)) {
if (n >= vec::len[@ast::expr](args)) {
if (n >= nargs) {
log_err "too many conversions in #fmt string";
fail;
}
@ -524,6 +525,13 @@ fn pieces_to_expr(parser p, vec[piece] pieces, vec[@ast::expr] args)
}
}
auto expected_nargs = n + 1u; // n conversions + the fmt string
if (expected_nargs < nargs) {
log_err #fmt("too many arguments to #fmt. found %u, expected %u",
nargs, expected_nargs);
fail;
}
// TODO: Remove this debug logging
// log "dumping expanded ast:";
// log pretty::print_expr(tmp_expr);