From 27d38dbab7c8fd9b8cdb862252764614fc95ad4b Mon Sep 17 00:00:00 2001 From: Brendan Hansen Date: Tue, 21 Jul 2020 14:40:22 -0500 Subject: [PATCH] Bug fixes on interactions between struct members and arrays --- include/onyxmsgs.h | 4 +++ include/onyxtypes.h | 3 +- onyx | Bin 298160 -> 298760 bytes progs/arrays.onyx | 14 ++++----- progs/structs.onyx | 74 ++++++++++++++++++++++++++++++++++---------- src/onyxchecker.c | 15 +++++++-- src/onyxmsgs.c | 4 +++ src/onyxtypes.c | 14 ++++++--- src/onyxwasm.c | 58 +++++++++++++++++++++++----------- 9 files changed, 137 insertions(+), 49 deletions(-) diff --git a/include/onyxmsgs.h b/include/onyxmsgs.h index 2af7b721..26f2b57c 100644 --- a/include/onyxmsgs.h +++ b/include/onyxmsgs.h @@ -29,10 +29,14 @@ typedef enum MsgType { Msg_Type_Function_Param_Mismatch, Msg_Type_Duplicate_Member, + Msg_Type_No_Field, Msg_Type_Unresolved_Type, Msg_Type_Unresolved_Symbol, + Msg_Type_Failed_Gen_Load, + Msg_Type_Failed_Gen_Store, + Msg_Type_Count, } MsgType; diff --git a/include/onyxtypes.h b/include/onyxtypes.h index 2a941ab2..cb21fb14 100644 --- a/include/onyxtypes.h +++ b/include/onyxtypes.h @@ -100,9 +100,10 @@ Type* type_make_pointer(bh_allocator alloc, Type* to); const char* type_get_name(Type* type); u32 type_get_alignment_log2(Type* type); -StructMember type_struct_lookup_member(Type* type, char* member); +b32 type_struct_lookup_member(Type* type, char* member, StructMember* smem); b32 type_is_pointer(Type* type); +b32 type_is_array(Type* tyoe); b32 type_is_struct(Type* type); b32 type_is_bool(Type* type); b32 type_results_in_void(Type* type); diff --git a/onyx b/onyx index f1f7782c6458ef9397401bd2873a73ef8212f916..6cb71073c234edd54da55f98b507d8b0cd4ce380 100755 GIT binary patch delta 71493 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
mZuave}f1TvJ+qK0$ zjG15yfs#%El-ZI!*V%d{%Nn_dYF8&odgxk7y4NM`j0KuP8vFnS?=cnSK(gu-(Lu7R zEEG$~og#Xw3R5!qI(tziTDLSRy|EGA+H34Bm8`6-uvBbBTZva*_zsDVjp$Bc+T<&F z@){{$9X{45^8@`@b3Tad?~U-Dx!P{ikClxSoV*UFA(E39WTY4eDP$k(AhZ9o-l zr=ot&8?h59%cfmLT0g-3=u@-41r2M~LvEom4ykIBQjx%0S z#Sbj7i~6&yG*M%I^ESxYPywVbBvQfx`>Ot|cZ@(f;viL*T)Du0yFW_{E~bJ~FL7VI zO6oLD{z0b_%qgH#lL4%URy-mC)k%J>F~zz%GS7D(qJV&?tw@v)1eFqsY*~ic7D1)+Jl(&2-2r(JceL?Pn&j zf!K>gzryR?Gf(P&n@ev(q7=KLfnMyUtnju!4Ky@7g(0yevcg*-OU8JuLlzbB1zvBO zVz|L&IL&3az?&`=swx!p3%rGrengQl%p$L9siqe7q4sC7SG8>DBQ_BK*fHzJ!}xx-wnu@5sFNs8up%~d}@Y$(4~COp?r}jQ-%o2u0vRxtaZfr z4M|cpL+aEpN?8CS7j`SR*9~D^Bkv&YFG|#FrrSq{u*-vaMEJYz-^4CjUI$A+>_!IRWRJSNG%nJURIxa6lLxo;Tj6*-bHw@Az# zQ|+~Ra)oL+vA60 z)9G2NiEAWc-DLaL;jAk1jS9e4NLcsD_AkR(+qAz3Z>6cGF*uGgn9OsdM4C}!_ZR`G z&yabpl`vjo-#5Y`ysi;p&vGEmmPoCu?VpIyL-lQ_DcZ{4C)qtmvh3hqlGx9T8ICg0 zYmzk9lOn}{*Ifkz!Pd8rMBe^oKY_opo2ekRmjrneB|(b(1HmCdK%H89v#T=@FZ|0k zN3ryf*iP?eip^V^wP^((QD0MRiXq$n36jegS9&25UnopcY^F3rs?p*X2__|`*kYvN zQ75ucD<_OjC7J;FGL^N8ClV>z6KJ@^Wtwj`mrQ5MrZC^krH+W2zFI06`DQz62ShhB zu>yc>$#hs_rXav{&gGfyD5`j7n>jAe7Q{5$EOVK9$o8pb6z$-rPOvLRW0?MzJ$f{2 z6Ue3Gag+#LdfhDKfiz5lBd@Bc9kEYz3{kBWoG%9;TJo5xcuW)=h{s-+ zN3_eM@FaLg;a)`NT&Y(Lop93gjB4Fnd#)1P^@Vq9&eJSrsT0> zoPAXli|;P7*)&@yqC#3_15WNGig+8C6#qgw@~@{U&4fmcv)`yckQlWi3dxfK;lZ?IMw62r)H=N7 zQC<8jtzawF@O@H7tdfxG8Mz$pBMTbt1jG~+l_EGSTTvZOd zYdj_$^cXza4vc3lbKjA$Oe$!ED>{g4JyCw>;b*>lLx?K6&aN8I(jyO1(V8qdyg15U z>2jFt$&ehXB!?-UsAYnK*1+Kaap*uCDkX>LQT9b}7&BPH(&nd=4&{(jY!KN4=GHrT)I4j3R^TOo>Cyjz`8tlUGbXb5DPp9lU{o(@ z>6UPY!rH=EZLQXbT*daos#}7l|qE6CWy*MCk+TdBO$7MMX%ZSO=Q`jeU#4^ zSS0mCX(JGcD_PtDue+xgO4VyYfl@LS0W|$uhwsQ}e=zR{>OAI97yoq^{|}Za@i7J+ zNww%S^A1(`H@W!1;k_LJryYW-LUH!&H0vM-q2+}ilf2WcuT0#KB60ldXXcKI3kG7u zLe3^+!Q^3f?IadIU06`TQ17G#5tbJ0B`t_BF%=dPCUgO4o`eknkT!&)ps*nT(uQzc zVjbb9R?%mOAxBIrMr~8dp;|4aP0*gS3lPoM&0V&oG2A?x&O? zk1+3bLnY5!U1KeF@gHF=Bz{#Q6x(^kE*(^ZS znKHHH%E5Mv$tdFmJ^mJ2-`9g(7<(oFmOvJ5Z*eVSQss zKgVhc#jWWGUsBT%mRX}}x*IN+r4->yYdQcZrS{uXSVG?aXfTm36L5o40?mcE^tui- zhSZaoH#pGtO=T_9L^dX|OsY(%I9h>K4up6n7QsFoVD|@7cYzeo3M5ih;Td8Q&)Ta3 zBr`VNsj^_Qi3%t_I!Od82H1~-Nr_+*&01c!bb#RF)$mVbF`rbbmW~I*YfakOhagkoyN!rL*jI(^-o^9Pt<|hF8b>*)`Ky_rPvyrUwYn zOa1Jf(^<>Fr&N6U3efU?_E!X2NE-GOpqhSmUZC9fYOL8Lp+J=x{i4ZVG=08hW^XsP2|`VM8KyqQ%xGml{UFP2lGe(! zZZ;F9n|f{i;Ro4LU4O2A{6^-($@KbZ@Om^O=0u{-X`kBtpJM~;gO9Mg_0Q^OZetJX zym+JOUuJ@5*Z(}qE{pK&G5z1!LwB?E%1vgMvnF3==Jlt$&sS`wUuOD4X3PoGzr>6g zVEUIDEt{FvZ)VbUW^8{m;bt?sziBQvoBn3%r0y8+w`Q96+WPx;v!KbH4`Q(F`nR5C zeGCJiJcxRZwKZlJ*}b1*Uo~~ke6u^5Za=Y&<=0m|&sv!FuDvY6Ck!&(Y-iuGm*rd% z8f<_4GK(<$582W0uuOZyD{PY8{T23t<@Xw+;>?s6Ouuh|+0tqCG+HLo-o&o<1GtFgFzjPm)W*O!{`^N)pM1|KF9d9;4(qW=vGjfa> zx6DlLZ~BYP$}wcw7~dE(ahVzQe-q~$Ynr}|Lha}{7|aJ=arkl)o_quC`5&>ai3wxO z)Mdmh0A@FvmhT#~6W&SErv8PG*o)kz>+44)czSu01}&H|X~gyOrcLTobNQ@kQz!MEHfPfCtLM(2WdDZfU8KwAPU>^{v{_SSQ!LSqY{X&U+?uKN?__#n0(|zg*^{O%oHuv=)%Ax< zJR4(^&$N;Cq`j&z3>A(pPsh6}@U8Qc6J&7QB>At^$bWB*h<3p5S36+&A0eYhhGg)# z`u}2y41c-g?qf;q?D4%kUmA&tcBkH+iN>ML_Wiv*#mR|>Wd)X)^3Jqqt^Bxsytn6N zy}Eu=A5VK-ueLw$>)EE)*h?!tCHlPjCo4S(ENSc2l0xlJYAvvKW@rJey?tzeCn0I} zwK6(d$>^h^7u(ST5gq>J?ujaTk6nRiIBAR-=qX7G{{s1~3ai52L`)W_#41tR<0|^1 zeSo6FKbHQkiaupyB%P4d=nL#Z)$devu3bvevlq(*IGeMYN2YJ7T|?2~UzAT&(R1xu zik`4kQmYA))=ot)xAzT#5kIqkC9L3biRDa>7AdS@cE)9%gi!d0yVj}b@bCRSqTu0Q z2zx@or*D*Ej>$jm6$KBilz=q~{+`4C76Axp2UO;Lq9Ve-+4hTqhktbLF9i?(@SPu% zF)AbGdMRqK%cC?A3!k#r?uRqIkVR z>$^$H>#oG!so*O%OF+3H{~uKFH*9@~Cm}ifi=1z$=xevxt%rEpMLPqflM4Q$efHp;nhzt-0jT>0LHG{^b&fQkrr82(DZ!{0k` zM!~~f6pmKU&MG4OeFS3wrxZI*iLsKOHdo;{_J5_Q zRSMsEMXQs`cPaeTqmqH+&b^WFLlE%2@|D9dLtOt+1mXVYZz_2B>q$OV@Ni%HqY6IZ zl;rEYDBw@PDPiQxUqn&Pm^t8+5zfmuoD{cI@FjNba8#=B*Uxkl(Mejhy${i$@D~P6 zQq<1-bx_sCH5+g$A>r>)a*Dn4>LVyBt{WA8_)DbjR{YgVY31oaC$*Suz{7FMyzHN!l5^bQIb%XAR8BsnaUjSzUwu#Px@gH)@=;>_`P~ z$|bvWyB6${(w$u!C9Z`Vy${hL=k%e&wG`1*2uIy2xjv>^^j-?C-6r8_O4=v|PgC#< z3jYcPPrXy(Pf_@b67K-3O1rI+s_LPE$A5?o&!Erq9snMQd z{agFkXwP*<;$eGil_y)@Y%i_yq_y6^SxP~NBd)&aDr1oB@TvPm1;_N_qbg4yqjrLw zJjPROVA|h*jHjD^%D#1sr+p}VsWrQ)WEcLm!1f9rzM0-j!E4p=g1%BaZG?iKQ3nDx zDRrkR_|}mEF~;5Oy&4hGC`(7}p<~hUhHtXpq3Ez_w`?qufeG2jQ6OB8;Fg1>gNRJ>m4U!>sY?J?s#?YnMK=nE8hSxDlISLiDhJa>Ua z#Kx|;-a^A0gF$>OR;E3^Q20x{^jFW}KIPI|Vi$*mOpQM+aW+KcBE z+3)>jo|UWUR~3B6R0((1H1;ca__>Q?3Ld@&@;|_-0BdSdJy-FkbEZ%$UrW!FdihjC z6F>yny4OyLNed-(rDJ*BlTg}5MU&GtU6bXX)=j~~HvF`yJ8aNc)y8I$cvVp za_neOnj~E@i3gl4(@`z<&yq5<5(Ph|mYuhmiLK* ze>gz$aXP@0fTMcbcC{zE^sGV(UzCrCmgTHmCD!TxV(nj{yPhNd`gH*onec*A)mhRX zrQqQ&JDsKACsd2mLnUF6J+ua0`)U=vLv`5`RrLJ|9=@i(UBNqUmxwczfuFOV1Uvl= zsp}#87(z)W6>|6yxj*da$;b^eMkXa%Rot;kcC>t-^}oI)z`RvU`ZsM|(uUt5xGUO~L=8 z;Br$N1Hk<%;w=>se#GNj1>ZDZA{HwAvkLyiE(s`BaE4wC(CVA{aU$# zpGF<9gHt_m{RRq*L~Uc3%Hx!z@O{2375wgM$!ezJc$2+!DvI11#cpp{%X7c|B%;l& zL`~gS>K;6i#^F8gn+`_lVS0km!u=_}R`BqHA3xa@)1blMD%!tHYW9IDT$X(mqWfjV zNv;VCBz%w3zpa9YAHc3qaA$dWkis8sA0TNpDmwhs%N!vsv;@&qAj-q6d#54`e_`-8 z1?Q^uSL>JBGYa0iT59d|3NI`8r*oxR*DLMzOL$1@u3B1$(J@63e)QqAf`^})Kd;~` z)uDc;#ze$RGlrjW%2IH71~La9l5*^;BEnD4_aZozh?>y~BmAV(RKUrGd&6vat-=qg zZLLvC(qh6l{?D=8YWv9<$g$0eEc{5vGxjlx{y;^)q-tJJaXn^7&qM(}L(!yeh&PiK z2=`t{Qt;;%NXo|)g8~IVpbFkd1@EBXe^*PuO{%;OQ1I|$^y4Hvq+K&zVt%6-%}@j{ zs71z)J(;pb{rDfsNmC7(FiW@+mbe7UlKT2j{@QE<5hj26k+1AaqAESe%2RVl$A z+clTNqQ9u<6{?l)ucFV}wTSK)iKP{)=990M@SZ9;subVFZaN3Zmh@WezZ4*LiFS9;zwdM~wOZt)azXS|R7g#Nc+cA1cG z-vxNIv#;R%2kis5cuJznk4x>G|LyhBt30phkaFNwPl?}YT&r#WYEO5wIuVJuyMo2q z)vG4s_nY3n?*&nU;v@>STwD}rOH$Hhe6FNR|lRa#Wr=36Akn0Z%?AkS+ q_Qvww_PapyFYF`1^X%x`JnjA8&yvAc?V%KWY`F|hw1=+nr2SuWbg8KT delta 70558 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®s@9jcP~Y2TQWpV>$S8@5~3HdZ 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 jeqwE%z#80n*8pYxd i32 { least := a; @@ -20,7 +20,7 @@ min :: proc #overloaded { } // NOTE: in-place insertion sort -sort :: proc (src: ^i32, len: i32) { +sort :: proc (src: []i32, len: i32) { for i: 0, len { smallest := i; @@ -44,7 +44,7 @@ str_test :: proc #export { // Address of and dereference cancel each other out print(^*hello_str); - print(hello_str, 5); + print(hello_str as []u8, 5); for i: 0, 10, 2 print(i); @@ -56,8 +56,8 @@ proc #export "main2" { print(__heap_start as i32); len :: 10; - global_arr = alloc((len * 4) as u32) as ^i32; - other_arr := alloc((len * 4) as u32) as ^i32; + global_arr = alloc(sizeof [10]i32) as []i32; + other_arr := alloc((len * 4) as u32) as []i32; print(global_arr as i32); print(other_arr as i32); @@ -94,8 +94,8 @@ alloc :: proc (size: u32) -> rawptr { return ((__heap_start as u32) + curr_offset) as rawptr; } -alloc_2darr :: proc (rows: u32, cols: u32) -> ^^i32 { - arr := alloc(rows * 4) as ^^i32; +alloc_2darr :: proc (rows: u32, cols: u32) -> []^i32 { + arr := alloc(rows * 4) as []^i32; for i: 0, cols arr[i] = alloc(cols * 4) as ^i32; return arr; } diff --git a/progs/structs.onyx b/progs/structs.onyx index 091e911d..23bcce71 100644 --- a/progs/structs.onyx +++ b/progs/structs.onyx @@ -37,7 +37,7 @@ foo_get :: proc (fooarr: []Foo, i: i32) -> ^Foo { return ^fooarr[i]; } -proc #export "main" { +proc #export "main3" { // foo := foo_make(); // other_foo := foo_make(); // other_foo.i = 1234; @@ -126,7 +126,7 @@ link_print :: proc (start: ^Link) -> i32 { return count; } -link_test :: proc #export "main2" { +link_test :: proc #export "main4" { node_head := alloc(sizeof ^Link) as ^^Link; *node_head = 0 as ^Link; @@ -142,21 +142,63 @@ link_test :: proc #export "main2" { // TODO: Make everything below this comment work -// SOA :: struct { -// x : [3]i32; -// y : [3]i32; -// } +multi_arr :: proc #export "main2" { + arr1 := alloc(sizeof [5][5] i32) as [5][5] i32; // Sizeof 25 * 4 + arr2 := alloc(sizeof [5]^ i32) as [5]^ i32; // Sizeof 20 -// soa_test :: proc #export "main" { -// m_arr := alloc(sizeof [5][5]i32) as [5][5]i32; + arr2[3][2] = 5; // (arr1 + (3 * 5 * 4) + (2 * 4)) + print(arr2[3][2]); + // arr2[3][2] = 5; // (arr1[3] + 2 * 4) +} + +Vec2 :: struct { + x : i32; + y : i32; +} -// for y: 0, 5 { -// for x: 0, 5 { -// m_arr[y][x] = x + y * 5; -// } -// } +SOA :: struct { + positions : [10] Vec2; + velocities : [10] Vec2; + things : [10] ^Vec2; +} + +vec2_set :: proc (v: ^Vec2) { + v.x = 1234; + v.y = 5678; +} -// print(m_arr[2][4]); // 14 +soa_test :: proc #export "main" { -// print(sizeof SOA); -// } \ No newline at end of file + // print(sizeof SOA); // 240 + + soa := alloc(sizeof SOA + 20 * sizeof Vec2) as ^SOA; + + for i: 0, 10 { + soa.things[i] = alloc(sizeof Vec2) as ^Vec2; + } + + soa.velocities[2].x = 10; + soa.velocities[2].y = 12; + soa.positions[5].x = 1; + soa.positions[5].y = 2; + soa.positions[2].x = 1001; + vec2_set(^(soa.positions[6])); + vec2_set(soa.things[2]); + + print(soa.positions[5].y); + print(soa.velocities[2].x); + print(soa.things[2].x); + print(soa.things[2].y); + print(soa.positions[6].x); + print(soa.positions[6].y); + + m_arr := alloc(sizeof [5][5]i32) as [5][5]i32; + + for y: 0, 5 { + for x: 0, 5 { + m_arr[y][x] = x + y * 5; + } + } + + for i: 0, 25 print((m_arr as [] i32)[i]); +} \ No newline at end of file diff --git a/src/onyxchecker.c b/src/onyxchecker.c index 35945643..8ac0d5eb 100644 --- a/src/onyxchecker.c +++ b/src/onyxchecker.c @@ -88,6 +88,8 @@ CHECK(for, AstFor* fornode) { if (fornode->step) if (check_expression(fornode->step)) return 1; + if (check_expression((AstTyped *) fornode->var)) return 1; + // HACK if (!types_are_compatible(fornode->start->type, &basic_types[Basic_Kind_I32])) { onyx_message_add(Msg_Type_Literal, @@ -474,11 +476,20 @@ CHECK(field_access, AstFieldAccess* field) { } token_toggle_end(field->token); - StructMember smem = type_struct_lookup_member(field->expr->type, field->token->text); + StructMember smem; + if (!type_struct_lookup_member(field->expr->type, field->token->text, &smem)) { + onyx_message_add(Msg_Type_No_Field, + field->token->pos, + field->token->text, + type_get_name(field->expr->type)); + token_toggle_end(field->token); + return 1; + } + field->offset = smem.offset; field->type = smem.type; - token_toggle_end(field->token); + token_toggle_end(field->token); return 0; } diff --git a/src/onyxmsgs.c b/src/onyxmsgs.c index 0a45933f..afd76686 100644 --- a/src/onyxmsgs.c +++ b/src/onyxmsgs.c @@ -27,9 +27,13 @@ static const char* msg_formats[] = { "function '%b' expected type '%s' in position '%d', got '%s'", "duplicate declaration of struct member '%s'", + "field '%s' does not exist on '%s'", "unable to resolve type for symbol '%b'", "unable to resolve symbol '%b'", + + "failed to generate load instruction for type '%s'", + "failed to generate store instruction for type '%s'", }; void onyx_message_init(bh_allocator allocator, bh_table(bh_file_contents)* files) { diff --git a/src/onyxtypes.c b/src/onyxtypes.c index 1f01b57d..4a56ecc5 100644 --- a/src/onyxtypes.c +++ b/src/onyxtypes.c @@ -298,15 +298,15 @@ u32 type_get_alignment_log2(Type* type) { return 2; } -StructMember type_struct_lookup_member(Type* type, char* member) { - if (!type_is_struct(type)) return (StructMember) { 0 }; +b32 type_struct_lookup_member(Type* type, char* member, StructMember* smem) { + if (!type_is_struct(type)) return 0; if (type->kind == Type_Kind_Pointer) type = type->Pointer.elem; TypeStruct* stype = &type->Struct; - if (!bh_table_has(StructMember, stype->members, member)) return (StructMember) { 0 }; - StructMember smem = bh_table_get(StructMember, stype->members, member); - return smem; + if (!bh_table_has(StructMember, stype->members, member)) return 0; + *smem = bh_table_get(StructMember, stype->members, member); + return 1; } b32 type_is_pointer(Type* type) { @@ -314,6 +314,10 @@ b32 type_is_pointer(Type* type) { || (type->kind == Type_Kind_Array); } +b32 type_is_array(Type* type) { + return type->kind == Type_Kind_Array; +} + b32 type_is_struct(Type* type) { if (type->kind == Type_Kind_Struct) return 1; if (type->kind == Type_Kind_Pointer && type->Pointer.elem->kind == Type_Kind_Struct) return 1; diff --git a/src/onyxwasm.c b/src/onyxwasm.c index 93e21ead..228561e3 100644 --- a/src/onyxwasm.c +++ b/src/onyxwasm.c @@ -385,12 +385,13 @@ COMPILE_FUNC(store_instruction, Type* type, u32 alignment, u32 offset) { i32 store_size = type_size_of(type); i32 is_basic = type->kind == Type_Kind_Basic || type->kind == Type_Kind_Pointer; - i32 is_integer = is_basic && - ((type->Basic.flags & Basic_Flag_Integer) - || (type->Basic.flags & Basic_Flag_Pointer)); - i32 is_float = is_basic && type->Basic.flags & Basic_Flag_Float; + i32 is_pointer = is_basic && (type->Basic.flags & Basic_Flag_Pointer); + i32 is_integer = is_basic && (type->Basic.flags & Basic_Flag_Integer); + i32 is_float = is_basic && type->Basic.flags & Basic_Flag_Float; - if (is_integer) { + if (is_pointer) { + WID(WI_I32_STORE, ((WasmInstructionData) { alignment, offset })); + } else if (is_integer) { if (store_size == 1) WID(WI_I32_STORE_8, ((WasmInstructionData) { alignment, offset })); else if (store_size == 2) WID(WI_I32_STORE_16, ((WasmInstructionData) { alignment, offset })); else if (store_size == 4) WID(WI_I32_STORE, ((WasmInstructionData) { alignment, offset })); @@ -399,9 +400,9 @@ COMPILE_FUNC(store_instruction, Type* type, u32 alignment, u32 offset) { if (store_size == 4) WID(WI_F32_STORE, ((WasmInstructionData) { alignment, offset })); else if (store_size == 8) WID(WI_F64_STORE, ((WasmInstructionData) { alignment, offset })); } else { - onyx_message_add(Msg_Type_Literal, + onyx_message_add(Msg_Type_Failed_Gen_Store, (OnyxFilePos) { 0 }, - "failed to generate store instruction"); + type_get_name(type)); } *pcode = code; @@ -412,23 +413,26 @@ COMPILE_FUNC(load_instruction, Type* type, u32 offset) { i32 load_size = type_size_of(type); i32 is_basic = type->kind == Type_Kind_Basic || type->kind == Type_Kind_Pointer; - i32 is_integer = is_basic && - ((type->Basic.flags & Basic_Flag_Integer) - || (type->Basic.flags & Basic_Flag_Pointer)); + i32 is_pointer = is_basic && (type->Basic.flags & Basic_Flag_Pointer); + i32 is_integer = is_basic && (type->Basic.flags & Basic_Flag_Integer); i32 is_float = is_basic && type->Basic.flags & Basic_Flag_Float; i32 is_unsigned = is_basic && type->Basic.flags & Basic_Flag_Unsigned; WasmInstructionType instr = WI_NOP; i32 alignment = type_get_alignment_log2(type); - if (is_integer) { + if (is_pointer) { + instr = WI_I32_LOAD; + } + else if (is_integer) { if (load_size == 1) instr = WI_I32_LOAD_8_S; else if (load_size == 2) instr = WI_I32_LOAD_16_S; else if (load_size == 4) instr = WI_I32_LOAD; else if (load_size == 8) instr = WI_I64_LOAD; if (load_size < 4 && is_unsigned) instr += 1; - } else if (is_float) { + } + else if (is_float) { if (load_size == 4) instr = WI_F32_LOAD; else if (load_size == 8) instr = WI_F64_LOAD; } @@ -436,9 +440,9 @@ COMPILE_FUNC(load_instruction, Type* type, u32 offset) { WID(instr, ((WasmInstructionData) { alignment, offset })); if (instr == WI_NOP) { - onyx_message_add(Msg_Type_Literal, + onyx_message_add(Msg_Type_Failed_Gen_Load, (OnyxFilePos) { 0 }, - "failed to generate load instruction"); + type_get_name(type)); } *pcode = code; @@ -765,16 +769,26 @@ COMPILE_FUNC(intrinsic_call, AstIntrinsicCall* call) { COMPILE_FUNC(array_access_location, AstArrayAccess* aa, u64* offset_return) { bh_arr(WasmInstruction) code = *pcode; - *offset_return = 0; - compile_expression(mod, &code, aa->expr); if (aa->elem_size != 1) { WID(WI_I32_CONST, aa->elem_size); WI(WI_I32_MUL); } - compile_expression(mod, &code, aa->addr); + + u64 offset = 0; + if (aa->addr->kind == Ast_Kind_Array_Access + && aa->addr->type->kind == Type_Kind_Array) { + compile_array_access_location(mod, &code, (AstArrayAccess *) aa->addr, &offset); + } else if (aa->addr->kind == Ast_Kind_Field_Access + && aa->addr->type->kind == Type_Kind_Array) { + compile_field_access_location(mod, &code, (AstFieldAccess *) aa->addr, &offset); + } else { + compile_expression(mod, &code, aa->addr); + } WI(WI_I32_ADD); + *offset_return += offset; + *pcode = code; } @@ -789,7 +803,8 @@ COMPILE_FUNC(field_access_location, AstFieldAccess* field, u64* offset_return) { source_expr = (AstTyped *) ((AstFieldAccess *) source_expr)->expr; } - if (source_expr->kind == Ast_Kind_Array_Access) { + if (source_expr->kind == Ast_Kind_Array_Access + && source_expr->type->kind != Type_Kind_Pointer) { u64 o2 = 0; compile_array_access_location(mod, &code, (AstArrayAccess *) source_expr, &o2); offset += o2; @@ -1308,6 +1323,13 @@ void onyx_wasm_module_compile(OnyxWasmModule* module, ProgramInfo* program) { module->next_func_idx = program->foreign_func_count; module->next_global_idx = program->foreign_global_count; + WasmExport mem_export = { + .kind = WASM_FOREIGN_MEMORY, + .idx = 0, + }; + bh_table_put(WasmExport, module->exports, "memory", mem_export); + module->export_count++; + bh_arr_each(Entity, entity, program->entities) { switch (entity->type) { case Entity_Type_Function_Header: { -- 2.25.1