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();