Handling of certain loop types in a finally block

master
Stiver 11 years ago
parent b668038ed9
commit b3a1c41244
  1. 1
      src/de/fernflower/main/ClassesProcessor.java
  2. 12
      src/de/fernflower/modules/decompiler/ExprProcessor.java

@ -165,6 +165,7 @@ public class ClassesProcessor {
HashSet<String> setNestedClasses = mapNestedClassReferences.get(superClass); HashSet<String> setNestedClasses = mapNestedClassReferences.get(superClass);
if(setNestedClasses != null) { if(setNestedClasses != null) {
StructClass scl = supernode.classStruct; StructClass scl = supernode.classStruct;
StructInnerClassesAttribute inner = (StructInnerClassesAttribute) scl.getAttributes().getWithKey("InnerClasses"); StructInnerClassesAttribute inner = (StructInnerClassesAttribute) scl.getAttributes().getWithKey("InnerClasses");
for(int i = 0; i < inner.getStringentries().size(); i++) { for(int i = 0; i < inner.getStringentries().size(); i++) {

@ -131,7 +131,9 @@ public class ExprProcessor implements CodeConstants {
// try { // try {
// DotExporter.toDotFile(dgraph, new File("c:\\Temp\\gr12_my.dot")); // DotExporter.toDotFile(dgraph, new File("c:\\Temp\\gr12_my.dot"));
// } catch(Exception ex) {ex.printStackTrace();} // } catch (Exception ex) {
// ex.printStackTrace();
// }
// collect finally entry points // collect finally entry points
Set<String> setFinallyShortRangeEntryPoints = new HashSet<String>(); Set<String> setFinallyShortRangeEntryPoints = new HashSet<String>();
@ -212,6 +214,14 @@ public class ExprProcessor implements CodeConstants {
// not be null at this point // not be null at this point
} }
// handling of entry point loops
int succ_entry_index = ndentrypoints.indexOf(nd.id);
if(succ_entry_index >= 0) { // we are in a loop (e.g. continue in a finally block), drop all entry points in the list beginning with succ_entry_index
for(int elements_to_remove = ndentrypoints.size() - succ_entry_index; elements_to_remove > 0; elements_to_remove--) {
ndentrypoints.removeLast();
}
}
String ndentrykey = buildEntryPointKey(ndentrypoints); String ndentrykey = buildEntryPointKey(ndentrypoints);
if (!mapSucc.containsKey(ndentrykey)) { if (!mapSucc.containsKey(ndentrykey)) {

Loading…
Cancel
Save