From b8982238c684733d1bdfb544813e5965edcc6838 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Mon, 8 Feb 2021 18:29:18 +0100 Subject: [PATCH] AS3 P-code: allow not using parenthesis on True(),False(),Null(),Undefined() --- .../abc/avm2/parser/pcode/ASM3Parser.java | 33 ++++++++++++++----- 1 file changed, 25 insertions(+), 8 deletions(-) diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/pcode/ASM3Parser.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/pcode/ASM3Parser.java index b257ed51e..f593eb431 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/pcode/ASM3Parser.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/pcode/ASM3Parser.java @@ -457,6 +457,7 @@ public class ASM3Parser { public static ValueKind parseValue(AVM2ConstantPool constants, Flasm3Lexer lexer) throws IOException, AVM2ParseException { ParsedSymbol type = lexer.lex(); ParsedSymbol value; + ParsedSymbol temp; int value_index = 0; int value_kind = 0; switch (type.type) { @@ -526,23 +527,39 @@ public class ASM3Parser { break; case ParsedSymbol.TYPE_KEYWORD_TRUE: value_kind = ValueKind.CONSTANT_True; - expected(ParsedSymbol.TYPE_PARENT_OPEN, "(", lexer); - expected(ParsedSymbol.TYPE_PARENT_CLOSE, ")", lexer); + temp = lexer.lex(); + if (temp.type == ParsedSymbol.TYPE_PARENT_OPEN) { + expected(ParsedSymbol.TYPE_PARENT_CLOSE, ")", lexer); + } else { + lexer.pushback(temp); + } break; case ParsedSymbol.TYPE_KEYWORD_FALSE: value_kind = ValueKind.CONSTANT_False; - expected(ParsedSymbol.TYPE_PARENT_OPEN, "(", lexer); - expected(ParsedSymbol.TYPE_PARENT_CLOSE, ")", lexer); + temp = lexer.lex(); + if (temp.type == ParsedSymbol.TYPE_PARENT_OPEN) { + expected(ParsedSymbol.TYPE_PARENT_CLOSE, ")", lexer); + } else { + lexer.pushback(temp); + } break; case ParsedSymbol.TYPE_KEYWORD_NULL: value_kind = ValueKind.CONSTANT_Null; - expected(ParsedSymbol.TYPE_PARENT_OPEN, "(", lexer); - expected(ParsedSymbol.TYPE_PARENT_CLOSE, ")", lexer); + temp = lexer.lex(); + if (temp.type == ParsedSymbol.TYPE_PARENT_OPEN) { + expected(ParsedSymbol.TYPE_PARENT_CLOSE, ")", lexer); + } else { + lexer.pushback(temp); + } break; case ParsedSymbol.TYPE_KEYWORD_UNDEFINED: value_kind = ValueKind.CONSTANT_Undefined; - expected(ParsedSymbol.TYPE_PARENT_OPEN, "(", lexer); - expected(ParsedSymbol.TYPE_PARENT_CLOSE, ")", lexer); + temp = lexer.lex(); + if (temp.type == ParsedSymbol.TYPE_PARENT_OPEN) { + expected(ParsedSymbol.TYPE_PARENT_CLOSE, ")", lexer); + } else { + lexer.pushback(temp); + } break; case ParsedSymbol.TYPE_KEYWORD_NAMESPACE: case ParsedSymbol.TYPE_KEYWORD_PACKAGEINTERNALNS: