From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1643) id 4DEE93858C50; Tue, 28 Feb 2023 22:36:44 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 4DEE93858C50 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1677623804; bh=UF4pJyENL10Q5CF519wozKHk8SYDIsmgsKVoWzHRNtI=; h=From:To:Subject:Date:From; b=AINHTRgBwNrQCJdrA/EW6X1cSqJrINfpE7V2oQ/wLY/JLw8Kz/CtV2iR/WWSx31G1 g6QtjUPZSK2ro3BSBg51k0LyPDNWB1mlxwQTKhZ2x0QIoafFOHzMNKiRMJemwOf27j b6kuXdIrzuqblA7OONCuGMU24NSb7V05H5636j3w= Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: Thomas Schwinge To: gcc-cvs@gcc.gnu.org Subject: [gcc/devel/rust/master] parser: Parse external type item X-Act-Checkin: gcc X-Git-Author: Pierre-Emmanuel Patry X-Git-Refname: refs/heads/devel/rust/master X-Git-Oldrev: 5c2ed969a2d58217797cf2e938c0f833a50d7cb4 X-Git-Newrev: 689c421dd7a92bba7e31342a034fb25b85407b37 Message-Id: <20230228223644.4DEE93858C50@sourceware.org> Date: Tue, 28 Feb 2023 22:36:44 +0000 (GMT) List-Id: https://gcc.gnu.org/g:689c421dd7a92bba7e31342a034fb25b85407b37 commit 689c421dd7a92bba7e31342a034fb25b85407b37 Author: Pierre-Emmanuel Patry Date: Mon Feb 27 10:10:51 2023 +0100 parser: Parse external type item Add the code to parse type item declaration within an extern block. gcc/rust/ChangeLog: * parse/rust-parse-impl.h (Parser::parse_external_type_item): Add function to parser an external type item. (Parser::parse_external_item): Add identification and parsing for external type items. * parse/rust-parse.h: Add parser_external_type_item prototype. Signed-off-by: Pierre-Emmanuel Patry Diff: --- gcc/rust/parse/rust-parse-impl.h | 31 +++++++++++++++++++++++++++++++ gcc/rust/parse/rust-parse.h | 2 ++ 2 files changed, 33 insertions(+) diff --git a/gcc/rust/parse/rust-parse-impl.h b/gcc/rust/parse/rust-parse-impl.h index 7807d750ba2..7988d12309d 100644 --- a/gcc/rust/parse/rust-parse-impl.h +++ b/gcc/rust/parse/rust-parse-impl.h @@ -3990,6 +3990,34 @@ Parser::parse_lifetime () } } +template +std::unique_ptr +Parser::parse_external_type_item (AST::Visibility vis, + AST::AttrVec outer_attrs) +{ + Location locus = lexer.peek_token ()->get_locus (); + skip_token (TYPE); + + const_TokenPtr alias_name_tok = expect_token (IDENTIFIER); + if (alias_name_tok == nullptr) + { + Error error (lexer.peek_token ()->get_locus (), + "could not parse identifier in external opaque type"); + add_error (std::move (error)); + + skip_after_semicolon (); + return nullptr; + } + + if (!skip_token (SEMICOLON)) + return nullptr; + + return std::unique_ptr ( + new AST::ExternalTypeItem (std::move (alias_name_tok->get_str ()), + std::move (vis), std::move (outer_attrs), + std::move (locus))); +} + // Parses a "type alias" (typedef) item. template std::unique_ptr @@ -6011,6 +6039,9 @@ Parser::parse_external_item () std::move (variadic_attrs), std::move (vis), std::move (outer_attrs), locus)); } + case TYPE: + return parse_external_type_item (std::move (vis), + std::move (outer_attrs)); default: // error add_error ( diff --git a/gcc/rust/parse/rust-parse.h b/gcc/rust/parse/rust-parse.h index 54a87c946f9..42168e961e3 100644 --- a/gcc/rust/parse/rust-parse.h +++ b/gcc/rust/parse/rust-parse.h @@ -273,6 +273,8 @@ private: template std::vector parse_lifetime_bounds (EndTokenPred is_end_token); AST::Lifetime parse_lifetime (); + std::unique_ptr + parse_external_type_item (AST::Visibility vis, AST::AttrVec outer_attrs); std::unique_ptr parse_type_alias (AST::Visibility vis, AST::AttrVec outer_attrs); std::unique_ptr parse_struct (AST::Visibility vis,