From 175ccd07e008d6e00e5db2ff9c5e1f1a5e14f7ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=F8=EDk?= Date: Sat, 6 Apr 2013 20:24:46 +0200 Subject: [PATCH] while true fix --- .../jpexs/decompiler/flash/graph/Graph.java | 20 +++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/trunk/src/com/jpexs/decompiler/flash/graph/Graph.java b/trunk/src/com/jpexs/decompiler/flash/graph/Graph.java index 22bbaf0f0..682420739 100644 --- a/trunk/src/com/jpexs/decompiler/flash/graph/Graph.java +++ b/trunk/src/com/jpexs/decompiler/flash/graph/Graph.java @@ -917,7 +917,7 @@ public class Graph { } } - if (loop && (part.nextParts.size() > 1) && (!doWhile)) { + if ((!whileTrue) && loop && (part.nextParts.size() > 1) && (!doWhile)) { currentLoop.loopBreak = part.nextParts.get(reversed ? 0 : 1); } @@ -992,7 +992,12 @@ public class Graph { if (debugMode) { System.err.println("ONFALSE: (inside " + part + ")"); } - onFalse = (((next == part.nextParts.get(0)) || (part.nextParts.get(0).path.equals(part.path) || part.nextParts.get(0).path.length() < part.path.length())) ? new ArrayList() : printGraph(prepareBranchLocalData(localData), falseStack, allParts, part, part.nextParts.get(0), next == null ? stopPart : next, loops, forFinalCommands)); + if((next == part.nextParts.get(0)) || (part.nextParts.get(0).path.equals(part.path) || part.nextParts.get(0).path.length() < part.path.length())) + { + onFalse=new ArrayList(); + }else{ + onFalse = (printGraph(prepareBranchLocalData(localData), falseStack, allParts, part, part.nextParts.get(0), next == null ? stopPart : next, loops, forFinalCommands)); + } if (debugMode) { System.err.println("/ONFALSE (inside " + part + ")"); } @@ -1004,7 +1009,15 @@ public class Graph { if (whileTrue) { retw = new ArrayList(); retw.add(new IfItem(null, expr, onTrue, onFalse)); + + List body = new ArrayList(); + if(next!=null){ + body=printGraph(prepareBranchLocalData(localData), stack, allParts, part,next, stopPart, loops, forFinalCommands); + } + retw.addAll(body); + retx.add(new WhileItem(null, whileTrueLoop, new TrueItem(null), retw)); + next = null; } else { retx.add(new IfItem(null, expr, onTrue, onFalse)); } @@ -1043,6 +1056,9 @@ public class Graph { if (doWhile) { loopBodyStart = next; } + if(whileTrue){ + loopBodyStart = part; + } } if (loop) { // && (!doWhile)) { List loopBody = new ArrayList();