From 7ddb746ad713c57b2fedbbe19a6cbd7730392a2e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Sat, 7 Jun 2025 11:33:43 +0200 Subject: [PATCH] AS3 Highlighter - private script traits --- .../script/ActionScript3SimpleParser.java | 39 ++++++++++--------- 1 file changed, 21 insertions(+), 18 deletions(-) diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ActionScript3SimpleParser.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ActionScript3SimpleParser.java index 8e1b36bbe..034dc3e37 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ActionScript3SimpleParser.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ActionScript3SimpleParser.java @@ -512,18 +512,18 @@ public class ActionScript3SimpleParser implements SimpleParser { s = lex(); } expected(errors, s, lexer.yyline(), SymbolType.BRACKET_CLOSE); - s = lex(); + s = lex(); } lexer.pushback(s); } private void classTraits(List errors, boolean outsidePackage, Reference cinitNeedsActivation, List importedClasses, List openedNamespaces, DottedChain pkg, String classNameStr, boolean isInterface, Reference iinitNeedsActivation, ABC abc, List classVariables) throws AVM2ParseException, SimpleParseException, IOException, CompilationException, InterruptedException { - + Stack cinitLoops = new Stack<>(); Map cinitLoopLabels = new HashMap<>(); - + List traitVariables = new ArrayList<>(); - + looptraits: while (true) { TypeItem thisType = null; @@ -535,7 +535,7 @@ public class ActionScript3SimpleParser implements SimpleParser { boolean isPrivate = false; boolean isNative = false; - String customNs = null; + String customNs = null; List preSymbols = new ArrayList<>(); parseMetadata(errors); @@ -778,7 +778,7 @@ public class ActionScript3SimpleParser implements SimpleParser { } if (s.type == SymbolType.ASSIGN) { - List constVarVariables = new ArrayList<>(); + List constVarVariables = new ArrayList<>(); expression(errors, thisType, new Reference<>(false), importedClasses, openedNamespaces, new HashMap<>(), false, false, isStatic, true, constVarVariables, false, abc); classVariables.add(new TraitVarConstValueScope(constVarVariables, isStatic)); s = lex(); @@ -876,11 +876,11 @@ public class ActionScript3SimpleParser implements SimpleParser { allOpenedNamespaces.add(openedNamespaces); for (String name : abc.getSwf().getAbcIndex().getPackageObjects(pkgName)) { - externalTypes.add(pkgName.add(name, "").toRawString()); + externalTypes.add(pkgName.add(name, "").toRawString()); } - - - + + List sinitTraitVariables = new ArrayList<>(); + parseImportsUsages(errors, sinitVariables, importedClasses, openedNamespaces, abc, externalTypes); boolean isEmpty = true; @@ -953,15 +953,15 @@ public class ActionScript3SimpleParser implements SimpleParser { if (s.type == SymbolType.INTERFACE) { isInterface = true; } - String subNameStr; - + String subNameStr; + s = lex(); if (!expected(errors, s, lexer.yyline(), SymbolGroup.IDENTIFIER)) { break; } subNameStr = s.value.toString(); int subNamePos = s.position; - sinitVariables.add(new Type(true, pkgName.addWithSuffix(subNameStr).toPrintableString(true), subNamePos)); + sinitTraitVariables.add(new Type(true, pkgName.addWithSuffix(subNameStr).toPrintableString(true), subNamePos)); s = lex(); if (s.type == SymbolType.NOT) { @@ -997,7 +997,7 @@ public class ActionScript3SimpleParser implements SimpleParser { Reference iinitNeedsActivation = new Reference<>(false); List classVariables = new ArrayList<>(); classVariables.add(new Variable(true, "this", s.position, false)); - + classTraits(errors, !inPackage, cinitNeedsActivation, importedClasses, subOpenedNamespaces, pkgName, subNameStr, isInterface, iinitNeedsActivation, abc, classVariables); sinitVariables.add(new ClassScope(classVariables)); @@ -1010,7 +1010,9 @@ public class ActionScript3SimpleParser implements SimpleParser { expected(errors, s, lexer.yyline(), SymbolGroup.IDENTIFIER); String fname = s.value.toString(); - method(errors, !inPackage, false, false, isNative, null, new Reference<>(false), importedClasses, false, isFinal, null, openedNamespaces, true, fname, true, sinitVariables, abc, s.position); + sinitTraitVariables.add(new Variable(true, fname, s.position, true)); + + method(errors, !inPackage, false, false, isNative, null, new Reference<>(false), importedClasses, false, isFinal, null, openedNamespaces, true, "", true, sinitVariables, abc, s.position); break; case CONST: case VAR: @@ -1024,7 +1026,7 @@ public class ActionScript3SimpleParser implements SimpleParser { if (!expected(errors, s, lexer.yyline(), SymbolGroup.IDENTIFIER)) { break; } - sinitVariables.add(new Variable(true, s.value.toString(), s.position)); + sinitTraitVariables.add(new Variable(true, s.value.toString(), s.position)); s = lex(); if (s.type == SymbolType.COLON) { type(errors, null, new Reference<>(false), importedClasses, openedNamespaces, sinitVariables, abc); @@ -1050,7 +1052,7 @@ public class ActionScript3SimpleParser implements SimpleParser { if (!expected(errors, s, lexer.yyline(), SymbolGroup.IDENTIFIER)) { break; } - sinitVariables.add(new Variable(true, s.value.toString(), s.position)); + sinitTraitVariables.add(new Variable(true, s.value.toString(), s.position)); s = lex(); @@ -1085,6 +1087,7 @@ public class ActionScript3SimpleParser implements SimpleParser { if (inPackage) { expectedType(errors, SymbolType.CURLY_CLOSE); } + sinitVariables.addAll(0, sinitTraitVariables); return !isEmpty; } @@ -2045,7 +2048,7 @@ public class ActionScript3SimpleParser implements SimpleParser { fullName = fullName + "." + s.value.toString(); lastName = s.value.toString(); varPos = s.position; - nameParts.add(lastName); + nameParts.add(lastName); s = lex(); }