From patchwork Wed Feb 7 11:44:10 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arthur Cohen X-Patchwork-Id: 1896141 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=embecosm.com header.i=@embecosm.com header.a=rsa-sha256 header.s=google header.b=Yk2GGVHG; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=2620:52:3:1:0:246e:9693:128c; helo=server2.sourceware.org; envelope-from=gcc-patches-bounces+incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=patchwork.ozlabs.org) Received: from server2.sourceware.org (server2.sourceware.org [IPv6:2620:52:3:1:0:246e:9693:128c]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4TVKnm22xdz23gT for ; Wed, 7 Feb 2024 23:54:35 +1100 (AEDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 7BF913857349 for ; Wed, 7 Feb 2024 12:54:33 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mail-lf1-x135.google.com (mail-lf1-x135.google.com [IPv6:2a00:1450:4864:20::135]) by sourceware.org (Postfix) with ESMTPS id C3AFF385800D for ; Wed, 7 Feb 2024 12:44:23 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org C3AFF385800D 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 C3AFF385800D Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::135 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1707309884; cv=none; b=XyyCJ7//RyoxT/QrTlDhild3YNuahuiYqld3Fu19IpHizIjaPiwArW+eFCuUO+j04JgFDCn4aKO8+z1GhuCLvkiuvrDifSWu5NglmSrcNSYHR3ZuAOvi3i6Sc47FgbSaBdA62vClce1URuTBaj41/gbqCi1yYmXW7vfCjsADYCg= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1707309884; c=relaxed/simple; bh=VoHbSN5/sU+TdLzNG9GC73nQT8ueeQ2R9eHkd2ltVX8=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=WwstX3o+1wdGKs0HP8RigwJVjBW/YlN7v9MSx4BjgbLKIe9s6oYxO2A/NWqkLakSbeOffdNynzO7wA2EPTXySzg0oshi4MC6UOnK34wFsDQ7DSoPrZtK5OhJ+yTjk/HOy1ebFN8D1/p0NpSS3ViXKs5rjzowitNnGvGH+28rhoo= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-lf1-x135.google.com with SMTP id 2adb3069b0e04-511616b73ddso983043e87.0 for ; Wed, 07 Feb 2024 04:44:23 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=embecosm.com; s=google; t=1707309862; x=1707914662; 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=IiELQjfVLw8DzGi433XmhY9l6pwWVbEz+I3wOUia++Q=; b=Yk2GGVHG2HEBFGqBx1xYkTAg4q9ubiiPmITceJNMDGB/IzU7zs8Lrxcxrtay3rHsIq fRGS3XR6HbwMAU9hJ9shqEAHS2jc37JLhw2yVY0F5obfK42Cv02b5QQY/TweCUgAsI6C rass+fBC+pXm4TVyH84SBT+pV8LTUHAHx4XUkMXG687NbrGHqVPBlhPIiB+D9xHn+51J ljcHht8cL9Ha1Q31D3bGX0UU4qCgc8p0xFms2R46zjRyZKzJPfnXAXOuEyOBwB5TL7wu XEpKGUQO9X8Rv0Dd2oyFuHpfzbV4BLQSfkvkBgn2YpNoyLpplPtw3lq/Vw5A5Z4BJNa+ D0VA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1707309862; x=1707914662; 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=IiELQjfVLw8DzGi433XmhY9l6pwWVbEz+I3wOUia++Q=; b=s6qU4Xt5XPI9XuBBL1sex0qK4nHQg1kD+1NtbHYfwOyjiJPhGiu6mQXtCyJoyN/++y 80Mpi60NrtwsUwWqW7HGzl3bAdsWOMTl5KpGTJthIUHOXXh0viyu79w9/MEfWjj+W/S0 yWWTWJ/J10j7fcwYaAuMkmDdd15NxLkYV3I/u+n9vb0RtAg0nx9Ys98wa9p2dxvfbJjh 88w96/wQvLZm7qfp/wib5LBN0aiWgBQ9CnX14IHz4KwsY9iCyJ0omjWGhSVTZ7/s79uA Bzs3tu6eII2olb0ynavQTCnGnzcxvcOjAIgVnUaCJhahph6NL3g352q0MMsH+aARXD3h udKQ== X-Gm-Message-State: AOJu0Yw6xP+90qj5JdkXO1QrFVzUMlFi6qk8GjZtzpokFHyEMfteyDRr wHpXvh8vBZTCiwEJ2233unoK2Tua+BEbr96oS6I0R9qGXhre6fyiA2UVeeiH2+iFvXqJinX+zEE IzQ== X-Google-Smtp-Source: AGHT+IHHy5f+q6TFIsVzC7JKN6qpEqoTcjqrLGanj2U7HTzGFO+0zHxkc/+eq1lai16dmrdzQsTOnQ== X-Received: by 2002:a05:6512:3253:b0:511:55b3:bbe2 with SMTP id c19-20020a056512325300b0051155b3bbe2mr3362225lfr.66.1707309861478; Wed, 07 Feb 2024 04:44:21 -0800 (PST) X-Forwarded-Encrypted: i=1; AJvYcCUkl3FprjP0aQGsgsh3pL/FFPQAbhe9YrNiW9ai2aTTzqV3Iuy7Di8AxItw+nncrlDsR0OVcizDobGfe7WABv59KodioU86 Received: from platypus.sou.embecosm-corp.com ([212.69.42.53]) by smtp.gmail.com with ESMTPSA id x19-20020a05600c2a5300b0040fbdd6f69bsm5044188wme.33.2024.02.07.04.44.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 Feb 2024 04:44:20 -0800 (PST) From: arthur.cohen@embecosm.com To: gcc-patches@gcc.gnu.org Cc: gcc-rust@gcc.gnu.org, Kushal Pal Subject: [COMMITTED 24/25] gccrs: Remove obsolete classes and functions. Date: Wed, 7 Feb 2024 12:44:10 +0100 Message-ID: <20240207114419.1100894-25-arthur.cohen@embecosm.com> X-Mailer: git-send-email 2.42.1 In-Reply-To: <20240207114419.1100894-2-arthur.cohen@embecosm.com> References: <20240207114419.1100894-2-arthur.cohen@embecosm.com> MIME-Version: 1.0 X-Spam-Status: No, score=-13.5 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 X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: arthur.cohen@embecosm.com Errors-To: gcc-patches-bounces+incoming=patchwork.ozlabs.org@gcc.gnu.org From: Kushal Pal Trait functions now use AST::Function class, so classes AST::TraitItemFunc, AST::TraitItemMethod, AST::TraitFunctionDecl, AST::TraitMethodDecl and their related functions can be removed. gcc/rust/ChangeLog: * ast/rust-ast-collector.cc (TokenCollector::visit): Remove obsolete classes and functions. * ast/rust-ast-collector.h: Likewise. * ast/rust-ast-full-decls.h (class TraitFunctionDecl): Likewise. (class TraitItemFunc): Likewise. (class TraitMethodDecl): Likewise. (class TraitItemMethod): Likewise. * ast/rust-ast-visitor.cc (DefaultASTVisitor::visit): Likewise. * ast/rust-ast-visitor.h: Likewise. * ast/rust-ast.cc (TraitItemFunc::TraitItemFunc): Likewise. (TraitItemFunc::operator=): Likewise. (TraitItemFunc::as_string): Likewise. (TraitFunctionDecl::as_string): Likewise. (TraitItemMethod::TraitItemMethod): Likewise. (TraitItemMethod::operator=): Likewise. (TraitItemMethod::as_string): Likewise. (TraitMethodDecl::as_string): Likewise. (TraitItemFunc::accept_vis): Likewise. (TraitItemMethod::accept_vis): Likewise. * ast/rust-item.h (class TraitFunctionDecl): Likewise. (class TraitItemFunc): Likewise. (class TraitMethodDecl): Likewise. (class TraitItemMethod): Likewise. * checks/errors/rust-ast-validation.cc (ASTValidation::visit): Likewise. * checks/errors/rust-ast-validation.h: Likewise. * checks/errors/rust-feature-gate.h: Likewise. * expand/rust-cfg-strip.cc (CfgStrip::maybe_strip_trait_function_decl): Likewise. (CfgStrip::maybe_strip_trait_method_decl): Likewise. (CfgStrip::visit): Likewise. * expand/rust-cfg-strip.h: Likewise. * expand/rust-derive.h: Likewise. * expand/rust-expand-visitor.cc (ExpandVisitor::expand_trait_function_decl): Likewise. (ExpandVisitor::expand_trait_method_decl): Likewise. (ExpandVisitor::visit): Likewise. * expand/rust-expand-visitor.h: Likewise. * hir/rust-ast-lower-base.cc (ASTLoweringBase::visit): Likewise. * hir/rust-ast-lower-base.h: Likewise. * hir/rust-ast-lower-implitem.cc (ASTLowerTraitItem::visit): Likewise. * hir/rust-ast-lower-implitem.h: Likewise. * resolve/rust-ast-resolve-base.cc (ResolverBase::visit): Likewise. * resolve/rust-ast-resolve-base.h: Likewise. * resolve/rust-ast-resolve-implitem.h (visit): Likewise. * resolve/rust-ast-resolve-item.cc (ResolveTraitItems::visit): Likewise. * resolve/rust-ast-resolve-item.h: Likewise. * resolve/rust-default-resolver.cc (DefaultResolver::visit): Likewise. * resolve/rust-default-resolver.h: Likewise. * resolve/rust-toplevel-name-resolver-2.0.cc (TopLevel::visit): Likewise. * resolve/rust-toplevel-name-resolver-2.0.h: Likewise. * util/rust-attributes.cc (AttributeChecker::visit): Likewise. * util/rust-attributes.h: Likewise. Signed-off-by: Kushal Pal --- gcc/rust/ast/rust-ast-collector.cc | 34 -- gcc/rust/ast/rust-ast-collector.h | 2 - gcc/rust/ast/rust-ast-full-decls.h | 4 - gcc/rust/ast/rust-ast-visitor.cc | 45 -- gcc/rust/ast/rust-ast-visitor.h | 6 - gcc/rust/ast/rust-ast.cc | 209 --------- gcc/rust/ast/rust-item.h | 406 ------------------ gcc/rust/checks/errors/rust-ast-validation.cc | 17 - gcc/rust/checks/errors/rust-ast-validation.h | 1 - gcc/rust/checks/errors/rust-feature-gate.h | 2 - gcc/rust/expand/rust-cfg-strip.cc | 105 ----- gcc/rust/expand/rust-cfg-strip.h | 4 - gcc/rust/expand/rust-derive.h | 2 - gcc/rust/expand/rust-expand-visitor.cc | 54 --- gcc/rust/expand/rust-expand-visitor.h | 4 - gcc/rust/hir/rust-ast-lower-base.cc | 6 - gcc/rust/hir/rust-ast-lower-base.h | 2 - gcc/rust/hir/rust-ast-lower-implitem.cc | 159 ------- gcc/rust/hir/rust-ast-lower-implitem.h | 2 - gcc/rust/resolve/rust-ast-resolve-base.cc | 8 - gcc/rust/resolve/rust-ast-resolve-base.h | 2 - gcc/rust/resolve/rust-ast-resolve-implitem.h | 40 -- gcc/rust/resolve/rust-ast-resolve-item.cc | 155 ------- gcc/rust/resolve/rust-ast-resolve-item.h | 2 - gcc/rust/resolve/rust-default-resolver.cc | 8 - gcc/rust/resolve/rust-default-resolver.h | 2 - .../rust-toplevel-name-resolver-2.0.cc | 10 - .../resolve/rust-toplevel-name-resolver-2.0.h | 1 - gcc/rust/util/rust-attributes.cc | 8 - gcc/rust/util/rust-attributes.h | 2 - 30 files changed, 1302 deletions(-) diff --git a/gcc/rust/ast/rust-ast-collector.cc b/gcc/rust/ast/rust-ast-collector.cc index d5a98f1ccc7..fb0e6f9be1d 100644 --- a/gcc/rust/ast/rust-ast-collector.cc +++ b/gcc/rust/ast/rust-ast-collector.cc @@ -1948,23 +1948,6 @@ TokenCollector::visit_function_common (std::unique_ptr &return_type, } } -void -TokenCollector::visit (TraitItemFunc &item) -{ - auto func = item.get_trait_function_decl (); - auto id = func.get_identifier ().as_string (); - - push (Rust::Token::make (FN_KW, item.get_locus ())); - push (Rust::Token::make_identifier (UNDEF_LOCATION, std::move (id))); - push (Rust::Token::make (LEFT_PAREN, UNDEF_LOCATION)); - - visit_items_joined_by_separator (func.get_function_params ()); - - push (Rust::Token::make (RIGHT_PAREN, UNDEF_LOCATION)); - - visit_function_common (func.get_return_type (), item.get_definition ()); -} - void TokenCollector::visit (SelfParam ¶m) { @@ -1987,23 +1970,6 @@ TokenCollector::visit (SelfParam ¶m) } } -void -TokenCollector::visit (TraitItemMethod &item) -{ - auto method = item.get_trait_method_decl (); - auto id = method.get_identifier ().as_string (); - - push (Rust::Token::make (FN_KW, item.get_locus ())); - push (Rust::Token::make_identifier (UNDEF_LOCATION, std::move (id))); - push (Rust::Token::make (LEFT_PAREN, UNDEF_LOCATION)); - - visit_items_joined_by_separator (method.get_function_params (), COMMA); - - push (Rust::Token::make (RIGHT_PAREN, UNDEF_LOCATION)); - - visit_function_common (method.get_return_type (), item.get_definition ()); -} - void TokenCollector::visit (TraitItemConst &item) { diff --git a/gcc/rust/ast/rust-ast-collector.h b/gcc/rust/ast/rust-ast-collector.h index 55c13d103d0..246411fa15f 100644 --- a/gcc/rust/ast/rust-ast-collector.h +++ b/gcc/rust/ast/rust-ast-collector.h @@ -325,9 +325,7 @@ public: void visit (Union &union_item); void visit (ConstantItem &const_item); void visit (StaticItem &static_item); - void visit (TraitItemFunc &item); void visit (SelfParam ¶m); - void visit (TraitItemMethod &item); void visit (TraitItemConst &item); void visit (TraitItemType &item); void visit (Trait &trait); diff --git a/gcc/rust/ast/rust-ast-full-decls.h b/gcc/rust/ast/rust-ast-full-decls.h index 0f95149a214..c96bbfb07d9 100644 --- a/gcc/rust/ast/rust-ast-full-decls.h +++ b/gcc/rust/ast/rust-ast-full-decls.h @@ -193,10 +193,6 @@ class Enum; class Union; class ConstantItem; class StaticItem; -class TraitFunctionDecl; -class TraitItemFunc; -class TraitMethodDecl; -class TraitItemMethod; class TraitItemConst; class TraitItemType; class Trait; diff --git a/gcc/rust/ast/rust-ast-visitor.cc b/gcc/rust/ast/rust-ast-visitor.cc index 586570377aa..cb7ba846c39 100644 --- a/gcc/rust/ast/rust-ast-visitor.cc +++ b/gcc/rust/ast/rust-ast-visitor.cc @@ -911,51 +911,6 @@ DefaultASTVisitor::visit (AST::StaticItem &static_item) visit (static_item.get_expr ()); } -void -DefaultASTVisitor::visit (AST::TraitFunctionDecl &decl) -{ - visit (decl.get_qualifiers ()); - for (auto &generic : decl.get_generic_params ()) - visit (generic); - visit (decl.get_where_clause ()); - for (auto ¶m : decl.get_function_params ()) - visit (param); - if (decl.has_return_type ()) - visit (decl.get_return_type ()); -} - -void -DefaultASTVisitor::visit (AST::TraitItemFunc &item) -{ - visit_outer_attrs (item); - visit (item.get_trait_function_decl ()); - if (item.has_definition ()) - visit (item.get_definition ()); -} - -void -DefaultASTVisitor::visit (AST::TraitMethodDecl &decl) -{ - visit (decl.get_qualifiers ()); - for (auto &generic : decl.get_generic_params ()) - visit (generic); - visit (decl.get_where_clause ()); - visit (decl.get_self_param ()); - for (auto ¶m : decl.get_function_params ()) - visit (param); - if (decl.has_return_type ()) - visit (decl.get_return_type ()); -} - -void -DefaultASTVisitor::visit (AST::TraitItemMethod &item) -{ - visit_outer_attrs (item); - visit (item.get_trait_method_decl ()); - if (item.has_definition ()) - visit (item.get_definition ()); -} - void DefaultASTVisitor::visit (AST::TraitItemConst &item) { diff --git a/gcc/rust/ast/rust-ast-visitor.h b/gcc/rust/ast/rust-ast-visitor.h index 43cd750f5f7..6c9715eb077 100644 --- a/gcc/rust/ast/rust-ast-visitor.h +++ b/gcc/rust/ast/rust-ast-visitor.h @@ -156,8 +156,6 @@ public: virtual void visit (Union &union_item) = 0; virtual void visit (ConstantItem &const_item) = 0; virtual void visit (StaticItem &static_item) = 0; - virtual void visit (TraitItemFunc &item) = 0; - virtual void visit (TraitItemMethod &item) = 0; virtual void visit (TraitItemConst &item) = 0; virtual void visit (TraitItemType &item) = 0; virtual void visit (Trait &trait) = 0; @@ -330,8 +328,6 @@ protected: virtual void visit (AST::Union &union_item) override; virtual void visit (AST::ConstantItem &const_item) override; virtual void visit (AST::StaticItem &static_item) override; - virtual void visit (AST::TraitItemFunc &item) override; - virtual void visit (AST::TraitItemMethod &item) override; virtual void visit (AST::TraitItemConst &item) override; virtual void visit (AST::TraitItemType &item) override; virtual void visit (AST::Trait &trait) override; @@ -420,8 +416,6 @@ protected: virtual void visit (AST::WhereClause &where); virtual void visit (AST::StructField &field); virtual void visit (AST::TupleField &field); - virtual void visit (AST::TraitFunctionDecl &decl); - virtual void visit (AST::TraitMethodDecl &decl); virtual void visit (AST::NamedFunctionParam ¶m); virtual void visit (AST::MacroRule &rule); virtual void visit (AST::MacroInvocData &data); diff --git a/gcc/rust/ast/rust-ast.cc b/gcc/rust/ast/rust-ast.cc index 360a9ceb6db..90fe9269404 100644 --- a/gcc/rust/ast/rust-ast.cc +++ b/gcc/rust/ast/rust-ast.cc @@ -3049,203 +3049,6 @@ NamedFunctionParam::as_string () const return str; } -TraitItemFunc::TraitItemFunc (TraitItemFunc const &other) - : TraitItem (other.locus), outer_attrs (other.outer_attrs), decl (other.decl) -{ - node_id = other.node_id; - - // guard to prevent null dereference - if (other.block_expr != nullptr) - block_expr = other.block_expr->clone_block_expr (); -} - -TraitItemFunc & -TraitItemFunc::operator= (TraitItemFunc const &other) -{ - TraitItem::operator= (other); - outer_attrs = other.outer_attrs; - decl = other.decl; - locus = other.locus; - node_id = other.node_id; - - // guard to prevent null dereference - if (other.block_expr != nullptr) - block_expr = other.block_expr->clone_block_expr (); - else - block_expr = nullptr; - - return *this; -} -std::string -TraitItemFunc::as_string () const -{ - std::string str = append_attributes (outer_attrs, OUTER); - - str += "\n" + decl.as_string (); - - str += "\n Definition (block expr): "; - if (has_definition ()) - str += block_expr->as_string (); - else - str += "none"; - - return str; -} - -std::string -TraitFunctionDecl::as_string () const -{ - std::string str - = qualifiers.as_string () + "fn " + function_name.as_string (); - - // generic params - str += "\n Generic params: "; - if (generic_params.empty ()) - { - str += "none"; - } - else - { - for (const auto ¶m : generic_params) - { - // DEBUG: null pointer check - if (param == nullptr) - { - rust_debug ( - "something really terrible has gone wrong - null pointer " - "generic param in trait function decl."); - return "NULL_POINTER_MARK"; - } - - str += "\n " + param->as_string (); - } - } - - str += "\n Function params: "; - if (has_params ()) - { - for (const auto ¶m : function_params) - str += "\n " + param->as_string (); - } - else - { - str += "none"; - } - - str += "\n Return type: "; - if (has_return_type ()) - str += return_type->as_string (); - else - str += "none (void)"; - - str += "\n Where clause: "; - if (has_where_clause ()) - str += where_clause.as_string (); - else - str += "none"; - - return str; -} - -TraitItemMethod::TraitItemMethod (TraitItemMethod const &other) - : TraitItem (other.locus), outer_attrs (other.outer_attrs), decl (other.decl) -{ - node_id = other.node_id; - - // guard to prevent null dereference - if (other.block_expr != nullptr) - block_expr = other.block_expr->clone_block_expr (); -} - -TraitItemMethod & -TraitItemMethod::operator= (TraitItemMethod const &other) -{ - TraitItem::operator= (other); - outer_attrs = other.outer_attrs; - decl = other.decl; - locus = other.locus; - node_id = other.node_id; - - // guard to prevent null dereference - if (other.block_expr != nullptr) - block_expr = other.block_expr->clone_block_expr (); - else - block_expr = nullptr; - - return *this; -} - -std::string -TraitItemMethod::as_string () const -{ - std::string str = append_attributes (outer_attrs, OUTER); - - str += "\n" + decl.as_string (); - - str += "\n Definition (block expr): "; - if (has_definition ()) - str += block_expr->as_string (); - else - str += "none"; - - return str; -} - -std::string -TraitMethodDecl::as_string () const -{ - std::string str - = qualifiers.as_string () + "fn " + function_name.as_string (); - - // generic params - str += "\n Generic params: "; - if (generic_params.empty ()) - { - str += "none"; - } - else - { - for (const auto ¶m : generic_params) - { - // DEBUG: null pointer check - if (param == nullptr) - { - rust_debug ( - "something really terrible has gone wrong - null pointer " - "generic param in trait function decl."); - return "NULL_POINTER_MARK"; - } - - str += "\n " + param->as_string (); - } - } - - str += "\n Function params: "; - if (has_params ()) - { - for (const auto ¶m : function_params) - str += "\n " + param->as_string (); - } - else - { - str += "none"; - } - - str += "\n Return type: "; - if (has_return_type ()) - str += return_type->as_string (); - else - str += "none (void)"; - - str += "\n Where clause: "; - if (has_where_clause ()) - str += where_clause.as_string (); - else - str += "none"; - - return str; -} - std::string TraitItemConst::as_string () const { @@ -5017,18 +4820,6 @@ StaticItem::accept_vis (ASTVisitor &vis) vis.visit (*this); } -void -TraitItemFunc::accept_vis (ASTVisitor &vis) -{ - vis.visit (*this); -} - -void -TraitItemMethod::accept_vis (ASTVisitor &vis) -{ - vis.visit (*this); -} - void TraitItemConst::accept_vis (ASTVisitor &vis) { diff --git a/gcc/rust/ast/rust-item.h b/gcc/rust/ast/rust-item.h index 1defecc4452..0911719b716 100644 --- a/gcc/rust/ast/rust-item.h +++ b/gcc/rust/ast/rust-item.h @@ -2531,412 +2531,6 @@ protected: } }; -// Function declaration in traits -class TraitFunctionDecl -{ - // TODO: delete and replace with Function decl item? no as no body in this. - FunctionQualifiers qualifiers; - Identifier function_name; - - // bool has_generics; - // Generics generic_params; - std::vector> generic_params; // inlined - - // bool has_params; - // FunctionParams function_params; - std::vector> function_params; // inlined - - // bool has_return_type; - std::unique_ptr return_type; - - // bool has_where_clause; - WhereClause where_clause; - - // should this store location info? - -public: - // Returns whether function decl has generic parameters. - bool has_generics () const { return !generic_params.empty (); } - - // Returns whether function decl has regular parameters. - bool has_params () const { return !function_params.empty (); } - - // Returns whether function has return type (otherwise is void). - bool has_return_type () const { return return_type != nullptr; } - - // Returns whether function has a where clause. - bool has_where_clause () const { return !where_clause.is_empty (); } - - Identifier get_identifier () const { return function_name; } - - // Mega-constructor - TraitFunctionDecl (Identifier function_name, FunctionQualifiers qualifiers, - std::vector> generic_params, - std::vector> function_params, - std::unique_ptr return_type, - WhereClause where_clause) - : qualifiers (std::move (qualifiers)), - function_name (std::move (function_name)), - generic_params (std::move (generic_params)), - function_params (std::move (function_params)), - return_type (std::move (return_type)), - where_clause (std::move (where_clause)) - {} - - // Copy constructor with clone - TraitFunctionDecl (TraitFunctionDecl const &other) - : qualifiers (other.qualifiers), function_name (other.function_name), - where_clause (other.where_clause) - { - // guard to prevent nullptr dereference - if (other.return_type != nullptr) - return_type = other.return_type->clone_type (); - - generic_params.reserve (other.generic_params.size ()); - for (const auto &e : other.generic_params) - generic_params.push_back (e->clone_generic_param ()); - - function_params.reserve (other.function_params.size ()); - for (const auto &e : other.function_params) - function_params.push_back (e->clone_param ()); - } - - ~TraitFunctionDecl () = default; - - // Overloaded assignment operator with clone - TraitFunctionDecl &operator= (TraitFunctionDecl const &other) - { - function_name = other.function_name; - qualifiers = other.qualifiers; - where_clause = other.where_clause; - - // guard to prevent nullptr dereference - if (other.return_type != nullptr) - return_type = other.return_type->clone_type (); - else - return_type = nullptr; - - generic_params.reserve (other.generic_params.size ()); - for (const auto &e : other.generic_params) - generic_params.push_back (e->clone_generic_param ()); - - function_params.reserve (other.function_params.size ()); - for (const auto &e : other.function_params) - function_params.push_back (e->clone_param ()); - - return *this; - } - - // move constructors - TraitFunctionDecl (TraitFunctionDecl &&other) = default; - TraitFunctionDecl &operator= (TraitFunctionDecl &&other) = default; - - std::string as_string () const; - - // Invalid if function name is empty, so base stripping on that. - void mark_for_strip () { function_name = {""}; } - bool is_marked_for_strip () const { return function_name.empty (); } - - // TODO: this mutable getter seems really dodgy. Think up better way. - std::vector> &get_function_params () - { - return function_params; - } - const std::vector> &get_function_params () const - { - return function_params; - } - - std::vector> &get_generic_params () - { - return generic_params; - } - const std::vector> &get_generic_params () const - { - return generic_params; - } - - // TODO: is this better? Or is a "vis_block" better? - std::unique_ptr &get_return_type () { return return_type; } - - // TODO: is this better? Or is a "vis_block" better? - WhereClause &get_where_clause () { return where_clause; } - - FunctionQualifiers get_qualifiers () const { return qualifiers; } - FunctionQualifiers &get_qualifiers () { return qualifiers; } -}; - -// Actual trait item function declaration within traits -class TraitItemFunc : public TraitItem -{ - std::vector outer_attrs; - TraitFunctionDecl decl; - std::unique_ptr block_expr; - -public: - // Returns whether function has a definition or is just a declaration. - bool has_definition () const { return block_expr != nullptr; } - - TraitItemFunc (TraitFunctionDecl decl, std::unique_ptr block_expr, - std::vector outer_attrs, location_t locus) - : TraitItem (locus), outer_attrs (std::move (outer_attrs)), - decl (std::move (decl)), block_expr (std::move (block_expr)) - {} - - // Copy constructor with clone - TraitItemFunc (TraitItemFunc const &other); - - // Overloaded assignment operator to clone - - TraitItemFunc &operator= (TraitItemFunc const &other); - - // move constructors - TraitItemFunc (TraitItemFunc &&other) = default; - TraitItemFunc &operator= (TraitItemFunc &&other) = default; - - std::string as_string () const override; - - void accept_vis (ASTVisitor &vis) override; - - // Invalid if trait decl is empty, so base stripping on that. - void mark_for_strip () override { decl.mark_for_strip (); } - bool is_marked_for_strip () const override - { - return decl.is_marked_for_strip (); - } - - // TODO: this mutable getter seems really dodgy. Think up better way. - std::vector &get_outer_attrs () { return outer_attrs; } - const std::vector &get_outer_attrs () const { return outer_attrs; } - - // TODO: is this better? Or is a "vis_block" better? - std::unique_ptr &get_definition () { return block_expr; } - - // TODO: is this better? Or is a "vis_block" better? - TraitFunctionDecl &get_trait_function_decl () - { - // TODO: maybe only allow access if not marked for strip? - return decl; - } - -protected: - // Clone function implementation as (not pure) virtual method - TraitItemFunc *clone_associated_item_impl () const override - { - return new TraitItemFunc (*this); - } -}; - -// Method declaration within traits -class TraitMethodDecl -{ - // TODO: delete and replace with Function decl item? no as no body. - FunctionQualifiers qualifiers; - Identifier function_name; - - // bool has_generics; - // Generics generic_params; - std::vector> generic_params; // inlined - - // bool has_params; - // FunctionParams function_params; - std::vector> function_params; // inlined - - // bool has_return_type; - std::unique_ptr return_type; - - // bool has_where_clause; - WhereClause where_clause; - - // should this store location info? - -public: - // Returns whether method decl has generic parameters. - bool has_generics () const { return !generic_params.empty (); } - - // Returns whether method decl has regular parameters. - bool has_params () const { return !function_params.empty (); } - - // Returns whether method has return type (otherwise is void). - bool has_return_type () const { return return_type != nullptr; } - - // Returns whether method has a where clause. - bool has_where_clause () const { return !where_clause.is_empty (); } - - Identifier get_identifier () const { return function_name; } - - // Mega-constructor - TraitMethodDecl (Identifier function_name, FunctionQualifiers qualifiers, - std::vector> generic_params, - std::vector> function_params, - std::unique_ptr return_type, WhereClause where_clause) - : qualifiers (std::move (qualifiers)), - function_name (std::move (function_name)), - generic_params (std::move (generic_params)), - function_params (std::move (function_params)), - return_type (std::move (return_type)), - where_clause (std::move (where_clause)) - {} - - // Copy constructor with clone - TraitMethodDecl (TraitMethodDecl const &other) - : qualifiers (other.qualifiers), function_name (other.function_name), - where_clause (other.where_clause) - { - // guard to prevent nullptr dereference - if (other.return_type != nullptr) - return_type = other.return_type->clone_type (); - - generic_params.reserve (other.generic_params.size ()); - for (const auto &e : other.generic_params) - generic_params.push_back (e->clone_generic_param ()); - - function_params.reserve (other.function_params.size ()); - for (const auto &e : other.function_params) - function_params.push_back (e->clone_param ()); - } - - ~TraitMethodDecl () = default; - - // Overloaded assignment operator with clone - TraitMethodDecl &operator= (TraitMethodDecl const &other) - { - function_name = other.function_name; - qualifiers = other.qualifiers; - where_clause = other.where_clause; - - // guard to prevent nullptr dereference - if (other.return_type != nullptr) - return_type = other.return_type->clone_type (); - else - return_type = nullptr; - - generic_params.reserve (other.generic_params.size ()); - for (const auto &e : other.generic_params) - generic_params.push_back (e->clone_generic_param ()); - - function_params.reserve (other.function_params.size ()); - for (const auto &e : other.function_params) - function_params.push_back (e->clone_param ()); - - return *this; - } - - // move constructors - TraitMethodDecl (TraitMethodDecl &&other) = default; - TraitMethodDecl &operator= (TraitMethodDecl &&other) = default; - - std::string as_string () const; - - // Invalid if method name is empty, so base stripping on that. - void mark_for_strip () { function_name = {""}; } - bool is_marked_for_strip () const { return function_name.empty (); } - - // TODO: this mutable getter seems really dodgy. Think up better way. - std::vector> &get_function_params () - { - return function_params; - } - const std::vector> &get_function_params () const - { - return function_params; - } - - std::vector> &get_generic_params () - { - return generic_params; - } - const std::vector> &get_generic_params () const - { - return generic_params; - } - - // TODO: is this better? Or is a "vis_block" better? - std::unique_ptr &get_return_type () { return return_type; } - - // TODO: is this better? Or is a "vis_block" better? - WhereClause &get_where_clause () { return where_clause; } - - bool has_self () const - { - return !function_params.empty () && function_params[0]->is_self (); - } - - std::unique_ptr &get_self_param () - { - rust_assert (has_self ()); - return function_params[0]; - } - const std::unique_ptr &get_self_param () const - { - rust_assert (has_self ()); - return function_params[0]; - } - - FunctionQualifiers get_qualifiers () const { return qualifiers; } - - FunctionQualifiers &get_qualifiers () { return qualifiers; } -}; - -// Actual trait item method declaration within traits -class TraitItemMethod : public TraitItem -{ - std::vector outer_attrs; - TraitMethodDecl decl; - std::unique_ptr block_expr; - -public: - // Returns whether method has a definition or is just a declaration. - bool has_definition () const { return block_expr != nullptr; } - - TraitItemMethod (TraitMethodDecl decl, std::unique_ptr block_expr, - std::vector outer_attrs, location_t locus) - : TraitItem (locus), outer_attrs (std::move (outer_attrs)), - decl (std::move (decl)), block_expr (std::move (block_expr)) - {} - - // Copy constructor with clone - TraitItemMethod (TraitItemMethod const &other); - // Overloaded assignment operator to clone - TraitItemMethod &operator= (TraitItemMethod const &other); - - // move constructors - TraitItemMethod (TraitItemMethod &&other) = default; - TraitItemMethod &operator= (TraitItemMethod &&other) = default; - - std::string as_string () const override; - - void accept_vis (ASTVisitor &vis) override; - - // Invalid if trait decl is empty, so base stripping on that. - void mark_for_strip () override { decl.mark_for_strip (); } - bool is_marked_for_strip () const override - { - return decl.is_marked_for_strip (); - } - - // TODO: this mutable getter seems really dodgy. Think up better way. - std::vector &get_outer_attrs () { return outer_attrs; } - const std::vector &get_outer_attrs () const { return outer_attrs; } - - // TODO: is this better? Or is a "vis_block" better? - TraitMethodDecl &get_trait_method_decl () - { - // TODO: maybe only allow access if not marked for strip? - return decl; - } - - // TODO: is this better? Or is a "vis_block" better? - std::unique_ptr &get_definition () { return block_expr; } - -protected: - // Clone function implementation as (not pure) virtual method - TraitItemMethod *clone_associated_item_impl () const override - { - return new TraitItemMethod (*this); - } -}; - // Constant item within traits class TraitItemConst : public TraitItem { diff --git a/gcc/rust/checks/errors/rust-ast-validation.cc b/gcc/rust/checks/errors/rust-ast-validation.cc index d1c8273a0b3..d57b7cb70fe 100644 --- a/gcc/rust/checks/errors/rust-ast-validation.cc +++ b/gcc/rust/checks/errors/rust-ast-validation.cc @@ -140,23 +140,6 @@ ASTValidation::visit (AST::Function &function) AST::ContextualASTVisitor::visit (function); } -void -ASTValidation::visit (AST::TraitFunctionDecl &decl) -{ - const auto &qualifiers = decl.get_qualifiers (); - - if (context.back () == Context::TRAIT) - { - // may change soon - if (qualifiers.is_async ()) - rust_error_at (decl.get_identifier ().get_locus (), ErrorCode::E0706, - "functions in traits cannot be declared %"); - if (qualifiers.is_const ()) - rust_error_at (decl.get_identifier ().get_locus (), ErrorCode::E0379, - "functions in traits cannot be declared %"); - } -} - void ASTValidation::visit (AST::Trait &trait) { diff --git a/gcc/rust/checks/errors/rust-ast-validation.h b/gcc/rust/checks/errors/rust-ast-validation.h index 963357f86cd..01d923ceff3 100644 --- a/gcc/rust/checks/errors/rust-ast-validation.h +++ b/gcc/rust/checks/errors/rust-ast-validation.h @@ -42,7 +42,6 @@ public: virtual void visit (AST::Union &item); virtual void visit (AST::Function &function); virtual void visit (AST::Trait &trait); - virtual void visit (AST::TraitFunctionDecl &decl); }; } // namespace Rust diff --git a/gcc/rust/checks/errors/rust-feature-gate.h b/gcc/rust/checks/errors/rust-feature-gate.h index 8d1a26a1361..ef7449aa581 100644 --- a/gcc/rust/checks/errors/rust-feature-gate.h +++ b/gcc/rust/checks/errors/rust-feature-gate.h @@ -125,8 +125,6 @@ public: void visit (AST::Union &union_item) override {} void visit (AST::ConstantItem &const_item) override {} void visit (AST::StaticItem &static_item) override {} - void visit (AST::TraitItemFunc &item) override {} - void visit (AST::TraitItemMethod &item) override {} void visit (AST::TraitItemConst &item) override {} void visit (AST::TraitItemType &item) override {} void visit (AST::Trait &trait) override {} diff --git a/gcc/rust/expand/rust-cfg-strip.cc b/gcc/rust/expand/rust-cfg-strip.cc index 22f3127f587..2b51a890247 100644 --- a/gcc/rust/expand/rust-cfg-strip.cc +++ b/gcc/rust/expand/rust-cfg-strip.cc @@ -375,56 +375,6 @@ CfgStrip::maybe_strip_where_clause (AST::WhereClause &where_clause) item->accept_vis (*this); } -void -CfgStrip::maybe_strip_trait_function_decl (AST::TraitFunctionDecl &decl) -{ - // just expand sub-stuff - can't actually strip generic params themselves - for (auto ¶m : decl.get_generic_params ()) - param->accept_vis (*this); - - /* strip function parameters if required - this is specifically - * allowed by spec */ - maybe_strip_function_params (decl.get_function_params ()); - - if (decl.has_return_type ()) - { - auto &return_type = decl.get_return_type (); - return_type->accept_vis (*this); - - if (return_type->is_marked_for_strip ()) - rust_error_at (return_type->get_locus (), - "cannot strip type in this position"); - } - - if (decl.has_where_clause ()) - maybe_strip_where_clause (decl.get_where_clause ()); -} - -void -CfgStrip::maybe_strip_trait_method_decl (AST::TraitMethodDecl &decl) -{ - // just expand sub-stuff - can't actually strip generic params themselves - for (auto ¶m : decl.get_generic_params ()) - param->accept_vis (*this); - - /* strip function parameters if required - this is specifically - * allowed by spec */ - maybe_strip_function_params (decl.get_function_params ()); - - if (decl.has_return_type ()) - { - auto &return_type = decl.get_return_type (); - return_type->accept_vis (*this); - - if (return_type->is_marked_for_strip ()) - rust_error_at (return_type->get_locus (), - "cannot strip type in this position"); - } - - if (decl.has_where_clause ()) - maybe_strip_where_clause (decl.get_where_clause ()); -} - void CfgStrip::visit (AST::IdentifierExpr &ident_expr) { @@ -2080,61 +2030,6 @@ CfgStrip::visit (AST::StaticItem &static_item) "cannot strip expression in this position - outer " "attributes not allowed"); } -void -CfgStrip::visit (AST::TraitItemFunc &item) -{ - // initial test based on outer attrs - expand_cfg_attrs (item.get_outer_attrs ()); - if (fails_cfg_with_expand (item.get_outer_attrs ())) - { - item.mark_for_strip (); - return; - } - - maybe_strip_trait_function_decl (item.get_trait_function_decl ()); - - AST::DefaultASTVisitor::visit (item); - - if (item.has_definition ()) - { - /* strip any internal sub-expressions - expression itself isn't - * allowed to have external attributes in this position so can't be - * stripped. */ - auto &block = item.get_definition (); - if (block->is_marked_for_strip ()) - rust_error_at (block->get_locus (), - "cannot strip block expression in this " - "position - outer attributes not allowed"); - } -} - -void -CfgStrip::visit (AST::TraitItemMethod &item) -{ - // initial test based on outer attrs - expand_cfg_attrs (item.get_outer_attrs ()); - if (fails_cfg_with_expand (item.get_outer_attrs ())) - { - item.mark_for_strip (); - return; - } - - maybe_strip_trait_method_decl (item.get_trait_method_decl ()); - - AST::DefaultASTVisitor::visit (item); - - if (item.has_definition ()) - { - /* strip any internal sub-expressions - expression itself isn't - * allowed to have external attributes in this position so can't be - * stripped. */ - auto &block = item.get_definition (); - if (block->is_marked_for_strip ()) - rust_error_at (block->get_locus (), - "cannot strip block expression in this " - "position - outer attributes not allowed"); - } -} void CfgStrip::visit (AST::TraitItemConst &item) diff --git a/gcc/rust/expand/rust-cfg-strip.h b/gcc/rust/expand/rust-cfg-strip.h index 6b968b31d05..a3931823ab1 100644 --- a/gcc/rust/expand/rust-cfg-strip.h +++ b/gcc/rust/expand/rust-cfg-strip.h @@ -42,8 +42,6 @@ public: void maybe_strip_closure_params (std::vector ¶ms); void maybe_strip_self_param (AST::SelfParam &self_param); void maybe_strip_where_clause (AST::WhereClause &where_clause); - void maybe_strip_trait_function_decl (AST::TraitFunctionDecl &decl); - void maybe_strip_trait_method_decl (AST::TraitMethodDecl &decl); /** * maybe_strip a set of values, erasing them if they are marked for strip. @@ -145,8 +143,6 @@ public: void visit (AST::Union &union_item) override; void visit (AST::ConstantItem &const_item) override; void visit (AST::StaticItem &static_item) override; - void visit (AST::TraitItemFunc &item) override; - void visit (AST::TraitItemMethod &item) override; void visit (AST::TraitItemConst &item) override; void visit (AST::TraitItemType &item) override; void visit (AST::Trait &trait) override; diff --git a/gcc/rust/expand/rust-derive.h b/gcc/rust/expand/rust-derive.h index d5c8b44442d..1531d81f57c 100644 --- a/gcc/rust/expand/rust-derive.h +++ b/gcc/rust/expand/rust-derive.h @@ -159,8 +159,6 @@ private: virtual void visit (EnumItemDiscriminant &item) override final{}; virtual void visit (ConstantItem &const_item) override final{}; virtual void visit (StaticItem &static_item) override final{}; - virtual void visit (TraitItemFunc &item) override final{}; - virtual void visit (TraitItemMethod &item) override final{}; virtual void visit (TraitItemConst &item) override final{}; virtual void visit (TraitItemType &item) override final{}; virtual void visit (Trait &trait) override final{}; diff --git a/gcc/rust/expand/rust-expand-visitor.cc b/gcc/rust/expand/rust-expand-visitor.cc index bc0149ca99d..e42715b865f 100644 --- a/gcc/rust/expand/rust-expand-visitor.cc +++ b/gcc/rust/expand/rust-expand-visitor.cc @@ -437,42 +437,6 @@ ExpandVisitor::expand_where_clause (AST::WhereClause &where_clause) visit (item); } -void -ExpandVisitor::expand_trait_function_decl (AST::TraitFunctionDecl &decl) -{ - // just expand sub-stuff - can't actually strip generic params themselves - for (auto ¶m : decl.get_generic_params ()) - visit (param); - - /* strip function parameters if required - this is specifically - * allowed by spec */ - expand_function_params (decl.get_function_params ()); - - if (decl.has_return_type ()) - maybe_expand_type (decl.get_return_type ()); - - if (decl.has_where_clause ()) - expand_where_clause (decl.get_where_clause ()); -} - -void -ExpandVisitor::expand_trait_method_decl (AST::TraitMethodDecl &decl) -{ - for (auto ¶m : decl.get_generic_params ()) - visit (param); - - /* strip function parameters if required - this is specifically - * allowed by spec */ - expand_function_params (decl.get_function_params ()); - - if (decl.has_return_type ()) - - maybe_expand_type (decl.get_return_type ()); - - if (decl.has_where_clause ()) - expand_where_clause (decl.get_where_clause ()); -} - void ExpandVisitor::visit (AST::Crate &crate) { @@ -862,24 +826,6 @@ ExpandVisitor::visit (AST::StaticItem &static_item) maybe_expand_expr (static_item.get_expr ()); } -void -ExpandVisitor::visit (AST::TraitItemFunc &item) -{ - expand_trait_function_decl (item.get_trait_function_decl ()); - - if (item.has_definition ()) - visit (item.get_definition ()); -} - -void -ExpandVisitor::visit (AST::TraitItemMethod &item) -{ - expand_trait_method_decl (item.get_trait_method_decl ()); - - if (item.has_definition ()) - visit (item.get_definition ()); -} - void ExpandVisitor::visit (AST::TraitItemConst &const_item) { diff --git a/gcc/rust/expand/rust-expand-visitor.h b/gcc/rust/expand/rust-expand-visitor.h index bae9b0f8fa5..8f61db659c3 100644 --- a/gcc/rust/expand/rust-expand-visitor.h +++ b/gcc/rust/expand/rust-expand-visitor.h @@ -86,8 +86,6 @@ public: // FIXME: Add documentation void expand_closure_params (std::vector ¶ms); void expand_where_clause (AST::WhereClause &where_clause); - void expand_trait_function_decl (AST::TraitFunctionDecl &decl); - void expand_trait_method_decl (AST::TraitMethodDecl &decl); /** * Expand a set of values, erasing them if they are marked for strip, and @@ -248,8 +246,6 @@ public: void visit (AST::Union &union_item) override; void visit (AST::ConstantItem &const_item) override; void visit (AST::StaticItem &static_item) override; - void visit (AST::TraitItemFunc &item) override; - void visit (AST::TraitItemMethod &item) override; void visit (AST::TraitItemConst &item) override; void visit (AST::Trait &trait) override; void visit (AST::InherentImpl &impl) override; diff --git a/gcc/rust/hir/rust-ast-lower-base.cc b/gcc/rust/hir/rust-ast-lower-base.cc index 19f20885209..3ff0f52e0c6 100644 --- a/gcc/rust/hir/rust-ast-lower-base.cc +++ b/gcc/rust/hir/rust-ast-lower-base.cc @@ -321,12 +321,6 @@ void ASTLoweringBase::visit (AST::StaticItem &) {} void -ASTLoweringBase::visit (AST::TraitItemFunc &) -{} -void -ASTLoweringBase::visit (AST::TraitItemMethod &) -{} -void ASTLoweringBase::visit (AST::TraitItemConst &) {} void diff --git a/gcc/rust/hir/rust-ast-lower-base.h b/gcc/rust/hir/rust-ast-lower-base.h index 8da11750d18..d7b94ac8a70 100644 --- a/gcc/rust/hir/rust-ast-lower-base.h +++ b/gcc/rust/hir/rust-ast-lower-base.h @@ -177,8 +177,6 @@ public: virtual void visit (AST::Union &union_item); virtual void visit (AST::ConstantItem &const_item); virtual void visit (AST::StaticItem &static_item); - virtual void visit (AST::TraitItemFunc &item); - virtual void visit (AST::TraitItemMethod &item); virtual void visit (AST::TraitItemConst &item); virtual void visit (AST::TraitItemType &item); virtual void visit (AST::Trait &trait); diff --git a/gcc/rust/hir/rust-ast-lower-implitem.cc b/gcc/rust/hir/rust-ast-lower-implitem.cc index 77230e7a8bf..399c3fb8179 100644 --- a/gcc/rust/hir/rust-ast-lower-implitem.cc +++ b/gcc/rust/hir/rust-ast-lower-implitem.cc @@ -313,165 +313,6 @@ ASTLowerTraitItem::visit (AST::Function &func) } } -void -ASTLowerTraitItem::visit (AST::TraitItemFunc &func) -{ - AST::TraitFunctionDecl &ref = func.get_trait_function_decl (); - std::vector > where_clause_items; - HIR::WhereClause where_clause (std::move (where_clause_items)); - HIR::FunctionQualifiers qualifiers - = lower_qualifiers (func.get_trait_function_decl ().get_qualifiers ()); - - std::vector > generic_params; - if (ref.has_generics ()) - { - generic_params = lower_generic_params (ref.get_generic_params ()); - } - - std::unique_ptr return_type - = ref.has_return_type () ? std::unique_ptr ( - ASTLoweringType::translate (ref.get_return_type ().get ())) - : nullptr; - - std::vector function_params; - for (auto &p : ref.get_function_params ()) - { - if (p->is_variadic () || p->is_self ()) - continue; - - auto param = static_cast (p.get ()); - - auto translated_pattern = std::unique_ptr ( - ASTLoweringPattern::translate (param->get_pattern ().get ())); - auto translated_type = std::unique_ptr ( - ASTLoweringType::translate (param->get_type ().get ())); - - auto crate_num = mappings->get_current_crate (); - Analysis::NodeMapping mapping (crate_num, param->get_node_id (), - mappings->get_next_hir_id (crate_num), - UNKNOWN_LOCAL_DEFID); - - auto hir_param - = HIR::FunctionParam (mapping, std::move (translated_pattern), - std::move (translated_type), param->get_locus ()); - function_params.push_back (std::move (hir_param)); - } - - HIR::TraitFunctionDecl decl (ref.get_identifier (), std::move (qualifiers), - std::move (generic_params), - HIR::SelfParam::error (), - std::move (function_params), - std::move (return_type), - std::move (where_clause)); - bool terminated = false; - std::unique_ptr block_expr - = func.has_definition () ? std::unique_ptr ( - ASTLoweringBlock::translate (func.get_definition ().get (), - &terminated)) - : nullptr; - - auto crate_num = mappings->get_current_crate (); - Analysis::NodeMapping mapping (crate_num, func.get_node_id (), - mappings->get_next_hir_id (crate_num), - mappings->get_next_localdef_id (crate_num)); - - HIR::TraitItemFunc *trait_item - = new HIR::TraitItemFunc (mapping, std::move (decl), std::move (block_expr), - func.get_outer_attrs (), func.get_locus ()); - translated = trait_item; - - // add the mappings for the function params at the end - for (auto ¶m : trait_item->get_decl ().get_function_params ()) - { - mappings->insert_hir_param (¶m); - mappings->insert_location (mapping.get_hirid (), param.get_locus ()); - } -} - -void -ASTLowerTraitItem::visit (AST::TraitItemMethod &method) -{ - AST::TraitMethodDecl &ref = method.get_trait_method_decl (); - - std::vector > where_clause_items; - HIR::WhereClause where_clause (std::move (where_clause_items)); - HIR::FunctionQualifiers qualifiers - = lower_qualifiers (method.get_trait_method_decl ().get_qualifiers ()); - - std::vector > generic_params; - if (ref.has_generics ()) - { - generic_params = lower_generic_params (ref.get_generic_params ()); - } - - std::unique_ptr return_type - = ref.has_return_type () ? std::unique_ptr ( - ASTLoweringType::translate (ref.get_return_type ().get ())) - : nullptr; - - HIR::SelfParam self_param = lower_self (ref.get_self_param ()); - - std::vector function_params; - for (auto &p : ref.get_function_params ()) - { - if (p->is_variadic () || p->is_self ()) - continue; - - auto param = static_cast (p.get ()); - - auto translated_pattern = std::unique_ptr ( - ASTLoweringPattern::translate (param->get_pattern ().get ())); - auto translated_type = std::unique_ptr ( - ASTLoweringType::translate (param->get_type ().get ())); - - auto crate_num = mappings->get_current_crate (); - Analysis::NodeMapping mapping (crate_num, param->get_node_id (), - mappings->get_next_hir_id (crate_num), - UNKNOWN_LOCAL_DEFID); - - auto hir_param - = HIR::FunctionParam (mapping, std::move (translated_pattern), - std::move (translated_type), param->get_locus ()); - function_params.push_back (hir_param); - } - - HIR::TraitFunctionDecl decl (ref.get_identifier (), std::move (qualifiers), - std::move (generic_params), - std::move (self_param), - std::move (function_params), - std::move (return_type), - std::move (where_clause)); - - bool terminated = false; - std::unique_ptr block_expr - = method.has_definition () ? std::unique_ptr ( - ASTLoweringBlock::translate (method.get_definition ().get (), - &terminated)) - : nullptr; - - auto crate_num = mappings->get_current_crate (); - Analysis::NodeMapping mapping (crate_num, method.get_node_id (), - mappings->get_next_hir_id (crate_num), - mappings->get_next_localdef_id (crate_num)); - - HIR::TraitItemFunc *trait_item - = new HIR::TraitItemFunc (mapping, std::move (decl), std::move (block_expr), - method.get_outer_attrs (), method.get_locus ()); - translated = trait_item; - - // insert mappings for self - mappings->insert_hir_self_param (&self_param); - mappings->insert_location (self_param.get_mappings ().get_hirid (), - self_param.get_locus ()); - - // add the mappings for the function params at the end - for (auto ¶m : trait_item->get_decl ().get_function_params ()) - { - mappings->insert_hir_param (¶m); - mappings->insert_location (mapping.get_hirid (), param.get_locus ()); - } -} - void ASTLowerTraitItem::visit (AST::TraitItemConst &constant) { diff --git a/gcc/rust/hir/rust-ast-lower-implitem.h b/gcc/rust/hir/rust-ast-lower-implitem.h index b9d12cc4a56..bbde9f6878c 100644 --- a/gcc/rust/hir/rust-ast-lower-implitem.h +++ b/gcc/rust/hir/rust-ast-lower-implitem.h @@ -49,8 +49,6 @@ class ASTLowerTraitItem : public ASTLoweringBase public: static HIR::TraitItem *translate (AST::AssociatedItem *item); void visit (AST::Function &func) override; - void visit (AST::TraitItemFunc &func) override; - void visit (AST::TraitItemMethod &method) override; void visit (AST::TraitItemConst &constant) override; void visit (AST::TraitItemType &type) override; diff --git a/gcc/rust/resolve/rust-ast-resolve-base.cc b/gcc/rust/resolve/rust-ast-resolve-base.cc index 1283d77d22b..c88bd58860a 100644 --- a/gcc/rust/resolve/rust-ast-resolve-base.cc +++ b/gcc/rust/resolve/rust-ast-resolve-base.cc @@ -402,14 +402,6 @@ void ResolverBase::visit (AST::StaticItem &) {} -void -ResolverBase::visit (AST::TraitItemFunc &) -{} - -void -ResolverBase::visit (AST::TraitItemMethod &) -{} - void ResolverBase::visit (AST::TraitItemConst &) {} diff --git a/gcc/rust/resolve/rust-ast-resolve-base.h b/gcc/rust/resolve/rust-ast-resolve-base.h index 78830498771..9bc64331f5a 100644 --- a/gcc/rust/resolve/rust-ast-resolve-base.h +++ b/gcc/rust/resolve/rust-ast-resolve-base.h @@ -126,8 +126,6 @@ public: void visit (AST::Union &); void visit (AST::ConstantItem &); void visit (AST::StaticItem &); - void visit (AST::TraitItemFunc &); - void visit (AST::TraitItemMethod &); void visit (AST::TraitItemConst &); void visit (AST::TraitItemType &); void visit (AST::Trait &); diff --git a/gcc/rust/resolve/rust-ast-resolve-implitem.h b/gcc/rust/resolve/rust-ast-resolve-implitem.h index d9c9bcb28c9..fabc25817f5 100644 --- a/gcc/rust/resolve/rust-ast-resolve-implitem.h +++ b/gcc/rust/resolve/rust-ast-resolve-implitem.h @@ -130,46 +130,6 @@ public: mappings->insert_canonical_path (function.get_node_id (), cpath); } - void visit (AST::TraitItemFunc &function) override - { - auto decl = CanonicalPath::new_seg ( - function.get_node_id (), - function.get_trait_function_decl ().get_identifier ().as_string ()); - auto path = prefix.append (decl); - auto cpath = canonical_prefix.append (decl); - - resolver->get_name_scope ().insert ( - path, function.get_node_id (), function.get_locus (), false, - Rib::ItemType::Function, - [&] (const CanonicalPath &, NodeId, location_t locus) -> void { - rich_location r (line_table, function.get_locus ()); - r.add_range (locus); - rust_error_at (r, "redefined multiple times"); - }); - - mappings->insert_canonical_path (function.get_node_id (), cpath); - } - - void visit (AST::TraitItemMethod &method) override - { - auto decl = CanonicalPath::new_seg ( - method.get_node_id (), - method.get_trait_method_decl ().get_identifier ().as_string ()); - auto path = prefix.append (decl); - auto cpath = canonical_prefix.append (decl); - - resolver->get_name_scope ().insert ( - path, method.get_node_id (), method.get_locus (), false, - Rib::ItemType::Function, - [&] (const CanonicalPath &, NodeId, location_t locus) -> void { - rich_location r (line_table, method.get_locus ()); - r.add_range (locus); - rust_error_at (r, "redefined multiple times"); - }); - - mappings->insert_canonical_path (method.get_node_id (), cpath); - } - void visit (AST::TraitItemConst &constant) override { auto decl diff --git a/gcc/rust/resolve/rust-ast-resolve-item.cc b/gcc/rust/resolve/rust-ast-resolve-item.cc index 6037fe59f5b..e69b945407c 100644 --- a/gcc/rust/resolve/rust-ast-resolve-item.cc +++ b/gcc/rust/resolve/rust-ast-resolve-item.cc @@ -146,161 +146,6 @@ ResolveTraitItems::visit (AST::TraitItemType &type) ResolveTypeBound::go (bound.get ()); } -void -ResolveTraitItems::visit (AST::TraitItemFunc &func) -{ - auto decl = CanonicalPath::new_seg ( - func.get_node_id (), - func.get_trait_function_decl ().get_identifier ().as_string ()); - auto path = prefix.append (decl); - auto cpath = canonical_prefix.append (decl); - mappings->insert_canonical_path (func.get_node_id (), cpath); - - NodeId scope_node_id = func.get_node_id (); - resolver->get_name_scope ().push (scope_node_id); - resolver->get_type_scope ().push (scope_node_id); - resolver->get_label_scope ().push (scope_node_id); - resolver->push_new_name_rib (resolver->get_name_scope ().peek ()); - resolver->push_new_type_rib (resolver->get_type_scope ().peek ()); - resolver->push_new_label_rib (resolver->get_type_scope ().peek ()); - - AST::TraitFunctionDecl &function = func.get_trait_function_decl (); - if (function.has_generics ()) - for (auto &generic : function.get_generic_params ()) - ResolveGenericParam::go (generic.get (), prefix, canonical_prefix); - - if (function.has_return_type ()) - ResolveType::go (function.get_return_type ().get ()); - - std::vector bindings - = {PatternBinding (PatternBoundCtx::Product, std::set ())}; - - // we make a new scope so the names of parameters are resolved and shadowed - // correctly - for (auto &p : function.get_function_params ()) - { - if (p->is_variadic ()) - { - auto param = static_cast (p.get ()); - PatternDeclaration::go (param->get_pattern ().get (), - Rib::ItemType::Param, bindings); - } - else if (p->is_self ()) - { - auto param = static_cast (p.get ()); - ResolveType::go (param->get_type ().get ()); - } - else - { - auto param = static_cast (p.get ()); - ResolveType::go (param->get_type ().get ()); - PatternDeclaration::go (param->get_pattern ().get (), - Rib::ItemType::Param, bindings); - } - } - - if (function.has_where_clause ()) - ResolveWhereClause::Resolve (function.get_where_clause ()); - - // trait items have an optional body - if (func.has_definition ()) - ResolveExpr::go (func.get_definition ().get (), path, cpath); - - resolver->get_name_scope ().pop (); - resolver->get_type_scope ().pop (); - resolver->get_label_scope ().pop (); -} - -void -ResolveTraitItems::visit (AST::TraitItemMethod &func) -{ - auto decl = CanonicalPath::new_seg ( - func.get_node_id (), - func.get_trait_method_decl ().get_identifier ().as_string ()); - auto path = prefix.append (decl); - auto cpath = canonical_prefix.append (decl); - mappings->insert_canonical_path (func.get_node_id (), cpath); - - NodeId scope_node_id = func.get_node_id (); - resolver->get_name_scope ().push (scope_node_id); - resolver->get_type_scope ().push (scope_node_id); - resolver->get_label_scope ().push (scope_node_id); - resolver->push_new_name_rib (resolver->get_name_scope ().peek ()); - resolver->push_new_type_rib (resolver->get_type_scope ().peek ()); - resolver->push_new_label_rib (resolver->get_type_scope ().peek ()); - - AST::TraitMethodDecl &function = func.get_trait_method_decl (); - if (function.has_generics ()) - for (auto &generic : function.get_generic_params ()) - ResolveGenericParam::go (generic.get (), prefix, canonical_prefix); - - if (function.has_return_type ()) - ResolveType::go (function.get_return_type ().get ()); - - // self turns into (self: Self) as a function param - std::vector bindings - = {PatternBinding (PatternBoundCtx::Product, std::set ())}; - - // we make a new scope so the names of parameters are resolved and shadowed - // correctly - for (auto &p : function.get_function_params ()) - { - if (p->is_variadic ()) - { - auto param = static_cast (p.get ()); - PatternDeclaration::go (param->get_pattern ().get (), - Rib::ItemType::Param, bindings); - } - else if (p->is_self ()) - { - auto param = static_cast (p.get ()); - // FIXME: which location should be used for Rust::Identifier `self`? - AST::IdentifierPattern self_pattern ( - param->get_node_id (), {"self"}, param->get_locus (), - param->get_has_ref (), param->get_is_mut (), - std::unique_ptr (nullptr)); - - PatternDeclaration::go (&self_pattern, Rib::ItemType::Param); - - if (param->has_type ()) - { - // This shouldn't happen the parser should already error for this - rust_assert (!param->get_has_ref ()); - ResolveType::go (param->get_type ().get ()); - } - else - { - // here we implicitly make self have a type path of Self - std::vector> segments; - segments.push_back (std::unique_ptr ( - new AST::TypePathSegment ("Self", false, param->get_locus ()))); - - AST::TypePath self_type_path (std::move (segments), - param->get_locus ()); - ResolveType::go (&self_type_path); - } - } - else - { - auto param = static_cast (p.get ()); - ResolveType::go (param->get_type ().get ()); - PatternDeclaration::go (param->get_pattern ().get (), - Rib::ItemType::Param, bindings); - } - } - - if (function.has_where_clause ()) - ResolveWhereClause::Resolve (function.get_where_clause ()); - - // trait items have an optional body - if (func.has_definition ()) - ResolveExpr::go (func.get_definition ().get (), path, cpath); - - resolver->get_name_scope ().pop (); - resolver->get_type_scope ().pop (); - resolver->get_label_scope ().pop (); -} - void ResolveTraitItems::visit (AST::TraitItemConst &constant) { diff --git a/gcc/rust/resolve/rust-ast-resolve-item.h b/gcc/rust/resolve/rust-ast-resolve-item.h index 33a78e21957..0c7b7527c44 100644 --- a/gcc/rust/resolve/rust-ast-resolve-item.h +++ b/gcc/rust/resolve/rust-ast-resolve-item.h @@ -37,8 +37,6 @@ public: void visit (AST::Function &type) override; void visit (AST::TraitItemType &type) override; - void visit (AST::TraitItemFunc &func) override; - void visit (AST::TraitItemMethod &func) override; void visit (AST::TraitItemConst &constant) override; private: diff --git a/gcc/rust/resolve/rust-default-resolver.cc b/gcc/rust/resolve/rust-default-resolver.cc index ab4d5e8b70d..b1163535657 100644 --- a/gcc/rust/resolve/rust-default-resolver.cc +++ b/gcc/rust/resolve/rust-default-resolver.cc @@ -402,14 +402,6 @@ DefaultResolver::visit (AST::StaticItem &item) ctx.scoped (Rib::Kind::ConstantItem, item.get_node_id (), expr_vis); } -void -DefaultResolver::visit (AST::TraitItemFunc &) -{} - -void -DefaultResolver::visit (AST::TraitItemMethod &) -{} - void DefaultResolver::visit (AST::TraitItemConst &) {} diff --git a/gcc/rust/resolve/rust-default-resolver.h b/gcc/rust/resolve/rust-default-resolver.h index 20dbff8e110..d508ff3ac79 100644 --- a/gcc/rust/resolve/rust-default-resolver.h +++ b/gcc/rust/resolve/rust-default-resolver.h @@ -114,8 +114,6 @@ public: void visit (AST::EnumItemDiscriminant &); void visit (AST::ConstantItem &); void visit (AST::StaticItem &); - void visit (AST::TraitItemFunc &); - void visit (AST::TraitItemMethod &); void visit (AST::TraitItemConst &); void visit (AST::TraitItemType &); void visit (AST::ExternalTypeItem &); diff --git a/gcc/rust/resolve/rust-toplevel-name-resolver-2.0.cc b/gcc/rust/resolve/rust-toplevel-name-resolver-2.0.cc index 46113a8a46b..af7766d7b96 100644 --- a/gcc/rust/resolve/rust-toplevel-name-resolver-2.0.cc +++ b/gcc/rust/resolve/rust-toplevel-name-resolver-2.0.cc @@ -228,16 +228,6 @@ TopLevel::visit (AST::StaticItem &static_item) ctx.scoped (Rib::Kind::Item, static_item.get_node_id (), sub_vis); } -void -TopLevel::visit (AST::TraitItemFunc &item) -{ - auto def_vis - = [this, &item] () { item.get_definition ()->accept_vis (*this); }; - - if (item.has_definition ()) - ctx.scoped (Rib::Kind::Function, item.get_node_id (), def_vis); -} - void TopLevel::visit (AST::StructStruct &struct_item) { diff --git a/gcc/rust/resolve/rust-toplevel-name-resolver-2.0.h b/gcc/rust/resolve/rust-toplevel-name-resolver-2.0.h index 996899b0848..f1943ee1398 100644 --- a/gcc/rust/resolve/rust-toplevel-name-resolver-2.0.h +++ b/gcc/rust/resolve/rust-toplevel-name-resolver-2.0.h @@ -65,7 +65,6 @@ private: void visit (AST::Function &function) override; void visit (AST::BlockExpr &expr) override; void visit (AST::StaticItem &static_item) override; - void visit (AST::TraitItemFunc &item) override; void visit (AST::StructStruct &struct_item) override; void visit (AST::TupleStruct &tuple_struct) override; void visit (AST::EnumItem &variant) override; diff --git a/gcc/rust/util/rust-attributes.cc b/gcc/rust/util/rust-attributes.cc index 3c296b565f5..715e9a0b361 100644 --- a/gcc/rust/util/rust-attributes.cc +++ b/gcc/rust/util/rust-attributes.cc @@ -730,14 +730,6 @@ AttributeChecker::visit (AST::StaticItem &item) check_proc_macro_non_function (item.get_outer_attrs ()); } -void -AttributeChecker::visit (AST::TraitItemFunc &) -{} - -void -AttributeChecker::visit (AST::TraitItemMethod &) -{} - void AttributeChecker::visit (AST::TraitItemConst &) {} diff --git a/gcc/rust/util/rust-attributes.h b/gcc/rust/util/rust-attributes.h index eecc4c0050b..d78ab0b3319 100644 --- a/gcc/rust/util/rust-attributes.h +++ b/gcc/rust/util/rust-attributes.h @@ -192,8 +192,6 @@ private: void visit (AST::Union &union_item) override; void visit (AST::ConstantItem &const_item) override; void visit (AST::StaticItem &static_item) override; - void visit (AST::TraitItemFunc &item) override; - void visit (AST::TraitItemMethod &item) override; void visit (AST::TraitItemConst &item) override; void visit (AST::TraitItemType &item) override; void visit (AST::Trait &trait) override;