From: Pierre-Emmanuel Patry Date: Wed, 22 Nov 2023 09:35:44 +0000 (+0100) Subject: Allow const and async specifiers in functions X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=804830a0258aadcaf26683abb86019ed96a33c14;p=thirdparty%2Fgcc.git Allow const and async specifiers in functions We need to account for const specifiers in async parsing as const can be used in the syntax before the async keyword. gcc/rust/ChangeLog: * parse/rust-parse-impl.h (Parser::parse_vis_item): Allow parsing async items in const. (Parser::parse_async_item): Account for const offset during async lookahead. 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 3c8d81bbf97f..b8c40c3c1577 100644 --- a/gcc/rust/parse/rust-parse-impl.h +++ b/gcc/rust/parse/rust-parse-impl.h @@ -1383,6 +1383,8 @@ Parser::parse_vis_item (AST::AttrVec outer_attrs) return parse_const_item (std::move (vis), std::move (outer_attrs)); case UNSAFE: case EXTERN_KW: + case ASYNC: + return parse_async_item (std::move (vis), std::move (outer_attrs)); case FN_KW: return parse_function (std::move (vis), std::move (outer_attrs)); default: @@ -1445,7 +1447,9 @@ std::unique_ptr Parser::parse_async_item (AST::Visibility vis, AST::AttrVec outer_attrs) { - const_TokenPtr t = lexer.peek_token (); + auto offset = (lexer.peek_token ()->get_id () == CONST) ? 1 : 0; + const_TokenPtr t = lexer.peek_token (offset); + if (Session::get_instance ().options.get_edition () == CompileOptions::Edition::E2015) { @@ -1456,7 +1460,7 @@ Parser::parse_async_item (AST::Visibility vis, "to use %, switch to Rust 2018 or later")); } - t = lexer.peek_token (1); + t = lexer.peek_token (offset + 1); switch (t->get_id ()) {