Fixed #2077 AS3 try..catch parts outside block

Fixed AS3 try..catch inside loop unneccessary continue
This commit is contained in:
Jindra Petřík
2023-09-23 12:10:26 +02:00
parent 97d04cbedd
commit b08856d3a5
16 changed files with 248 additions and 30 deletions

View File

@@ -643,6 +643,10 @@ public class Graph {
int ret = o.level - level;
if (ret == 0) {
ret = part.closedTime - o.part.closedTime;
if (ret == 0) { //some nodes may be split in half and thus have same closedTime - like in try..catch
return part.start - o.part.start;
}
}
return ret;
}

View File

@@ -64,9 +64,7 @@ public class GraphPart implements Serializable {
public List<GraphPart> refs = new ArrayList<>();
public boolean ignored = false;
public List<Object> forContinues = new ArrayList<>();
public int level;
public int discoveredTime;

View File

@@ -154,4 +154,14 @@ public class DoWhileItem extends LoopItem implements Block {
public GraphTargetItem returnType() {
return TypeItem.UNBOUNDED;
}
@Override
public boolean hasBaseBody() {
return true;
}
@Override
public List<GraphTargetItem> getBaseBodyCommands() {
return commands;
}
}

View File

@@ -171,4 +171,14 @@ public class ForItem extends LoopItem implements Block {
public GraphTargetItem returnType() {
return TypeItem.UNBOUNDED;
}
@Override
public boolean hasBaseBody() {
return true;
}
@Override
public List<GraphTargetItem> getBaseBodyCommands() {
return commands;
}
}

View File

@@ -19,6 +19,7 @@ package com.jpexs.decompiler.graph.model;
import com.jpexs.decompiler.graph.GraphSourceItem;
import com.jpexs.decompiler.graph.GraphTargetItem;
import com.jpexs.decompiler.graph.Loop;
import java.util.List;
/**
*
@@ -32,4 +33,8 @@ public abstract class LoopItem extends GraphTargetItem {
super(src, lineStartItem, NOPRECEDENCE);
this.loop = loop;
}
public abstract boolean hasBaseBody();
public abstract List<GraphTargetItem> getBaseBodyCommands();
}

View File

@@ -175,4 +175,14 @@ public class SwitchItem extends LoopItem implements Block {
public GraphTargetItem returnType() {
return TypeItem.UNBOUNDED;
}
@Override
public boolean hasBaseBody() {
return false;
}
@Override
public List<GraphTargetItem> getBaseBodyCommands() {
return null;
}
}

View File

@@ -150,4 +150,14 @@ public class WhileItem extends LoopItem implements Block {
public GraphTargetItem returnType() {
return TypeItem.UNBOUNDED;
}
@Override
public boolean hasBaseBody() {
return true;
}
@Override
public List<GraphTargetItem> getBaseBodyCommands() {
return commands;
}
}