From cc8dd5abb0c874b9015dcbf63dd11f5ac233637a Mon Sep 17 00:00:00 2001 From: Brendan Hansen Date: Wed, 17 Jun 2020 19:09:13 -0500 Subject: [PATCH] Lots of small changes; initial function calling --- include/bh.h | 280 ++++++++++++++++++++++++++++++++----------- include/onyxparser.h | 3 +- include/onyxwasm.h | 9 +- onyx | Bin 137728 -> 144440 bytes progs/minimal.onyx | 19 +-- src/onyx.c | 7 +- src/onyxlex.c | 87 +++++++------- src/onyxparser.c | 37 +++--- src/onyxutils.c | 13 ++ src/onyxwasm.c | 56 +++++---- 10 files changed, 346 insertions(+), 165 deletions(-) diff --git a/include/bh.h b/include/bh.h index 9d6ea6d0..687b51ab 100644 --- a/include/bh.h +++ b/include/bh.h @@ -535,12 +535,12 @@ void bh__arr_deleten(void **arr, i32 elemsize, i32 index, i32 numelems); //------------------------------------------------------------------------------------- -// HASH TABLE FUNCTIONS +// STRING HASH TABLE FUNCTIONS //------------------------------------------------------------------------------------- -#ifndef BH_NO_HASHTABLE +#ifndef BH_NO_TABLE #ifdef BH_DEFINE -u64 bh__hash_function(const char* str, i32 len, i32 mod) { +u64 bh__table_hash_function(const char* str, i32 len, i32 mod) { u64 hash = 5381; i32 c, l = 0; if (len == 0) len = ((u32) 1 << 31) - 1; // TODO: Verify this is right @@ -553,62 +553,62 @@ u64 bh__hash_function(const char* str, i32 len, i32 mod) { } #endif -typedef struct bh_hash_iterator { +typedef struct bh_table_iterator { ptr *tab, *endtab; i32 elemsize, arrlen; ptr entry; -} bh_hash_iterator; +} bh_table_iterator; -typedef struct bh__hash { +typedef struct bh__table { bh_allocator allocator; - u64 hash_size; // NOTE: u64 since padding will make it 8-bytes no matter what + u64 table_size; // NOTE: u64 since padding will make it 8-bytes no matter what ptr arrs[]; -} bh__hash; - -#define bh_hash(T) T* - -#ifdef BH_HASH_SIZE_SAFE - #define bh_hash_init(allocator_, tab, hs) bh__hash_init(allocator_, (bh__hash **)&(tab), hs) - #define bh_hash_free(tab) bh__hash_free((bh__hash **)&(tab)) - #define bh_hash_put(T, tab, key, value) (assert(sizeof(T) == sizeof(*(tab))), (*((T *) bh__hash_put((bh__hash *) tab, sizeof(T), key)) = (T) value)) - #define bh_hash_has(T, tab, key) (assert(sizeof(T) == sizeof(*(tab))), (bh__hash_has((bh__hash *) tab, sizeof(T), key))) - #define bh_hash_get(T, tab, key) (assert(sizeof(T) == sizeof(*(tab))), (*((T *) bh__hash_get((bh__hash *) tab, sizeof(T), key)))) - #define bh_hash_delete(T, tab, key) (assert(sizeof(T) == sizeof(*(tab))), bh__hash_delete((bh__hash *) tab, sizeof(T), key)) - #define bh_hash_clear(tab) (bh__hash_clear((bh__hash *) tab)) - - #define bh_hash_iter_setup(T, tab) (assert(sizeof(T) == sizeof(*(tab))), bh__hash_iter_setup((bh__hash *) tab, sizeof(T))) - #define bh_hash_iter_key(it) ((char *)(bh_pointer_add(it.entry, it.elemsize + sizeof(u16)))) - #define bh_hash_iter_value(T, it) (*(T *)it.entry) +} bh__table; + +#define bh_table(T) T* + +#ifdef BH_TABLE_SIZE_SAFE + #define bh_table_init(allocator_, tab, hs) bh__table_init(allocator_, (bh__table **)&(tab), hs) + #define bh_table_free(tab) bh__table_free((bh__table **)&(tab)) + #define bh_table_put(T, tab, key, value) (assert(sizeof(T) == sizeof(*(tab))), (*((T *) bh__table_put((bh__table *) tab, sizeof(T), key)) = (T) value)) + #define bh_table_has(T, tab, key) (assert(sizeof(T) == sizeof(*(tab))), (bh__table_has((bh__table *) tab, sizeof(T), key))) + #define bh_table_get(T, tab, key) (assert(sizeof(T) == sizeof(*(tab))), (*((T *) bh__table_get((bh__table *) tab, sizeof(T), key)))) + #define bh_table_delete(T, tab, key) (assert(sizeof(T) == sizeof(*(tab))), bh__table_delete((bh__table *) tab, sizeof(T), key)) + #define bh_table_clear(tab) (bh__table_clear((bh__table *) tab)) + + #define bh_table_iter_setup(T, tab) (assert(sizeof(T) == sizeof(*(tab))), bh__table_iter_setup((bh__table *) tab, sizeof(T))) + #define bh_table_iter_key(it) ((char *)(bh_pointer_add(it.entry, it.elemsize + sizeof(u16)))) + #define bh_table_iter_value(T, it) (*(T *)it.entry) #else - #define bh_hash_init(allocator_, tab, hs) bh__hash_init(allocator_, (bh__hash **)&(tab), hs) - #define bh_hash_free(tab) bh__hash_free((bh__hash **)&(tab)) - #define bh_hash_put(T, tab, key, value) (*((T *) bh__hash_put((bh__hash *) tab, sizeof(T), key)) = value) - #define bh_hash_has(T, tab, key) (bh__hash_has((bh__hash *) tab, sizeof(T), key)) - #define bh_hash_get(T, tab, key) (*((T *) bh__hash_get((bh__hash *) tab, sizeof(T), key))) - #define bh_hash_delete(T, tab, key) (bh__hash_delete((bh__hash *) tab, sizeof(T), key)) - #define bh_hash_clear(tab) (bh__hash_clear((bh__hash *) tab)) - - #define bh_hash_iter_setup(T, tab) (bh__hash_iter_setup((bh__hash *) tab, sizeof(T))) - #define bh_hash_iter_key(it) ((char *)(bh_pointer_add(it.entry, it.elemsize + sizeof(u16)))) - #define bh_hash_iter_value(T, it) (*(T *)it.entry) + #define bh_table_init(allocator_, tab, hs) bh__table_init(allocator_, (bh__table **)&(tab), hs) + #define bh_table_free(tab) bh__table_free((bh__table **)&(tab)) + #define bh_table_put(T, tab, key, value) (*((T *) bh__table_put((bh__table *) tab, sizeof(T), key)) = value) + #define bh_table_has(T, tab, key) (bh__table_has((bh__table *) tab, sizeof(T), key)) + #define bh_table_get(T, tab, key) (*((T *) bh__table_get((bh__table *) tab, sizeof(T), key))) + #define bh_table_delete(T, tab, key) (bh__table_delete((bh__table *) tab, sizeof(T), key)) + #define bh_table_clear(tab) (bh__table_clear((bh__table *) tab)) + + #define bh_table_iter_setup(T, tab) (bh__table_iter_setup((bh__table *) tab, sizeof(T))) + #define bh_table_iter_key(it) ((char *)(bh_pointer_add(it.entry, it.elemsize + sizeof(u16)))) + #define bh_table_iter_value(T, it) (*(T *)it.entry) #endif -#define bh_hash_each_start(T, table) { \ - bh_hash_iterator it = bh_hash_iter_setup(T, (table)); \ - while (bh_hash_iter_next(&it)) { \ - const char* key = bh_hash_iter_key(it); \ - T value = bh_hash_iter_value(T, it); -#define bh_hash_each_end } } - -b32 bh__hash_init(bh_allocator allocator, bh__hash **table, i32 hash_size); -b32 bh__hash_free(bh__hash **table); -ptr bh__hash_put(bh__hash *table, i32 elemsize, char *key); -b32 bh__hash_has(bh__hash *table, i32 elemsize, char *key); -ptr bh__hash_get(bh__hash *table, i32 elemsize, char *key); -void bh__hash_delete(bh__hash *table, i32 elemsize, char *key); -void bh__hash_clear(bh__hash *table); -bh_hash_iterator bh__hash_iter_setup(bh__hash *table, i32 elemsize); -b32 bh_hash_iter_next(bh_hash_iterator* it); +#define bh_table_each_start(T, table) { \ + bh_table_iterator it = bh_table_iter_setup(T, (table)); \ + while (bh_table_iter_next(&it)) { \ + const char* key = bh_table_iter_key(it); \ + T value = bh_table_iter_value(T, it); +#define bh_table_each_end } } + +b32 bh__table_init(bh_allocator allocator, bh__table **table, i32 table_size); +b32 bh__table_free(bh__table **table); +ptr bh__table_put(bh__table *table, i32 elemsize, char *key); +b32 bh__table_has(bh__table *table, i32 elemsize, char *key); +ptr bh__table_get(bh__table *table, i32 elemsize, char *key); +void bh__table_delete(bh__table *table, i32 elemsize, char *key); +void bh__table_clear(bh__table *table); +bh_table_iterator bh__table_iter_setup(bh__table *table, i32 elemsize); +b32 bh_table_iter_next(bh_table_iterator* it); #endif @@ -616,6 +616,59 @@ b32 bh_hash_iter_next(bh_hash_iterator* it); + + + + +//------------------------------------------------------------------------------- +// IMAP (integer to integer map) +//------------------------------------------------------------------------------- +#ifndef BH_NO_IMAP + +typedef u64 bh_imap_key_t; + +typedef struct bh__imap_entry { + bh_imap_key_t key, value; +} bh__imap_entry; + +typedef struct bh_imap { + bh_allocator allocator; + bh_arr(bh__imap_entry) keys; +} bh_imap; + + +void bh_imap_init(bh_imap* imap, bh_allocator alloc); +void bh_imap_free(bh_imap* imap); +void bh_imap_put(bh_imap* imap, bh_imap_key_t key, bh_imap_key_t value); +b32 bh_imap_has(bh_imap* imap, bh_imap_key_t key); +bh_imap_key_t bh_imap_get(bh_imap* imap, bh_imap_key_t key); +void bh_imap_delete(bh_imap* imap, bh_imap_key_t key); + +#ifdef BH_DEFINE +#endif // BH_DEFINE + + +#endif + + + + + + + + + + + + + + + + + + + + //------------------------------------------------------------------------------- // OTHER COMMON DATA STRUCTURES @@ -1608,6 +1661,7 @@ void bh__arr_insertn(void **arr, i32 elemsize, i32 index, i32 numelems) { bh__arr* arrptr = bh__arrhead(*arr); if (!bh__arr_grow(bh_arr_allocator(arr), arr, elemsize, arrptr->length + numelems)) return; // Fail case + arrptr = bh__arrhead(*arr); memmove( (char *)(*arr) + elemsize * (index + numelems), (char *)(*arr) + elemsize * index, @@ -1633,26 +1687,26 @@ void bh__arr_insertn(void **arr, i32 elemsize, i32 index, i32 numelems) { //------------------------------------------------------------------------------------- -// HASHTABLE IMPLEMENTATION +// TABLE IMPLEMENTATION //------------------------------------------------------------------------------------- -#ifndef BH_NO_HASHTABLE +#ifndef BH_NO_TABLE -b32 bh__hash_init(bh_allocator allocator, bh__hash **table, i32 hash_size) { - *table = bh_alloc(allocator, sizeof(bh__hash) + sizeof(ptr) * hash_size); +b32 bh__table_init(bh_allocator allocator, bh__table **table, i32 table_size) { + *table = bh_alloc(allocator, sizeof(bh__table) + sizeof(ptr) * table_size); if (*table == NULL) return 0; (*table)->allocator = allocator; - (*table)->hash_size = hash_size; + (*table)->table_size = table_size; - for (i32 i = 0; i < hash_size; i++) { + for (i32 i = 0; i < table_size; i++) { (*table)->arrs[i] = NULL; } return 1; } -b32 bh__hash_free(bh__hash **table) { - for (i32 i = 0; i < (*table)->hash_size; i++) { +b32 bh__table_free(bh__table **table) { + for (i32 i = 0; i < (*table)->table_size; i++) { if ((*table)->arrs[i] != NULL) { bh_arr_free((*table)->arrs[i]); } @@ -1663,10 +1717,10 @@ b32 bh__hash_free(bh__hash **table) { } // Assumes NULL terminated string for key -ptr bh__hash_put(bh__hash *table, i32 elemsize, char *key) { +ptr bh__table_put(bh__table *table, i32 elemsize, char *key) { elemsize += (elemsize & 1); - u64 index = bh__hash_function(key, 0, table->hash_size); + u64 index = bh__table_hash_function(key, 0, table->table_size); u8 arr_was_new = 0; ptr arrptr = table->arrs[index]; @@ -1716,10 +1770,10 @@ found_matching: return bh_pointer_add(arrptr, -(sizeof(u16) + elemsize)); } -b32 bh__hash_has(bh__hash *table, i32 elemsize, char *key) { +b32 bh__table_has(bh__table *table, i32 elemsize, char *key) { elemsize += (elemsize & 1); - u64 index = bh__hash_function(key, 0, table->hash_size); + u64 index = bh__table_hash_function(key, 0, table->table_size); ptr arrptr = table->arrs[index]; if (arrptr == NULL) return 0; @@ -1739,10 +1793,10 @@ b32 bh__hash_has(bh__hash *table, i32 elemsize, char *key) { return 0; } -ptr bh__hash_get(bh__hash *table, i32 elemsize, char *key) { +ptr bh__table_get(bh__table *table, i32 elemsize, char *key) { elemsize += (elemsize & 1); - u64 index = bh__hash_function(key, 0, table->hash_size); + u64 index = bh__table_hash_function(key, 0, table->table_size); ptr arrptr = table->arrs[index]; if (arrptr == NULL) return 0; @@ -1764,10 +1818,10 @@ ptr bh__hash_get(bh__hash *table, i32 elemsize, char *key) { return NULL; } -void bh__hash_delete(bh__hash *table, i32 elemsize, char *key) { +void bh__table_delete(bh__table *table, i32 elemsize, char *key) { elemsize += (elemsize & 1); - u64 index = bh__hash_function(key, 0, table->hash_size); + u64 index = bh__table_hash_function(key, 0, table->table_size); ptr arrptr = table->arrs[index], walker; if (arrptr == NULL) return; // Didn't exist @@ -1801,8 +1855,8 @@ found_matching: (*(u64 *) arrptr)--; } -void bh__hash_clear(bh__hash *table) { - for (i32 i = 0; i < table->hash_size; i++) { +void bh__table_clear(bh__table *table) { + for (i32 i = 0; i < table->table_size; i++) { if (table->arrs[i] != NULL) { // NOTE: Set length property to 0 *((u64 *) table->arrs[i]) = 0; @@ -1811,19 +1865,19 @@ void bh__hash_clear(bh__hash *table) { } } -bh_hash_iterator bh__hash_iter_setup(bh__hash *table, i32 elemsize) { +bh_table_iterator bh__table_iter_setup(bh__table *table, i32 elemsize) { elemsize += (elemsize & 1); - bh_hash_iterator it = { + bh_table_iterator it = { .tab = table->arrs, - .endtab = table->arrs + table->hash_size, + .endtab = table->arrs + table->table_size, .elemsize = elemsize, .entry = NULL }; return it; } -b32 bh_hash_iter_next(bh_hash_iterator* it) { +b32 bh_table_iter_next(bh_table_iterator* it) { if (it->tab == NULL) return 0; if (it->entry != NULL) { @@ -1858,6 +1912,88 @@ step_to_next: #endif // ifndef BH_NO_HASHTABLE + + +//------------------------------------------------------------------------------------- +// IMAP IMPLEMENTATION +//------------------------------------------------------------------------------------- +#ifndef BH_NO_IMAP +void bh_imap_init(bh_imap* imap, bh_allocator alloc) { + imap->allocator = alloc; + imap->keys = NULL; + + bh_arr_new(alloc, imap->keys, 4); +} + +void bh_imap_free(bh_imap* imap) { + bh_arr_free(imap->keys); + imap->keys = NULL; +} + +b32 bh__imap_get_index(bh_imap* imap, bh_imap_key_t key, i32* pos) { + i32 low = 0; + i32 high = bh_arr_length(imap->keys); + i32 middle = 0; + bh__imap_entry tmp; + + while (high > low) { + middle = (high + low) / 2; + tmp = imap->keys[middle]; + + if (tmp.key == key) { + if (pos) *pos = middle; + return 1; + } else if (tmp.key < key) { + low = middle + 1; + middle++; + } else if (tmp.key > key) { + high = middle; + } + } + + if (pos) *pos = middle; + return 0; +} + +void bh_imap_put(bh_imap* imap, bh_imap_key_t key, bh_imap_key_t value) { + i32 middle = 0; + b32 found_existing = bh__imap_get_index(imap, key, &middle); + + if (found_existing) { + imap->keys[middle].value = value; + } else { + bh_arr_insertn(imap->keys, middle, 1); + imap->keys[middle].key = key; + imap->keys[middle].value = value; + } +} + +b32 bh_imap_has(bh_imap* imap, bh_imap_key_t key) { + return bh__imap_get_index(imap, key, NULL); +} + +bh_imap_key_t bh_imap_get(bh_imap* imap, bh_imap_key_t key) { + i32 middle = 0; + b32 found_existing = bh__imap_get_index(imap, key, &middle); + + if (found_existing) { + return imap->keys[middle].value; + } else { + return 0; + } +} + +void bh_imap_delete(bh_imap* imap, bh_imap_key_t key) { + i32 middle = 0; + b32 found_existing = bh__imap_get_index(imap, key, &middle); + + if (found_existing) { + bh_arr_deleten(imap->keys, middle, 1); + } +} + +#endif // ifndef BH_NO_IMAP + #endif // ifdef BH_DEFINE #endif // ifndef BH_H diff --git a/include/onyxparser.h b/include/onyxparser.h index 631fc092..47786d40 100644 --- a/include/onyxparser.h +++ b/include/onyxparser.h @@ -1,7 +1,6 @@ #ifndef ONYXPARSER_H #define ONYXPARSER_H -#define BH_NO_STRING #include "bh.h" #include "onyxlex.h" @@ -27,7 +26,7 @@ typedef struct OnyxParser { // NOTE: A table of the current identifiers in the current scope. // If the identifier doesn't at the time of parsing, it is an error. // Cleared at the end of a block. - bh_hash(OnyxAstNode*) identifiers; + bh_table(OnyxAstNode*) identifiers; OnyxAstNodeScope *curr_scope; OnyxMessages *msgs; diff --git a/include/onyxwasm.h b/include/onyxwasm.h index 4f7cf685..52e0c74a 100644 --- a/include/onyxwasm.h +++ b/include/onyxwasm.h @@ -1,7 +1,6 @@ #ifndef ONYXWASM_H #define ONYXWASM_H -#define BH_NO_STRING #include "bh.h" #include "onyxparser.h" @@ -266,20 +265,22 @@ typedef struct OnyxWasmModule { bh_allocator allocator; // NOTE: Mapping to local indicies currently in scope. - bh_hash(i32) local_map; + bh_table(i32) local_map; // NOTE: Used internally as a map from strings that represent function types, // 0x7f 0x7f : 0x7f ( (i32, i32) -> i32 ) // to the function type index if it has been created. - bh_hash(i32) type_map; + bh_table(i32) type_map; i32 next_type_idx; // NOTE: This have to be pointers because the type is variadic in size bh_arr(WasmFuncType*) functypes; bh_arr(WasmFunc) funcs; + // NOTE: Maps from ast node pointers to the function index + bh_imap func_map; i32 next_func_idx; - bh_hash(WasmExport) exports; + bh_table(WasmExport) exports; i32 export_count; } OnyxWasmModule; diff --git a/onyx b/onyx index 54fb7e20cea62187341433b97188c40a2131f32b..cbaebf60c297e57c8c59b1e6365c1cc2420cfaf0 100755 GIT binary patch literal 144440 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%0A1`&y6{RqWIloMzot*QF@+Q;a81}%C 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 z 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 SE-IC8zFy1UURI#&HuzV`0Q3I< literal 137728 zcmeFa3wTu3^*4NSgMh#UMU6^jRL~%TQBgrb6JTJX2}B@@A_RnRQ6NZW0F|2#kxa+Y zQ9-GfikB)?tJo?=R2(iPsZxzfH7aVVs1t|QRH>$xI`8kd_C9CMoFvxv@BjPW=Y1UA zthLu#d+)W^Ui*6XIa%o`9-W?+W|+SW<2-}0g5wmWKr;$@rfUp5V~BAG{yo7s-sl8s zCPIPcI^i6h%!JumE(4J1Hfp{T_SSMHG&Lk-x{iL{Llwt_MvjUzT^3O{|H02K|5~u( zmnv>TdpapEs^uLp_Y_4pp*)8sL>1Yn7Yt`vmbvhF^u_E}H z(6lFYWZ0?g>4c-02tN~2mcP8R%q{pn^f#_RGrvP-Vk z--Nol#;Nn>UUAmoQ|HYbIB)I(|I&d=hnzL=tigk-DhHh|_3i~l=u>0HmKotUep@_h z-(7eAdDfm^mmI%(*sDjl3#d1BV1AV0kMg=Wp_6BpNB$4_Jq{u5aw+16bwEF)1N!@* zyAhnfwIH;Y|A-Fg$82S z+}R5%W|pgDGv-xRRTz~EAzWTQW9jtrS#uXa;@S#|&#zouVJt)mGmV8y7R~ilK!&PO z2b45_`rHM^tVI)GbNUVSQ>gan#LR+jXQ3=1H(?1 z@sy^mm3XG{f{yo^JGVP~cAbv)YtoyJQ}P?7bi**| zW<2VkXGWELy@P(FrZ+g~12w(TK`+qsCI@|trpFxg3pKsPK_9Q_tqyvbrW<c2qLBB!My$*V{rk6VC zYcze5gC5lMX%2cw)8{zoVNGA?px>hDOC9uEHGP$Xe!HgEIOyv%J>sC>sp;z-^j~QD z1_%9aP2cFC->d1H9Q6A%z1Bg$U(=%w`h%KY@1Xxm(;FQ0M>M_BL4Q=!n;i7VH9h8_ zKdI?04*FA?-s+(LPScI_G=o3W|DVzHYzO^WP0w-ApVRbQ2mKXIcRT2xXnLN5ZfrB; zSKy$#HQno=pQ!1j4*DQXpX8vQrRmcg^kJGl$3Y*V=?finucj|`(2F&Fm4iNB(`y{` z$(kN<(67++^$z-#n!dq7zgp8bI_QfveUpQ}Lepy<^nj*E9rU24*E{GpYkGr&zE0B{ z9rSxNy~#m;K+|Im`s143;-EjR>8%d>c1<@j(!`HUf3DN?YzO@fP0w-A-_rD42mKvQ zcRT1GXu8)y|3=fNIp_&ZU+SP|Zdd*vanQSH`bG!6yQW7S^q!jD=%632=`9ZWQJS8e znU-R=pJ}?=K|fB@7dq$#I^PXW`VLjEjSl)$P2c38`!v1QLBCPcqYnB8O|N&*cW8Qp zgZ{RrH#+F8n%?A~=kHYd#~k#@n%>C^KA4C8$I7fmvaHl8)Bo|_qPQ$I?FbHUK`!)d*qec z=vaVSzezTFSBq*G(`PBEIJel%r4ql5ac-@f3ncz?#<`_#&X@QNjPq!s*)8#F8RwBibB@FpG0v@a zvmx;-8Rr(ex#c?$`dz^|x7N)~h|_+j{iP`Q`c!Z5BX3||OX+vR=zJ6|tk&`)QOooJfn>N6^tp8BmCemK$^{xizFf#K$6LsJhmnx>c}dGmw##q~hRlar=58%>j$MZ1GGw-EnI&50D7y^D zYRKHLWhQ8uR@m06yOvp{Wlq&HZ`)=1s(fzLGKXlH&32jNmCO_^^Vzqm?(6I_JZ^

