Browse Source

Fix another bug in NormalizeBlockStatements

pull/976/head
Siegfried Pammer 8 years ago
parent
commit
ff110508e6
  1. 17
      ICSharpCode.Decompiler/CSharp/Transforms/NormalizeBlockStatements.cs

17
ICSharpCode.Decompiler/CSharp/Transforms/NormalizeBlockStatements.cs

@ -63,16 +63,23 @@ namespace ICSharpCode.Decompiler.CSharp.Transforms
{ {
if (statement.IsNull) return; if (statement.IsNull) return;
if (context.Settings.AlwaysUseBraces) { if (context.Settings.AlwaysUseBraces) {
InsertBlock(statement); if (!IsElseIf(statement, parent)) {
InsertBlock(statement);
}
} else { } else {
if (statement is BlockStatement b && b.Statements.Count == 1 && IsAllowed(b.Statements.First(), parent)) { if (statement is BlockStatement b && b.Statements.Count == 1 && IsAllowedAsEmbeddedStatement(b.Statements.First(), parent)) {
statement.ReplaceWith(b.Statements.First().Detach()); statement.ReplaceWith(b.Statements.First().Detach());
} else if (!IsAllowed(statement, parent)) { } else if (!IsAllowedAsEmbeddedStatement(statement, parent)) {
InsertBlock(statement); InsertBlock(statement);
} }
} }
} }
bool IsElseIf(Statement statement, Statement parent)
{
return parent is IfElseStatement && statement.Role == IfElseStatement.FalseRole;
}
static void InsertBlock(Statement statement) static void InsertBlock(Statement statement)
{ {
if (statement.IsNull) return; if (statement.IsNull) return;
@ -83,11 +90,11 @@ namespace ICSharpCode.Decompiler.CSharp.Transforms
} }
} }
bool IsAllowed(Statement statement, Statement parent) bool IsAllowedAsEmbeddedStatement(Statement statement, Statement parent)
{ {
switch (statement) { switch (statement) {
case IfElseStatement ies: case IfElseStatement ies:
return !(parent is IfElseStatement); return parent is IfElseStatement && ies.Role == IfElseStatement.FalseRole;
case VariableDeclarationStatement vds: case VariableDeclarationStatement vds:
case WhileStatement ws: case WhileStatement ws:
case DoWhileStatement dws: case DoWhileStatement dws:

Loading…
Cancel
Save