https://gcc.gnu.org/g:ecf19aca7569bca599d8942f2a3a59b7430374b0

commit ecf19aca7569bca599d8942f2a3a59b7430374b0
Author: Arthur Cohen <arthur.co...@embecosm.com>
Date:   Wed Apr 16 17:37:31 2025 +0200

    ast: builder: Allow building struct ident patterns
    
    gcc/rust/ChangeLog:
    
            * ast/rust-ast-builder.cc (Builder::struct_pattern_ident_pattern): 
New.
            * ast/rust-ast-builder.h: New declaration.

Diff:
---
 gcc/rust/ast/rust-ast-builder.cc | 8 ++++++++
 gcc/rust/ast/rust-ast-builder.h  | 4 ++++
 2 files changed, 12 insertions(+)

diff --git a/gcc/rust/ast/rust-ast-builder.cc b/gcc/rust/ast/rust-ast-builder.cc
index 1f49c6411975..e4c03e5582af 100644
--- a/gcc/rust/ast/rust-ast-builder.cc
+++ b/gcc/rust/ast/rust-ast-builder.cc
@@ -442,6 +442,14 @@ Builder::field_access (std::unique_ptr<Expr> &&instance,
     new FieldAccessExpr (std::move (instance), field, {}, loc));
 }
 
+std::unique_ptr<StructPatternField>
+Builder::struct_pattern_ident_pattern (std::string field_name,
+                                      std::unique_ptr<Pattern> &&pattern)
+{
+  return std::make_unique<StructPatternFieldIdentPat> (
+    field_name, std::move (pattern), std::vector<Attribute> (), loc);
+}
+
 std::unique_ptr<Pattern>
 Builder::wildcard () const
 {
diff --git a/gcc/rust/ast/rust-ast-builder.h b/gcc/rust/ast/rust-ast-builder.h
index c0550c4a5ad7..682af79fc07a 100644
--- a/gcc/rust/ast/rust-ast-builder.h
+++ b/gcc/rust/ast/rust-ast-builder.h
@@ -254,6 +254,10 @@ public:
   std::unique_ptr<Expr> field_access (std::unique_ptr<Expr> &&instance,
                                      std::string field) const;
 
+  std::unique_ptr<StructPatternField>
+  struct_pattern_ident_pattern (std::string field_name,
+                               std::unique_ptr<Pattern> &&pattern);
+
   /* Create a wildcard pattern (`_`) */
   std::unique_ptr<Pattern> wildcard () const;
   /* Create a reference pattern (`&pattern`) */

Reply via email to