Rename AST structures to Tree and relocate freeing logic

This commit is contained in:
2026-04-30 21:46:15 +02:00
parent ea55dedd07
commit 177fb971e4
17 changed files with 162 additions and 153 deletions
+5 -43
View File
@@ -3,7 +3,7 @@
#include <stdlib.h>
#include <string.h>
bool parse_module_declaration(Parser* p, Module* module) {
bool parse_module_declaration(Parser* p, ModuleTree* module) {
if (!parser_expect(p, TOKEN_MODULE, "expected keyword 'module'")) {
return false;
}
@@ -16,13 +16,13 @@ bool parse_module_declaration(Parser* p, Module* module) {
return parser_expect(p, TOKEN_SEMICOLON, "expected ';' after module name");
}
Module* parser_parse(TokenStream* ts) {
ModuleTree* parser_parse(TokenStream* ts) {
Parser* p = malloc(sizeof(Parser));
p->ts = ts;
parser_next_token(p);
Module* module = malloc(sizeof(Module));
memset(module, 0, sizeof(Module));
ModuleTree* module = malloc(sizeof(ModuleTree));
memset(module, 0, sizeof(ModuleTree));
if (!parse_module_declaration(p, module)) {
goto fail;
}
@@ -82,44 +82,6 @@ Module* parser_parse(TokenStream* ts) {
return module;
fail:
free(p);
parser_free(module);
ast_free_module(module);
return NULL;
}
void parser_free(Module* 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);
free_type_expression(&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);
free_type_expression(&module->variables[i].type);
if (module->variables[i].initializer) {
if (module->variables[i].initializer->tag == EXPRESSION_STRING) {
free((void*)module->variables[i].initializer->string);
}
free(module->variables[i].initializer);
}
}
free(module->variables);
}
free(module->name);
free(module);
}