diff options
author | Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com> | 2023-03-31 12:17:04 +0200 |
---|---|---|
committer | CohenArthur <arthur.cohen@embecosm.com> | 2023-04-05 08:20:48 +0000 |
commit | a7302b77e3915c55ac043401696c84fcdbb96336 (patch) | |
tree | f5e75a2f323f5b64bbe06c6ac48e531591f21b3c | |
parent | 11d6828d7428dff868c3788dfbcbaa8189d2fa50 (diff) | |
download | gcc-a7302b77e3915c55ac043401696c84fcdbb96336.zip gcc-a7302b77e3915c55ac043401696c84fcdbb96336.tar.gz gcc-a7302b77e3915c55ac043401696c84fcdbb96336.tar.bz2 |
expand: Add call to outer attributes stubs
Add call to outer attribute expansion stub on required types.
gcc/rust/ChangeLog:
* expand/rust-expand-visitor.cc (ExpandVisitor::expand_struct_fields):
Add call to expand structu fields.
(ExpandVisitor::expand_function_params): Add call to expand
function parameters.
(ExpandVisitor::expand_closure_params): Add call to expand
closure parameters.
(ExpandVisitor::visit): Add calls for item outer attribute
expansions.
Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
-rw-r--r-- | gcc/rust/expand/rust-expand-visitor.cc | 54 |
1 files changed, 45 insertions, 9 deletions
diff --git a/gcc/rust/expand/rust-expand-visitor.cc b/gcc/rust/expand/rust-expand-visitor.cc index f93accd..c25c017 100644 --- a/gcc/rust/expand/rust-expand-visitor.cc +++ b/gcc/rust/expand/rust-expand-visitor.cc @@ -85,7 +85,10 @@ void ExpandVisitor::expand_struct_fields (std::vector<AST::StructField> &fields) { for (auto &field : fields) - maybe_expand_type (field.get_field_type ()); + { + visit_outer_attrs (field); + maybe_expand_type (field.get_field_type ()); + } } void @@ -100,7 +103,10 @@ void ExpandVisitor::expand_function_params (std::vector<AST::FunctionParam> ¶ms) { for (auto ¶m : params) - maybe_expand_type (param.get_type ()); + { + visit_outer_attrs (param); + maybe_expand_type (param.get_type ()); + } } void @@ -147,8 +153,11 @@ void ExpandVisitor::expand_closure_params (std::vector<AST::ClosureParam> ¶ms) { for (auto ¶m : params) - if (param.has_type_given ()) - maybe_expand_type (param.get_type ()); + { + visit_outer_attrs (param); + if (param.has_type_given ()) + maybe_expand_type (param.get_type ()); + } } void @@ -501,6 +510,7 @@ ExpandVisitor::visit (AST::ClosureExprInner &expr) void ExpandVisitor::visit (AST::BlockExpr &expr) { + visit_outer_attrs (expr); std::function<std::unique_ptr<AST::Stmt> (AST::SingleASTNode)> extractor = [] (AST::SingleASTNode node) { return node.take_stmt (); }; @@ -694,6 +704,7 @@ ExpandVisitor::visit (AST::MatchExpr &expr) for (auto &match_case : expr.get_match_cases ()) { auto &arm = match_case.get_arm (); + visit_outer_attrs (arm); for (auto &pattern : arm.get_patterns ()) visit (pattern); @@ -743,6 +754,7 @@ ExpandVisitor::visit (AST::TypeBoundWhereClauseItem &item) void ExpandVisitor::visit (AST::Method &method) { + visit_outer_attrs (method); for (auto ¶m : method.get_generic_params ()) visit (param); @@ -761,6 +773,7 @@ ExpandVisitor::visit (AST::Method &method) void ExpandVisitor::visit (AST::Module &module) { + visit_outer_attrs (module); if (module.get_kind () == AST::Module::ModuleKind::LOADED) { visit_inner_attrs (module); @@ -771,7 +784,9 @@ ExpandVisitor::visit (AST::Module &module) void ExpandVisitor::visit (AST::ExternCrate &crate) -{} +{ + visit_outer_attrs (crate); +} void ExpandVisitor::visit (AST::UseTreeGlob &) @@ -787,11 +802,14 @@ ExpandVisitor::visit (AST::UseTreeRebind &) void ExpandVisitor::visit (AST::UseDeclaration &use_decl) -{} +{ + visit_outer_attrs (use_decl); +} void ExpandVisitor::visit (AST::Function &function) { + visit_outer_attrs (function); visit_inner_using_attrs (function, function.get_definition ()->get_inner_attrs ()); for (auto ¶m : function.get_generic_params ()) @@ -811,6 +829,7 @@ ExpandVisitor::visit (AST::Function &function) void ExpandVisitor::visit (AST::TypeAlias &type_alias) { + visit_outer_attrs (type_alias); visit (type_alias.get_type_aliased ()); } @@ -818,6 +837,7 @@ void ExpandVisitor::visit (AST::StructStruct &struct_item) { visit_attrs_with_derive (struct_item); + visit_outer_attrs (struct_item); for (auto &generic : struct_item.get_generic_params ()) visit (generic); @@ -830,6 +850,7 @@ ExpandVisitor::visit (AST::StructStruct &struct_item) void ExpandVisitor::visit (AST::TupleStruct &tuple_struct) { + visit_outer_attrs (tuple_struct); visit_attrs_with_derive (tuple_struct); for (auto &generic : tuple_struct.get_generic_params ()) visit (generic); @@ -842,7 +863,9 @@ ExpandVisitor::visit (AST::TupleStruct &tuple_struct) void ExpandVisitor::visit (AST::EnumItem &item) -{} +{ + visit_outer_attrs (item); +} void ExpandVisitor::visit (AST::EnumItemTuple &item) @@ -866,6 +889,7 @@ void ExpandVisitor::visit (AST::Enum &enum_item) { visit_attrs_with_derive (enum_item); + visit_outer_attrs (enum_item); for (auto &generic : enum_item.get_generic_params ()) visit (generic); @@ -877,6 +901,7 @@ void ExpandVisitor::visit (AST::Union &union_item) { visit_attrs_with_derive (union_item); + visit_outer_attrs (union_item); for (auto &generic : union_item.get_generic_params ()) visit (generic); @@ -886,6 +911,7 @@ ExpandVisitor::visit (AST::Union &union_item) void ExpandVisitor::visit (AST::ConstantItem &const_item) { + visit_outer_attrs (const_item); maybe_expand_type (const_item.get_type ()); visit (const_item.get_expr ()); @@ -894,6 +920,7 @@ ExpandVisitor::visit (AST::ConstantItem &const_item) void ExpandVisitor::visit (AST::StaticItem &static_item) { + visit_outer_attrs (static_item); maybe_expand_type (static_item.get_type ()); visit (static_item.get_expr ()); @@ -936,6 +963,7 @@ ExpandVisitor::visit (AST::TraitItemType &item) void ExpandVisitor::visit (AST::Trait &trait) { + visit_outer_attrs (trait); for (auto &generic : trait.get_generic_params ()) visit (generic); @@ -959,6 +987,7 @@ ExpandVisitor::visit (AST::Trait &trait) void ExpandVisitor::visit (AST::InherentImpl &impl) { + visit_outer_attrs (impl); visit_inner_attrs (impl); // just expand sub-stuff - can't actually strip generic params themselves for (auto &generic : impl.get_generic_params ()) @@ -984,6 +1013,7 @@ ExpandVisitor::visit (AST::InherentImpl &impl) void ExpandVisitor::visit (AST::TraitImpl &impl) { + visit_outer_attrs (impl); visit_inner_attrs (impl); // just expand sub-stuff - can't actually strip generic params themselves for (auto ¶m : impl.get_generic_params ()) @@ -1042,6 +1072,7 @@ ExpandVisitor::visit (AST::ExternalFunctionItem &item) void ExpandVisitor::visit (AST::ExternBlock &block) { + visit_outer_attrs (block); visit_inner_attrs (block); std::function<std::unique_ptr<AST::ExternalItem> (AST::SingleASTNode)> extractor @@ -1066,7 +1097,9 @@ ExpandVisitor::visit (AST::MacroMatcher &) void ExpandVisitor::visit (AST::MacroRulesDefinition &rules_def) -{} +{ + visit_outer_attrs (rules_def); +} void ExpandVisitor::visit (AST::MetaItemPath &) @@ -1343,7 +1376,10 @@ void ExpandVisitor::visit (AST::BareFunctionType &type) { for (auto ¶m : type.get_function_params ()) - maybe_expand_type (param.get_type ()); + { + visit_outer_attrs (param); + maybe_expand_type (param.get_type ()); + } if (type.has_return_type ()) visit (type.get_return_type ()); |