diff options
author | A404M <ahmadmahmoudiprogrammer@gmail.com> | 2025-05-27 22:00:49 +0330 |
---|---|---|
committer | A404M <ahmadmahmoudiprogrammer@gmail.com> | 2025-05-27 22:00:49 +0330 |
commit | 5823be69762ac3d15869d4de65647f0b9ca82449 (patch) | |
tree | 5b1a991d3c4cb7b5ac104930e02fd1b7e9d2abdf /src/compiler/ast-tree.c | |
parent | a7fbbde04d81e17198156effe776b0a26af5aceb (diff) |
fix memory leak
Diffstat (limited to 'src/compiler/ast-tree.c')
-rw-r--r-- | src/compiler/ast-tree.c | 32 |
1 files changed, 15 insertions, 17 deletions
diff --git a/src/compiler/ast-tree.c b/src/compiler/ast-tree.c index 93c69ae..0b4bc63 100644 --- a/src/compiler/ast-tree.c +++ b/src/compiler/ast-tree.c @@ -2243,8 +2243,8 @@ AstTreeRoot *makeAstRoot(const ParserNode *parsedRoot, char *filePath) { case PARSER_TOKEN_BUILTIN_BITWISE_AND: case PARSER_TOKEN_BUILTIN_BITWISE_XOR: case PARSER_TOKEN_BUILTIN_BITWISE_OR: - case PARSER_TOKEN_BUILTIN_SHIFT_LEFT: - case PARSER_TOKEN_BUILTIN_SHIFT_RIGHT: + case PARSER_TOKEN_BUILTIN_SHIFT_LEFT: + case PARSER_TOKEN_BUILTIN_SHIFT_RIGHT: case PARSER_TOKEN_SYMBOL_BRACKET_LEFT: case PARSER_TOKEN_SYMBOL_BRACKET_RIGHT: goto AFTER_SWITCH; @@ -2748,8 +2748,8 @@ AstTree *astTreeParseFunction(const ParserNode *parserNode) { case PARSER_TOKEN_BUILTIN_BITWISE_AND: case PARSER_TOKEN_BUILTIN_BITWISE_XOR: case PARSER_TOKEN_BUILTIN_BITWISE_OR: - case PARSER_TOKEN_BUILTIN_SHIFT_LEFT: - case PARSER_TOKEN_BUILTIN_SHIFT_RIGHT: + case PARSER_TOKEN_BUILTIN_SHIFT_LEFT: + case PARSER_TOKEN_BUILTIN_SHIFT_RIGHT: case PARSER_TOKEN_SYMBOL_BRACKET_LEFT: case PARSER_TOKEN_SYMBOL_BRACKET_RIGHT: printError(node->str_begin, node->str_end, "Unexpected %s", @@ -3362,8 +3362,8 @@ AstTree *astTreeParseCurlyBracket(const ParserNode *parserNode) { case PARSER_TOKEN_BUILTIN_BITWISE_AND: case PARSER_TOKEN_BUILTIN_BITWISE_XOR: case PARSER_TOKEN_BUILTIN_BITWISE_OR: - case PARSER_TOKEN_BUILTIN_SHIFT_LEFT: - case PARSER_TOKEN_BUILTIN_SHIFT_RIGHT: + case PARSER_TOKEN_BUILTIN_SHIFT_LEFT: + case PARSER_TOKEN_BUILTIN_SHIFT_RIGHT: case PARSER_TOKEN_SYMBOL_BRACKET_LEFT: case PARSER_TOKEN_SYMBOL_BRACKET_RIGHT: printError(node->str_begin, node->str_end, "Unexpected %s", @@ -3976,12 +3976,8 @@ bool typeIsEqual(AstTree *type0, AstTree *type1) { bool ret = typeIsEqualBack(left, right); - if (type0 != left) { - astTreeDelete(left); - } - if (type1 != right) { - astTreeDelete(right); - } + astTreeDelete(left); + astTreeDelete(right); return ret; } @@ -4300,7 +4296,7 @@ AstTree *getValue(AstTree *tree, bool copy) { }; AstTree *value = runExpression(tree, scope, &shouldRet, false, true, - &breakCount, &shouldContinue); + &breakCount, &shouldContinue, false); if (!copy) { astTreeDelete(tree); @@ -5103,6 +5099,7 @@ bool setTypesValueInt(AstTree *tree, AstTreeSetTypesHelper helper) { if (*value - *newValue != 0) { printWarning(tree->str_begin, tree->str_end, "Value is overflowing"); } + free(value); tree->metadata = newValue; tree->type = &AST_TREE_U32_TYPE; } else if (typeIsEqual(helper.lookingType, &AST_TREE_I16_TYPE)) { @@ -5435,13 +5432,14 @@ bool setTypesTypeFunction(AstTree *tree, AstTreeSetTypesHelper helper) { AstTreeTypeFunction *metadata = tree->metadata; for (size_t i = 0; i < metadata->arguments_size; ++i) { - AstTreeTypeFunctionArgument arg = metadata->arguments[i]; - if (!setAllTypes(arg.type, helper, NULL, NULL)) { + AstTreeTypeFunctionArgument *arg = &metadata->arguments[i]; + if (!setAllTypes(arg->type, helper, NULL, NULL)) { return false; - } else if (!typeIsEqual(arg.type->type, &AST_TREE_TYPE_TYPE)) { - printError(arg.str_begin, arg.str_end, "Expected a type"); + } else if (!typeIsEqual(arg->type->type, &AST_TREE_TYPE_TYPE)) { + printError(arg->str_begin, arg->str_end, "Expected a type"); return false; } + arg->type = getValue(arg->type, false); } if (!setAllTypes(metadata->returnType, helper, NULL, NULL)) { |