From d37c54d74d848435e9e28963529e6e5ae04a877d Mon Sep 17 00:00:00 2001 From: Clemens Paumgarten <clemenspaumgarten@gmail.com> Date: Mon, 17 Jun 2019 17:04:12 +0200 Subject: [PATCH] fix symbol delete --- src/symbol_table.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/symbol_table.c b/src/symbol_table.c index 32b148c..3defd3e 100644 --- a/src/symbol_table.c +++ b/src/symbol_table.c @@ -20,6 +20,7 @@ struct mcc_symbol *mcc_symbol_new_symbol_variable(char* variable_name, enum mcc_ symbol -> variable_name = variable_name; symbol -> data_type = data_type; symbol -> symbol_type = MCC_SYMBOL_TYPE_VARIABLE; + symbol -> func_arguments = NULL; return symbol; } @@ -32,6 +33,7 @@ struct mcc_symbol *mcc_symbol_new_symbol_array(char* variable_name, enum mcc_ast symbol -> variable_name = variable_name; symbol -> data_type = data_type; symbol -> array_size = array_size; + symbol -> func_arguments = NULL; return symbol; } @@ -68,7 +70,7 @@ void mcc_symbol_delete_symbol(void *symbol) { struct mcc_symbol *s = (struct mcc_symbol *) symbol; if (s != NULL) { - if (s -> func_arguments) { + if (s -> func_arguments != NULL) { mcc_delete_array(s ->func_arguments, NULL); } } @@ -81,7 +83,7 @@ struct mcc_symbol_table *mcc_symbol_table_new_table( struct mcc_symbol_table *table = malloc(sizeof(*table)); - table ->inner_tables = mcc_create_dynamic_array(MCC_SYMBOL_TABLE_CHILDREN_SIZE); + table -> inner_tables = mcc_create_dynamic_array(MCC_SYMBOL_TABLE_CHILDREN_SIZE); table -> symbols = mcc_create_dynamic_array(MCC_SYMBOL_TABLE_SYMBOL_SIZE); table -> parent = parent; @@ -89,12 +91,15 @@ struct mcc_symbol_table *mcc_symbol_table_new_table( } void mcc_symbol_table_delete_table(void *table) { - struct mcc_symbol_table *st = (struct mcc_symbol_table *) table; // Delete symbols assert(table); + struct mcc_symbol_table *st = (struct mcc_symbol_table *) table; + + + mcc_delete_array(st -> symbols, mcc_symbol_delete_symbol); - mcc_delete_array(st ->inner_tables, mcc_symbol_table_delete_table); + mcc_delete_array(st -> inner_tables, mcc_symbol_table_delete_table); free(table); } -- GitLab