mirror of
https://git.huckle.dev/Huckles-Minecraft-Archive/jpexs-decompiler.git
synced 2026-06-20 12:55:39 +00:00
Fixed: #2546 AS3 findProperty vs temporary registers
This commit is contained in:
@@ -1373,6 +1373,23 @@ public abstract class InstructionDefinition implements Serializable {
|
||||
}
|
||||
}
|
||||
|
||||
if (obj instanceof TemporaryItem) {
|
||||
TemporaryItem temporaryItemObj = (TemporaryItem) obj;
|
||||
if (temporaryItemObj.value instanceof FindPropertyAVM2Item) {
|
||||
for (int i = output.size() - 1; i >= 0; i--) {
|
||||
if (output.get(i) instanceof SetTemporaryItem) {
|
||||
SetTemporaryItem setTemp = (SetTemporaryItem) output.get(i);
|
||||
if (setTemp.getTempIndex() == temporaryItemObj.getTempIndex()) {
|
||||
output.remove(i);
|
||||
obj = temporaryItemObj.value;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference<Boolean> isStatic = new Reference<>(false);
|
||||
Reference<GraphTargetItem> type = new Reference<>(null);
|
||||
Reference<GraphTargetItem> callType = new Reference<>(null);
|
||||
|
||||
@@ -25,9 +25,12 @@ 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.instructions.other.GetPropertyIns;
|
||||
import com.jpexs.decompiler.flash.abc.avm2.model.CallPropertyAVM2Item;
|
||||
import com.jpexs.decompiler.flash.abc.avm2.model.FindPropertyAVM2Item;
|
||||
import com.jpexs.decompiler.flash.abc.avm2.model.FullMultinameAVM2Item;
|
||||
import com.jpexs.decompiler.graph.GraphTargetItem;
|
||||
import com.jpexs.decompiler.graph.TranslateStack;
|
||||
import com.jpexs.decompiler.graph.model.SetTemporaryItem;
|
||||
import com.jpexs.decompiler.graph.model.TemporaryItem;
|
||||
import com.jpexs.helpers.Reference;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
@@ -85,6 +88,23 @@ public class CallPropVoidIns extends InstructionDefinition {
|
||||
FullMultinameAVM2Item multiname = resolveMultiname(localData, true, stack, localData.getConstants(), multinameIndex, ins, output);
|
||||
|
||||
GraphTargetItem obj = stack.pop();
|
||||
|
||||
if (obj instanceof TemporaryItem) {
|
||||
TemporaryItem temporaryItemObj = (TemporaryItem) obj;
|
||||
if (temporaryItemObj.value instanceof FindPropertyAVM2Item) {
|
||||
for (int i = output.size() - 1; i >= 0; i--) {
|
||||
if (output.get(i) instanceof SetTemporaryItem) {
|
||||
SetTemporaryItem setTemp = (SetTemporaryItem) output.get(i);
|
||||
if (setTemp.getTempIndex() == temporaryItemObj.getTempIndex()) {
|
||||
output.remove(i);
|
||||
obj = temporaryItemObj.value;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference<Boolean> isStatic = new Reference<>(false);
|
||||
Reference<GraphTargetItem> type = new Reference<>(null);
|
||||
Reference<GraphTargetItem> callType = new Reference<>(null);
|
||||
|
||||
@@ -25,10 +25,13 @@ 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.instructions.other.GetPropertyIns;
|
||||
import com.jpexs.decompiler.flash.abc.avm2.model.CallPropertyAVM2Item;
|
||||
import com.jpexs.decompiler.flash.abc.avm2.model.FindPropertyAVM2Item;
|
||||
import com.jpexs.decompiler.flash.abc.avm2.model.FullMultinameAVM2Item;
|
||||
import com.jpexs.decompiler.flash.ecma.NotCompileTime;
|
||||
import com.jpexs.decompiler.graph.GraphTargetItem;
|
||||
import com.jpexs.decompiler.graph.TranslateStack;
|
||||
import com.jpexs.decompiler.graph.model.SetTemporaryItem;
|
||||
import com.jpexs.decompiler.graph.model.TemporaryItem;
|
||||
import com.jpexs.helpers.Reference;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
@@ -85,6 +88,23 @@ public class CallPropertyIns extends InstructionDefinition {
|
||||
|
||||
FullMultinameAVM2Item multiname = resolveMultiname(localData, true, stack, localData.getConstants(), multinameIndex, ins, output);
|
||||
GraphTargetItem obj = stack.pop();
|
||||
|
||||
if (obj instanceof TemporaryItem) {
|
||||
TemporaryItem temporaryItemObj = (TemporaryItem) obj;
|
||||
if (temporaryItemObj.value instanceof FindPropertyAVM2Item) {
|
||||
for (int i = output.size() - 1; i >= 0; i--) {
|
||||
if (output.get(i) instanceof SetTemporaryItem) {
|
||||
SetTemporaryItem setTemp = (SetTemporaryItem) output.get(i);
|
||||
if (setTemp.getTempIndex() == temporaryItemObj.getTempIndex()) {
|
||||
output.remove(i);
|
||||
obj = temporaryItemObj.value;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference<Boolean> isStatic = new Reference<>(false);
|
||||
Reference<GraphTargetItem> type = new Reference<>(null);
|
||||
Reference<GraphTargetItem> callType = new Reference<>(null);
|
||||
|
||||
Reference in New Issue
Block a user