]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
gccrs: derive(PartialEq): chore: Refactor using new SelfOther APIs
authorArthur Cohen <arthur.cohen@embecosm.com>
Fri, 18 Apr 2025 16:30:19 +0000 (18:30 +0200)
committerArthur Cohen <arthur.cohen@embecosm.com>
Tue, 5 Aug 2025 14:36:47 +0000 (16:36 +0200)
gcc/rust/ChangeLog:

* expand/rust-derive-cmp-common.cc (SelfOther::indexes): Fix formatting.
(SelfOther::fields): Make iterator const.
* expand/rust-derive-cmp-common.h (struct SelfOther): New declaration for indexes.
* expand/rust-derive-partial-eq.cc (DerivePartialEq::visit_tuple): Use the new API.
(DerivePartialEq::visit_struct): Likewise.

gcc/rust/expand/rust-derive-cmp-common.cc
gcc/rust/expand/rust-derive-cmp-common.h
gcc/rust/expand/rust-derive-partial-eq.cc

index ba260c5329119bee7fb1aa70c5ebd69ef81a9798..752f7ce47780704fec4c843d13938e0473ab3f3f 100644 (file)
@@ -32,14 +32,12 @@ SelfOther::index (Builder builder, int idx)
 }
 
 std::vector<SelfOther>
-SelfOther::indexes (Builder builder, int limit)
+SelfOther::indexes (Builder builder, const std::vector<TupleField> &fields)
 {
   std::vector<SelfOther> vec;
 
-  for (int i = 0; i < limit; i++)
-    {
-      vec.emplace_back (SelfOther::index (builder, i));
-    }
+  for (size_t i = 0; i < fields.size (); i++)
+    vec.emplace_back (SelfOther::index (builder, i));
 
   return vec;
 }
@@ -58,7 +56,7 @@ SelfOther::fields (Builder builder, const std::vector<StructField> &fields)
 {
   std::vector<SelfOther> vec;
 
-  for (auto &field : fields)
+  for (const auto &field : fields)
     vec.emplace_back (
       SelfOther::field (builder, field.get_field_name ().as_string ()));
 
index 2353c71292f36e75c5617c8d44f5782ca6a1a68a..bb7ae842a6fc9612d3d8dbe4909716ac1b829625 100644 (file)
@@ -36,7 +36,8 @@ struct SelfOther
 
   /* Create a <self.i> and an <other.i> expression */
   static SelfOther index (Builder builder, int idx);
-  static std::vector<SelfOther> indexes (Builder builder, int limit);
+  static std::vector<SelfOther> indexes (Builder builder,
+                                        const std::vector<TupleField> &fields);
 
   /* Create a <self.field> and an <other.field> expression */
   static SelfOther field (Builder builder, const std::string &field_name);
index 13a09fce059d040adfcad292e07a8e353e6481ca..1f2fa35b284e7320bae506fbc815459994be10a9 100644 (file)
@@ -116,10 +116,7 @@ void
 DerivePartialEq::visit_tuple (TupleStruct &item)
 {
   auto type_name = item.get_struct_name ().as_string ();
-  auto fields = std::vector<SelfOther> ();
-
-  for (size_t idx = 0; idx < item.get_fields ().size (); idx++)
-    fields.emplace_back (SelfOther::index (builder, idx));
+  auto fields = SelfOther::indexes (builder, item.get_fields ());
 
   auto fn = eq_fn (build_eq_expression (std::move (fields)), type_name);
 
@@ -131,11 +128,7 @@ void
 DerivePartialEq::visit_struct (StructStruct &item)
 {
   auto type_name = item.get_struct_name ().as_string ();
-  auto fields = std::vector<SelfOther> ();
-
-  for (auto &field : item.get_fields ())
-    fields.emplace_back (
-      SelfOther::field (builder, field.get_field_name ().as_string ()));
+  auto fields = SelfOther::fields (builder, item.get_fields ());
 
   auto fn = eq_fn (build_eq_expression (std::move (fields)), type_name);