From 1a4cc6614c025090625995aae3ac3a1d23c4eac9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Thu, 24 Jul 2025 21:40:54 +0200 Subject: [PATCH] =?UTF-8?q?Fixed:=20AS3=20direct=20editation/highlighter?= =?UTF-8?q?=20=C2=A7=C2=A7pop=20in=20class=20traits=20Fixed:=20AS=20direct?= =?UTF-8?q?=20editation/highlighter=20=C2=A7=C2=A7pop=20can=20have=20getme?= =?UTF-8?q?mber=20or=20call?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 2 ++ .../flash/abc/avm2/parser/script/ActionScript3Parser.java | 4 +++- .../abc/avm2/parser/script/ActionScript3SimpleParser.java | 4 +++- .../flash/action/parser/script/ActionScript2Parser.java | 1 + .../flash/action/parser/script/ActionScript2SimpleParser.java | 1 + 5 files changed, 10 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c7350e722..2df4bb61d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -44,6 +44,8 @@ All notable changes to this project will be documented in this file. - AS3 direct editation - Allow some special words (like `override`) as identifiers - [#2486] AS1/2 if jump to function end as return - [#2493] Incorrect placement of §§push instructions +- AS3 direct editation/highlighter §§pop in class traits +- AS direct editation/highlighter §§pop can have getmember or call ### Changed - Icon of "Deobfuscation options" menu from pile of pills to medkit diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ActionScript3Parser.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ActionScript3Parser.java index 2258ccb05..25819976c 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ActionScript3Parser.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ActionScript3Parser.java @@ -691,7 +691,7 @@ public class ActionScript3Parser { //s = lex(); ParsedSymbol s = lex(); - while (s.isType(SymbolType.NATIVE, SymbolType.STATIC, SymbolType.PUBLIC, SymbolType.PRIVATE, SymbolType.PROTECTED, SymbolType.OVERRIDE, SymbolType.FINAL, SymbolType.DYNAMIC, SymbolGroup.IDENTIFIER, SymbolType.INTERNAL, SymbolType.PREPROCESSOR)) { + loops: while (s.isType(SymbolType.NATIVE, SymbolType.STATIC, SymbolType.PUBLIC, SymbolType.PRIVATE, SymbolType.PROTECTED, SymbolType.OVERRIDE, SymbolType.FINAL, SymbolType.DYNAMIC, SymbolGroup.IDENTIFIER, SymbolType.INTERNAL, SymbolType.PREPROCESSOR)) { if (s.type == SymbolType.FINAL) { if (isFinal) { throw new AVM2ParseException("Only one final keyword allowed", lexer.yyline()); @@ -780,6 +780,7 @@ public class ActionScript3Parser { } else { lexer.pushback(s); + break loops; } break; } @@ -2448,6 +2449,7 @@ public class ActionScript3Parser { break; case "pop": ret = new PopItem(DIALECT, null, null); + allowMemberOrCall = true; break; case "goto": //TODO case "multiname": 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 5e4782860..f4a0dd1e6 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 @@ -626,7 +626,7 @@ public class ActionScript3SimpleParser implements SimpleParser { parseMetadata(errors); ParsedSymbol s = lex(); - while (s.isType(SymbolType.NATIVE, SymbolType.STATIC, SymbolType.PUBLIC, SymbolType.PRIVATE, SymbolType.PROTECTED, SymbolType.OVERRIDE, SymbolType.FINAL, SymbolType.DYNAMIC, SymbolGroup.IDENTIFIER, SymbolType.INTERNAL, SymbolType.PREPROCESSOR)) { + loops: while (s.isType(SymbolType.NATIVE, SymbolType.STATIC, SymbolType.PUBLIC, SymbolType.PRIVATE, SymbolType.PROTECTED, SymbolType.OVERRIDE, SymbolType.FINAL, SymbolType.DYNAMIC, SymbolGroup.IDENTIFIER, SymbolType.INTERNAL, SymbolType.PREPROCESSOR)) { if (s.type == SymbolType.FINAL) { if (isFinal) { errors.add(new SimpleParseException("Only one final keyword allowed", lexer.yyline(), s.position)); @@ -712,6 +712,7 @@ public class ActionScript3SimpleParser implements SimpleParser { } else { lexer.pushback(s); + break loops; } break; } @@ -1882,6 +1883,7 @@ public class ActionScript3SimpleParser implements SimpleParser { break; case "pop": ret = true; + allowMemberOrCall = true; break; case "goto": expectedType(errors, SymbolGroup.IDENTIFIER); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/parser/script/ActionScript2Parser.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/parser/script/ActionScript2Parser.java index 678b9a195..d0335b5c1 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/parser/script/ActionScript2Parser.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/parser/script/ActionScript2Parser.java @@ -1809,6 +1809,7 @@ public class ActionScript2Parser { break; case "pop": ret = new PopItem(DIALECT, null, null); + allowMemberOrCall = true; break; case "strict": s = lexer.lex(); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/parser/script/ActionScript2SimpleParser.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/parser/script/ActionScript2SimpleParser.java index 935ea9f04..411400617 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/parser/script/ActionScript2SimpleParser.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/parser/script/ActionScript2SimpleParser.java @@ -1340,6 +1340,7 @@ public class ActionScript2SimpleParser implements SimpleParser { break; case "pop": ret = true; + allowMemberOrCall = true; break; case "strict": s = lexer.lex();