mirror of
https://git.huckle.dev/Huckles-Minecraft-Archive/jpexs-decompiler.git
synced 2026-09-27 22:00:46 +00:00
Fix TestIncDec6 no result AIR
This commit is contained in:
+65
-24
@@ -770,6 +770,10 @@ public abstract class InstructionDefinition implements Serializable {
|
||||
// ==> TestIncDec5 with result AIR is in GetLocalTypeIns
|
||||
|
||||
//TestIncDec5 no result AIR
|
||||
/*
|
||||
var _temp_5:* = a;
|
||||
_temp_5.attrib = _temp_5.attrib + 1;
|
||||
*/
|
||||
if (value instanceof IncrementAVM2Item
|
||||
|| value instanceof DecrementAVM2Item) {
|
||||
boolean isIncrement = value instanceof IncrementAVM2Item;
|
||||
@@ -796,6 +800,43 @@ public abstract class InstructionDefinition implements Serializable {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//TestIncDec6 no result AIR
|
||||
//In air, this is *POST* inc/decrement
|
||||
/*
|
||||
var _temp_5:* = a;
|
||||
_temp_5.attrib = _temp_5.attrib + 1;
|
||||
*/
|
||||
if (value instanceof IncrementAVM2Item
|
||||
|| value instanceof DecrementAVM2Item) {
|
||||
boolean isIncrement = value instanceof IncrementAVM2Item;
|
||||
if (value.value instanceof ConvertAVM2Item) {
|
||||
if (value.value.value instanceof GetPropertyAVM2Item) {
|
||||
GetPropertyAVM2Item getProp = (GetPropertyAVM2Item) value.value.value;
|
||||
if (getProp.object instanceof DuplicateItem
|
||||
&& obj instanceof DuplicateSourceItem) {
|
||||
if (getProp.object.getThroughDuplicate() == obj.getThroughDuplicate()) {
|
||||
DuplicateItem d = (DuplicateItem) getProp.object;
|
||||
if (!output.isEmpty() && output.get(output.size() - 1) instanceof SetTemporaryItem) {
|
||||
SetTemporaryItem st = (SetTemporaryItem) output.get(output.size() - 1);
|
||||
if (st.tempIndex == d.tempIndex) {
|
||||
output.remove(output.size() - 1);
|
||||
getProp.object = st.value;
|
||||
if (isIncrement) {
|
||||
stack.addToOutput(new PostIncrementAVM2Item(value.getSrc(), value.lineStartItem, getProp));
|
||||
} else {
|
||||
stack.addToOutput(new PostDecrementAVM2Item(value.getSrc(), value.lineStartItem, getProp));
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
if (value instanceof LocalRegAVM2Item) {
|
||||
LocalRegAVM2Item valueLocalReg = (LocalRegAVM2Item) value;
|
||||
@@ -866,21 +907,21 @@ public abstract class InstructionDefinition implements Serializable {
|
||||
boolean isIncrement = setLocalValue.value.value instanceof IncrementAVM2Item;
|
||||
|
||||
GetPropertyAVM2Item getProp = (GetPropertyAVM2Item) setLocalValue.value.value.value;
|
||||
if (!(getProp.object instanceof TemporaryItem)) {
|
||||
if (!(getProp.object instanceof DuplicateSourceItem)) {
|
||||
break;
|
||||
}
|
||||
if (!(getProp.propertyName instanceof FullMultinameAVM2Item)) {
|
||||
break;
|
||||
}
|
||||
FullMultinameAVM2Item fm = (FullMultinameAVM2Item) getProp.propertyName;
|
||||
if (!(fm.name instanceof TemporaryItem)) {
|
||||
if (!(fm.name instanceof DuplicateSourceItem)) {
|
||||
break;
|
||||
}
|
||||
TemporaryItem tempObj = (TemporaryItem) getProp.object;
|
||||
DuplicateSourceItem tempObj = (DuplicateSourceItem) getProp.object;
|
||||
if (tempObj.tempIndex != setTempObj.tempIndex) {
|
||||
break;
|
||||
}
|
||||
TemporaryItem tempName = (TemporaryItem) fm.name;
|
||||
DuplicateSourceItem tempName = (DuplicateSourceItem) fm.name;
|
||||
if (tempName.tempIndex != setTempName.tempIndex) {
|
||||
break;
|
||||
}
|
||||
@@ -973,21 +1014,21 @@ public abstract class InstructionDefinition implements Serializable {
|
||||
boolean isIncrement = setLocalValue.value instanceof IncrementAVM2Item;
|
||||
|
||||
GetPropertyAVM2Item getProp = (GetPropertyAVM2Item) setLocalValue.value.value;
|
||||
if (!(getProp.object instanceof TemporaryItem)) {
|
||||
if (!(getProp.object instanceof DuplicateSourceItem)) {
|
||||
break;
|
||||
}
|
||||
if (!(getProp.propertyName instanceof FullMultinameAVM2Item)) {
|
||||
break;
|
||||
}
|
||||
FullMultinameAVM2Item fm = (FullMultinameAVM2Item) getProp.propertyName;
|
||||
if (!(fm.name instanceof TemporaryItem)) {
|
||||
if (!(fm.name instanceof DuplicateSourceItem)) {
|
||||
break;
|
||||
}
|
||||
TemporaryItem tempObj = (TemporaryItem) getProp.object;
|
||||
DuplicateSourceItem tempObj = (DuplicateSourceItem) getProp.object;
|
||||
if (tempObj.tempIndex != setTempObj.tempIndex) {
|
||||
break;
|
||||
}
|
||||
TemporaryItem tempName = (TemporaryItem) fm.name;
|
||||
DuplicateSourceItem tempName = (DuplicateSourceItem) fm.name;
|
||||
if (tempName.tempIndex != setTempName.tempIndex) {
|
||||
break;
|
||||
}
|
||||
@@ -1064,21 +1105,21 @@ public abstract class InstructionDefinition implements Serializable {
|
||||
boolean isIncrement = setLocalValue.value instanceof IncrementAVM2Item;
|
||||
|
||||
GetPropertyAVM2Item getProp = (GetPropertyAVM2Item) setLocalValue.value.value.value.getNotCoercedNoDup();
|
||||
if (!(getProp.object instanceof TemporaryItem)) {
|
||||
if (!(getProp.object instanceof DuplicateSourceItem)) {
|
||||
break;
|
||||
}
|
||||
if (!(getProp.propertyName instanceof FullMultinameAVM2Item)) {
|
||||
break;
|
||||
}
|
||||
FullMultinameAVM2Item fm = (FullMultinameAVM2Item) getProp.propertyName;
|
||||
if (!(fm.name instanceof TemporaryItem)) {
|
||||
if (!(fm.name instanceof DuplicateSourceItem)) {
|
||||
break;
|
||||
}
|
||||
TemporaryItem tempObj = (TemporaryItem) getProp.object;
|
||||
DuplicateSourceItem tempObj = (DuplicateSourceItem) getProp.object;
|
||||
if (tempObj.tempIndex != setTempObj.tempIndex) {
|
||||
break;
|
||||
}
|
||||
TemporaryItem tempName = (TemporaryItem) fm.name;
|
||||
DuplicateSourceItem tempName = (DuplicateSourceItem) fm.name;
|
||||
if (tempName.tempIndex != setTempName.tempIndex) {
|
||||
break;
|
||||
}
|
||||
@@ -1167,21 +1208,21 @@ public abstract class InstructionDefinition implements Serializable {
|
||||
boolean isIncrement = setLocalValue.value instanceof IncrementAVM2Item;
|
||||
|
||||
GetPropertyAVM2Item getProp = (GetPropertyAVM2Item) setLocalValue.value.value.value;
|
||||
if (!(getProp.object instanceof TemporaryItem)) {
|
||||
if (!(getProp.object instanceof DuplicateSourceItem)) {
|
||||
break;
|
||||
}
|
||||
if (!(getProp.propertyName instanceof FullMultinameAVM2Item)) {
|
||||
break;
|
||||
}
|
||||
FullMultinameAVM2Item fm = (FullMultinameAVM2Item) getProp.propertyName;
|
||||
if (!(fm.name instanceof TemporaryItem)) {
|
||||
if (!(fm.name instanceof DuplicateSourceItem)) {
|
||||
break;
|
||||
}
|
||||
TemporaryItem tempObj = (TemporaryItem) getProp.object;
|
||||
DuplicateSourceItem tempObj = (DuplicateSourceItem) getProp.object;
|
||||
if (tempObj.tempIndex != setTempObj.tempIndex) {
|
||||
break;
|
||||
}
|
||||
TemporaryItem tempName = (TemporaryItem) fm.name;
|
||||
DuplicateSourceItem tempName = (DuplicateSourceItem) fm.name;
|
||||
if (tempName.tempIndex != setTempName.tempIndex) {
|
||||
break;
|
||||
}
|
||||
@@ -1259,7 +1300,7 @@ public abstract class InstructionDefinition implements Serializable {
|
||||
boolean isIncrement = setLocalValue.value.value instanceof IncrementAVM2Item;
|
||||
|
||||
GetPropertyAVM2Item getProp = (GetPropertyAVM2Item) setLocalValue.value.value.value;
|
||||
if (!(getProp.object instanceof TemporaryItem)) {
|
||||
if (!(getProp.object instanceof DuplicateSourceItem)) {
|
||||
break;
|
||||
}
|
||||
if (!(getProp.propertyName instanceof FullMultinameAVM2Item)) {
|
||||
@@ -1270,7 +1311,7 @@ public abstract class InstructionDefinition implements Serializable {
|
||||
break;
|
||||
}
|
||||
|
||||
TemporaryItem tempObj = (TemporaryItem) getProp.object;
|
||||
DuplicateSourceItem tempObj = (DuplicateSourceItem) getProp.object;
|
||||
if (tempObj.tempIndex != setTempObj.tempIndex) {
|
||||
break;
|
||||
}
|
||||
@@ -1349,7 +1390,7 @@ public abstract class InstructionDefinition implements Serializable {
|
||||
boolean isIncrement = setLocalValue.value instanceof IncrementAVM2Item;
|
||||
|
||||
GetPropertyAVM2Item getProp = (GetPropertyAVM2Item) setLocalValue.value.value;
|
||||
if (!(getProp.object instanceof TemporaryItem)) {
|
||||
if (!(getProp.object instanceof DuplicateSourceItem)) {
|
||||
break;
|
||||
}
|
||||
if (!(getProp.propertyName instanceof FullMultinameAVM2Item)) {
|
||||
@@ -1359,7 +1400,7 @@ public abstract class InstructionDefinition implements Serializable {
|
||||
if (!fm.compareSame(multiname)) {
|
||||
break;
|
||||
}
|
||||
TemporaryItem tempObj = (TemporaryItem) getProp.object;
|
||||
DuplicateSourceItem tempObj = (DuplicateSourceItem) getProp.object;
|
||||
if (tempObj.tempIndex != setTempObj.tempIndex) {
|
||||
break;
|
||||
}
|
||||
@@ -1430,7 +1471,7 @@ public abstract class InstructionDefinition implements Serializable {
|
||||
boolean isIncrement = setLocalValue.value instanceof IncrementAVM2Item;
|
||||
|
||||
GetPropertyAVM2Item getProp = (GetPropertyAVM2Item) setLocalValue.value.value.value.getNotCoercedNoDup();
|
||||
if (!(getProp.object instanceof TemporaryItem)) {
|
||||
if (!(getProp.object instanceof DuplicateSourceItem)) {
|
||||
break;
|
||||
}
|
||||
if (!(getProp.propertyName instanceof FullMultinameAVM2Item)) {
|
||||
@@ -1440,7 +1481,7 @@ public abstract class InstructionDefinition implements Serializable {
|
||||
if (!fm.compareSame(multiname)) {
|
||||
break;
|
||||
}
|
||||
TemporaryItem tempObj = (TemporaryItem) getProp.object;
|
||||
DuplicateSourceItem tempObj = (DuplicateSourceItem) getProp.object;
|
||||
if (tempObj.tempIndex != setTempObj.tempIndex) {
|
||||
break;
|
||||
}
|
||||
@@ -1541,8 +1582,8 @@ public abstract class InstructionDefinition implements Serializable {
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference<Boolean> isStatic = new Reference<>(false);
|
||||
Reference<GraphTargetItem> type = new Reference<>(null);
|
||||
Reference<GraphTargetItem> callType = new Reference<>(null);
|
||||
|
||||
+96
@@ -209,6 +209,102 @@ public abstract class GetLocalTypeIns extends InstructionDefinition {
|
||||
} while(false);
|
||||
}
|
||||
|
||||
//TestIncDec6 with result AIR
|
||||
/*
|
||||
//var _temp_4:* = trace;
|
||||
//var _temp_3:* = global;
|
||||
var _temp_1:* = a;
|
||||
var _temp_2:* = _temp_1.attrib;
|
||||
var _loc2_:* = _temp_2;
|
||||
_temp_1.attrib = _temp_2 + 1;
|
||||
_temp_4(_loc2_);
|
||||
*/
|
||||
expectedClasses = new Class[] {
|
||||
SetTemporaryItem.class,
|
||||
SetTemporaryItem.class,
|
||||
SetLocalAVM2Item.class,
|
||||
SetPropertyAVM2Item.class
|
||||
};
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
SetPropertyAVM2Item setProperty = (SetPropertyAVM2Item) output.get(output.size() - 1);
|
||||
SetLocalAVM2Item setLocalValue = (SetLocalAVM2Item) output.get(output.size() - 2);
|
||||
SetTemporaryItem setTempValue = (SetTemporaryItem) output.get(output.size() - 3);
|
||||
SetTemporaryItem setTempObj = (SetTemporaryItem) output.get(output.size() - 4);
|
||||
|
||||
|
||||
if (setLocalValue.regIndex != result.regIndex) {
|
||||
break;
|
||||
}
|
||||
if (!(setProperty.object instanceof DuplicateSourceItem)) {
|
||||
break;
|
||||
}
|
||||
if (!(setProperty.value instanceof IncrementAVM2Item
|
||||
|| setProperty.value instanceof DecrementAVM2Item)) {
|
||||
break;
|
||||
}
|
||||
|
||||
if (!(setProperty.value.value instanceof DuplicateSourceItem)) {
|
||||
break;
|
||||
}
|
||||
|
||||
if (!(setProperty.value.value.value.getNotCoercedNoDup() instanceof GetPropertyAVM2Item)) {
|
||||
break;
|
||||
}
|
||||
boolean isIncrement = setProperty.value instanceof IncrementAVM2Item;
|
||||
|
||||
GetPropertyAVM2Item getProp = (GetPropertyAVM2Item) setProperty.value.value.value.getNotCoercedNoDup();
|
||||
if (!(getProp.object instanceof DuplicateItem)) {
|
||||
break;
|
||||
}
|
||||
if (!(getProp.propertyName instanceof FullMultinameAVM2Item)) {
|
||||
break;
|
||||
}
|
||||
FullMultinameAVM2Item fm = (FullMultinameAVM2Item) getProp.propertyName;
|
||||
FullMultinameAVM2Item setFm = (FullMultinameAVM2Item) setProperty.propertyName;
|
||||
|
||||
if (!fm.compareSame(setFm)) {
|
||||
break;
|
||||
}
|
||||
|
||||
if (!(setLocalValue.value instanceof DuplicateItem)) {
|
||||
break;
|
||||
}
|
||||
DuplicateSourceItem dupSourceObj = (DuplicateSourceItem) setProperty.object;
|
||||
DuplicateItem dupObj = (DuplicateItem) getProp.object;
|
||||
if (dupObj.tempIndex != setTempObj.tempIndex
|
||||
|| dupSourceObj.tempIndex != setTempObj.tempIndex) {
|
||||
break;
|
||||
}
|
||||
|
||||
DuplicateSourceItem dupValue = (DuplicateSourceItem) setProperty.value.value;
|
||||
DuplicateItem dupSourceValue = (DuplicateItem) setLocalValue.value;
|
||||
if (dupValue.tempIndex != setTempValue.tempIndex
|
||||
|| dupSourceValue.tempIndex != setTempValue.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.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);
|
||||
}
|
||||
|
||||
stack.moveToStack(output);
|
||||
stack.push(result);
|
||||
|
||||
|
||||
@@ -264,7 +264,7 @@ public class TranslateStack extends Stack<GraphTargetItem> {
|
||||
DuplicateSourceItem ds = (DuplicateSourceItem) pi.value;
|
||||
//connectedOutput.set(i, new SetTemporaryItem(pi.dialect, ds.getSrc(), ds.getLineStartItem(), ds.value, ds.tempIndex,"push"));
|
||||
connectedOutput.remove(i);
|
||||
return new TemporaryItem(pi.dialect, pi.value.getSrc(), pi.value.getLineStartItem(), ds.value, ds.tempIndex);
|
||||
return ds; //new TemporaryItem(pi.dialect, pi.value.getSrc(), pi.value.getLineStartItem(), ds.value, ds.tempIndex);
|
||||
} else if (pi.value instanceof DuplicateItem) {
|
||||
DuplicateItem d = (DuplicateItem) pi.value;
|
||||
//connectedOutput.remove(i);
|
||||
|
||||
Reference in New Issue
Block a user