From 3f6223fe0f87b20c66fc1dc9b534c6004a52f68c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Thu, 7 Sep 2023 21:22:05 +0200 Subject: [PATCH] Fixed #2029 Simplify expressions stripping getlex and also ignoring some types of expressions --- CHANGELOG.md | 2 ++ .../decompiler/flash/abc/avm2/model/GetLexAVM2Item.java | 9 ++------- .../flash/abc/avm2/model/operations/TypeOfAVM2Item.java | 5 ++++- .../flash/action/model/SetVariableActionItem.java | 5 ++++- .../decompiler/flash/action/model/TypeOfActionItem.java | 5 ++++- .../src/com/jpexs/decompiler/graph/GraphTargetItem.java | 4 +++- .../com/jpexs/decompiler/graph/model/BinaryOpItem.java | 9 +++++++-- .../com/jpexs/decompiler/graph/model/DuplicateItem.java | 4 +++- .../src/com/jpexs/decompiler/graph/model/IfItem.java | 5 ++++- .../src/com/jpexs/decompiler/graph/model/NotItem.java | 5 ++++- 10 files changed, 37 insertions(+), 16 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 717abd06c..3c1058aa1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ All notable changes to this project will be documented in this file. - PR177 AS3 direct editation - Vector literal - [#2052], [#2058] Adding new script placing class to incorrect DoABC tag - [#2072] AS3 direct editation - incorrectly using trait names of top level classes +- [#2029] Simplify expressions stripping getlex and also ignoring some types of expressions ### Changed - [#2070] String values inside SWF to XML export are backslash escaped @@ -3069,6 +3070,7 @@ Major version of SWF to XML export changed to 2. [#2052]: https://www.free-decompiler.com/flash/issues/2052 [#2058]: https://www.free-decompiler.com/flash/issues/2058 [#2072]: https://www.free-decompiler.com/flash/issues/2072 +[#2029]: https://www.free-decompiler.com/flash/issues/2029 [#2043]: https://www.free-decompiler.com/flash/issues/2043 [#1998]: https://www.free-decompiler.com/flash/issues/1998 [#2038]: https://www.free-decompiler.com/flash/issues/2038 diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/GetLexAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/GetLexAVM2Item.java index 8f7f46a6a..f2c5a69c2 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/GetLexAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/GetLexAVM2Item.java @@ -30,7 +30,7 @@ import java.util.Objects; * * @author JPEXS */ -public class GetLexAVM2Item extends AVM2Item implements SimpleValue { +public class GetLexAVM2Item extends AVM2Item { public Multiname propertyName; @@ -70,12 +70,7 @@ public class GetLexAVM2Item extends AVM2Item implements SimpleValue { @Override public boolean hasReturnValue() { return true; - } - - @Override - public boolean isSimpleValue() { - return true; - } + } @Override public int hashCode() { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/TypeOfAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/TypeOfAVM2Item.java index 8cecfb518..734674a44 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/TypeOfAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/TypeOfAVM2Item.java @@ -24,6 +24,7 @@ import com.jpexs.decompiler.flash.ecma.EcmaType; 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 com.jpexs.decompiler.graph.model.UnaryOpItem; @@ -45,7 +46,9 @@ public class TypeOfAVM2Item extends UnaryOpItem { if (dependencies.contains(value)) { return false; } - dependencies.add(value); + if (!((value instanceof SimpleValue) && ((SimpleValue)value).isSimpleValue())) { + dependencies.add(value); + } return value.isCompileTime(dependencies); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/SetVariableActionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/SetVariableActionItem.java index b0bdc6a07..11879e8c1 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/SetVariableActionItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/SetVariableActionItem.java @@ -31,6 +31,7 @@ import com.jpexs.decompiler.graph.GraphPart; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphSourceItemPos; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.SimpleValue; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.model.LocalData; import java.util.List; @@ -144,7 +145,9 @@ public class SetVariableActionItem extends ActionItem implements SetTypeActionIt if (dependencies.contains(value)) { return false; } - dependencies.add(value); + if (!((value instanceof SimpleValue) && ((SimpleValue)value).isSimpleValue())) { + dependencies.add(value); + } return value.isCompileTime(dependencies); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/TypeOfActionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/TypeOfActionItem.java index dbc22e4ad..a1e5c4e81 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/TypeOfActionItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/TypeOfActionItem.java @@ -25,6 +25,7 @@ import com.jpexs.decompiler.graph.CompilationException; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphSourceItemPos; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.SimpleValue; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.model.LocalData; import java.util.List; @@ -94,7 +95,9 @@ public class TypeOfActionItem extends ActionItem { if (dependencies.contains(value)) { return false; } - dependencies.add(value); + if (!((value instanceof SimpleValue) && ((SimpleValue)value).isSimpleValue())) { + dependencies.add(value); + } return value.isCompileTime(dependencies); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/GraphTargetItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/GraphTargetItem.java index 43e17c572..600a33601 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/GraphTargetItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/GraphTargetItem.java @@ -372,7 +372,9 @@ public abstract class GraphTargetItem implements Serializable, Cloneable { public boolean isCompileTime() { Set dependencies = new HashSet<>(); - dependencies.add(this); + if (!((this instanceof SimpleValue) && ((SimpleValue)this).isSimpleValue())) { + dependencies.add(this); + } return isCompileTime(dependencies); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/BinaryOpItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/BinaryOpItem.java index fa0a31e16..659e18337 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/BinaryOpItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/BinaryOpItem.java @@ -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); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/DuplicateItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/DuplicateItem.java index ca295d07e..5c3335ccc 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/DuplicateItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/DuplicateItem.java @@ -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); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/IfItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/IfItem.java index 1e47ee949..fd23cc4e4 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/IfItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/IfItem.java @@ -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); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/NotItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/NotItem.java index 478c7dc72..14311b435 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/NotItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/NotItem.java @@ -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); }