mirror of
https://git.huckle.dev/Huckles-Minecraft-Archive/jpexs-decompiler.git
synced 2026-05-27 22:04:46 +00:00
Fixed: #2519 AS1/2 avoid multi-level loops in cases where possible
This commit is contained in:
@@ -496,4 +496,80 @@ public class ActionScript2AssemblerTest extends ActionScript2TestBase {
|
||||
+ "trace(\"C\");\n"
|
||||
+ "}");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testBreakReturnAsJumpAfterFunction2() {
|
||||
String res = decompilePcode("ConstantPool \"a\", \"v\", \"b\", \"ret\"\n"
|
||||
+ "DefineFunction \"f\", 0 {\n"
|
||||
+ "Push \"a\"\n"
|
||||
+ "Push 3\n"
|
||||
+ "Push 2\n"
|
||||
+ "Push 1\n"
|
||||
+ "Push 3\n"
|
||||
+ "InitArray\n"
|
||||
+ "DefineLocal\n"
|
||||
+ "Push \"a\"\n"
|
||||
+ "GetVariable\n"
|
||||
+ "Enumerate2\n"
|
||||
+ "loc0046:StoreRegister 0\n"
|
||||
+ "Push null\n"
|
||||
+ "Equals2\n"
|
||||
+ "If loc00cb\n"
|
||||
+ "Push \"v\"\n"
|
||||
+ "Push register0\n"
|
||||
+ "SetVariable\n"
|
||||
+ "Push \"v\"\n"
|
||||
+ "GetVariable\n"
|
||||
+ "Trace\n"
|
||||
+ "Push \"b\"\n"
|
||||
+ "Push 0\n"
|
||||
+ "DefineLocal\n"
|
||||
+ "loc0074:Push \"b\"\n"
|
||||
+ "GetVariable\n"
|
||||
+ "Push 10\n"
|
||||
+ "Less2\n"
|
||||
+ "Not\n"
|
||||
+ "If loc00c6\n"
|
||||
+ "Push \"b\"\n"
|
||||
+ "GetVariable\n"
|
||||
+ "Push 4\n"
|
||||
+ "Equals2\n"
|
||||
+ "Not\n"
|
||||
+ "If loc00b4\n"
|
||||
+ "Push \"ret\"\n"
|
||||
+ "Trace\n"
|
||||
+ "loc00a4:Push null\n"
|
||||
+ "Equals2\n"
|
||||
+ "Not\n"
|
||||
+ "If loc00a4\n"
|
||||
+ "Jump loc00cb\n"
|
||||
+ "loc00b4:Push \"b\"\n"
|
||||
+ "Push \"b\"\n"
|
||||
+ "GetVariable\n"
|
||||
+ "Increment\n"
|
||||
+ "SetVariable\n"
|
||||
+ "Jump loc0074\n"
|
||||
+ "loc00c6:Jump loc0046\n"
|
||||
+ "}\n"
|
||||
+ "loc00cb:");
|
||||
res = cleanPCode(res);
|
||||
assertEquals(res, "function f()\n"
|
||||
+ "{\n"
|
||||
+ "var a = [1,2,3];\n"
|
||||
+ "for(v in a)\n"
|
||||
+ "{\n"
|
||||
+ "trace(v);\n"
|
||||
+ "var b = 0;\n"
|
||||
+ "while(b < 10)\n"
|
||||
+ "{\n"
|
||||
+ "if(b == 4)\n"
|
||||
+ "{\n"
|
||||
+ "trace(\"ret\");\n"
|
||||
+ "return;\n" //critical - no level2 break, but return
|
||||
+ "}\n"
|
||||
+ "b++;\n"
|
||||
+ "}\n"
|
||||
+ "}\n"
|
||||
+ "}");
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user