Add array parsing. Missing rest of pipeline.

This commit is contained in:
2024-07-13 11:45:44 +02:00
parent ae54f1374e
commit c5758bd023
5 changed files with 116 additions and 2 deletions

20
AST.jai
View File

@@ -54,6 +54,8 @@ AST_Node :: struct {
token : Token;
array_field : bool;
source_location : Source_Range;
type_variable : Type_Variable_Handle;
@@ -105,7 +107,15 @@ pretty_print_field :: (node : *AST_Node, indentation : int, builder : *String_Bu
print_to_builder(builder, tprint("(:= %", node.name));
if node.kind != .Unnamed_Field && node.token.ident_value.count > 0 {
print_to_builder(builder, tprint(" %", node.token.ident_value));
if node.array_field {
append(builder, " [");
pretty_print_node(node.children[0], 0, builder);
append(builder, "].");
print_to_builder(builder, "%", node.token.ident_value);
} else {
print_to_builder(builder, " %", node.token.ident_value);
}
}
for hint : node.hint_tokens {
@@ -114,7 +124,7 @@ pretty_print_field :: (node : *AST_Node, indentation : int, builder : *String_Bu
}
}
if node.children.count > 0 {
if !node.array_field && node.children.count > 0 {
append(builder, " ");
pretty_print_children(node, indentation, builder);
}
@@ -271,10 +281,16 @@ pretty_print_node :: (node : *AST_Node, indentation : int, builder : *String_Bui
pretty_print_variable :: (node : *AST_Node, indentation : int, builder : *String_Builder) {
indent(builder, indentation);
print_to_builder(builder, "%", node.name);
for child : node.children {
print("%\n", child.kind);
if child.kind == .Variable {
append(builder, ".");
pretty_print_variable(child, indentation, builder);
} else if child.kind == .Unary {
append(builder, "[");
pretty_print_node(child.children[0], 0, builder);
append(builder, "]");
}
}
}