mirror of
https://git.huckle.dev/Huckles-Minecraft-Archive/jpexs-decompiler.git
synced 2026-07-17 06:08:10 +00:00
Fixed AS3 Initialization of var in script initializer
This commit is contained in:
@@ -40,6 +40,7 @@ import com.jpexs.decompiler.flash.abc.types.Multiname;
|
||||
import com.jpexs.decompiler.flash.abc.types.traits.Trait;
|
||||
import com.jpexs.decompiler.flash.abc.types.traits.TraitClass;
|
||||
import com.jpexs.decompiler.flash.abc.types.traits.TraitMethodGetterSetter;
|
||||
import com.jpexs.decompiler.flash.abc.types.traits.Traits;
|
||||
import com.jpexs.decompiler.flash.action.Action;
|
||||
import com.jpexs.decompiler.flash.action.ActionGraphSource;
|
||||
import com.jpexs.decompiler.flash.action.ActionList;
|
||||
@@ -4345,7 +4346,7 @@ public final class SWF implements SWFContainerItem, Timelined, Openable {
|
||||
try {
|
||||
List<MethodBody> 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 ArrayList<>(), true, new HashSet<>());
|
||||
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<>());
|
||||
List<GraphTargetItem> infos = documentPack.abc.findBody(mi).convertedItems;
|
||||
if (!infos.isEmpty()) {
|
||||
if (infos.get(0) instanceof IfItem) {
|
||||
@@ -4423,7 +4424,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 ArrayList<>(), true, new HashSet<>());
|
||||
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<>());
|
||||
List<GraphTargetItem> cinitBody = p.abc.findBody(cinit).convertedItems;
|
||||
for (GraphTargetItem cit : cinitBody) {
|
||||
if (cit instanceof SetPropertyAVM2Item) {
|
||||
|
||||
@@ -174,18 +174,16 @@ public class ScriptPack extends AS3ClassTreeItem {
|
||||
int sinit_index = abc.script_info.get(scriptIndex).init_index;
|
||||
int sinit_bodyIndex = abc.findBodyIndex(sinit_index);
|
||||
if (sinit_bodyIndex != -1) {
|
||||
List<Traits> ts = new ArrayList<>();
|
||||
//initialize all classes traits
|
||||
for (Trait t : traits) {
|
||||
/*for (Trait t : traits) {
|
||||
if (t instanceof TraitClass) {
|
||||
ts.add(abc.class_info.get(((TraitClass) t).class_info).static_traits);
|
||||
}
|
||||
}
|
||||
ts.add(abc.script_info.get(scriptIndex).traits);
|
||||
}*/
|
||||
writer.mark();
|
||||
List<MethodBody> callStack = new ArrayList<>();
|
||||
callStack.add(abc.bodies.get(sinit_bodyIndex));
|
||||
abc.bodies.get(sinit_bodyIndex).convert(callStack, abcIndex, convertData, path +/*packageName +*/ "/.scriptinitializer", exportMode, true, sinit_index, scriptIndex, -1, abc, null, new ScopeStack(), GraphTextWriter.TRAIT_SCRIPT_INITIALIZER, writer, new ArrayList<>(), ts, true, new HashSet<>());
|
||||
abc.bodies.get(sinit_bodyIndex).convert(callStack, abcIndex, convertData, path +/*packageName +*/ "/.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();
|
||||
|
||||
}
|
||||
|
||||
@@ -256,6 +256,7 @@ import com.jpexs.decompiler.flash.abc.avm2.model.FullMultinameAVM2Item;
|
||||
import com.jpexs.decompiler.flash.abc.avm2.model.GetLexAVM2Item;
|
||||
import com.jpexs.decompiler.flash.abc.avm2.model.GetPropertyAVM2Item;
|
||||
import com.jpexs.decompiler.flash.abc.avm2.model.GetSlotAVM2Item;
|
||||
import com.jpexs.decompiler.flash.abc.avm2.model.GlobalAVM2Item;
|
||||
import com.jpexs.decompiler.flash.abc.avm2.model.InitPropertyAVM2Item;
|
||||
import com.jpexs.decompiler.flash.abc.avm2.model.LocalRegAVM2Item;
|
||||
import com.jpexs.decompiler.flash.abc.avm2.model.NewActivationAVM2Item;
|
||||
@@ -2047,7 +2048,7 @@ public class AVM2Code implements Cloneable {
|
||||
}*/
|
||||
}
|
||||
|
||||
public List<GraphTargetItem> toGraphTargetItems(List<MethodBody> callStack, AbcIndexing abcIndex, boolean thisHasDefaultToPrimitive, ConvertData convertData, String path, int methodIndex, boolean isStatic, int scriptIndex, int classIndex, ABC abc, MethodBody body, HashMap<Integer, String> localRegNames, ScopeStack scopeStack, int initializerType, List<DottedChain> fullyQualifiedNames, List<Traits> initTraits, int staticOperation, HashMap<Integer, Integer> localRegAssigmentIps) throws InterruptedException {
|
||||
public List<GraphTargetItem> toGraphTargetItems(List<MethodBody> callStack, AbcIndexing abcIndex, boolean thisHasDefaultToPrimitive, ConvertData convertData, String path, int methodIndex, boolean isStatic, int scriptIndex, int classIndex, ABC abc, MethodBody body, HashMap<Integer, String> localRegNames, ScopeStack scopeStack, int initializerType, List<DottedChain> fullyQualifiedNames, Traits initTraits, int staticOperation, HashMap<Integer, Integer> localRegAssigmentIps) throws InterruptedException {
|
||||
initToSource();
|
||||
List<GraphTargetItem> list;
|
||||
HashMap<Integer, GraphTargetItem> localRegs = new HashMap<>();
|
||||
@@ -2070,6 +2071,30 @@ public class AVM2Code implements Cloneable {
|
||||
loopi:
|
||||
for (int i = 0; i < list.size(); i++) {
|
||||
GraphTargetItem ti = list.get(i);
|
||||
if (ti instanceof SetSlotAVM2Item) {
|
||||
SetSlotAVM2Item ss = (SetSlotAVM2Item) ti;
|
||||
if ((ss.slotObject instanceof GlobalAVM2Item) && (initializerType == GraphTextWriter.TRAIT_SCRIPT_INITIALIZER)) {
|
||||
for (Trait t : initTraits.traits) {
|
||||
if (t instanceof TraitSlotConst) {
|
||||
TraitSlotConst tsc = (TraitSlotConst)t;
|
||||
if (tsc.slot_id == ss.slotIndex) {
|
||||
GraphTargetItem value = ss.value;
|
||||
if (value != null && !convertData.assignedValues.containsKey(tsc)) {
|
||||
if (value instanceof NewFunctionAVM2Item) {
|
||||
NewFunctionAVM2Item f = (NewFunctionAVM2Item) value;
|
||||
f.functionName = tsc.getName(abc).getName(abc.constants, fullyQualifiedNames, true, true);
|
||||
}
|
||||
AssignedValue av = new AssignedValue(value, initializerType, methodIndex);
|
||||
convertData.assignedValues.put(tsc, av);
|
||||
list.remove(i);
|
||||
i--;
|
||||
continue loopi;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if ((ti instanceof InitPropertyAVM2Item) || (ti instanceof SetPropertyAVM2Item)) {
|
||||
int multinameIndex = 0;
|
||||
GraphTargetItem value = null;
|
||||
@@ -2082,63 +2107,61 @@ public class AVM2Code implements Cloneable {
|
||||
value = ((SetPropertyAVM2Item) ti).value;
|
||||
}
|
||||
Multiname m = abc.constants.getMultiname(multinameIndex);
|
||||
for (Traits ts : initTraits) {
|
||||
for (int j = 0; j < ts.traits.size(); j++) {
|
||||
Trait t = ts.traits.get(j);
|
||||
Multiname tm = abc.constants.getMultiname(t.name_index);
|
||||
if (tm != null && tm.equals(m)) {
|
||||
if ((t instanceof TraitSlotConst)) {
|
||||
if (((TraitSlotConst) t).isConst() || initializerType == GraphTextWriter.TRAIT_CLASS_INITIALIZER || initializerType == GraphTextWriter.TRAIT_SCRIPT_INITIALIZER) {
|
||||
TraitSlotConst tsc = (TraitSlotConst) t;
|
||||
if (value != null && !convertData.assignedValues.containsKey(tsc)) {
|
||||
for (int j = 0; j < initTraits.traits.size(); j++) {
|
||||
Trait t = initTraits.traits.get(j);
|
||||
Multiname tm = abc.constants.getMultiname(t.name_index);
|
||||
if (tm != null && tm.equals(m)) {
|
||||
if ((t instanceof TraitSlotConst)) {
|
||||
if (((TraitSlotConst) t).isConst() || initializerType == GraphTextWriter.TRAIT_CLASS_INITIALIZER || initializerType == GraphTextWriter.TRAIT_SCRIPT_INITIALIZER) {
|
||||
TraitSlotConst tsc = (TraitSlotConst) t;
|
||||
if (value != null && !convertData.assignedValues.containsKey(tsc)) {
|
||||
|
||||
/*if (ti instanceof SetPropertyAVM2Item) { //only for slots
|
||||
Set<GraphTargetItem> subItems = value.getAllSubItemsRecursively();
|
||||
subItems.add(value);
|
||||
List<Multiname> laterMultinames = new ArrayList<>();
|
||||
for (int k = j + 1; k < ts.traits.size(); k++) {
|
||||
int tMultinameIndex = ts.traits.get(k).name_index;
|
||||
if (tMultinameIndex > 0) {
|
||||
Multiname tMultiname = abc.constants.getMultiname(tMultinameIndex);
|
||||
laterMultinames.add(tMultiname);
|
||||
}
|
||||
/*if (ti instanceof SetPropertyAVM2Item) { //only for slots
|
||||
Set<GraphTargetItem> subItems = value.getAllSubItemsRecursively();
|
||||
subItems.add(value);
|
||||
List<Multiname> laterMultinames = new ArrayList<>();
|
||||
for (int k = j + 1; k < ts.traits.size(); k++) {
|
||||
int tMultinameIndex = ts.traits.get(k).name_index;
|
||||
if (tMultinameIndex > 0) {
|
||||
Multiname tMultiname = abc.constants.getMultiname(tMultinameIndex);
|
||||
laterMultinames.add(tMultiname);
|
||||
}
|
||||
for (GraphTargetItem item : subItems) {
|
||||
}
|
||||
for (GraphTargetItem item : subItems) {
|
||||
|
||||
//if later slot is referenced, we must add it as {} block instead of direct assignment
|
||||
if (item instanceof GetPropertyAVM2Item) {
|
||||
Multiname multiName = abc.constants.getMultiname(((FullMultinameAVM2Item) ((GetPropertyAVM2Item) item).propertyName).multinameIndex);
|
||||
if (laterMultinames.contains(multiName)) {
|
||||
continue loopi;
|
||||
}
|
||||
}
|
||||
if (item instanceof GetLexAVM2Item) {
|
||||
Multiname multiName = ((GetLexAVM2Item) item).propertyName;
|
||||
if (laterMultinames.contains(multiName)) {
|
||||
continue loopi;
|
||||
}
|
||||
}
|
||||
|
||||
if (item instanceof LocalRegAVM2Item) { //it is surely in static initializer block, not in slot/const
|
||||
//if later slot is referenced, we must add it as {} block instead of direct assignment
|
||||
if (item instanceof GetPropertyAVM2Item) {
|
||||
Multiname multiName = abc.constants.getMultiname(((FullMultinameAVM2Item) ((GetPropertyAVM2Item) item).propertyName).multinameIndex);
|
||||
if (laterMultinames.contains(multiName)) {
|
||||
continue loopi;
|
||||
}
|
||||
}
|
||||
}*/
|
||||
if (value instanceof NewFunctionAVM2Item) {
|
||||
NewFunctionAVM2Item f = (NewFunctionAVM2Item) value;
|
||||
f.functionName = tsc.getName(abc).getName(abc.constants, fullyQualifiedNames, true, true);
|
||||
if (item instanceof GetLexAVM2Item) {
|
||||
Multiname multiName = ((GetLexAVM2Item) item).propertyName;
|
||||
if (laterMultinames.contains(multiName)) {
|
||||
continue loopi;
|
||||
}
|
||||
}
|
||||
|
||||
if (item instanceof LocalRegAVM2Item) { //it is surely in static initializer block, not in slot/const
|
||||
continue loopi;
|
||||
}
|
||||
}
|
||||
AssignedValue av = new AssignedValue(value, initializerType, methodIndex);
|
||||
convertData.assignedValues.put(tsc, av);
|
||||
list.remove(i);
|
||||
i--;
|
||||
continue;
|
||||
}*/
|
||||
if (value instanceof NewFunctionAVM2Item) {
|
||||
NewFunctionAVM2Item f = (NewFunctionAVM2Item) value;
|
||||
f.functionName = tsc.getName(abc).getName(abc.constants, fullyQualifiedNames, true, true);
|
||||
}
|
||||
AssignedValue av = new AssignedValue(value, initializerType, methodIndex);
|
||||
convertData.assignedValues.put(tsc, av);
|
||||
list.remove(i);
|
||||
i--;
|
||||
continue loopi;
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// In obfuscated code, SetLocal instructions comes first
|
||||
|
||||
@@ -1312,12 +1312,10 @@ public class AVM2SourceGenerator implements SourceGenerator {
|
||||
MethodBody pcinit = ci.abc.findBody(mi);
|
||||
ConvertData d = new ConvertData();
|
||||
|
||||
List<Traits> initt = new ArrayList<>();
|
||||
initt.add(ci.abc.class_info.get(ci.index).static_traits);
|
||||
List<MethodBody> 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<>(), initt, false, new HashSet<>());
|
||||
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<>());
|
||||
//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);
|
||||
|
||||
@@ -285,7 +285,7 @@ public final class MethodBody implements Cloneable {
|
||||
return ret;
|
||||
}
|
||||
|
||||
public void convert(List<MethodBody> 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<DottedChain> fullyQualifiedNames, final List<Traits> initTraits, boolean firstLevel, Set<Integer> seenMethods) throws InterruptedException {
|
||||
public void convert(List<MethodBody> 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<DottedChain> fullyQualifiedNames, Traits initTraits, boolean firstLevel, Set<Integer> seenMethods) throws InterruptedException {
|
||||
seenMethods.add(this.method_info);
|
||||
if (debugMode) {
|
||||
System.err.println("Decompiling " + path);
|
||||
@@ -422,7 +422,7 @@ public final class MethodBody implements Cloneable {
|
||||
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 ArrayList<>(), true, seenMethods);
|
||||
convert(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);
|
||||
|
||||
@@ -280,8 +280,6 @@ public class TraitClass extends Trait implements TraitWithSlot {
|
||||
int bodyIndex = abc.findBodyIndex(classInfo.cinit_index);
|
||||
if (bodyIndex != -1) {
|
||||
writer.mark();
|
||||
List<Traits> ts = new ArrayList<>();
|
||||
ts.add(classInfo.static_traits);
|
||||
List<MethodBody> callStack = new ArrayList<>();
|
||||
callStack.add(abc.bodies.get(bodyIndex));
|
||||
|
||||
@@ -298,7 +296,7 @@ public class TraitClass extends Trait implements TraitWithSlot {
|
||||
}
|
||||
}
|
||||
|
||||
abc.bodies.get(bodyIndex).convert(callStack, abcIndex, convertData, path +/*packageName +*/ "/" + instanceInfoName + ".staticinitializer", exportMode, true, classInfo.cinit_index, scriptIndex, class_info, abc, this, newScopeStack, GraphTextWriter.TRAIT_CLASS_INITIALIZER, writer, fullyQualifiedNames, ts, true, new HashSet<>());
|
||||
abc.bodies.get(bodyIndex).convert(callStack, abcIndex, convertData, path +/*packageName +*/ "/" + 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();
|
||||
@@ -308,12 +306,10 @@ public class TraitClass extends Trait implements TraitWithSlot {
|
||||
if (!instanceInfo.isInterface()) {
|
||||
bodyIndex = abc.findBodyIndex(instanceInfo.iinit_index);
|
||||
if (bodyIndex != -1) {
|
||||
List<Traits> ts = new ArrayList<>();
|
||||
ts.add(instanceInfo.instance_traits);
|
||||
MethodBody constructorBody = abc.bodies.get(bodyIndex);
|
||||
List<MethodBody> callStack = new ArrayList<>();
|
||||
callStack.add(constructorBody);
|
||||
constructorBody.convert(callStack, abcIndex, convertData, path +/*packageName +*/ "/" + instanceInfoName + ".initializer", exportMode, false, instanceInfo.iinit_index, scriptIndex, class_info, abc, this, new ScopeStack(), GraphTextWriter.TRAIT_INSTANCE_INITIALIZER, writer, fullyQualifiedNames, ts, true, new HashSet<>());
|
||||
constructorBody.convert(callStack, abcIndex, convertData, path +/*packageName +*/ "/" + 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
|
||||
|
||||
@@ -42,6 +42,7 @@ import com.jpexs.decompiler.flash.abc.types.Multiname;
|
||||
import com.jpexs.decompiler.flash.abc.types.traits.Trait;
|
||||
import com.jpexs.decompiler.flash.abc.types.traits.TraitClass;
|
||||
import com.jpexs.decompiler.flash.abc.types.traits.TraitMethodGetterSetter;
|
||||
import com.jpexs.decompiler.flash.abc.types.traits.Traits;
|
||||
import com.jpexs.decompiler.flash.configuration.Configuration;
|
||||
import com.jpexs.decompiler.flash.ecma.EcmaScript;
|
||||
import com.jpexs.decompiler.flash.exporters.BinaryDataExporter;
|
||||
@@ -126,7 +127,7 @@ public class AS3ScriptExporter {
|
||||
try {
|
||||
List<MethodBody> 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 ArrayList<>(), true, new HashSet<>());
|
||||
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<>());
|
||||
|
||||
List<GraphTargetItem> ci = pack.abc.findBody(method).convertedItems;
|
||||
if (!ci.isEmpty()) {
|
||||
@@ -201,7 +202,7 @@ public class AS3ScriptExporter {
|
||||
try {
|
||||
List<MethodBody> 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 ArrayList<>(), true, new HashSet<>()/*??*/);
|
||||
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<>()/*??*/);
|
||||
|
||||
List<GraphTargetItem> ci = pack.abc.findBody(method).convertedItems;
|
||||
if (!ci.isEmpty() && (ci.get(0) instanceof DeclarationAVM2Item)) {
|
||||
@@ -294,7 +295,7 @@ public class AS3ScriptExporter {
|
||||
try {
|
||||
List<MethodBody> 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 ArrayList<>(), true, new HashSet<>());
|
||||
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<>());
|
||||
List<GraphTargetItem> iinitBody = pack.abc.findBody(iinit).convertedItems;
|
||||
for (GraphTargetItem it : iinitBody) {
|
||||
if (it instanceof InitPropertyAVM2Item) {
|
||||
|
||||
@@ -51,6 +51,7 @@ import com.jpexs.decompiler.flash.abc.types.ScriptInfo;
|
||||
import com.jpexs.decompiler.flash.abc.types.traits.Trait;
|
||||
import com.jpexs.decompiler.flash.abc.types.traits.TraitClass;
|
||||
import com.jpexs.decompiler.flash.abc.types.traits.TraitMethodGetterSetter;
|
||||
import com.jpexs.decompiler.flash.abc.types.traits.Traits;
|
||||
import com.jpexs.decompiler.flash.action.Action;
|
||||
import com.jpexs.decompiler.flash.action.ActionTreeOperation;
|
||||
import com.jpexs.decompiler.flash.action.model.CallMethodActionItem;
|
||||
@@ -2685,7 +2686,7 @@ public class XFLConverter {
|
||||
try {
|
||||
List<MethodBody> 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 ArrayList<>(), true, new HashSet<>());
|
||||
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<>());
|
||||
|
||||
Map<Integer, Multiname> frameToTraitMultiname = new HashMap<>();
|
||||
|
||||
@@ -2753,7 +2754,7 @@ 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 ArrayList<>(), true, new HashSet<>());
|
||||
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<>());
|
||||
StringBuilderTextWriter writer = new StringBuilderTextWriter(Configuration.getCodeFormatting(), scriptBuilder);
|
||||
frameBody.toString(callStack, abcIndex, "??", ScriptExportMode.AS, abc, methodTrait, writer, new ArrayList<>(), new HashSet<>());
|
||||
|
||||
|
||||
Reference in New Issue
Block a user