diff options
author | A404M <ahmadmahmoudiprogrammer@gmail.com> | 2025-02-12 17:19:20 +0330 |
---|---|---|
committer | A404M <ahmadmahmoudiprogrammer@gmail.com> | 2025-02-12 17:19:20 +0330 |
commit | 142d889fc769532cae922c7ac4b0e80423d671d1 (patch) | |
tree | 5af0fc81648a9adea13ab68293cfb22fd964b726 /src/compiler/ast-tree.c | |
parent | 188fc08d3b3095a843c24207fe3a73999b2894fb (diff) |
fix some leaks
Diffstat (limited to 'src/compiler/ast-tree.c')
-rw-r--r-- | src/compiler/ast-tree.c | 27 |
1 files changed, 21 insertions, 6 deletions
diff --git a/src/compiler/ast-tree.c b/src/compiler/ast-tree.c index aeb1391..f01e251 100644 --- a/src/compiler/ast-tree.c +++ b/src/compiler/ast-tree.c @@ -221,8 +221,13 @@ void astTreePrint(const AstTree *tree, int indent) { printf(",\n"); for (int i = 0; i < indent; ++i) printf(" "); - printf("body=\n"); + printf("ifBody=\n"); astTreePrint(metadata->ifBody, indent + 1); + printf(",\n"); + for (int i = 0; i < indent; ++i) + printf(" "); + printf("elseBody=\n"); + astTreePrint(metadata->elseBody, indent + 1); printf("\n"); for (int i = 0; i < indent; ++i) printf(" "); @@ -348,6 +353,9 @@ void astTreeDestroy(AstTree tree) { AstTreeIf *metadata = tree.metadata; astTreeDelete(metadata->condition); astTreeDelete(metadata->ifBody); + if (metadata->elseBody != NULL) { + astTreeDelete(metadata->elseBody); + } free(metadata); } return; @@ -1252,12 +1260,12 @@ AstTree *astTreeParseIf(ParserNode *parserNode, AstTreeHelper *helper) { } AstTree *elseBody; - if(node_metadata->elseBody != NULL){ + if (node_metadata->elseBody != NULL) { elseBody = astTreeParse(node_metadata->elseBody, helper); - if(elseBody == NULL){ + if (elseBody == NULL) { return NULL; } - }else{ + } else { elseBody = NULL; } @@ -1887,7 +1895,9 @@ bool setTypesIf(AstTree *tree, AstTreeFunction *function) { AstTreeIf *metadata = tree->metadata; if (!setAllTypes(metadata->condition, function) || - !setAllTypes(metadata->ifBody, function)) { + !setAllTypes(metadata->ifBody, function) || + (metadata->elseBody != NULL && + !setAllTypes(metadata->elseBody, function))) { return false; } @@ -1897,7 +1907,12 @@ bool setTypesIf(AstTree *tree, AstTreeFunction *function) { return false; } - tree->type = &AST_TREE_VOID_TYPE; + if (metadata->elseBody != NULL && + typeIsEqual(metadata->ifBody, metadata->elseBody)) { + tree->type = copyAstTree(metadata->ifBody); + } else { + tree->type = &AST_TREE_VOID_TYPE; + } return true; } |