From c2a34e380b7ff57b071f8081e1cac589eab664d3 Mon Sep 17 00:00:00 2001 From: Li Jin Date: Tue, 24 Feb 2026 08:56:46 +0800 Subject: Fixed issue #245. --- src/yuescript/yue_compiler.cpp | 2 +- src/yuescript/yue_parser.cpp | 17 +++++++---------- src/yuescript/yue_parser.h | 1 + 3 files changed, 9 insertions(+), 11 deletions(-) (limited to 'src') diff --git a/src/yuescript/yue_compiler.cpp b/src/yuescript/yue_compiler.cpp index 840ef3e..7624d81 100644 --- a/src/yuescript/yue_compiler.cpp +++ b/src/yuescript/yue_compiler.cpp @@ -78,7 +78,7 @@ static std::unordered_set Metamethods = { "close"s // Lua 5.4 }; -const std::string_view version = "0.33.2"sv; +const std::string_view version = "0.33.3"sv; const std::string_view extension = "yue"sv; class CompileError : public std::logic_error { diff --git a/src/yuescript/yue_parser.cpp b/src/yuescript/yue_parser.cpp index c5c3ef7..421acee 100644 --- a/src/yuescript/yue_parser.cpp +++ b/src/yuescript/yue_parser.cpp @@ -905,21 +905,18 @@ YueParser::YueParser() { white >> '}' ); - table_block_inner = Seperator >> key_value_line >> *(line_break >> key_value_line); + table_block_inner = Seperator >> key_value_line >> *(+plain_space_break >> key_value_line); TableBlock = +plain_space_break >> advance_match >> ensure(table_block_inner, pop_indent); TableBlockIndent = ('*' | '-' >> space_one) >> Seperator >> disable_arg_table_block_rule( space >> key_value_list >> -(space >> ',') >> -(plain_space_break >> advance_match >> space >> ensure(key_value_list >> -(space >> ',') >> *(plain_space_break >> key_value_line), pop_indent))); ClassMemberList = Seperator >> key_value >> *(space >> ',' >> space >> key_value); - class_line = -EmptyLine >> ( - YueComment | - check_indent_match >> space >> (ClassMemberList | Statement) >> -(space >> ',') - ) >> space; + class_line = -yue_comment_block >> check_indent_match >> space >> (ClassMemberList | Statement) >> -(space >> ',') >> space; ClassBlock = +plain_space_break >> advance_match >> Seperator >> - class_line >> *(plain_space_break >> class_line) >> + class_line >> *(+plain_space_break >> class_line) >> pop_indent; ClassDecl = @@ -1010,20 +1007,20 @@ YueParser::YueParser() { MetaNormalPairDef = MetaNormalPair >> destruct_def; NormalDef = Exp >> Seperator >> destruct_def; + yue_comment_block = -EmptyLine >> YueComment >> *(line_break >> -EmptyLine >> YueComment) >> line_break; + key_value = VariablePair | NormalPair | MetaVariablePair | MetaNormalPair; key_value_list = key_value >> *(space >> ',' >> space >> key_value); - key_value_line = -EmptyLine >> ( - YueComment | + key_value_line = -yue_comment_block >> check_indent_match >> space >> ( key_value_list >> -(space >> ',') | TableBlockIndent | ('*' | '-' >> space_one) >> space >> (SpreadExp | Exp | TableBlock) - ) >> space - ); + ) >> space; fn_arg_def_list = FnArgDef >> *(space >> ',' >> space >> FnArgDef); diff --git a/src/yuescript/yue_parser.h b/src/yuescript/yue_parser.h index 12b19ac..07153fb 100644 --- a/src/yuescript/yue_parser.h +++ b/src/yuescript/yue_parser.h @@ -318,6 +318,7 @@ private: NONE_AST_RULE(comment_line); NONE_AST_RULE(yue_line_comment); NONE_AST_RULE(yue_multiline_comment); + NONE_AST_RULE(yue_comment_block); NONE_AST_RULE(line); NONE_AST_RULE(shebang); NONE_AST_RULE(is_lax); -- cgit v1.2.3-55-g6feb