From 590595cb05f56aac9703f40ed1a22b8fda3db5ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=F8=EDk?= Date: Fri, 18 Jan 2013 20:30:40 +0100 Subject: [PATCH] AS1/2: Switch fix --- trunk/src/com/jpexs/asdec/action/Action.java | 58 ++++++++++---------- 1 file changed, 28 insertions(+), 30 deletions(-) diff --git a/trunk/src/com/jpexs/asdec/action/Action.java b/trunk/src/com/jpexs/asdec/action/Action.java index b244c5816..d11e8655f 100644 --- a/trunk/src/com/jpexs/asdec/action/Action.java +++ b/trunk/src/com/jpexs/asdec/action/Action.java @@ -641,36 +641,34 @@ public class Action { long addr = ip2adr(actions, ip, version); if (unknownJumps.contains(addr)) { unknownJumps.remove(new Long(addr)); - /* boolean switchFound = false; - for (int i = output.size() - 1; i >= 0; i--) { - if (output.get(i) instanceof SwitchTreeItem) { - if (((SwitchTreeItem) output.get(i)).defaultCommands == null) { - List continues = ((SwitchTreeItem) output.get(i)).getContinues(); - boolean breakFound = false; - for (ContinueTreeItem cti : continues) { - if (cti.loopPos == addr) { - cti.isKnown = true; - cti.isBreak = true; - ((SwitchTreeItem) output.get(i)).loopBreak = addr; - breakFound = true; - } - } - if (breakFound) { - switchFound = true; - ((SwitchTreeItem) output.get(i)).defaultCommands = new ArrayList(); - for (int k = i + 1; k < output.size(); k++) { - ((SwitchTreeItem) output.get(i)).defaultCommands.add(output.remove(i + 1)); - } - } - } - break; - } - }*/ - /* if (!switchFound) { - throw new UnknownJumpException(stack, addr, output); - }*/ - - throw new UnknownJumpException(stack, addr, output); + boolean switchFound = false; + for (int i = output.size() - 1; i >= 0; i--) { + if (output.get(i) instanceof SwitchTreeItem) { + if (((SwitchTreeItem) output.get(i)).defaultCommands == null) { + List continues = ((SwitchTreeItem) output.get(i)).getContinues(); + boolean breakFound = false; + for (ContinueTreeItem cti : continues) { + if (cti.loopPos == addr) { + cti.isKnown = true; + cti.isBreak = true; + ((SwitchTreeItem) output.get(i)).loopBreak = addr; + breakFound = true; + } + } + if (breakFound) { + switchFound = true; + ((SwitchTreeItem) output.get(i)).defaultCommands = new ArrayList(); + for (int k = i + 1; k < output.size(); k++) { + ((SwitchTreeItem) output.get(i)).defaultCommands.add(output.remove(i + 1)); + } + } + } + break; + } + } + if (!switchFound) { + throw new UnknownJumpException(stack, addr, output); + } } if (ip > end) { break;