From: Pierre-Emmanuel Patry <[email protected]>
Add an helper function to keep most of the attribute checking short.
gcc/rust/ChangeLog:
* checks/errors/rust-builtin-attribute-checker.cc
(BuiltinAttributeChecker::visit):
Deduplicate lines using the new templated function within the visitor
functions.
* checks/errors/rust-builtin-attribute-checker.h (class
BuiltinAttributeChecker):
Create a new templated function that achieves the default attribute
checking operations.
Signed-off-by: Pierre-Emmanuel Patry <[email protected]>
---
.../errors/rust-builtin-attribute-checker.cc | 67 ++++---------------
.../errors/rust-builtin-attribute-checker.h | 7 ++
2 files changed, 21 insertions(+), 53 deletions(-)
diff --git a/gcc/rust/checks/errors/rust-builtin-attribute-checker.cc
b/gcc/rust/checks/errors/rust-builtin-attribute-checker.cc
index 8cb251f7686..a2bf83f93cd 100644
--- a/gcc/rust/checks/errors/rust-builtin-attribute-checker.cc
+++ b/gcc/rust/checks/errors/rust-builtin-attribute-checker.cc
@@ -367,28 +367,19 @@ BuiltinAttributeChecker::visit (AST::Attribute &attribute)
void
BuiltinAttributeChecker::visit (AST::Module &module)
{
- for (auto &attr : module.get_outer_attrs ())
- check_valid_attribute_for_item (attr, module);
-
- AST::DefaultASTVisitor::visit (module);
+ default_outer_attribute_check (module);
}
void
-BuiltinAttributeChecker::visit (AST::ExternCrate &crate)
+BuiltinAttributeChecker::visit (AST::ExternCrate &extern_crate)
{
- for (auto &attr : crate.get_outer_attrs ())
- check_valid_attribute_for_item (attr, crate);
-
- AST::DefaultASTVisitor::visit (crate);
+ default_outer_attribute_check (extern_crate);
}
void
BuiltinAttributeChecker::visit (AST::UseDeclaration &declaration)
{
- for (auto &attr : declaration.get_outer_attrs ())
- check_valid_attribute_for_item (attr, declaration);
-
- AST::DefaultASTVisitor::visit (declaration);
+ default_outer_attribute_check (declaration);
}
void
@@ -492,55 +483,37 @@ BuiltinAttributeChecker::visit (AST::Function &function)
void
BuiltinAttributeChecker::visit (AST::TypeAlias &alias)
{
- for (auto &attr : alias.get_outer_attrs ())
- check_valid_attribute_for_item (attr, alias);
-
- AST::DefaultASTVisitor::visit (alias);
+ default_outer_attribute_check (alias);
}
void
BuiltinAttributeChecker::visit (AST::StructStruct &struct_item)
{
- for (auto &attr : struct_item.get_outer_attrs ())
- check_valid_attribute_for_item (attr, struct_item);
-
- AST::DefaultASTVisitor::visit (struct_item);
+ default_outer_attribute_check (struct_item);
}
void
BuiltinAttributeChecker::visit (AST::TupleStruct &tuple_struct)
{
- for (auto &attr : tuple_struct.get_outer_attrs ())
- check_valid_attribute_for_item (attr, tuple_struct);
-
- AST::DefaultASTVisitor::visit (tuple_struct);
+ default_outer_attribute_check (tuple_struct);
}
void
BuiltinAttributeChecker::visit (AST::Enum &enumeration)
{
- for (auto &attr : enumeration.get_outer_attrs ())
- check_valid_attribute_for_item (attr, enumeration);
-
- AST::DefaultASTVisitor::visit (enumeration);
+ default_outer_attribute_check (enumeration);
}
void
BuiltinAttributeChecker::visit (AST::Union &u)
{
- for (auto &attr : u.get_outer_attrs ())
- check_valid_attribute_for_item (attr, u);
-
- AST::DefaultASTVisitor::visit (u);
+ default_outer_attribute_check (u);
}
void
BuiltinAttributeChecker::visit (AST::ConstantItem &item)
{
- for (auto &attr : item.get_outer_attrs ())
- check_valid_attribute_for_item (attr, item);
-
- AST::DefaultASTVisitor::visit (item);
+ default_outer_attribute_check (item);
}
void
@@ -565,37 +538,25 @@ BuiltinAttributeChecker::visit (AST::StaticItem &item)
void
BuiltinAttributeChecker::visit (AST::Trait &trait)
{
- for (auto &attr : trait.get_outer_attrs ())
- check_valid_attribute_for_item (attr, trait);
-
- AST::DefaultASTVisitor::visit (trait);
+ default_outer_attribute_check (trait);
}
void
BuiltinAttributeChecker::visit (AST::InherentImpl &impl)
{
- for (auto &attr : impl.get_outer_attrs ())
- check_valid_attribute_for_item (attr, impl);
-
- AST::DefaultASTVisitor::visit (impl);
+ default_outer_attribute_check (impl);
}
void
BuiltinAttributeChecker::visit (AST::TraitImpl &impl)
{
- for (auto &attr : impl.get_outer_attrs ())
- check_valid_attribute_for_item (attr, impl);
-
- AST::DefaultASTVisitor::visit (impl);
+ default_outer_attribute_check (impl);
}
void
BuiltinAttributeChecker::visit (AST::ExternBlock &block)
{
- for (auto &attr : block.get_outer_attrs ())
- check_valid_attribute_for_item (attr, block);
-
- AST::DefaultASTVisitor::visit (block);
+ default_outer_attribute_check (block);
}
} // namespace Analysis
diff --git a/gcc/rust/checks/errors/rust-builtin-attribute-checker.h
b/gcc/rust/checks/errors/rust-builtin-attribute-checker.h
index 6717de8abf6..957243a1a21 100644
--- a/gcc/rust/checks/errors/rust-builtin-attribute-checker.h
+++ b/gcc/rust/checks/errors/rust-builtin-attribute-checker.h
@@ -28,6 +28,13 @@ class BuiltinAttributeChecker : public AST::DefaultASTVisitor
{
using AST::DefaultASTVisitor::visit;
+ template <class I> void default_outer_attribute_check (I item)
+ {
+ for (auto &attr : item.get_outer_attrs ())
+ check_valid_attribute_for_item (attr, item);
+ AST::DefaultASTVisitor::visit (item);
+ }
+
public:
BuiltinAttributeChecker ();
void go (AST::Crate &crate);
--
2.50.1