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

@ -269,14 +269,15 @@ void BuildVisitor::Visit(TypeclassDefinitionStatement* node) {
size_t child_count = parse_node.NamedChildCount();
if (child_count > 1) {
node->requirements.resize(child_count - 1);
for (size_t i = 0; i + 1 < child_count; ++i) {
current_node_ = parse_node.NthNamedChild(i + 1);
node->requirements[i] = std::make_unique<FunctionDeclaration>();
Visit(node->requirements[i].get());
}
for (size_t i = 0; i + 1 < child_count; ++i) {
current_node_ = parse_node.NthNamedChild(i + 1);
if (parse_node.PreviousSibling().GetValue() != "var") {
node->function_requirements.push_back(std::make_unique<FunctionDeclaration>());
Visit(node->function_requirements.back().get());
} else {
node->method_requirements.push_back(std::make_unique<FunctionDeclaration>());
Visit(node->method_requirements.back().get());
}
}
current_node_ = parse_node;