Index: pkg/compiler/lib/src/js/printer.dart |
diff --git a/pkg/compiler/lib/src/js/printer.dart b/pkg/compiler/lib/src/js/printer.dart |
index b1acebaa8f82e18b0159660b79714a7ba7637f7c..71ee7b75e2f61768da176b95b298a6c36b17e802 100644 |
--- a/pkg/compiler/lib/src/js/printer.dart |
+++ b/pkg/compiler/lib/src/js/printer.dart |
@@ -204,10 +204,14 @@ class Printer implements NodeVisitor { |
visitAll(program.body); |
} |
- bool blockBody(Node body, {bool needsSeparation, bool needsNewline}) { |
+ bool blockBody(Statement body, {bool needsSeparation, bool needsNewline}) { |
+ if (body is Block && body.statements.length == 1) { |
+ Block block = body; |
+ body = block.statements.single; |
+ } |
if (body is Block) { |
spaceOut(); |
- blockOut(body, false, needsNewline); |
+ blockOut(body, shouldIndent: false, needsNewline: needsNewline); |
return true; |
} |
if (shouldCompressOutput && needsSeparation) { |
@@ -234,7 +238,7 @@ class Printer implements NodeVisitor { |
} |
} |
- void blockOut(Block node, bool shouldIndent, bool needsNewline) { |
+ void blockOut(Block node, {bool shouldIndent, bool needsNewline}) { |
if (shouldIndent) indent(); |
context.enterNode(node); |
out("{"); |
@@ -249,7 +253,7 @@ class Printer implements NodeVisitor { |
} |
visitBlock(Block block) { |
- blockOut(block, true, true); |
+ blockOut(block, shouldIndent: true, needsNewline: true); |
} |
visitExpressionStatement(ExpressionStatement expressionStatement) { |
@@ -264,19 +268,17 @@ class Printer implements NodeVisitor { |
} |
void ifOut(If node, bool shouldIndent) { |
- Node then = node.then; |
- Node elsePart = node.otherwise; |
+ Statement then = node.then; |
+ Statement elsePart = node.otherwise; |
bool hasElse = node.hasElse; |
// Handle dangling elses and a work-around for Android 4.0 stock browser. |
// Android 4.0 requires braces for a single do-while in the `then` branch. |
// See issue 10923. |
- if (hasElse) { |
- bool needsBraces = node.then.accept(danglingElseVisitor) || then is Do; |
- if (needsBraces) { |
- then = new Block(<Statement>[then]); |
- } |
- } |
+ bool needsBracesInThen = hasElse |
floitsch
2015/02/23 13:46:08
bool needsBracesInThen =
hasElse && (then.acce
sigurdm
2015/02/23 14:13:22
Acknowledged.
This change has been undone.
|
+ ? node.then.accept(danglingElseVisitor) || then is Do |
+ : false; |
+ |
if (shouldIndent) indent(); |
out("if"); |
spaceOut(); |
@@ -284,8 +286,15 @@ class Printer implements NodeVisitor { |
visitNestedExpression(node.condition, EXPRESSION, |
newInForInit: false, newAtStatementBegin: false); |
out(")"); |
- bool thenWasBlock = |
- blockBody(then, needsSeparation: false, needsNewline: !hasElse); |
+ bool thenWasBlock; |
+ if (needsBracesInThen) { |
+ spaceOut(); |
+ blockOut(new Block([then]), shouldIndent: false, needsNewline: !hasElse); |
+ thenWasBlock = true; |
+ } else { |
floitsch
2015/02/23 13:46:08
This probably broke the dangling-else:
if (x) {
sigurdm
2015/02/23 14:13:22
Yes, I just realized that. I will remove the block
|
+ thenWasBlock = |
+ blockBody(then, needsSeparation: false, needsNewline: !hasElse); |
+ } |
if (hasElse) { |
if (thenWasBlock) { |
spaceOut(); |
@@ -423,14 +432,16 @@ class Printer implements NodeVisitor { |
visitTry(Try node) { |
outIndent("try"); |
- blockBody(node.body, needsSeparation: true, needsNewline: false); |
+ spaceOut(); |
+ blockOut(node.body, shouldIndent: false, needsNewline: false); |
if (node.catchPart != null) { |
visit(node.catchPart); |
} |
if (node.finallyPart != null) { |
spaceOut(); |
out("finally"); |
- blockBody(node.finallyPart, needsSeparation: true, needsNewline: true); |
+ spaceOut(); |
+ blockOut(node.finallyPart, shouldIndent: false, needsNewline: true); |
} else { |
lineOut(); |
} |
@@ -444,7 +455,8 @@ class Printer implements NodeVisitor { |
visitNestedExpression(node.declaration, EXPRESSION, |
newInForInit: false, newAtStatementBegin: false); |
out(")"); |
- blockBody(node.body, needsSeparation: false, needsNewline: true); |
+ spaceOut(); |
+ blockOut(node.body, shouldIndent: false, needsNewline: false); |
} |
visitSwitch(Switch node) { |
@@ -517,7 +529,8 @@ class Printer implements NodeVisitor { |
out(' async*'); |
break; |
} |
- blockBody(fun.body, needsSeparation: false, needsNewline: false); |
+ spaceOut(); |
+ blockOut(fun.body, shouldIndent: false, needsNewline: false); |
localNamer.leaveScope(); |
} |