From 49705d7b3678dfc98eef0ebbf8f982e16f302240 Mon Sep 17 00:00:00 2001 From: ahmedsamyh Date: Thu, 27 Mar 2025 02:20:39 +0500 Subject: [PATCH] [main.c] Fix freeing non-malloced ptr in free_parser(). --- include/commonlib.h | 11 +++++++---- main.c | 18 ++++++++---------- main.momo | 7 +------ 3 files changed, 16 insertions(+), 20 deletions(-) diff --git a/include/commonlib.h b/include/commonlib.h index 7456fe7..ba8f44f 100644 --- a/include/commonlib.h +++ b/include/commonlib.h @@ -16,6 +16,7 @@ #define da_append c_da_append #define da_free c_da_free +#define da_shift c_da_shift #define DYNAMIC_ARRAY_INITIAL_CAPACITY c_DYNAMIC_ARRAY_INITIAL_CAPACITY // #define c_DYNAMIC_ARRAY_INITIAL_CAPACITY @@ -122,8 +123,8 @@ typedef const wchar* wstr; #define c_ARRAY_LEN(arr) (sizeof(arr) / sizeof(arr[0])) -#define c_pop_front(xs, xsz) (assert(xsz > 0 && "Array is empty"), xsz--, *xs++) -#define c_shift_args c_pop_front +#define c_shift(xs, xsz) (assert(xsz > 0 && "Array is empty"), xsz--, *xs++) +#define c_shift_args c_shift // // Struct pre-decls @@ -174,8 +175,9 @@ typedef struct c_Arena c_Arena; (da).items[(da).count++] = elm;\ } while (0) -#define c_da_pop_front(da) (c_ASSERT(da.count > 0, "Array is empty"), da.count--, *da.items++) -#define c_da_free(da) C_FREE(da.items) +// NOTE: We cant do c_ASSERT() here because it aint one expression... +#define c_da_shift(da) (assert((da).count > 0 && "Array is empty"), (da).count--, *(da).items++) +#define c_da_free(da) C_FREE((da).items) // // OS @@ -295,6 +297,7 @@ bool c_sv_equals(c_String_view sv1, c_String_view sv2); #include #include #include +#include // My things implementation: diff --git a/main.c b/main.c index bbe75e7..5712af4 100644 --- a/main.c +++ b/main.c @@ -127,7 +127,7 @@ typedef struct { } Lexer; typedef struct { - Tokens tokens; + Tokens *tokens_ptr; } Parser; const char *token_type_as_str(Token_type t) { @@ -281,14 +281,14 @@ void free_lexer(Lexer *l) { free(l->src.data); } -Parser make_parser(Tokens tokens) { +Parser make_parser(Tokens *tokens_ptr) { return (Parser) { - .tokens = tokens, + .tokens_ptr = tokens_ptr, }; } void free_parser(Parser *p) { - da_free(p->tokens); + da_free(*p->tokens_ptr); } typedef struct Ast_Node Ast_Node; @@ -311,11 +311,11 @@ struct Ast_Node { }; void parse(Parser *p) { - info("tokens.count: %zu", p->tokens.count); - Token t = da_shift(p->tokens); + info("tokens.count: %zu", p->tokens_ptr->count); + Token t = da_shift(*p->tokens_ptr); printf("[INFO] ");print_token(stdout, t); - info("tokens.count: %zu", p->tokens.count); + info("tokens.count: %zu", p->tokens_ptr->count); } String_view get_src_copy(Lexer *l) { @@ -893,9 +893,7 @@ int main(int argc, char **argv) { Tokens tokens = lex(&l); - Parser p = make_parser(tokens); - - parse(&p); + Parser p = make_parser(&tokens); free_parser(&p); free_lexer(&l); diff --git a/main.momo b/main.momo index 0fd558c..0e92774 100644 --- a/main.momo +++ b/main.momo @@ -1,6 +1 @@ -#include - -fun main(args: [string]) -> int { - printf("Hello, World\n"); - return 0; -} +1 + 2; -- 2.39.5