diff --git a/CHANGELOG.md b/CHANGELOG.md index 1450b5f9d..1c0274ddc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ All notable changes to this project will be documented in this file. - AS1/2 break statement decompilation in for..in loops - AS2 direct editation - not generating Pop in class header ifs - AS1/2 deobfuscation - ActionRandom fixed for nonpositive numbers +- AS1/2 switch statement detection - fixes of default section position ## [11.0.0] - 2018-01-17 ### Added diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/ActionGraph.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/ActionGraph.java index d872ce1a3..3d673c633 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/ActionGraph.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/ActionGraph.java @@ -302,15 +302,14 @@ public class ActionGraph extends Graph { stack.push(set); } else { part = part.nextParts.get(1); - //caseBodyParts.add(part); GraphPart defaultPart = part; if (code.size() > defaultPart.start && code.get(defaultPart.start) instanceof ActionJump) { defaultPart = defaultPart.nextParts.get(0); } - List caseValues = new ArrayList<>(); boolean hasDefault = false; /* + case 4: case 5: default: trace("5 & def"); @@ -318,13 +317,12 @@ public class ActionGraph extends Graph { case 6: */ - for (int i = 0; i < caseBodyParts.size(); i++) { - caseValues.add(caseValuesMap.get(i)); + //must go backwards to hit case 5, not case 4 + for (int i = caseBodyParts.size() - 1; i >= 0; i--) { if (caseBodyParts.get(i) == defaultPart) { - i++; - caseValuesMap.add(i, new DefaultItem()); - caseBodyParts.add(i, defaultPart); - caseValues.add(caseValuesMap.get(i)); + DefaultItem di = new DefaultItem(); + caseValuesMap.add(i + 1, di); + caseBodyParts.add(i + 1, defaultPart); hasDefault = true; break; } @@ -332,21 +330,48 @@ public class ActionGraph extends Graph { if (!hasDefault) { /* + case 1: + trace("1"); + case 2: + trace("2"); //no break default: trace("def"); - case 1: - trace("1"); + ... + case 3: */ - for (int i = 0; i < caseBodyParts.size(); i++) { - if (defaultPart.leadsTo(localData, this, code, caseBodyParts.get(i), loops)) { - caseValuesMap.add(i, new DefaultItem()); - caseBodyParts.add(i, defaultPart); - caseValues.add(i, caseValuesMap.get(i)); + //must go backwards to hit case 2, not case 1 + for (int i = caseBodyParts.size() - 1; i >= 0; i--) { + if (caseBodyParts.get(i).leadsTo(localData, this, code, defaultPart, loops)) { + DefaultItem di = new DefaultItem(); + caseValuesMap.add(i + 1, di); + caseBodyParts.add(i + 1, defaultPart); hasDefault = true; break; } } } + + if (!hasDefault) { + /* + case 1: + trace("1"); + break; + default: + trace("def"); //no break + case 2: + trace("2"); + */ + for (int i = 0; i < caseBodyParts.size(); i++) { + if (defaultPart.leadsTo(localData, this, code, caseBodyParts.get(i), loops)) { + DefaultItem di = new DefaultItem(); + caseValuesMap.add(i, di); + caseBodyParts.add(i, defaultPart); + hasDefault = true; + break; + } + } + } + if (!hasDefault) { /* case 1: @@ -358,7 +383,6 @@ public class ActionGraph extends Graph { */ caseValuesMap.add(new DefaultItem()); caseBodyParts.add(defaultPart); - caseValues.add(caseValuesMap.get(caseValuesMap.size() - 1)); } GraphPart breakPart = getMostCommonPart(localData, caseBodyParts, loops); @@ -373,7 +397,7 @@ public class ActionGraph extends Graph { loops.add(currentLoop); List valuesMapping = new ArrayList<>(); List caseBodies = new ArrayList<>(); - for (int i = 0; i < caseValues.size(); i++) { + for (int i = 0; i < caseValuesMap.size(); i++) { GraphPart cur = caseBodyParts.get(i); if (!caseBodies.contains(cur)) { caseBodies.add(cur); @@ -422,15 +446,16 @@ public class ActionGraph extends Graph { } if (lastc.isEmpty()) { int cnt2 = 0; - if (caseValues.get(caseValues.size() - 1) instanceof DefaultItem) { + if (caseValuesMap.get(caseValuesMap.size() - 1) instanceof DefaultItem) { for (int i = valuesMapping.size() - 1; i >= 0; i--) { if (valuesMapping.get(i) == caseCommands.size() - 1) { cnt2++; } } + + caseValuesMap.remove(caseValuesMap.size() - 1); + valuesMapping.remove(valuesMapping.size() - 1); if (cnt2 == 1) { - caseValues.remove(caseValues.size() - 1); - valuesMapping.remove(valuesMapping.size() - 1); caseCommands.remove(lastc); } } @@ -442,13 +467,12 @@ public class ActionGraph extends Graph { if (!lastc.isEmpty() && (lastc.get(lastc.size() - 1) instanceof BreakItem)) { BreakItem bi = (BreakItem) lastc.get(lastc.size() - 1); lastc.remove(lastc.size() - 1); - } } ret = new ArrayList<>(); ret.addAll(output); - SwitchItem sti = new SwitchItem(null, switchStartItem, currentLoop, switchedObject, caseValues, caseCommands, valuesMapping); + SwitchItem sti = new SwitchItem(null, switchStartItem, currentLoop, switchedObject, caseValuesMap, caseCommands, valuesMapping); ret.add(sti); currentLoop.phase = 2; if (next != null) { 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 ec1637b32..73652164e 100644 --- a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionScript2Test.java +++ b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionScript2Test.java @@ -1026,4 +1026,851 @@ public class ActionScript2Test extends ActionScript2TestBase { + "var obj = {a:5,b:6,c:7};\r\n" ); } + + @Test + public void frame67_switchVariantsTest() { + compareSrc(67, "function test1()\r\n" + + "{\r\n" + + "var _loc1_ = random(100);\r\n" + + "switch(_loc1_)\r\n" + + "{\r\n" + + "case 1:\r\n" + + "trace(\"place1\");\r\n" + + "case 2:\r\n" + + "trace(\"place2\");\r\n" + + "}\r\n" + + "trace(\"place3\");\r\n" + + "trace(\"after switch\");\r\n" + + "}\r\n" + + "function test2()\r\n" + + "{\r\n" + + "var _loc1_ = random(100);\r\n" + + "switch(_loc1_)\r\n" + + "{\r\n" + + "case 1:\r\n" + + "case 2:\r\n" + + "case 3:\r\n" + + "trace(\"place3\");\r\n" + + "}\r\n" + + "trace(\"after switch\");\r\n" + + "}\r\n" + + "function test3()\r\n" + + "{\r\n" + + "var _loc1_ = random(100);\r\n" + + "switch(_loc1_)\r\n" + + "{\r\n" + + "case 1:\r\n" + + "trace(\"place1\");\r\n" + + "case 2:\r\n" + + "trace(\"place2\");\r\n" + + "case 3:\r\n" + + "trace(\"place3\");\r\n" + + "}\r\n" + + "trace(\"after switch\");\r\n" + + "}\r\n" + + "function test4()\r\n" + + "{\r\n" + + "var _loc1_ = random(100);\r\n" + + "switch(_loc1_)\r\n" + + "{\r\n" + + "case 1:\r\n" + + "trace(\"place1\");\r\n" + + "break;\r\n" + + "case 2:\r\n" + + "trace(\"place2\");\r\n" + + "default:\r\n" + + "trace(\"place3\");\r\n" + + "}\r\n" + + "trace(\"after switch\");\r\n" + + "}\r\n" + + "function test5()\r\n" + + "{\r\n" + + "var _loc1_ = random(100);\r\n" + + "switch(_loc1_)\r\n" + + "{\r\n" + + "case 1:\r\n" + + "trace(\"place1\");\r\n" + + "break;\r\n" + + "case 2:\r\n" + + "trace(\"place2\");\r\n" + + "case 3:\r\n" + + "trace(\"place3\");\r\n" + + "}\r\n" + + "trace(\"after switch\");\r\n" + + "}\r\n" + + "function test6()\r\n" + + "{\r\n" + + "var _loc1_ = random(100);\r\n" + + "switch(_loc1_)\r\n" + + "{\r\n" + + "case 1:\r\n" + + "trace(\"place1\");\r\n" + + "break;\r\n" + + "case 2:\r\n" + + "}\r\n" + + "trace(\"place3\");\r\n" + + "trace(\"after switch\");\r\n" + + "}\r\n" + + "function test7()\r\n" + + "{\r\n" + + "var _loc1_ = random(100);\r\n" + + "switch(_loc1_)\r\n" + + "{\r\n" + + "case 1:\r\n" + + "trace(\"place1\");\r\n" + + "case 2:\r\n" + + "trace(\"place2\");\r\n" + + "break;\r\n" + + "default:\r\n" + + "trace(\"place3\");\r\n" + + "}\r\n" + + "trace(\"after switch\");\r\n" + + "}\r\n" + + "function test8()\r\n" + + "{\r\n" + + "var _loc1_ = random(100);\r\n" + + "switch(_loc1_)\r\n" + + "{\r\n" + + "case 1:\r\n" + + "case 2:\r\n" + + "trace(\"place2\");\r\n" + + "case 3:\r\n" + + "trace(\"place3\");\r\n" + + "}\r\n" + + "trace(\"after switch\");\r\n" + + "}\r\n" + + "function test9()\r\n" + + "{\r\n" + + "var _loc1_ = random(100);\r\n" + + "switch(_loc1_)\r\n" + + "{\r\n" + + "case 1:\r\n" + + "trace(\"place1\");\r\n" + + "case 2:\r\n" + + "case 3:\r\n" + + "trace(\"place3\");\r\n" + + "}\r\n" + + "trace(\"after switch\");\r\n" + + "}\r\n" + + "function test10()\r\n" + + "{\r\n" + + "var _loc1_ = random(100);\r\n" + + "switch(_loc1_)\r\n" + + "{\r\n" + + "case 1:\r\n" + + "trace(\"place1\");\r\n" + + "break;\r\n" + + "case 2:\r\n" + + "trace(\"place3\");\r\n" + + "break;\r\n" + + "default:\r\n" + + "trace(\"place2\");\r\n" + + "}\r\n" + + "trace(\"after switch\");\r\n" + + "}\r\n" + + "function test11()\r\n" + + "{\r\n" + + "var _loc1_ = random(100);\r\n" + + "switch(_loc1_)\r\n" + + "{\r\n" + + "case 1:\r\n" + + "trace(\"place1\");\r\n" + + "break;\r\n" + + "case 2:\r\n" + + "trace(\"place2\");\r\n" + + "break;\r\n" + + "case 3:\r\n" + + "trace(\"place3\");\r\n" + + "}\r\n" + + "trace(\"after switch\");\r\n" + + "}\r\n" + + "function test12()\r\n" + + "{\r\n" + + "var _loc1_ = random(100);\r\n" + + "switch(_loc1_)\r\n" + + "{\r\n" + + "case 1:\r\n" + + "trace(\"place1\");\r\n" + + "break;\r\n" + + "case 2:\r\n" + + "case 3:\r\n" + + "trace(\"place3\");\r\n" + + "}\r\n" + + "trace(\"after switch\");\r\n" + + "}\r\n" + + "function test13()\r\n" + + "{\r\n" + + "var _loc1_ = random(100);\r\n" + + "switch(_loc1_)\r\n" + + "{\r\n" + + "case 1:\r\n" + + "default:\r\n" + + "trace(\"place2\");\r\n" + + "break;\r\n" + + "case 2:\r\n" + + "trace(\"place3\");\r\n" + + "}\r\n" + + "trace(\"after switch\");\r\n" + + "}\r\n" + + "function test14()\r\n" + + "{\r\n" + + "var _loc1_ = random(100);\r\n" + + "switch(_loc1_)\r\n" + + "{\r\n" + + "case 1:\r\n" + + "case 2:\r\n" + + "trace(\"place2\");\r\n" + + "break;\r\n" + + "case 3:\r\n" + + "trace(\"place3\");\r\n" + + "}\r\n" + + "trace(\"after switch\");\r\n" + + "}\r\n" + + "function test15()\r\n" + + "{\r\n" + + "var _loc1_ = random(100);\r\n" + + "switch(_loc1_)\r\n" + + "{\r\n" + + "case 1:\r\n" + + "trace(\"place1\");\r\n" + + "case 2:\r\n" + + "trace(\"place2\");\r\n" + + "case 3:\r\n" + + "trace(\"place3\");\r\n" + + "}\r\n" + + "trace(\"after switch\");\r\n" + + "}\r\n" + + "function test16()\r\n" + + "{\r\n" + + "var _loc1_ = random(100);\r\n" + + "switch(_loc1_)\r\n" + + "{\r\n" + + "case 1:\r\n" + + "case 2:\r\n" + + "case 3:\r\n" + + "trace(\"place3\");\r\n" + + "}\r\n" + + "trace(\"after switch\");\r\n" + + "}\r\n" + + "function test17()\r\n" + + "{\r\n" + + "var _loc1_ = random(100);\r\n" + + "switch(_loc1_)\r\n" + + "{\r\n" + + "case 1:\r\n" + + "trace(\"place1\");\r\n" + + "break;\r\n" + + "case 2:\r\n" + + "trace(\"place2\");\r\n" + + "}\r\n" + + "trace(\"after switch\");\r\n" + + "}\r\n" + + "function test18()\r\n" + + "{\r\n" + + "var _loc1_ = random(100);\r\n" + + "switch(_loc1_)\r\n" + + "{\r\n" + + "case 1:\r\n" + + "trace(\"place1\");\r\n" + + "case 2:\r\n" + + "trace(\"place2\");\r\n" + + "}\r\n" + + "trace(\"after switch\");\r\n" + + "}\r\n" + + "function test19()\r\n" + + "{\r\n" + + "var _loc1_ = random(100);\r\n" + + "switch(_loc1_)\r\n" + + "{\r\n" + + "case 1:\r\n" + + "case 2:\r\n" + + "trace(\"place2\");\r\n" + + "}\r\n" + + "trace(\"after switch\");\r\n" + + "}\r\n" + + "function test20()\r\n" + + "{\r\n" + + "var _loc1_ = random(100);\r\n" + + "switch(_loc1_)\r\n" + + "{\r\n" + + "case 1:\r\n" + + "trace(\"place1\");\r\n" + + "break;\r\n" + + "case 2:\r\n" + + "trace(\"place2\");\r\n" + + "case 3:\r\n" + + "trace(\"place3\");\r\n" + + "}\r\n" + + "trace(\"after switch\");\r\n" + + "}\r\n" + + "function test21()\r\n" + + "{\r\n" + + "var _loc1_ = random(100);\r\n" + + "switch(_loc1_)\r\n" + + "{\r\n" + + "case 1:\r\n" + + "trace(\"place1\");\r\n" + + "case 2:\r\n" + + "trace(\"place2\");\r\n" + + "break;\r\n" + + "case 3:\r\n" + + "trace(\"place3\");\r\n" + + "}\r\n" + + "trace(\"after switch\");\r\n" + + "}\r\n" + + "function test22()\r\n" + + "{\r\n" + + "var _loc1_ = random(100);\r\n" + + "switch(_loc1_)\r\n" + + "{\r\n" + + "case 1:\r\n" + + "trace(\"place1\");\r\n" + + "case 2:\r\n" + + "trace(\"place2\");\r\n" + + "break;\r\n" + + "case 3:\r\n" + + "trace(\"place3\");\r\n" + + "}\r\n" + + "trace(\"after switch\");\r\n" + + "}\r\n" + + "function test23()\r\n" + + "{\r\n" + + "var _loc1_ = random(100);\r\n" + + "switch(_loc1_)\r\n" + + "{\r\n" + + "case 1:\r\n" + + "trace(\"place1\");\r\n" + + "break;\r\n" + + "case 2:\r\n" + + "trace(\"place2\");\r\n" + + "break;\r\n" + + "default:\r\n" + + "trace(\"place3\");\r\n" + + "}\r\n" + + "trace(\"after switch\");\r\n" + + "}\r\n" + + "function test24()\r\n" + + "{\r\n" + + "var _loc1_ = random(100);\r\n" + + "switch(_loc1_)\r\n" + + "{\r\n" + + "case 1:\r\n" + + "case 2:\r\n" + + "trace(\"place2\");\r\n" + + "}\r\n" + + "trace(\"place3\");\r\n" + + "trace(\"after switch\");\r\n" + + "}\r\n" + + "function test25()\r\n" + + "{\r\n" + + "var _loc1_ = random(100);\r\n" + + "switch(_loc1_)\r\n" + + "{\r\n" + + "case 1:\r\n" + + "trace(\"place1\");\r\n" + + "case 2:\r\n" + + "case 3:\r\n" + + "trace(\"place3\");\r\n" + + "}\r\n" + + "trace(\"after switch\");\r\n" + + "}\r\n" + + "function test26()\r\n" + + "{\r\n" + + "var _loc1_ = random(100);\r\n" + + "switch(_loc1_)\r\n" + + "{\r\n" + + "case 1:\r\n" + + "case 2:\r\n" + + "trace(\"place2\");\r\n" + + "case 3:\r\n" + + "trace(\"place3\");\r\n" + + "}\r\n" + + "trace(\"after switch\");\r\n" + + "}\r\n" + + "function test27()\r\n" + + "{\r\n" + + "var _loc1_ = random(100);\r\n" + + "switch(_loc1_)\r\n" + + "{\r\n" + + "case 1:\r\n" + + "trace(\"place1\");\r\n" + + "break;\r\n" + + "case 2:\r\n" + + "trace(\"place2\");\r\n" + + "break;\r\n" + + "case 3:\r\n" + + "trace(\"place3\");\r\n" + + "}\r\n" + + "trace(\"after switch\");\r\n" + + "}\r\n" + + "function test28()\r\n" + + "{\r\n" + + "var _loc1_ = random(100);\r\n" + + "switch(_loc1_)\r\n" + + "{\r\n" + + "case 1:\r\n" + + "trace(\"place1\");\r\n" + + "break;\r\n" + + "case 2:\r\n" + + "default:\r\n" + + "trace(\"place3\");\r\n" + + "}\r\n" + + "trace(\"after switch\");\r\n" + + "}\r\n" + + "function test29()\r\n" + + "{\r\n" + + "var _loc1_ = random(100);\r\n" + + "switch(_loc1_)\r\n" + + "{\r\n" + + "case 1:\r\n" + + "case 2:\r\n" + + "trace(\"place2\");\r\n" + + "break;\r\n" + + "default:\r\n" + + "trace(\"place3\");\r\n" + + "}\r\n" + + "trace(\"after switch\");\r\n" + + "}\r\n" + + "function test30()\r\n" + + "{\r\n" + + "var _loc1_ = random(100);\r\n" + + "switch(_loc1_)\r\n" + + "{\r\n" + + "case 1:\r\n" + + "trace(\"place1\");\r\n" + + "break;\r\n" + + "case 2:\r\n" + + "case 3:\r\n" + + "trace(\"place3\");\r\n" + + "}\r\n" + + "trace(\"after switch\");\r\n" + + "}\r\n" + + "function test31()\r\n" + + "{\r\n" + + "var _loc1_ = random(100);\r\n" + + "switch(_loc1_)\r\n" + + "{\r\n" + + "case 1:\r\n" + + "case 2:\r\n" + + "trace(\"place2\");\r\n" + + "break;\r\n" + + "case 3:\r\n" + + "trace(\"place3\");\r\n" + + "}\r\n" + + "trace(\"after switch\");\r\n" + + "}\r\n" + + "function test32()\r\n" + + "{\r\n" + + "var _loc1_ = random(100);\r\n" + + "switch(_loc1_)\r\n" + + "{\r\n" + + "case 1:\r\n" + + "case 2:\r\n" + + "}\r\n" + + "trace(\"place3\");\r\n" + + "trace(\"after switch\");\r\n" + + "}\r\n" + + "function test33()\r\n" + + "{\r\n" + + "var _loc1_ = random(100);\r\n" + + "switch(_loc1_)\r\n" + + "{\r\n" + + "default:\r\n" + + "trace(\"place1\");\r\n" + + "case 1:\r\n" + + "trace(\"place2\");\r\n" + + "break;\r\n" + + "case 2:\r\n" + + "}\r\n" + + "trace(\"place3\");\r\n" + + "trace(\"after switch\");\r\n" + + "}\r\n" + + "function test34()\r\n" + + "{\r\n" + + "var _loc1_ = random(100);\r\n" + + "switch(_loc1_)\r\n" + + "{\r\n" + + "case 1:\r\n" + + "trace(\"place1\");\r\n" + + "case 2:\r\n" + + "trace(\"place2\");\r\n" + + "case 3:\r\n" + + "trace(\"place3\");\r\n" + + "}\r\n" + + "trace(\"after switch\");\r\n" + + "}\r\n" + + "function test35()\r\n" + + "{\r\n" + + "var _loc1_ = random(100);\r\n" + + "switch(_loc1_)\r\n" + + "{\r\n" + + "case 1:\r\n" + + "trace(\"place2\");\r\n" + + "case 2:\r\n" + + "trace(\"place3\");\r\n" + + "break;\r\n" + + "default:\r\n" + + "trace(\"place1\");\r\n" + + "}\r\n" + + "trace(\"after switch\");\r\n" + + "}\r\n" + + "function test36()\r\n" + + "{\r\n" + + "var _loc1_ = random(100);\r\n" + + "switch(_loc1_)\r\n" + + "{\r\n" + + "default:\r\n" + + "trace(\"place1\");\r\n" + + "case 1:\r\n" + + "trace(\"place2\");\r\n" + + "break;\r\n" + + "case 2:\r\n" + + "trace(\"place3\");\r\n" + + "}\r\n" + + "trace(\"after switch\");\r\n" + + "}\r\n" + + "function test37()\r\n" + + "{\r\n" + + "var _loc1_ = random(100);\r\n" + + "switch(_loc1_)\r\n" + + "{\r\n" + + "case 1:\r\n" + + "trace(\"place1\");\r\n" + + "break;\r\n" + + "case 2:\r\n" + + "trace(\"place2\");\r\n" + + "case 3:\r\n" + + "trace(\"place3\");\r\n" + + "}\r\n" + + "trace(\"after switch\");\r\n" + + "}\r\n" + + "function test38()\r\n" + + "{\r\n" + + "var _loc1_ = random(100);\r\n" + + "switch(_loc1_)\r\n" + + "{\r\n" + + "default:\r\n" + + "trace(\"place1\");\r\n" + + "break;\r\n" + + "case 1:\r\n" + + "case 2:\r\n" + + "}\r\n" + + "trace(\"place3\");\r\n" + + "trace(\"after switch\");\r\n" + + "}\r\n" + + "function test39()\r\n" + + "{\r\n" + + "var _loc1_ = random(100);\r\n" + + "switch(_loc1_)\r\n" + + "{\r\n" + + "case 1:\r\n" + + "trace(\"place1\");\r\n" + + "case 2:\r\n" + + "trace(\"place2\");\r\n" + + "break;\r\n" + + "case 3:\r\n" + + "trace(\"place3\");\r\n" + + "}\r\n" + + "trace(\"after switch\");\r\n" + + "}\r\n" + + "function test40()\r\n" + + "{\r\n" + + "var _loc1_ = random(100);\r\n" + + "switch(_loc1_)\r\n" + + "{\r\n" + + "case 1:\r\n" + + "trace(\"place1\");\r\n" + + "break;\r\n" + + "case 2:\r\n" + + "trace(\"place2\");\r\n" + + "break;\r\n" + + "case 3:\r\n" + + "trace(\"place3\");\r\n" + + "}\r\n" + + "trace(\"after switch\");\r\n" + + "}\r\n" + + "function test41()\r\n" + + "{\r\n" + + "var _loc1_ = random(100);\r\n" + + "switch(_loc1_)\r\n" + + "{\r\n" + + "case 1:\r\n" + + "trace(\"place1\");\r\n" + + "case 2:\r\n" + + "case 3:\r\n" + + "trace(\"place3\");\r\n" + + "}\r\n" + + "trace(\"after switch\");\r\n" + + "}\r\n" + + "function test42()\r\n" + + "{\r\n" + + "var _loc1_ = random(100);\r\n" + + "switch(_loc1_)\r\n" + + "{\r\n" + + "case 1:\r\n" + + "case 2:\r\n" + + "trace(\"place2\");\r\n" + + "case 3:\r\n" + + "trace(\"place3\");\r\n" + + "}\r\n" + + "trace(\"after switch\");\r\n" + + "}\r\n" + + "function test43()\r\n" + + "{\r\n" + + "var _loc1_ = random(100);\r\n" + + "switch(_loc1_)\r\n" + + "{\r\n" + + "case 1:\r\n" + + "trace(\"place1\");\r\n" + + "break;\r\n" + + "case 2:\r\n" + + "case 3:\r\n" + + "trace(\"place3\");\r\n" + + "}\r\n" + + "trace(\"after switch\");\r\n" + + "}\r\n" + + "function test44()\r\n" + + "{\r\n" + + "var _loc1_ = random(100);\r\n" + + "switch(_loc1_)\r\n" + + "{\r\n" + + "case 1:\r\n" + + "case 2:\r\n" + + "trace(\"place2\");\r\n" + + "break;\r\n" + + "case 3:\r\n" + + "trace(\"place3\");\r\n" + + "}\r\n" + + "trace(\"after switch\");\r\n" + + "}\r\n" + + "function test45()\r\n" + + "{\r\n" + + "var _loc1_ = random(100);\r\n" + + "switch(_loc1_)\r\n" + + "{\r\n" + + "case 1:\r\n" + + "case 2:\r\n" + + "case 3:\r\n" + + "trace(\"place3\");\r\n" + + "}\r\n" + + "trace(\"after switch\");\r\n" + + "}\r\n" + + "function test46()\r\n" + + "{\r\n" + + "var _loc1_ = random(100);\r\n" + + "switch(_loc1_)\r\n" + + "{\r\n" + + "case 1:\r\n" + + "trace(\"place1\");\r\n" + + "default:\r\n" + + "trace(\"place2\");\r\n" + + "break;\r\n" + + "case 2:\r\n" + + "}\r\n" + + "trace(\"place3\");\r\n" + + "trace(\"after switch\");\r\n" + + "}\r\n" + + "function test47()\r\n" + + "{\r\n" + + "var _loc1_ = random(100);\r\n" + + "switch(_loc1_)\r\n" + + "{\r\n" + + "case 1:\r\n" + + "trace(\"place1\");\r\n" + + "case 2:\r\n" + + "trace(\"place2\");\r\n" + + "case 3:\r\n" + + "trace(\"place3\");\r\n" + + "}\r\n" + + "trace(\"after switch\");\r\n" + + "}\r\n" + + "function test48()\r\n" + + "{\r\n" + + "var _loc1_ = random(100);\r\n" + + "switch(_loc1_)\r\n" + + "{\r\n" + + "case 1:\r\n" + + "trace(\"place1\");\r\n" + + "break;\r\n" + + "default:\r\n" + + "trace(\"place2\");\r\n" + + "case 2:\r\n" + + "trace(\"place3\");\r\n" + + "}\r\n" + + "trace(\"after switch\");\r\n" + + "}\r\n" + + "function test49()\r\n" + + "{\r\n" + + "var _loc1_ = random(100);\r\n" + + "switch(_loc1_)\r\n" + + "{\r\n" + + "case 1:\r\n" + + "trace(\"place1\");\r\n" + + "default:\r\n" + + "trace(\"place2\");\r\n" + + "break;\r\n" + + "case 2:\r\n" + + "trace(\"place3\");\r\n" + + "}\r\n" + + "trace(\"after switch\");\r\n" + + "}\r\n" + + "function test50()\r\n" + + "{\r\n" + + "var _loc1_ = random(100);\r\n" + + "switch(_loc1_)\r\n" + + "{\r\n" + + "case 1:\r\n" + + "trace(\"place1\");\r\n" + + "break;\r\n" + + "case 2:\r\n" + + "trace(\"place2\");\r\n" + + "case 3:\r\n" + + "trace(\"place3\");\r\n" + + "}\r\n" + + "trace(\"after switch\");\r\n" + + "}\r\n" + + "function test51()\r\n" + + "{\r\n" + + "var _loc1_ = random(100);\r\n" + + "switch(_loc1_)\r\n" + + "{\r\n" + + "case 1:\r\n" + + "default:\r\n" + + "trace(\"place2\");\r\n" + + "break;\r\n" + + "case 2:\r\n" + + "}\r\n" + + "trace(\"place3\");\r\n" + + "trace(\"after switch\");\r\n" + + "}\r\n" + + "function test52()\r\n" + + "{\r\n" + + "var _loc1_ = random(100);\r\n" + + "switch(_loc1_)\r\n" + + "{\r\n" + + "case 1:\r\n" + + "trace(\"place1\");\r\n" + + "case 2:\r\n" + + "trace(\"place2\");\r\n" + + "break;\r\n" + + "case 3:\r\n" + + "trace(\"place3\");\r\n" + + "}\r\n" + + "trace(\"after switch\");\r\n" + + "}\r\n" + + "function test53()\r\n" + + "{\r\n" + + "var _loc1_ = random(100);\r\n" + + "switch(_loc1_)\r\n" + + "{\r\n" + + "case 1:\r\n" + + "trace(\"place1\");\r\n" + + "case 2:\r\n" + + "case 3:\r\n" + + "trace(\"place3\");\r\n" + + "}\r\n" + + "trace(\"after switch\");\r\n" + + "}\r\n" + + "function test54()\r\n" + + "{\r\n" + + "var _loc1_ = random(100);\r\n" + + "switch(_loc1_)\r\n" + + "{\r\n" + + "case 1:\r\n" + + "case 2:\r\n" + + "trace(\"place3\");\r\n" + + "break;\r\n" + + "default:\r\n" + + "trace(\"place1\");\r\n" + + "}\r\n" + + "trace(\"after switch\");\r\n" + + "}\r\n" + + "function test55()\r\n" + + "{\r\n" + + "var _loc1_ = random(100);\r\n" + + "switch(_loc1_)\r\n" + + "{\r\n" + + "case 1:\r\n" + + "case 2:\r\n" + + "trace(\"place2\");\r\n" + + "case 3:\r\n" + + "trace(\"place3\");\r\n" + + "}\r\n" + + "trace(\"after switch\");\r\n" + + "}\r\n" + + "function test56()\r\n" + + "{\r\n" + + "var _loc1_ = random(100);\r\n" + + "switch(_loc1_)\r\n" + + "{\r\n" + + "case 1:\r\n" + + "trace(\"place2\");\r\n" + + "break;\r\n" + + "case 2:\r\n" + + "trace(\"place3\");\r\n" + + "break;\r\n" + + "default:\r\n" + + "trace(\"place1\");\r\n" + + "}\r\n" + + "trace(\"after switch\");\r\n" + + "}\r\n" + + "function test57()\r\n" + + "{\r\n" + + "var _loc1_ = random(100);\r\n" + + "switch(_loc1_)\r\n" + + "{\r\n" + + "case 1:\r\n" + + "trace(\"place1\");\r\n" + + "break;\r\n" + + "case 2:\r\n" + + "trace(\"place2\");\r\n" + + "break;\r\n" + + "case 3:\r\n" + + "trace(\"place3\");\r\n" + + "}\r\n" + + "trace(\"after switch\");\r\n" + + "}\r\n" + + "function test58()\r\n" + + "{\r\n" + + "var _loc1_ = random(100);\r\n" + + "switch(_loc1_)\r\n" + + "{\r\n" + + "case 1:\r\n" + + "trace(\"place1\");\r\n" + + "break;\r\n" + + "case 2:\r\n" + + "case 3:\r\n" + + "trace(\"place3\");\r\n" + + "}\r\n" + + "trace(\"after switch\");\r\n" + + "}\r\n" + + "function test59()\r\n" + + "{\r\n" + + "var _loc1_ = random(100);\r\n" + + "switch(_loc1_)\r\n" + + "{\r\n" + + "case 1:\r\n" + + "case 2:\r\n" + + "trace(\"place2\");\r\n" + + "break;\r\n" + + "case 3:\r\n" + + "trace(\"place3\");\r\n" + + "}\r\n" + + "trace(\"after switch\");\r\n" + + "}\r\n" + + "function test60()\r\n" + + "{\r\n" + + "var _loc1_ = random(100);\r\n" + + "switch(_loc1_)\r\n" + + "{\r\n" + + "case 1:\r\n" + + "case 2:\r\n" + + "case 3:\r\n" + + "trace(\"place3\");\r\n" + + "}\r\n" + + "trace(\"after switch\");\r\n" + + "}\r\n" + + "trace(\"switchVariantsTest\");\r\n" + ); + } } diff --git a/libsrc/ffdec_lib/testdata/as2/as2.fla b/libsrc/ffdec_lib/testdata/as2/as2.fla index 623e55c81..cad3e071e 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 3c6b3afbb..c9832c61c 100644 Binary files a/libsrc/ffdec_lib/testdata/as2/as2.swf and b/libsrc/ffdec_lib/testdata/as2/as2.swf differ