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;
+ }
+ }
+}