From 7aebc787c5529997e422a054398ed739ca4cddfe Mon Sep 17 00:00:00 2001 From: Carlos Maniero Date: Tue, 2 May 2023 23:45:57 -0300 Subject: parser: Fixes block parser memory leak When a error occurs during a block parser the vector that stores the nodes had been destroyed but it's nodes don't. This commit fixes this by replacing the %vector_destroy% with %ast_node_destroy_vector%. Signed-off-by: Carlos Maniero --- src/ast.c | 2 +- src/ast.h | 4 ++++ src/parser.c | 8 ++++---- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/ast.c b/src/ast.c index bac4021..5938e1d 100644 --- a/src/ast.c +++ b/src/ast.c @@ -31,7 +31,7 @@ ast_node_new(void) return node; } -static void +void ast_node_destroy_vector(vector_t *vector) { for (size_t i = 0; i < vector->size; i++) { diff --git a/src/ast.h b/src/ast.h index e541390..bdace51 100644 --- a/src/ast.h +++ b/src/ast.h @@ -124,6 +124,10 @@ typedef struct ast_node_t ast_node_t * ast_node_new(void); + +void +ast_node_destroy_vector(vector_t *vector); + void ast_node_destroy(ast_node_t *node); diff --git a/src/parser.c b/src/parser.c index f51f550..82d25f5 100644 --- a/src/parser.c +++ b/src/parser.c @@ -431,7 +431,7 @@ parser_parse_block_declarations(parser_t *parser) if (return_node == NULL) { scope_leave(parser->scope); - vector_destroy(body); + ast_node_destroy_vector(body); return NULL; } @@ -444,7 +444,7 @@ parser_parse_block_declarations(parser_t *parser) if (variable_node == NULL) { scope_leave(parser->scope); - vector_destroy(body); + ast_node_destroy_vector(body); return NULL; } @@ -457,7 +457,7 @@ parser_parse_block_declarations(parser_t *parser) if (variable_assignment == NULL) { scope_leave(parser->scope); - vector_destroy(body); + ast_node_destroy_vector(body); return NULL; } @@ -468,7 +468,7 @@ parser_parse_block_declarations(parser_t *parser) parser_error_report_unexpected_token(parser); scope_leave(parser->scope); - vector_destroy(body); + ast_node_destroy_vector(body); return NULL; } -- cgit v1.2.3