AS3: SetLocal..GetLocal fix

This commit is contained in:
Jindra Petk
2013-02-27 22:38:54 +01:00
parent 9539518cb7
commit 53a94317a7
2 changed files with 8 additions and 6 deletions

View File

@@ -945,7 +945,7 @@ public class AVM2Code implements Serializable {
}
boolean isCatched = false;
private boolean isKilled(int regName, int start, int end) {
public boolean isKilled(int regName, int start, int end) {
for (int k = start; k <= end; k++) {
if (code.get(k).definition instanceof KillIns) {
if (code.get(k).operands[0] == regName) {
@@ -1209,10 +1209,12 @@ public class AVM2Code implements Serializable {
continue;
}
}
}*/
if ((ins.definition instanceof SetLocalTypeIns) && (ip + 1 <= end) && (isKilled(((SetLocalTypeIns) ins.definition).getRegisterId(ins), ip, end))) { //set_local_x,get_local_x..kill x
}*/
if((ins.definition instanceof GetLocalTypeIns)&&(!output.isEmpty())&&(output.get(output.size()-1) instanceof SetLocalTreeItem)&&(((SetLocalTreeItem)output.get(output.size()-1)).regIndex==((GetLocalTypeIns)ins.definition).getRegisterId(ins))&&isKilled(((SetLocalTreeItem)output.get(output.size()-1)).regIndex, start, end)){
SetLocalTreeItem slt=(SetLocalTreeItem)output.remove(output.size()-1);
stack.push(slt.getValue());
ip++;
}else if ((ins.definition instanceof SetLocalTypeIns) && (ip + 1 <= end) && (isKilled(((SetLocalTypeIns) ins.definition).getRegisterId(ins), ip, end))) { //set_local_x,get_local_x..kill x
AVM2Instruction insAfter = code.get(ip + 1);
if ((insAfter.definition instanceof GetLocalTypeIns) && (((GetLocalTypeIns) insAfter.definition).getRegisterId(insAfter) == ((SetLocalTypeIns) ins.definition).getRegisterId(ins))) {
GraphTargetItem before = stack.peek();