mirror of
https://git.huckle.dev/Huckles-Minecraft-Archive/jpexs-decompiler.git
synced 2026-09-27 15:00:45 +00:00
getScopeDelta separated to getScopePushCount and getScopePopCount
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -47,7 +47,7 @@ public class CodeStats {
|
||||
int i = 0;
|
||||
int ms = 0;
|
||||
for (InstructionStats stats : instructionStats) {
|
||||
int deltastack = stats.ins.definition.getStackDelta(stats.ins, abc);
|
||||
int deltastack = stats.ins.definition.getStackDelta2(stats.ins, abc);
|
||||
if (stats.stackpos > ms) {
|
||||
ms = stats.stackpos;
|
||||
}
|
||||
|
||||
+2
-2
@@ -258,7 +258,7 @@ public class AVM2DeobfuscatorSimple implements SWFDecompilerListener {
|
||||
}
|
||||
} else {
|
||||
// do not throw EmptyStackException, much faster
|
||||
int requiredStackSize = ins.getRequiredStackSize();
|
||||
int requiredStackSize = ins.getStackPopCount(localData);
|
||||
if (stack.size() < requiredStackSize) {
|
||||
return;
|
||||
}
|
||||
@@ -364,7 +364,7 @@ public class AVM2DeobfuscatorSimple implements SWFDecompilerListener {
|
||||
AVM2Instruction tarIns = code.code.get(nidx);
|
||||
|
||||
//Some IfType instructions need more than 1 operand, we must pop out all of them
|
||||
int stackCount = -ins.definition.getStackDelta(ins, abc);
|
||||
int stackCount = -def.getStackDelta2(ins, abc);
|
||||
|
||||
if (EcmaScript.toBoolean(res)) {
|
||||
//System.err.println("replacing " + ins + " on " + idx + " with jump");
|
||||
|
||||
+2
-2
@@ -340,8 +340,8 @@ public class AVM2Instruction implements Cloneable, GraphSourceItem {
|
||||
aLocalData.constants, this, aLocalData.methodInfo, output, aLocalData.methodBody, aLocalData.abc, aLocalData.localRegNames, aLocalData.fullyQualifiedNames, null, aLocalData.localRegAssignmentIps, aLocalData.ip, aLocalData.refs, aLocalData.code);
|
||||
}
|
||||
|
||||
public int getRequiredStackSize() {
|
||||
return definition.getRequiredStackSize(this);
|
||||
public int getStackPopCount(AVM2LocalData aLocalData) {
|
||||
return definition.getStackPopCount(this, aLocalData.abc);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+1
-1
@@ -45,7 +45,7 @@ public class DeobfuscatePopIns extends PopIns {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRequiredStackSize(AVM2Instruction ins) {
|
||||
public int getStackPopCount(AVM2Instruction ins, ABC abc) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
+26
-3
@@ -91,7 +91,11 @@ public class InstructionDefinition implements Serializable {
|
||||
public void translate(boolean isStatic, int scriptIndex, int classIndex, HashMap<Integer, GraphTargetItem> localRegs, TranslateStack stack, ScopeStack scopeStack, AVM2ConstantPool constants, AVM2Instruction ins, List<MethodInfo> method_info, List<GraphTargetItem> output, MethodBody body, ABC abc, HashMap<Integer, String> localRegNames, List<DottedChain> fullyQualifiedNames, String path, HashMap<Integer, Integer> localRegsAssignmentIps, int ip, HashMap<Integer, List<Integer>> refs, AVM2Code code) throws InterruptedException {
|
||||
}
|
||||
|
||||
public int getRequiredStackSize(AVM2Instruction ins) {
|
||||
public int getStackPopCount(AVM2Instruction ins, ABC abc) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
public int getStackPushCount(AVM2Instruction ins, ABC abc) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -110,6 +114,25 @@ public class InstructionDefinition implements Serializable {
|
||||
return new FullMultinameAVM2Item(ins, multinameIndex, name, ns);
|
||||
}
|
||||
|
||||
protected int getMultinameRequiredStackSize(AVM2ConstantPool constants, int multinameIndex) {
|
||||
int res = 0;
|
||||
if (multinameIndex > 0 && multinameIndex < constants.constant_multiname.size()) {
|
||||
//Note: In official compiler, the stack can be wrong(greater) for some MULTINAMEL/A, e.g. increments
|
||||
/*
|
||||
var arr=[1,2,3];
|
||||
return arr[2]++;
|
||||
*/
|
||||
if (constants.getMultiname(multinameIndex).needsName()) {
|
||||
res++;
|
||||
}
|
||||
if (constants.getMultiname(multinameIndex).needsNs()) {
|
||||
res++;
|
||||
}
|
||||
}
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
protected int resolvedCount(AVM2ConstantPool constants, int multinameIndex) {
|
||||
int pos = 0;
|
||||
if (constants.getMultiname(multinameIndex).needsNs()) {
|
||||
@@ -137,8 +160,8 @@ public class InstructionDefinition implements Serializable {
|
||||
return name + ns;
|
||||
}
|
||||
|
||||
public int getStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
return 0;
|
||||
public int getStackDelta2(AVM2Instruction ins, ABC abc) {
|
||||
return getStackPushCount(ins, abc) - getStackPopCount(ins, abc);
|
||||
}
|
||||
|
||||
public int getScopeStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
|
||||
+10
-5
@@ -41,11 +41,6 @@ public class Lf32Ins extends InstructionDefinition implements AlchemyTypeIns {
|
||||
super(0x38, "lf32", new int[]{}, true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
return 1 - 1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getScopeStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
return 0;
|
||||
@@ -56,4 +51,14 @@ public class Lf32Ins extends InstructionDefinition implements AlchemyTypeIns {
|
||||
GraphTargetItem ofs = stack.pop();
|
||||
stack.push(new AlchemyLoadAVM2Item(ins, ofs, 'f', 32));
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackPopCount(AVM2Instruction ins, ABC abc) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackPushCount(AVM2Instruction ins, ABC abc) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
+10
-5
@@ -41,11 +41,6 @@ public class Lf64Ins extends InstructionDefinition implements AlchemyTypeIns {
|
||||
super(0x39, "lf64", new int[]{}, true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
return 1 - 1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getScopeStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
return 0;
|
||||
@@ -56,4 +51,14 @@ public class Lf64Ins extends InstructionDefinition implements AlchemyTypeIns {
|
||||
GraphTargetItem ofs = stack.pop();
|
||||
stack.push(new AlchemyLoadAVM2Item(ins, ofs, 'f', 64));
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackPopCount(AVM2Instruction ins, ABC abc) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackPushCount(AVM2Instruction ins, ABC abc) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
+10
-5
@@ -41,11 +41,6 @@ public class Li16Ins extends InstructionDefinition implements AlchemyTypeIns {
|
||||
super(0x36, "li16", new int[]{}, true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
return 1 - 1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getScopeStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
return 0;
|
||||
@@ -56,4 +51,14 @@ public class Li16Ins extends InstructionDefinition implements AlchemyTypeIns {
|
||||
GraphTargetItem ofs = stack.pop();
|
||||
stack.push(new AlchemyLoadAVM2Item(ins, ofs, 'i', 16));
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackPopCount(AVM2Instruction ins, ABC abc) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackPushCount(AVM2Instruction ins, ABC abc) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
+10
-5
@@ -41,11 +41,6 @@ public class Li32Ins extends InstructionDefinition implements AlchemyTypeIns {
|
||||
super(0x37, "li32", new int[]{}, true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
return 1 - 1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getScopeStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
return 0;
|
||||
@@ -56,4 +51,14 @@ public class Li32Ins extends InstructionDefinition implements AlchemyTypeIns {
|
||||
GraphTargetItem ofs = stack.pop();
|
||||
stack.push(new AlchemyLoadAVM2Item(ins, ofs, 'i', 32));
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackPopCount(AVM2Instruction ins, ABC abc) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackPushCount(AVM2Instruction ins, ABC abc) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
+10
-5
@@ -41,11 +41,6 @@ public class Li8Ins extends InstructionDefinition implements AlchemyTypeIns {
|
||||
super(0x35, "li8", new int[]{}, true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
return 1 - 1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getScopeStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
return 0;
|
||||
@@ -56,4 +51,14 @@ public class Li8Ins extends InstructionDefinition implements AlchemyTypeIns {
|
||||
GraphTargetItem ofs = stack.pop();
|
||||
stack.push(new AlchemyLoadAVM2Item(ins, ofs, 'i', 8));
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackPopCount(AVM2Instruction ins, ABC abc) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackPushCount(AVM2Instruction ins, ABC abc) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
+5
-5
@@ -41,11 +41,6 @@ public class Sf32Ins extends InstructionDefinition implements AlchemyTypeIns {
|
||||
super(0x3D, "sf32", new int[]{}, true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
return -2;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getScopeStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
return 0;
|
||||
@@ -57,4 +52,9 @@ public class Sf32Ins extends InstructionDefinition implements AlchemyTypeIns {
|
||||
GraphTargetItem value = stack.pop();
|
||||
output.add(new AlchemyStoreAVM2Item(ins, value, ofs, 'f', 32));
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackPopCount(AVM2Instruction ins, ABC abc) {
|
||||
return 2;
|
||||
}
|
||||
}
|
||||
|
||||
+5
-5
@@ -41,11 +41,6 @@ public class Sf64Ins extends InstructionDefinition implements AlchemyTypeIns {
|
||||
super(0x3E, "sf64", new int[]{}, true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
return -2;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getScopeStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
return 0;
|
||||
@@ -57,4 +52,9 @@ public class Sf64Ins extends InstructionDefinition implements AlchemyTypeIns {
|
||||
GraphTargetItem value = stack.pop();
|
||||
output.add(new AlchemyStoreAVM2Item(ins, value, ofs, 'f', 64));
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackPopCount(AVM2Instruction ins, ABC abc) {
|
||||
return 2;
|
||||
}
|
||||
}
|
||||
|
||||
+5
-5
@@ -41,11 +41,6 @@ public class Si16Ins extends InstructionDefinition implements AlchemyTypeIns {
|
||||
super(0x3B, "si16", new int[]{}, true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
return -2;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getScopeStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
return 0;
|
||||
@@ -57,4 +52,9 @@ public class Si16Ins extends InstructionDefinition implements AlchemyTypeIns {
|
||||
GraphTargetItem value = stack.pop();
|
||||
output.add(new AlchemyStoreAVM2Item(ins, value, ofs, 'i', 16));
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackPopCount(AVM2Instruction ins, ABC abc) {
|
||||
return 2;
|
||||
}
|
||||
}
|
||||
|
||||
+5
-5
@@ -41,11 +41,6 @@ public class Si32Ins extends InstructionDefinition implements AlchemyTypeIns {
|
||||
super(0x3C, "si32", new int[]{}, true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
return -2;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getScopeStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
return 0;
|
||||
@@ -57,4 +52,9 @@ public class Si32Ins extends InstructionDefinition implements AlchemyTypeIns {
|
||||
GraphTargetItem value = stack.pop();
|
||||
output.add(new AlchemyStoreAVM2Item(ins, value, ofs, 'i', 32));
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackPopCount(AVM2Instruction ins, ABC abc) {
|
||||
return 2;
|
||||
}
|
||||
}
|
||||
|
||||
+5
-5
@@ -41,11 +41,6 @@ public class Si8Ins extends InstructionDefinition implements AlchemyTypeIns {
|
||||
super(0x3A, "si8", new int[]{}, true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
return -2;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getScopeStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
return 0;
|
||||
@@ -57,4 +52,9 @@ public class Si8Ins extends InstructionDefinition implements AlchemyTypeIns {
|
||||
GraphTargetItem value = stack.pop();
|
||||
output.add(new AlchemyStoreAVM2Item(ins, value, ofs, 'i', 8));
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackPopCount(AVM2Instruction ins, ABC abc) {
|
||||
return 2;
|
||||
}
|
||||
}
|
||||
|
||||
+10
-5
@@ -41,11 +41,6 @@ public class Sxi16Ins extends InstructionDefinition implements AlchemyTypeIns {
|
||||
super(0x52, "sxi16", new int[]{}, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
return 1 - 1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getScopeStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
return 0;
|
||||
@@ -56,4 +51,14 @@ public class Sxi16Ins extends InstructionDefinition implements AlchemyTypeIns {
|
||||
GraphTargetItem value = stack.pop();
|
||||
stack.push(new AlchemySignExtendAVM2Item(ins, value, 16));
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackPopCount(AVM2Instruction ins, ABC abc) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackPushCount(AVM2Instruction ins, ABC abc) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
+10
-5
@@ -41,11 +41,6 @@ public class Sxi1Ins extends InstructionDefinition implements AlchemyTypeIns {
|
||||
super(0x50, "sxi1", new int[]{}, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
return 1 - 1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getScopeStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
return 0;
|
||||
@@ -56,4 +51,14 @@ public class Sxi1Ins extends InstructionDefinition implements AlchemyTypeIns {
|
||||
GraphTargetItem value = stack.pop();
|
||||
stack.push(new AlchemySignExtendAVM2Item(ins, value, 1));
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackPopCount(AVM2Instruction ins, ABC abc) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackPushCount(AVM2Instruction ins, ABC abc) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
+10
-5
@@ -41,11 +41,6 @@ public class Sxi8Ins extends InstructionDefinition implements AlchemyTypeIns {
|
||||
super(0x51, "sxi8", new int[]{}, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
return 1 - 1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getScopeStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
return 0;
|
||||
@@ -56,4 +51,14 @@ public class Sxi8Ins extends InstructionDefinition implements AlchemyTypeIns {
|
||||
GraphTargetItem value = stack.pop();
|
||||
stack.push(new AlchemySignExtendAVM2Item(ins, value, 8));
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackPopCount(AVM2Instruction ins, ABC abc) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackPushCount(AVM2Instruction ins, ABC abc) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
+1
-6
@@ -45,12 +45,7 @@ public class AddIIns extends AddIns {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRequiredStackSize(AVM2Instruction ins) {
|
||||
public int getStackPopCount(AVM2Instruction ins, ABC abc) {
|
||||
return 2;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
return -2 + 1;
|
||||
}
|
||||
}
|
||||
|
||||
+3
-3
@@ -68,12 +68,12 @@ public class AddIns extends InstructionDefinition {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRequiredStackSize(AVM2Instruction ins) {
|
||||
public int getStackPopCount(AVM2Instruction ins, ABC abc) {
|
||||
return 2;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
return -2 + 1;
|
||||
public int getStackPushCount(AVM2Instruction ins, ABC abc) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
+7
-2
@@ -62,7 +62,12 @@ public class DecrementIIns extends InstructionDefinition {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
return -1 + 1;
|
||||
public int getStackPopCount(AVM2Instruction ins, ABC abc) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackPushCount(AVM2Instruction ins, ABC abc) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
+7
-2
@@ -62,7 +62,12 @@ public class DecrementIns extends InstructionDefinition {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
return -1 + 1;
|
||||
public int getStackPopCount(AVM2Instruction ins, ABC abc) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackPushCount(AVM2Instruction ins, ABC abc) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
+7
-2
@@ -74,7 +74,12 @@ public class DivideIns extends InstructionDefinition {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
return -2 + 1;
|
||||
public int getStackPopCount(AVM2Instruction ins, ABC abc) {
|
||||
return 2;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackPushCount(AVM2Instruction ins, ABC abc) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
+7
-2
@@ -43,7 +43,12 @@ public class IncrementIIns extends InstructionDefinition {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
return -1 + 1;
|
||||
public int getStackPopCount(AVM2Instruction ins, ABC abc) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackPushCount(AVM2Instruction ins, ABC abc) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
+7
-2
@@ -43,7 +43,12 @@ public class IncrementIns extends InstructionDefinition {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
return -1 + 1;
|
||||
public int getStackPopCount(AVM2Instruction ins, ABC abc) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackPushCount(AVM2Instruction ins, ABC abc) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
+7
-2
@@ -59,7 +59,12 @@ public class ModuloIns extends InstructionDefinition {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
return -2 + 1;
|
||||
public int getStackPopCount(AVM2Instruction ins, ABC abc) {
|
||||
return 2;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackPushCount(AVM2Instruction ins, ABC abc) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
+7
-2
@@ -45,7 +45,12 @@ public class MultiplyIIns extends InstructionDefinition {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
return -2 + 1;
|
||||
public int getStackPopCount(AVM2Instruction ins, ABC abc) {
|
||||
return 2;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackPushCount(AVM2Instruction ins, ABC abc) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
+7
-2
@@ -67,7 +67,12 @@ public class MultiplyIns extends InstructionDefinition {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
return -2 + 1;
|
||||
public int getStackPopCount(AVM2Instruction ins, ABC abc) {
|
||||
return 2;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackPushCount(AVM2Instruction ins, ABC abc) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
+7
-2
@@ -44,7 +44,12 @@ public class NegateIIns extends InstructionDefinition {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
return -1 + 1;
|
||||
public int getStackPopCount(AVM2Instruction ins, ABC abc) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackPushCount(AVM2Instruction ins, ABC abc) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
+7
-2
@@ -44,7 +44,12 @@ public class NegateIns extends InstructionDefinition {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
return -1 + 1;
|
||||
public int getStackPopCount(AVM2Instruction ins, ABC abc) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackPushCount(AVM2Instruction ins, ABC abc) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
+7
-2
@@ -43,7 +43,12 @@ public class NotIns extends InstructionDefinition {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
return -1 + 1;
|
||||
public int getStackPopCount(AVM2Instruction ins, ABC abc) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackPushCount(AVM2Instruction ins, ABC abc) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
+7
-2
@@ -45,7 +45,12 @@ public class SubtractIIns extends InstructionDefinition {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
return -2 + 1;
|
||||
public int getStackPopCount(AVM2Instruction ins, ABC abc) {
|
||||
return 2;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackPushCount(AVM2Instruction ins, ABC abc) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
+7
-2
@@ -45,7 +45,12 @@ public class SubtractIns extends InstructionDefinition {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
return -2 + 1;
|
||||
public int getStackPopCount(AVM2Instruction ins, ABC abc) {
|
||||
return 2;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackPushCount(AVM2Instruction ins, ABC abc) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
+3
-3
@@ -54,12 +54,12 @@ public class BitAndIns extends InstructionDefinition {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRequiredStackSize(AVM2Instruction ins) {
|
||||
public int getStackPopCount(AVM2Instruction ins, ABC abc) {
|
||||
return 2;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
return -2 + 1;
|
||||
public int getStackPushCount(AVM2Instruction ins, ABC abc) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
+7
-2
@@ -52,7 +52,12 @@ public class BitNotIns extends InstructionDefinition {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
return -1 + 1;
|
||||
public int getStackPopCount(AVM2Instruction ins, ABC abc) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackPushCount(AVM2Instruction ins, ABC abc) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
+7
-2
@@ -54,7 +54,12 @@ public class BitOrIns extends InstructionDefinition {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
return -2 + 1;
|
||||
public int getStackPopCount(AVM2Instruction ins, ABC abc) {
|
||||
return 2;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackPushCount(AVM2Instruction ins, ABC abc) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
+7
-2
@@ -54,7 +54,12 @@ public class BitXorIns extends InstructionDefinition {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
return -2 + 1;
|
||||
public int getStackPopCount(AVM2Instruction ins, ABC abc) {
|
||||
return 2;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackPushCount(AVM2Instruction ins, ABC abc) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
+7
-2
@@ -54,7 +54,12 @@ public class LShiftIns extends InstructionDefinition {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
return -2 + 1;
|
||||
public int getStackPopCount(AVM2Instruction ins, ABC abc) {
|
||||
return 2;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackPushCount(AVM2Instruction ins, ABC abc) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
+7
-2
@@ -54,7 +54,12 @@ public class RShiftIns extends InstructionDefinition {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
return -2 + 1;
|
||||
public int getStackPopCount(AVM2Instruction ins, ABC abc) {
|
||||
return 2;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackPushCount(AVM2Instruction ins, ABC abc) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
+7
-2
@@ -54,7 +54,12 @@ public class URShiftIns extends InstructionDefinition {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
return -2 + 1;
|
||||
public int getStackPopCount(AVM2Instruction ins, ABC abc) {
|
||||
return 2;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackPushCount(AVM2Instruction ins, ABC abc) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
+7
-2
@@ -54,7 +54,12 @@ public class EqualsIns extends InstructionDefinition {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
return -2 + 1;
|
||||
public int getStackPopCount(AVM2Instruction ins, ABC abc) {
|
||||
return 2;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackPushCount(AVM2Instruction ins, ABC abc) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
+7
-2
@@ -45,7 +45,12 @@ public class GreaterEqualsIns extends InstructionDefinition {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
return -2 + 1;
|
||||
public int getStackPopCount(AVM2Instruction ins, ABC abc) {
|
||||
return 2;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackPushCount(AVM2Instruction ins, ABC abc) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
+7
-2
@@ -45,7 +45,12 @@ public class GreaterThanIns extends InstructionDefinition {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
return -2 + 1;
|
||||
public int getStackPopCount(AVM2Instruction ins, ABC abc) {
|
||||
return 2;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackPushCount(AVM2Instruction ins, ABC abc) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
+7
-2
@@ -45,7 +45,12 @@ public class LessEqualsIns extends InstructionDefinition {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
return -2 + 1;
|
||||
public int getStackPopCount(AVM2Instruction ins, ABC abc) {
|
||||
return 2;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackPushCount(AVM2Instruction ins, ABC abc) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
+7
-2
@@ -45,7 +45,12 @@ public class LessThanIns extends InstructionDefinition {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
return -2 + 1;
|
||||
public int getStackPopCount(AVM2Instruction ins, ABC abc) {
|
||||
return 2;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackPushCount(AVM2Instruction ins, ABC abc) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
+7
-2
@@ -45,7 +45,12 @@ public class StrictEqualsIns extends InstructionDefinition {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
return -2 + 1;
|
||||
public int getStackPopCount(AVM2Instruction ins, ABC abc) {
|
||||
return 2;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackPushCount(AVM2Instruction ins, ABC abc) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
+7
-2
@@ -115,7 +115,12 @@ public class ConstructIns extends InstructionDefinition {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
return -ins.operands[0] - 1 + 1;
|
||||
public int getStackPopCount(AVM2Instruction ins, ABC abc) {
|
||||
return ins.operands[0] + 1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackPushCount(AVM2Instruction ins, ABC abc) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
+7
-9
@@ -82,15 +82,13 @@ public class ConstructPropIns extends InstructionDefinition {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
int ret = -ins.operands[1] - 1 + 1;
|
||||
public int getStackPopCount(AVM2Instruction ins, ABC abc) {
|
||||
int multinameIndex = ins.operands[0];
|
||||
if (abc.constants.getMultiname(multinameIndex).needsName()) {
|
||||
ret--;
|
||||
}
|
||||
if (abc.constants.getMultiname(multinameIndex).needsNs()) {
|
||||
ret--;
|
||||
}
|
||||
return ret;
|
||||
return ins.operands[1] + 1 + getMultinameRequiredStackSize(abc.constants, multinameIndex);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackPushCount(AVM2Instruction ins, ABC abc) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -64,7 +64,7 @@ public class ConstructSuperIns extends InstructionDefinition {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
return -ins.operands[0] - 1;
|
||||
public int getStackPopCount(AVM2Instruction ins, ABC abc) {
|
||||
return ins.operands[0] + 1;
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -43,7 +43,7 @@ public class NewActivationIns extends InstructionDefinition {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
public int getStackPushCount(AVM2Instruction ins, ABC abc) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
+7
-2
@@ -57,7 +57,12 @@ public class NewArrayIns extends InstructionDefinition {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
return -ins.operands[0] + 1;
|
||||
public int getStackPopCount(AVM2Instruction ins, ABC abc) {
|
||||
return ins.operands[0];
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackPushCount(AVM2Instruction ins, ABC abc) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -44,7 +44,7 @@ public class NewCatchIns extends InstructionDefinition {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
public int getStackPushCount(AVM2Instruction ins, ABC abc) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
+7
-2
@@ -50,7 +50,12 @@ public class NewClassIns extends InstructionDefinition {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
return -1 + 1;
|
||||
public int getStackPopCount(AVM2Instruction ins, ABC abc) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackPushCount(AVM2Instruction ins, ABC abc) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -45,7 +45,7 @@ public class NewFunctionIns extends InstructionDefinition {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
public int getStackPushCount(AVM2Instruction ins, ABC abc) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
+7
-2
@@ -63,7 +63,12 @@ public class NewObjectIns extends InstructionDefinition {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
return -ins.operands[0] * 2 + 1;
|
||||
public int getStackPopCount(AVM2Instruction ins, ABC abc) {
|
||||
return ins.operands[0] * 2;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackPushCount(AVM2Instruction ins, ABC abc) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
+7
-2
@@ -65,7 +65,12 @@ public class CallIns extends InstructionDefinition {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
return -2 + 1 - ins.operands[0];
|
||||
public int getStackPopCount(AVM2Instruction ins, ABC abc) {
|
||||
return ins.operands[0] + 2;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackPushCount(AVM2Instruction ins, ABC abc) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
+3
-3
@@ -66,12 +66,12 @@ public class CallMethodIns extends InstructionDefinition {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRequiredStackSize(AVM2Instruction ins) {
|
||||
public int getStackPopCount(AVM2Instruction ins, ABC abc) {
|
||||
return ins.operands[1] + 1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
return -1 + 1 - ins.operands[1];
|
||||
public int getStackPushCount(AVM2Instruction ins, ABC abc) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
+8
-9
@@ -47,6 +47,7 @@ public class CallPropLexIns extends CallPropertyIns {
|
||||
for (int a = 0; a < argCount; a++) {
|
||||
args.add(0, stack.pop());
|
||||
}
|
||||
|
||||
FullMultinameAVM2Item multiname = resolveMultiname(stack, constants, multinameIndex, ins);
|
||||
GraphTargetItem receiver = stack.pop();
|
||||
|
||||
@@ -54,15 +55,13 @@ public class CallPropLexIns extends CallPropertyIns {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
int ret = -ins.operands[1] - 1 + 1;
|
||||
public int getStackPopCount(AVM2Instruction ins, ABC abc) {
|
||||
int multinameIndex = ins.operands[0];
|
||||
if (abc.constants.getMultiname(multinameIndex).needsName()) {
|
||||
ret--;
|
||||
}
|
||||
if (abc.constants.getMultiname(multinameIndex).needsNs()) {
|
||||
ret--;
|
||||
}
|
||||
return ret;
|
||||
return ins.operands[1] + 1 + getMultinameRequiredStackSize(abc.constants, multinameIndex);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackPushCount(AVM2Instruction ins, ABC abc) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
+2
-15
@@ -73,21 +73,8 @@ public class CallPropVoidIns extends InstructionDefinition {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRequiredStackSize(AVM2Instruction ins) {
|
||||
return ins.operands[1] + 1;
|
||||
// todo: honfika: add resolveMultiname stack size
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
int ret = -ins.operands[1] - 1;
|
||||
public int getStackPopCount(AVM2Instruction ins, ABC abc) {
|
||||
int multinameIndex = ins.operands[0];
|
||||
if (abc.constants.getMultiname(multinameIndex).needsName()) {
|
||||
ret--;
|
||||
}
|
||||
if (abc.constants.getMultiname(multinameIndex).needsNs()) {
|
||||
ret--;
|
||||
}
|
||||
return ret;
|
||||
return ins.operands[1] + 1 + getMultinameRequiredStackSize(abc.constants, multinameIndex);
|
||||
}
|
||||
}
|
||||
|
||||
+8
-10
@@ -63,23 +63,21 @@ public class CallPropertyIns extends InstructionDefinition {
|
||||
for (int a = 0; a < argCount; a++) {
|
||||
args.add(0, stack.pop());
|
||||
}
|
||||
FullMultinameAVM2Item multiname = resolveMultiname(stack, constants, multinameIndex, ins);
|
||||
|
||||
FullMultinameAVM2Item multiname = resolveMultiname(stack, constants, multinameIndex, ins);
|
||||
GraphTargetItem receiver = stack.pop();
|
||||
|
||||
stack.push(new CallPropertyAVM2Item(ins, false, receiver, multiname, args));
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
int ret = -ins.operands[1] - 1 + 1;
|
||||
public int getStackPopCount(AVM2Instruction ins, ABC abc) {
|
||||
int multinameIndex = ins.operands[0];
|
||||
if (abc.constants.getMultiname(multinameIndex).needsName()) {
|
||||
ret--;
|
||||
}
|
||||
if (abc.constants.getMultiname(multinameIndex).needsNs()) {
|
||||
ret--;
|
||||
}
|
||||
return ret;
|
||||
return ins.operands[1] + 1 + getMultinameRequiredStackSize(abc.constants, multinameIndex);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackPushCount(AVM2Instruction ins, ABC abc) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
+7
-2
@@ -66,7 +66,12 @@ public class CallStaticIns extends InstructionDefinition {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
return -1 + 1 - ins.operands[1];
|
||||
public int getStackPopCount(AVM2Instruction ins, ABC abc) {
|
||||
return ins.operands[1] + 1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackPushCount(AVM2Instruction ins, ABC abc) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
+7
-9
@@ -70,15 +70,13 @@ public class CallSuperIns extends InstructionDefinition {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
int ret = -ins.operands[1] - 1 + 1;
|
||||
public int getStackPopCount(AVM2Instruction ins, ABC abc) {
|
||||
int multinameIndex = ins.operands[0];
|
||||
if (abc.constants.getMultiname(multinameIndex).needsName()) {
|
||||
ret--;
|
||||
}
|
||||
if (abc.constants.getMultiname(multinameIndex).needsNs()) {
|
||||
ret--;
|
||||
}
|
||||
return ret;
|
||||
return ins.operands[1] + 1 + getMultinameRequiredStackSize(abc.constants, multinameIndex);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackPushCount(AVM2Instruction ins, ABC abc) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
+2
-10
@@ -67,19 +67,11 @@ public class CallSuperVoidIns extends InstructionDefinition {
|
||||
GraphTargetItem receiver = stack.pop();
|
||||
|
||||
output.add(new CallSuperAVM2Item(ins, true, receiver, multiname, args));
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
int ret = -ins.operands[1] - 1;
|
||||
public int getStackPopCount(AVM2Instruction ins, ABC abc) {
|
||||
int multinameIndex = ins.operands[0];
|
||||
if (abc.constants.getMultiname(multinameIndex).needsName()) {
|
||||
ret--;
|
||||
}
|
||||
if (abc.constants.getMultiname(multinameIndex).needsNs()) {
|
||||
ret--;
|
||||
}
|
||||
return ret;
|
||||
return ins.operands[1] + 1 + getMultinameRequiredStackSize(abc.constants, multinameIndex);
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -54,7 +54,7 @@ public class IfEqIns extends InstructionDefinition implements IfTypeIns {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
return -2;
|
||||
public int getStackPopCount(AVM2Instruction ins, ABC abc) {
|
||||
return 2;
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -51,7 +51,7 @@ public class IfFalseIns extends InstructionDefinition implements IfTypeIns {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
return -1;
|
||||
public int getStackPopCount(AVM2Instruction ins, ABC abc) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -54,7 +54,7 @@ public class IfGeIns extends InstructionDefinition implements IfTypeIns {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
return -2;
|
||||
public int getStackPopCount(AVM2Instruction ins, ABC abc) {
|
||||
return 2;
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -54,7 +54,7 @@ public class IfGtIns extends InstructionDefinition implements IfTypeIns {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
return -2;
|
||||
public int getStackPopCount(AVM2Instruction ins, ABC abc) {
|
||||
return 2;
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -54,7 +54,7 @@ public class IfLeIns extends InstructionDefinition implements IfTypeIns {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
return -2;
|
||||
public int getStackPopCount(AVM2Instruction ins, ABC abc) {
|
||||
return 2;
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -54,7 +54,7 @@ public class IfLtIns extends InstructionDefinition implements IfTypeIns {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
return -2;
|
||||
public int getStackPopCount(AVM2Instruction ins, ABC abc) {
|
||||
return 2;
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -54,7 +54,7 @@ public class IfNGeIns extends InstructionDefinition implements IfTypeIns {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
return -2;
|
||||
public int getStackPopCount(AVM2Instruction ins, ABC abc) {
|
||||
return 2;
|
||||
}
|
||||
}
|
||||
|
||||
+1
-6
@@ -54,12 +54,7 @@ public class IfNGtIns extends InstructionDefinition implements IfTypeIns {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRequiredStackSize(AVM2Instruction ins) {
|
||||
public int getStackPopCount(AVM2Instruction ins, ABC abc) {
|
||||
return 2;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
return -2;
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -54,7 +54,7 @@ public class IfNLeIns extends InstructionDefinition implements IfTypeIns {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
return -2;
|
||||
public int getStackPopCount(AVM2Instruction ins, ABC abc) {
|
||||
return 2;
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -54,7 +54,7 @@ public class IfNLtIns extends InstructionDefinition implements IfTypeIns {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
return -2;
|
||||
public int getStackPopCount(AVM2Instruction ins, ABC abc) {
|
||||
return 2;
|
||||
}
|
||||
}
|
||||
|
||||
+1
-6
@@ -54,12 +54,7 @@ public class IfNeIns extends InstructionDefinition implements IfTypeIns {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRequiredStackSize(AVM2Instruction ins) {
|
||||
public int getStackPopCount(AVM2Instruction ins, ABC abc) {
|
||||
return 2;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
return -2;
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -54,7 +54,7 @@ public class IfStrictEqIns extends InstructionDefinition implements IfTypeIns {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
return -2;
|
||||
public int getStackPopCount(AVM2Instruction ins, ABC abc) {
|
||||
return 2;
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -54,7 +54,7 @@ public class IfStrictNeIns extends InstructionDefinition implements IfTypeIns {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
return -2;
|
||||
public int getStackPopCount(AVM2Instruction ins, ABC abc) {
|
||||
return 2;
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -50,7 +50,7 @@ public class IfTrueIns extends InstructionDefinition implements IfTypeIns {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
return -1;
|
||||
public int getStackPopCount(AVM2Instruction ins, ABC abc) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -44,7 +44,7 @@ public class LookupSwitchIns extends InstructionDefinition {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
return -1;
|
||||
public int getStackPopCount(AVM2Instruction ins, ABC abc) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
-1
@@ -72,6 +72,5 @@ public class DecLocalIIns extends InstructionDefinition {
|
||||
regAssignCount.put(regId, 0);
|
||||
}
|
||||
regAssignCount.put(regId, regAssignCount.get(regId) + 1);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -79,7 +79,7 @@ public abstract class GetLocalTypeIns extends InstructionDefinition {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
public int getStackPushCount(AVM2Instruction ins, ABC abc) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
+1
-6
@@ -125,7 +125,7 @@ public abstract class SetLocalTypeIns extends InstructionDefinition implements S
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRequiredStackSize(AVM2Instruction ins) {
|
||||
public int getStackPopCount(AVM2Instruction ins, ABC abc) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -134,10 +134,5 @@ public abstract class SetLocalTypeIns extends InstructionDefinition implements S
|
||||
return AVM2Item.localRegName(localRegNames, getRegisterId(ins));
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
public abstract int getRegisterId(AVM2Instruction ins);
|
||||
}
|
||||
|
||||
+7
-10
@@ -47,7 +47,6 @@ public class DeletePropertyIns extends InstructionDefinition {
|
||||
Object obj = lda.operandStack.pop();
|
||||
//push true if removed*/
|
||||
throw new RuntimeException("Cannot remove property");
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -60,15 +59,13 @@ public class DeletePropertyIns extends InstructionDefinition {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
int ret = -1 + 1;
|
||||
public int getStackPopCount(AVM2Instruction ins, ABC abc) {
|
||||
int multinameIndex = ins.operands[0];
|
||||
if (abc.constants.getMultiname(multinameIndex).needsName()) {
|
||||
ret--;
|
||||
}
|
||||
if (abc.constants.getMultiname(multinameIndex).needsNs()) {
|
||||
ret--;
|
||||
}
|
||||
return ret;
|
||||
return 1 + getMultinameRequiredStackSize(abc.constants, multinameIndex);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackPushCount(AVM2Instruction ins, ABC abc) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
+7
-9
@@ -56,15 +56,13 @@ public class FindPropertyIns extends InstructionDefinition {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
int ret = 1;
|
||||
public int getStackPopCount(AVM2Instruction ins, ABC abc) {
|
||||
int multinameIndex = ins.operands[0];
|
||||
if (abc.constants.getMultiname(multinameIndex).needsName()) {
|
||||
ret--;
|
||||
}
|
||||
if (abc.constants.getMultiname(multinameIndex).needsNs()) {
|
||||
ret--;
|
||||
}
|
||||
return ret;
|
||||
return getMultinameRequiredStackSize(abc.constants, multinameIndex);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackPushCount(AVM2Instruction ins, ABC abc) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
+7
-9
@@ -55,15 +55,13 @@ public class FindPropertyStrictIns extends InstructionDefinition {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
int ret = 1;
|
||||
public int getStackPopCount(AVM2Instruction ins, ABC abc) {
|
||||
int multinameIndex = ins.operands[0];
|
||||
if (abc.constants.getMultiname(multinameIndex).needsName()) {
|
||||
ret--;
|
||||
}
|
||||
if (abc.constants.getMultiname(multinameIndex).needsNs()) {
|
||||
ret--;
|
||||
}
|
||||
return ret;
|
||||
return getMultinameRequiredStackSize(abc.constants, multinameIndex);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackPushCount(AVM2Instruction ins, ABC abc) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
+7
-9
@@ -57,15 +57,13 @@ public class GetDescendantsIns extends InstructionDefinition {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
int ret = -1 + 1;
|
||||
public int getStackPopCount(AVM2Instruction ins, ABC abc) {
|
||||
int multinameIndex = ins.operands[0];
|
||||
if (abc.constants.getMultiname(multinameIndex).needsName()) {
|
||||
ret--;
|
||||
}
|
||||
if (abc.constants.getMultiname(multinameIndex).needsNs()) {
|
||||
ret--;
|
||||
}
|
||||
return ret;
|
||||
return 1 + getMultinameRequiredStackSize(abc.constants, multinameIndex);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackPushCount(AVM2Instruction ins, ABC abc) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -58,7 +58,7 @@ public class GetGlobalScopeIns extends InstructionDefinition {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
public int getStackPushCount(AVM2Instruction ins, ABC abc) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -62,7 +62,7 @@ public class GetGlobalSlotIns extends InstructionDefinition {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
public int getStackPushCount(AVM2Instruction ins, ABC abc) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -46,7 +46,7 @@ public class GetLexIns extends InstructionDefinition {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
public int getStackPushCount(AVM2Instruction ins, ABC abc) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
+4
-30
@@ -47,39 +47,13 @@ public class GetPropertyIns extends InstructionDefinition {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRequiredStackSize(AVM2Instruction ins) {
|
||||
int ret = 1;
|
||||
public int getStackPopCount(AVM2Instruction ins, ABC abc) {
|
||||
int multinameIndex = ins.operands[0];
|
||||
//Note: In official compiler, the stack can be wrong(greater) for some MULTINAMEL/A, e.g. increments
|
||||
/*
|
||||
var arr=[1,2,3];
|
||||
return arr[2]++;
|
||||
*/
|
||||
/* todo: honfika
|
||||
if (abc.constants.getMultiname(multinameIndex).needsName()) {
|
||||
ret--;
|
||||
}
|
||||
if (abc.constants.getMultiname(multinameIndex).needsNs()) {
|
||||
ret--;
|
||||
}*/
|
||||
return ret;
|
||||
return 1 + getMultinameRequiredStackSize(abc.constants, multinameIndex);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
int ret = -1 + 1;
|
||||
int multinameIndex = ins.operands[0];
|
||||
//Note: In official compiler, the stack can be wrong(greater) for some MULTINAMEL/A, e.g. increments
|
||||
/*
|
||||
var arr=[1,2,3];
|
||||
return arr[2]++;
|
||||
*/
|
||||
if (abc.constants.getMultiname(multinameIndex).needsName()) {
|
||||
ret--;
|
||||
}
|
||||
if (abc.constants.getMultiname(multinameIndex).needsNs()) {
|
||||
ret--;
|
||||
}
|
||||
return ret;
|
||||
public int getStackPushCount(AVM2Instruction ins, ABC abc) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -43,7 +43,7 @@ public class GetScopeObjectIns extends InstructionDefinition {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
public int getStackPushCount(AVM2Instruction ins, ABC abc) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
+7
-2
@@ -81,7 +81,12 @@ public class GetSlotIns extends InstructionDefinition {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
return -1 + 1;
|
||||
public int getStackPopCount(AVM2Instruction ins, ABC abc) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackPushCount(AVM2Instruction ins, ABC abc) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
+7
-9
@@ -47,15 +47,13 @@ public class GetSuperIns extends InstructionDefinition {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
int ret = -1 + 1;
|
||||
public int getStackPopCount(AVM2Instruction ins, ABC abc) {
|
||||
int multinameIndex = ins.operands[0];
|
||||
if (abc.constants.getMultiname(multinameIndex).needsName()) {
|
||||
ret--;
|
||||
}
|
||||
if (abc.constants.getMultiname(multinameIndex).needsNs()) {
|
||||
ret--;
|
||||
}
|
||||
return ret;
|
||||
return 1 + getMultinameRequiredStackSize(abc.constants, multinameIndex);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackPushCount(AVM2Instruction ins, ABC abc) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -47,7 +47,7 @@ public class HasNext2Ins extends InstructionDefinition {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
public int getStackPushCount(AVM2Instruction ins, ABC abc) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
+7
-2
@@ -46,7 +46,12 @@ public class HasNextIns extends InstructionDefinition {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
return -2 + 1;
|
||||
public int getStackPopCount(AVM2Instruction ins, ABC abc) {
|
||||
return 2;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackPushCount(AVM2Instruction ins, ABC abc) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
+7
-2
@@ -45,7 +45,12 @@ public class InIns extends InstructionDefinition {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
return -2 + 1;
|
||||
public int getStackPopCount(AVM2Instruction ins, ABC abc) {
|
||||
return 2;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackPushCount(AVM2Instruction ins, ABC abc) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
+2
-15
@@ -49,21 +49,8 @@ public class InitPropertyIns extends InstructionDefinition {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRequiredStackSize(AVM2Instruction ins) {
|
||||
return 2;
|
||||
// todo: honfika: add resolveMultiname stack size
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
int ret = -2;
|
||||
public int getStackPopCount(AVM2Instruction ins, ABC abc) {
|
||||
int multinameIndex = ins.operands[0];
|
||||
if (abc.constants.getMultiname(multinameIndex).needsName()) {
|
||||
ret--;
|
||||
}
|
||||
if (abc.constants.getMultiname(multinameIndex).needsNs()) {
|
||||
ret--;
|
||||
}
|
||||
return ret;
|
||||
return 2 + getMultinameRequiredStackSize(abc.constants, multinameIndex);
|
||||
}
|
||||
}
|
||||
|
||||
+7
-2
@@ -45,7 +45,12 @@ public class NextNameIns extends InstructionDefinition {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
return -2 + 1;
|
||||
public int getStackPopCount(AVM2Instruction ins, ABC abc) {
|
||||
return 2;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackPushCount(AVM2Instruction ins, ABC abc) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
+7
-2
@@ -45,7 +45,12 @@ public class NextValueIns extends InstructionDefinition {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
return -2 + 1;
|
||||
public int getStackPopCount(AVM2Instruction ins, ABC abc) {
|
||||
return 2;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackPushCount(AVM2Instruction ins, ABC abc) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -43,8 +43,8 @@ public class ReturnValueIns extends InstructionDefinition {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStackDelta(AVM2Instruction ins, ABC abc) {
|
||||
return -1;
|
||||
public int getStackPopCount(AVM2Instruction ins, ABC abc) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user