diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/emscripten-optimizer/simple_ast.h | 38 |
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) { |