Cleanup
This commit is contained in:
@@ -11,7 +11,7 @@
|
|||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
/** @brief The name of the module being imported. */
|
/** @brief The name of the module being imported. */
|
||||||
const char* module_name;
|
char* module_name;
|
||||||
|
|
||||||
/** @brief Whether the import is public or not. */
|
/** @brief Whether the import is public or not. */
|
||||||
bool is_public;
|
bool is_public;
|
||||||
@@ -53,7 +53,7 @@ struct TypeExpression{
|
|||||||
*/
|
*/
|
||||||
typedef struct {
|
typedef struct {
|
||||||
/** @brief The name of the alias. */
|
/** @brief The name of the alias. */
|
||||||
const char* name;
|
char* name;
|
||||||
|
|
||||||
/** @brief The value of the alias. */
|
/** @brief The value of the alias. */
|
||||||
TypeExpression value;
|
TypeExpression value;
|
||||||
@@ -68,7 +68,7 @@ typedef struct {
|
|||||||
*/
|
*/
|
||||||
typedef struct {
|
typedef struct {
|
||||||
/** @brief The name of the module. */
|
/** @brief The name of the module. */
|
||||||
const char* name;
|
char* name;
|
||||||
|
|
||||||
/** @brief The list of imports in the module. */
|
/** @brief The list of imports in the module. */
|
||||||
ImportDeclaration* imports;
|
ImportDeclaration* imports;
|
||||||
|
|||||||
+10
-4
@@ -224,6 +224,7 @@ Module* parser_parse(TokenStream* ts) {
|
|||||||
parser_next_token(p);
|
parser_next_token(p);
|
||||||
|
|
||||||
Module* module = malloc(sizeof(Module));
|
Module* module = malloc(sizeof(Module));
|
||||||
|
memset(module, 0, sizeof(Module));
|
||||||
if (!parse_declaration_module(p, module)) {
|
if (!parse_declaration_module(p, module)) {
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
@@ -265,20 +266,25 @@ void free_type_expression(TypeExpression* expr) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void parser_free(Module* module) {
|
void parser_free(Module* module) {
|
||||||
if (module == NULL) return;
|
if (module == NULL) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (module->imports != NULL) {
|
if (module->imports != NULL) {
|
||||||
for(size_t i = 0; i < module->import_count; i++) {
|
for(size_t i = 0; i < module->import_count; i++) {
|
||||||
free((void*)module->imports[i].module_name);
|
free(module->imports[i].module_name);
|
||||||
}
|
}
|
||||||
free(module->imports);
|
free(module->imports);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (module->aliases != NULL) {
|
if (module->aliases != NULL) {
|
||||||
for(size_t i = 0; i < module->alias_count; i++) {
|
for(size_t i = 0; i < module->alias_count; i++) {
|
||||||
free((void*)module->aliases[i].name);
|
free(module->aliases[i].name);
|
||||||
free_type_expression(&module->aliases[i].value);
|
free_type_expression(&module->aliases[i].value);
|
||||||
}
|
}
|
||||||
free(module->aliases);
|
free(module->aliases);
|
||||||
}
|
}
|
||||||
free((void*)module->name);
|
|
||||||
|
free(module->name);
|
||||||
free(module);
|
free(module);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user