diff --git a/CHANGELOG.md b/CHANGELOG.md
index e97066ae7..5bc748fa0 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -7,6 +7,7 @@ All notable changes to this project will be documented in this file.
### Fixed
- [#1761] AS3 - try..finally inside another structure like if
+- [#1762] AS call on integer numbers parenthesis
## [15.0.0] - 2021-11-29
### Added
@@ -2321,6 +2322,7 @@ All notable changes to this project will be documented in this file.
[alpha 8]: https://github.com/jindrapetrik/jpexs-decompiler/compare/alpha7...alpha8
[alpha 7]: https://github.com/jindrapetrik/jpexs-decompiler/releases/tag/alpha7
[#1761]: https://www.free-decompiler.com/flash/issues/1761
+[#1762]: https://www.free-decompiler.com/flash/issues/1762
[#1750]: https://www.free-decompiler.com/flash/issues/1750
[#1485]: https://www.free-decompiler.com/flash/issues/1485
[#1681]: https://www.free-decompiler.com/flash/issues/1681
diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/AVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/AVM2Item.java
index 0750da5f0..ec2c55d89 100644
--- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/AVM2Item.java
+++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/AVM2Item.java
@@ -12,7 +12,8 @@
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
- * License along with this library.
*/
+ * License along with this library.
+ */
package com.jpexs.decompiler.flash.abc.avm2.model;
import com.jpexs.decompiler.flash.IdentifiersDeobfuscation;
@@ -89,7 +90,7 @@ public abstract class AVM2Item extends GraphTargetItem {
}
if (!empty && object != null) {
- if (object.getPrecedence() > PRECEDENCE_PRIMARY) {
+ if (object.getPrecedence() > PRECEDENCE_PRIMARY || (object instanceof IntegerValueAVM2Item)) {
writer.append("(");
object.toString(writer, localData);
writer.append(")");
diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/CallMethodAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/CallMethodAVM2Item.java
index e896b235f..c3e7d9ec9 100644
--- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/CallMethodAVM2Item.java
+++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/CallMethodAVM2Item.java
@@ -52,7 +52,13 @@ public class CallMethodAVM2Item extends AVM2Item {
@Override
public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) throws InterruptedException {
- receiver.toString(writer, localData);
+ if (receiver.getPrecedence() > getPrecedence() || (receiver instanceof IntegerValueAVM2Item)) {
+ writer.append("(");
+ receiver.toString(writer, localData);
+ writer.append(")");
+ } else {
+ receiver.toString(writer, localData);
+ }
writer.append(".");
writer.append(methodName);
writer.spaceBeforeCallParenthesies(arguments.size());
diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/CallStaticAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/CallStaticAVM2Item.java
index 47d0a9e0c..e0112ceec 100644
--- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/CallStaticAVM2Item.java
+++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/CallStaticAVM2Item.java
@@ -52,7 +52,13 @@ public class CallStaticAVM2Item extends AVM2Item {
@Override
public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) throws InterruptedException {
- receiver.toString(writer, localData);
+ if (receiver.getPrecedence() > getPrecedence() || (receiver instanceof IntegerValueAVM2Item)) {
+ writer.append("(");
+ receiver.toString(writer, localData);
+ writer.append(")");
+ } else {
+ receiver.toString(writer, localData);
+ }
writer.append(".");
writer.append(methodName);
writer.spaceBeforeCallParenthesies(arguments.size());
diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/CallMethodActionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/CallMethodActionItem.java
index 3a0b6be13..dedb307f9 100644
--- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/CallMethodActionItem.java
+++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/CallMethodActionItem.java
@@ -71,7 +71,8 @@ public class CallMethodActionItem extends ActionItem {
}
if (!blankMethod) {
- if (scriptObject.getPrecedence() > this.precedence) {
+ if (scriptObject.getPrecedence() > this.precedence
+ || ((scriptObject instanceof DirectValueActionItem) && (((DirectValueActionItem) scriptObject).value instanceof Long))) {
writer.append("(");
scriptObject.toString(writer, localData);
writer.append(")");
diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/SetMemberActionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/SetMemberActionItem.java
index 509379519..5505ecca2 100644
--- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/SetMemberActionItem.java
+++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/SetMemberActionItem.java
@@ -91,7 +91,13 @@ public class SetMemberActionItem extends ActionItem implements SetTypeActionItem
@Override
public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) throws InterruptedException {
- object.toString(writer, localData);
+ if (((object instanceof DirectValueActionItem) && (((DirectValueActionItem) object).value instanceof Long))) {
+ writer.append("(");
+ object.toString(writer, localData);
+ writer.append(")");
+ } else {
+ object.toString(writer, localData);
+ }
if ((!(objectName instanceof DirectValueActionItem)) || (!((DirectValueActionItem) objectName).isString()) || (!IdentifiersDeobfuscation.isValidName(false, ((DirectValueActionItem) objectName).toStringNoQuotes(localData)))) {
writer.append("[");
diff --git a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionScript2Test.java b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionScript2Test.java
index 92da81eaa..99060be40 100644
--- a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionScript2Test.java
+++ b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionScript2Test.java
@@ -2385,4 +2385,12 @@ public class ActionScript2Test extends ActionScript2TestBase {
+ "trace(\"after\");\r\n"
);
}
+
+ @Test
+ public void frame85_numbersCallTest() {
+ compareSrc(85, "trace(\"numbersCallTest\");\r\n"
+ + "var a = (5).toString();\r\n"
+ + "var b = 5.2.toString();\r\n"
+ );
+ }
}
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 0121e5b98..65245881c 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
@@ -1214,6 +1214,13 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile
false);
}
+ @Test
+ public void testNumberCall() {
+ decompileMethod("classic_air", "testNumberCall", "var a:String = (5).toString();\r\n"
+ + "var b:String = 5.2.toString();\r\n",
+ false);
+ }
+
@Test
public void testParamNames() {
decompileMethod("classic_air", "testParamNames", "return firstp + secondp + thirdp;\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 9939e4c30..7d987ff82 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
@@ -1204,6 +1204,13 @@ public class ActionScript3ClassicDecompileTest extends ActionScript3DecompileTes
false);
}
+ @Test
+ public void testNumberCall() {
+ decompileMethod("classic", "testNumberCall", "var a:String = (5).toString();\r\n"
+ + "var b:String = 5.2.toString();\r\n",
+ false);
+ }
+
@Test
public void testParamNames() {
decompileMethod("classic", "testParamNames", "return firstp + secondp + thirdp;\r\n",
diff --git a/libsrc/ffdec_lib/testdata/as2/as2.fla b/libsrc/ffdec_lib/testdata/as2/as2.fla
index a9896f64e..ebcc85512 100644
Binary files a/libsrc/ffdec_lib/testdata/as2/as2.fla and b/libsrc/ffdec_lib/testdata/as2/as2.fla differ
diff --git a/libsrc/ffdec_lib/testdata/as2/as2.swf b/libsrc/ffdec_lib/testdata/as2/as2.swf
index a0d770c32..d2e3f2c37 100644
Binary files a/libsrc/ffdec_lib/testdata/as2/as2.swf and b/libsrc/ffdec_lib/testdata/as2/as2.swf differ
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 ca1dca326..9bfc4257e 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 fd277cc1a..3603aceb1 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 48bbe0213..47a6fb9d8 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
- '13.03.2021'
+ '01.12.2021'
CONFIG::air
diff --git a/libsrc/ffdec_lib/testdata/as3_new/obj/as3_newConfig.xml b/libsrc/ffdec_lib/testdata/as3_new/obj/as3_newConfig.xml
index b738e8b3a..47a6fb9d8 100644
--- a/libsrc/ffdec_lib/testdata/as3_new/obj/as3_newConfig.xml
+++ b/libsrc/ffdec_lib/testdata/as3_new/obj/as3_newConfig.xml
@@ -16,7 +16,7 @@
CONFIG::timeStamp
- '30.11.2021'
+ '01.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 20225e702..90a4f0700 100644
--- a/libsrc/ffdec_lib/testdata/as3_new/src/Main.as
+++ b/libsrc/ffdec_lib/testdata/as3_new/src/Main.as
@@ -76,6 +76,7 @@ package
TestMultipleCondition;
TestNamedAnonFunctions;
TestNames;
+ TestNumberCall;
TestOptionalParameters;
TestParamNames;
TestParamsCount;
diff --git a/libsrc/ffdec_lib/testdata/as3_new/src/tests/TestNumberCall.as b/libsrc/ffdec_lib/testdata/as3_new/src/tests/TestNumberCall.as
new file mode 100644
index 000000000..14eede836
--- /dev/null
+++ b/libsrc/ffdec_lib/testdata/as3_new/src/tests/TestNumberCall.as
@@ -0,0 +1,12 @@
+package tests
+{
+
+ public class TestNumberCall
+ {
+ public function run():*
+ {
+ var a:String = (5).toString();
+ var b:String = 5.2.toString();
+ }
+ }
+}