From: Arthur Cohen Date: Fri, 18 Apr 2025 16:30:19 +0000 (+0200) Subject: gccrs: derive(PartialEq): chore: Refactor using new SelfOther APIs X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=e188ba2fd7fb6d3fe5ff575cee76867a33add0be;p=thirdparty%2Fgcc.git gccrs: derive(PartialEq): chore: Refactor using new SelfOther APIs 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. --- diff --git a/gcc/rust/expand/rust-derive-cmp-common.cc b/gcc/rust/expand/rust-derive-cmp-common.cc index ba260c53291..752f7ce4778 100644 --- a/gcc/rust/expand/rust-derive-cmp-common.cc +++ b/gcc/rust/expand/rust-derive-cmp-common.cc @@ -32,14 +32,12 @@ SelfOther::index (Builder builder, int idx) } std::vector -SelfOther::indexes (Builder builder, int limit) +SelfOther::indexes (Builder builder, const std::vector &fields) { std::vector 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 &fields) { std::vector vec; - for (auto &field : fields) + for (const auto &field : fields) vec.emplace_back ( SelfOther::field (builder, field.get_field_name ().as_string ())); diff --git a/gcc/rust/expand/rust-derive-cmp-common.h b/gcc/rust/expand/rust-derive-cmp-common.h index 2353c71292f..bb7ae842a6f 100644 --- a/gcc/rust/expand/rust-derive-cmp-common.h +++ b/gcc/rust/expand/rust-derive-cmp-common.h @@ -36,7 +36,8 @@ struct SelfOther /* Create a and an expression */ static SelfOther index (Builder builder, int idx); - static std::vector indexes (Builder builder, int limit); + static std::vector indexes (Builder builder, + const std::vector &fields); /* Create a and an expression */ static SelfOther field (Builder builder, const std::string &field_name); diff --git a/gcc/rust/expand/rust-derive-partial-eq.cc b/gcc/rust/expand/rust-derive-partial-eq.cc index 13a09fce059..1f2fa35b284 100644 --- a/gcc/rust/expand/rust-derive-partial-eq.cc +++ b/gcc/rust/expand/rust-derive-partial-eq.cc @@ -116,10 +116,7 @@ void DerivePartialEq::visit_tuple (TupleStruct &item) { auto type_name = item.get_struct_name ().as_string (); - auto fields = std::vector (); - - 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 (); - - 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);