mirror of
https://git.huckle.dev/Huckles-Minecraft-Archive/jpexs-decompiler.git
synced 2026-07-08 22:58:19 +00:00
Fixed #2202 AS2 return in constructor does not take a value
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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");
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
+ " }");
|
||||
}
|
||||
}
|
||||
|
||||
BIN
libsrc/ffdec_lib/testdata/as2/as2.swf
vendored
BIN
libsrc/ffdec_lib/testdata/as2/as2.swf
vendored
Binary file not shown.
@@ -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();
|
||||
}
|
||||
}
|
||||
21
libsrc/ffdec_lib/testdata/as2/com/jpexs/flash/test/testcases/TestReturnInConstructor.as
vendored
Normal file
21
libsrc/ffdec_lib/testdata/as2/com/jpexs/flash/test/testcases/TestReturnInConstructor.as
vendored
Normal file
@@ -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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user