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
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
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
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 (); };
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);
void
ExpandVisitor::visit (AST::Method &method)
{
+ visit_outer_attrs (method);
for (auto ¶m : method.get_generic_params ())
visit (param);
void
ExpandVisitor::visit (AST::Module &module)
{
+ visit_outer_attrs (module);
if (module.get_kind () == AST::Module::ModuleKind::LOADED)
{
visit_inner_attrs (module);
void
ExpandVisitor::visit (AST::ExternCrate &crate)
-{}
+{
+ visit_outer_attrs (crate);
+}
void
ExpandVisitor::visit (AST::UseTreeGlob &)
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 ())
void
ExpandVisitor::visit (AST::TypeAlias &type_alias)
{
+ visit_outer_attrs (type_alias);
visit (type_alias.get_type_aliased ());
}
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);
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);
void
ExpandVisitor::visit (AST::EnumItem &item)
-{}
+{
+ visit_outer_attrs (item);
+}
void
ExpandVisitor::visit (AST::EnumItemTuple &item)
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);
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);
void
ExpandVisitor::visit (AST::ConstantItem &const_item)
{
+ visit_outer_attrs (const_item);
maybe_expand_type (const_item.get_type ());
visit (const_item.get_expr ());
void
ExpandVisitor::visit (AST::StaticItem &static_item)
{
+ visit_outer_attrs (static_item);
maybe_expand_type (static_item.get_type ());
visit (static_item.get_expr ());
void
ExpandVisitor::visit (AST::Trait &trait)
{
+ visit_outer_attrs (trait);
for (auto &generic : trait.get_generic_params ())
visit (generic);
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 ())
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 ())
void
ExpandVisitor::visit (AST::ExternBlock &block)
{
+ visit_outer_attrs (block);
visit_inner_attrs (block);
std::function<std::unique_ptr<AST::ExternalItem> (AST::SingleASTNode)>
extractor
void
ExpandVisitor::visit (AST::MacroRulesDefinition &rules_def)
-{}
+{
+ visit_outer_attrs (rules_def);
+}
void
ExpandVisitor::visit (AST::MetaItemPath &)
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 ());