diff --git a/CHANGELOG.md b/CHANGELOG.md index f3351e62b..193671f7b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,7 @@ All notable changes to this project will be documented in this file. - AS3 Simplify expressions - Do not convert this to {} when coerced - AS3 incorrect private modifier on internal namespaced traits of private class inside script - [#2095] AS3 Changing script when debugging +- [#223] AS2 Detecting uninitialized class fields ## [19.0.0] - 2023-10-01 ### Added @@ -3140,6 +3141,7 @@ Major version of SWF to XML export changed to 2. [#1678]: https://www.free-decompiler.com/flash/issues/1678 [#2094]: https://www.free-decompiler.com/flash/issues/2094 [#2095]: https://www.free-decompiler.com/flash/issues/2095 +[#223]: https://www.free-decompiler.com/flash/issues/223 [#1449]: https://www.free-decompiler.com/flash/issues/1449 [#2070]: https://www.free-decompiler.com/flash/issues/2070 [#2073]: https://www.free-decompiler.com/flash/issues/2073 @@ -3898,7 +3900,6 @@ Major version of SWF to XML export changed to 2. [#318]: https://www.free-decompiler.com/flash/issues/318 [#319]: https://www.free-decompiler.com/flash/issues/319 [#323]: https://www.free-decompiler.com/flash/issues/323 -[#223]: https://www.free-decompiler.com/flash/issues/223 [#261]: https://www.free-decompiler.com/flash/issues/261 [#269]: https://www.free-decompiler.com/flash/issues/269 [#274]: https://www.free-decompiler.com/flash/issues/274 diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWF.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWF.java index 435a5fdb0..a61a7b79b 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWF.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWF.java @@ -46,11 +46,13 @@ import com.jpexs.decompiler.flash.action.ActionGraphSource; import com.jpexs.decompiler.flash.action.ActionList; import com.jpexs.decompiler.flash.action.ActionListReader; import com.jpexs.decompiler.flash.action.ActionLocalData; +import com.jpexs.decompiler.flash.action.as2.UninitializedClassFieldsDetector; import com.jpexs.decompiler.flash.action.model.ConstantPool; import com.jpexs.decompiler.flash.action.model.DirectValueActionItem; import com.jpexs.decompiler.flash.action.model.FunctionActionItem; import com.jpexs.decompiler.flash.action.model.GetMemberActionItem; import com.jpexs.decompiler.flash.action.model.GetVariableActionItem; +import com.jpexs.decompiler.flash.action.model.SetMemberActionItem; import com.jpexs.decompiler.flash.action.model.clauses.ClassActionItem; import com.jpexs.decompiler.flash.action.model.clauses.InterfaceActionItem; import com.jpexs.decompiler.flash.action.swf4.ActionEquals; @@ -412,6 +414,8 @@ public final class SWF implements SWFContainerItem, Timelined, Openable { private AbcIndexing abcIndex; private int numAbcIndexDependencies = 0; + + private Map> uninitializedAs2ClassTraits = null; private static AbcIndexing playerGlobalAbcIndex; @@ -2750,7 +2754,7 @@ public final class SWF implements SWFContainerItem, Timelined, Openable { } private static void getVariables(boolean insideDoInitAction, List> variables, List functions, HashMap strings, HashMap usageTypes, ActionGraphSource code, int addr, String path) throws InterruptedException { - ActionLocalData localData = new ActionLocalData(null, insideDoInitAction); + ActionLocalData localData = new ActionLocalData(null, insideDoInitAction, new HashMap<>() /*??*/); getVariables(null, localData, new TranslateStack(path), new ArrayList<>(), code, code.adr2pos(addr), variables, functions, strings, new ArrayList<>(), usageTypes, path); } @@ -2940,7 +2944,7 @@ public final class SWF implements SWFContainerItem, Timelined, Openable { int staticOperation = Graph.SOP_USE_STATIC; //(Boolean) Configuration.getConfig("autoDeobfuscate", true) ? Graph.SOP_SKIP_STATIC : Graph.SOP_USE_STATIC; List dec; try { - dec = Action.actionsToTree(true /*Yes, inside doInitAction*/, false, dia.getActions(), version, staticOperation, ""/*FIXME*/, getCharset()); + dec = Action.actionsToTree(new HashMap<>() /*??*/, true /*Yes, inside doInitAction*/, false, dia.getActions(), version, staticOperation, ""/*FIXME*/, getCharset()); } catch (EmptyStackException ex) { continue; } @@ -3219,6 +3223,7 @@ public final class SWF implements SWFContainerItem, Timelined, Openable { } public void clearScriptCache() { + uninitializedAs2ClassTraits = null; as2Cache.clear(); as3Cache.clear(); List abcList = getAbcList(); @@ -4562,4 +4567,17 @@ public final class SWF implements SWFContainerItem, Timelined, Openable { public OpenableList getOpenableList() { return openableList; } + + public void calculateAs2UninitializedClassTraits() { + uninitializedAs2ClassTraits = new HashMap<>(); + UninitializedClassFieldsDetector detector = new UninitializedClassFieldsDetector(); + uninitializedAs2ClassTraits = detector.calculateAs2UninitializedClassTraits(this); + } + + public synchronized Map> getUninitializedAs2ClassTraits() { + if (uninitializedAs2ClassTraits == null) { + calculateAs2UninitializedClassTraits(); + } + return uninitializedAs2ClassTraits; + } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/Action.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/Action.java index 01e85c2e9..0b22338ea 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/Action.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/Action.java @@ -21,6 +21,7 @@ import com.jpexs.decompiler.flash.BaseLocalData; import com.jpexs.decompiler.flash.DisassemblyListener; import com.jpexs.decompiler.flash.SWF; import com.jpexs.decompiler.flash.SWFOutputStream; +import com.jpexs.decompiler.flash.action.as2.Trait; import com.jpexs.decompiler.flash.action.deobfuscation.ActionDeobfuscator; import com.jpexs.decompiler.flash.action.model.ActionItem; import com.jpexs.decompiler.flash.action.model.ConstantPool; @@ -765,6 +766,7 @@ public abstract class Action implements GraphSourceItem { /** * Translates this function to stack and output. * + * @param uninitializedClassTraits * @param secondPassData * @param insideDoInitAction * @param lineStartIns Line start instruction @@ -777,7 +779,7 @@ public abstract class Action implements GraphSourceItem { * @param path the value of path * @throws java.lang.InterruptedException */ - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartIns, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) throws InterruptedException { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartIns, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) throws InterruptedException { } @Override @@ -853,12 +855,12 @@ public abstract class Action implements GraphSourceItem { return -1; } - public static List actionsToTree(boolean insideDoInitAction, boolean insideFunction, List actions, int version, int staticOperation, String path, String charset) throws InterruptedException { - return actionsToTree(insideDoInitAction, insideFunction, new HashMap<>(), new HashMap<>(), new HashMap<>(), actions, version, staticOperation, path, charset); + public static List actionsToTree(Map> uninitializedClassTraits, boolean insideDoInitAction, boolean insideFunction, List actions, int version, int staticOperation, String path, String charset) throws InterruptedException { + return actionsToTree(uninitializedClassTraits, insideDoInitAction, insideFunction, new HashMap<>(), new HashMap<>(), new HashMap<>(), actions, version, staticOperation, path, charset); } - public static GraphTextWriter actionsToSource(final ASMSource asm, final List actions, final String path, GraphTextWriter writer, String charset) throws InterruptedException { - return Action.actionsToSource(asm, actions, path, writer, charset, new ArrayList<>()); + public static GraphTextWriter actionsToSource(Map> uninitializedClassTraits, final ASMSource asm, final List actions, final String path, GraphTextWriter writer, String charset) throws InterruptedException { + return Action.actionsToSource(uninitializedClassTraits, asm, actions, path, writer, charset, new ArrayList<>()); } /** @@ -873,7 +875,7 @@ public abstract class Action implements GraphSourceItem { * @return * @throws java.lang.InterruptedException */ - public static GraphTextWriter actionsToSource(final ASMSource asm, final List actions, final String path, GraphTextWriter writer, String charset, List treeOperations) throws InterruptedException { + public static GraphTextWriter actionsToSource(Map> uninitializedClassTraits, final ASMSource asm, final List actions, final String path, GraphTextWriter writer, String charset, List treeOperations) throws InterruptedException { writer.suspendMeasure(); List tree = null; Throwable convertException = null; @@ -886,7 +888,7 @@ public abstract class Action implements GraphSourceItem { public List call() throws Exception { int staticOperation = Graph.SOP_USE_STATIC; //(Boolean) Configuration.getConfig("autoDeobfuscate", true) ? Graph.SOP_SKIP_STATIC : Graph.SOP_USE_STATIC; boolean insideDoInitAction = (asm instanceof DoInitActionTag); - List tree = actionsToTree(insideDoInitAction, false, new HashMap<>(), new HashMap<>(), new HashMap<>(), actions, version, staticOperation, path, charset); + List tree = actionsToTree(uninitializedClassTraits, insideDoInitAction, false, new HashMap<>(), new HashMap<>(), new HashMap<>(), actions, version, staticOperation, path, charset); SWFDecompilerPlugin.fireActionTreeCreated(tree, swf); for (ActionTreeOperation treeOperation:treeOperations) { treeOperation.run(tree); @@ -948,17 +950,17 @@ public abstract class Action implements GraphSourceItem { * @return List of treeItems * @throws java.lang.InterruptedException */ - public static List actionsToTree(boolean insideDoInitAction, boolean insideFunction, HashMap regNames, HashMap variables, HashMap functions, List actions, int version, int staticOperation, String path, String charset) throws InterruptedException { + public static List actionsToTree(Map> uninitializedClassTraits, boolean insideDoInitAction, boolean insideFunction, HashMap regNames, HashMap variables, HashMap functions, List actions, int version, int staticOperation, String path, String charset) throws InterruptedException { HashMap variablesBackup = new LinkedHashMap<>(variables); HashMap functionsBackup = new LinkedHashMap<>(functions); try { - return ActionGraph.translateViaGraph(null, insideDoInitAction, insideFunction, regNames, variables, functions, actions, version, staticOperation, path, charset); + return ActionGraph.translateViaGraph(uninitializedClassTraits, null, insideDoInitAction, insideFunction, regNames, variables, functions, actions, version, staticOperation, path, charset); } catch (SecondPassException spe) { variables.clear(); variables.putAll(variablesBackup); functions.clear(); functions.putAll(functionsBackup); - return ActionGraph.translateViaGraph(spe.getData(), insideDoInitAction, insideFunction, regNames, variables, functions, actions, version, staticOperation, path, charset); + return ActionGraph.translateViaGraph(uninitializedClassTraits, spe.getData(), insideDoInitAction, insideFunction, regNames, variables, functions, actions, version, staticOperation, path, charset); } } @@ -971,7 +973,7 @@ public abstract class Action implements GraphSourceItem { } expectedSize += getStackPushCount(localData, stack);*/ - translate(aLocalData.secondPassData, aLocalData.insideDoInitAction, aLocalData.lineStartAction, stack, output, aLocalData.regNames, aLocalData.variables, aLocalData.functions, staticOperation, path); + translate(aLocalData.uninitializedClassTraits, aLocalData.secondPassData, aLocalData.insideDoInitAction, aLocalData.lineStartAction, stack, output, aLocalData.regNames, aLocalData.variables, aLocalData.functions, staticOperation, path); /*if (stack.size() != expectedSize && !(this instanceof ActionPushDuplicate)) { throw new Error("HONFIKA stack size mismatch"); }*/ @@ -1023,7 +1025,7 @@ public abstract class Action implements GraphSourceItem { if (start < actions.size() && (end > 0) && (start > 0)) { logger.log(Level.FINE, "Entering {0}-{1}{2}", new Object[]{start, end, actions.size() > 0 ? (" (" + actions.get(start).toString() + " - " + actions.get(end == actions.size() ? end - 1 : end) + ")") : ""}); } - ActionLocalData localData = new ActionLocalData(switchParts, secondPassData, insideDoInitAction, registerNames, variables, functions); + ActionLocalData localData = new ActionLocalData(switchParts, secondPassData, insideDoInitAction, registerNames, variables, functions, graph.getUninitializedClassTraits()); localData.lineStartAction = fi.getVal(); List output = new ArrayList<>(); int ip = start; @@ -1087,10 +1089,10 @@ public abstract class Action implements GraphSourceItem { } } try { - out = ActionGraph.translateViaGraph(null, insideDoInitAction, true, regNames, variables2, functions, actions.subList(adr2ip(actions, endAddr), adr2ip(actions, endAddr + size)), version, staticOperation, path + (cntName == null ? "" : "/" + cntName), charset); + out = ActionGraph.translateViaGraph(graph.getUninitializedClassTraits(), null, insideDoInitAction, true, regNames, variables2, functions, actions.subList(adr2ip(actions, endAddr), adr2ip(actions, endAddr + size)), version, staticOperation, path + (cntName == null ? "" : "/" + cntName), charset); } catch (SecondPassException spe) { variables2 = prepareVariables(cnt, variables); - out = ActionGraph.translateViaGraph(spe.getData(), insideDoInitAction, true, regNames, variables2, functions, actions.subList(adr2ip(actions, endAddr), adr2ip(actions, endAddr + size)), version, staticOperation, path + (cntName == null ? "" : "/" + cntName), charset); + out = ActionGraph.translateViaGraph(graph.getUninitializedClassTraits(), spe.getData(), insideDoInitAction, true, regNames, variables2, functions, actions.subList(adr2ip(actions, endAddr), adr2ip(actions, endAddr + size)), version, staticOperation, path + (cntName == null ? "" : "/" + cntName), charset); } } catch (OutOfMemoryError | TranslateException | StackOverflowError ex) { logger.log(Level.SEVERE, "Decompilation error in: " + path, ex); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/ActionGraph.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/ActionGraph.java index d0716f2ae..3d5e3b4a5 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/ActionGraph.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/ActionGraph.java @@ -16,10 +16,12 @@ */ package com.jpexs.decompiler.flash.action; +import com.jpexs.decompiler.flash.action.as2.ActionScript2ClassDetector; import com.jpexs.decompiler.flash.BaseLocalData; import com.jpexs.decompiler.flash.FinalProcessLocalData; import com.jpexs.decompiler.flash.SWF; import static com.jpexs.decompiler.flash.action.Action.adr2ip; +import com.jpexs.decompiler.flash.action.as2.Trait; import com.jpexs.decompiler.flash.action.model.DirectValueActionItem; import com.jpexs.decompiler.flash.action.model.EnumerateActionItem; import com.jpexs.decompiler.flash.action.model.EnumeratedValueActionItem; @@ -89,13 +91,21 @@ public class ActionGraph extends Graph { private boolean insideDoInitAction; private boolean insideFunction; + private Map> uninitializedClassTraits; - public ActionGraph(String path, boolean insideDoInitAction, boolean insideFunction, List code, HashMap registerNames, HashMap variables, HashMap functions, int version, String charset) { + public ActionGraph(Map> uninitializedClassTraits, String path, boolean insideDoInitAction, boolean insideFunction, List code, HashMap registerNames, HashMap variables, HashMap functions, int version, String charset) { super(new ActionGraphSource(path, insideDoInitAction, code, version, registerNames, variables, functions, charset), new ArrayList<>()); + this.uninitializedClassTraits = uninitializedClassTraits; this.insideDoInitAction = insideDoInitAction; this.insideFunction = insideFunction; } + public Map> getUninitializedClassTraits() { + return uninitializedClassTraits; + } + + + @Override public ActionGraphSource getGraphCode() { return (ActionGraphSource) code; @@ -123,7 +133,7 @@ public class ActionGraph extends Graph { for (ActionList al : outs) { subgraphs.put("loc" + Helper.formatAddress(code.pos2adr(ip)) + ": function " + functionName, - new ActionGraph("", false, false, al, new HashMap<>(), new HashMap<>(), new HashMap<>(), SWF.DEFAULT_VERSION, ((ActionGraphSource) getGraphCode()).getCharset()) + new ActionGraph(uninitializedClassTraits, "", false, false, al, new HashMap<>(), new HashMap<>(), new HashMap<>(), SWF.DEFAULT_VERSION, ((ActionGraphSource) getGraphCode()).getCharset()) ); } } @@ -141,9 +151,9 @@ public class ActionGraph extends Graph { } - public static List translateViaGraph(SecondPassData secondPassData, boolean insideDoInitAction, boolean insideFunction, HashMap registerNames, HashMap variables, HashMap functions, List code, int version, int staticOperation, String path, String charset) throws InterruptedException { - ActionGraph g = new ActionGraph(path, insideDoInitAction, insideFunction, code, registerNames, variables, functions, version, charset); - ActionLocalData localData = new ActionLocalData(secondPassData, insideDoInitAction, registerNames); + public static List translateViaGraph(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, boolean insideFunction, HashMap registerNames, HashMap variables, HashMap functions, List code, int version, int staticOperation, String path, String charset) throws InterruptedException { + ActionGraph g = new ActionGraph(uninitializedClassTraits,path, insideDoInitAction, insideFunction, code, registerNames, variables, functions, version, charset); + ActionLocalData localData = new ActionLocalData(secondPassData, insideDoInitAction, registerNames, uninitializedClassTraits); g.init(localData); return g.translate(localData, staticOperation, path); } @@ -474,7 +484,7 @@ public class ActionGraph extends Graph { List ret = super.translate(localData, staticOperation, path); if (insideDoInitAction && !insideFunction) { ActionScript2ClassDetector detector = new ActionScript2ClassDetector(); - detector.checkClass(ret, ((ActionGraphSource) code).getVariables(), path); + detector.checkClass(uninitializedClassTraits,ret, ((ActionGraphSource) code).getVariables(), path); } makeDefineRegistersUp(ret); return ret; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/ActionList.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/ActionList.java index 06755c6c4..8ab101814 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/ActionList.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/ActionList.java @@ -562,7 +562,7 @@ public class ActionList extends ArrayList { return writer.toString(); } - public String toSource() { + /*public String toSource() { try { HighlightedTextWriter writer = new HighlightedTextWriter(new CodeFormatting(), false); actionsToSource(null, this, "", writer, charset); @@ -571,5 +571,5 @@ public class ActionList extends ArrayList { Logger.getLogger(ActionList.class.getName()).log(Level.SEVERE, null, ex); } return null; - } + }*/ } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/ActionLocalData.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/ActionLocalData.java index 9920eebb6..704652528 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/ActionLocalData.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/ActionLocalData.java @@ -17,11 +17,13 @@ package com.jpexs.decompiler.flash.action; import com.jpexs.decompiler.flash.BaseLocalData; +import com.jpexs.decompiler.flash.action.as2.Trait; import com.jpexs.decompiler.graph.GraphPart; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.SecondPassData; import java.util.HashMap; +import java.util.Map; import java.util.Set; /** @@ -30,6 +32,8 @@ import java.util.Set; */ public class ActionLocalData extends BaseLocalData { + public final Map> uninitializedClassTraits; + public final HashMap regNames; public final HashMap variables; @@ -40,28 +44,31 @@ public class ActionLocalData extends BaseLocalData { public boolean insideDoInitAction; - public ActionLocalData(SecondPassData secondPassData, boolean insideDoInitAction) { + public ActionLocalData(SecondPassData secondPassData, boolean insideDoInitAction, Map> uninitializedClassTraits) { this.secondPassData = secondPassData; regNames = new HashMap<>(); variables = new HashMap<>(); functions = new HashMap<>(); - this.insideDoInitAction = insideDoInitAction; + this.insideDoInitAction = insideDoInitAction; + this.uninitializedClassTraits = uninitializedClassTraits; } - public ActionLocalData(SecondPassData secondPassData, boolean insideDoInitAction, HashMap regNames) { + public ActionLocalData(SecondPassData secondPassData, boolean insideDoInitAction, HashMap regNames, Map> uninitializedClassTraits) { this.regNames = regNames; this.secondPassData = secondPassData; variables = new HashMap<>(); functions = new HashMap<>(); this.insideDoInitAction = insideDoInitAction; + this.uninitializedClassTraits = uninitializedClassTraits; } - public ActionLocalData(Set switchParts, SecondPassData secondPassData, boolean insideDoInitAction, HashMap regNames, HashMap variables, HashMap functions) { + public ActionLocalData(Set switchParts, SecondPassData secondPassData, boolean insideDoInitAction, HashMap regNames, HashMap variables, HashMap functions, Map> uninitializedClassTraits) { this.allSwitchParts = switchParts; this.regNames = regNames; this.variables = variables; this.functions = functions; this.insideDoInitAction = insideDoInitAction; this.secondPassData = secondPassData; + this.uninitializedClassTraits = uninitializedClassTraits; } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/ActionScript2ClassDetector.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/as2/ActionScript2ClassDetector.java similarity index 95% rename from libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/ActionScript2ClassDetector.java rename to libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/as2/ActionScript2ClassDetector.java index 32abd2ec7..5a43063d3 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/ActionScript2ClassDetector.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/as2/ActionScript2ClassDetector.java @@ -14,9 +14,10 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. */ -package com.jpexs.decompiler.flash.action; +package com.jpexs.decompiler.flash.action.as2; import com.jpexs.decompiler.flash.IdentifiersDeobfuscation; +import com.jpexs.decompiler.flash.action.as2.Trait; import com.jpexs.decompiler.flash.action.model.CallFunctionActionItem; import com.jpexs.decompiler.flash.action.model.CallMethodActionItem; import com.jpexs.decompiler.flash.action.model.DirectValueActionItem; @@ -51,6 +52,7 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.List; +import java.util.Map; import java.util.Set; import java.util.logging.Level; import java.util.logging.Logger; @@ -279,7 +281,7 @@ public class ActionScript2ClassDetector { return mnDv.getAsString(); } - private boolean checkClassContent(List parts, HashMap variables, int partsPos, int commandsStartPos, int commandsEndPos, List commands, List classNamePath, String scriptPath) { + private boolean checkClassContent(Map> uninitializedClassTraits, List parts, HashMap variables, int partsPos, int commandsStartPos, int commandsEndPos, List commands, List classNamePath, String scriptPath) { try { @@ -716,7 +718,17 @@ public class ActionScript2ClassDetector { } else { //throw new AssertException("No constructor found"); } - + + String fullClassName = String.join(".", getMembersPath(classNameTargetPath)); + if (uninitializedClassTraits.containsKey(fullClassName)) { + int t = 0; + for (String traitName:uninitializedClassTraits.get(fullClassName).keySet()) { + Trait trait = uninitializedClassTraits.get(fullClassName).get(traitName); + traitsStatic.add(t, trait.isStatic()); + traits.add(t, new MyEntry<>(new DirectValueActionItem(trait.getName()), null)); + t++; + } + } ClassActionItem clsItem = new ClassActionItem(classNameTargetPath, extendsOp, implementsOp, traits, traitsStatic); for (int k = commandsStartPos; k <= commandsEndPos; k++) { commands.remove(commandsStartPos); @@ -729,7 +741,8 @@ public class ActionScript2ClassDetector { commands.remove(commandsStartPos + 1); } } - + + // goto next line and check next classes return true; } catch (AssertException ex) { @@ -762,7 +775,7 @@ public class ActionScript2ClassDetector { } } - private boolean checkIfVariants(List commands, HashMap variables, int pos, String scriptPath) { + private boolean checkIfVariants(Map> uninitializedClassTraits, List commands, HashMap variables, int pos, String scriptPath) { expandTernars(commands); @@ -820,12 +833,12 @@ public class ActionScript2ClassDetector { List classPath = pathToSearchVariant1; classPath.remove(0); //remove _global if (ifItem.onTrue.isEmpty()) { //if can have zero offset as the code is larger than bytes limit. TODO: make this check also for variant 2 (?) - if (this.checkClassContent(commands, variables, checkPos + 1, pos, commands.size() - 1, commands, classPath, scriptPath)) { + if (this.checkClassContent(uninitializedClassTraits, commands, variables, checkPos + 1, pos, commands.size() - 1, commands, classPath, scriptPath)) { return true; } else { break check_variant1; } - } else if (this.checkClassContent(ifItem.onTrue, variables, 0, pos, checkPos, commands, classPath, scriptPath)) { + } else if (this.checkClassContent(uninitializedClassTraits, ifItem.onTrue, variables, 0, pos, checkPos, commands, classPath, scriptPath)) { return true; } else { break check_variant1; @@ -892,7 +905,7 @@ public class ActionScript2ClassDetector { } } } - if (checkClassContent(parts, variables, checkPos, pos, pos, commands, memPath, scriptPath)) { + if (checkClassContent(uninitializedClassTraits, parts, variables, checkPos, pos, pos, commands, memPath, scriptPath)) { return true; } } @@ -901,11 +914,11 @@ public class ActionScript2ClassDetector { return false; } - public void checkClass(List commands, HashMap variables, String scriptPath) { + public void checkClass(Map> uninitializedClassTraits, List commands, HashMap variables, String scriptPath) { List localCommands = new ArrayList<>(commands); boolean changed = false; for (int pos = 0; pos < localCommands.size(); pos++) { - if (checkIfVariants(localCommands, variables, pos, scriptPath)) { + if (checkIfVariants(uninitializedClassTraits, localCommands, variables, pos, scriptPath)) { changed = true; } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/as2/ActionScript2Classes.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/as2/ActionScript2Classes.java new file mode 100644 index 000000000..66ec5d975 --- /dev/null +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/as2/ActionScript2Classes.java @@ -0,0 +1,180 @@ +/* + * Copyright (C) 2010-2023 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.action.as2; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.UnsupportedEncodingException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.TreeMap; +import java.util.logging.Level; +import java.util.logging.Logger; + +/** + * Index of ActionScript 2 built in classes. + * @author JPEXS + */ +public class ActionScript2Classes { + private static final Map> classToTraits = new HashMap<>(); + private static final Map> classInheritance = new HashMap<>(); + + private static boolean inited = false; + + private synchronized static void initClasses() { + if (inited) { + return; + } + InputStream is = ActionScript2Classes.class.getResourceAsStream("/com/jpexs/decompiler/flash/action/as2/as2_classes.txt"); + try { + BufferedReader br = new BufferedReader(new InputStreamReader(is, "UTF-8")); + String line; + String clsName = ""; + while((line = br.readLine()) != null) { + line = line.trim(); + if (line.isEmpty()) { + continue; + } + String parts[] = line.split(" "); + if (parts[0].equals("class")) { + clsName = parts[1]; + classToTraits.put(clsName, new TreeMap<>()); + continue; + } + boolean isStatic = false; + int pos = 0; + if (parts[pos].equals("static")) { + isStatic = true; + pos++; + } + if (parts[pos].equals("extends")) { + if (!classInheritance.containsKey(clsName)) { + classInheritance.put(clsName, new ArrayList<>()); + } + classInheritance.get(clsName).add(parts[pos + 1]); + continue; + } + + String traitType = parts[pos]; + String name = parts[pos + 1]; + String type = parts[pos + 2]; + Trait trait; + switch(traitType) { + case "function": + trait = new Method(isStatic, name, type, clsName); + break; + case "var": + trait = new Variable(isStatic, name, type, clsName); + break; + default: + throw new RuntimeException("Unknown trait type: "+traitType); + } + classToTraits.get(clsName).put(name, trait); + } + } catch (UnsupportedEncodingException ex) { + //ignored + } catch (IOException ex) { + Logger.getLogger(ActionScript2Classes.class.getName()).log(Level.SEVERE, null, ex); + } + inited = true; + } + + + public static boolean traitExists(String className, String name, boolean withInheritance) { + if (!classToTraits.containsKey(className)) { + return false; + } + + if (classToTraits.get(className).containsKey(name)) { + return true; + } + + if (withInheritance) { + if (classInheritance.containsKey(className)) { + for (String parentClassName : classInheritance.get(className)) { + if (classToTraits.containsKey(parentClassName)) { + if (classToTraits.get(parentClassName).containsKey(name)) { + return true; + } + } + } + } + } + return false; + } + + /** + * Get class traits, null when class not exists (or is not built-in) + * @param className + * @param withInheritance + * @return + */ + public static Map getClassTraits(String className, boolean withInheritance) { + initClasses(); + + Map result = new LinkedHashMap<>(); + if (!classToTraits.containsKey(className)) { + return null; + } + for (String name: classToTraits.get(className).keySet()) { + result.put(name, classToTraits.get(className).get(name)); + } + + if (withInheritance) { + if (classInheritance.containsKey(className)) { + for (String parentClassName : classInheritance.get(className)) { + if (classToTraits.containsKey(parentClassName)) { + for (String name: classToTraits.get(parentClassName).keySet()) { + if (!result.containsKey(name)) { + result.put(name, classToTraits.get(parentClassName).get(name)); + } + } + } + } + } + } + return result; + } + + public static Map> getClassToTraits() { + initClasses(); + return classToTraits; + } + + public static Map> getClassInheritance() { + initClasses(); + return classInheritance; + } + + public static void main(String[] args) { + Map traits = getClassTraits("flash.filters.BevelFilter", true); + if (traits != null) { + for(String name:traits.keySet()) { + Trait t = traits.get(name); + System.out.println(t.toString() + " (" + t.getClassName() +")"); + } + } + + System.out.println("trait exists: "+ traitExists("flash.filters.BevelFilter", "quality", false)); + } + +} diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/as2/Method.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/as2/Method.java new file mode 100644 index 000000000..f877dc2f9 --- /dev/null +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/as2/Method.java @@ -0,0 +1,69 @@ +/* + * Copyright (C) 2010-2023 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.action.as2; + +/** + * + * @author JPEXS + */ +public class Method implements Trait { + private final boolean isStatic; + private final String name; + private final String returnType; + private final String className; + + public Method(boolean isStatic, String name, String returnType, String className) { + this.isStatic = isStatic; + this.name = name; + this.returnType = returnType; + this.className = className; + } + + @Override + public String getClassName() { + return className; + } + + @Override + public boolean isStatic() { + return isStatic; + } + + @Override + public String getName() { + return name; + } + + public String getReturnType() { + return returnType; + } + + @Override + public String toString() { + return (isStatic ? "static " : "") + "function " + name + ": " +returnType; + } + + @Override + public String getCallType() { + return returnType; + } + + @Override + public String getType() { + return "Function"; + } +} diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/as2/Trait.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/as2/Trait.java new file mode 100644 index 000000000..d166d5ae0 --- /dev/null +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/as2/Trait.java @@ -0,0 +1,29 @@ +/* + * Copyright (C) 2010-2023 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.action.as2; + +/** + * + * @author JPEXS + */ +public interface Trait { + public boolean isStatic(); + public String getName(); + public String getType(); + public String getCallType(); + public String getClassName(); +} diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/as2/UninitializedClassFieldsDetector.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/as2/UninitializedClassFieldsDetector.java new file mode 100644 index 000000000..249975831 --- /dev/null +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/as2/UninitializedClassFieldsDetector.java @@ -0,0 +1,354 @@ +/* + * Copyright (C) 2010-2023 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.action.as2; + +import com.jpexs.decompiler.flash.SWF; +import com.jpexs.decompiler.flash.action.model.CallMethodActionItem; +import com.jpexs.decompiler.flash.action.model.DeleteActionItem; +import com.jpexs.decompiler.flash.action.model.DirectValueActionItem; +import com.jpexs.decompiler.flash.action.model.FunctionActionItem; +import com.jpexs.decompiler.flash.action.model.GetMemberActionItem; +import com.jpexs.decompiler.flash.action.model.GetVariableActionItem; +import com.jpexs.decompiler.flash.action.model.NewMethodActionItem; +import com.jpexs.decompiler.flash.action.model.SetMemberActionItem; +import com.jpexs.decompiler.flash.action.model.SetVariableActionItem; +import com.jpexs.decompiler.flash.action.model.clauses.ClassActionItem; +import com.jpexs.decompiler.flash.action.model.clauses.InterfaceActionItem; +import com.jpexs.decompiler.flash.action.swf4.RegisterNumber; +import com.jpexs.decompiler.flash.helpers.collections.MyEntry; +import com.jpexs.decompiler.flash.tags.DoInitActionTag; +import com.jpexs.decompiler.flash.tags.base.ASMSource; +import com.jpexs.decompiler.graph.AbstractGraphTargetVisitor; +import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +/** + * + * @author JPEXS + */ +public class UninitializedClassFieldsDetector { + + /** + * Gets path of variable and its getMembers: a.b.c.d => [a,b,c,d] + * + * @param item + * @return List of path or null if not members path + */ + private List getMembersPath(GraphTargetItem item) { + List ret = new ArrayList<>(); + while (item instanceof GetMemberActionItem) { + GetMemberActionItem mem = (GetMemberActionItem) item; + if (!(mem.memberName instanceof DirectValueActionItem)) { + return null; + } + DirectValueActionItem dv = ((DirectValueActionItem) mem.memberName); + if (!dv.isString()) { + return null; + } + ret.add(0, dv.getAsString()); + item = mem.object; + } + if (item instanceof DirectValueActionItem) { + DirectValueActionItem dv1 = (DirectValueActionItem) item; + if (dv1.value instanceof RegisterNumber) { + RegisterNumber rn = (RegisterNumber)dv1.value; + if ("this".equals(rn.name)) { + ret.add(0, "this"); + return ret; + } + } + } + if (!((item instanceof GetVariableActionItem))) { + return null; + } + GetVariableActionItem gv = (GetVariableActionItem) item; + if (!(gv.name instanceof DirectValueActionItem)) { + return null; + } + DirectValueActionItem dv = ((DirectValueActionItem) gv.name); + if (!dv.isString()) { + return null; + } + String varName = dv.getAsString(); + ret.add(0, varName); + return ret; + } + + private List getFullPath(GraphTargetItem item) { + if (item instanceof GetMemberActionItem) { + return getMembersPath(item); + } + if (item instanceof SetVariableActionItem) { + SetVariableActionItem sv = (SetVariableActionItem) item; + if (!(sv.name instanceof DirectValueActionItem)) { + return null; + } + DirectValueActionItem nDv = (DirectValueActionItem) sv.name; + if (!nDv.isString()) { + return null; + } + List ret = new ArrayList<>(); + ret.add(nDv.getAsString()); + return ret; + } + + GraphTargetItem name; + GraphTargetItem objectName; + + if (item instanceof SetMemberActionItem) { + SetMemberActionItem sm = (SetMemberActionItem) item; + name = sm.objectName; + objectName = sm.object; + } else if (item instanceof CallMethodActionItem) { + CallMethodActionItem cm = (CallMethodActionItem) item; + name = cm.methodName; + objectName = cm.scriptObject; + } else if (item instanceof NewMethodActionItem) { + NewMethodActionItem nm = (NewMethodActionItem) item; + name = nm.methodName; + objectName = nm.scriptObject; + } else if (item instanceof DeleteActionItem) { + DeleteActionItem d = (DeleteActionItem) item; + name = d.propertyName; + objectName = d.object; + } else { + return null; + } + + if (!(name instanceof DirectValueActionItem)) { + return null; + } + DirectValueActionItem onDv = (DirectValueActionItem) name; + if (!onDv.isString()) { + return null; + } + String currentMemberName = onDv.getAsString(); + List path = getMembersPath(objectName); + if (path == null) { + return null; + } + path.add(currentMemberName); + return path; + } + + private boolean containsTrait(Map> classTraits, Map> classInheritance, String className, String name) { + if (!classTraits.containsKey(className)) { + return false; + } + if (classTraits.get(className).containsKey(name)) { + return true; + } + for (String parent:classInheritance.get(className)) { + if (classTraits.containsKey(parent) && classTraits.get(parent).containsKey(name)) { + return true; + } + } + return false; + } + + public Map> calculateAs2UninitializedClassTraits(SWF swf) { + if (swf.isAS3()) { + return new HashMap<>(); + } + final Map> result = new LinkedHashMap<>(); + Map asms = swf.getASMs(false); + + List classesAsms = new ArrayList<>(); + + final Map> classTraits = new LinkedHashMap<>(ActionScript2Classes.getClassToTraits()); + final Map> classInheritance = new HashMap<>(ActionScript2Classes.getClassInheritance()); + + //get all assigned traits and inheritance tree + for (String key:asms.keySet()) { + ASMSource asm = asms.get(key); + if (asm instanceof DoInitActionTag) { + DoInitActionTag doi = (DoInitActionTag)asm; + String exportName = doi.getSwf().getCharacter(doi.getCharacterId()).getExportName(); + if (exportName != null && exportName.startsWith("__Packages.")) { + List tree = asm.getActionsToTree(); + for (GraphTargetItem item:tree) { + if (item instanceof InterfaceActionItem) { + InterfaceActionItem iai = (InterfaceActionItem) item; + String className = String.join(".", getMembersPath(iai.name)); + if (iai.superInterfaces != null) { + for (GraphTargetItem imp: iai.superInterfaces) { + String imtName = String.join(".", getMembersPath(imp)); + classInheritance.get(className).add(imtName); + } + } + } + if (item instanceof ClassActionItem) { + ClassActionItem cai = (ClassActionItem) item; + final String className = String.join(".", getMembersPath(cai.className)); + classInheritance.put(className, new ArrayList<>()); + if (!classTraits.containsKey(className)) { + classTraits.put(className, new LinkedHashMap<>()); + } + for (int i = 0; i en = cai.traits.get(i); + if (!(en.getKey() instanceof DirectValueActionItem)) { + continue; + } + DirectValueActionItem dv = (DirectValueActionItem) en.getKey(); + String name = dv.getAsString(); + GraphTargetItem value = en.getValue(); + boolean isStatic = cai.traitsStatic.get(i); + if (value instanceof FunctionActionItem) { + Method m = new Method(isStatic, name, "Unknown" /*FIXME?*/, className); + classTraits.get(className).put(name, m); + } else { + Variable v = new Variable(isStatic, name, name, className); + classTraits.get(className).put(name, v); + } + } + if (cai.extendsOp!=null) { + String parentClassName = String.join(".", getMembersPath(cai.extendsOp)); + classInheritance.get(className).add(parentClassName); + } else { + classInheritance.get(className).add("Object"); + } + if (cai.implementsOp != null) { + for (GraphTargetItem imp: cai.implementsOp) { + String imtName = String.join(".", getMembersPath(imp)); + classInheritance.get(className).add(imtName); + } + } + } + } + classesAsms.add(doi); + } + } + } + + //Complete inheritance tree + for (String className: classInheritance.keySet()) { + for (int i = 0; i < classInheritance.get(className).size(); i++) { + String parentClass = classInheritance.get(className).get(i); + if (classInheritance.containsKey(parentClass)) { + for (String p: classInheritance.get(parentClass)) { + if (!classInheritance.get(className).contains(p)) { + classInheritance.get(className).add(p); + } + } + } + } + } + + + //Detect this.x assigns + for (String key:asms.keySet()) { + ASMSource asm = asms.get(key); + if (asm instanceof DoInitActionTag) { + DoInitActionTag doi = (DoInitActionTag)asm; + String exportName = doi.getSwf().getCharacter(doi.getCharacterId()).getExportName(); + if (exportName != null && exportName.startsWith("__Packages.")) { + List tree = asm.getActionsToTree(); + for (GraphTargetItem item:tree) { + if (item instanceof ClassActionItem) { + ClassActionItem cai = (ClassActionItem) item; + final String className = String.join(".", getMembersPath(cai.className)); + for (int i = 0; i en = cai.traits.get(i); + if (!(en.getKey() instanceof DirectValueActionItem)) { + continue; + } + GraphTargetItem value = en.getValue(); + if (value instanceof GraphTargetItem) { + AbstractGraphTargetVisitor visitor = new AbstractGraphTargetVisitor(){ + @Override + public void visit(GraphTargetItem item) { + List path = getFullPath(item); + if (path != null) { + List parent = new ArrayList<>(path); + parent.remove(parent.size() - 1); + if (parent.size() == 1) { + if (parent.get(0).equals("this")) { + String name = path.get(path.size() - 1); + if (!containsTrait(classTraits, classInheritance, className, name) && (!result.containsKey(className) || !result.get(className).containsKey(name))) { + Variable v = new Variable(false, name, null, className); + if (!result.containsKey(className)) { + result.put(className, new LinkedHashMap<>()); + } + result.get(className).put(name, v); + } + } + } + } + } + }; + visitor.visit(value); + value.visitRecursively(visitor); + } + } + } + } + classesAsms.add(doi); + } + } + } + + //getting static classname.x assigns + for (String key:asms.keySet()) { + ASMSource asm = asms.get(key); + List tree = asm.getActionsToTree(); + for (GraphTargetItem item:tree) { + AbstractGraphTargetVisitor visitor = new AbstractGraphTargetVisitor(){ + @Override + public void visit(GraphTargetItem item) { + if (item instanceof SetMemberActionItem) { + if (item instanceof SetMemberActionItem) { + List path = getFullPath(item); + if (path != null) { + List parent = new ArrayList<>(path); + parent.remove(parent.size() - 1); + String name = path.get(path.size() - 1); + + String className = String.join(".", parent); + if (classInheritance.containsKey(className)) { + //it's a class + if (!containsTrait(classTraits, classInheritance, className, name) && (!result.containsKey(className) || !result.get(className).containsKey(name))) { + Variable v = new Variable(true, name, null, className); + if (!result.containsKey(className)) { + result.put(className, new LinkedHashMap<>()); + } + result.get(className).put(name, v); + } + } + } + } + } + } + }; + visitor.visit(item); + item.visitRecursively(visitor); + } + } + + /*for (String cls:result.keySet()) { + System.err.println("class "+cls); + for(String name:result.get(cls).keySet()) { + System.err.println("- " +result.get(cls).get(name)); + } + }*/ + return result; + } +} diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/as2/Variable.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/as2/Variable.java new file mode 100644 index 000000000..8cfd81fa6 --- /dev/null +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/as2/Variable.java @@ -0,0 +1,64 @@ +/* + * Copyright (C) 2010-2023 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.action.as2; + +/** + * + * @author JPEXS + */ +public class Variable implements Trait { + private final boolean isStatic; + private final String name; + private final String type; + private final String className; + + public Variable(boolean isStatic, String name, String type, String className) { + this.isStatic = isStatic; + this.name = name; + this.type = type; + this.className = className; + } + + @Override + public boolean isStatic() { + return isStatic; + } + + @Override + public String getName() { + return name; + } + @Override + public String getType() { + return type; + } + + @Override + public String toString() { + return (isStatic ? "static " : "") + "var " + name + ": " + getType(); + } + + @Override + public String getCallType() { + return null; + } + + @Override + public String getClassName() { + return className; + } +} diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/as2/as2_classes.txt b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/as2/as2_classes.txt new file mode 100644 index 000000000..d0f9d40df --- /dev/null +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/as2/as2_classes.txt @@ -0,0 +1,1079 @@ +class Accessibility +extends Object +static function isActive Boolean +static function updateProperties Void + +class arguments +extends Object +var callee Object +var caller Object +var length Number + +class Array +extends Object +var length Number +static var CASEINSENSITIVE Number +static var DESCENDING Number +static var NUMERIC Number +static var RETURNINDEXEDARRAY Number +static var UNIQUESORT Number +function concat Array +function join String +function pop Object +function push Number +function reverse Void +function shift Object +function slice Array +function sort Array +function sortOn Array +function splice Array +function toString String +function unshift Number + +class AsBroadcaster +extends Object +var _listeners Array +function addListener Boolean +function broadcastMessage Void +static function initialize Void +function removeListener Boolean + +class Boolean +extends Object +function toString String +function valueOf Boolean + +class Button +extends Object +var _alpha Number +var blendMode Object +var cacheAsBitmap Boolean +var enabled Boolean +var filters Array +var _focusrect Boolean +var _height Number +var menu ContextMenu +var _name String +var _parent MovieClip +var _quality String +var _rotation Number +var scale9Grid flash.geom.Rectangle +var _soundbuftime Number +var tabEnabled Boolean +var tabIndex Number +var _target String +var trackAsMenu Boolean +var _url String +var useHandCursor Boolean +var _visible Boolean +var _width Number +var _x Number +var _xmouse Number +var _xscale Number +var _y Number +var _ymouse Number +var _yscale Number +function getDepth Number + +class Camera +extends Object +var activityLevel Number +var bandwidth Number +var currentFps Number +var fps Number +var height Number +var index Number +var keyFrameInterval Number +var loopback Boolean +var motionLevel Number +var motionTimeOut Number +var muted Boolean +var name String +static var names Array +var quality Number +var width Number +static function get Camera +function setKeyFrameInterval Void +function setLoopback Void +function setMode Void +function setMotionLevel Void +function setQuality Void + +class Color +extends Object + +class ContextMenu +extends Object +var builtInItems Object +var customItems Array +function copy ContextMenu +function hideBuiltInItems Void + +class ContextMenuItem +extends Object +var caption String +var enabled Boolean +var separatorBefore Boolean +var visible Boolean +function copy ContextMenuItem + +class CustomActions +extends Object +static function get String +static function install Boolean +static function list Array +static function uninstall Boolean + +class Date +extends Object +function getDate Number +function getDay Number +function getFullYear Number +function getHours Number +function getMilliseconds Number +function getMinutes Number +function getMonth Number +function getSeconds Number +function getTime Number +function getTimezoneOffset Number +function getUTCDate Number +function getUTCDay Number +function getUTCFullYear Number +function getUTCHours Number +function getUTCMilliseconds Number +function getUTCMinutes Number +function getUTCMonth Number +function getUTCSeconds Number +function getUTCYear Number +function getYear Number +function setDate Number +function setFullYear Number +function setHours Number +function setMilliseconds Number +function setMinutes Number +function setMonth Number +function setSeconds Number +function setTime Number +function setUTCDate Number +function setUTCFullYear Number +function setUTCHours Number +function setUTCMilliseconds Number +function setUTCMinutes Number +function setUTCMonth Number +function setUTCSeconds Number +function setYear Number +function toString String +static function UTC Number +function valueOf Number + +class Error +extends Object +var message String +var name String +function toString String + +class Function +extends Object +function apply Void +function call Object + +class Key +extends Object +static var _listeners Array +static var BACKSPACE Number +static var CAPSLOCK Number +static var CONTROL Number +static var DELETEKEY Number +static var DOWN Number +static var END Number +static var ENTER Number +static var ESCAPE Number +static var HOME Number +static var INSERT Number +static var LEFT Number +static var PGDN Number +static var PGUP Number +static var RIGHT Number +static var SHIFT Number +static var SPACE Number +static var TAB Number +static var UP Number +static function addListener Void +static function getAscii Number +static function getCode Number +static function isAccessible Boolean +static function isDown Boolean +static function isToggled Boolean +static function removeListener Boolean + +class LoadVars +extends Object +var contentType String +var loaded Boolean +function addRequestHeader Void +function decode Void +function getBytesLoaded Number +function getBytesTotal Number +function load Boolean +function send Boolean +function sendAndLoad Boolean +function toString String + +class LocalConnection +extends Object +var isPerUser Boolean +function close Void +function connect Boolean +function domain String +function send Boolean + +class Math +extends Object +static var E Number +static var LN10 Number +static var LN2 Number +static var LOG10E Number +static var LOG2E Number +static var PI Number +static var SQRT1_2 Number +static var SQRT2 Number +static function abs Number +static function acos Number +static function asin Number +static function atan Number +static function atan2 Number +static function ceil Number +static function cos Number +static function exp Number +static function floor Number +static function log Number +static function max Number +static function min Number +static function pow Number +static function random Number +static function round Number +static function sin Number +static function sqrt Number +static function tan Number + +class Microphone +extends Object +var activityLevel Number +var codec String +var encodeQuality Number +var framesPerPacket Number +var gain Number +var index Number +var muted Boolean +var name String +static var names Array +var rate Number +var silenceLevel Number +var silenceTimeOut Number +var useEchoSuppression Boolean +static function get Microphone +function setCodec Void +function setEncodeQuality Void +function setFramesPerPacket Void +function setGain Void +function setRate Void +function setSilenceLevel Void +function setUseEchoSuppression Void + +class Mouse +extends Object +static function addListener Void +static function hide Number +static function removeListener Boolean +static function show Number + +class MovieClip +extends Object +var _alpha Number +var blendMode Object +var cacheAsBitmap Boolean +var _currentframe Number +var _droptarget String +var enabled Boolean +var filters Array +var focusEnabled Boolean +var _focusrect Boolean +var forceSmoothing Boolean +var _framesloaded Number +var _height Number +var hitArea Object +var _lockroot Boolean +var menu ContextMenu +var _name String +var opaqueBackground Number +var _parent MovieClip +var _quality String +var _rotation Number +var scale9Grid flash.geom.Rectangle +var scrollRect Object +var _soundbuftime Number +var tabChildren Boolean +var tabEnabled Boolean +var tabIndex Number +var _target String +var _totalframes Number +var trackAsMenu Boolean +var transform flash.geom.Transform +var _url String +var useHandCursor Boolean +var _visible Boolean +var _width Number +var _x Number +var _xmouse Number +var _xscale Number +var _y Number +var _ymouse Number +var _yscale Number +function attachAudio Void +function attachBitmap Void +function attachMovie MovieClip +function beginBitmapFill Void +function beginFill Void +function beginGradientFill Void +function clear Void +function createEmptyMovieClip MovieClip +function createTextField TextField +function curveTo Void +function duplicateMovieClip MovieClip +function endFill Void +function getBounds Object +function getBytesLoaded Number +function getBytesTotal Number +function getDepth Number +function getInstanceAtDepth MovieClip +function getNextHighestDepth Number +function getRect Object +function getSWFVersion Number +function getTextSnapshot TextSnapshot +function getURL Void +function globalToLocal Void +function gotoAndPlay Void +function gotoAndStop Void +function hitTest Boolean +function lineGradientStyle Void +function lineStyle Void +function lineTo Void +function loadMovie Void +function loadVariables Void +function localToGlobal Void +function moveTo Void +function nextFrame Void +function play Void +function prevFrame Void +function removeMovieClip Void +function setMask Void +function startDrag Void +function stop Void +function stopDrag Void +function swapDepths Void +function unloadMovie Void + +class MovieClipLoader +extends Object +var checkPolicyFile Boolean +function addListener Boolean +function getProgress Object +function loadClip Boolean +function removeListener Boolean +function unloadClip Boolean + +class NetConnection +extends Object +var isConnected Boolean +var protocol String +var uri String +function call Void +function close Void +function connect Boolean + +class NetStream +extends Object +var bufferLength Number +var bufferTime Number +var bytesLoaded Number +var bytesTotal Number +var checkPolicyFile Boolean +var currentFps Number +var liveDelay Number +var maxPauseBufferTime Number +var time Number +function attachAudio Void +function attachVideo Void +function close Void +function getInfo Object +function pause Void +function play Void +function play2 Void +function publish Void +function receiveAudio Void +function receiveVideo Void +function seek Void +function send Void +function setBufferTime Void + +class Number +extends Object +static var MAX_VALUE Number +static var MIN_VALUE Number +static var NaN Number +static var NEGATIVE_INFINITY Number +static var POSITIVE_INFINITY Number +function toString String +function valueOf Number + +class Object +var constructor Object +var __proto__ Object +static var prototype Object +var __resolve Object +function addProperty Boolean +function hasOwnProperty Boolean +function isPropertyEnumerable Boolean +function isPrototypeOf Boolean +static function registerClass Boolean +function toString String +function unwatch Boolean +function valueOf Object +function watch Boolean + +class PrintJob +extends Object +var orientation String +var pageHeight Number +var pageWidth Number +var paperHeight Number +var paperWidth Number +function addPage Boolean +function send Void +function start Boolean + +class Selection +extends Object +static function addListener Void +static function getBeginIndex Number +static function getCaretIndex Number +static function getEndIndex Number +static function getFocus String +static function removeListener Boolean +static function setFocus Boolean +static function setSelection Void + +class SharedObject +extends Object +var data Object +function clear Void +function close Void +function connect Boolean +function flush Object +static function getLocal SharedObject +static function getRemote SharedObject +function getSize Number +function send Void +function setFps Boolean + +class Sound +extends Object +var checkPolicyFile Boolean +var duration Number +var id3 Object +var position Number +function attachSound Void +function getBytesLoaded Number +function getBytesTotal Number +function getPan Number +function getTransform Object +function getVolume Number +function loadSound Void +function setPan Void +function setTransform Void +function setVolume Void +function start Void +function stop Void + +class Stage +extends Object +static var align String +static var displayState String +static var fullScreenHeight Number +static var fullScreenSourceRect flash.geom.Rectangle +static var fullScreenWidth Number +static var height Number +static var scaleMode String +static var showMenu Boolean +static var width Number +static var wmodeGPU Boolean +static function addListener Void +static function removeListener Boolean + +class String +extends Object +var length Number +function charAt String +function charCodeAt Number +function concat String +static function fromCharCode String +function indexOf Number +function lastIndexOf Number +function slice String +function split Array +function substr String +function substring String +function toLowerCase String +function toString String +function toUpperCase String +function valueOf String + +class System +extends Object +static var exactSettings Boolean +static var useCodepage Boolean +static function setClipboard Void +static function showSettings Void + +class TextField +extends Object +var _alpha Number +var antiAliasType String +var autoSize Object +var background Boolean +var backgroundColor Number +var border Boolean +var borderColor Number +var bottomScroll Number +var condenseWhite Boolean +var embedFonts Boolean +var filters Array +var gridFitType String +var _height Number +var hscroll Number +var html Boolean +var htmlText String +var length Number +var maxChars Number +var maxhscroll Number +var maxscroll Number +var menu ContextMenu +var mouseWheelEnabled Boolean +var multiline Boolean +var _name String +var _parent MovieClip +var password Boolean +var _quality String +var restrict String +var _rotation Number +var scroll Number +var selectable Boolean +var sharpness Number +var _soundbuftime Number +var styleSheet TextField.StyleSheet +var tabEnabled Boolean +var tabIndex Number +var _target String +var text String +var textColor Number +var textHeight Number +var textWidth Number +var thickness Number +var type String +var _url String +var variable String +var _visible Boolean +var _width Number +var wordWrap Boolean +var _x Number +var _xmouse Number +var _xscale Number +var _y Number +var _ymouse Number +var _yscale Number +function addListener Boolean +function getDepth Number +static function getFontList Array +function getNewTextFormat TextFormat +function getTextFormat TextFormat +function removeListener Boolean +function removeTextField Void +function replaceSel Void +function replaceText Void +function setNewTextFormat Void +function setTextFormat Void + +class TextFormat +extends Object +var align String +var blockIndent Number +var bold Boolean +var bullet Boolean +var color Number +var font String +var indent Number +var italic Boolean +var kerning Boolean +var leading Number +var leftMargin Number +var letterSpacing Number +var rightMargin Number +var size Number +var tabStops Array +var target String +var underline Boolean +var url String +function getTextExtent Object + +class TextSnapshot +extends Object +function findText Number +function getCount Number +function getSelected Boolean +function getSelectedText String +function getText String +function getTextRunInfo Array +function hitTestTextNearPos Number +function setSelectColor Void +function setSelected Void + +class Video +extends Object +var _alpha Number +var deblocking Number +var _height Number +var height Number +var _name String +var _parent MovieClip +var _rotation Number +var smoothing Boolean +var _visible Boolean +var _width Number +var width Number +var _x Number +var _xmouse Number +var _xscale Number +var _y Number +var _ymouse Number +var _yscale Number +function attachVideo Void +function clear Void + +class XML +extends XMLNode +extends Object +var contentType String +var docTypeDecl String +var idMap Object +var ignoreWhite Boolean +var loaded Boolean +var status Number +var xmlDecl String +function addRequestHeader Void +function createElement XMLNode +function createTextNode XMLNode +function getBytesLoaded Number +function getBytesTotal Number +function load Boolean +function parseXML Void +function send Boolean +function sendAndLoad Void + +class XMLNode +extends Object +var attributes Object +var childNodes Array +var firstChild XMLNode +var lastChild XMLNode +var localName String +var namespaceURI String +var nextSibling XMLNode +var nodeName String +var nodeType Number +var nodeValue String +var parentNode XMLNode +var prefix String +var previousSibling XMLNode +function appendChild Void +function cloneNode XMLNode +function getNamespaceForPrefix String +function getPrefixForNamespace String +function hasChildNodes Boolean +function insertBefore Void +function removeNode Void +function toString String + +class XMLSocket +extends Object +var timeout Number +function close Void +function connect Boolean +function send Void + +class XMLUI +extends Object +static function accept Void +static function cancel Void +static function get String +static function set Void + +class flash.display.BitmapData +extends Object +var height Number +var rectangle flash.geom.Rectangle +var transparent Boolean +var width Number +function applyFilter Number +function clone flash.display.BitmapData +function colorTransform Void +function compare Object +function copyChannel Void +function copyPixels Void +function dispose Void +function draw Void +function fillRect Void +function floodFill Void +function generateFilterRect flash.geom.Rectangle +function getColorBoundsRect flash.geom.Rectangle +function getPixel Number +function getPixel32 Number +function hitTest Boolean +static function loadBitmap flash.display.BitmapData +function merge Void +function noise Void +function paletteMap Void +function perlinNoise Void +function pixelDissolve Number +function scroll Void +function setPixel Void +function setPixel32 Void +function threshold Number + +class flash.external.ExternalInterface +extends Object +static var available Boolean +static function addCallback Boolean +static function call Object + +class flash.filters.BevelFilter +extends flash.filters.BitmapFilter +extends Object +var angle Number +var blurX Number +var blurY Number +var distance Number +var highlightAlpha Number +var highlightColor Number +var knockout Boolean +var quality Number +var shadowAlpha Number +var shadowColor Number +var strength Number +var type String +function clone flash.filters.BevelFilter + +class flash.filters.BitmapFilter +extends Object +function clone flash.filters.BitmapFilter + +class flash.filters.BlurFilter +extends flash.filters.BitmapFilter +extends Object +var blurX Number +var blurY Number +var quality Number +function clone flash.filters.BlurFilter + +class flash.filters.ColorMatrixFilter +extends flash.filters.BitmapFilter +extends Object +var matrix Array +function clone flash.filters.ColorMatrixFilter + +class flash.filters.ConvolutionFilter +extends flash.filters.BitmapFilter +extends Object +var alpha Number +var bias Number +var clamp Boolean +var color Number +var divisor Number +var matrix Array +var matrixX Number +var matrixY Number +var preserveAlpha Boolean +function clone flash.filters.ConvolutionFilter + +class flash.filters.DisplacementMapFilter +extends flash.filters.BitmapFilter +extends Object +var alpha Number +var color Number +var componentX Number +var componentY Number +var mapBitmap flash.display.BitmapData +var mapPoint flash.geom.Point +var mode String +var scaleX Number +var scaleY Number +function clone flash.filters.DisplacementMapFilter + +class flash.filters.DropShadowFilter +extends flash.filters.BitmapFilter +extends Object +var alpha Number +var angle Number +var blurX Number +var blurY Number +var color Number +var distance Number +var hideObject Boolean +var inner Boolean +var knockout Boolean +var quality Number +var strength Number +function clone flash.filters.DropShadowFilter + +class flash.filters.GlowFilter +extends flash.filters.BitmapFilter +extends Object +var alpha Number +var blurX Number +var blurY Number +var color Number +var inner Boolean +var knockout Boolean +var quality Number +var strength Number +function clone flash.filters.GlowFilter + +class flash.filters.GradientBevelFilter +extends flash.filters.BitmapFilter +extends Object +var alphas Array +var angle Number +var blurX Number +var blurY Number +var colors Array +var distance Number +var knockout Boolean +var quality Number +var ratios Array +var strength Number +var type String +function clone flash.filters.GradientBevelFilter + +class flash.filters.GradientGlowFilter +extends flash.filters.BitmapFilter +extends Object +var alphas Array +var angle Number +var blurX Number +var blurY Number +var colors Array +var distance Number +var knockout Boolean +var quality Number +var ratios Array +var strength Number +var type String +function clone flash.filters.GradientGlowFilter + +class flash.geom.ColorTransform +extends Object +var alphaMultiplier Number +var alphaOffset Number +var blueMultiplier Number +var blueOffset Number +var greenMultiplier Number +var greenOffset Number +var redMultiplier Number +var redOffset Number +var rgb Number +function concat Void +function toString String + +class flash.geom.Matrix +extends Object +var a Number +var b Number +var c Number +var d Number +var tx Number +var ty Number +function clone flash.geom.Matrix +function concat Void +function createBox Void +function createGradientBox Void +function deltaTransformPoint flash.geom.Point +function identity Void +function invert Void +function rotate Void +function scale Void +function toString String +function transformPoint flash.geom.Point +function translate Void + +class flash.geom.Point +extends Object +var length Number +var x Number +var y Number +function add flash.geom.Point +function clone flash.geom.Point +static function distance Number +function equals Boolean +static function interpolate flash.geom.Point +function normalize Void +function offset Void +static function polar flash.geom.Point +function subtract flash.geom.Point +function toString String + +class flash.geom.Rectangle +extends Object +var bottom Number +var bottomRight flash.geom.Point +var height Number +var left Number +var right Number +var size flash.geom.Point +var top Number +var topLeft flash.geom.Point +var width Number +var x Number +var y Number +function clone flash.geom.Rectangle +function contains Boolean +function containsPoint Boolean +function containsRectangle Boolean +function equals Boolean +function inflate Void +function inflatePoint Void +function intersection flash.geom.Rectangle +function intersects Boolean +function isEmpty Boolean +function offset Void +function offsetPoint Void +function setEmpty Void +function toString String +function union flash.geom.Rectangle + +class flash.geom.Transform +extends Object +var colorTransform flash.geom.ColorTransform +var concatenatedColorTransform flash.geom.ColorTransform +var concatenatedMatrix flash.geom.Matrix +var matrix flash.geom.Matrix +var pixelBounds flash.geom.Rectangle + +class flash.net.FileReference +extends Object +var creationDate Date +var creator String +var modificationDate Date +var name String +var postData String +var size Number +var type String +function addListener Void +function browse Boolean +function cancel Void +function download Boolean +function removeListener Boolean +function upload Boolean + +class flash.net.FileReferenceList +extends Object +var fileList Array +function addListener Void +function browse Boolean +function removeListener Boolean + +class flash.text.TextRenderer +extends Object +static var displayMode String +static var maxLevel Number +static function setAdvancedAntialiasingTable Void + +class mx.lang.Locale +extends Object +static var autoReplace Boolean +static var languageCodeArray Array +static var stringIDArray Array +static function addDelayedInstance Void +static function addXMLPath Void +static function checkXMLStatus Boolean +static function getDefaultLang String +static function initialize Void +static function loadLanguageXML Void +static function loadString String +static function loadStringEx String +static function setDefaultLang Void +static function setLoadCallback Void +static function setString Void + +class System.capabilities +extends Object +static var avHardwareDisable Boolean +static var hasAccessibility Boolean +static var hasAudio Boolean +static var hasAudioEncoder Boolean +static var hasEmbeddedVideo Boolean +static var hasIME Boolean +static var hasMP3 Boolean +static var hasPrinting Boolean +static var hasScreenBroadcast Boolean +static var hasScreenPlayback Boolean +static var hasStreamingAudio Boolean +static var hasStreamingVideo Boolean +static var hasVideoEncoder Boolean +static var isDebugger Boolean +static var language String +static var localFileReadDisable Boolean +static var manufacturer String +static var os String +static var pixelAspectRatio Number +static var playerType String +static var screenColor String +static var screenDPI Number +static var screenResolutionX Number +static var screenResolutionY Number +static var serverString String +static var version String + +class System.IME +extends Object +static var ALPHANUMERIC_FULL String +static var ALPHANUMERIC_HALF String +static var CHINESE String +static var JAPANESE_HIRAGANA String +static var JAPANESE_KATAKANA_FULL String +static var JAPANESE_KATAKANA_HALF String +static var KOREAN String +static var UNKNOWN String +static function addListener Void +static function doConversion Boolean +static function getConversionMode String +static function getEnabled Boolean +static function removeListener Boolean +static function setCompositionString Boolean +static function setConversionMode Boolean +static function setEnabled Boolean + +class System.security +extends Object +static var sandboxType String +static function allowDomain Void +static function allowInsecureDomain Void +static function loadPolicyFile Void + +class TextField.StyleSheet +extends Object +function clear Void +function getStyle Object +function getStyleNames Array +function load Boolean +function parseCSS Boolean +function setStyle Void +function transform TextFormat diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/flashlite/ActionFSCommand2.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/flashlite/ActionFSCommand2.java index d77afd402..e3978a447 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/flashlite/ActionFSCommand2.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/flashlite/ActionFSCommand2.java @@ -27,6 +27,8 @@ import com.jpexs.decompiler.graph.TranslateStack; import java.util.ArrayList; import java.util.HashMap; import java.util.List; +import com.jpexs.decompiler.flash.action.as2.Trait; +import java.util.Map; /** * @@ -44,7 +46,7 @@ public class ActionFSCommand2 extends Action { } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartItem, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartItem, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { long numArgs = popLong(stack); GraphTargetItem command = stack.pop(); List args = new ArrayList<>(); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/flashlite/ActionStrictMode.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/flashlite/ActionStrictMode.java index b1a8c3d45..649b008e6 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/flashlite/ActionStrictMode.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/flashlite/ActionStrictMode.java @@ -20,6 +20,7 @@ import com.jpexs.decompiler.flash.SWFInputStream; import com.jpexs.decompiler.flash.SWFOutputStream; import com.jpexs.decompiler.flash.action.Action; import com.jpexs.decompiler.flash.action.LocalDataArea; +import com.jpexs.decompiler.flash.action.as2.Trait; import com.jpexs.decompiler.flash.action.model.StrictModeActionItem; import com.jpexs.decompiler.flash.action.parser.ActionParseException; import com.jpexs.decompiler.flash.action.parser.pcode.FlasmLexer; @@ -30,6 +31,7 @@ import com.jpexs.decompiler.graph.TranslateStack; import java.io.IOException; import java.util.HashMap; import java.util.List; +import java.util.Map; /** * @@ -75,7 +77,7 @@ public class ActionStrictMode extends Action { } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartItem, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartItem, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { output.add(new StrictModeActionItem(this, lineStartItem, mode)); } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/clauses/ClassActionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/clauses/ClassActionItem.java index d11637999..c87b1de9a 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/clauses/ClassActionItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/clauses/ClassActionItem.java @@ -221,8 +221,10 @@ public class ClassActionItem extends ActionItem implements Block { } else { writer.append("var "); writer.append(IdentifiersDeobfuscation.printIdentifier(false, item.getKey().toStringNoQuotes(localData))); - writer.append(" = "); - item.getValue().toString(writer, localData); + if (item.getValue() != null) { + writer.append(" = "); + item.getValue().toString(writer, localData); + } writer.append(";").newLine(); } } @@ -262,4 +264,16 @@ public class ClassActionItem extends ActionItem implements Block { public boolean hasReturnValue() { return false; } + + @Override + public void visit(GraphTargetVisitorInterface visitor) { + for (MyEntry en: traits) { + GraphTargetItem value = en.getValue(); + if (value != null) { + visitor.visit(value); + } + } + } + + } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/special/ActionEnd.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/special/ActionEnd.java index aeba7e562..83c410248 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/special/ActionEnd.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/special/ActionEnd.java @@ -18,6 +18,7 @@ package com.jpexs.decompiler.flash.action.special; import com.jpexs.decompiler.flash.action.Action; import com.jpexs.decompiler.flash.action.LocalDataArea; +import com.jpexs.decompiler.flash.action.as2.Trait; import com.jpexs.decompiler.flash.ecma.Undefined; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; @@ -25,6 +26,7 @@ import com.jpexs.decompiler.graph.SecondPassData; import com.jpexs.decompiler.graph.TranslateStack; import java.util.HashMap; import java.util.List; +import java.util.Map; /** * @@ -54,7 +56,7 @@ public class ActionEnd extends Action { } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartItem, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartItem, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { //output.add(new SimpleActionTreeItem(this, "end()")); } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/special/ActionNop.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/special/ActionNop.java index 3be62ef69..09fe7225d 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/special/ActionNop.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/special/ActionNop.java @@ -18,12 +18,14 @@ package com.jpexs.decompiler.flash.action.special; import com.jpexs.decompiler.flash.action.Action; import com.jpexs.decompiler.flash.action.LocalDataArea; +import com.jpexs.decompiler.flash.action.as2.Trait; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.SecondPassData; import com.jpexs.decompiler.graph.TranslateStack; import java.util.HashMap; import java.util.List; +import java.util.Map; /** * @@ -50,7 +52,7 @@ public class ActionNop extends Action { } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartItem, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartItem, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { //output.add(new SimpleActionTreeItem(this, "nop();")); } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/special/ActionUnknown.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/special/ActionUnknown.java index a77d0aca1..b18a6aecb 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/special/ActionUnknown.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/special/ActionUnknown.java @@ -17,6 +17,7 @@ package com.jpexs.decompiler.flash.action.special; import com.jpexs.decompiler.flash.action.LocalDataArea; +import com.jpexs.decompiler.flash.action.as2.Trait; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.SecondPassData; @@ -24,6 +25,7 @@ import com.jpexs.decompiler.graph.TranslateStack; import com.jpexs.helpers.Helper; import java.util.HashMap; import java.util.List; +import java.util.Map; /** * @@ -47,6 +49,6 @@ public class ActionUnknown extends ActionNop { } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartItem, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartItem, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf3/ActionGetURL.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf3/ActionGetURL.java index db7fa5faa..dae6a4c80 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf3/ActionGetURL.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf3/ActionGetURL.java @@ -20,6 +20,7 @@ import com.jpexs.decompiler.flash.SWFInputStream; import com.jpexs.decompiler.flash.SWFOutputStream; import com.jpexs.decompiler.flash.action.Action; import com.jpexs.decompiler.flash.action.LocalDataArea; +import com.jpexs.decompiler.flash.action.as2.Trait; import com.jpexs.decompiler.flash.action.model.DirectValueActionItem; import com.jpexs.decompiler.flash.action.model.FSCommandActionItem; import com.jpexs.decompiler.flash.action.model.GetURLActionItem; @@ -39,6 +40,7 @@ import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; +import java.util.Map; /** * @@ -99,7 +101,7 @@ public class ActionGetURL extends Action { } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { String fsCommandPrefix = "FSCommand:"; if (urlString.startsWith(fsCommandPrefix) && targetString.isEmpty()) { String command = urlString.substring(fsCommandPrefix.length()); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf3/ActionGoToLabel.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf3/ActionGoToLabel.java index b20ac569e..0b91c5995 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf3/ActionGoToLabel.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf3/ActionGoToLabel.java @@ -34,6 +34,8 @@ import com.jpexs.helpers.utf8.Utf8Helper; import java.io.IOException; import java.util.HashMap; import java.util.List; +import com.jpexs.decompiler.flash.action.as2.Trait; +import java.util.Map; /** * @@ -88,7 +90,7 @@ public class ActionGoToLabel extends Action { } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { output.add(new GotoLabelActionItem(this, lineStartAction, label)); } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf3/ActionGotoFrame.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf3/ActionGotoFrame.java index 232adbd35..3fbd534e1 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf3/ActionGotoFrame.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf3/ActionGotoFrame.java @@ -32,6 +32,8 @@ import com.jpexs.decompiler.graph.TranslateStack; import java.io.IOException; import java.util.HashMap; import java.util.List; +import com.jpexs.decompiler.flash.action.as2.Trait; +import java.util.Map; /** * @@ -84,7 +86,7 @@ public class ActionGotoFrame extends Action { } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { output.add(new GotoFrameActionItem(this, lineStartAction, frame)); } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf3/ActionNextFrame.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf3/ActionNextFrame.java index 947036b0e..131451eb4 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf3/ActionNextFrame.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf3/ActionNextFrame.java @@ -28,6 +28,8 @@ import com.jpexs.decompiler.graph.TranslateStack; import com.jpexs.helpers.utf8.Utf8Helper; import java.util.HashMap; import java.util.List; +import com.jpexs.decompiler.flash.action.as2.Trait; +import java.util.Map; /** * @@ -56,7 +58,7 @@ public class ActionNextFrame extends Action { } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { output.add(new NextFrameActionItem(this, lineStartAction)); } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf3/ActionPlay.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf3/ActionPlay.java index 1c6e8444e..4e00c3367 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf3/ActionPlay.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf3/ActionPlay.java @@ -31,6 +31,8 @@ import com.jpexs.decompiler.graph.TranslateStack; import com.jpexs.helpers.utf8.Utf8Helper; import java.util.HashMap; import java.util.List; +import com.jpexs.decompiler.flash.action.as2.Trait; +import java.util.Map; /** * @@ -55,7 +57,7 @@ public class ActionPlay extends Action { } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { if (!output.isEmpty() && (output.get(output.size() - 1) instanceof GotoFrameActionItem)) { GotoFrameActionItem gta = (GotoFrameActionItem) output.remove(output.size() - 1); output.add(new GotoFrame2ActionItem(this, lineStartAction, new DirectValueActionItem(gta.frame + 1), false, true, 0)); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf3/ActionPrevFrame.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf3/ActionPrevFrame.java index 422fa24ae..3121f98e7 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf3/ActionPrevFrame.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf3/ActionPrevFrame.java @@ -28,6 +28,8 @@ import com.jpexs.decompiler.graph.TranslateStack; import com.jpexs.helpers.utf8.Utf8Helper; import java.util.HashMap; import java.util.List; +import com.jpexs.decompiler.flash.action.as2.Trait; +import java.util.Map; /** * @@ -56,7 +58,7 @@ public class ActionPrevFrame extends Action { } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { output.add(new PrevFrameActionItem(this, lineStartAction)); } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf3/ActionSetTarget.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf3/ActionSetTarget.java index ec6f38218..216ac4f3e 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf3/ActionSetTarget.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf3/ActionSetTarget.java @@ -33,6 +33,8 @@ import com.jpexs.helpers.utf8.Utf8Helper; import java.io.IOException; import java.util.HashMap; import java.util.List; +import com.jpexs.decompiler.flash.action.as2.Trait; +import java.util.Map; /** * @@ -92,7 +94,7 @@ public class ActionSetTarget extends Action { } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { output.add(new SetTargetActionItem(this, lineStartAction, targetName)); } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf3/ActionStop.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf3/ActionStop.java index 538e1c5f8..4c813a1fb 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf3/ActionStop.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf3/ActionStop.java @@ -28,6 +28,8 @@ import com.jpexs.decompiler.graph.TranslateStack; import com.jpexs.helpers.utf8.Utf8Helper; import java.util.HashMap; import java.util.List; +import com.jpexs.decompiler.flash.action.as2.Trait; +import java.util.Map; /** * @@ -52,7 +54,7 @@ public class ActionStop extends Action { } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { output.add(new StopActionItem(this, lineStartAction)); } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf3/ActionStopSounds.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf3/ActionStopSounds.java index 57be60c18..7e9a2ab4d 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf3/ActionStopSounds.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf3/ActionStopSounds.java @@ -27,6 +27,8 @@ import com.jpexs.decompiler.graph.TranslateStack; import com.jpexs.helpers.utf8.Utf8Helper; import java.util.HashMap; import java.util.List; +import com.jpexs.decompiler.flash.action.as2.Trait; +import java.util.Map; /** * @@ -51,7 +53,7 @@ public class ActionStopSounds extends Action { } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { output.add(new StopAllSoundsActionItem(this, lineStartAction)); } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf3/ActionToggleQuality.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf3/ActionToggleQuality.java index feb9885b1..f84410868 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf3/ActionToggleQuality.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf3/ActionToggleQuality.java @@ -27,6 +27,8 @@ import com.jpexs.decompiler.graph.TranslateStack; import com.jpexs.helpers.utf8.Utf8Helper; import java.util.HashMap; import java.util.List; +import com.jpexs.decompiler.flash.action.as2.Trait; +import java.util.Map; /** * @@ -51,7 +53,7 @@ public class ActionToggleQuality extends Action { } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { output.add(new ToggleHighQualityActionItem(this, lineStartAction)); } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf3/ActionWaitForFrame.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf3/ActionWaitForFrame.java index c3beca226..cd71a4951 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf3/ActionWaitForFrame.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf3/ActionWaitForFrame.java @@ -41,6 +41,8 @@ import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Set; +import com.jpexs.decompiler.flash.action.as2.Trait; +import java.util.Map; /** * @@ -103,20 +105,20 @@ public class ActionWaitForFrame extends Action implements ActionStore { } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) throws InterruptedException { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) throws InterruptedException { GraphTargetItem frameTi = new DirectValueActionItem(null, null, 0, (Long) ((long) frame), new ArrayList<>()); List body; HashMap variablesBackup = new LinkedHashMap<>(variables); HashMap functionsBackup = new LinkedHashMap<>(functions); try { - body = ActionGraph.translateViaGraph(null, insideDoInitAction, true, regNames, variables, functions, skipped, SWF.DEFAULT_VERSION, staticOperation, path, getCharset()); + body = ActionGraph.translateViaGraph(uninitializedClassTraits, null, insideDoInitAction, true, regNames, variables, functions, skipped, SWF.DEFAULT_VERSION, staticOperation, path, getCharset()); } catch (SecondPassException spe) { variables.clear(); variables.putAll(variablesBackup); functions.clear(); functions.putAll(functionsBackup); - body = ActionGraph.translateViaGraph(spe.getData(), insideDoInitAction, true, regNames, variables, functions, skipped, SWF.DEFAULT_VERSION, staticOperation, path, getCharset()); + body = ActionGraph.translateViaGraph(uninitializedClassTraits, spe.getData(), insideDoInitAction, true, regNames, variables, functions, skipped, SWF.DEFAULT_VERSION, staticOperation, path, getCharset()); } output.add(new IfFrameLoadedActionItem(frameTi, body, this, lineStartAction)); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionAdd.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionAdd.java index f478c43b5..b83692296 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionAdd.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionAdd.java @@ -28,6 +28,8 @@ import com.jpexs.decompiler.graph.TranslateStack; import com.jpexs.helpers.utf8.Utf8Helper; import java.util.HashMap; import java.util.List; +import com.jpexs.decompiler.flash.action.as2.Trait; +import java.util.Map; /** * @@ -56,7 +58,7 @@ public class ActionAdd extends Action { } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { GraphTargetItem a = stack.pop(); GraphTargetItem b = stack.pop(); stack.push(new AddActionItem(this, lineStartAction, b, a, false)); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionAnd.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionAnd.java index 01a873bb3..06e116074 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionAnd.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionAnd.java @@ -28,6 +28,8 @@ import com.jpexs.decompiler.graph.TranslateStack; import com.jpexs.helpers.utf8.Utf8Helper; import java.util.HashMap; import java.util.List; +import com.jpexs.decompiler.flash.action.as2.Trait; +import java.util.Map; /** * @@ -56,7 +58,7 @@ public class ActionAnd extends Action { } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { GraphTargetItem a = stack.pop(); GraphTargetItem b = stack.pop(); stack.push(new AndActionItem(this, lineStartAction, b, a)); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionAsciiToChar.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionAsciiToChar.java index b0e511494..46194ed7f 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionAsciiToChar.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionAsciiToChar.java @@ -28,6 +28,8 @@ import com.jpexs.decompiler.graph.TranslateStack; import com.jpexs.helpers.utf8.Utf8Helper; import java.util.HashMap; import java.util.List; +import com.jpexs.decompiler.flash.action.as2.Trait; +import java.util.Map; /** * @@ -56,7 +58,7 @@ public class ActionAsciiToChar extends Action { } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { GraphTargetItem a = stack.pop(); stack.push(new AsciiToCharActionItem(this, lineStartAction, a)); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionCall.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionCall.java index 4fbafac27..925852e5d 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionCall.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionCall.java @@ -29,6 +29,8 @@ import com.jpexs.decompiler.graph.TranslateStack; import com.jpexs.helpers.utf8.Utf8Helper; import java.util.HashMap; import java.util.List; +import com.jpexs.decompiler.flash.action.as2.Trait; +import java.util.Map; /** * @@ -61,7 +63,7 @@ public class ActionCall extends Action { } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { output.add(new CallActionItem(this, lineStartAction, stack.pop())); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionCharToAscii.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionCharToAscii.java index 626f9fd73..feac5553a 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionCharToAscii.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionCharToAscii.java @@ -28,6 +28,8 @@ import com.jpexs.decompiler.graph.TranslateStack; import com.jpexs.helpers.utf8.Utf8Helper; import java.util.HashMap; import java.util.List; +import com.jpexs.decompiler.flash.action.as2.Trait; +import java.util.Map; /** * @@ -56,7 +58,7 @@ public class ActionCharToAscii extends Action { } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { GraphTargetItem a = stack.pop(); stack.push(new CharToAsciiActionItem(this, lineStartAction, a)); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionCloneSprite.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionCloneSprite.java index 6ce5a1268..a3acdf9f7 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionCloneSprite.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionCloneSprite.java @@ -31,6 +31,8 @@ import com.jpexs.decompiler.graph.TranslateStack; import com.jpexs.helpers.utf8.Utf8Helper; import java.util.HashMap; import java.util.List; +import com.jpexs.decompiler.flash.action.as2.Trait; +import java.util.Map; /** * @@ -66,7 +68,7 @@ public class ActionCloneSprite extends Action { } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { GraphTargetItem depth = stack.pop(); GraphTargetItem source = stack.pop(); GraphTargetItem target = stack.pop(); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionDivide.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionDivide.java index 5b72fe48e..8a3364372 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionDivide.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionDivide.java @@ -28,6 +28,8 @@ import com.jpexs.decompiler.graph.TranslateStack; import com.jpexs.helpers.utf8.Utf8Helper; import java.util.HashMap; import java.util.List; +import com.jpexs.decompiler.flash.action.as2.Trait; +import java.util.Map; /** * @@ -56,7 +58,7 @@ public class ActionDivide extends Action { } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { GraphTargetItem a = stack.pop(); GraphTargetItem b = stack.pop(); stack.push(new DivideActionItem(this, lineStartAction, b, a)); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionEndDrag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionEndDrag.java index 797e118b4..182c5df67 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionEndDrag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionEndDrag.java @@ -28,6 +28,8 @@ import com.jpexs.decompiler.graph.TranslateStack; import com.jpexs.helpers.utf8.Utf8Helper; import java.util.HashMap; import java.util.List; +import com.jpexs.decompiler.flash.action.as2.Trait; +import java.util.Map; /** * @@ -55,7 +57,7 @@ public class ActionEndDrag extends Action { } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { output.add(new StopDragActionItem(this, lineStartAction)); } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionEquals.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionEquals.java index 2bbe715b0..4ecb2ab0a 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionEquals.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionEquals.java @@ -27,6 +27,8 @@ import com.jpexs.decompiler.graph.SecondPassData; import com.jpexs.decompiler.graph.TranslateStack; import java.util.HashMap; import java.util.List; +import com.jpexs.decompiler.flash.action.as2.Trait; +import java.util.Map; /** * @@ -55,7 +57,7 @@ public class ActionEquals extends Action { } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { GraphTargetItem a = stack.pop(); GraphTargetItem b = stack.pop(); stack.push(new EqActionItem(this, lineStartAction, b, a, false)); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionGetProperty.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionGetProperty.java index 65b1eee65..bc03db075 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionGetProperty.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionGetProperty.java @@ -34,6 +34,8 @@ import java.util.HashMap; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; +import com.jpexs.decompiler.flash.action.as2.Trait; +import java.util.Map; /** * @@ -69,7 +71,7 @@ public class ActionGetProperty extends Action { } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { GraphTargetItem index = stack.pop(); GraphTargetItem target = stack.pop(); int indexInt = 0; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionGetTime.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionGetTime.java index d49cb47e9..1bcf8ac9f 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionGetTime.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionGetTime.java @@ -28,6 +28,8 @@ import com.jpexs.decompiler.graph.TranslateStack; import com.jpexs.helpers.utf8.Utf8Helper; import java.util.HashMap; import java.util.List; +import com.jpexs.decompiler.flash.action.as2.Trait; +import java.util.Map; /** * @@ -52,7 +54,7 @@ public class ActionGetTime extends Action { } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { stack.push(new GetTimeActionItem(this, lineStartAction)); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionGetURL2.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionGetURL2.java index b863e2390..f225b8e7e 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionGetURL2.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionGetURL2.java @@ -46,6 +46,8 @@ import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; +import com.jpexs.decompiler.flash.action.as2.Trait; +import java.util.Map; /** * @@ -126,7 +128,7 @@ public class ActionGetURL2 extends Action { } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { GraphTargetItem targetString = stack.pop(); GraphTargetItem urlString = stack.pop(); Integer num = null; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionGetVariable.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionGetVariable.java index aea1b1e7b..0fb6fe43f 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionGetVariable.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionGetVariable.java @@ -34,6 +34,8 @@ import com.jpexs.decompiler.graph.model.LocalData; import com.jpexs.helpers.utf8.Utf8Helper; import java.util.HashMap; import java.util.List; +import com.jpexs.decompiler.flash.action.as2.Trait; +import java.util.Map; /** * @@ -67,7 +69,7 @@ public class ActionGetVariable extends Action { } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { GraphTargetItem name = stack.pop(); String nameStr; if (name instanceof DirectValueActionItem) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionGotoFrame2.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionGotoFrame2.java index 8f943fcff..439bc4fbd 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionGotoFrame2.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionGotoFrame2.java @@ -35,6 +35,8 @@ import com.jpexs.decompiler.graph.TranslateStack; import java.io.IOException; import java.util.HashMap; import java.util.List; +import com.jpexs.decompiler.flash.action.as2.Trait; +import java.util.Map; /** * @@ -145,7 +147,7 @@ public class ActionGotoFrame2 extends Action { } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { GraphTargetItem frame = stack.pop(); output.add(new GotoFrame2ActionItem(this, lineStartAction, frame, sceneBiasFlag, playFlag, sceneBias)); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionLess.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionLess.java index 046939d55..736cdfded 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionLess.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionLess.java @@ -28,6 +28,8 @@ import com.jpexs.decompiler.graph.TranslateStack; import com.jpexs.helpers.utf8.Utf8Helper; import java.util.HashMap; import java.util.List; +import com.jpexs.decompiler.flash.action.as2.Trait; +import java.util.Map; /** * @@ -56,7 +58,7 @@ public class ActionLess extends Action { } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { GraphTargetItem a = stack.pop(); GraphTargetItem b = stack.pop(); stack.push(new LtActionItem(this, lineStartAction, b, a, false)); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionMBAsciiToChar.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionMBAsciiToChar.java index a48ae7a4b..9def7aa89 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionMBAsciiToChar.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionMBAsciiToChar.java @@ -28,6 +28,8 @@ import com.jpexs.decompiler.graph.TranslateStack; import com.jpexs.helpers.utf8.Utf8Helper; import java.util.HashMap; import java.util.List; +import com.jpexs.decompiler.flash.action.as2.Trait; +import java.util.Map; /** * @@ -56,7 +58,7 @@ public class ActionMBAsciiToChar extends Action { } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { GraphTargetItem a = stack.pop(); stack.push(new MBAsciiToCharActionItem(this, lineStartAction, a)); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionMBCharToAscii.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionMBCharToAscii.java index 45b76af59..cf11ed0df 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionMBCharToAscii.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionMBCharToAscii.java @@ -28,6 +28,8 @@ import com.jpexs.decompiler.graph.TranslateStack; import com.jpexs.helpers.utf8.Utf8Helper; import java.util.HashMap; import java.util.List; +import com.jpexs.decompiler.flash.action.as2.Trait; +import java.util.Map; /** * @@ -56,7 +58,7 @@ public class ActionMBCharToAscii extends Action { } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { GraphTargetItem a = stack.pop(); stack.push(new MBCharToAsciiActionItem(this, lineStartAction, a)); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionMBStringExtract.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionMBStringExtract.java index f22e42409..87ebfd209 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionMBStringExtract.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionMBStringExtract.java @@ -28,6 +28,8 @@ import com.jpexs.decompiler.graph.TranslateStack; import com.jpexs.helpers.utf8.Utf8Helper; import java.util.HashMap; import java.util.List; +import com.jpexs.decompiler.flash.action.as2.Trait; +import java.util.Map; /** * @@ -56,7 +58,7 @@ public class ActionMBStringExtract extends Action { } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { GraphTargetItem count = stack.pop(); GraphTargetItem index = stack.pop(); GraphTargetItem value = stack.pop(); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionMBStringLength.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionMBStringLength.java index 38f14ce02..3c8c4f37a 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionMBStringLength.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionMBStringLength.java @@ -28,6 +28,8 @@ import com.jpexs.decompiler.graph.TranslateStack; import com.jpexs.helpers.utf8.Utf8Helper; import java.util.HashMap; import java.util.List; +import com.jpexs.decompiler.flash.action.as2.Trait; +import java.util.Map; /** * @@ -56,7 +58,7 @@ public class ActionMBStringLength extends Action { } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { GraphTargetItem a = stack.pop(); stack.push(new MBStringLengthActionItem(this, lineStartAction, a)); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionMultiply.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionMultiply.java index 3762758c7..6e3907002 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionMultiply.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionMultiply.java @@ -28,6 +28,8 @@ import com.jpexs.decompiler.graph.TranslateStack; import com.jpexs.helpers.utf8.Utf8Helper; import java.util.HashMap; import java.util.List; +import com.jpexs.decompiler.flash.action.as2.Trait; +import java.util.Map; /** * @@ -56,7 +58,7 @@ public class ActionMultiply extends Action { } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { GraphTargetItem a = stack.pop(); GraphTargetItem b = stack.pop(); stack.push(new MultiplyActionItem(this, lineStartAction, b, a)); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionNot.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionNot.java index 1c3d7d802..925d48399 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionNot.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionNot.java @@ -28,6 +28,8 @@ import com.jpexs.decompiler.graph.model.NotItem; import com.jpexs.helpers.utf8.Utf8Helper; import java.util.HashMap; import java.util.List; +import com.jpexs.decompiler.flash.action.as2.Trait; +import java.util.Map; /** * @@ -56,7 +58,7 @@ public class ActionNot extends Action { } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { GraphTargetItem a = stack.pop(); stack.push(a.invert(this)); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionOr.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionOr.java index 192eb4d5d..e4c9d0003 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionOr.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionOr.java @@ -28,6 +28,8 @@ import com.jpexs.decompiler.graph.TranslateStack; import com.jpexs.helpers.utf8.Utf8Helper; import java.util.HashMap; import java.util.List; +import com.jpexs.decompiler.flash.action.as2.Trait; +import java.util.Map; /** * @@ -56,7 +58,7 @@ public class ActionOr extends Action { } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { GraphTargetItem a = stack.pop(); GraphTargetItem b = stack.pop(); stack.push(new OrActionItem(this, lineStartAction, b, a)); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionPop.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionPop.java index 3ba7c56f9..f61fa58bc 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionPop.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionPop.java @@ -27,6 +27,8 @@ import com.jpexs.decompiler.graph.TranslateStack; import com.jpexs.helpers.utf8.Utf8Helper; import java.util.HashMap; import java.util.List; +import com.jpexs.decompiler.flash.action.as2.Trait; +import java.util.Map; /** * @@ -55,7 +57,7 @@ public class ActionPop extends Action { } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { GraphTargetItem val = stack.pop(); output.add(val); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionPush.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionPush.java index aaec911f0..8bcb1c4b9 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionPush.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionPush.java @@ -53,6 +53,8 @@ import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Set; +import com.jpexs.decompiler.flash.action.as2.Trait; +import java.util.Map; /** * @@ -403,7 +405,7 @@ public class ActionPush extends Action { } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { int pos = 0; for (Object o : values) { if (o instanceof ConstantIndex) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionRandomNumber.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionRandomNumber.java index 2c04675ca..18edc1a2d 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionRandomNumber.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionRandomNumber.java @@ -28,6 +28,8 @@ import com.jpexs.decompiler.graph.TranslateStack; import com.jpexs.helpers.utf8.Utf8Helper; import java.util.HashMap; import java.util.List; +import com.jpexs.decompiler.flash.action.as2.Trait; +import java.util.Map; /** * @@ -56,7 +58,7 @@ public class ActionRandomNumber extends Action { } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { GraphTargetItem maximum = stack.pop(); stack.push(new RandomNumberActionItem(this, lineStartAction, maximum)); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionRemoveSprite.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionRemoveSprite.java index bfeef15e8..5bcce1736 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionRemoveSprite.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionRemoveSprite.java @@ -29,6 +29,8 @@ import com.jpexs.decompiler.graph.TranslateStack; import com.jpexs.helpers.utf8.Utf8Helper; import java.util.HashMap; import java.util.List; +import com.jpexs.decompiler.flash.action.as2.Trait; +import java.util.Map; /** * @@ -58,7 +60,7 @@ public class ActionRemoveSprite extends Action { } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { GraphTargetItem target = stack.pop(); output.add(new RemoveSpriteActionItem(this, lineStartAction, target)); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionSetProperty.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionSetProperty.java index e2d0063cd..6c0b3f6c7 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionSetProperty.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionSetProperty.java @@ -42,6 +42,8 @@ import java.util.HashMap; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; +import com.jpexs.decompiler.flash.action.as2.Trait; +import java.util.Map; /** * @@ -76,7 +78,7 @@ public class ActionSetProperty extends Action { } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { GraphTargetItem value = stack.pop().getThroughDuplicate(); GraphTargetItem index = stack.pop().getThroughDuplicate(); GraphTargetItem target = stack.pop().getThroughDuplicate(); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionSetTarget2.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionSetTarget2.java index cc51e531f..00080a7f9 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionSetTarget2.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionSetTarget2.java @@ -27,6 +27,8 @@ import com.jpexs.decompiler.graph.SecondPassData; import com.jpexs.decompiler.graph.TranslateStack; import java.util.HashMap; import java.util.List; +import com.jpexs.decompiler.flash.action.as2.Trait; +import java.util.Map; /** * @@ -56,7 +58,7 @@ public class ActionSetTarget2 extends Action { } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { GraphTargetItem target = stack.pop(); output.add(new SetTarget2ActionItem(this, lineStartAction, target)); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionSetVariable.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionSetVariable.java index 7807cebdd..068a8a456 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionSetVariable.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionSetVariable.java @@ -45,6 +45,8 @@ import com.jpexs.decompiler.graph.model.LocalData; import com.jpexs.helpers.utf8.Utf8Helper; import java.util.HashMap; import java.util.List; +import com.jpexs.decompiler.flash.action.as2.Trait; +import java.util.Map; /** * @@ -74,7 +76,7 @@ public class ActionSetVariable extends Action implements StoreTypeAction { } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { GraphTargetItem value = stack.pop().getThroughDuplicate(); GraphTargetItem name = stack.pop(); String nameStr; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionStartDrag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionStartDrag.java index 960efacb7..c8f136fb3 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionStartDrag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionStartDrag.java @@ -32,6 +32,8 @@ import com.jpexs.decompiler.graph.model.TrueItem; import com.jpexs.helpers.utf8.Utf8Helper; import java.util.HashMap; import java.util.List; +import com.jpexs.decompiler.flash.action.as2.Trait; +import java.util.Map; /** * @@ -59,7 +61,7 @@ public class ActionStartDrag extends Action { } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { GraphTargetItem target = stack.pop(); GraphTargetItem lockCenter = stack.pop(); GraphTargetItem constrain = stack.pop(); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionStringAdd.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionStringAdd.java index b20404169..24232532b 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionStringAdd.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionStringAdd.java @@ -28,6 +28,8 @@ import com.jpexs.decompiler.graph.TranslateStack; import com.jpexs.helpers.utf8.Utf8Helper; import java.util.HashMap; import java.util.List; +import com.jpexs.decompiler.flash.action.as2.Trait; +import java.util.Map; /** * @@ -56,7 +58,7 @@ public class ActionStringAdd extends Action { } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { GraphTargetItem a = stack.pop(); GraphTargetItem b = stack.pop(); stack.push(new StringAddActionItem(this, lineStartAction, b, a)); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionStringEquals.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionStringEquals.java index acf62ea2a..e4f24b3f3 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionStringEquals.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionStringEquals.java @@ -28,6 +28,8 @@ import com.jpexs.decompiler.graph.TranslateStack; import com.jpexs.helpers.utf8.Utf8Helper; import java.util.HashMap; import java.util.List; +import com.jpexs.decompiler.flash.action.as2.Trait; +import java.util.Map; /** * @@ -56,7 +58,7 @@ public class ActionStringEquals extends Action { } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { GraphTargetItem a = stack.pop(); GraphTargetItem b = stack.pop(); stack.push(new StringEqActionItem(this, lineStartAction, b, a)); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionStringExtract.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionStringExtract.java index c0d659558..4d8e8eaec 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionStringExtract.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionStringExtract.java @@ -28,6 +28,8 @@ import com.jpexs.decompiler.graph.TranslateStack; import com.jpexs.helpers.utf8.Utf8Helper; import java.util.HashMap; import java.util.List; +import com.jpexs.decompiler.flash.action.as2.Trait; +import java.util.Map; /** * @@ -56,7 +58,7 @@ public class ActionStringExtract extends Action { } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { GraphTargetItem count = stack.pop(); GraphTargetItem index = stack.pop(); GraphTargetItem value = stack.pop(); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionStringLength.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionStringLength.java index 6ae9830be..51af228ee 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionStringLength.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionStringLength.java @@ -28,6 +28,8 @@ import com.jpexs.decompiler.graph.TranslateStack; import com.jpexs.helpers.utf8.Utf8Helper; import java.util.HashMap; import java.util.List; +import com.jpexs.decompiler.flash.action.as2.Trait; +import java.util.Map; /** * @@ -56,7 +58,7 @@ public class ActionStringLength extends Action { } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { GraphTargetItem a = stack.pop(); stack.push(new StringLengthActionItem(this, lineStartAction, a)); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionStringLess.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionStringLess.java index 49f667b7e..3d68a55e5 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionStringLess.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionStringLess.java @@ -28,6 +28,8 @@ import com.jpexs.decompiler.graph.TranslateStack; import com.jpexs.helpers.utf8.Utf8Helper; import java.util.HashMap; import java.util.List; +import com.jpexs.decompiler.flash.action.as2.Trait; +import java.util.Map; /** * @@ -56,7 +58,7 @@ public class ActionStringLess extends Action { } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { GraphTargetItem a = stack.pop(); GraphTargetItem b = stack.pop(); stack.push(new StringLtActionItem(this, lineStartAction, b, a)); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionSubtract.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionSubtract.java index fd36442ee..d551d8b91 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionSubtract.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionSubtract.java @@ -28,6 +28,8 @@ import com.jpexs.decompiler.graph.TranslateStack; import com.jpexs.helpers.utf8.Utf8Helper; import java.util.HashMap; import java.util.List; +import com.jpexs.decompiler.flash.action.as2.Trait; +import java.util.Map; /** * @@ -56,7 +58,7 @@ public class ActionSubtract extends Action { } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { GraphTargetItem a = stack.pop(); GraphTargetItem b = stack.pop(); stack.push(new SubtractActionItem(this, lineStartAction, b, a)); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionToInteger.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionToInteger.java index aaa6aa67e..978a19332 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionToInteger.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionToInteger.java @@ -28,6 +28,8 @@ import com.jpexs.decompiler.graph.TranslateStack; import com.jpexs.helpers.utf8.Utf8Helper; import java.util.HashMap; import java.util.List; +import com.jpexs.decompiler.flash.action.as2.Trait; +import java.util.Map; /** * @@ -56,7 +58,7 @@ public class ActionToInteger extends Action { } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { GraphTargetItem a = stack.pop(); stack.push(new ToIntegerActionItem(this, lineStartAction, a)); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionTrace.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionTrace.java index 54661a05f..69aa512a7 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionTrace.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionTrace.java @@ -28,6 +28,8 @@ import com.jpexs.decompiler.graph.TranslateStack; import com.jpexs.helpers.utf8.Utf8Helper; import java.util.HashMap; import java.util.List; +import com.jpexs.decompiler.flash.action.as2.Trait; +import java.util.Map; /** * @@ -56,7 +58,7 @@ public class ActionTrace extends Action { } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { GraphTargetItem value = stack.pop(); output.add(new TraceActionItem(this, lineStartAction, value)); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionWaitForFrame2.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionWaitForFrame2.java index f7f8cd1cf..193ea412c 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionWaitForFrame2.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionWaitForFrame2.java @@ -41,6 +41,8 @@ import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Set; +import com.jpexs.decompiler.flash.action.as2.Trait; +import java.util.Map; /** * @@ -149,19 +151,19 @@ public class ActionWaitForFrame2 extends Action implements ActionStore { } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) throws InterruptedException { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) throws InterruptedException { GraphTargetItem frame = stack.pop(); List body; HashMap variablesBackup = new LinkedHashMap<>(variables); HashMap functionsBackup = new LinkedHashMap<>(functions); try { - body = ActionGraph.translateViaGraph(null, insideDoInitAction, true, regNames, variables, functions, skipped, SWF.DEFAULT_VERSION, staticOperation, path, getCharset()); + body = ActionGraph.translateViaGraph(uninitializedClassTraits, null, insideDoInitAction, true, regNames, variables, functions, skipped, SWF.DEFAULT_VERSION, staticOperation, path, getCharset()); } catch (SecondPassException spe) { variables.clear(); variables.putAll(variablesBackup); functions.clear(); functions.putAll(functionsBackup); - body = ActionGraph.translateViaGraph(spe.getData(), insideDoInitAction, true, regNames, variables, functions, skipped, SWF.DEFAULT_VERSION, staticOperation, path, getCharset()); + body = ActionGraph.translateViaGraph(uninitializedClassTraits, spe.getData(), insideDoInitAction, true, regNames, variables, functions, skipped, SWF.DEFAULT_VERSION, staticOperation, path, getCharset()); } output.add(new IfFrameLoadedActionItem(frame, body, this, lineStartAction)); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionAdd2.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionAdd2.java index dc57d4b39..4066da5f7 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionAdd2.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionAdd2.java @@ -28,6 +28,8 @@ import com.jpexs.decompiler.graph.TranslateStack; import com.jpexs.helpers.utf8.Utf8Helper; import java.util.HashMap; import java.util.List; +import com.jpexs.decompiler.flash.action.as2.Trait; +import java.util.Map; /** * @@ -56,7 +58,7 @@ public class ActionAdd2 extends Action { } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { GraphTargetItem a = stack.pop(); GraphTargetItem b = stack.pop(); stack.push(new AddActionItem(this, lineStartAction, b, a, true)); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionBitAnd.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionBitAnd.java index dc2ad01df..909d19de1 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionBitAnd.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionBitAnd.java @@ -28,6 +28,8 @@ import com.jpexs.decompiler.graph.TranslateStack; import com.jpexs.helpers.utf8.Utf8Helper; import java.util.HashMap; import java.util.List; +import com.jpexs.decompiler.flash.action.as2.Trait; +import java.util.Map; /** * @@ -56,7 +58,7 @@ public class ActionBitAnd extends Action { } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { GraphTargetItem a = stack.pop(); GraphTargetItem b = stack.pop(); stack.push(new BitAndActionItem(this, lineStartAction, b, a)); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionBitLShift.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionBitLShift.java index f42cd54a8..cad94c04c 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionBitLShift.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionBitLShift.java @@ -28,6 +28,8 @@ import com.jpexs.decompiler.graph.TranslateStack; import com.jpexs.helpers.utf8.Utf8Helper; import java.util.HashMap; import java.util.List; +import com.jpexs.decompiler.flash.action.as2.Trait; +import java.util.Map; /** * @@ -56,7 +58,7 @@ public class ActionBitLShift extends Action { } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { GraphTargetItem a = stack.pop(); GraphTargetItem b = stack.pop(); stack.push(new LShiftActionItem(this, lineStartAction, b, a)); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionBitOr.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionBitOr.java index 9e9481ae6..6c0946165 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionBitOr.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionBitOr.java @@ -28,6 +28,8 @@ import com.jpexs.decompiler.graph.TranslateStack; import com.jpexs.helpers.utf8.Utf8Helper; import java.util.HashMap; import java.util.List; +import com.jpexs.decompiler.flash.action.as2.Trait; +import java.util.Map; /** * @@ -56,7 +58,7 @@ public class ActionBitOr extends Action { } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { GraphTargetItem a = stack.pop(); GraphTargetItem b = stack.pop(); stack.push(new BitOrActionItem(this, lineStartAction, b, a)); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionBitRShift.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionBitRShift.java index cfc0cdc13..5942ab808 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionBitRShift.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionBitRShift.java @@ -28,6 +28,8 @@ import com.jpexs.decompiler.graph.TranslateStack; import com.jpexs.helpers.utf8.Utf8Helper; import java.util.HashMap; import java.util.List; +import com.jpexs.decompiler.flash.action.as2.Trait; +import java.util.Map; /** * @@ -56,7 +58,7 @@ public class ActionBitRShift extends Action { } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { GraphTargetItem a = stack.pop(); GraphTargetItem b = stack.pop(); stack.push(new RShiftActionItem(this, lineStartAction, b, a)); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionBitURShift.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionBitURShift.java index a36790793..113739803 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionBitURShift.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionBitURShift.java @@ -28,6 +28,8 @@ import com.jpexs.decompiler.graph.TranslateStack; import com.jpexs.helpers.utf8.Utf8Helper; import java.util.HashMap; import java.util.List; +import com.jpexs.decompiler.flash.action.as2.Trait; +import java.util.Map; /** * @@ -56,7 +58,7 @@ public class ActionBitURShift extends Action { } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { GraphTargetItem a = stack.pop(); GraphTargetItem b = stack.pop(); stack.push(new URShiftActionItem(this, lineStartAction, b, a)); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionBitXor.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionBitXor.java index 5aab20bc7..b5d122ca4 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionBitXor.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionBitXor.java @@ -28,6 +28,8 @@ import com.jpexs.decompiler.graph.TranslateStack; import com.jpexs.helpers.utf8.Utf8Helper; import java.util.HashMap; import java.util.List; +import com.jpexs.decompiler.flash.action.as2.Trait; +import java.util.Map; /** * @@ -56,7 +58,7 @@ public class ActionBitXor extends Action { } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { GraphTargetItem a = stack.pop(); GraphTargetItem b = stack.pop(); stack.push(new BitXorActionItem(this, lineStartAction, b, a)); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionCallFunction.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionCallFunction.java index 8e4ff72b9..f9b24c6b7 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionCallFunction.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionCallFunction.java @@ -32,6 +32,8 @@ import com.jpexs.helpers.utf8.Utf8Helper; import java.util.ArrayList; import java.util.HashMap; import java.util.List; +import com.jpexs.decompiler.flash.action.as2.Trait; +import java.util.Map; /** * @@ -69,7 +71,7 @@ public class ActionCallFunction extends Action { } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { GraphTargetItem functionName = stack.pop(); long numArgs = popLong(stack); List args = new ArrayList<>(); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionCallMethod.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionCallMethod.java index ff307cd41..f0c9c358e 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionCallMethod.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionCallMethod.java @@ -31,6 +31,8 @@ import com.jpexs.helpers.utf8.Utf8Helper; import java.util.ArrayList; import java.util.HashMap; import java.util.List; +import com.jpexs.decompiler.flash.action.as2.Trait; +import java.util.Map; /** * @@ -78,7 +80,7 @@ public class ActionCallMethod extends Action { } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { GraphTargetItem methodName = stack.pop(); GraphTargetItem scriptObject = stack.pop(); long numArgs = popLong(stack); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionConstantPool.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionConstantPool.java index ad2309a29..28bd11ddb 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionConstantPool.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionConstantPool.java @@ -34,6 +34,8 @@ import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; +import com.jpexs.decompiler.flash.action.as2.Trait; +import java.util.Map; /** * @@ -119,6 +121,6 @@ public class ActionConstantPool extends Action { } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionDecrement.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionDecrement.java index eb805802a..ccb58b341 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionDecrement.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionDecrement.java @@ -28,6 +28,8 @@ import com.jpexs.decompiler.graph.TranslateStack; import com.jpexs.helpers.utf8.Utf8Helper; import java.util.HashMap; import java.util.List; +import com.jpexs.decompiler.flash.action.as2.Trait; +import java.util.Map; /** * @@ -56,7 +58,7 @@ public class ActionDecrement extends Action { } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { GraphTargetItem a = stack.pop(); stack.push(new DecrementActionItem(this, lineStartAction, a)); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionDefineFunction.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionDefineFunction.java index bd473fa25..9fb91c347 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionDefineFunction.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionDefineFunction.java @@ -41,6 +41,8 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Set; +import com.jpexs.decompiler.flash.action.as2.Trait; +import java.util.Map; /** * @@ -161,7 +163,7 @@ public class ActionDefineFunction extends Action implements GraphSourceItemConta } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { } @Override diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionDefineLocal.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionDefineLocal.java index 5287a6773..ae5237dc4 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionDefineLocal.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionDefineLocal.java @@ -31,6 +31,8 @@ import com.jpexs.decompiler.graph.model.LocalData; import com.jpexs.helpers.utf8.Utf8Helper; import java.util.HashMap; import java.util.List; +import com.jpexs.decompiler.flash.action.as2.Trait; +import java.util.Map; /** * @@ -60,7 +62,7 @@ public class ActionDefineLocal extends Action { } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { GraphTargetItem value = stack.pop(); GraphTargetItem name = stack.pop(); String nameStr; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionDefineLocal2.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionDefineLocal2.java index 7c49ae48d..0adb36441 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionDefineLocal2.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionDefineLocal2.java @@ -30,6 +30,8 @@ import com.jpexs.decompiler.graph.TranslateStack; import com.jpexs.helpers.utf8.Utf8Helper; import java.util.HashMap; import java.util.List; +import com.jpexs.decompiler.flash.action.as2.Trait; +import java.util.Map; /** * @@ -48,7 +50,7 @@ public class ActionDefineLocal2 extends Action { } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { GraphTargetItem name = stack.pop(); output.add(new DefineLocalActionItem(this, lineStartAction, name, null)); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionDelete.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionDelete.java index 8bafaf894..1d20c9d99 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionDelete.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionDelete.java @@ -28,6 +28,8 @@ import com.jpexs.decompiler.graph.TranslateStack; import com.jpexs.helpers.utf8.Utf8Helper; import java.util.HashMap; import java.util.List; +import com.jpexs.decompiler.flash.action.as2.Trait; +import java.util.Map; /** * @@ -57,7 +59,7 @@ public class ActionDelete extends Action { } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { GraphTargetItem propertyName = stack.pop(); GraphTargetItem object = stack.pop(); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionDelete2.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionDelete2.java index 9bbd9a8ae..73f3510d8 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionDelete2.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionDelete2.java @@ -30,6 +30,8 @@ import com.jpexs.decompiler.graph.TranslateStack; import com.jpexs.helpers.utf8.Utf8Helper; import java.util.HashMap; import java.util.List; +import com.jpexs.decompiler.flash.action.as2.Trait; +import java.util.Map; /** * @@ -63,7 +65,7 @@ public class ActionDelete2 extends Action { } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { GraphTargetItem propertyName = stack.pop(); stack.push(new DeleteActionItem(this, lineStartAction, null, propertyName)); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionEnumerate.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionEnumerate.java index 749ad2449..bbf347e7d 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionEnumerate.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionEnumerate.java @@ -31,6 +31,8 @@ import com.jpexs.decompiler.graph.TranslateStack; import com.jpexs.helpers.utf8.Utf8Helper; import java.util.HashMap; import java.util.List; +import com.jpexs.decompiler.flash.action.as2.Trait; +import java.util.Map; /** * @@ -69,7 +71,7 @@ public class ActionEnumerate extends Action { } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { GraphTargetItem object = stack.pop(); stack.push(new EnumeratedValueActionItem()); output.add(new EnumerateActionItem(this, lineStartAction, object)); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionEquals2.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionEquals2.java index 29cc2ae16..982766165 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionEquals2.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionEquals2.java @@ -28,6 +28,8 @@ import com.jpexs.decompiler.graph.TranslateStack; import com.jpexs.helpers.utf8.Utf8Helper; import java.util.HashMap; import java.util.List; +import com.jpexs.decompiler.flash.action.as2.Trait; +import java.util.Map; /** * @@ -56,7 +58,7 @@ public class ActionEquals2 extends Action { } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { GraphTargetItem a = stack.pop(); GraphTargetItem b = stack.pop(); stack.push(new EqActionItem(this, lineStartAction, b, a, true)); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionGetMember.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionGetMember.java index 72a628afd..12787a231 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionGetMember.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionGetMember.java @@ -30,6 +30,8 @@ import com.jpexs.decompiler.graph.TranslateStack; import com.jpexs.helpers.utf8.Utf8Helper; import java.util.HashMap; import java.util.List; +import com.jpexs.decompiler.flash.action.as2.Trait; +import java.util.Map; /** * @@ -65,7 +67,7 @@ public class ActionGetMember extends Action { } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { GraphTargetItem memberName = stack.pop(); GraphTargetItem object = stack.pop(); stack.push(new GetMemberActionItem(this, lineStartAction, object, memberName)); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionIncrement.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionIncrement.java index 9874cb7fd..34b3edaca 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionIncrement.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionIncrement.java @@ -28,6 +28,8 @@ import com.jpexs.decompiler.graph.TranslateStack; import com.jpexs.helpers.utf8.Utf8Helper; import java.util.HashMap; import java.util.List; +import com.jpexs.decompiler.flash.action.as2.Trait; +import java.util.Map; /** * @@ -56,7 +58,7 @@ public class ActionIncrement extends Action { } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { GraphTargetItem a = stack.pop(); stack.push(new IncrementActionItem(this, lineStartAction, a)); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionInitArray.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionInitArray.java index 03bfbf091..cab9e8757 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionInitArray.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionInitArray.java @@ -30,6 +30,8 @@ import com.jpexs.helpers.utf8.Utf8Helper; import java.util.ArrayList; import java.util.HashMap; import java.util.List; +import com.jpexs.decompiler.flash.action.as2.Trait; +import java.util.Map; /** * @@ -63,7 +65,7 @@ public class ActionInitArray extends Action { } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { long numArgs = popLong(stack); List args = new ArrayList<>(); for (int l = 0; l < numArgs; l++) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionInitObject.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionInitObject.java index 565e40d05..75c408359 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionInitObject.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionInitObject.java @@ -30,6 +30,8 @@ import com.jpexs.helpers.utf8.Utf8Helper; import java.util.ArrayList; import java.util.HashMap; import java.util.List; +import com.jpexs.decompiler.flash.action.as2.Trait; +import java.util.Map; /** * @@ -70,7 +72,7 @@ public class ActionInitObject extends Action { } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { long numArgs = popLong(stack); List values = new ArrayList<>(); List names = new ArrayList<>(); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionLess2.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionLess2.java index 35cf91661..d1774186c 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionLess2.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionLess2.java @@ -28,6 +28,8 @@ import com.jpexs.decompiler.graph.TranslateStack; import com.jpexs.helpers.utf8.Utf8Helper; import java.util.HashMap; import java.util.List; +import com.jpexs.decompiler.flash.action.as2.Trait; +import java.util.Map; /** * @@ -56,7 +58,7 @@ public class ActionLess2 extends Action { } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { GraphTargetItem a = stack.pop(); GraphTargetItem b = stack.pop(); stack.push(new LtActionItem(this, lineStartAction, b, a, true)); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionModulo.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionModulo.java index a27c8ce6a..71b28223c 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionModulo.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionModulo.java @@ -28,6 +28,8 @@ import com.jpexs.decompiler.graph.TranslateStack; import com.jpexs.helpers.utf8.Utf8Helper; import java.util.HashMap; import java.util.List; +import com.jpexs.decompiler.flash.action.as2.Trait; +import java.util.Map; /** * @@ -56,7 +58,7 @@ public class ActionModulo extends Action { } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { GraphTargetItem a = stack.pop(); GraphTargetItem b = stack.pop(); stack.push(new ModuloActionItem(this, lineStartAction, b, a)); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionNewMethod.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionNewMethod.java index 3965b8428..315c36125 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionNewMethod.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionNewMethod.java @@ -31,6 +31,8 @@ import com.jpexs.helpers.utf8.Utf8Helper; import java.util.ArrayList; import java.util.HashMap; import java.util.List; +import com.jpexs.decompiler.flash.action.as2.Trait; +import java.util.Map; /** * @@ -74,7 +76,7 @@ public class ActionNewMethod extends Action { } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { GraphTargetItem methodName = stack.pop(); GraphTargetItem scriptObject = stack.pop(); long numArgs = popLong(stack); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionNewObject.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionNewObject.java index 079b864ee..1322cbd7e 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionNewObject.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionNewObject.java @@ -30,6 +30,8 @@ import com.jpexs.helpers.utf8.Utf8Helper; import java.util.ArrayList; import java.util.HashMap; import java.util.List; +import com.jpexs.decompiler.flash.action.as2.Trait; +import java.util.Map; /** * @@ -74,7 +76,7 @@ public class ActionNewObject extends Action { } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { GraphTargetItem objectName = stack.pop(); long numArgs = popLong(stack); List args = new ArrayList<>(); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionPushDuplicate.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionPushDuplicate.java index a11a400dd..594d687fd 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionPushDuplicate.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionPushDuplicate.java @@ -28,6 +28,8 @@ import com.jpexs.decompiler.graph.TranslateStack; import com.jpexs.decompiler.graph.model.DuplicateItem; import java.util.HashMap; import java.util.List; +import com.jpexs.decompiler.flash.action.as2.Trait; +import java.util.Map; /** * @@ -56,7 +58,7 @@ public class ActionPushDuplicate extends Action { } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { GraphTargetItem value = stack.peek(); stack.push(new DuplicateItem(this, lineStartAction, value)); value.getMoreSrc().add(new GraphSourceItemPos(this, 0)); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionReturn.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionReturn.java index aa6c6c3ae..5e5e54a90 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionReturn.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionReturn.java @@ -28,6 +28,8 @@ import com.jpexs.decompiler.graph.TranslateStack; import com.jpexs.helpers.utf8.Utf8Helper; import java.util.HashMap; import java.util.List; +import com.jpexs.decompiler.flash.action.as2.Trait; +import java.util.Map; /** * @@ -58,7 +60,7 @@ public class ActionReturn extends Action { } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { GraphTargetItem value = stack.pop(); output.add(new ReturnActionItem(this, lineStartAction, value)); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionSetMember.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionSetMember.java index bfcdd833b..6bf4a9457 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionSetMember.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionSetMember.java @@ -41,6 +41,8 @@ import com.jpexs.decompiler.graph.model.CompoundableBinaryOp; import com.jpexs.helpers.utf8.Utf8Helper; import java.util.HashMap; import java.util.List; +import com.jpexs.decompiler.flash.action.as2.Trait; +import java.util.Map; /** * @@ -75,7 +77,7 @@ public class ActionSetMember extends Action { } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { GraphTargetItem value = stack.pop().getThroughDuplicate(); GraphTargetItem memberName = stack.pop(); GraphTargetItem object = stack.pop(); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionStackSwap.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionStackSwap.java index 758b73323..3e528611c 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionStackSwap.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionStackSwap.java @@ -27,6 +27,8 @@ import com.jpexs.decompiler.graph.SecondPassData; import com.jpexs.decompiler.graph.TranslateStack; import java.util.HashMap; import java.util.List; +import com.jpexs.decompiler.flash.action.as2.Trait; +import java.util.Map; /** * @@ -58,7 +60,7 @@ public class ActionStackSwap extends Action { } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { GraphTargetItem a = stack.pop(); GraphTargetItem b = stack.pop(); stack.push(a); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionStoreRegister.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionStoreRegister.java index 741ba635d..1884031d3 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionStoreRegister.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionStoreRegister.java @@ -27,7 +27,6 @@ import com.jpexs.decompiler.flash.action.model.ConstantPool; import com.jpexs.decompiler.flash.action.model.DecrementActionItem; import com.jpexs.decompiler.flash.action.model.DirectValueActionItem; import com.jpexs.decompiler.flash.action.model.EnumeratedValueActionItem; -import com.jpexs.decompiler.flash.action.model.EnumerationAssignmentValueActionItem; import com.jpexs.decompiler.flash.action.model.IncrementActionItem; import com.jpexs.decompiler.flash.action.model.PostDecrementActionItem; import com.jpexs.decompiler.flash.action.model.PostIncrementActionItem; @@ -46,6 +45,8 @@ import com.jpexs.decompiler.graph.model.CompoundableBinaryOp; import java.io.IOException; import java.util.HashMap; import java.util.List; +import com.jpexs.decompiler.flash.action.as2.Trait; +import java.util.Map; /** * @@ -103,7 +104,7 @@ public class ActionStoreRegister extends Action implements StoreTypeAction { } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { GraphTargetItem value = stack.pop(); RegisterNumber rn = new RegisterNumber(registerNumber); if (regNames.containsKey(registerNumber)) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionTargetPath.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionTargetPath.java index 6d39527f2..f786fc62c 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionTargetPath.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionTargetPath.java @@ -29,6 +29,8 @@ import com.jpexs.decompiler.graph.TranslateStack; import com.jpexs.helpers.utf8.Utf8Helper; import java.util.HashMap; import java.util.List; +import com.jpexs.decompiler.flash.action.as2.Trait; +import java.util.Map; /** * @@ -65,7 +67,7 @@ public class ActionTargetPath extends Action { } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { GraphTargetItem object = stack.pop(); stack.push(new TargetPathActionItem(this, lineStartAction, object)); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionToNumber.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionToNumber.java index 91d9334d0..2d11528f3 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionToNumber.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionToNumber.java @@ -28,6 +28,8 @@ import com.jpexs.decompiler.graph.TranslateStack; import com.jpexs.helpers.utf8.Utf8Helper; import java.util.HashMap; import java.util.List; +import com.jpexs.decompiler.flash.action.as2.Trait; +import java.util.Map; /** * @@ -56,7 +58,7 @@ public class ActionToNumber extends Action { } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { GraphTargetItem object = stack.pop(); stack.push(new ToNumberActionItem(this, lineStartAction, object)); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionToString.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionToString.java index 28ba00960..45947960e 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionToString.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionToString.java @@ -28,6 +28,8 @@ import com.jpexs.decompiler.graph.TranslateStack; import com.jpexs.helpers.utf8.Utf8Helper; import java.util.HashMap; import java.util.List; +import com.jpexs.decompiler.flash.action.as2.Trait; +import java.util.Map; /** * @@ -56,7 +58,7 @@ public class ActionToString extends Action { } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { GraphTargetItem object = stack.pop(); stack.push(new ToStringActionItem(this, lineStartAction, object)); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionTypeOf.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionTypeOf.java index c3790f480..427e8bbe6 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionTypeOf.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionTypeOf.java @@ -28,6 +28,8 @@ import com.jpexs.decompiler.graph.TranslateStack; import com.jpexs.helpers.utf8.Utf8Helper; import java.util.HashMap; import java.util.List; +import com.jpexs.decompiler.flash.action.as2.Trait; +import java.util.Map; /** * @@ -56,7 +58,7 @@ public class ActionTypeOf extends Action { } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { GraphTargetItem object = stack.pop(); stack.push(new TypeOfActionItem(this, lineStartAction, object)); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf6/ActionEnumerate2.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf6/ActionEnumerate2.java index cfb2fc796..414e18fd1 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf6/ActionEnumerate2.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf6/ActionEnumerate2.java @@ -31,6 +31,8 @@ import com.jpexs.decompiler.graph.TranslateStack; import com.jpexs.helpers.utf8.Utf8Helper; import java.util.HashMap; import java.util.List; +import com.jpexs.decompiler.flash.action.as2.Trait; +import java.util.Map; /** * @@ -49,7 +51,7 @@ public class ActionEnumerate2 extends Action { } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { GraphTargetItem object = stack.pop(); stack.push(new EnumeratedValueActionItem()); output.add(new EnumerateActionItem(this, lineStartAction, object)); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf6/ActionGreater.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf6/ActionGreater.java index cc38068bc..46bcf275b 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf6/ActionGreater.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf6/ActionGreater.java @@ -28,6 +28,8 @@ import com.jpexs.decompiler.graph.TranslateStack; import com.jpexs.helpers.utf8.Utf8Helper; import java.util.HashMap; import java.util.List; +import com.jpexs.decompiler.flash.action.as2.Trait; +import java.util.Map; /** * @@ -56,7 +58,7 @@ public class ActionGreater extends Action { } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { GraphTargetItem a = stack.pop(); GraphTargetItem b = stack.pop(); stack.push(new GtActionItem(this, lineStartAction, b, a)); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf6/ActionInstanceOf.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf6/ActionInstanceOf.java index 310d0b52b..fdf397f2c 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf6/ActionInstanceOf.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf6/ActionInstanceOf.java @@ -29,6 +29,8 @@ import com.jpexs.decompiler.graph.TranslateStack; import com.jpexs.helpers.utf8.Utf8Helper; import java.util.HashMap; import java.util.List; +import com.jpexs.decompiler.flash.action.as2.Trait; +import java.util.Map; /** * @@ -87,7 +89,7 @@ public class ActionInstanceOf extends Action { } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { GraphTargetItem a = stack.pop(); GraphTargetItem b = stack.pop(); stack.push(new InstanceOfActionItem(this, lineStartAction, b, a)); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf6/ActionStrictEquals.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf6/ActionStrictEquals.java index 5df035a16..01bd27207 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf6/ActionStrictEquals.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf6/ActionStrictEquals.java @@ -28,6 +28,8 @@ import com.jpexs.decompiler.graph.TranslateStack; import com.jpexs.helpers.utf8.Utf8Helper; import java.util.HashMap; import java.util.List; +import com.jpexs.decompiler.flash.action.as2.Trait; +import java.util.Map; /** * @@ -56,7 +58,7 @@ public class ActionStrictEquals extends Action { } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { GraphTargetItem a = stack.pop(); GraphTargetItem b = stack.pop(); stack.push(new StrictEqActionItem(this, lineStartAction, b, a)); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf6/ActionStringGreater.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf6/ActionStringGreater.java index b661d468d..1bf0cd938 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf6/ActionStringGreater.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf6/ActionStringGreater.java @@ -28,6 +28,8 @@ import com.jpexs.decompiler.graph.TranslateStack; import com.jpexs.helpers.utf8.Utf8Helper; import java.util.HashMap; import java.util.List; +import com.jpexs.decompiler.flash.action.as2.Trait; +import java.util.Map; /** * @@ -56,7 +58,7 @@ public class ActionStringGreater extends Action { } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { GraphTargetItem a = stack.pop(); GraphTargetItem b = stack.pop(); stack.push(new StringGtActionItem(this, lineStartAction, b, a)); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf7/ActionCastOp.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf7/ActionCastOp.java index 372d2c4e1..0f6833953 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf7/ActionCastOp.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf7/ActionCastOp.java @@ -31,6 +31,8 @@ import com.jpexs.decompiler.graph.TranslateStack; import com.jpexs.helpers.utf8.Utf8Helper; import java.util.HashMap; import java.util.List; +import com.jpexs.decompiler.flash.action.as2.Trait; +import java.util.Map; /** * @@ -66,7 +68,7 @@ public class ActionCastOp extends Action { } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { GraphTargetItem object = stack.pop(); GraphTargetItem constructor = stack.pop(); stack.push(new CastOpActionItem(this, lineStartAction, constructor, object)); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf7/ActionDefineFunction2.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf7/ActionDefineFunction2.java index c50a8a447..4ddc37324 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf7/ActionDefineFunction2.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf7/ActionDefineFunction2.java @@ -42,6 +42,8 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Set; +import com.jpexs.decompiler.flash.action.as2.Trait; +import java.util.Map; /** * @@ -269,7 +271,7 @@ public class ActionDefineFunction2 extends Action implements GraphSourceItemCont } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { } @Override diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf7/ActionExtends.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf7/ActionExtends.java index cf9076f0e..d52c2675b 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf7/ActionExtends.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf7/ActionExtends.java @@ -28,6 +28,8 @@ import com.jpexs.decompiler.graph.SecondPassData; import com.jpexs.decompiler.graph.TranslateStack; import java.util.HashMap; import java.util.List; +import com.jpexs.decompiler.flash.action.as2.Trait; +import java.util.Map; /** * @@ -65,7 +67,7 @@ public class ActionExtends extends Action { } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { GraphTargetItem superclass = stack.pop(); GraphTargetItem subclass = stack.pop(); output.add(new ExtendsActionItem(this, lineStartAction, subclass, superclass)); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf7/ActionImplementsOp.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf7/ActionImplementsOp.java index 080529124..cb258957d 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf7/ActionImplementsOp.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf7/ActionImplementsOp.java @@ -29,6 +29,8 @@ import com.jpexs.decompiler.graph.TranslateStack; import java.util.ArrayList; import java.util.HashMap; import java.util.List; +import com.jpexs.decompiler.flash.action.as2.Trait; +import java.util.Map; /** * @@ -69,7 +71,7 @@ public class ActionImplementsOp extends Action { } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { GraphTargetItem subclass = stack.pop(); long inCount = popLong(stack); List superclasses = new ArrayList<>(); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf7/ActionThrow.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf7/ActionThrow.java index ec8987dfd..a8673d4f2 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf7/ActionThrow.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf7/ActionThrow.java @@ -28,6 +28,8 @@ import com.jpexs.decompiler.graph.TranslateStack; import com.jpexs.helpers.utf8.Utf8Helper; import java.util.HashMap; import java.util.List; +import com.jpexs.decompiler.flash.action.as2.Trait; +import java.util.Map; /** * @@ -52,7 +54,7 @@ public class ActionThrow extends Action { } @Override - public void translate(SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { + public void translate(Map> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { GraphTargetItem object = stack.pop(); output.add(new ThrowActionItem(this, lineStartAction, object)); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/script/PcodeGraphVizExporter.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/script/PcodeGraphVizExporter.java index 7c244632c..9e77e58db 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/script/PcodeGraphVizExporter.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/script/PcodeGraphVizExporter.java @@ -81,7 +81,7 @@ public class PcodeGraphVizExporter { public void exportAs12(ASMSource src, GraphTextWriter writer) throws InterruptedException { ActionList alist = src.getActions(); - ActionGraph gr = new ActionGraph("", false, false, alist, new HashMap<>(), new HashMap<>(), new HashMap<>(), SWF.DEFAULT_VERSION, Utf8Helper.charsetName); + ActionGraph gr = new ActionGraph(new HashMap<>(), "", false, false, alist, new HashMap<>(), new HashMap<>(), new HashMap<>(), SWF.DEFAULT_VERSION, Utf8Helper.charsetName); export(gr, writer); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DoActionTag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DoActionTag.java index 76cad6ff4..ffca16bd7 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DoActionTag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DoActionTag.java @@ -31,10 +31,13 @@ import com.jpexs.decompiler.flash.tags.base.ASMSource; import com.jpexs.decompiler.flash.types.annotations.HideInRawEdit; import com.jpexs.decompiler.flash.types.annotations.Internal; import com.jpexs.decompiler.flash.types.annotations.SWFVersion; +import com.jpexs.decompiler.graph.Graph; +import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.helpers.ByteArrayRange; import com.jpexs.helpers.Helper; import java.io.IOException; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; /** @@ -142,7 +145,7 @@ public class DoActionTag extends Tag implements ASMSource { actions = getActions(); } - return Action.actionsToSource(this, actions, getScriptName(), writer, getCharset()); + return Action.actionsToSource(new HashMap<>(), this, actions, getScriptName(), writer, getCharset()); } @Override @@ -151,7 +154,7 @@ public class DoActionTag extends Tag implements ASMSource { actions = getActions(); } - return Action.actionsToSource(this, actions, getScriptName(), writer, getCharset(), treeOperations); + return Action.actionsToSource(new HashMap<>(), this, actions, getScriptName(), writer, getCharset(), treeOperations); } /** @@ -246,4 +249,13 @@ public class DoActionTag extends Tag implements ASMSource { public Tag getTag() { return null; //? } + + @Override + public List getActionsToTree() { + try { + return Action.actionsToTree(new HashMap<>(), false, false, getActions(), swf.version, Graph.SOP_USE_STATIC, "", swf.getCharset()); + } catch (InterruptedException ex) { + return new ArrayList<>(); + } + } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DoInitActionTag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DoInitActionTag.java index 1755c606f..3db634678 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DoInitActionTag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DoInitActionTag.java @@ -34,12 +34,16 @@ import com.jpexs.decompiler.flash.types.annotations.HideInRawEdit; import com.jpexs.decompiler.flash.types.annotations.Internal; import com.jpexs.decompiler.flash.types.annotations.SWFType; import com.jpexs.decompiler.flash.types.annotations.SWFVersion; +import com.jpexs.decompiler.graph.Graph; +import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.helpers.ByteArrayRange; import com.jpexs.helpers.Helper; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Set; +import java.util.logging.Level; +import java.util.logging.Logger; /** * @@ -151,7 +155,7 @@ public class DoInitActionTag extends Tag implements CharacterIdTag, ASMSource { actions = getActions(); } - return Action.actionsToSource(this, actions, getScriptName(), writer, getCharset()); + return Action.actionsToSource(swf.getUninitializedAs2ClassTraits(),this, actions, getScriptName(), writer, getCharset()); } @Override @@ -160,7 +164,7 @@ public class DoInitActionTag extends Tag implements CharacterIdTag, ASMSource { actions = getActions(); } - return Action.actionsToSource(this, actions, getScriptName(), writer, getCharset(), treeOperations); + return Action.actionsToSource(swf.getUninitializedAs2ClassTraits(), this, actions, getScriptName(), writer, getCharset(), treeOperations); } @Override @@ -280,4 +284,13 @@ public class DoInitActionTag extends Tag implements CharacterIdTag, ASMSource { public void getNeededCharacters(Set needed, SWF swf) { needed.add(spriteId); } + + @Override + public List getActionsToTree() { + try { + return Action.actionsToTree(swf.getUninitializedAs2ClassTraits(), true, false, getActions(), swf.version, Graph.SOP_USE_STATIC, "", swf.getCharset()); + } catch (InterruptedException ex) { + return new ArrayList<>(); + } + } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/ASMSource.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/ASMSource.java index 9f7b7687c..2d741d709 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/ASMSource.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/ASMSource.java @@ -25,6 +25,7 @@ import com.jpexs.decompiler.flash.exporters.modes.ScriptExportMode; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.flash.tags.Tag; import com.jpexs.decompiler.flash.types.HasSwfAndTag; +import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.helpers.ByteArrayRange; import java.util.List; @@ -88,6 +89,8 @@ public interface ASMSource extends Exportable, HasSwfAndTag { * @param actions Action list */ public void setActions(List actions); + + public List getActionsToTree(); public void setModified(); @@ -113,6 +116,7 @@ public interface ASMSource extends Exportable, HasSwfAndTag { public Tag getSourceTag(); + @Override public void setSourceTag(Tag t); public String getScriptName(); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/ButtonAction.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/ButtonAction.java index b16fa7431..7b59a9d6f 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/ButtonAction.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/ButtonAction.java @@ -27,9 +27,12 @@ import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.flash.tags.DefineButtonTag; import com.jpexs.decompiler.flash.tags.Tag; import com.jpexs.decompiler.flash.treeitems.Openable; +import com.jpexs.decompiler.graph.Graph; +import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.helpers.ByteArrayRange; import com.jpexs.helpers.Helper; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; /** @@ -73,7 +76,7 @@ public class ButtonAction implements ASMSource { actions = getActions(); } - return Action.actionsToSource(this, actions, getScriptName(), writer, buttonTag.getCharset()); + return Action.actionsToSource(new HashMap<>(), this, actions, getScriptName(), writer, buttonTag.getCharset()); } @Override @@ -82,7 +85,7 @@ public class ButtonAction implements ASMSource { actions = getActions(); } - return Action.actionsToSource(this, actions, getScriptName(), writer, buttonTag.getCharset(), treeOperations); + return Action.actionsToSource(new HashMap<>(), this, actions, getScriptName(), writer, buttonTag.getCharset(), treeOperations); } /** @@ -216,5 +219,12 @@ public class ButtonAction implements ASMSource { return (SWF) getOpenable(); } - + @Override + public List getActionsToTree() { + try { + return Action.actionsToTree(new HashMap<>(), false, false, getActions(), buttonTag.getSwf().version, Graph.SOP_USE_STATIC, "", buttonTag.getSwf().getCharset()); + } catch (InterruptedException ex) { + return new ArrayList<>(); + } + } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/BUTTONCONDACTION.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/BUTTONCONDACTION.java index c9430ebc4..6a88149d0 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/BUTTONCONDACTION.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/BUTTONCONDACTION.java @@ -23,6 +23,7 @@ import com.jpexs.decompiler.flash.action.Action; import com.jpexs.decompiler.flash.action.ActionList; import com.jpexs.decompiler.flash.action.ActionTreeOperation; import com.jpexs.decompiler.flash.action.ConstantPoolTooBigException; +import com.jpexs.decompiler.flash.action.as2.Trait; import com.jpexs.decompiler.flash.dumpview.DumpInfoSpecialType; import com.jpexs.decompiler.flash.exporters.modes.ScriptExportMode; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; @@ -33,12 +34,16 @@ import com.jpexs.decompiler.flash.types.annotations.Conditional; import com.jpexs.decompiler.flash.types.annotations.HideInRawEdit; import com.jpexs.decompiler.flash.types.annotations.Internal; import com.jpexs.decompiler.flash.types.annotations.SWFType; +import com.jpexs.decompiler.graph.Graph; +import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.helpers.ByteArrayRange; import com.jpexs.helpers.Helper; import java.io.IOException; import java.io.Serializable; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; /** * Actions to execute at particular button events @@ -210,7 +215,7 @@ public class BUTTONCONDACTION implements ASMSource, Serializable, HasSwfAndTag { actions = getActions(); } - return Action.actionsToSource(this, actions, getScriptName(), writer, actions.getCharset()); + return Action.actionsToSource(swf.getUninitializedAs2ClassTraits(), this, actions, getScriptName(), writer, actions.getCharset()); } @Override @@ -219,7 +224,7 @@ public class BUTTONCONDACTION implements ASMSource, Serializable, HasSwfAndTag { actions = getActions(); } - return Action.actionsToSource(this, actions, getScriptName(), writer, actions.getCharset(), treeOperations); + return Action.actionsToSource(new HashMap<>(), this, actions, getScriptName(), writer, actions.getCharset(), treeOperations); } /** @@ -379,4 +384,13 @@ public class BUTTONCONDACTION implements ASMSource, Serializable, HasSwfAndTag { public Tag getTag() { return tag; } + + @Override + public List getActionsToTree() { + try { + return Action.actionsToTree(new HashMap<>(), false, false, getActions(), swf.version, Graph.SOP_USE_STATIC, "", swf.getCharset()); + } catch (InterruptedException ex) { + return new ArrayList<>(); + } + } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/CLIPACTIONRECORD.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/CLIPACTIONRECORD.java index 45556e672..a413f3388 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/CLIPACTIONRECORD.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/CLIPACTIONRECORD.java @@ -32,11 +32,14 @@ import com.jpexs.decompiler.flash.treeitems.Openable; import com.jpexs.decompiler.flash.types.annotations.Conditional; import com.jpexs.decompiler.flash.types.annotations.HideInRawEdit; import com.jpexs.decompiler.flash.types.annotations.Internal; +import com.jpexs.decompiler.graph.Graph; +import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.helpers.ByteArrayRange; import com.jpexs.helpers.Helper; import java.io.IOException; import java.io.Serializable; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; /** @@ -249,7 +252,7 @@ public class CLIPACTIONRECORD implements ASMSource, Serializable, HasSwfAndTag { actions = getActions(); } - return Action.actionsToSource(this, actions, getScriptName(), writer, actions.getCharset()); + return Action.actionsToSource(new HashMap<>(), this, actions, getScriptName(), writer, actions.getCharset()); } @Override @@ -258,7 +261,7 @@ public class CLIPACTIONRECORD implements ASMSource, Serializable, HasSwfAndTag { actions = getActions(); } - return Action.actionsToSource(this, actions, getScriptName(), writer, actions.getCharset(), treeOperations); + return Action.actionsToSource(new HashMap<>(), this, actions, getScriptName(), writer, actions.getCharset(), treeOperations); } /** @@ -361,4 +364,13 @@ public class CLIPACTIONRECORD implements ASMSource, Serializable, HasSwfAndTag { public Tag getSourceTag() { return tag; } + + @Override + public List getActionsToTree() { + try { + return Action.actionsToTree(new HashMap<>(), false, false, getActions(), swf.version, Graph.SOP_USE_STATIC, "", swf.getCharset()); + } catch (InterruptedException ex) { + return new ArrayList<>(); + } + } } diff --git a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionDefineFunctionPushRegisterCleanerTest.java b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionDefineFunctionPushRegisterCleanerTest.java index 91ad68f53..7c6a667fa 100644 --- a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionDefineFunctionPushRegisterCleanerTest.java +++ b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionDefineFunctionPushRegisterCleanerTest.java @@ -26,6 +26,7 @@ import com.jpexs.helpers.utf8.Utf8Helper; import java.io.BufferedInputStream; import java.io.FileInputStream; import java.io.IOException; +import java.util.HashMap; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertNotNull; import static org.testng.Assert.fail; @@ -53,7 +54,7 @@ public class ActionDefineFunctionPushRegisterCleanerTest extends ActionScript2Te assertNotNull(dia); HighlightedTextWriter writer = new HighlightedTextWriter(new CodeFormatting(), false); try { - Action.actionsToSource(dia, dia.getActions(), "", writer, Utf8Helper.charsetName); + Action.actionsToSource(new HashMap<>(),dia, dia.getActions(), "", writer, Utf8Helper.charsetName); } catch (InterruptedException ex) { fail(); } diff --git a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionScript2AssemblerTest.java b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionScript2AssemblerTest.java index 39f7f01c9..e940d9337 100644 --- a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionScript2AssemblerTest.java +++ b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionScript2AssemblerTest.java @@ -28,6 +28,7 @@ import com.jpexs.decompiler.flash.tags.DoInitActionTag; import java.io.BufferedInputStream; import java.io.FileInputStream; import java.io.IOException; +import java.util.HashMap; import java.util.List; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertTrue; @@ -73,7 +74,7 @@ public class ActionScript2AssemblerTest extends ActionScript2TestBase { HighlightedTextWriter writer = new HighlightedTextWriter(new CodeFormatting(), false); try { - Action.actionsToSource(doa, doa.getActions(), "", writer, swf.getCharset()); + Action.actionsToSource(new HashMap<>(),doa, doa.getActions(), "", writer, swf.getCharset()); } catch (InterruptedException ex) { fail(); } @@ -95,7 +96,7 @@ public class ActionScript2AssemblerTest extends ActionScript2TestBase { HighlightedTextWriter writer = new HighlightedTextWriter(new CodeFormatting(), false); try { - Action.actionsToSource(doi, doi.getActions(), "", writer, swf.getCharset()); + Action.actionsToSource(new HashMap<>(), doi, doi.getActions(), "", writer, swf.getCharset()); } catch (InterruptedException ex) { fail(); } @@ -124,7 +125,7 @@ public class ActionScript2AssemblerTest extends ActionScript2TestBase { DoActionTag doa = getFirstActionTag(); doa.setActionBytes(Action.actionsToBytes(actions, true, swf.version)); HighlightedTextWriter writer = new HighlightedTextWriter(new CodeFormatting(), false); - Action.actionsToSource(doa, doa.getActions(), "", writer, swf.getCharset()); + Action.actionsToSource(new HashMap<>(),doa, doa.getActions(), "", writer, swf.getCharset()); String actualResult = writer.toString(); writer = new HighlightedTextWriter(new CodeFormatting(), false); doa.getASMSource(ScriptExportMode.PCODE, writer, null); diff --git a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionScript2ClassesTest.java b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionScript2ClassesTest.java index 1144243c8..2d665635a 100644 --- a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionScript2ClassesTest.java +++ b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionScript2ClassesTest.java @@ -26,6 +26,7 @@ import com.jpexs.helpers.utf8.Utf8Helper; import java.io.BufferedInputStream; import java.io.FileInputStream; import java.io.IOException; +import java.util.HashMap; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertNotNull; import static org.testng.Assert.fail; @@ -55,7 +56,7 @@ public class ActionScript2ClassesTest extends ActionScript2TestBase { assertNotNull(dia); HighlightedTextWriter writer = new HighlightedTextWriter(new CodeFormatting(), false); try { - Action.actionsToSource(dia, dia.getActions(), "", writer, Utf8Helper.charsetName); + Action.actionsToSource(new HashMap<>() /*FIXME*/,dia, dia.getActions(), "", writer, Utf8Helper.charsetName); } catch (InterruptedException ex) { fail(); } diff --git a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionScript2DeobfuscatorTest.java b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionScript2DeobfuscatorTest.java index 7d5002a22..20f2ddac1 100644 --- a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionScript2DeobfuscatorTest.java +++ b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionScript2DeobfuscatorTest.java @@ -19,6 +19,7 @@ package com.jpexs.decompiler.flash; import com.jpexs.decompiler.flash.action.Action; import com.jpexs.decompiler.flash.action.ActionList; import com.jpexs.decompiler.flash.action.ActionListReader; +import com.jpexs.decompiler.flash.action.as2.Trait; import com.jpexs.decompiler.flash.action.parser.ActionParseException; import com.jpexs.decompiler.flash.action.parser.pcode.ASMParser; import com.jpexs.decompiler.flash.action.parser.script.ActionScript2Parser; @@ -32,7 +33,9 @@ import java.io.BufferedInputStream; import java.io.FileInputStream; import java.io.IOException; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.concurrent.TimeoutException; import static org.testng.Assert.assertTrue; import static org.testng.Assert.fail; @@ -61,7 +64,7 @@ public class ActionScript2DeobfuscatorTest extends ActionScript2TestBase { List actions = par.actionsFromString(str, Utf8Helper.charsetName); byte[] hex = Action.actionsToBytes(actions, true, SWF.DEFAULT_VERSION); ActionList list = ActionListReader.readActionListTimeout(new ArrayList<>(), new SWFInputStream(swf, hex), SWF.DEFAULT_VERSION, 0, hex.length, "", 1); - Action.actionsToSource(null, list, "", writer, Utf8Helper.charsetName); + Action.actionsToSource(new HashMap<>(), null, list, "", writer, Utf8Helper.charsetName); return writer.toString(); } @@ -255,7 +258,7 @@ public class ActionScript2DeobfuscatorTest extends ActionScript2TestBase { DoActionTag doa = getFirstActionTag(); doa.setActionBytes(Action.actionsToBytes(actions, true, swf.version)); HighlightedTextWriter writer = new HighlightedTextWriter(new CodeFormatting(), false); - Action.actionsToSource(doa, doa.getActions(), "", writer, swf.getCharset()); + Action.actionsToSource(new HashMap<>(), doa, doa.getActions(), "", writer, swf.getCharset()); String actualResult = writer.toString(); assertTrue(actualResult.contains("case \"c\":")); @@ -280,7 +283,7 @@ public class ActionScript2DeobfuscatorTest extends ActionScript2TestBase { DoActionTag doa = getFirstActionTag(); doa.setActionBytes(Action.actionsToBytes(actions, true, swf.version)); HighlightedTextWriter writer = new HighlightedTextWriter(new CodeFormatting(), false); - Action.actionsToSource(doa, doa.getActions(), "", writer, swf.getCharset()); + Action.actionsToSource(new HashMap<>(), doa, doa.getActions(), "", writer, swf.getCharset()); String actualResult = writer.toString(); assertTrue(!actualResult.contains("FAIL")); @@ -307,7 +310,7 @@ public class ActionScript2DeobfuscatorTest extends ActionScript2TestBase { DoActionTag doa = getFirstActionTag(); doa.setActionBytes(Action.actionsToBytes(actions, true, swf.version)); HighlightedTextWriter writer = new HighlightedTextWriter(new CodeFormatting(), false); - Action.actionsToSource(doa, doa.getActions(), "", writer, swf.getCharset()); + Action.actionsToSource(new HashMap<>(), doa, doa.getActions(), "", writer, swf.getCharset()); String actualResult = writer.toString(); assertTrue(!actualResult.contains("FAIL")); diff --git a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionScript2Test.java b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionScript2Test.java index 0fc22d0cc..9e8f6f237 100644 --- a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionScript2Test.java +++ b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionScript2Test.java @@ -17,6 +17,7 @@ package com.jpexs.decompiler.flash; import com.jpexs.decompiler.flash.action.Action; +import com.jpexs.decompiler.flash.action.as2.Trait; import com.jpexs.decompiler.flash.configuration.Configuration; import com.jpexs.decompiler.flash.helpers.CodeFormatting; import com.jpexs.decompiler.flash.helpers.HighlightedTextWriter; @@ -27,6 +28,8 @@ import com.jpexs.helpers.utf8.Utf8Helper; import java.io.BufferedInputStream; import java.io.FileInputStream; import java.io.IOException; +import java.util.HashMap; +import java.util.Map; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertNotNull; import static org.testng.Assert.fail; @@ -55,7 +58,7 @@ public class ActionScript2Test extends ActionScript2TestBase { assertNotNull(doa); HighlightedTextWriter writer = new HighlightedTextWriter(new CodeFormatting(), false); try { - Action.actionsToSource(doa, doa.getActions(), "", writer, Utf8Helper.charsetName); + Action.actionsToSource(new HashMap<>() /*FIXME*/, doa, doa.getActions(), "", writer, Utf8Helper.charsetName); } catch (InterruptedException ex) { fail(); } diff --git a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionScript2UninitializedFieldsTest.java b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionScript2UninitializedFieldsTest.java new file mode 100644 index 000000000..4dce7fcb1 --- /dev/null +++ b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionScript2UninitializedFieldsTest.java @@ -0,0 +1,125 @@ +/* + * Copyright (C) 2010-2023 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.action.Action; +import com.jpexs.decompiler.flash.configuration.Configuration; +import com.jpexs.decompiler.flash.helpers.CodeFormatting; +import com.jpexs.decompiler.flash.helpers.HighlightedTextWriter; +import com.jpexs.decompiler.flash.tags.DoInitActionTag; +import com.jpexs.decompiler.flash.tags.Tag; +import com.jpexs.helpers.utf8.Utf8Helper; +import java.io.BufferedInputStream; +import java.io.FileInputStream; +import java.io.IOException; +import java.util.HashMap; +import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertNotNull; +import static org.testng.Assert.fail; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; + +/** + * + * @author JPEXS + */ +public class ActionScript2UninitializedFieldsTest extends ActionScript2TestBase { + + private final String BASE_TEST_PACKAGE = "com.jpexs"; + + @BeforeClass + public void init() throws IOException, InterruptedException { + //Main.initLogging(false); + Configuration.autoDeobfuscate.set(false); + Configuration.simplifyExpressions.set(false); + Configuration.decompile.set(true); + Configuration.registerNameFormat.set("_loc%d_"); + swf = new SWF(new BufferedInputStream(new FileInputStream("testdata/as2_initfields/as2_initfields.swf")), false); + } + + private void compareSrc(String testClassName, String expectedClassContents) { + DoInitActionTag dia = getClassSource(BASE_TEST_PACKAGE + "." + testClassName); + assertNotNull(dia); + HighlightedTextWriter writer = new HighlightedTextWriter(new CodeFormatting(), false); + try { + Action.actionsToSource(swf.getUninitializedAs2ClassTraits(), dia, dia.getActions(), "", writer, Utf8Helper.charsetName); + } catch (InterruptedException ex) { + fail(); + } + String actualResult = cleanPCode(writer.toString()); + String expectedResult = cleanPCode("class " + BASE_TEST_PACKAGE + "." + testClassName + "\r\n" + + "{\r\n" + + expectedClassContents + "\r\n" + + "}"); + assertEquals(actualResult, expectedResult); + } + + private DoInitActionTag getClassSource(String classFullName) { + for (Tag t : swf.getTags()) { + if (t instanceof DoInitActionTag) { + DoInitActionTag dia = (DoInitActionTag) t; + String exportName = swf.getExportName(dia.spriteId); + if (exportName != null && exportName.startsWith(SWF.AS2_PKG_PREFIX)) { + String exportClassName = exportName.substring(SWF.AS2_PKG_PREFIX.length()); + if (exportClassName.equals(classFullName)) { + return dia; + } + } + } + } + return null; + } + + @Test + public void testUninitializedFields() { + compareSrc("MyClass", " var v;\n" + + " var v2;\n" + + " var f;\n" + + " var c;\n" + + " var d;\n" + + " static var sv;\n" + + " var init_v = 2;\n" + + " static var sinit_v = 3;\n" + + " function MyClass()\n" + + " {\n" + + " }\n" + + " function testVar()\n" + + " {\n" + + " this.v = 1;\n" + + " }\n" + + " function getV2()\n" + + " {\n" + + " return this.v2;\n" + + " }\n" + + " static function getSV2()\n" + + " {\n" + + " return com.jpexs.MyClass.sv2;\n" + + " }\n" + + " function callF()\n" + + " {\n" + + " this.f();\n" + + " }\n" + + " function constructC()\n" + + " {\n" + + " new this.c();\n" + + " }\n" + + " function deleteD()\n" + + " {\n" + + " delete this.d;\n" + + " }"); + } +} diff --git a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/generators/AS2Generator.java b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/generators/AS2Generator.java index 61a5a3450..b41b6764d 100644 --- a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/generators/AS2Generator.java +++ b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/generators/AS2Generator.java @@ -29,6 +29,7 @@ import com.jpexs.helpers.utf8.Utf8Helper; import java.io.BufferedInputStream; import java.io.FileInputStream; import java.io.FileOutputStream; +import java.util.HashMap; /** * @@ -55,7 +56,7 @@ public class AS2Generator { continue; } HighlightedTextWriter writer = new HighlightedTextWriter(new CodeFormatting(), false); - Action.actionsToSource(doa, doa.getActions(), "", writer, Utf8Helper.charsetName); + Action.actionsToSource(new HashMap<>() /*FIXME*/,doa, doa.getActions(), "", writer, Utf8Helper.charsetName); String src = writer.toString(); if (src.trim().isEmpty()) { doa = null; diff --git a/libsrc/ffdec_lib/testdata/as2/com/jpexs/flash/test/testcases/TestUninitializedFields.as b/libsrc/ffdec_lib/testdata/as2/com/jpexs/flash/test/testcases/TestUninitializedFields.as new file mode 100644 index 000000000..987631590 --- /dev/null +++ b/libsrc/ffdec_lib/testdata/as2/com/jpexs/flash/test/testcases/TestUninitializedFields.as @@ -0,0 +1,9 @@ +class com.jpexs.flash.test.testcases.TestUninitializedFields { + + public var a; + public static var b; + + public function TestUninitializedFields(){ + } + +} diff --git a/libsrc/ffdec_lib/testdata/as2/com/jpexs/flash/test/testcases/TestUninitializedFieldsUsage.as b/libsrc/ffdec_lib/testdata/as2/com/jpexs/flash/test/testcases/TestUninitializedFieldsUsage.as new file mode 100644 index 000000000..02afcbc55 --- /dev/null +++ b/libsrc/ffdec_lib/testdata/as2/com/jpexs/flash/test/testcases/TestUninitializedFieldsUsage.as @@ -0,0 +1,13 @@ +import com.jpexs.flash.test.testcases.TestUninitializedFields; + +class com.jpexs.flash.test.testcases.TestUninitializedFieldsUsage { + + public function test() + { + var v = new TestUninitializedFields(); + trace(v.a); + trace(v.c); + trace(TestUninitializedFields.b); + } + +} diff --git a/libsrc/ffdec_lib/testdata/as2_initfields/as2_initfields.html b/libsrc/ffdec_lib/testdata/as2_initfields/as2_initfields.html new file mode 100644 index 000000000..162da23b0 --- /dev/null +++ b/libsrc/ffdec_lib/testdata/as2_initfields/as2_initfields.html @@ -0,0 +1,49 @@ + + + + as2_initfields + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + Get Adobe Flash player + + + + + +
+ + diff --git a/libsrc/ffdec_lib/testdata/as2_initfields/as2_initfields.swf b/libsrc/ffdec_lib/testdata/as2_initfields/as2_initfields.swf new file mode 100644 index 000000000..7fda9c12d Binary files /dev/null and b/libsrc/ffdec_lib/testdata/as2_initfields/as2_initfields.swf differ diff --git a/libsrc/ffdec_lib/testdata/as2_initfields/as2_initfields/DOMDocument.xml b/libsrc/ffdec_lib/testdata/as2_initfields/as2_initfields/DOMDocument.xml new file mode 100644 index 000000000..ea2694cf4 --- /dev/null +++ b/libsrc/ffdec_lib/testdata/as2_initfields/as2_initfields/DOMDocument.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/libsrc/ffdec_lib/testdata/as2_initfields/as2_initfields/META-INF/metadata.xml b/libsrc/ffdec_lib/testdata/as2_initfields/as2_initfields/META-INF/metadata.xml new file mode 100644 index 000000000..f08b80995 --- /dev/null +++ b/libsrc/ffdec_lib/testdata/as2_initfields/as2_initfields/META-INF/metadata.xml @@ -0,0 +1,55 @@ + + + + + Adobe Flash Professional CS6 - build 481 + 2023-10-07T02:13:54-07:00 + 2023-10-07T02:14:19-07:00 + 2023-10-07T02:14:19-07:00 + + + application/vnd.adobe.fla + + + xmp.iid:D8373DE5F164EE1192A0DE6DFA61E29A + xmp.did:D8373DE5F164EE1192A0DE6DFA61E29A + xmp.did:D8373DE5F164EE1192A0DE6DFA61E29A + + + + created + xmp.iid:D8373DE5F164EE1192A0DE6DFA61E29A + 2023-10-07T02:13:54-07:00 + Adobe Flash Professional CS6 - build 481 + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/libsrc/ffdec_lib/testdata/as2_initfields/as2_initfields/MobileSettings.xml b/libsrc/ffdec_lib/testdata/as2_initfields/as2_initfields/MobileSettings.xml new file mode 100644 index 000000000..e69de29bb diff --git a/libsrc/ffdec_lib/testdata/as2_initfields/as2_initfields/PublishSettings.xml b/libsrc/ffdec_lib/testdata/as2_initfields/as2_initfields/PublishSettings.xml new file mode 100644 index 000000000..583982d73 --- /dev/null +++ b/libsrc/ffdec_lib/testdata/as2_initfields/as2_initfields/PublishSettings.xml @@ -0,0 +1,206 @@ + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + as2_initfields.swf + as2_initfields.exe + as2_initfields.app + as2_initfields.html + as2_initfields.gif + as2_initfields.jpg + as2_initfields.png + as2_initfields.mov + as2_initfields.smil + as2_initfields.swc + + + 0 + 12,0,0,0;11,2,0,0;11,1,0,0;10,3,0,0;10,2,153,0;10,1,52,0;9,0,124,0;8,0,24,0;7,0,14,0;6,0,79,0;5,0,58,0;4,0,32,0;3,0,8,0;2,0,1,12;1,0,0,1; + 1 + 1 + as2_initfields.xfl_content.html + as2_initfields.xfl_alternate.html + 0 + + 550 + 400 + 0 + 0 + 1 + 0 + 0 + 1 + 1 + 4 + 0 + 0 + 1 + 0 + C:\Users\MyUser\AppData\Local\Adobe\Flash CS6\en_US\Configuration\HTML\Default.html + 1 + + + + + 0 + 0 + 0 + 80 + 0 + 0 + 7 + 0 + 7 + 0 + 15 + FlashPlayer11.2 + 2 + 1 + + . + CONFIG::FLASH_AUTHORING="true"; + 0 + + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + 2 + 4 + 4096 + AS3 + 1 + 1 + 0 + 15 + 1 + 0 + 4102 + rsl + wrap + $(AppConfig)/ActionScript 3.0/rsls/loader_animation.swf + + + $(AppConfig)/ActionScript 3.0/libs + merge + + + $(AppConfig)/ActionScript 3.0/libs/11.0/textLayout.swc + rsl + http://fpdownload.adobe.com/pub/swz/tlf/2.0.0.232/textLayout_2.0.0.232.swz + http://fpdownload.adobe.com/pub/swz/crossdomain.xml + textLayout_2.0.0.232.swz + + + + + $(AppConfig)/ActionScript 3.0/libs/11.0/textLayout.swc + + http://fpdownload.adobe.com/pub/swz/tlf/2.0.0.232/textLayout_2.0.0.232.swz + http://fpdownload.adobe.com/pub/swz/crossdomain.xml + textLayout_2.0.0.232.swz + + + + + 550 + 400 + 0 + 4718592 + 0 + 80 + 1 + + + 1 + 0 + 1 + 0 + 0 + 100000 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + + + 550 + 400 + 0 + 1 + 1 + + 1 + 0 + 1 + 0 + 0 + + 128 + + + 255 + + + + 550 + 400 + 1 + 0 + 0 + 1 + 0 + 0 + 1 + + + + 24-bit with Alpha + 255 + + + + 550 + 400 + 1 + 0 + + + 00000000 + 0 + 0 + 0 + 0 + 1 + + + \ No newline at end of file diff --git a/libsrc/ffdec_lib/testdata/as2_initfields/as2_initfields/as2_initfields.xfl b/libsrc/ffdec_lib/testdata/as2_initfields/as2_initfields/as2_initfields.xfl new file mode 100644 index 000000000..860a820ec --- /dev/null +++ b/libsrc/ffdec_lib/testdata/as2_initfields/as2_initfields/as2_initfields.xfl @@ -0,0 +1 @@ +PROXY-CS5 \ No newline at end of file diff --git a/libsrc/ffdec_lib/testdata/as2_initfields/as2_initfields/bin/SymDepend.cache b/libsrc/ffdec_lib/testdata/as2_initfields/as2_initfields/bin/SymDepend.cache new file mode 100644 index 000000000..3468840d4 Binary files /dev/null and b/libsrc/ffdec_lib/testdata/as2_initfields/as2_initfields/bin/SymDepend.cache differ diff --git a/libsrc/ffdec_lib/testdata/as2_initfields/com/jpexs/MyClass.as b/libsrc/ffdec_lib/testdata/as2_initfields/com/jpexs/MyClass.as new file mode 100644 index 000000000..05ba66503 --- /dev/null +++ b/libsrc/ffdec_lib/testdata/as2_initfields/com/jpexs/MyClass.as @@ -0,0 +1,39 @@ +class com.jpexs.MyClass { + var v; + static var sv; + var v2; + static var sv2; + + var f; + + var c; + + var d; + + var init_v = 2; + static var sinit_v = 3; + + function testVar() { + this.v = 1; + } + + function getV2() { + return v2; + } + + static function getSV2() { + return sv2; + } + + function callF() { + f(); + } + + function constructC() { + new c(); + } + + function deleteD() { + delete d; + } +} diff --git a/src/com/jpexs/decompiler/flash/gui/action/ActionPanel.java b/src/com/jpexs/decompiler/flash/gui/action/ActionPanel.java index 4c8ffa6ff..6767318d4 100644 --- a/src/com/jpexs/decompiler/flash/gui/action/ActionPanel.java +++ b/src/com/jpexs/decompiler/flash/gui/action/ActionPanel.java @@ -23,6 +23,7 @@ import com.jpexs.decompiler.flash.action.Action; import com.jpexs.decompiler.flash.action.ActionGraph; import com.jpexs.decompiler.flash.action.ActionList; import com.jpexs.decompiler.flash.action.ConstantPoolTooBigException; +import com.jpexs.decompiler.flash.action.as2.Trait; import com.jpexs.decompiler.flash.action.deobfuscation.BrokenScriptDetector; import com.jpexs.decompiler.flash.action.parser.ActionParseException; import com.jpexs.decompiler.flash.action.parser.pcode.ASMParser; @@ -1103,7 +1104,7 @@ public class ActionPanel extends JPanel implements SearchListener(), new HashMap<>(), new HashMap<>(), SWF.DEFAULT_VERSION, Utf8Helper.charsetName), ""); + GraphDialog gf = new GraphDialog(mainPanel.getMainFrame().getWindow(), new ActionGraph(new HashMap<>(), this.src.getScriptName(), insideDoInitAction, false, lastCode, new HashMap<>(), new HashMap<>(), new HashMap<>(), SWF.DEFAULT_VERSION, Utf8Helper.charsetName), ""); gf.setVisible(true); } catch (InterruptedException ex) { logger.log(Level.SEVERE, null, ex); diff --git a/test/com/jpexs/decompiler/flash/gui/FlashPlayerTest.java b/test/com/jpexs/decompiler/flash/gui/FlashPlayerTest.java index bfbe83772..f17c88dc9 100644 --- a/test/com/jpexs/decompiler/flash/gui/FlashPlayerTest.java +++ b/test/com/jpexs/decompiler/flash/gui/FlashPlayerTest.java @@ -560,7 +560,7 @@ public class FlashPlayerTest { task.actions = newActions; List output = new ArrayList<>(); - ActionLocalData localData = new ActionLocalData(null, false); + ActionLocalData localData = new ActionLocalData(null, false, new HashMap<>()); TranslateStack stack = new TranslateStack(""); for (Action a : newActions) { a.translate(localData, stack, output, Graph.SOP_USE_STATIC, "");