1
Fork 0

Handle pretty-printing else-if properly.

This commit is contained in:
Graydon Hoare 2011-05-31 12:57:56 -07:00
parent cc96eeafca
commit 2de1a4bb1b

View file

@ -587,28 +587,42 @@ fn print_expr(&ps s, &@ast::expr expr) {
print_type(s, *ty); print_type(s, *ty);
} }
case (ast::expr_if(?test,?block,?elseopt,_)) { case (ast::expr_if(?test,?block,?elseopt,_)) {
head(s, "if"); head(s, "if");
popen(s); popen(s);
print_expr(s, test); print_expr(s, test);
pclose(s); pclose(s);
space(s.s); space(s.s);
print_block(s, block); print_block(s, block);
alt (elseopt) { fn do_else(&ps s, option::t[@ast::expr] els) {
case (option::some[@ast::expr](?_else)) { alt (els) {
// NB: we can't use 'head' here since case (option::some[@ast::expr](?_else)) {
// it builds a block that starts in the alt (_else.node) {
// wrong column. // "another else-if"
cbox(s.s, indent_unit-1u); case (ast::expr_if(?i,?t,?e,_)) {
ibox(s.s, 0u); cbox(s.s, indent_unit-1u);
word(s.s, " else "); ibox(s.s, 0u);
alt (_else.node) { word(s.s, " else if ");
case (ast::expr_block(?b, _)) { popen(s);
print_block(s, block); print_expr(s, i);
pclose(s);
space(s.s);
print_block(s, t);
do_else(s, e);
}
// "final else"
case (ast::expr_block(?b, _)) {
cbox(s.s, indent_unit-1u);
ibox(s.s, 0u);
word(s.s, " else ");
print_block(s, b);
}
} }
} }
case (_) { /* fall through */ }
} }
case (_) { /* fall through */ }
} }
do_else(s, elseopt);
} }
case (ast::expr_while(?test,?block,_)) { case (ast::expr_while(?test,?block,_)) {
head(s, "while"); head(s, "while");