Cleanup (loop invariant optimization; formatting)

master
Roman Shevchenko 10 years ago
parent 5349ad435b
commit 91c64c5a94
  1. 22
      src/org/jetbrains/java/decompiler/modules/decompiler/LabelHelper.java

@ -426,30 +426,28 @@ public class LabelHelper {
HashSet<Statement> setContinue = new HashSet<Statement>(); HashSet<Statement> setContinue = new HashSet<Statement>();
if (stat.getExprents() == null) { if (stat.getExprents() == null) {
for(Statement st : stat.getStats()) { for (Statement st : stat.getStats()) {
HashSet<Statement>[] arr = processStatementLabel(st); HashSet<Statement>[] arr = processStatementLabel(st);
setBreak.addAll(arr[0]); setBreak.addAll(arr[0]);
setContinue.addAll(arr[1]); setContinue.addAll(arr[1]);
} }
boolean shieldtype = (stat.type == Statement.TYPE_DO || stat.type == Statement.TYPE_SWITCH); boolean shieldType = (stat.type == Statement.TYPE_DO || stat.type == Statement.TYPE_SWITCH);
if (shieldType) {
for(StatEdge edge : stat.getLabelEdges()) { for (StatEdge edge : stat.getLabelEdges()) {
if (edge.explicit) { if (edge.explicit && ((edge.getType() == StatEdge.TYPE_BREAK && setBreak.contains(edge.getSource())) ||
if (shieldtype (edge.getType() == StatEdge.TYPE_CONTINUE && setContinue.contains(edge.getSource())))) {
&& ((edge.getType() == StatEdge.TYPE_BREAK && setBreak.contains(edge.getSource())) || (edge.getType() == StatEdge.TYPE_CONTINUE && setContinue.contains(edge
.getSource())))) {
edge.labeled = false; edge.labeled = false;
} }
} }
} }
switch (stat.type) { switch (stat.type) {
case Statement.TYPE_DO: case Statement.TYPE_DO:
setContinue.clear(); setContinue.clear();
case Statement.TYPE_SWITCH: case Statement.TYPE_SWITCH:
setBreak.clear(); setBreak.clear();
} }
} }

Loading…
Cancel
Save