44 lines
1.2 KiB
C
44 lines
1.2 KiB
C
#include "module.h"
|
|
#include "expression.h"
|
|
#include <stdlib.h>
|
|
|
|
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);
|
|
}
|