From f73f2669c07f325a59b324c9fddaf6537475d316 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Mon, 11 Nov 2024 20:32:15 +0100 Subject: [PATCH] Harman air - Null coalesce and nullish member access operators - WIP --- .../jpexs/decompiler/flash/BaseLocalData.java | 5 ++ .../src/com/jpexs/decompiler/flash/SWF.java | 8 ++- .../decompiler/flash/abc/AVM2LocalData.java | 1 + .../decompiler/flash/abc/ScriptPack.java | 30 +++++--- .../decompiler/flash/abc/avm2/AVM2Code.java | 16 +++-- .../decompiler/flash/abc/avm2/CodeStats.java | 2 +- .../flash/abc/avm2/graph/AVM2Graph.java | 50 +++++++++++++- .../flash/abc/avm2/graph/AVM2GraphSource.java | 2 +- .../instructions/InstructionDefinition.java | 4 +- .../construction/NewClassIns.java | 2 +- .../flash/abc/avm2/model/AVM2Item.java | 13 ++-- .../abc/avm2/model/CallPropertyAVM2Item.java | 2 +- .../abc/avm2/model/ConstructPropAVM2Item.java | 2 +- .../abc/avm2/model/FullMultinameAVM2Item.java | 4 +- .../abc/avm2/model/GetPropertyAVM2Item.java | 7 +- .../abc/avm2/model/InitPropertyAVM2Item.java | 2 +- .../abc/avm2/model/NewFunctionAVM2Item.java | 4 +- .../abc/avm2/model/NullCoalesceAVM2Item.java | 44 ++++++++++++ .../abc/avm2/model/SetPropertyAVM2Item.java | 2 +- .../avm2/model/TraitSlotConstAVM2Item.java | 1 + .../operations/DeletePropertyAVM2Item.java | 2 +- .../parser/script/AVM2SourceGenerator.java | 2 +- .../flash/abc/types/MethodBody.java | 19 ++--- .../flash/abc/types/traits/Trait.java | 26 ++++--- .../flash/abc/types/traits/TraitClass.java | 65 +++++------------- .../flash/abc/types/traits/TraitFunction.java | 52 +++----------- .../types/traits/TraitMethodGetterSetter.java | 53 +++----------- .../abc/types/traits/TraitSlotConst.java | 33 +++------ .../flash/abc/types/traits/Traits.java | 23 ++++--- .../multinames/ConstVarMultinameUsage.java | 12 ++-- .../multinames/MethodMultinameUsage.java | 12 ++-- .../exporters/script/AS3ScriptExporter.java | 22 +++--- .../script/PcodeGraphVizExporter.java | 2 +- .../decompiler/flash/xfl/XFLConverter.java | 14 ++-- .../src/com/jpexs/decompiler/graph/Graph.java | 13 +++- .../decompiler/graph/GraphTargetItem.java | 10 +-- .../decompiler/graph/model/LocalData.java | 11 ++- .../flash/ActionScript3DecompileTestBase.java | 4 +- .../flash/generators/AS3Generator.java | 4 +- .../testdata/as3_harman/bin/harman.swf | Bin 56366 -> 56699 bytes .../as3_harman/bin/harman_encrypted.swf | Bin 56428 -> 56748 bytes .../ffdec_lib/testdata/as3_harman/src/Main.as | 4 +- .../testdata/as3_harman/src/Operators.as | 20 ++++++ .../flash/gui/abc/ASMSourceEditorPane.java | 2 +- .../flash/gui/abc/TraitsListItem.java | 8 +-- 45 files changed, 341 insertions(+), 273 deletions(-) create mode 100644 libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/NullCoalesceAVM2Item.java create mode 100644 libsrc/ffdec_lib/testdata/as3_harman/src/Operators.as diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/BaseLocalData.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/BaseLocalData.java index 898c7bb3f..952e49d84 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/BaseLocalData.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/BaseLocalData.java @@ -43,6 +43,11 @@ public abstract class BaseLocalData { * Second pass data */ public SecondPassData secondPassData = null; + + /** + * SWF version + */ + public int swfVersion = -1; /** * Constructor. diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWF.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWF.java index a4de7c88e..481083024 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWF.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWF.java @@ -5916,7 +5916,11 @@ public final class SWF implements SWFContainerItem, Timelined, Openable { try { List callStack = new ArrayList<>(); callStack.add(documentPack.abc.findBody(mi)); - documentPack.abc.findBody(mi).convert(callStack, getAbcIndex(), new ConvertData(), "??", ScriptExportMode.AS, true, mi, documentPack.scriptIndex, cindex, documentPack.abc, t, new ScopeStack(), 0, new NulWriter(), new ArrayList<>(), new Traits(), true, new HashSet<>()); + int swfVersion = -1; + if (documentPack.getOpenable() instanceof SWF) { + swfVersion = ((SWF) documentPack.getOpenable()).version; + } + documentPack.abc.findBody(mi).convert(swfVersion, callStack, getAbcIndex(), new ConvertData(), "??", ScriptExportMode.AS, true, mi, documentPack.scriptIndex, cindex, documentPack.abc, t, new ScopeStack(), 0, new NulWriter(), new ArrayList<>(), new Traits(), true, new HashSet<>()); List infos = documentPack.abc.findBody(mi).convertedItems; if (!infos.isEmpty()) { if (infos.get(0) instanceof IfItem) { @@ -5994,7 +5998,7 @@ public final class SWF implements SWFContainerItem, Timelined, Openable { int cinit = p.abc.class_info.get(ci).cinit_index; callStack = new ArrayList<>(); callStack.add(p.abc.findBody(cinit)); - p.abc.findBody(cinit).convert(callStack, getAbcIndex(), new ConvertData(), "??", ScriptExportMode.AS, true, cinit, p.scriptIndex, cindex, p.abc, t, new ScopeStack(), 0, new NulWriter(), new ArrayList<>(), new Traits(), true, new HashSet<>()); + p.abc.findBody(cinit).convert(swfVersion, callStack, getAbcIndex(), new ConvertData(), "??", ScriptExportMode.AS, true, cinit, p.scriptIndex, cindex, p.abc, t, new ScopeStack(), 0, new NulWriter(), new ArrayList<>(), new Traits(), true, new HashSet<>()); List cinitBody = p.abc.findBody(cinit).convertedItems; for (GraphTargetItem cit : cinitBody) { if (cit instanceof SetPropertyAVM2Item) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/AVM2LocalData.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/AVM2LocalData.java index 73141dcb8..3acc0dfe7 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/AVM2LocalData.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/AVM2LocalData.java @@ -296,6 +296,7 @@ public class AVM2LocalData extends BaseLocalData { finallyKinds = localData.finallyKinds; seenMethods = localData.seenMethods; bottomSetLocals = localData.bottomSetLocals; + swfVersion = localData.swfVersion; } /** diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/ScriptPack.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/ScriptPack.java index 593bd92a1..b03885998 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/ScriptPack.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/ScriptPack.java @@ -257,6 +257,11 @@ public class ScriptPack extends AS3ClassTreeItem { */ public void convert(AbcIndexing abcIndex, final NulWriter writer, final List traits, final ConvertData convertData, final ScriptExportMode exportMode, final boolean parallel) throws InterruptedException { + int swfVersion = -1; + if (getOpenable() instanceof SWF) { + swfVersion = ((SWF) getOpenable()).version; + } + int sinit_index = abc.script_info.get(scriptIndex).init_index; int sinit_bodyIndex = abc.findBodyIndex(sinit_index); if (sinit_bodyIndex != -1 && (isSimple || traitIndices.isEmpty())) { @@ -269,21 +274,21 @@ public class ScriptPack extends AS3ClassTreeItem { writer.mark(); List callStack = new ArrayList<>(); callStack.add(abc.bodies.get(sinit_bodyIndex)); - abc.bodies.get(sinit_bodyIndex).convert(callStack, abcIndex, convertData, path + "/.scriptinitializer", exportMode, true, sinit_index, scriptIndex, -1, abc, null, new ScopeStack(), GraphTextWriter.TRAIT_SCRIPT_INITIALIZER, writer, new ArrayList<>(), abc.script_info.get(scriptIndex).traits, true, new HashSet<>()); + abc.bodies.get(sinit_bodyIndex).convert(swfVersion, callStack, abcIndex, convertData, path + "/.scriptinitializer", exportMode, true, sinit_index, scriptIndex, -1, abc, null, new ScopeStack(), GraphTextWriter.TRAIT_SCRIPT_INITIALIZER, writer, new ArrayList<>(), abc.script_info.get(scriptIndex).traits, true, new HashSet<>()); scriptInitializerIsEmpty = !writer.getMark(); } ScopeStack scopeStack = new ScopeStack(); scopeStack.push(new GlobalAVM2Item(null, null)); - + for (int t : traitIndices) { Trait trait = traits.get(t); Multiname name = trait.getName(abc); int nskind = name.getSimpleNamespaceKind(abc.constants); if ((nskind == Namespace.KIND_PACKAGE) || (nskind == Namespace.KIND_PACKAGE_INTERNAL)) { - trait.convertPackaged(abcIndex, null, convertData, "", abc, false, exportMode, scriptIndex, -1, writer, new ArrayList<>(), parallel, scopeStack); + trait.convertPackaged(swfVersion, abcIndex, null, convertData, "", abc, false, exportMode, scriptIndex, -1, writer, new ArrayList<>(), parallel, scopeStack); } else { - trait.convert(abcIndex, null, convertData, "", abc, false, exportMode, scriptIndex, -1, writer, new ArrayList<>(), parallel, scopeStack); + trait.convert(swfVersion, abcIndex, null, convertData, "", abc, false, exportMode, scriptIndex, -1, writer, new ArrayList<>(), parallel, scopeStack); } } } @@ -302,6 +307,12 @@ public class ScriptPack extends AS3ClassTreeItem { * @throws InterruptedException On interrupt */ private void appendTo(AbcIndexing abcIndex, GraphTextWriter writer, List traits, ConvertData convertData, ScriptExportMode exportMode, boolean parallel, boolean exportAllClasses) throws InterruptedException { + + int swfVersion = -1; + if (getOpenable() instanceof SWF) { + swfVersion = ((SWF) getOpenable()).version; + } + boolean first = true; //script initializer int script_init = abc.script_info.get(scriptIndex).init_index; @@ -344,7 +355,7 @@ public class ScriptPack extends AS3ClassTreeItem { writer.newLine(); } writer.startTrait(traitIndicesList.get(t)); - trait.toStringPackaged(abcIndex, null, convertData, "", abc, false, exportMode, scriptIndex, -1, writer, fullyQualifiedNames, parallel, false); + trait.toStringPackaged(swfVersion, abcIndex, null, convertData, "", abc, false, exportMode, scriptIndex, -1, writer, fullyQualifiedNames, parallel, false); if (!(trait instanceof TraitClass)) { writer.endTrait(); @@ -375,7 +386,7 @@ public class ScriptPack extends AS3ClassTreeItem { writer.newLine(); } writer.startTrait(traitIndicesList.get(t)); - trait.toString(abcIndex, pkg, null, convertData, "", abc, false, exportMode, scriptIndex, -1, writer, new ArrayList<>(), parallel, false); + trait.toString(swfVersion, abcIndex, pkg, null, convertData, "", abc, false, exportMode, scriptIndex, -1, writer, new ArrayList<>(), parallel, false); if (!(trait instanceof TraitClass)) { writer.endTrait(); @@ -406,9 +417,9 @@ public class ScriptPack extends AS3ClassTreeItem { Multiname name = trait.getName(abc); int nskind = name.getSimpleNamespaceKind(abc.constants); if ((nskind == Namespace.KIND_PACKAGE) || (nskind == Namespace.KIND_PACKAGE_INTERNAL)) { - trait.toStringPackaged(abcIndex, null, convertData, "", abc, false, exportMode, scriptIndex, -1, writer, new ArrayList<>(), parallel, false); + trait.toStringPackaged(swfVersion, abcIndex, null, convertData, "", abc, false, exportMode, scriptIndex, -1, writer, new ArrayList<>(), parallel, false); } else { - trait.toString(abcIndex, pkg, null, convertData, "", abc, false, exportMode, scriptIndex, -1, writer, new ArrayList<>(), parallel, false); + trait.toString(swfVersion, abcIndex, pkg, null, convertData, "", abc, false, exportMode, scriptIndex, -1, writer, new ArrayList<>(), parallel, false); } writer.endTrait(); first = false; @@ -425,7 +436,7 @@ public class ScriptPack extends AS3ClassTreeItem { if (!first) { writer.newLine(); } - abc.bodies.get(bodyIndex).toString(callStack, abcIndex, path + "/.scriptinitializer", exportMode, abc, null, writer, fullyQualifiedNames, new HashSet<>()); + abc.bodies.get(bodyIndex).toString(swfVersion, callStack, abcIndex, path + "/.scriptinitializer", exportMode, abc, null, writer, fullyQualifiedNames, new HashSet<>()); } else { writer.append(""); } @@ -452,6 +463,7 @@ public class ScriptPack extends AS3ClassTreeItem { /** * Converts the script pack to source. * + * @param swfVersion SWF version * @param abcIndex Abc indexing * @param writer Writer * @param traits Traits diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/AVM2Code.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/AVM2Code.java index 9cb4a689e..d68b8c2d9 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/AVM2Code.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/AVM2Code.java @@ -1826,6 +1826,7 @@ public class AVM2Code implements Cloneable { /** * Converts to source output. * + * @param swfVersion SWF version * @param switchParts Switch parts * @param callStack Call stack * @param abcIndex ABC indexing @@ -1856,7 +1857,7 @@ public class AVM2Code implements Cloneable { * @throws ConvertException On convert error * @throws InterruptedException On interrupt */ - public ConvertOutput toSourceOutput(Set switchParts, List callStack, AbcIndexing abcIndex, Map> setLocalPosToGetLocalPos, boolean thisHasDefaultToPrimitive, Reference lineStartItem, String path, GraphPart part, boolean processJumps, boolean isStatic, int scriptIndex, int classIndex, HashMap localRegs, TranslateStack stack, ScopeStack scopeStack, ScopeStack localScopeStack, ABC abc, MethodBody body, int start, int end, HashMap localRegNames, HashMap localRegTypes, List fullyQualifiedNames, boolean[] visited, HashMap localRegAssignmentIps, LinkedIdentityHashSet bottomStackSetLocals) throws ConvertException, InterruptedException { + public ConvertOutput toSourceOutput(int swfVersion, Set switchParts, List callStack, AbcIndexing abcIndex, Map> setLocalPosToGetLocalPos, boolean thisHasDefaultToPrimitive, Reference lineStartItem, String path, GraphPart part, boolean processJumps, boolean isStatic, int scriptIndex, int classIndex, HashMap localRegs, TranslateStack stack, ScopeStack scopeStack, ScopeStack localScopeStack, ABC abc, MethodBody body, int start, int end, HashMap localRegNames, HashMap localRegTypes, List fullyQualifiedNames, boolean[] visited, HashMap localRegAssignmentIps, LinkedIdentityHashSet bottomStackSetLocals) throws ConvertException, InterruptedException { boolean debugMode = DEBUG_MODE; if (debugMode) { System.err.println("OPEN SubSource:" + start + "-" + end + " " + code.get(start).toString() + " to " + code.get(end).toString()); @@ -1976,7 +1977,7 @@ public class AVM2Code implements Cloneable { } else */ if ((ins.definition instanceof ReturnValueIns) || (ins.definition instanceof ReturnVoidIns) || (ins.definition instanceof ThrowIns)) { - ins.definition.translate(switchParts, callStack, abcIndex, setLocalPosToGetLocalPos, lineStartItem, isStatic, scriptIndex, classIndex, localRegs, stack, scopeStack, localScopeStack, ins, output, body, abc, localRegNames, localRegTypes, fullyQualifiedNames, path, localRegAssignmentIps, ip, this, thisHasDefaultToPrimitive, bottomStackSetLocals); + ins.definition.translate(swfVersion, switchParts, callStack, abcIndex, setLocalPosToGetLocalPos, lineStartItem, isStatic, scriptIndex, classIndex, localRegs, stack, scopeStack, localScopeStack, ins, output, body, abc, localRegNames, localRegTypes, fullyQualifiedNames, path, localRegAssignmentIps, ip, this, thisHasDefaultToPrimitive, bottomStackSetLocals); //ip = end + 1; break; } else if (ins.definition instanceof NewFunctionIns) { @@ -2012,13 +2013,13 @@ public class AVM2Code implements Cloneable { } } // What to do when hasDup is false? - ins.definition.translate(switchParts, callStack, abcIndex, setLocalPosToGetLocalPos, lineStartItem, isStatic, scriptIndex, classIndex, localRegs, stack, scopeStack, localScopeStack, ins, output, body, abc, localRegNames, localRegTypes, fullyQualifiedNames, path, localRegAssignmentIps, ip, this, thisHasDefaultToPrimitive, bottomStackSetLocals); + ins.definition.translate(swfVersion, switchParts, callStack, abcIndex, setLocalPosToGetLocalPos, lineStartItem, isStatic, scriptIndex, classIndex, localRegs, stack, scopeStack, localScopeStack, ins, output, body, abc, localRegNames, localRegTypes, fullyQualifiedNames, path, localRegAssignmentIps, ip, this, thisHasDefaultToPrimitive, bottomStackSetLocals); NewFunctionAVM2Item nft = (NewFunctionAVM2Item) stack.peek(); nft.functionName = functionName; ip++; } else { try { - ins.definition.translate(switchParts, callStack, abcIndex, setLocalPosToGetLocalPos, lineStartItem, isStatic, scriptIndex, classIndex, localRegs, stack, scopeStack, localScopeStack, ins, output, body, abc, localRegNames, localRegTypes, fullyQualifiedNames, path, localRegAssignmentIps, ip, this, thisHasDefaultToPrimitive, bottomStackSetLocals); + ins.definition.translate(swfVersion, switchParts, callStack, abcIndex, setLocalPosToGetLocalPos, lineStartItem, isStatic, scriptIndex, classIndex, localRegs, stack, scopeStack, localScopeStack, ins, output, body, abc, localRegNames, localRegTypes, fullyQualifiedNames, path, localRegAssignmentIps, ip, this, thisHasDefaultToPrimitive, bottomStackSetLocals); if (stack.size() == 1 && (stack.peek() instanceof SetLocalAVM2Item)) { bottomStackSetLocals.add((SetLocalAVM2Item) stack.peek()); @@ -2522,6 +2523,7 @@ public class AVM2Code implements Cloneable { /** * Converts code to source - list of GraphTargetItems. * + * @param swfVersion SWF version * @param callStack Call stack * @param abcIndex ABC indexing * @param thisHasDefaultToPrimitive True if this has default to primitive @@ -2543,7 +2545,7 @@ public class AVM2Code implements Cloneable { * @return List of GraphTargetItems * @throws InterruptedException On interrupt */ - public List toGraphTargetItems(List callStack, AbcIndexing abcIndex, boolean thisHasDefaultToPrimitive, ConvertData convertData, String path, int methodIndex, boolean isStatic, int scriptIndex, int classIndex, ABC abc, MethodBody body, HashMap localRegNames, ScopeStack scopeStack, int initializerType, List fullyQualifiedNames, Traits initTraits, int staticOperation, HashMap localRegAssignmentIps) throws InterruptedException { + public List toGraphTargetItems(int swfVersion, List callStack, AbcIndexing abcIndex, boolean thisHasDefaultToPrimitive, ConvertData convertData, String path, int methodIndex, boolean isStatic, int scriptIndex, int classIndex, ABC abc, MethodBody body, HashMap localRegNames, ScopeStack scopeStack, int initializerType, List fullyQualifiedNames, Traits initTraits, int staticOperation, HashMap localRegAssignmentIps) throws InterruptedException { initToSource(); List list; HashMap localRegs = new HashMap<>(); @@ -2558,9 +2560,9 @@ public class AVM2Code implements Cloneable { } try { - list = AVM2Graph.translateViaGraph(null, callStack, abcIndex, path, this, abc, body, isStatic, scriptIndex, classIndex, localRegs, scopeStack, localRegNames, localRegTypes, fullyQualifiedNames, staticOperation, localRegAssignmentIps, thisHasDefaultToPrimitive); + list = AVM2Graph.translateViaGraph(swfVersion, null, callStack, abcIndex, path, this, abc, body, isStatic, scriptIndex, classIndex, localRegs, scopeStack, localRegNames, localRegTypes, fullyQualifiedNames, staticOperation, localRegAssignmentIps, thisHasDefaultToPrimitive); } catch (SecondPassException spe) { - list = AVM2Graph.translateViaGraph(spe.getData(), callStack, abcIndex, path, this, abc, body, isStatic, scriptIndex, classIndex, localRegs, scopeStack, localRegNames, localRegTypes, fullyQualifiedNames, staticOperation, localRegAssignmentIps, thisHasDefaultToPrimitive); + list = AVM2Graph.translateViaGraph(swfVersion, spe.getData(), callStack, abcIndex, path, this, abc, body, isStatic, scriptIndex, classIndex, localRegs, scopeStack, localRegNames, localRegTypes, fullyQualifiedNames, staticOperation, localRegAssignmentIps, thisHasDefaultToPrimitive); } if (initTraits != null) { loopi: diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/CodeStats.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/CodeStats.java index b6ed09353..79d484129 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/CodeStats.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/CodeStats.java @@ -84,7 +84,7 @@ public class CodeStats { if (stats.stackpos > ms) { ms = stats.stackpos; } - writer.appendNoHilight(i + ":" + stats.stackpos + (deltastack >= 0 ? "+" + deltastack : deltastack) + "," + stats.scopepos + " " + stats.ins.toString(writer, LocalData.create(new ArrayList<>(), null, abc, null, fullyQualifiedNames, new HashSet<>(), ScriptExportMode.AS))).newLine(); + writer.appendNoHilight(i + ":" + stats.stackpos + (deltastack >= 0 ? "+" + deltastack : deltastack) + "," + stats.scopepos + " " + stats.ins.toString(writer, LocalData.create(new ArrayList<>(), null, abc, null, fullyQualifiedNames, new HashSet<>(), ScriptExportMode.AS, -1))).newLine(); i++; } return writer; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/graph/AVM2Graph.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/graph/AVM2Graph.java index e27eb02f9..3b2670050 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/graph/AVM2Graph.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/graph/AVM2Graph.java @@ -64,6 +64,8 @@ import com.jpexs.decompiler.flash.abc.avm2.model.NewActivationAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.NewFunctionAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.NextNameAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.NextValueAVM2Item; +import com.jpexs.decompiler.flash.abc.avm2.model.NullAVM2Item; +import com.jpexs.decompiler.flash.abc.avm2.model.NullCoalesceAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.ReturnValueAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.ReturnVoidAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.SetLocalAVM2Item; @@ -79,6 +81,8 @@ import com.jpexs.decompiler.flash.abc.avm2.model.clauses.FilterAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.clauses.ForEachInAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.clauses.ForInAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.clauses.TryAVM2Item; +import com.jpexs.decompiler.flash.abc.avm2.model.operations.EqAVM2Item; +import com.jpexs.decompiler.flash.abc.avm2.model.operations.NeqAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.operations.StrictEqAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.parser.script.AbcIndexing; import com.jpexs.decompiler.flash.abc.types.ABCException; @@ -115,6 +119,7 @@ import com.jpexs.decompiler.graph.model.NotItem; import com.jpexs.decompiler.graph.model.OrItem; import com.jpexs.decompiler.graph.model.PushItem; import com.jpexs.decompiler.graph.model.SwitchItem; +import com.jpexs.decompiler.graph.model.TernarOpItem; import com.jpexs.decompiler.graph.model.TrueItem; import com.jpexs.decompiler.graph.model.WhileItem; import com.jpexs.helpers.Reference; @@ -156,6 +161,7 @@ public class AVM2Graph extends Graph { * Method body */ private final MethodBody body; + private final int swfVersion; /** * ABC indexing @@ -200,6 +206,7 @@ public class AVM2Graph extends Graph { /** * Constructs AVM2 graph * + * @param swfVersion SWF version * @param abcIndex ABC indexing * @param code AVM2 code * @param abc ABC @@ -214,11 +221,12 @@ public class AVM2Graph extends Graph { * @param fullyQualifiedNames Fully qualified names * @param localRegAssignmentIps Local register assignment IPs */ - public AVM2Graph(AbcIndexing abcIndex, AVM2Code code, ABC abc, MethodBody body, boolean isStatic, int scriptIndex, int classIndex, HashMap localRegs, ScopeStack scopeStack, ScopeStack localScopeStack, HashMap localRegNames, List fullyQualifiedNames, HashMap localRegAssignmentIps) { + public AVM2Graph(int swfVersion, AbcIndexing abcIndex, AVM2Code code, ABC abc, MethodBody body, boolean isStatic, int scriptIndex, int classIndex, HashMap localRegs, ScopeStack scopeStack, ScopeStack localScopeStack, HashMap localRegNames, List fullyQualifiedNames, HashMap localRegAssignmentIps) { super(new AVM2GraphSource(code, isStatic, scriptIndex, classIndex, localRegs, abc, body, localRegNames, fullyQualifiedNames, localRegAssignmentIps), getExceptionEntries(body)); this.avm2code = code; this.abc = abc; this.body = body; + this.swfVersion = swfVersion; this.abcIndex = abcIndex; } @@ -725,6 +733,7 @@ public class AVM2Graph extends Graph { /** * Translates via Graph - decompiles. * + * @param swfVersion SWF version * @param secondPassData Second pass data * @param callStack Call stack * @param abcIndex ABC indexing @@ -746,9 +755,9 @@ public class AVM2Graph extends Graph { * @return List of graph target items * @throws InterruptedException On interrupt */ - public static List translateViaGraph(SecondPassData secondPassData, List callStack, AbcIndexing abcIndex, String path, AVM2Code code, ABC abc, MethodBody body, boolean isStatic, int scriptIndex, int classIndex, HashMap localRegs, ScopeStack scopeStack, HashMap localRegNames, HashMap localRegTypes, List fullyQualifiedNames, int staticOperation, HashMap localRegAssignmentIps, boolean thisHasDefaultToPrimitive) throws InterruptedException { + public static List translateViaGraph(int swfVersion, SecondPassData secondPassData, List callStack, AbcIndexing abcIndex, String path, AVM2Code code, ABC abc, MethodBody body, boolean isStatic, int scriptIndex, int classIndex, HashMap localRegs, ScopeStack scopeStack, HashMap localRegNames, HashMap localRegTypes, List fullyQualifiedNames, int staticOperation, HashMap localRegAssignmentIps, boolean thisHasDefaultToPrimitive) throws InterruptedException { ScopeStack localScopeStack = new ScopeStack(); - AVM2Graph g = new AVM2Graph(abcIndex, code, abc, body, isStatic, scriptIndex, classIndex, localRegs, scopeStack, localScopeStack, localRegNames, fullyQualifiedNames, localRegAssignmentIps); + AVM2Graph g = new AVM2Graph(swfVersion, abcIndex, code, abc, body, isStatic, scriptIndex, classIndex, localRegs, scopeStack, localScopeStack, localRegNames, fullyQualifiedNames, localRegAssignmentIps); AVM2LocalData localData = new AVM2LocalData(); localData.secondPassData = secondPassData; @@ -768,6 +777,7 @@ public class AVM2Graph extends Graph { localData.scriptIndex = scriptIndex; localData.ip = 0; localData.code = code; + localData.swfVersion = swfVersion; g.init(localData); Set allParts = new HashSet<>(); for (GraphPart head : g.heads) { @@ -3212,4 +3222,38 @@ public class AVM2Graph extends Graph { return result; } + + @Override + protected GraphTargetItem handleTernar(TernarOpItem ternar, BaseLocalData localData) { + if (localData.swfVersion < 50) { + return ternar; + } + + if (true) { //FIXME, WIP - implement compiler part + return ternar; + } + if (ternar.expression instanceof EqAVM2Item) { + EqAVM2Item eq = (EqAVM2Item) ternar.expression; + if (eq.rightSide instanceof NullAVM2Item) { + if (ternar.onFalse.getNotCoerced() instanceof GetPropertyAVM2Item) { + GetPropertyAVM2Item gp = (GetPropertyAVM2Item) ternar.onFalse.getNotCoerced(); + if (gp.object.valueEquals(eq.leftSide)) { + gp.nullCondition = true; + return gp; + } + } + } + } + + if (ternar.expression instanceof NeqAVM2Item) { + NeqAVM2Item neq = (NeqAVM2Item) ternar.expression; + if (neq.rightSide instanceof NullAVM2Item) { + if (ternar.onTrue.valueEquals(neq.leftSide)) { + return new NullCoalesceAVM2Item(ternar.getSrc(), ternar.getLineStartItem(), ternar.onTrue, ternar.onFalse); + } + } + } + + return ternar; + } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/graph/AVM2GraphSource.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/graph/AVM2GraphSource.java index 5577166a8..8edc8308e 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/graph/AVM2GraphSource.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/graph/AVM2GraphSource.java @@ -203,7 +203,7 @@ public class AVM2GraphSource extends GraphSource { public List translatePart(Graph graph, GraphPart part, BaseLocalData localData, TranslateStack stack, int start, int end, int staticOperation, String path) throws InterruptedException { List ret = new ArrayList<>(); Reference lineStartItem = new Reference<>(localData.lineStartInstruction); - ConvertOutput co = code.toSourceOutput(localData.allSwitchParts, ((AVM2LocalData) localData).callStack, ((AVM2LocalData) localData).abcIndex, ((AVM2LocalData) localData).setLocalPosToGetLocalPos, ((AVM2LocalData) localData).thisHasDefaultToPrimitive, lineStartItem, path, part, false, isStatic, scriptIndex, classIndex, localRegs, stack, ((AVM2LocalData) localData).scopeStack, ((AVM2LocalData) localData).localScopeStack, abc, body, start, end, localRegNames, ((AVM2LocalData) localData).localRegTypes, fullyQualifiedNames, new boolean[size()], localRegAssignmentIps, ((AVM2LocalData) localData).bottomSetLocals); + ConvertOutput co = code.toSourceOutput(localData.swfVersion, localData.allSwitchParts, ((AVM2LocalData) localData).callStack, ((AVM2LocalData) localData).abcIndex, ((AVM2LocalData) localData).setLocalPosToGetLocalPos, ((AVM2LocalData) localData).thisHasDefaultToPrimitive, lineStartItem, path, part, false, isStatic, scriptIndex, classIndex, localRegs, stack, ((AVM2LocalData) localData).scopeStack, ((AVM2LocalData) localData).localScopeStack, abc, body, start, end, localRegNames, ((AVM2LocalData) localData).localRegTypes, fullyQualifiedNames, new boolean[size()], localRegAssignmentIps, ((AVM2LocalData) localData).bottomSetLocals); localData.lineStartInstruction = lineStartItem.getVal(); ret.addAll(co.output); return ret; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/InstructionDefinition.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/InstructionDefinition.java index 0a74c4b41..39572db62 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/InstructionDefinition.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/InstructionDefinition.java @@ -267,6 +267,7 @@ public abstract class InstructionDefinition implements Serializable { /** * Translates instruction to high level code. * + * @param swfVersion SWF version * @param switchParts Switch parts * @param callStack Call stack * @param abcIndex ABC indexing @@ -294,7 +295,7 @@ public abstract class InstructionDefinition implements Serializable { * @param bottomSetLocals Bottom set locals * @throws InterruptedException On interrupt */ - public void translate(Set switchParts, List callStack, AbcIndexing abcIndex, Map> setLocalPosToGetLocalPos, Reference lineStartItem, boolean isStatic, int scriptIndex, int classIndex, HashMap localRegs, TranslateStack stack, ScopeStack scopeStack, ScopeStack localScopeStack, AVM2Instruction ins, List output, MethodBody body, ABC abc, HashMap localRegNames, HashMap localRegTypes, List fullyQualifiedNames, String path, HashMap localRegsAssignmentIps, int ip, AVM2Code code, boolean thisHasDefaultToPrimitive, LinkedIdentityHashSet bottomSetLocals) throws InterruptedException { + public void translate(int swfVersion, Set switchParts, List callStack, AbcIndexing abcIndex, Map> setLocalPosToGetLocalPos, Reference lineStartItem, boolean isStatic, int scriptIndex, int classIndex, HashMap localRegs, TranslateStack stack, ScopeStack scopeStack, ScopeStack localScopeStack, AVM2Instruction ins, List output, MethodBody body, ABC abc, HashMap localRegNames, HashMap localRegTypes, List fullyQualifiedNames, String path, HashMap localRegsAssignmentIps, int ip, AVM2Code code, boolean thisHasDefaultToPrimitive, LinkedIdentityHashSet bottomSetLocals) throws InterruptedException { AVM2LocalData localData = new AVM2LocalData(); localData.allSwitchParts = switchParts; localData.isStatic = isStatic; @@ -317,6 +318,7 @@ public abstract class InstructionDefinition implements Serializable { localData.thisHasDefaultToPrimitive = thisHasDefaultToPrimitive; localData.setLocalPosToGetLocalPos = setLocalPosToGetLocalPos; localData.bottomSetLocals = bottomSetLocals; + localData.swfVersion = swfVersion; translate(localData, stack, ins, output, path); lineStartItem.setVal(localData.lineStartInstruction); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/construction/NewClassIns.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/construction/NewClassIns.java index 0dd2d897e..d49637093 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/construction/NewClassIns.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/construction/NewClassIns.java @@ -49,7 +49,7 @@ public class NewClassIns extends InstructionDefinition { public void translate(AVM2LocalData localData, TranslateStack stack, AVM2Instruction ins, List output, String path) throws InterruptedException { int clsIndex = ins.operands[0]; HighlightedTextWriter writer = new HighlightedTextWriter(Configuration.getCodeFormatting(), false); - stack.pop().toString(writer, LocalData.create(localData.callStack /*??*/, localData.abcIndex, localData.abc, localData.localRegNames, localData.fullyQualifiedNames, new HashSet<>(), ScriptExportMode.AS)); + stack.pop().toString(writer, LocalData.create(localData.callStack /*??*/, localData.abcIndex, localData.abc, localData.localRegNames, localData.fullyQualifiedNames, new HashSet<>(), ScriptExportMode.AS, localData.swfVersion)); writer.finishHilights(); String baseType = writer.toString(); ABC abc = localData.abc; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/AVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/AVM2Item.java index d6c8eb641..25e1874f4 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/AVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/AVM2Item.java @@ -107,10 +107,11 @@ public abstract class AVM2Item extends GraphTargetItem { * @param propertyName Property name * @param localData Local data * @param isStatic Is static + * @param nullCondition Null condition - ?. * @return Writer * @throws InterruptedException On interrupt */ - protected GraphTextWriter formatProperty(GraphTextWriter writer, GraphTargetItem object, GraphTargetItem propertyName, LocalData localData, boolean isStatic) throws InterruptedException { + protected GraphTextWriter formatProperty(GraphTextWriter writer, GraphTargetItem object, GraphTargetItem propertyName, LocalData localData, boolean isStatic, boolean nullCondition) throws InterruptedException { boolean empty = object.getThroughDuplicate() instanceof FindPropertyAVM2Item; if (object instanceof LocalRegAVM2Item) { if (((LocalRegAVM2Item) object).computedValue != null) { @@ -170,16 +171,16 @@ public abstract class AVM2Item extends GraphTargetItem { } data.namespaceIndex = namespaceIndex; data.isStatic = isStatic; - + + String operator = nullCondition ? "?." : "."; + if (((FullMultinameAVM2Item) propertyName).name != null) { if (((FullMultinameAVM2Item) propertyName).namespace != null) { - //writer.append("."); - writer.allowWrapHere().hilightSpecial(".", HighlightSpecialType.PROPERTY_TYPE, 0, data); + writer.allowWrapHere().hilightSpecial(operator, HighlightSpecialType.PROPERTY_TYPE, 0, data); } return propertyName.toString(writer, localData); } else { - writer.allowWrapHere().hilightSpecial(".", HighlightSpecialType.PROPERTY_TYPE, 0, data); - //writer.append("."); + writer.allowWrapHere().hilightSpecial(operator, HighlightSpecialType.PROPERTY_TYPE, 0, data); return propertyName.toString(writer, localData); } } else { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/CallPropertyAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/CallPropertyAVM2Item.java index d44b2f8c2..226fa8056 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/CallPropertyAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/CallPropertyAVM2Item.java @@ -97,7 +97,7 @@ public class CallPropertyAVM2Item extends AVM2Item { @Override public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) throws InterruptedException { - formatProperty(writer, receiver, propertyName, localData, isStatic); + formatProperty(writer, receiver, propertyName, localData, isStatic, false); writer.spaceBeforeCallParenthesis(arguments.size()); writer.append("("); for (int a = 0; a < arguments.size(); a++) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/ConstructPropAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/ConstructPropAVM2Item.java index e92da7493..746a101d8 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/ConstructPropAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/ConstructPropAVM2Item.java @@ -86,7 +86,7 @@ public class ConstructPropAVM2Item extends AVM2Item { @Override public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) throws InterruptedException { writer.append("new "); - formatProperty(writer, object, propertyName, localData, isStatic); + formatProperty(writer, object, propertyName, localData, isStatic, false); writer.spaceBeforeCallParenthesis(args.size()); writer.append("("); for (int a = 0; a < args.size(); a++) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/FullMultinameAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/FullMultinameAVM2Item.java index a291dd300..cb1d5f2b8 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/FullMultinameAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/FullMultinameAVM2Item.java @@ -151,13 +151,13 @@ public class FullMultinameAVM2Item extends AVM2Item { public boolean isTopLevel(String tname, ABC abc, HashMap localRegNames, List fullyQualifiedNames, Set seenMethods) throws InterruptedException { String cname; if (name != null) { - cname = name.toString(LocalData.create(new ArrayList<>(), null, abc, localRegNames, fullyQualifiedNames, seenMethods, ScriptExportMode.AS)); + cname = name.toString(LocalData.create(new ArrayList<>(), null, abc, localRegNames, fullyQualifiedNames, seenMethods, ScriptExportMode.AS, -1)); } else { cname = (abc.constants.getMultiname(multinameIndex).getName(abc.constants, fullyQualifiedNames, true, true)); } String cns = ""; if (namespace != null) { - cns = namespace.toString(LocalData.create(new ArrayList<>(), null, abc, localRegNames, fullyQualifiedNames, seenMethods, ScriptExportMode.AS)); + cns = namespace.toString(LocalData.create(new ArrayList<>(), null, abc, localRegNames, fullyQualifiedNames, seenMethods, ScriptExportMode.AS, -1)); } else { Namespace ns = abc.constants.getMultiname(multinameIndex).getNamespace(abc.constants); if ((ns != null) && (ns.name_index != 0)) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/GetPropertyAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/GetPropertyAVM2Item.java index 4ada66681..f5c5d548d 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/GetPropertyAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/GetPropertyAVM2Item.java @@ -68,6 +68,11 @@ public class GetPropertyAVM2Item extends AVM2Item { * Is static */ public boolean isStatic; + + /** + * Is null condition - ?. + */ + public boolean nullCondition = false; @Override public void visit(GraphTargetVisitorInterface visitor) { @@ -171,7 +176,7 @@ public class GetPropertyAVM2Item extends AVM2Item { @Override public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) throws InterruptedException { - return formatProperty(writer, object, propertyName, localData, isStatic); + return formatProperty(writer, object, propertyName, localData, isStatic, nullCondition); } @Override diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/InitPropertyAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/InitPropertyAVM2Item.java index ae281c8fc..27e64f28f 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/InitPropertyAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/InitPropertyAVM2Item.java @@ -113,7 +113,7 @@ public class InitPropertyAVM2Item extends AVM2Item implements SetTypeAVM2Item, A @Override public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) throws InterruptedException { - formatProperty(writer, object, propertyName, localData, isStatic); + formatProperty(writer, object, propertyName, localData, isStatic, false); if (compoundOperator != null) { writer.append(" "); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/NewFunctionAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/NewFunctionAVM2Item.java index dfe6b39ab..5039b318a 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/NewFunctionAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/NewFunctionAVM2Item.java @@ -130,8 +130,8 @@ public class NewFunctionAVM2Item extends AVM2Item { if (body != null) { List callStack = new ArrayList<>(localData.callStack); callStack.add(body); - body.convert(callStack, localData.abcIndex, new ConvertData(), path + "/inner", ScriptExportMode.AS, isStatic, methodIndex, scriptIndex, classIndex, abc, null, scopeStack, 0, new NulWriter(), localData.fullyQualifiedNames, null, false, new HashSet<>(localData.seenMethods)); - body.toString(callStack, localData.abcIndex, path + "/inner", ScriptExportMode.AS, abc, null, writer, localData.fullyQualifiedNames, new HashSet<>(localData.seenMethods)); + body.convert(localData.swfVersion, callStack, localData.abcIndex, new ConvertData(), path + "/inner", ScriptExportMode.AS, isStatic, methodIndex, scriptIndex, classIndex, abc, null, scopeStack, 0, new NulWriter(), localData.fullyQualifiedNames, null, false, new HashSet<>(localData.seenMethods)); + body.toString(localData.swfVersion, callStack, localData.abcIndex, path + "/inner", ScriptExportMode.AS, abc, null, writer, localData.fullyQualifiedNames, new HashSet<>(localData.seenMethods)); } writer.endBlock(); writer.endMethod(); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/NullCoalesceAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/NullCoalesceAVM2Item.java new file mode 100644 index 000000000..7cc1d2d7c --- /dev/null +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/NullCoalesceAVM2Item.java @@ -0,0 +1,44 @@ +/* + * Copyright (C) 2010-2024 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.abc.avm2.model; + +import com.jpexs.decompiler.graph.GraphSourceItem; +import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.model.BinaryOpItem; +import java.util.ArrayList; +import java.util.List; + +/** + * + * @author JPEXS + */ +public class NullCoalesceAVM2Item extends BinaryOpItem { + + public NullCoalesceAVM2Item(GraphSourceItem instruction, GraphSourceItem lineStartItem, GraphTargetItem leftSide, GraphTargetItem rightSide) { + super(instruction, lineStartItem, PRECEDENCE_NULLCOALESCE, leftSide, rightSide, "??", null, null); + } + + @Override + public GraphTargetItem returnType() { + return leftSide.returnType(); + } + + @Override + public List getOperatorInstruction() { + return new ArrayList<>(); + } +} diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/SetPropertyAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/SetPropertyAVM2Item.java index f7ba3f908..4eb7922b6 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/SetPropertyAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/SetPropertyAVM2Item.java @@ -127,7 +127,7 @@ public class SetPropertyAVM2Item extends AVM2Item implements SetTypeAVM2Item, As @Override public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) throws InterruptedException { - formatProperty(writer, object, propertyName, localData, isStatic); + formatProperty(writer, object, propertyName, localData, isStatic, false); if (compoundOperator != null) { writer.append(" "); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/TraitSlotConstAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/TraitSlotConstAVM2Item.java index 0fd06fd5a..c36bc41fd 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/TraitSlotConstAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/TraitSlotConstAVM2Item.java @@ -93,6 +93,7 @@ public class TraitSlotConstAVM2Item extends AVM2Item { cd.assignedValues.put(trait, new AssignedValue(null, assignedValue, initializer, methodIndex)); boolean insideInterface = classIndex > -1 ? localData.abc.instance_info.get(classIndex).isInterface() : false; trait.toString( + localData.swfVersion, localData.abcIndex, DottedChain.EMPTY /*??*/, null, diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/DeletePropertyAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/DeletePropertyAVM2Item.java index dfba2e330..2867aa273 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/DeletePropertyAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/DeletePropertyAVM2Item.java @@ -98,7 +98,7 @@ public class DeletePropertyAVM2Item extends AVM2Item { @Override public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) throws InterruptedException { writer.append("delete "); - formatProperty(writer, object, propertyName, localData, isStatic); + formatProperty(writer, object, propertyName, localData, isStatic, false); return writer; } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/AVM2SourceGenerator.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/AVM2SourceGenerator.java index 665841d5e..95b39ac4f 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/AVM2SourceGenerator.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/AVM2SourceGenerator.java @@ -705,7 +705,7 @@ public class AVM2SourceGenerator implements SourceGenerator { List callStack = new ArrayList<>(); callStack.add(pcinit); try { - pcinit.convert(callStack, null, d, "-", ScriptExportMode.AS, true, mi, -1, ci.index, ci.abc, null, new ScopeStack(), GraphTextWriter.TRAIT_CLASS_INITIALIZER, new NulWriter(), new ArrayList<>(), ci.abc.class_info.get(ci.index).static_traits, false, new HashSet<>()); + pcinit.convert(-1 /*FIXME??*/, callStack, null, d, "-", ScriptExportMode.AS, true, mi, -1, ci.index, ci.abc, null, new ScopeStack(), GraphTextWriter.TRAIT_CLASS_INITIALIZER, new NulWriter(), new ArrayList<>(), ci.abc.class_info.get(ci.index).static_traits, false, new HashSet<>()); //FIXME! Add skinparts from _skinParts attribute of parent class!!! } catch (InterruptedException ex) { Logger.getLogger(AVM2SourceGenerator.class.getName()).log(Level.SEVERE, "Getting parent skinparts interrupted", ex); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/MethodBody.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/MethodBody.java index e3f7094b4..75ec974a7 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/MethodBody.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/MethodBody.java @@ -428,6 +428,7 @@ public final class MethodBody implements Cloneable { /** * Converts the method body. * + * @param swfVersion SWF version * @param callStack Call stack * @param abcIndex ABC indexing * @param convertData Convert data @@ -448,7 +449,7 @@ public final class MethodBody implements Cloneable { * @param seenMethods Seen methods * @throws InterruptedException On interrupt */ - public void convert(List callStack, AbcIndexing abcIndex, final ConvertData convertData, final String path, ScriptExportMode exportMode, final boolean isStatic, final int methodIndex, final int scriptIndex, final int classIndex, final ABC abc, final Trait trait, final ScopeStack scopeStack, final int initializerType, final NulWriter writer, final List fullyQualifiedNames, Traits initTraits, boolean firstLevel, Set seenMethods) throws InterruptedException { + public void convert(int swfVersion, List callStack, AbcIndexing abcIndex, final ConvertData convertData, final String path, ScriptExportMode exportMode, final boolean isStatic, final int methodIndex, final int scriptIndex, final int classIndex, final ABC abc, final Trait trait, final ScopeStack scopeStack, final int initializerType, final NulWriter writer, final List fullyQualifiedNames, Traits initTraits, boolean firstLevel, Set seenMethods) throws InterruptedException { seenMethods.add(this.method_info); if (debugMode) { System.err.println("Decompiling " + path); @@ -471,10 +472,10 @@ public final class MethodBody implements Cloneable { HashMap localRegNames = getLocalRegNames(abc); List convertedItems1; try (Statistics s = new Statistics("AVM2Code.toGraphTargetItems")) { - convertedItems1 = converted.getCode().toGraphTargetItems(callStack, abcIndex, convertData.thisHasDefaultToPrimitive, convertData, path, methodIndex, isStatic, scriptIndex, classIndex, abc, converted, localRegNames, scopeStack, initializerType, fullyQualifiedNames, initTraits, 0, new HashMap<>()); //converted.getCode().visitCode(converted) + convertedItems1 = converted.getCode().toGraphTargetItems(swfVersion, callStack, abcIndex, convertData.thisHasDefaultToPrimitive, convertData, path, methodIndex, isStatic, scriptIndex, classIndex, abc, converted, localRegNames, scopeStack, initializerType, fullyQualifiedNames, initTraits, 0, new HashMap<>()); //converted.getCode().visitCode(converted) } try (Statistics s = new Statistics("Graph.graphToString")) { - Graph.graphToString(convertedItems1, writer, LocalData.create(callStack, abcIndex, abc, localRegNames, fullyQualifiedNames, seenMethods, exportMode)); + Graph.graphToString(convertedItems1, writer, LocalData.create(callStack, abcIndex, abc, localRegNames, fullyQualifiedNames, seenMethods, exportMode, swfVersion)); } convertedItems = convertedItems1; } @@ -522,6 +523,7 @@ public final class MethodBody implements Cloneable { /** * Returns a string representation of this MethodBody. * + * @param swfVersion SWF version * @param callStack Call stack * @param abcIndex ABC indexing * @param path Path @@ -534,7 +536,7 @@ public final class MethodBody implements Cloneable { * @return Writer * @throws InterruptedException On interrupt */ - public GraphTextWriter toString(List callStack, AbcIndexing abcIndex, final String path, ScriptExportMode exportMode, final ABC abc, final Trait trait, final GraphTextWriter writer, final List fullyQualifiedNames, Set seenMethods) throws InterruptedException { + public GraphTextWriter toString(int swfVersion, List callStack, AbcIndexing abcIndex, final String path, ScriptExportMode exportMode, final ABC abc, final Trait trait, final GraphTextWriter writer, final List fullyQualifiedNames, Set seenMethods) throws InterruptedException { seenMethods.add(method_info); if (exportMode != ScriptExportMode.AS) { @@ -565,7 +567,7 @@ public final class MethodBody implements Cloneable { fullyQualifiedNames2.remove(tname); } - Graph.graphToString(convertedItems, writer, LocalData.create(callStack, abcIndex, abc, localRegNames, fullyQualifiedNames2, seenMethods, exportMode)); + Graph.graphToString(convertedItems, writer, LocalData.create(callStack, abcIndex, abc, localRegNames, fullyQualifiedNames2, seenMethods, exportMode, swfVersion)); //writer.endMethod(); } else if (convertException instanceof TimeoutException) { // exception was logged in convert method @@ -647,20 +649,21 @@ public final class MethodBody implements Cloneable { /** * Converts the method body to high-level source code. * + * @param swfVersion SWF version * @param callStack Call stack * @param abcIndex ABC indexing * @param scriptIndex Script index * @param seenMethods Seen methods * @return High-level source code */ - public String toSource(List callStack, AbcIndexing abcIndex, int scriptIndex, Set seenMethods) { + public String toSource(int swfVersion, List callStack, AbcIndexing abcIndex, int scriptIndex, Set seenMethods) { ConvertData convertData = new ConvertData(); convertData.deobfuscationMode = 0; try { - convert(callStack, abcIndex, convertData, "", ScriptExportMode.AS, false, method_info, 0, 0, abc, null, new ScopeStack(), 0, new NulWriter(), new ArrayList<>(), new Traits(), true, seenMethods); + convert(swfVersion, callStack, abcIndex, convertData, "", ScriptExportMode.AS, false, method_info, 0, 0, abc, null, new ScopeStack(), 0, new NulWriter(), new ArrayList<>(), new Traits(), true, seenMethods); HighlightedTextWriter writer = new HighlightedTextWriter(Configuration.getCodeFormatting(), false); writer.indent().indent().indent(); - toString(callStack, abcIndex, "", ScriptExportMode.AS, abc, null, writer, new ArrayList<>(), seenMethods); + toString(swfVersion, callStack, abcIndex, "", ScriptExportMode.AS, abc, null, writer, new ArrayList<>(), seenMethods); writer.unindent().unindent().unindent(); writer.finishHilights(); return writer.toString(); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/Trait.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/Trait.java index 32651b8e4..d3ac7ff56 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/Trait.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/Trait.java @@ -712,6 +712,7 @@ public abstract class Trait implements Cloneable, Serializable { /** * To string. * + * @param swfVersion SWF version * @param abcIndex ABC indexing * @param packageName Package name * @param parent Parent trait @@ -729,7 +730,7 @@ public abstract class Trait implements Cloneable, Serializable { * @return Writer * @throws InterruptedException On interrupt */ - public GraphTextWriter toString(AbcIndexing abcIndex, DottedChain packageName, Trait parent, ConvertData convertData, String path, ABC abc, boolean isStatic, ScriptExportMode exportMode, int scriptIndex, int classIndex, GraphTextWriter writer, List fullyQualifiedNames, boolean parallel, boolean insideInterface) throws InterruptedException { + public GraphTextWriter toString(int swfVersion, AbcIndexing abcIndex, DottedChain packageName, Trait parent, ConvertData convertData, String path, ABC abc, boolean isStatic, ScriptExportMode exportMode, int scriptIndex, int classIndex, GraphTextWriter writer, List fullyQualifiedNames, boolean parallel, boolean insideInterface) throws InterruptedException { writer.appendNoHilight(abc.constants.getMultiname(name_index).toString(abc.constants, fullyQualifiedNames) + " kind=" + kindType + " metadata=" + Helper.intArrToString(metadata)); return writer; } @@ -737,6 +738,7 @@ public abstract class Trait implements Cloneable, Serializable { /** * Converts trait. * + * @param swfVersion SWF version * @param abcIndex ABC indexing * @param parent Parent trait * @param convertData Convert data @@ -752,7 +754,7 @@ public abstract class Trait implements Cloneable, Serializable { * @param scopeStack Scope stack * @throws InterruptedException On interrupt */ - public void convert(AbcIndexing abcIndex, Trait parent, ConvertData convertData, String path, ABC abc, boolean isStatic, ScriptExportMode exportMode, int scriptIndex, int classIndex, NulWriter writer, List fullyQualifiedNames, boolean parallel, ScopeStack scopeStack) throws InterruptedException { + public void convert(int swfVersion, AbcIndexing abcIndex, Trait parent, ConvertData convertData, String path, ABC abc, boolean isStatic, ScriptExportMode exportMode, int scriptIndex, int classIndex, NulWriter writer, List fullyQualifiedNames, boolean parallel, ScopeStack scopeStack) throws InterruptedException { } /** @@ -849,6 +851,7 @@ public abstract class Trait implements Cloneable, Serializable { /** * ToString conversion including package. * + * @param swfVersion SWF version * @param abcIndex ABC indexing * @param parent Parent trait * @param convertData Convert data @@ -865,7 +868,7 @@ public abstract class Trait implements Cloneable, Serializable { * @return Writer * @throws InterruptedException On interrupt */ - public GraphTextWriter toStringPackaged(AbcIndexing abcIndex, Trait parent, ConvertData convertData, String path, ABC abc, boolean isStatic, ScriptExportMode exportMode, int scriptIndex, int classIndex, GraphTextWriter writer, List fullyQualifiedNames, boolean parallel, boolean insideInterface) throws InterruptedException { + public GraphTextWriter toStringPackaged(int swfVersion, AbcIndexing abcIndex, Trait parent, ConvertData convertData, String path, ABC abc, boolean isStatic, ScriptExportMode exportMode, int scriptIndex, int classIndex, GraphTextWriter writer, List fullyQualifiedNames, boolean parallel, boolean insideInterface) throws InterruptedException { Multiname name = abc.constants.getMultiname(name_index); int nskind = name.getSimpleNamespaceKind(abc.constants); if ((nskind == Namespace.KIND_PACKAGE) || (nskind == Namespace.KIND_PACKAGE_INTERNAL)) { @@ -878,7 +881,7 @@ public abstract class Trait implements Cloneable, Serializable { List traits = new ArrayList<>(); traits.add(this); writeImports(traits, -1, abcIndex, scriptIndex, classIndex, isStatic, abc, writer, getPackage(abc), fullyQualifiedNames); - toString(abcIndex, name.getNameWithNamespace(abc.constants, true).getWithoutLast(), parent, convertData, path, abc, isStatic, exportMode, scriptIndex, classIndex, writer, fullyQualifiedNames, parallel, insideInterface); + toString(swfVersion, abcIndex, name.getNameWithNamespace(abc.constants, true).getWithoutLast(), parent, convertData, path, abc, isStatic, exportMode, scriptIndex, classIndex, writer, fullyQualifiedNames, parallel, insideInterface); writer.endBlock(); writer.newLine(); } @@ -888,6 +891,7 @@ public abstract class Trait implements Cloneable, Serializable { /** * Converts trait including package. * + * @param swfVersion * @param abcIndex ABC indexing * @param parent Parent trait * @param convertData Convert data @@ -903,18 +907,19 @@ public abstract class Trait implements Cloneable, Serializable { * @param scopeStack Scope stack * @throws InterruptedException On interrupt */ - public void convertPackaged(AbcIndexing abcIndex, Trait parent, ConvertData convertData, String path, ABC abc, boolean isStatic, ScriptExportMode exportMode, int scriptIndex, int classIndex, NulWriter writer, List fullyQualifiedNames, boolean parallel, ScopeStack scopeStack) throws InterruptedException { + public void convertPackaged(int swfVersion, AbcIndexing abcIndex, Trait parent, ConvertData convertData, String path, ABC abc, boolean isStatic, ScriptExportMode exportMode, int scriptIndex, int classIndex, NulWriter writer, List fullyQualifiedNames, boolean parallel, ScopeStack scopeStack) throws InterruptedException { Multiname name = abc.constants.getMultiname(name_index); int nskind = name.getSimpleNamespaceKind(abc.constants); if ((nskind == Namespace.KIND_PACKAGE) || (nskind == Namespace.KIND_PACKAGE_INTERNAL)) { String nsname = name.getSimpleNamespaceName(abc.constants).toPrintableString(true); - convert(abcIndex, parent, convertData, path + nsname, abc, isStatic, exportMode, scriptIndex, classIndex, writer, fullyQualifiedNames, parallel, scopeStack); + convert(swfVersion, abcIndex, parent, convertData, path + nsname, abc, isStatic, exportMode, scriptIndex, classIndex, writer, fullyQualifiedNames, parallel, scopeStack); } } /** * ToString of header. * + * @param swfVersion SWF version * @param parent Parent trait * @param packageName Package name * @param convertData Convert data @@ -931,14 +936,15 @@ public abstract class Trait implements Cloneable, Serializable { * @return Writer * @throws InterruptedException On interrupt */ - public GraphTextWriter toStringHeader(Trait parent, DottedChain packageName, ConvertData convertData, String path, ABC abc, boolean isStatic, ScriptExportMode exportMode, int scriptIndex, int classIndex, GraphTextWriter writer, List fullyQualifiedNames, boolean parallel, boolean insideInterface) throws InterruptedException { - toString(null, packageName, parent, convertData, path, abc, isStatic, exportMode, scriptIndex, classIndex, writer, fullyQualifiedNames, parallel, insideInterface); + public GraphTextWriter toStringHeader(int swfVersion, Trait parent, DottedChain packageName, ConvertData convertData, String path, ABC abc, boolean isStatic, ScriptExportMode exportMode, int scriptIndex, int classIndex, GraphTextWriter writer, List fullyQualifiedNames, boolean parallel, boolean insideInterface) throws InterruptedException { + toString(swfVersion, null, packageName, parent, convertData, path, abc, isStatic, exportMode, scriptIndex, classIndex, writer, fullyQualifiedNames, parallel, insideInterface); return writer; } /** * Converts header. * + * @param swfVersion SWF version * @param parent Parent trait * @param convertData Convert data * @param path Path @@ -952,8 +958,8 @@ public abstract class Trait implements Cloneable, Serializable { * @param parallel Parallel * @throws InterruptedException On interrupt */ - public void convertHeader(Trait parent, ConvertData convertData, String path, ABC abc, boolean isStatic, ScriptExportMode exportMode, int scriptIndex, int classIndex, NulWriter writer, List fullyQualifiedNames, boolean parallel) throws InterruptedException { - convert(null, parent, convertData, path, abc, isStatic, exportMode, scriptIndex, classIndex, writer, fullyQualifiedNames, parallel, new ScopeStack()); + public void convertHeader(int swfVersion, Trait parent, ConvertData convertData, String path, ABC abc, boolean isStatic, ScriptExportMode exportMode, int scriptIndex, int classIndex, NulWriter writer, List fullyQualifiedNames, boolean parallel) throws InterruptedException { + convert(swfVersion, null, parent, convertData, path, abc, isStatic, exportMode, scriptIndex, classIndex, writer, fullyQualifiedNames, parallel, new ScopeStack()); } /** diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitClass.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitClass.java index 0ef514dc7..4bc15c7e4 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitClass.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitClass.java @@ -147,28 +147,13 @@ public class TraitClass extends Trait implements TraitWithSlot { } @Override - public GraphTextWriter toStringHeader(Trait parent, DottedChain packageName, ConvertData convertData, String path, ABC abc, boolean isStatic, ScriptExportMode exportMode, int scriptIndex, int classIndex, GraphTextWriter writer, List fullyQualifiedNames, boolean parallel, boolean insideInterface) { + public GraphTextWriter toStringHeader(int swfVersion, Trait parent, DottedChain packageName, ConvertData convertData, String path, ABC abc, boolean isStatic, ScriptExportMode exportMode, int scriptIndex, int classIndex, GraphTextWriter writer, List fullyQualifiedNames, boolean parallel, boolean insideInterface) { abc.instance_info.get(class_info).getClassHeaderStr(convertData.assetsDir, writer, abc, fullyQualifiedNames, false, false /*??*/); return writer; } - - /** - * Converts header. - * - * @param parent Parent trait - * @param convertData Convert data - * @param path Path - * @param abc ABC - * @param isStatic Is static - * @param exportMode Export mode - * @param scriptIndex Script index - * @param classIndex Class index - * @param writer Writer - * @param fullyQualifiedNames Fully qualified names - * @param parallel Parallel - */ + @Override - public void convertHeader(Trait parent, ConvertData convertData, String path, ABC abc, boolean isStatic, ScriptExportMode exportMode, int scriptIndex, int classIndex, NulWriter writer, List fullyQualifiedNames, boolean parallel) { + public void convertHeader(int swfVersion, Trait parent, ConvertData convertData, String path, ABC abc, boolean isStatic, ScriptExportMode exportMode, int scriptIndex, int classIndex, NulWriter writer, List fullyQualifiedNames, boolean parallel) { } /** @@ -203,7 +188,7 @@ public class TraitClass extends Trait implements TraitWithSlot { * @throws InterruptedException On interrupt */ @Override - public GraphTextWriter toString(AbcIndexing abcIndex, DottedChain packageName, Trait parent, ConvertData convertData, String path, ABC abc, boolean isStatic, ScriptExportMode exportMode, int scriptIndex, int classIndex, GraphTextWriter writer, List fullyQualifiedNames, boolean parallel, boolean insideInterface) throws InterruptedException { + public GraphTextWriter toString(int swfVersion, AbcIndexing abcIndex, DottedChain packageName, Trait parent, ConvertData convertData, String path, ABC abc, boolean isStatic, ScriptExportMode exportMode, int scriptIndex, int classIndex, GraphTextWriter writer, List fullyQualifiedNames, boolean parallel, boolean insideInterface) throws InterruptedException { InstanceInfo instanceInfo = abc.instance_info.get(class_info); @@ -259,7 +244,7 @@ public class TraitClass extends Trait implements TraitWithSlot { //static variables & constants ClassInfo classInfo = abc.class_info.get(class_info); - classInfo.static_traits.toString(packageName, first, abcIndex, new Class[]{TraitSlotConst.class}, this, convertData, path + "/" + instanceInfoName, abc, true, exportMode, false, scriptIndex, class_info, writer, fullyQualifiedNames, parallel, new ArrayList<>(), isInterface); + classInfo.static_traits.toString(swfVersion, packageName, first, abcIndex, new Class[]{TraitSlotConst.class}, this, convertData, path + "/" + instanceInfoName, abc, true, exportMode, false, scriptIndex, class_info, writer, fullyQualifiedNames, parallel, new ArrayList<>(), isInterface); //static initializer int bodyIndex = abc.findBodyIndex(classInfo.cinit_index); @@ -275,7 +260,7 @@ public class TraitClass extends Trait implements TraitWithSlot { first.setVal(false); List callStack = new ArrayList<>(); callStack.add(abc.bodies.get(bodyIndex)); - abc.bodies.get(bodyIndex).toString(callStack, abcIndex, path + "/" + instanceInfoName + ".staticinitializer", exportMode, abc, this, writer, fullyQualifiedNames, new HashSet<>()); + abc.bodies.get(bodyIndex).toString(swfVersion, callStack, abcIndex, path + "/" + instanceInfoName + ".staticinitializer", exportMode, abc, this, writer, fullyQualifiedNames, new HashSet<>()); //first.setVal(true); //writer.endBlock(); } else { @@ -294,7 +279,7 @@ public class TraitClass extends Trait implements TraitWithSlot { } //instance variables - instanceInfo.instance_traits.toString(packageName, first, abcIndex, new Class[]{TraitSlotConst.class}, this, convertData, path + "/" + instanceInfoName, abc, false, exportMode, false, scriptIndex, class_info, writer, fullyQualifiedNames, parallel, new ArrayList<>(), isInterface); + instanceInfo.instance_traits.toString(swfVersion, packageName, first, abcIndex, new Class[]{TraitSlotConst.class}, this, convertData, path + "/" + instanceInfoName, abc, false, exportMode, false, scriptIndex, class_info, writer, fullyQualifiedNames, parallel, new ArrayList<>(), isInterface); //instance initializer - constructor if (!instanceInfo.isInterface()) { @@ -319,7 +304,7 @@ public class TraitClass extends Trait implements TraitWithSlot { if (body != null) { List callStack = new ArrayList<>(); callStack.add(body); - body.toString(callStack, abcIndex, path + "/" + instanceInfoName + ".initializer", exportMode, abc, this, writer, fullyQualifiedNames, new HashSet<>()); + body.toString(swfVersion, callStack, abcIndex, path + "/" + instanceInfoName + ".initializer", exportMode, abc, this, writer, fullyQualifiedNames, new HashSet<>()); } } @@ -329,10 +314,10 @@ public class TraitClass extends Trait implements TraitWithSlot { } //static methods - classInfo.static_traits.toString(packageName, first, abcIndex, new Class[]{TraitClass.class, TraitFunction.class, TraitMethodGetterSetter.class}, this, convertData, path + "/" + instanceInfoName, abc, true, exportMode, false, scriptIndex, class_info, writer, fullyQualifiedNames, parallel, new ArrayList<>(), isInterface); + classInfo.static_traits.toString(swfVersion, packageName, first, abcIndex, new Class[]{TraitClass.class, TraitFunction.class, TraitMethodGetterSetter.class}, this, convertData, path + "/" + instanceInfoName, abc, true, exportMode, false, scriptIndex, class_info, writer, fullyQualifiedNames, parallel, new ArrayList<>(), isInterface); //instance methods - instanceInfo.instance_traits.toString(packageName, first, abcIndex, new Class[]{TraitClass.class, TraitFunction.class, TraitMethodGetterSetter.class}, this, convertData, path + "/" + instanceInfoName, abc, false, exportMode, false, scriptIndex, class_info, writer, fullyQualifiedNames, parallel, convertData.ignoreFrameScripts ? frameTraitNames : new ArrayList<>(), isInterface); + instanceInfo.instance_traits.toString(swfVersion, packageName, first, abcIndex, new Class[]{TraitClass.class, TraitFunction.class, TraitMethodGetterSetter.class}, this, convertData, path + "/" + instanceInfoName, abc, false, exportMode, false, scriptIndex, class_info, writer, fullyQualifiedNames, parallel, convertData.ignoreFrameScripts ? frameTraitNames : new ArrayList<>(), isInterface); if (first.getVal()) { writer.newLine(); @@ -342,27 +327,9 @@ public class TraitClass extends Trait implements TraitWithSlot { writer.newLine(); return writer; } - - /** - * Converts trait. - * - * @param abcIndex ABC indexing - * @param parent Parent trait - * @param convertData Convert data - * @param path Path - * @param abc ABC - * @param isStatic Is static - * @param exportMode Export mode - * @param scriptIndex Script index - * @param classIndex Class index - * @param writer Writer - * @param fullyQualifiedNames Fully qualified names - * @param parallel Parallel - * @param scopeStack Scope stack - * @throws InterruptedException On interrupt - */ + @Override - public void convert(AbcIndexing abcIndex, Trait parent, ConvertData convertData, String path, ABC abc, boolean isStatic, ScriptExportMode exportMode, int scriptIndex, int classIndex, NulWriter writer, List fullyQualifiedNames, boolean parallel, ScopeStack scopeStack) throws InterruptedException { + public void convert(int swfVersion, AbcIndexing abcIndex, Trait parent, ConvertData convertData, String path, ABC abc, boolean isStatic, ScriptExportMode exportMode, int scriptIndex, int classIndex, NulWriter writer, List fullyQualifiedNames, boolean parallel, ScopeStack scopeStack) throws InterruptedException { fullyQualifiedNames = new ArrayList<>(); @@ -404,7 +371,7 @@ public class TraitClass extends Trait implements TraitWithSlot { } } - abc.bodies.get(bodyIndex).convert(callStack, abcIndex, convertData, path + "/" + instanceInfoName + ".staticinitializer", exportMode, true, classInfo.cinit_index, scriptIndex, class_info, abc, this, newScopeStack, GraphTextWriter.TRAIT_CLASS_INITIALIZER, writer, fullyQualifiedNames, classInfo.static_traits, true, new HashSet<>()); + abc.bodies.get(bodyIndex).convert(swfVersion, callStack, abcIndex, convertData, path + "/" + instanceInfoName + ".staticinitializer", exportMode, true, classInfo.cinit_index, scriptIndex, class_info, abc, this, newScopeStack, GraphTextWriter.TRAIT_CLASS_INITIALIZER, writer, fullyQualifiedNames, classInfo.static_traits, true, new HashSet<>()); newScopeStack.push(new ClassAVM2Item(abc.instance_info.get(class_info).getName(abc.constants))); classInitializerIsEmpty = !writer.getMark(); @@ -417,7 +384,7 @@ public class TraitClass extends Trait implements TraitWithSlot { MethodBody constructorBody = abc.bodies.get(bodyIndex); List callStack = new ArrayList<>(); callStack.add(constructorBody); - constructorBody.convert(callStack, abcIndex, convertData, path + "/" + instanceInfoName + ".initializer", exportMode, false, instanceInfo.iinit_index, scriptIndex, class_info, abc, this, new ScopeStack(), GraphTextWriter.TRAIT_INSTANCE_INITIALIZER, writer, fullyQualifiedNames, instanceInfo.instance_traits, true, new HashSet<>()); + constructorBody.convert(swfVersion, callStack, abcIndex, convertData, path + "/" + instanceInfoName + ".initializer", exportMode, false, instanceInfo.iinit_index, scriptIndex, class_info, abc, this, new ScopeStack(), GraphTextWriter.TRAIT_INSTANCE_INITIALIZER, writer, fullyQualifiedNames, instanceInfo.instance_traits, true, new HashSet<>()); if (convertData.ignoreFrameScripts) { //find all addFrameScript(xx,this.method) in constructor @@ -472,9 +439,9 @@ public class TraitClass extends Trait implements TraitWithSlot { } //static variables,constants & methods - classInfo.static_traits.convert(abcIndex, this, convertData, path + "/" + instanceInfoName, abc, true, exportMode, false, scriptIndex, class_info, writer, fullyQualifiedNames, parallel, newScopeStack); + classInfo.static_traits.convert(swfVersion, abcIndex, this, convertData, path + "/" + instanceInfoName, abc, true, exportMode, false, scriptIndex, class_info, writer, fullyQualifiedNames, parallel, newScopeStack); - instanceInfo.instance_traits.convert(abcIndex, this, convertData, path + "/" + instanceInfoName, abc, false, exportMode, false, scriptIndex, class_info, writer, fullyQualifiedNames, parallel, newScopeStack); + instanceInfo.instance_traits.convert(swfVersion, abcIndex, this, convertData, path + "/" + instanceInfoName, abc, false, exportMode, false, scriptIndex, class_info, writer, fullyQualifiedNames, parallel, newScopeStack); } /** diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitFunction.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitFunction.java index ec6e5bd23..84d84fd3f 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitFunction.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitFunction.java @@ -77,7 +77,7 @@ public class TraitFunction extends Trait implements TraitWithSlot { } @Override - public GraphTextWriter toStringHeader(Trait parent, DottedChain packageName, ConvertData convertData, String path, ABC abc, boolean isStatic, ScriptExportMode exportMode, int scriptIndex, int classIndex, GraphTextWriter writer, List fullyQualifiedNames, boolean parallel, boolean insideInterface) { + public GraphTextWriter toStringHeader(int swfVersion, Trait parent, DottedChain packageName, ConvertData convertData, String path, ABC abc, boolean isStatic, ScriptExportMode exportMode, int scriptIndex, int classIndex, GraphTextWriter writer, List fullyQualifiedNames, boolean parallel, boolean insideInterface) { MethodBody body = abc.findBody(method_info); if (body == null) { writer.appendNoHilight("native "); @@ -91,24 +91,9 @@ public class TraitFunction extends Trait implements TraitWithSlot { abc.method_info.get(method_info).getReturnTypeStr(writer, abc.constants, fullyQualifiedNames); return writer; } - - /** - * Converts header. - * - * @param parent Parent trait - * @param convertData Convert data - * @param path Path - * @param abc ABC - * @param isStatic Is static - * @param exportMode Export mode - * @param scriptIndex Script index - * @param classIndex Class index - * @param writer Writer - * @param fullyQualifiedNames Fully qualified names - * @param parallel Parallel - */ + @Override - public void convertHeader(Trait parent, ConvertData convertData, String path, ABC abc, boolean isStatic, ScriptExportMode exportMode, int scriptIndex, int classIndex, NulWriter writer, List fullyQualifiedNames, boolean parallel) { + public void convertHeader(int swfVersion, Trait parent, ConvertData convertData, String path, ABC abc, boolean isStatic, ScriptExportMode exportMode, int scriptIndex, int classIndex, NulWriter writer, List fullyQualifiedNames, boolean parallel) { } /** @@ -124,10 +109,10 @@ public class TraitFunction extends Trait implements TraitWithSlot { } @Override - public GraphTextWriter toString(AbcIndexing abcIndex, DottedChain packageName, Trait parent, ConvertData convertData, String path, ABC abc, boolean isStatic, ScriptExportMode exportMode, int scriptIndex, int classIndex, GraphTextWriter writer, List fullyQualifiedNames, boolean parallel, boolean insideInterface) throws InterruptedException { + public GraphTextWriter toString(int swfVersion, AbcIndexing abcIndex, DottedChain packageName, Trait parent, ConvertData convertData, String path, ABC abc, boolean isStatic, ScriptExportMode exportMode, int scriptIndex, int classIndex, GraphTextWriter writer, List fullyQualifiedNames, boolean parallel, boolean insideInterface) throws InterruptedException { getMetaData(this, convertData, abc, writer); writer.startMethod(method_info, getName(abc).getName(abc.constants, new ArrayList<>(), true, false)); - toStringHeader(parent, packageName, convertData, path, abc, isStatic, exportMode, scriptIndex, classIndex, writer, fullyQualifiedNames, parallel, insideInterface); + toStringHeader(swfVersion, parent, packageName, convertData, path, abc, isStatic, exportMode, scriptIndex, classIndex, writer, fullyQualifiedNames, parallel, insideInterface); writer.startBlock(); int bodyIndex = abc.findBodyIndex(method_info); @@ -135,7 +120,7 @@ public class TraitFunction extends Trait implements TraitWithSlot { //writeUses(scriptIndex, classIndex, isStatic, abc, writer); List callStack = new ArrayList<>(); callStack.add(abc.bodies.get(bodyIndex)); - abc.bodies.get(bodyIndex).toString(callStack, abcIndex, path + "." + abc.constants.getMultiname(name_index).getName(abc.constants, fullyQualifiedNames, false, true), exportMode, abc, this, writer, fullyQualifiedNames, new HashSet<>()); + abc.bodies.get(bodyIndex).toString(swfVersion, callStack, abcIndex, path + "." + abc.constants.getMultiname(name_index).getName(abc.constants, fullyQualifiedNames, false, true), exportMode, abc, this, writer, fullyQualifiedNames, new HashSet<>()); } writer.endBlock(); @@ -144,34 +129,17 @@ public class TraitFunction extends Trait implements TraitWithSlot { return writer; } - /** - * Converts trait. - * - * @param abcIndex ABC indexing - * @param parent Parent trait - * @param convertData Convert data - * @param path Path - * @param abc ABC - * @param isStatic Is static - * @param exportMode Export mode - * @param scriptIndex Script index - * @param classIndex Class index - * @param writer Writer - * @param fullyQualifiedNames Fully qualified names - * @param parallel Parallel - * @param scopeStack Scope stack - * @throws InterruptedException On interrupt - */ + @Override - public void convert(AbcIndexing abcIndex, Trait parent, ConvertData convertData, String path, ABC abc, boolean isStatic, ScriptExportMode exportMode, int scriptIndex, int classIndex, NulWriter writer, List fullyQualifiedNames, boolean parallel, ScopeStack scopeStack) throws InterruptedException { + public void convert(int swfVersion, AbcIndexing abcIndex, Trait parent, ConvertData convertData, String path, ABC abc, boolean isStatic, ScriptExportMode exportMode, int scriptIndex, int classIndex, NulWriter writer, List fullyQualifiedNames, boolean parallel, ScopeStack scopeStack) throws InterruptedException { fullyQualifiedNames = new ArrayList<>(); writer.startMethod(method_info, getName(abc).getName(abc.constants, new ArrayList<>(), true, false)); - convertHeader(parent, convertData, path, abc, isStatic, exportMode, scriptIndex, classIndex, writer, fullyQualifiedNames, parallel); + convertHeader(swfVersion, parent, convertData, path, abc, isStatic, exportMode, scriptIndex, classIndex, writer, fullyQualifiedNames, parallel); int bodyIndex = abc.findBodyIndex(method_info); if (bodyIndex != -1) { List callStack = new ArrayList<>(); callStack.add(abc.bodies.get(bodyIndex)); - abc.bodies.get(bodyIndex).convert(callStack, abcIndex, convertData, path + "." + abc.constants.getMultiname(name_index).getName(abc.constants, fullyQualifiedNames, false, true), exportMode, isStatic, method_info, scriptIndex, classIndex, abc, this, scopeStack, 0, writer, fullyQualifiedNames, null, true, new HashSet<>()); + abc.bodies.get(bodyIndex).convert(swfVersion, callStack, abcIndex, convertData, path + "." + abc.constants.getMultiname(name_index).getName(abc.constants, fullyQualifiedNames, false, true), exportMode, isStatic, method_info, scriptIndex, classIndex, abc, this, scopeStack, 0, writer, fullyQualifiedNames, null, true, new HashSet<>()); } writer.endMethod(); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitMethodGetterSetter.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitMethodGetterSetter.java index 9836c06f8..b729c85d9 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitMethodGetterSetter.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitMethodGetterSetter.java @@ -69,24 +69,9 @@ public class TraitMethodGetterSetter extends Trait { abc.constants.getMultiname(name_index).deleted = d; abc.method_info.get(method_info).delete(abc, d); } - - /** - * Converts header. - * - * @param parent Parent trait - * @param convertData Convert data - * @param path Path - * @param abc ABC - * @param isStatic Is static - * @param exportMode Export mode - * @param scriptIndex Script index - * @param classIndex Class index - * @param writer Writer - * @param fullyQualifiedNames Fully qualified names - * @param parallel Parallel - */ + @Override - public void convertHeader(Trait parent, ConvertData convertData, String path, ABC abc, boolean isStatic, ScriptExportMode exportMode, int scriptIndex, int classIndex, NulWriter writer, List fullyQualifiedNames, boolean parallel) { + public void convertHeader(int swfVersion, Trait parent, ConvertData convertData, String path, ABC abc, boolean isStatic, ScriptExportMode exportMode, int scriptIndex, int classIndex, NulWriter writer, List fullyQualifiedNames, boolean parallel) { } /** @@ -122,7 +107,7 @@ public class TraitMethodGetterSetter extends Trait { } @Override - public GraphTextWriter toStringHeader(Trait parent, DottedChain packageName, ConvertData convertData, String path, ABC abc, boolean isStatic, ScriptExportMode exportMode, int scriptIndex, int classIndex, GraphTextWriter writer, List fullyQualifiedNames, boolean parallel, boolean insideInterface) { + public GraphTextWriter toStringHeader(int swfVersion, Trait parent, DottedChain packageName, ConvertData convertData, String path, ABC abc, boolean isStatic, ScriptExportMode exportMode, int scriptIndex, int classIndex, GraphTextWriter writer, List fullyQualifiedNames, boolean parallel, boolean insideInterface) { String addKind = ""; if (kindType == TRAIT_GETTER) { addKind = "get "; @@ -146,38 +131,20 @@ public class TraitMethodGetterSetter extends Trait { abc.method_info.get(method_info).getReturnTypeStr(writer, abc.constants, fullyQualifiedNames); return writer; } - - /** - * Converts trait. - * - * @param abcIndex ABC indexing - * @param parent Parent trait - * @param convertData Convert data - * @param path Path - * @param abc ABC - * @param isStatic Is static - * @param exportMode Export mode - * @param scriptIndex Script index - * @param classIndex Class index - * @param writer Writer - * @param fullyQualifiedNames Fully qualified names - * @param parallel Parallel - * @param scopeStack Scope stack - * @throws InterruptedException On interrupt - */ + @Override - public void convert(AbcIndexing abcIndex, Trait parent, ConvertData convertData, String path, ABC abc, boolean isStatic, ScriptExportMode exportMode, int scriptIndex, int classIndex, NulWriter writer, List fullyQualifiedNames, boolean parallel, ScopeStack scopeStack) throws InterruptedException { + public void convert(int swfVersion, AbcIndexing abcIndex, Trait parent, ConvertData convertData, String path, ABC abc, boolean isStatic, ScriptExportMode exportMode, int scriptIndex, int classIndex, NulWriter writer, List fullyQualifiedNames, boolean parallel, ScopeStack scopeStack) throws InterruptedException { int nsKind = getName(abc).getSimpleNamespaceKind(abc.constants); writer.startMethod(method_info, getName(abc).getName(abc.constants, new ArrayList<>(), true, false)); path = path + "." + getName(abc).getName(abc.constants, fullyQualifiedNames, false, true); - convertHeader(parent, convertData, path, abc, isStatic, exportMode, scriptIndex, classIndex, writer, fullyQualifiedNames, parallel); + convertHeader(swfVersion, parent, convertData, path, abc, isStatic, exportMode, scriptIndex, classIndex, writer, fullyQualifiedNames, parallel); int bodyIndex = abc.findBodyIndex(method_info); if (exportMode != ScriptExportMode.AS_METHOD_STUBS) { if (!(classIndex != -1 && abc.instance_info.get(classIndex).isInterface() || bodyIndex == -1)) { if (bodyIndex != -1) { List callStack = new ArrayList<>(); callStack.add(abc.bodies.get(bodyIndex)); - abc.bodies.get(bodyIndex).convert(callStack, abcIndex, convertData, path, exportMode, isStatic, method_info, scriptIndex, classIndex, abc, this, scopeStack, 0, writer, fullyQualifiedNames, null, true, new HashSet<>()); + abc.bodies.get(bodyIndex).convert(swfVersion, callStack, abcIndex, convertData, path, exportMode, isStatic, method_info, scriptIndex, classIndex, abc, this, scopeStack, 0, writer, fullyQualifiedNames, null, true, new HashSet<>()); } } } @@ -197,11 +164,11 @@ public class TraitMethodGetterSetter extends Trait { } @Override - public GraphTextWriter toString(AbcIndexing abcIndex, DottedChain packageName, Trait parent, ConvertData convertData, String path, ABC abc, boolean isStatic, ScriptExportMode exportMode, int scriptIndex, int classIndex, GraphTextWriter writer, List fullyQualifiedNames, boolean parallel, boolean insideInterface) throws InterruptedException { + public GraphTextWriter toString(int swfVersion, AbcIndexing abcIndex, DottedChain packageName, Trait parent, ConvertData convertData, String path, ABC abc, boolean isStatic, ScriptExportMode exportMode, int scriptIndex, int classIndex, GraphTextWriter writer, List fullyQualifiedNames, boolean parallel, boolean insideInterface) throws InterruptedException { getMetaData(this, convertData, abc, writer); writer.startMethod(method_info, getName(abc).getName(abc.constants, new ArrayList<>(), true, false)); path = path + "." + getName(abc).getName(abc.constants, fullyQualifiedNames, false, true); - toStringHeader(parent, packageName, convertData, path, abc, isStatic, exportMode, scriptIndex, classIndex, writer, fullyQualifiedNames, parallel, insideInterface); + toStringHeader(swfVersion, parent, packageName, convertData, path, abc, isStatic, exportMode, scriptIndex, classIndex, writer, fullyQualifiedNames, parallel, insideInterface); int bodyIndex = abc.findBodyIndex(method_info); if (classIndex != -1 && abc.instance_info.get(classIndex).isInterface() || bodyIndex == -1) { writer.appendNoHilight(";"); @@ -215,7 +182,7 @@ public class TraitMethodGetterSetter extends Trait { //writeUses(scriptIndex, classIndex, isStatic, abc, writer); List callStack = new ArrayList<>(); callStack.add(abc.bodies.get(bodyIndex)); - abc.bodies.get(bodyIndex).toString(callStack, abcIndex, path, exportMode, abc, this, writer, fullyQualifiedNames, new HashSet<>()); + abc.bodies.get(bodyIndex).toString(swfVersion, callStack, abcIndex, path, exportMode, abc, this, writer, fullyQualifiedNames, new HashSet<>()); } } else { String retTypeRaw = abc.method_info.get(method_info).getReturnTypeRaw(abc.constants, fullyQualifiedNames); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitSlotConst.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitSlotConst.java index 719fb2de6..d08349dcf 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitSlotConst.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitSlotConst.java @@ -164,6 +164,7 @@ public class TraitSlotConst extends Trait implements TraitWithSlot { /** * Gets value as string. * + * @param swfVersion SWF version * @param abcIndex ABC indexing * @param exportMode Export mode * @param convertData Convert data @@ -172,7 +173,7 @@ public class TraitSlotConst extends Trait implements TraitWithSlot { * @param fullyQualifiedNames Fully qualified names * @throws InterruptedException On interrupt */ - public void getValueStr(AbcIndexing abcIndex, ScriptExportMode exportMode, ConvertData convertData, GraphTextWriter writer, ABC abc, List fullyQualifiedNames) throws InterruptedException { + public void getValueStr(int swfVersion, AbcIndexing abcIndex, ScriptExportMode exportMode, ConvertData convertData, GraphTextWriter writer, ABC abc, List fullyQualifiedNames) throws InterruptedException { if (convertData.assignedValues.containsKey(this)) { AssignedValue assignment = convertData.assignedValues.get(this); @@ -188,7 +189,7 @@ public class TraitSlotConst extends Trait implements TraitWithSlot { if (exportMode != ScriptExportMode.AS_METHOD_STUBS) { List callStack = new ArrayList<>(); callStack.add(abc.bodies.get(abc.findBodyIndex(assignment.method))); - assignment.value.toString(writer, LocalData.create(callStack, abcIndex, abc, new HashMap<>(), fullyQualifiedNames, new HashSet<>(), exportMode)); + assignment.value.toString(writer, LocalData.create(callStack, abcIndex, abc, new HashMap<>(), fullyQualifiedNames, new HashSet<>(), exportMode, swfVersion)); } writer.endMethod(); writer.endTrait(); @@ -231,7 +232,7 @@ public class TraitSlotConst extends Trait implements TraitWithSlot { } @Override - public GraphTextWriter toString(AbcIndexing abcIndex, DottedChain packageName, Trait parent, ConvertData convertData, String path, ABC abc, boolean isStatic, ScriptExportMode exportMode, int scriptIndex, int classIndex, GraphTextWriter writer, List fullyQualifiedNames, boolean parallel, boolean insideInterface) throws InterruptedException { + public GraphTextWriter toString(int swfVersion, AbcIndexing abcIndex, DottedChain packageName, Trait parent, ConvertData convertData, String path, ABC abc, boolean isStatic, ScriptExportMode exportMode, int scriptIndex, int classIndex, GraphTextWriter writer, List fullyQualifiedNames, boolean parallel, boolean insideInterface) throws InterruptedException { getMetaData(this, convertData, abc, writer); Multiname n = getName(abc); boolean showModifier = true; @@ -252,40 +253,22 @@ public class TraitSlotConst extends Trait implements TraitWithSlot { List callStack = new ArrayList<>(); AssignedValue assignment = convertData.assignedValues.get(this); callStack.add(abc.bodies.get(abc.findBodyIndex(assignment.method))); - return val.toString(writer, LocalData.create(callStack, abcIndex, abc, new HashMap<>(), fullyQualifiedNames, new HashSet<>(), exportMode)); + return val.toString(writer, LocalData.create(callStack, abcIndex, abc, new HashMap<>(), fullyQualifiedNames, new HashSet<>(), exportMode, swfVersion)); } } getNameStr(writer, abc, fullyQualifiedNames); if (hasValueStr(abc, convertData)) { writer.appendNoHilight(" = "); - getValueStr(abcIndex, exportMode, convertData, writer, abc, fullyQualifiedNames); + getValueStr(swfVersion, abcIndex, exportMode, convertData, writer, abc, fullyQualifiedNames); } return writer.appendNoHilight(";").newLine(); } - /** - * Converts trait. - * - * @param abcIndex ABC indexing - * @param parent Parent trait - * @param convertData Convert data - * @param path Path - * @param abc ABC - * @param isStatic Is static - * @param exportMode Export mode - * @param scriptIndex Script index - * @param classIndex Class index - * @param writer Writer - * @param fullyQualifiedNames Fully qualified names - * @param parallel Parallel - * @param scopeStack Scope stack - * @throws InterruptedException On interrupt - */ @Override - public void convert(AbcIndexing abcIndex, Trait parent, ConvertData convertData, String path, ABC abc, boolean isStatic, ScriptExportMode exportMode, int scriptIndex, int classIndex, NulWriter writer, List fullyQualifiedNames, boolean parallel, ScopeStack scopeStack) throws InterruptedException { + public void convert(int swfVersion, AbcIndexing abcIndex, Trait parent, ConvertData convertData, String path, ABC abc, boolean isStatic, ScriptExportMode exportMode, int scriptIndex, int classIndex, NulWriter writer, List fullyQualifiedNames, boolean parallel, ScopeStack scopeStack) throws InterruptedException { getNameStr(writer, abc, fullyQualifiedNames); if (hasValueStr(abc, convertData)) { - getValueStr(abcIndex, exportMode, convertData, writer, abc, fullyQualifiedNames); + getValueStr(swfVersion, abcIndex, exportMode, convertData, writer, abc, fullyQualifiedNames); } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/Traits.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/Traits.java index a532d63a8..24eb223f8 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/Traits.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/Traits.java @@ -218,6 +218,7 @@ public class Traits implements Cloneable, Serializable { * Convert data */ ConvertData convertData; + private final int swfVersion; /** * ABC indexing @@ -232,6 +233,7 @@ public class Traits implements Cloneable, Serializable { /** * Constructs a new TraitConvertTask object. * + * @param swfVersion SWF version * @param abcIndex ABC indexing * @param trait Trait * @param parent Parent trait @@ -249,7 +251,7 @@ public class Traits implements Cloneable, Serializable { * @param parallel Parallel flag * @param scopeStack Scope stack */ - public TraitConvertTask(AbcIndexing abcIndex, Trait trait, Trait parent, ConvertData convertData, boolean makePackages, String path, ABC abc, boolean isStatic, ScriptExportMode exportMode, int scriptIndex, int classIndex, NulWriter writer, List fullyQualifiedNames, int traitIndex, boolean parallel, ScopeStack scopeStack) { + public TraitConvertTask(int swfVersion, AbcIndexing abcIndex, Trait trait, Trait parent, ConvertData convertData, boolean makePackages, String path, ABC abc, boolean isStatic, ScriptExportMode exportMode, int scriptIndex, int classIndex, NulWriter writer, List fullyQualifiedNames, int traitIndex, boolean parallel, ScopeStack scopeStack) { this.trait = trait; this.parent = parent; this.convertData = convertData; @@ -264,6 +266,7 @@ public class Traits implements Cloneable, Serializable { this.fullyQualifiedNames = fullyQualifiedNames; this.traitIndex = traitIndex; this.parallel = parallel; + this.swfVersion = swfVersion; this.abcIndex = abcIndex; this.scopeStack = scopeStack; } @@ -277,9 +280,9 @@ public class Traits implements Cloneable, Serializable { @Override public Void call() throws InterruptedException { if (makePackages) { - trait.convertPackaged(abcIndex, parent, convertData, path, abc, isStatic, exportMode, scriptIndex, classIndex, writer, fullyQualifiedNames, parallel, scopeStack); + trait.convertPackaged(swfVersion, abcIndex, parent, convertData, path, abc, isStatic, exportMode, scriptIndex, classIndex, writer, fullyQualifiedNames, parallel, scopeStack); } else { - trait.convert(abcIndex, parent, convertData, path, abc, isStatic, exportMode, scriptIndex, classIndex, writer, fullyQualifiedNames, parallel, scopeStack); + trait.convert(swfVersion, abcIndex, parent, convertData, path, abc, isStatic, exportMode, scriptIndex, classIndex, writer, fullyQualifiedNames, parallel, scopeStack); } return null; } @@ -288,6 +291,7 @@ public class Traits implements Cloneable, Serializable { /** * To string. * + * @param swfVersion SWF version * @param packageName Package name * @param first Whether to add newline * @param abcIndex ABC indexing @@ -309,7 +313,7 @@ public class Traits implements Cloneable, Serializable { * @return Writer * @throws InterruptedException On interrupt */ - public GraphTextWriter toString(DottedChain packageName, Reference first, AbcIndexing abcIndex, Class[] traitTypes, Trait parent, ConvertData convertData, String path, ABC abc, boolean isStatic, ScriptExportMode exportMode, boolean makePackages, int scriptIndex, int classIndex, GraphTextWriter writer, List fullyQualifiedNames, boolean parallel, List ignoredTraitNames, boolean insideInterface) throws InterruptedException { + public GraphTextWriter toString(int swfVersion, DottedChain packageName, Reference first, AbcIndexing abcIndex, Class[] traitTypes, Trait parent, ConvertData convertData, String path, ABC abc, boolean isStatic, ScriptExportMode exportMode, boolean makePackages, int scriptIndex, int classIndex, GraphTextWriter writer, List fullyQualifiedNames, boolean parallel, List ignoredTraitNames, boolean insideInterface) throws InterruptedException { List ordered = traits; for (Trait trait : ordered) { @@ -344,9 +348,9 @@ public class Traits implements Cloneable, Serializable { int h = abc.getGlobalTraitId(TraitType.METHOD , isStatic, classIndex, t); writer.startTrait(h); if (makePackages) { - trait.toStringPackaged(abcIndex, parent, convertData, path, abc, isStatic, exportMode, scriptIndex, classIndex, writer, fullyQualifiedNames, parallel, insideInterface); + trait.toStringPackaged(swfVersion, abcIndex, parent, convertData, path, abc, isStatic, exportMode, scriptIndex, classIndex, writer, fullyQualifiedNames, parallel, insideInterface); } else { - trait.toString(abcIndex, packageName, parent, convertData, path, abc, isStatic, exportMode, scriptIndex, classIndex, writer, fullyQualifiedNames, parallel, insideInterface); + trait.toString(swfVersion, abcIndex, packageName, parent, convertData, path, abc, isStatic, exportMode, scriptIndex, classIndex, writer, fullyQualifiedNames, parallel, insideInterface); } writer.endTrait(); } @@ -356,6 +360,7 @@ public class Traits implements Cloneable, Serializable { /** * Converts traits. * + * @param swfVersion SWF version * @param abcIndex ABC indexing * @param parent Parent trait * @param convertData Convert data @@ -372,10 +377,10 @@ public class Traits implements Cloneable, Serializable { * @param scopeStack Scope stack * @throws InterruptedException On interrupt */ - public void convert(AbcIndexing abcIndex, Trait parent, ConvertData convertData, String path, ABC abc, boolean isStatic, ScriptExportMode exportMode, boolean makePackages, int scriptIndex, int classIndex, NulWriter writer, List fullyQualifiedNames, boolean parallel, ScopeStack scopeStack) throws InterruptedException { + public void convert(int swfVersion, AbcIndexing abcIndex, Trait parent, ConvertData convertData, String path, ABC abc, boolean isStatic, ScriptExportMode exportMode, boolean makePackages, int scriptIndex, int classIndex, NulWriter writer, List fullyQualifiedNames, boolean parallel, ScopeStack scopeStack) throws InterruptedException { if (!parallel || traits.size() < 2) { for (int t = 0; t < traits.size(); t++) { - TraitConvertTask task = new TraitConvertTask(abcIndex, traits.get(t), parent, convertData, makePackages, path, abc, isStatic, exportMode, scriptIndex, classIndex, writer, fullyQualifiedNames, t, parallel, scopeStack); + TraitConvertTask task = new TraitConvertTask(swfVersion, abcIndex, traits.get(t), parent, convertData, makePackages, path, abc, isStatic, exportMode, scriptIndex, classIndex, writer, fullyQualifiedNames, t, parallel, scopeStack); task.call(); } } else { @@ -385,7 +390,7 @@ public class Traits implements Cloneable, Serializable { futureResults = new ArrayList<>(); for (int t = 0; t < traits.size(); t++) { // each convert task needs a separate NulWriter, because they are executed parallel - TraitConvertTask task = new TraitConvertTask(abcIndex, traits.get(t), parent, convertData, makePackages, path, abc, isStatic, exportMode, scriptIndex, classIndex, new NulWriter(), fullyQualifiedNames, t, parallel, scopeStack); + TraitConvertTask task = new TraitConvertTask(swfVersion, abcIndex, traits.get(t), parent, convertData, makePackages, path, abc, isStatic, exportMode, scriptIndex, classIndex, new NulWriter(), fullyQualifiedNames, t, parallel, scopeStack); Future future = executor.submit(task); futureResults.add(future); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/multinames/ConstVarMultinameUsage.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/multinames/ConstVarMultinameUsage.java index 10ff35c50..4886028df 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/multinames/ConstVarMultinameUsage.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/multinames/ConstVarMultinameUsage.java @@ -56,13 +56,13 @@ public abstract class ConstVarMultinameUsage extends TraitMultinameUsage { ConvertData convertData = new ConvertData(); if (parentTraitIndex > -1) { if (traitsType == TRAITS_TYPE_CLASS) { - ((TraitMethodGetterSetter) abc.class_info.get(classIndex).static_traits.traits.get(parentTraitIndex)).convertHeader(null, convertData, "", abc, traitsType == TRAITS_TYPE_CLASS, ScriptExportMode.AS, -1/*FIXME*/, classIndex, nulWriter, new ArrayList<>(), false); + ((TraitMethodGetterSetter) abc.class_info.get(classIndex).static_traits.traits.get(parentTraitIndex)).convertHeader(-1, null, convertData, "", abc, traitsType == TRAITS_TYPE_CLASS, ScriptExportMode.AS, -1/*FIXME*/, classIndex, nulWriter, new ArrayList<>(), false); } else if (traitsType == TRAITS_TYPE_INSTANCE) { - ((TraitMethodGetterSetter) abc.instance_info.get(classIndex).instance_traits.traits.get(parentTraitIndex)).convertHeader(null, convertData, "", abc, traitsType == TRAITS_TYPE_CLASS, ScriptExportMode.AS, -1/*FIXME*/, classIndex, nulWriter, new ArrayList<>(), false); + ((TraitMethodGetterSetter) abc.instance_info.get(classIndex).instance_traits.traits.get(parentTraitIndex)).convertHeader(-1, null, convertData, "", abc, traitsType == TRAITS_TYPE_CLASS, ScriptExportMode.AS, -1/*FIXME*/, classIndex, nulWriter, new ArrayList<>(), false); } } try { - ((TraitSlotConst) traits.traits.get(traitIndex)).convertHeader(null, convertData, "", abc, traitsType == TRAITS_TYPE_CLASS /*?? FIXME*/, ScriptExportMode.AS, -1/*FIXME*/, classIndex, nulWriter, new ArrayList<>(), false); + ((TraitSlotConst) traits.traits.get(traitIndex)).convertHeader(-1, null, convertData, "", abc, traitsType == TRAITS_TYPE_CLASS /*?? FIXME*/, ScriptExportMode.AS, -1/*FIXME*/, classIndex, nulWriter, new ArrayList<>(), false); } catch (InterruptedException ex) { // ignore } @@ -76,13 +76,13 @@ public abstract class ConstVarMultinameUsage extends TraitMultinameUsage { if (parentTraitIndex > -1) { if (traitsType == TRAITS_TYPE_CLASS) { - ((TraitMethodGetterSetter) abc.class_info.get(classIndex).static_traits.traits.get(parentTraitIndex)).toStringHeader(null, DottedChain.EMPTY /*??*/, convertData, "", abc, traitsType == TRAITS_TYPE_CLASS, ScriptExportMode.AS, -1/*FIXME*/, classIndex, writer, new ArrayList<>(), false, insideInterface); + ((TraitMethodGetterSetter) abc.class_info.get(classIndex).static_traits.traits.get(parentTraitIndex)).toStringHeader(-1, null, DottedChain.EMPTY /*??*/, convertData, "", abc, traitsType == TRAITS_TYPE_CLASS, ScriptExportMode.AS, -1/*FIXME*/, classIndex, writer, new ArrayList<>(), false, insideInterface); } else if (traitsType == TRAITS_TYPE_INSTANCE) { - ((TraitMethodGetterSetter) abc.instance_info.get(classIndex).instance_traits.traits.get(parentTraitIndex)).toStringHeader(null, DottedChain.EMPTY /*??*/, convertData, "", abc, traitsType == TRAITS_TYPE_CLASS, ScriptExportMode.AS, -1/*FIXME*/, classIndex, writer, new ArrayList<>(), false, insideInterface); + ((TraitMethodGetterSetter) abc.instance_info.get(classIndex).instance_traits.traits.get(parentTraitIndex)).toStringHeader(-1, null, DottedChain.EMPTY /*??*/, convertData, "", abc, traitsType == TRAITS_TYPE_CLASS, ScriptExportMode.AS, -1/*FIXME*/, classIndex, writer, new ArrayList<>(), false, insideInterface); } } try { - ((TraitSlotConst) traits.traits.get(traitIndex)).toStringHeader(null, DottedChain.EMPTY /*??*/, convertData, "", abc, traitsType == TRAITS_TYPE_CLASS, ScriptExportMode.AS, -1/*FIXME*/, classIndex, writer, new ArrayList<>(), false, insideInterface); + ((TraitSlotConst) traits.traits.get(traitIndex)).toStringHeader(-1, null, DottedChain.EMPTY /*??*/, convertData, "", abc, traitsType == TRAITS_TYPE_CLASS, ScriptExportMode.AS, -1/*FIXME*/, classIndex, writer, new ArrayList<>(), false, insideInterface); } catch (InterruptedException ex) { // ignore } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/multinames/MethodMultinameUsage.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/multinames/MethodMultinameUsage.java index 3dd98b9ff..3992d24c5 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/multinames/MethodMultinameUsage.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/multinames/MethodMultinameUsage.java @@ -68,12 +68,12 @@ public abstract class MethodMultinameUsage extends TraitMultinameUsage { if (!isInitializer) { if (parentTraitIndex > -1) { if (traitsType == TRAITS_TYPE_CLASS) { - ((TraitMethodGetterSetter) abc.class_info.get(classIndex).static_traits.traits.get(parentTraitIndex)).convertHeader(null, convertData, "", abc, traitsType == TRAITS_TYPE_CLASS, ScriptExportMode.AS, -1/*FIXME*/, classIndex, nulWriter, new ArrayList<>(), false); + ((TraitMethodGetterSetter) abc.class_info.get(classIndex).static_traits.traits.get(parentTraitIndex)).convertHeader(-1, null, convertData, "", abc, traitsType == TRAITS_TYPE_CLASS, ScriptExportMode.AS, -1/*FIXME*/, classIndex, nulWriter, new ArrayList<>(), false); } else { - ((TraitMethodGetterSetter) abc.instance_info.get(classIndex).instance_traits.traits.get(parentTraitIndex)).convertHeader(null, convertData, "", abc, traitsType == TRAITS_TYPE_CLASS, ScriptExportMode.AS, -1/*FIXME*/, classIndex, nulWriter, new ArrayList<>(), false); + ((TraitMethodGetterSetter) abc.instance_info.get(classIndex).instance_traits.traits.get(parentTraitIndex)).convertHeader(-1, null, convertData, "", abc, traitsType == TRAITS_TYPE_CLASS, ScriptExportMode.AS, -1/*FIXME*/, classIndex, nulWriter, new ArrayList<>(), false); } } - ((TraitMethodGetterSetter) traits.traits.get(traitIndex)).convertHeader(null, convertData, "", abc, traitsType == TRAITS_TYPE_CLASS, ScriptExportMode.AS, -1/*FIXME*/, classIndex, nulWriter, new ArrayList<>(), false); + ((TraitMethodGetterSetter) traits.traits.get(traitIndex)).convertHeader(-1, null, convertData, "", abc, traitsType == TRAITS_TYPE_CLASS, ScriptExportMode.AS, -1/*FIXME*/, classIndex, nulWriter, new ArrayList<>(), false); } HighlightedTextWriter writer = new HighlightedTextWriter(Configuration.getCodeFormatting(), false); @@ -100,13 +100,13 @@ public abstract class MethodMultinameUsage extends TraitMultinameUsage { } if (parentTraitIndex > -1) { if (traitsType == TRAITS_TYPE_CLASS) { - ((TraitMethodGetterSetter) abc.class_info.get(classIndex).static_traits.traits.get(parentTraitIndex)).toStringHeader(null, DottedChain.EMPTY /*??*/, convertData, "", abc, traitsType == TRAITS_TYPE_CLASS, ScriptExportMode.AS, -1/*FIXME*/, classIndex, writer, new ArrayList<>(), false, insideInterface); + ((TraitMethodGetterSetter) abc.class_info.get(classIndex).static_traits.traits.get(parentTraitIndex)).toStringHeader(-1, null, DottedChain.EMPTY /*??*/, convertData, "", abc, traitsType == TRAITS_TYPE_CLASS, ScriptExportMode.AS, -1/*FIXME*/, classIndex, writer, new ArrayList<>(), false, insideInterface); } else { - ((TraitMethodGetterSetter) abc.instance_info.get(classIndex).instance_traits.traits.get(parentTraitIndex)).toStringHeader(null, DottedChain.EMPTY /*??*/,convertData, "", abc, traitsType == TRAITS_TYPE_CLASS, ScriptExportMode.AS, -1/*FIXME*/, classIndex, writer, new ArrayList<>(), false, insideInterface); + ((TraitMethodGetterSetter) abc.instance_info.get(classIndex).instance_traits.traits.get(parentTraitIndex)).toStringHeader(-1, null, DottedChain.EMPTY /*??*/,convertData, "", abc, traitsType == TRAITS_TYPE_CLASS, ScriptExportMode.AS, -1/*FIXME*/, classIndex, writer, new ArrayList<>(), false, insideInterface); } writer.appendNoHilight(" "); } - ((TraitMethodGetterSetter) traits.traits.get(traitIndex)).toStringHeader(null, DottedChain.EMPTY /*??*/, convertData, "", abc, traitsType == TRAITS_TYPE_CLASS, ScriptExportMode.AS, -1/*FIXME*/, classIndex, writer, new ArrayList<>(), false, insideInterface); + ((TraitMethodGetterSetter) traits.traits.get(traitIndex)).toStringHeader(-1, null, DottedChain.EMPTY /*??*/, convertData, "", abc, traitsType == TRAITS_TYPE_CLASS, ScriptExportMode.AS, -1/*FIXME*/, classIndex, writer, new ArrayList<>(), false, insideInterface); } writer.finishHilights(); return writer.toString().trim(); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/script/AS3ScriptExporter.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/script/AS3ScriptExporter.java index 6d728bcc4..28a232074 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/script/AS3ScriptExporter.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/script/AS3ScriptExporter.java @@ -135,13 +135,13 @@ public class AS3ScriptExporter { } - private String handleMxmlMethod(AbcIndexing abcIndex, Map namespaces, ScriptPack pack, int cindex, TraitMethodGetterSetter t) { + private String handleMxmlMethod(int swfVersion, AbcIndexing abcIndex, Map namespaces, ScriptPack pack, int cindex, TraitMethodGetterSetter t) { StringBuilder out = new StringBuilder(); int method = t.method_info; try { List callStack = new ArrayList<>(); callStack.add(pack.abc.findBody(method)); - pack.abc.findBody(method).convert(callStack, abcIndex, new ConvertData(), "??", ScriptExportMode.AS, false, method, pack.scriptIndex, cindex, pack.abc, t, new ScopeStack(), 0/*?*/, new NulWriter(), new ArrayList<>(), new Traits(), true, new HashSet<>()); + pack.abc.findBody(method).convert(swfVersion, callStack, abcIndex, new ConvertData(), "??", ScriptExportMode.AS, false, method, pack.scriptIndex, cindex, pack.abc, t, new ScopeStack(), 0/*?*/, new NulWriter(), new ArrayList<>(), new Traits(), true, new HashSet<>()); List ci = pack.abc.findBody(method).convertedItems; if (!ci.isEmpty()) { @@ -170,7 +170,7 @@ public class AS3ScriptExporter { int name2 = ((FullMultinameAVM2Item) cap.propertyName).multinameIndex; for (Trait ct : pack.abc.instance_info.get(cindex).instance_traits.traits) { if (ct.name_index == name2 && (ct instanceof TraitMethodGetterSetter)) { - tagContent.append(handleMxmlMethod(abcIndex, namespaces, pack, cindex, (TraitMethodGetterSetter) ct)); + tagContent.append(handleMxmlMethod(swfVersion, abcIndex, namespaces, pack, cindex, (TraitMethodGetterSetter) ct)); } } } @@ -210,13 +210,13 @@ public class AS3ScriptExporter { return out.toString(); } - private String handleMxmlArrMethod(AbcIndexing abcIndex, Map namespaces, ScriptPack pack, int cindex, TraitMethodGetterSetter t) { + private String handleMxmlArrMethod(int swfVersion, AbcIndexing abcIndex, Map namespaces, ScriptPack pack, int cindex, TraitMethodGetterSetter t) { StringBuilder out = new StringBuilder(); int method = t.method_info; try { List callStack = new ArrayList<>(); callStack.add(pack.abc.findBody(method)); - pack.abc.findBody(method).convert(callStack, abcIndex, new ConvertData(), "??", ScriptExportMode.AS, false, method, pack.scriptIndex, cindex, pack.abc, t, new ScopeStack(), 0/*?*/, new NulWriter(), new ArrayList<>(), new Traits(), true, new HashSet<>()/*??*/); + pack.abc.findBody(method).convert(swfVersion, callStack, abcIndex, new ConvertData(), "??", ScriptExportMode.AS, false, method, pack.scriptIndex, cindex, pack.abc, t, new ScopeStack(), 0/*?*/, new NulWriter(), new ArrayList<>(), new Traits(), true, new HashSet<>()/*??*/); List ci = pack.abc.findBody(method).convertedItems; if (!ci.isEmpty() && (ci.get(0) instanceof DeclarationAVM2Item)) { @@ -232,7 +232,7 @@ public class AS3ScriptExporter { int name = ((FullMultinameAVM2Item) cp.propertyName).multinameIndex; for (Trait ct : pack.abc.instance_info.get(cindex).instance_traits.traits) { if (ct.name_index == name && (ct instanceof TraitMethodGetterSetter)) { - out.append(handleMxmlMethod(abcIndex, namespaces, pack, cindex, (TraitMethodGetterSetter) ct)); + out.append(handleMxmlMethod(swfVersion, abcIndex, namespaces, pack, cindex, (TraitMethodGetterSetter) ct)); } } } @@ -285,7 +285,7 @@ public class AS3ScriptExporter { return ns + ":" + parentName; } - private String generateMxml(AbcIndexing abcIndex, ScriptPack pack) { + private String generateMxml(int swfVersion, AbcIndexing abcIndex, ScriptPack pack) { StringBuilder out = new StringBuilder(); StringBuilder tagProp = new StringBuilder(); StringBuilder tagContent = new StringBuilder(); @@ -309,7 +309,7 @@ public class AS3ScriptExporter { try { List callStack = new ArrayList<>(); callStack.add(pack.abc.findBody(iinit)); - pack.abc.findBody(iinit).convert(callStack, abcIndex, new ConvertData(), "??", ScriptExportMode.AS, false, iinit, pack.scriptIndex, cindex, pack.abc, t, new ScopeStack(), 0/*?*/, new NulWriter(), new ArrayList<>(), new Traits(), true, new HashSet<>()); + pack.abc.findBody(iinit).convert(swfVersion, callStack, abcIndex, new ConvertData(), "??", ScriptExportMode.AS, false, iinit, pack.scriptIndex, cindex, pack.abc, t, new ScopeStack(), 0/*?*/, new NulWriter(), new ArrayList<>(), new Traits(), true, new HashSet<>()); List iinitBody = pack.abc.findBody(iinit).convertedItems; for (GraphTargetItem it : iinitBody) { if (it instanceof InitPropertyAVM2Item) { @@ -325,7 +325,7 @@ public class AS3ScriptExporter { int name = ((FullMultinameAVM2Item) cp.propertyName).multinameIndex; for (Trait ct : pack.abc.instance_info.get(cindex).instance_traits.traits) { if (ct.name_index == name && (ct instanceof TraitMethodGetterSetter)) { - tagContent.append(handleMxmlMethod(abcIndex, namespaces, pack, cindex, (TraitMethodGetterSetter) ct)); + tagContent.append(handleMxmlMethod(swfVersion, abcIndex, namespaces, pack, cindex, (TraitMethodGetterSetter) ct)); } } tagContent.append(""); @@ -343,7 +343,7 @@ public class AS3ScriptExporter { int name = ((FullMultinameAVM2Item) gp.propertyName).multinameIndex; for (Trait ct : pack.abc.instance_info.get(cindex).instance_traits.traits) { if (ct.name_index == name && (ct instanceof TraitMethodGetterSetter)) { - tagContent.append(handleMxmlArrMethod(abcIndex, namespaces, pack, cindex, (TraitMethodGetterSetter) ct)); + tagContent.append(handleMxmlArrMethod(swfVersion, abcIndex, namespaces, pack, cindex, (TraitMethodGetterSetter) ct)); } } } @@ -471,7 +471,7 @@ public class AS3ScriptExporter { if (flexClass != null && item.getClassPath().toRawString().equals(flexClass)) { File file = item.getExportFile(outdir, ".mxml"); String filePath = file.getPath(); - String mxml = generateMxml(swf.getAbcIndex(), item); + String mxml = generateMxml(swf.version, swf.getAbcIndex(), item); if (mxml != null) { Helper.writeFile(filePath, Utf8Helper.getBytes(mxml)); files.add(filePath.toLowerCase()); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/script/PcodeGraphVizExporter.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/script/PcodeGraphVizExporter.java index 19bba73a5..2a2e21e39 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/script/PcodeGraphVizExporter.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/script/PcodeGraphVizExporter.java @@ -101,7 +101,7 @@ public class PcodeGraphVizExporter { * @throws InterruptedException On interrupt */ public void exportAs3(AbcIndexing abcIndex, ABC abc, MethodBody body, GraphTextWriter writer) throws InterruptedException { - AVM2Graph gr = new AVM2Graph(abcIndex, body.getCode(), abc, body, false, -1, -1, new HashMap<>(), new ScopeStack(), new ScopeStack(), new HashMap<>(), new ArrayList<>(), new HashMap<>()); // body.getCode().visitCode(body)); + AVM2Graph gr = new AVM2Graph(-1, abcIndex, body.getCode(), abc, body, false, -1, -1, new HashMap<>(), new ScopeStack(), new ScopeStack(), new HashMap<>(), new ArrayList<>(), new HashMap<>()); // body.getCode().visitCode(body)); export(gr, writer); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/xfl/XFLConverter.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/xfl/XFLConverter.java index 60511a3ea..54071fc8f 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/xfl/XFLConverter.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/xfl/XFLConverter.java @@ -2813,6 +2813,11 @@ public class XFLConverter { } private static Map getFrameScriptsFromPack(AbcIndexing abcIndex, ScriptPack pack) { + + int swfVersion = -1; + if (pack.getOpenable() instanceof SWF) { + swfVersion = ((SWF) pack.getOpenable()).version; + } Map ret = new HashMap<>(); int classIndex = getPackMainClassId(pack); if (classIndex > -1) { @@ -2823,7 +2828,7 @@ public class XFLConverter { try { List callStack = new ArrayList<>(); callStack.add(constructorBody); - constructorBody.convert(callStack, abcIndex, new ConvertData(), "??", ScriptExportMode.AS, false, constructorMethodIndex, pack.scriptIndex, classIndex, abc, null, new ScopeStack(), GraphTextWriter.TRAIT_INSTANCE_INITIALIZER, new NulWriter(), new ArrayList<>(), new Traits(), true, new HashSet<>()); + constructorBody.convert(swfVersion, callStack, abcIndex, new ConvertData(), "??", ScriptExportMode.AS, false, constructorMethodIndex, pack.scriptIndex, classIndex, abc, null, new ScopeStack(), GraphTextWriter.TRAIT_INSTANCE_INITIALIZER, new NulWriter(), new ArrayList<>(), new Traits(), true, new HashSet<>()); Map frameToTraitName = new HashMap<>(); @@ -2889,10 +2894,11 @@ public class XFLConverter { StringBuilder scriptBuilder = new StringBuilder(); callStack = new ArrayList<>(); - callStack.add(frameBody); - frameBody.convert(callStack, abcIndex, new ConvertData(), "??", ScriptExportMode.AS, false, methodIndex, pack.scriptIndex, classIndex, abc, methodTrait, new ScopeStack(), 0, new NulWriter(), new ArrayList<>(), new Traits(), true, new HashSet<>()); + callStack.add(frameBody); + + frameBody.convert(swfVersion, callStack, abcIndex, new ConvertData(), "??", ScriptExportMode.AS, false, methodIndex, pack.scriptIndex, classIndex, abc, methodTrait, new ScopeStack(), 0, new NulWriter(), new ArrayList<>(), new Traits(), true, new HashSet<>()); StringBuilderTextWriter writer = new StringBuilderTextWriter(Configuration.getCodeFormatting(), scriptBuilder); - frameBody.toString(callStack, abcIndex, "??", ScriptExportMode.AS, abc, methodTrait, writer, new ArrayList<>(), new HashSet<>()); + frameBody.toString(swfVersion, callStack, abcIndex, "??", ScriptExportMode.AS, abc, methodTrait, writer, new ArrayList<>(), new HashSet<>()); String script = scriptBuilder.toString(); ret.put(frame, script); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/Graph.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/Graph.java index 9d2096410..63cca1569 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/Graph.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/Graph.java @@ -3352,7 +3352,8 @@ public class Graph { } else { ternarOnFalse = filteredOnFalse.get(0).value; } - stack.push(new TernarOpItem(null, localData.lineStartInstruction, expr.invert(null), ternarOnTrue, ternarOnFalse)); + TernarOpItem top = new TernarOpItem(null, localData.lineStartInstruction, expr.invert(null), ternarOnTrue, ternarOnFalse); + stack.push(handleTernar(top, localData)); } else { boolean isIf = true; //If the ontrue is empty, switch ontrue and onfalse @@ -4292,4 +4293,14 @@ public class Graph { protected boolean partIsSwitch(GraphPart part) { return false; } + + /** + * Replaces ternar with custom value + * @param ternar Ternar + * @param localData Local data + * @return Custom item + */ + protected GraphTargetItem handleTernar(TernarOpItem ternar, BaseLocalData localData) { + return ternar; + } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/GraphTargetItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/GraphTargetItem.java index a9ef460af..2cee054f7 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/GraphTargetItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/GraphTargetItem.java @@ -87,13 +87,15 @@ public abstract class GraphTargetItem implements Serializable, Cloneable { public static final int PRECEDENCE_LOGICALOR = 12; - public static final int PRECEDENCE_CONDITIONAL = 13; + public static final int PRECEDENCE_NULLCOALESCE = 13; + + public static final int PRECEDENCE_CONDITIONAL = 14; - public static final int PRECEDENCE_ASSIGNMENT = 14; + public static final int PRECEDENCE_ASSIGNMENT = 15; - public static final int PRECEDENCE_COMMA = 15; + public static final int PRECEDENCE_COMMA = 16; - public static final int NOPRECEDENCE = 16; + public static final int NOPRECEDENCE = 17; /** * Source item diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/LocalData.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/LocalData.java index 955000cd4..d934545bb 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/LocalData.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/LocalData.java @@ -85,6 +85,11 @@ public class LocalData { */ public ScriptExportMode exportMode; + /** + * SWF version + */ + public int swfVersion; + /** * Creates a new local data * @@ -105,10 +110,11 @@ public class LocalData { * @param localRegNames Local register names * @param fullyQualifiedNames Fully qualified names * @param seenMethods Seen methods - * @param exportMode + * @param exportMode Export mode + * @param swfVersion SWF version * @return Local data */ - public static LocalData create(List callStack, AbcIndexing abcIndex, ABC abc, HashMap localRegNames, List fullyQualifiedNames, Set seenMethods, ScriptExportMode exportMode) { + public static LocalData create(List callStack, AbcIndexing abcIndex, ABC abc, HashMap localRegNames, List fullyQualifiedNames, Set seenMethods, ScriptExportMode exportMode, int swfVersion) { LocalData localData = new LocalData(); localData.abc = abc; localData.constantsAvm2 = abc.constants; @@ -118,6 +124,7 @@ public class LocalData { localData.abcIndex = abcIndex; localData.callStack = callStack; localData.exportMode = exportMode; + localData.swfVersion = swfVersion; return localData; } } diff --git a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionScript3DecompileTestBase.java b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionScript3DecompileTestBase.java index b5f7fd59c..fbbbfde1c 100644 --- a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionScript3DecompileTestBase.java +++ b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionScript3DecompileTestBase.java @@ -107,9 +107,9 @@ public abstract class ActionScript3DecompileTestBase extends ActionScriptTestBas List callStack = new ArrayList<>(); callStack.add(abc.bodies.get(bodyIndex)); - abc.bodies.get(bodyIndex).convert(callStack, swf.getAbcIndex(), new ConvertData(), "run", ScriptExportMode.AS, isStatic, abc.bodies.get(bodyIndex).method_info, scriptIndex, clsIndex, abc, null, new ScopeStack(), 0, new NulWriter(), new ArrayList<>(), abc.instance_info.get(clsIndex).instance_traits, true, new HashSet<>()); + abc.bodies.get(bodyIndex).convert(swf.version, callStack, swf.getAbcIndex(), new ConvertData(), "run", ScriptExportMode.AS, isStatic, abc.bodies.get(bodyIndex).method_info, scriptIndex, clsIndex, abc, null, new ScopeStack(), 0, new NulWriter(), new ArrayList<>(), abc.instance_info.get(clsIndex).instance_traits, true, new HashSet<>()); writer = new HighlightedTextWriter(new CodeFormatting(), false); - abc.bodies.get(bodyIndex).toString(callStack, swf.getAbcIndex(), "run", ScriptExportMode.AS, abc, null, writer, new ArrayList<>(), new HashSet<>()); + abc.bodies.get(bodyIndex).toString(swf.version, callStack, swf.getAbcIndex(), "run", ScriptExportMode.AS, abc, null, writer, new ArrayList<>(), new HashSet<>()); } catch (InterruptedException ex) { fail(); return; diff --git a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/generators/AS3Generator.java b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/generators/AS3Generator.java index 0dffc827a..0cf73f548 100644 --- a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/generators/AS3Generator.java +++ b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/generators/AS3Generator.java @@ -159,8 +159,8 @@ public class AS3Generator { List callStack = new ArrayList<>(); callStack.add(b); - b.convert(callStack, swf.getAbcIndex(), new ConvertData(), "", ScriptExportMode.AS, false, ((TraitMethodGetterSetter) t).method_info, pack.scriptIndex, classId, abc, null, new ScopeStack(), 0, new NulWriter(), new ArrayList<>(), abc.instance_info.get(classId).instance_traits, true, new HashSet<>()); - b.toString(callStack, swf.getAbcIndex(), "", ScriptExportMode.AS, abc, null, src, new ArrayList<>(), new HashSet<>()); + b.convert(swf.version, callStack, swf.getAbcIndex(), new ConvertData(), "", ScriptExportMode.AS, false, ((TraitMethodGetterSetter) t).method_info, pack.scriptIndex, classId, abc, null, new ScopeStack(), 0, new NulWriter(), new ArrayList<>(), abc.instance_info.get(classId).instance_traits, true, new HashSet<>()); + b.toString(swf.version, callStack, swf.getAbcIndex(), "", ScriptExportMode.AS, abc, null, src, new ArrayList<>(), new HashSet<>()); src.finishHilights(); String[] srcs = src.toString().split("[\r\n]+"); for (int i = 0; i < srcs.length; i++) { diff --git a/libsrc/ffdec_lib/testdata/as3_harman/bin/harman.swf b/libsrc/ffdec_lib/testdata/as3_harman/bin/harman.swf index a5e8688076132c75bd4f67d7d0be90f0d3e0d8bc..a88da8fee47f1c77d7ec43e5147737bed6584607 100644 GIT binary patch literal 56699 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 literal 56366 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�$MdNK!@uoQvA^zUwb0EZ1MS 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

Zl8lAMl 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 literal 56428 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⪚&kk)u~-&-OgWS*IXl|_P(pXiWg(cp;r8leo%qWGd)Qg-c%GUgSmoGqqA zGK#Pze~gpW$zR_V@a(Hm;$HbcX@IAj4$?x^->+0g_27xzj{N?w=`}qRni>Q?Min>h zNThgs#U9QrdOhM)CFr%8XYFCsRg1#3f9&7X}Wl=?(?71 z0zR=afndPJH|qFYm^*TP!d+Z3%|MSjI(v<(ynPlR$b@h~&VPwldotHgtefw2oTN`H z?$Wf5w7q)5K8BaI;ITAjt7UXe=Hv@h9!^BWzQQ=eyS?V!Y+C8U_|(Hwtl+U*sa>wm z^fzAc5NEdpFXinr3qhA-ofqLNa`fIvA4^M2#AuirV&YwC(3^>=sNVwRYS^$@sTi0wBxyt!`97mG_P0__ zGNG!mM(v>t*N%^l;wNsXJeMeL9P)3FNT6!|^7mu;;YR9-^;_1yM;)6g39B{On3Zs4 zP{_nr;KafLBgIE;#C@xw+1HPQ#na*uh3S)P8AO@bsEUE8x8^1M ziA>Nb)w^3pjiEK&_79JD%0Q0>*E#>X9i{Rd~8AAOi} zvA3<+(}(+o$aM&8bo3I}SsbPN^&Rm1Z5E{dGk^I|__i0XtpuL_nk%(?i7J6gvl{2l zqQ7)?L9h>r)cl#0{}6hw*pi&%cGv+Uv5BQaUVOM$>XKGSmkVrSxRCJ69#3Z>HOPya z<(;tBWo}_Q0Gh*u`9$5Ogj-gMr={>_C6#%ze0^T1eZr46{XdRtS7RL4m<@3(YORfA z@Oy$8V=_?ap6NKDVR?N=M*CRLyzi`!0lBGSAzlKx$c4p&O047^U+Yz~->o{~#aHKM z1RDD_k&%fLS61bbgm8$2n+bvuyl-!wa=@>h%G%|8OOv1x0UG!?*qc05)0o7}NS(M> zcW_x8JKxR5 zxeS<&X`IAe>;B~gfCW7lqCyl(OT!MXK2!+{$9)iKIuBlNvT=7!5%48%W#Ke+lHF5# zKe)H&0h^;gY|%}|9L6-LmN)zl52azVWgQG*$$kVL9iy&{Kj2NVJzlS8GA^6-T4+I3 zIuX-bg$PSSK5DgoHAg>)#N2PStBIa1EraidL$AlMHDmC0aUj-taDFLK<-sl|QF!z4 zgl~EFd?|V23gsz{fb~IwLgZ9=kZ5)cOqBy4Li{uA5~=h+3c%bKB2N)L1s8vnm@(Xg z=E*3DR~xgugV+1OChV830B>ipx@dDu0+2B_1!(22s1TrCF7>X~%TSrm!-pD*EJ|BNp))SUm=) z%R;wIv%g>t=Qo_DI zMk4as{}FaQNKB!L#e_`XN6gPQF3y3y1i}iZ*s`wHD3jUY1gMyWS<>r$d#jGJ3?u`! h`jSdku_kC9Jg@k1ZseMZNFWntA}}0uEEk^Zn97A0b1MJ< diff --git a/libsrc/ffdec_lib/testdata/as3_harman/src/Main.as b/libsrc/ffdec_lib/testdata/as3_harman/src/Main.as index f9f7a0a8b..545dce930 100644 --- a/libsrc/ffdec_lib/testdata/as3_harman/src/Main.as +++ b/libsrc/ffdec_lib/testdata/as3_harman/src/Main.as @@ -11,7 +11,9 @@ package import flash.system.ApplicationDomain; public class Main extends Sprite - { + { + + Operators; private var swfLoader: Loader; diff --git a/libsrc/ffdec_lib/testdata/as3_harman/src/Operators.as b/libsrc/ffdec_lib/testdata/as3_harman/src/Operators.as new file mode 100644 index 000000000..57330f7e4 --- /dev/null +++ b/libsrc/ffdec_lib/testdata/as3_harman/src/Operators.as @@ -0,0 +1,20 @@ +package +{ + public class Operators + { + private var a:Object = {x:1, y:2}; + private var b:String = null; + + public function testNullMember() : void { + var result:*; + + result = a?.z; + } + + public function testNullCoalesce() :void { + var result:String; + + result = b ?? "empty"; + } + } +} diff --git a/src/com/jpexs/decompiler/flash/gui/abc/ASMSourceEditorPane.java b/src/com/jpexs/decompiler/flash/gui/abc/ASMSourceEditorPane.java index 43ec77936..de17a03b5 100644 --- a/src/com/jpexs/decompiler/flash/gui/abc/ASMSourceEditorPane.java +++ b/src/com/jpexs/decompiler/flash/gui/abc/ASMSourceEditorPane.java @@ -267,7 +267,7 @@ public class ASMSourceEditorPane extends DebuggableEditorPane implements CaretLi public void graph() { try { - AVM2Graph gr = new AVM2Graph(null /*?*/, abc.bodies.get(bodyIndex).getCode(), abc, abc.bodies.get(bodyIndex), false, -1, -1, new HashMap<>(), new ScopeStack(), new ScopeStack(), new HashMap<>(), new ArrayList<>(), new HashMap<>()); //, abc.bodies.get(bodyIndex).getCode().visitCode(abc.bodies.get(bodyIndex))); + AVM2Graph gr = new AVM2Graph(-1, null /*?*/, abc.bodies.get(bodyIndex).getCode(), abc, abc.bodies.get(bodyIndex), false, -1, -1, new HashMap<>(), new ScopeStack(), new ScopeStack(), new HashMap<>(), new ArrayList<>(), new HashMap<>()); //, abc.bodies.get(bodyIndex).getCode().visitCode(abc.bodies.get(bodyIndex))); (new GraphDialog(getAbcPanel().getMainPanel().getMainFrame().getWindow(), gr, name)).setVisible(true); } catch (InterruptedException ex) { Logger.getLogger(ASMSourceEditorPane.class.getName()).log(Level.SEVERE, null, ex); diff --git a/src/com/jpexs/decompiler/flash/gui/abc/TraitsListItem.java b/src/com/jpexs/decompiler/flash/gui/abc/TraitsListItem.java index f0e4e38c9..065df7541 100644 --- a/src/com/jpexs/decompiler/flash/gui/abc/TraitsListItem.java +++ b/src/com/jpexs/decompiler/flash/gui/abc/TraitsListItem.java @@ -105,13 +105,13 @@ public class TraitsListItem { return ""; } Trait trait = traits.get(index); - trait.convertHeader(null, convertData, "", abc, true, ScriptExportMode.AS, scriptIndex, classIndex, new NulWriter(), new ArrayList<>(), false); + trait.convertHeader(-1, null, convertData, "", abc, true, ScriptExportMode.AS, scriptIndex, classIndex, new NulWriter(), new ArrayList<>(), false); HighlightedTextWriter writer = new HighlightedTextWriter(Configuration.getCodeFormatting(), false); boolean insideInterface = false; if (classIndex > -1) { insideInterface = abc.instance_info.get(classIndex).isInterface(); } - trait.toStringHeader(null, DottedChain.EMPTY /*??*/, convertData, "", abc, true, ScriptExportMode.AS, scriptIndex, classIndex, writer, new ArrayList<>(), false, insideInterface); + trait.toStringHeader(-1, null, DottedChain.EMPTY /*??*/, convertData, "", abc, true, ScriptExportMode.AS, scriptIndex, classIndex, writer, new ArrayList<>(), false, insideInterface); writer.finishHilights(); s = writer.toString(); } else { @@ -121,13 +121,13 @@ public class TraitsListItem { return ""; } Trait trait = traits.get(index); - trait.convertHeader(null, convertData, "", abc, false, ScriptExportMode.AS, scriptIndex, classIndex, new NulWriter(), new ArrayList<>(), false); + trait.convertHeader(-1, null, convertData, "", abc, false, ScriptExportMode.AS, scriptIndex, classIndex, new NulWriter(), new ArrayList<>(), false); HighlightedTextWriter writer = new HighlightedTextWriter(Configuration.getCodeFormatting(), false); boolean insideInterface = false; if (classIndex > -1) { insideInterface = abc.instance_info.get(classIndex).isInterface(); } - trait.toStringHeader(null, DottedChain.EMPTY /*??*/, convertData, "", abc, false, ScriptExportMode.AS, scriptIndex, classIndex, writer, new ArrayList<>(), false, insideInterface); + trait.toStringHeader(-1, null, DottedChain.EMPTY /*??*/, convertData, "", abc, false, ScriptExportMode.AS, scriptIndex, classIndex, writer, new ArrayList<>(), false, insideInterface); writer.finishHilights(); s = writer.toString(); }