switched to using TCC as the compiler compiler
authorBrendan Hansen <brendan.f.hansen@gmail.com>
Wed, 16 Sep 2020 01:12:24 +0000 (20:12 -0500)
committerBrendan Hansen <brendan.f.hansen@gmail.com>
Wed, 16 Sep 2020 01:12:24 +0000 (20:12 -0500)
CHANGELOG
Makefile
include/bh.h
onyx
progs/poly_struct.onyx
src/onyxparser.c

index a506ae973c7e126e5abe881d818ed0f5e659011b..9df5ac0e875860bf806db9aa9119bd29b5d42847 100644 (file)
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -3,10 +3,12 @@ Release v0.0.3
 Additions:
 * Added polymorphic structs
 * Added polymorphic structs to polymorphic pattern matching
+* Added I32Map polymorphic structure to core library
 
 Removals:
 
 Changes:
+* Switched to using TCC as the primary compiler, while maintaining support for GCC.
 
 Bug fixes:
 * Fixed error message index for struct literal member type mismatch.
index 4778e4beac75d78cb2eb4ae56afce244e4aa3789..b0dbe8702131b55bfc5ef4ad835760698191a066 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,4 +1,4 @@
-RELEASE=0
+RELEASE=1
 
 OBJ_FILES=\
        build/onyxlex.o \
@@ -15,7 +15,7 @@ OBJ_FILES=\
        build/onyxdoc.o \
        build/onyx.o
 
-CC=gcc
+CC=tcc
 INCLUDES=-I./include
 LIBS=
 TARGET=./onyx
index c37366d9031dc71ab4671b758c772312b86d4c9c..9878f698e0ed2157c0019f24d425e24ff8b85194 100644 (file)
@@ -8,6 +8,7 @@
 #include <unistd.h>
 #include <fcntl.h>
 #include <errno.h>
+#include <malloc.h>
 
 #include <stdlib.h>
 #include <stdarg.h>
@@ -54,41 +55,13 @@ typedef double f64;
 //-------------------------------------------------------------------------------------
 // Better character functions
 //-------------------------------------------------------------------------------------
-inline b32 char_is_alpha(const char a) {
-    return ('a' <= a && a <= 'z') || ('A' <= a && a <= 'Z');
-}
-
-inline char charset_contains(const char* charset, char ch) {
-    while (*charset) {
-        if (*charset == ch) return ch;
-        charset++;
-    }
-
-    return 0;
-}
-
-inline b32 char_is_num(const char a) {
-    return ('0' <= a && a <= '9');
-}
-
-inline b32 char_is_alphanum(const char a) {
-    return char_is_alpha(a) || char_is_num(a);
-}
-
-inline b32 char_is_whitespace(const char a) {
-    return charset_contains(" \t\r\n", a);
-}
-
-inline b32 char_in_range(const char lo, const char hi, const char a) {
-    return lo <= a <= hi;
-}
-
-inline i64 chars_match(char* ptr1, char* ptr2) {
-    i64 len = 0;
-    while (*ptr2 != '\0' && *ptr1 == *ptr2) ptr1++, ptr2++, len++;
-    return *ptr2 == '\0' ? len : 0;
-}
-
+b32 char_is_alpha(const char a);
+b32 char_is_num(const char a);
+b32 char_is_alphanum(const char a);
+char charset_contains(const char* charset, char ch);
+b32 char_is_whitespace(const char a);
+b32 char_in_range(const char lo, const char hi, const char a);
+i64 chars_match(char* ptr1, char* ptr2);
 
 
 
@@ -447,7 +420,7 @@ isize bh_snprintf_va(char *str, isize n, char const *fmt, va_list va);
 #ifdef BH_DEBUG
 
 void* bh__debug_malloc(size_t size, const char* file, u64 line);
-void* bh__debug_aligned_alloc(size_t alignment, size_t size, const char* file, u64 line);
+void* bh__debug_memalign(size_t alignment, size_t size, const char* file, u64 line);
 void  bh__debug_free(void* ptr, const char* file, u64 line);
 void* bh__debug_realloc(void* ptr, size_t size, const char* file, u64 line);
 
@@ -459,9 +432,9 @@ void* bh__debug_malloc(size_t size, const char* file, u64 line) {
     return p;
 }
 
