Handling of certain loop types in a finally block

This commit is contained in:
Stiver 2014-07-08 23:50:14 +02:00
parent b668038ed9
commit b3a1c41244
3 changed files with 28 additions and 17 deletions

View File

@ -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++) {

View File

@ -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)) {