typeclasses can have required methods and required functions

This commit is contained in:
ProgramSnail 2023-05-13 16:14:02 +03:00
parent 562541087e
commit 4882d458f8
11 changed files with 113 additions and 43 deletions

View file

@ -160,10 +160,17 @@ void FindSymbolsVisitor::Visit(TypeclassDefinitionStatement* node) {
current_info_.reset();
}
info.requirements.reserve(node->requirements.size());
for (size_t i = 0; i < node->requirements.size(); ++i) {
Visit(node->requirements[i].get());
info.requirements[i] = std::move(std::any_cast<info::definition::FunctionDeclaration>(current_info_));
info.function_requirements.reserve(node->function_requirements.size());
for (size_t i = 0; i < node->function_requirements.size(); ++i) {
Visit(node->function_requirements[i].get());
info.function_requirements[i] = std::move(std::any_cast<info::definition::FunctionDeclaration>(current_info_));
current_info_.reset();
}
info.method_requirements.reserve(node->method_requirements.size());
for (size_t i = 0; i < node->method_requirements.size(); ++i) {
Visit(node->method_requirements[i].get());
info.method_requirements[i] = std::move(std::any_cast<info::definition::FunctionDeclaration>(current_info_));
current_info_.reset();
}