summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/emscripten-optimizer/simple_ast.h38
1 files changed, 26 insertions, 12 deletions
diff --git a/src/emscripten-optimizer/simple_ast.h b/src/emscripten-optimizer/simple_ast.h
index bcfce9712..be5b4fa21 100644
--- a/src/emscripten-optimizer/simple_ast.h
+++ b/src/emscripten-optimizer/simple_ast.h
@@ -1332,6 +1332,10 @@ struct JSPrinter {
}
}
+ static bool isBlock(Ref node) {
+ return node->isArray() && !node->empty() && node[0] == BLOCK;
+ }
+
static bool ifHasElse(Ref node) {
assert(node->isArray() && node[0] == IF);
return node->size() >= 4 && !!node[3];
@@ -1344,25 +1348,35 @@ struct JSPrinter {
print(node[1]);
emit(')');
space();
- emit('{');
- indent++;
- newline();
- print(node[2]);
- indent--;
- newline();
- emit('}');
- if (ifHasElse(node)) {
- space();
- emit("else");
- safeSpace();
+ bool emitsBracesAnyhow = isBlock(node[2]);
+ if (!emitsBracesAnyhow) {
emit('{');
indent++;
newline();
- print(node[3]);
+ }
+ print(node[2]);
+ if (!emitsBracesAnyhow) {
indent--;
newline();
emit('}');
}
+ if (ifHasElse(node)) {
+ space();
+ emit("else");
+ safeSpace();
+ bool emitsBracesAnyhow = isBlock(node[3]);
+ if (!emitsBracesAnyhow) {
+ emit('{');
+ indent++;
+ newline();
+ }
+ print(node[3]);
+ if (!emitsBracesAnyhow) {
+ indent--;
+ newline();
+ emit('}');
+ }
+ }
}
void printDo(Ref node) {