diff --git a/CHANGELOG.md b/CHANGELOG.md index b5ec0acbc..02618631e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -36,6 +36,7 @@ All notable changes to this project will be documented in this file. - [#2211] PDF export, Font export - glyphs with no contours (advance only) - [#2212] GFX - Allow loading (DDS) images despite of set bitmapFormat - [#2202] AS2 detection of uninitialized class fields colliding with setters/getters +- [#2202] AS2 return in constructor does not take a value ### Changed - [#2185] MochiCrypt no longer offered for auto decrypt, user needs to choose variant from "Use unpacker" menu diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/as2/ActionScript2ClassDetector.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/as2/ActionScript2ClassDetector.java index 2fd2fe090..3866f452c 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/as2/ActionScript2ClassDetector.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/as2/ActionScript2ClassDetector.java @@ -734,6 +734,24 @@ public class ActionScript2ClassDetector { DirectValueActionItem classBaseName = new DirectValueActionItem(classNamePath.get(classNamePath.size() - 1)); ((FunctionActionItem) constructor).calculatedFunctionName = classBaseName; traits.add(0, new MyEntry<>(classBaseName, constructor)); + + AbstractGraphTargetVisitor visitor = new AbstractGraphTargetVisitor() { + @Override + public void visit(GraphTargetItem item) { + if (item instanceof ReturnActionItem) { + ReturnActionItem ret = (ReturnActionItem) item; + if (ret.value instanceof DirectValueActionItem) { + DirectValueActionItem dv = (DirectValueActionItem) ret.value; + if (dv.value instanceof Undefined) { + ret.value = null; + } + } + } + } + }; + for (GraphTargetItem ti : ((FunctionActionItem) constructor).actions) { + ti.visitRecursively(visitor); + } } else { //throw new AssertException("No constructor found"); } diff --git a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionScript2ClassesTest.java b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionScript2ClassesTest.java index 72c3bc2a8..06b4513c5 100644 --- a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionScript2ClassesTest.java +++ b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionScript2ClassesTest.java @@ -208,4 +208,29 @@ public class ActionScript2ClassesTest extends ActionScript2TestBase { + " com.jpexs.flash.test.testcases.TestSetterGetter.mystvar = 6;\n" + " }"); } + + @Test + public void testReturnInConstructor() { + compareSrc("TestReturnInConstructor", " function TestReturnInConstructor()\n" + + " {\n" + + " var _loc1_ = 3;\n" + + " if(_loc1_ == 3)\n" + + " {\n" + + " trace(\"A\");\n" + + " return;\n" + + " }\n" + + " trace(\"B\");\n" + + " }\n" + + " function func()\n" + + " {\n" + + " var _loc1_ = 3;\n" + + " if(_loc1_ == 3)\n" + + " {\n" + + " trace(\"A\");\n" + + " return undefined;\n" + + " }\n" + + " trace(\"B\");\n" + + " return 5;\n" + + " }"); + } } diff --git a/libsrc/ffdec_lib/testdata/as2/as2.swf b/libsrc/ffdec_lib/testdata/as2/as2.swf index 4791355d1..b09d4e27a 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/as2/com/jpexs/flash/test/TestLoader.as b/libsrc/ffdec_lib/testdata/as2/com/jpexs/flash/test/TestLoader.as index 4f12ac264..6fa3c6435 100644 --- a/libsrc/ffdec_lib/testdata/as2/com/jpexs/flash/test/TestLoader.as +++ b/libsrc/ffdec_lib/testdata/as2/com/jpexs/flash/test/TestLoader.as @@ -8,5 +8,6 @@ class com.jpexs.flash.test.TestLoader { new com.jpexs.flash.test.testcases.TestCallSetterGetter(); new com.jpexs.flash.test.testcases.TestVarsMethods(); new com.jpexs.flash.test.testcases.TestMaintainOrder(); + new com.jpexs.flash.test.testcases.TestReturnInConstructor(); } } \ No newline at end of file diff --git a/libsrc/ffdec_lib/testdata/as2/com/jpexs/flash/test/testcases/TestReturnInConstructor.as b/libsrc/ffdec_lib/testdata/as2/com/jpexs/flash/test/testcases/TestReturnInConstructor.as new file mode 100644 index 000000000..2c0941cc3 --- /dev/null +++ b/libsrc/ffdec_lib/testdata/as2/com/jpexs/flash/test/testcases/TestReturnInConstructor.as @@ -0,0 +1,21 @@ +class com.jpexs.flash.test.testcases.TestReturnInConstructor { + + public function TestReturnInConstructor(){ + var k = 3; + if (k == 3) { + trace("A"); + return; + } + trace("B"); + } + + public function func() { + var k = 3; + if (k == 3) { + trace("A"); + return undefined; + } + trace("B"); + return 5; + } +} \ No newline at end of file