diff --git a/src/main.cpp b/src/main.cpp index 2a851ce..4d10960 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -38,5 +38,6 @@ void interpret_file(char* fileName) { struct Environment* env = new Environment(); eval_statement(result, env); delete_environment(env); - delete_tree(result); + + delete result; } \ No newline at end of file diff --git a/src/operations/node.cpp b/src/operations/node.cpp index 3bfa1ee..4d4e0f9 100644 --- a/src/operations/node.cpp +++ b/src/operations/node.cpp @@ -73,15 +73,6 @@ void print_tree(struct Node* node, int tabs) { } } -void delete_tree(struct Node* node) { - if (!node) { return; } - for(int i = 0; i < node->num_children; i++) { - delete_tree(node->children[i]); - } - free(node); -} - - struct Value* eval_expression(struct Node* node, struct Environment* env) { /* base case */ diff --git a/src/operations/node.hpp b/src/operations/node.hpp index 8035ac3..257b206 100644 --- a/src/operations/node.hpp +++ b/src/operations/node.hpp @@ -28,13 +28,17 @@ struct Node { children[i] = nullptr; } } + ~Node() { + for (int i = 0; i < num_children; i++) { + delete children[i]; + } + } }; // Abstract Syntax Tree Functions // struct Node* make_node(int type, struct Value* value, std::string id); void attach_node(struct Node* parent, struct Node* child); void print_tree(struct Node* node, int tabs); -void delete_tree(struct Node* node); // Interpreting AST void eval_statement(struct Node* node, struct Environment* env); diff --git a/src/shell.cpp b/src/shell.cpp index f5de742..342bc24 100644 --- a/src/shell.cpp +++ b/src/shell.cpp @@ -70,5 +70,5 @@ void start_shell() { } delete_environment(env); - delete_tree(result); + delete result; } \ No newline at end of file