diff --git a/CHANGELOG.md b/CHANGELOG.md index 19fd273ab..03de1a76d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ All notable changes to this project will be documented in this file. - [#2536] AS3 switches detection incorrectly replaces basic ifs with strict equals - [#2536] AS3 switches detection not handling loops - [#2536] AS3 regexp highlighting / compilation +- [#2537] AS1/2/3 direct editation - partial object literal causing lag ## [24.1.0] - 2025-09-28 ### Added @@ -4015,6 +4016,7 @@ Major version of SWF to XML export changed to 2. [alpha 8]: https://github.com/jindrapetrik/jpexs-decompiler/compare/alpha7...alpha8 [alpha 7]: https://github.com/jindrapetrik/jpexs-decompiler/releases/tag/alpha7 [#2536]: https://www.free-decompiler.com/flash/issues/2536 +[#2537]: https://www.free-decompiler.com/flash/issues/2537 [#2477]: https://www.free-decompiler.com/flash/issues/2477 [#2478]: https://www.free-decompiler.com/flash/issues/2478 [#2485]: https://www.free-decompiler.com/flash/issues/2485 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 f6b55370e..05078b7b7 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 @@ -1975,12 +1975,16 @@ public class ActionScript3SimpleParser implements SimpleParser { expression(errors, thisType, needsActivation, importedClasses, openedNamespaces, registerVars, inFunction, inMethod, isStatic, allowRemainder, variables, false, abc); expectedType(errors, SymbolType.PARENT_CLOSE); } - expectedType(errors, SymbolType.COLON); + if (expectedType(errors, SymbolType.COLON) == null) { + break; + } expression(errors, thisType, needsActivation, importedClasses, openedNamespaces, registerVars, inFunction, inMethod, isStatic, allowRemainder, variables, false, abc); s = lex(); if (!s.isType(SymbolType.COMMA, SymbolType.CURLY_CLOSE)) { - expected(errors, s, lexer.yyline(), SymbolType.COMMA, SymbolType.CURLY_CLOSE); + if (!expected(errors, s, lexer.yyline(), SymbolType.COMMA, SymbolType.CURLY_CLOSE)) { + break; + } } } ret = true; 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 8ced5125f..06896233c 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 @@ -179,6 +179,8 @@ public class ActionScript2SimpleParser implements SimpleParser { if (expectedIdentifier(errors, s, lexer.yyline())) { paramNames.add(new Path(s.value.toString())); paramPositions.add(s.position); + } else { + break; } s = lex(); if (s.type == SymbolType.COLON) { @@ -1409,12 +1411,18 @@ public class ActionScript2SimpleParser implements SimpleParser { lexer.pushback(s); } s = lex(); - expectedIdentifier(errors, s, lexer.yyline()); - expectedType(errors, SymbolType.COLON); + if (!expectedIdentifier(errors, s, lexer.yyline())) { + break; + } + if (expectedType(errors, SymbolType.COLON) == null) { + break; + } expression(errors, inFunction, inMethod, inTellTarget, true, variables, false, hasEval); s = lex(); if (!s.isType(SymbolType.COMMA, SymbolType.CURLY_CLOSE)) { - expected(errors, s, lexer.yyline(), SymbolType.COMMA, SymbolType.CURLY_CLOSE); + if (!expected(errors, s, lexer.yyline(), SymbolType.COMMA, SymbolType.CURLY_CLOSE)) { + break; + } } } ret = true; @@ -1556,12 +1564,16 @@ public class ActionScript2SimpleParser implements SimpleParser { } if (op.type == SymbolType.BRACKET_OPEN) { expression(errors, inFunction, inMethod, inTellTarget, false, variables, false, hasEval); - expectedType(errors, SymbolType.BRACKET_CLOSE); + if (expectedType(errors, SymbolType.BRACKET_CLOSE) == null) { + break; + } ret = true; } if (op.type == SymbolType.DOT) { ParsedSymbol s = lex(); - expectedIdentifier(errors, s, lexer.yyline(), SymbolType.THIS, SymbolType.SUPER); + if (!expectedIdentifier(errors, s, lexer.yyline(), SymbolType.THIS, SymbolType.SUPER)) { + break; + } ret = true; }