From 9acff5f8930cbb88fa83220c3672c7eb0f9f2ff1 Mon Sep 17 00:00:00 2001 From: Blendi Date: Sat, 23 May 2026 20:28:56 +0200 Subject: [PATCH] main, parser: fix memory leak/unitialized mem --- build.lua | 4 ++-- src/main.c | 13 ++++++------- src/parser.c | 21 +++++++++------------ src/parser.h | 2 +- 4 files changed, 18 insertions(+), 22 deletions(-) diff --git a/build.lua b/build.lua index 397a71b..46fb84a 100644 --- a/build.lua +++ b/build.lua @@ -73,7 +73,7 @@ for i = 1,#files do if needsRebuild(fname, out) then needsLinking = true - runCommand('clang -c -o ' .. out .. ' ' .. fname .. ' ' .. table.concat(coolArgs, ' ')) + runCommand('clang -c -g -o ' .. out .. ' ' .. fname .. ' ' .. table.concat(coolArgs, ' ')) end objects[#objects+1] = out; @@ -82,5 +82,5 @@ end local exe = separator == '\\' and "noom.exe" or "noom" if needsLinking then - runCommand('clang -o ' .. exe .. ' ' .. table.concat(objects, ' ') .. ' ' .. table.concat(coolArgs, ' ')) + runCommand('clang -g -o ' .. exe .. ' ' .. table.concat(objects, ' ') .. ' ' .. table.concat(coolArgs, ' ')) end diff --git a/src/main.c b/src/main.c index 852d51f..fac9a64 100644 --- a/src/main.c +++ b/src/main.c @@ -33,7 +33,7 @@ void print_node(noomP_Node* node, noom_uint_t depth) { int main(int argc, char** argv) { // uhh uhhh uhhhhh - const char* code = "local t = {'a'; 2; 6}"; + const char* code = "local t = {'a'; 2; 6}}"; noom_uint_t pos = 0; printf("LEX OUTPUT:\n"); @@ -54,16 +54,15 @@ int main(int argc, char** argv) { // time for parser testing printf("\nPARSE OUTPUT:\n"); + noomP_Parser parser; noomP_Node *program; - noomP_Node *last_node; - int success = noomP_parse(code, "shitass", NOOM_VERSION_54, &program, &last_node); - if (success != 0) return success; - - print_node(program, 0); + int success = noomP_parse(code, "shitass", NOOM_VERSION_54, &program, &parser); + if (success == 0) + print_node(program, 0); // freeing time - + noomP_Node *last_node = parser.last_node; while (last_node) { noomP_Node* next = last_node->previous_node; // subnodes could be null if we OOM'd during a realloc of it diff --git a/src/parser.c b/src/parser.c index cb2958d..be6f2ea 100644 --- a/src/parser.c +++ b/src/parser.c @@ -127,8 +127,6 @@ noomP_Node* noomP_allocNode(noomP_Parser* parser) { return 0; } - node->previous_node = parser->last_node; - node->subnodec = 0; node->subnodes = noom_alloc(sizeof(noomP_Node*) * 2); node->subnode_cap = 2; @@ -137,7 +135,8 @@ noomP_Node* noomP_allocNode(noomP_Parser* parser) { noom_free(node); return 0; } - + + node->previous_node = parser->last_node; parser->last_node = node; return node; @@ -1767,29 +1766,27 @@ noomP_Node* noomP_parseStatement(noomP_Parser* parser) { return stmt; } -int noomP_parse(const char* code, const char* filename, noom_LuaVersion version, noomP_Node** outpointer, noomP_Node** last_node) { - noomP_Parser parser; - noomP_initParser(&parser, code, filename, version); +int noomP_parse(const char* code, const char* filename, noom_LuaVersion version, noomP_Node** outpointer, noomP_Parser* parser) { + noomP_initParser(parser, code, filename, version); noomL_Token token; - noomP_Node* node = noomP_allocNode(&parser); + noomP_Node* node = noomP_allocNode(parser); if (node == 0) return -1; - node->source_offset = parser.lex_offset; + node->source_offset = parser->lex_offset; node->type = NOOMP_NODE_PROGRAM; while (1) { - if (noomP_peek(&parser, &token)) return 0; + if (noomP_peek(parser, &token)) return 0; if (token.type == NOOML_TOKEN_EOF) break; - noomP_Node* child = noomP_parseStatement(&parser); + noomP_Node* child = noomP_parseStatement(parser); if (child == 0) return -1; - if (noomP_addSubnode(&parser, node, child)) return 0; + if (noomP_addSubnode(parser, node, child)) return 0; } *outpointer = node; - *last_node = parser.last_node; return 0; } diff --git a/src/parser.h b/src/parser.h index b97fe85..2622fa9 100644 --- a/src/parser.h +++ b/src/parser.h @@ -117,7 +117,7 @@ noomP_Node* noomP_parseBlock(noomP_Parser* parser); noomP_Node* noomP_parseExpression(noomP_Parser* parser); noomP_Node* noomP_parseStatement(noomP_Parser* parser); -int noomP_parse(const char* code, const char* filename, noom_LuaVersion version, noomP_Node** outpointer, noomP_Node** last_node); +int noomP_parse(const char* code, const char* filename, noom_LuaVersion version, noomP_Node** outpointer, noomP_Parser* parser); int noomP_initParser(noomP_Parser* parser, const char* code, const char* filename, noom_LuaVersion version);