From 4d2fd1383b4d5a14c15838fdd10192b81e6bc492 Mon Sep 17 00:00:00 2001 From: "honfika@gmail.com" Date: Wed, 18 Nov 2015 10:42:51 +0100 Subject: [PATCH] AS2 execution fixes --- .../flash/abc/avm2/instructions/types/CoerceSIns.java | 3 ++- .../flash/abc/avm2/instructions/types/ConvertSIns.java | 3 ++- .../flash/abc/avm2/instructions/xml/EscXAttrIns.java | 5 +++-- .../flash/abc/avm2/instructions/xml/EscXElemIns.java | 5 +++-- .../flash/action/model/AsciiToCharActionItem.java | 7 ++++--- .../flash/action/model/MBAsciiToCharActionItem.java | 7 ++++--- .../flash/action/model/ToIntegerActionItem.java | 7 ++++--- .../flash/action/model/operations/BitAndActionItem.java | 7 ++++--- .../flash/action/model/operations/BitOrActionItem.java | 7 ++++--- .../flash/action/model/operations/BitXorActionItem.java | 7 ++++--- .../flash/action/model/operations/EqActionItem.java | 2 +- .../flash/action/model/operations/LShiftActionItem.java | 7 ++++--- .../flash/action/model/operations/NeqActionItem.java | 2 +- .../flash/action/model/operations/RShiftActionItem.java | 9 +++++---- .../action/model/operations/StrictEqActionItem.java | 3 +-- .../action/model/operations/StrictNeqActionItem.java | 3 +-- .../decompiler/flash/action/swf4/ActionAsciiToChar.java | 2 +- .../flash/action/swf4/ActionMBAsciiToChar.java | 2 +- .../jpexs/decompiler/flash/action/swf4/ActionPush.java | 8 ++++++++ .../decompiler/flash/action/swf4/ActionToInteger.java | 2 +- .../jpexs/decompiler/flash/action/swf5/ActionBitAnd.java | 2 +- .../decompiler/flash/action/swf5/ActionBitLShift.java | 2 +- .../jpexs/decompiler/flash/action/swf5/ActionBitOr.java | 2 +- .../decompiler/flash/action/swf5/ActionBitRShift.java | 2 +- .../jpexs/decompiler/flash/action/swf5/ActionBitXor.java | 2 +- 25 files changed, 63 insertions(+), 45 deletions(-) diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/types/CoerceSIns.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/types/CoerceSIns.java index a16f49eb7..4b239da1d 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/types/CoerceSIns.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/types/CoerceSIns.java @@ -23,6 +23,7 @@ import com.jpexs.decompiler.flash.abc.avm2.LocalDataArea; 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.model.CoerceAVM2Item; +import com.jpexs.decompiler.flash.ecma.EcmaScript; import com.jpexs.decompiler.flash.ecma.Null; import com.jpexs.decompiler.flash.ecma.Undefined; import com.jpexs.decompiler.graph.DottedChain; @@ -47,7 +48,7 @@ public class CoerceSIns extends InstructionDefinition implements CoerceOrConvert if (value == Null.INSTANCE) { lda.operandStack.push(value); } else { - lda.operandStack.push(value.toString()); + lda.operandStack.push(EcmaScript.toString(value)); } return true; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/types/ConvertSIns.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/types/ConvertSIns.java index c5bfdecc4..7e7980946 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/types/ConvertSIns.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/types/ConvertSIns.java @@ -23,6 +23,7 @@ import com.jpexs.decompiler.flash.abc.avm2.LocalDataArea; 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.model.ConvertAVM2Item; +import com.jpexs.decompiler.flash.ecma.EcmaScript; import com.jpexs.decompiler.graph.DottedChain; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.TranslateStack; @@ -38,7 +39,7 @@ public class ConvertSIns extends InstructionDefinition implements CoerceOrConver @Override public boolean execute(LocalDataArea lda, AVM2ConstantPool constants, AVM2Instruction ins) { Object obj = lda.operandStack.pop(); - lda.operandStack.push(obj.toString()); + lda.operandStack.push(EcmaScript.toString(obj)); return true; } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/xml/EscXAttrIns.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/xml/EscXAttrIns.java index aa84db229..2adfd9433 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/xml/EscXAttrIns.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/xml/EscXAttrIns.java @@ -23,6 +23,7 @@ import com.jpexs.decompiler.flash.abc.avm2.LocalDataArea; 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.model.EscapeXAttrAVM2Item; +import com.jpexs.decompiler.flash.ecma.EcmaScript; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.TranslateStack; import java.util.List; @@ -35,8 +36,8 @@ public class EscXAttrIns extends InstructionDefinition { @Override public boolean execute(LocalDataArea lda, AVM2ConstantPool constants, AVM2Instruction ins) { - String s = lda.operandStack.pop().toString(); - //escape + String s = EcmaScript.toString(lda.operandStack.pop()); + // todo: escape lda.operandStack.push(s); return true; } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/xml/EscXElemIns.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/xml/EscXElemIns.java index 626dc4d91..e8b4e0120 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/xml/EscXElemIns.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/xml/EscXElemIns.java @@ -23,6 +23,7 @@ import com.jpexs.decompiler.flash.abc.avm2.LocalDataArea; 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.model.EscapeXElemAVM2Item; +import com.jpexs.decompiler.flash.ecma.EcmaScript; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.TranslateStack; import java.util.List; @@ -35,8 +36,8 @@ public class EscXElemIns extends InstructionDefinition { @Override public boolean execute(LocalDataArea lda, AVM2ConstantPool constants, AVM2Instruction ins) { - String s = lda.operandStack.pop().toString(); - //escape + String s = EcmaScript.toString(lda.operandStack.pop()); + // todo: escape lda.operandStack.push(s); return true; } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/AsciiToCharActionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/AsciiToCharActionItem.java index a41df4917..12de23eb8 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/AsciiToCharActionItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/AsciiToCharActionItem.java @@ -18,6 +18,7 @@ package com.jpexs.decompiler.flash.action.model; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; import com.jpexs.decompiler.flash.action.swf4.ActionAsciiToChar; +import com.jpexs.decompiler.flash.ecma.EcmaScript; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.CompilationException; import com.jpexs.decompiler.graph.GraphSourceItem; @@ -51,11 +52,11 @@ public class AsciiToCharActionItem extends ActionItem { @Override public Object getResult() { - return getResult(value.getResultAsNumber()); + return getResult(value.getResult()); } - public static String getResult(Double ascii) { - int res = (int) (double) ascii; + public static String getResult(Object ascii) { + int res = (char) EcmaScript.toInt32(ascii); if (res == 0) { return ""; } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/MBAsciiToCharActionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/MBAsciiToCharActionItem.java index cb14919bd..a002422bf 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/MBAsciiToCharActionItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/MBAsciiToCharActionItem.java @@ -18,6 +18,7 @@ package com.jpexs.decompiler.flash.action.model; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; import com.jpexs.decompiler.flash.action.swf4.ActionMBAsciiToChar; +import com.jpexs.decompiler.flash.ecma.EcmaScript; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.CompilationException; import com.jpexs.decompiler.graph.GraphSourceItem; @@ -51,11 +52,11 @@ public class MBAsciiToCharActionItem extends ActionItem { @Override public Object getResult() { - return getResult(value.getResultAsNumber()); + return getResult(value.getResult()); } - public static String getResult(Double ascii) { - int res = (int) (double) ascii; + public static String getResult(Object ascii) { + int res = (char) EcmaScript.toInt32(ascii); if (res == 0) { return ""; } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/ToIntegerActionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/ToIntegerActionItem.java index 6ccac07ff..722942ed3 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/ToIntegerActionItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/ToIntegerActionItem.java @@ -18,6 +18,7 @@ package com.jpexs.decompiler.flash.action.model; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; import com.jpexs.decompiler.flash.action.swf4.ActionToInteger; +import com.jpexs.decompiler.flash.ecma.EcmaScript; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.CompilationException; import com.jpexs.decompiler.graph.GraphSourceItem; @@ -51,11 +52,11 @@ public class ToIntegerActionItem extends ActionItem { @Override public Object getResult() { - return getResult(value.getResultAsNumber()); + return getResult(value.getResult()); } - public static long getResult(Double num) { - return Math.round(num); + public static long getResult(Object num) { + return EcmaScript.toInt32(num); } @Override diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/operations/BitAndActionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/operations/BitAndActionItem.java index 33af0fbaf..6e95586cb 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/operations/BitAndActionItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/operations/BitAndActionItem.java @@ -18,6 +18,7 @@ package com.jpexs.decompiler.flash.action.model.operations; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; import com.jpexs.decompiler.flash.action.swf5.ActionBitAnd; +import com.jpexs.decompiler.flash.ecma.EcmaScript; import com.jpexs.decompiler.graph.CompilationException; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; @@ -34,11 +35,11 @@ public class BitAndActionItem extends BinaryOpItem { @Override public Object getResult() { - return getResult(rightSide.getResultAsNumber(), leftSide.getResultAsNumber()); + return getResult(rightSide.getResult(), leftSide.getResult()); } - public static long getResult(Double rightResult, Double leftResult) { - return ((long) (double) leftResult) & ((long) (double) rightResult); + public static long getResult(Object rightResult, Object leftResult) { + return EcmaScript.toInt32(leftResult) & EcmaScript.toInt32(rightResult); } @Override diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/operations/BitOrActionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/operations/BitOrActionItem.java index 9f93388e0..b9a70584b 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/operations/BitOrActionItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/operations/BitOrActionItem.java @@ -18,6 +18,7 @@ package com.jpexs.decompiler.flash.action.model.operations; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; import com.jpexs.decompiler.flash.action.swf5.ActionBitOr; +import com.jpexs.decompiler.flash.ecma.EcmaScript; import com.jpexs.decompiler.graph.CompilationException; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; @@ -34,11 +35,11 @@ public class BitOrActionItem extends BinaryOpItem { @Override public Object getResult() { - return getResult(rightSide.getResultAsNumber(), leftSide.getResultAsNumber()); + return getResult(rightSide.getResult(), leftSide.getResult()); } - public static long getResult(Double rightResult, Double leftResult) { - return ((long) (double) leftResult) | ((long) (double) rightResult); + public static long getResult(Object rightResult, Object leftResult) { + return EcmaScript.toInt32(leftResult) | EcmaScript.toInt32(rightResult); } @Override diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/operations/BitXorActionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/operations/BitXorActionItem.java index 274dd1e5c..798377e9f 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/operations/BitXorActionItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/operations/BitXorActionItem.java @@ -19,6 +19,7 @@ package com.jpexs.decompiler.flash.action.model.operations; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; import com.jpexs.decompiler.flash.action.model.DirectValueActionItem; import com.jpexs.decompiler.flash.action.swf5.ActionBitXor; +import com.jpexs.decompiler.flash.ecma.EcmaScript; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.CompilationException; import com.jpexs.decompiler.graph.GraphSourceItem; @@ -37,11 +38,11 @@ public class BitXorActionItem extends BinaryOpItem { @Override public Object getResult() { - return getResult(rightSide.getResultAsNumber(), leftSide.getResultAsNumber()); + return getResult(rightSide.getResult(), leftSide.getResult()); } - public static long getResult(Double rightResult, Double leftResult) { - return ((long) (double) leftResult) ^ ((long) (double) rightResult); + public static long getResult(Object rightResult, Object leftResult) { + return EcmaScript.toInt32(leftResult) ^ EcmaScript.toInt32(rightResult); } @Override diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/operations/EqActionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/operations/EqActionItem.java index e51f4be62..29b6ff898 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/operations/EqActionItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/operations/EqActionItem.java @@ -46,7 +46,7 @@ public class EqActionItem extends BinaryOpItem implements LogicalOpItem, EqualsT public static Boolean getResult(Object rightResult, Object leftResult, boolean version2) { if (version2) { - return EcmaScript.equals(leftResult, rightResult); + return EcmaScript.equals(true, leftResult, rightResult); } else { //For SWF 4 and older, it should return 1 or 0 return (Action.toFloatPoint(leftResult) == Action.toFloatPoint(rightResult)); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/operations/LShiftActionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/operations/LShiftActionItem.java index 902e90a3d..c938b861e 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/operations/LShiftActionItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/operations/LShiftActionItem.java @@ -18,6 +18,7 @@ package com.jpexs.decompiler.flash.action.model.operations; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; import com.jpexs.decompiler.flash.action.swf5.ActionBitLShift; +import com.jpexs.decompiler.flash.ecma.EcmaScript; import com.jpexs.decompiler.graph.CompilationException; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; @@ -34,11 +35,11 @@ public class LShiftActionItem extends BinaryOpItem { @Override public Object getResult() { - return getResult(rightSide.getResultAsNumber(), leftSide.getResultAsNumber()); + return getResult(rightSide.getResult(), leftSide.getResult()); } - public static int getResult(Double rightResult, Double leftResult) { - return ((int) (double) leftResult) << ((int) (double) rightResult); + public static int getResult(Object rightResult, Object leftResult) { + return EcmaScript.toInt32(leftResult) << EcmaScript.toInt32(rightResult); } @Override diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/operations/NeqActionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/operations/NeqActionItem.java index 15f7b0be1..d712f32b3 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/operations/NeqActionItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/operations/NeqActionItem.java @@ -42,7 +42,7 @@ public class NeqActionItem extends BinaryOpItem implements LogicalOpItem, Invert @Override public Object getResult() { if (version2) { - return !EcmaScript.equals(leftSide.getResult(), rightSide.getResult()); + return !EcmaScript.equals(true, leftSide.getResult(), rightSide.getResult()); } else { //For SWF 4 and older, it should return 1 or 0 return (Action.toFloatPoint(leftSide.getResult()) != Action.toFloatPoint(rightSide.getResult())); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/operations/RShiftActionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/operations/RShiftActionItem.java index 74f233633..57abf6491 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/operations/RShiftActionItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/operations/RShiftActionItem.java @@ -18,6 +18,7 @@ package com.jpexs.decompiler.flash.action.model.operations; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; import com.jpexs.decompiler.flash.action.swf5.ActionBitRShift; +import com.jpexs.decompiler.flash.ecma.EcmaScript; import com.jpexs.decompiler.graph.CompilationException; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; @@ -34,12 +35,12 @@ public class RShiftActionItem extends BinaryOpItem { @Override public Object getResult() { - return getResult(rightSide.getResultAsNumber(), leftSide.getResultAsNumber()); + return getResult(rightSide.getResult(), leftSide.getResult()); } - public static long getResult(Double rightResult, Double leftResult) { - long rightResult2 = ((long) (double) rightResult) & 0x1f; - return ((long) (double) leftResult) >> rightResult2; + public static long getResult(Object rightResult, Object leftResult) { + long rightResult2 = EcmaScript.toInt32(rightResult) & 0x1f; + return EcmaScript.toInt32(leftResult) >> rightResult2; } @Override diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/operations/StrictEqActionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/operations/StrictEqActionItem.java index 6bf67ae99..6ce55e972 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/operations/StrictEqActionItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/operations/StrictEqActionItem.java @@ -43,8 +43,7 @@ public class StrictEqActionItem extends BinaryOpItem implements LogicalOpItem, I public static boolean getResult(Object rightResult, Object leftResult) { Object x = leftResult; Object y = rightResult; - return EcmaScript.type(x) == EcmaScript.type(y) - && EcmaScript.equals(x, y); + return EcmaScript.strictEquals(true, x, y); } @Override diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/operations/StrictNeqActionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/operations/StrictNeqActionItem.java index 817c6a4b3..c795148cb 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/operations/StrictNeqActionItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/operations/StrictNeqActionItem.java @@ -39,8 +39,7 @@ public class StrictNeqActionItem extends BinaryOpItem implements LogicalOpItem, public Object getResult() { Object x = leftSide.getResult(); Object y = rightSide.getResult(); - return EcmaScript.type(x) != EcmaScript.type(y) - || (!EcmaScript.equals(x, y)); + return !EcmaScript.strictEquals(true, x, y); } @Override diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionAsciiToChar.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionAsciiToChar.java index 2f7e8ce38..6ad6a64b8 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionAsciiToChar.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionAsciiToChar.java @@ -45,7 +45,7 @@ public class ActionAsciiToChar extends Action { return false; } - lda.stack.push(AsciiToCharActionItem.getResult(lda.popAsNumber())); + lda.stack.push(AsciiToCharActionItem.getResult(lda.pop())); return true; } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionMBAsciiToChar.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionMBAsciiToChar.java index 3d0213865..fa0829056 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionMBAsciiToChar.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionMBAsciiToChar.java @@ -44,7 +44,7 @@ public class ActionMBAsciiToChar extends Action { return false; } - lda.stack.push(MBAsciiToCharActionItem.getResult(lda.popAsNumber())); + lda.stack.push(MBAsciiToCharActionItem.getResult(lda.pop())); return true; } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionPush.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionPush.java index f256685b4..64fc253ff 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionPush.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionPush.java @@ -46,6 +46,7 @@ import com.jpexs.helpers.Helper; import com.jpexs.helpers.utf8.Utf8Helper; import java.io.IOException; import java.util.ArrayList; +import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Set; @@ -254,6 +255,13 @@ public class ActionPush extends Action { updateLength(); } + public ActionPush(Object[] values) { + super(0x96, 0); + this.values = new ArrayList<>(); + this.values.addAll(Arrays.asList(values)); + updateLength(); + } + public ActionPush(FlasmLexer lexer, List constantPool) throws IOException, ActionParseException { super(0x96, 0); this.constantPool = constantPool; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionToInteger.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionToInteger.java index c3dcd8b0c..cdfce0a51 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionToInteger.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionToInteger.java @@ -44,7 +44,7 @@ public class ActionToInteger extends Action { return false; } - lda.stack.push(ToIntegerActionItem.getResult(lda.popAsNumber())); + lda.stack.push(ToIntegerActionItem.getResult(lda.pop())); return true; } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionBitAnd.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionBitAnd.java index 0a2505c44..0ba4451fc 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionBitAnd.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionBitAnd.java @@ -44,7 +44,7 @@ public class ActionBitAnd extends Action { return false; } - lda.stack.push(BitAndActionItem.getResult(lda.popAsNumber(), lda.popAsNumber())); + lda.stack.push(BitAndActionItem.getResult(lda.pop(), lda.pop())); return true; } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionBitLShift.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionBitLShift.java index bc1a4649a..cbd0c2d96 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionBitLShift.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionBitLShift.java @@ -44,7 +44,7 @@ public class ActionBitLShift extends Action { return false; } - lda.stack.push(LShiftActionItem.getResult(lda.popAsNumber(), lda.popAsNumber())); + lda.stack.push(LShiftActionItem.getResult(lda.pop(), lda.pop())); return true; } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionBitOr.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionBitOr.java index aff79e988..a717ecc05 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionBitOr.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionBitOr.java @@ -44,7 +44,7 @@ public class ActionBitOr extends Action { return false; } - lda.stack.push(BitOrActionItem.getResult(lda.popAsNumber(), lda.popAsNumber())); + lda.stack.push(BitOrActionItem.getResult(lda.pop(), lda.pop())); return true; } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionBitRShift.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionBitRShift.java index 90fd8387c..663aca3e3 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionBitRShift.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionBitRShift.java @@ -44,7 +44,7 @@ public class ActionBitRShift extends Action { return false; } - lda.stack.push(RShiftActionItem.getResult(lda.popAsNumber(), lda.popAsNumber())); + lda.stack.push(RShiftActionItem.getResult(lda.pop(), lda.pop())); return true; } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionBitXor.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionBitXor.java index 8d31521fa..6f6c3093b 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionBitXor.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionBitXor.java @@ -44,7 +44,7 @@ public class ActionBitXor extends Action { return false; } - lda.stack.push(BitXorActionItem.getResult(lda.popAsNumber(), lda.popAsNumber())); + lda.stack.push(BitXorActionItem.getResult(lda.pop(), lda.pop())); return true; }