From 4cddb2440510edaf4c4297e31f6958f03cf361ea Mon Sep 17 00:00:00 2001 From: LaEntropiaa Date: Thu, 26 Mar 2026 09:25:40 -0600 Subject: [PATCH] Changed evaluate function to free the memory it uses, temporary, will be changed to use a sigle arena for the tree --- src/evaluator.c | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/src/evaluator.c b/src/evaluator.c index cbaf776..219f854 100644 --- a/src/evaluator.c +++ b/src/evaluator.c @@ -1,22 +1,31 @@ #include "evaluator.h" #include "lexer.h" #include +#include int64_t evaluate(ASTNode *tree) { if (tree->type == NODE_BINARY_OP) { - switch (tree->data.binary.op) { + Operator op = tree->data.binary.op; + ASTNode *left = tree->data.binary.left; + ASTNode *right = tree->data.binary.right; + + free(tree); + + switch (op) { case OP_ADD: - return evaluate(tree->data.binary.left) + evaluate(tree->data.binary.right); + return evaluate(left) + evaluate(right); case OP_SUB: - return evaluate(tree->data.binary.left) - evaluate(tree->data.binary.right); + return evaluate(left) - evaluate(right); case OP_MUL: - return evaluate(tree->data.binary.left) * evaluate(tree->data.binary.right); + return evaluate(left) * evaluate(right); case OP_DIV: - return evaluate(tree->data.binary.left) / evaluate(tree->data.binary.right); + return evaluate(left) / evaluate(right); } } else { - return tree->data.integer; + int64_t return_val = tree->data.integer; + free(tree); + return return_val; } }