From 430ebff5f93801817c428cddf89e748c9f5f0964 Mon Sep 17 00:00:00 2001 From: Brendan Hansen Date: Tue, 18 Aug 2020 08:59:02 -0500 Subject: [PATCH] general bugfixes --- core/string.onyx | 59 +++++++++++++++++++++++++++++++++++++++++ core/test.onyx | 8 ------ docs/plan | 15 ++++++----- onyx | Bin 412288 -> 412408 bytes progs/stack_based.onyx | 20 ++++++++------ src/onyxchecker.c | 5 ++-- src/onyxparser.c | 7 ++--- src/onyxwasm.c | 13 ++++++++- 8 files changed, 96 insertions(+), 31 deletions(-) create mode 100644 core/string.onyx delete mode 100644 core/test.onyx diff --git a/core/string.onyx b/core/string.onyx new file mode 100644 index 00000000..6c472832 --- /dev/null +++ b/core/string.onyx @@ -0,0 +1,59 @@ +package core + +use package memory + +Buffer :: struct { + length : u32 = 0; + data : rawptr = null; +} + +string :: struct { + length : u32 = 0; + data : ^u8 = null; +} + +string_make :: proc #overloaded { string_make_from_u8 } + +#private +string_make_from_u8 :: proc (s: ^u8) -> string { + len :: string_length(s); + + return string.{ length = len, data = s }; +} + + +string_length :: proc #overloaded { + proc (s: ^u8) -> u32 { + len := 0; + c := s; + while *c != #char "\0" { + len += 1; + c += 1; + } + + return len; + }, + + proc (s: string) -> u32 { + return s.length; + }, +} + +#private +string_length_string :: proc (s: string) -> u32 do return s.length; + +string_concat :: proc (a: Allocator, s1: string, s2: string) -> string { + len1 :: string_length(s1); + len2 :: string_length(s2); + + data := cast(^u8) alloc(a, len1 + len2); + for i: 0, len1 do data[i] = s1.data[i]; + for i: 0, len2 do data[i + len1] = s2.data[i]; + + return string.{ len1 + len2, data }; +} + +string_free :: proc (a: Allocator, s: string) do free(a, s.data); + +#private print_str_with_len :: proc #foreign "host" "print_str_with_len" (s: ^u8, len: u32) --- +string_print :: proc (s: string) do print_str_with_len(s.data, s.length); diff --git a/core/test.onyx b/core/test.onyx deleted file mode 100644 index 8520d89b..00000000 --- a/core/test.onyx +++ /dev/null @@ -1,8 +0,0 @@ -package core - -use package memory { null } - -Buffer :: struct { - length : u32 = 0; - data : rawptr = null; -} \ No newline at end of file diff --git a/docs/plan b/docs/plan index 2f58f7e8..947e130d 100644 --- a/docs/plan +++ b/docs/plan @@ -186,6 +186,14 @@ HOW: [X] returning structs - This will put forward a lot of the work that will be done for multiple return values + + [ ] Add slices + - Arrays without a size + - Converted to a struct that looks like: + []T :: struct { + count : u32; + data : ^T; + } [ ] 'use' enums and packages at an arbitrary scope @@ -207,13 +215,6 @@ HOW: [ ] Type parameterized structs - [ ] Add slices - - Arrays without a size - - Converted to a struct that looks like: - []T :: struct { - count : u32; - data : ^T; - } [ ] Arrays need to be much better - Currently, they are basically just a pointer. diff --git a/onyx b/onyx index 7e7a4a81acf136b808249de5dbd4dc6b857bbe9b..05b31d2353f33b47f3aea3746f9239b2def3b75d 100755 GIT binary patch delta 55251 zcmc${2Ur!!)-JrO$VyT{$&yq+5l}IsprV*XMKR}`b9U<}3L=V@P>$I#=YYBu6GqHo zbPVH|6Bx!kVqo`ut7`+BanAkDIrsaY-{)DptJYezYE|s&>hA5d6z7~2=VU*Uv%vp; zk?D1)M*N#zC#^U+P8@8uFZ_P%ui$U)Bh6B8tQ_!%o89I8X<77=hh1uIs)RpC5y2-qJGU?F|?1j%uTINRDP2ZwcH0A<(5;&7~xWEQh z^dR@r5-Of2*2T{e&CCqDnaM<>VIh^9vKAqhtVZSf?62SXMkQQ{On7j>50!{Y_&qA&GsIb!{!H5w z+LzG2ubEr5QPliR+Jb5hlx#>_U!xW=y>XmqxP2??N~dKrS}T=iHcVSms~jOK(vH_| zOG#r^s%~8x@RY^Y4Ip|pqi$KUk8Q3SL}szy>oz8}nQ!>7WB~gdK9aUL#I%FlY0e{N zJt2_kB0AHx2USUnM`=~+JtU+FE7_nq{T{~pG#Eu@v)c^@5O-ETasWwV+al|cy6kP_ zaH`Z|JsSp+l`OeoV^K)MD#Vl7HA*GvY<;7dB$SnpYD*u~VAG=(35Sg*(M#1CYup#M zUmHi0QLI^$0GeHmjc?M3tYR5Wrjlu_ZqoqzSJkvZO*;{oWj3ov>a!xvThNc2SjXl+ zks0i6^QH88Wj3)zcM`|$wBYo0rL@s4CsDfKSN1O2oo?E~>|6WNX1}IYZ9R;NP}Y(VoTjoHs5>Yx=HUt%@dttM;PopwH?2UFUOquBv$e0vX)#d!PCh|fB< z194`3V}0lif0h^GOO;5{J*DSWXw3}sp=9kv%1|>6!80_61!yejwgZbc==^;Z<-NGC%s9UIci&)xk`QE&_ju7`?Ai!KI>k!*LbMxFt`!6E_G%#54{ z1-dI{8Y*)!RjtgWRJAg_Ggwe>cRKlJ)}psBEuFze_x7@wcU@7kA81(gF*DfwtuzIbZ5254AHAcObzA5swKr_poJ`<$UtX0q5iH5)%v?FRO`R+AR`0Hkz>q% zKt<=pxnfPp%o=X0(Zpqpt}5J#w8DlDsNx)L(E3PiKU{vLS zp~QoQ4=hIxvHk;V2VE$oMtY`@*}zMpW-(_Bk?ucI)6kL8?ApMJHkU65wG3q)vmN9_ za#^`S?P$}5Vxb|Q*z!TGF$>-fs^|7jn!>%D0{&x4A}1VYX3bzN2KU6OvTJaulAVN^ z9OGy53v0;k4K9tTsvo?SOki7vcu>x56Gi7X{ko^X zao(I8kMOd;i1w8Z?e>Mo&Uip(W{kE%OFhUQh2G683pKd)P_1efD?YppWl8GF9=3iEUgu3GI}olyy`s$-5{WYMF_+uuA@ z$o2`FJ1T}QjAxHWX-OB>YjjN2r6+|&42A^y%twTa#SR@d_Pva&+!xVdqnikEes%h? zKSw)}=FDPDfR($!@HDGArZ&0D#*OhVnSMfzDND_iSBG_M$CywoL{Glxlfr*wBy6vru zxe+@s*1zNk;UXbY_}-sC3p%r$v7xm4G!`+?(Xs~yFPdsMYc|e6o{C8POvHCOOc~2Wqdno6Q>S1-4<*v zqRC&Z>x59}z)xx{xIV>zBC`y2wLQkRPH5 zy6GTXkXS^|Qf%Qw2dm?+q(L;>F>!=TYA zO|5gY4Q$+$HY9QcKMQ zL?ocsuSO*~etIryDRzeY(Kec_E{j=`wlc|K$FxiB*Xr^eiXIrp22XP$FIn6)zhZ3) ztIA$wN2XOL$Jys;y{(*{$(CEjdQWdcFeImY6iIt3WdX0)&FPJ4WgYYWsSXKbJ$?!y zLmB(2DNUKc9{l7?eOIt=KW(&}Gfu?nn8>!w2&1=Gu@^IZY1%4gKXW{`LkTk*c?YM7 z*djCX8)@Vo2;@*y*WM27{mj7Pzm3CeOTb{j5+>^4x{`&&RWmR5h-k8Av!QV#NDKBL zE}kZjQyaJD3YIWykU1N#(Y%aeS7*5fSVkpW5*Y^yQE6=RS3V$`^tihx@4`?Fay)Ea9u+-lJVA3QvsOX{QS>X{S3QSgbjom=JSih9m%n<^fC56!Lz> zd_me_=1$0Pc4v_fZJD|-#fO%g&&s5nBc0gWly-D?KegvN&tv^ko0odZQAC0XTqj2* zqOfrEUuM>{wDYNsgtFf35g%WD)K#=cA2ETGLbqR5+avr6+9NR@BPhwHtxyk;>iJUL zSf~fHg^TCWHochl&&TQfp6uDr9m!J`vBcNb8diC2r@72VEeY@$-d$~h5dzeSroAKr zE0|~jQ&`3l-!lHvE&$Lt;f!io^KX_9Co`+1UexXqtFY9A(o3w_QkU`@x~cv*3Q%)B zyI9zNkI6*y(gG`Q3R|%B2pzkCMKANFWf!tB%lc856n1Y}Yq$0(1lzeWn-e4VL?w>N z!Ir;D-j;u1TC?SSsdh_8s!mYY9n-N$CB51u-vs4R#l`VP)NMlvbDvm za$;1QcQKH-uq$iLtu9N+86lCmR!hkeA@O1r*A<}|v0^&d57Z)zM8`%_A1?H+w!?Al zarBU)QbJVE>3myJNO*V@_8-_Km>o2vxmQ)x!{?>q}UFYyC{M5}^~=ye;9l$G*H}jC>W+&sM2Ll7!JAhmd;xuL>+p(*X^&VBAUS^iE*Sn_L);Um6NTma56L!xcE~yPwAN^D?>n}k1 zsKcE1c-RdU0(7DS0_fS0@^=ksNiVY~BWZ2H7wW7jjoFkv&MtPUFZFcDbGYcY(A-E- zmf2ry=bn1lTzuFQ?$T2g*;JOADgtEjMOgE_EiI2VP;(q-Yxh>NKdL6gepjv2FYMXg z;Z~)jg;N98ZC__HpB>ug9&)I@$c63Nj8~S*a8G5plQP^MezX3Hl3jy_eQVS!5v+)= zyZvL_y%O3}Bni?&AO+nr{2 z_m?W#PT0+ulBF3_g3FYxqC-%t6klm)ji;5Ra|&WG%FFodLO9g za6eq6L{Tws4J~kqr5~tEwz97W{Ocs`F66mWn8EWJv3`hMiWo;xVlGxMaD=5xZOU@2 zNBSW919jCB&{Aqmzq3EmD_PGLLMfQbTn?72;ig)dxvO$@w8i820#V(vp0P>;A+{``O1h zzKwD{L{n!3i>AL_NIR!MTU}@m7SayR(9`5NZ z{0vm@xm5!g!U(ckZ0SiKYPyMKoD9Oj?Awz*IQw=u6-+9!$WuNzc^zeqoWhV(@%!C+@|^SZ7AczM5l(j!|zOPGfxS6(-kNzjN;9D+IfX%>g?@ zu=Ch9u>A!)h+R47-n^AyqYB*NmO+z!M?FP}d>~HflfpuUNtpr@3t=KQMFk}~3lrLo z)jaQJu3rQGKI?qm-Tbj&al(Gyz1bPT{v4AZc2VJ^LLn#Hgvr7`#f?$JVnDqrWi>`vViD5w(+|26>{soJ^;O<{uu$gW1%Pb}wb~G^#++LWhW&DD> z`Nv20m>m_&d)q+iD(=WOE&k`(eogcTCa2Qa? z;c#Ixnq?wmj9{bLi%aenwFFzSHM70!X5lUPqODoTWjC#r;IpDthgKM-<>2t;)PfQ7 zX%+Nm3iOzsnwMP*^!J2*V}V{A^1rN8pg%42@dbK+q4&twTZC;F2L0K!%f6%)%efp= zE+JhFW*lrX@@DRFaoU-10-`JGbs#fqCmVfbC+W+|Ty2IGYUI^O>eG@PxEe|RV9M1B zq*z*oUndjG<7L%#^90*@&4JubJ9RCCI7jbQ{r7^iTku~!uZ&r2#cw6)u#;@~$MWnU zSQB^lT!3jUT;O_8;G!+NaVCVF#cZ7C!5Lfq)EUe7;@iHc)#2N2 zmJ2*pV;rF0K1SZNHNTf3U(?S1?n+!Pp#bEFHq-zYI=Q~JIL7Sndf+LP`yauy&v7*| zg$?~97@LKaf0QP@+0j2*;=s)AZfRONg$3UY!ud=0yR~qlv+Qn7vW(rl>qCBF-|qUj zH*-@9Zw@%%fi6oA#vjA|R4-QRUVZ0UI~672I6`=kAeQ3LKU~!ucU{@8Yb9{_y5-&( zmtI@)+o@1fFHUDGe{-bM)77@Ve80M7FBdg;Z)W!(fUIUUAI!GgF{uJb+SqI+8br7qrp)7YWwrX2+G0)lUr{uReDU=vejElqC?D>-=p8iYo>n` zS)x=awG1Z#as%3qwR_ymVj~W}^7Q&C>YH>BnUj@i0!#0Y#W@eRSFP^)yqtESK6Q#}E z0-Mhpq)i9dbihexgDgKXlMTu8xA~Y@un);%YqG9mS3W-b1ht>T!d`TAK9Pi-Pz$mA zCWRhLAYvzU0g%;{?R?P=PtYu0CfW!=-XTQ>TlvzrW7=;x5+!ma$`Y~d#WTC?w_@0+ z$EP^)!+~h_eIvm;A-H5DFhTZgv2DVg{z_Zi>5C@@V_1vh&g3Jj_R6zJCsnAAH*3v$ zymBsHT_nY6KoFS3$nP&B*v?muZ1t<-G`Rum^SUCA%on}xLFYGMpI?_YJy}UMD+~Oy z2%f-H|8p3+ZsVVgaccMe&#m@zi;89rO#&nw%c@wDZGTgfjAq$y!l_3UR{pIAoe;*F zzHLo5vlVasU1roInoJEM78QJJH01iRhi_YW461>a6WilN8&4~>|GWgq{+r91zjHDj z6C_TEA2_fn?@EyFY{5G}Y$Vg))iOP~EPs5Jd|#I=W$oVAqE%-y_P!CdpUM7s--tY8 zz8~t5ldRu|8dx`1fAGXJy5k=rNK0n=vA*B@RCWAzG7Pr-72@Q&yg4GfhzrBgJDVejew1lnNha z8Gv*@F}h>}b~R-VIb&#u!V+_Qt*)05qtwievi&)iOxl)Hc!&cn!LL|SGq(CmS?eZ< zQ=awoa%R`QRBK%_U*PFXGzpQf3=L(U7=wlpo2hTp^Rnoj&^$3&iIK0!m8f1=acquj z)R;~Pkl~c1tn*h7)PB;}I(Ral{eG4Y<*rRVgB!!uO?@fmXvccbjska|n@jZZk4QA)Q zyV6}D?D_X7%7R%)t}AU4!dm2d6f;$XS1~Xn9|-R)*pysnzu)z$G$&8$>w^K2)QUtU zHh%ya`dhs-T+WW<##7Tk7Nw7%&vRL#-p_d)wl;`;Jm5gM8nSwmZ(p8W(ATF=DzRcp ztcPo5^$>7vvT%kYK-0V2DQM-jLEXK9J*b+0*McZxOB8u`f7{3`Ys-otE90GI_Px%Nar5 zWWJw}y(E|qrKDfA9+L`&cMN!=GnQ~q(K5A{s*?q09qQFwm3>^oi`fzf?rB0?X!WJs z)0C9rZA{4QlCevEw6-@`o0<|A(w3JtB`Y0A|NNs}1%Azx1e0Oh)QqfhoVWN#i-!Dw z8L32O^H*kME%}8nFefEQN50M+*_QJg=A;JkQHAtQDz9saplVwXck0afd@JI@$5;@& z>%#Y2kmlqQH@74{j#hFhC{(*+ypAOarAms-HQ$odqh-eOYnG%Lxx+oJh)>Bki+&7l z!y;Maa4X_Yp7MECB$nEb;aOIsA-TYViXhtq_G7liOlH#-L8LdBEOUPm5=O~r{<#P; zALez6BJ_d)m^;|Od?oK}gQC)se=KTHvh4FsHt5A2{G<)3=2-0??A~yDTM|Sn^Ke^O z9Gw57r%}Sfk*~IeBON~^%SAQ5qtD!Y&u8-Xig&ngaZ-_Z@;1fMD#Q8G;uv<# z`K98-gB0hli<7?2;|5_LP+qLLNufUAu_{&oWXWVp#b|yC0`W4K>Ox@^GB%Nq43@eajfR}SK$!vUIJSQ%J2RE4QlLT)e`LTlk zh8tVRCkXzHWs-rO?u|X=v34W>MRr!3$j}Y=1 zl2?NmC;5>=K1lMz1>eoczKxMhBgu~vHnk)_rZ0}wvx8(pE!fA1FJ;6RHR2WZVWF97 z|3UI<3q6;-RuphY@-qd0S@H>jKOy-f!Rx?l(Tod3VvAIy3Vx;JmkORqewE;7OMac; zCrN(2;D-dBhg4(;qcui6H{uhGc&!mX z%82i0#CI~{TN?58C4W?uRn6e&ut=1b3bn?ijrbBqyoC|}O&qu+nW^?~jQGb!{7obN zyb*s?@(0wxk|q;svu}|6UJ=kz$*Wy6U-G+ze1_zA2!5R8w+Vib|C}R|~$B3CXYROSG5_k_k0)kmS|r;UjrVI{k`D zUY)Mk;)}x6_2Yx&Pl(z-m;715-;w-f!C#jAZ-PGoUabFjL_#MO4+XzP^3MgoQu40_ z&m{jr@UtcV1w0N5lgu=@w!a($#!4`Q!4wxvFEFlx=?KPGFwtPj3nmIojkVNoWZT!#GR*a)v*{Y`VYKc7;DROEZhl4{OJ@B}lxsq|bD zFL}Uo4?xymIy4@EA=9KNd~a^0;!0z6KL?G+x9q0G>4UDcwy zV?bry`Jh*__VF@-q=T&+1bL@0_TBj0K-{d1pP}0rNK6O~de662B!}ogD?TWQl(!7C zf|G>E2Yh8E+&1hDB6TUb#4CiL;0+&n%Mjwt!&?$F9v)1RsJSJ-985aV^B1JWhz~kg zd?L>4dm}6yWQeei#HwN8bV-x7f_JHmtz$PnxiXpSStLU(YcZO9vAD$=*H5(b&b;J8 z?pKA}rXSD9_E_>pw1*dO6iWKiD1-3NKc(gWIVA`HG3aP4aTi4Z(5I3ry~zaH%hSKXK+B?XYkyiY3eFskL$$9duqUqq94Zj?}>*Og|@u)jML97{Eh1ph@ji z*<8B+7n!l^S!uJV6B$ZBtX75OXWpX|hFyowqy=puW%OgFG}L!Sk1t*&bJsBl_jDo7 z^l&qNxeM_kFZjDI{MB~sY_n2gK8kWSAqifjDO(#S&w$U5UML5{Izr(MYMFFOLY9b-6=dQkgIw)t9Vstc>H~yo+Hu@akCtkM4-r z(^F*^bw4coZDBvsfR;80PaTrN!2S@R4S$=qf` zAl#ZPbGJ4KR|#P;gHX3mTGkp0;n?}o(#;^e0U?g}rVYi=pT1Wbju-}6xRgEHBW2dZ zk$GK`%-qx<+#rNS48omh(z4zN_Am%748oT}csfp64&Ev)XN`xjyg_(%ixhfI zfG~Ncw5)0n9umS&Go*0oW@*`eB7_|cLXAQA9zueP`b4y2pH0#*X%b|E8ck~vFE=}L*VNsOOH+02#?1>c*yW)7zyRuBXE5>HcnnR`mGQb4sU*6hyCre zS)?lUT_X1hLu0YGQ$u<&3p=VaySNP^b_*$nI<-*G8$xfJs&$%Yi8>wl8Ff;Zlrdvv zFs{pG@Niv<-E8~C3h{eRb}{;ka5{|{a|kp$Qf z@Oi7@C*CfREOg$DufEdbWeyjaqZ#U!^_7#kq!wAh!{(AG=TKp_L|RS34JNvCAi~e; z!dJ{C?WtyjT(8%2u>$+@I!R;=br>#%SZ5(L?4UyDVdag(>L6~2%Bvb*eqbJHNdDp@ z=3%5SOHr-W%}bm4B!TGp-TCBj+3;laqWZWjqHUX~>95ph$O(s?#J4{Qd+k+7v1Ac5 z9JOjfycif)U5FFoECG1^F3Vy@PFcIz&7J=C2A(sjo!2Thq6y^twraMh#1yrN8OQOO zn)u>5Yt;r+KOu6J!LPV?6tDJ~+Qt1P?tc^Gf<Vt;Sab6i!jwp;Rf?OpUi_(d&-?UHoLA zar|qOg_lAt>dtF1Vy!JN{AWg9L0Ra5=6KYbqINJkLv8OkCjr=&HFz(Y-!N+ApfDR< z0quSz0dJZZrGe82!oF6N(o^Bo7;K;1KR9IxKvSqQu7qaJN+AhNFTS zsl;_)0P;;8u8`u9SQX8Din{Hc#|ofqR9$-i}{6Q6aS6nD(_z}u1kO#w{`74SOohXUNp)X~n5 zt|T6@-RyPtkq|izgK-*v@G~jhc_*$kc^9m;;N=A?Z;gVP z`XaPgtA1E(CcYGllwp}UC!QSr7sE2PC-UX@#kY9jC9iG&pH`XmJ&YYU{?W0z%2etv zHX>>@F*U{8a7q8r&L=*g37Z-$`Q+uqHMr1-&CFW)*r+YcRLlQ-iY9e84mlWS;Qvc) zai^QH`ysmj z_Ciy$kmI{Ee{d|S?dCiUi?~>paY*u?2S2roaqwP0mf=not1F&ms--ADavIz9#6f%M zjmG$+pmFWcj^f*{o-j(z?yUZ8r~YlFW;4uO!><$=;9rc^+HXXsHlTzCF< z6>-$cq?mg7TVK53B|Hb(w4(~U*w zYrIyhUTiALZ${K>N^mMx!kFs`zhVi*ejg8RM49S5|4(+;IUNyx{(`o2x~NQ{1O^!D*n*6haMQUt!#yVYTM5#Xj{Xot8O9_;$r{HkhAbDcR|RB(|!z@ms*Qs zvLS1Tg{z^gR{v#Lu7%1vqW!Tfn$n6lTSL6+1!QVIl^^=SgC_RUR=+ zJ1qWc?c$Dzas6NPSH)Q4%3q!OLqP8Q$~xTD7gQu|jF0?vyKx3<`1HMTtn63CZnE#@>ecBm^U^%65b$6{Nky@imn_Ml>;PDF-B{{pJ zoSKFq5G99z1hInRXHq7s6D?n)es(Cgb&1pB(P~G~r|MRz944*{r7H9 zD&wo^g0{Rdsc=Pb7wck@m{K8iBk@RGO3bwC5}%o6HA$}|zYIgmiAo><@ha|~=Xqa9 z-yERPT)?+_W3W7@Zxvgbq|oJ$1cY6FhTof*G7j1EGKZU%!5u!n=eC=9S`G-|GjE8F z{iIi*ic_C!`W zcy3jeZ{9?l=;^2Y~|{#jkE5F2y=RVpLM?M!fb8(u&43 zmnD7UJ9m(1lT*V)D>#W~I)1#tPSTuyzQ^C4z}uU}_|=^_GSZFAKgcV^EAGM(-=wDU zh|f#al;)dv;VsatJN)P_5<@QXtGkhF)Cl=ZanNp@L_N{+dAsqBBs>b8Zuk!#8yh^T znmmuURgd&ylvIuyW^lQOxSG;CcxXFpH*q&Vi*NK_y7FOrNGa2kze5_`4&i)S!SC)N zqv@Hkyv<%bE_H7totzjVow)A9^Q^=HJZv8cbogGEU=hKa$OR92>hY=j$VpdUsX1e$ z88{8YPCV0B&m!~h$+kR4w_Ke`q_LGjp znr9rq^Y0D^@FYH|FF$sGMAC+Rxn(-398xr#6f6*ZN2=d=`pad18sfk#bj(7C`D;ii zJ~*9}C#U%0bP{4cMMRH}vB&hm5vuJ$Qks9RgCQFpOHFx^gCx*obA*OX8{~%fr`sPS zt!!7;F>>`2-+PdBachHR1Q&ZZ6pF(cd|NT&c&y>XVIi-0h*WfHJweRFd~M!&L^D46 z5b2N0#N9)9Nnr>7eu(JF2LA0Z`Q6mIjz<1UA=$@29U-v@pv6%#n7ri&kCJj8(Y=f| zCn^2K{GD+;&u>O*2EoS=JUoL`bv)eD$TB=wJ>Kcb6EjFBa)v+8Ag#zaUi}zGeYtjg z&N1TST;m3ovG3-h_H#lSZbnS9r1Gqy#^69LLQGU3sq)B+&FU zzGjx<4JU{{0=jwv4N_Y7_5?XYFeeV2!fV+bI_h#xk)DM9(TR7?B;%ZVbwbUO(5gw| zJN3|NmBbJ=t6oX>GLu}UZjCOY9u37lGAXoLhFXt@XHbt)G3aW$^M$&)=y~#jUT?!~ zueOf;(P~?%W0PmfF@jRUivG#m`(OeT(T%7G6=x z^14?@ki&_?dIcX{Cy2{0z8^%>`5opzT_N49s{5$U3>~5f4>mRv%Fwh@ru`oYq=|BMOMeF0^o6G80sjV(5fF!*z8udW@%;l@M|Q5 zZfvGobB&ZBC8xCz^Dxw`tk73NB2mb0$*@1zYO6?DmWNFt%z>v8wH zWFGP0Tkn!nG&X_gO0FkPoTmK2OiasmHpMEA)BlP%6 z4*jGEz@$2$uAOM3ivDOg2+~c}#Wd7=x#-%=tnLAY<+i%cImDdMer0*@FXS%0vRqgH zE3r1A1ARDtJu$$4p0{3kSx$a@CVrJry??q5A*MynOFN872s5*EUVLpXnLulM@zQ#7 zm7ewD@AV{rzV_64C?t>&kCbNgKCS4X3nbK&(hG}pElsG7()upk(wzFzpSw;qBNeK zb>NSR(xs#VpK47#=-m>0g*B~3-xlY0tZ4wfUYuLl&^Q`aoX@kN9q6NCJllqLrZbC) zv=2Utp>}+NEiFg<@ofzCqV2JY+tQ=dq@k^z4X)0xq(2RTrG?o)zRCZqUV2kN5A>C&QN7I&g`@S2kYy=&I3 zhm_Lp&9&f{O3_IA7v+vlG^EH0iW!U+|7O8kInmGbCv#n6XKF)iYvI;0@6)=68o00&Xrw`p= z;_}m%T=jbL_a=Ff!ylHVvxv8@e>ob7tM+Hz4nNwB(m@}&eR(>HR{hB1%G2*O>ph=Q zfmXntZ)XL%8JFcwf%FEAdZ(*gkrpAe_FG;zh^EqyZ*(_)# zedN`2UOt>Ipu_j-j)c>Zl-_>ME7hldbVnBNT%UT{r{7nb3nK_$f+vOg@wxS>do_F9 z;~!C1+@!F!xKom!g>JZxeY+oKkhI3RS(4+QxE0T{4B!vyQ%4$cpMMrbEV;wI8c-MQ zCEPznsm5AiEN(Zkhue=^QR%j*a9a^>F*!BO@E&}=eT6OBlD9|enm4AKi_%{j@-J;^ zD4o$z7aT(^3B}7KHQP~dI^-YQC`pEra(x zE_I+|>GV~+VMp46c8K7q9ceiIaFXBZNLx2rxdM$pcca=7Ozfd_*VeY&Bmb6CIORaMp=-K+&%|(Q%Gjm*e`}EGjYX zOs>cz&N$}O%G^U)!1b+LGn)IY@lLkKc8{ho6wuyL?>KzDv&86MgMU&qVz+ znh$m!UnAN#OA70S1wEo&Bg*3A)x$qTv5Gs5|^LG5E?>eOLRR9aChe0&)dy2JHeRbDP0b7jmJs zUI_sS6todE50q|53)y7QKu|2Gq3+XQ+Q~v2GghxO1yuzJzUye27W~XHdSxWiRYC3s zxv>3rNaX*5`~owO_X_wXMn0^O_8g;kQL2E60tu&`fx|%}QyHE;n%2@T2ipQihJUAk ze~|s%=HE@@VDAV2hP>W|6a!&67c>bJ32F)2t~)h`&L-MHQ}oIN&}`6yf1r#1Ap0k~ z|C{Wn!AHuEzS{g_p=%6=yMXJbV!Hp0`XikTS_-|;wFEhUJ|q466rIO-de5x!&Y5~; zQJh{GKMTWSHo7q$J2lYb1ig|wN3U4V#fVJOD*^NLN{#t?WiKcM?}u#z1ug)B0vDoZ zdE``jP}>&o=QUZZSK0~!-_?ME7u5f6={$KJj{G0=d3OH-sWMqNT}$g)X(JI|G^h(` z3}`wi3Dg?}{GA3s{xfJDXcy=(=q%_r(BEzUo_+|M*FV~6l`jyQp>c|V+(G^zP%R!q!dqKxQ7eTi{PeJcMxgaa1R~$iJpg>R!P$VcC)CDvEGzK&slmz-2 zv<|cjbQpA2i$A}C9)j>oKgt)7*&?(C$Q|Sl3I#=gnu9uk`hZ4&rhpPaDWKJ$ZJ-07 zQ=qG$yP#~)ClE!`K~F*N zK)E2RRI~ud3ls>d0g41ggSvnQfX0BPgOWf$gVup|fexqQdUF=cZ=i>u*Pt&TGmaJj zxr6*cp`Zv*b5I9RAJ7QU6i@;v1+*Hp4Rio>3Un287xWDD29yIL7}P~TB|vVVGK)*; zm5N}hfxH z@jL8*Zld>YVd=W9S9XA!{EnUiO}m4Y=?}fK4-|b@ue<`yzNc5b@1qAmu@Cgh2hhBS zXzWLNXs3R|_W2*k{vTxjWcU9f3;d=xSDK)p z-aI9lw$!?nR1_a4Z2a)lO`u}HOGHtMm`PcRm7)v>3H`rI!48V@9Qo^6C`yi^mu0|5 zQ-hy$puN4KRfgbM+ZB*-oLXE_dX-QV^HPdJ5J+EJMX6}_BlSS$f0F;_vaSEA&kY3k?)0;$lZ=|AZ0__F~ z{-6N`pGPObUo@m|0B=lJlt-XHL0>`UKPgIaQ2Go-ISu+1bPx0b^cQIJY(-fb2U}3z z_(D{^kf6`3LQ3VbQ969K?%vPzJ<$%{rzkb|D~kAkC6B`?x~EOr%6=gI$$ zEB4^r2EX+u@b9`SyML6yrt}Yn#u;^Kx}nSH3Zm_KB3CiB)o6;J%2j-U9na%D0C@RQ zt}+<-%avSZF0j|tTxBcJZ0!F;ZRUQB*zs^-O_V}@mZtrpxPdsqS0)_*pzRy*<1H-@NDl>u6-*c6< zz_Y+Jz)*dzk_AizS{Bo2f|Ojv5BL@s1$5J3M-FTZj0g4vZUn9co&nwhW&xcDE{Dan z8ci%1zv3FrVqg^TB(OiwlfnV89B?D>GVqK@o4^6E4bZX#PL+Xvz@@+_;BIrhG8ota z=fBB74%`X60lWfq#JTZXphHo;Vz0%U`u(hN;RZehwgoOPhFcflh!VJXi!|^M@GsyW zz%mXv1_1s6bi>yLrAq3R+CVL^GjJa^O4ER|UG&N-;C5gJFw7O#d*BRr9FdenicCBUkh71;L6&1#mNa3uBX>3wZY7;kH~?=BM~{UNJB&pd;`n? zE{#IuK!+xX+!=!u=m}f}399MRSVXBJeix1A8_*MI z(^d-yU;^900kD00?A3rSv3g}K@Noy!92ndYdof_e&ZxPoMw8hEH3v@aikbr#0*3>4 z0h57|-B5EN2VMbw>5e`JPV9j_AAZs|peN2nfQec#ZNU`lg?$(>3b+W^tG8a+1H3#6 z$6>(JW6{t0jZw3!13z*fKv;8)xyKLK9DJ+ftKjQRx_?ZALk)EwAs8EOt( zunK_#-PYn%2smsr2CIsnyqdvq1B-Ukd)V6cs%SbJkS zV}}+D)H^FmTi_`dMHvko=7x)mw-zg0X+=2%K~XP7c>o*<)Zkl#N&eVT0r%o_=_p`G zWkneb{0f{4JQs@11#nJvMY#@)t&K|~a9>?Taq`t@%7-gTb>MYiEUHV3zW@32A00rqSJ2W1dp6dV8(o4^6^WHUGbZf*ewz@n|-09dm%@&hZj zMSh@ovDm4sMzf?n@&iLUAU|*!uHEB-uDFgb1~vg|_k;Nf%q`$LU=Hve(5W2ecUL$7 zRszNX=K{wAOLl_;U_0P`;CkRK;9Fo0FcNRDI{9JR0&4?z13LqI_E40`z^%Ylz|uVx zt&#zzMo%<7@O^JZF~tMx#eLB9K(D@v(g0Ws*c&*qpQ6kJz5%WUhWA&LlfaI^C&1GK zkRK1WD-A?`;9Xz?;P64n4;(cZ`GG};AU|;45Urw|0pm4PQL=z7ftKa5A_Dz@)rO(( zfjxo!fyaUIz=gvVWh3x8@C-0=1o8t{0WB+FumSym9k2_D0?q^W2a4TEJkWX+@&o&5 z!JGlZMk~rIV1qHZ(FnwU=?V-6{tj#f+&vaIH9)&@cqbG19JmwMU_9lFMxdp*nU=FZd@R{=7(0mH`7&Fl~XeQWfP7 z;9HJqTM1pZ7~3ph|DP2l99ViO`W`p|I1`uyTnj9}0%NBV=KnV^Sr80fg9W29MlG-c zu;+R-9q<%zIB?HKL=ODC2{i{gZbr?4W%eU*pmVySxK%-bM^G>@BLjU73_gag0)_+6 z0L4EC2^ylCuz@lYFY)7Enh0C_S+u^5dE^WelMW`<;@1hW;%oLp*Nz8np{2<)-h2!7 z!7nL{5YUOI2%#*vc(LJgqxYBSR45ln9^%!xyx2OAbWR# z*V&3k?hh{Vu1I@5{w-JO57YceXfHJiPlzhOb$PyeE6QEOPi;lHTK-g|I&iCPNR8(H z0F!DDb9u|t)Y{sytLRFF{Y=hw*zD=ao@ry{Ae0iD6?J{Aw%pB8)7uyciBpw3r zQm{2VRw#@^`Hdl7Y+J=g2ooDj?$epV)>P=N+bIRU2}d1@=79ha2lB z73dE^Z^=V;z?&bB77)cp2x!X}2uQ}8ssOy+1~5_HZq5|lrYP{G^sOs|&0d07+ zfTn!JPSm>&PXW+lpLqICH1_>Z{C9!+Py8#8xO3-S=#%e%@tV7k4B{PjAyWdMBEX%m z2GEOoei}-X+xlGI=^S-V-AzsLnxolnl;Xw92-wdf0rZ-N_uUOQt~_ox@>k@Wg!H~C zKL;s&X3Ad(Z49?cL!L?8A3!s#c#|~hjZYYdq#@5pzCbAPD*^)c^Q*$R!X$4fn_Q-%eZ~0mw9#l@7vrh0!?XXr zBKH=48$h3Ua{V5ZZ_mBdjS9|4li{2|o%L0PlIfCTO@pet{F7*X`)LqsZ- zFAz|a?-fvo-xe@|=K{Q5ochs+;w;w@!ROc6k^dNtC zgqAMb`l?>}6L$ppBejXTTHbd?ZA4`tP{QwHNIFFt`s7)3#d=3tHKlaVcfk!;wA5K zjF$Eqjh${X^!ahnMA2vJtgL{WnkRfU%zDgmSCn^!%wFZ24Tf1K4@Ge=)b~zm-;1K> zLLXb&@KtR7_tny_P1^-J? zLFgt`^7Z2Wt3f$Mc~&Tls~HS~rU8l)RH%S}`~v1e-?0L= zHH93!$#bCD3Vp?jiqg1H{s#H^FF@Zu7-z+W@_QKaW9RWo6cB=UrwbV@%rC$iO?$PH zq6{ijK;QfVDnRcRicNf>{1fx@H-mmsRaDTpR|l${s&Pa4n!zxb1B2?u2BQoHkj;hu z7wBSNLuQQJ$2cdAQ?rVU&7dC(eYmk68>g|b5c!opalIVB)cTp6d=^lLrv%b0wi< ztQ>hwi@xtHRyudU^X30E{a;Hg#D5D9eSkUnS17}xemZVYKl=~$5!+EpVSPL|f@4VL zi|mBC=|5zHs>#ZctUuz1{0Bdv8vi!p=l>u4XAyt&|KPt}UumegI^VsU^=}0aTJo(# zS2saX;yT}jGuzQ0t+3KsRvHyzr4Ts>{hL$kXR*d3>I}brh~8b<1tLDe(vu4< zKEh7unhS%eEX{=(RJP~}%cz{*6?RjZ+6}&>a$+~QMWwqt#2mqLWOrymWt|={n97VE zFyjcy_3sHQs6MMF?4z<{FB%SUT1hXsLuGV6#C?pVe;;UrrFs^IevF-;H~>lr+9KR#ulvLXgP|(k~=bG3m$}~pCNqggD`;Vep6ru)q75X zWmJ!P1olzAatwYl*eB6?u5WE@DBvA)wb)t+rYW zL#}G6_(`VcsptZGxcC7J{P9#4t~RUYY4Zc}=+ONKBz_GZ$HFf=j6916I9F^c{3)CI zvs8svBY2#0tLp3z+AgQxiae{X#5th&lD@qv?{}?#vU8&uFdVHO30vyvb<~aUK|MXL z*|W2mbUGJGC7yP;D{z&hzG{XgV5_yVe0MhXue#j~DZ>ub$_kWZ9b)74=mxuOP_E+X z^fXKOADgJS|G;gRdKd=9>mIS*Gz(yEyj~|}z1iRzs?f^DDUCPd%2IvFtbGlwI#LSz z;`JEcOQt7I!xP=I&q@+6qk6=*zlwOh>|#k`X{ZGleAxngP~whqAz+>vL=yC}Yb8o! zIv`h{HXW8e6A++nql>VgqPPS(pd_}mL||D}Fy)LoEBfbBl_O6rCyMg*zR z%Xa!aAx|(r{xFGkxp(45LH*OH7hmf>GA##>PkxvQDG7SigiupTzE+Z)QNr~2SxD;| zjt4^Asyb$!3~a4lHpl1QgF893l^J^%v3l7mU-B%;hR(IFmc({42dV0t2}><2m-rM9 zelajX4>b6s?xe!sSz<6+pXvr-496>|RY2>3O`a4s>Lb68;iE~Q47QivKbrU@x|kIy`yd zG}eJKtt&JQ9XHPpspfE;&|ut8aWmJh<6x{movBAiu599(h)GIaRNDxl;GxLytb=V0 z_3)TAM&vIE1jeptUzlH7PQ8?#o1%_%Q7IgWbZH_>n<`^B?X68*)riko(z z>TO{SEecX4IS_g^(xZK~Z9nBI$2!f_R*cbN5Hjs9y^!18QZXl+=gF z^Xo+jDgI>w>#}DGwR~}g-NEZcCU-CnkH08{cL=LLQHjr;M}B|J1{Aq7ai68WZr2Ok z@o`vx)7IL9r?I!Htx{6y#oT|CaPg2gZ|i|wo06cLCCTM7UrdrV>sffF{lMtyimHj&JfuROE6EK4Bmkvo0KFOFi(7o`Ea&;WNb^>n<5AvsoZ>o3PgD~vDeN*k}J%|vjPHIOmTm1O*| zaIzlVrHzpD=@OqOVk{HO-opVxmCl{B~nvM#q35c#kpSx@fwi5}vL z#~W=$jH55`)1{UlLIE60pXkXvYI5BR+acq1pZQH$kY3(MQ}S$e@vYR)AIHE@PxNK zUysAn=RNs)CVnvVTE5;Df1RvFZ@s#Ve*u*C(Hm;V z7Qlu+DE1{d(?@TBV(<3Ri|{l3MSXQI9wWa@MLE3JSMQ?sfZF}^hWHa`-hQZS1LXHZ zv%Y!}7WLEH;)470etH+}%Q+C&AC=+esK1WC%QzQ$_tV4R;r{y2;GC7*UWaUUXw}93 zx+ee)^B<+VL%K*by{tvo`6O#W4Y;75QZ;F`zAs$+WhFFuT=(F5e(>XZkB}~_EJ9^Z zJuYt~!=?VZx9a=H^)-$06!e9)dbaka9bcz6hPxA#MeXS*N?TqgAi~q1u;KuzQ`JgvZL4*XgO+ z$u}T;JrXyDmh1I+?ZlffbUivpg(t9zw-=VL*PG){o1I**r>f1stkfG}e>SPqQ?%PV zU?`SqCwQR}4T^w+RP2SDRFpx=2CFt|1Cki9U<0bYz6o}3Ksl4(DppneHo`{K5f0vs z*l``9|3*CxJLj2=dbXMg`#0)C@oT$ro3O`Tf)1N>ul9WP^az54jE5>)mS)ZK#0svu_z0tdjz zEf{BO;ngjAGzQlDTTomVxV1%Z6>@Kr#eMTnQ|g=hAbyejWD`lfP-aS= zj!@0ZJU!vVlX{)nSo;&R3$C~lr^B_AxJGL$0z)w(dFc>B`u@}{Elr@_7nta=_CJfG zz?#vun|fd^%pGJECz}&YUgsCK27l+(y3i;z*~(xVl28S;CQVMn@^d|uZk?mf#3Pa| z&Te{IeMDT)jc+mS;))k`eW8a9-^V%{{LHd%a)Aw3+^FMZ4w53tX|^*lRg!%p$&zSO zrM;sYzgaTLol$t7TziwHp8p9vr}UT@ta3}SWh2SF3dVo-BNQRtht;Dv(rC6xbp6D# zcS{u>OkwyctewIVQzU+tjh`_3F^k|^1klW$RE6s{;t0SwpC?--`BiGbE3CEbM`mp+ zC8+S%DZN%SVypX?9%IlRW%4A5J&nDEHAWXC9{+(kaM{IrNPoR(7|7*`A7cAeRXQopJ1~booY7Ji2o7z~ap7O7WX(SON4g0$w zX#vioT8JJCA7BxeP>TC%_QRVI?xbi5TtZ22M&6j$F(_q3( zDEtyT18bv@fWpvpK2sYTQ%;TfPP1ZnkL>!#WK^l;?;x=|QIb%Fe4a#eu=c$ce#jD) zn^Z3W>o>HJXa|YTN6~~aon1-68EVxbR!}$aG8?+3TEiWrOf4=(5(qwn_HJX!WJo=u z*QtlK<|!nU?EMrMm&ubU#FjBpI*dmmAJ!hOCR#;A$<)PD({D3XZ5#Efc@0@0q&L)>?`8DEf zK%7WI6+VujW=bBttiqSnj%59+hWtS#rj1qP`zD%;VplJF+m|@!97}vjIwOfzz*=i9 zY!P*#uPi^Q3R8pDS&Lv1In<5xr|CTGLdX6?*w5I?v{NjLenyKfwLFJ*o0gSGLRM1y zESrwmHsMg9Sl3pujEkQ$Z@xw)JbF$KNJ13z<}&YUn-@3I!4z?M%=;85qtIm*w@n?=v+ulrBugxLNQDT0!qp>2JMk zi7)-TK&qFKjWN)WWrbhk}xDCNLn$okWdJVRp*YVr_A(RYe9cGSJ)t;Z2Zd(dj zZ0Sy)mo~u~^r8GtmSpsy9JEz!C)=4=CdK^0(v);7;V+T-J~wfV#M=R!zAT+=UmC&r zz9@YiO4gP~l5!lOnZ*x}RkYO+)N-<$b^zKMD7m1=x?Yu&?g^;4fNPNiIB`L5h6~%; z7qMss9WUZC_bqtzBCZ7Hz-Foqh6_|^5PC^(6|DcsHf|GKcCISAq{kY##w@v_M{D2S zf~8lGItV_wqBmB1!S7e}>1sYq`c|Kc2ee;(t9J`|?Qdp%79B{}&%LUb7DiR8X8KLF zs_3fzVKlCLl7-0Du7<*BAsXTm>p3AhXjekuQz6D_zXU8 zQP2W-2y25DI)lHIIl9cC(4){l@Utp0=agyW7XomHtZGu(4w27lfDEc#guE9t^ws`;k z19|bHUv8tz(}{%7^)pf|C7Bz1-naf_9LlyX++6C5{ap0K1jRnWQhQJXMzQ6)Z@|ZG z(DG3=Egx0W^3k?oTcqXVYgj(fCcv{P%koM8vV7F$6TSv{|n^<(cSYyr*;-d)$Zt^F)3uv_b4Q+20b@KA)~A{JeTdgua~)bb(>2_D!BU1>Z( z=g0xN(A9yv=}9?27umLy`#e8UD1i-F;>)-NY3)UnZ;8urV*W*+dh7hi%KA&|(rBTs zBf(t+Sm}Zm>I4{zYXWKz&QH%trdf8AHj!g1T>hLIFk;-43MyQ62|!) z8sZMZb0!BN8zsaV*r}P#5j2gRa2bARFY5TFxxC!o?@BluS@(OB1 z-VmF>j=VyWC79|kIqq(P`z`f=k@)UDeI^&BZj#?f=nPBkld@tdaJ9a>}XR4!|E9g)Yyvy@ zZaD8v_1aggb*bH1H1qlNKb>;Mw9;M$%@Zfs+LjlYfsUu?Qp+2(v5h@Z)7TR=js4uV zWxMRFQ}>J=*cP>%Ap(kxGIXq!7rwGt>^b%8d*&;t?{-Am{cKvd3$U#V_TGMHa*&)e zt+{Exv*my0rUNWdD=WlsctFt)+4Ta?W9?AfVOC(xMH5>fU>nPyeV*Gam+9E_I%sm{ zBz&P2N#Zz(_Q>>2Dt?pzjTw;38F8DlnQesCtnK%dT2Z{+8N&2r6t2g1{L2WH8d=Fk z+&ITZ%xCwb5v$OMlmQ4ul7@HjO$$urxhc(PJz42YWuYC}h)TOZ?A5}C8dhwmVa3LO zSrJJCWeHo+{Tz6@qN|rU>vzndxg$5_P3pBJ&SYEROYv5{Dc5sStod|_vs*W$w^qE? zG_b@ugeMAXn4lwD+;R-Q*BDL4U+)o;=I$d8FDs zPoh2^OOH4`G)vLpMw9O;Te+R)qo!&tZQz5!3j(BWpZrz*%#q$J#>t>IfseUbcUxlJ25$`o6>e zDyZFYR({`+VXs0m$BZOQS1(#aw|PCmo$-%P9j@M}+uAln5brrhgo%!zwWz0*#GZG^ zRI$Y8u_Ee%&9czPyMoJ(K-Jo+uktDBmb%Rj|CnPa7CT4zjGKm0`aXIrbJFBdioV&= zoXw*76!-E7$Zc)eh4blk3iU0HTF0HzjF$EBkF5?Dxr@TaL(it@+ZaGyVYOt3ZPpf_ z_f=AkS5~N0?wLzXsd8A$8thFre77T%45#xmCB2v^W;^_Qe+GFyL`>FfM~V!U6pMMb zqge$?!<3Lhn|37a0=VG9Rkf0yN6pW7_bA&rKUOdJ66cxNf!9a{5%eb(j;at=KenI@<0{`Gi}Ek33md1Pzlx zjsO~Vv=rtPHwb$56j4Tu!~d1TFrlZ2$&7JWgMrSqQmiRF#?h8O5@{{S&QO!;I0AN3 z_msWv^F-2aHVJn16tTU&I?Sr>utKE-yNuT?agMM()_BNKy!Ag|s=1PiqdMIo7oXUY zcSvR?H0&iB_t|awzr2qbtmnv)NiFxo80C=JZCc$yj}m2$!4TSQ=0sbzepce4wSvCa zl#?K?H;?5Y;0P@5g@*vO-+{foMAZ2Grezt0zLK$VKWnO#rj>WHhvj)wns>Q`&AVuZ z@$wM)yrbl~)(Dv^JVQzKPo_V|=659-lMg_fJQ3CKXESPH9mLV|SKgBcS>0>ZoQo)G!zz_)*9j9+i*S)^X+0&rm$SzhAlSR zFnx}<_Fh&K!38deN8vQIj9Y|(%86&WT`$DdZg;Z3m^I9k%a4reM0m7|?fzoh{m~nI znPYIBU2JCa0LA6d6-=r6D43rw!hB;)`g$=%wuerm^s#2`^C*SJ9NpH|$JyP4-9Lkr zkGBChu<6+p{c-bN&{;j}vnk&8W&9y+ERmkvjIup+7_Lt={r&xvSk#oSc=PtK3-CAW zt;>@~Bu_(5Z_!u`F!6r!gx)w%@h={zJAEnrXp@J4fw@>>_Di`*0~G&*9l{w9kql5L?3)7*}u9yA4K2V&Fv(F}6PQ1dsz`92t{_-Az@ zwET+z_V0XON}(j4(2bPh4$t!MVMF>i$8&_T!$*cS5n%kJO`VK`+OFn%_ENKdHtsEb z6&%C}h~&J7r>{v*Ze_DEmswXls`4yrhh)DQ{xs-ljj3crZ-Z5RMbv$YDS^0m_AcJW zyp6a}Jl|4A^fTdHUu@Zk`3$yRt3lan`J=sTU+)pJ)pJU?a}mI;ezGKm?l9>Hpt%E| zIGM?o%EohAG76e_hrvV z3{SScGeWLja?re=7qQ-Rh^K2aS+|o0_f-+hy|Jo9$vCo@$%e>Q{63e>k^ z87mqf$HV`SEUkF*7)6gW>MXE)a;+q5KMEO40<2X;f)UN*E=S3_hM3tFPqCtVjr*2b zEY`{iPWKl9zN~muu#I@>_MG0zxNoIJazpQd9pe1?1y z@Dpj!ellnZ4%f$xsLht$AE4b`X#IqjO?8E+@V==&%ZT1#QSC>nuysr&Pp*_$#H9H~ zPgC?~jXLyfnU$bk4#z*{7&1y;K|ZCD`L0SEIwBuCd5IClPNrdfRg%RrwUS25;*~}m zFN=3d2dpuIIqjEY^FlwM4~Wo^Y>X>dB}8%1ST~)ae(>%d4HEJA z43m41Xy$2|FO3LO9B%wOJ+mEZm@3pc&#|B}$QUk8ge8kXrp zgd1=D3>zY%J^6j4g%OG)2memLgFe&S3-!6Dnf32#FTDk8hlpOG`1{iqh;k5JYWaK+ zg(4-CV-gpq!L+ZeFH}_3sZca)yhd^)GK2C!Uks7S>585rtc94h1o(b7tSuCYVUI|; zi>h55+7B)i3Qs5x60;(CV?2VMhloY19~e-DAfkn4MBGfXs5@501kqHW$aNrvgsx>oe3QGoaH^q2HV zdg~IGPD)04F$>!(sSY6(FW=Vc)$3=)d!ra`4HF*ET|`^KSzB@Zf`6w!l7lWAs;i9( zSk6*|1*zpTq0ey9&ogs?wc4OKCWF)8%SMJoT|M5P8TwVnL-s&8K3p`>uvCl05WIyr zv1Ls(wra;B z`c^N3N@4N{;laoK%14OCp*vbL{`u-~_#RFY{(I0zB7R~v<2wo4gdd^xNO3i^TZXi) zTJZbOVwCtGbV>>%zNqGy0pX)X3OTIPXwhU6Pv+Z!J(|%emFW*jH%u+WuCdpX^QFVQ>)_B>(a=LsE5;)g z$7}d^`U~x_%V*+~35{9Krs^);1mWYvpy1mw1fP}dD+b><5uW%Iz0-mhW)RW61+W5B!xDS(mP0Mwfrx*IZot+&XFs_b=8RB(0#nf3%!Jo{Lxie zjrbj29WNRLtCHhBi8u(C#)~j~nf{OQqD|qmk~U!(dgqieOOFNnk1VjW4LT_H_zZ%V4yrQFs- zDL-5au+(}kp$Z>)^mA*w zhJa^@m`=lY-4fAMD;x;tmWWKPQ-26uDoW`meqgESsO5Hnb4x`7Z9*5&mLdM}Txh;b z)YsnY3PYCR%>6k$whYN4yTCik@F9c~@Xs<6ONYLUt!Z)uV&&M6X zSuUDsr5&JMIVQwC_}*)|$k4{LhqdLRvGzg^d|WQlv^uTePPyo>&1wz(mm|D;ODI_` z?$Zid!n)-mRg21olgq^@ZE168wL5N zre!@42U(lYx{P`-ZWG49%k|*JP59)>Kls2d8b3B3PE++1+#ziH`p{srXs2b>g)y7O zE^S5()ZZdDXz?*{WQ!=$T1P{ZSFv|CMnT1^VyU({654JRW3(xeP`OnUXs<+ox($21 zLj)9T6HjQP!r|mL>}5wdwAzlnoEir6wj=&{C|tq1dJCHGz{al*f%!W`du>z*oY*1K zwbz5e`I;E5JspHUwTGoA2u{8x`r!McNw15(+SWiQc^w=3SRfpyGAGcuE^s8-92TjarOPLsp3q+T>cW zrV82G)q*Qk$hOrFTI@u)+YeUk6c1_(ToANNlxXvvFn^brjxKcW7LRIu98kJjRN@Qc z$$PLm!+?rCVv|;6K>pjWw-7XEwpwzT-}T4of^dK z6TP$$4esBEWP|R)(S2f>z5<`pn(&UuY_LV)9+jCuY5Jg|&eL5l;apBrq>|N1#m`+} zPxn>f_jk~VZSO+TejF(u-+_YtRu|9QFA}xVJ5aeF$&UYnpRf=MwLSm9g9k*kHu@iU z{(#8Qg8qR|4q#Uwz744dMZPxeHq4^3>23JmLBwzQ8^YfeGqpZ{!@_sb;Do>7^1Gs& zdIwV9!_jf*78JdQ?OAgR=2Ln9E!h7a#%;@6Zyge664kv`XMYk~Ya513YZO^kc1wIO z%!V%;!Ok?uS!6VT&38qt|D(=UM*J2dG{x}OYr*Gt#bW^-wWg{OwZ*8FVnpc&-z+o& zOtrXbf@w7N!>9ch1R39}U8-gV8=)$eWg$jJEk~zt%-YIHxD;rF!G&1kBUP)~6lXZK z*q~KLc&Xv+W+db5aixa0)TrOhXw=;>@Q>M5pT!%^Lsh-Xm1+1i^|h+GO^vUe_(1=p zw#IoiyQ)Wy(WYToxbuclXNwV(Vl*x@Vz(H;a%iN+L|KhSVgU7uv! z))N||B!@H9Xhh{@qX8AAhKmZV4XIJ98a-^h5r|H%Iy=kQ@nFnjB|KleIg3lbMO@Ze zL~kC)T;Nj)rQMSZ?kvmgvn=$6XBgaW4woBW;Bwmw7J7mN*M80hbNMEtZSbql+h8u= zV)TcHxjI0eHg^Aj>pebLusXJB)yKaXt@tJE-;G|vn?8cExpFN_TW(G9|Nq`Hd`H3$ z!rZ@%F1Um~_Lt!cw!Ytm0_f+^iE9QF-!dYjYretuqC~fVGD83G2hvwcfnf%h{zmF4t1Kb~S0UE*26BN5X zlpzvrfS1rKrSN9F)KE$!x(tdD-F5GF=EkjybuE_Y+dH`4QnFP_c!Y%G0kd_zA>p0i z0BJk<27`~umVPSHm2jQVN2?e;j|=6dL=T1fcM!dHH^WCu?nr|j;e_6Ij4sjIenuBa z?v@fg7lxetKKNtDkz6O*t&#vtTu8tNFn34-)+p93yQtp8^lY@j(&s-)E-rB{m7K z`8;+j2{#sb&B*A=i_&&!<8X;hUsR0PjMwT8qsm*Q_q;<<2)&^1^0CnUNNs5+u+?m+HJ^a1c98o!^`RX0<; zHMd7yoNRB+-Buq7p933_ExP9RZN5Z52-it>&CTg{iQWYD1?rB0Y=J^*-dVv}!itL> zFbk=oYo0m8N%TC}f#|L^&pnz;bj^DR-6g!{fx<8ep98@LYO8q^H&>$ZgJ6WNdERwE zqVYS5h{kWr%{8z^H4h$B{kTOF;TTeBXP$+thS^y=-XGFUGevC##U{$m-^9_d5JQQs zcO=(4P-ddgnl}({NOT08HqCi4HP1=s*J7P`XS38{c8>W*-Y}C&l>bS5TorufFjMNg z=T&v>B_=GB^u1VKV$fZ3|2Zzxb?&W z!X#QLmhh`^%xQLs?tYHhHcGY%iM|0|ml^4+`DD;OiSBlR+3b5VMr)c#{)ySF?}{PYVhN{5hv~Y(g;F8mHJ`TLF5$Z+AxL_<3ug7!9~JvWx$@J{`i-fsG@5{?H72Wy+dw4z~<;BT() zmOqT?a1OGrDS>oz!CyK45Boqa5tQd7+_ zJQQH2(iUY+fH^H1f1%SNSRlzJ2eI0G@CIVGn%$7m_FcLcC3;XI!{rgJvRuM|An@sZ+?ZDE2IoHgk^V=hbV>I5+zK+@dfn3!PxYg?}g+@d{Hv%-Y(_k zN%(l!6^u=PSulF0L{F9IJu++}CHxr)kG{izSrWcL!sj$$IVU81wS>E6d^{!LnW#b0uPu6@LNB)L}3q#7vdf$);CtM0OyU;64$zeFj z;Q`0PVK~YC46DO%?!&XO-B>MdSBu4_NU?M>Od<1FAj7jH{AmftAJVlTrzCuVgmH_sQyBl9#NU+o zAQ^4_CEO2hk&-=l=#(63ro>dqaXmuX)kEU(Wai;WbC|d7T}H@TY|2)Nule-mdlFs> zY80*l9RY04Fsb%ei4Ni5RMtzlf}?=UX#vH^hA)_vMPZNQVd9rjxHRY^lgnU9T`H-Y z%k#a75?&_ZGh$fl9@&@`62239N1Kr`@e*x|qwlGbay&6BjYeM#(V5-e3#w6!$0M(g z5Fb5F4v>7Qwzb4xgy0y=$Y0fF_Rl1Gm_#4rT%;_N@CPOQ^l7dcn~}kgD%`G zhnEZprAnfgHfJ`UWP4Y_$H6hQB4&*|G;bi$=Or2s>a;pItpv(I>@D$O(cH+9P*w*= z6@C?CQym;+BjI!%b9l_IA*@V}4P}m`#zV(Gb&+f_%&Lq1b^&(O#dYWU45q$c`v0n= z*5MLT#cY)$vaM7di9tpF$D_sMShKTt)91{0RF1%6i9a67V(|u+bv+>Aw_tTFE_ohW z%HT&O`Z(Q<4KkP4gEVFU3K)N$yp{*vEDKP1t3Vw+G8 zeSZgf*TV&Glw1i)-z(oqvM#Wr9(reKBevd70FJt>a#J=xhmp zUcv{-%(RR3E1M*|Lj(f~EP6N`Zze<^mLs>DlyP3tmIHnbE;7CO3Wn!Mv>wYo`eh{p zSQP$NjD+Luh;H?<1MTnIw3GpxFY!-7S$!PAMRKTN_gmM~5?%92_7xKDgX?Hb4E~b2 zMgFL4*e;2lT&pS}!Q7XC>)lHo%~Zdsa$SnwY>eq-K7(H~fYrHXGxdHroolxBbAHRK x?x>xR(A8|J#jk|HUClOX1uX4qw$&1Ez?W3r57FJswytG4yjL6s^*fmL{vTTZYw`d9 delta 55304 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 W#;)7cy(6l*RD>!%XL+`xo$!CH=}-p% diff --git a/progs/stack_based.onyx b/progs/stack_based.onyx index 8842eaff..44889389 100644 --- a/progs/stack_based.onyx +++ b/progs/stack_based.onyx @@ -4,11 +4,11 @@ package main #include_file "printing" #include_file "alloc" -#include_file "test" +#include_file "string" use package printing use package memory -use package core as core +use package core sort :: proc (arr: [N]i32, cmp: proc (i32, i32) -> i32) -> [N] i32 { for i: 0, N { @@ -154,23 +154,27 @@ start :: proc #export { print(v2.y); print(v2.z); - buf := core.Buffer.{ length = 16 }; - un : UnionTest; un.f = 1.25f; print_hex(cast(u64) un.i); + + s1 :: string_make("Hello, "); + s2 :: string_make("World!"); + s3 :: string_concat(heap_allocator, s1, s2); + defer string_free(heap_allocator, s3); + string_print(s3); } vadd :: proc (v1: Vec3, v2: Vec3) -> Vec3 { return Vec3.{ - x = v1.x + v2.x, - y = v1.y + v2.y, - z = v1.z + v2.z, + v1.x + v2.x, + v1.y + v2.y, + v1.z + v2.z, }; } vmul :: proc (use v: Vec3, s: i32) -> Vec3 { - return Vec3.{ x = x * s, y = y * s, z = z * s }; + return Vec3.{ x * s, y * s, z * s }; } UnionTest :: struct #union { diff --git a/src/onyxchecker.c b/src/onyxchecker.c index 1fb90483..5f51a243 100644 --- a/src/onyxchecker.c +++ b/src/onyxchecker.c @@ -96,8 +96,9 @@ CHECK(for, AstFor* fornode) { if (check_expression(&fornode->end)) return 1; if (check_expression(&fornode->step)) return 1; - fornode->var->type_node = fornode->start->type_node; - if (check_expression((AstTyped **) &fornode->var)) return 1; + if (fornode->var->type_node == NULL) + fornode->var->type_node = fornode->start->type_node; + fill_in_type((AstTyped *) fornode->var); if (!type_is_integer(fornode->start->type)) { onyx_message_add(Msg_Type_Literal, diff --git a/src/onyxparser.c b/src/onyxparser.c index 4d2b41e8..3296377a 100644 --- a/src/onyxparser.c +++ b/src/onyxparser.c @@ -961,8 +961,6 @@ static AstNode* parse_statement(OnyxParser* parser) { parser->curr->pos, token_name(';'), token_name(parser->curr->type)); - - find_token(parser, ';'); } consume_token(parser); } @@ -1275,10 +1273,9 @@ static AstFunction* parse_function_definition(OnyxParser* parser) { while (parser->curr->type != '}') { if (parser->hit_unexpected_token) return (AstFunction *) ofunc; - AstTyped* sym_node = make_node(AstTyped, Ast_Kind_Symbol); - sym_node->token = expect_token(parser, Token_Type_Symbol); + AstTyped* o_node = parse_expression(parser); - bh_arr_push(ofunc->overloads, sym_node); + bh_arr_push(ofunc->overloads, o_node); if (parser->curr->type != '}') expect_token(parser, ','); diff --git a/src/onyxwasm.c b/src/onyxwasm.c index f526e6b9..fe96ce89 100644 --- a/src/onyxwasm.c +++ b/src/onyxwasm.c @@ -1215,12 +1215,23 @@ COMPILE_FUNC(expression, AstTyped* expr) { case Ast_Kind_Param: { u64 localidx = bh_imap_get(&mod->local_map, (u64) expr); - WIL(WI_LOCAL_GET, localidx); + if (expr->type->kind == Type_Kind_Struct) { + TypeStruct* st = &expr->type->Struct; + + fori (idx, 0, st->mem_count) { + WIL(WI_LOCAL_GET, localidx + idx); + } + + } else { + WIL(WI_LOCAL_GET, localidx); + } + break; } case Ast_Kind_Local: { u64 tmp = bh_imap_get(&mod->local_map, (u64) expr); + if (tmp & LOCAL_IS_WASM) { if (bh_arr_last(code).type == WI_LOCAL_SET && bh_arr_last(code).data.l == tmp) { bh_arr_last(code).type = WI_LOCAL_TEE; -- 2.25.1