AS1/2 switch detection - better handling position of default branch

This commit is contained in:
Jindra Petřík
2018-01-28 12:03:10 +01:00
parent 455d30bb2d
commit d898ec2076
5 changed files with 894 additions and 22 deletions

View File

@@ -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

View File

@@ -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<GraphTargetItem> 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<Integer> valuesMapping = new ArrayList<>();
List<GraphPart> 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) {

View File

@@ -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"
);
}
}

Binary file not shown.

Binary file not shown.