gccrs: nr2.0: Adjust enum item visitors

gcc/rust/ChangeLog:

	* ast/rust-ast-visitor.cc
	(DefaultASTVisitor::visit): Make call to EnumItem visitor from
	EnumItem derived class visitors non-virtual.
	* ast/rust-collect-lang-items.cc
	(CollectLangItems::visit): Handle visitation of classes derived
	from EnumItem.
	* ast/rust-collect-lang-items.h
	(CollectLangItems::visit): Likewise.
	* resolve/rust-toplevel-name-resolver-2.0.cc
	(TopLevel::visit): Call DefaultResolver::visit on EnumItem
	instances.

Signed-off-by: Owen Avery <powerboat9.gamer@gmail.com>
This commit is contained in:
Owen Avery
2025-05-02 18:37:45 -04:00
committed by Arthur Cohen
parent 66cf64e9d2
commit 17a863d7ac
4 changed files with 38 additions and 3 deletions

View File

@@ -922,7 +922,7 @@ DefaultASTVisitor::visit (AST::EnumItem &item)
void
DefaultASTVisitor::visit (AST::EnumItemTuple &item)
{
visit (reinterpret_cast<EnumItem &> (item));
DefaultASTVisitor::visit (reinterpret_cast<EnumItem &> (item));
for (auto &field : item.get_tuple_fields ())
visit (field);
}
@@ -930,7 +930,7 @@ DefaultASTVisitor::visit (AST::EnumItemTuple &item)
void
DefaultASTVisitor::visit (AST::EnumItemStruct &item)
{
visit (reinterpret_cast<EnumItem &> (item));
DefaultASTVisitor::visit (reinterpret_cast<EnumItem &> (item));
for (auto &field : item.get_struct_fields ())
visit (field);
}
@@ -938,7 +938,7 @@ DefaultASTVisitor::visit (AST::EnumItemStruct &item)
void
DefaultASTVisitor::visit (AST::EnumItemDiscriminant &item)
{
visit (reinterpret_cast<EnumItem &> (item));
DefaultASTVisitor::visit (reinterpret_cast<EnumItem &> (item));
visit (item.get_expr ());
}

View File

@@ -109,5 +109,29 @@ CollectLangItems::visit (AST::EnumItem &item)
DefaultASTVisitor::visit (item);
}
void
CollectLangItems::visit (AST::EnumItemTuple &item)
{
maybe_add_lang_item (item);
DefaultASTVisitor::visit (item);
}
void
CollectLangItems::visit (AST::EnumItemStruct &item)
{
maybe_add_lang_item (item);
DefaultASTVisitor::visit (item);
}
void
CollectLangItems::visit (AST::EnumItemDiscriminant &item)
{
maybe_add_lang_item (item);
DefaultASTVisitor::visit (item);
}
} // namespace AST
} // namespace Rust

View File

@@ -50,6 +50,9 @@ public:
void visit (AST::Function &item) override;
void visit (AST::StructStruct &item) override;
void visit (AST::EnumItem &item) override;
void visit (AST::EnumItemTuple &item) override;
void visit (AST::EnumItemStruct &item) override;
void visit (AST::EnumItemDiscriminant &item) override;
private:
template <typename T> void maybe_add_lang_item (const T &item);

View File

@@ -374,24 +374,32 @@ void
TopLevel::visit (AST::EnumItem &variant)
{
insert_enum_variant_or_error_out (variant.get_identifier (), variant);
DefaultResolver::visit (variant);
}
void
TopLevel::visit (AST::EnumItemTuple &variant)
{
insert_enum_variant_or_error_out (variant.get_identifier (), variant);
DefaultResolver::visit (variant);
}
void
TopLevel::visit (AST::EnumItemStruct &variant)
{
insert_enum_variant_or_error_out (variant.get_identifier (), variant);
DefaultResolver::visit (variant);
}
void
TopLevel::visit (AST::EnumItemDiscriminant &variant)
{
insert_or_error_out (variant.get_identifier (), variant, Namespace::Types);
DefaultResolver::visit (variant);
}
void