Fixed #223 AS2 Detecting uninitialized class fields

This commit is contained in:
Jindra Petřík
2023-10-16 09:36:06 +02:00
parent 439b9b7ef8
commit 5141263960
141 changed files with 2811 additions and 171 deletions
@@ -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<String, Map<String, com.jpexs.decompiler.flash.action.as2.Trait>> 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<MyEntry<DirectValueActionItem, ConstantPool>> variables, List<GraphSourceItem> functions, HashMap<DirectValueActionItem, ConstantPool> strings, HashMap<DirectValueActionItem, String> 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<GraphTargetItem> 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<ABCContainerTag> 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<String, Map<String, com.jpexs.decompiler.flash.action.as2.Trait>> getUninitializedAs2ClassTraits() {
if (uninitializedAs2ClassTraits == null) {
calculateAs2UninitializedClassTraits();
}
return uninitializedAs2ClassTraits;
}
}
@@ -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<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) throws InterruptedException {
public void translate(Map<String, Map<String, Trait>> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartIns, TranslateStack stack, List<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) throws InterruptedException {
}
@Override
@@ -853,12 +855,12 @@ public abstract class Action implements GraphSourceItem {
return -1;
}
public static List<GraphTargetItem> actionsToTree(boolean insideDoInitAction, boolean insideFunction, List<Action> 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<GraphTargetItem> actionsToTree(Map<String, Map<String, Trait>> uninitializedClassTraits, boolean insideDoInitAction, boolean insideFunction, List<Action> 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<Action> 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<String, Map<String, Trait>> uninitializedClassTraits, final ASMSource asm, final List<Action> 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<Action> actions, final String path, GraphTextWriter writer, String charset, List<ActionTreeOperation> treeOperations) throws InterruptedException {
public static GraphTextWriter actionsToSource(Map<String, Map<String, Trait>> uninitializedClassTraits, final ASMSource asm, final List<Action> actions, final String path, GraphTextWriter writer, String charset, List<ActionTreeOperation> treeOperations) throws InterruptedException {
writer.suspendMeasure();
List<GraphTargetItem> tree = null;
Throwable convertException = null;
@@ -886,7 +888,7 @@ public abstract class Action implements GraphSourceItem {
public List<GraphTargetItem> 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<GraphTargetItem> tree = actionsToTree(insideDoInitAction, false, new HashMap<>(), new HashMap<>(), new HashMap<>(), actions, version, staticOperation, path, charset);
List<GraphTargetItem> 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<GraphTargetItem> actionsToTree(boolean insideDoInitAction, boolean insideFunction, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, List<Action> actions, int version, int staticOperation, String path, String charset) throws InterruptedException {
public static List<GraphTargetItem> actionsToTree(Map<String, Map<String, Trait>> uninitializedClassTraits, boolean insideDoInitAction, boolean insideFunction, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, List<Action> actions, int version, int staticOperation, String path, String charset) throws InterruptedException {
HashMap<String, GraphTargetItem> variablesBackup = new LinkedHashMap<>(variables);
HashMap<String, GraphTargetItem> 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<GraphTargetItem> 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);
@@ -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<String, Map<String, Trait>> uninitializedClassTraits;
public ActionGraph(String path, boolean insideDoInitAction, boolean insideFunction, List<Action> code, HashMap<Integer, String> registerNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int version, String charset) {
public ActionGraph(Map<String, Map<String, Trait>> uninitializedClassTraits, String path, boolean insideDoInitAction, boolean insideFunction, List<Action> code, HashMap<Integer, String> registerNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> 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<String, Map<String, Trait>> 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<GraphTargetItem> translateViaGraph(SecondPassData secondPassData, boolean insideDoInitAction, boolean insideFunction, HashMap<Integer, String> registerNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, List<Action> 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<GraphTargetItem> translateViaGraph(Map<String, Map<String, Trait>> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, boolean insideFunction, HashMap<Integer, String> registerNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, List<Action> 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<GraphTargetItem> 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;
@@ -562,7 +562,7 @@ public class ActionList extends ArrayList<Action> {
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<Action> {
Logger.getLogger(ActionList.class.getName()).log(Level.SEVERE, null, ex);
}
return null;
}
}*/
}
@@ -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<String, Map<String, Trait>> uninitializedClassTraits;
public final HashMap<Integer, String> regNames;
public final HashMap<String, GraphTargetItem> 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<String, Map<String, Trait>> 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<Integer, String> regNames) {
public ActionLocalData(SecondPassData secondPassData, boolean insideDoInitAction, HashMap<Integer, String> regNames, Map<String, Map<String, Trait>> uninitializedClassTraits) {
this.regNames = regNames;
this.secondPassData = secondPassData;
variables = new HashMap<>();
functions = new HashMap<>();
this.insideDoInitAction = insideDoInitAction;
this.uninitializedClassTraits = uninitializedClassTraits;
}
public ActionLocalData(Set<GraphPart> switchParts, SecondPassData secondPassData, boolean insideDoInitAction, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions) {
public ActionLocalData(Set<GraphPart> switchParts, SecondPassData secondPassData, boolean insideDoInitAction, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, Map<String, Map<String, Trait>> uninitializedClassTraits) {
this.allSwitchParts = switchParts;
this.regNames = regNames;
this.variables = variables;
this.functions = functions;
this.insideDoInitAction = insideDoInitAction;
this.secondPassData = secondPassData;
this.uninitializedClassTraits = uninitializedClassTraits;
}
}
@@ -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<GraphTargetItem> parts, HashMap<String, GraphTargetItem> variables, int partsPos, int commandsStartPos, int commandsEndPos, List<GraphTargetItem> commands, List<String> classNamePath, String scriptPath) {
private boolean checkClassContent(Map<String, Map<String, Trait>> uninitializedClassTraits, List<GraphTargetItem> parts, HashMap<String, GraphTargetItem> variables, int partsPos, int commandsStartPos, int commandsEndPos, List<GraphTargetItem> commands, List<String> 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<GraphTargetItem> commands, HashMap<String, GraphTargetItem> variables, int pos, String scriptPath) {
private boolean checkIfVariants(Map<String, Map<String, Trait>> uninitializedClassTraits, List<GraphTargetItem> commands, HashMap<String, GraphTargetItem> variables, int pos, String scriptPath) {
expandTernars(commands);
@@ -820,12 +833,12 @@ public class ActionScript2ClassDetector {
List<String> 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<GraphTargetItem> commands, HashMap<String, GraphTargetItem> variables, String scriptPath) {
public void checkClass(Map<String, Map<String, Trait>> uninitializedClassTraits, List<GraphTargetItem> commands, HashMap<String, GraphTargetItem> variables, String scriptPath) {
List<GraphTargetItem> 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;
}
}
@@ -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<String, Map<String,Trait>> classToTraits = new HashMap<>();
private static final Map<String, List<String>> 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<String, Trait> getClassTraits(String className, boolean withInheritance) {
initClasses();
Map<String, Trait> 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<String, Map<String, Trait>> getClassToTraits() {
initClasses();
return classToTraits;
}
public static Map<String, List<String>> getClassInheritance() {
initClasses();
return classInheritance;
}
public static void main(String[] args) {
Map<String, Trait> 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));
}
}
@@ -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";
}
}
@@ -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();
}
@@ -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<String> getMembersPath(GraphTargetItem item) {
List<String> 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<String> 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<String> 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<String> path = getMembersPath(objectName);
if (path == null) {
return null;
}
path.add(currentMemberName);
return path;
}
private boolean containsTrait(Map<String, Map<String, Trait>> classTraits, Map<String, List<String>> 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<String, Map<String, Trait>> calculateAs2UninitializedClassTraits(SWF swf) {
if (swf.isAS3()) {
return new HashMap<>();
}
final Map<String, Map<String, Trait>> result = new LinkedHashMap<>();
Map<String, ASMSource> asms = swf.getASMs(false);
List<ASMSource> classesAsms = new ArrayList<>();
final Map<String, Map<String, Trait>> classTraits = new LinkedHashMap<>(ActionScript2Classes.getClassToTraits());
final Map<String, List<String>> 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<GraphTargetItem> 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 <cai.traits.size(); i++) {
MyEntry<GraphTargetItem, GraphTargetItem> 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<GraphTargetItem> 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 <cai.traits.size(); i++) {
MyEntry<GraphTargetItem, GraphTargetItem> 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<String> path = getFullPath(item);
if (path != null) {
List<String> 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<GraphTargetItem> 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<String> path = getFullPath(item);
if (path != null) {
List<String> 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;
}
}
@@ -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;
}
}
File diff suppressed because it is too large Load Diff
@@ -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<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
public void translate(Map<String, Map<String, Trait>> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartItem, TranslateStack stack, List<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
long numArgs = popLong(stack);
GraphTargetItem command = stack.pop();
List<GraphTargetItem> args = new ArrayList<>();
@@ -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<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
public void translate(Map<String, Map<String, Trait>> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartItem, TranslateStack stack, List<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
output.add(new StrictModeActionItem(this, lineStartItem, mode));
}
}
@@ -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<GraphTargetItem, GraphTargetItem> en: traits) {
GraphTargetItem value = en.getValue();
if (value != null) {
visitor.visit(value);
}
}
}
}
@@ -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<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
public void translate(Map<String, Map<String, Trait>> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartItem, TranslateStack stack, List<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
//output.add(new SimpleActionTreeItem(this, "end()"));
}
}
@@ -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<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
public void translate(Map<String, Map<String, Trait>> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartItem, TranslateStack stack, List<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
//output.add(new SimpleActionTreeItem(this, "nop();"));
}
}
@@ -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<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
public void translate(Map<String, Map<String, Trait>> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartItem, TranslateStack stack, List<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
}
}
@@ -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<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
public void translate(Map<String, Map<String, Trait>> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
String fsCommandPrefix = "FSCommand:";
if (urlString.startsWith(fsCommandPrefix) && targetString.isEmpty()) {
String command = urlString.substring(fsCommandPrefix.length());
@@ -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<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
public void translate(Map<String, Map<String, Trait>> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
output.add(new GotoLabelActionItem(this, lineStartAction, label));
}
}
@@ -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<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
public void translate(Map<String, Map<String, Trait>> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
output.add(new GotoFrameActionItem(this, lineStartAction, frame));
}
}
@@ -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<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
public void translate(Map<String, Map<String, Trait>> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
output.add(new NextFrameActionItem(this, lineStartAction));
}
}
@@ -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<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
public void translate(Map<String, Map<String, Trait>> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> 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));
@@ -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<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
public void translate(Map<String, Map<String, Trait>> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
output.add(new PrevFrameActionItem(this, lineStartAction));
}
}
@@ -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<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
public void translate(Map<String, Map<String, Trait>> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
output.add(new SetTargetActionItem(this, lineStartAction, targetName));
}
}
@@ -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<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
public void translate(Map<String, Map<String, Trait>> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
output.add(new StopActionItem(this, lineStartAction));
}
}
@@ -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<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
public void translate(Map<String, Map<String, Trait>> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
output.add(new StopAllSoundsActionItem(this, lineStartAction));
}
}
@@ -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<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
public void translate(Map<String, Map<String, Trait>> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
output.add(new ToggleHighQualityActionItem(this, lineStartAction));
}
}
@@ -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<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) throws InterruptedException {
public void translate(Map<String, Map<String, Trait>> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) throws InterruptedException {
GraphTargetItem frameTi = new DirectValueActionItem(null, null, 0, (Long) ((long) frame), new ArrayList<>());
List<GraphTargetItem> body;
HashMap<String, GraphTargetItem> variablesBackup = new LinkedHashMap<>(variables);
HashMap<String, GraphTargetItem> 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));
}
@@ -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<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
public void translate(Map<String, Map<String, Trait>> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
GraphTargetItem a = stack.pop();
GraphTargetItem b = stack.pop();
stack.push(new AddActionItem(this, lineStartAction, b, a, false));
@@ -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<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
public void translate(Map<String, Map<String, Trait>> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
GraphTargetItem a = stack.pop();
GraphTargetItem b = stack.pop();
stack.push(new AndActionItem(this, lineStartAction, b, a));
@@ -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<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
public void translate(Map<String, Map<String, Trait>> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
GraphTargetItem a = stack.pop();
stack.push(new AsciiToCharActionItem(this, lineStartAction, a));
}
@@ -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<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
public void translate(Map<String, Map<String, Trait>> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
output.add(new CallActionItem(this, lineStartAction, stack.pop()));
}
@@ -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<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
public void translate(Map<String, Map<String, Trait>> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
GraphTargetItem a = stack.pop();
stack.push(new CharToAsciiActionItem(this, lineStartAction, a));
}
@@ -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<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
public void translate(Map<String, Map<String, Trait>> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
GraphTargetItem depth = stack.pop();
GraphTargetItem source = stack.pop();
GraphTargetItem target = stack.pop();
@@ -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<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
public void translate(Map<String, Map<String, Trait>> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
GraphTargetItem a = stack.pop();
GraphTargetItem b = stack.pop();
stack.push(new DivideActionItem(this, lineStartAction, b, a));
@@ -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<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
public void translate(Map<String, Map<String, Trait>> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
output.add(new StopDragActionItem(this, lineStartAction));
}
}
@@ -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<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
public void translate(Map<String, Map<String, Trait>> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
GraphTargetItem a = stack.pop();
GraphTargetItem b = stack.pop();
stack.push(new EqActionItem(this, lineStartAction, b, a, false));
@@ -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<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
public void translate(Map<String, Map<String, Trait>> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
GraphTargetItem index = stack.pop();
GraphTargetItem target = stack.pop();
int indexInt = 0;
@@ -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<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
public void translate(Map<String, Map<String, Trait>> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
stack.push(new GetTimeActionItem(this, lineStartAction));
}
@@ -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<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
public void translate(Map<String, Map<String, Trait>> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
GraphTargetItem targetString = stack.pop();
GraphTargetItem urlString = stack.pop();
Integer num = null;
@@ -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<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
public void translate(Map<String, Map<String, Trait>> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
GraphTargetItem name = stack.pop();
String nameStr;
if (name instanceof DirectValueActionItem) {
@@ -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<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
public void translate(Map<String, Map<String, Trait>> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
GraphTargetItem frame = stack.pop();
output.add(new GotoFrame2ActionItem(this, lineStartAction, frame, sceneBiasFlag, playFlag, sceneBias));
}
@@ -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<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
public void translate(Map<String, Map<String, Trait>> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
GraphTargetItem a = stack.pop();
GraphTargetItem b = stack.pop();
stack.push(new LtActionItem(this, lineStartAction, b, a, false));
@@ -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<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
public void translate(Map<String, Map<String, Trait>> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
GraphTargetItem a = stack.pop();
stack.push(new MBAsciiToCharActionItem(this, lineStartAction, a));
}
@@ -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<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
public void translate(Map<String, Map<String, Trait>> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
GraphTargetItem a = stack.pop();
stack.push(new MBCharToAsciiActionItem(this, lineStartAction, a));
}
@@ -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<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
public void translate(Map<String, Map<String, Trait>> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
GraphTargetItem count = stack.pop();
GraphTargetItem index = stack.pop();
GraphTargetItem value = stack.pop();
@@ -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<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
public void translate(Map<String, Map<String, Trait>> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
GraphTargetItem a = stack.pop();
stack.push(new MBStringLengthActionItem(this, lineStartAction, a));
}
@@ -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<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
public void translate(Map<String, Map<String, Trait>> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
GraphTargetItem a = stack.pop();
GraphTargetItem b = stack.pop();
stack.push(new MultiplyActionItem(this, lineStartAction, b, a));
@@ -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<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
public void translate(Map<String, Map<String, Trait>> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
GraphTargetItem a = stack.pop();
stack.push(a.invert(this));
}
@@ -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<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
public void translate(Map<String, Map<String, Trait>> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
GraphTargetItem a = stack.pop();
GraphTargetItem b = stack.pop();
stack.push(new OrActionItem(this, lineStartAction, b, a));
@@ -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<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
public void translate(Map<String, Map<String, Trait>> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
GraphTargetItem val = stack.pop();
output.add(val);
}
@@ -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<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
public void translate(Map<String, Map<String, Trait>> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
int pos = 0;
for (Object o : values) {
if (o instanceof ConstantIndex) {
@@ -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<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
public void translate(Map<String, Map<String, Trait>> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
GraphTargetItem maximum = stack.pop();
stack.push(new RandomNumberActionItem(this, lineStartAction, maximum));
}
@@ -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<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
public void translate(Map<String, Map<String, Trait>> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
GraphTargetItem target = stack.pop();
output.add(new RemoveSpriteActionItem(this, lineStartAction, target));
}
@@ -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<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
public void translate(Map<String, Map<String, Trait>> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
GraphTargetItem value = stack.pop().getThroughDuplicate();
GraphTargetItem index = stack.pop().getThroughDuplicate();
GraphTargetItem target = stack.pop().getThroughDuplicate();
@@ -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<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
public void translate(Map<String, Map<String, Trait>> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
GraphTargetItem target = stack.pop();
output.add(new SetTarget2ActionItem(this, lineStartAction, target));
}
@@ -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<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
public void translate(Map<String, Map<String, Trait>> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
GraphTargetItem value = stack.pop().getThroughDuplicate();
GraphTargetItem name = stack.pop();
String nameStr;
@@ -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<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
public void translate(Map<String, Map<String, Trait>> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
GraphTargetItem target = stack.pop();
GraphTargetItem lockCenter = stack.pop();
GraphTargetItem constrain = stack.pop();
@@ -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<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
public void translate(Map<String, Map<String, Trait>> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
GraphTargetItem a = stack.pop();
GraphTargetItem b = stack.pop();
stack.push(new StringAddActionItem(this, lineStartAction, b, a));
@@ -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<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
public void translate(Map<String, Map<String, Trait>> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
GraphTargetItem a = stack.pop();
GraphTargetItem b = stack.pop();
stack.push(new StringEqActionItem(this, lineStartAction, b, a));
@@ -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<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
public void translate(Map<String, Map<String, Trait>> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
GraphTargetItem count = stack.pop();
GraphTargetItem index = stack.pop();
GraphTargetItem value = stack.pop();
@@ -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<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
public void translate(Map<String, Map<String, Trait>> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
GraphTargetItem a = stack.pop();
stack.push(new StringLengthActionItem(this, lineStartAction, a));
}
@@ -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<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
public void translate(Map<String, Map<String, Trait>> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
GraphTargetItem a = stack.pop();
GraphTargetItem b = stack.pop();
stack.push(new StringLtActionItem(this, lineStartAction, b, a));
@@ -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<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
public void translate(Map<String, Map<String, Trait>> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
GraphTargetItem a = stack.pop();
GraphTargetItem b = stack.pop();
stack.push(new SubtractActionItem(this, lineStartAction, b, a));
@@ -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<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
public void translate(Map<String, Map<String, Trait>> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
GraphTargetItem a = stack.pop();
stack.push(new ToIntegerActionItem(this, lineStartAction, a));
}
@@ -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<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
public void translate(Map<String, Map<String, Trait>> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
GraphTargetItem value = stack.pop();
output.add(new TraceActionItem(this, lineStartAction, value));
}
@@ -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<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) throws InterruptedException {
public void translate(Map<String, Map<String, Trait>> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) throws InterruptedException {
GraphTargetItem frame = stack.pop();
List<GraphTargetItem> body;
HashMap<String, GraphTargetItem> variablesBackup = new LinkedHashMap<>(variables);
HashMap<String, GraphTargetItem> 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));
}
@@ -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<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
public void translate(Map<String, Map<String, Trait>> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
GraphTargetItem a = stack.pop();
GraphTargetItem b = stack.pop();
stack.push(new AddActionItem(this, lineStartAction, b, a, true));
@@ -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<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
public void translate(Map<String, Map<String, Trait>> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
GraphTargetItem a = stack.pop();
GraphTargetItem b = stack.pop();
stack.push(new BitAndActionItem(this, lineStartAction, b, a));
@@ -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<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
public void translate(Map<String, Map<String, Trait>> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
GraphTargetItem a = stack.pop();
GraphTargetItem b = stack.pop();
stack.push(new LShiftActionItem(this, lineStartAction, b, a));
@@ -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<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
public void translate(Map<String, Map<String, Trait>> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
GraphTargetItem a = stack.pop();
GraphTargetItem b = stack.pop();
stack.push(new BitOrActionItem(this, lineStartAction, b, a));
@@ -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<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
public void translate(Map<String, Map<String, Trait>> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
GraphTargetItem a = stack.pop();
GraphTargetItem b = stack.pop();
stack.push(new RShiftActionItem(this, lineStartAction, b, a));
@@ -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<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
public void translate(Map<String, Map<String, Trait>> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
GraphTargetItem a = stack.pop();
GraphTargetItem b = stack.pop();
stack.push(new URShiftActionItem(this, lineStartAction, b, a));
@@ -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<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
public void translate(Map<String, Map<String, Trait>> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
GraphTargetItem a = stack.pop();
GraphTargetItem b = stack.pop();
stack.push(new BitXorActionItem(this, lineStartAction, b, a));
@@ -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<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
public void translate(Map<String, Map<String, Trait>> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
GraphTargetItem functionName = stack.pop();
long numArgs = popLong(stack);
List<GraphTargetItem> args = new ArrayList<>();
@@ -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<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
public void translate(Map<String, Map<String, Trait>> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
GraphTargetItem methodName = stack.pop();
GraphTargetItem scriptObject = stack.pop();
long numArgs = popLong(stack);
@@ -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<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
public void translate(Map<String, Map<String, Trait>> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
}
}
@@ -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<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
public void translate(Map<String, Map<String, Trait>> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
GraphTargetItem a = stack.pop();
stack.push(new DecrementActionItem(this, lineStartAction, a));
}
@@ -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<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
public void translate(Map<String, Map<String, Trait>> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
}
@Override
@@ -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<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
public void translate(Map<String, Map<String, Trait>> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
GraphTargetItem value = stack.pop();
GraphTargetItem name = stack.pop();
String nameStr;
@@ -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<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
public void translate(Map<String, Map<String, Trait>> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
GraphTargetItem name = stack.pop();
output.add(new DefineLocalActionItem(this, lineStartAction, name, null));
}
@@ -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<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
public void translate(Map<String, Map<String, Trait>> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
GraphTargetItem propertyName = stack.pop();
GraphTargetItem object = stack.pop();
@@ -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<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
public void translate(Map<String, Map<String, Trait>> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
GraphTargetItem propertyName = stack.pop();
stack.push(new DeleteActionItem(this, lineStartAction, null, propertyName));
@@ -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<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
public void translate(Map<String, Map<String, Trait>> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
GraphTargetItem object = stack.pop();
stack.push(new EnumeratedValueActionItem());
output.add(new EnumerateActionItem(this, lineStartAction, object));
@@ -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<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
public void translate(Map<String, Map<String, Trait>> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
GraphTargetItem a = stack.pop();
GraphTargetItem b = stack.pop();
stack.push(new EqActionItem(this, lineStartAction, b, a, true));
@@ -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<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
public void translate(Map<String, Map<String, Trait>> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
GraphTargetItem memberName = stack.pop();
GraphTargetItem object = stack.pop();
stack.push(new GetMemberActionItem(this, lineStartAction, object, memberName));
@@ -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<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
public void translate(Map<String, Map<String, Trait>> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
GraphTargetItem a = stack.pop();
stack.push(new IncrementActionItem(this, lineStartAction, a));
}
@@ -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<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
public void translate(Map<String, Map<String, Trait>> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
long numArgs = popLong(stack);
List<GraphTargetItem> args = new ArrayList<>();
for (int l = 0; l < numArgs; l++) {
@@ -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<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
public void translate(Map<String, Map<String, Trait>> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
long numArgs = popLong(stack);
List<GraphTargetItem> values = new ArrayList<>();
List<GraphTargetItem> names = new ArrayList<>();
@@ -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<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
public void translate(Map<String, Map<String, Trait>> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
GraphTargetItem a = stack.pop();
GraphTargetItem b = stack.pop();
stack.push(new LtActionItem(this, lineStartAction, b, a, true));
@@ -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<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
public void translate(Map<String, Map<String, Trait>> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
GraphTargetItem a = stack.pop();
GraphTargetItem b = stack.pop();
stack.push(new ModuloActionItem(this, lineStartAction, b, a));
@@ -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<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
public void translate(Map<String, Map<String, Trait>> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
GraphTargetItem methodName = stack.pop();
GraphTargetItem scriptObject = stack.pop();
long numArgs = popLong(stack);
@@ -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<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
public void translate(Map<String, Map<String, Trait>> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
GraphTargetItem objectName = stack.pop();
long numArgs = popLong(stack);
List<GraphTargetItem> args = new ArrayList<>();
@@ -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<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
public void translate(Map<String, Map<String, Trait>> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
GraphTargetItem value = stack.peek();
stack.push(new DuplicateItem(this, lineStartAction, value));
value.getMoreSrc().add(new GraphSourceItemPos(this, 0));
@@ -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<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
public void translate(Map<String, Map<String, Trait>> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
GraphTargetItem value = stack.pop();
output.add(new ReturnActionItem(this, lineStartAction, value));
}
@@ -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<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
public void translate(Map<String, Map<String, Trait>> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
GraphTargetItem value = stack.pop().getThroughDuplicate();
GraphTargetItem memberName = stack.pop();
GraphTargetItem object = stack.pop();
@@ -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<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
public void translate(Map<String, Map<String, Trait>> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
GraphTargetItem a = stack.pop();
GraphTargetItem b = stack.pop();
stack.push(a);
@@ -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<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
public void translate(Map<String, Map<String, Trait>> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
GraphTargetItem value = stack.pop();
RegisterNumber rn = new RegisterNumber(registerNumber);
if (regNames.containsKey(registerNumber)) {
@@ -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<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
public void translate(Map<String, Map<String, Trait>> uninitializedClassTraits, SecondPassData secondPassData, boolean insideDoInitAction, GraphSourceItem lineStartAction, TranslateStack stack, List<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
GraphTargetItem object = stack.pop();
stack.push(new TargetPathActionItem(this, lineStartAction, object));
}

Some files were not shown because too many files have changed in this diff Show More