mirror of
https://git.huckle.dev/Huckles-Minecraft-Archive/jpexs-decompiler.git
synced 2026-07-17 06:08:10 +00:00
Swap fixes
This commit is contained in:
@@ -835,7 +835,7 @@ public abstract class InstructionDefinition implements Serializable {
|
||||
Reference<GraphTargetItem> callType = new Reference<>(null);
|
||||
GetPropertyIns.resolvePropertyType(localData, obj, multiname, isStatic, type, callType);
|
||||
|
||||
obj = obj.getThroughDuplicate();
|
||||
//obj = obj.getThroughDuplicate();
|
||||
|
||||
SetTypeAVM2Item result;
|
||||
if (init) {
|
||||
|
||||
@@ -28,10 +28,13 @@ import com.jpexs.decompiler.flash.abc.avm2.model.GetLexAVM2Item;
|
||||
import com.jpexs.decompiler.flash.abc.avm2.model.GetPropertyAVM2Item;
|
||||
import com.jpexs.decompiler.flash.abc.avm2.model.LocalRegAVM2Item;
|
||||
import com.jpexs.decompiler.flash.abc.avm2.model.SetLocalAVM2Item;
|
||||
import com.jpexs.decompiler.flash.abc.avm2.model.SetPropertyAVM2Item;
|
||||
import com.jpexs.decompiler.flash.abc.avm2.model.SetTypeAVM2Item;
|
||||
import com.jpexs.decompiler.graph.GraphTargetItem;
|
||||
import com.jpexs.decompiler.graph.TranslateStack;
|
||||
import com.jpexs.decompiler.graph.model.CompoundableBinaryOp;
|
||||
import com.jpexs.decompiler.graph.model.DuplicateItem;
|
||||
import com.jpexs.decompiler.graph.model.DuplicateSourceItem;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
@@ -101,7 +104,14 @@ public class SetPropertyIns extends InstructionDefinition implements SetTypeIns
|
||||
if (Objects.equals(obj.getThroughDuplicate(), propItem.object.getThroughDuplicate()) && Objects.equals(multiname, propItem.propertyName)) {
|
||||
result.setCompoundValue(binaryOp.getRightSide());
|
||||
result.setCompoundOperator(binaryOp.getOperator());
|
||||
}
|
||||
|
||||
if (result instanceof SetPropertyAVM2Item) {
|
||||
SetPropertyAVM2Item sp = (SetPropertyAVM2Item) result;
|
||||
if (sp.object instanceof DuplicateSourceItem) {
|
||||
sp.object = sp.object.value;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -130,6 +130,26 @@ public class SwapIns extends InstructionDefinition {
|
||||
return;
|
||||
}
|
||||
*/
|
||||
/*int temp = localData.maxTempIndex.getVal() + 1;
|
||||
localData.maxTempIndex.setVal(temp);
|
||||
stack.finishBlock(output);
|
||||
stack.addToOutput(new SetTemporaryItem(AVM2GraphTargetDialect.INSTANCE, ins, localData.lineStartInstruction, o2, temp, "swap"));
|
||||
stack.finishBlock(output);
|
||||
stack.push(o1);
|
||||
stack.push(new TemporaryItem(AVM2GraphTargetDialect.INSTANCE, ins, localData.lineStartInstruction, o2, temp)); */
|
||||
|
||||
if (o2 instanceof TemporaryItem) {
|
||||
stack.push(o1);
|
||||
stack.push(o2);
|
||||
return;
|
||||
}
|
||||
if (o2 instanceof DuplicateItem) {
|
||||
stack.push(o1);
|
||||
stack.push(o2);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
int temp = localData.maxTempIndex.getVal() + 1;
|
||||
localData.maxTempIndex.setVal(temp);
|
||||
stack.finishBlock(output);
|
||||
|
||||
@@ -407,6 +407,42 @@ public class TranslateStack extends Stack<GraphTargetItem> {
|
||||
}
|
||||
|
||||
public void allowSwap(List<GraphTargetItem> output) {
|
||||
/*
|
||||
if (!isEmpty()) {
|
||||
return;
|
||||
}
|
||||
if (output.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
if (size() != 2) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!(output.get(output.size() - 1) instanceof SetTemporaryItem)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!(peek() instanceof TemporaryItem)) {
|
||||
return;
|
||||
}
|
||||
|
||||
TemporaryItem ti = (TemporaryItem) peek();
|
||||
|
||||
SetTemporaryItem st = (SetTemporaryItem) output.get(output.size() - 1);
|
||||
|
||||
if (!"swap".equals(st.getSuffix())) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (st.getTempIndex() != ti.getTempIndex()) {
|
||||
return;
|
||||
}
|
||||
|
||||
output.remove(output.size() - 1);
|
||||
pop();
|
||||
push(ti.value);
|
||||
|
||||
*/
|
||||
if (!isEmpty()) {
|
||||
return;
|
||||
}
|
||||
@@ -420,7 +456,7 @@ public class TranslateStack extends Stack<GraphTargetItem> {
|
||||
if (!(output.get(output.size() - 2) instanceof PushItem)) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
if (!(output.get(output.size() - 3) instanceof SetTemporaryItem)) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -22,6 +22,7 @@ import com.jpexs.decompiler.graph.CompilationException;
|
||||
import com.jpexs.decompiler.graph.GraphSourceItem;
|
||||
import com.jpexs.decompiler.graph.GraphTargetDialect;
|
||||
import com.jpexs.decompiler.graph.GraphTargetItem;
|
||||
import com.jpexs.decompiler.graph.GraphTargetVisitorInterface;
|
||||
import com.jpexs.decompiler.graph.SimpleValue;
|
||||
import com.jpexs.decompiler.graph.SourceGenerator;
|
||||
import java.util.List;
|
||||
@@ -145,4 +146,8 @@ public class DuplicateItem extends GraphTargetItem implements SimpleValue, HasTe
|
||||
public int getTempIndex() {
|
||||
return tempIndex;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visit(GraphTargetVisitorInterface visitor) {
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,6 +23,7 @@ import com.jpexs.decompiler.graph.CompilationException;
|
||||
import com.jpexs.decompiler.graph.GraphSourceItem;
|
||||
import com.jpexs.decompiler.graph.GraphTargetDialect;
|
||||
import com.jpexs.decompiler.graph.GraphTargetItem;
|
||||
import com.jpexs.decompiler.graph.GraphTargetVisitorInterface;
|
||||
import com.jpexs.decompiler.graph.SimpleValue;
|
||||
import com.jpexs.decompiler.graph.SourceGenerator;
|
||||
import java.util.ArrayList;
|
||||
@@ -136,4 +137,7 @@ public class TemporaryItem extends GraphTargetItem implements SimpleValue, HasTe
|
||||
return tempIndex;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visit(GraphTargetVisitorInterface visitor) {
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user