aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>2023-03-31 12:17:04 +0200
committerCohenArthur <arthur.cohen@embecosm.com>2023-04-05 08:20:48 +0000
commita7302b77e3915c55ac043401696c84fcdbb96336 (patch)
treef5e75a2f323f5b64bbe06c6ac48e531591f21b3c
parent11d6828d7428dff868c3788dfbcbaa8189d2fa50 (diff)
downloadgcc-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.cc54
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> &params)
{
for (auto &param : 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> &params)
{
for (auto &param : 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 &param : 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 &param : 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 &param : 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 &param : 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 ());