From a3e4d1f0eaa896297ee319a45d3f6fcd0d5b9fef Mon Sep 17 00:00:00 2001 From: Brendan Hansen Date: Mon, 27 Jul 2020 16:37:39 -0500 Subject: [PATCH] Added procedure declarations at the expression level; properly using elems now --- include/onyxwasm.h | 8 ++++++-- onyx | Bin 343368 -> 343824 bytes progs/ez.onyx | 4 ++-- progs/fcf.onyx | 22 ++++++++++++++++++++++ src/onyxparser.c | 10 ++++++++++ src/onyxwasm.c | 41 +++++++++++++++++++++++++++++++---------- 6 files changed, 71 insertions(+), 14 deletions(-) diff --git a/include/onyxwasm.h b/include/onyxwasm.h index 72a5493e..c8e4831e 100644 --- a/include/onyxwasm.h +++ b/include/onyxwasm.h @@ -295,6 +295,9 @@ typedef struct OnyxWasmModule { // NOTE: Mapping from local ast node ptrs to indicies bh_imap local_map; + // NOTE: Mapping ptrs to elements + bh_imap elem_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. @@ -308,15 +311,16 @@ typedef struct OnyxWasmModule { bh_arr(WasmGlobal) globals; bh_arr(WasmFunc) funcs; bh_arr(WasmDatum) data; + bh_arr(i32) elems; - u32 next_type_idx; u32 export_count; - u32 element_count; + u32 next_type_idx; u32 next_func_idx; u32 next_foreign_func_idx; u32 next_global_idx; u32 next_foreign_global_idx; u32 next_datum_offset; + u32 next_elem_idx; } OnyxWasmModule; OnyxWasmModule onyx_wasm_module_create(bh_allocator alloc); diff --git a/onyx b/onyx index 5691a378a7c311f3b29a4a1352769f9ce575a5a7..4865923646d7e8f1f9a5ddd670b6a63fb449c24b 100755 GIT binary patch delta 77665 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䁸w=AoIQvWr1{|tJko^HiGE=B3{52mH0bdfo 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%0DXX*Ot zXW(zs^|7P)Zu2;Qc6>RiO(V&8${iW!&o$S%OX6UpEnHj6IDMs7lXb?=vbbBR`2d=c zMq$iyE^YqO{R+*KvJiVL12FY9n!f#xs$}@vmQTfom;?F3lPK3$-`T38>%Cu)%+~O2 zsQ#X=R*G5TUKjMIwH~ekdoLA;eHw6@N4VNM=Nmi%b?F1QBvSQ#xJNt)bEj*@L*-7` z7^sgVAJr93B<6juYMA+ zoz#yqs=pa2K|>Oap{XKoeQlEdno#uvY2$T$^#di--3B&R0XOUBT6)Q+ABBv2J#vdh zvE`c0R$YJ34N^gA+;qL_E&;jdA>Ca4Y{e;E&u5eYuGi3pLYyFTd7oeK7TZa>zWO2Z zy1KslkDIoZ`r1b578b`y(*1D-HIPg78Lv?vzFi<5k(+UouCIO&`)*x-_ZPR+}8^UK;K`svwN=Qaqz!q1>NiALtcOFjK14^6vfv6ksA zUH|bxsTim059|8s=d!-n^}9b3KpdmwOJU-GAx9b2&t0ZU!~fZo%+dAd7YczjnowKR z(@@>3hiX{Y_i~dGp#ETu=DsiWw0}w0B)2P?n=jDK_cxO2@p3b6)%Dd6sjL*VCv|i6 zQ@%TNef7MER~c>GC%U=%Tl^EczWPC&KXiTd(_H_rt8 z-DMlBHtAZIxW%nPB7|t%2}LT1FfD?L2yr<`l|G>HRw0`vsv0k%Qi6!MM%+RoX+sm2 zM0{t?e;)kzWxBub%*>f@&YpATeE+Z0L!O^ZD`YulmL43GYc7I0b&I_kZ@iH|CwOLg zA@7Mka_5(z6vt+(zl(Rox37#d#xb0_Fch3aCZ)nnzrf?tbd+C<4tpZ%z6rbop-4Zv zRV`e6qr)K;3LMpwLMj}%tygB!gbsC9$B-T zRGA@|t7M^47WhSqYYqmFJg~<)kE@C5K&A?-xG{SZf^r=d5LtopoFGuCE5z*Xg_&a{ zN5ENVd=8vNt5?8Th?)dvEmyncuERm^_t=5eC*8tLi|s_$;J4U}Z0kRcQVj%8pi^EA z*N*|WN~?{I^9Y6n3^k7}I0e1{oP~^);JtBgN20t7p7Gp*(cs7QyDV||1(;bF+X&7{ zW;ejQ(dR~Rzwd%`faoDOD_NFG-yM`zy(3$NBCn;8ab^O}oR2ytbVIh(@snrHa|W&X ze;nz?u~|K#WX069;o{BqIO}k@F!-7M7Wj&hLg8kdN?@sO5Xz6WRzzXkMvea8;|m95+;GO*mo{C%Xk-q55OJR2~TgZ z+;v!)yc;{P$nFq0XEdG!=e*4ZaF+D8g4>J=8K|*n>vX`tsf%wsM^$ve%;Mg^!o8+M zO*JTsLB@d`na=~C@XUGwk4erb9nDkWu_Z94V9MJ7f0cu?l5nMPuOlyZ_MiwygpUh1 zHLRvvd{MW_8Qo^=#tEwT!2R&k9n|CnIA;%i20xGA;Cl2Ezri_oFp?nm6v^wMAhY_6gKN^C2DlK z|3D(q$!jHQTA)&Qm8dZxf33pbKGo4u!80QEM)=!x$*rZTH6@Utqh%_V()mkoC{ywD z17W+$H1C+cUZ%#UJ-KYZuhLznSgcbIkE?jj&rXZ0F^4aZdVkP+;%Y?N&WK&^*s7c2 QDwg)8*nVBEn__C i32 { - this.foo_other(); + foo_other(this); return x + y; } @@ -62,7 +62,7 @@ proc #export "main" { foo.st = st; print(alignof Foo); print(sizeof Foo); - print(foo.foo_sum()); + print(foo_sum(foo)); print_st(foo.st, 20); pa := (__heap_start as i32 + sizeof Foo) as ^PrintableArray; diff --git a/progs/fcf.onyx b/progs/fcf.onyx index f043423f..f8eea8f8 100644 --- a/progs/fcf.onyx +++ b/progs/fcf.onyx @@ -30,6 +30,18 @@ echo :: proc (i: i32) -> i32 { return i; } +I32Array :: struct { + length : i32; + data : ^i32; +} + +array_map :: proc (arr: I32Array, map: proc (i32) -> i32) { + for i: 0, arr.length arr.data[i] = map(arr.data[i]); +} + +minus_one :: proc (n: i32) -> i32 { return n - 1; } +double :: proc (n: i32) -> i32 { return n << 1; } + proc #export "main" { call_me(echo, 10); @@ -48,4 +60,14 @@ proc #export "main" { dc.right = 19; print(execute(dc)); + + len :: 10; + data := (__heap_start as i32 + sizeof DeferredCall) as ^i32; + for i: 0, len data[i] = i; + print(data as [] i32, len); + + add_one :: proc (n: i32) -> i32 { return n + 1; }; + + array_map(len, data, add_one); + print(data as [] i32, len); } diff --git a/src/onyxparser.c b/src/onyxparser.c index 7555e237..6ea6d391 100644 --- a/src/onyxparser.c +++ b/src/onyxparser.c @@ -255,6 +255,16 @@ static AstTyped* parse_factor(OnyxParser* parser) { break; } + case Token_Type_Keyword_Proc: { + retval = (AstTyped *) parse_function_definition(parser); + retval->flags |= Ast_Flag_Function_Used; + + // TODO: Maybe move this somewhere else? + add_node_to_process(parser, (AstNode *) retval); + + break; + } + default: onyx_message_add(Msg_Type_Unexpected_Token, parser->curr->pos, diff --git a/src/onyxwasm.c b/src/onyxwasm.c index 56afd045..687e27b6 100644 --- a/src/onyxwasm.c +++ b/src/onyxwasm.c @@ -240,6 +240,7 @@ static WasmType onyx_type_to_wasm_type(Type* type) { } static i32 generate_type_idx(OnyxWasmModule* mod, Type* ft); +static i32 get_element_idx(OnyxWasmModule* mod, AstFunction* func); #define WI(instr) bh_arr_push(code, ((WasmInstruction){ instr, 0x00 })) #define WID(instr, data) bh_arr_push(code, ((WasmInstruction){ instr, data })) @@ -915,8 +916,8 @@ COMPILE_FUNC(expression, AstTyped* expr) { } case Ast_Kind_Function: { - i32 funcidx = bh_imap_get(&mod->index_map, (u64) expr); - WID(WI_I32_CONST, funcidx); + i32 elemidx = get_element_idx(mod, (AstFunction *) expr); + WID(WI_I32_CONST, elemidx); break; } @@ -1192,6 +1193,22 @@ static i32 generate_type_idx(OnyxWasmModule* mod, Type* ft) { return type_idx; } +static i32 get_element_idx(OnyxWasmModule* mod, AstFunction* func) { + if (bh_imap_has(&mod->elem_map, (u64) func)) { + return bh_imap_get(&mod->elem_map, (u64) func); + } else { + i32 idx = mod->next_elem_idx; + bh_imap_put(&mod->elem_map, (u64) func, idx); + + i32 func_idx = bh_imap_get(&mod->index_map, (u64) func); + bh_arr_push(mod->elems, func_idx); + + mod->next_elem_idx++; + + return idx; + } +} + static inline b32 should_compile_function(AstFunction* fd) { // NOTE: Don't output intrinsic functions if (fd->flags & Ast_Flag_Intrinsic) return 0; @@ -1431,7 +1448,8 @@ OnyxWasmModule onyx_wasm_module_create(bh_allocator alloc) { .data = NULL, .next_datum_offset = 0, - .element_count = 0, + .elems = NULL, + .next_elem_idx = 0, .structured_jump_target = NULL, }; @@ -1441,6 +1459,7 @@ OnyxWasmModule onyx_wasm_module_create(bh_allocator alloc) { bh_arr_new(alloc, module.imports, 4); bh_arr_new(alloc, module.globals, 4); bh_arr_new(alloc, module.data, 4); + bh_arr_new(alloc, module.elems, 4); // NOTE: 16 is probably needlessly large bh_arr_new(global_heap_allocator, module.structured_jump_target, 16); @@ -1451,6 +1470,7 @@ OnyxWasmModule onyx_wasm_module_create(bh_allocator alloc) { bh_imap_init(&module.index_map, global_heap_allocator, 128); bh_imap_init(&module.local_map, global_heap_allocator, 16); + bh_imap_init(&module.elem_map, global_heap_allocator, 16); return module; } @@ -1470,7 +1490,6 @@ void onyx_wasm_module_compile(OnyxWasmModule* module, ProgramInfo* program) { switch (entity->type) { case Entity_Type_Function_Header: { if (!should_compile_function(entity->function)) break; - module->element_count++; u64 func_idx; if ((entity->function->flags & Ast_Flag_Foreign) != 0) @@ -1670,6 +1689,8 @@ static i32 output_funcsection(OnyxWasmModule* module, bh_buffer* buff) { } static i32 output_tablesection(OnyxWasmModule* module, bh_buffer* buff) { + if (bh_arr_length(module->elems) == 0) return 0; + i32 prev_len = buff->length; bh_buffer_write_byte(buff, WASM_SECTION_ID_TABLE); @@ -1682,7 +1703,7 @@ static i32 output_tablesection(OnyxWasmModule* module, bh_buffer* buff) { // NOTE: funcrefs are the only valid table element type bh_buffer_write_byte(&vec_buff, 0x70); - output_limits(module->element_count, -1, &vec_buff); + output_limits(bh_arr_length(module->elems), -1, &vec_buff); leb = uint_to_uleb128((u64) (vec_buff.length), &leb_len); bh_buffer_append(buff, leb, leb_len); @@ -1839,6 +1860,8 @@ static i32 output_startsection(OnyxWasmModule* module, bh_buffer* buff) { } static i32 output_elemsection(OnyxWasmModule* module, bh_buffer* buff) { + if (bh_arr_length(module->elems) == 0) return 0; + i32 prev_len = buff->length; bh_buffer_write_byte(buff, WASM_SECTION_ID_ELEMENT); @@ -1846,8 +1869,6 @@ static i32 output_elemsection(OnyxWasmModule* module, bh_buffer* buff) { bh_buffer vec_buff; bh_buffer_init(&vec_buff, buff->allocator, 128); - u32 func_count = bh_arr_length(module->funcs) + module->next_foreign_func_idx; - i32 leb_len; u8* leb; @@ -1861,11 +1882,11 @@ static i32 output_elemsection(OnyxWasmModule* module, bh_buffer* buff) { bh_buffer_write_byte(&vec_buff, 0x00); bh_buffer_write_byte(&vec_buff, WI_BLOCK_END); - leb = uint_to_uleb128((u64) func_count, &leb_len); + leb = uint_to_uleb128((u64) bh_arr_length(module->elems), &leb_len); bh_buffer_append(&vec_buff, leb, leb_len); - fori (funcidx, 0, func_count - 1) { - leb = uint_to_uleb128((u64) funcidx, &leb_len); + bh_arr_each(i32, elem, module->elems) { + leb = uint_to_uleb128((u64) *elem, &leb_len); bh_buffer_append(&vec_buff, leb, leb_len); } -- 2.25.1