Skip to content

Commit 58bd046

Browse files
committed
Fixed #2418 AS3 - initialization of class static vars in script initializer (Haxe)
1 parent c45eb35 commit 58bd046

21 files changed

Lines changed: 196 additions & 86 deletions

File tree

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ All notable changes to this project will be documented in this file.
1414
- [#2430] AS1/2/3 - Missing syntax hilighting of "new" keyword and few others
1515
- [#2428] Charset setting on FLA export in format MX and below
1616
- [#2428] Default charset for SWFS v5 and lower is WINDOWS-1252
17+
- [#2418] AS3 - initialization of class static vars in script initializer (Haxe)
1718

1819
## [22.0.2] - 2025-01-17
1920
### Added
@@ -3707,6 +3708,7 @@ Major version of SWF to XML export changed to 2.
37073708
[#2437]: https://www.free-decompiler.com/flash/issues/2437
37083709
[#2430]: https://www.free-decompiler.com/flash/issues/2430
37093710
[#2428]: https://www.free-decompiler.com/flash/issues/2428
3711+
[#2418]: https://www.free-decompiler.com/flash/issues/2418
37103712
[#2375]: https://www.free-decompiler.com/flash/issues/2375
37113713
[#2374]: https://www.free-decompiler.com/flash/issues/2374
37123714
[#2389]: https://www.free-decompiler.com/flash/issues/2389

libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWF.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5921,7 +5921,7 @@ public String getFlexMainClass(List<String> ignoredClasses, List<String> ignored
59215921
if (documentPack.getOpenable() instanceof SWF) {
59225922
swfVersion = ((SWF) documentPack.getOpenable()).version;
59235923
}
5924-
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<>());
5924+
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<>(), new ArrayList<>());
59255925
List<GraphTargetItem> infos = documentPack.abc.findBody(mi).convertedItems;
59265926
if (!infos.isEmpty()) {
59275927
if (infos.get(0) instanceof IfItem) {
@@ -5999,7 +5999,7 @@ public String getFlexMainClass(List<String> ignoredClasses, List<String> ignored
59995999
int cinit = p.abc.class_info.get(ci).cinit_index;
60006000
callStack = new ArrayList<>();
60016001
callStack.add(p.abc.findBody(cinit));
6002-
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<>());
6002+
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<>(), new ArrayList<>());
60036003
List<GraphTargetItem> cinitBody = p.abc.findBody(cinit).convertedItems;
60046004
for (GraphTargetItem cit : cinitBody) {
60056005
if (cit instanceof SetPropertyAVM2Item) {

libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/ScriptPack.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -265,16 +265,16 @@ public void convert(AbcIndexing abcIndex, final NulWriter writer, final List<Tra
265265
int sinit_index = abc.script_info.get(scriptIndex).init_index;
266266
int sinit_bodyIndex = abc.findBodyIndex(sinit_index);
267267
if (sinit_bodyIndex != -1 && (isSimple || traitIndices.isEmpty())) {
268-
//initialize all classes traits
269-
/*for (Trait t : traits) {
268+
List<Integer> initClasses = new ArrayList<>();
269+
for (Trait t : traits) {
270270
if (t instanceof TraitClass) {
271-
ts.add(abc.class_info.get(((TraitClass) t).class_info).static_traits);
271+
initClasses.add(((TraitClass) t).class_info);
272272
}
273-
}*/
273+
}
274274
writer.mark();
275275
List<MethodBody> callStack = new ArrayList<>();
276276
callStack.add(abc.bodies.get(sinit_bodyIndex));
277-
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<>());
277+
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<>(), initClasses);
278278
scriptInitializerIsEmpty = !writer.getMark();
279279

280280
}

0 commit comments

Comments
 (0)