mirror of
https://git.huckle.dev/Huckles-Minecraft-Archive/jpexs-decompiler.git
synced 2026-06-02 11:54:36 +00:00
Fix TestIncDec5
This commit is contained in:
@@ -967,9 +967,9 @@ public abstract class InstructionDefinition implements Serializable {
|
||||
}
|
||||
stack.moveToStack(output);
|
||||
if (isIncrement) {
|
||||
stack.addToOutput(new PreIncrementAVM2Item(setLocalValue.value.value.getSrc(), setLocalValue.value.value.lineStartItem, getProp));
|
||||
stack.addToOutput(new PreIncrementAVM2Item(setLocalValue.value.getSrc(), setLocalValue.value.lineStartItem, getProp));
|
||||
} else {
|
||||
stack.addToOutput(new PreDecrementAVM2Item(setLocalValue.value.value.getSrc(), setLocalValue.value.value.lineStartItem, getProp));
|
||||
stack.addToOutput(new PreDecrementAVM2Item(setLocalValue.value.getSrc(), setLocalValue.value.lineStartItem, getProp));
|
||||
}
|
||||
return;
|
||||
} while(false);
|
||||
@@ -1077,14 +1077,185 @@ public abstract class InstructionDefinition implements Serializable {
|
||||
}
|
||||
stack.moveToStack(output);
|
||||
if (isIncrement) {
|
||||
stack.push(new PostIncrementAVM2Item(setLocalValue.value.value.getSrc(), setLocalValue.value.value.lineStartItem, getProp));
|
||||
stack.push(new PostIncrementAVM2Item(setLocalValue.value.getSrc(), setLocalValue.value.lineStartItem, getProp));
|
||||
} else {
|
||||
stack.push(new PostDecrementAVM2Item(setLocalValue.value.value.getSrc(), setLocalValue.value.value.lineStartItem, getProp));
|
||||
stack.push(new PostDecrementAVM2Item(setLocalValue.value.getSrc(), setLocalValue.value.lineStartItem, getProp));
|
||||
}
|
||||
return;
|
||||
} while(false);
|
||||
}
|
||||
|
||||
//TestIncDec5 with result
|
||||
expectedClasses = new Class[]{
|
||||
//PushItem.class,
|
||||
SetTemporaryItem.class,
|
||||
SetLocalAVM2Item.class,
|
||||
SetTemporaryItem.class,
|
||||
PushItem.class,
|
||||
SetLocalAVM2Item.class
|
||||
};
|
||||
|
||||
/*
|
||||
//var _temp_3:* = §§findproperty(trace);
|
||||
var _temp_1:* = a;
|
||||
var _loc2_:* = _temp_1;
|
||||
var _temp_2:* = _temp_1.attrib + 1;
|
||||
var _loc3_:* = _temp_2;
|
||||
_loc2_.attrib = _loc3_;
|
||||
trace(_temp_2);
|
||||
*/
|
||||
|
||||
if (output.size() >= expectedClasses.length) {
|
||||
|
||||
loopout: do {
|
||||
for (int i = 0; i < expectedClasses.length; i++) {
|
||||
if (!expectedClasses[expectedClasses.length - 1 - i].isAssignableFrom(output.get(output.size() - 1 - i).getClass())) {
|
||||
break loopout;
|
||||
}
|
||||
}
|
||||
|
||||
SetLocalAVM2Item setLocalValue = (SetLocalAVM2Item) output.get(output.size() - 1);
|
||||
PushItem pushValue = (PushItem) output.get(output.size() - 2);
|
||||
SetTemporaryItem setTempValue = (SetTemporaryItem) output.get(output.size() - 3);
|
||||
SetLocalAVM2Item setLocalObj = (SetLocalAVM2Item) output.get(output.size() - 4);
|
||||
SetTemporaryItem setTempObj = (SetTemporaryItem) output.get(output.size() - 5);
|
||||
|
||||
|
||||
if (setLocalValue.regIndex != valueLocalReg.regIndex) {
|
||||
break;
|
||||
}
|
||||
if (!(setLocalValue.value instanceof DuplicateItem)) {
|
||||
break;
|
||||
}
|
||||
if (!(setLocalValue.value.value instanceof IncrementAVM2Item
|
||||
|| setLocalValue.value.value instanceof DecrementAVM2Item)) {
|
||||
break;
|
||||
}
|
||||
if (!(setLocalValue.value.value.value instanceof GetPropertyAVM2Item)) {
|
||||
break;
|
||||
}
|
||||
boolean isIncrement = setLocalValue.value.value instanceof IncrementAVM2Item;
|
||||
|
||||
GetPropertyAVM2Item getProp = (GetPropertyAVM2Item) setLocalValue.value.value.value;
|
||||
if (!(getProp.object instanceof TemporaryItem)) {
|
||||
break;
|
||||
}
|
||||
if (!(getProp.propertyName instanceof FullMultinameAVM2Item)) {
|
||||
break;
|
||||
}
|
||||
FullMultinameAVM2Item fm = (FullMultinameAVM2Item) getProp.propertyName;
|
||||
if (!fm.compareSame(multiname)) {
|
||||
break;
|
||||
}
|
||||
|
||||
TemporaryItem tempObj = (TemporaryItem) getProp.object;
|
||||
if (tempObj.tempIndex != setTempObj.tempIndex) {
|
||||
break;
|
||||
}
|
||||
|
||||
DuplicateItem dupValue = (DuplicateItem) setLocalValue.value;
|
||||
if (dupValue.tempIndex != setTempValue.tempIndex) {
|
||||
break;
|
||||
}
|
||||
|
||||
if (!(pushValue.value instanceof DuplicateSourceItem)) {
|
||||
break;
|
||||
}
|
||||
DuplicateSourceItem dupSourceValue = (DuplicateSourceItem) pushValue.value;
|
||||
if (dupSourceValue.tempIndex != dupValue.tempIndex) {
|
||||
break;
|
||||
}
|
||||
if (setLocalObj.regIndex != objLocalReg.regIndex) {
|
||||
break;
|
||||
}
|
||||
|
||||
getProp.object = setTempObj.value;
|
||||
for (int i = 0; i < expectedClasses.length; i++) {
|
||||
output.remove(output.size() - 1);
|
||||
}
|
||||
stack.moveToStack(output);
|
||||
if (isIncrement) {
|
||||
stack.push(new PreIncrementAVM2Item(setLocalValue.value.value.getSrc(), setLocalValue.value.value.lineStartItem, getProp));
|
||||
} else {
|
||||
stack.push(new PreDecrementAVM2Item(setLocalValue.value.value.getSrc(), setLocalValue.value.value.lineStartItem, getProp));
|
||||
}
|
||||
return;
|
||||
} while(false);
|
||||
}
|
||||
|
||||
//TestIncDec5 no result
|
||||
expectedClasses = new Class[]{
|
||||
SetTemporaryItem.class,
|
||||
SetLocalAVM2Item.class,
|
||||
SetLocalAVM2Item.class
|
||||
};
|
||||
|
||||
/*
|
||||
var _temp_5:* = a;
|
||||
var _loc2_:* = _temp_5;
|
||||
var _loc3_:* = _temp_5.attrib + 1;
|
||||
_loc2_.attrib = _loc3_;
|
||||
*/
|
||||
|
||||
if (output.size() >= expectedClasses.length) {
|
||||
|
||||
loopout: do {
|
||||
for (int i = 0; i < expectedClasses.length; i++) {
|
||||
if (!expectedClasses[expectedClasses.length - 1 - i].isAssignableFrom(output.get(output.size() - 1 - i).getClass())) {
|
||||
break loopout;
|
||||
}
|
||||
}
|
||||
|
||||
SetLocalAVM2Item setLocalValue = (SetLocalAVM2Item) output.get(output.size() - 1);
|
||||
SetLocalAVM2Item setLocalObj = (SetLocalAVM2Item) output.get(output.size() - 2);
|
||||
SetTemporaryItem setTempObj = (SetTemporaryItem) output.get(output.size() - 3);
|
||||
|
||||
|
||||
if (setLocalValue.regIndex != valueLocalReg.regIndex) {
|
||||
break;
|
||||
}
|
||||
if (setLocalObj.regIndex != objLocalReg.regIndex) {
|
||||
break;
|
||||
}
|
||||
if (!(setLocalValue.value instanceof IncrementAVM2Item
|
||||
|| setLocalValue.value instanceof DecrementAVM2Item)) {
|
||||
break;
|
||||
}
|
||||
if (!(setLocalValue.value.value instanceof GetPropertyAVM2Item)) {
|
||||
break;
|
||||
}
|
||||
boolean isIncrement = setLocalValue.value instanceof IncrementAVM2Item;
|
||||
|
||||
GetPropertyAVM2Item getProp = (GetPropertyAVM2Item) setLocalValue.value.value;
|
||||
if (!(getProp.object instanceof TemporaryItem)) {
|
||||
break;
|
||||
}
|
||||
if (!(getProp.propertyName instanceof FullMultinameAVM2Item)) {
|
||||
break;
|
||||
}
|
||||
FullMultinameAVM2Item fm = (FullMultinameAVM2Item) getProp.propertyName;
|
||||
if (!fm.compareSame(multiname)) {
|
||||
break;
|
||||
}
|
||||
TemporaryItem tempObj = (TemporaryItem) getProp.object;
|
||||
if (tempObj.tempIndex != setTempObj.tempIndex) {
|
||||
break;
|
||||
}
|
||||
|
||||
getProp.object = setTempObj.value;
|
||||
for (int i = 0; i < expectedClasses.length; i++) {
|
||||
output.remove(output.size() - 1);
|
||||
}
|
||||
stack.moveToStack(output);
|
||||
if (isIncrement) {
|
||||
stack.addToOutput(new PreIncrementAVM2Item(setLocalValue.value.getSrc(), setLocalValue.value.lineStartItem, getProp));
|
||||
} else {
|
||||
stack.addToOutput(new PreDecrementAVM2Item(setLocalValue.value.getSrc(), setLocalValue.value.lineStartItem, getProp));
|
||||
}
|
||||
return;
|
||||
} while(false);
|
||||
}
|
||||
|
||||
/*stack.moveToStack(output);
|
||||
if (!stack.isEmpty()) {
|
||||
GraphTargetItem checked = checkIncDec(false, multinameIndex, ins, localData, stack.peek(), valueLocalReg, nameLocalReg, objLocalReg);
|
||||
|
||||
Reference in New Issue
Block a user