]> www.git.momoyon.org Git - lang.git/commitdiff
[main.c] Fix freeing non-malloced ptr in free_parser().
authorahmedsamyh <ahmedsamyh10@gmail.com>
Wed, 26 Mar 2025 21:20:39 +0000 (02:20 +0500)
committerahmedsamyh <ahmedsamyh10@gmail.com>
Wed, 26 Mar 2025 21:20:39 +0000 (02:20 +0500)
include/commonlib.h
main.c
main.momo

index 7456fe7b257c4f9b821dde8fd33cd1b7ce767e7e..ba8f44fe7e8b00a949680834f45f5146fb64b09e 100644 (file)
@@ -16,6 +16,7 @@
 \r
 #define da_append c_da_append\r
 #define da_free c_da_free\r
+#define da_shift c_da_shift\r
 #define DYNAMIC_ARRAY_INITIAL_CAPACITY c_DYNAMIC_ARRAY_INITIAL_CAPACITY\r
 // #define c_DYNAMIC_ARRAY_INITIAL_CAPACITY\r
 \r
@@ -122,8 +123,8 @@ typedef const wchar* wstr;
 \r
 #define c_ARRAY_LEN(arr) (sizeof(arr) / sizeof(arr[0]))\r
 \r
-#define c_pop_front(xs, xsz) (assert(xsz > 0 && "Array is empty"), xsz--, *xs++)\r
-#define c_shift_args c_pop_front\r
+#define c_shift(xs, xsz) (assert(xsz > 0 && "Array is empty"), xsz--, *xs++)\r
+#define c_shift_args c_shift\r
 \r
 //\r
 // Struct pre-decls\r
@@ -174,8 +175,9 @@ typedef struct c_Arena c_Arena;
                (da).items[(da).count++] = elm;\\r
        } while (0)\r
 \r
-#define c_da_pop_front(da) (c_ASSERT(da.count > 0, "Array is empty"), da.count--, *da.items++)\r
-#define c_da_free(da) C_FREE(da.items)\r
+// NOTE: We cant do c_ASSERT() here because it aint one expression...\r
+#define c_da_shift(da) (assert((da).count > 0 && "Array is empty"), (da).count--, *(da).items++)\r
+#define c_da_free(da) C_FREE((da).items)\r
 \r
 //\r
 // OS\r
@@ -295,6 +297,7 @@ bool c_sv_equals(c_String_view sv1, c_String_view sv2);
 #include <string.h>\r
 #include <errno.h>\r
 #include <stdlib.h>\r
+#include <assert.h>\r
 \r
 // My things implementation:\r
 \r
diff --git a/main.c b/main.c
index bbe75e712c0a23425bfd2de10a56c01102965c5b..5712af4b1dac17bf72673b3703439d052ef21986 100644 (file)
--- 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);
index 0fd558c4b826b0c59a9ba72837f98ff2cce59eea..0e927748ebbbabd7034b0cd58737edfe36e2385d 100644 (file)
--- a/main.momo
+++ b/main.momo
@@ -1,6 +1 @@
-#include <stdio>
-
-fun main(args: [string]) -> int {
-    printf("Hello, World\n");
-    return 0;
-}
+1 + 2;