diff --git a/CHANGELOG.md b/CHANGELOG.md index fdb87a23f..6d015f599 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ All notable changes to this project will be documented in this file. - [#1762] AS - switch detection (mostcommon pathpart) - [#1763] AS3 - initialization of activation object in some cases - AS3 - direct editation - arguments object on method with activation +- AS3 - direct editation - bit not ## [15.0.0] - 2021-11-29 ### Added diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ActionScript3Parser.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ActionScript3Parser.java index 5acf22ea4..84c3da297 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ActionScript3Parser.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ActionScript3Parser.java @@ -58,6 +58,7 @@ import com.jpexs.decompiler.flash.abc.avm2.model.clauses.TryAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.operations.AddAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.operations.AsTypeAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.operations.BitAndAVM2Item; +import com.jpexs.decompiler.flash.abc.avm2.model.operations.BitNotAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.operations.BitOrAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.operations.BitXorAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.operations.DeletePropertyAVM2Item; @@ -2252,7 +2253,7 @@ public class ActionScript3Parser { break; case NEGATE: ret = expressionPrimary(allOpenedNamespaces, thisType, pkg, needsActivation, importedClasses, openedNamespaces, false, registerVars, inFunction, inMethod, false, variables); - ret = new NegAVM2Item(null, null, ret); + ret = new BitNotAVM2Item(null, null, ret); break; case MINUS: 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 4cd5aa870..903e5f465 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 @@ -16,6 +16,19 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile addSwf("classic_air", "testdata/as3_new/bin/as3_new.air.swf"); } + @Test + public void testActivationArguments() { + decompileMethod("classic_air", "testActivationArguments", "var func:Function = function(a:int, b:int):int\r\n" + + "{\r\n" + + "return a + b;\r\n" + + "};\r\n" + + "if(arguments.length > 0)\r\n" + + "{\r\n" + + "trace(arguments[0]);\r\n" + + "}\r\n", + false); + } + @Test public void testArguments() { decompileMethod("classic_air", "testArguments", "return arguments[0];\r\n", @@ -1211,6 +1224,13 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile false); } + @Test + public void testNegate() { + decompileMethod("classic_air", "testNegate", "var a:int = 5;\r\n" + + "var b:int = ~a;\r\n", + false); + } + @Test public void testNumberCall() { decompileMethod("classic_air", "testNumberCall", "var a:String = (5).toString();\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 76057df37..bc8f6a150 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 @@ -16,6 +16,19 @@ public class ActionScript3ClassicDecompileTest extends ActionScript3DecompileTes addSwf("classic", "testdata/as3_new/bin/as3_new.flex.swf"); } + @Test + public void testActivationArguments() { + decompileMethod("classic", "testActivationArguments", "var func:Function = function(a:int, b:int):int\r\n" + + "{\r\n" + + "return a + b;\r\n" + + "};\r\n" + + "if(arguments.length > 0)\r\n" + + "{\r\n" + + "trace(arguments[0]);\r\n" + + "}\r\n", + false); + } + @Test public void testArguments() { decompileMethod("classic", "testArguments", "return arguments[0];\r\n", @@ -1204,6 +1217,13 @@ public class ActionScript3ClassicDecompileTest extends ActionScript3DecompileTes false); } + @Test + public void testNegate() { + decompileMethod("classic", "testNegate", "var a:int = 5;\r\n" + + "var b:int = ~a;\r\n", + false); + } + @Test public void testNumberCall() { decompileMethod("classic", "testNumberCall", "var a:String = (5).toString();\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 3756fe40b..af8abec9b 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 8870e2c2b..999321e54 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/obj/as3_newConfig.old b/libsrc/ffdec_lib/testdata/as3_new/obj/as3_newConfig.old index ccc475909..09cd1e0d1 100644 --- a/libsrc/ffdec_lib/testdata/as3_new/obj/as3_newConfig.old +++ b/libsrc/ffdec_lib/testdata/as3_new/obj/as3_newConfig.old @@ -16,7 +16,7 @@ CONFIG::timeStamp - '02.12.2021' + '04.12.2021' CONFIG::air diff --git a/libsrc/ffdec_lib/testdata/as3_new/src/Main.as b/libsrc/ffdec_lib/testdata/as3_new/src/Main.as index d0152fc44..9b67fd771 100644 --- a/libsrc/ffdec_lib/testdata/as3_new/src/Main.as +++ b/libsrc/ffdec_lib/testdata/as3_new/src/Main.as @@ -77,6 +77,7 @@ package TestMultipleCondition; TestNamedAnonFunctions; TestNames; + TestNegate; TestNumberCall; TestOptionalParameters; TestParamNames; diff --git a/libsrc/ffdec_lib/testdata/as3_new/src/tests/TestNegate.as b/libsrc/ffdec_lib/testdata/as3_new/src/tests/TestNegate.as new file mode 100644 index 000000000..d37887a56 --- /dev/null +++ b/libsrc/ffdec_lib/testdata/as3_new/src/tests/TestNegate.as @@ -0,0 +1,12 @@ +package tests +{ + + public class TestNegate + { + public function run():void + { + var a:int = 5; + var b:int = ~a; + } + } +}