Fixed #2029 Simplify expressions stripping getlex and also ignoring some types of expressions

This commit is contained in:
Jindra Petřík
2023-10-01 18:21:38 +02:00
parent 6e3bc36007
commit 3f6223fe0f
10 changed files with 37 additions and 16 deletions
@@ -372,7 +372,9 @@ public abstract class GraphTargetItem implements Serializable, Cloneable {
public boolean isCompileTime() {
Set<GraphTargetItem> dependencies = new HashSet<>();
dependencies.add(this);
if (!((this instanceof SimpleValue) && ((SimpleValue)this).isSimpleValue())) {
dependencies.add(this);
}
return isCompileTime(dependencies);
}
@@ -22,6 +22,7 @@ import com.jpexs.decompiler.graph.GraphSourceItem;
import com.jpexs.decompiler.graph.GraphSourceItemPos;
import com.jpexs.decompiler.graph.GraphTargetItem;
import com.jpexs.decompiler.graph.GraphTargetVisitorInterface;
import com.jpexs.decompiler.graph.SimpleValue;
import java.util.List;
import java.util.Objects;
import java.util.Set;
@@ -106,11 +107,15 @@ public abstract class BinaryOpItem extends GraphTargetItem implements BinaryOp {
if (dependencies.contains(leftSide)) {
return false;
}
dependencies.add(leftSide);
if (!((leftSide instanceof SimpleValue) && ((SimpleValue)leftSide).isSimpleValue())) {
dependencies.add(leftSide);
}
if (leftSide != rightSide && dependencies.contains(rightSide)) {
return false;
}
dependencies.add(rightSide);
if (!((rightSide instanceof SimpleValue) && ((SimpleValue)rightSide).isSimpleValue())) {
dependencies.add(rightSide);
}
return leftSide.isConvertedCompileTime(dependencies) && rightSide.isConvertedCompileTime(dependencies);
}
@@ -82,7 +82,9 @@ public class DuplicateItem extends GraphTargetItem implements SimpleValue {
if (dependencies.contains(value)) {
return false;
}
dependencies.add(value);
if (!((value instanceof SimpleValue) && ((SimpleValue)value).isSimpleValue())) {
dependencies.add(value);
}
return value.isCompileTime(dependencies);
}
@@ -24,6 +24,7 @@ import com.jpexs.decompiler.graph.GraphPart;
import com.jpexs.decompiler.graph.GraphSourceItem;
import com.jpexs.decompiler.graph.GraphTargetItem;
import com.jpexs.decompiler.graph.GraphTargetVisitorInterface;
import com.jpexs.decompiler.graph.SimpleValue;
import com.jpexs.decompiler.graph.SourceGenerator;
import com.jpexs.decompiler.graph.TypeItem;
import java.util.ArrayList;
@@ -51,7 +52,9 @@ public class IfItem extends GraphTargetItem implements Block {
if (dependencies.contains(expression)) {
return false;
}
dependencies.add(expression);
if (!((expression instanceof SimpleValue) && ((SimpleValue)expression).isSimpleValue())) {
dependencies.add(expression);
}
return expression.isCompileTime(dependencies);
}
@@ -23,6 +23,7 @@ import com.jpexs.decompiler.flash.helpers.GraphTextWriter;
import com.jpexs.decompiler.graph.CompilationException;
import com.jpexs.decompiler.graph.GraphSourceItem;
import com.jpexs.decompiler.graph.GraphTargetItem;
import com.jpexs.decompiler.graph.SimpleValue;
import com.jpexs.decompiler.graph.SourceGenerator;
import com.jpexs.decompiler.graph.TypeItem;
import java.util.List;
@@ -57,7 +58,9 @@ public class NotItem extends UnaryOpItem implements LogicalOpItem, Inverted {
if (dependencies.contains(value)) {
return false;
}
dependencies.add(value);
if (!((value instanceof SimpleValue) && ((SimpleValue)value).isSimpleValue())) {
dependencies.add(value);
}
return value.isCompileTime(dependencies);
}