Skip to content

Commit

Permalink
Remove leading label and trailing continue from do-while loop.
Browse files Browse the repository at this point in the history
  • Loading branch information
siegfriedpammer committed Dec 19, 2016
1 parent 41bcf92 commit 76bd40c
Showing 1 changed file with 8 additions and 1 deletion.
9 changes: 8 additions & 1 deletion ICSharpCode.Decompiler/CSharp/StatementBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -315,8 +315,15 @@ Statement ConvertLoop(BlockContainer container)
Block conditionBlock = FindDoWhileConditionBlock(container, out var condition);
if (conditionBlock != null) {
continueTarget = conditionBlock;
blockStatement = ConvertBlockContainer(new BlockStatement(), container, container.Blocks.Where(b => b != conditionBlock), true);
if (container.EntryPoint.IncomingEdgeCount == continueCount) {
// Remove the entrypoint label if all jumps to the label were replaced with 'continue;' statements
blockStatement.Statements.First().Remove();
}
if (blockStatement.LastOrDefault() is ContinueStatement continueStmt)
continueStmt.Remove();
return new DoWhileStatement {
EmbeddedStatement = ConvertBlockContainer(new BlockStatement(), container, container.Blocks.Where(b => b != conditionBlock), true),
EmbeddedStatement = blockStatement,
Condition = exprBuilder.TranslateCondition(condition)
};
}
Expand Down

0 comments on commit 76bd40c

Please sign in to comment.