bYMJY_%;|O+9-%|#DJ^q}mg#Ai;jt}b zZqYJlXqguHuw@?}xkF~YmT_sB*X%M!DwzwlO#C0J?oZfda+OSfEmNmu!giUXluTzW z^PrZQXP4o%Cg}6oodB@UN-cAtUFK*dvrWrP)-osCWqK=_`?bv3TBeI#=4VP~rItBN z%f!%sE&Cj+WTt4DFIrXI>+CXpl+3wW<`pgTuwBNjWRB7@k7$`{yUcM)=9@cI-2+;N z*Y+%ZPEaz9TBcmfjI_)2Q!>wKnRB(w@phRLmCT)5=147*W|uih$@sO*SKp|*H({K# z^vP2)6ST~0TIMCYOn)VFnwEJ?%lwiuAy3qr;i{)_hI6fcjPi9JxC!R-Qg6VsUd^8W zOB3sQDb|0dIY(%Hc40-(!*K+_8mYQhCCZ&p01){lZI3)q8BDBe}P{ab)K~lG2-I_Kx~r# zQJb0{qwnH(F@Old@P=F zvF;odo|YExRQLkTE^^^X`5nru1uItPF*kaXH@M3id>c!9Pq68^e5Mb+>kWPba%{|U zv!NFzb7O&}IpGV^g5DhOj5oL^NQ+|C?%mdu=}l|#hDtVhLsM$K!EA4EQZ}MdMC-kj z4o=ENyaDk>#NCMJDJ8wh>`}RXmgcH*+-;D?#1u7ifhS0AYV!zD>`kPSNQTX29J^#@kV-Xa%rxEienju( zsG5}^8`(5Cvd-2CRC>MTR9jegy3wZ($|1MzN3o4VLPaR8C5!cflv>5Wp$kO8}`hF8Li8?>$H ze0iu_W6;lidZSnaTU5az{5TwwqI~Z$g>BL=Ox13HPSE5LzdYT zOf1YxEOaLp=6ZwgY^9gg@}Jn(SlpolxFr_Pq-2U0B%3+Jo>wqr3sxG2H~1Pm{kKOD zm1ajO@pramuF6FY3fKpdK4r@dy{0+}Bogh`t8kUn z>l8Dac7<9XZat|Rqbf4nmK+1_A9SpJIO(mS?BiZ^*((@wG~~0 zKIR*QWQ=6DtJA(^)E~YY8jo^v;>Ufj^ygArm0eq_mg~}O-FXrkaU-%sD9GWUbc$>B z#TdDw}XnIReOA{UN7fsyEWIXnWS})`$+#et?^TW5 zFh^va9mH}yGu^u$6&e5>i>yQwlHw%Ai1!16BPS!?8wkhg_+dc05a|kpr)IEWVEMj; zYxP@*m}S98F~L#2^RVAF@qsv30}o>*4`9V|z_C^ty4_a-qKbsPv>XJ$P$#{pKs!?~ zPw@2oyO=J`o`dHNFGHybp|X8asCIwt`4OClq5M{`5G>Cp&S5uC6)SqR>XvQAx;LEl zGh}K_c*?>wE2?*y8YY@lX=-rl?K>gR+S|3}SI{re+QWA`{&C%avkxP{CdhED35l`L zX(SgJScY>|qU;unFH#J2yRVbhn~oOH)gR zFsjtP3AmfMtXG-mPVGEt!t@=POhM8 z(MiFl&mmyEwjQmpBT9{9(h<{x?1(Yxh$R%SmF1~7_$rHeS-GmEbwA%>qJio?t;f2m zcd2pKk~r2+36*!IEpOUMtEon0S?KjtYPP6MMJ+Z+w!~5XVF#qKrOFXC�A{t2!(W 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

