diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf3/ActionNextFrame.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf3/ActionNextFrame.java index 39a791332..f5e895da7 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf3/ActionNextFrame.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf3/ActionNextFrame.java @@ -49,6 +49,7 @@ public class ActionNextFrame extends Action { if (f < ((DisplayObject) lda.target).getTotalFrames()) { ((DisplayObject) lda.target).gotoFrame(f + 1); } + return true; } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf3/ActionPrevFrame.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf3/ActionPrevFrame.java index 73c5d088c..28f606ecd 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf3/ActionPrevFrame.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf3/ActionPrevFrame.java @@ -49,6 +49,7 @@ public class ActionPrevFrame extends Action { if (f > 1) { ((DisplayObject) lda.target).gotoFrame(f - 1); } + return true; } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf3/ActionSetTarget.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf3/ActionSetTarget.java index a040f962a..6538f50c3 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf3/ActionSetTarget.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf3/ActionSetTarget.java @@ -53,6 +53,7 @@ public class ActionSetTarget extends Action { lda.target = lda.stage; return true; } + lda.target = lda.stage.getMember(targetName); return true; } 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 5aa48898b..7c8ecd65e 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 { @Override public boolean execute(LocalDataArea lda) { - if (lda.stack.size() == 0) { + if (lda.stack.isEmpty()) { return false; } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionCall.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionCall.java index 08c750ae3..4a23c7a67 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionCall.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionCall.java @@ -50,7 +50,7 @@ public class ActionCall extends Action { @Override public boolean execute(LocalDataArea lda) { - if (lda.stack.size() == 0) { + if (lda.stack.isEmpty()) { return false; } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionCharToAscii.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionCharToAscii.java index e9a0ccdcd..39f2c2913 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionCharToAscii.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionCharToAscii.java @@ -45,7 +45,7 @@ public class ActionCharToAscii extends Action { @Override public boolean execute(LocalDataArea lda) { - if (lda.stack.size() == 0) { + if (lda.stack.isEmpty()) { return false; } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionCloneSprite.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionCloneSprite.java index a95623114..e6cdfcdce 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionCloneSprite.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionCloneSprite.java @@ -50,6 +50,7 @@ public class ActionCloneSprite extends Action { if (lda.stack.size() < 3) { return false; } + int depth = EcmaScript.toInt32(lda.stack.pop()); String source = EcmaScript.toString(lda.stack.pop()); String target = EcmaScript.toString(lda.stack.pop()); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionEndDrag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionEndDrag.java index 98ecab4e0..536131bfb 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionEndDrag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionEndDrag.java @@ -48,6 +48,7 @@ public class ActionEndDrag extends Action { if (lda.target instanceof DisplayObject) { ((DisplayObject) lda.target).stopDrag(); } + return true; } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionGetProperty.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionGetProperty.java index ea5ee5cae..425b9cc60 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionGetProperty.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionGetProperty.java @@ -52,6 +52,7 @@ public class ActionGetProperty extends Action { if (lda.stack.size() < 2) { return false; } + int index = EcmaScript.toInt32(lda.stack.pop()); String target = EcmaScript.toString(lda.stack.pop()); Object movieClip = lda.stage.getMember(target); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionGetURL2.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionGetURL2.java index 5b740ce2d..67e7bc024 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionGetURL2.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionGetURL2.java @@ -116,6 +116,7 @@ public class ActionGetURL2 extends Action { if (lda.stack.size() < 2) { return false; } + String target = EcmaScript.toString(lda.stack.pop()); String urlString = EcmaScript.toString(lda.stack.pop()); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionGetVariable.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionGetVariable.java index 2972db488..4aa95c874 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionGetVariable.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionGetVariable.java @@ -51,7 +51,7 @@ public class ActionGetVariable extends Action { @Override public boolean execute(LocalDataArea lda) { - if (lda.stack.size() == 0) { + if (lda.stack.isEmpty()) { return false; } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionGotoFrame2.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionGotoFrame2.java index b51eeb26a..a5167ef6b 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionGotoFrame2.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionGotoFrame2.java @@ -109,9 +109,10 @@ public class ActionGotoFrame2 extends Action { @Override public boolean execute(LocalDataArea lda) { - if (lda.stack.size() < 1) { + if (lda.stack.isEmpty()) { return false; } + String frame = EcmaScript.toString(lda.stack.pop()); String target = "/"; if (frame.contains(":")) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionIf.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionIf.java index e95769584..72aa993c9 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionIf.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionIf.java @@ -110,7 +110,7 @@ public class ActionIf extends Action { @Override public boolean execute(LocalDataArea lda) { - if (lda.stack.size() == 0) { + if (lda.stack.isEmpty()) { return false; } 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 8aedd2cb9..cd3f511c1 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 @@ -45,7 +45,7 @@ public class ActionMBAsciiToChar extends Action { @Override public boolean execute(LocalDataArea lda) { - if (lda.stack.size() == 0) { + if (lda.stack.isEmpty()) { return false; } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionMBCharToAscii.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionMBCharToAscii.java index 3c473f7c5..6f8d23679 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionMBCharToAscii.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionMBCharToAscii.java @@ -45,7 +45,7 @@ public class ActionMBCharToAscii extends Action { @Override public boolean execute(LocalDataArea lda) { - if (lda.stack.size() == 0) { + if (lda.stack.isEmpty()) { return false; } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionMBStringLength.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionMBStringLength.java index 60bda3611..2941b82cc 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionMBStringLength.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionMBStringLength.java @@ -45,7 +45,7 @@ public class ActionMBStringLength extends Action { @Override public boolean execute(LocalDataArea lda) { - if (lda.stack.size() == 0) { + if (lda.stack.isEmpty()) { return false; } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionNot.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionNot.java index 8d9ed0bdf..126a55cdc 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionNot.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionNot.java @@ -45,7 +45,7 @@ public class ActionNot extends Action { @Override public boolean execute(LocalDataArea lda) { - if (lda.stack.size() == 0) { + if (lda.stack.isEmpty()) { return false; } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionPop.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionPop.java index 51af6d475..8af92f17a 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionPop.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionPop.java @@ -42,6 +42,7 @@ public class ActionPop extends Action { if (lda.stack.isEmpty()) { return false; } + lda.stack.pop(); return true; } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionRandomNumber.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionRandomNumber.java index 1c81e46f4..8057c5359 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionRandomNumber.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionRandomNumber.java @@ -45,9 +45,10 @@ public class ActionRandomNumber extends Action { @Override public boolean execute(LocalDataArea lda) { - if (lda.stack.size() < 1) { + if (lda.stack.isEmpty()) { return false; } + lda.stack.push(RandomNumberActionItem.getResult(lda.pop())); return true; } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionRemoveSprite.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionRemoveSprite.java index 5f4a09ad9..125febd47 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionRemoveSprite.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionRemoveSprite.java @@ -49,6 +49,7 @@ public class ActionRemoveSprite extends Action { if (lda.stack.isEmpty()) { return false; } + String target = EcmaScript.toString(lda.stack.pop()); lda.stage.removeMember(target); return true; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionSetProperty.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionSetProperty.java index 318e9a974..9d9dec258 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionSetProperty.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionSetProperty.java @@ -59,6 +59,7 @@ public class ActionSetProperty extends Action { if (lda.stack.size() < 3) { return false; } + Object value = lda.pop(); int index = (int) (double) lda.popAsNumber(); String target = lda.popAsString(); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionSetTarget2.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionSetTarget2.java index 01fe53a7d..56f3b8716 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionSetTarget2.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionSetTarget2.java @@ -48,6 +48,7 @@ public class ActionSetTarget2 extends Action { if (lda.stack.isEmpty()) { return false; } + String target = lda.popAsString(); lda.target = lda.stage.getMember(target); return true; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionStartDrag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionStartDrag.java index 5f696f75e..7511cbece 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionStartDrag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionStartDrag.java @@ -50,6 +50,7 @@ public class ActionStartDrag extends Action { if (lda.target instanceof DisplayObject) { ((DisplayObject) lda.target).startDrag(); } + return true; } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionStringLength.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionStringLength.java index 39d4c9e36..dbaec7c7e 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionStringLength.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionStringLength.java @@ -45,7 +45,7 @@ public class ActionStringLength extends Action { @Override public boolean execute(LocalDataArea lda) { - if (lda.stack.size() == 0) { + if (lda.stack.isEmpty()) { return false; } 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 9bab2af69..59a3b453b 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 @@ -45,7 +45,7 @@ public class ActionToInteger extends Action { @Override public boolean execute(LocalDataArea lda) { - if (lda.stack.size() == 0) { + if (lda.stack.isEmpty()) { return false; } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionTrace.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionTrace.java index c254e4958..8eea965e6 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionTrace.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionTrace.java @@ -48,6 +48,7 @@ public class ActionTrace extends Action { if (lda.stack.isEmpty()) { return false; } + lda.stage.trace(lda.pop()); return true; } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionCallFunction.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionCallFunction.java index e0a2313d7..e99348720 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionCallFunction.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionCallFunction.java @@ -49,19 +49,20 @@ public class ActionCallFunction extends Action { @Override public boolean execute(LocalDataArea lda) { - String functionName = lda.popAsString(); int numArgs = (int) (double) lda.popAsNumber(); List args = new ArrayList<>(); for (int i = 0; i < numArgs; i++) { args.add(lda.pop()); } + for (ActionScriptFunction f : lda.functions) { if (functionName.equals(f.getFunctionName())) { lda.stack.push(lda.stage.callFunction(f.getFunctionOffset(), f.getFunctionLength(), args, f.getFuncRegNames(), Undefined.INSTANCE /*?*/)); return true; } } + return true; } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionCallMethod.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionCallMethod.java index edef5ce7d..70f317b77 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionCallMethod.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionCallMethod.java @@ -51,6 +51,7 @@ public class ActionCallMethod extends Action { if (lda.stack.size() < 3) { return false; } + String methodName = lda.popAsString(); Object obj0 = lda.pop(); if (!(obj0 instanceof ActionScriptObject)) { @@ -62,6 +63,7 @@ public class ActionCallMethod extends Action { if (lda.stack.size() < numArgs) { return false; } + List args = new ArrayList<>(); for (int i = 0; i < numArgs; i++) { args.add(lda.pop()); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionDecrement.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionDecrement.java index a4f990cb7..07b69e527 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionDecrement.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionDecrement.java @@ -45,7 +45,7 @@ public class ActionDecrement extends Action { @Override public boolean execute(LocalDataArea lda) { - if (lda.stack.size() == 0) { + if (lda.stack.isEmpty()) { return false; } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionDelete2.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionDelete2.java index c1b1faa1e..2b3fb3b17 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionDelete2.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionDelete2.java @@ -47,11 +47,16 @@ public class ActionDelete2 extends Action { @Override public boolean execute(LocalDataArea lda) { + if (lda.stack.isEmpty()) { + return false; + } + String memberName = lda.popAsString(); Object o = lda.target; //should be current scope if (o instanceof ActionScriptObject) { ((ActionScriptObject) o).setMember(memberName, Undefined.INSTANCE); } + return true; } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionEnumerate.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionEnumerate.java index 1185ff5a8..b1b53d846 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionEnumerate.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionEnumerate.java @@ -50,6 +50,7 @@ public class ActionEnumerate extends Action { if (lda.stack.isEmpty()) { return false; } + String objectName = lda.popAsString(); lda.stack.push(Null.INSTANCE); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionGetMember.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionGetMember.java index a58124c21..8afc8470e 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionGetMember.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionGetMember.java @@ -50,6 +50,7 @@ public class ActionGetMember extends Action { if (lda.stack.size() < 2) { return false; } + String membername = lda.popAsString(); Object obj = lda.pop(); if (obj instanceof ActionScriptObject) { @@ -57,6 +58,7 @@ public class ActionGetMember extends Action { } else { lda.stack.push(Undefined.INSTANCE); } + return true; } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionIncrement.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionIncrement.java index 276f238d4..dff7a7f18 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionIncrement.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionIncrement.java @@ -45,7 +45,7 @@ public class ActionIncrement extends Action { @Override public boolean execute(LocalDataArea lda) { - if (lda.stack.size() == 0) { + if (lda.stack.isEmpty()) { return false; } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionInitArray.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionInitArray.java index 909f22b08..33bf882df 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionInitArray.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionInitArray.java @@ -45,14 +45,17 @@ public class ActionInitArray extends Action { if (lda.stack.isEmpty()) { return false; } + int num = (int) (double) lda.popAsNumber(); if (lda.stack.size() < num) { return false; } + ActionScriptArray arr = new ActionScriptArray(); for (int i = 0; i < num; i++) { arr.setValueAtIndex(i, lda.stack.pop()); } + lda.stack.push(arr); return true; } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionInitObject.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionInitObject.java index 268916cca..c991ac8ca 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionInitObject.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionInitObject.java @@ -50,16 +50,19 @@ public class ActionInitObject extends Action { if (lda.stack.isEmpty()) { return false; } + int num = (int) (double) (Double) lda.popAsNumber(); if (lda.stack.size() < 2 * num) { return false; } + ActionScriptObject obj = new ActionScriptObject(); for (int i = 0; i < num; i++) { Object val = lda.pop(); String name = lda.popAsString(); obj.setMember(name, val); } + lda.stack.push(obj); return true; } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionNewMethod.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionNewMethod.java index bac787fae..2859a77ff 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionNewMethod.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionNewMethod.java @@ -51,16 +51,19 @@ public class ActionNewMethod extends Action { if (lda.stack.size() < 3) { return false; } + String methodName = lda.popAsString(); ActionScriptObject obj = (ActionScriptObject) lda.pop(); int numArgs = (int) (double) lda.popAsNumber(); if (lda.stack.size() < numArgs) { return false; } + List args = new ArrayList<>(); for (int i = 0; i < numArgs; i++) { args.add(lda.pop()); } + ActionScriptObject nobj = new ActionScriptObject(); ActionScriptFunction f = (ActionScriptFunction) obj.getMember(methodName); lda.stage.callFunction(f.getFunctionOffset(), f.getFunctionLength(), args, f.getFuncRegNames(), nobj); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionNewObject.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionNewObject.java index 0fd5b777d..3663e6c3a 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionNewObject.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionNewObject.java @@ -18,7 +18,6 @@ package com.jpexs.decompiler.flash.action.swf5; import com.jpexs.decompiler.flash.BaseLocalData; import com.jpexs.decompiler.flash.action.Action; -import com.jpexs.decompiler.flash.action.ActionScriptFunction; import com.jpexs.decompiler.flash.action.ActionScriptObject; import com.jpexs.decompiler.flash.action.LocalDataArea; import com.jpexs.decompiler.flash.action.model.NewObjectActionItem; @@ -51,19 +50,22 @@ public class ActionNewObject extends Action { if (lda.stack.size() < 2) { return false; } + String objectName = lda.popAsString(); int numArgs = (int) (double) (Double) lda.popAsNumber(); if (lda.stack.size() < numArgs) { return false; } + List args = new ArrayList<>(); for (int i = 0; i < numArgs; i++) { args.add(lda.stack.pop()); } + ActionScriptObject obj = new ActionScriptObject(); - //TODO:check type + //TODO:check type /*ActionScriptFunction constructor = (ActionScriptFunction) lda.stage.getMember(objectName); - lda.stage.callFunction(constructor.getFunctionOffset(), constructor.getFunctionLength(), args, constructor.getFuncRegNames(), obj); + lda.stage.callFunction(constructor.getFunctionOffset(), constructor.getFunctionLength(), args, constructor.getFuncRegNames(), obj); */ lda.stack.push(obj); return true; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionPushDuplicate.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionPushDuplicate.java index a966786b6..ba02a1ee4 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionPushDuplicate.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionPushDuplicate.java @@ -46,7 +46,7 @@ public class ActionPushDuplicate extends Action { @Override public boolean execute(LocalDataArea lda) { - if (lda.stack.size() == 0) { + if (lda.stack.isEmpty()) { return false; } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionReturn.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionReturn.java index 31d7e70ee..ce9aeb0a3 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionReturn.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionReturn.java @@ -45,7 +45,7 @@ public class ActionReturn extends Action { @Override public boolean execute(LocalDataArea lda) { - if (lda.stack.size() == 0) { + if (lda.stack.isEmpty()) { //lda.returnValue = Undefined.INSTANCE; return false; } else { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionSetMember.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionSetMember.java index 65b6cbaf7..011c8cb05 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionSetMember.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionSetMember.java @@ -58,12 +58,14 @@ public class ActionSetMember extends Action { if (lda.stack.size() < 3) { return false; } + Object value = lda.pop(); String memberName = lda.popAsString(); Object obj = lda.pop(); if (obj instanceof ActionScriptObject) { ((ActionScriptObject) obj).setMember(memberName, value); } + return true; } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionTargetPath.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionTargetPath.java index 077e7f7cd..0bc2fb707 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionTargetPath.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionTargetPath.java @@ -49,6 +49,7 @@ public class ActionTargetPath extends Action { if (lda.stack.isEmpty()) { return false; } + Object obj = lda.pop(); String path = lda.stage.getMemberPath(obj); @@ -57,6 +58,7 @@ public class ActionTargetPath extends Action { } else { lda.stack.push(path); } + return true; } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionToNumber.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionToNumber.java index 946598ae8..b794b5d69 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionToNumber.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionToNumber.java @@ -45,7 +45,7 @@ public class ActionToNumber extends Action { @Override public boolean execute(LocalDataArea lda) { - if (lda.stack.size() == 0) { + if (lda.stack.isEmpty()) { return false; } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionToString.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionToString.java index ced47875e..969e99c9c 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionToString.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionToString.java @@ -45,7 +45,7 @@ public class ActionToString extends Action { @Override public boolean execute(LocalDataArea lda) { - if (lda.stack.size() == 0) { + if (lda.stack.isEmpty()) { return false; } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionTypeOf.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionTypeOf.java index 406087adc..bdfd1724d 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionTypeOf.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionTypeOf.java @@ -45,7 +45,7 @@ public class ActionTypeOf extends Action { @Override public boolean execute(LocalDataArea lda) { - if (lda.stack.size() == 0) { + if (lda.stack.isEmpty()) { return false; } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionWith.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionWith.java index 85976d82a..90034cdc3 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionWith.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionWith.java @@ -59,6 +59,7 @@ public class ActionWith extends Action implements GraphSourceItemContainer { if (lda.stack.isEmpty()) { return false; } + ActionScriptObject obj = (ActionScriptObject) lda.pop(); ActionScriptWith w = new ActionScriptWith(obj, fileOffset, codeSize); lda.withs.add(w); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf6/ActionEnumerate2.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf6/ActionEnumerate2.java index 667f1ff36..060d1678d 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf6/ActionEnumerate2.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf6/ActionEnumerate2.java @@ -61,6 +61,7 @@ public class ActionEnumerate2 extends Action { if (lda.stack.isEmpty()) { return false; } + Object o = lda.pop(); lda.stack.push(Null.INSTANCE); @@ -70,6 +71,7 @@ public class ActionEnumerate2 extends Action { lda.stack.push(m); } } + return true; } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf6/ActionInstanceOf.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf6/ActionInstanceOf.java index 1d62cda1e..eb1bd9112 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf6/ActionInstanceOf.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf6/ActionInstanceOf.java @@ -72,6 +72,7 @@ public class ActionInstanceOf extends Action { if (lda.stack.size() < 2) { return false; } + Object type = lda.stack.pop(); Object obj = lda.stack.pop(); if (getInstanceOfResult(obj, type)) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf7/ActionCastOp.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf7/ActionCastOp.java index 4227b2133..79140eb61 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf7/ActionCastOp.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf7/ActionCastOp.java @@ -51,6 +51,7 @@ public class ActionCastOp extends Action { if (lda.stack.size() < 2) { return false; } + ActionScriptObject obj = (ActionScriptObject) lda.pop(); ActionScriptObject constr = (ActionScriptObject) lda.pop(); if (ActionInstanceOf.getInstanceOfResult(obj, constr)) { @@ -58,6 +59,7 @@ public class ActionCastOp extends Action { } else { lda.stack.push(Null.INSTANCE); } + return true; } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf7/ActionExtends.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf7/ActionExtends.java index 78ddb57ff..ecdc5aacb 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf7/ActionExtends.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf7/ActionExtends.java @@ -49,6 +49,7 @@ public class ActionExtends extends Action { if (lda.stack.size() < 2) { return false; } + //TODO: check if its really ActionScriptObject ? ActionScriptObject superClass = (ActionScriptObject) lda.pop(); ActionScriptObject subClass = (ActionScriptObject) lda.pop(); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf7/ActionImplementsOp.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf7/ActionImplementsOp.java index c23a56fee..ffa907710 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf7/ActionImplementsOp.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf7/ActionImplementsOp.java @@ -50,6 +50,7 @@ public class ActionImplementsOp extends Action { if (lda.stack.size() < 2) { return false; } + //TODO: check if its really scriptobject? ActionScriptObject obj = (ActionScriptObject) lda.pop(); int num = (int) (double) lda.popAsNumber(); @@ -57,9 +58,11 @@ public class ActionImplementsOp extends Action { if (lda.stack.size() < num) { return false; } + for (int i = 0; i < num; i++) { interfaces.add(lda.stack.pop()); } + obj.setImplementsObjs(interfaces); return true; }