diff --git a/src/main.c b/src/main.c index ae4ba1e..0c55a22 100644 --- a/src/main.c +++ b/src/main.c @@ -1,6 +1,7 @@ #include // for now // #include "lexer.h" #include "parser.h" +#include "helper.h" void tab(noom_uint_t amount) { amount *= 2; @@ -54,11 +55,21 @@ int main(int argc, char** argv) { printf("\nPARSE OUTPUT:\n"); noomP_Node *program; + noomP_Node *last_node; - int success = noomP_parse(code, "shitass", &program); + int success = noomP_parse(code, "shitass", &program, &last_node); if (success != 0) return success; print_node(program, 0); + + // freeing time + + while (last_node) { + noomP_Node* next = last_node->previous_node; + noom_free(last_node->subnodes); + noom_free(last_node); + last_node = next; + } return 0; } diff --git a/src/parser.c b/src/parser.c index f72d150..0727330 100644 --- a/src/parser.c +++ b/src/parser.c @@ -146,7 +146,7 @@ noomP_Node* noomP_parseStatement(noomP_Parser* parser) { return 0; } -int noomP_parse(const char* code, const char* filename, noomP_Node** outpointer) { +int noomP_parse(const char* code, const char* filename, noomP_Node** outpointer, noomP_Node** last_node) { noomP_Parser parser; noomP_initParser(&parser, code, filename); @@ -168,6 +168,7 @@ int noomP_parse(const char* code, const char* filename, noomP_Node** outpointer) } *outpointer = node; + *last_node = parser.last_node; return 0; } diff --git a/src/parser.h b/src/parser.h index f02887a..77383f6 100644 --- a/src/parser.h +++ b/src/parser.h @@ -35,7 +35,7 @@ noomP_Node* noomP_allocNode(noomP_Parser* parser); noomP_Node* noomP_parseStatement(noomP_Parser* parser); noomP_Node* noomP_parseExpression(noomP_Parser* parser); -int noomP_parse(const char* code, const char* filename, noomP_Node** outpointer); +int noomP_parse(const char* code, const char* filename, noomP_Node** outpointer, noomP_Node** last_node); int noomP_initParser(noomP_Parser* parser, const char* code, const char* filename);