mirror of
https://codeberg.org/ProgramSnail/lang_2023.git
synced 2025-12-07 07:28:44 +00:00
parametrized_type, parametrized_typeclass, function argument, array type fixes
This commit is contained in:
parent
0dc8880c58
commit
d13faf104d
9 changed files with 32 additions and 153 deletions
|
|
@ -416,7 +416,7 @@ void BuildVisitor::Visit(AnyAnnotatedType* node) {
|
|||
|
||||
for (size_t i = 0; i + 1 < child_count; ++i) {
|
||||
current_node_ = parse_node.NthNamedChild(i + 1);
|
||||
node->typeclasses[i] = std::make_unique<TypeclassExpression>();
|
||||
node->typeclasses[i] = std::make_unique<ParametrizedTypeclass>();
|
||||
Visit(node->typeclasses[i].get());
|
||||
}
|
||||
}
|
||||
|
|
@ -915,9 +915,9 @@ void BuildVisitor::Visit(FunctionArgument& node) {
|
|||
if (current_node_type == parser::tokens::SubExpressionToken) {
|
||||
node = SubExpressionToken();
|
||||
Visit(std::get<SubExpressionToken>(node));
|
||||
} else if (current_node_type == parser::tokens::TypeSubExpression) {
|
||||
node = TypeSubExpression();
|
||||
Visit(std::get<TypeSubExpression>(node));
|
||||
} else if (current_node_type == parser::tokens::TypeExpression) {
|
||||
node = std::make_unique<TypeExpression>();
|
||||
Visit(std::get<std::unique_ptr<TypeExpression>>(node).get());
|
||||
} else {
|
||||
// error
|
||||
}
|
||||
|
|
@ -1288,7 +1288,7 @@ void BuildVisitor::Visit(TypeExpression* node) {
|
|||
size_t child_count = parse_node.NamedChildCount();
|
||||
|
||||
current_node_ = parse_node.ChildByFieldName("type");
|
||||
Visit(node->type);
|
||||
Visit(&node->type);
|
||||
++excluded_child_count;
|
||||
|
||||
current_node_ = current_node_.NextSibling();
|
||||
|
|
@ -1310,7 +1310,7 @@ void BuildVisitor::Visit(TypeExpression* node) {
|
|||
|
||||
for (size_t i = 0; i + excluded_child_count < child_count; ++i) {
|
||||
current_node_ = parse_node.NthNamedChild(i);
|
||||
Visit(node->path[i]);
|
||||
Visit(&node->path[i]);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1368,35 +1368,6 @@ void BuildVisitor::Visit(ExtendedScopedAnyType* node) {
|
|||
|
||||
// Typeclass
|
||||
|
||||
void BuildVisitor::Visit(TypeclassExpression* node) {
|
||||
auto parse_node = current_node_;
|
||||
|
||||
current_node_ = parse_node.ChildByFieldName("typeclass");
|
||||
Visit(node->typeclass);
|
||||
|
||||
current_node_ = parse_node;
|
||||
}
|
||||
|
||||
void BuildVisitor::Visit(TypeclassSubExpression& node) {
|
||||
auto parse_node = current_node_;
|
||||
|
||||
current_node_ = parse_node.NthNamedChild(0);
|
||||
|
||||
std::string current_node_type = current_node_.GetType();
|
||||
|
||||
if (current_node_type == parser::tokens::TypeclassIdentifier) {
|
||||
node = std::make_unique<TypeclassIdentifier>();
|
||||
Visit(std::get<std::unique_ptr<TypeclassIdentifier>>(node).get());
|
||||
} else if (current_node_type == parser::tokens::ParametrizedTypeclass) {
|
||||
node = std::make_unique<ParametrizedTypeclass>();
|
||||
Visit(std::get<std::unique_ptr<ParametrizedTypeclass>>(node).get());
|
||||
} else {
|
||||
// error
|
||||
}
|
||||
|
||||
current_node_ = parse_node;
|
||||
}
|
||||
|
||||
void BuildVisitor::Visit(ParametrizedTypeclass* node) {
|
||||
auto parse_node = current_node_;
|
||||
|
||||
|
|
@ -1419,28 +1390,6 @@ void BuildVisitor::Visit(ParametrizedTypeclass* node) {
|
|||
|
||||
// Typeclass & Type -----------------
|
||||
|
||||
void BuildVisitor::Visit(TypeSubExpression& node) {
|
||||
auto parse_node = current_node_;
|
||||
|
||||
current_node_ = parse_node.NthNamedChild(0);
|
||||
|
||||
std::string current_node_type = current_node_.GetType();
|
||||
|
||||
if (current_node_type == parser::tokens::TypeIdentifier) {
|
||||
node = std::make_unique<TypeIdentifier>();
|
||||
Visit(std::get<std::unique_ptr<TypeIdentifier>>(node).get());
|
||||
} else if (current_node_type == parser::tokens::AbstractTypeIdentifier) {
|
||||
node = std::make_unique<AbstractTypeIdentifier>();
|
||||
Visit(std::get<std::unique_ptr<AbstractTypeIdentifier>>(node).get());
|
||||
} else if (current_node_type == parser::tokens::ParametrizedType) {
|
||||
node = std::make_unique<ParametrizedType>();
|
||||
Visit(std::get<std::unique_ptr<ParametrizedType>>(node).get());
|
||||
} else {
|
||||
// error
|
||||
}
|
||||
|
||||
current_node_ = parse_node;
|
||||
}
|
||||
|
||||
void BuildVisitor::Visit(ParametrizedType* node) {
|
||||
auto parse_node = current_node_;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue