From: Pierre-Emmanuel Patry Date: Tue, 10 Oct 2023 12:06:30 +0000 (+0200) Subject: gccrs: Break OR tokens in closure parameter list context X-Git-Tag: basepoints/gcc-15~2083 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=906e55530a30fed93868d16332c9168848089ded;p=thirdparty%2Fgcc.git gccrs: Break OR tokens in closure parameter list context The parser was unable to process as closure inside a closure because the lexer could not differentiate an OR from two PIPE tokens. gcc/rust/ChangeLog: * parse/rust-parse-impl.h (Parser::parse_closure_expr_pratt): Fix closure parsing function to handle consecutive parameter lists. Signed-off-by: Pierre-Emmanuel Patry --- diff --git a/gcc/rust/parse/rust-parse-impl.h b/gcc/rust/parse/rust-parse-impl.h index 71f76f8e2eb6..1e59913e88ea 100644 --- a/gcc/rust/parse/rust-parse-impl.h +++ b/gcc/rust/parse/rust-parse-impl.h @@ -14464,12 +14464,17 @@ Parser::parse_closure_expr_pratt (const_TokenPtr tok, if (lexer.peek_token ()->get_id () != COMMA) { + if (lexer.peek_token ()->get_id () == OR) + lexer.split_current_token (PIPE, PIPE); // not an error but means param list is done break; } // skip comma lexer.skip_token (); + if (lexer.peek_token ()->get_id () == OR) + lexer.split_current_token (PIPE, PIPE); + t = lexer.peek_token (); }