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 | |
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')
-rw-r--r-- | gcc/rust/ast/rust-item.h | 9 | ||||
-rw-r--r-- | gcc/rust/hir/rust-ast-lower-item.h | 40 | ||||
-rw-r--r-- | gcc/rust/hir/rust-ast-lower-stmt.h | 40 | ||||
-rw-r--r-- | gcc/rust/resolve/rust-ast-resolve-item.h | 4 | ||||
-rw-r--r-- | 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 16a9108..a18a8e6 100644 --- a/gcc/rust/ast/rust-item.h +++ b/gcc/rust/ast/rust-item.h @@ -2472,15 +2472,6 @@ public: std::vector<StructField> &get_variants () { return variants; } const std::vector<StructField> &get_variants () const { return variants; } - void iterate (std::function<bool (StructField &)> cb) - { - for (auto &variant : variants) - { - if (!cb (variant)) - return; - } - } - std::vector<std::unique_ptr<GenericParam>> &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 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 (), diff --git a/gcc/rust/resolve/rust-ast-resolve-item.h b/gcc/rust/resolve/rust-ast-resolve-item.h index e8e6b8d..b3035ed 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 16f5b9a..ce6875c 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 (); } |