From 9cf524df8c94920d7c7058692f2f83a95a4006e0 Mon Sep 17 00:00:00 2001 From: Flavian Kaufmann Date: Tue, 20 May 2025 11:31:50 +0200 Subject: hashmap for context --- src/ast.c | 40 ++++++++++++++++++++++------------------ 1 file changed, 22 insertions(+), 18 deletions(-) (limited to 'src/ast.c') diff --git a/src/ast.c b/src/ast.c index acc7c9e..5460c87 100644 --- a/src/ast.c +++ b/src/ast.c @@ -1,10 +1,13 @@ +#include "ast.h" #include #include #include -#include "ast.h" +#include + static ASTNode *new_node(NodeType type) { ASTNode *node = malloc(sizeof(ASTNode)); + assert(node); node->type = type; return node; } @@ -51,6 +54,7 @@ ASTNode *ast_int(int val) { ASTNode *ast_var(char *name) { ASTNode *node = new_node(NT_VAR); node->u.d_var.name = strdup(name); + assert(node->u.d_var.name); return node; } @@ -84,27 +88,27 @@ ASTNode *ast_rop(ROp rop, ASTNode *aexp1, ASTNode *aexp2) { return node; } -void free_ast(ASTNode *node) { +void ast_free(ASTNode *node) { if (!node) return; switch (node->type) { case NT_SKIP: break; case NT_ASSIGN: - free_ast(node->u.d_assign.var); - free_ast(node->u.d_assign.aexp); + ast_free(node->u.d_assign.var); + ast_free(node->u.d_assign.aexp); break; case NT_SEQ: - free_ast(node->u.d_seq.stm1); - free_ast(node->u.d_seq.stm2); + ast_free(node->u.d_seq.stm1); + ast_free(node->u.d_seq.stm2); break; case NT_IF: - free_ast(node->u.d_if.bexp); - free_ast(node->u.d_if.stm1); - free_ast(node->u.d_if.stm2); + ast_free(node->u.d_if.bexp); + ast_free(node->u.d_if.stm1); + ast_free(node->u.d_if.stm2); break; case NT_WHILE: - free_ast(node->u.d_while.bexp); - free_ast(node->u.d_while.stm); + ast_free(node->u.d_while.bexp); + ast_free(node->u.d_while.stm); break; case NT_INT: break; @@ -112,19 +116,19 @@ void free_ast(ASTNode *node) { free(node->u.d_var.name); break; case NT_AOP: - free_ast(node->u.d_aop.aexp1); - free_ast(node->u.d_aop.aexp2); + ast_free(node->u.d_aop.aexp1); + ast_free(node->u.d_aop.aexp2); break; case NT_BOP: - free_ast(node->u.d_bop.bexp1); - free_ast(node->u.d_bop.bexp2); + ast_free(node->u.d_bop.bexp1); + ast_free(node->u.d_bop.bexp2); break; case NT_ROP: - free_ast(node->u.d_rop.aexp1); - free_ast(node->u.d_rop.aexp2); + ast_free(node->u.d_rop.aexp1); + ast_free(node->u.d_rop.aexp2); break; case NT_NOT: - free_ast(node->u.d_not.bexp); + ast_free(node->u.d_not.bexp); break; } free(node); -- cgit v1.2.3