|K+$0QTqRSG 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 diff --git a/progs/minimal.onyx b/progs/minimal.onyx index 79fa4857..e19b7ed2 100644 --- a/progs/minimal.onyx +++ b/progs/minimal.onyx @@ -1,13 +1,12 @@ - -export add :: proc (a i32, b i32) -> i32 { - return a + b; +foo :: proc () -> i32 { + return 10 as i32; } -export foo :: proc (foo i32, bar i32) -> i32 { - return 10 as i32; +add :: proc (a i32, b i32) -> i32 { + return a + b; } -export diff_square :: proc (a i32, b i32) -> i32 { +diff_square :: proc (a i32, b i32) -> i32 { // Typechecked c := a - b; // Mutable d :: a + b; // Constant @@ -15,6 +14,12 @@ export diff_square :: proc (a i32, b i32) -> i32 { return (c * d) as i32; } +export do_stuff :: proc () -> i32 { + res := diff_square((2 + 3) as i32, (4 + 5) as i32); + res = res + foo(); + return res; +} + export main :: proc () { - add(2, 3); + output :: do_stuff(); } diff --git a/src/onyx.c b/src/onyx.c index c55a7b31..5a07b655 100644 --- a/src/onyx.c +++ b/src/onyx.c @@ -1,4 +1,3 @@ -#define BH_NO_STRING // #define BH_DEBUG #define BH_DEFINE #include "bh.h" @@ -52,9 +51,9 @@ int main(int argc, char *argv[]) { onyx_message_print(&msgs); goto main_exit; } else { - // onyx_ast_print(program, 0); - bh_printf("\nNo errors.\n"); - } + onyx_ast_print(program, 0); + bh_printf("\nNo errors.\n"); + } // NOTE: 4th: Generate a WASM module from the parse tree and // write it to a file. diff --git a/src/onyxlex.c b/src/onyxlex.c index 0a4c3035..9e9a0104 100644 --- a/src/onyxlex.c +++ b/src/onyxlex.c @@ -57,8 +57,8 @@ static const char* onyx_token_type_names[] = { }; #ifndef LITERAL_TOKEN -#define LITERAL_TOKEN(token, token_type) \ - if (token_lit(tokenizer, &tk, token, token_type)) goto token_parsed; +#define LITERAL_TOKEN(token, word, token_type) \ + if (token_lit(tokenizer, &tk, token, word, token_type)) goto token_parsed; #endif #ifndef INCREMENT_CURR_TOKEN @@ -71,9 +71,12 @@ static const char* onyx_token_type_names[] = { } #endif -static b32 token_lit(OnyxTokenizer* tokenizer, OnyxToken* tk, char* lit, OnyxTokenType type) { +static b32 token_lit(OnyxTokenizer* tokenizer, OnyxToken* tk, char* lit, b32 is_word, OnyxTokenType type) { i64 len = chars_match(tokenizer->curr, lit); if (len > 0) { + if (is_word && char_is_alphanum(*(tokenizer->curr + len)) || charset_contains("_$", *(tokenizer->curr + len))) + return 0; + tk->type = type; tk->token = tokenizer->curr; tk->length = len; @@ -131,45 +134,45 @@ OnyxToken* onyx_get_token(OnyxTokenizer* tokenizer) { goto token_parsed; } - LITERAL_TOKEN("struct", TOKEN_TYPE_KEYWORD_STRUCT); - LITERAL_TOKEN("export", TOKEN_TYPE_KEYWORD_EXPORT); - LITERAL_TOKEN("use", TOKEN_TYPE_KEYWORD_USE); - LITERAL_TOKEN("if", TOKEN_TYPE_KEYWORD_IF); - LITERAL_TOKEN("else", TOKEN_TYPE_KEYWORD_ELSE); - LITERAL_TOKEN("foreign", TOKEN_TYPE_KEYWORD_FOREIGN); - LITERAL_TOKEN("for", TOKEN_TYPE_KEYWORD_FOR); - LITERAL_TOKEN("return", TOKEN_TYPE_KEYWORD_RETURN); - LITERAL_TOKEN("do", TOKEN_TYPE_KEYWORD_DO); - LITERAL_TOKEN("proc", TOKEN_TYPE_KEYWORD_PROC); - LITERAL_TOKEN("global", TOKEN_TYPE_KEYWORD_GLOBAL); - LITERAL_TOKEN("as", TOKEN_TYPE_KEYWORD_CAST); - LITERAL_TOKEN("->", TOKEN_TYPE_RIGHT_ARROW); - LITERAL_TOKEN("<-", TOKEN_TYPE_RIGHT_ARROW); - LITERAL_TOKEN("<=", TOKEN_TYPE_SYM_LESS_EQUAL); - LITERAL_TOKEN(">=", TOKEN_TYPE_SYM_GREATER_EQUAL); - LITERAL_TOKEN("(", TOKEN_TYPE_OPEN_PAREN); - LITERAL_TOKEN(")", TOKEN_TYPE_CLOSE_PAREN); - LITERAL_TOKEN("{", TOKEN_TYPE_OPEN_BRACE); - LITERAL_TOKEN("}", TOKEN_TYPE_CLOSE_BRACE); - LITERAL_TOKEN("[", TOKEN_TYPE_OPEN_BRACKET); - LITERAL_TOKEN("]", TOKEN_TYPE_CLOSE_BRACKET); - LITERAL_TOKEN("+", TOKEN_TYPE_SYM_PLUS); - LITERAL_TOKEN("-", TOKEN_TYPE_SYM_MINUS); - LITERAL_TOKEN("*", TOKEN_TYPE_SYM_STAR); - LITERAL_TOKEN(".", TOKEN_TYPE_SYM_DOT); - LITERAL_TOKEN("%", TOKEN_TYPE_SYM_PERCENT); - LITERAL_TOKEN("/", TOKEN_TYPE_SYM_FSLASH); - LITERAL_TOKEN("\\", TOKEN_TYPE_SYM_BSLASH); - LITERAL_TOKEN(":", TOKEN_TYPE_SYM_COLON); - LITERAL_TOKEN(";", TOKEN_TYPE_SYM_SEMICOLON); - LITERAL_TOKEN(",", TOKEN_TYPE_SYM_COMMA); - LITERAL_TOKEN(">", TOKEN_TYPE_SYM_GREATER); - LITERAL_TOKEN("<", TOKEN_TYPE_SYM_LESS); - LITERAL_TOKEN("=", TOKEN_TYPE_SYM_EQUALS); - LITERAL_TOKEN("~", TOKEN_TYPE_SYM_TILDE); - LITERAL_TOKEN("!", TOKEN_TYPE_SYM_BANG); - LITERAL_TOKEN("^", TOKEN_TYPE_SYM_CARET); - LITERAL_TOKEN("&", TOKEN_TYPE_SYM_AMPERSAND); + LITERAL_TOKEN("struct", 1, TOKEN_TYPE_KEYWORD_STRUCT); + LITERAL_TOKEN("export", 1, TOKEN_TYPE_KEYWORD_EXPORT); + LITERAL_TOKEN("use", 1, TOKEN_TYPE_KEYWORD_USE); + LITERAL_TOKEN("if", 1, TOKEN_TYPE_KEYWORD_IF); + LITERAL_TOKEN("else", 1, TOKEN_TYPE_KEYWORD_ELSE); + LITERAL_TOKEN("foreign", 1, TOKEN_TYPE_KEYWORD_FOREIGN); + LITERAL_TOKEN("for", 1, TOKEN_TYPE_KEYWORD_FOR); + LITERAL_TOKEN("return", 1, TOKEN_TYPE_KEYWORD_RETURN); + LITERAL_TOKEN("do", 1, TOKEN_TYPE_KEYWORD_DO); + LITERAL_TOKEN("proc", 1, TOKEN_TYPE_KEYWORD_PROC); + LITERAL_TOKEN("global", 1, TOKEN_TYPE_KEYWORD_GLOBAL); + LITERAL_TOKEN("as", 1, TOKEN_TYPE_KEYWORD_CAST); + LITERAL_TOKEN("->", 0, TOKEN_TYPE_RIGHT_ARROW); + LITERAL_TOKEN("<-", 0, TOKEN_TYPE_RIGHT_ARROW); + LITERAL_TOKEN("<=", 0, TOKEN_TYPE_SYM_LESS_EQUAL); + LITERAL_TOKEN(">=", 0, TOKEN_TYPE_SYM_GREATER_EQUAL); + LITERAL_TOKEN("(", 0, TOKEN_TYPE_OPEN_PAREN); + LITERAL_TOKEN(")", 0, TOKEN_TYPE_CLOSE_PAREN); + LITERAL_TOKEN("{", 0, TOKEN_TYPE_OPEN_BRACE); + LITERAL_TOKEN("}", 0, TOKEN_TYPE_CLOSE_BRACE); + LITERAL_TOKEN("[", 0, TOKEN_TYPE_OPEN_BRACKET); + LITERAL_TOKEN("]", 0, TOKEN_TYPE_CLOSE_BRACKET); + LITERAL_TOKEN("+", 0, TOKEN_TYPE_SYM_PLUS); + LITERAL_TOKEN("-", 0, TOKEN_TYPE_SYM_MINUS); + LITERAL_TOKEN("*", 0, TOKEN_TYPE_SYM_STAR); + LITERAL_TOKEN(".", 0, TOKEN_TYPE_SYM_DOT); + LITERAL_TOKEN("%", 0, TOKEN_TYPE_SYM_PERCENT); + LITERAL_TOKEN("/", 0, TOKEN_TYPE_SYM_FSLASH); + LITERAL_TOKEN("\\", 0, TOKEN_TYPE_SYM_BSLASH); + LITERAL_TOKEN(":", 0, TOKEN_TYPE_SYM_COLON); + LITERAL_TOKEN(";", 0, TOKEN_TYPE_SYM_SEMICOLON); + LITERAL_TOKEN(",", 0, TOKEN_TYPE_SYM_COMMA); + LITERAL_TOKEN(">", 0, TOKEN_TYPE_SYM_GREATER); + LITERAL_TOKEN("<", 0, TOKEN_TYPE_SYM_LESS); + LITERAL_TOKEN("=", 0, TOKEN_TYPE_SYM_EQUALS); + LITERAL_TOKEN("~", 0, TOKEN_TYPE_SYM_TILDE); + LITERAL_TOKEN("!", 0, TOKEN_TYPE_SYM_BANG); + LITERAL_TOKEN("^", 0, TOKEN_TYPE_SYM_CARET); + LITERAL_TOKEN("&", 0, TOKEN_TYPE_SYM_AMPERSAND); // Symbols if (char_is_alpha(*tk.token)) { diff --git a/src/onyxparser.c b/src/onyxparser.c index dff9dbba..b2fa3684 100644 --- a/src/onyxparser.c +++ b/src/onyxparser.c @@ -153,8 +153,8 @@ static OnyxAstNode* lookup_identifier(OnyxParser* parser, OnyxToken* token) { OnyxAstNode* ident = NULL; onyx_token_null_toggle(*token); - if (bh_hash_has(OnyxAstNode*, parser->identifiers, token->token)) { - ident = bh_hash_get(OnyxAstNode*, parser->identifiers, token->token); + if (bh_table_has(OnyxAstNode*, parser->identifiers, token->token)) { + ident = bh_table_get(OnyxAstNode*, parser->identifiers, token->token); } onyx_token_null_toggle(*token); @@ -170,11 +170,11 @@ static void insert_identifier(OnyxParser* parser, OnyxAstNode* ident, b32 is_loc } onyx_token_null_toggle(*local->token); - if (bh_hash_has(OnyxAstNode*, parser->identifiers, local->token->token)) { - local->shadowed = bh_hash_get(OnyxAstNode*, parser->identifiers, local->token->token); + if (bh_table_has(OnyxAstNode*, parser->identifiers, local->token->token)) { + local->shadowed = bh_table_get(OnyxAstNode*, parser->identifiers, local->token->token); } - bh_hash_put(OnyxAstNodeLocal*, parser->identifiers, local->token->token, local); + bh_table_put(OnyxAstNodeLocal*, parser->identifiers, local->token->token, local); onyx_token_null_toggle(*local->token); } @@ -183,9 +183,9 @@ static void remove_identifier(OnyxParser* parser, OnyxAstNode* ident) { onyx_token_null_toggle(*local->token); if (local->shadowed) { - bh_hash_put(OnyxAstNode*, parser->identifiers, local->token->token, local->shadowed); + bh_table_put(OnyxAstNode*, parser->identifiers, local->token->token, local->shadowed); } else { - bh_hash_delete(OnyxAstNode*, parser->identifiers, local->token->token); + bh_table_delete(OnyxAstNode*, parser->identifiers, local->token->token); } onyx_token_null_toggle(*local->token); } @@ -221,6 +221,10 @@ static OnyxAstNode* parse_factor(OnyxParser* parser) { OnyxAstNodeCall* call_node = (OnyxAstNodeCall *) onyx_ast_node_new(parser->allocator, ONYX_AST_NODE_KIND_CALL); call_node->callee = sym_node; + // NOTE: Return type is stored on function definition's type + // This may have to change if we want multiple returns + call_node->type = sym_node->type; + OnyxAstNode** prev = &call_node->arguments; OnyxAstNode* curr = NULL; while (parser->curr_token->type != TOKEN_TYPE_CLOSE_PAREN) { @@ -301,6 +305,11 @@ static OnyxAstNode* parse_bin_op(OnyxParser* parser, OnyxAstNode* left) { bin_op->left = left; bin_op->right = right; bin_op->type = left->type; + + if ((left->flags & ONYX_AST_FLAG_COMPTIME) != 0 && (right->flags & ONYX_AST_FLAG_COMPTIME) != 0) { + bin_op->flags |= ONYX_AST_FLAG_COMPTIME; + } + return bin_op; } @@ -561,10 +570,10 @@ static OnyxTypeInfo* parse_type(OnyxParser* parser) { onyx_token_null_toggle(*symbol); - if (!bh_hash_has(OnyxAstNode*, parser->identifiers, symbol->token)) { + if (!bh_table_has(OnyxAstNode*, parser->identifiers, symbol->token)) { onyx_message_add(parser->msgs, ONYX_MESSAGE_TYPE_UNKNOWN_TYPE, symbol->pos, symbol->token); } else { - OnyxAstNode* type_info_node = bh_hash_get(OnyxAstNode*, parser->identifiers, symbol->token); + OnyxAstNode* type_info_node = bh_table_get(OnyxAstNode*, parser->identifiers, symbol->token); if (type_info_node->kind == ONYX_AST_NODE_KIND_TYPE) { type_info = type_info_node->type; @@ -676,8 +685,8 @@ static OnyxAstNode* parse_top_level_statement(OnyxParser* parser) { onyx_token_null_toggle(*symbol); - if (!bh_hash_has(OnyxAstNode *, parser->identifiers, symbol->token)) { - bh_hash_put(OnyxAstNode *, parser->identifiers, symbol->token, (OnyxAstNode *) func_def); + if (!bh_table_has(OnyxAstNode *, parser->identifiers, symbol->token)) { + bh_table_put(OnyxAstNode *, parser->identifiers, symbol->token, (OnyxAstNode *) func_def); } else { onyx_message_add(parser->msgs, ONYX_MESSAGE_TYPE_FUNCTION_REDEFINITION, @@ -735,13 +744,13 @@ OnyxAstNode* onyx_ast_node_new(bh_allocator alloc, OnyxAstNodeKind kind) {\ OnyxParser onyx_parser_create(bh_allocator alloc, OnyxTokenizer *tokenizer, OnyxMessages* msgs) { OnyxParser parser; - bh_hash_init(bh_heap_allocator(), parser.identifiers, 61); + bh_table_init(bh_heap_allocator(), parser.identifiers, 61); OnyxTypeInfo* it = &builtin_types[0]; while (it->kind != 0xffffffff) { OnyxAstNode* tmp = onyx_ast_node_new(alloc, ONYX_AST_NODE_KIND_TYPE); tmp->type = it; - bh_hash_put(OnyxAstNode*, parser.identifiers, (char *)it->name, tmp); + bh_table_put(OnyxAstNode*, parser.identifiers, (char *)it->name, tmp); it++; } @@ -756,7 +765,7 @@ OnyxParser onyx_parser_create(bh_allocator alloc, OnyxTokenizer *tokenizer, Onyx } void onyx_parser_free(OnyxParser* parser) { - bh_hash_free(parser->identifiers); + bh_table_free(parser->identifiers); } OnyxAstNode* onyx_parse(OnyxParser *parser) { diff --git a/src/onyxutils.c b/src/onyxutils.c index ba50b4ee..74aecf9d 100644 --- a/src/onyxutils.c +++ b/src/onyxutils.c @@ -98,6 +98,9 @@ void onyx_ast_print(OnyxAstNode* node, i32 indent) { case ONYX_AST_NODE_KIND_LITERAL: { bh_printf("%b", node->token->token, node->token->length); + if (node->next) { + onyx_ast_print(node->next, indent); + } break; } @@ -110,6 +113,16 @@ void onyx_ast_print(OnyxAstNode* node, i32 indent) { break; } + case ONYX_AST_NODE_KIND_CALL: { + OnyxAstNodeCall* call = &node->as_call; + bh_printf("%b", call->callee->token->token, call->callee->token->length); + onyx_ast_print(call->arguments, indent + 1); + if (call->next) { + onyx_ast_print(call->next, indent); + } + break; + } + default: { onyx_ast_print(node->left, indent + 1); onyx_ast_print(node->right, indent + 1); diff --git a/src/onyxwasm.c b/src/onyxwasm.c index 2dcff896..e30fae20 100644 --- a/src/onyxwasm.c +++ b/src/onyxwasm.c @@ -249,7 +249,7 @@ static void process_statement(OnyxWasmModule* mod, WasmFunc* func, OnyxAstNode* static void process_assign_lval(OnyxWasmModule* mod, WasmFunc* func, OnyxAstNode* lval) { if (lval->kind == ONYX_AST_NODE_KIND_LOCAL || lval->kind == ONYX_AST_NODE_KIND_PARAM) { onyx_token_null_toggle(*lval->token); - i32 localidx = bh_hash_get(i32, mod->local_map, lval->token->token); + i32 localidx = bh_table_get(i32, mod->local_map, lval->token->token); onyx_token_null_toggle(*lval->token); bh_arr_push(func->code, ((WasmInstruction){ WI_LOCAL_SET, localidx })); @@ -339,7 +339,7 @@ static void process_expression(OnyxWasmModule* mod, WasmFunc* func, OnyxAstNode* case ONYX_AST_NODE_KIND_PARAM: { onyx_token_null_toggle(*expr->token); - i32 localidx = bh_hash_get(i32, mod->local_map, expr->token->token); + i32 localidx = bh_table_get(i32, mod->local_map, expr->token->token); onyx_token_null_toggle(*expr->token); bh_arr_push(func->code, ((WasmInstruction){ WI_LOCAL_GET, localidx })); @@ -360,7 +360,14 @@ static void process_expression(OnyxWasmModule* mod, WasmFunc* func, OnyxAstNode* case ONYX_AST_NODE_KIND_CALL: { - DEBUG_HERE; + OnyxAstNodeCall* call = &expr->as_call; + forll (OnyxAstNode, arg, call->arguments, next) { + process_expression(mod, func, arg); + } + + i32 func_idx = (i32) bh_imap_get(&mod->func_map, (u64) call->callee); + bh_arr_push(func->code, ((WasmInstruction){ WI_CALL, func_idx })); + break; } @@ -442,8 +449,8 @@ static void process_function_definition(OnyxWasmModule* mod, OnyxAstNodeFuncDef* *t = '\0'; i32 type_idx = 0; - if (bh_hash_has(i32, mod->type_map, type_repr_buf)) { - type_idx = bh_hash_get(i32, mod->type_map, type_repr_buf); + if (bh_table_has(i32, mod->type_map, type_repr_buf)) { + type_idx = bh_table_get(i32, mod->type_map, type_repr_buf); } else { // NOTE: Make a new type // TODO: Ensure that this isn't going to break things because of alignment @@ -456,7 +463,7 @@ static void process_function_definition(OnyxWasmModule* mod, OnyxAstNodeFuncDef* bh_arr_push(mod->functypes, type); - bh_hash_put(i32, mod->type_map, type_repr_buf, mod->next_type_idx); + bh_table_put(i32, mod->type_map, type_repr_buf, mod->next_type_idx); type_idx = mod->next_type_idx; mod->next_type_idx++; } @@ -472,6 +479,7 @@ static void process_function_definition(OnyxWasmModule* mod, OnyxAstNodeFuncDef* .code = NULL, }; i32 func_idx = mod->next_func_idx++; + bh_imap_put(&mod->func_map, (u64) fd, func_idx); if (fd->flags & ONYX_AST_FLAG_EXPORTED) { onyx_token_null_toggle(*fd->token); @@ -480,7 +488,7 @@ static void process_function_definition(OnyxWasmModule* mod, OnyxAstNodeFuncDef* .kind = WASM_EXPORT_FUNCTION, .idx = func_idx, }; - bh_hash_put(WasmExport, mod->exports, fd->token->token, wasm_export); + bh_table_put(WasmExport, mod->exports, fd->token->token, wasm_export); mod->export_count++; onyx_token_null_toggle(*fd->token); @@ -493,7 +501,7 @@ static void process_function_definition(OnyxWasmModule* mod, OnyxAstNodeFuncDef* i32 localidx = 0; forll (OnyxAstNodeParam, param, fd->params, next) { onyx_token_null_toggle(*param->token); - bh_hash_put(i32, mod->local_map, param->token->token, localidx++); + bh_table_put(i32, mod->local_map, param->token->token, localidx++); onyx_token_null_toggle(*param->token); } @@ -506,7 +514,7 @@ static void process_function_definition(OnyxWasmModule* mod, OnyxAstNodeFuncDef* forll (OnyxAstNodeLocal, local, fd->body->scope->last_local, prev_local) { if (onyx_type_to_wasm_type(local->type) == local_types[ti]) { onyx_token_null_toggle(*local->token); - bh_hash_put(i32, mod->local_map, local->token->token, localidx++); + bh_table_put(i32, mod->local_map, local->token->token, localidx++); onyx_token_null_toggle(*local->token); (*count)++; @@ -522,7 +530,7 @@ static void process_function_definition(OnyxWasmModule* mod, OnyxAstNodeFuncDef* bh_arr_push(mod->funcs, wasm_func); // NOTE: Clear the local map on exit of generating this function - bh_hash_clear(mod->local_map); + bh_table_clear(mod->local_map); } OnyxWasmModule onyx_wasm_generate_module(bh_allocator alloc, OnyxAstNode* program) { @@ -543,9 +551,11 @@ OnyxWasmModule onyx_wasm_generate_module(bh_allocator alloc, OnyxAstNode* progra bh_arr_new(alloc, module.functypes, 4); bh_arr_new(alloc, module.funcs, 4); - bh_hash_init(bh_heap_allocator(), module.local_map, 61); - bh_hash_init(bh_heap_allocator(), module.type_map, 61); - bh_hash_init(bh_heap_allocator(), module.exports, 61); + bh_table_init(bh_heap_allocator(), module.local_map, 61); + bh_table_init(bh_heap_allocator(), module.type_map, 61); + bh_table_init(bh_heap_allocator(), module.exports, 61); + + bh_imap_init(&module.func_map, bh_heap_allocator()); OnyxAstNode* walker = program; while (walker) { @@ -565,9 +575,9 @@ OnyxWasmModule onyx_wasm_generate_module(bh_allocator alloc, OnyxAstNode* progra void onyx_wasm_module_free(OnyxWasmModule* module) { bh_arr_free(module->functypes); bh_arr_free(module->funcs); - bh_hash_free(module->local_map); - bh_hash_free(module->type_map); - bh_hash_free(module->exports); + bh_table_free(module->local_map); + bh_table_free(module->type_map); + bh_table_free(module->exports); } @@ -690,7 +700,7 @@ static i32 output_exportsection(OnyxWasmModule* module, bh_buffer* buff) { bh_buffer_append(&vec_buff, leb, leb_len); i32 key_len = 0; - bh_hash_each_start(WasmExport, module->exports); + bh_table_each_start(WasmExport, module->exports); key_len = strlen(key); leb = uint_to_uleb128((u64) key_len, &leb_len); bh_buffer_append(&vec_buff, leb, leb_len); @@ -699,7 +709,7 @@ static i32 output_exportsection(OnyxWasmModule* module, bh_buffer* buff) { bh_buffer_write_byte(&vec_buff, (u8) (value.kind)); leb = uint_to_uleb128((u64) value.idx, &leb_len); bh_buffer_append(&vec_buff, leb, leb_len); - bh_hash_each_end; + bh_table_each_end; leb = uint_to_uleb128((u64) (vec_buff.length), &leb_len); bh_buffer_append(buff, leb, leb_len); @@ -714,14 +724,14 @@ static i32 output_startsection(OnyxWasmModule* module, bh_buffer* buff) { i32 prev_len = buff->length; i32 start_idx = -1; - bh_hash_each_start(WasmExport, module->exports) { + bh_table_each_start(WasmExport, module->exports) { if (value.kind == WASM_EXPORT_FUNCTION) { if (strncmp("main", key, 5) == 0) { start_idx = value.idx; break; } } - } bh_hash_each_end; + } bh_table_each_end; if (start_idx != -1) { bh_buffer_write_byte(buff, WASM_SECTION_ID_START); @@ -799,6 +809,12 @@ static void output_instruction(WasmInstruction* instr, bh_buffer* buff) { bh_buffer_write_byte(buff, 0); // TODO: Actually output the literal break; + case WI_CALL: + bh_buffer_write_byte(buff, (u8) instr->type); + leb = uint_to_uleb128((u64) instr->data.i1, &leb_len); + bh_buffer_append(buff, leb, leb_len); + break; + default: bh_buffer_write_byte(buff, (u8) instr->type); } -- 2.25.1