From 55c150045385469ce3dbc9c2e78768eb51a13a9d Mon Sep 17 00:00:00 2001 From: William Bell Date: Tue, 10 Jun 2025 05:19:37 +0100 Subject: [PATCH] start trying to fix memory leaks --- src/main.c | 9 +++++++-- src/parser/assignable/assign/assign.c | 2 ++ src/parser/operations/operations.c | 9 ++++++--- src/parser/parser.c | 3 +++ test.ar | 3 ++- 5 files changed, 20 insertions(+), 6 deletions(-) diff --git a/src/main.c b/src/main.c index bb8c1dc..616ffd0 100644 --- a/src/main.c +++ b/src/main.c @@ -17,7 +17,13 @@ int main(int argc, char *argv[]) { darray_init(&tokens, sizeof(Token)); - LexerState state = {path, fopen(path, "r"), 0, 0, &tokens}; + FILE * file = fopen(path, "r"); + + if (!file) { + return -1; + } + + LexerState state = {path, file, 0, 0, &tokens}; lexer(state); fclose(state.file); @@ -29,6 +35,5 @@ int main(int argc, char *argv[]) { darray_free(&tokens, free_token); darray_free(&ast, free_parsed); - return 0; } diff --git a/src/parser/assignable/assign/assign.c b/src/parser/assignable/assign/assign.c index fdf2c2b..2c10657 100644 --- a/src/parser/assignable/assign/assign.c +++ b/src/parser/assignable/assign/assign.c @@ -54,6 +54,8 @@ void free_parse_assign(void *ptr) { ParsedValue *parsedValue = ptr; ParsedAssign *parsedAssign = parsedValue->data; free_parsed(parsedAssign->to); + free(parsedAssign->to); free_parsed(parsedAssign->from); + free(parsedAssign->from); free(parsedAssign); } \ No newline at end of file diff --git a/src/parser/operations/operations.c b/src/parser/operations/operations.c index 652f454..f39224c 100644 --- a/src/parser/operations/operations.c +++ b/src/parser/operations/operations.c @@ -4,10 +4,13 @@ #include #include #include +#include ParsedValue *convert_to_operation(DArray * to_operate_on, DArray * operations) { if (to_operate_on->size == 1) { - return darray_get(to_operate_on, 0); + ParsedValue * parsedValue = malloc(sizeof(ParsedValue)); + memcpy(parsedValue, darray_get(to_operate_on, 0), sizeof(ParsedValue)); + return parsedValue; } TokenType operation = 0; DArray positions; @@ -68,8 +71,8 @@ ParsedValue *parse_operations(char *file, DArray *tokens, size_t *index, darray_push(&to_operate_on, parse_token_full(file, tokens, index, true, false)); } ParsedValue *output = convert_to_operation(&to_operate_on, &operations); - darray_free(&to_operate_on, free_parsed); - darray_free(&operations, free_parsed); + darray_free(&to_operate_on, NULL); + darray_free(&operations, NULL); return output; } diff --git a/src/parser/parser.c b/src/parser/parser.c index 43c7689..1062b11 100644 --- a/src/parser/parser.c +++ b/src/parser/parser.c @@ -17,6 +17,7 @@ #include #include #include +#include const char *ValueTypeNames[] = { "string", "assign", "identifier", "number", "if statement", "access", @@ -196,6 +197,8 @@ void free_parsed(void *ptr) { free_parse_access(parsed); break; case AST_NUMBER: + mpz_clear(parsed->data); + break; case AST_NULL: case AST_BOOLEAN: break; diff --git a/test.ar b/test.ar index 0be2816..a3dbb1c 100644 --- a/test.ar +++ b/test.ar @@ -40,4 +40,5 @@ else term.log("bruh") -mm = 10*10 - 10 \ No newline at end of file + +mm=1/2/4/2/4354/534/534//534//3422*404203420234+3432423324&&430234230||4320423040230423^384239423043024923%4432042304920.3432423423 \ No newline at end of file