-void* bh__debug_aligned_alloc(size_t alignment, size_t size, const char* file, u64 line) {
-    void* p = aligned_alloc(alignment, size);
-    bh_printf("[DEBUG] %p = aligned_alloc(%d, %d) at %s:%d\n", p, alignment, size, file, line);
+void* bh__debug_memalign(size_t alignment, size_t size, const char* file, u64 line) {
+    void* p = memalign(alignment, size);
+    bh_printf("[DEBUG] %p = memalign(%d, %d) at %s:%d\n", p, alignment, size, file, line);
     return p;
 }
 
@@ -479,7 +452,7 @@ void* bh__debug_realloc(void* ptr, size_t size, const char* file, u64 line) {
 #endif
 
 #define malloc(size)                    (bh__debug_malloc(size, __FILE__, __LINE__))
-#define aligned_alloc(alignment, size)    (bh__debug_aligned_alloc(alignment, size, __FILE__, __LINE__))
+#define memalign(alignment, size)    (bh__debug_memalign(alignment, size, __FILE__, __LINE__))
 #define free(ptr)                        (bh__debug_free(ptr, __FILE__, __LINE__))
 #define realloc(ptr, size)                (bh__debug_realloc(ptr, size, __FILE__, __LINE__))
 
@@ -815,14 +788,41 @@ BH_ALLOCATOR_PROC(bh_managed_heap_allocator_proc);
 //-------------------------------------------------------------------------------------
 // CHAR FUNCTIONS
 //-------------------------------------------------------------------------------------
-extern inline b32 char_is_alpha(const char a);
-extern inline b32 char_is_num(const char a);
-extern inline b32 char_is_alphanum(const char a);
-extern inline char charset_contains(const char* charset, char ch);
-extern inline b32 char_is_whitespace(const char a);
-extern inline b32 char_in_range(const char lo, const char hi, const char a);
-extern inline i64 chars_match(char* ptr1, char* ptr2);
 
+b32 char_is_alpha(const char a) {
+    return ('a' <= a && a <= 'z') || ('A' <= a && a <= 'Z');
+}
+
+char charset_contains(const char* charset, char ch) {
+    while (*charset) {
+        if (*charset == ch) return ch;
+        charset++;
+    }
+
+    return 0;
+}
+
+b32 char_is_num(const char a) {
+    return ('0' <= a && a <= '9');
+}
+
+b32 char_is_alphanum(const char a) {
+    return char_is_alpha(a) || char_is_num(a);
+}
+
+b32 char_is_whitespace(const char a) {
+    return charset_contains(" \t\r\n", a);
+}
+
+b32 char_in_range(const char lo, const char hi, const char a) {
+    return lo <= a <= hi;
+}
+
+i64 chars_match(char* ptr1, char* ptr2) {
+    i64 len = 0;
+    while (*ptr2 != '\0' && *ptr1 == *ptr2) ptr1++, ptr2++, len++;
+    return *ptr2 == '\0' ? len : 0;
+}
 
 
 
@@ -869,7 +869,7 @@ BH_ALLOCATOR_PROC(bh_heap_allocator_proc) {
 
     switch (action) {
     case bh_allocator_action_alloc: {
-        retval = aligned_alloc(alignment, size);
+        retval = memalign(alignment, size);
 
         if (flags & bh_allocator_flag_clear && retval != NULL) {
             memset(retval, 0, size);
@@ -920,7 +920,7 @@ BH_ALLOCATOR_PROC(bh_managed_heap_allocator_proc) {
 
     switch (action) {
     case bh_allocator_action_alloc: {
-        retval = aligned_alloc(alignment, size);
+        retval = memalign(alignment, size);
 
         if (flags & bh_allocator_flag_clear && retval != NULL) {
             memset(retval, 0, size);
diff --git a/onyx b/onyx
index 5c8bea0ae8daf596f83d0236a10ef05f49016cfa..d5bdd4ef19bdaa92e0604caa5d72edfe47af2228 100755 (executable)
Binary files a/onyx and b/onyx differ
index 5941a5bf6c15e093e4d6b9901961df595bc7caf2..f2781ccc0735d96bfca57633c62430decb8470f2 100644 (file)
@@ -7,6 +7,7 @@ use package core
 main :: proc (args: [] cstring) {
     imap : I32Map(^string);
     i32map_init(^imap);
+    defer i32map_free(^imap);
 
     hello := "Hello ";
     world := "World!";
index 66ec3cb700a2bb8e4f60710ad15f176b3e03707d..1e2cd9fcdf4f96015c0832dc8afe7e2bebf27fca 100644 (file)
@@ -442,7 +442,7 @@ static AstTyped* parse_factor(OnyxParser* parser) {
 
                 AstStrLit* filename = make_node(AstStrLit, Ast_Kind_StrLit);
                 filename->token = str_token;
-                filename->addr      = 0;
+                filename->addr  = 0;
 
                 add_node_to_process(parser, (AstNode *) filename);
                 retval = (AstTyped *) filename;