From c8a8ff2fea963cf06b344036021873e7aaa3efc3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Sun, 31 Aug 2025 15:59:08 +0200 Subject: [PATCH] Get property fix, preincrement air test fix --- .../instructions/other/GetPropertyIns.java | 20 +++++++++++++++++++ .../ActionScript3ClassicAirDecompileTest.java | 3 +-- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/GetPropertyIns.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/GetPropertyIns.java index 449b40cdc..7f78ee007 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/GetPropertyIns.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/GetPropertyIns.java @@ -47,6 +47,8 @@ import com.jpexs.decompiler.graph.TranslateStack; import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.DuplicateItem; import com.jpexs.decompiler.graph.model.DuplicateSourceItem; +import com.jpexs.decompiler.graph.model.HasTempIndex; +import com.jpexs.decompiler.graph.model.SetTemporaryItem; import com.jpexs.helpers.Reference; import java.util.ArrayList; import java.util.List; @@ -116,9 +118,18 @@ public class GetPropertyIns extends InstructionDefinition { } if (findPropName.name instanceof DuplicateItem || findPropName.name instanceof DuplicateSourceItem) { if (findPropName.name.getThroughDuplicate() == multiname.name.getThroughDuplicate()) { + int tempIndex = ((HasTempIndex) findPropName.name).getTempIndex(); + findPropName.name = findPropName.name.value; multiname.name = multiname.name.getThroughDuplicate(); + if (!output.isEmpty() && output.get(output.size() - 1) instanceof SetTemporaryItem) { + SetTemporaryItem st = (SetTemporaryItem) output.get(output.size() - 1); + if (st.tempIndex == tempIndex) { + output.remove(output.size() - 1); + } + } } + } if (findPropName.namespace instanceof SetLocalAVM2Item) { SetLocalAVM2Item setLocal = (SetLocalAVM2Item) findPropName.namespace; @@ -134,8 +145,17 @@ public class GetPropertyIns extends InstructionDefinition { } if (findPropName.namespace instanceof DuplicateItem || findPropName.namespace instanceof DuplicateSourceItem) { if (findPropName.namespace.getThroughDuplicate() == multiname.namespace.getThroughDuplicate()) { + int tempIndex = ((HasTempIndex) findPropName.namespace).getTempIndex(); + findPropName.namespace = findPropName.namespace.getThroughDuplicate(); multiname.namespace = multiname.namespace.getThroughDuplicate(); + + if (!output.isEmpty() && output.get(output.size() - 1) instanceof SetTemporaryItem) { + SetTemporaryItem st = (SetTemporaryItem) output.get(output.size() - 1); + if (st.tempIndex == tempIndex) { + output.remove(output.size() - 1); + } + } } } } diff --git a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3ClassicAirDecompileTest.java b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3ClassicAirDecompileTest.java index 56f5fa6c5..e9504ab38 100644 --- a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3ClassicAirDecompileTest.java +++ b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3ClassicAirDecompileTest.java @@ -1777,8 +1777,7 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile + "r = -n1;\r\n" + "r = ~n1;\r\n" + "br = !b1;\r\n" - + "n1++;\r\n" - + "r = n1;\r\n" + + "r = ++n1;\r\n" + "r = n1++;\r\n" + "cr = c as MyClass;\r\n" + "br = \"hello\" in d;\r\n"