From 65a47bbda36a80e2515882ee27891e5ec3bf7974 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Sat, 7 Mar 2026 19:04:52 +0100 Subject: [PATCH] test: add as2 direct edit test (+ expected folder for it) --- .../ActionScript2DirectEditingPCodeTest.java | 141 ++ .../AS2DirectEditingPCodeGenerator.java | 103 ++ libsrc/ffdec_lib/testdata/as2/as2.swf | Bin 110002 -> 110369 bytes .../as2/com/jpexs/flash/test/TestLoader.as | 4 +- .../test/testcases/TestSuper2SetterGetter.as | 12 + .../test/testcases/TestSuperSetterGetter.as | 44 + .../ffdec_lib/testexpected/as2/Blue Symbol.as | 9 + .../BUTTONCONDACTION on(press).as | 2 + .../as2/DefineSprite_15/frame_1/DoAction.as | 2 + .../DefineSprite_15/frame_1/DoAction[2].as | 2 + .../frame_1/DoAction.as | 0 .../as2/DefineSprite_4/frame_1/DoAction.as | 0 .../as2/DefineSprite_53/frame_1/DoAction.as | 0 .../as2/DefineSprite_6/frame_1/DoAction.as | 0 .../testexpected/as2/DoInitAction.as | 2 + .../testexpected/as2/DoInitAction[2].as | 2 + .../testexpected/as2/DoInitAction[3].as | 2 + .../testexpected/as2/__Packages/Box.as | 82 + .../testexpected/as2/__Packages/Cox.as | 50 + .../testexpected/as2/__Packages/Enemy.as | 96 ++ .../testexpected/as2/__Packages/Moving.as | 24 + .../testexpected/as2/__Packages/Moving2.as | 15 + .../as2/__Packages/MyBlueSprite.as | 38 + .../testexpected/as2/__Packages/MyError.as | 40 + .../testexpected/as2/__Packages/Ship.as | 83 + .../com/jpexs/flash/test/TestLoader.as | 219 +++ .../test/testcases/TestCallSetterGetter.as | 215 +++ .../flash/test/testcases/TestMaintainOrder.as | 217 +++ .../test/testcases/TestReturnInConstructor.as | 191 +++ .../flash/test/testcases/TestSetterGetter.as | 281 ++++ .../test/testcases/TestSuper2SetterGetter.as | 232 +++ .../test/testcases/TestSuperSetterGetter.as | 338 ++++ .../flash/test/testcases/TestVarsMethods.as | 177 ++ .../CLIPACTIONRECORD onClipEvent(load).as | 2 + .../testexpected/as2/frame_23/DoAction.as | 1 + .../testexpected/as2/frame_24/DoAction.as | 8 + .../testexpected/as2/frame_25/DoAction.as | 19 + .../testexpected/as2/frame_26/DoAction.as | 21 + .../testexpected/as2/frame_27/DoAction.as | 21 + .../testexpected/as2/frame_28/DoAction.as | 40 + .../testexpected/as2/frame_29/DoAction.as | 20 + .../testexpected/as2/frame_30/DoAction.as | 39 + .../testexpected/as2/frame_31/DoAction.as | 23 + .../testexpected/as2/frame_32/DoAction.as | 55 + .../testexpected/as2/frame_33/DoAction.as | 14 + .../testexpected/as2/frame_34/DoAction.as | 31 + .../testexpected/as2/frame_35/DoAction.as | 38 + .../testexpected/as2/frame_36/DoAction.as | 23 + .../testexpected/as2/frame_37/DoAction.as | 50 + .../testexpected/as2/frame_38/DoAction.as | 29 + .../testexpected/as2/frame_39/DoAction.as | 34 + .../testexpected/as2/frame_40/DoAction.as | 59 + .../testexpected/as2/frame_41/DoAction.as | 47 + .../testexpected/as2/frame_42/DoAction.as | 14 + .../testexpected/as2/frame_43/DoAction.as | 61 + .../testexpected/as2/frame_44/DoAction.as | 65 + .../testexpected/as2/frame_45/DoAction.as | 21 + .../testexpected/as2/frame_46/DoAction.as | 34 + .../testexpected/as2/frame_47/DoAction.as | 17 + .../testexpected/as2/frame_48/DoAction.as | 60 + .../testexpected/as2/frame_49/DoAction.as | 17 + .../testexpected/as2/frame_50/DoAction.as | 5 + .../testexpected/as2/frame_51/DoAction.as | 42 + .../testexpected/as2/frame_52/DoAction.as | 40 + .../testexpected/as2/frame_53/DoAction.as | 40 + .../testexpected/as2/frame_54/DoAction.as | 32 + .../testexpected/as2/frame_55/DoAction.as | 4 + .../testexpected/as2/frame_56/DoAction.as | 29 + .../testexpected/as2/frame_57/DoAction.as | 46 + .../testexpected/as2/frame_58/DoAction.as | 205 +++ .../testexpected/as2/frame_59/DoAction.as | 22 + .../testexpected/as2/frame_60/DoAction.as | 51 + .../testexpected/as2/frame_61/DoAction.as | 27 + .../testexpected/as2/frame_62/DoAction.as | 30 + .../testexpected/as2/frame_63/DoAction.as | 34 + .../testexpected/as2/frame_64/DoAction.as | 37 + .../testexpected/as2/frame_65/DoAction.as | 19 + .../testexpected/as2/frame_66/DoAction.as | 226 +++ .../testexpected/as2/frame_67/DoAction.as | 1456 +++++++++++++++++ .../testexpected/as2/frame_68/DoAction.as | 153 ++ .../testexpected/as2/frame_69/DoAction.as | 25 + .../testexpected/as2/frame_70/DoAction.as | 49 + .../testexpected/as2/frame_71/DoAction.as | 50 + .../testexpected/as2/frame_72/DoAction.as | 50 + .../testexpected/as2/frame_73/DoAction.as | 23 + .../testexpected/as2/frame_74/DoAction.as | 16 + .../testexpected/as2/frame_75/DoAction.as | 740 +++++++++ .../testexpected/as2/frame_76/DoAction.as | 83 + .../testexpected/as2/frame_77/DoAction.as | 73 + .../testexpected/as2/frame_78/DoAction.as | 101 ++ .../testexpected/as2/frame_79/DoAction.as | 82 + .../testexpected/as2/frame_80/DoAction.as | 33 + .../testexpected/as2/frame_81/DoAction.as | 12 + .../testexpected/as2/frame_82/DoAction.as | 105 ++ .../testexpected/as2/frame_83/DoAction.as | 23 + .../testexpected/as2/frame_84/DoAction.as | 22 + .../testexpected/as2/frame_85/DoAction.as | 9 + .../testexpected/as2/frame_86/DoAction.as | 39 + .../testexpected/as2/frame_87/DoAction.as | 35 + .../testexpected/as2/frame_88/DoAction.as | 42 + .../testexpected/as2/frame_89/DoAction.as | 25 + .../testexpected/as2/frame_90/DoAction.as | 32 + .../testexpected/as2/frame_91/DoAction.as | 47 + .../testexpected/as2/frame_92/DoAction.as | 19 + .../testexpected/as2/frame_93/DoAction.as | 41 + .../testexpected/as2/frame_94/DoAction.as | 24 + .../testexpected/as2/frame_95/DoAction.as | 89 + .../testexpected/as2/frame_96/DoAction.as | 37 + .../testexpected/as2/frame_97/DoAction.as | 53 + 109 files changed, 7962 insertions(+), 1 deletion(-) create mode 100644 libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionScript2DirectEditingPCodeTest.java create mode 100644 libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/generators/AS2DirectEditingPCodeGenerator.java create mode 100644 libsrc/ffdec_lib/testdata/as2/com/jpexs/flash/test/testcases/TestSuper2SetterGetter.as create mode 100644 libsrc/ffdec_lib/testdata/as2/com/jpexs/flash/test/testcases/TestSuperSetterGetter.as create mode 100644 libsrc/ffdec_lib/testexpected/as2/Blue Symbol.as create mode 100644 libsrc/ffdec_lib/testexpected/as2/DefineButton2_30/BUTTONCONDACTION on(press).as create mode 100644 libsrc/ffdec_lib/testexpected/as2/DefineSprite_15/frame_1/DoAction.as create mode 100644 libsrc/ffdec_lib/testexpected/as2/DefineSprite_15/frame_1/DoAction[2].as create mode 100644 libsrc/ffdec_lib/testexpected/as2/DefineSprite_2_Blue Symbol/frame_1/DoAction.as create mode 100644 libsrc/ffdec_lib/testexpected/as2/DefineSprite_4/frame_1/DoAction.as create mode 100644 libsrc/ffdec_lib/testexpected/as2/DefineSprite_53/frame_1/DoAction.as create mode 100644 libsrc/ffdec_lib/testexpected/as2/DefineSprite_6/frame_1/DoAction.as create mode 100644 libsrc/ffdec_lib/testexpected/as2/DoInitAction.as create mode 100644 libsrc/ffdec_lib/testexpected/as2/DoInitAction[2].as create mode 100644 libsrc/ffdec_lib/testexpected/as2/DoInitAction[3].as create mode 100644 libsrc/ffdec_lib/testexpected/as2/__Packages/Box.as create mode 100644 libsrc/ffdec_lib/testexpected/as2/__Packages/Cox.as create mode 100644 libsrc/ffdec_lib/testexpected/as2/__Packages/Enemy.as create mode 100644 libsrc/ffdec_lib/testexpected/as2/__Packages/Moving.as create mode 100644 libsrc/ffdec_lib/testexpected/as2/__Packages/Moving2.as create mode 100644 libsrc/ffdec_lib/testexpected/as2/__Packages/MyBlueSprite.as create mode 100644 libsrc/ffdec_lib/testexpected/as2/__Packages/MyError.as create mode 100644 libsrc/ffdec_lib/testexpected/as2/__Packages/Ship.as create mode 100644 libsrc/ffdec_lib/testexpected/as2/__Packages/com/jpexs/flash/test/TestLoader.as create mode 100644 libsrc/ffdec_lib/testexpected/as2/__Packages/com/jpexs/flash/test/testcases/TestCallSetterGetter.as create mode 100644 libsrc/ffdec_lib/testexpected/as2/__Packages/com/jpexs/flash/test/testcases/TestMaintainOrder.as create mode 100644 libsrc/ffdec_lib/testexpected/as2/__Packages/com/jpexs/flash/test/testcases/TestReturnInConstructor.as create mode 100644 libsrc/ffdec_lib/testexpected/as2/__Packages/com/jpexs/flash/test/testcases/TestSetterGetter.as create mode 100644 libsrc/ffdec_lib/testexpected/as2/__Packages/com/jpexs/flash/test/testcases/TestSuper2SetterGetter.as create mode 100644 libsrc/ffdec_lib/testexpected/as2/__Packages/com/jpexs/flash/test/testcases/TestSuperSetterGetter.as create mode 100644 libsrc/ffdec_lib/testexpected/as2/__Packages/com/jpexs/flash/test/testcases/TestVarsMethods.as create mode 100644 libsrc/ffdec_lib/testexpected/as2/frame_1/PlaceObject2_2_Blue Symbol_1/CLIPACTIONRECORD onClipEvent(load).as create mode 100644 libsrc/ffdec_lib/testexpected/as2/frame_23/DoAction.as create mode 100644 libsrc/ffdec_lib/testexpected/as2/frame_24/DoAction.as create mode 100644 libsrc/ffdec_lib/testexpected/as2/frame_25/DoAction.as create mode 100644 libsrc/ffdec_lib/testexpected/as2/frame_26/DoAction.as create mode 100644 libsrc/ffdec_lib/testexpected/as2/frame_27/DoAction.as create mode 100644 libsrc/ffdec_lib/testexpected/as2/frame_28/DoAction.as create mode 100644 libsrc/ffdec_lib/testexpected/as2/frame_29/DoAction.as create mode 100644 libsrc/ffdec_lib/testexpected/as2/frame_30/DoAction.as create mode 100644 libsrc/ffdec_lib/testexpected/as2/frame_31/DoAction.as create mode 100644 libsrc/ffdec_lib/testexpected/as2/frame_32/DoAction.as create mode 100644 libsrc/ffdec_lib/testexpected/as2/frame_33/DoAction.as create mode 100644 libsrc/ffdec_lib/testexpected/as2/frame_34/DoAction.as create mode 100644 libsrc/ffdec_lib/testexpected/as2/frame_35/DoAction.as create mode 100644 libsrc/ffdec_lib/testexpected/as2/frame_36/DoAction.as create mode 100644 libsrc/ffdec_lib/testexpected/as2/frame_37/DoAction.as create mode 100644 libsrc/ffdec_lib/testexpected/as2/frame_38/DoAction.as create mode 100644 libsrc/ffdec_lib/testexpected/as2/frame_39/DoAction.as create mode 100644 libsrc/ffdec_lib/testexpected/as2/frame_40/DoAction.as create mode 100644 libsrc/ffdec_lib/testexpected/as2/frame_41/DoAction.as create mode 100644 libsrc/ffdec_lib/testexpected/as2/frame_42/DoAction.as create mode 100644 libsrc/ffdec_lib/testexpected/as2/frame_43/DoAction.as create mode 100644 libsrc/ffdec_lib/testexpected/as2/frame_44/DoAction.as create mode 100644 libsrc/ffdec_lib/testexpected/as2/frame_45/DoAction.as create mode 100644 libsrc/ffdec_lib/testexpected/as2/frame_46/DoAction.as create mode 100644 libsrc/ffdec_lib/testexpected/as2/frame_47/DoAction.as create mode 100644 libsrc/ffdec_lib/testexpected/as2/frame_48/DoAction.as create mode 100644 libsrc/ffdec_lib/testexpected/as2/frame_49/DoAction.as create mode 100644 libsrc/ffdec_lib/testexpected/as2/frame_50/DoAction.as create mode 100644 libsrc/ffdec_lib/testexpected/as2/frame_51/DoAction.as create mode 100644 libsrc/ffdec_lib/testexpected/as2/frame_52/DoAction.as create mode 100644 libsrc/ffdec_lib/testexpected/as2/frame_53/DoAction.as create mode 100644 libsrc/ffdec_lib/testexpected/as2/frame_54/DoAction.as create mode 100644 libsrc/ffdec_lib/testexpected/as2/frame_55/DoAction.as create mode 100644 libsrc/ffdec_lib/testexpected/as2/frame_56/DoAction.as create mode 100644 libsrc/ffdec_lib/testexpected/as2/frame_57/DoAction.as create mode 100644 libsrc/ffdec_lib/testexpected/as2/frame_58/DoAction.as create mode 100644 libsrc/ffdec_lib/testexpected/as2/frame_59/DoAction.as create mode 100644 libsrc/ffdec_lib/testexpected/as2/frame_60/DoAction.as create mode 100644 libsrc/ffdec_lib/testexpected/as2/frame_61/DoAction.as create mode 100644 libsrc/ffdec_lib/testexpected/as2/frame_62/DoAction.as create mode 100644 libsrc/ffdec_lib/testexpected/as2/frame_63/DoAction.as create mode 100644 libsrc/ffdec_lib/testexpected/as2/frame_64/DoAction.as create mode 100644 libsrc/ffdec_lib/testexpected/as2/frame_65/DoAction.as create mode 100644 libsrc/ffdec_lib/testexpected/as2/frame_66/DoAction.as create mode 100644 libsrc/ffdec_lib/testexpected/as2/frame_67/DoAction.as create mode 100644 libsrc/ffdec_lib/testexpected/as2/frame_68/DoAction.as create mode 100644 libsrc/ffdec_lib/testexpected/as2/frame_69/DoAction.as create mode 100644 libsrc/ffdec_lib/testexpected/as2/frame_70/DoAction.as create mode 100644 libsrc/ffdec_lib/testexpected/as2/frame_71/DoAction.as create mode 100644 libsrc/ffdec_lib/testexpected/as2/frame_72/DoAction.as create mode 100644 libsrc/ffdec_lib/testexpected/as2/frame_73/DoAction.as create mode 100644 libsrc/ffdec_lib/testexpected/as2/frame_74/DoAction.as create mode 100644 libsrc/ffdec_lib/testexpected/as2/frame_75/DoAction.as create mode 100644 libsrc/ffdec_lib/testexpected/as2/frame_76/DoAction.as create mode 100644 libsrc/ffdec_lib/testexpected/as2/frame_77/DoAction.as create mode 100644 libsrc/ffdec_lib/testexpected/as2/frame_78/DoAction.as create mode 100644 libsrc/ffdec_lib/testexpected/as2/frame_79/DoAction.as create mode 100644 libsrc/ffdec_lib/testexpected/as2/frame_80/DoAction.as create mode 100644 libsrc/ffdec_lib/testexpected/as2/frame_81/DoAction.as create mode 100644 libsrc/ffdec_lib/testexpected/as2/frame_82/DoAction.as create mode 100644 libsrc/ffdec_lib/testexpected/as2/frame_83/DoAction.as create mode 100644 libsrc/ffdec_lib/testexpected/as2/frame_84/DoAction.as create mode 100644 libsrc/ffdec_lib/testexpected/as2/frame_85/DoAction.as create mode 100644 libsrc/ffdec_lib/testexpected/as2/frame_86/DoAction.as create mode 100644 libsrc/ffdec_lib/testexpected/as2/frame_87/DoAction.as create mode 100644 libsrc/ffdec_lib/testexpected/as2/frame_88/DoAction.as create mode 100644 libsrc/ffdec_lib/testexpected/as2/frame_89/DoAction.as create mode 100644 libsrc/ffdec_lib/testexpected/as2/frame_90/DoAction.as create mode 100644 libsrc/ffdec_lib/testexpected/as2/frame_91/DoAction.as create mode 100644 libsrc/ffdec_lib/testexpected/as2/frame_92/DoAction.as create mode 100644 libsrc/ffdec_lib/testexpected/as2/frame_93/DoAction.as create mode 100644 libsrc/ffdec_lib/testexpected/as2/frame_94/DoAction.as create mode 100644 libsrc/ffdec_lib/testexpected/as2/frame_95/DoAction.as create mode 100644 libsrc/ffdec_lib/testexpected/as2/frame_96/DoAction.as create mode 100644 libsrc/ffdec_lib/testexpected/as2/frame_97/DoAction.as diff --git a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionScript2DirectEditingPCodeTest.java b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionScript2DirectEditingPCodeTest.java new file mode 100644 index 000000000..ac850e722 --- /dev/null +++ b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionScript2DirectEditingPCodeTest.java @@ -0,0 +1,141 @@ +/* + * Copyright (C) 2010-2026 JPEXS, All rights reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. + */ +package com.jpexs.decompiler.flash; + +import com.jpexs.decompiler.flash.abc.avm2.parser.AVM2ParseException; +import com.jpexs.decompiler.flash.action.parser.ActionParseException; +import com.jpexs.decompiler.flash.action.parser.script.ActionScript2Parser; +import com.jpexs.decompiler.flash.configuration.Configuration; +import com.jpexs.decompiler.flash.exporters.modes.ScriptExportMode; +import com.jpexs.decompiler.flash.helpers.CodeFormatting; +import com.jpexs.decompiler.flash.helpers.HighlightedTextWriter; +import com.jpexs.decompiler.flash.tags.base.ASMSource; +import com.jpexs.decompiler.graph.CompilationException; +import com.jpexs.helpers.Helper; +import com.jpexs.helpers.utf8.Utf8Helper; +import java.io.BufferedInputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import static org.testng.Assert.fail; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; + +/** + * + * @author JPEXS + */ +public class ActionScript2DirectEditingPCodeTest { + + @BeforeClass + public void init() { + Configuration.autoDeobfuscate.set(false); + Configuration.simplifyExpressions.set(false); + Configuration._debugCopy.set(false); + Configuration.useFlexAs3Compiler.set(false); + } + + @Test + public void testDirectEditingPCode() throws IOException, InterruptedException, AVM2ParseException, CompilationException { + String filePath = "testdata/as2/as2.swf"; + File expectedDir = new File("testexpected/as2"); + File actualDir = new File("testactual/as2"); + + if (!actualDir.exists()) { + actualDir.mkdirs(); + } + + List paths = new ArrayList<>(); + + try { + + SWF swf = new SWF(new BufferedInputStream(new FileInputStream(filePath)), false); + + Map asms = swf.getASMs(true); + + for (String key : asms.keySet()) { + ASMSource asm = asms.get(key); + HighlightedTextWriter writer = new HighlightedTextWriter(new CodeFormatting(), false); + asm.getActionScriptSource(writer, null); + writer.finishHilights(); + String as = writer.toString(); + //as = asm.removePrefixAndSuffix(as); + + ActionScript2Parser par = new ActionScript2Parser(swf, asm); + try { + asm.setActions(par.actionsFromString(as, Utf8Helper.charsetName)); + } catch (ActionParseException | CompilationException ex) { + fail("Unable to parse: " + as + "/" + asm.toString(), ex); + } + writer = new HighlightedTextWriter(new CodeFormatting(), false); + asm.getActionScriptSource(writer, null); + writer.finishHilights(); + String as2 = writer.toString(); + //as2 = asm.removePrefixAndSuffix(as2); + try { + asm.setActions(par.actionsFromString(as2, Utf8Helper.charsetName)); + } catch (ActionParseException | CompilationException ex) { + fail("Unable to parse: " + asm.getSwf().getTitleOrShortFileName() + "/" + asm.toString(), ex); + } + writer = new HighlightedTextWriter(new CodeFormatting(), false); + asm.getASMSource(ScriptExportMode.PCODE, writer, null); + //asm.getActionScriptSource(writer, null); + writer.finishHilights(); + String modifiedPcode = writer.toString(); + + String classDirPath = key.replace("\\", "/"); + File actualFile = new File(actualDir.getAbsolutePath() + classDirPath + ".as"); + File outParent = actualFile.getParentFile(); + if (!outParent.exists()) { + outParent.mkdirs(); + } + FileOutputStream fos = new FileOutputStream(actualFile); + fos.write(modifiedPcode.getBytes("UTF-8")); + fos.close(); + paths.add(classDirPath); + } + + } catch (Exception ex) { + fail("Exception during decompilation: " + filePath + ":" + ex.getMessage(), ex); + } + + StringBuilder notSameBuilder = new StringBuilder(); + + for (String path : paths) { + File expectedFile = new File(expectedDir.getAbsolutePath() + "/" + path + ".as"); + File actualFile = new File(actualDir.getAbsolutePath() + "/" + path + ".as"); + String expectedText = Helper.readTextFile(expectedFile.getAbsolutePath()); + String actualText = Helper.readTextFile(actualFile.getAbsolutePath()); + + expectedText = expectedText.replace("\r\n", "\n"); + actualText = actualText.replace("\r\n", "\n"); + + if (!Objects.equals(actualText, expectedText)) { + notSameBuilder.append(actualDir.getPath()).append(path.replace("\\", "/")).append(".as\r\n"); + // + } + } + if (notSameBuilder.length() > 0) { + fail("File(s) are not same: " + notSameBuilder.toString()); + } + } +} diff --git a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/generators/AS2DirectEditingPCodeGenerator.java b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/generators/AS2DirectEditingPCodeGenerator.java new file mode 100644 index 000000000..962c9aaaa --- /dev/null +++ b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/generators/AS2DirectEditingPCodeGenerator.java @@ -0,0 +1,103 @@ +/* + * Copyright (C) 2010-2026 JPEXS, All rights reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. + */ +package com.jpexs.decompiler.flash.generators; + +import com.jpexs.decompiler.flash.SWF; +import com.jpexs.decompiler.flash.action.parser.ActionParseException; +import com.jpexs.decompiler.flash.action.parser.script.ActionScript2Parser; +import com.jpexs.decompiler.flash.configuration.Configuration; +import com.jpexs.decompiler.flash.exporters.modes.ScriptExportMode; +import com.jpexs.decompiler.flash.helpers.CodeFormatting; +import com.jpexs.decompiler.flash.helpers.HighlightedTextWriter; +import com.jpexs.decompiler.flash.tags.base.ASMSource; +import com.jpexs.decompiler.graph.CompilationException; +import com.jpexs.decompiler.graph.TranslateException; +import com.jpexs.helpers.utf8.Utf8Helper; +import java.io.BufferedInputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.util.Map; +import static org.testng.Assert.fail; + +/** + * + * @author JPEXS + */ +public class AS2DirectEditingPCodeGenerator { + public static void main(String[] args) throws IOException, InterruptedException { + String filePath = "testdata/as2/as2.swf"; + File outDir = new File("testexpected/as2"); + + + Configuration.autoDeobfuscate.set(false); + Configuration.simplifyExpressions.set(false); + Configuration._debugCopy.set(false); + Configuration.useFlexAs3Compiler.set(false); + + if (!outDir.exists()) { + outDir.mkdirs(); + } + + SWF swf = new SWF(new BufferedInputStream(new FileInputStream(filePath)), false); + + Map asms = swf.getASMs(true); + + for (String key : asms.keySet()) { + ASMSource asm = asms.get(key); + HighlightedTextWriter writer = new HighlightedTextWriter(new CodeFormatting(), false); + asm.getActionScriptSource(writer, null); + writer.finishHilights(); + String as = writer.toString(); + //as = asm.removePrefixAndSuffix(as); + + ActionScript2Parser par = new ActionScript2Parser(swf, asm); + try { + asm.setActions(par.actionsFromString(as, Utf8Helper.charsetName)); + } catch (ActionParseException | CompilationException ex) { + fail("Unable to parse: " + as + "/" + asm.toString(), ex); + } + writer = new HighlightedTextWriter(new CodeFormatting(), false); + asm.getActionScriptSource(writer, null); + writer.finishHilights(); + String as2 = writer.toString(); + //as2 = asm.removePrefixAndSuffix(as2); + try { + asm.setActions(par.actionsFromString(as2, Utf8Helper.charsetName)); + } catch (ActionParseException | CompilationException ex) { + fail("Unable to parse: " + asm.getSwf().getTitleOrShortFileName() + "/" + asm.toString(), ex); + } + writer = new HighlightedTextWriter(new CodeFormatting(), false); + asm.getASMSource(ScriptExportMode.PCODE, writer, null); + //asm.getActionScriptSource(writer, null); + writer.finishHilights(); + String modifiedPcode = writer.toString(); + + String classDirPath = key; + File outFile = new File(outDir.getAbsolutePath() + "/" + classDirPath + ".as"); + File outParent = outFile.getParentFile(); + if (!outParent.exists()) { + outParent.mkdirs(); + } + FileOutputStream fos = new FileOutputStream(outFile); + fos.write(modifiedPcode.getBytes("UTF-8")); + fos.close(); + } + System.exit(0); + } +} diff --git a/libsrc/ffdec_lib/testdata/as2/as2.swf b/libsrc/ffdec_lib/testdata/as2/as2.swf index 2cfa3bec1b34fb77586194c597e6c54d0e1dee0b..8f9bd03ba65a93deafff2b3b8c9c6acb51d6e3f4 100644 GIT binary patch literal 110369 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

iqhoqFHs$u+cixjLS=Q{*f%5`~58OE%*X8g%I) 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 Nt5XAi#foj}{XZ=b4PyWR literal 110002 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

Z4ESfyO>NZd{QM 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 _lHuIj6fj|L5KR|xe^1g> z*P#;I*hJoNdue?YZLGoeZ>_Pvw0tE-Mth^i|DM3zTk2|PW23%Hi@4x*sOB~{hd2Bw z>i2egAC2<9-}0-x?^9gF?Fsg;Qr>H`K5k><2Hf@r!mBfQ^%K@N>6i(+S{-tp&=7zw~+oA?j^X>&z7iBK&GO_=<~`v$6e3R9JjQGkw{M|-LhDwLX^Rj2S) zF!8P9WejoKn1C_{QteU;B#9r?TFUifW@Wh{&~0U2s8;;6a&1Ard{b3Dz9Kl(8m1m* zEH-!!A&8O~zNXm!)aL`%+BDP8G}5$KzPF_ZUhg^KuPd!^$cR zBd}nY6bs6nn>DRVWbSJ;GL?l|Lq{SoYT5R(@j+Nz_ulysZG6$;aMx)7z8y=;9!kA4 z`tc}#{X?IMXoS!02GW{aMh2w$-1Y<_iZ{nxv%U01#%Rta-4sQTkERv~L?ifDw<20G zXtV65fXf@v5Y6!JgGYn=R_Zr1FrI3@D^aSC_9N`n=RPmX&&NfLtu=$uFOBOOn&KYxPAgJ8bXinR&g& zSgn^pt7*%0bm%FWS)=*87NrwktH*H}q1k!o^tL|HGgrsmy@4EscI)(#e#|%L+1{FD zO@?5yt{!pav49YIKUjSb`ZDZF(ew={LItc zN8D9R$r!F|@)>hQN@+iGD#qmMAt3~Q4XAFkEwgUaPGzF4G7nU^!riM$KB2-V z)&osvxFWduOa0rLIBi#5M|HLb4brlVEmPaQcO&4(@Ol$sxe>e@LIxm+ zQyGGQ(DkAWxM&i1J-PaEy#o+Vo3Ka0h+e^wfi9G0y%+>Cl;Ks)iGiBcB5NA{<^W&Dtu5I`BFNk$Icyy4d z36!gN(drvM74?lYT@-ykV(ZJMDCCSTQ#k>ks~WW+Fb&}yot8^XtOTp_8{A*Xxy!CR zly4_=DBq91Q+|-E=R||Jk*ra*?o}Nvx+gejB)AAq}Hpn$2wfO>fU|_ z`@(i$!m4w)e>obw4lwDnIxdMyui>UGWVYGQnxldZE9IKF^T z&KEa~FS4qs5b|CRDHUCAl9bUCTz+r+1I{w&WP)`3or?C&yN@WNtLA`|RXwZVOGnnFAmfMW1=4IAuq=CZ*M8vy#RX68g_NDIf204z`Fy+djJcuWv$8YhIvV%t z%k@A9+AVq}8Fq!F8JDzxnwIXWptS2nZm>u)V{A6B$A#q~?syR8fo&52^qB43)mgs+S|wWlpaHSFj8B?ADQ!#LNfx(7UhfQ{z%0y-W<^AmqZ9DSw0)XQ+T=7QY;`pgT#Ws+rxPxbR z6}(`+Y1OE{GP=I$2s+e=@S$^^SJIJn^XKfelo7B>Wv=Kwd_sYh{Cfe>7tjGv_ItVQ zSX8gCp}5h(19RjN);Z{-}T3 z70g>&aZKAen^h$D5EZy6C?%$|>Yps)Y_v{&CcFMz*ko~n)Gt$*r#mI9@EX}))BNpS z7g;ULD6QibbAE0;sPVmCnvq17rn07fR+ba0uY6sHWlXpv=IJRNa}7IKoJ0&kBc!|nazJCXyx+mrWIfdKkg-W?W@{o6!m6*TItg?6PkAau?=<+bKeAdv@p+S zYOsI=3D``31R>_?5g+D+N!w^HJ0v~ zkD9BjEOnoM89JglScbZ4z0sGFcixUsmBicucgfH9uQ6eb*ZuWOTVZ8yoE3eruw1c) zX(nxdixYmcH0{c|p04QH=LYbhLe|Gl&96!6lH>Cov%^=N%yIhMe@E#U#;1D?zJYLOXD$U!fyao23Qe?<_x>>zOwcuR> O-(v6nDe>HwhW`M|4Fc`} diff --git a/libsrc/ffdec_lib/testdata/as2/com/jpexs/flash/test/TestLoader.as b/libsrc/ffdec_lib/testdata/as2/com/jpexs/flash/test/TestLoader.as index 6fa3c6435..343ea98a8 100644 --- a/libsrc/ffdec_lib/testdata/as2/com/jpexs/flash/test/TestLoader.as +++ b/libsrc/ffdec_lib/testdata/as2/com/jpexs/flash/test/TestLoader.as @@ -6,8 +6,10 @@ class com.jpexs.flash.test.TestLoader { public function includeTests() { new com.jpexs.flash.test.testcases.TestSetterGetter(); new com.jpexs.flash.test.testcases.TestCallSetterGetter(); + new com.jpexs.flash.test.testcases.TestSuperSetterGetter(); + new com.jpexs.flash.test.testcases.TestSuper2SetterGetter(); new com.jpexs.flash.test.testcases.TestVarsMethods(); new com.jpexs.flash.test.testcases.TestMaintainOrder(); - new com.jpexs.flash.test.testcases.TestReturnInConstructor(); + new com.jpexs.flash.test.testcases.TestReturnInConstructor(); } } \ No newline at end of file diff --git a/libsrc/ffdec_lib/testdata/as2/com/jpexs/flash/test/testcases/TestSuper2SetterGetter.as b/libsrc/ffdec_lib/testdata/as2/com/jpexs/flash/test/testcases/TestSuper2SetterGetter.as new file mode 100644 index 000000000..1246c101a --- /dev/null +++ b/libsrc/ffdec_lib/testdata/as2/com/jpexs/flash/test/testcases/TestSuper2SetterGetter.as @@ -0,0 +1,12 @@ +class com.jpexs.flash.test.testcases.TestSuper2SetterGetter extends com.jpexs.flash.test.testcases.TestSuperSetterGetter { + public function testSuperGetSet() { + super.myvar = 3; + trace(super.myvar); + super.myvar(); + new super.myvar(); + delete super.myvar; + super.myvar++ + trace(super.myvar++); + trace(++super.myvar); + } +} \ No newline at end of file diff --git a/libsrc/ffdec_lib/testdata/as2/com/jpexs/flash/test/testcases/TestSuperSetterGetter.as b/libsrc/ffdec_lib/testdata/as2/com/jpexs/flash/test/testcases/TestSuperSetterGetter.as new file mode 100644 index 000000000..a4dfb0eee --- /dev/null +++ b/libsrc/ffdec_lib/testdata/as2/com/jpexs/flash/test/testcases/TestSuperSetterGetter.as @@ -0,0 +1,44 @@ +class com.jpexs.flash.test.testcases.TestSuperSetterGetter extends com.jpexs.flash.test.testcases.TestSetterGetter { + + private var _myvar2 = 1; + + public function get myvar2(){ + return _myvar2; + } + + public function set myvar2(val){ + _myvar2 = val; + } + + public function testThisGetSet(){ + this.myvar2 = 2; + trace(this.myvar2); + this.myvar2(); + new this.myvar2(); + this.myvar2++ + trace(this.myvar2++); + trace(++this.myvar2); + } + + public function testThisParentGetSet(){ + this.myvar = 2; + trace(this.myvar); + this.myvar(); + new this.myvar(); + this.myvar++ + trace(this.myvar++); + trace(++this.myvar); + } + + + public function testSuperGetSet() { + super.myvar = 3; + trace(super.myvar); + super.myvar(); + new super.myvar(); + delete super.myvar; + super.myvar++ + trace(super.myvar++); + trace(++super.myvar); + } +} \ No newline at end of file diff --git a/libsrc/ffdec_lib/testexpected/as2/Blue Symbol.as b/libsrc/ffdec_lib/testexpected/as2/Blue Symbol.as new file mode 100644 index 000000000..089a1cb76 --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/Blue Symbol.as @@ -0,0 +1,9 @@ +Push "init_blue" +Trace +Push "MyBlueSprite" +GetVariable +Push "Blue Symbol", 2, "Object" +GetVariable +Push "registerClass" +CallMethod +Pop diff --git a/libsrc/ffdec_lib/testexpected/as2/DefineButton2_30/BUTTONCONDACTION on(press).as b/libsrc/ffdec_lib/testexpected/as2/DefineButton2_30/BUTTONCONDACTION on(press).as new file mode 100644 index 000000000..b7992a2a9 --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/DefineButton2_30/BUTTONCONDACTION on(press).as @@ -0,0 +1,2 @@ +Push "button pressed" +Trace diff --git a/libsrc/ffdec_lib/testexpected/as2/DefineSprite_15/frame_1/DoAction.as b/libsrc/ffdec_lib/testexpected/as2/DefineSprite_15/frame_1/DoAction.as new file mode 100644 index 000000000..2854c1320 --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/DefineSprite_15/frame_1/DoAction.as @@ -0,0 +1,2 @@ +Push "script layer 1" +Trace diff --git a/libsrc/ffdec_lib/testexpected/as2/DefineSprite_15/frame_1/DoAction[2].as b/libsrc/ffdec_lib/testexpected/as2/DefineSprite_15/frame_1/DoAction[2].as new file mode 100644 index 000000000..39d8364b3 --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/DefineSprite_15/frame_1/DoAction[2].as @@ -0,0 +1,2 @@ +Push "script layer 2" +Trace diff --git a/libsrc/ffdec_lib/testexpected/as2/DefineSprite_2_Blue Symbol/frame_1/DoAction.as b/libsrc/ffdec_lib/testexpected/as2/DefineSprite_2_Blue Symbol/frame_1/DoAction.as new file mode 100644 index 000000000..e69de29bb diff --git a/libsrc/ffdec_lib/testexpected/as2/DefineSprite_4/frame_1/DoAction.as b/libsrc/ffdec_lib/testexpected/as2/DefineSprite_4/frame_1/DoAction.as new file mode 100644 index 000000000..e69de29bb diff --git a/libsrc/ffdec_lib/testexpected/as2/DefineSprite_53/frame_1/DoAction.as b/libsrc/ffdec_lib/testexpected/as2/DefineSprite_53/frame_1/DoAction.as new file mode 100644 index 000000000..e69de29bb diff --git a/libsrc/ffdec_lib/testexpected/as2/DefineSprite_6/frame_1/DoAction.as b/libsrc/ffdec_lib/testexpected/as2/DefineSprite_6/frame_1/DoAction.as new file mode 100644 index 000000000..e69de29bb diff --git a/libsrc/ffdec_lib/testexpected/as2/DoInitAction.as b/libsrc/ffdec_lib/testexpected/as2/DoInitAction.as new file mode 100644 index 000000000..0f8ed62c9 --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/DoInitAction.as @@ -0,0 +1,2 @@ +Push "initclip 1" +Trace diff --git a/libsrc/ffdec_lib/testexpected/as2/DoInitAction[2].as b/libsrc/ffdec_lib/testexpected/as2/DoInitAction[2].as new file mode 100644 index 000000000..21e233907 --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/DoInitAction[2].as @@ -0,0 +1,2 @@ +Push "initclip 2" +Trace diff --git a/libsrc/ffdec_lib/testexpected/as2/DoInitAction[3].as b/libsrc/ffdec_lib/testexpected/as2/DoInitAction[3].as new file mode 100644 index 000000000..1fdf30b50 --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/DoInitAction[3].as @@ -0,0 +1,2 @@ +Push "star init" +Trace diff --git a/libsrc/ffdec_lib/testexpected/as2/__Packages/Box.as b/libsrc/ffdec_lib/testexpected/as2/__Packages/Box.as new file mode 100644 index 000000000..eb6d2fc6a --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/__Packages/Box.as @@ -0,0 +1,82 @@ +ConstantPool "_global", "Box", "box_mc", "MovieClip", "prototype", "moveUp", "_y", "moveDown", "ASSetPropFlags" +Push "_global" +GetVariable +Push "Box" +GetMember +Not +Not +If loc017b +Push "_global" +GetVariable +Push "Box" +DefineFunction2 "", 1, 4, false, false, false, true, true, false, false, true, false, 3, "passed_mc" { +Push 0 +Push register2 +Push undefined +CallMethod +Pop +Push register1 +Push "box_mc" +Push register3 +SetMember +} +StoreRegister 1 +SetMember +Push "_global" +GetVariable +Push "Box" +GetMember +Push "MovieClip" +GetVariable +Extends +Push register1 +Push "prototype" +GetMember +StoreRegister 2 +Pop +Push register2 +Push "moveUp" +DefineFunction2 "", 0, 2, false, false, true, false, true, false, false, true, false { +Push register1 +Push "box_mc" +GetMember +Push "_y" +Push register1 +Push "box_mc" +GetMember +Push "_y" +GetMember +Push 1 +Subtract +SetMember +} +SetMember +Push register2 +Push "moveDown" +DefineFunction2 "", 0, 2, false, false, true, false, true, false, false, true, false { +Push register1 +Push "box_mc" +GetMember +Push "_y" +Push register1 +Push "box_mc" +GetMember +Push "_y" +GetMember +Push 20 +Add2 +SetMember +} +SetMember +Push 1 +Push null +Push "_global" +GetVariable +Push "Box" +GetMember +Push "prototype" +GetMember +Push 3 +Push "ASSetPropFlags" +CallFunction +loc017b:Pop diff --git a/libsrc/ffdec_lib/testexpected/as2/__Packages/Cox.as b/libsrc/ffdec_lib/testexpected/as2/__Packages/Cox.as new file mode 100644 index 000000000..c7d2c59fa --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/__Packages/Cox.as @@ -0,0 +1,50 @@ +ConstantPool "_global", "Cox", "Box", "prototype", "testPublic", "pub", "testPrivate", "priv", "ASSetPropFlags" +Push "_global" +GetVariable +Push "Cox" +GetMember +Not +Not +If loc0105 +Push "_global" +GetVariable +Push "Cox" +DefineFunction2 "", 1, 3, false, false, false, true, true, false, true, false, false, 2, "passed_mc" { +Push register2, 1, register1, undefined +CallMethod +Pop +} +StoreRegister 1 +SetMember +Push "_global" +GetVariable +Push "Cox" +GetMember +Push "Box" +GetVariable +Extends +Push register1, "prototype" +GetMember +StoreRegister 2 +Pop +Push register2, "testPublic" +DefineFunction "", 0 { +Push "pub" +Trace +} +SetMember +Push register2, "testPrivate" +DefineFunction "", 0 { +Push "priv" +Trace +} +SetMember +Push 1, null, "_global" +GetVariable +Push "Cox" +GetMember +Push "prototype" +GetMember +Push 3, "ASSetPropFlags" +CallFunction +loc0105:Pop diff --git a/libsrc/ffdec_lib/testexpected/as2/__Packages/Enemy.as b/libsrc/ffdec_lib/testexpected/as2/__Packages/Enemy.as new file mode 100644 index 000000000..54f80d61a --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/__Packages/Enemy.as @@ -0,0 +1,96 @@ +ConstantPool "_global", "Enemy", "x", "prototype", "Moving", "sfunc", "hu", "moveLeft", "tst", "moveLeft = ", "moveRight", "moveRight = ", "moveUp", "moveDown", "stat_tst", "ASSetPropFlags" +Push "_global" +GetVariable +Push "Enemy" +GetMember +Not +Not +If loc020a +Push "_global" +GetVariable +Push "Enemy" +DefineFunction2 "", 1, 5, false, false, true, false, true, false, false, true, false, 4, "px" { +Push 57 +StoreRegister 2 +Pop +Push register2, 27 +Multiply +StoreRegister 2 +Pop +Push register2 +StoreRegister 3 +Pop +Push register1, "x", register4, register3 +Add2 +SetMember +} +StoreRegister 1 +SetMember +Push register1, "prototype" +GetMember +StoreRegister 2 +Pop +Push "_global" +GetVariable +Push "Moving" +GetMember +Push 1, "_global" +GetVariable +Push "Enemy" +GetMember +ImplementsOp +Push register1, "sfunc" +DefineFunction "", 0 { +Push "hu" +Trace +} +SetMember +Push register2, "moveLeft" +DefineFunction2 "", 1, 3, false, false, true, false, true, false, false, true, false, 2, "lx" { +Push register1, "x", register1, "x" +GetMember +Push register2 +Subtract +SetMember +Push register1, "tst", 7 +SetMember +Push "moveLeft = ", register1, "x" +GetMember +Add2 +Trace +} +SetMember +Push register2, "moveRight" +DefineFunction2 "", 1, 3, false, false, true, false, true, false, false, true, false, 2, "rx" { +Push register1, "x", register1, "x" +GetMember +Push register2 +Add2 +SetMember +Push "moveRight = ", register1, "x" +GetMember +Add2 +Trace +} +SetMember +Push register2, "moveUp" +DefineFunction "", 1, "uy" { +} +SetMember +Push register2, "moveDown" +DefineFunction "", 1, "dy" { +} +SetMember +Push register2, "tst", 5 +SetMember +Push register1, "stat_tst", 6 +SetMember +Push 1, null, "_global" +GetVariable +Push "Enemy" +GetMember +Push "prototype" +GetMember +Push 3, "ASSetPropFlags" +CallFunction +loc020a:Pop diff --git a/libsrc/ffdec_lib/testexpected/as2/__Packages/Moving.as b/libsrc/ffdec_lib/testexpected/as2/__Packages/Moving.as new file mode 100644 index 000000000..795eb5753 --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/__Packages/Moving.as @@ -0,0 +1,24 @@ +ConstantPool "_global", "Moving", "Moving2" +Push "_global" +GetVariable +Push "Moving" +GetMember +Not +Not +If loc0061 +Push "_global" +GetVariable +Push "Moving" +DefineFunction "", 0 { +} +SetMember +Push "_global" +GetVariable +Push "Moving2" +GetMember +Push 1, "_global" +GetVariable +Push "Moving" +GetMember +ImplementsOp +loc0061:Pop diff --git a/libsrc/ffdec_lib/testexpected/as2/__Packages/Moving2.as b/libsrc/ffdec_lib/testexpected/as2/__Packages/Moving2.as new file mode 100644 index 000000000..c36ea4ab6 --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/__Packages/Moving2.as @@ -0,0 +1,15 @@ +ConstantPool "_global", "Moving2" +Push "_global" +GetVariable +Push "Moving2" +GetMember +Not +Not +If loc003c +Push "_global" +GetVariable +Push "Moving2" +DefineFunction "", 0 { +} +SetMember +loc003c:Pop diff --git a/libsrc/ffdec_lib/testexpected/as2/__Packages/MyBlueSprite.as b/libsrc/ffdec_lib/testexpected/as2/__Packages/MyBlueSprite.as new file mode 100644 index 000000000..5f92b80bf --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/__Packages/MyBlueSprite.as @@ -0,0 +1,38 @@ +ConstantPool "_global", "MyBlueSprite", "MovieClip", "prototype", "ASSetPropFlags" +Push "_global" +GetVariable +Push "MyBlueSprite" +GetMember +Not +Not +If loc00bf +Push "_global" +GetVariable +Push "MyBlueSprite" +DefineFunction2 "", 0, 2, false, false, false, true, true, false, true, false, false { +Push 0.0, register1, undefined +CallMethod +Pop +} +StoreRegister 1 +SetMember +Push "_global" +GetVariable +Push "MyBlueSprite" +GetMember +Push "MovieClip" +GetVariable +Extends +Push register1, "prototype" +GetMember +StoreRegister 2 +Pop +Push 1, null, "_global" +GetVariable +Push "MyBlueSprite" +GetMember +Push "prototype" +GetMember +Push 3, "ASSetPropFlags" +CallFunction +loc00bf:Pop diff --git a/libsrc/ffdec_lib/testexpected/as2/__Packages/MyError.as b/libsrc/ffdec_lib/testexpected/as2/__Packages/MyError.as new file mode 100644 index 000000000..5e33d46f2 --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/__Packages/MyError.as @@ -0,0 +1,40 @@ +ConstantPool "_global", "MyError", "Error", "prototype", "message", "My custom error occurred", "ASSetPropFlags" +Push "_global" +GetVariable +Push "MyError" +GetMember +Not +Not +If loc00e1 +Push "_global" +GetVariable +Push "MyError" +DefineFunction2 "", 0, 2, false, false, false, true, true, false, true, false, false { +Push 0.0, register1, undefined +CallMethod +Pop +} +StoreRegister 1 +SetMember +Push "_global" +GetVariable +Push "MyError" +GetMember +Push "Error" +GetVariable +Extends +Push register1, "prototype" +GetMember +StoreRegister 2 +Pop +Push register2, "message", "My custom error occurred" +SetMember +Push 1, null, "_global" +GetVariable +Push "MyError" +GetMember +Push "prototype" +GetMember +Push 3, "ASSetPropFlags" +CallFunction +loc00e1:Pop diff --git a/libsrc/ffdec_lib/testexpected/as2/__Packages/Ship.as b/libsrc/ffdec_lib/testexpected/as2/__Packages/Ship.as new file mode 100644 index 000000000..524ffc255 --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/__Packages/Ship.as @@ -0,0 +1,83 @@ +ConstantPool "_global", "Ship", "y", "prototype", "Moving", "moveUp", "moveUp = ", "moveDown", "moveDown = ", "moveLeft", "b", "moveRight", "a", "d", "ASSetPropFlags" +Push "_global" +GetVariable +Push "Ship" +GetMember +Not +Not +If loc01c3 +Push "_global" +GetVariable +Push "Ship" +DefineFunction2 "", 1, 3, false, false, true, false, true, false, false, true, false, 2, "py" { +Push register1, "y", register2 +SetMember +} +StoreRegister 1 +SetMember +Push register1, "prototype" +GetMember +StoreRegister 2 +Pop +Push "_global" +GetVariable +Push "Moving" +GetMember +Push 1, "_global" +GetVariable +Push "Ship" +GetMember +ImplementsOp +Push register2, "moveUp" +DefineFunction2 "", 1, 3, false, false, true, false, true, false, false, true, false, 2, "uy" { +Push register1, "y", register1, "y" +GetMember +Push register2 +Multiply +SetMember +Push "moveUp = ", register1, "y" +GetMember +Add2 +Trace +} +SetMember +Push register2, "moveDown" +DefineFunction2 "", 1, 3, false, false, true, false, true, false, false, true, false, 2, "dy" { +Push register1, "y", register1, "y" +GetMember +Push register2 +Multiply +SetMember +Push "moveDown = ", register1, "y" +GetMember +Add2 +Trace +} +SetMember +Push register2, "moveLeft" +DefineFunction2 "", 1, 2, false, false, true, false, true, false, false, true, false, 0, "lx" { +Push register1, "b", 6 +SetMember +} +SetMember +Push register2, "moveRight" +DefineFunction2 "", 1, 2, false, false, true, false, true, false, false, true, false, 0, "rx" { +Push register1, "a" +GetMember +Trace +Push register1, "d" +GetMember +Trace +} +SetMember +Push register2, "d", 5 +SetMember +Push 1, null, "_global" +GetVariable +Push "Ship" +GetMember +Push "prototype" +GetMember +Push 3, "ASSetPropFlags" +CallFunction +loc01c3:Pop diff --git a/libsrc/ffdec_lib/testexpected/as2/__Packages/com/jpexs/flash/test/TestLoader.as b/libsrc/ffdec_lib/testexpected/as2/__Packages/com/jpexs/flash/test/TestLoader.as new file mode 100644 index 000000000..0c4ca2b44 --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/__Packages/com/jpexs/flash/test/TestLoader.as @@ -0,0 +1,219 @@ +ConstantPool "_global", "com", "Object", "jpexs", "flash", "test", "TestLoader", "prototype", "includeTests", "testcases", "TestSetterGetter", "TestCallSetterGetter", "TestSuperSetterGetter", "TestSuper2SetterGetter", "TestVarsMethods", "TestMaintainOrder", "TestReturnInConstructor", "ASSetPropFlags" +Push "_global" +GetVariable +Push "com" +GetMember +Not +Not +If loc011c +Push "_global" +GetVariable +Push "com", 0.0, "Object" +NewObject +SetMember +loc011c:Pop +Push "_global" +GetVariable +Push "com" +GetMember +Push "jpexs" +GetMember +Not +Not +If loc0154 +Push "_global" +GetVariable +Push "com" +GetMember +Push "jpexs", 0.0, "Object" +NewObject +SetMember +loc0154:Pop +Push "_global" +GetVariable +Push "com" +GetMember +Push "jpexs" +GetMember +Push "flash" +GetMember +Not +Not +If loc0198 +Push "_global" +GetVariable +Push "com" +GetMember +Push "jpexs" +GetMember +Push "flash", 0.0, "Object" +NewObject +SetMember +loc0198:Pop +Push "_global" +GetVariable +Push "com" +GetMember +Push "jpexs" +GetMember +Push "flash" +GetMember +Push "test" +GetMember +Not +Not +If loc01e8 +Push "_global" +GetVariable +Push "com" +GetMember +Push "jpexs" +GetMember +Push "flash" +GetMember +Push "test", 0.0, "Object" +NewObject +SetMember +loc01e8:Pop +Push "_global" +GetVariable +Push "com" +GetMember +Push "jpexs" +GetMember +Push "flash" +GetMember +Push "test" +GetMember +Push "TestLoader" +GetMember +Not +Not +If loc03d2 +Push "com" +GetVariable +Push "jpexs" +GetMember +Push "flash" +GetMember +Push "test" +GetMember +Push "TestLoader" +DefineFunction "", 0 { +} +StoreRegister 1 +SetMember +Push register1, "prototype" +GetMember +StoreRegister 2 +Pop +Push register2, "includeTests" +DefineFunction "", 0 { +Push 0.0, "com" +GetVariable +Push "jpexs" +GetMember +Push "flash" +GetMember +Push "test" +GetMember +Push "testcases" +GetMember +Push "TestSetterGetter" +NewMethod +Pop +Push 0.0, "com" +GetVariable +Push "jpexs" +GetMember +Push "flash" +GetMember +Push "test" +GetMember +Push "testcases" +GetMember +Push "TestCallSetterGetter" +NewMethod +Pop +Push 0.0, "com" +GetVariable +Push "jpexs" +GetMember +Push "flash" +GetMember +Push "test" +GetMember +Push "testcases" +GetMember +Push "TestSuperSetterGetter" +NewMethod +Pop +Push 0.0, "com" +GetVariable +Push "jpexs" +GetMember +Push "flash" +GetMember +Push "test" +GetMember +Push "testcases" +GetMember +Push "TestSuper2SetterGetter" +NewMethod +Pop +Push 0.0, "com" +GetVariable +Push "jpexs" +GetMember +Push "flash" +GetMember +Push "test" +GetMember +Push "testcases" +GetMember +Push "TestVarsMethods" +NewMethod +Pop +Push 0.0, "com" +GetVariable +Push "jpexs" +GetMember +Push "flash" +GetMember +Push "test" +GetMember +Push "testcases" +GetMember +Push "TestMaintainOrder" +NewMethod +Pop +Push 0.0, "com" +GetVariable +Push "jpexs" +GetMember +Push "flash" +GetMember +Push "test" +GetMember +Push "testcases" +GetMember +Push "TestReturnInConstructor" +NewMethod +Pop +} +SetMember +Push 1, null, "com" +GetVariable +Push "jpexs" +GetMember +Push "flash" +GetMember +Push "test" +GetMember +Push "TestLoader" +GetMember +Push "prototype" +GetMember +Push 3, "ASSetPropFlags" +CallFunction +loc03d2:Pop diff --git a/libsrc/ffdec_lib/testexpected/as2/__Packages/com/jpexs/flash/test/testcases/TestCallSetterGetter.as b/libsrc/ffdec_lib/testexpected/as2/__Packages/com/jpexs/flash/test/testcases/TestCallSetterGetter.as new file mode 100644 index 000000000..1b4961433 --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/__Packages/com/jpexs/flash/test/testcases/TestCallSetterGetter.as @@ -0,0 +1,215 @@ +ConstantPool "_global", "com", "Object", "jpexs", "flash", "test", "testcases", "TestCallSetterGetter", "prototype", "testSetterCall", "myobj", "__set__myvar", "testGetterCall", "__get__myvar", "testStatGetterCall", "TestSetterGetter", "__get__mystvar", "testStatSetterCall", "__set__mystvar", "ASSetPropFlags" +Push "_global" +GetVariable +Push "com" +GetMember +Not +Not +If loc011f +Push "_global" +GetVariable +Push "com", 0.0, "Object" +NewObject +SetMember +loc011f:Pop +Push "_global" +GetVariable +Push "com" +GetMember +Push "jpexs" +GetMember +Not +Not +If loc0157 +Push "_global" +GetVariable +Push "com" +GetMember +Push "jpexs", 0.0, "Object" +NewObject +SetMember +loc0157:Pop +Push "_global" +GetVariable +Push "com" +GetMember +Push "jpexs" +GetMember +Push "flash" +GetMember +Not +Not +If loc019b +Push "_global" +GetVariable +Push "com" +GetMember +Push "jpexs" +GetMember +Push "flash", 0.0, "Object" +NewObject +SetMember +loc019b:Pop +Push "_global" +GetVariable +Push "com" +GetMember +Push "jpexs" +GetMember +Push "flash" +GetMember +Push "test" +GetMember +Not +Not +If loc01eb +Push "_global" +GetVariable +Push "com" +GetMember +Push "jpexs" +GetMember +Push "flash" +GetMember +Push "test", 0.0, "Object" +NewObject +SetMember +loc01eb:Pop +Push "_global" +GetVariable +Push "com" +GetMember +Push "jpexs" +GetMember +Push "flash" +GetMember +Push "test" +GetMember +Push "testcases" +GetMember +Not +Not +If loc0247 +Push "_global" +GetVariable +Push "com" +GetMember +Push "jpexs" +GetMember +Push "flash" +GetMember +Push "test" +GetMember +Push "testcases", 0.0, "Object" +NewObject +SetMember +loc0247:Pop +Push "_global" +GetVariable +Push "com" +GetMember +Push "jpexs" +GetMember +Push "flash" +GetMember +Push "test" +GetMember +Push "testcases" +GetMember +Push "TestCallSetterGetter" +GetMember +Not +Not +If loc03d5 +Push "com" +GetVariable +Push "jpexs" +GetMember +Push "flash" +GetMember +Push "test" +GetMember +Push "testcases" +GetMember +Push "TestCallSetterGetter" +DefineFunction "", 0 { +} +StoreRegister 1 +SetMember +Push register1, "prototype" +GetMember +StoreRegister 2 +Pop +Push register2, "testSetterCall" +DefineFunction2 "", 0, 2, false, false, true, false, true, false, false, true, false { +Push 5, 1, register1, "myobj" +GetMember +Push "__set__myvar" +CallMethod +Pop +} +SetMember +Push register2, "testGetterCall" +DefineFunction2 "", 0, 2, false, false, true, false, true, false, false, true, false { +Push 0.0, register1, "myobj" +GetMember +Push "__get__myvar" +CallMethod +Return +} +SetMember +Push register2, "testStatGetterCall" +DefineFunction "", 0 { +Push 0.0, "com" +GetVariable +Push "jpexs" +GetMember +Push "flash" +GetMember +Push "test" +GetMember +Push "testcases" +GetMember +Push "TestSetterGetter" +GetMember +Push "__get__mystvar" +CallMethod +Return +} +SetMember +Push register2, "testStatSetterCall" +DefineFunction "", 1, "val" { +Push 6, 1, "com" +GetVariable +Push "jpexs" +GetMember +Push "flash" +GetMember +Push "test" +GetMember +Push "testcases" +GetMember +Push "TestSetterGetter" +GetMember +Push "__set__mystvar" +CallMethod +Pop +} +SetMember +Push 1, null, "com" +GetVariable +Push "jpexs" +GetMember +Push "flash" +GetMember +Push "test" +GetMember +Push "testcases" +GetMember +Push "TestCallSetterGetter" +GetMember +Push "prototype" +GetMember +Push 3, "ASSetPropFlags" +CallFunction +loc03d5:Pop diff --git a/libsrc/ffdec_lib/testexpected/as2/__Packages/com/jpexs/flash/test/testcases/TestMaintainOrder.as b/libsrc/ffdec_lib/testexpected/as2/__Packages/com/jpexs/flash/test/testcases/TestMaintainOrder.as new file mode 100644 index 000000000..6d05b8c61 --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/__Packages/com/jpexs/flash/test/testcases/TestMaintainOrder.as @@ -0,0 +1,217 @@ +ConstantPool "_global", "com", "Object", "jpexs", "flash", "test", "testcases", "TestMaintainOrder", "prototype", "h", "8", "i", "9", "j", "10", "k", "11", "l", "12", "m", "13", "_x2", "after _x1", "a", "b", "c", "d", "e", "f", "g", "_x1", "after method m", "ASSetPropFlags" +Push "_global" +GetVariable +Push "com" +GetMember +Not +Not +If loc00d4 +Push "_global" +GetVariable +Push "com", 0.0, "Object" +NewObject +SetMember +loc00d4:Pop +Push "_global" +GetVariable +Push "com" +GetMember +Push "jpexs" +GetMember +Not +Not +If loc010c +Push "_global" +GetVariable +Push "com" +GetMember +Push "jpexs", 0.0, "Object" +NewObject +SetMember +loc010c:Pop +Push "_global" +GetVariable +Push "com" +GetMember +Push "jpexs" +GetMember +Push "flash" +GetMember +Not +Not +If loc0150 +Push "_global" +GetVariable +Push "com" +GetMember +Push "jpexs" +GetMember +Push "flash", 0.0, "Object" +NewObject +SetMember +loc0150:Pop +Push "_global" +GetVariable +Push "com" +GetMember +Push "jpexs" +GetMember +Push "flash" +GetMember +Push "test" +GetMember +Not +Not +If loc01a0 +Push "_global" +GetVariable +Push "com" +GetMember +Push "jpexs" +GetMember +Push "flash" +GetMember +Push "test", 0.0, "Object" +NewObject +SetMember +loc01a0:Pop +Push "_global" +GetVariable +Push "com" +GetMember +Push "jpexs" +GetMember +Push "flash" +GetMember +Push "test" +GetMember +Push "testcases" +GetMember +Not +Not +If loc01fc +Push "_global" +GetVariable +Push "com" +GetMember +Push "jpexs" +GetMember +Push "flash" +GetMember +Push "test" +GetMember +Push "testcases", 0.0, "Object" +NewObject +SetMember +loc01fc:Pop +Push "_global" +GetVariable +Push "com" +GetMember +Push "jpexs" +GetMember +Push "flash" +GetMember +Push "test" +GetMember +Push "testcases" +GetMember +Push "TestMaintainOrder" +GetMember +Not +Not +If loc03a5 +Push "com" +GetVariable +Push "jpexs" +GetMember +Push "flash" +GetMember +Push "test" +GetMember +Push "testcases" +GetMember +Push "TestMaintainOrder" +DefineFunction "", 0 { +} +StoreRegister 1 +SetMember +Push register1, "prototype" +GetMember +StoreRegister 2 +Pop +Push register2, "h" +DefineFunction "", 0 { +Push "8" +Trace +} +SetMember +Push register2, "i" +DefineFunction "", 0 { +Push "9" +Trace +} +SetMember +Push register1, "j" +DefineFunction "", 0 { +Push "10" +Trace +} +SetMember +Push register1, "k" +DefineFunction "", 0 { +Push "11" +Trace +} +SetMember +Push register2, "l" +DefineFunction "", 0 { +Push "12" +Trace +} +SetMember +Push register1, "m" +DefineFunction "", 0 { +Push "13" +Trace +} +SetMember +Push register2, "_x2" +DefineFunction "", 0 { +Push "after _x1" +Trace +} +SetMember +Push register2, "a", 1 +SetMember +Push register1, "b", 2 +SetMember +Push register2, "c", 3 +SetMember +Push register1, "d", 4 +SetMember +Push register1, "e", 5 +SetMember +Push register2, "f", 6 +SetMember +Push register2, "g", 7 +SetMember +Push register2, "_x1", "after method m" +SetMember +Push 1, null, "com" +GetVariable +Push "jpexs" +GetMember +Push "flash" +GetMember +Push "test" +GetMember +Push "testcases" +GetMember +Push "TestMaintainOrder" +GetMember +Push "prototype" +GetMember +Push 3, "ASSetPropFlags" +CallFunction +loc03a5:Pop diff --git a/libsrc/ffdec_lib/testexpected/as2/__Packages/com/jpexs/flash/test/testcases/TestReturnInConstructor.as b/libsrc/ffdec_lib/testexpected/as2/__Packages/com/jpexs/flash/test/testcases/TestReturnInConstructor.as new file mode 100644 index 000000000..76e6e728c --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/__Packages/com/jpexs/flash/test/testcases/TestReturnInConstructor.as @@ -0,0 +1,191 @@ +ConstantPool "_global", "com", "Object", "jpexs", "flash", "test", "testcases", "TestReturnInConstructor", "A", "B", "prototype", "func", "ASSetPropFlags" +Push "_global" +GetVariable +Push "com" +GetMember +Not +Not +If loc0098 +Push "_global" +GetVariable +Push "com", 0.0, "Object" +NewObject +SetMember +loc0098:Pop +Push "_global" +GetVariable +Push "com" +GetMember +Push "jpexs" +GetMember +Not +Not +If loc00d0 +Push "_global" +GetVariable +Push "com" +GetMember +Push "jpexs", 0.0, "Object" +NewObject +SetMember +loc00d0:Pop +Push "_global" +GetVariable +Push "com" +GetMember +Push "jpexs" +GetMember +Push "flash" +GetMember +Not +Not +If loc0114 +Push "_global" +GetVariable +Push "com" +GetMember +Push "jpexs" +GetMember +Push "flash", 0.0, "Object" +NewObject +SetMember +loc0114:Pop +Push "_global" +GetVariable +Push "com" +GetMember +Push "jpexs" +GetMember +Push "flash" +GetMember +Push "test" +GetMember +Not +Not +If loc0164 +Push "_global" +GetVariable +Push "com" +GetMember +Push "jpexs" +GetMember +Push "flash" +GetMember +Push "test", 0.0, "Object" +NewObject +SetMember +loc0164:Pop +Push "_global" +GetVariable +Push "com" +GetMember +Push "jpexs" +GetMember +Push "flash" +GetMember +Push "test" +GetMember +Push "testcases" +GetMember +Not +Not +If loc01c0 +Push "_global" +GetVariable +Push "com" +GetMember +Push "jpexs" +GetMember +Push "flash" +GetMember +Push "test" +GetMember +Push "testcases", 0.0, "Object" +NewObject +SetMember +loc01c0:Pop +Push "_global" +GetVariable +Push "com" +GetMember +Push "jpexs" +GetMember +Push "flash" +GetMember +Push "test" +GetMember +Push "testcases" +GetMember +Push "TestReturnInConstructor" +GetMember +Not +Not +If loc02e7 +Push "com" +GetVariable +Push "jpexs" +GetMember +Push "flash" +GetMember +Push "test" +GetMember +Push "testcases" +GetMember +Push "TestReturnInConstructor" +DefineFunction2 "", 0, 2, false, false, true, false, true, false, true, false, false { +Push 3 +StoreRegister 1 +Pop +Push register1, 3 +Equals2 +Not +If loc0249 +Push "A" +Trace +Push undefined +Return +loc0249:Push "B" +Trace +} +StoreRegister 1 +SetMember +Push register1, "prototype" +GetMember +StoreRegister 2 +Pop +Push register2, "func" +DefineFunction2 "", 0, 2, false, false, true, false, true, false, true, false, false { +Push 3 +StoreRegister 1 +Pop +Push register1, 3 +Equals2 +Not +If loc029c +Push "A" +Trace +Push undefined +Return +loc029c:Push "B" +Trace +Push 5 +Return +} +SetMember +Push 1, null, "com" +GetVariable +Push "jpexs" +GetMember +Push "flash" +GetMember +Push "test" +GetMember +Push "testcases" +GetMember +Push "TestReturnInConstructor" +GetMember +Push "prototype" +GetMember +Push 3, "ASSetPropFlags" +CallFunction +loc02e7:Pop diff --git a/libsrc/ffdec_lib/testexpected/as2/__Packages/com/jpexs/flash/test/testcases/TestSetterGetter.as b/libsrc/ffdec_lib/testexpected/as2/__Packages/com/jpexs/flash/test/testcases/TestSetterGetter.as new file mode 100644 index 000000000..e4553fbc7 --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/__Packages/com/jpexs/flash/test/testcases/TestSetterGetter.as @@ -0,0 +1,281 @@ +ConstantPool "_global", "com", "Object", "jpexs", "flash", "test", "testcases", "TestSetterGetter", "prototype", "__get__mystvar", "_mystvar", "__set__mystvar", "__get__myvar", "_myvar", "__set__myvar", "__get__myvargetonly", "_myvargetonly", "__set__myvarsetonly", "_myvarsetonly", "__get__myvarsetonly", "classic", "okay", "mystvar", "addProperty", "myvar", "myvargetonly", "myvarsetonly", "ASSetPropFlags" +Push "_global" +GetVariable +Push "com" +GetMember +Not +Not +If loc0169 +Push "_global" +GetVariable +Push "com", 0.0, "Object" +NewObject +SetMember +loc0169:Pop +Push "_global" +GetVariable +Push "com" +GetMember +Push "jpexs" +GetMember +Not +Not +If loc01a1 +Push "_global" +GetVariable +Push "com" +GetMember +Push "jpexs", 0.0, "Object" +NewObject +SetMember +loc01a1:Pop +Push "_global" +GetVariable +Push "com" +GetMember +Push "jpexs" +GetMember +Push "flash" +GetMember +Not +Not +If loc01e5 +Push "_global" +GetVariable +Push "com" +GetMember +Push "jpexs" +GetMember +Push "flash", 0.0, "Object" +NewObject +SetMember +loc01e5:Pop +Push "_global" +GetVariable +Push "com" +GetMember +Push "jpexs" +GetMember +Push "flash" +GetMember +Push "test" +GetMember +Not +Not +If loc0235 +Push "_global" +GetVariable +Push "com" +GetMember +Push "jpexs" +GetMember +Push "flash" +GetMember +Push "test", 0.0, "Object" +NewObject +SetMember +loc0235:Pop +Push "_global" +GetVariable +Push "com" +GetMember +Push "jpexs" +GetMember +Push "flash" +GetMember +Push "test" +GetMember +Push "testcases" +GetMember +Not +Not +If loc0291 +Push "_global" +GetVariable +Push "com" +GetMember +Push "jpexs" +GetMember +Push "flash" +GetMember +Push "test" +GetMember +Push "testcases", 0.0, "Object" +NewObject +SetMember +loc0291:Pop +Push "_global" +GetVariable +Push "com" +GetMember +Push "jpexs" +GetMember +Push "flash" +GetMember +Push "test" +GetMember +Push "testcases" +GetMember +Push "TestSetterGetter" +GetMember +Not +Not +If loc0554 +Push "com" +GetVariable +Push "jpexs" +GetMember +Push "flash" +GetMember +Push "test" +GetMember +Push "testcases" +GetMember +Push "TestSetterGetter" +DefineFunction "", 0 { +} +StoreRegister 1 +SetMember +Push register1, "prototype" +GetMember +StoreRegister 2 +Pop +Push register1, "__get__mystvar" +DefineFunction "", 0 { +Push "com" +GetVariable +Push "jpexs" +GetMember +Push "flash" +GetMember +Push "test" +GetMember +Push "testcases" +GetMember +Push "TestSetterGetter" +GetMember +Push "_mystvar" +GetMember +Return +} +SetMember +Push register1, "__set__mystvar" +DefineFunction2 "", 1, 2, false, false, true, false, true, false, true, false, false, 1, "val" { +Push "com" +GetVariable +Push "jpexs" +GetMember +Push "flash" +GetMember +Push "test" +GetMember +Push "testcases" +GetMember +Push "TestSetterGetter" +GetMember +Push "_mystvar", register1 +SetMember +Push 0.0, "com" +GetVariable +Push "jpexs" +GetMember +Push "flash" +GetMember +Push "test" +GetMember +Push "testcases" +GetMember +Push "TestSetterGetter" +GetMember +Push "__get__mystvar" +CallMethod +Return +} +SetMember +Push register2, "__get__myvar" +DefineFunction2 "", 0, 2, false, false, true, false, true, false, false, true, false { +Push register1, "_myvar" +GetMember +Return +} +SetMember +Push register2, "__set__myvar" +DefineFunction2 "", 1, 3, false, false, true, false, true, false, false, true, false, 2, "val" { +Push register1, "_myvar", register2 +SetMember +Push 0.0, register1, "__get__myvar" +CallMethod +Return +} +SetMember +Push register2, "__get__myvargetonly" +DefineFunction2 "", 0, 2, false, false, true, false, true, false, false, true, false { +Push register1, "_myvargetonly" +GetMember +Return +} +SetMember +Push register2, "__set__myvarsetonly" +DefineFunction2 "", 1, 3, false, false, true, false, true, false, false, true, false, 2, "val" { +Push register1, "_myvarsetonly", register2 +SetMember +Push 0.0, register1, "__get__myvarsetonly" +CallMethod +Return +} +SetMember +Push register2, "classic" +DefineFunction "", 0 { +Push "okay" +Trace +} +SetMember +Push register2, "_myvar", 1 +SetMember +Push register1, "_mystvar", 2 +SetMember +Push register2, "_myvarsetonly", 3 +SetMember +Push register2, "_myvargetonly", 4 +SetMember +Push register1, "__set__mystvar" +GetMember +Push register1, "__get__mystvar" +GetMember +Push "mystvar", 3, register1, "addProperty" +CallMethod +Push register2, "__set__myvar" +GetMember +Push register2, "__get__myvar" +GetMember +Push "myvar", 3, register2, "addProperty" +CallMethod +DefineFunction "", 0 { +} +Push register2, "__get__myvargetonly" +GetMember +Push "myvargetonly", 3, register2, "addProperty" +CallMethod +Push register2, "__set__myvarsetonly" +GetMember +DefineFunction "", 0 { +} +Push "myvarsetonly", 3, register2, "addProperty" +CallMethod +Push 1, null, "com" +GetVariable +Push "jpexs" +GetMember +Push "flash" +GetMember +Push "test" +GetMember +Push "testcases" +GetMember +Push "TestSetterGetter" +GetMember +Push "prototype" +GetMember +Push 3, "ASSetPropFlags" +CallFunction +loc0554:Pop diff --git a/libsrc/ffdec_lib/testexpected/as2/__Packages/com/jpexs/flash/test/testcases/TestSuper2SetterGetter.as b/libsrc/ffdec_lib/testexpected/as2/__Packages/com/jpexs/flash/test/testcases/TestSuper2SetterGetter.as new file mode 100644 index 000000000..d35ed0c70 --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/__Packages/com/jpexs/flash/test/testcases/TestSuper2SetterGetter.as @@ -0,0 +1,232 @@ +ConstantPool "_global", "com", "Object", "jpexs", "flash", "test", "testcases", "TestSuper2SetterGetter", "TestSuperSetterGetter", "prototype", "testSuperGetSet", "__set__myvar", "__get__myvar", "ASSetPropFlags" +Push "_global" +GetVariable +Push "com" +GetMember +Not +Not +If loc00ce +Push "_global" +GetVariable +Push "com", 0.0, "Object" +NewObject +SetMember +loc00ce:Pop +Push "_global" +GetVariable +Push "com" +GetMember +Push "jpexs" +GetMember +Not +Not +If loc0106 +Push "_global" +GetVariable +Push "com" +GetMember +Push "jpexs", 0.0, "Object" +NewObject +SetMember +loc0106:Pop +Push "_global" +GetVariable +Push "com" +GetMember +Push "jpexs" +GetMember +Push "flash" +GetMember +Not +Not +If loc014a +Push "_global" +GetVariable +Push "com" +GetMember +Push "jpexs" +GetMember +Push "flash", 0.0, "Object" +NewObject +SetMember +loc014a:Pop +Push "_global" +GetVariable +Push "com" +GetMember +Push "jpexs" +GetMember +Push "flash" +GetMember +Push "test" +GetMember +Not +Not +If loc019a +Push "_global" +GetVariable +Push "com" +GetMember +Push "jpexs" +GetMember +Push "flash" +GetMember +Push "test", 0.0, "Object" +NewObject +SetMember +loc019a:Pop +Push "_global" +GetVariable +Push "com" +GetMember +Push "jpexs" +GetMember +Push "flash" +GetMember +Push "test" +GetMember +Push "testcases" +GetMember +Not +Not +If loc01f6 +Push "_global" +GetVariable +Push "com" +GetMember +Push "jpexs" +GetMember +Push "flash" +GetMember +Push "test" +GetMember +Push "testcases", 0.0, "Object" +NewObject +SetMember +loc01f6:Pop +Push "_global" +GetVariable +Push "com" +GetMember +Push "jpexs" +GetMember +Push "flash" +GetMember +Push "test" +GetMember +Push "testcases" +GetMember +Push "TestSuper2SetterGetter" +GetMember +Not +Not +If loc03fa +Push "com" +GetVariable +Push "jpexs" +GetMember +Push "flash" +GetMember +Push "test" +GetMember +Push "testcases" +GetMember +Push "TestSuper2SetterGetter" +DefineFunction2 "", 0, 2, false, false, false, true, true, false, true, false, false { +Push 0.0, register1, undefined +CallMethod +Pop +} +StoreRegister 1 +SetMember +Push "com" +GetVariable +Push "jpexs" +GetMember +Push "flash" +GetMember +Push "test" +GetMember +Push "testcases" +GetMember +Push "TestSuper2SetterGetter" +GetMember +Push "com" +GetVariable +Push "jpexs" +GetMember +Push "flash" +GetMember +Push "test" +GetMember +Push "testcases" +GetMember +Push "TestSuperSetterGetter" +GetMember +Extends +Push register1, "prototype" +GetMember +StoreRegister 2 +Pop +Push register2, "testSuperGetSet" +DefineFunction2 "", 0, 2, false, false, false, true, true, false, true, false, false { +Push 3, 1, register1, "__set__myvar" +CallMethod +Pop +Push 0.0, register1, "__get__myvar" +CallMethod +Trace +Push 0.0, 0.0, register1, "__get__myvar" +CallMethod +Push undefined +CallMethod +Pop +Push 0.0, 0.0, register1, "__get__myvar" +CallMethod +Push undefined +NewMethod +Pop +Push 0.0, register1, "__get__myvar" +CallMethod +Delete2 +Pop +Push 0.0, register1, "__get__myvar" +CallMethod +Increment +Push 1, register1, "__set__myvar" +CallMethod +Pop +Push 0.0, register1, "__get__myvar" +CallMethod +Push 0.0, register1, "__get__myvar" +CallMethod +Increment +Push 1, register1, "__set__myvar" +CallMethod +Pop +Trace +Push 0.0, register1, "__get__myvar" +CallMethod +Increment +Push 1, register1, "__set__myvar" +CallMethod +Trace +} +SetMember +Push 1, null, "com" +GetVariable +Push "jpexs" +GetMember +Push "flash" +GetMember +Push "test" +GetMember +Push "testcases" +GetMember +Push "TestSuper2SetterGetter" +GetMember +Push "prototype" +GetMember +Push 3, "ASSetPropFlags" +CallFunction +loc03fa:Pop diff --git a/libsrc/ffdec_lib/testexpected/as2/__Packages/com/jpexs/flash/test/testcases/TestSuperSetterGetter.as b/libsrc/ffdec_lib/testexpected/as2/__Packages/com/jpexs/flash/test/testcases/TestSuperSetterGetter.as new file mode 100644 index 000000000..616c713cd --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/__Packages/com/jpexs/flash/test/testcases/TestSuperSetterGetter.as @@ -0,0 +1,338 @@ +ConstantPool "_global", "com", "Object", "jpexs", "flash", "test", "testcases", "TestSuperSetterGetter", "TestSetterGetter", "prototype", "__get__myvar2", "_myvar2", "__set__myvar2", "testThisGetSet", "testThisParentGetSet", "__set__myvar", "__get__myvar", "testSuperGetSet", "myvar2", "addProperty", "ASSetPropFlags" +Push "_global" +GetVariable +Push "com" +GetMember +Not +Not +If loc0123 +Push "_global" +GetVariable +Push "com", 0.0, "Object" +NewObject +SetMember +loc0123:Pop +Push "_global" +GetVariable +Push "com" +GetMember +Push "jpexs" +GetMember +Not +Not +If loc015b +Push "_global" +GetVariable +Push "com" +GetMember +Push "jpexs", 0.0, "Object" +NewObject +SetMember +loc015b:Pop +Push "_global" +GetVariable +Push "com" +GetMember +Push "jpexs" +GetMember +Push "flash" +GetMember +Not +Not +If loc019f +Push "_global" +GetVariable +Push "com" +GetMember +Push "jpexs" +GetMember +Push "flash", 0.0, "Object" +NewObject +SetMember +loc019f:Pop +Push "_global" +GetVariable +Push "com" +GetMember +Push "jpexs" +GetMember +Push "flash" +GetMember +Push "test" +GetMember +Not +Not +If loc01ef +Push "_global" +GetVariable +Push "com" +GetMember +Push "jpexs" +GetMember +Push "flash" +GetMember +Push "test", 0.0, "Object" +NewObject +SetMember +loc01ef:Pop +Push "_global" +GetVariable +Push "com" +GetMember +Push "jpexs" +GetMember +Push "flash" +GetMember +Push "test" +GetMember +Push "testcases" +GetMember +Not +Not +If loc024b +Push "_global" +GetVariable +Push "com" +GetMember +Push "jpexs" +GetMember +Push "flash" +GetMember +Push "test" +GetMember +Push "testcases", 0.0, "Object" +NewObject +SetMember +loc024b:Pop +Push "_global" +GetVariable +Push "com" +GetMember +Push "jpexs" +GetMember +Push "flash" +GetMember +Push "test" +GetMember +Push "testcases" +GetMember +Push "TestSuperSetterGetter" +GetMember +Not +Not +If loc069f +Push "com" +GetVariable +Push "jpexs" +GetMember +Push "flash" +GetMember +Push "test" +GetMember +Push "testcases" +GetMember +Push "TestSuperSetterGetter" +DefineFunction2 "", 0, 2, false, false, false, true, true, false, true, false, false { +Push 0.0, register1, undefined +CallMethod +Pop +} +StoreRegister 1 +SetMember +Push "com" +GetVariable +Push "jpexs" +GetMember +Push "flash" +GetMember +Push "test" +GetMember +Push "testcases" +GetMember +Push "TestSuperSetterGetter" +GetMember +Push "com" +GetVariable +Push "jpexs" +GetMember +Push "flash" +GetMember +Push "test" +GetMember +Push "testcases" +GetMember +Push "TestSetterGetter" +GetMember +Extends +Push register1, "prototype" +GetMember +StoreRegister 2 +Pop +Push register2, "__get__myvar2" +DefineFunction2 "", 0, 2, false, false, true, false, true, false, false, true, false { +Push register1, "_myvar2" +GetMember +Return +} +SetMember +Push register2, "__set__myvar2" +DefineFunction2 "", 1, 3, false, false, true, false, true, false, false, true, false, 2, "val" { +Push register1, "_myvar2", register2 +SetMember +Push 0.0, register1, "__get__myvar2" +CallMethod +Return +} +SetMember +Push register2, "testThisGetSet" +DefineFunction2 "", 0, 2, false, false, true, false, true, false, false, true, false { +Push 2, 1, register1, "__set__myvar2" +CallMethod +Pop +Push 0.0, register1, "__get__myvar2" +CallMethod +Trace +Push 0.0, 0.0, register1, "__get__myvar2" +CallMethod +Push undefined +CallMethod +Pop +Push 0.0, 0.0, register1, "__get__myvar2" +CallMethod +Push undefined +NewMethod +Pop +Push 0.0, register1, "__get__myvar2" +CallMethod +Increment +Push 1, register1, "__set__myvar2" +CallMethod +Pop +Push 0.0, register1, "__get__myvar2" +CallMethod +Push 0.0, register1, "__get__myvar2" +CallMethod +Increment +Push 1, register1, "__set__myvar2" +CallMethod +Pop +Trace +Push 0.0, register1, "__get__myvar2" +CallMethod +Increment +Push 1, register1, "__set__myvar2" +CallMethod +Trace +} +SetMember +Push register2, "testThisParentGetSet" +DefineFunction2 "", 0, 2, false, false, true, false, true, false, false, true, false { +Push 2, 1, register1, "__set__myvar" +CallMethod +Pop +Push 0.0, register1, "__get__myvar" +CallMethod +Trace +Push 0.0, 0.0, register1, "__get__myvar" +CallMethod +Push undefined +CallMethod +Pop +Push 0.0, 0.0, register1, "__get__myvar" +CallMethod +Push undefined +NewMethod +Pop +Push 0.0, register1, "__get__myvar" +CallMethod +Increment +Push 1, register1, "__set__myvar" +CallMethod +Pop +Push 0.0, register1, "__get__myvar" +CallMethod +Push 0.0, register1, "__get__myvar" +CallMethod +Increment +Push 1, register1, "__set__myvar" +CallMethod +Pop +Trace +Push 0.0, register1, "__get__myvar" +CallMethod +Increment +Push 1, register1, "__set__myvar" +CallMethod +Trace +} +SetMember +Push register2, "testSuperGetSet" +DefineFunction2 "", 0, 2, false, false, false, true, true, false, true, false, false { +Push 3, 1, register1, "__set__myvar" +CallMethod +Pop +Push 0.0, register1, "__get__myvar" +CallMethod +Trace +Push 0.0, 0.0, register1, "__get__myvar" +CallMethod +Push undefined +CallMethod +Pop +Push 0.0, 0.0, register1, "__get__myvar" +CallMethod +Push undefined +NewMethod +Pop +Push 0.0, register1, "__get__myvar" +CallMethod +Delete2 +Pop +Push 0.0, register1, "__get__myvar" +CallMethod +Increment +Push 1, register1, "__set__myvar" +CallMethod +Pop +Push 0.0, register1, "__get__myvar" +CallMethod +Push 0.0, register1, "__get__myvar" +CallMethod +Increment +Push 1, register1, "__set__myvar" +CallMethod +Pop +Trace +Push 0.0, register1, "__get__myvar" +CallMethod +Increment +Push 1, register1, "__set__myvar" +CallMethod +Trace +} +SetMember +Push register2, "_myvar2", 1 +SetMember +Push register2, "__set__myvar2" +GetMember +Push register2, "__get__myvar2" +GetMember +Push "myvar2", 3, register2, "addProperty" +CallMethod +Push 1, null, "com" +GetVariable +Push "jpexs" +GetMember +Push "flash" +GetMember +Push "test" +GetMember +Push "testcases" +GetMember +Push "TestSuperSetterGetter" +GetMember +Push "prototype" +GetMember +Push 3, "ASSetPropFlags" +CallFunction +loc069f:Pop diff --git a/libsrc/ffdec_lib/testexpected/as2/__Packages/com/jpexs/flash/test/testcases/TestVarsMethods.as b/libsrc/ffdec_lib/testexpected/as2/__Packages/com/jpexs/flash/test/testcases/TestVarsMethods.as new file mode 100644 index 000000000..3b2a32f3a --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/__Packages/com/jpexs/flash/test/testcases/TestVarsMethods.as @@ -0,0 +1,177 @@ +ConstantPool "_global", "com", "Object", "jpexs", "flash", "test", "testcases", "TestVarsMethods", "constructor", "prototype", "instMethod", "instance method", "statMethod", "static method", "instVar", "statVar", "ASSetPropFlags" +Push "_global" +GetVariable +Push "com" +GetMember +Not +Not +If loc00d7 +Push "_global" +GetVariable +Push "com", 0.0, "Object" +NewObject +SetMember +loc00d7:Pop +Push "_global" +GetVariable +Push "com" +GetMember +Push "jpexs" +GetMember +Not +Not +If loc010f +Push "_global" +GetVariable +Push "com" +GetMember +Push "jpexs", 0.0, "Object" +NewObject +SetMember +loc010f:Pop +Push "_global" +GetVariable +Push "com" +GetMember +Push "jpexs" +GetMember +Push "flash" +GetMember +Not +Not +If loc0153 +Push "_global" +GetVariable +Push "com" +GetMember +Push "jpexs" +GetMember +Push "flash", 0.0, "Object" +NewObject +SetMember +loc0153:Pop +Push "_global" +GetVariable +Push "com" +GetMember +Push "jpexs" +GetMember +Push "flash" +GetMember +Push "test" +GetMember +Not +Not +If loc01a3 +Push "_global" +GetVariable +Push "com" +GetMember +Push "jpexs" +GetMember +Push "flash" +GetMember +Push "test", 0.0, "Object" +NewObject +SetMember +loc01a3:Pop +Push "_global" +GetVariable +Push "com" +GetMember +Push "jpexs" +GetMember +Push "flash" +GetMember +Push "test" +GetMember +Push "testcases" +GetMember +Not +Not +If loc01ff +Push "_global" +GetVariable +Push "com" +GetMember +Push "jpexs" +GetMember +Push "flash" +GetMember +Push "test" +GetMember +Push "testcases", 0.0, "Object" +NewObject +SetMember +loc01ff:Pop +Push "_global" +GetVariable +Push "com" +GetMember +Push "jpexs" +GetMember +Push "flash" +GetMember +Push "test" +GetMember +Push "testcases" +GetMember +Push "TestVarsMethods" +GetMember +Not +Not +If loc02f5 +Push "com" +GetVariable +Push "jpexs" +GetMember +Push "flash" +GetMember +Push "test" +GetMember +Push "testcases" +GetMember +Push "TestVarsMethods" +DefineFunction "", 0 { +Push "constructor" +Trace +} +StoreRegister 1 +SetMember +Push register1, "prototype" +GetMember +StoreRegister 2 +Pop +Push register2, "instMethod" +DefineFunction "", 0 { +Push "instance method" +Trace +} +SetMember +Push register1, "statMethod" +DefineFunction "", 0 { +Push "static method" +Trace +} +SetMember +Push register2, "instVar", 1 +SetMember +Push register1, "statVar", 2 +SetMember +Push 1, null, "com" +GetVariable +Push "jpexs" +GetMember +Push "flash" +GetMember +Push "test" +GetMember +Push "testcases" +GetMember +Push "TestVarsMethods" +GetMember +Push "prototype" +GetMember +Push 3, "ASSetPropFlags" +CallFunction +loc02f5:Pop diff --git a/libsrc/ffdec_lib/testexpected/as2/frame_1/PlaceObject2_2_Blue Symbol_1/CLIPACTIONRECORD onClipEvent(load).as b/libsrc/ffdec_lib/testexpected/as2/frame_1/PlaceObject2_2_Blue Symbol_1/CLIPACTIONRECORD onClipEvent(load).as new file mode 100644 index 000000000..a26c73c5f --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/frame_1/PlaceObject2_2_Blue Symbol_1/CLIPACTIONRECORD onClipEvent(load).as @@ -0,0 +1,2 @@ +Push "load unload" +Trace diff --git a/libsrc/ffdec_lib/testexpected/as2/frame_23/DoAction.as b/libsrc/ffdec_lib/testexpected/as2/frame_23/DoAction.as new file mode 100644 index 000000000..030cf2c57 --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/frame_23/DoAction.as @@ -0,0 +1 @@ +Stop diff --git a/libsrc/ffdec_lib/testexpected/as2/frame_24/DoAction.as b/libsrc/ffdec_lib/testexpected/as2/frame_24/DoAction.as new file mode 100644 index 000000000..0ddd55990 --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/frame_24/DoAction.as @@ -0,0 +1,8 @@ +ConstantPool "unicodeTest", "k", "היפופוטמי, או א" +Push "unicodeTest" +Trace +Push "k", "היפופוטמי, או א" +DefineLocal +Push "k" +GetVariable +Trace diff --git a/libsrc/ffdec_lib/testexpected/as2/frame_25/DoAction.as b/libsrc/ffdec_lib/testexpected/as2/frame_25/DoAction.as new file mode 100644 index 000000000..9c02d7a99 --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/frame_25/DoAction.as @@ -0,0 +1,19 @@ +ConstantPool "ifWithElseTest", "i", "onTrue", "onFalse" +Push "ifWithElseTest" +Trace +Push "i", 5 +DefineLocal +Push "i" +GetVariable +Push 258 +Equals2 +Not +If loc0056 +Push "onTrue" +Trace +Jump loc0060 +loc0056:Push "onFalse", "i" +GetVariable +Add2 +Trace +loc0060: \ No newline at end of file diff --git a/libsrc/ffdec_lib/testexpected/as2/frame_26/DoAction.as b/libsrc/ffdec_lib/testexpected/as2/frame_26/DoAction.as new file mode 100644 index 000000000..b997ecb32 --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/frame_26/DoAction.as @@ -0,0 +1,21 @@ +ConstantPool "forTest", "i", "hello:" +Push "forTest" +Trace +Push "i", 0.0 +DefineLocal +loc002b:Push "i" +GetVariable +Push 10 +Less2 +Not +If loc0059 +Push "hello:", "i" +GetVariable +Add2 +Trace +Push "i", "i" +GetVariable +Increment +SetVariable +Jump loc002b +loc0059: \ No newline at end of file diff --git a/libsrc/ffdec_lib/testexpected/as2/frame_27/DoAction.as b/libsrc/ffdec_lib/testexpected/as2/frame_27/DoAction.as new file mode 100644 index 000000000..8aba588d0 --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/frame_27/DoAction.as @@ -0,0 +1,21 @@ +ConstantPool "whileTest", "i", "hello:" +Push "whileTest" +Trace +Push "i", 0.0 +DefineLocal +loc002d:Push "i" +GetVariable +Push 10 +Less2 +Not +If loc005b +Push "hello:", "i" +GetVariable +Add2 +Trace +Push "i", "i" +GetVariable +Increment +SetVariable +Jump loc002d +loc005b: \ No newline at end of file diff --git a/libsrc/ffdec_lib/testexpected/as2/frame_28/DoAction.as b/libsrc/ffdec_lib/testexpected/as2/frame_28/DoAction.as new file mode 100644 index 000000000..358b4cadc --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/frame_28/DoAction.as @@ -0,0 +1,40 @@ +ConstantPool "forWithContinueTest", "i", "hello:", "i==5", "hawk", "end of the loop" +Push "forWithContinueTest" +Trace +Push "i", 0.0 +DefineLocal +loc0051:Push "i" +GetVariable +Push 10 +Less2 +Not +If loc00c0 +Push "hello:", "i" +GetVariable +Add2 +Trace +Push "i" +GetVariable +Push 5 +Equals2 +Not +If loc00ab +Push "i==5" +Trace +Push "i" +GetVariable +Push 7 +Equals2 +Not +If loc00a5 +Jump loc00b1 +loc00a5:Push "hawk" +Trace +loc00ab:Push "end of the loop" +Trace +loc00b1:Push "i", "i" +GetVariable +Increment +SetVariable +Jump loc0051 +loc00c0: \ No newline at end of file diff --git a/libsrc/ffdec_lib/testexpected/as2/frame_29/DoAction.as b/libsrc/ffdec_lib/testexpected/as2/frame_29/DoAction.as new file mode 100644 index 000000000..0dd1b123f --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/frame_29/DoAction.as @@ -0,0 +1,20 @@ +ConstantPool "doWhileTest", "i", "i=", "end" +Push "doWhileTest" +Trace +Push "i", 0.0 +DefineLocal +loc002f:Push "i=", "i" +GetVariable +Add2 +Trace +Push "i", "i" +GetVariable +Increment +SetVariable +Push "i" +GetVariable +Push 10 +Less2 +If loc002f +Push "end" +Trace diff --git a/libsrc/ffdec_lib/testexpected/as2/frame_30/DoAction.as b/libsrc/ffdec_lib/testexpected/as2/frame_30/DoAction.as new file mode 100644 index 000000000..265ad9eb4 --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/frame_30/DoAction.as @@ -0,0 +1,39 @@ +ConstantPool "switchTest", "i", "one", "two", "three", "four", "default clause", "scriptend" +Push "switchTest" +Trace +Push "i", 5 +DefineLocal +Push "i" +GetVariable +StoreRegister 0 +Push 0.0 +StrictEquals +If loc00b0 +Push register0, 1 +StrictEquals +If loc00b0 +Push register0, 2 +StrictEquals +If loc00bb +Push register0, 3 +StrictEquals +If loc00c1 +Push register0, 4 +StrictEquals +If loc00cc +Jump loc00d7 +loc00b0:Push "one" +Trace +Jump loc00dd +loc00bb:Push "two" +Trace +loc00c1:Push "three" +Trace +Jump loc00dd +loc00cc:Push "four" +Trace +Jump loc00dd +loc00d7:Push "default clause" +Trace +loc00dd:Push "scriptend" +Trace diff --git a/libsrc/ffdec_lib/testexpected/as2/frame_31/DoAction.as b/libsrc/ffdec_lib/testexpected/as2/frame_31/DoAction.as new file mode 100644 index 000000000..fc092a390 --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/frame_31/DoAction.as @@ -0,0 +1,23 @@ +ConstantPool "strictEqualsTest", "i", "equals strict", "not equals strict" +Push "strictEqualsTest" +Trace +Push "i", 5 +DefineLocal +Push "i" +GetVariable +Push 5 +StrictEquals +Not +If loc0064 +Push "equals strict" +Trace +loc0064:Push "i" +GetVariable +Push 5 +StrictEquals +Not +Not +If loc0080 +Push "not equals strict" +Trace +loc0080: \ No newline at end of file diff --git a/libsrc/ffdec_lib/testexpected/as2/frame_32/DoAction.as b/libsrc/ffdec_lib/testexpected/as2/frame_32/DoAction.as new file mode 100644 index 000000000..2e260a1b7 --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/frame_32/DoAction.as @@ -0,0 +1,55 @@ +ConstantPool "switchForTest", "i", "zero", "five", "ten", "one", "def", "before loop end" +Push "switchForTest" +Trace +Push "i", 0.0 +DefineLocal +loc0050:Push "i" +GetVariable +Push 10 +Less2 +Not +If loc0112 +Push "i" +GetVariable +StoreRegister 0 +Push 0.0 +StrictEquals +If loc00b6 +Push register0, 5 +StrictEquals +If loc00c1 +Push register0, 10 +StrictEquals +If loc00cc +Push register0, 1 +StrictEquals +If loc00d7 +Jump loc00f7 +loc00b6:Push "zero" +Trace +Jump loc0103 +loc00c1:Push "five" +Trace +Jump loc00fd +loc00cc:Push "ten" +Trace +Jump loc00fd +loc00d7:Push "i" +GetVariable +Push 7 +Equals2 +Not +If loc00f1 +Jump loc0103 +loc00f1:Push "one" +Trace +loc00f7:Push "def" +Trace +loc00fd:Push "before loop end" +Trace +loc0103:Push "i", "i" +GetVariable +Increment +SetVariable +Jump loc0050 +loc0112: \ No newline at end of file diff --git a/libsrc/ffdec_lib/testexpected/as2/frame_33/DoAction.as b/libsrc/ffdec_lib/testexpected/as2/frame_33/DoAction.as new file mode 100644 index 000000000..4feac47f0 --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/frame_33/DoAction.as @@ -0,0 +1,14 @@ +DefineFunction2 "hello", 2, 3, false, false, true, false, true, false, true, false, false, 2, "what", 1, "second" { +Push "hello ", register2 +Add2 +Push "! " +Add2 +Push register1 +Add2 +Trace +} +Push "functionTest" +Trace +Push 7, "friend", 2, "hello" +CallFunction +Pop diff --git a/libsrc/ffdec_lib/testexpected/as2/frame_34/DoAction.as b/libsrc/ffdec_lib/testexpected/as2/frame_34/DoAction.as new file mode 100644 index 000000000..e3413321a --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/frame_34/DoAction.as @@ -0,0 +1,31 @@ +ConstantPool "multipleConditionsTest", "k", "first", "second", "finish" +Push "multipleConditionsTest" +Trace +Push "k", 5 +DefineLocal +Push "k" +GetVariable +Push 7 +Equals2 +PushDuplicate +Not +If loc0069 +Pop +Push "k" +GetVariable +Push 8 +Equals2 +loc0069:Not +If loc0075 +Push "first" +Trace +loc0075:Push "k" +GetVariable +Push 9 +Equals2 +Not +If loc0090 +Push "second" +Trace +loc0090:Push "finish" +Trace diff --git a/libsrc/ffdec_lib/testexpected/as2/frame_35/DoAction.as b/libsrc/ffdec_lib/testexpected/as2/frame_35/DoAction.as new file mode 100644 index 000000000..36f1e3566 --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/frame_35/DoAction.as @@ -0,0 +1,38 @@ +ConstantPool "multipleConditions2Test", "k", "first", "second", "finish" +Push "multipleConditions2Test" +Trace +Push "k", 5 +DefineLocal +Push "k" +GetVariable +Push 7 +Equals2 +PushDuplicate +Not +If loc006a +Pop +Push "k" +GetVariable +Push 8 +Equals2 +loc006a:Not +If loc0076 +Push "first" +Trace +loc0076:Push "k" +GetVariable +Push 9 +Equals2 +PushDuplicate +If loc009b +Pop +Push "k" +GetVariable +Push 6 +Equals2 +loc009b:Not +If loc00a7 +Push "second" +Trace +loc00a7:Push "finish" +Trace diff --git a/libsrc/ffdec_lib/testexpected/as2/frame_36/DoAction.as b/libsrc/ffdec_lib/testexpected/as2/frame_36/DoAction.as new file mode 100644 index 000000000..3c5417e60 --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/frame_36/DoAction.as @@ -0,0 +1,23 @@ +ConstantPool "chainedAssignmentsTest", "a", "b", "c", "d" +Push "chainedAssignmentsTest" +Trace +Push "a", 7 +DefineLocal +Push "b", 8 +DefineLocal +Push "c", 9 +DefineLocal +Push "d", "c", "b", "a", 10 +StoreRegister 0 +SetVariable +Push register0 +StoreRegister 0 +SetVariable +Push register0 +StoreRegister 0 +SetVariable +Push register0 +DefineLocal +Push "d" +GetVariable +Trace diff --git a/libsrc/ffdec_lib/testexpected/as2/frame_37/DoAction.as b/libsrc/ffdec_lib/testexpected/as2/frame_37/DoAction.as new file mode 100644 index 000000000..beae37329 --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/frame_37/DoAction.as @@ -0,0 +1,50 @@ +ConstantPool "objectsTest", "flashBox", "box1", "Box", "_root", "onEnterFrame", "moveUp", "ship", "Ship", "enemy", "Enemy", "moveDown", "moveRight", "moveLeft", "c", "Cox" +Push "objectsTest" +Trace +Push "flashBox", "box1" +GetVariable +Push 1, "Box" +NewObject +DefineLocal +Push "_root" +GetVariable +Push "onEnterFrame" +DefineFunction "", 0 { +Push 0.0, "flashBox" +GetVariable +Push "moveUp" +CallMethod +Pop +} +SetMember +Push "ship", 200, 1, "Ship" +NewObject +DefineLocal +Push "enemy", 56, 1, "Enemy" +NewObject +DefineLocal +Push 0.5, 1, "ship" +GetVariable +Push "moveDown" +CallMethod +Pop +Push 0.2, 1, "ship" +GetVariable +Push "moveUp" +CallMethod +Pop +Push 230, 1, "enemy" +GetVariable +Push "moveRight" +CallMethod +Pop +Push 100, 1, "enemy" +GetVariable +Push "moveLeft" +CallMethod +Pop +Push "c", "box1" +GetVariable +Push 1, "Cox" +NewObject +DefineLocal diff --git a/libsrc/ffdec_lib/testexpected/as2/frame_38/DoAction.as b/libsrc/ffdec_lib/testexpected/as2/frame_38/DoAction.as new file mode 100644 index 000000000..3c1869b3c --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/frame_38/DoAction.as @@ -0,0 +1,29 @@ +ConstantPool "doWhile2Test", "k" +Push "doWhile2Test" +Trace +Push "k", 5 +DefineLocal +loc0025:Push "k", "k" +GetVariable +Increment +SetVariable +Push "k" +GetVariable +Push 7 +Equals2 +Not +If loc0058 +Push "k", 5, "k" +GetVariable +Multiply +SetVariable +Jump loc0067 +loc0058:Push "k", 5, "k" +GetVariable +Add2 +SetVariable +loc0067:Push "k" +GetVariable +Push 9 +Less2 +If loc0025 diff --git a/libsrc/ffdec_lib/testexpected/as2/frame_39/DoAction.as b/libsrc/ffdec_lib/testexpected/as2/frame_39/DoAction.as new file mode 100644 index 000000000..20e87b986 --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/frame_39/DoAction.as @@ -0,0 +1,34 @@ +ConstantPool "whileAndTest", "a", "b" +Push "whileAndTest" +Trace +Push "a", 5 +DefineLocal +Push "b", 10 +DefineLocal +loc0032:Push "a" +GetVariable +Push 10 +Less2 +PushDuplicate +Not +If loc0058 +Pop +Push "b" +GetVariable +Push 1 +Greater +loc0058:Not +If loc0077 +Push "a", "a" +GetVariable +Increment +SetVariable +Push "b", "b" +GetVariable +Decrement +SetVariable +Jump loc0032 +loc0077:Push "a", 7 +SetVariable +Push "b", 9 +SetVariable diff --git a/libsrc/ffdec_lib/testexpected/as2/frame_40/DoAction.as b/libsrc/ffdec_lib/testexpected/as2/frame_40/DoAction.as new file mode 100644 index 000000000..2585e6ff8 --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/frame_40/DoAction.as @@ -0,0 +1,59 @@ +ConstantPool "forInTest", "testForIn", "arr", "a" +DefineFunction2 "testForIn", 0, 3, false, false, true, false, true, false, true, false, false { +Push 0.0 +InitArray +StoreRegister 1 +Pop +Push register1 +Enumerate2 +loc004b:StoreRegister 0 +Push null +Equals2 +If loc00b2 +Push register0 +StoreRegister 2 +Pop +Push register2, 3 +Greater +Not +If loc00ad +Push register2, 5 +Equals2 +Not +If loc0099 +loc0085:Push null +Equals2 +Not +If loc0085 +Push 7 +Return +loc0099:Push null +Equals2 +Not +If loc0099 +Push 8 +Return +loc00ad:Jump loc004b +} +loc00b2:Push "forInTest" +Trace +Push 0.0, "testForIn" +CallFunction +Trace +Push "arr", 0.0 +InitArray +DefineLocal +Push "arr" +GetVariable +Enumerate2 +loc00df:StoreRegister 0 +Push null +Equals2 +If loc0101 +Push "a", register0 +DefineLocal +Push "a" +GetVariable +Trace +Jump loc00df +loc0101: \ No newline at end of file diff --git a/libsrc/ffdec_lib/testexpected/as2/frame_41/DoAction.as b/libsrc/ffdec_lib/testexpected/as2/frame_41/DoAction.as new file mode 100644 index 000000000..704a72aeb --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/frame_41/DoAction.as @@ -0,0 +1,47 @@ +ConstantPool "tryTest", "k", "bug ", "e", "huu", "next", "bug2 ", "next2", "final", "end" +Push "tryTest" +Trace +Push "k", 5 +DefineLocal +Try "e" { +Push "k", Infinity +SetVariable +Jump loc0070 +} +Catch { +Push "bug ", "e" +GetVariable +Add2 +Trace +} +Finally { +loc0070:Push "huu" +Trace +} +Push "next" +Trace +Try "e" { +Push "k", 6 +SetVariable +Jump loc00a2 +} +Catch { +Push "bug2 ", "e" +GetVariable +Add2 +Trace +} +loc00a2:Push "next2" +Trace +Push "k", 5 +DefineLocal +Try { +Push "k", Infinity +SetVariable +} +Finally { +Push "final" +Trace +} +Push "end" +Trace diff --git a/libsrc/ffdec_lib/testexpected/as2/frame_42/DoAction.as b/libsrc/ffdec_lib/testexpected/as2/frame_42/DoAction.as new file mode 100644 index 000000000..a503b62b2 --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/frame_42/DoAction.as @@ -0,0 +1,14 @@ +ConstantPool "indicesTest", "k", "b" +Push "indicesTest" +Trace +Push "k", 3, 2, 1, 3 +InitArray +DefineLocal +Push "b", "k" +GetVariable +Push 1 +GetMember +DefineLocal +Push "b" +GetVariable +Trace diff --git a/libsrc/ffdec_lib/testexpected/as2/frame_43/DoAction.as b/libsrc/ffdec_lib/testexpected/as2/frame_43/DoAction.as new file mode 100644 index 000000000..8ce918f87 --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/frame_43/DoAction.as @@ -0,0 +1,61 @@ +ConstantPool "incDecTest", "i", "b", "c", "a:", "a", " b:", " c:", "arr", "d", "tst" +DefineFunction "tst", 0 { +Push 1 +Return +} +Push "incDecTest" +Trace +Push "i", 5 +DefineLocal +Push "b", "i" +GetVariable +Push "i", "i" +GetVariable +Increment +SetVariable +DefineLocal +Push "c", "i", "i" +GetVariable +Decrement +StoreRegister 0 +SetVariable +Push register0, 5 +Add2 +DefineLocal +Push "a:", "a" +GetVariable +Add2 +Push " b:" +Add2 +Push "b" +GetVariable +Add2 +Push " c:" +Add2 +Push "c" +GetVariable +Add2 +Trace +Push "arr", 3, 2, 1, 3 +InitArray +DefineLocal +Push "d", "arr" +GetVariable +Push 0.0, "tst" +CallFunction +GetMember +Push "arr" +GetVariable +Push 0.0, "tst" +CallFunction +Push "arr" +GetVariable +Push 0.0, "tst" +CallFunction +GetMember +Increment +SetMember +DefineLocal +Push "d" +GetVariable +Trace diff --git a/libsrc/ffdec_lib/testexpected/as2/frame_44/DoAction.as b/libsrc/ffdec_lib/testexpected/as2/frame_44/DoAction.as new file mode 100644 index 000000000..2b98ead26 --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/frame_44/DoAction.as @@ -0,0 +1,65 @@ +ConstantPool "chainedAssignments2Test", "a", "b", "c", "d", "i" +Push "chainedAssignments2Test" +Trace +Push "a", 5 +DefineLocal +Push "b", 6 +DefineLocal +Push "c", 7 +DefineLocal +Push "d", "c", "b", "a", 4 +StoreRegister 0 +SetVariable +Push register0 +StoreRegister 0 +SetVariable +Push register0 +StoreRegister 0 +SetVariable +Push register0 +DefineLocal +Push "d", "c", "b", "a", 7 +StoreRegister 0 +SetVariable +Push register0 +StoreRegister 0 +SetVariable +Push register0 +StoreRegister 0 +SetVariable +Push register0 +StoreRegister 0 +SetVariable +Push register0, 2 +Greater +Not +If loc00c8 +Push "d" +GetVariable +Trace +loc00c8:Push "d" +GetVariable +Push 1 +Add2 +Trace +Push "i", 0.0 +DefineLocal +loc00e7:Push "i" +GetVariable +Push 5 +Less2 +Not +If loc0125 +Push "i" +GetVariable +Push 7 +Equals2 +Not +If loc0116 +Jump loc0116 +loc0116:Push "i", "i" +GetVariable +Increment +SetVariable +Jump loc00e7 +loc0125: \ No newline at end of file diff --git a/libsrc/ffdec_lib/testexpected/as2/frame_45/DoAction.as b/libsrc/ffdec_lib/testexpected/as2/frame_45/DoAction.as new file mode 100644 index 000000000..52257650b --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/frame_45/DoAction.as @@ -0,0 +1,21 @@ +DefineFunction2 "a", 0, 2, false, false, true, false, true, false, true, false, false { +Push "hi" +Trace +Push 5 +StoreRegister 1 +Pop +Push register1, 7 +Equals2 +Not +If loc0037 +Push undefined +Return +loc0037:Push register1, 9 +Multiply +StoreRegister 1 +Pop +Push register1 +Trace +} +Push "function2Test" +Trace diff --git a/libsrc/ffdec_lib/testexpected/as2/frame_46/DoAction.as b/libsrc/ffdec_lib/testexpected/as2/frame_46/DoAction.as new file mode 100644 index 000000000..b21abe36d --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/frame_46/DoAction.as @@ -0,0 +1,34 @@ +DefineFunction2 "testtry", 0, 2, false, false, true, false, true, false, true, false, false { +Push 5 +StoreRegister 1 +Pop +Try "e" { +Push register1, 3 +Equals2 +Not +If loc0041 +Push undefined +Return +loc0041:Push register1, 4 +Equals2 +Not +If loc0067 +Push 0.0, "Error" +NewObject +Throw +loc0067:Push 7 +StoreRegister 1 +Pop +Jump loc0084 +} +Catch { +Push "error" +Trace +} +Finally { +loc0084:Push "finally" +Trace +} +} +Push "tryFunctionTest" +Trace diff --git a/libsrc/ffdec_lib/testexpected/as2/frame_47/DoAction.as b/libsrc/ffdec_lib/testexpected/as2/frame_47/DoAction.as new file mode 100644 index 000000000..bc40833a7 --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/frame_47/DoAction.as @@ -0,0 +1,17 @@ +ConstantPool "ternarTest", "a", "b" +Push "ternarTest" +Trace +Push "a", 5 +DefineLocal +Push "b", "a" +GetVariable +Push 4 +Equals2 +If loc0048 +Push 3 +Jump loc0050 +loc0048:Push 2 +loc0050:DefineLocal +Push "b" +GetVariable +Trace diff --git a/libsrc/ffdec_lib/testexpected/as2/frame_48/DoAction.as b/libsrc/ffdec_lib/testexpected/as2/frame_48/DoAction.as new file mode 100644 index 000000000..5b0352d39 --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/frame_48/DoAction.as @@ -0,0 +1,60 @@ +DefineFunction2 "tst", 0, 4, false, false, true, false, true, false, true, false, false { +Push 0.0 +InitArray +StoreRegister 2 +Pop +Push register2, 0.0, 0.0 +InitArray +SetMember +Push register2 +Enumerate2 +loc003f:StoreRegister 0 +Push null +Equals2 +If loc00d4 +Push register0 +StoreRegister 3 +Pop +Push register3 +Enumerate2 +loc005d:StoreRegister 0 +Push null +Equals2 +If loc00aa +Push register0 +StoreRegister 1 +Pop +Push register1, 5 +Equals2 +Not +If loc00a5 +loc0086:Push null +Equals2 +Not +If loc0086 +loc0091:Push null +Equals2 +Not +If loc0091 +Push 5 +Return +loc00a5:Jump loc005d +loc00aa:Push register3, 8 +Equals2 +Not +If loc00cf +loc00bb:Push null +Equals2 +Not +If loc00bb +Push 3 +Return +loc00cf:Jump loc003f +loc00d4:Push 8 +Return +} +Push "forInInTest" +Trace +Push 0.0, "tst" +CallFunction +Pop diff --git a/libsrc/ffdec_lib/testexpected/as2/frame_49/DoAction.as b/libsrc/ffdec_lib/testexpected/as2/frame_49/DoAction.as new file mode 100644 index 000000000..803876d28 --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/frame_49/DoAction.as @@ -0,0 +1,17 @@ +DefineFunction2 "tst", 1, 2, false, false, true, false, true, false, true, false, false, 0, "px" { +Push 57 +StoreRegister 1 +Pop +Push register1, 27 +Multiply +StoreRegister 1 +Pop +} +Push "registersFuncTest" +Trace +Push 5, 1, "tst" +CallFunction +Pop +Push "s", 5 +ToString +DefineLocal diff --git a/libsrc/ffdec_lib/testexpected/as2/frame_50/DoAction.as b/libsrc/ffdec_lib/testexpected/as2/frame_50/DoAction.as new file mode 100644 index 000000000..9de34989c --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/frame_50/DoAction.as @@ -0,0 +1,5 @@ +Push "ifFrameLoadedTest" +Trace +WaitForFrame 9, 2 +Push "loaded" +Trace diff --git a/libsrc/ffdec_lib/testexpected/as2/frame_51/DoAction.as b/libsrc/ffdec_lib/testexpected/as2/frame_51/DoAction.as new file mode 100644 index 000000000..90927e14c --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/frame_51/DoAction.as @@ -0,0 +1,42 @@ +ConstantPool "c", "hi", "e", "d", "f", "dd", "function3Test", "tst" +DefineFunction2 "tst", 0, 2, false, false, true, false, true, false, true, false, false { +Push 5 +StoreRegister 1 +Pop +Push "c", 8 +StoreRegister 1 +SetVariable +Push "hi" +Trace +Push register1 +Trace +Push "e", "d", "f", "c", 9 +StoreRegister 0 +SetVariable +Push register0 +StoreRegister 0 +SetVariable +Push register0 +StoreRegister 0 +SetVariable +Push register0 +StoreRegister 0 +SetVariable +Push register0, 5 +Greater +Not +If loc00a5 +Push "dd" +Trace +} +loc00a5:Push "function3Test" +Trace +Push "c", 7 +DefineLocal +Push "d", 7 +DefineLocal +Push "e", 8 +DefineLocal +Push 0.0, "tst" +CallFunction +Pop diff --git a/libsrc/ffdec_lib/testexpected/as2/frame_52/DoAction.as b/libsrc/ffdec_lib/testexpected/as2/frame_52/DoAction.as new file mode 100644 index 000000000..3ba6c485c --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/frame_52/DoAction.as @@ -0,0 +1,40 @@ +ConstantPool "commaOperatorTest", "a", "b", "c", "konec" +Push "commaOperatorTest" +Trace +Push "a", 0.0 +DefineLocal +Push "b", 0.0 +DefineLocal +Push "c", 0.0 +DefineLocal +loc0056:Push "a" +GetVariable +Push "a", "a" +GetVariable +Increment +SetVariable +Pop +Push "b", "b" +GetVariable +Push 2 +Add2 +StoreRegister 0 +SetVariable +Push register0 +Pop +Push "c" +GetVariable +Push 10 +Less2 +Not +If loc00ae +Push "c" +GetVariable +Trace +Push "c", "c" +GetVariable +Increment +SetVariable +Jump loc0056 +loc00ae:Push "konec" +Trace diff --git a/libsrc/ffdec_lib/testexpected/as2/frame_53/DoAction.as b/libsrc/ffdec_lib/testexpected/as2/frame_53/DoAction.as new file mode 100644 index 000000000..b9fa6457f --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/frame_53/DoAction.as @@ -0,0 +1,40 @@ +ConstantPool "commaOperator2Test", "k", "h", "f", "b", "gg", "ss" +Push "commaOperator2Test" +Trace +Push "k", 8 +DefineLocal +loc0037:Push "k" +GetVariable +Push 9 +Equals2 +Not +If loc0078 +Push "h" +Trace +Push "k" +GetVariable +Push 9 +Equals2 +Not +If loc0072 +Push "f" +Trace +Jump loc007e +loc0072:Push "b" +Trace +loc0078:Push "gg" +Trace +loc007e:Push "k" +GetVariable +Push "k", "k" +GetVariable +Increment +SetVariable +Pop +Push "k" +GetVariable +Push 10 +Less2 +If loc0037 +Push "ss" +Trace diff --git a/libsrc/ffdec_lib/testexpected/as2/frame_54/DoAction.as b/libsrc/ffdec_lib/testexpected/as2/frame_54/DoAction.as new file mode 100644 index 000000000..67cabd6d9 --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/frame_54/DoAction.as @@ -0,0 +1,32 @@ +DefineFunction2 "tst", 0, 2, false, false, true, false, true, false, true, false, false { +Push 5 +StoreRegister 1 +Pop +loc001b:Push register1, 10 +Less2 +Not +If loc006f +Push register1, 5 +Equals2 +Not +If loc0059 +Push register1, 6 +Equals2 +Not +If loc0054 +Push true +Return +loc0054:Jump loc005f +loc0059:Push false +Return +loc005f:Push register1 +Increment +StoreRegister 1 +Pop +Jump loc001b +} +loc006f:Push "function4Test" +Trace +Push 0.0, "tst" +CallFunction +Pop diff --git a/libsrc/ffdec_lib/testexpected/as2/frame_55/DoAction.as b/libsrc/ffdec_lib/testexpected/as2/frame_55/DoAction.as new file mode 100644 index 000000000..e65ad87af --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/frame_55/DoAction.as @@ -0,0 +1,4 @@ +Push "pushTest" +Trace +Push 53 +Pop diff --git a/libsrc/ffdec_lib/testexpected/as2/frame_56/DoAction.as b/libsrc/ffdec_lib/testexpected/as2/frame_56/DoAction.as new file mode 100644 index 000000000..4268b6abd --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/frame_56/DoAction.as @@ -0,0 +1,29 @@ +ConstantPool "commaOperator3Test", "k", "end" +Push "commaOperator3Test" +Trace +Push "k", 1 +DefineLocal +loc002f:Push "k" +GetVariable +Push "k", "k" +GetVariable +Increment +SetVariable +Pop +Push "k" +GetVariable +Push 10 +Less2 +Not +If loc0073 +Push "k", "k" +GetVariable +Push 5 +Multiply +SetVariable +Push "k" +GetVariable +Trace +Jump loc002f +loc0073:Push "end" +Trace diff --git a/libsrc/ffdec_lib/testexpected/as2/frame_57/DoAction.as b/libsrc/ffdec_lib/testexpected/as2/frame_57/DoAction.as new file mode 100644 index 000000000..f5cce5443 --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/frame_57/DoAction.as @@ -0,0 +1,46 @@ +ConstantPool "commaOperator4Test", "k", "a", "d", "b", "end" +Push "commaOperator4Test" +Trace +Push "k", 0.0 +DefineLocal +loc0039:Push "k" +GetVariable +Trace +Push "k" +GetVariable +Push 8 +Equals2 +Not +If loc0081 +Push "a" +Trace +Push "k" +GetVariable +Push 9 +Equals2 +Not +If loc0075 +Jump loc008b +loc0075:Push "d" +Trace +Push "b" +Trace +loc0081:Push "k", "k" +GetVariable +Increment +SetVariable +loc008b:Push "k", "k" +GetVariable +Push 5 +Add2 +StoreRegister 0 +SetVariable +Push register0 +Pop +Push "k" +GetVariable +Push 20 +Less2 +If loc0039 +Push "end" +Trace diff --git a/libsrc/ffdec_lib/testexpected/as2/frame_58/DoAction.as b/libsrc/ffdec_lib/testexpected/as2/frame_58/DoAction.as new file mode 100644 index 000000000..fc7e6cd1d --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/frame_58/DoAction.as @@ -0,0 +1,205 @@ +ConstantPool "test", "globalFunctionsTest", "k", "Array", "a", "b", "Boolean", "c", "A", "clearInterval", "clearTimeout", "mc", "copy", "how", "escape", "f", "http://localhost/", "wnd", "/:$version", "loaded", "isFinite", "isNaN", "http://localhost/test.swf", "_level5", "http://localhost/vars.txt", "_level4", "aaaa", "destroyPC", "MMExecute", "Object", "parseFloat", "parseInt", "print:#bframe", "printasbitmap:#bframe", "tst", "setInterval", "ts", "setTimeout", "showRedrawRegions", "aa", "told", "unescape", "", "updateAfterEvent" +DefineFunction "tst", 1, "p1" { +Push "test" +Trace +} +Push "globalFunctionsTest" +Trace +Push "k", 3, 2, 1, 3, "Array" +CallFunction +DefineLocal +Push "a", 1 +DefineLocal +Push "b", "a" +GetVariable +Push 1, "Boolean" +CallFunction +DefineLocal +Push 5 +Call +Push "c", "A" +DefineLocal +Push 5, 1, "clearInterval" +CallFunction +Pop +Push 4, 1, "clearTimeout" +CallFunction +Pop +Push "mc" +DefineLocal2 +Push "mc" +GetVariable +Push "copy", 16389 +CloneSprite +Push "a", "how", 1, "escape" +CallFunction +SetVariable +Push "f", "a" +GetVariable +DefineLocal +GetURL "FSCommand:alert(\"hi\");", "" +Push "a", "mc" +GetVariable +Push 6 +GetProperty +SetVariable +Push "a" +GetTime +SetVariable +Push "http://localhost/", "wnd" +GetURL2 false, false, 2 +Push "a", "/:$version" +GetVariable +SetVariable +GotoFrame 4 +Play +GotoFrame 7 +WaitForFrame 4, 2 +Push "loaded" +Trace +Push "a", "f" +GetVariable +ToInteger +SetVariable +Push "a", "f" +GetVariable +Push 1, "isFinite" +CallFunction +SetVariable +Push "a", "f" +GetVariable +Push 1, "isNaN" +CallFunction +SetVariable +Push "a", "f" +GetVariable +StringLength +SetVariable +Push "http://localhost/test.swf", "a" +GetVariable +GetURL2 false, true, 1 +Push "http://localhost/test.swf", "_level5" +GetURL2 false, false, 1 +Push "http://localhost/vars.txt", "a" +GetVariable +GetURL2 true, true, 1 +Push "http://localhost/vars.txt", "_level4" +GetURL2 true, false, 1 +Push "a", "f" +GetVariable +MBAsciiToChar +SetVariable +Push "a", "f" +GetVariable +MBStringLength +SetVariable +Push "a", "f" +GetVariable +MBCharToAscii +SetVariable +Push "a", "aaaa", 5, 4 +MBStringExtract +SetVariable +Push "destroyPC", 1, "MMExecute" +CallFunction +Pop +NextFrame +GotoFrame 0 +Push "a", "f" +GetVariable +ToNumber +SetVariable +Push "a", "f" +GetVariable +Push 1, "Object" +CallFunction +SetVariable +Push "a", "f" +GetVariable +CharToAscii +SetVariable +Push "a", "f" +GetVariable +Push 1, "parseFloat" +CallFunction +SetVariable +Push "a", 16, "f" +GetVariable +Push 2, "parseInt" +CallFunction +SetVariable +Play +PrevFrame +GotoFrame 0 +Push "print:#bframe", "mc" +GetVariable +GetURL2 false, false, 0 +Push "printasbitmap:#bframe", "mc" +GetVariable +GetURL2 false, false, 0 +Push "printasbitmap:#bframe", "_level5" +GetURL2 false, false, 0 +Push "print:#bframe", "_level4" +GetURL2 false, false, 0 +Push "a", 10 +RandomNumber +SetVariable +Push "mc" +GetVariable +RemoveSprite +Push "f" +GetVariable +Push 5, "tst" +GetVariable +Push 3, "setInterval" +CallFunction +Pop +Push "mc" +GetVariable +Push 6f, 25 +SetProperty +Push "f" +GetVariable +Push 5, "ts" +GetVariable +Push 3, "setTimeout" +CallFunction +Pop +Push 0.0, false, 2, "showRedrawRegions" +CallFunction +Pop +Push 5, 5, 6, 6, 1, 1, "mc" +GetVariable +StartDrag +Stop +StopSounds +EndDrag +Push "a", "f" +GetVariable +ToString +SetVariable +Push "a", "aa" +SetVariable +Push "f" +GetVariable +TargetPath +Pop +Push "mc" +GetVariable +SetTarget2 +Push "told" +Trace +SetTarget "" +ToggleQuality +Push "a", "f" +GetVariable +Push 1, "unescape" +CallFunction +SetVariable +Push "", "mc" +GetVariable +GetURL2 false, true, 0 +GetURL "", "_level4" +Push 0.0, "updateAfterEvent" +CallFunction +Pop diff --git a/libsrc/ffdec_lib/testexpected/as2/frame_59/DoAction.as b/libsrc/ffdec_lib/testexpected/as2/frame_59/DoAction.as new file mode 100644 index 000000000..93288f113 --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/frame_59/DoAction.as @@ -0,0 +1,22 @@ +ConstantPool "unaryOpTest", "a", "c", "d", "e" +Push "unaryOpTest" +Trace +Push "a", 5 +DefineLocal +Push "c", "a" +GetVariable +Push 4294967295.0 +BitXor +DefineLocal +Push "d", "a" +GetVariable +Push "c" +GetVariable +Add2 +Push 4294967295.0 +BitXor +DefineLocal +Push "e", 0.0, "c" +GetVariable +Subtract +DefineLocal diff --git a/libsrc/ffdec_lib/testexpected/as2/frame_60/DoAction.as b/libsrc/ffdec_lib/testexpected/as2/frame_60/DoAction.as new file mode 100644 index 000000000..d60a6d549 --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/frame_60/DoAction.as @@ -0,0 +1,51 @@ +ConstantPool "numbersTest", "x", "null:", "true:", "false:", "1:", "0x7fffffff:", "0x80000000:", "-0x80000000:", "-0x80000001:" +Push "numbersTest" +Trace +Push "x", null +DefineLocal +Push "null:", "x" +GetVariable +Add2 +Trace +Push "x", true +SetVariable +Push "true:", "x" +GetVariable +Add2 +Trace +Push "x", false +SetVariable +Push "false:", "x" +GetVariable +Add2 +Trace +Push "x", 1 +SetVariable +Push "1:", "x" +GetVariable +Add2 +Trace +Push "x", 2147483647 +SetVariable +Push "0x7fffffff:", "x" +GetVariable +Add2 +Trace +Push "x", 2147483648.0 +SetVariable +Push "0x80000000:", "x" +GetVariable +Add2 +Trace +Push "x", -2147483648 +SetVariable +Push "-0x80000000:", "x" +GetVariable +Add2 +Trace +Push "x", -2147483649 +SetVariable +Push "-0x80000001:", "x" +GetVariable +Add2 +Trace diff --git a/libsrc/ffdec_lib/testexpected/as2/frame_61/DoAction.as b/libsrc/ffdec_lib/testexpected/as2/frame_61/DoAction.as new file mode 100644 index 000000000..cd8fb5c8c --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/frame_61/DoAction.as @@ -0,0 +1,27 @@ +ConstantPool "switchDefaultTest", "k", "default 5", "default 5,6", "7", "afterSwitch" +Push "switchDefaultTest" +Trace +Push "k", 5 +DefineLocal +Push "k" +GetVariable +StoreRegister 0 +Push 5 +StrictEquals +If loc008b +Push register0, 6 +StrictEquals +If loc0091 +Push register0, 7 +StrictEquals +If loc009c +Jump loc008b +loc008b:Push "default 5" +Trace +loc0091:Push "default 5,6" +Trace +Jump loc00a2 +loc009c:Push "7" +Trace +loc00a2:Push "afterSwitch" +Trace diff --git a/libsrc/ffdec_lib/testexpected/as2/frame_62/DoAction.as b/libsrc/ffdec_lib/testexpected/as2/frame_62/DoAction.as new file mode 100644 index 000000000..071e14b13 --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/frame_62/DoAction.as @@ -0,0 +1,30 @@ +ConstantPool "switchDefaultTest2", "k", "5", "default", "default, 6", "7", "afterSwitch" +Push "switchDefaultTest2" +Trace +Push "k", 5 +DefineLocal +Push "k" +GetVariable +StoreRegister 0 +Push 5 +StrictEquals +If loc008b +Push register0, 6 +StrictEquals +If loc009c +Push register0, 7 +StrictEquals +If loc00a7 +Jump loc0096 +loc008b:Push "5" +Trace +Jump loc00ad +loc0096:Push "default" +Trace +loc009c:Push "default, 6" +Trace +Jump loc00ad +loc00a7:Push "7" +Trace +loc00ad:Push "afterSwitch" +Trace diff --git a/libsrc/ffdec_lib/testexpected/as2/frame_63/DoAction.as b/libsrc/ffdec_lib/testexpected/as2/frame_63/DoAction.as new file mode 100644 index 000000000..c14470b49 --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/frame_63/DoAction.as @@ -0,0 +1,34 @@ +ConstantPool "a", "functionVariablesTest" +DefineFunction2 "outfunc", 0, 5, false, false, true, false, true, false, true, false, false { +DefineFunction2 "", 0, 4, false, false, true, false, true, false, true, false, false { +Push "a", 5 +DefineLocal +Push 6 +StoreRegister 3 +Pop +DefineFunction2 "", 0, 2, false, false, true, false, true, false, true, false, false { +Push "a" +GetVariable +Push 2 +Add2 +StoreRegister 1 +Pop +Push register1 +Trace +Push register1 +Return +} +StoreRegister 2 +Pop +Push 0.0, register2, undefined +CallMethod +Return +} +StoreRegister 2 +Pop +Push 0.0, register2, undefined +CallMethod +Return +} +Push "functionVariablesTest" +Trace diff --git a/libsrc/ffdec_lib/testexpected/as2/frame_64/DoAction.as b/libsrc/ffdec_lib/testexpected/as2/frame_64/DoAction.as new file mode 100644 index 000000000..36c5224c2 --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/frame_64/DoAction.as @@ -0,0 +1,37 @@ +ConstantPool "a", "functionInnerParametersTest" +DefineFunction2 "outfunc", 0, 5, false, false, true, false, true, false, true, false, false { +DefineFunction2 "", 2, 5, false, false, true, false, true, false, true, false, false, 0, "a", 4, "x" { +Push "a" +GetVariable +Push 3 +Add2 +Push register4 +Add2 +StoreRegister 3 +Pop +DefineFunction2 "", 0, 2, false, false, true, false, true, false, true, false, false { +Push "a" +GetVariable +Push 2 +Add2 +StoreRegister 1 +Pop +Push register1 +Trace +Push register1 +Return +} +StoreRegister 2 +Pop +Push 0.0, register2, undefined +CallMethod +Return +} +StoreRegister 2 +Pop +Push 2, 5, 2, register2, undefined +CallMethod +Return +} +Push "functionInnerParametersTest" +Trace diff --git a/libsrc/ffdec_lib/testexpected/as2/frame_65/DoAction.as b/libsrc/ffdec_lib/testexpected/as2/frame_65/DoAction.as new file mode 100644 index 000000000..8f2a0facf --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/frame_65/DoAction.as @@ -0,0 +1,19 @@ +ConstantPool "loadClassesTest", "tst", "com", "jpexs", "flash", "test", "TestLoader", "includeTests" +Push "loadClassesTest" +Trace +Push "tst", 0.0, "com" +GetVariable +Push "jpexs" +GetMember +Push "flash" +GetMember +Push "test" +GetMember +Push "TestLoader" +NewMethod +DefineLocal +Push 0.0, "tst" +GetVariable +Push "includeTests" +CallMethod +Pop diff --git a/libsrc/ffdec_lib/testexpected/as2/frame_66/DoAction.as b/libsrc/ffdec_lib/testexpected/as2/frame_66/DoAction.as new file mode 100644 index 000000000..c07818a27 --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/frame_66/DoAction.as @@ -0,0 +1,226 @@ +ConstantPool "obj", "b", "found", "hi", "after", "c", "hello", "hohoho", "key1", "key2", "key3", "a", "loop1_break", "loop2_break", "loop2_inside", "after_loop2", "loop1_inside", "after_loop1", "forInBreakTest" +DefineFunction2 "testFunc1", 0, 2, false, false, true, false, true, false, true, false, false { +Push "obj" +GetVariable +Enumerate2 +loc00ae:StoreRegister 0 +Push null +Equals2 +If loc00d1 +Push register0 +StoreRegister 1 +Pop +Push register1 +Trace +Jump loc00ae +} +loc00d1:DefineFunction2 "testFunc2", 0, 2, false, false, true, false, true, false, true, false, false { +Push "obj" +GetVariable +Enumerate2 +loc00ec:StoreRegister 0 +Push null +Equals2 +If loc012d +Push register0 +StoreRegister 1 +Pop +Push register1, "b" +Equals2 +Not +If loc011d +Push "found" +Trace +Jump loc0122 +loc011d:Jump loc00ec +loc0122:Push null +Equals2 +Not +If loc0122 +} +loc012d:DefineFunction2 "testFunc3", 0, 2, false, false, true, false, true, false, true, false, false { +Push "obj" +GetVariable +Enumerate2 +loc0148:StoreRegister 0 +Push null +Equals2 +If loc0189 +Push register0 +StoreRegister 1 +Pop +Push register1, "b" +Equals2 +Not +If loc0179 +Push "hi" +Trace +Jump loc017e +loc0179:Jump loc0148 +loc017e:Push null +Equals2 +Not +If loc017e +loc0189:Push "after" +Trace +} +DefineFunction2 "testFunc4", 0, 2, false, false, true, false, true, false, true, false, false { +Push "obj" +GetVariable +Enumerate2 +loc01aa:StoreRegister 0 +Push null +Equals2 +If loc020a +Push register0 +StoreRegister 1 +Pop +Push register1, "b" +Equals2 +Not +If loc01db +Push "hi" +Trace +Jump loc01ff +loc01db:Push register1, "c" +Equals2 +Not +If loc01f4 +Push "hello" +Trace +Jump loc01ff +loc01f4:Push "hohoho" +Trace +Jump loc01aa +loc01ff:Push null +Equals2 +Not +If loc01ff +loc020a:Push "after" +Trace +} +DefineFunction2 "testFunc5", 0, 7, false, false, true, false, true, false, true, false, false { +Push "key1", 1, "key2", 2, "key3", 3, 3 +InitObject +StoreRegister 1 +Pop +Push "obj" +GetVariable +Enumerate2 +loc024e:StoreRegister 0 +Push null +Equals2 +If loc02fc +Push register0 +StoreRegister 3 +Pop +Push register3, "a" +Equals2 +Not +If loc027f +Push "loop1_break" +Trace +Jump loc02f1 +loc027f:Push register3, "b" +Equals2 +Not +If loc02e6 +Push "hello" +Trace +Push register1 +Enumerate2 +loc0299:StoreRegister 0 +Push null +Equals2 +If loc02e0 +Push register0 +StoreRegister 2 +Pop +Push register2, "key1" +Equals2 +Not +If loc02ca +Push "loop2_break" +Trace +Jump loc02d5 +loc02ca:Push "loop2_inside" +Trace +Jump loc0299 +loc02d5:Push null +Equals2 +Not +If loc02d5 +loc02e0:Push "after_loop2" +Trace +loc02e6:Push "loop1_inside" +Trace +Jump loc024e +loc02f1:Push null +Equals2 +Not +If loc02f1 +loc02fc:Push "after_loop1" +Trace +} +DefineFunction2 "testFunc6", 0, 7, false, false, true, false, true, false, true, false, false { +Push "key1", 1, "key2", 2, "key3", 3, 3 +InitObject +StoreRegister 1 +Pop +Push "obj" +GetVariable +Enumerate2 +loc0340:StoreRegister 0 +Push null +Equals2 +If loc03da +Push register0 +StoreRegister 3 +Pop +Push register3, "a" +Equals2 +Not +If loc0371 +Push "loop1_break" +Trace +Jump loc03cf +loc0371:Push "hello" +Trace +Push register1 +Enumerate2 +loc037d:StoreRegister 0 +Push null +Equals2 +If loc03c4 +Push register0 +StoreRegister 2 +Pop +Push register2, "key1" +Equals2 +Not +If loc03ae +Push "loop2_break" +Trace +Jump loc03b9 +loc03ae:Push "loop2_inside" +Trace +Jump loc037d +loc03b9:Push null +Equals2 +Not +If loc03b9 +loc03c4:Push "after_loop2" +Trace +Jump loc0340 +loc03cf:Push null +Equals2 +Not +If loc03cf +loc03da:Push "after_loop1" +Trace +} +Push "forInBreakTest" +Trace +Push "obj", "a", 5, "b", 6, "c", 7, 3 +InitObject +DefineLocal diff --git a/libsrc/ffdec_lib/testexpected/as2/frame_67/DoAction.as b/libsrc/ffdec_lib/testexpected/as2/frame_67/DoAction.as new file mode 100644 index 000000000..c4ccbb028 --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/frame_67/DoAction.as @@ -0,0 +1,1456 @@ +ConstantPool "place1", "place2", "place3", "after switch", "switchVariantsTest" +DefineFunction2 "test1", 0, 2, false, false, true, false, true, false, true, false, false { +Push 100 +RandomNumber +StoreRegister 1 +Pop +Push register1 +StoreRegister 0 +Push 1 +StrictEquals +If loc0084 +Push register0, 2 +StrictEquals +If loc008a +Jump loc0090 +loc0084:Push "place1" +Trace +loc008a:Push "place2" +Trace +loc0090:Push "place3" +Trace +Push "after switch" +Trace +} +DefineFunction2 "test2", 0, 2, false, false, true, false, true, false, true, false, false { +Push 100 +RandomNumber +StoreRegister 1 +Pop +Push register1 +StoreRegister 0 +Push 1 +StrictEquals +If loc00f6 +Push register0, 2 +StrictEquals +If loc00f6 +Push register0, 3 +StrictEquals +If loc00f6 +Jump loc00fc +loc00f6:Push "place3" +Trace +loc00fc:Push "after switch" +Trace +} +DefineFunction2 "test3", 0, 2, false, false, true, false, true, false, true, false, false { +Push 100 +RandomNumber +StoreRegister 1 +Pop +Push register1 +StoreRegister 0 +Push 1 +StrictEquals +If loc015c +Push register0, 2 +StrictEquals +If loc0162 +Push register0, 3 +StrictEquals +If loc0168 +Jump loc016e +loc015c:Push "place1" +Trace +loc0162:Push "place2" +Trace +loc0168:Push "place3" +Trace +loc016e:Push "after switch" +Trace +} +DefineFunction2 "test4", 0, 2, false, false, true, false, true, false, true, false, false { +Push 100 +RandomNumber +StoreRegister 1 +Pop +Push register1 +StoreRegister 0 +Push 1 +StrictEquals +If loc01be +Push register0, 2 +StrictEquals +If loc01c9 +Jump loc01cf +loc01be:Push "place1" +Trace +Jump loc01d5 +loc01c9:Push "place2" +Trace +loc01cf:Push "place3" +Trace +loc01d5:Push "after switch" +Trace +} +DefineFunction2 "test5", 0, 2, false, false, true, false, true, false, true, false, false { +Push 100 +RandomNumber +StoreRegister 1 +Pop +Push register1 +StoreRegister 0 +Push 1 +StrictEquals +If loc0235 +Push register0, 2 +StrictEquals +If loc0240 +Push register0, 3 +StrictEquals +If loc0246 +Jump loc024c +loc0235:Push "place1" +Trace +Jump loc024c +loc0240:Push "place2" +Trace +loc0246:Push "place3" +Trace +loc024c:Push "after switch" +Trace +} +DefineFunction2 "test6", 0, 2, false, false, true, false, true, false, true, false, false { +Push 100 +RandomNumber +StoreRegister 1 +Pop +Push register1 +StoreRegister 0 +Push 1 +StrictEquals +If loc029c +Push register0, 2 +StrictEquals +If loc02a2 +Jump loc02a2 +loc029c:Push "place1" +Trace +loc02a2:Push "place3" +Trace +Push "after switch" +Trace +} +DefineFunction2 "test7", 0, 2, false, false, true, false, true, false, true, false, false { +Push 100 +RandomNumber +StoreRegister 1 +Pop +Push register1 +StoreRegister 0 +Push 1 +StrictEquals +If loc02f8 +Push register0, 2 +StrictEquals +If loc02fe +Jump loc0309 +loc02f8:Push "place1" +Trace +loc02fe:Push "place2" +Trace +Jump loc030f +loc0309:Push "place3" +Trace +loc030f:Push "after switch" +Trace +} +DefineFunction2 "test8", 0, 2, false, false, true, false, true, false, true, false, false { +Push 100 +RandomNumber +StoreRegister 1 +Pop +Push register1 +StoreRegister 0 +Push 1 +StrictEquals +If loc036f +Push register0, 2 +StrictEquals +If loc036f +Push register0, 3 +StrictEquals +If loc0375 +Jump loc037b +loc036f:Push "place2" +Trace +loc0375:Push "place3" +Trace +loc037b:Push "after switch" +Trace +} +DefineFunction2 "test9", 0, 2, false, false, true, false, true, false, true, false, false { +Push 100 +RandomNumber +StoreRegister 1 +Pop +Push register1 +StoreRegister 0 +Push 1 +StrictEquals +If loc03db +Push register0, 2 +StrictEquals +If loc03e1 +Push register0, 3 +StrictEquals +If loc03e1 +Jump loc03e7 +loc03db:Push "place1" +Trace +loc03e1:Push "place3" +Trace +loc03e7:Push "after switch" +Trace +} +DefineFunction2 "test10", 0, 2, false, false, true, false, true, false, true, false, false { +Push 100 +RandomNumber +StoreRegister 1 +Pop +Push register1 +StoreRegister 0 +Push 1 +StrictEquals +If loc0438 +Push register0, 2 +StrictEquals +If loc044e +Jump loc0443 +loc0438:Push "place1" +Trace +Jump loc0454 +loc0443:Push "place2" +Trace +Jump loc0454 +loc044e:Push "place3" +Trace +loc0454:Push "after switch" +Trace +} +DefineFunction2 "test11", 0, 2, false, false, true, false, true, false, true, false, false { +Push 100 +RandomNumber +StoreRegister 1 +Pop +Push register1 +StoreRegister 0 +Push 1 +StrictEquals +If loc04b5 +Push register0, 2 +StrictEquals +If loc04c0 +Push register0, 3 +StrictEquals +If loc04cb +Jump loc04d1 +loc04b5:Push "place1" +Trace +Jump loc04d1 +loc04c0:Push "place2" +Trace +Jump loc04d1 +loc04cb:Push "place3" +Trace +loc04d1:Push "after switch" +Trace +} +DefineFunction2 "test12", 0, 2, false, false, true, false, true, false, true, false, false { +Push 100 +RandomNumber +StoreRegister 1 +Pop +Push register1 +StoreRegister 0 +Push 1 +StrictEquals +If loc0532 +Push register0, 2 +StrictEquals +If loc053d +Push register0, 3 +StrictEquals +If loc053d +Jump loc0543 +loc0532:Push "place1" +Trace +Jump loc0543 +loc053d:Push "place3" +Trace +loc0543:Push "after switch" +Trace +} +DefineFunction2 "test13", 0, 2, false, false, true, false, true, false, true, false, false { +Push 100 +RandomNumber +StoreRegister 1 +Pop +Push register1 +StoreRegister 0 +Push 1 +StrictEquals +If loc0594 +Push register0, 2 +StrictEquals +If loc059f +Jump loc0594 +loc0594:Push "place2" +Trace +Jump loc05a5 +loc059f:Push "place3" +Trace +loc05a5:Push "after switch" +Trace +} +DefineFunction2 "test14", 0, 2, false, false, true, false, true, false, true, false, false { +Push 100 +RandomNumber +StoreRegister 1 +Pop +Push register1 +StoreRegister 0 +Push 1 +StrictEquals +If loc0606 +Push register0, 2 +StrictEquals +If loc0606 +Push register0, 3 +StrictEquals +If loc0611 +Jump loc0617 +loc0606:Push "place2" +Trace +Jump loc0617 +loc0611:Push "place3" +Trace +loc0617:Push "after switch" +Trace +} +DefineFunction2 "test15", 0, 2, false, false, true, false, true, false, true, false, false { +Push 100 +RandomNumber +StoreRegister 1 +Pop +Push register1 +StoreRegister 0 +Push 1 +StrictEquals +If loc0678 +Push register0, 2 +StrictEquals +If loc067e +Push register0, 3 +StrictEquals +If loc0684 +Jump loc068a +loc0678:Push "place1" +Trace +loc067e:Push "place2" +Trace +loc0684:Push "place3" +Trace +loc068a:Push "after switch" +Trace +} +DefineFunction2 "test16", 0, 2, false, false, true, false, true, false, true, false, false { +Push 100 +RandomNumber +StoreRegister 1 +Pop +Push register1 +StoreRegister 0 +Push 1 +StrictEquals +If loc06eb +Push register0, 2 +StrictEquals +If loc06eb +Push register0, 3 +StrictEquals +If loc06eb +Jump loc06f1 +loc06eb:Push "place3" +Trace +loc06f1:Push "after switch" +Trace +} +DefineFunction2 "test17", 0, 2, false, false, true, false, true, false, true, false, false { +Push 100 +RandomNumber +StoreRegister 1 +Pop +Push register1 +StoreRegister 0 +Push 1 +StrictEquals +If loc0742 +Push register0, 2 +StrictEquals +If loc074d +Jump loc0753 +loc0742:Push "place1" +Trace +Jump loc0753 +loc074d:Push "place2" +Trace +loc0753:Push "after switch" +Trace +} +DefineFunction2 "test18", 0, 2, false, false, true, false, true, false, true, false, false { +Push 100 +RandomNumber +StoreRegister 1 +Pop +Push register1 +StoreRegister 0 +Push 1 +StrictEquals +If loc07a4 +Push register0, 2 +StrictEquals +If loc07aa +Jump loc07b0 +loc07a4:Push "place1" +Trace +loc07aa:Push "place2" +Trace +loc07b0:Push "after switch" +Trace +} +DefineFunction2 "test19", 0, 2, false, false, true, false, true, false, true, false, false { +Push 100 +RandomNumber +StoreRegister 1 +Pop +Push register1 +StoreRegister 0 +Push 1 +StrictEquals +If loc0801 +Push register0, 2 +StrictEquals +If loc0801 +Jump loc0807 +loc0801:Push "place2" +Trace +loc0807:Push "after switch" +Trace +} +DefineFunction2 "test20", 0, 2, false, false, true, false, true, false, true, false, false { +Push 100 +RandomNumber +StoreRegister 1 +Pop +Push register1 +StoreRegister 0 +Push 1 +StrictEquals +If loc0868 +Push register0, 2 +StrictEquals +If loc0873 +Push register0, 3 +StrictEquals +If loc0879 +Jump loc087f +loc0868:Push "place1" +Trace +Jump loc087f +loc0873:Push "place2" +Trace +loc0879:Push "place3" +Trace +loc087f:Push "after switch" +Trace +} +DefineFunction2 "test21", 0, 2, false, false, true, false, true, false, true, false, false { +Push 100 +RandomNumber +StoreRegister 1 +Pop +Push register1 +StoreRegister 0 +Push 1 +StrictEquals +If loc08e0 +Push register0, 2 +StrictEquals +If loc08e6 +Push register0, 3 +StrictEquals +If loc08f1 +Jump loc08f7 +loc08e0:Push "place1" +Trace +loc08e6:Push "place2" +Trace +Jump loc08f7 +loc08f1:Push "place3" +Trace +loc08f7:Push "after switch" +Trace +} +DefineFunction2 "test22", 0, 2, false, false, true, false, true, false, true, false, false { +Push 100 +RandomNumber +StoreRegister 1 +Pop +Push register1 +StoreRegister 0 +Push 1 +StrictEquals +If loc0958 +Push register0, 2 +StrictEquals +If loc095e +Push register0, 3 +StrictEquals +If loc0969 +Jump loc096f +loc0958:Push "place1" +Trace +loc095e:Push "place2" +Trace +Jump loc096f +loc0969:Push "place3" +Trace +loc096f:Push "after switch" +Trace +} +DefineFunction2 "test23", 0, 2, false, false, true, false, true, false, true, false, false { +Push 100 +RandomNumber +StoreRegister 1 +Pop +Push register1 +StoreRegister 0 +Push 1 +StrictEquals +If loc09c0 +Push register0, 2 +StrictEquals +If loc09cb +Jump loc09d6 +loc09c0:Push "place1" +Trace +Jump loc09dc +loc09cb:Push "place2" +Trace +Jump loc09dc +loc09d6:Push "place3" +Trace +loc09dc:Push "after switch" +Trace +} +DefineFunction2 "test24", 0, 2, false, false, true, false, true, false, true, false, false { +Push 100 +RandomNumber +StoreRegister 1 +Pop +Push register1 +StoreRegister 0 +Push 1 +StrictEquals +If loc0a2d +Push register0, 2 +StrictEquals +If loc0a2d +Jump loc0a33 +loc0a2d:Push "place2" +Trace +loc0a33:Push "place3" +Trace +Push "after switch" +Trace +} +DefineFunction2 "test25", 0, 2, false, false, true, false, true, false, true, false, false { +Push 100 +RandomNumber +StoreRegister 1 +Pop +Push register1 +StoreRegister 0 +Push 1 +StrictEquals +If loc0a9a +Push register0, 2 +StrictEquals +If loc0aa0 +Push register0, 3 +StrictEquals +If loc0aa0 +Jump loc0aa6 +loc0a9a:Push "place1" +Trace +loc0aa0:Push "place3" +Trace +loc0aa6:Push "after switch" +Trace +} +DefineFunction2 "test26", 0, 2, false, false, true, false, true, false, true, false, false { +Push 100 +RandomNumber +StoreRegister 1 +Pop +Push register1 +StoreRegister 0 +Push 1 +StrictEquals +If loc0b07 +Push register0, 2 +StrictEquals +If loc0b07 +Push register0, 3 +StrictEquals +If loc0b0d +Jump loc0b13 +loc0b07:Push "place2" +Trace +loc0b0d:Push "place3" +Trace +loc0b13:Push "after switch" +Trace +} +DefineFunction2 "test27", 0, 2, false, false, true, false, true, false, true, false, false { +Push 100 +RandomNumber +StoreRegister 1 +Pop +Push register1 +StoreRegister 0 +Push 1 +StrictEquals +If loc0b74 +Push register0, 2 +StrictEquals +If loc0b7f +Push register0, 3 +StrictEquals +If loc0b8a +Jump loc0b90 +loc0b74:Push "place1" +Trace +Jump loc0b90 +loc0b7f:Push "place2" +Trace +Jump loc0b90 +loc0b8a:Push "place3" +Trace +loc0b90:Push "after switch" +Trace +} +DefineFunction2 "test28", 0, 2, false, false, true, false, true, false, true, false, false { +Push 100 +RandomNumber +StoreRegister 1 +Pop +Push register1 +StoreRegister 0 +Push 1 +StrictEquals +If loc0be1 +Push register0, 2 +StrictEquals +If loc0bec +Jump loc0bec +loc0be1:Push "place1" +Trace +Jump loc0bf2 +loc0bec:Push "place3" +Trace +loc0bf2:Push "after switch" +Trace +} +DefineFunction2 "test29", 0, 2, false, false, true, false, true, false, true, false, false { +Push 100 +RandomNumber +StoreRegister 1 +Pop +Push register1 +StoreRegister 0 +Push 1 +StrictEquals +If loc0c43 +Push register0, 2 +StrictEquals +If loc0c43 +Jump loc0c4e +loc0c43:Push "place2" +Trace +Jump loc0c54 +loc0c4e:Push "place3" +Trace +loc0c54:Push "after switch" +Trace +} +DefineFunction2 "test30", 0, 2, false, false, true, false, true, false, true, false, false { +Push 100 +RandomNumber +StoreRegister 1 +Pop +Push register1 +StoreRegister 0 +Push 1 +StrictEquals +If loc0cb5 +Push register0, 2 +StrictEquals +If loc0cc0 +Push register0, 3 +StrictEquals +If loc0cc0 +Jump loc0cc6 +loc0cb5:Push "place1" +Trace +Jump loc0cc6 +loc0cc0:Push "place3" +Trace +loc0cc6:Push "after switch" +Trace +} +DefineFunction2 "test31", 0, 2, false, false, true, false, true, false, true, false, false { +Push 100 +RandomNumber +StoreRegister 1 +Pop +Push register1 +StoreRegister 0 +Push 1 +StrictEquals +If loc0d27 +Push register0, 2 +StrictEquals +If loc0d27 +Push register0, 3 +StrictEquals +If loc0d32 +Jump loc0d38 +loc0d27:Push "place2" +Trace +Jump loc0d38 +loc0d32:Push "place3" +Trace +loc0d38:Push "after switch" +Trace +} +DefineFunction2 "test32", 0, 2, false, false, true, false, true, false, true, false, false { +Push 100 +RandomNumber +StoreRegister 1 +Pop +Push register1 +StoreRegister 0 +Push 1 +StrictEquals +If loc0d89 +Push register0, 2 +StrictEquals +If loc0d89 +Jump loc0d89 +loc0d89:Push "place3" +Trace +Push "after switch" +Trace +} +DefineFunction2 "test33", 0, 2, false, false, true, false, true, false, true, false, false { +Push 100 +RandomNumber +StoreRegister 1 +Pop +Push register1 +StoreRegister 0 +Push 1 +StrictEquals +If loc0de6 +Push register0, 2 +StrictEquals +If loc0dec +Jump loc0de0 +loc0de0:Push "place1" +Trace +loc0de6:Push "place2" +Trace +loc0dec:Push "place3" +Trace +Push "after switch" +Trace +} +DefineFunction2 "test34", 0, 2, false, false, true, false, true, false, true, false, false { +Push 100 +RandomNumber +StoreRegister 1 +Pop +Push register1 +StoreRegister 0 +Push 1 +StrictEquals +If loc0e53 +Push register0, 2 +StrictEquals +If loc0e59 +Push register0, 3 +StrictEquals +If loc0e5f +Jump loc0e65 +loc0e53:Push "place1" +Trace +loc0e59:Push "place2" +Trace +loc0e5f:Push "place3" +Trace +loc0e65:Push "after switch" +Trace +} +DefineFunction2 "test35", 0, 2, false, false, true, false, true, false, true, false, false { +Push 100 +RandomNumber +StoreRegister 1 +Pop +Push register1 +StoreRegister 0 +Push 1 +StrictEquals +If loc0ec1 +Push register0, 2 +StrictEquals +If loc0ec7 +Jump loc0eb6 +loc0eb6:Push "place1" +Trace +Jump loc0ecd +loc0ec1:Push "place2" +Trace +loc0ec7:Push "place3" +Trace +loc0ecd:Push "after switch" +Trace +} +DefineFunction2 "test36", 0, 2, false, false, true, false, true, false, true, false, false { +Push 100 +RandomNumber +StoreRegister 1 +Pop +Push register1 +StoreRegister 0 +Push 1 +StrictEquals +If loc0f24 +Push register0, 2 +StrictEquals +If loc0f2f +Jump loc0f1e +loc0f1e:Push "place1" +Trace +loc0f24:Push "place2" +Trace +Jump loc0f35 +loc0f2f:Push "place3" +Trace +loc0f35:Push "after switch" +Trace +} +DefineFunction2 "test37", 0, 2, false, false, true, false, true, false, true, false, false { +Push 100 +RandomNumber +StoreRegister 1 +Pop +Push register1 +StoreRegister 0 +Push 1 +StrictEquals +If loc0f96 +Push register0, 2 +StrictEquals +If loc0fa1 +Push register0, 3 +StrictEquals +If loc0fa7 +Jump loc0fad +loc0f96:Push "place1" +Trace +Jump loc0fad +loc0fa1:Push "place2" +Trace +loc0fa7:Push "place3" +Trace +loc0fad:Push "after switch" +Trace +} +DefineFunction2 "test38", 0, 2, false, false, true, false, true, false, true, false, false { +Push 100 +RandomNumber +StoreRegister 1 +Pop +Push register1 +StoreRegister 0 +Push 1 +StrictEquals +If loc1004 +Push register0, 2 +StrictEquals +If loc1004 +Jump loc0ffe +loc0ffe:Push "place1" +Trace +loc1004:Push "place3" +Trace +Push "after switch" +Trace +} +DefineFunction2 "test39", 0, 2, false, false, true, false, true, false, true, false, false { +Push 100 +RandomNumber +StoreRegister 1 +Pop +Push register1 +StoreRegister 0 +Push 1 +StrictEquals +If loc106b +Push register0, 2 +StrictEquals +If loc1071 +Push register0, 3 +StrictEquals +If loc107c +Jump loc1082 +loc106b:Push "place1" +Trace +loc1071:Push "place2" +Trace +Jump loc1082 +loc107c:Push "place3" +Trace +loc1082:Push "after switch" +Trace +} +DefineFunction2 "test40", 0, 2, false, false, true, false, true, false, true, false, false { +Push 100 +RandomNumber +StoreRegister 1 +Pop +Push register1 +StoreRegister 0 +Push 1 +StrictEquals +If loc10e3 +Push register0, 2 +StrictEquals +If loc10ee +Push register0, 3 +StrictEquals +If loc10f9 +Jump loc10ff +loc10e3:Push "place1" +Trace +Jump loc10ff +loc10ee:Push "place2" +Trace +Jump loc10ff +loc10f9:Push "place3" +Trace +loc10ff:Push "after switch" +Trace +} +DefineFunction2 "test41", 0, 2, false, false, true, false, true, false, true, false, false { +Push 100 +RandomNumber +StoreRegister 1 +Pop +Push register1 +StoreRegister 0 +Push 1 +StrictEquals +If loc1160 +Push register0, 2 +StrictEquals +If loc1166 +Push register0, 3 +StrictEquals +If loc1166 +Jump loc116c +loc1160:Push "place1" +Trace +loc1166:Push "place3" +Trace +loc116c:Push "after switch" +Trace +} +DefineFunction2 "test42", 0, 2, false, false, true, false, true, false, true, false, false { +Push 100 +RandomNumber +StoreRegister 1 +Pop +Push register1 +StoreRegister 0 +Push 1 +StrictEquals +If loc11cd +Push register0, 2 +StrictEquals +If loc11cd +Push register0, 3 +StrictEquals +If loc11d3 +Jump loc11d9 +loc11cd:Push "place2" +Trace +loc11d3:Push "place3" +Trace +loc11d9:Push "after switch" +Trace +} +DefineFunction2 "test43", 0, 2, false, false, true, false, true, false, true, false, false { +Push 100 +RandomNumber +StoreRegister 1 +Pop +Push register1 +StoreRegister 0 +Push 1 +StrictEquals +If loc123a +Push register0, 2 +StrictEquals +If loc1245 +Push register0, 3 +StrictEquals +If loc1245 +Jump loc124b +loc123a:Push "place1" +Trace +Jump loc124b +loc1245:Push "place3" +Trace +loc124b:Push "after switch" +Trace +} +DefineFunction2 "test44", 0, 2, false, false, true, false, true, false, true, false, false { +Push 100 +RandomNumber +StoreRegister 1 +Pop +Push register1 +StoreRegister 0 +Push 1 +StrictEquals +If loc12ac +Push register0, 2 +StrictEquals +If loc12ac +Push register0, 3 +StrictEquals +If loc12b7 +Jump loc12bd +loc12ac:Push "place2" +Trace +Jump loc12bd +loc12b7:Push "place3" +Trace +loc12bd:Push "after switch" +Trace +} +DefineFunction2 "test45", 0, 2, false, false, true, false, true, false, true, false, false { +Push 100 +RandomNumber +StoreRegister 1 +Pop +Push register1 +StoreRegister 0 +Push 1 +StrictEquals +If loc131e +Push register0, 2 +StrictEquals +If loc131e +Push register0, 3 +StrictEquals +If loc131e +Jump loc1324 +loc131e:Push "place3" +Trace +loc1324:Push "after switch" +Trace +} +DefineFunction2 "test46", 0, 2, false, false, true, false, true, false, true, false, false { +Push 100 +RandomNumber +StoreRegister 1 +Pop +Push register1 +StoreRegister 0 +Push 1 +StrictEquals +If loc1375 +Push register0, 2 +StrictEquals +If loc1381 +Jump loc137b +loc1375:Push "place1" +Trace +loc137b:Push "place2" +Trace +loc1381:Push "place3" +Trace +Push "after switch" +Trace +} +DefineFunction2 "test47", 0, 2, false, false, true, false, true, false, true, false, false { +Push 100 +RandomNumber +StoreRegister 1 +Pop +Push register1 +StoreRegister 0 +Push 1 +StrictEquals +If loc13e8 +Push register0, 2 +StrictEquals +If loc13ee +Push register0, 3 +StrictEquals +If loc13f4 +Jump loc13fa +loc13e8:Push "place1" +Trace +loc13ee:Push "place2" +Trace +loc13f4:Push "place3" +Trace +loc13fa:Push "after switch" +Trace +} +DefineFunction2 "test48", 0, 2, false, false, true, false, true, false, true, false, false { +Push 100 +RandomNumber +StoreRegister 1 +Pop +Push register1 +StoreRegister 0 +Push 1 +StrictEquals +If loc144b +Push register0, 2 +StrictEquals +If loc145c +Jump loc1456 +loc144b:Push "place1" +Trace +Jump loc1462 +loc1456:Push "place2" +Trace +loc145c:Push "place3" +Trace +loc1462:Push "after switch" +Trace +} +DefineFunction2 "test49", 0, 2, false, false, true, false, true, false, true, false, false { +Push 100 +RandomNumber +StoreRegister 1 +Pop +Push register1 +StoreRegister 0 +Push 1 +StrictEquals +If loc14b3 +Push register0, 2 +StrictEquals +If loc14c4 +Jump loc14b9 +loc14b3:Push "place1" +Trace +loc14b9:Push "place2" +Trace +Jump loc14ca +loc14c4:Push "place3" +Trace +loc14ca:Push "after switch" +Trace +} +DefineFunction2 "test50", 0, 2, false, false, true, false, true, false, true, false, false { +Push 100 +RandomNumber +StoreRegister 1 +Pop +Push register1 +StoreRegister 0 +Push 1 +StrictEquals +If loc152b +Push register0, 2 +StrictEquals +If loc1536 +Push register0, 3 +StrictEquals +If loc153c +Jump loc1542 +loc152b:Push "place1" +Trace +Jump loc1542 +loc1536:Push "place2" +Trace +loc153c:Push "place3" +Trace +loc1542:Push "after switch" +Trace +} +DefineFunction2 "test51", 0, 2, false, false, true, false, true, false, true, false, false { +Push 100 +RandomNumber +StoreRegister 1 +Pop +Push register1 +StoreRegister 0 +Push 1 +StrictEquals +If loc1593 +Push register0, 2 +StrictEquals +If loc1599 +Jump loc1593 +loc1593:Push "place2" +Trace +loc1599:Push "place3" +Trace +Push "after switch" +Trace +} +DefineFunction2 "test52", 0, 2, false, false, true, false, true, false, true, false, false { +Push 100 +RandomNumber +StoreRegister 1 +Pop +Push register1 +StoreRegister 0 +Push 1 +StrictEquals +If loc1600 +Push register0, 2 +StrictEquals +If loc1606 +Push register0, 3 +StrictEquals +If loc1611 +Jump loc1617 +loc1600:Push "place1" +Trace +loc1606:Push "place2" +Trace +Jump loc1617 +loc1611:Push "place3" +Trace +loc1617:Push "after switch" +Trace +} +DefineFunction2 "test53", 0, 2, false, false, true, false, true, false, true, false, false { +Push 100 +RandomNumber +StoreRegister 1 +Pop +Push register1 +StoreRegister 0 +Push 1 +StrictEquals +If loc1678 +Push register0, 2 +StrictEquals +If loc167e +Push register0, 3 +StrictEquals +If loc167e +Jump loc1684 +loc1678:Push "place1" +Trace +loc167e:Push "place3" +Trace +loc1684:Push "after switch" +Trace +} +DefineFunction2 "test54", 0, 2, false, false, true, false, true, false, true, false, false { +Push 100 +RandomNumber +StoreRegister 1 +Pop +Push register1 +StoreRegister 0 +Push 1 +StrictEquals +If loc16e0 +Push register0, 2 +StrictEquals +If loc16e0 +Jump loc16d5 +loc16d5:Push "place1" +Trace +Jump loc16e6 +loc16e0:Push "place3" +Trace +loc16e6:Push "after switch" +Trace +} +DefineFunction2 "test55", 0, 2, false, false, true, false, true, false, true, false, false { +Push 100 +RandomNumber +StoreRegister 1 +Pop +Push register1 +StoreRegister 0 +Push 1 +StrictEquals +If loc1747 +Push register0, 2 +StrictEquals +If loc1747 +Push register0, 3 +StrictEquals +If loc174d +Jump loc1753 +loc1747:Push "place2" +Trace +loc174d:Push "place3" +Trace +loc1753:Push "after switch" +Trace +} +DefineFunction2 "test56", 0, 2, false, false, true, false, true, false, true, false, false { +Push 100 +RandomNumber +StoreRegister 1 +Pop +Push register1 +StoreRegister 0 +Push 1 +StrictEquals +If loc17af +Push register0, 2 +StrictEquals +If loc17ba +Jump loc17a4 +loc17a4:Push "place1" +Trace +Jump loc17c0 +loc17af:Push "place2" +Trace +Jump loc17c0 +loc17ba:Push "place3" +Trace +loc17c0:Push "after switch" +Trace +} +DefineFunction2 "test57", 0, 2, false, false, true, false, true, false, true, false, false { +Push 100 +RandomNumber +StoreRegister 1 +Pop +Push register1 +StoreRegister 0 +Push 1 +StrictEquals +If loc1821 +Push register0, 2 +StrictEquals +If loc182c +Push register0, 3 +StrictEquals +If loc1837 +Jump loc183d +loc1821:Push "place1" +Trace +Jump loc183d +loc182c:Push "place2" +Trace +Jump loc183d +loc1837:Push "place3" +Trace +loc183d:Push "after switch" +Trace +} +DefineFunction2 "test58", 0, 2, false, false, true, false, true, false, true, false, false { +Push 100 +RandomNumber +StoreRegister 1 +Pop +Push register1 +StoreRegister 0 +Push 1 +StrictEquals +If loc189e +Push register0, 2 +StrictEquals +If loc18a9 +Push register0, 3 +StrictEquals +If loc18a9 +Jump loc18af +loc189e:Push "place1" +Trace +Jump loc18af +loc18a9:Push "place3" +Trace +loc18af:Push "after switch" +Trace +} +DefineFunction2 "test59", 0, 2, false, false, true, false, true, false, true, false, false { +Push 100 +RandomNumber +StoreRegister 1 +Pop +Push register1 +StoreRegister 0 +Push 1 +StrictEquals +If loc1910 +Push register0, 2 +StrictEquals +If loc1910 +Push register0, 3 +StrictEquals +If loc191b +Jump loc1921 +loc1910:Push "place2" +Trace +Jump loc1921 +loc191b:Push "place3" +Trace +loc1921:Push "after switch" +Trace +} +DefineFunction2 "test60", 0, 2, false, false, true, false, true, false, true, false, false { +Push 100 +RandomNumber +StoreRegister 1 +Pop +Push register1 +StoreRegister 0 +Push 1 +StrictEquals +If loc1982 +Push register0, 2 +StrictEquals +If loc1982 +Push register0, 3 +StrictEquals +If loc1982 +Jump loc1988 +loc1982:Push "place3" +Trace +loc1988:Push "after switch" +Trace +} +Push "switchVariantsTest" +Trace diff --git a/libsrc/ffdec_lib/testexpected/as2/frame_68/DoAction.as b/libsrc/ffdec_lib/testexpected/as2/frame_68/DoAction.as new file mode 100644 index 000000000..ac0b4bb28 --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/frame_68/DoAction.as @@ -0,0 +1,153 @@ +ConstantPool "tryTypeTest", "a", "err:", "e", "MyError", "e1", "e2", "Error" +Push "tryTypeTest" +Trace +Push "a", 5 +DefineLocal +Try "e" { +Push "a", "a" +GetVariable +Push 0.0 +Divide +SetVariable +Jump loc0070 +} +Catch { +Push "err:", "e" +GetVariable +Add2 +Trace +} +loc0070:Try "e" { +Push "a", "a" +GetVariable +Push 0.0 +Divide +SetVariable +Jump loc00c1 +} +Catch { +Push "a" +GetVariable +Push 0.0 +Equals2 +Not +If loc00b7 +Push "e" +GetVariable +Throw +loc00b7:Push "err:", "e" +GetVariable +Add2 +Trace +} +loc00c1:Try register0 { +Push "a", "a" +GetVariable +Push 0.0 +Divide +SetVariable +Jump loc011b +} +Catch { +Push "MyError" +GetVariable +Push register0 +CastOp +PushDuplicate +Push null +Equals2 +If loc0114 +Push "e" +StackSwap +DefineLocal +Push "err:", "e" +GetVariable +Add2 +Trace +Jump loc011b +loc0114:Pop +Push register0 +Throw +} +loc011b:Try register0 { +Push "a", "a" +GetVariable +Push 0.0 +Divide +SetVariable +Jump loc0187 +} +Catch { +Push "MyError" +GetVariable +Push register0 +CastOp +PushDuplicate +Push null +Equals2 +If loc016e +Push "e1" +StackSwap +DefineLocal +Push "err:", "e1" +GetVariable +Add2 +Trace +Jump loc0187 +loc016e:Pop +Push register0, "e2" +StackSwap +DefineLocal +Push "err:", "e2" +GetVariable +Add2 +Trace +Jump loc0187 +} +loc0187:Try register0 { +Push "a", "a" +GetVariable +Push 0.0 +Divide +SetVariable +Jump loc020f +} +Catch { +Push "MyError" +GetVariable +Push register0 +CastOp +PushDuplicate +Push null +Equals2 +If loc01da +Push "e" +StackSwap +DefineLocal +Push "err:", "e" +GetVariable +Add2 +Trace +Jump loc020f +loc01da:Pop +Push "Error" +GetVariable +Push register0 +CastOp +PushDuplicate +Push null +Equals2 +If loc0208 +Push "e2" +StackSwap +DefineLocal +Push "err:", "e2" +GetVariable +Add2 +Trace +Jump loc020f +loc0208:Pop +Push register0 +Throw +} +loc020f: \ No newline at end of file diff --git a/libsrc/ffdec_lib/testexpected/as2/frame_69/DoAction.as b/libsrc/ffdec_lib/testexpected/as2/frame_69/DoAction.as new file mode 100644 index 000000000..627196046 --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/frame_69/DoAction.as @@ -0,0 +1,25 @@ +ConstantPool "forInBreakTest", "obj", "a", "b", "c", "k", "after" +Push "forInBreakTest" +Trace +Push "obj", "a", 5, "b", 6, "c", 7, 3 +InitObject +DefineLocal +Push "obj" +GetVariable +Enumerate2 +StoreRegister 0 +Push null +Equals2 +If loc0081 +Push "k", register0 +DefineLocal +Push "k" +GetVariable +Trace +Jump loc0076 +loc0076:Push null +Equals2 +Not +If loc0076 +loc0081:Push "after" +Trace diff --git a/libsrc/ffdec_lib/testexpected/as2/frame_70/DoAction.as b/libsrc/ffdec_lib/testexpected/as2/frame_70/DoAction.as new file mode 100644 index 000000000..78b9b3657 --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/frame_70/DoAction.as @@ -0,0 +1,49 @@ +ConstantPool "forWithContinue2Test", "s", "A", "i", "B", "C", "D", "j", "E" +Push "forWithContinue2Test" +Trace +Push "s", "A" +DefineLocal +Push "i", 0.0 +DefineLocal +loc0047:Push "i" +GetVariable +Push 10 +Less2 +Not +If loc00d3 +Push "s" +GetVariable +Push "B" +Equals2 +Not +If loc0085 +Push "s" +GetVariable +Push "C" +Equals2 +Not +If loc0085 +Jump loc00c4 +loc0085:Push "D" +Trace +Push "j", 0.0 +DefineLocal +loc009a:Push "j" +GetVariable +Push 29 +Less2 +Not +If loc00c4 +Push "E" +Trace +Push "j", "j" +GetVariable +Increment +SetVariable +Jump loc009a +loc00c4:Push "i", "i" +GetVariable +Increment +SetVariable +Jump loc0047 +loc00d3: \ No newline at end of file diff --git a/libsrc/ffdec_lib/testexpected/as2/frame_71/DoAction.as b/libsrc/ffdec_lib/testexpected/as2/frame_71/DoAction.as new file mode 100644 index 000000000..13f9d7869 --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/frame_71/DoAction.as @@ -0,0 +1,50 @@ +ConstantPool "bagr", "_locy_", "r1", ". ", "r2", "v1", "unk", "chainedAfterForInTest" +DefineFunction2 "f", 0, 5, false, false, true, false, true, false, true, false, false { +Push 5 +StoreRegister 4 +Pop +Push 0.0 +InitObject +StoreRegister 3 +Pop +Push "bagr" +StoreRegister 2 +Pop +Push "_locy_" +GetVariable +Enumerate2 +loc0073:StoreRegister 0 +Push null +Equals2 +If loc0096 +Push register0 +StoreRegister 1 +Pop +Push register1 +Trace +Jump loc0073 +loc0096:Push register3, "r1", register2, 1 +Add2 +Push ". " +Add2 +Push register4 +If loc00e1 +Push register3, "r2", "v1" +GetVariable +Push register2 +GetMember +Push 0.0 +GetMember +StoreRegister 0 +SetMember +Push register0 +Jump loc00e6 +loc00e1:Push "unk" +loc00e6:Add2 +SetMember +} +Push "chainedAfterForInTest" +Trace +Push "v1", 0.0 +InitObject +DefineLocal diff --git a/libsrc/ffdec_lib/testexpected/as2/frame_72/DoAction.as b/libsrc/ffdec_lib/testexpected/as2/frame_72/DoAction.as new file mode 100644 index 000000000..046a1d55c --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/frame_72/DoAction.as @@ -0,0 +1,50 @@ +DefineFunction2 "f", 0, 5, false, false, true, false, true, false, true, false, false { +Push 0.0 +InitObject +StoreRegister 3 +Pop +Push 0.0 +InitObject +StoreRegister 2 +Pop +Push register3 +Enumerate2 +loc0036:StoreRegister 0 +Push null +Equals2 +If loc00b5 +Push register0 +StoreRegister 4 +Pop +Push register2, register4 +GetMember +StoreRegister 1 +Pop +Push register1 +StoreRegister 0 +Push "A" +StrictEquals +If loc0091 +Push register0, "B" +StrictEquals +If loc0091 +Push register0, "C" +StrictEquals +If loc0091 +Jump loc00b0 +loc0091:Push "Ret 5" +Trace +loc009c:Push null +Equals2 +Not +If loc009c +Push 5 +Return +loc00b0:Jump loc0036 +loc00b5:Push "Final" +Trace +Push 10 +Return +} +Push "forInSwitchTest" +Trace diff --git a/libsrc/ffdec_lib/testexpected/as2/frame_73/DoAction.as b/libsrc/ffdec_lib/testexpected/as2/frame_73/DoAction.as new file mode 100644 index 000000000..f58f5bbb0 --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/frame_73/DoAction.as @@ -0,0 +1,23 @@ +ConstantPool "deleteTest", "obj", "a", "b", "salam likum", "bagr aa" +Push "deleteTest" +Trace +Push "obj", "a", 1, "b", 2, 2 +InitObject +DefineLocal +Push "obj" +GetVariable +Push "salam likum", 58 +SetMember +Push "obj" +GetVariable +Push "a" +Delete +Pop +Push "obj" +GetVariable +Push "salam likum" +Delete +Pop +Push "bagr aa" +Delete2 +Pop diff --git a/libsrc/ffdec_lib/testexpected/as2/frame_74/DoAction.as b/libsrc/ffdec_lib/testexpected/as2/frame_74/DoAction.as new file mode 100644 index 000000000..1abc25704 --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/frame_74/DoAction.as @@ -0,0 +1,16 @@ +ConstantPool "setPropertyTest", "_root", "_rotation", "_root._rotation" +Push "setPropertyTest" +Trace +Push "_root", 10f, 45 +SetProperty +Push "_root" +GetVariable +Push "_rotation", 60 +SetMember +Push "_root", 10 +GetProperty +Trace +Push "_root._rotation", 60 +SetVariable +Push undefined +Trace diff --git a/libsrc/ffdec_lib/testexpected/as2/frame_75/DoAction.as b/libsrc/ffdec_lib/testexpected/as2/frame_75/DoAction.as new file mode 100644 index 000000000..4f23d3a83 --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/frame_75/DoAction.as @@ -0,0 +1,740 @@ +ConstantPool "castOpTest", "a", "b", "flash", "display", "BitmapData", "external", "ExternalInterface", "filters", "BevelFilter", "BitmapFilter", "BlurFilter", "ColorMatrixFilter", "ConvolutionFilter", "DisplacementMapFilter", "DropShadowFilter", "GlowFilter", "GradientBevelFilter", "GradientGlowFilter", "geom", "ColorTransform", "Matrix", "Point", "Rectangle", "Transform", "net", "FileReference", "FileReferenceList", "text", "TextRenderer", "Accordion", "Alert", "Array", "Binding", "Boolean", "Button", "Camera", "Color", "ComboBox", "ComponentMixins", "ContextMenu", "ContextMenuItem", "CustomActions", "CheckBox", "DataGrid", "DataHolder", "DataSet", "DataType", "Date", "DateChooser", "DateField", "Delta", "DeltaItem", "DeltaPacket", "EndPoint", "Error", "FLVPlayback", "Form", "Function", "System", "IME", "Label", "List", "Loader", "LoadVars", "LocalConnection", "Log", "MediaController", "MediaDisplay", "MediaPlayback", "Menu", "MenuBar", "Microphone", "MovieClip", "MovieClipLoader", "NetConnection", "NetStream", "NumericStepper", "Object", "PendingCall", "PopUpManager", "PrintJob", "ProgressBar", "RadioButton", "RadioButtonGroup", "RDBMSResolver", "ScrollPane", "security", "SharedObject", "Slide", "SOAPCall", "Sound", "TextArea", "TextField", "TextFormat", "TextInput", "TextSnapshot", "Tree", "TypedValue", "UIScrollBar", "Void", "WebService", "WebServiceConnector", "Window", "XML", "XMLConnector", "XMLNode", "XMLSocket", "XMLUI", "XUpdateResolver" +Push "castOpTest" +Trace +Push "a", 5 +DefineLocal +Push "b", null +DefineLocal +Push "b", "flash" +GetVariable +Push "display" +GetMember +Push "BitmapData" +GetMember +Push "a" +GetVariable +CastOp +SetVariable +Push "b", "flash" +GetVariable +Push "external" +GetMember +Push "ExternalInterface" +GetMember +Push "a" +GetVariable +CastOp +SetVariable +Push "b", "flash" +GetVariable +Push "filters" +GetMember +Push "BevelFilter" +GetMember +Push "a" +GetVariable +CastOp +SetVariable +Push "b", "flash" +GetVariable +Push "filters" +GetMember +Push "BitmapFilter" +GetMember +Push "a" +GetVariable +CastOp +SetVariable +Push "b", "flash" +GetVariable +Push "filters" +GetMember +Push "BlurFilter" +GetMember +Push "a" +GetVariable +CastOp +SetVariable +Push "b", "flash" +GetVariable +Push "filters" +GetMember +Push "ColorMatrixFilter" +GetMember +Push "a" +GetVariable +CastOp +SetVariable +Push "b", "flash" +GetVariable +Push "filters" +GetMember +Push "ConvolutionFilter" +GetMember +Push "a" +GetVariable +CastOp +SetVariable +Push "b", "flash" +GetVariable +Push "filters" +GetMember +Push "DisplacementMapFilter" +GetMember +Push "a" +GetVariable +CastOp +SetVariable +Push "b", "flash" +GetVariable +Push "filters" +GetMember +Push "DropShadowFilter" +GetMember +Push "a" +GetVariable +CastOp +SetVariable +Push "b", "flash" +GetVariable +Push "filters" +GetMember +Push "GlowFilter" +GetMember +Push "a" +GetVariable +CastOp +SetVariable +Push "b", "flash" +GetVariable +Push "filters" +GetMember +Push "GradientBevelFilter" +GetMember +Push "a" +GetVariable +CastOp +SetVariable +Push "b", "flash" +GetVariable +Push "filters" +GetMember +Push "GradientGlowFilter" +GetMember +Push "a" +GetVariable +CastOp +SetVariable +Push "b", "flash" +GetVariable +Push "geom" +GetMember +Push "ColorTransform" +GetMember +Push "a" +GetVariable +CastOp +SetVariable +Push "b", "flash" +GetVariable +Push "geom" +GetMember +Push "Matrix" +GetMember +Push "a" +GetVariable +CastOp +SetVariable +Push "b", "flash" +GetVariable +Push "geom" +GetMember +Push "Point" +GetMember +Push "a" +GetVariable +CastOp +SetVariable +Push "b", "flash" +GetVariable +Push "geom" +GetMember +Push "Rectangle" +GetMember +Push "a" +GetVariable +CastOp +SetVariable +Push "b", "flash" +GetVariable +Push "geom" +GetMember +Push "Transform" +GetMember +Push "a" +GetVariable +CastOp +SetVariable +Push "b", "flash" +GetVariable +Push "net" +GetMember +Push "FileReference" +GetMember +Push "a" +GetVariable +CastOp +SetVariable +Push "b", "flash" +GetVariable +Push "net" +GetMember +Push "FileReferenceList" +GetMember +Push "a" +GetVariable +CastOp +SetVariable +Push "b", "flash" +GetVariable +Push "text" +GetMember +Push "TextRenderer" +GetMember +Push "a" +GetVariable +CastOp +SetVariable +Push "b", "a" +GetVariable +Push 1, "Accordion" +CallFunction +SetVariable +Push "b", "a" +GetVariable +Push 1, "Alert" +CallFunction +SetVariable +Push "b", "a" +GetVariable +Push 1, "Array" +CallFunction +SetVariable +Push "b", "a" +GetVariable +Push 1, "BevelFilter" +CallFunction +SetVariable +Push "b", "a" +GetVariable +Push 1, "Binding" +CallFunction +SetVariable +Push "b", "a" +GetVariable +Push 1, "BitmapData" +CallFunction +SetVariable +Push "b", "a" +GetVariable +Push 1, "BitmapFilter" +CallFunction +SetVariable +Push "b", "a" +GetVariable +Push 1, "BlurFilter" +CallFunction +SetVariable +Push "b", "a" +GetVariable +Push 1, "Boolean" +CallFunction +SetVariable +Push "b", "Button" +GetVariable +Push "a" +GetVariable +CastOp +SetVariable +Push "b", "Camera" +GetVariable +Push "a" +GetVariable +CastOp +SetVariable +Push "b", "Color" +GetVariable +Push "a" +GetVariable +CastOp +SetVariable +Push "b", "a" +GetVariable +Push 1, "ColorMatrixFilter" +CallFunction +SetVariable +Push "b", "a" +GetVariable +Push 1, "ColorTransform" +CallFunction +SetVariable +Push "b", "a" +GetVariable +Push 1, "ComboBox" +CallFunction +SetVariable +Push "b", "a" +GetVariable +Push 1, "ComponentMixins" +CallFunction +SetVariable +Push "b", "ContextMenu" +GetVariable +Push "a" +GetVariable +CastOp +SetVariable +Push "b", "ContextMenuItem" +GetVariable +Push "a" +GetVariable +CastOp +SetVariable +Push "b", "a" +GetVariable +Push 1, "ConvolutionFilter" +CallFunction +SetVariable +Push "b", "CustomActions" +GetVariable +Push "a" +GetVariable +CastOp +SetVariable +Push "b", "a" +GetVariable +Push 1, "CheckBox" +CallFunction +SetVariable +Push "b", "a" +GetVariable +Push 1, "DataGrid" +CallFunction +SetVariable +Push "b", "a" +GetVariable +Push 1, "DataHolder" +CallFunction +SetVariable +Push "b", "a" +GetVariable +Push 1, "DataSet" +CallFunction +SetVariable +Push "b", "a" +GetVariable +Push 1, "DataType" +CallFunction +SetVariable +Push "b", "a" +GetVariable +Push 1, "Date" +CallFunction +SetVariable +Push "b", "a" +GetVariable +Push 1, "DateChooser" +CallFunction +SetVariable +Push "b", "a" +GetVariable +Push 1, "DateField" +CallFunction +SetVariable +Push "b", "a" +GetVariable +Push 1, "Delta" +CallFunction +SetVariable +Push "b", "a" +GetVariable +Push 1, "DeltaItem" +CallFunction +SetVariable +Push "b", "a" +GetVariable +Push 1, "DeltaPacket" +CallFunction +SetVariable +Push "b", "a" +GetVariable +Push 1, "DisplacementMapFilter" +CallFunction +SetVariable +Push "b", "a" +GetVariable +Push 1, "DropShadowFilter" +CallFunction +SetVariable +Push "b", "a" +GetVariable +Push 1, "EndPoint" +CallFunction +SetVariable +Push "b", "Error" +GetVariable +Push "a" +GetVariable +CastOp +SetVariable +Push "b", "a" +GetVariable +Push 1, "ExternalInterface" +CallFunction +SetVariable +Push "b", "a" +GetVariable +Push 1, "FileReference" +CallFunction +SetVariable +Push "b", "a" +GetVariable +Push 1, "FileReferenceList" +CallFunction +SetVariable +Push "b", "a" +GetVariable +Push 1, "FLVPlayback" +CallFunction +SetVariable +Push "b", "a" +GetVariable +Push 1, "Form" +CallFunction +SetVariable +Push "b", "a" +GetVariable +Push 1, "Function" +CallFunction +SetVariable +Push "b", "a" +GetVariable +Push 1, "GlowFilter" +CallFunction +SetVariable +Push "b", "a" +GetVariable +Push 1, "GradientBevelFilter" +CallFunction +SetVariable +Push "b", "a" +GetVariable +Push 1, "GradientGlowFilter" +CallFunction +SetVariable +Push "b", "System" +GetVariable +Push "IME" +GetMember +Push "a" +GetVariable +CastOp +SetVariable +Push "b", "a" +GetVariable +Push 1, "Label" +CallFunction +SetVariable +Push "b", "a" +GetVariable +Push 1, "List" +CallFunction +SetVariable +Push "b", "a" +GetVariable +Push 1, "Loader" +CallFunction +SetVariable +Push "b", "LoadVars" +GetVariable +Push "a" +GetVariable +CastOp +SetVariable +Push "b", "LocalConnection" +GetVariable +Push "a" +GetVariable +CastOp +SetVariable +Push "b", "a" +GetVariable +Push 1, "Log" +CallFunction +SetVariable +Push "b", "a" +GetVariable +Push 1, "Matrix" +CallFunction +SetVariable +Push "b", "a" +GetVariable +Push 1, "MediaController" +CallFunction +SetVariable +Push "b", "a" +GetVariable +Push 1, "MediaDisplay" +CallFunction +SetVariable +Push "b", "a" +GetVariable +Push 1, "MediaPlayback" +CallFunction +SetVariable +Push "b", "a" +GetVariable +Push 1, "Menu" +CallFunction +SetVariable +Push "b", "a" +GetVariable +Push 1, "MenuBar" +CallFunction +SetVariable +Push "b", "Microphone" +GetVariable +Push "a" +GetVariable +CastOp +SetVariable +Push "b", "MovieClip" +GetVariable +Push "a" +GetVariable +CastOp +SetVariable +Push "b", "MovieClipLoader" +GetVariable +Push "a" +GetVariable +CastOp +SetVariable +Push "b", "NetConnection" +GetVariable +Push "a" +GetVariable +CastOp +SetVariable +Push "b", "NetStream" +GetVariable +Push "a" +GetVariable +CastOp +SetVariable +Push "b", "a" +GetVariable +ToNumber +SetVariable +Push "b", "a" +GetVariable +Push 1, "NumericStepper" +CallFunction +SetVariable +Push "b", "a" +GetVariable +Push 1, "Object" +CallFunction +SetVariable +Push "b", "a" +GetVariable +Push 1, "PendingCall" +CallFunction +SetVariable +Push "b", "a" +GetVariable +Push 1, "Point" +CallFunction +SetVariable +Push "b", "a" +GetVariable +Push 1, "PopUpManager" +CallFunction +SetVariable +Push "b", "PrintJob" +GetVariable +Push "a" +GetVariable +CastOp +SetVariable +Push "b", "a" +GetVariable +Push 1, "ProgressBar" +CallFunction +SetVariable +Push "b", "a" +GetVariable +Push 1, "RadioButton" +CallFunction +SetVariable +Push "b", "a" +GetVariable +Push 1, "RadioButtonGroup" +CallFunction +SetVariable +Push "b", "a" +GetVariable +Push 1, "RDBMSResolver" +CallFunction +SetVariable +Push "b", "a" +GetVariable +Push 1, "Rectangle" +CallFunction +SetVariable +Push "b", "a" +GetVariable +Push 1, "ScrollPane" +CallFunction +SetVariable +Push "b", "System" +GetVariable +Push "security" +GetMember +Push "a" +GetVariable +CastOp +SetVariable +Push "b", "SharedObject" +GetVariable +Push "a" +GetVariable +CastOp +SetVariable +Push "b", "a" +GetVariable +Push 1, "Slide" +CallFunction +SetVariable +Push "b", "a" +GetVariable +Push 1, "SOAPCall" +CallFunction +SetVariable +Push "b", "Sound" +GetVariable +Push "a" +GetVariable +CastOp +SetVariable +Push "b", "a" +GetVariable +ToString +SetVariable +Push "b", "a" +GetVariable +Push 1, "TextArea" +CallFunction +SetVariable +Push "b", "TextField" +GetVariable +Push "a" +GetVariable +CastOp +SetVariable +Push "b", "TextFormat" +GetVariable +Push "a" +GetVariable +CastOp +SetVariable +Push "b", "a" +GetVariable +Push 1, "TextInput" +CallFunction +SetVariable +Push "b", "a" +GetVariable +Push 1, "TextRenderer" +CallFunction +SetVariable +Push "b", "TextSnapshot" +GetVariable +Push "a" +GetVariable +CastOp +SetVariable +Push "b", "a" +GetVariable +Push 1, "Transform" +CallFunction +SetVariable +Push "b", "a" +GetVariable +Push 1, "Tree" +CallFunction +SetVariable +Push "b", "a" +GetVariable +Push 1, "TypedValue" +CallFunction +SetVariable +Push "b", "a" +GetVariable +Push 1, "UIScrollBar" +CallFunction +SetVariable +Push "b", "a" +GetVariable +Push 1, "Void" +CallFunction +SetVariable +Push "b", "a" +GetVariable +Push 1, "WebService" +CallFunction +SetVariable +Push "b", "a" +GetVariable +Push 1, "WebServiceConnector" +CallFunction +SetVariable +Push "b", "a" +GetVariable +Push 1, "Window" +CallFunction +SetVariable +Push "b", "XML" +GetVariable +Push "a" +GetVariable +CastOp +SetVariable +Push "b", "a" +GetVariable +Push 1, "XMLConnector" +CallFunction +SetVariable +Push "b", "XMLNode" +GetVariable +Push "a" +GetVariable +CastOp +SetVariable +Push "b", "XMLSocket" +GetVariable +Push "a" +GetVariable +CastOp +SetVariable +Push "b", "XMLUI" +GetVariable +Push "a" +GetVariable +CastOp +SetVariable +Push "b", "a" +GetVariable +Push 1, "XUpdateResolver" +CallFunction +SetVariable diff --git a/libsrc/ffdec_lib/testexpected/as2/frame_76/DoAction.as b/libsrc/ffdec_lib/testexpected/as2/frame_76/DoAction.as new file mode 100644 index 000000000..c517998d6 --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/frame_76/DoAction.as @@ -0,0 +1,83 @@ +ConstantPool "compoundAssignmentsTest", "a", "x", "b", "c", "f" +DefineFunction2 "f", 0, 4, false, false, true, false, false, true, true, false, false { +Push register1, 0.0 +GetMember +Trace +Push 0.0 +StoreRegister 2 +Pop +Push register2, 20 +Add2 +StoreRegister 2 +Pop +Push register2, 20 +Add2 +StoreRegister 2 +StoreRegister 3 +Pop +} +Push "compoundAssignmentsTest" +Trace +Push "a", 0.0 +DefineLocal +Push "a", "a" +GetVariable +Push 5 +Add2 +SetVariable +Push "x", "a", "a" +GetVariable +Push 5 +Add2 +StoreRegister 0 +SetVariable +Push register0 +DefineLocal +Push "a" +GetVariable +Push "b" +GetMember +Push "c", "a" +GetVariable +Push "b" +GetMember +Push "c" +GetMember +Push 10 +Add2 +SetMember +Push "x", "a" +GetVariable +Push "b" +GetMember +Push "c", "a" +GetVariable +Push "b" +GetMember +Push "c" +GetMember +Push 10 +Add2 +StoreRegister 0 +SetMember +Push register0 +SetVariable +Push 5, 1, "f" +CallFunction +Pop +Push "a" +GetVariable +Push "b" +GetMember +Push "c", "a" +GetVariable +Push "b" +GetMember +Push "c" +GetMember +Push 30 +Add2 +StoreRegister 0 +SetMember +Push register0 +Trace diff --git a/libsrc/ffdec_lib/testexpected/as2/frame_77/DoAction.as b/libsrc/ffdec_lib/testexpected/as2/frame_77/DoAction.as new file mode 100644 index 000000000..1e2feb30a --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/frame_77/DoAction.as @@ -0,0 +1,73 @@ +ConstantPool "as", "abstract", "Boolean", "bytes", "char", "const", "debugger", "double", "enum", "export", "final", "float", "goto", "is", "long", "namespace", "native", "package", "protected", "short", "synchronized", "throws", "transient", "use", "volatile", "false", "get", "null", "set", "undefined", "true", "NaN", "newline", "Infinity", "each" +Push "as", 5 +DefineLocal +Push "abstract", 6 +DefineLocal +Push "Boolean", 7 +DefineLocal +Push "bytes", 8 +DefineLocal +Push "char", 9 +DefineLocal +Push "const", 10 +DefineLocal +Push "debugger", 11 +DefineLocal +Push "double", 12 +DefineLocal +Push "enum", 13 +DefineLocal +Push "export", 14 +DefineLocal +Push "final", 15 +DefineLocal +Push "float", 16 +DefineLocal +Push "goto", 17 +DefineLocal +Push "is", 18 +DefineLocal +Push "long", 19 +DefineLocal +Push "namespace", 20 +DefineLocal +Push "native", 21 +DefineLocal +Push "package", 22 +DefineLocal +Push "protected", 23 +DefineLocal +Push "short", 24 +DefineLocal +Push "synchronized", 25 +DefineLocal +Push "throws", 26 +DefineLocal +Push "transient", 27 +DefineLocal +Push "use", 28 +DefineLocal +Push "volatile", 29 +DefineLocal +Push "false", 43 +DefineLocal +Push "get", 48 +DefineLocal +Push "null", 62 +DefineLocal +Push "set", 69 +DefineLocal +Push "undefined", 76 +DefineLocal +Push "true", 81 +DefineLocal +Push "false", 82 +DefineLocal +Push "NaN", 83 +DefineLocal +Push "newline", 84 +DefineLocal +Push "Infinity", 85 +DefineLocal +Push "each", 86 +DefineLocal diff --git a/libsrc/ffdec_lib/testexpected/as2/frame_78/DoAction.as b/libsrc/ffdec_lib/testexpected/as2/frame_78/DoAction.as new file mode 100644 index 000000000..8c476e3ab --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/frame_78/DoAction.as @@ -0,0 +1,101 @@ +ConstantPool "tellTargetTest", "root", "something", "A", "event1", "B", "", "bagr", "C", "D", "E", "somethingA", "F", "somethingB", "G", "H", "I", "somethingC", "J", "K", "somethingD", "L", "somethingE", "M", "somethingF", "N", "O", "P", "Q" +Push "tellTargetTest" +Trace +Push "root" +GetVariable +Push "something" +GetMember +SetTarget2 +Push "A" +Trace +Push "event1" +DefineFunction "", 0 { +Push "B" +Trace +Push "", 11 +GetProperty +Push "root" +GetVariable +Push "bagr" +GetMember +SetTarget2 +Push "C" +Trace +SetTarget "" +SetTarget2 +Push "D" +Trace +} +DefineLocal +SetTarget "" +Push "E" +Trace +Push "root" +GetVariable +Push "somethingA" +GetMember +SetTarget2 +Push "F" +Trace +Push "", 11 +GetProperty +Push "root" +GetVariable +Push "somethingB" +GetMember +SetTarget2 +Push "G" +Trace +SetTarget "" +SetTarget2 +Push "H" +Trace +SetTarget "" +Push "I" +Trace +Push "root" +GetVariable +Push "somethingC" +GetMember +SetTarget2 +Push "J" +Trace +SetTarget "" +Push "K" +Trace +Push "root" +GetVariable +Push "somethingD" +GetMember +SetTarget2 +Push "L" +Trace +Push "", 11 +GetProperty +Push "root" +GetVariable +Push "somethingE" +GetMember +SetTarget2 +Push "M" +Trace +Push "", 11 +GetProperty +Push "root" +GetVariable +Push "somethingF" +GetMember +SetTarget2 +Push "N" +Trace +SetTarget "" +SetTarget2 +Push "O" +Trace +SetTarget "" +SetTarget2 +Push "P" +Trace +SetTarget "" +Push "Q" +Trace diff --git a/libsrc/ffdec_lib/testexpected/as2/frame_79/DoAction.as b/libsrc/ffdec_lib/testexpected/as2/frame_79/DoAction.as new file mode 100644 index 000000000..724d59a39 --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/frame_79/DoAction.as @@ -0,0 +1,82 @@ +ConstantPool "a0", "a1", "r", "Math", "random", "floor", "a", "b", "c", "registersVsDefineLocalTest", "x1", "x2", "x3" +DefineFunction2 "x1", 1, 4, false, false, true, false, true, false, true, false, false, 3, "c" { +Push 1 +StoreRegister 2 +Pop +Push 2 +StoreRegister 1 +Pop +Push register2, register1, register3 +Multiply +Add2 +Return +} +DefineFunction "x2", 1, "c" { +Push "a0", 1 +DefineLocal +Push "a1", 2 +DefineLocal +Push "r", 0.0, "Math" +GetVariable +Push "random" +CallMethod +Push 2 +Multiply +Push 1, "Math" +GetVariable +Push "floor" +CallMethod +DefineLocal +Push "a", "r" +GetVariable +Add2 +GetVariable +Push "b" +GetVariable +Push "c" +GetVariable +Multiply +Add2 +Return +} +DefineFunction2 "x3", 1, 5, false, false, true, false, true, false, true, false, false, 4, "c" { +Push 1 +StoreRegister 2 +Pop +Push 2 +StoreRegister 3 +Pop +Push 0.0, "Math" +GetVariable +Push "random" +CallMethod +Push 2 +Multiply +Push 1, "Math" +GetVariable +Push "floor" +CallMethod +StoreRegister 1 +Pop +Push "a", register1 +Add2 +Push 12 +SetVariable +Push register2, "b" +GetVariable +Push register4 +Multiply +Add2 +Return +} +Push "registersVsDefineLocalTest" +Trace +Push 2, 1, "x1" +CallFunction +Push 3, 1, "x2" +CallFunction +Add2 +Push 4, 1, "x3" +CallFunction +Add2 +Trace diff --git a/libsrc/ffdec_lib/testexpected/as2/frame_80/DoAction.as b/libsrc/ffdec_lib/testexpected/as2/frame_80/DoAction.as new file mode 100644 index 000000000..9a70f2d02 --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/frame_80/DoAction.as @@ -0,0 +1,33 @@ +ConstantPool "deleteEvalTest", "k0", "k1", "r", "Math", "random", "floor", "k" +Push "deleteEvalTest" +Trace +Push "k0", 1 +DefineLocal +Push "k1", 2 +DefineLocal +Push "r", 0.0, "Math" +GetVariable +Push "random" +CallMethod +Push 2 +Multiply +Push 1, "Math" +GetVariable +Push "floor" +CallMethod +DefineLocal +Push "k", "r" +GetVariable +Add2 +GetVariable +Trace +Push "k", "r" +GetVariable +Add2 +Delete2 +Pop +Push "k", "r" +GetVariable +Add2 +GetVariable +Trace diff --git a/libsrc/ffdec_lib/testexpected/as2/frame_81/DoAction.as b/libsrc/ffdec_lib/testexpected/as2/frame_81/DoAction.as new file mode 100644 index 000000000..b4502e9b5 --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/frame_81/DoAction.as @@ -0,0 +1,12 @@ +ConstantPool "globalFuncAsVarTest", "trace", "t" +DefineFunction2 "t", 1, 2, false, false, true, false, true, false, true, false, false, 1, "x" { +Push register1 +Trace +} +Push "globalFuncAsVarTest" +Trace +Push "trace", 5 +DefineLocal +Push "trace", "t" +GetVariable +SetVariable diff --git a/libsrc/ffdec_lib/testexpected/as2/frame_82/DoAction.as b/libsrc/ffdec_lib/testexpected/as2/frame_82/DoAction.as new file mode 100644 index 000000000..837b23b39 --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/frame_82/DoAction.as @@ -0,0 +1,105 @@ +ConstantPool "switchAndTest", "a", "b", "a 0-3", "a 4-6", "a 7-10", "a 11-20", "a 0, b xx" +Push "switchAndTest" +Trace +Push "a", 5 +DefineLocal +Push "b", 3 +DefineLocal +Push true +StoreRegister 0 +Push "a" +GetVariable +Push 0.0 +Less2 +Not +PushDuplicate +Not +If loc008d +Pop +Push "a" +GetVariable +Push 3 +Greater +Not +loc008d:StrictEquals +If loc016b +Push register0, "a" +GetVariable +Push 4 +Less2 +Not +PushDuplicate +Not +If loc00bd +Pop +Push "a" +GetVariable +Push 6 +Greater +Not +loc00bd:StrictEquals +If loc0176 +Push register0, "a" +GetVariable +Push 7 +Less2 +Not +PushDuplicate +Not +If loc00ed +Pop +Push "a" +GetVariable +Push 10 +Greater +Not +loc00ed:StrictEquals +If loc017c +Push register0, "a" +GetVariable +Push 11 +Less2 +Not +PushDuplicate +Not +If loc011d +Pop +Push "a" +GetVariable +Push 20 +Greater +Not +loc011d:StrictEquals +If loc0187 +Push register0, "a" +GetVariable +Push 0.0 +Equals2 +If loc0151 +Push "b" +GetVariable +Push 5 +Less2 +Jump loc0160 +loc0151:Push "b" +GetVariable +Push 5 +Greater +loc0160:StrictEquals +If loc0192 +Jump loc019d +loc016b:Push "a 0-3" +Trace +Jump loc019d +loc0176:Push "a 4-6" +Trace +loc017c:Push "a 7-10" +Trace +Jump loc019d +loc0187:Push "a 11-20" +Trace +Jump loc019d +loc0192:Push "a 0, b xx" +Trace +Jump loc019d +loc019d: \ No newline at end of file diff --git a/libsrc/ffdec_lib/testexpected/as2/frame_83/DoAction.as b/libsrc/ffdec_lib/testexpected/as2/frame_83/DoAction.as new file mode 100644 index 000000000..d76aae6d3 --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/frame_83/DoAction.as @@ -0,0 +1,23 @@ +ConstantPool "ifframeLoaded2Test", "A", "d", "B", "C", "D", "E" +Push "ifframeLoaded2Test" +Trace +Push "A" +Trace +WaitForFrame 9, 15 +Push "d", 5 +DefineLocal +Push "d" +GetVariable +Push 4 +Equals2 +Not +If loc0061 +Push "B" +Trace +Jump loc0067 +loc0061:Push "C" +Trace +loc0067:Push "D" +Trace +Push "E" +Trace diff --git a/libsrc/ffdec_lib/testexpected/as2/frame_84/DoAction.as b/libsrc/ffdec_lib/testexpected/as2/frame_84/DoAction.as new file mode 100644 index 000000000..b71c6c0d9 --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/frame_84/DoAction.as @@ -0,0 +1,22 @@ +Push "withTest" +Trace +Push "before" +Trace +Push "_root" +GetVariable +Push "something" +GetMember +With { +Push "somesub", 5 +SetVariable +Push "subvar" +GetVariable +With { +Push "somesub2", 4 +SetVariable +} +Push "after1" +Trace +} +Push "after" +Trace diff --git a/libsrc/ffdec_lib/testexpected/as2/frame_85/DoAction.as b/libsrc/ffdec_lib/testexpected/as2/frame_85/DoAction.as new file mode 100644 index 000000000..78161cf6f --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/frame_85/DoAction.as @@ -0,0 +1,9 @@ +ConstantPool "numbersCallTest", "a", "toString", "b" +Push "numbersCallTest" +Trace +Push "a", 0.0, 5, "toString" +CallMethod +DefineLocal +Push "b", 0.0, 5.2, "toString" +CallMethod +DefineLocal diff --git a/libsrc/ffdec_lib/testexpected/as2/frame_86/DoAction.as b/libsrc/ffdec_lib/testexpected/as2/frame_86/DoAction.as new file mode 100644 index 000000000..480919fcd --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/frame_86/DoAction.as @@ -0,0 +1,39 @@ +ConstantPool "tryInsideForInTest", "obj", "thing", "a", "Object", "error" +Push "tryInsideForInTest" +Trace +Push "obj", 0.0 +InitObject +DefineLocal +Push "obj" +GetVariable +Enumerate2 +loc004e:StoreRegister 0 +Push null +Equals2 +If loc00a9 +Push "thing", register0 +DefineLocal +Try register0 { +Push "a" +Trace +Jump loc00a4 +} +Catch { +Push "Object" +GetVariable +Push register0 +CastOp +PushDuplicate +Push null +Equals2 +If loc009d +Push "error" +StackSwap +DefineLocal +Jump loc00a4 +loc009d:Pop +Push register0 +Throw +} +loc00a4:Jump loc004e +loc00a9: \ No newline at end of file diff --git a/libsrc/ffdec_lib/testexpected/as2/frame_87/DoAction.as b/libsrc/ffdec_lib/testexpected/as2/frame_87/DoAction.as new file mode 100644 index 000000000..3b1ef1ccb --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/frame_87/DoAction.as @@ -0,0 +1,35 @@ +ConstantPool "a", "callRegisterTest", "f", "A", "g", "B", "obj", "b", "tst" +DefineFunction2 "tst", 1, 3, false, false, true, false, true, false, true, false, false, 2, "o" { +Push "a" +StoreRegister 1 +Pop +Push 0.0, register2, register1 +CallMethod +Pop +} +Push "callRegisterTest" +Trace +Push "f" +DefineFunction "", 0 { +Push "A" +Trace +} +DefineLocal +Push "g" +DefineFunction "", 0 { +Push "B" +Trace +} +DefineLocal +Push "obj", "a", "f" +GetVariable +Push "b", "g" +GetVariable +Push 2 +InitObject +DefineLocal +Push "obj" +GetVariable +Push 1, "tst" +CallFunction +Pop diff --git a/libsrc/ffdec_lib/testexpected/as2/frame_88/DoAction.as b/libsrc/ffdec_lib/testexpected/as2/frame_88/DoAction.as new file mode 100644 index 000000000..151dcb806 --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/frame_88/DoAction.as @@ -0,0 +1,42 @@ +ConstantPool "switchForInTest", "t", "a", "z", "y", "x", "A", "B", "k", "finish" +Push "switchForInTest" +Trace +Push "t", 5 +DefineLocal +Push "a", "z", "y", "x", 3 +InitArray +DefineLocal +Push "t" +GetVariable +StoreRegister 0 +Push 0.0 +StrictEquals +If loc0090 +Push register0, 1 +StrictEquals +If loc009b +Push register0, 2 +StrictEquals +If loc00a6 +Jump loc00cf +loc0090:Push "A" +Trace +Jump loc00cf +loc009b:Push "B" +Trace +Jump loc00cf +loc00a6:Push "a" +GetVariable +Enumerate2 +loc00ad:StoreRegister 0 +Push null +Equals2 +If loc00cf +Push "k", register0 +DefineLocal +Push "k" +GetVariable +Trace +Jump loc00ad +loc00cf:Push "finish" +Trace diff --git a/libsrc/ffdec_lib/testexpected/as2/frame_89/DoAction.as b/libsrc/ffdec_lib/testexpected/as2/frame_89/DoAction.as new file mode 100644 index 000000000..1466fd753 --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/frame_89/DoAction.as @@ -0,0 +1,25 @@ +DefineFunction2 "myFunc", 0, 5, false, false, true, false, true, false, true, false, false { +Push 0.0 +StoreRegister 2 +Pop +Push 0.0 +InitObject +StoreRegister 1 +Pop +Push register1, register2, register2 +Increment +StoreRegister 2 +Pop +GetMember +StoreRegister 4 +Pop +Push register1, register2, register2 +Decrement +StoreRegister 2 +Pop +GetMember +StoreRegister 3 +Pop +} +Push "functionPostIncrementTest" +Trace diff --git a/libsrc/ffdec_lib/testexpected/as2/frame_90/DoAction.as b/libsrc/ffdec_lib/testexpected/as2/frame_90/DoAction.as new file mode 100644 index 000000000..234c2fe95 --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/frame_90/DoAction.as @@ -0,0 +1,32 @@ +ConstantPool "bitwiseOperandsTest", "a", "b", "c", "d", "e", "f", "g" +Push "bitwiseOperandsTest" +Trace +Push "a", 100 +DefineLocal +Push "b", "a" +GetVariable +Push 2303 +BitAnd +DefineLocal +Push "c", 2303, "a" +GetVariable +BitAnd +DefineLocal +Push "d", "a" +GetVariable +Push 1152 +BitOr +DefineLocal +Push "e", 1152, "a" +GetVariable +BitOr +DefineLocal +Push "f", "a" +GetVariable +Push 1601 +BitXor +DefineLocal +Push "g", 1601, "a" +GetVariable +BitXor +DefineLocal diff --git a/libsrc/ffdec_lib/testexpected/as2/frame_91/DoAction.as b/libsrc/ffdec_lib/testexpected/as2/frame_91/DoAction.as new file mode 100644 index 000000000..645b9c46c --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/frame_91/DoAction.as @@ -0,0 +1,47 @@ +ConstantPool "dynamicGetUrlTest", "n", "", "_level", "print:#bmax", "printasbitmap:#bmax", "something.swf", "v", "_root", "something", "r", "file", ".swf", "_blank", "FSCommand:", "test", "xx" +Push "dynamicGetUrlTest" +Trace +Push "n", 5 +DefineLocal +Push "", "_level", "n" +GetVariable +StringAdd +GetURL2 false, false, 0 +Push "print:#bmax", "_level", "n" +GetVariable +StringAdd +GetURL2 false, false, 0 +Push "printasbitmap:#bmax", "_level", "n" +GetVariable +StringAdd +GetURL2 false, false, 0 +Push "something.swf", "_level", "n" +GetVariable +StringAdd +GetURL2 false, false, 2 +Push "v", "_root" +GetVariable +Push "something" +GetMember +DefineLocal +Push "print:#bmax", "v" +GetVariable +GetURL2 false, false, 0 +Push "printasbitmap:#bmax", "v" +GetVariable +GetURL2 false, false, 0 +Push "r", 5 +DefineLocal +Push "file", "r" +GetVariable +Add2 +Push ".swf" +Add2 +Push "_blank" +GetURL2 false, false, 2 +Push "FSCommand:", "test", "r" +GetVariable +Add2 +StringAdd +Push "xx" +GetURL2 false, false, 0 diff --git a/libsrc/ffdec_lib/testexpected/as2/frame_92/DoAction.as b/libsrc/ffdec_lib/testexpected/as2/frame_92/DoAction.as new file mode 100644 index 000000000..ed98ecad1 --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/frame_92/DoAction.as @@ -0,0 +1,19 @@ +DefineFunction2 "f", 1, 3, false, false, true, false, true, false, true, false, false, 2, "tst" { +Push register2 +Not +If loc002e +Push 1 +StoreRegister 1 +Pop +Jump loc003b +loc002e:Push 2 +StoreRegister 1 +Pop +} +loc003b:Push "testVarDefineInFunc" +Trace +Push "tst" +GetVariable +Push 1, "f" +CallFunction +Pop diff --git a/libsrc/ffdec_lib/testexpected/as2/frame_93/DoAction.as b/libsrc/ffdec_lib/testexpected/as2/frame_93/DoAction.as new file mode 100644 index 000000000..cf56bda30 --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/frame_93/DoAction.as @@ -0,0 +1,41 @@ +ConstantPool "testInnerSwitchNoLabel", "a", "b", "4", "7", "1", "2", "end" +Push "testInnerSwitchNoLabel" +Trace +Push "a" +DefineLocal2 +Push "b" +DefineLocal2 +Push "a" +GetVariable +StoreRegister 0 +Push 4 +StrictEquals +If loc006b +Push register0, 7 +StrictEquals +If loc0076 +Jump loc0081 +loc006b:Push "4" +Trace +Jump loc00c4 +loc0076:Push "7" +Trace +Jump loc00c4 +loc0081:Push "b" +GetVariable +StoreRegister 0 +Push 1 +StrictEquals +If loc00ae +Push register0, 2 +StrictEquals +If loc00b9 +Jump loc00c4 +loc00ae:Push "1" +Trace +Jump loc00c4 +loc00b9:Push "2" +Trace +Jump loc00c4 +loc00c4:Push "end" +Trace diff --git a/libsrc/ffdec_lib/testexpected/as2/frame_94/DoAction.as b/libsrc/ffdec_lib/testexpected/as2/frame_94/DoAction.as new file mode 100644 index 000000000..35b65ae88 --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/frame_94/DoAction.as @@ -0,0 +1,24 @@ +DefineFunction "reset", 0 { +} +Push "functionSwitchTest" +Trace +Stop +Push "test" +GetVariable +StoreRegister 0 +Push 1 +StrictEquals +If loc0067 +Push register0, 2 +StrictEquals +If loc0073 +Push register0, 3 +StrictEquals +If loc0073 +Jump loc007a +loc0067:Push "A" +Trace +Jump loc007a +loc0073:Push "B" +Trace +loc007a: \ No newline at end of file diff --git a/libsrc/ffdec_lib/testexpected/as2/frame_95/DoAction.as b/libsrc/ffdec_lib/testexpected/as2/frame_95/DoAction.as new file mode 100644 index 000000000..a8aa547cd --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/frame_95/DoAction.as @@ -0,0 +1,89 @@ +DefineFunction2 "myFunction", 1, 5, false, false, true, false, true, false, true, false, false, 1, "item" { +Push undefined +StoreRegister 2 +Pop +Push undefined +StoreRegister 4 +Pop +Push register1, 1, "isNaN" +CallFunction +Not +Not +If loc014f +Push 3, 2, 1, 3 +InitArray +StoreRegister 2 +Pop +Push register2 +Enumerate2 +loc0069:StoreRegister 0 +Push null +Equals2 +If loc014a +Push register0 +StoreRegister 3 +Pop +Push register3 +StoreRegister 0 +Push "A" +StrictEquals +If loc00c5 +Push register0, "B" +StrictEquals +If loc00e5 +Push register0, "C" +StrictEquals +If loc0105 +Push register0, "D" +StrictEquals +If loc0125 +Jump loc0145 +loc00c5:Push register1, "a" +Equals2 +Not +If loc00e5 +loc00d4:Push null +Equals2 +Not +If loc00d4 +Push true +Return +loc00e5:Push register1, "b" +Equals2 +Not +If loc0105 +loc00f4:Push null +Equals2 +Not +If loc00f4 +Push true +Return +loc0105:Push register1, "c" +Equals2 +Not +If loc0125 +loc0114:Push null +Equals2 +Not +If loc0114 +Push true +Return +loc0125:Push register1, "d" +Equals2 +Not +If loc0145 +loc0134:Push null +Equals2 +Not +If loc0134 +Push true +Return +loc0145:Jump loc0069 +loc014a:Jump loc0160 +loc014f:Push "item is nan" +Trace +loc0160:Push false +Return +} +Push "breakDetectionTest" +Trace diff --git a/libsrc/ffdec_lib/testexpected/as2/frame_96/DoAction.as b/libsrc/ffdec_lib/testexpected/as2/frame_96/DoAction.as new file mode 100644 index 000000000..df5c2f693 --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/frame_96/DoAction.as @@ -0,0 +1,37 @@ +ConstantPool "doWhileTwiceTest", "a", "b", "x", "y", "z", "g", "h", "finish" +Push "doWhileTwiceTest" +Trace +Push "a", 1 +DefineLocal +Push "b", 2 +DefineLocal +loc0047:Push "a" +GetVariable +Not +If loc0070 +Push "x" +Trace +Push "b" +GetVariable +Not +If loc006a +Jump loc0080 +loc006a:Push "y" +Trace +loc0070:Push "z" +Trace +Push true +If loc0047 +loc0080:Push "g" +Trace +Push "b" +GetVariable +Not +If loc0097 +Jump loc00a7 +loc0097:Push "h" +Trace +Push true +If loc0047 +loc00a7:Push "finish" +Trace diff --git a/libsrc/ffdec_lib/testexpected/as2/frame_97/DoAction.as b/libsrc/ffdec_lib/testexpected/as2/frame_97/DoAction.as new file mode 100644 index 000000000..1550650a4 --- /dev/null +++ b/libsrc/ffdec_lib/testexpected/as2/frame_97/DoAction.as @@ -0,0 +1,53 @@ +ConstantPool "twoInTest", "o", "a", "n", "c", "i", "xx" +Push "twoInTest" +Trace +Push "o", "a", 0.0 +InitObject +Push 1 +InitObject +DefineLocal +Push "o" +GetVariable +Enumerate2 +loc0044:StoreRegister 0 +Push null +Equals2 +If loc00d4 +Push "n", register0 +DefineLocal +Push "c", 5 +DefineLocal +Push "o" +GetVariable +Push "a" +GetMember +Enumerate2 +loc0072:StoreRegister 0 +Push null +Equals2 +If loc00cf +Push "i", register0 +DefineLocal +Push "i" +GetVariable +Push "c" +GetVariable +Equals2 +Not +If loc00bf +Push "i" +GetVariable +Push 0.0 +Equals2 +Not +If loc00bf +Push "xx" +Trace +Jump loc00c4 +loc00bf:Jump loc0072 +loc00c4:Push null +Equals2 +Not +If loc00c4 +loc00cf:Jump loc0044 +loc00d4: \ No newline at end of file