mirror of
https://git.huckle.dev/Huckles-Minecraft-Archive/jpexs-decompiler.git
synced 2026-06-26 01:06:29 +00:00
#1070 Incorrect decompilation of switch statement fixed
This commit is contained in:
@@ -1297,6 +1297,16 @@ public class AVM2Code implements Cloneable {
|
||||
return ret;
|
||||
}
|
||||
|
||||
public AVM2Instruction adr2ins(long address) throws ConvertException {
|
||||
int pos = adr2pos(address, false);
|
||||
if (pos == code.size()) {
|
||||
// end
|
||||
return null;
|
||||
}
|
||||
|
||||
return code.get(pos);
|
||||
}
|
||||
|
||||
public int adr2pos(long address) throws ConvertException {
|
||||
return adr2pos(address, false);
|
||||
}
|
||||
|
||||
@@ -146,7 +146,6 @@ public class AVM2DeobfuscatorRegistersOld extends AVM2DeobfuscatorSimpleOld {
|
||||
|
||||
originalBody.exceptions = body.exceptions;
|
||||
originalBody.setCode(body.getCode());
|
||||
|
||||
}
|
||||
|
||||
private int getFirstRegisterSetter(Reference<AVM2Instruction> assignment, int classIndex, boolean isStatic, int scriptIndex, ABC abc, MethodBody body, Set<Integer> ignoredRegisters, Set<Integer> ignoredGets) throws InterruptedException {
|
||||
|
||||
@@ -383,6 +383,10 @@ public class AVM2Instruction implements Cloneable, GraphSourceItem {
|
||||
return offset + 4 /*getBytesLength()*/ + operands[0];
|
||||
}
|
||||
|
||||
public void setTargetOffset(int offset) {
|
||||
operands[0] = offset;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Integer> getBranches(GraphSource code) {
|
||||
List<Integer> ret = new ArrayList<>();
|
||||
|
||||
@@ -1793,22 +1793,27 @@ public class Graph {
|
||||
hasExpr = true;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
first = true;
|
||||
pos = 0;
|
||||
//This is tied to AS3 switch implementation which has nextparts switched from index 1. TODO: Make more universal
|
||||
GraphPart defaultPart = hasExpr ? part.nextParts.get(1 + defaultBranch) : part.nextParts.get(0);
|
||||
|
||||
for (GraphPart p : part.nextParts) {
|
||||
if (p != defaultPart) {
|
||||
for (int i = 1; i < part.nextParts.size(); i++) {
|
||||
if (hasExpr && i == 1 + defaultBranch) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (part.nextParts.get(i) != defaultPart) {
|
||||
if (caseExpressions.containsKey(pos)) {
|
||||
caseValues.add(caseExpressions.get(pos));
|
||||
} else {
|
||||
caseValues.add(new IntegerValueItem(null, localData.lineStartInstruction, pos));
|
||||
}
|
||||
pos++;
|
||||
}
|
||||
|
||||
pos++;
|
||||
}
|
||||
|
||||
first = true;
|
||||
|
||||
Reference in New Issue
Block a user