From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm1-x334.google.com (mail-wm1-x334.google.com [IPv6:2a00:1450:4864:20::334]) by sourceware.org (Postfix) with ESMTPS id C95063856955 for ; Wed, 5 Apr 2023 14:05:49 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org C95063856955 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=embecosm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=embecosm.com Received: by mail-wm1-x334.google.com with SMTP id he13so1340633wmb.2 for ; Wed, 05 Apr 2023 07:05:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=embecosm.com; s=google; t=1680703549; 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=Pk/YR01fm2xN7HmxJNkxvY1XwVk0ob+ZXWLT0uilaw0=; b=EysPVRRPr7iDBWyMu3A3gmluDdNn/nIACx7sbaoFieqqLPApZL52kcJgBvgcTn99VJ bU2KsleNCIQpuVktZq0ngZsjio7cfIIJDwM88tWePw92gb88iC1e+sab9vJo80KUs/CP FUoshlBiP0A+CthUCC6pnXmmek9vt3exu8eJuib1UTbp2HQ/VC1yRe5P45pcBKFihFAa Z7N5AA8BHbaU0be91lBOe8lZlsziVnqW5RuKhiy9b3Hb1ybuRUSh3+4oNW1ZdoeoxKq7 e0VOK+Ydm384QvBVQ+knJPRjXRIlJrwWLGnJEF+VolC/N4JlxiX1w+VYEpMxgnwCV8M3 usbg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1680703549; 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=Pk/YR01fm2xN7HmxJNkxvY1XwVk0ob+ZXWLT0uilaw0=; b=6YJf+RFnAyWxZL8q/ZJR1VFDCkHjP4MbcdvxHCy3XhaRKCkrqFHhVap95R3+QfhHAD ECm8wjhwJdCsOXOG0AWVnr/mwD0iEIFsDC2+SdkTPSjYymjht9K86+CsncFzZoqxI1LB WZxo+vQigTYpXorbeaK4IpiSbu84AzZ2gZQOYyKYeTt+htabFRGkYtemesZIZVixpMXd bnWZ5eP9rS+AJ9Dke0SrxHuS+EiggkDOS0Usj4fVT4G4YEZRg/PDhva5RZnzQkLtiSRe rr7/9ikeCyW+anHGRAA3N6WGLeNj/gmam5/SOqqxnCQrgESvJ3dz5MUkTjPJcQyGQ++Q NYbg== X-Gm-Message-State: AAQBX9cOpmEwPj8s1g48Dx07TunxVXYmHobj5FHJhBj8Cx/pjMoC5ryr lejxc02flj2Sm8dE0l0tK6e/KWc8kz8RcSx8Gg== X-Google-Smtp-Source: AKy350ZQRIUUqkmvzbg4QhgGISEJaKhsbuqBS2ALjJNOGGLQtpTCt4N2w9Ey1T3kkrAtWWgqyQEHTQ== X-Received: by 2002:a7b:cb50:0:b0:3ee:6d88:774a with SMTP id v16-20020a7bcb50000000b003ee6d88774amr1824962wmj.14.1680703549409; Wed, 05 Apr 2023 07:05:49 -0700 (PDT) Received: from platypus.localdomain ([62.23.166.218]) by smtp.gmail.com with ESMTPSA id ay8-20020a05600c1e0800b003edddae1068sm2330150wmb.9.2023.04.05.07.05.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 05 Apr 2023 07:05:48 -0700 (PDT) From: arthur.cohen@embecosm.com To: gcc-patches@gcc.gnu.org Cc: gcc-rust@gcc.gnu.org, Owen Avery Subject: [committed 30/88] gccrs: Implement lowering ReferencePattern from AST to HIR Date: Wed, 5 Apr 2023 16:03:14 +0200 Message-Id: <20230405140411.3016563-31-arthur.cohen@embecosm.com> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230405140411.3016563-1-arthur.cohen@embecosm.com> References: <20230405140411.3016563-1-arthur.cohen@embecosm.com> Reply-To: arthur.cohen@embecosm.com MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-14.6 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 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-pattern.h: (ReferencePattern::is_double_reference): Add method. (ReferencePattern::get_is_mut): Add method. * hir/rust-ast-lower-pattern.cc (ASTLoweringPattern::visit): Add ReferencePattern visitor. * hir/rust-ast-lower-pattern.h: (ASTLoweringPattern::visit): Add ReferencePattern visitor. Signed-off-by: Owen Avery --- gcc/rust/ast/rust-pattern.h | 4 ++++ gcc/rust/hir/rust-ast-lower-pattern.cc | 29 ++++++++++++++++++++++++++ gcc/rust/hir/rust-ast-lower-pattern.h | 1 + 3 files changed, 34 insertions(+) diff --git a/gcc/rust/ast/rust-pattern.h b/gcc/rust/ast/rust-pattern.h index c86bdf6f820..cf5d2ead10d 100644 --- a/gcc/rust/ast/rust-pattern.h +++ b/gcc/rust/ast/rust-pattern.h @@ -469,6 +469,10 @@ public: return pattern; } + bool is_double_reference () const { return has_two_amps; } + + bool get_is_mut () const { return is_mut; } + NodeId get_node_id () const { return node_id; } NodeId get_pattern_node_id () const override final { return node_id; } diff --git a/gcc/rust/hir/rust-ast-lower-pattern.cc b/gcc/rust/hir/rust-ast-lower-pattern.cc index a0fd8dded38..1961c740624 100644 --- a/gcc/rust/hir/rust-ast-lower-pattern.cc +++ b/gcc/rust/hir/rust-ast-lower-pattern.cc @@ -249,5 +249,34 @@ ASTLoweringPattern::visit (AST::GroupedPattern &pattern) pattern.get_pattern_in_parens ()->accept_vis (*this); } +void +ASTLoweringPattern::visit (AST::ReferencePattern &pattern) +{ + auto crate_num = mappings->get_current_crate (); + Analysis::NodeMapping mapping (crate_num, pattern.get_node_id (), + mappings->get_next_hir_id (crate_num), + UNKNOWN_LOCAL_DEFID); + + HIR::Pattern *inner + = ASTLoweringPattern::translate (pattern.get_referenced_pattern ().get ()); + + translated + = new HIR::ReferencePattern (mapping, std::unique_ptr (inner), + pattern.get_is_mut () ? Mutability::Mut + : Mutability::Imm, + pattern.get_locus ()); + + if (pattern.is_double_reference ()) + { + Analysis::NodeMapping mapping2 (crate_num, pattern.get_node_id (), + mappings->get_next_hir_id (crate_num), + UNKNOWN_LOCAL_DEFID); + translated + = new HIR::ReferencePattern (mapping2, + std::unique_ptr (translated), + Mutability::Imm, pattern.get_locus ()); + } +} + } // namespace HIR } // namespace Rust diff --git a/gcc/rust/hir/rust-ast-lower-pattern.h b/gcc/rust/hir/rust-ast-lower-pattern.h index 0075e27e9c0..2d175a25cb4 100644 --- a/gcc/rust/hir/rust-ast-lower-pattern.h +++ b/gcc/rust/hir/rust-ast-lower-pattern.h @@ -40,6 +40,7 @@ public: void visit (AST::LiteralPattern &pattern) override; void visit (AST::RangePattern &pattern) override; void visit (AST::GroupedPattern &pattern) override; + void visit (AST::ReferencePattern &pattern) override; private: ASTLoweringPattern (); -- 2.40.0