From 611d4554b005ed8d54858c6745d8c9346c75c7e2 Mon Sep 17 00:00:00 2001 From: Brendan Hansen Date: Tue, 16 Feb 2021 08:44:36 -0600 Subject: [PATCH] small cleanup and bugfix with code generation --- bin/onyx | Bin 344152 -> 344112 bytes core/memory.onyx | 2 +- src/onyxwasm.c | 54 ++++++++++++++--------------------------------- 3 files changed, 17 insertions(+), 39 deletions(-) diff --git a/bin/onyx b/bin/onyx index 277b985238716889aec2a8ace0a8ba591dc705d5..4dff50bcd68592b0800847dc0956677c3abcfe3f 100755 GIT binary patch delta 43109 zcmbrn2UrwW7eBl^vnVLApn#~Ti*6LGi;AM6f}$=F6?<1A7A#RTXe{Vrz_M9UjOE5e z4YtH2nqY~&pki-WVvH?ljG48fQDa$lzTcUdrOf-j-~azT-#*WBc7FHVbI(2Z+;hv^ z8Lp@K=cM^(g=mwPhW=4u(`;TtpG~uuRnj*0NWLvyX_9xuYP)DXhE$XOjomYqAw)z;2o&yI3cJ+i?Rm$}iH&3un>0Trr&XI`#8!>cX}JI473 zQ1V_M;<4TnJdPEKX4`V`4mrlfXtUY6W1PvCSWfcM_$%d%{D5`8#8qRCV_YS$=<`t4 zc-AzJYgvgnV{J=vK*DaCtp|+xY*rp;)aJA7Jg&V*K8XOD&4fIzSLJ(wxU^*$DVHSq zNU$W?<5e!HfdrO(oNHy-ahLdFj1l(d4pAJfua$ueRM13&*=9*HTVsq-ahW5HQD*B? z;o6^~7@KJ^obyI4*i1ldW|Oi zjaHwr3YY0`IQ_f?G82l7iq`L9U;fTjb(=S{iblhR7I1-n`gw7|;5(|d#_KYJTATIz z9yMd{e&<4~L{Aq*Yc44iNV(&sTJ5RL)@|V`dyh267aQ7kn0<4TGgYijRksds7vc}I zl{dH#J#>eu>V1syEcgKz&Yd{Kw%+1`y4d23K4xwHJ}vl9YEU|IncanT*F|w(Ib11q zTT0hl$@N@ZmniaeF#9=;uf}ybM1{9-L$RKR*o~W9JMP>;R_zuS$t^y}2HfIWbN3AF z$lqKQuGK**KO|&;JBbM~+u{vE;#~+$Pc<4e`V6N*wv$}bI&uLX=MPXNP=EH(CcX-5 zd7IM*)`ZfsDsW@T5y%UFs3qB^))om;%=1tfDG69Efur@$p0KRjoIxAHw%z7}xk?9$ z)&Ffj)8FCRd9nS9)groQgS>%u&GivO7DwK zK-CevYEV8!HCNM-V{NQTDh9CRQ=HCY03;DtKE;z7?5k5;U`HxZpE2a6Vp7Brf&E3j zMHXi7fRxdVU9rY&Tabkeahcx{k-GKwfl{#I4(?`qPjhW8C;pLQQw);P|C3{Fog>0d zgENJvwZ7civ82tM8)aMjr?alseoA4i zJq#;_gE%W)cXA86FL+*JGtY2!Lr0z~66fVkt+S5?IXPX(&!@_L;ttEA#Mtyat5h3UQ zig0MQo*AuAKFV63T%Ew-WIr;CtHVo17+6^z0k>|aa%mt&M+vtir+7&npZwyVKhTiS z{^oH-HT$ZkqL^j2u^g&faVNN}&&WmOF(*!WW41mwXQnh2=bfID5^d`jXwGbVFj=eV z6!s)Wze`sobA|{sC@!;y_EDhA<6|?sY0c?RwQ;SUrC2(~TF-}_j%i&^zx+t(nW^_< zZA|V5C}cNEwSD*o!7O77ep*kZ3tIicRrq-l2GxQ-3hxwlI;(V^9QWcpoAA?midey^ z>1I7IWnTi+oLFd1{GGaqHlIzn$Ti?Tc*0g)xUTb1!oK^?E!Z*Oue8Ia3bR zF`3a?X*dz=IbPv0W-d%2s*^+=h#wd2= zBwX&c1gnYpnDVr^8{ORpe-#e+JjXTq_})oP@qDD3#205wFxyfw^+=3 z(a0>!lekc-)P0mffNQ{4z z`JvW)(F%N4llq@qs~Il(n|kh-Egfp{n!`(Bzroc@nV8OwgimACwt zDOm#b!cNab#KY*oR!8*nTj6(RvNqZ}IWYQl=P2z|eXHmC`E`J%=W@~3XbhAH3|MQ# zSuYA#ugTsKW&aE_iIUhN4PNGXm#5YhwpokB=sgq^%@*rPv-O&ND&`q*QNfHUoBhcH zX(AY7>+r@Nj|6?KG_WGlbapqVKXyml&Ks!Jh{*;qIZ#aY3Ck7cu60V$t&l{f=Nato zC|c-RQjA>6BAT2O&t?#qTE|%aFCtT(D>7Y2*eo5H>=OhO^Vh=S+Q`N1`1ZnVpn?>KeXf2d`)D>~!4Y0F zn& z(oud`=_oHqvE6Lzh)6%gi1q6uXcHpr99A6b?IT~4PVIXK8mv-Rh|QZfq_BzQ%-x_o-!)^H8XrJC7qIzQjODvI|s=N zEJ^xZg~AtyNZ0}6X33mbObfZCQd5-F>r(15VPmPZ0f)p&@=T7@HA}P+g#j& zS2wcTSFr9~zLCAZ#x*Z5Eer>4WHqh=th$k9{fhNV)J@KfrCsGJn%<&_((7zHU6&dc ze#do5fwjuZd$*{BbAGbH@R{&NQ7>X1ErZ^R4|qAj>-s+)>FYv{aa#b zCX0h@lcY+#aHH*-%Kj@G#vqdng{r*^)oFfO2tg8^<12;X2mz?Kzfqo%1uiNA$9F z2yAsiKfe$^({s^fZ+?Kv2+#f33 zm_S8=)m{hPXmpnF-lB?U*^f(yP2r|GJ>pK8^!@7ec*H(e*tMX6zg9DRVlQDp`Yd(& zC@AU@fb_xY^u8D{O49!`k_>A-9b&YUP=grSw+Tu_JQ74Z(a+ zku7a;{fHTtz0Y&W5(t&T+1V;H9K_pL5_+o9Yp5WWlXhQ9tvtF&x`+js z{!DAngaL^zxe4>TyBdH^yvGgp{p1j7@X4Dv>oaWp3LAfBH|}vE+?i`k_a`@;8+(n7 z`jhL!9XrYP|H(D2G-)Izhb{@&3aS;wEg4KD-b>)U_XUR{wmYn~WENu>7i=BGPRn?E54v&*2M31%z?MAS|r(DO1 z-7p<7Td$Zi{VlBBGp^d2rzC zj&6pjjm*|g(&!LTYU}^VD0cc87c`*!G!Z*LDHSF5M~CHcdzK;k08NI3y;CVwKkxK# zd3*^ByD1g1oaP~t2H1wd z{N}09(n*cj+YokI*|zEozqFqQniZGn3+uQTmte2KzMXY^&c#}C5i$_kLP)FMY#k%o z(g>hm&}lZ6>fZvEHz(>o!}hsYP#oFhQmt5oKNWmdLRKA=0V|ZzW()+|D4rSW;$LvVEfd`BX%Og| zu9<1A(dDE6gAiW;4Z0TstBf?7U=$N=24KJUflv)N zfC!~ySClWKluO5ZN{vAtjO~H;6-bp@f$W;zy1qW+$DvA-*t(kHGQmh&W7v5x!KRq8 zKNW6lpqlm$F(76lQQC|=xf_Q1P*RAD&?)S-aQ{b9jI`)8ma`-OaDIBp0V7kVR*JKI z5)yrY-T#NH+pn~dUVkCaE&^$NmubdIy+CLE@J)>MuG#8|t%MZL-M$aXqbX2ZshLO{ z5s{BJVr=F>vZrPUZqg(i;i@z+Htl465FL7X)&zIqH`d}6*Usai z)I)@&OWEvKT$>8uh^8EIOWDy^Tmyf}E`#36)((_P@{~*B9}0!6#%r!A6@-m!X^p%+ zODf14Vhoa@QP8JqEZJR%%wk!+_#pQ5H5aOlV}bv2VF8XgDb@DSY&1H}F*`+%zo`h} zZ1}%igPP+o29$X3$W1V^eqTW|xUW9_+CaAXU#@1)5!k!&L9@HMzhqom^w>why3%@% z0+U(pEt}KOTi#0xJp{Bng82t5m#w7?+H$Zw-!9#{*A|oK2C)2-Tse6Mjf@oobK1Xv zsFFAwXG;uG8n-|)+9xzxVe`hEsmqUT1+7N_h_(3{W!J+-w!82hrf;qQaK#=?0*iYY z^~vA9m3{G#{u)i>9R0k%2Wr^$H(Yh^(kgmMDu!u~vSx3&detBH!#&K`>2J9xJv$L+ z8*J)^uoP$gO$hy#O?}HX^SR$$tBJ80v!c@-xO2E9h3$FE)$y5(5lZfTuW6Tl1bg(B z3-x%jNOo?Mw1wz}W{(L#&*G`yhVu z__6`tJ_cif)LMJB5TZE9Sxgb_YfJ8iWLmIEiH+}U+`lO8CtvsbPd}ORxynx})^Yhs z@Z+1K9*&5 z=KaG@jUlV`3W;9m2fLWv&9N&_kAOv5jbfq`{%~v} zJ0fzmxZf7AZ>sWj*dUSf=0YaPVEO{~oa2Mp7LlvW)%}F|R^|;_8C${gfhj+eo+8FKcK0JS&RTsPjpr6|~bVq7s=W~?EB&AGVA(zW&kE9CgvY%C9+ z^B>9BBpJ&kY?@qvHc-Z@=per%%N02TcjPm<%!!2MNVVn0DcErxAFLhC{?_pgw5{3i z?${E4QWN4%%$4(ub>pjO@5^$=D_EWz7;Y#P@>9U-#%R8!6Xsbeb&d zG+1Ex$^NLbUcn6Ift`@$@3F{yp916TiLxC&QosuYW-E-I#1;7FGJUft*PP?8X0R+ zf%mMo?oUkYa9_@lHob~QZ+*}c4o$aS){bC(EAX|rFH^}otFf#Ke0A=kQlF?)S<7b? zAoY(4awYAvWUzBZKA8LKPj;yVUzw#=b}(rh$!+y)x|}h}8yQawml?lQKt`abSUXw)pAxuFDfi*0a`sMofRmL5T&94l z34GC)X`7-E6zm_uCduV!|6-T)XsZu>fZZP~m91SYW9ta}Rj#tOrHsAtfmNH`Vby*4 z`ab3F$TK2?G`N@RN9Hwh%cjcutoDVw_mf>TLc#v^g~&v?818P0%-FpWz&%P8KUcs_ z1g`2W8>5*5ItUDqO{u-b!YX6GYt#T)>3MWnoBdE3EJ3n^XdBCz)(_Z`Ub3v;rpToZ z0H}Q`c_){qU_TS%_kCr?Pz5aK55@$!9+xM}nTG=7+~Q@%Sqiw57^B#ws_2tO1*;eU z#wv2r+VdsO2U+UH(^}*cESzZL97mmEZ5T=7Lxf>C_Cwpda)JbP zm7wkz!<1Ow7(0%(D2#fYuoK)J>na7Ook$tiN;e%{_?>PpoC6*Lev3RP>@H5=k$?eC z5tLPo>wsf;Q}D6HxEt`OV!T5!UJf`0JB7b`F^#R=z&aSz}a z`IHRb7vmLxCl%wL7vmLyV;ofY#~0(Cz)MEKP72O?1@e`f)-2}ojsXaMw(y5?F_QP=oj7m{|g~zc6hL z^uw7oz<9Z*j17~qON9N>UB=4GSO`W)ZEd;AIZ1NKmYNtyx3G0J`362|bicIN;6I`e ziZPxFXPsJn6>fvly|yuJEtEW`7D^crE0;1z#(pKtO|GDpm$8NhVC_0feB74NEII(Q zpLqsUWrkwNzN2M*Zh%v}ogE2940W=P3@9Wl7@5b)kwW{Oj4dS0*hwxJ$K{Cc55n3g z^4^Y=<+Z2{d9T^J+6WZu6)ZcIck?+`rm|a=h}BhLxsPmIQU_V#mx;2hHgy30rL^ao zL^in&+`}N(p6jeI*@?+lY2Rlfx&Xgc^xU9;iwN8tBXhcUu|kpny*Zv?(6)XsDFE?p}>nWA{8mUg@?dk7g}#u35{fhBRxz&c(WR zY+NX2E$Kt$u&^lYZY5v9U?0?xISDzpUtih*WZ{|+V%HF%C2ux zIK}!1D>!jUPW08c#T*6PM&MkzcXIU<(7hqRxYlxg^9RY=4vaLS0ga~r8M5zfpYGVjiCBTHop;6|619Lm&0VkR3vP=Y$HZz4o=Q-HUpk|-nQ?W@n^6giIHIc!Um`ZcWiZ!ms%Z&XAysh-^xeEAG3;4op zmfwP}&3zBa(zN@156V$Gs>HNJR2c>DpputL$-!)GO9*TjCWEaN@D+g<+sNRb-P!YY zXw2>r2-eLTvu%2W0bsOJ-4FrBv5LrW1$;+fYEvn<_70mHfmZ3+3Rp9_uV6_lVVen? zC|g2nk};96p-Q9t9w(R5uQk9avOw-L1>8#Dr%In{pn$qIt{8c>tDJXm8?c2d0%vz+ zOWPn~PiP`nt**l45ecT7N_{VWDCbOwgjLV7&mz&ozS&+nI0Q73dsqX7Q`Z(9V7lTT z`LS~L;cX%Fuf}pgGZb(afxE(Gu(kqvwF8)_sC3pWXCFymsvKOWX>a<oTv0hCnC7Ahkgg~2I2zRohtZx#5JC**Ftbm6JZ25s)v#JUh5Cd?EV!fjs z2ze2$_thDtouki@20RKlCc>0}9ZP8m zIH-TsnU|NY1Ol=ZS}KZ}EF4|BP8VJmehJ-VTkU5YEumy(0o_uU}jvvsnBKe|D}1(yWPe@JNG z9TMs)dajI+by(FMUKJN8c~#S8(vvu}E!#_Ss#vR^>{8>Ugs6~M+WamtiX%{N`j;)` zk+*FR-e3C_>-hy=6&u@YTe9RHd=x*VWf8mmIUnx(Lb+`d)UxyrJ=1^9S7;~g&;Rxf z-2zF&x(=4dy@V!}vE`ju&~4s*{gT?**y(-`2Ki2AX7pR!F?hpA=~texd$Shte4Pfy z3OI)qtKavyncaJ1$<05ZVina^dZlmJ#(2JNneFWsEoe8~z~033K97WE|?zm1) ze2BXmbjQ**0{12U7OwisH+O%*p?~RSh;6z-I1Fv+44s#bz}_MDI_q89#z;5f=r)Yq z3XnuQU7|N{Dp6J1-#1&^-;g%f)prA*^``FH+mMd4;qxA^!vzkinsB(k9n_^(k#BvS z;$1h{8iunEd-0L-U5y9L>26lty5FvGX+<|xHA+o>gk?)aEad+4cEOD1tmg~P&?k90p(vkdzlnq>*& z)%eG#YRO$Ip{qLmC>py|dINQO{qIWB>10qvHNyz_Rw)6GDytN$O^Owt=oHSX)3?JO zrP6;?rw^xlsd9c)TqD@j3{T3`Q1bo1E6Lup`)ldg5KiR;O5V{uv$=uw?8Da>@=#da zRPIQn@8jauJ8tFD%~Ra2)5>=^yR~|$&*%?9bTD?i@TyYT`aSwd_Ro&wpCNDr;R-v` zhp%qYBMZ6vBw3evZE)Aw-W7j@H7XJI$++7tEKs8-HvpZiMi;^y!eBM}2#$d>B_Z_0 zm9VBukr-pKB{q-M7T@hm`B-|mhmK7|;W&D>S>Hlf5_=GE(EZi z{V*A<0N6r@8_*Y7yZ(G@Zg~^-d;s6FJjD;8 zpM1fd^~ci$flb)90eoE+G=LA}u4AT67enac%f_sIe~2C`f$g{&jY&qN_7B#0AVh9# zM9D4OP{>&6XDh5B3kUEK<)l00xMx0yZ^vzGNL(hCIf(b-rbrj9xRwn|Y4f&$bRlcA zU%n{sMS9L|z?Kfi>a2YOc5yI2lN;yBx(-2|Lp<4}A$(w!LL3xMxAUDsuUUKGkiZG) zcEa(BY%MXx)n`8qL&12E(1Y`>&x(fdZLx26WC-7q?84|*n0(fANGK~D>M~AE=^|2F zz#0wX+jH3=Y~nD~BO!#uwbFh-a6P6U4g>vFPs+yeI{MB;<|iL zN>dN%0*hCp3`#c3G_tuPP*M*gJ3N9>bQ8IMJUS-4=i&O} z<-_xIx+>p3@f`ZtUj&y%hf>eGs76f}fbLbJBR2!xphkm!1DeS*-;umu#3uomBsa==*MiKB4-%z5E$xW%Mz*{izOd)}zH1u-|fu;vsLe)*kxv zXxkw&GBO4ujTm|JQd6&`{gY984SVYa8)Lw_Dw58))fW)J`mwr69&y5`eQfHC7mRJMpr%q z5J>>t+m{S%*WfbjHBO2C>l7`b(4AA6z99x3AwrEVJqWb68h!aQP){}b#c80gwJN#g zamGX_D2rP1?T_%}fN-WPoNpho8|Y3oI_o0PwQ6)Z4F(I<=*`1Gr>N0hJAn=CBVu!1IF86%j~=+@&vtEtibdx7fI=gfb-Sxt^+{#snKmYKsTz}{D*x!kq@`zJ5?1;z`Ru0r$*0H-in^yupq(*0*0=ij^ zwjhuGLXFP61~gTTrel34j8>zTOx!vW;?;1^{Xko*(dlFfqZ;+0q1IcC&OQ(H4W_GQ zhUG550KHcVwMbnhkDTIMDOf_6V|gU(Qlk&ZC$iP(S&C7gtI;Vpfu^X@*I(j!zV0}Y zexFX__fsePW7Q@^sZl?Q#P!waE(X+3jan&8INz!29e&a> z=mIk8w`z1SMT{&p+RrYECp!nCQ)|*6YVi5272WOszn`*RZAJF4!bP+}w=x7;AN~U9~ z1|_$hl1x^Plw5HSN@l5Z?ZuvtFjI}5B#Vtyqkc3>cUPn7WXFhN)D?v5{RFsnF|3&6 zb26`|8l6b52)Jk)ScBN1`2v?+Oa7Zaw>JY1G;HjiW zmyt0YuT*tjK%x188m&dnmaj%zkcIcjXsQ0!kET)^)y%WW#EaGF2Aca#SEE^E;t^`} z1`X|TYV_il>F;=vzMz@DDE7g}$V2w_J_x{uSsPH5yIxy(Bf- ziROE~)adlxKqG-#%FI!|rpZWMHS^ZRKz-C`8cjRiy-?M;4Q(jgSEHB6!WY!&LWFIL zutyDleHP5?)o8yRKo_Y|Pcrc|HR?~@E zRHNr8Vh&KFe^3|gAfXmo`Y0~=6@|=(YUaLVi2yY^kVZR=8a+V^t%rpwOJvb{;i?)P zPCjwSqK0qNd}Fg3y-TydFVv_XjUB0KwBt3Pqt$3E#ff+|8f2kB(OM1D12ckAjUFZw zd#h0+#fdl1RCR7iapImD9ZV7PTxk^Zk9_-vtAKZvh6$~<3~06*tx0j>b2TbZoJdil zTWL@lrbfdlPM8(6b#d$8CKESRGsn~55u`@1z$ZqtmDBkl+Cl7}>3k?x=*29lI7`xg z2HzEr5ZPw%^|+ajcki6Rf1$+z`!2KiFzr<~V-{G)Rg_te&*B5Mlh~bEe1i4@YoCfu z;UyI)sTUq6V`tN_ZT>bDEbrNzRNUBZJ{t-1J=nt8yh*#9?VZhsYU|5MZgY4&7bviR zIedLC?iA}V2OGAF-RY6kkGKXBt;O0G;$>?d7T(Nt6<72qGTB>qYrk&3lEVJ&aWVSCWbFeyn+`BR|+o;p)yegAk zU7f!EC7RdGg|h7Vcx>V%yEdP1+ud5A(!~q1_IjXdcH=+DHCCNo<1NtMYP26}Aha!D zA1&bH4QEeF%cKbhG3Pfz6z2Q_wu-Te%E*Dq&aq1i_?Rj!2jPey?g5$1nO*Sc6y{=h z^`dZzHC)KI^jdYtNl*AR7`(tqxXjvo&bQ^3JJ`(6`4-yMY}@B>*QO52 z+D`j|Rk!i0IP*=m%f{E$CbQc%zFPIEjq$j4M-wy}mL6ja!gEr14wvpcr|w{t7U5=3 z&zr25*Qwp$hRWI%a6_)t{mY6s*s@H1 z1XtxP`!|#C$X|ZrV0Q=d&6#O2Ux8cthRt4#YR0``M;G%UKHCRtHG1Db<=M)V2J9VB z&xe@4%XSJf(pxtgvmr~6`P+Y4(h|N=B|ToPBR!Bw2BCLyo?zcC;X^$mRoP6;GmCfU z-n^!YgtM+$=zQB>Gv7@912#8{@8X&FlM}ZnpIMIyt$$`$v-m+cKh|U^e0|j`wtFex zl5JUv7lQPcE+W0EVp=I_Meoay-Wka%e}Ue4n6>+YZ_H)CWD~#OKjiwnWc$8A74^ehJzf-&}vKmVU}g!>-Y~lyNqw$ZcG)dFL5`~WPgC_$j|s@dd1@Y%)Z<5l6c+* z$@7M6gy)St=qPz+QW$)NbzF`cbLUywa^8vYm%=my>IX}T56JQ~9#Ua^} zL4H{WgGBAa^1J#zmdN(%+D%>Hw&&IAoJe~A}eX|P2sQ-jbT7zR~2`4yrru&MY$}M}$W_`tX(`K;KU-6;t z)gF^E{gjT3b0{OY2Itr(U!w;;V%xvw8*y7b*xj#rQ=sjvs$4Ub+xHh1x*GlKPd08f zU(IWP4!7gwS4YiW%a*RjaU1^v_Wf!;y6Sp&@(`WzQ68O}h?U;4f#=7&_G0`RejN9W zoiy#>_Xshobew;*PT0eaui<;te!L0xO4QB8`{2X^<&2E519xmU(Q%gci2dlS{Z>ZhN`fP-s^|;3lZ-grpGOta1P11N15_hsg8*y|jc@y7->vV+e z-NZ+?`b;nP?g(j|upfh?<0z0|JEF4KVzOAtDUtC|zPYh^BGrgpv z-9Id0GapnpzcXITME5n7R>^up=I$MVBPJ;o73^^bwth3;MBnBPwK*C=#@R=|@c!)8 zW}G}r>%hFf=bK=9)b4w}GZ$Eq&HtY7Xu5(BS-KzC`-qY^?pNcNsT$o~Bef z?jIgT1n0@z_tAS4PG%VKM1aPCpTai>NRM!LFznRHHzF!Bq}Asj0RPWYin{)d=0Cj@9<03r9tdDOs@9sSz5>>EF%NS~PpajK!i&aN|7kP_6vzoa$+YR%k5eIwFn-Uq$$ao3nV9%33d&usNG z3J2J_9KL4Q)~RI8@Sh~o$(>$sdQ@vpyet@Zp&)vgzY|SFf#dyn?!w~7tT2c7=NA0Q z%5TFdm5O&+$8D(c^k3P^ZG5xp8!phSp@TZD8NL@R@r2hVf_IY&>vpoC+xZ&J)_npu5#d-qP5k7v#j_klQd)2P6mpk|YT>K-} zeJ8Fl5YFAnR|&d0xx}sW@mmfran={Ypv!FMPAt`YF0+LFSXS2h1ykvrm*k6CzreQr zFR|Uf@X3L(IHnO}y(YbUAl@fNzdOo^*YA9Dj3Jy)?vGNW3y{H4)GuT9G$TY$19pw?MG4>w21O;%3*I&gx5TDLFvI$O#0vMHty#8 zYPn?>*sMK#H!iO!JF^Fqe$55uy%z@f_B>14%O{yuqg&g@VC_}>g3H6yo$XBa+pg41SL7_Q4*C+j+K2G1MKuEsF7VqPSafa9I={~+j zot|kVGr9B;CSlDHDtC4WozN4ajnG7*_WORmMzwyQV;l>>0Unh3 z!z?0gKTSn=SiFMy9N=qIYX3XADkRx3ICL@zP4Za#1DK(8`H}TMfG&H7EjhqfxX}O0758-rx#L zJj6Gya&rvz>Mh1Jpfqm6ME)1Y$WipbA>Oy8{S5XyP?TP_@~9LxTfu$dhQjC*k?7Mnu_??x&Uzl^8}unWL1XTN*u-{1UzsC8;b;M2 z(YAot%xP{E59-ln+8iBDI|so`QZc||(@(k!KSBsz4m}NT`hO;@J;Cx1^L_zuVD312 zVJ=FA%oC*3)jT#ikFQ-l4Z_Hyi2vm=C@mes0z*r@o&id8S;tuSTt3iu8ibV6x_=(~ zG?$OI7-iU{s#~4|Z+p>Uit2>K7)+A>flxdY?n7fk;&fe{ZMwTP(kMLMEQxdFI}fh1 z`St@rO~&18q!Y4Sm7H=E zm84T=WQAYyA*dla*is~mJB@5w9$%w+TU6g=ifx!#OGoy|6fcj; zrodRZ^cdQ^S=loDj<9{l_{RDSG9M<98fuqMkFtLO27PzWNo`C|)=a%7ogzePZ2Acw zq0vzmod;XZ-SnTf8k#HF>SGU5Uva_N7%icVbgodyrG#RGVZfISR+UCnydo^Zw!ctP zPAb%-nz^lm?%8DtwF!yj435wN`wfE2Jr$@sx-_prnKyVrx$D#;QM3 z*^*@BP~z+zA0nU-O4sw=LwKggDxwl=uNjaCPPK*FACN3m{oeyJJ6UM_ez+nX zSta-V>7eAk^~(b^+tLdFhtc~2Q*?+rcn08s@FZKVHw;Mb0kux?9V`t{{-J1alU-}l zn#$IWxUZDu9_cEJ*hq!r-!ek>JCB`O%@^+Vb`WdWH2_2e?p3Z2EDnuwTlH zGcm1>r{2RqPslxufp_HrcKtLTY8j72dnD~w%daRzQ=a-pHk+dL_t+mggdts0HD?E$w;Od$(KJyC;Jja`&mzPDSq8zxKKo&s&#GB$>q4j zd#628+)I2;`INXfYB$XC8XFeUA!#@?y~{8ghWjt|dW%I+@qqDobs7IS4>^aDm9|OP z%e>F?fl-|yN9p`O%Ir`@>I93xUZU<(VG)vD>beHeq}`Ib7Qa&JE`$p9K-`$1=Wrs! zNFAYhSxx*Qn%)wbV6XfFle=B%uG!l^`kL>e`^ROrO?-zHZNFISwdlUF)>qMeqOFd; z=FCQY0QZgyEu!5#;pfkw;E^IerPl897x=f@WjP&kcIESNA6vF8af*wWQ}mqg6dx~j ziX*>pin)iJV%~PASh!cF^xLFhX~5!@-`DZmwBIQv>?`3T-v19@%YS9gfxzrvoMQ4$ zr&zGVDW1YN2j3`sNw@*@4bj6;04w1E;B^)1gWp-(p-<;y^ z`%baXS*JMmp;Mf6$>J1W`w6*wyi4XBahQ5es$X^`u>AT z9CM0aV%y8|*eTX}=M;mk027_!21|ic{P-nmcG4;S=5UIAA2`Jia6EtTd1!qE8p71{ zyMz_=DsqbB&pE|AUZR-x$SHQleq4>qPH}w& zQQY{4Q@jG14^hbr-gx%wDe{#Q#k#13<%^1eI!9oIm&k91g+F}_ znR%d4pb;#6AJ#f^#c2`SKtNBJeDYfeg%y5Bjd+;8Da_*m^M8qb?yQ?m@i5GI4HmiZ z976D2h5{DA0+-Po-mrilYJU*z8j9LqM%&(m`A=MOikT>=8!V6t3oL^Lous~y&)EgFfhIU&43*@1hZo&_`!lZw|5B`FH2Cx8w zCAPy4j8LQpEU*SO9tjIHf&$}Ufj`g`&*29KSfC{=fTzdAYw!arD)@;7j?e}Qyn`Q9 zg9R8Y5RC%2zz@=3((UkrR;c|ww0#mRV1Wfrfp0S`mH{&c!(juU*x%q81gjN6feR?; z8<@NjtPn^RKy&>LMHA3We?fr>aL_oE7Xl?L$KfRV;81UWcZyD!u@fvX1#R6C8t;M? z63_%;sO@Yxiw?DH1Pjw59Groe7a0+zGU{N$e^Z)h@`hQ9LZ~XrU%<^9g zDV^zm6*vKkEK-z-1l3GHxBVC)dhCCGPXWtM62-COL~(?Y{^dmCL$FymNzSlm-0lx! zbZ2xH`v0NhFyZkj?+~-_yU^VsCgBOpBGAp%@W>~qp}Iz+^}wJC%7Z3@x`BQPS{}4{ z4UNVFG#4|ZZlG6VG@5>((|c<)$)IsT8cjk~Ttj|BHHWwd)KDGI&Q!#cVfpwGk!+3Y7i@Su$uOXclN6(0tG|O0NqOgXVx1f)>^TAO2-eatIU!%?4c# zS_o>%!4E^IL(Bs;)klp%;~Su$N+_@)1QQK&h}odoptnHtL0^LAG((F4ro)*gcziQCWGz-Ed+fGYU<<=-QnChpsApm z&K8&)KTKWF#(}6A=mgL#GfYU=AENE5A_Jb-OSJ*89_~;$)NEA9pY+GpHXNU(3~--2>vCeDG9v@G-13$%mIy>itYxQI}OfP z3v#I9pq8k)XcPR%0euOo`3!ApKnBnd&@|8}&|J_2Pz~nfsi0Ay8$pvnb3wB~1<+hj zT`&sHfFhti^Pn(j6zFtN%>wuWXfEi>VDx{Vg=mx7NU*`=pb4M?U1Pt+uMX&9v>|8? zsLluzEkp4Rq0?oe-1uZ6MdKVT5LxK0<TuBa=ysqc2jsSZ9MI;VQBEid z8jnXABU&Oq&RbaW@gp0L{u?4781Ge>0GfjrJnRA0_!o)SL480UgPK4!t-v3MmwAHb zf+m0#)+iElKn-<@M4#4B)L0}&ffjsFBqoDu>K2I^pz)xqDIGKiw6JcGMa(CLdPU-W zP!s4IVgU7QgKpRq1%PUr6^W^!+0F5v8bA##ibVHF)Ce>PG#NAkGzT;eG#@kpw4i5^ zxCJ!3SCN=c>7e&PHN8=hwos@y{z;7=e&hf!gZlI>5{H1MfldcC^eYmV6W$*gK?^|r z+JRz6BnmWs5NZZ$7+fUgf|`ax@%G3+5jbc(-s_MLYWf70i9*5CARjb-Cip>37AW8u z4UHEUiB~}jv+&}E4)B4sxCYhWTu@p^D2TV=9{@GsA3P4g@S3})2*=}5@PQ(+VJGCr z{gymXO&*#I)C8*O40^msG=fHfMt~OJK2s8C^2H+Y7N{lr5^CNB43|-3(EQ&}Lo)>Z z4n;t7Zx@L>K@E)q?kxu7winm14s)C8IWS^%02 z8ijwFa~(7r)F+Of41Wg&;!qRZsap=3Ai~t3*_=}x(hY*kVT}&z*Ptm{DwK&OL7RmYkiG#)e?G#PX!Xd39L9w0nGR=BNp18t6{YoN(-9 z^g((HtXx1%EwNMvjR)NWS^!!|*AZB+^@XCKLqHSSz!IPZZLuV}MG5#(2VTT}hhm*jAZUJPmq8gK@*Z- zV$gzdSaXBsj>lSlDEN}GkOVbNgUN}`fXRoUpmne;Xu<|40-Ci678#EGjmKkgh93s3 z!HfwI&`lImK$Clj;vS;CM9~52g99{CA3>phqL>OAKTH%)fkq{WqHYB8C*mI#fX1g_ zfdQHWng{BWfw}rf1`6ySa4LoUQ1mYl+v1obRWr=fB+7Ay!nf zk+l|a5YIgNgJUy`?ysxvf36ePvfXNIm0TSIsfJ2Dtz53r)ax+*oUV%>CI7F(d@&PsC0ggeV?G+(l?AyDoB8#)B_ zjb}56ykske=$gT{7lsvpQRTfuA!p+U4iU37#ol8id(&(z#e*E{`A}UGtvd@Irt5(QnoPu< z9T^4?@0uTm%Al^pb-i&lcet)S?000i}r z_0W-6F-buI;>dXqcq3*2Ta4fIG2@#L%)z=PA{U%DQCB^5c?*ZQUP@QGtsd*|r|(60 zzVwO0-vnSm>~^9qQTrQLzo}_*w|8t z2=$9_h&9o1=|f4h3LRBSL=>=iV4m#!NL@$r%2ATrHzE?nVn?C*g4oBSbbq%!`>1Tm zj}eEmTa|b|iPuzuMS#Ho(ucgv57-{IbTqtd3p+R(ZP$<$jYeS$S@al)zt2XE(TzuN zxHJX^i)1yDkT#utl%z{^OBs&)sZ5)t3uJebbhYr1fp#otej@c;E|y%0`XsGH z1r|0IebQ%yLu^MnboVw)LOMm0`$$G47%K^yI~FxeWoyRj>eW~d=DNfz$r~woCi%-q zgiu5Ru;5>8c#MM&?*!-9#hfYVN?j{P;5rYS5iEKf{B#SO4Ni2PRpU^f=IpO=x+Vd6 zqp)P5eE4jkZvg&`X7$JGeu9~Q9}hQAW*!rC4czWyJ?LcHrs!(2{u6YwwK4413A!F` z8^<985nP!?eyocqmx1MCm2zxYs?NB3?Z>(^TDP1@4)Lbk`O+roq7d_rOoHP0|Fn}J zy?|9s)(v-yn&J?*l9(Fot7KgV?ILzN8BAB1+hkZB4L%t+u#M-2{T=*qKoGjt2ISuAv>?q9fX@GM=ka>gB42kKbk1YHoD zHcK~1`-WYbg_gO+yi#>t-AsGQ2J13(wegUUE*xj%e@WGKbSuQ_kR!o(jAJ&cvT=9c z*)R=q&7K3JWU&Op@B3P0)trFc?f_eBtOMvM-?R`{7=;!hb_L=w zCtR&&v#ki!3)x+|0_W#&)M$41bLjGtz4}}?sociyMPi~CbAE@uk!eF`$-vTcDLO?a z+%jO1?sJG-w+O{OX15pVzDA#zk*S;IKRNHchyhXhMB(qERv1v2$6~1Wm~~sMWBxk) zQ&Q}1NFRz)saS^_*xSW$R(Q`6U7Y|O)~YTUG{W8jhsMGNEzvbbn6WO=eS(f(v;>_h zo{i0d84#?ppu$cTz7$tG*{G$uNt|v4yS7yKp?1LT;4feY8q1cU`;6R-YOrkMp{L+y0-j&ILTG z>WJfKm%Gt~5O)I@HwD=cP!xpSuaTD^i4p0dLW0^NzBU#VS{_NEMG;}sQb9^Jsl*9M zfCK?~H&HZgEp@|JKT%6bDr&F~H;6*1hD6bV8q)vVnfn>G=lkI7&hO03x#uzGoO_d8 zvZnOUeZ8yuS*-}qnX-Ii5Uwh%>HY70183qM%ivic?D8wEzC+i)+134ikLnM&8B6h7 zUEL4#kOip)MLjnI?Vu)noVXt)oEGMxI3K7UvKxA6MIrkKWSKo=>mfTuz6~&O7AT_! z`Xi9}OIP=>9)FH*AlBlk3iPbYyh(Pkl_x1ow!^MWILz< zCa&8LhLv+%9m<>_ z&lc2o7=^YVFb}{@kQ}~1qzU-fZyL8t`4)tRVbrq4>gzxH4erC(99sh9%TXeVTPDLP zZ#VWa{hvbxm(cakS<{m&+(Eg|E$dy~bJk`)A#KG)B4i=!UvJ^jty;=OUQmENARXR{ zOIt&}Z3s16Y3Mf0gE&38&AK6JfA0(3KXvn-Ae%njh88?Q{kOy18YBRU#)9$Z#KE=PIS*->H9ma8JZtMP`x8WFC>+9}@C1>54&ZC*b*<7#_V6&)X z4rjb)8iS(3Z*aO2=V zSx=2zSuu?58*?PZ7`I6?we4~wnEa&3KTvt`Cn6uLCx+81k35e4DvF`h*&jITs+b{mwz?ChC}$<+b83?!Xf{;*siuFFnq zDa3fM;*O}a_&miiDq{Q|u+R8S;6w2pP<)cg8GmKtOtWUFn8g6KQxY`+W3yV=i7Z5& zTzCqGC)1JA7Z>iaq+K3o~GDCzR#=-PhWgbf2P6R7jJLOgTSB90@Sr5E(IHP zIGv^v#)ZH>Jcf+FAy=BKqq&Ic82?PQy~{<&apa2%JT+;QxZPdeN-jizmm+PQyW)ixPuo;^IoBN0{OlGE>!G2D)JeM z=TRPTc)8-hTB*zc?W6T75AKoKcCDUzYE>TLyPZh)s<{`aj=jC6xcQXGtHi2lr50e< zN48V{1(fpP70w-ji)ULk6#PhIpr~4#c|VpnW@yUs>-I4N*M1}?fMD_Z7@v3WW1>A>t>aa3=Ya?Jl?(IcOVxbR-zJYjjK2@e%@Rv!mWQc` z@iN7=31N6Gl{2nZ;{^|i)BfsvD>X4bs5rJle7~*uZR%wFff^6C$#8JSS_l3H1n>pb zu76Op@r1=r8B_@D8G%(+;_M{6IU40>vVeorDk=B6mY+urjF%~nXdh{n%{pphT&>tV zB;KZ~_CE4`4cr9G?PNZdx(1VkAErFu@Nv~{en7O}(JuT#<@Jw?V5!P4K}*?#Rr@qo zy`@tfdmE&<_?{<9I)QPky`c-))s%(I zKjw0YEi)4~0Jl>ij%4kDD%*#DpKaW4A_)WeRlJ58 z+DBB|;MeLnWlMN7|03T7)bNZ{)J1vt=I@swogGLR_1RRycqA}av{;9Vb0oz>6UGlH z4$hVf*eaR9&3?weQfzbpB5c`d1G&0^x7)rmO-vgJVcbrCq!8mb9N)hX@imHDsR-E9 z&e-03q*6JTAB0K8b&cyn2yQ3b%V5lZB9(DqrHGx|?|5|?}v8M^N)cG`w~782X#8dCflX_cPlR5FSs>X@)9b6c6f#2`iDjAc&b!+MAyf= z1e<*-_b!)FsCz&>6Kvtiv??x}E!Y_vC&}eTmA{mlCs7FB{Fi4+&133YFV+m9BE}&H z*Ng8*v-T@KnJPQ@$2!1A>h4=n{~1|J2|Yiy@20T-0_4? zHue236#|EkD-P-?{I23om3ws!4yyc8tXbSg!JmjARr{zvHL$l4iX)3e?o0_RzKriy zY*hOywfZCSS-`6mcPtS3P{q}h$C!WqjeUEYMgEFn{6Z#h_?Y768oAPR$;?@m=ax$O z4^@qSe2&c(uabg`wfr^I!rrb2<{5J+Va7}&mj^ha+VNCTyH>3(r4Vqq%rUO9!I}JZ zDi7!eVvedcsJDWIhwOdlb*0LdHdk%e3-1McHWql``g^0QI8bBEvljBx|Pz#*aap zM|&h;w6CQ$##L%Ow?VYBb-`>P-zC7WDfae}W*@FD@az&ed{S}!t%856+Fz)=Ovgr! zs-;{hmB~$5AN*9u-i8445XsFGbK6x7t2ZznlJO3l9}gn)&(^~A$EDO>of?l&i1Cx^ zDxR>cRoO=TdsRC+L$v>`+xQo#oV5=sF3`n2TWj(WH8DP-IQE{%hpO+tQzvlvwCy|7 zv?h$@3#wMDF|bIj4j3e3|5QTxQB;@=Z~4I7ECn}-oAc`JF1+&|c#h(zhSbGsbqO^v zF13wg03@{e)6~YeMzv#lq+h4T_mD3I_<(8$5{A!F$^*vxcesYQFI>WfyPTTDr3&-3 zCaF{h91aAe_hSjRMnP_0-%c4mA4u<;DJnNV7r_rzK9^j*;jLJ4bcL}~STgfCg&40^ z?A5{KM7Ir8#CVtDpawr@D!)wSj1MY~Z4#@wlHnmu6Y%xzifex%@<$bSsXVtz1Y1Rx0d|fPklEZbDn!NQI1V;qu(&m2%DFG@#(=AmatB?f(Ds;G@*QxLmd4 zx4UfrO&T()sSVh(kFi~ugXHUj@<+A2SC^5=TI+vP9^-S0o9B!CPQ@uy!uYDeQdg59 z-cZ_3A*uuR+y)%5y*)%NTz;jNZ`OF`#FXEVD-F2LF}K=no9QQm!n{Hu#_uQ&s<-3n z?Iaa3KC8H1W2v(*>qX^^FVEJx>H**e)y}3S#-kMnN#xF12Jif2JVS9@2lgV>{vl;u z2E15tuFk-I(jK@6UC8)Z#kG3fLsa{DDrNk8#myTEHv#i#k0y-vW^(y}|E}5rZC6z`9TZ~h!qnvpi<}Un52|l3 z6)_&DxVBv6W8ISDja`gyR9t_pbcZvZrco2H>z>AAK2KV2N*d@%ziiHec}pHBTD*AP z!wVP8S-7MzW1uJYoyOL&o=7iu#bY#nf@frkb1$OuF#TkL=L!5&(fJ9UQNH3kE!(Y= so5pbyJuBUP)?6>O!HQ^F=(S0n;mNH&k1bn7=O=l_xTa7j*K_s%09yAENdN!< delta 46062 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 c>(00qk2KI~YM5w^j$1lfZU<7 [] data = raw_alloc(allocator, sizeof T * count), count = count }; -} \ No newline at end of file +} diff --git a/src/onyxwasm.c b/src/onyxwasm.c index e19f1a3d..d62d44e7 100644 --- a/src/onyxwasm.c +++ b/src/onyxwasm.c @@ -887,20 +887,15 @@ EMIT_FUNC(for, AstFor* for_node) { emit_expression(mod, &code, for_node->iter); - if (for_node->loop_type == For_Loop_Range) { - emit_for_range(mod, &code, for_node, iter_local); - } else if (for_node->loop_type == For_Loop_Array) { - emit_for_array(mod, &code, for_node, iter_local); - } else if (for_node->loop_type == For_Loop_Slice) { - emit_for_slice(mod, &code, for_node, iter_local); - } else if (for_node->loop_type == For_Loop_DynArr) { + switch (for_node->loop_type) { + case For_Loop_Range: emit_for_range(mod, &code, for_node, iter_local); break; + case For_Loop_Array: emit_for_array(mod, &code, for_node, iter_local); break; // NOTE: A dynamic array is just a slice with an extra capacity field on the end. // Just dropping the capacity field will mean we can just use the slice implementation. // - brendanfh 2020/09/04 - WI(WI_DROP); - emit_for_slice(mod, &code, for_node, iter_local); - } else { - onyx_report_error(for_node->token->pos, "Invalid for loop type. You should probably not be seeing this..."); + case For_Loop_DynArr: WI(WI_DROP); + case For_Loop_Slice: emit_for_slice(mod, &code, for_node, iter_local); break; + default: onyx_report_error(for_node->token->pos, "Invalid for loop type. You should probably not be seeing this..."); } local_free(mod->local_alloc, (AstTyped *) var); @@ -1051,17 +1046,11 @@ EMIT_FUNC(binop, AstBinaryOp* binop) { } b32 is_sign_significant = 0; - switch (binop->operation) { - case Binary_Op_Divide: - case Binary_Op_Modulus: - case Binary_Op_Less: - case Binary_Op_Less_Equal: - case Binary_Op_Greater: - case Binary_Op_Greater_Equal: + case Binary_Op_Divide: case Binary_Op_Modulus: + case Binary_Op_Less: case Binary_Op_Less_Equal: + case Binary_Op_Greater: case Binary_Op_Greater_Equal: is_sign_significant = 1; - - default: break; } WasmType operator_type = onyx_type_to_wasm_type(binop->left->type); @@ -1116,11 +1105,8 @@ EMIT_FUNC(unaryop, AstUnaryOp* unop) { else { emit_expression(mod, &code, unop->expr); - if (type->kind == Basic_Kind_F32) - WI(WI_F32_NEG); - - if (type->kind == Basic_Kind_F64) - WI(WI_F64_NEG); + if (type->kind == Basic_Kind_F32) WI(WI_F32_NEG); + if (type->kind == Basic_Kind_F64) WI(WI_F64_NEG); } break; @@ -1693,6 +1679,7 @@ EMIT_FUNC(array_access_location, AstArrayAccess* aa, u64* offset_return) { WI(WI_PTR_MUL); } + // CLEANUP: This is one dense clusterf**k of code... u64 offset = 0; if (aa->addr->kind == Ast_Kind_Array_Access && aa->addr->type->kind == Type_Kind_Array) { @@ -1755,9 +1742,7 @@ EMIT_FUNC(field_access_location, AstFieldAccess* field, u64* offset_return) { EMIT_FUNC(memory_reservation_location, AstMemRes* memres) { bh_arr(WasmInstruction) code = *pcode; - WID(WI_PTR_CONST, memres->addr); - *pcode = code; } @@ -1767,7 +1752,6 @@ EMIT_FUNC(local_location, AstLocal* local, u64* offset_return) { u64 local_offset = (u64) bh_imap_get(&mod->local_map, (u64) local); if (local_offset & LOCAL_IS_WASM) { - // CLEANUP structs-by-value // This is a weird condition but it is relied on in a couple places including // passing non-simple structs by value. -brendanfh 2020/09/18 WIL(WI_LOCAL_GET, local_offset); @@ -2145,7 +2129,6 @@ EMIT_FUNC(expression, AstTyped* expr) { case Ast_Kind_Field_Access: { AstFieldAccess* field = (AstFieldAccess* ) expr; - // CLEANUP structs-by-value if (field->expr->kind == Ast_Kind_Param) { if (type_get_param_pass(field->expr->type) == Param_Pass_By_Value && !type_is_pointer(field->expr->type)) { u64 localidx = bh_imap_get(&mod->local_map, (u64) field->expr) + field->idx; @@ -2274,15 +2257,10 @@ EMIT_FUNC(expression, AstTyped* expr) { assert(0); } - // FIX: This is going to be wrong for struct types. - if (expr->flags & Ast_Flag_Expr_Ignored && - !type_results_in_void(expr->type)) { - if (expr->type->kind == Type_Kind_Compound) { - fori (i, 0, expr->type->Compound.count) - WI(WI_DROP); - } else { - WI(WI_DROP); - } + if (expr->flags & Ast_Flag_Expr_Ignored && !type_results_in_void(expr->type)) { + i32 mem_count = 1; + if (type_is_compound(expr->type)) mem_count = type_linear_member_count(expr->type); + fori (i, 0, mem_count) WI(WI_DROP); } *pcode = code; -- 2.25.1