From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1643) id A2D903AA8436; Wed, 8 Jun 2022 11:55:53 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org A2D903AA8436 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: Thomas Schwinge To: gcc-cvs@gcc.gnu.org Subject: [gcc/devel/rust/master] Get rid of lambdas within AST::Union X-Act-Checkin: gcc X-Git-Author: David Faust X-Git-Refname: refs/heads/devel/rust/master X-Git-Oldrev: 8c3ad67d19b7e74b1c89a6ad42f2bb0c5fb172e0 X-Git-Newrev: a9a7654d850a7140d1e0d636f2cc375308bb2c32 Message-Id: <20220608115553.A2D903AA8436@sourceware.org> Date: Wed, 8 Jun 2022 11:55:53 +0000 (GMT) X-BeenThere: gcc-cvs@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-cvs mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 08 Jun 2022 11:55:53 -0000 https://gcc.gnu.org/g:a9a7654d850a7140d1e0d636f2cc375308bb2c32 commit a9a7654d850a7140d1e0d636f2cc375308bb2c32 Author: David Faust Date: Mon Dec 13 13:57:27 2021 -0800 Get rid of lambdas within AST::Union These constructs make working with the IR needlessly complicated for static analysis. Replace with simple for loops, and delete the old Union::iterate () method. Fixes: #716 Diff: --- gcc/rust/ast/rust-item.h | 9 ------- gcc/rust/hir/rust-ast-lower-item.h | 40 ++++++++++++++++---------------- gcc/rust/hir/rust-ast-lower-stmt.h | 40 ++++++++++++++++---------------- gcc/rust/resolve/rust-ast-resolve-item.h | 4 +--- gcc/rust/resolve/rust-ast-resolve-stmt.h | 4 +--- 5 files changed, 42 insertions(+), 55 deletions(-) diff --git a/gcc/rust/ast/rust-item.h b/gcc/rust/ast/rust-item.h index 16a9108165c..a18a8e6e42a 100644 --- a/gcc/rust/ast/rust-item.h +++ b/gcc/rust/ast/rust-item.h @@ -2472,15 +2472,6 @@ public: std::vector &get_variants () { return variants; } const std::vector &get_variants () const { return variants; } - void iterate (std::function cb) - { - for (auto &variant : variants) - { - if (!cb (variant)) - return; - } - } - std::vector> &get_generic_params () { return generic_params; diff --git a/gcc/rust/hir/rust-ast-lower-item.h b/gcc/rust/hir/rust-ast-lower-item.h index 2a8c9bbbc7e..60315dba0e3 100644 --- a/gcc/rust/hir/rust-ast-lower-item.h +++ b/gcc/rust/hir/rust-ast-lower-item.h @@ -325,28 +325,28 @@ public: HIR::Visibility vis = HIR::Visibility::create_public (); std::vector variants; - union_decl.iterate ([&] (AST::StructField &variant) mutable -> bool { - HIR::Visibility vis = HIR::Visibility::create_public (); - HIR::Type *type - = ASTLoweringType::translate (variant.get_field_type ().get ()); - - auto crate_num = mappings->get_current_crate (); - Analysis::NodeMapping mapping (crate_num, variant.get_node_id (), - mappings->get_next_hir_id (crate_num), - mappings->get_next_localdef_id ( - crate_num)); - - HIR::StructField translated_variant (mapping, variant.get_field_name (), - std::unique_ptr (type), - vis, variant.get_locus (), - variant.get_outer_attrs ()); + for (AST::StructField &variant : union_decl.get_variants ()) + { + HIR::Visibility vis = HIR::Visibility::create_public (); + HIR::Type *type + = ASTLoweringType::translate (variant.get_field_type ().get ()); + + auto crate_num = mappings->get_current_crate (); + Analysis::NodeMapping mapping (crate_num, variant.get_node_id (), + mappings->get_next_hir_id (crate_num), + mappings->get_next_localdef_id ( + crate_num)); - if (struct_field_name_exists (variants, translated_variant)) - return false; + HIR::StructField translated_variant (mapping, variant.get_field_name (), + std::unique_ptr (type), + vis, variant.get_locus (), + variant.get_outer_attrs ()); - variants.push_back (std::move (translated_variant)); - return true; - }); + if (struct_field_name_exists (variants, translated_variant)) + break; + + variants.push_back (std::move (translated_variant)); + } auto crate_num = mappings->get_current_crate (); Analysis::NodeMapping mapping (crate_num, union_decl.get_node_id (), diff --git a/gcc/rust/hir/rust-ast-lower-stmt.h b/gcc/rust/hir/rust-ast-lower-stmt.h index 237c6356380..27fdd22f708 100644 --- a/gcc/rust/hir/rust-ast-lower-stmt.h +++ b/gcc/rust/hir/rust-ast-lower-stmt.h @@ -258,28 +258,28 @@ public: HIR::Visibility vis = HIR::Visibility::create_public (); std::vector variants; - union_decl.iterate ([&] (AST::StructField &variant) mutable -> bool { - HIR::Visibility vis = HIR::Visibility::create_public (); - HIR::Type *type - = ASTLoweringType::translate (variant.get_field_type ().get ()); - - auto crate_num = mappings->get_current_crate (); - Analysis::NodeMapping mapping (crate_num, variant.get_node_id (), - mappings->get_next_hir_id (crate_num), - mappings->get_next_localdef_id ( - crate_num)); - - HIR::StructField translated_variant (mapping, variant.get_field_name (), - std::unique_ptr (type), - vis, variant.get_locus (), - variant.get_outer_attrs ()); + for (AST::StructField &variant : union_decl.get_variants ()) + { + HIR::Visibility vis = HIR::Visibility::create_public (); + HIR::Type *type + = ASTLoweringType::translate (variant.get_field_type ().get ()); + + auto crate_num = mappings->get_current_crate (); + Analysis::NodeMapping mapping (crate_num, variant.get_node_id (), + mappings->get_next_hir_id (crate_num), + mappings->get_next_localdef_id ( + crate_num)); - if (struct_field_name_exists (variants, translated_variant)) - return false; + HIR::StructField translated_variant (mapping, variant.get_field_name (), + std::unique_ptr (type), + vis, variant.get_locus (), + variant.get_outer_attrs ()); - variants.push_back (std::move (translated_variant)); - return true; - }); + if (struct_field_name_exists (variants, translated_variant)) + break; + + variants.push_back (std::move (translated_variant)); + } auto crate_num = mappings->get_current_crate (); Analysis::NodeMapping mapping (crate_num, union_decl.get_node_id (), diff --git a/gcc/rust/resolve/rust-ast-resolve-item.h b/gcc/rust/resolve/rust-ast-resolve-item.h index e8e6b8d0120..b3035ed75f1 100644 --- a/gcc/rust/resolve/rust-ast-resolve-item.h +++ b/gcc/rust/resolve/rust-ast-resolve-item.h @@ -331,11 +331,9 @@ public: if (union_decl.has_where_clause ()) ResolveWhereClause::Resolve (union_decl.get_where_clause ()); - union_decl.iterate ([&] (AST::StructField &field) mutable -> bool { + for (AST::StructField &field : union_decl.get_variants ()) ResolveType::go (field.get_field_type ().get (), union_decl.get_node_id ()); - return true; - }); resolver->get_type_scope ().pop (); } diff --git a/gcc/rust/resolve/rust-ast-resolve-stmt.h b/gcc/rust/resolve/rust-ast-resolve-stmt.h index 16f5b9afd07..ce6875c1fce 100644 --- a/gcc/rust/resolve/rust-ast-resolve-stmt.h +++ b/gcc/rust/resolve/rust-ast-resolve-stmt.h @@ -267,11 +267,9 @@ public: } } - union_decl.iterate ([&] (AST::StructField &field) mutable -> bool { + for (AST::StructField &field : union_decl.get_variants ()) ResolveType::go (field.get_field_type ().get (), union_decl.get_node_id ()); - return true; - }); resolver->get_type_scope ().pop (); }