diff --git a/CHANGELOG.md b/CHANGELOG.md index b9f836e5f..8866663ab 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ All notable changes to this project will be documented in this file. ## [Unreleased] ### Fixed - [#2424] DefineEditText handling of letterSpacing, font size on incorrect values +- [#2391] Double not operator in ternar operator expression ## [22.0.2] - 2025-01-17 ### Added @@ -3691,6 +3692,7 @@ Major version of SWF to XML export changed to 2. [alpha 8]: https://github.com/jindrapetrik/jpexs-decompiler/compare/alpha7...alpha8 [alpha 7]: https://github.com/jindrapetrik/jpexs-decompiler/releases/tag/alpha7 [#2424]: https://www.free-decompiler.com/flash/issues/2424 +[#2391]: https://www.free-decompiler.com/flash/issues/2391 [#2375]: https://www.free-decompiler.com/flash/issues/2375 [#2374]: https://www.free-decompiler.com/flash/issues/2374 [#2389]: https://www.free-decompiler.com/flash/issues/2389 diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/TernarOpItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/TernarOpItem.java index 3ec562d94..606137fd1 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/TernarOpItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/TernarOpItem.java @@ -77,7 +77,7 @@ public class TernarOpItem extends GraphTargetItem { if (expression.getPrecedence() >= precedence) { writer.append("("); } - expression.toString(writer, localData); + expression.toStringBoolean(writer, localData); if (expression.getPrecedence() >= precedence) { writer.append(")"); } 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 5143efcbb..0ae17c5ba 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 @@ -1997,6 +1997,15 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile false); } + @Test + public void testTernarOperator2() { + decompileMethod("classic_air", "testTernarOperator2", "var b:Boolean = true;\r\n" + + "var i:int = 1;\r\n" + + "var j:int = int(b ? i : i + 1);\r\n" + + "var k:int = int(i ? j : j + 1);\r\n", + false); + } + @Test public void testTry() { decompileMethod("classic_air", "testTry", "var i:int = 0;\r\n" diff --git a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3ClassicDecompileTest.java b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3ClassicDecompileTest.java index a0a727ba1..f6e013881 100644 --- a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3ClassicDecompileTest.java +++ b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3ClassicDecompileTest.java @@ -1983,6 +1983,15 @@ public class ActionScript3ClassicDecompileTest extends ActionScript3DecompileTes false); } + @Test + public void testTernarOperator2() { + decompileMethod("classic", "testTernarOperator2", "var b:Boolean = true;\r\n" + + "var i:int = 1;\r\n" + + "var j:int = b ? i : i + 1;\r\n" + + "var k:int = Boolean(i) ? j : j + 1;\r\n", + false); + } + @Test public void testTry() { decompileMethod("classic", "testTry", "var i:int = 0;\r\n" diff --git a/libsrc/ffdec_lib/testdata/as3_new/bin/as3_new.air.swf b/libsrc/ffdec_lib/testdata/as3_new/bin/as3_new.air.swf index c876f2556..de76fe8d2 100644 Binary files a/libsrc/ffdec_lib/testdata/as3_new/bin/as3_new.air.swf and b/libsrc/ffdec_lib/testdata/as3_new/bin/as3_new.air.swf differ diff --git a/libsrc/ffdec_lib/testdata/as3_new/bin/as3_new.flex.swf b/libsrc/ffdec_lib/testdata/as3_new/bin/as3_new.flex.swf index 5ced947ef..bd22e2914 100644 Binary files a/libsrc/ffdec_lib/testdata/as3_new/bin/as3_new.flex.swf and b/libsrc/ffdec_lib/testdata/as3_new/bin/as3_new.flex.swf differ diff --git a/libsrc/ffdec_lib/testdata/as3_new/src/Main.as b/libsrc/ffdec_lib/testdata/as3_new/src/Main.as index 186ef4ab7..3101b597c 100644 --- a/libsrc/ffdec_lib/testdata/as3_new/src/Main.as +++ b/libsrc/ffdec_lib/testdata/as3_new/src/Main.as @@ -122,6 +122,7 @@ package TestSwitchDefault; TestSwitchIf; TestTernarOperator; + TestTernarOperator2; TestTry; TestTryIf; TestTryReturn; diff --git a/libsrc/ffdec_lib/testdata/as3_new/src/tests/TestAndOrCoercion.as b/libsrc/ffdec_lib/testdata/as3_new/src/tests/TestAndOrCoercion.as index 175ab6f33..b5351cb62 100644 --- a/libsrc/ffdec_lib/testdata/as3_new/src/tests/TestAndOrCoercion.as +++ b/libsrc/ffdec_lib/testdata/as3_new/src/tests/TestAndOrCoercion.as @@ -24,7 +24,7 @@ package tests this.ti = ti && (ti = new TestClass()); - var a = ti && (ti = new TestClass()); + var a:* = ti && (ti = new TestClass()); var b:int = 1 + (i || j); //no coercion @@ -33,7 +33,7 @@ package tests return ti && (ti = new TestClass()); } - public function test(p:TestInterface) + public function test(p:TestInterface): void { } diff --git a/libsrc/ffdec_lib/testdata/as3_new/src/tests/TestTernarOperator2.as b/libsrc/ffdec_lib/testdata/as3_new/src/tests/TestTernarOperator2.as new file mode 100644 index 000000000..3a9a92f1b --- /dev/null +++ b/libsrc/ffdec_lib/testdata/as3_new/src/tests/TestTernarOperator2.as @@ -0,0 +1,14 @@ +package tests +{ + + public class TestTernarOperator2 + { + public function run():* + { + var b:Boolean = true; + var i:int = 1; + var j:int = b ? i : i + 1; + var k:int = i ? j : j + 1; + } + } +}