diff --git a/src/ast/ast.c b/src/ast/ast.c index 2397f34..3873e1c 100644 --- a/src/ast/ast.c +++ b/src/ast/ast.c @@ -1,11 +1,12 @@ #include -#include #include #include #include struct AST_Node_t *AST_new_node(enum AST_SyntaxElement_t kind, const char* value) { + DEBUG("creating new AST node: %d \"%s\"", kind, value); + struct AST_Node_t *node = malloc(sizeof(struct AST_Node_t)); if (node == NULL) { @@ -23,6 +24,8 @@ struct AST_Node_t *AST_new_node(enum AST_SyntaxElement_t kind, const char* value } const char* AST_node_to_string(struct AST_Node_t* node) { + DEBUG("converting AST node to string: %p", node); + const char* string = "unknown"; switch (node->kind) { @@ -47,12 +50,16 @@ const char* AST_node_to_string(struct AST_Node_t* node) { } void AST_push_node(struct AST_Node_t *owner, struct AST_Node_t *child) { + DEBUG("Adding new node %p to %p", child, owner); + // if there are no children for now if (owner->child_count == 0) { + DEBUG("Allocating new children array"); owner->children = malloc(sizeof(struct AST_Node_t *)); } else { - size_t size = sizeof(struct AST_Node_t *) * (owner->child_count + 1); + DEBUG("Rellocating old children array"); + const size_t size = sizeof(struct AST_Node_t *) * (owner->child_count + 1); owner->children = realloc(owner->children, size); } @@ -64,6 +71,8 @@ void AST_push_node(struct AST_Node_t *owner, struct AST_Node_t *child) { } struct AST_Node_t *AST_get_node(struct AST_Node_t *owner, size_t idx) { + DEBUG("retrvieng node %d from %p", idx, owner); + if (owner == NULL) { PANIC("AST owner node is NULL"); } @@ -82,14 +91,18 @@ struct AST_Node_t *AST_get_node(struct AST_Node_t *owner, size_t idx) { } void AST_delete_node(struct AST_Node_t *node) { + DEBUG("Deleting AST node: %p", node); + if (node == NULL) { PANIC("Node to free is NULL"); } - if (node->children != NULL) { - for (size_t i = 0; i < node->child_count; i++) { - AST_delete_node(node->children[i]); - } + if (node->children == NULL) { + return; + } + + for (size_t i = 0; i < node->child_count; i++) { + AST_delete_node(node->children[i]); } } @@ -97,7 +110,9 @@ static void __AST_visit_nodes_recurse2(struct AST_Node_t *root, void (*for_each)(struct AST_Node_t *node, size_t depth), size_t depth) { - (for_each)(root, 0); + DEBUG("Recursive visit of %p at %d with %p", root, depth, for_each); + + (for_each)(root, depth); for (size_t i = 0; i < root->child_count; i++) { __AST_visit_nodes_recurse2(root->children[i], for_each, depth + 1); @@ -107,35 +122,44 @@ static void __AST_visit_nodes_recurse2(struct AST_Node_t *root, void AST_visit_nodes_recurse(struct AST_Node_t *root, void (*for_each)(struct AST_Node_t *node, size_t depth)) { + DEBUG("Starting recursive visit of %p with %p", root, for_each); __AST_visit_nodes_recurse2(root, for_each, 0); } -void AST_fprint_graphviz_node_definition(FILE* stream, struct AST_Node_t* node) { +static void __AST_fprint_graphviz_node_definition(FILE* stream, struct AST_Node_t* node) { + DEBUG("Printing graphviz definition of %p", node); fprintf(stream, "\tnode%p [label=\"%s\"]\n", (void*) node, AST_node_to_string(node)); - if (node->children != NULL) { - for (size_t i = 0; i < node->child_count; i++) { - AST_fprint_graphviz_node_definition(stream, node->children[i]); - } + if (node->children == NULL) { + return; + } + + for (size_t i = 0; i < node->child_count; i++) { + __AST_fprint_graphviz_node_definition(stream, node->children[i]); } } -void AST_fprint_graphviz_node_connection(FILE* stream, struct AST_Node_t* node) { +static void __AST_fprint_graphviz_node_connection(FILE* stream, struct AST_Node_t* node) { + DEBUG("Printing graphviz connection of %p", node); - if (node->children != NULL) { - for (size_t i = 0; i < node->child_count; i++) { - fprintf(stream, "\tnode%p -- node%p\n", (void*) node, (void*) node->children[i]); - AST_fprint_graphviz_node_connection(stream, node->children[i]); - } + if (node->children == NULL) { + return; + } + + for (size_t i = 0; i < node->child_count; i++) { + fprintf(stream, "\tnode%p -- node%p\n", (void*) node, (void*) node->children[i]); + __AST_fprint_graphviz_node_connection(stream, node->children[i]); } } void AST_fprint_graphviz(FILE* stream, struct AST_Node_t* root) { + DEBUG("Starting print of graphviz graph of %p", root); + fprintf(stream, "graph {\n"); - AST_fprint_graphviz_node_definition(stream, root); - AST_fprint_graphviz_node_connection(stream, root); + __AST_fprint_graphviz_node_definition(stream, root); + __AST_fprint_graphviz_node_connection(stream, root); fprintf(stream, "}\n"); } diff --git a/src/main.c b/src/main.c index b94149a..89189b0 100644 --- a/src/main.c +++ b/src/main.c @@ -2,7 +2,6 @@ #include #include #include -#include #define LOG_LEVEL LOG_LEVEL_DEBUG