diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/AVM2LocalData.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/AVM2LocalData.java index acf1ace6e..eefda4df0 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/AVM2LocalData.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/AVM2LocalData.java @@ -66,11 +66,13 @@ public class AVM2LocalData extends BaseLocalData { */ public Map finallyJumps = new HashMap<>(); - //public Map ignoredSwitches; //exception index => switchPart public Map ignoredSwitches; - //public List ignoredSwitches2; + public Map switchedRegs = new HashMap<>(); + + //switchedPart -> index of nextpart + public Map defaultWays = new HashMap<>(); public Integer scriptIndex; @@ -123,6 +125,8 @@ public class AVM2LocalData extends BaseLocalData { thisHasDefaultToPrimitive = localData.thisHasDefaultToPrimitive; setLocalPosToGetLocalPos = localData.setLocalPosToGetLocalPos; codeStats = localData.codeStats; + defaultWays = localData.defaultWays; + switchedRegs = localData.switchedRegs; } public AVM2ConstantPool getConstants() { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/graph/AVM2Graph.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/graph/AVM2Graph.java index 99e330526..0defd7ea2 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/graph/AVM2Graph.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/graph/AVM2Graph.java @@ -37,6 +37,8 @@ import com.jpexs.decompiler.flash.abc.avm2.instructions.other.HasNext2Ins; import com.jpexs.decompiler.flash.abc.avm2.instructions.other2.DecLocalPIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.other2.IncLocalPIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.stack.PushByteIns; +import com.jpexs.decompiler.flash.abc.avm2.instructions.types.CoerceAIns; +import com.jpexs.decompiler.flash.abc.avm2.instructions.types.ConvertIIns; import com.jpexs.decompiler.flash.abc.avm2.model.AVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.FilteredCheckAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.FullMultinameAVM2Item; @@ -201,8 +203,8 @@ public class AVM2Graph extends Graph { //probably inlined code in more parts, cannot do :-( } + GraphPart switchPart = null; if (finallyKind == FINALLY_KIND_STACK_BASED) { - /* Search for a lookupswitch which first pops from the stack */ @@ -213,7 +215,6 @@ public class AVM2Graph extends Graph { //int stackAfter = localData.codeStats.instructionStats[finallyPart.start].stackpos; findAllPops(localData, stackAfter, finallyPart, foundIps, foundParts, new HashSet<>()); int switchIp = -1; - GraphPart switchPart = null; for (int i = 0; i < foundIps.size(); i++) { int ip = foundIps.get(i); if (avm2code.code.get(ip).definition instanceof LookupSwitchIns) { @@ -221,37 +222,78 @@ public class AVM2Graph extends Graph { switchPart = foundParts.get(i); } } - if (switchIp > -1 && switchPart != null) { - for (GraphPart r : finallyPart.refs) { - for (int ip = r.end; ip >= r.start; ip--) { - AVM2Instruction ins = avm2code.code.get(ip); - if (ins.definition instanceof JumpIns) { - continue; - } else if (ins.definition instanceof PushByteIns) { - int val = ins.operands[0]; - if (val < 0 || val > switchPart.nextParts.size() - 2) { - localData.finallyJumps.put(r, switchPart.nextParts.get(0)); //default branch - } else { - localData.finallyJumps.put(r, switchPart.nextParts.get(1 + val)); + } else if (finallyKind == FINALLY_KIND_REGISTER_BASED) { + switchPart = findLookupSwitchWithGetLocal(switchedReg, finallyPart); + int startIp = code.adr2pos(ex.start); + GraphPart tryPart = null; + for (GraphPart p : allParts) { + if (startIp >= p.start && startIp <= p.end) { + tryPart = p; + break; + } + } + if (tryPart != null) { + List tryPartRefs = new ArrayList<>(tryPart.refs); + for (int i = tryPartRefs.size() - 1; i >= 0; i--) { + if (tryPartRefs.get(i).start < 0) { + tryPartRefs.remove(i); + } + } + if (tryPartRefs.size() == 1) { + GraphPart beforeTryPart = tryPartRefs.get(0); + if (beforeTryPart.getHeight() > 2) { + if (avm2code.code.get(beforeTryPart.end).definition instanceof SetLocalTypeIns) { + int setLocalRegister = ((SetLocalTypeIns) avm2code.code.get(beforeTryPart.end).definition).getRegisterId(avm2code.code.get(beforeTryPart.end)); + if (setLocalRegister == switchedReg) { + if (avm2code.code.get(beforeTryPart.end - 1).definition instanceof PushByteIns) { + if (switchPart != null) { + int defaultWay = avm2code.code.get(beforeTryPart.end - 1).operands[0]; + localData.defaultWays.put(switchPart, defaultWay); + } + } } } } } - - //return in finally block is joined after switch decision - for (GraphPart p : switchPart.nextParts) { - for (GraphPart r : p.refs) { - if (r != switchPart) { - localData.finallyJumps.put(r, p); + } + } + localData.switchedRegs.put(e, switchedReg); + if (switchPart != null) { + for (GraphPart r : finallyPart.refs) { + for (int ip = r.end; ip >= r.start; ip--) { + AVM2Instruction ins = avm2code.code.get(ip); + if (ins.definition instanceof JumpIns) { + continue; + } else if (ins.definition instanceof PushByteIns) { + int val = ins.operands[0]; + if (val < 0 || val > switchPart.nextParts.size() - 2) { + localData.finallyJumps.put(r, switchPart.nextParts.get(0)); //default branch + } else { + localData.finallyJumps.put(r, switchPart.nextParts.get(1 + val)); } + break; + } else if ((ins.definition instanceof SetLocalTypeIns) && (((SetLocalTypeIns) ins.definition).getRegisterId(ins) == switchedReg)) { + //ignore + } else if (ins.definition instanceof CoerceAIns) { + //ignore + } else { + break; } } - - localData.ignoredSwitches.put(e, switchPart); - } else { - //there is probably return in all branches and no other way outside finally } + //return in finally block is joined after switch decision + for (GraphPart p : switchPart.nextParts) { + for (GraphPart r : p.refs) { + if (r != switchPart) { + localData.finallyJumps.put(r, p); + } + } + } + + localData.ignoredSwitches.put(e, switchPart); + } else { + //there is probably return in all branches and no other way outside finally } } } @@ -453,6 +495,36 @@ public class AVM2Graph extends Graph { return result; } + private GraphPart findLookupSwitchWithGetLocal(int registerId, GraphPart part, Set visited) { + if (visited.contains(part)) { + return null; + } + visited.add(part); + if (part.getHeight() >= 3) { + if (avm2code.code.get(part.end).definition instanceof LookupSwitchIns) { + if (avm2code.code.get(part.end - 1).definition instanceof ConvertIIns) { + if (avm2code.code.get(part.end - 2).definition instanceof GetLocalTypeIns) { + int getLocalRegId = ((GetLocalTypeIns) avm2code.code.get(part.end - 2).definition).getRegisterId(avm2code.code.get(part.end - 2)); + if (getLocalRegId == registerId) { + return part; + } + } + } + } + } + for (GraphPart n : part.nextParts) { + GraphPart found = findLookupSwitchWithGetLocal(registerId, n, visited); + if (found != null) { + return found; + } + } + return null; + } + + private GraphPart findLookupSwitchWithGetLocal(int registerId, GraphPart part) { + return findLookupSwitchWithGetLocal(registerId, part, new HashSet<>()); + } + private void findAllPops(AVM2LocalData localData, int stackLevel, GraphPart part, List foundIps, List foundParts, Set visited) { if (visited.contains(part)) { return; @@ -470,7 +542,7 @@ public class AVM2Graph extends Graph { } } - private List checkTry(List output, List foundGotos, Map> partCodes, Map partCodePos, AVM2LocalData localData, GraphPart part, List stopPart, List loops, Set allParts, TranslateStack stack, int staticOperation, String path) throws InterruptedException { + private List checkTry(List currentRet, List output, List foundGotos, Map> partCodes, Map partCodePos, AVM2LocalData localData, GraphPart part, List stopPart, List loops, Set allParts, TranslateStack stack, int staticOperation, String path) throws InterruptedException { if (localData.parsedExceptions == null) { localData.parsedExceptions = new ArrayList<>(); } @@ -508,6 +580,12 @@ public class AVM2Graph extends Graph { } } } + + int switchedReg = -1; + if (finallyIndex != -1) { + switchedReg = localData.switchedRegs.containsKey(finallyIndex) ? localData.switchedRegs.get(finallyIndex) : -1; + } + if (catchedExceptions.size() > 0) { parsedExceptions.addAll(catchedExceptions); if (finallyException != null) { @@ -552,6 +630,12 @@ public class AVM2Graph extends Graph { currentCatchCommands.remove(0); } } + if (!currentCatchCommands.isEmpty() && (currentCatchCommands.get(currentCatchCommands.size() - 1) instanceof SetLocalAVM2Item)) { + SetLocalAVM2Item setLocal = (SetLocalAVM2Item) currentCatchCommands.get(currentCatchCommands.size() - 1); + if (setLocal.regIndex == switchedReg) { + currentCatchCommands.remove(currentCatchCommands.size() - 1); + } + } catchCommands.add(currentCatchCommands); } @@ -599,7 +683,16 @@ public class AVM2Graph extends Graph { } if (switchPart != null) { finallyCommands.addAll(translatePart(localData, switchPart, stack, staticOperation, path)); - afterPart = switchPart.nextParts.get(0); //take the default branch + if (localData.defaultWays.containsKey(switchPart)) { + int defaultWay = localData.defaultWays.get(switchPart); + if (defaultWay < 0 || defaultWay > switchPart.nextParts.size() - 2) { + afterPart = switchPart.nextParts.get(0); + } else { + afterPart = switchPart.nextParts.get(1 + defaultWay); + } + } else { + afterPart = switchPart.nextParts.get(0); //take the default branch. TODO: detect actual value + } } stack.pop(); @@ -615,6 +708,17 @@ public class AVM2Graph extends Graph { if (catchCommands.isEmpty() && finallyCommands.isEmpty() && tryCommands.isEmpty()) { return null; } + + if (switchedReg > -1) { + //There is assignment to switched reg before entering try + if (!currentRet.isEmpty() && (currentRet.get(currentRet.size() - 1) instanceof SetLocalAVM2Item)) { + SetLocalAVM2Item setLocal = (SetLocalAVM2Item) currentRet.get(currentRet.size() - 1); + if (setLocal.regIndex == switchedReg) { + currentRet.remove(currentRet.size() - 1); + } + } + } + List ret = new ArrayList<>(); ret.add(new TryAVM2Item(tryCommands, catchedExceptions, catchCommands, finallyCommands, "TODO")); @@ -627,11 +731,11 @@ public class AVM2Graph extends Graph { } @Override - protected List check(List foundGotos, Map> partCodes, Map partCodePos, GraphSource code, BaseLocalData localData, Set allParts, TranslateStack stack, GraphPart parent, GraphPart part, List stopPart, List loops, List output, Loop currentLoop, int staticOperation, String path) throws InterruptedException { + protected List check(List currentRet, List foundGotos, Map> partCodes, Map partCodePos, GraphSource code, BaseLocalData localData, Set allParts, TranslateStack stack, GraphPart parent, GraphPart part, List stopPart, List loops, List output, Loop currentLoop, int staticOperation, String path) throws InterruptedException { List ret = null; AVM2LocalData aLocalData = (AVM2LocalData) localData; - ret = checkTry(output, foundGotos, partCodes, partCodePos, aLocalData, part, stopPart, loops, allParts, stack, staticOperation, path); + ret = checkTry(currentRet, output, foundGotos, partCodes, partCodePos, aLocalData, part, stopPart, loops, allParts, stack, staticOperation, path); if (ret != null) { return ret; } @@ -751,7 +855,7 @@ public class AVM2Graph extends Graph { } @Override - protected GraphPart checkPart(TranslateStack stack, BaseLocalData localData, GraphPart prev, GraphPart next, Set allParts) { + protected GraphPart checkPartWithOutput(List output, TranslateStack stack, BaseLocalData localData, GraphPart prev, GraphPart part, Set allParts) { AVM2LocalData aLocalData = (AVM2LocalData) localData; if (aLocalData.finallyJumps == null) { aLocalData.finallyJumps = new HashMap<>(); @@ -765,80 +869,52 @@ public class AVM2Graph extends Graph { return null; } if (aLocalData.finallyJumps.containsKey(prev)) { + GraphPart switchPart = null; + int switchedReg = -1; + + for (GraphPart gp : aLocalData.finallyJumps.get(prev).refs) { + if (aLocalData.ignoredSwitches.containsValue(gp)) { + + int finallyIndex = -1; + for (int fi : aLocalData.ignoredSwitches.keySet()) { + if (aLocalData.ignoredSwitches.get(fi) == gp) { + finallyIndex = fi; + break; + } + } + + switchPart = gp; + + switchedReg = aLocalData.switchedRegs.containsKey(finallyIndex) ? aLocalData.switchedRegs.get(finallyIndex) : -1; + + break; + } + } + + if (output != null && switchedReg > -1) { + if (!output.isEmpty()) { + if (output.get(output.size() - 1) instanceof SetLocalAVM2Item) { + SetLocalAVM2Item setLocal = (SetLocalAVM2Item) output.get(output.size() - 1); + if (setLocal.regIndex == switchedReg) { + output.remove(output.size() - 1); + } + } + } + } + if (output != null && switchedReg == -1 && !stack.isEmpty() && (stack.peek() instanceof IntegerValueAVM2Item)) { + stack.pop(); + } else if (output != null && switchedReg == -1 && !output.isEmpty() && (output.get(output.size() - 1) instanceof IntegerValueAVM2Item)) { + output.remove(output.size() - 1); + } return aLocalData.finallyJumps.get(prev); } } + return part; + } - /*Map> finallyJumps = aLocalData.finallyJumps; - if (aLocalData.ignoredSwitches == null) { - aLocalData.ignoredSwitches = new HashMap<>(); - } - Map ignoredSwitches = aLocalData.ignoredSwitches; - GraphPart ret = next; - for (int f : finallyJumps.keySet()) {//int f = 0; f < finallyJumps.size(); f++) { - int swip = ignoredSwitches.get(f); - for (int fip : finallyJumps.get(f)) { - if (next.start == fip) { - if (stack != null && swip != -1) { - AVM2Instruction swIns = avm2code.code.get(swip); - GraphTargetItem t = stack.peek(); - Double dval = t.getResultAsNumber(); - int val = (int) (double) dval; - if (swIns.definition instanceof LookupSwitchIns) { - List branches = swIns.getBranches(code); - int nip = branches.get(0); - if (val >= 0 && val < branches.size() - 1) { - nip = branches.get(1 + val); - } - for (GraphPart p : allParts) { - if (avm2code.getIpThroughJumpAndDebugLine(p.start) == avm2code.getIpThroughJumpAndDebugLine(nip)) { - return p; - } - } - } - } - ret = null; - } - } - } - if (ret != next) { - return ret; - } - - int pos = next.start; - long addr = avm2code.getAddrThroughJumpAndDebugLine(avm2code.pos2adr(pos)); - for (int e = 0; e < body.exceptions.length; e++) { - if (body.exceptions[e].isFinally()) { - if (addr == avm2code.getAddrThroughJumpAndDebugLine(body.exceptions[e].start)) { - if (true) { //afterCatchPos + 1 == code.adr2pos(this.code.fixAddrAfterDebugLine(body.exceptions[e].end))) { - AVM2Instruction jmpIns = avm2code.code.get(avm2code.adr2pos(avm2code.getAddrThroughJumpAndDebugLine(body.exceptions[e].end))); - if (jmpIns.definition instanceof JumpIns) { - int finStart = avm2code.adr2pos(avm2code.getAddrThroughJumpAndDebugLine(body.exceptions[e].end) + jmpIns.getBytesLength() + jmpIns.operands[0]); - if (!finallyJumps.containsKey(e)) { - finallyJumps.put(e, new ArrayList<>()); - } - finallyJumps.get(e).add(finStart); - if (!ignoredSwitches.containsKey(e)) { - ignoredSwitches.put(e, -1); - } - //ignoredSwitches.put(e, -1); - break; - } - } - } - } - } - - if (prev != null) { - for (int swip : ignoredSwitches.values()) { - if (swip > -1) { - if (prev.end == swip) { - return null; - } - } - } - }*/ - return next; + @Override + protected GraphPart checkPart(TranslateStack stack, BaseLocalData localData, GraphPart prev, GraphPart part, Set allParts) { + return checkPartWithOutput(null, stack, localData, prev, part, allParts); } @Override @@ -1045,7 +1121,11 @@ public class AVM2Graph extends Graph { }*/ } + //FIXME: remove this with better alternative private boolean isIntegerOrPopInteger(GraphTargetItem item) { + if (true) { + return false; + } if (item instanceof IntegerValueAVM2Item) { return true; } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/ReturnValueIns.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/ReturnValueIns.java index 9e2785ef0..d55eb9b62 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/ReturnValueIns.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/ReturnValueIns.java @@ -12,7 +12,8 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public - * License along with this library. */ + * License along with this library. + */ package com.jpexs.decompiler.flash.abc.avm2.instructions.other; import com.jpexs.decompiler.flash.abc.ABC; @@ -22,6 +23,7 @@ import com.jpexs.decompiler.flash.abc.avm2.LocalDataArea; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.abc.avm2.instructions.InstructionDefinition; import com.jpexs.decompiler.flash.abc.avm2.model.ReturnValueAVM2Item; +import com.jpexs.decompiler.flash.abc.avm2.model.SetLocalAVM2Item; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.TranslateStack; import java.util.List; @@ -44,7 +46,12 @@ public class ReturnValueIns extends InstructionDefinition { @Override public void translate(AVM2LocalData localData, TranslateStack stack, AVM2Instruction ins, List output, String path) { - output.add(new ReturnValueAVM2Item(ins, localData.lineStartInstruction, stack.pop())); + GraphTargetItem value = stack.pop(); + //some local register left out, probably from try..finally..return + if (value instanceof SetLocalAVM2Item) { + value = value.value; + } + output.add(new ReturnValueAVM2Item(ins, localData.lineStartInstruction, value)); } @Override 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 b75277638..51d09513d 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 @@ -288,7 +288,7 @@ public class ActionGraph extends Graph { } @Override - protected List check(List foundGotos, Map> partCodes, Map partCodePos, GraphSource code, BaseLocalData localData, Set allParts, TranslateStack stack, GraphPart parent, GraphPart part, List stopPart, List loops, List output, Loop currentLoop, int staticOperation, String path) throws InterruptedException { + protected List check(List currentRet, List foundGotos, Map> partCodes, Map partCodePos, GraphSource code, BaseLocalData localData, Set allParts, TranslateStack stack, GraphPart parent, GraphPart part, List stopPart, List loops, List output, Loop currentLoop, int staticOperation, String path) throws InterruptedException { if (!output.isEmpty()) { if (output.get(output.size() - 1) instanceof StoreRegisterActionItem) { StoreRegisterActionItem str = (StoreRegisterActionItem) output.get(output.size() - 1); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/Graph.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/Graph.java index c6871fc45..eac727366 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/Graph.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/Graph.java @@ -1023,10 +1023,14 @@ public class Graph { return false; } - protected List check(List foundGotos, Map> partCodes, Map partCodePos, GraphSource code, BaseLocalData localData, Set allParts, TranslateStack stack, GraphPart parent, GraphPart part, List stopPart, List loops, List output, Loop currentLoop, int staticOperation, String path) throws InterruptedException { + protected List check(List currentRet, List foundGotos, Map> partCodes, Map partCodePos, GraphSource code, BaseLocalData localData, Set allParts, TranslateStack stack, GraphPart parent, GraphPart part, List stopPart, List loops, List output, Loop currentLoop, int staticOperation, String path) throws InterruptedException { return null; } + protected GraphPart checkPartWithOutput(List output, TranslateStack stack, BaseLocalData localData, GraphPart prev, GraphPart part, Set allParts) { + return checkPart(stack, localData, prev, part, allParts); + } + protected GraphPart checkPart(TranslateStack stack, BaseLocalData localData, GraphPart prev, GraphPart part, Set allParts) { return part; } @@ -1453,7 +1457,7 @@ public class Graph { if (part == null) { return ret; } - part = checkPart(stack, localData, parent, part, allParts); + part = checkPartWithOutput(ret, stack, localData, parent, part, allParts); if (part == null) { return ret; } @@ -1610,7 +1614,7 @@ public class Graph { } if (parseNext) { - List retCheck = check(foundGotos, partCodes, partCodePos, code, localData, allParts, stack, parent, part, stopPart, loops, output, currentLoop, staticOperation, path); + List retCheck = check(currentRet, foundGotos, partCodes, partCodePos, code, localData, allParts, stack, parent, part, stopPart, loops, output, currentLoop, staticOperation, path); if (retCheck != null) { if (!retCheck.isEmpty()) { currentRet.addAll(retCheck); @@ -2430,12 +2434,12 @@ public class Graph { if (p instanceof FunctionActionItem) { commands.add(clen, p); } else { - /*if (isExit) { + if (isExit) { //ASC2 leaves some function calls unpopped on stack before returning from a method commands.add(clen, p); - } else {*/ + } else { commands.add(clen, new PushItem(p)); - //} + } } } } diff --git a/libsrc/ffdec_lib/testdata/cross_compile/bin/Main.air.swf b/libsrc/ffdec_lib/testdata/cross_compile/bin/Main.air.swf index 217d90f13..2ada6378d 100644 Binary files a/libsrc/ffdec_lib/testdata/cross_compile/bin/Main.air.swf and b/libsrc/ffdec_lib/testdata/cross_compile/bin/Main.air.swf differ diff --git a/libsrc/ffdec_lib/testdata/cross_compile/bin/Main.flex.swf b/libsrc/ffdec_lib/testdata/cross_compile/bin/Main.flex.swf index a327e86c8..948424409 100644 Binary files a/libsrc/ffdec_lib/testdata/cross_compile/bin/Main.flex.swf and b/libsrc/ffdec_lib/testdata/cross_compile/bin/Main.flex.swf differ diff --git a/libsrc/ffdec_lib/testdata/cross_compile/bin/Main.flex_apache.swf b/libsrc/ffdec_lib/testdata/cross_compile/bin/Main.flex_apache.swf index cb2c2c142..6742e0bc5 100644 Binary files a/libsrc/ffdec_lib/testdata/cross_compile/bin/Main.flex_apache.swf and b/libsrc/ffdec_lib/testdata/cross_compile/bin/Main.flex_apache.swf differ diff --git a/libsrc/ffdec_lib/testdata/cross_compile/bin/Main.swftools.swf b/libsrc/ffdec_lib/testdata/cross_compile/bin/Main.swftools.swf index 7c6ef7ed9..866fe6d15 100644 Binary files a/libsrc/ffdec_lib/testdata/cross_compile/bin/Main.swftools.swf and b/libsrc/ffdec_lib/testdata/cross_compile/bin/Main.swftools.swf differ diff --git a/libsrc/ffdec_lib/testdata/cross_compile/buildlog.air.txt b/libsrc/ffdec_lib/testdata/cross_compile/buildlog.air.txt deleted file mode 100644 index 758330a34..000000000 --- a/libsrc/ffdec_lib/testdata/cross_compile/buildlog.air.txt +++ /dev/null @@ -1,3 +0,0 @@ -Loading configuration: c:\air\frameworks\flex-config.xml - -2753 bytes written to C:\Dropbox\Programovani\JavaSE\FFDec\libsrc\ffdec_lib\testdata\cross_compile\bin\Main.air.swf in 0,459 seconds diff --git a/libsrc/ffdec_lib/testdata/cross_compile/buildlog.flex.txt b/libsrc/ffdec_lib/testdata/cross_compile/buildlog.flex.txt deleted file mode 100644 index f6277bc21..000000000 --- a/libsrc/ffdec_lib/testdata/cross_compile/buildlog.flex.txt +++ /dev/null @@ -1,2 +0,0 @@ -Loading configuration file C:\flex\frameworks\flex-config.xml -C:\Dropbox\Programovani\JavaSE\FFDec\libsrc\ffdec_lib\testdata\asc2\bin\Main.flex.swf (1083 bytes) diff --git a/libsrc/ffdec_lib/testdata/cross_compile/buildlog.flex_apache.txt b/libsrc/ffdec_lib/testdata/cross_compile/buildlog.flex_apache.txt deleted file mode 100644 index 258b0a3de..000000000 --- a/libsrc/ffdec_lib/testdata/cross_compile/buildlog.flex_apache.txt +++ /dev/null @@ -1,2 +0,0 @@ -Loading configuration file C:\flex_apache\frameworks\flex-config.xml -C:\Dropbox\Programovani\JavaSE\FFDec\libsrc\ffdec_lib\testdata\cross_compile\bin\Main.flex_apache.swf (3617 bytes) diff --git a/libsrc/ffdec_lib/testdata/cross_compile/buildlog.swftools.txt b/libsrc/ffdec_lib/testdata/cross_compile/buildlog.swftools.txt deleted file mode 100644 index 18f232b14..000000000 --- a/libsrc/ffdec_lib/testdata/cross_compile/buildlog.swftools.txt +++ /dev/null @@ -1,4 +0,0 @@ -Stack mismatch at pos 61 -Should be: 1:1, is: 0:1 -Stack mismatch at pos 61 -Should be: 1:1, is: 0:1 diff --git a/libsrc/ffdec_lib/testdata/cross_compile/src/tests/TestTryFinallyDirectReturnInFinally.as b/libsrc/ffdec_lib/testdata/cross_compile/src/tests/TestTryFinallyDirectReturnInFinally.as index 815c73f6c..66ff35d2d 100644 --- a/libsrc/ffdec_lib/testdata/cross_compile/src/tests/TestTryFinallyDirectReturnInFinally.as +++ b/libsrc/ffdec_lib/testdata/cross_compile/src/tests/TestTryFinallyDirectReturnInFinally.as @@ -21,7 +21,7 @@ package tests finally { trace("hi "); - if (5 == 4) + if (str == "check") { return str; }