From patchwork Tue Jan 30 12:07:24 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arthur Cohen X-Patchwork-Id: 1892877 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=U0olPwQJ; 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 4TPPm83zgHz23dQ for ; Tue, 30 Jan 2024 23:36:08 +1100 (AEDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 76E443838A21 for ; Tue, 30 Jan 2024 12:36:06 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org 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 7D1563857BAD for ; Tue, 30 Jan 2024 12:11:42 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 7D1563857BAD 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 7D1563857BAD 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=1706616738; cv=none; b=Vp73pGK38DqTioRT1Pf9KKX6asrdtiy2Zz8IQvN6BDVRTN+xOBWwmEgu6ruhHXyd834Fm2LBUzz0SqK0CVyeahdws6TtwLRKYYj+vLplWY9L2GF3GQmJko3q9GOI/oIXiABYLsWdeQTjdaIYYK8TIa8uT2OufJ/uouZ3xO25JDY= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1706616738; c=relaxed/simple; bh=ZwjhKhFyjoPMjh1VWYkCjAaq2d4KGySSxDhtNCW08PI=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=gJu6L16RWsKxDK0oarx7lb99xrWcDMHejai447X7mbgtgOqOqHOFKA8kU2+qG6qBp3uOIPNFBpYhiDym6TZwbdnYM9k7Uj3bZihvpfPE0FAdhNCvUveTx4CBNrk+OPF6Kl1g8nuU42UzB7fQZmAQYXTPtWhScof34WVWq7BDego= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-wr1-x432.google.com with SMTP id ffacd0b85a97d-33aeb088324so1539605f8f.2 for ; Tue, 30 Jan 2024 04:11:42 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=embecosm.com; s=google; t=1706616700; x=1707221500; 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=0C+NFwYpGtvMPOYsz8QVeEIKqOTKiJf3NeT0BjTLhKE=; b=U0olPwQJ42lcILLaj6p4JCjDrIwinYtB4mnlzCt9SsXT6qjBGCf5oZdAV18YpXykpK YeQBn7yhRUzE4lXGBa/kB336vkW+p9Xw8M7J9YEq5SInHFYpJwcoZtYTa53Mo9G7czZF I3Dd/AxEJRBRV7nnqHv3WrVDn9+TGOocoYUylZVGqvJNyi1CiJ9Zrgp5h/PTh4xqS+4I cOnHG4Bji2spZCksj/HlQP5+pmMEp4xZR6aeQIMZ7FS0WhOZoYLAsYEPAjXBUXnnL6eN UQka7Xuq2bmhBppq5tePhUljh8z5T8sSFMOpLdnfA3R3iWFQ1oY1DLQAaEi2LarT98FR 6KjQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706616700; x=1707221500; 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=0C+NFwYpGtvMPOYsz8QVeEIKqOTKiJf3NeT0BjTLhKE=; b=CRV2IBfW8fPLh+7XEeM9YO9bGvqe+XBg+k5xGZyGfVkocapo/cPD3ydKypxtJGGiR4 DiBOhsatk1TO7PXDE4lXChtNiSnnx12oikFNCSzbhDU/frOUTNJKkBK2LZpLjgV3GEtw alj5f5Ep4QrxCxQUtE+a1QYyC7xprs/A9FFwLbokeBxfnuhFAA1nWCLH4TbF4FnMmpJa 9dyzj1y63AhfbSdMRA2wAe2468T2EJvM6Z+i1UxRh/xrWKPjOJYNucUluzCFSaqyM6pJ +L1e4yAkJdMtU3xNFzkwFI8+BmOjf2xSSXohhjmfvzF6kU96VpaU5AUDfJLj4+iTTd8W X53Q== X-Gm-Message-State: AOJu0Yxk3khf3gXzXn3EEgQ0RFmOeTi2lXoRbKj09eB48+TomZISK+zw eXUZfknAAy+R2aI4XZL5BwPyyvLkoecI5ldq0xTtF3q3YVgOJ9GWT9ZbFfOv9GWIIVr1bXcn3lu n6w== X-Google-Smtp-Source: AGHT+IFxhEx2s7/wHAa/hSkNJfDAHRPREoDJ1b1iZE/ffZhuFEdAjVQatpTl/eNR0vIkrd/1qzb4Xw== X-Received: by 2002:a5d:64eb:0:b0:33a:e712:96b0 with SMTP id g11-20020a5d64eb000000b0033ae71296b0mr1463012wri.52.1706616700432; Tue, 30 Jan 2024 04:11:40 -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.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 30 Jan 2024 04:11:40 -0800 (PST) From: arthur.cohen@embecosm.com To: gcc-patches@gcc.gnu.org Cc: gcc-rust@gcc.gnu.org, Pierre-Emmanuel Patry Subject: [COMMITTED 068/101] gccrs: Make default resolver inherit from default visitor Date: Tue, 30 Jan 2024 13:07:24 +0100 Message-ID: <20240130121026.807464-71-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> MIME-Version: 1.0 X-Spam-Status: No, score=-14.1 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: Pierre-Emmanuel Patry The default resolver put some scope in place but mostly has traversal functions similar to the default ast visitor, making it inherit from the default visitor allows us to avoid code duplication. gcc/rust/ChangeLog: * resolve/rust-default-resolver.cc (DefaultResolver::visit): Remove duplicated functions. * resolve/rust-default-resolver.h (class DefaultResolver): Make the default resolver inherit from the default visitor. Signed-off-by: Pierre-Emmanuel Patry --- gcc/rust/resolve/rust-default-resolver.cc | 240 +--------------------- gcc/rust/resolve/rust-default-resolver.h | 44 +--- 2 files changed, 5 insertions(+), 279 deletions(-) diff --git a/gcc/rust/resolve/rust-default-resolver.cc b/gcc/rust/resolve/rust-default-resolver.cc index c1ed3cea113..ab4d5e8b70d 100644 --- a/gcc/rust/resolve/rust-default-resolver.cc +++ b/gcc/rust/resolve/rust-default-resolver.cc @@ -18,6 +18,7 @@ #include "rust-default-resolver.h" #include "rust-ast-full.h" +#include "rust-ast-visitor.h" #include "rust-item.h" namespace Rust { @@ -148,26 +149,11 @@ DefaultResolver::visit (AST::StructStruct &type) // we also can't visit `StructField`s by default, so there's nothing to do - // correct? or should we do something like - for (auto &field : type.get_fields ()) - field.get_field_type ()->accept_vis (*this); + AST::DefaultASTVisitor::visit (type); // FIXME: ??? } -void -DefaultResolver::visit (AST::TupleStruct &type) -{ - for (auto &field : type.get_fields ()) - field.get_field_type ()->accept_vis (*this); -} - -void -DefaultResolver::visit (AST::Union &type) -{ - for (auto &field : type.get_variants ()) - field.get_field_type ()->accept_vis (*this); -} - void DefaultResolver::visit (AST::Enum &type) { @@ -182,118 +168,6 @@ DefaultResolver::visit (AST::Enum &type) variant_fn, type.get_identifier ()); } -void -DefaultResolver::visit (AST::BorrowExpr &expr) -{ - expr.get_borrowed_expr ()->accept_vis (*this); -} - -void -DefaultResolver::visit (AST::DereferenceExpr &expr) -{ - expr.get_dereferenced_expr ()->accept_vis (*this); -} - -void -DefaultResolver::visit (AST::ErrorPropagationExpr &expr) -{ - expr.get_propagating_expr ()->accept_vis (*this); -} - -void -DefaultResolver::visit (AST::NegationExpr &expr) -{ - expr.get_negated_expr ()->accept_vis (*this); -} - -void -DefaultResolver::visit (AST::ArithmeticOrLogicalExpr &expr) -{ - expr.get_left_expr ()->accept_vis (*this); - expr.get_right_expr ()->accept_vis (*this); -} - -void -DefaultResolver::visit (AST::ComparisonExpr &expr) -{ - expr.get_left_expr ()->accept_vis (*this); - expr.get_right_expr ()->accept_vis (*this); -} - -void -DefaultResolver::visit (AST::LazyBooleanExpr &expr) -{ - expr.get_left_expr ()->accept_vis (*this); - expr.get_right_expr ()->accept_vis (*this); -} - -void -DefaultResolver::visit (AST::TypeCastExpr &expr) -{ - expr.get_type_to_cast_to ()->accept_vis (*this); - expr.get_casted_expr ()->accept_vis (*this); -} - -void -DefaultResolver::visit (AST::AssignmentExpr &expr) -{ - expr.get_left_expr ()->accept_vis (*this); - expr.get_right_expr ()->accept_vis (*this); -} - -void -DefaultResolver::visit (AST::CompoundAssignmentExpr &expr) -{ - expr.get_left_expr ()->accept_vis (*this); - expr.get_right_expr ()->accept_vis (*this); -} - -void -DefaultResolver::visit (AST::GroupedExpr &expr) -{ - expr.get_expr_in_parens ()->accept_vis (*this); -} - -void -DefaultResolver::visit (AST::ArrayElemsValues &array) -{ - for (auto &value : array.get_values ()) - value->accept_vis (*this); -} - -void -DefaultResolver::visit (AST::ArrayElemsCopied &array) -{ - array.get_elem_to_copy ()->accept_vis (*this); - array.get_num_copies ()->accept_vis (*this); -} - -void -DefaultResolver::visit (AST::ArrayExpr &expr) -{ - expr.get_array_elems ()->accept_vis (*this); -} - -void -DefaultResolver::visit (AST::ArrayIndexExpr &expr) -{ - expr.get_array_expr ()->accept_vis (*this); - expr.get_index_expr ()->accept_vis (*this); -} - -void -DefaultResolver::visit (AST::TupleExpr &expr) -{ - for (auto &element : expr.get_tuple_elems ()) - element->accept_vis (*this); -} - -void -DefaultResolver::visit (AST::TupleIndexExpr &expr) -{ - expr.get_tuple_expr ()->accept_vis (*this); -} - void DefaultResolver::visit (AST::StructExprFieldIdentifierValue &) {} @@ -302,28 +176,6 @@ void DefaultResolver::visit (AST::StructExprFieldIndexValue &) {} -void -DefaultResolver::visit (AST::CallExpr &expr) -{ - expr.get_function_expr ()->accept_vis (*this); - for (auto ¶m : expr.get_params ()) - param->accept_vis (*this); -} - -void -DefaultResolver::visit (AST::MethodCallExpr &expr) -{ - expr.get_receiver_expr ()->accept_vis (*this); - for (auto ¶m : expr.get_params ()) - param->accept_vis (*this); -} - -void -DefaultResolver::visit (AST::FieldAccessExpr &expr) -{ - expr.get_receiver_expr ()->accept_vis (*this); -} - void DefaultResolver::visit (AST::ClosureExprInner &) {} @@ -336,13 +188,6 @@ void DefaultResolver::visit (AST::ContinueExpr &expr) {} -void -DefaultResolver::visit (AST::BreakExpr &expr) -{ - if (expr.has_break_expr ()) - expr.get_break_expr ()->accept_vis (*this); -} - void DefaultResolver::visit (AST::RangeFromToExpr &expr) {} @@ -355,10 +200,6 @@ void DefaultResolver::visit (AST::RangeToExpr &expr) {} -void -DefaultResolver::visit (AST::RangeFullExpr &expr) -{} - void DefaultResolver::visit (AST::RangeFromToInclExpr &expr) {} @@ -415,28 +256,6 @@ void DefaultResolver::visit (AST::AsyncBlockExpr &expr) {} -void -DefaultResolver::visit (AST::LetStmt &let_stmt) -{ - let_stmt.get_pattern ()->accept_vis (*this); - - if (let_stmt.has_type ()) - let_stmt.get_type ()->accept_vis (*this); - - if (let_stmt.has_init_expr ()) - let_stmt.get_init_expr ()->accept_vis (*this); -} - -void -DefaultResolver::visit (AST::ExprStmt &stmt) -{ - stmt.get_expr ()->accept_vis (*this); -} - -void -DefaultResolver::visit (AST::Token &) -{} - void DefaultResolver::visit (AST::DelimTokenTree &) {} @@ -449,10 +268,6 @@ void DefaultResolver::visit (AST::IdentifierExpr &expr) {} -void -DefaultResolver::visit (AST::Lifetime &) -{} - void DefaultResolver::visit (AST::LifetimeParam &) {} @@ -465,10 +280,6 @@ void DefaultResolver::visit (AST::PathInExpression &) {} -void -DefaultResolver::visit (AST::TypePathSegment &) -{} - void DefaultResolver::visit (AST::TypePathSegmentGeneric &) {} @@ -513,10 +324,6 @@ void DefaultResolver::visit (AST::StructExprStruct &) {} -void -DefaultResolver::visit (AST::StructExprFieldIdentifier &) -{} - void DefaultResolver::visit (AST::StructExprStructFields &) {} @@ -623,10 +430,6 @@ void DefaultResolver::visit (AST::ExternalFunctionItem &) {} -void -DefaultResolver::visit (AST::MacroMatchFragment &) -{} - void DefaultResolver::visit (AST::MacroMatchRepetition &) {} @@ -651,14 +454,6 @@ void DefaultResolver::visit (AST::MetaItemSeq &) {} -void -DefaultResolver::visit (AST::MetaWord &) -{} - -void -DefaultResolver::visit (AST::MetaNameValueStr &) -{} - void DefaultResolver::visit (AST::MetaListPaths &) {} @@ -667,29 +462,6 @@ void DefaultResolver::visit (AST::MetaListNameValueStr &) {} -void -DefaultResolver::visit (AST::LiteralPattern &) -{} - -void -DefaultResolver::visit (AST::IdentifierPattern &pattern) -{ - if (pattern.has_pattern_to_bind ()) - pattern.get_pattern_to_bind ()->accept_vis (*this); -} - -void -DefaultResolver::visit (AST::WildcardPattern &) -{} - -void -DefaultResolver::visit (AST::RestPattern &) -{} - -void -DefaultResolver::visit (AST::RangePatternBoundLiteral &) -{} - void DefaultResolver::visit (AST::RangePatternBoundPath &) {} @@ -790,10 +562,6 @@ void DefaultResolver::visit (AST::TupleType &) {} -void -DefaultResolver::visit (AST::NeverType &) -{} - void DefaultResolver::visit (AST::RawPointerType &) {} @@ -810,10 +578,6 @@ void DefaultResolver::visit (AST::SliceType &) {} -void -DefaultResolver::visit (AST::InferredType &) -{} - void DefaultResolver::visit (AST::BareFunctionType &) {} diff --git a/gcc/rust/resolve/rust-default-resolver.h b/gcc/rust/resolve/rust-default-resolver.h index 49255d3bc26..20dbff8e110 100644 --- a/gcc/rust/resolve/rust-default-resolver.h +++ b/gcc/rust/resolve/rust-default-resolver.h @@ -32,9 +32,11 @@ namespace Resolver2_0 { * visiting each node's subnodes - a block's statements, a function call's * arguments... */ -class DefaultResolver : public AST::ASTVisitor +class DefaultResolver : public AST::DefaultASTVisitor { public: + using AST::DefaultASTVisitor::visit; + virtual ~DefaultResolver () {} // First, our lexical scope expressions - these visit their sub nodes, always @@ -51,41 +53,17 @@ public: // type dec nodes, which visit their fields or variants by default void visit (AST::StructStruct &); - void visit (AST::TupleStruct &); - void visit (AST::Union &); void visit (AST::Enum &); // Visitors that visit their expression node(s) - void visit (AST::BorrowExpr &); - void visit (AST::DereferenceExpr &); - void visit (AST::ErrorPropagationExpr &); - void visit (AST::NegationExpr &); - void visit (AST::ArithmeticOrLogicalExpr &); - void visit (AST::ComparisonExpr &); - void visit (AST::LazyBooleanExpr &); - void visit (AST::TypeCastExpr &); - void visit (AST::AssignmentExpr &); - void visit (AST::CompoundAssignmentExpr &); - void visit (AST::GroupedExpr &); - void visit (AST::ArrayElemsValues &); - void visit (AST::ArrayElemsCopied &); - void visit (AST::ArrayExpr &); - void visit (AST::ArrayIndexExpr &); - void visit (AST::TupleExpr &); - void visit (AST::TupleIndexExpr &); void visit (AST::StructExprFieldIdentifierValue &); void visit (AST::StructExprFieldIndexValue &); - void visit (AST::CallExpr &); - void visit (AST::MethodCallExpr &); - void visit (AST::FieldAccessExpr &); void visit (AST::ClosureExprInner &); void visit (AST::ClosureExprInnerTyped &); void visit (AST::ContinueExpr &); - void visit (AST::BreakExpr &); void visit (AST::RangeFromToExpr &); void visit (AST::RangeFromExpr &); void visit (AST::RangeToExpr &); - void visit (AST::RangeFullExpr &); void visit (AST::RangeFromToInclExpr &); void visit (AST::RangeToInclExpr &); void visit (AST::ReturnExpr &); @@ -100,19 +78,14 @@ public: void visit (AST::MatchExpr &); void visit (AST::AwaitExpr &); void visit (AST::AsyncBlockExpr &); - void visit (AST::LetStmt &); - void visit (AST::ExprStmt &); // Leaf visitors, which do nothing by default - void visit (AST::Token &); void visit (AST::DelimTokenTree &); void visit (AST::AttrInputMetaItemContainer &); void visit (AST::IdentifierExpr &); - void visit (AST::Lifetime &); void visit (AST::LifetimeParam &); void visit (AST::ConstGenericParam &); void visit (AST::PathInExpression &); - void visit (AST::TypePathSegment &); void visit (AST::TypePathSegmentGeneric &); void visit (AST::TypePathSegmentFunction &); void visit (AST::TypePath &); @@ -124,7 +97,6 @@ public: void visit (AST::MetaItemLitExpr &); void visit (AST::MetaItemPathLit &); void visit (AST::StructExprStruct &); - void visit (AST::StructExprFieldIdentifier &); void visit (AST::StructExprStructFields &); void visit (AST::StructExprStructBase &); void visit (AST::TypeParam &); @@ -149,22 +121,14 @@ public: void visit (AST::ExternalTypeItem &); void visit (AST::ExternalStaticItem &); void visit (AST::ExternalFunctionItem &); - void visit (AST::MacroMatchFragment &); void visit (AST::MacroMatchRepetition &); void visit (AST::MacroMatcher &); void visit (AST::MacroRulesDefinition &); void visit (AST::MacroInvocation &); void visit (AST::MetaItemPath &); void visit (AST::MetaItemSeq &); - void visit (AST::MetaWord &); - void visit (AST::MetaNameValueStr &); void visit (AST::MetaListPaths &); void visit (AST::MetaListNameValueStr &); - void visit (AST::LiteralPattern &); - void visit (AST::IdentifierPattern &); - void visit (AST::WildcardPattern &); - void visit (AST::RestPattern &); - void visit (AST::RangePatternBoundLiteral &); void visit (AST::RangePatternBoundPath &); void visit (AST::RangePatternBoundQualPath &); void visit (AST::RangePattern &); @@ -190,12 +154,10 @@ public: void visit (AST::ImplTraitTypeOneBound &); void visit (AST::TraitObjectTypeOneBound &); void visit (AST::TupleType &); - void visit (AST::NeverType &); void visit (AST::RawPointerType &); void visit (AST::ReferenceType &); void visit (AST::ArrayType &); void visit (AST::SliceType &); - void visit (AST::InferredType &); void visit (AST::BareFunctionType &); void visit (AST::FunctionParam &); void visit (AST::VariadicParam &);