namespace storage fix, namespace enter fix, maybe other fixes

This commit is contained in:
ProgramSnail 2023-05-13 18:53:54 +03:00
parent 4882d458f8
commit 4b4756b657
11 changed files with 250 additions and 174 deletions

View file

@ -9,7 +9,9 @@ namespace interpreter {
void FindSymbolsVisitor::Visit(Namespace* node) {
namespace_visitor_.AddEnterNamespace(node->type, node->modifier, node->base);
Visitor::Visit(&node->scope);
namespace_visitor_.ExitNamespace();
}
@ -118,6 +120,7 @@ void FindSymbolsVisitor::Visit(TypeDefinitionStatement* node) {
any_type_info.value = &node->value;
any_type_info.parent_namespace = namespace_visitor_.GetCurrentNamespace();
any_type_info.modifier = node->modifier;
std::string type = any_type_info.type.type;
@ -160,14 +163,14 @@ void FindSymbolsVisitor::Visit(TypeclassDefinitionStatement* node) {
current_info_.reset();
}
info.function_requirements.reserve(node->function_requirements.size());
info.function_requirements.resize(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());
info.method_requirements.resize(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_));