Fixed 'IDEA-128591: Infinite loop ignored'

master
Stiver 11 years ago
parent 53ad2b920e
commit a2fa99e3a2
  1. 8
      src/de/fernflower/modules/decompiler/DomHelper.java

@ -60,17 +60,17 @@ public class DomHelper {
stats.addWithKey(new BasicBlockStatement(block), block.id); stats.addWithKey(new BasicBlockStatement(block), block.id);
} }
BasicBlock firstblock = graph.getFirst();
// head statement // head statement
Statement firstst = stats.getWithKey(graph.getFirst().id); Statement firstst = stats.getWithKey(firstblock.id);
// dummy exit statement // dummy exit statement
Statement dummyexit = new Statement(); Statement dummyexit = new Statement();
dummyexit.type = Statement.TYPE_DUMMYEXIT; dummyexit.type = Statement.TYPE_DUMMYEXIT;
Statement general; Statement general;
if(stats.size() > 1) { if(stats.size() > 1 || firstblock.isSuccessor(firstblock)) { // multiple basic blocks or an infinite loop of one block
general = new GeneralStatement(firstst, stats, null); general = new GeneralStatement(firstst, stats, null);
} else { } else { // one straightforward basic block
// special case: one basic block
RootStatement root = new RootStatement(firstst, dummyexit); RootStatement root = new RootStatement(firstst, dummyexit);
firstst.addSuccessor(new StatEdge(StatEdge.TYPE_BREAK, firstst, dummyexit, root)); firstst.addSuccessor(new StatEdge(StatEdge.TYPE_BREAK, firstst, dummyexit, root));

Loading…
Cancel
Save