]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
gccrs: Break OR tokens in closure parameter list context
authorPierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
Tue, 10 Oct 2023 12:06:30 +0000 (14:06 +0200)
committerArthur Cohen <arthur.cohen@embecosm.com>
Tue, 16 Jan 2024 18:09:18 +0000 (19:09 +0100)
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 <pierre-emmanuel.patry@embecosm.com>
gcc/rust/parse/rust-parse-impl.h

index 71f76f8e2eb6d72a035fb86d336bc3d8706399de..1e59913e88eafb0bab5981ebde5114212e7c8229 100644 (file)
@@ -14464,12 +14464,17 @@ Parser<ManagedTokenSource>::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 ();
          }