#include "module.h" #include "expression.h" #include void ast_free_type(TypeTree* type); void ast_free_module(ModuleTree* module) { if (module == NULL) { return; } if (module->imports != NULL) { for(size_t i = 0; i < module->import_count; i++) { free(module->imports[i].module_name); } free(module->imports); } if (module->aliases != NULL) { for(size_t i = 0; i < module->alias_count; i++) { free((void*)module->aliases[i].name); ast_free_type(&module->aliases[i].value); } free(module->aliases); } if (module->variables != NULL) { for(size_t i = 0; i < module->variable_count; i++) { free(module->variables[i].name); ast_free_type(&module->variables[i].type); if (module->variables[i].initializer) { if (module->variables[i].initializer->tag == EXPRESSION_TREE_STRING) { free((void*)module->variables[i].initializer->string); } free(module->variables[i].initializer); } } free(module->variables); } free(module->name); free(module); }