From 1963e7dddfaeebb22e3657adc1a7ee86fda50d52 Mon Sep 17 00:00:00 2001 From: A404M Date: Sun, 19 Jan 2025 21:55:45 +0330 Subject: fix memory leaks --- src/compiler/ast-tree.c | 3 +++ src/compiler/code-generator.c | 12 +++++++++++- src/compiler/code-generator.h | 2 ++ 3 files changed, 16 insertions(+), 1 deletion(-) (limited to 'src/compiler') diff --git a/src/compiler/ast-tree.c b/src/compiler/ast-tree.c index f25fc51..52a41c9 100644 --- a/src/compiler/ast-tree.c +++ b/src/compiler/ast-tree.c @@ -59,6 +59,8 @@ void astTreeDestroy(AstTree tree) { for (size_t i = 0; i < metadata->expressions_size; ++i) { astTreeDestroy(metadata->expressions[i]); } + free(metadata->expressions); + free(metadata); case AST_TREE_TOKEN_KEYWORD_PRINT: return; case AST_TREE_TOKEN_NONE: @@ -75,6 +77,7 @@ void astTreeDelete(AstTree *tree) { void astTreeRootDelete(AstTreeRoot *root) { for (size_t i = 0; i < root->variables.size; ++i) { astTreeDelete(root->variables.data[i]->value); + free(root->variables.data[i]); } free(root->variables.data); free(root); diff --git a/src/compiler/code-generator.c b/src/compiler/code-generator.c index 0de098c..67fba4c 100644 --- a/src/compiler/code-generator.c +++ b/src/compiler/code-generator.c @@ -6,6 +6,14 @@ #include #include +void codeGeneratorDelete(CodeGeneratorCodes *code) { + for (size_t i = 0; i < code->codes_size; ++i) { + continue; + } + free(code->codes); + free(code); +} + CodeGeneratorCode createGenerateCode(char *label_begin, char *label_end, CodeGeneratorInstruction instruction) { CodeGeneratorCode code = { @@ -119,7 +127,6 @@ char *codeGeneratorToFlatASM(const CodeGeneratorCodes *codes) { size_t fasm_size = TEMPLATE_LEN + 1; char *fasm = a404m_malloc(fasm_size * sizeof(*fasm)); size_t fasm_inserted = 0; - fasm[0] = '\0'; codeGeneratorAppendFlatASMCommand(&fasm, &fasm_size, &fasm_inserted, TEMPLATE, TEMPLATE_LEN); @@ -165,6 +172,7 @@ bool codeGeneratorFlatASMExec(const char *filePath, const char *fasm) { FILE *file = fopen(asmFilePath, "w"); if (file == NULL) { + free(asmFilePath); return false; } @@ -174,6 +182,7 @@ bool codeGeneratorFlatASMExec(const char *filePath, const char *fasm) { char *command; asprintf(&command, "fasm -m 102400 \"%s\" \"%s\"", asmFilePath, filePath); + free(asmFilePath); if (system(command) != 0) { free(command); @@ -187,6 +196,7 @@ bool codeGeneratorFlatASMExec(const char *filePath, const char *fasm) { free(command); return false; } + free(command); return true; } diff --git a/src/compiler/code-generator.h b/src/compiler/code-generator.h index 3232fb3..f9ac6c9 100644 --- a/src/compiler/code-generator.h +++ b/src/compiler/code-generator.h @@ -20,6 +20,8 @@ typedef struct CodeGeneratorCodes { size_t codes_size; } CodeGeneratorCodes; +void codeGeneratorDelete(CodeGeneratorCodes *code); + CodeGeneratorCode createGenerateCode(char *label_begin, char *label_end, CodeGeneratorInstruction instruction); -- cgit v1.2.3