start trying to fix memory leaks

This commit is contained in:
2025-06-10 05:19:37 +01:00
parent 86c0eabfde
commit 55c1500453
5 changed files with 20 additions and 6 deletions

View File

@@ -17,7 +17,13 @@ int main(int argc, char *argv[]) {
darray_init(&tokens, sizeof(Token)); 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); lexer(state);
fclose(state.file); fclose(state.file);
@@ -29,6 +35,5 @@ int main(int argc, char *argv[]) {
darray_free(&tokens, free_token); darray_free(&tokens, free_token);
darray_free(&ast, free_parsed); darray_free(&ast, free_parsed);
return 0; return 0;
} }

View File

@@ -54,6 +54,8 @@ void free_parse_assign(void *ptr) {
ParsedValue *parsedValue = ptr; ParsedValue *parsedValue = ptr;
ParsedAssign *parsedAssign = parsedValue->data; ParsedAssign *parsedAssign = parsedValue->data;
free_parsed(parsedAssign->to); free_parsed(parsedAssign->to);
free(parsedAssign->to);
free_parsed(parsedAssign->from); free_parsed(parsedAssign->from);
free(parsedAssign->from);
free(parsedAssign); free(parsedAssign);
} }

View File

@@ -4,10 +4,13 @@
#include <stddef.h> #include <stddef.h>
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h>
ParsedValue *convert_to_operation(DArray * to_operate_on, DArray * operations) { ParsedValue *convert_to_operation(DArray * to_operate_on, DArray * operations) {
if (to_operate_on->size == 1) { 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; TokenType operation = 0;
DArray positions; 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)); darray_push(&to_operate_on, parse_token_full(file, tokens, index, true, false));
} }
ParsedValue *output = convert_to_operation(&to_operate_on, &operations); ParsedValue *output = convert_to_operation(&to_operate_on, &operations);
darray_free(&to_operate_on, free_parsed); darray_free(&to_operate_on, NULL);
darray_free(&operations, free_parsed); darray_free(&operations, NULL);
return output; return output;
} }

View File

@@ -17,6 +17,7 @@
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include <gmp.h>
const char *ValueTypeNames[] = { const char *ValueTypeNames[] = {
"string", "assign", "identifier", "number", "if statement", "access", "string", "assign", "identifier", "number", "if statement", "access",
@@ -196,6 +197,8 @@ void free_parsed(void *ptr) {
free_parse_access(parsed); free_parse_access(parsed);
break; break;
case AST_NUMBER: case AST_NUMBER:
mpz_clear(parsed->data);
break;
case AST_NULL: case AST_NULL:
case AST_BOOLEAN: case AST_BOOLEAN:
break; break;

View File

@@ -40,4 +40,5 @@ else term.log("bruh")
mm = 10*10 - 10
mm=1/2/4/2/4354/534/534//534//3422*404203420234+3432423324&&430234230||4320423040230423^384239423043024923%4432042304920.3432423423