From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wr1-x432.google.com (mail-wr1-x432.google.com [IPv6:2a00:1450:4864:20::432]) by sourceware.org (Postfix) with ESMTPS id B6EC6385734E for ; Tue, 30 Jan 2024 12:12:05 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org B6EC6385734E Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=embecosm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=embecosm.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org B6EC6385734E Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::432 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1706616781; cv=none; b=B68xnK71hPfaR3o3Auz0fLnPe9/toQ8wu8ISS3lVtHNzoREySVDWMXPbTA4+SSO9odTaJGMUKfNR/ffnDsAcCzD9+O/Ws9ZMfNWIqw9Yt8xItesLoRbC35HKKbzH2EfD7b6BDSEG8up143jyKrAzoitnZmcDqfA4WBy3yBxTLRw= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1706616781; c=relaxed/simple; bh=r8e7g3DdBZoKCXzrIO6qvkfYpO0m8Ii39hz2BAj21Ws=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=xq87OZB3beogznqGCKPh4c9v98b982NzoOKkxVfUfbqakua5HNbE+MdPVEWJEw52yZ1+Aj615JV5dnWgGx8dCpF1LFh7Tcdd7qt/vp8p/9UMb4Op6liMap7zO66Ve8sNfGpoqLQumGQhwcnsm4nJJx0eOFP+KnfeMo7wKNk1ZUI= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-wr1-x432.google.com with SMTP id ffacd0b85a97d-33ae6dfa923so1619176f8f.1 for ; Tue, 30 Jan 2024 04:12:05 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=embecosm.com; s=google; t=1706616720; x=1707221520; darn=gcc.gnu.org; h=content-transfer-encoding:mime-version:reply-to:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to; bh=mQv1uk9NwV34NhLXI89aFCvZYI3S70uFrCuNj94Y9e4=; b=CvV9n336z5xspM+EwYbIGctTbQE2Q4FaPsAE2rmfiEFaeYbfsHGQl8RhFm3GcGmGe7 5KhRaBukHPdF3vk6NW4MfB8OjQW9jROgX3qcj2iMWwvEaHpTnOTkWIBX8BnMLmry5dxR LGj4uTX19Sn7wda/p6ZGZdA1hc/rDiXXIkxFn4QRvdtc2rvhoETYXq4FCpyUzv5VqKbd pJ1DD2upQVhTFtP34LKV/v3nDBmHa54CZ18qTniYpsJURgTKmeWZSOLFVtjZjBf0iKdY i3Atfuw4A435w3+r2Er42H/KCUF9qev3Eoi0Z8UKu/tbcsjP5TroP+DowvfR4MzO6B87 Ut1A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706616720; x=1707221520; h=content-transfer-encoding:mime-version:reply-to:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=mQv1uk9NwV34NhLXI89aFCvZYI3S70uFrCuNj94Y9e4=; b=ZvMcqdMfx5A0bjbXcnSkbsNgITF0owcaY2/QeTI2jl2IG9BUGyp3dS+SqhogevbCrl UR8rthOYligcWLyLzkYwzoGTQPYmgs5n/8+87SJgd1GRrkaQ762loFRtTwlcpIIT7l47 /1LleRl0+gE7FbrO+o1LHfnA4w+wRROaUhU4ht6sMik4wbfge/4TkHzKO5d5M49tF5TQ A5+dfRdBlkjNQcU+pL4qWYeHniBGgksyRhYKtWiv0PR2Yzsvt/YOdnID1QsktLMX8Uwv EGC5SFok+BKaeUP9eUw/2FnYu2x0h+V3Lmn3C5wiLLfdfa7HDsm3TWY764mASrSqSlDe 4OWg== X-Gm-Message-State: AOJu0YywFbKVm0lBF7fMe0pITOWLZKR6LLMLAQTQyqVrzgpT0WpMTCli 3io6L5tiD6vsJSL1hiXEaCx76mW6jgckhUBgz+DWvnnkp7t7cR4ARlIq35fO+5xD61BSvKtvABJ F9w== X-Google-Smtp-Source: AGHT+IEx7e2rXrYQu15IhFmc9p8LwqVpYqE7f4kPZtbC4BJYVNhDV+OZSMAzQ5ZlcmigzAvqz48ubg== X-Received: by 2002:a5d:678a:0:b0:33a:e38d:f944 with SMTP id v10-20020a5d678a000000b0033ae38df944mr6590513wru.60.1706616720036; Tue, 30 Jan 2024 04:12:00 -0800 (PST) Received: from platypus.localdomain ([62.23.166.218]) by smtp.gmail.com with ESMTPSA id f9-20020a056000036900b00339307d9d31sm10569894wrf.112.2024.01.30.04.11.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 30 Jan 2024 04:11:59 -0800 (PST) From: arthur.cohen@embecosm.com To: gcc-patches@gcc.gnu.org Cc: gcc-rust@gcc.gnu.org, Owen Avery Subject: [COMMITTED 100/101] gccrs: Remove TraitImplItem Date: Tue, 30 Jan 2024 13:07:56 +0100 Message-ID: <20240130121026.807464-103-arthur.cohen@embecosm.com> X-Mailer: git-send-email 2.42.1 In-Reply-To: <20240130121026.807464-2-arthur.cohen@embecosm.com> References: <20240130121026.807464-2-arthur.cohen@embecosm.com> Reply-To: arthur.cohen@embecosm.com MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-14.2 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: From: Owen Avery gcc/rust/ChangeLog: * ast/rust-ast-full-decls.h (class TraitImplItem): Remove forward declaration. (class AssociatedItem): Add forward declaration. * ast/rust-ast.h (class TraitImplItem): Remove. (class TraitItem): Inherit from AssociatedItem. (SingleASTNode::take_trait_impl_item): Return std::unique_ptr instead of std::unique_ptr. * ast/rust-item.h (class Function): Inherit from AssociatedItem instead of TraitImplItem. (class TypeAlias): Likewise. (class ConstantItem): Likewise. (class TraitImpl): Store items as AssociatedItem. * expand/rust-derive-clone.cc (DeriveClone::clone_fn): Return std::unique_ptr. (DeriveClone::clone_impl): Take std::unique_ptr. * expand/rust-derive-clone.h (DeriveClone::clone_fn): Return std::unique_ptr. (DeriveClone::clone_impl): Take std::unique_ptr. * expand/rust-expand-visitor.cc (ExpandVisitor::visit): Handle changes to SingleASTNode::take_trait_impl_item. * parse/rust-parse-impl.h (Parser::parse_impl): Parse TraitImpl as containing AssociatedItem. (Parser::parse_trait_impl_item): Return std::unique_ptr. (Parser::parse_trait_impl_function_or_method): Likewise. * parse/rust-parse.h (Parser::parse_trait_impl_item): Return std::unique_ptr. (Parser::parse_trait_impl_function_or_method): Likewise. Signed-off-by: Owen Avery --- gcc/rust/ast/rust-ast-full-decls.h | 2 +- gcc/rust/ast/rust-ast.h | 22 +++------------------- gcc/rust/ast/rust-item.h | 18 +++++++++--------- gcc/rust/expand/rust-derive-clone.cc | 8 ++++---- gcc/rust/expand/rust-derive-clone.h | 4 ++-- gcc/rust/expand/rust-expand-visitor.cc | 2 +- gcc/rust/parse/rust-parse-impl.h | 8 ++++---- gcc/rust/parse/rust-parse.h | 4 ++-- 8 files changed, 26 insertions(+), 42 deletions(-) diff --git a/gcc/rust/ast/rust-ast-full-decls.h b/gcc/rust/ast/rust-ast-full-decls.h index 5bfaaa8ba3c..0f95149a214 100644 --- a/gcc/rust/ast/rust-ast-full-decls.h +++ b/gcc/rust/ast/rust-ast-full-decls.h @@ -52,7 +52,7 @@ class GenericParam; class LifetimeParam; class ConstGenericParam; class TraitItem; -class TraitImplItem; +class AssociatedItem; struct Crate; class PathExpr; diff --git a/gcc/rust/ast/rust-ast.h b/gcc/rust/ast/rust-ast.h index 256a527118a..e96ac349733 100644 --- a/gcc/rust/ast/rust-ast.h +++ b/gcc/rust/ast/rust-ast.h @@ -1657,22 +1657,8 @@ public: virtual location_t get_locus () const = 0; }; -// Abstract base class for items used in a trait impl -class TraitImplItem : public AssociatedItem -{ -protected: - virtual TraitImplItem *clone_associated_item_impl () const override = 0; - -public: - // Unique pointer custom clone function - std::unique_ptr clone_trait_impl_item () const - { - return std::unique_ptr (clone_associated_item_impl ()); - } -}; - // Item used in trait declarations - abstract base class -class TraitItem : public TraitImplItem +class TraitItem : public AssociatedItem { protected: TraitItem (location_t locus) @@ -1945,11 +1931,9 @@ public: return take_assoc_item (); } - std::unique_ptr take_trait_impl_item () + std::unique_ptr take_trait_impl_item () { - rust_assert (!is_error ()); - return std::unique_ptr ( - static_cast (assoc_item.release ())); + return take_assoc_item (); } std::unique_ptr take_type () diff --git a/gcc/rust/ast/rust-item.h b/gcc/rust/ast/rust-item.h index 5b9eb64560d..1553f29ad2d 100644 --- a/gcc/rust/ast/rust-item.h +++ b/gcc/rust/ast/rust-item.h @@ -1289,7 +1289,7 @@ protected: class LetStmt; // Rust function declaration AST node -class Function : public VisItem, public TraitImplItem +class Function : public VisItem, public AssociatedItem { FunctionQualifiers qualifiers; Identifier function_name; @@ -1436,7 +1436,7 @@ protected: }; // Rust type alias (i.e. typedef) AST node -class TypeAlias : public VisItem, public TraitImplItem +class TypeAlias : public VisItem, public AssociatedItem { Identifier new_type_name; @@ -2312,7 +2312,7 @@ protected: /* "Constant item" AST node - used for constant, compile-time expressions * within module scope (like constexpr) */ -class ConstantItem : public VisItem, public TraitImplItem +class ConstantItem : public VisItem, public AssociatedItem { // either has an identifier or "_" - maybe handle in identifier? // bool identifier_is_underscore; @@ -3484,7 +3484,7 @@ class TraitImpl : public Impl TypePath trait_path; // bool has_impl_items; - std::vector> impl_items; + std::vector> impl_items; public: std::string as_string () const override; @@ -3494,7 +3494,7 @@ public: // Mega-constructor TraitImpl (TypePath trait_path, bool is_unsafe, bool has_exclam, - std::vector> impl_items, + std::vector> impl_items, std::vector> generic_params, std::unique_ptr trait_type, WhereClause where_clause, Visibility vis, std::vector inner_attrs, @@ -3513,7 +3513,7 @@ public: { impl_items.reserve (other.impl_items.size ()); for (const auto &e : other.impl_items) - impl_items.push_back (e->clone_trait_impl_item ()); + impl_items.push_back (e->clone_associated_item ()); } // Overloaded assignment operator with vector clone @@ -3526,7 +3526,7 @@ public: impl_items.reserve (other.impl_items.size ()); for (const auto &e : other.impl_items) - impl_items.push_back (e->clone_trait_impl_item ()); + impl_items.push_back (e->clone_associated_item ()); return *this; } @@ -3541,11 +3541,11 @@ public: bool is_exclam () const { return has_exclam; } // TODO: think of better way to do this - const std::vector> &get_impl_items () const + const std::vector> &get_impl_items () const { return impl_items; } - std::vector> &get_impl_items () + std::vector> &get_impl_items () { return impl_items; } diff --git a/gcc/rust/expand/rust-derive-clone.cc b/gcc/rust/expand/rust-derive-clone.cc index cc198eecf5d..01226e4f913 100644 --- a/gcc/rust/expand/rust-derive-clone.cc +++ b/gcc/rust/expand/rust-derive-clone.cc @@ -43,7 +43,7 @@ DeriveClone::clone_call (std::unique_ptr &&to_clone) * fn clone(&self) -> Self { } * */ -std::unique_ptr +std::unique_ptr DeriveClone::clone_fn (std::unique_ptr &&clone_expr) { auto block = std::unique_ptr ( @@ -57,7 +57,7 @@ DeriveClone::clone_fn (std::unique_ptr &&clone_expr) std::vector> params; params.push_back (std::move (self)); - return std::unique_ptr ( + return std::unique_ptr ( new Function ({"clone"}, builder.fn_qualifiers (), /* generics */ {}, /* function params */ std::move (params), std::move (big_self_type), WhereClause::create_empty (), @@ -73,7 +73,7 @@ DeriveClone::clone_fn (std::unique_ptr &&clone_expr) * */ std::unique_ptr -DeriveClone::clone_impl (std::unique_ptr &&clone_fn, +DeriveClone::clone_impl (std::unique_ptr &&clone_fn, std::string name) { // should that be `$crate::core::clone::Clone` instead? @@ -81,7 +81,7 @@ DeriveClone::clone_impl (std::unique_ptr &&clone_fn, segments.emplace_back (builder.type_path_segment ("Clone")); auto clone = TypePath (std::move (segments), loc); - auto trait_items = std::vector> (); + auto trait_items = std::vector> (); trait_items.emplace_back (std::move (clone_fn)); return std::unique_ptr ( diff --git a/gcc/rust/expand/rust-derive-clone.h b/gcc/rust/expand/rust-derive-clone.h index dcb88f9468a..1009247e882 100644 --- a/gcc/rust/expand/rust-derive-clone.h +++ b/gcc/rust/expand/rust-derive-clone.h @@ -49,7 +49,7 @@ private: * fn clone(&self) -> Self { } * */ - std::unique_ptr clone_fn (std::unique_ptr &&clone_expr); + std::unique_ptr clone_fn (std::unique_ptr &&clone_expr); /** * Create the Clone trait implementation for a type @@ -59,7 +59,7 @@ private: * } * */ - std::unique_ptr clone_impl (std::unique_ptr &&clone_fn, + std::unique_ptr clone_impl (std::unique_ptr &&clone_fn, std::string name); virtual void visit_struct (StructStruct &item); diff --git a/gcc/rust/expand/rust-expand-visitor.cc b/gcc/rust/expand/rust-expand-visitor.cc index a60c4728926..dad2417eac4 100644 --- a/gcc/rust/expand/rust-expand-visitor.cc +++ b/gcc/rust/expand/rust-expand-visitor.cc @@ -957,7 +957,7 @@ ExpandVisitor::visit (AST::TraitImpl &impl) if (impl.has_where_clause ()) expand_where_clause (impl.get_where_clause ()); - std::function (AST::SingleASTNode)> + std::function (AST::SingleASTNode)> extractor = [] (AST::SingleASTNode node) { return node.take_trait_impl_item (); }; diff --git a/gcc/rust/parse/rust-parse-impl.h b/gcc/rust/parse/rust-parse-impl.h index 7ea7276dc94..c622ed7bc97 100644 --- a/gcc/rust/parse/rust-parse-impl.h +++ b/gcc/rust/parse/rust-parse-impl.h @@ -5492,12 +5492,12 @@ Parser::parse_impl (AST::Visibility vis, AST::AttrVec inner_attrs = parse_inner_attributes (); // parse trait impl items - std::vector> impl_items; + std::vector> impl_items; const_TokenPtr t = lexer.peek_token (); while (t->get_id () != RIGHT_CURLY) { - std::unique_ptr impl_item + std::unique_ptr impl_item = parse_trait_impl_item (); if (impl_item == nullptr) @@ -5759,7 +5759,7 @@ Parser::parse_inherent_impl_function_or_method ( // Parses a single trait impl item (item inside a trait impl block). template -std::unique_ptr +std::unique_ptr Parser::parse_trait_impl_item () { // parse outer attributes (if they exist) @@ -5836,7 +5836,7 @@ Parser::parse_trait_impl_item () * smaller ones and prevents duplication of logic. Strictly, this parses a * function or method item inside a trait impl item block. */ template -std::unique_ptr +std::unique_ptr Parser::parse_trait_impl_function_or_method ( AST::Visibility vis, AST::AttrVec outer_attrs) { diff --git a/gcc/rust/parse/rust-parse.h b/gcc/rust/parse/rust-parse.h index 02f90217fc2..34397540321 100644 --- a/gcc/rust/parse/rust-parse.h +++ b/gcc/rust/parse/rust-parse.h @@ -171,7 +171,7 @@ public: std::unique_ptr parse_external_item (); std::unique_ptr parse_trait_item (); std::unique_ptr parse_inherent_impl_item (); - std::unique_ptr parse_trait_impl_item (); + std::unique_ptr parse_trait_impl_item (); AST::PathInExpression parse_path_in_expression (); std::vector> parse_lifetime_params (); AST::Visibility parse_visibility (); @@ -353,7 +353,7 @@ private: std::unique_ptr parse_inherent_impl_function_or_method (AST::Visibility vis, AST::AttrVec outer_attrs); - std::unique_ptr + std::unique_ptr parse_trait_impl_function_or_method (AST::Visibility vis, AST::AttrVec outer_attrs); std::unique_ptr -- 2.42.1