void ProcessCondition(InstructionBlock block) { var @else = block.Successors [0]; var then = block.Successors [1]; var child = GetFirstCommonChild(then, @else); if (child == null) { child = @else; } var data = new ConditionData(then, @else); if (child != @else) { var then_end = GetBlock(@else.Index - 1); var last = then_end.Last; if (IsGoto(last) && then_end.Successors [0] == child) { Annotate(last, Annotation.Skip); } data.AddElseData(@else, child); } Annotate(block.Last, Annotation.Condition, data); ProcessTwoWayBlockSuccessors(block); }
void ProcessConditionBranches(ConditionData data, IfStatement conditional) { MoveStatementsToBlock(data.Then, conditional.Then); if (data.Else != null && !IsElseUnecessary(conditional)) { conditional.Else = new BlockStatement(); MoveStatementsToBlock(data.Else, conditional.Else); if (IsEmptyThenCondition(conditional)) { SwapConditionBranches(conditional); } } }