diff options
author | David Faust <david.faust@oracle.com> | 2021-12-13 13:57:27 -0800 |
---|---|---|
committer | David Faust <david.faust@oracle.com> | 2021-12-13 14:45:45 -0800 |
commit | a9a7654d850a7140d1e0d636f2cc375308bb2c32 (patch) | |
tree | b40ea16242ef40c829df297c9042eeb20c1d47d4 /gcc/rust/hir | |
parent | 8c3ad67d19b7e74b1c89a6ad42f2bb0c5fb172e0 (diff) | |
download | gcc-a9a7654d850a7140d1e0d636f2cc375308bb2c32.zip gcc-a9a7654d850a7140d1e0d636f2cc375308bb2c32.tar.gz gcc-a9a7654d850a7140d1e0d636f2cc375308bb2c32.tar.bz2 |
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
Diffstat (limited to 'gcc/rust/hir')
-rw-r--r-- | gcc/rust/hir/rust-ast-lower-item.h | 40 | ||||
-rw-r--r-- | gcc/rust/hir/rust-ast-lower-stmt.h | 40 |
2 files changed, 40 insertions, 40 deletions
diff --git a/gcc/rust/hir/rust-ast-lower-item.h b/gcc/rust/hir/rust-ast-lower-item.h index 2a8c9bb..60315db 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<HIR::StructField> 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<HIR::Type> (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<HIR::Type> (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 237c635..27fdd22 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<HIR::StructField> 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<HIR::Type> (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<HIR::Type> (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 (), |