From 86ec9117b26459e5a7f526ca0196fd341faa4f9c Mon Sep 17 00:00:00 2001 From: Brendan Hansen Date: Thu, 16 Jul 2020 15:38:43 -0500 Subject: [PATCH] Added a proper function type --- .vimspector.json | 2 +- docs/thoughts | 2 +- include/onyxastnodes.h | 2 +- include/onyxtypes.h | 9 +++---- onyx | Bin 238288 -> 239880 bytes progs/other.onyx | 2 -- progs/test.onyx | 1 - src/onyxchecker.c | 16 +++++++------ src/onyxparser.c | 27 +++++++++++++++++---- src/onyxsymres.c | 52 ++++++++++++++++++++--------------------- src/onyxtypes.c | 44 +++++++++++++++++++++++----------- src/onyxwasm.c | 14 +++++------ 12 files changed, 104 insertions(+), 67 deletions(-) diff --git a/.vimspector.json b/.vimspector.json index 88493853..e309f7f9 100644 --- a/.vimspector.json +++ b/.vimspector.json @@ -6,7 +6,7 @@ "type": "cppdbg", "request": "launch", "program": "${workspaceFolder}/onyx", - "args": ["progs/basic.onyx"], + "args": ["progs/test.onyx"], "stopAtEntry": true, "cwd": "${workspaceFolder}", "environment": [], diff --git a/docs/thoughts b/docs/thoughts index 188e314d..8bedc24a 100644 --- a/docs/thoughts +++ b/docs/thoughts @@ -14,7 +14,7 @@ Memory design: Example use: {{{ ptr: ^i32 = 0; // Address starting at 0 - ptr_ptr := ^ptr; + ptr_ptr := *ptr; }}} diff --git a/include/onyxastnodes.h b/include/onyxastnodes.h index 081d20f1..9a80bb6c 100644 --- a/include/onyxastnodes.h +++ b/include/onyxastnodes.h @@ -175,7 +175,7 @@ struct AstIf { struct AstType { AstKind kind; u32 flags; char* name; }; struct AstBasicType { AstType base; Type* type; }; struct AstPointerType { AstType base; AstType* elem; }; -struct AstFunctionType { AstType base; bh_arr(AstType *) params; AstType* results; }; +struct AstFunctionType { AstType base; AstType* return_type; u64 param_count; AstType* params[]; }; // Top level nodes struct AstBinding { AstTyped base; AstNode* node; }; diff --git a/include/onyxtypes.h b/include/onyxtypes.h index e6fccbb7..1aa719de 100644 --- a/include/onyxtypes.h +++ b/include/onyxtypes.h @@ -47,8 +47,9 @@ typedef struct TypeBasic { typedef struct Type Type; #define TYPE_KINDS \ - TYPE_KIND(Basic, TypeBasic) \ - TYPE_KIND(Pointer, struct { TypeBasic base; Type *elem; }) // TypePointer utilizes the elements of TypeBasic + TYPE_KIND(Basic, TypeBasic) \ + TYPE_KIND(Pointer, struct { TypeBasic base; Type *elem; }) \ + TYPE_KIND(Function, struct { Type *return_type; u64 param_count; Type* params[]; }) typedef enum TypeKind { Type_Kind_Invalid, @@ -71,13 +72,13 @@ enum TypeFlag { struct Type { TypeKind kind; + u32 flags; + union { #define TYPE_KIND(k, ...) Type##k k; TYPE_KINDS #undef TYPE_KIND }; - - u32 flags; }; extern Type basic_types[]; diff --git a/onyx b/onyx index b0040d8f5d0f8640a3a9fa98239db9bc3e0e5321..ceca3e2326da7225053462373ae7903b2a73f873 100755 GIT binary patch delta 78143 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 delta 75942 zcmce<2Ygh;_cwfJmTc}WWYZzN2SN|MOMnD|v`7b$B2}bHm9`*?1PBmDxJd6{12keN zf^-lNkS?MiDuyDUq9P^xe$UL^&61zb`#k^u^MBv{d=BT#nKNh3oarT(nP(iQ4>{(i z@PH+`6~4ERsmV0@jj1VuSQXpW<}##h6)jm+`*xcOg*6awuo;1=Zzx$07U6tX$X#C8 z=9rk3zroQi?(x$y1>?_lv*#7?-a0!iT9&NJwS!_p$to;WyjQX+>n*;)zw?EyR8_WD z)Wg5`#Ve(%^0-4{NvSF0B_Eq69k?U6` zJoDhQvC(Gic(D($n~KFInX#9|Z+>N3>W7|9Tgi;ATa2G-@&^^;*EIQy#S4xy;YW+b zHZ)@&ifN8A&bY(R=2h^D3a1p~-!}QF#rU?tO1^F}eyqt)E5@&8@-r3Rskz;kX+~rf zOYo}6?^=xSH2J-Y@fVx?LB;rcP5y{y_)blGXhw{GCPLFvUsWZWT8ux~v z7vpa=`HPG3uMxiz8qca?5phFQ#+!=qTZle^Wy0s1u}6!=E)uzcWt=O_*h|G?*O>fk z#rW@={DNZqJd=OF7=M?^e^`vaPx0Z-Bg%MpwH`4O=*9S7nf!oa{BtHhtQh}WlOI=% z|AWa-k$mLu&bYvgNG+D&smZTfjBg*R3{NY@4>S3h#rRcBewH^M`D-=Jh_2od;5Rb) zy^Hain*2e<_$^KTh+_OKlRv%~zXSL_G!{)2O@hianOQ8lmzivSG5#QvzqlBGQ{E3j z+Z@S7wogCtabg&+`%oND?BO?dEz@Rl z|Iad9Gkpe&nn`c)v+|e<&KKj^d3T z<$aoZjPc#w#nkGJ`R+KeullPz@~gZmH5{C!iAJ?v<>#Ws`?Wq|$)aoR7x>vI@j>kY z{M9HCT<21$tWKJiIsIT99PpX=yUujR#l*U=@Wm10M%_L9!I$FW@1uE{d*V>NIs8_8 z(V>1CzZsUdu)c#m_sSeu_Q60+wwFMa?Vwhhnf-TW_ThqvUqQ~!*q-^;-qC@Qm|hT; zIXg?woUPsVDcEsD{LmnYpTCpm+prg7rSk?hYRL3I4{nC)V9??@hUOB{Xf3Ev(p z4ma+}y9Vc#O$%f!Bd>0gvW&%uUQIvbBLjqAvlV=POYu>&wtSkuc-pK5t1B|nGxn||U^MoU&tq&KfkMQlEWPcJ1NH_!6#GZm$%m+^3n4KC<7HLrV% zHyK}H7uPZy@m_Wj+cJmGYbG|ge1-S7iSXwWSd+Yl&!;h_iOH?{@@2l_daH^2`?S1X zt>YMf>XSFEO%K*AEi-%aQIz`Vo|5Q~nb}7QLVk3)h>C1fS)zl@XBRUq1AMU`88oMNPky0`n2%$`JP%#i};573^SQ6Lk}&q{>m zPqX5j0~;a*H56G0%4GV(ME^G{7n59q~Du&dv`k zP>@q=B4~^bZvho_{8H#$A3Ix6bXBq>r`C15jJ^$2(Ds@Myd6f3bF@0mI0rJ_8A5f1Q~Vdc{T*jV#jEg8KV4?Y1v^ z>@J%a`QqQ!#Q6NfzzyL*=v zANKl{uUIEVc7F+x@tmnp9EHk>H~I|V?bgcpVMisW=F9E*$7>|#^byH9^KwnT@tDy2 zj^Ug42xs34^&XUxwepZU5p|h6RpjJR3qHON&pyn|zCi4w<)0NhR7G6xTf4-_eJ+=% zGO!GHt`xQU)#gE`#L#}R{Lm>ew_jQQ!U^$Nzf3-R?}Gl(e8^rA+dq<*IVBqQugaGk z7eo7}IM$t#YOhfi1z(WZmtRP+RbPp#{cA-YPC>jH6{Jl6FI+BJL$~XQ`2OLcwv&_| zRR=?7XGoDMUx=3mw2%1Qg#oa$Y6yD^A(hkUYoLNRcZn|tOyWbAi53HE^O;`?=fD(x zeK%#Q@4%>qiF2qd(W#~4=Yh3DZylu^I>8TUi7JN|cZ<|Pbwge&`>bt&yWxvI_7bYK6sZ=rPA zdoy!F-U5N_e40JhwAm$i=3?}zI*-MBuMT8yi@+f@_^3ys`H&Qz^i+%(QlI-h%KLE0 zewO^{!y@rbpflNN*R{-?XIkDyA%@Lj6GY7LU-^)~h2MzUyw~3g`bUUfBcgbjf5hYw z@qFk5v1&xTe-&kUTA1>-*f%1CZ+<8)j)-PIh(AXp@jDMhxh}FqtEh}QZY_hV8Si?=$Sj9qpQzyEAyLzVB z`C1(R_|Lp6ua#!(j`(BLL_Q)?usOkE`smKgM_eA=GV0;aFf_Yaobq=TVN8y4py(+Y zkLk$||0Gt9DIMPQ2FV?8SBra$sdz)298-gT7cQ!1M~T?6)mUrs!q`gu#*e}|wsiQ* zQu}|TYW1_&Jhl%1Crtb@_PLM=_chI&DNm^}dt(^XRT7iN`?C}=X57%=U+)zcxh4J_ zSA~U&r14cs+z8M#W1fYDi{ay=SfH3QerWK8yTwzS6{TK}$8xaB>q8>bOQVHiFxrmQ zg?4i(R-;rfYHKCLudg@pFQA_1iEk_#O{mA)eJI9HNNh77%hiH%@3~wUUP>LwI4U*F z!bU`Sj+W-HlSqjo5l)#5d`9GD68T}1D3}oC+k)sln?%WpQNERkUb;zC0Ubj0_)X%4 ziBWC-xdXb>CQq)uq>`4>MY(=QBGrpTXo-Du;WHxpNyLAX*a__$iN3Q@dcMi z_J?@zMn|?nw45Fv6|77MQ|6`Bb?5o`63TFLPEv64jpEr<5WAl3ZHWAa_oE&fa*`w)*8vQQV(MCLj&u9_*Rz?2JdC~f< zaC5E>KwErft`3F{_gwA!vzYZ(4EsgA_g49=JXOPcl@W4u-;2Fb+|4C2q7x#p;#R|b zy+2&8?2Icnv;Q-yKKegJ4HF47nkK$sQ}!LnxB^k_W@J$&aoEKBzhz-(n|!t%5nZ{3# z#yKK5r$+e?{zEF)Tk3WL)%`F!jLJ!2Ux;Nn4F)$r8n-vAg8nyeMm}}9ZoVh$^BD)V z!20}V?tk(JVwG}xQZaAd5KZQWRP?2aXi##h71+sdGch97HF&9b7Dm|0O<{ zyOuv0OPh8Un>TEpFT*v<*!g4m^*ZA2{3O;`1m|Al9dpH<+y*7@T+uW&5_~PHFKFb< z^MteCM&UE=$kPSCx^=N2o$XVPklJonehvPR2M|ic>j2{Td>V5zF3nDhnqI)N_k(`8 zX9~FjZF=*+M8dC!wVos}!>4uM8DJPB0r>s&GFoh0YdpNgt*9%yr`;Ij@gH!oskgWU&dzIj~HYl!|r z(d&uMQ}hO+H!6A)(M!GPd5V@grz?6D$&B-L$_!Rh;8hi|mgruJmi!KiUQYZLik3z+ zQ1lAoS5@>fq7%L3%XrC@RP;)caaqlLk^jvT^7k$c$KHx>?D_VN!14Vy8 z8LU+FR-%QXw-NoeqIVEI5wsKT-A#evDq=s;eHDF#=q`#rL3Arce@%2_MV}$MhN90B zT~5*Gh>leBd7}LleTis`qOX8<-u#=E!Z|)yDdM)GeqQ59(Y}hlO?f?b(g>X6bCUx16fH~qqZfVAi$3l}f8j;vdC?oa=%rrtJTH2>qJMT$ z#^Y2#y8Tr}|3Lg+ik4N=LDAn4zlEZ|CAxv4zahG+qAwDisAyUDWfU#jM@dD?HsrEs zPAdH=O7I8G963HTHr)J0(O(h$t)ivODKD7=UNZTLmW@;$efr3>E4}1}qNSd<6@B_! zt%l^4IUmwXK`x||ms=_T*4XsO3Sv@=Ip`ZvvWIX*J8 z+lrP#R~3DXGCu3YKjJ07OVQHkEsB<2TZ#~O$9l;GD_R=it7xaR^s!u}sk*Xd3^05x6}CL;w+EK!g)91VjQ6eL++tqB{th z`)|Jhq5%<^Akv9w45AGYwLx?yqB4kHL?nS2Ktv>n(L@A+c!LOAW{Di1`B(C0FI&oZ z(jf7|o_O9YM|`}$x+vUY71LLQ^EGdZ6)WbkXi;Tl46Y^HtnA0%9Uuj_&z6GvswwyPE)&Ujf3wZ?rz4sG-% zP=PVksyMl(t0N5z_wuslH=^d+zj?4zR9^QoRy_09HQ}%K5zE)d^Tjj7-t~zh ze0>^gCAzO~!nTNI>l3g<{$hR8i0>{VpEfF=-!COuNP&Rr%W~78kk*T^)lBou5Y0TGl zCJr*}v$dY6y~khd-BW@4DP|=wJMdYriO;sq=1)h$r?tfRkGECccT9R5+so;budp$6 z^Ya<50(PEO4!rTDbYQFFaG-Uh=>ExK-nE0QgK^_g2k|2H3xClfFP>i*j#krHyqC9_ z+uBRRQpQQc7Ju5EcYQ%}#$g4HhSqXhNB&WkH1&kow=IW1X(t1b2-FbkKO4sDNCxjb zTFMX3Z_5|7l^Q-CB{}}vd+{r6BBch=#z20^f)Sg>_29w~&b<6lViCy%onfM9MVz zBAp!)@p}{aPp?YG6)-ADMoYyQw>O>7%aB?&50)Z9`_lP?bjb-;oR7fira0qYkusV4 z)A^oeB*VTFTlbISi7L<(ff{1Ufpk8zsf^tyrX8#y!VjkNUzSf9K4V+NLsi`<~zD&n~)7M`n@OS%2k#fh<`PBw8QDJY%*$+;-;`CLV zmyW0N_v%ZTqrIfeLvS3D!zzp3C&uwn^tavWm0hR5~A0TguFSQOeXhozB0mB{}!IOU`L~&b4_t#6=yX#{cA{>H@ixihG)~+F){6I0>9ZsGA@EqRWjO2M)?hx ze&qd@_z*q3uUrq*`e38%;nlHWFF4+owyB*iiTDj+`fLhJKbR)=U8*JSpNn%WfQWl= zp7EZDIp3bu6eG_!;fqt{5SiZzLu9;oc)lhZFDhSX!mfzn7ZUj6j>OLU^n#u7IaQ?O z2OYqQ6>V+=iI7V@Dn`ICwd0=IgpBd~XcO%FP}#SBt+dY$nSw*li=~%h_*>8C?Yh*3 z^DApb$hU3un-xf6%xMw7JF=9Xg~04FIHt@1BQHg4|2CEnY$3k+b|pVkUXEP9wKYes zKym6y9B1J$XPjoHQ~)K#4d69x%n@&~!&-d=Nx9Txhn|@kr%Z{mQj`B@oleaR zAl6|#ZOb@Exg)e4X?o)#u->oY$agU@;V^X%R`v4q;EgV*6&mbrcEONMrM7%uq4KGj zStXFL053=6b!!1`r52-VaUu4+PbLl^a%yeHWdKet3dUxL?%(g`zuXq#SCiN|@!Zu& z{M-F%Th=@8y{nTLe>+2z`{8w7DnqRK;a%IyJJBq1{QOsn^y_a}KSAi`5>ahWNZz&U z-53vTEE@b&kChi=ergkZVoC91sPf|cPZjt_O$7V-bzZ%RnDlcrt09*Be4bxzC`R5$ zXC3lByMb3j`|`f~#fL>qT8wtERj%M`b;LpnONJc_(GEt}&wEnPgV`2cBlq|i*F>LN z(`=#5bln1VgTDRkD@2b#}tD+}DBUEVQ)x5WF z$FP#`)uvAIRthePMQ-)ryaRVma?9=-E@O2~R$9D&Zyc{&!-$PyNutI5)4Wb~;c%4` zX}{g(iPcQfC$HP@gBhP))f4{hkAE2NSJ@K|`>Q196)TG5hmUzo1(ER2P2Q}$@O$(I zPkKw_KKhnlFDJ9eTk!aI#*Zbd{N8_B-SPdjqE2~cTHdXv35+*Q%5%7)8Ba`fXRxgs zYt8t3@y15RYTE*7QlA|f^rdlwvDk~qxzDjLfr$?AP`(HP^GLykNF&0Ry{^9) zNdrp8LnGeKY8j_}*&=>4(io((3j9e#{yRFW%y@K!alppD=WW9B*VA} zDhjcgK6^bOZKlts2;8otL=jx$iA#gz!lDqg%q$97X8KH|P>#>YokrC_mf~zz6ltC5 z)3hk$Gt;M5QK-aBpOm5y)I=7AkcFctgzT9o1k3*10Yis-484k=SwKjh=}{DfnnOh) zWU;*{gzP^k3c<7$MIo4-TNLu0>GLLqa(u?_FscW!rWL9VN06$t>XD2G7-T3e-pz{y z42*Wm>8H*fQ)x&ZpbN+|+2}RyZr<19a*wDMnBvtHEu$F)50L8@(ghZeGoo zVqWCuti=4z=T9G(>r1hBYp5|Qnw93YHXE~}Sp*N?Y;25X*L@C^py-iZgT=DGy768N zE9J1^3Z-D9RhItg=f;5;_K*vUu{)M!@XwDMCE{2$dp6e2)D3biM&mg4wWcH2Yrx%MNFTI$b zS(Y6x!S_DQ52(mCSR%syETq%s0zCM7*e|nUsbq9)ZM09p)Cb1tDr^Sd^dP@$RhG{9 z%YWprNM*e^54>-5s^B`oZ2WHtF$_82LEfn9`Wlv@H9v(1?p-WsPqe zv(Aoa$f$>Ic;|)Fjy?1T&m?)yPR_RqQRy@a^yO52Z5);}gF#&S$XcJg&VE*Fvut4O+0pyk|q>dffT0Q^73v4%Ijg46ykY;nL@k0mJ%u?Z0p}5~Y#Awiw zEot%P7_`?e+mSq{(Qcx{@t`R)+vf++nc1P&3FS2Ukz(RMky00lK0|c2&$mkI$`~W6 z6AQQPpy2G#onwsWIC!r<(d}2@(atTiFEr`YGW*Xa9h+o7>6DpM z`3l$_T9OE_zy`z`{!YvR_xzJQbHx5WQ981BW7 z0v)HjT=fAj`6^8G{~^S=ID`w#gcE=bz^8zd092MSa*ic9|Mz~(YH2zSbKxD#ls^ME z1YQ6f4k(OJe2Oa$drkTIz&#?3rh{08&cDZ?jIsZH_|8n94ZH%72RIsI>>tE-4!RKU za=n@0a@{pC(cUn;SlBzxo9=GPS%D(~selXsTq1w@S6*S~EcttfvY&M4SUBMgz+Auv zz$bt`fNqKZ2}{5~2DkvY4!8?=1hB$E|0eIv3xZ6{f66&s6~L?wXbNZx=nn8sH~`_- z08;?70E+-?0Gk0j0fzx+0N(>{0saE;XqU?YhyauYR0liqkeFc>fv@CINmUYYn&=W8iFc$CzU@l+@U<2S2z#hOc05$aM05o)`>k$ZQsX>4kKm|Z; zKvO_l0JY`;fY$(10J8v#0BZo70XqSQ0cQZ;0)7Jg3iu1)0_bSSfq)1=BA^nW7T`HR zi$n}nS&7D)*IDhJua$GT*8N|=Y@{XlwXDnaHNXZs8SosSYq|W|6IcXuF6!)ZRcr){ z0ezlxxt;)w#;Bh(m+LFQpe8Ptr75ZcP_LQGbq+8*9d6HXxz+>Hnxm9}u`N)lOqc6J zK#P`eCt&jPE>~D9j46PfI812U8hb^+n{8aKScE&Zb5(TRZwD*0&?sJTxhi*bx%L6~ zXzz0U4Oq|tgAsUrJE5*S8ILBih~}fZq22)bFnm-OMK1;I1Q7q$@4< zC$as`hE5E=fErVZz|H$N?3Q!KQP@rYH?Y%_F(odp{J){_zhq2}DIqG;!6?OQz&U`g z)2K3q-F05cb-6YIwgQOWVPc})upjhsGkgws&?=W}G+-)V4q!209ia6Zv^PLMzzD!3 zz)V2H4XE*TkOe#h?FALR1FpY|3G`WCBz$Il{$VH9q0alu3td^b@6TFU=&B3ca#f*g zJaCWIg|5ZGdw{nC+t(DjE&=!bsL=HUc<|;zO!_!222KP147fM2-1|y(A5=;?!e=L-#HJgI<-jQy3tc|}ZvZY)O4H5* zrvQh3Q|M|9yz4452CjS!83Wh;0T}~-1AH3z-RsC0_#kiq9-X$sYCaYCbKoo|h);il z0^k>ah63Onz@Gxg-6(XO1D*l=5P0=3g{~-vrn!I{0@p4mboBs^x>@L&1pE^4GT^sv z6}mnLwqosm1$Yqf6W~5~kltU@&Hy(A{`794%h?-5=5K|rH-V@8Ug+8cyzq}g*HPf! z4+>ocz!RRr<#??8l?#>w@8%e7fnO` zz;#AJ0dVXXC;*;177BnDkB0)_xCuxP+;}3=1MirG^mrV6XEM?QM`CbF1MUFa8+a`6 zRNyVZtAL$nLF@%#fhVp3zXYs>Y1%KqalqxKLILnN;NHOdfTseNo(2WLLx2wgPY3=9 zxW*eUSBY>=Ry*ghR29q@s-FmeIEG6R!dIQswZAWnc$>TRstft$^Axk^Q7 z+FsyFz=7Eq3V|yE4*@o2K>@I3HWUDF20j7YWDe2;r{^GjBs>XR3D{>Y(gRll9s>L; z@EqWDJQw%@@X*ERE-{*R z2)HKj@^_&C_&o4v;Im86TYv{HMWY3Nei<4c@H*g!z`a(Wx5R4NC`=-CfnUZv&=vS3 z@Oa?B^+*r=A+U2hh`N|XE&;y;{1A9Ea9EtC*)~A|@B!eiz+vw}0q}L;#lX|whXKIH zK0vPlp7kMGKXCnzT&}2iP5WdEW-H(sTd_6)9`-T1EAXXHT&`unKjxwT?*%dXQ#3x{ z)7xAwEdl*GAKec4P2hCkZQC&o0uR}VDG>ND@Fw7lU0CP)xIR(Se%}k% z0|)M-Wg)uhe)M->%Tc%Te_y`pC#2RLST+2O@79*$D9kdyJm5S!rYM9Hw)=*ElwZ#jrNUO~l3D-B;*Z!BL7P zj({1wnV;42E-&S)YiPULrxtkGD4zp`1B{kAP*~F#iV&Z4*qEEc5)$rV+Qnp8l(;!1 zRi5dA1Mtg7j59f`EWh)m@hFGIlzkJ^@)d9SjOiABMx~()k0MROq!euTPvk3RQ zV7w2U&=52BMsFMV8ficrc%yL$dElaPYaYt>6mkQfk$c%Aw;ginmy9a&Vb6?9Mtj1O zzcI$nM?Sm0F%}U%^NsNt;l-DY3xs!EHvS^K?^~mEE^xvXqc(6tzbl2Vf1b(bfy{^e zp~0DrzB9&>{M_%1MY+hQ^;Kgh;m?0Cz6W-m#7ctR=oD385F-VY{zIfcgq6i{(&esT ze%Mov6Nn#y1xEyyQl5C!i6y}1k+~0<0lyZyI(Rn{l4&X1iQ!zpYzYhRVOirXV7V=0 zjZ?=Q3&j|f*RX~ZmqH~W?{o?D1;M~Cq;;a7r;8HC>sGv258U&D-J6#hHHxJ!6Q zoDsALcxk**oA8AOMt8#78yiyyf6~-g16+0k_P1TUYf~B2imH^19*y-_zJh_+c;OGU5Auj7NmK_BA5j1@6+%s89Ig{zi9T%fSII zqt{#(YRrEZgXY-*#^zNRLAO%i_5foiiQXMxTqf*0(0D|+{!SKgea=TfoAt{ji#?H^{h5k;4WVkCvd^s|Fb{OA$5(8P5?e_lnVT zDNAVD<`rz!;k%+nFwE27Dq(fI3h`L*6va20Zs}JxEwu~@t5N zMj2%ZcN}drC!9Un7(n>QXk!LpKE~KUIBkq^nDE3g#tp*r#~9X?z+1)`WeJ}gV>Bo1 zJJuMm5=AZ?Ys?}%dz`VE_?yNVCkgi+Z`>uke7xaU1>EU%qYB{#uN!R%zc9fVMmT$d zF_&DKuzKEz_#dB%|K1b-IpPOTrgnlc0`xj8 z(RX?GVasQp0qY6k8)F3?;@zbz{+BiGSM@|2g8j&cMN$cYJTR zey65gfxt@;_+O2vPY^#B@h?8(q0Sx;MTO(z57;v7^v-~9^BB+&@qMv{==4l{mWpo) zW)BD~hQP6B1P*x=OhSCqY#i}C6TeKx$APyD@dvVvptUT)a$}ausED?0WUWQxo-v#H zacN`7T8tc}=NR~04m$f>V-ewmdB$giZ_P6<5U!bP`~?*}a)A-C4&gZqjQWI+3Zwfv z@B;$JajOKMJAnbO!Oz@!GveQeyz&oy(0`>yg)v<;MGjudFbR5r5!1<1XQe8;zh1z+FEuYHvXN(hrQz z6khz1F<}F1?z0!`f1kV;LNN&ye8lSVK^^lGHnTztJ8i^&f|aFa^!bF9u~qIvb&JI| z1!GxnV;Z6P#%e-)jeUgf8$S?=Gvf1*BHc`pMZs7$)o4O!tI>zhHDg*HYa!Zl-B^{! zbmMd$iz^B}d?pn4sdrrFGocaBgcd&&+WSnX;F(asHgBDEp9%GTCNy&!tLt=s!Oi`} zHuo3W++Sq#e1UDS@{;=lYwi!Kxj&%h{$QH>`)Ka(p?SW4MlZzibAR7Ve$NcsZO#4t zvKB*_Xu?CC?k|=t!q-FS=l(|78Z+$v2ATVtWA1N^nco!C+@BD0e=^Mdi7@vk!Q7t! zbAR#6{e>^{i(cI|_b0sEpX_pfq09Y6F83F>++W;se_@Nhs71eSCU$>9%l*l$O-8+Z z)`x#z7R4+r?w2SL%C%`_-Jc*k*hMDRnizcsSb{|sFF_)uxz@F^Tg0ck66vbDH6Z#x z19$XGFRSRc9bVBJ+q6f!6N#rfz%(L#S?6|x8$p%mtu z9B=^EIO-XV4zqC9+~{(cHB4!Y9OHZ|1wFO@2ghPBkGxCR2O))zJp{$F+J~WtzV;D@|BtMU^AxNt zrP+ESg>sM{VZ9Dv`!W=O*}sym*@1sc*i%qQ-5wo61uGAZ-98AZBJ532lt{aSXw9!D z^o8l=0+Nu4qdoG|Q$p%OpXLaxi$Hl>AZoINV@Op5D%ff{snIwhkw~wos$8>>3cZqr ztgz5ouU<8@A+-4sovOFc2YXa!Iu?S~%Fy3v>MDaQnL&zXn+rS564jDo_D9k~Go*)x z;9qV(AB@S>qFG2*Z)73GVR3qz&mqd8B4wTCLj}Vm~E`y69MTw z+c>{MYN)bow(+L(c7kPlJ>WaEBi+%w4gwP#bR7_&S-yhDZF=}%(nfTOZL)sYqiu?} zHYaIwqAsMmsov_QDRquTsAbz+$93oqll{szuO#^h2Ld*`GdviH{AlN#W)pfRj|SnbLDV=c zHJm}-HjybcIO>xZL^}%9)hsWOx{?unNE^{9wuL(NF=fxfqyTA8bP}W%)}%CH(jKR6 zVLF9SqLFAGwo(ymNCVNSwnh3ekA_92J@+FawJ7T@*`rwoQm%gC7bp$UsWw9|^rSJ& zG_A;Nqh=g>BGSAZ3eq-ZeA&lrnm^PFc#x;X~zlw-q%ExO)TT8W`my1w^OXmgpPpsDG8~67S+Ik-5Uu zL`oDKo=1s@PO+`f3p}~5NK{Tu#PDxhQJpdhb4*F0K#NK+0Y2@F9$*V8{eTn@ooZX9 z*M?mx)75?fPFXFvWcM0>RW04&Kifv%x}?GJ9R9U!45k3=iJ>YF4Q~n!enh9(R_fzC z>QskUwULQk4)s=~7zW2gylt3kB~4+l|UW1?15BBHZwJM^cXL^~a- zTT7>Y?oUolaU7-k+U-yNNp%DnsV7;ua~u`|A9PIV8|4g0Lejc&@_SxVB*vCOp zpnU>lg6zkTZ?OFaw1wDzK~03(r=XTg+pj@q8G9N`39~mu+Hm`ekc_aOfMlfoNdRg! z${r85McelvL5yah;@DbRsMNNvP!O|dZ5+=diTwt0X7)Wu!0q*ra|!!I$ml^F_G&C> z98zgK=so0zb(YPCN+%aHw(brZTJ1FdY4&fVmIToCxn?0LTTct=x6Ol2GevI)4W;(` zuv)Xz*vssGU~u~^WMZ+`T67wVf_~uW_F0gz*;C;UyJjI3wxO1Zh_UL_@2#@mSmj(5 zuGpau~A3I@m8U8Y5=J8{zUZy)oMH_q^6a16lf1(bY+& zP|<^k?~-)P2e8DZF&XfC9*I-z_JEg=t6bpOOPLG2aj0Xv(@~mY0vuaH5%Q0q<#d?C z0+v0f%xeh5p_qLUw939|A$9g(OC&gcWspx-duYJd2q@L1P1W?*)b{WYiU@GDg&*t@ zvV(>>N+FFsQU>B2B?B=j*rS6lLN3Lz5stUV2GN|AitOl<09L&cjI>Zj_BhKJ#6;1b zotLzR(t14V6dX{}Ch6D@-~eU|pypz;Y&E}c95)5#vXTy)<^Dcu3MkGj;^6JLC15{s z(0$?-5z7y(RLKHo4RIXcWVtz;iQ^B>2sdXZaRR`Z@8%pPP9Qj2-JCPT2?FP|oAW(! zg2B13I8H6@7O_IW3OHce_!n_P!AW&?w7$@AQ< zR4d;hi_opmOleCu1!32GM}RKd8&$@ZiR#>vdu>VrH7_ulQv0&x-k*|yhD3}PsUcZ%FHK37 z1%2BRKw2%iQ=MA;PFRnp;l8Vp#Z)t&L9+hAV9Ta?GMa2DOBwOptOVLQAWbzIWO#1t z1e$jdZcK9o&&^Dx`HW4mlq8)zcaTyguw!rQB8`rB&yCD+BU!(OyR(IketRL1nNMABM> zjO&li!3JBRY1Bet@Cd_B6rqQ&`{48?bhG{7=u!er!-2Oj-tdmz$ z5B`Un1sbHKj5EdhD`|}*v*dM{bC|^vri$G)c@Kq4xWm1*q$smwmCaPiv#I$6TY_j1 zSC06Mayr9H!IuWV$bv(&J;gY~tEr-QEpJq~$YPzzbFnFAm$;1_&vW}}<#teMKHxz# z3BBK1!6Q#Ssy^T~m8#6-P;$s;+;l)zGHu83XH{mncXA>c1KaKncU5(}lVg}f z|CBAO8;oaf@jxm>L@Sl)d{4_-f)$*qhPQZ%ry7Qmp)t(u{k`NRPx;3HMOLJrkGh9TJmvfM}n938W3nvS?&{RDg$^>bz|Bk z7U~Sf^@B2M0I%ToL}3bK26DNcgZc_X25M{&5258R%9%_%O#CH`Kg~R-tK`pt*=R2J zh|~?r`O$EZ$Yl>3(L(uwzUe_fwrr3m%S7(1>~X|E8X1$^RoFVYB!!dRTC=orFOdHO zcre|reBE4WTd5GV5?2)@fY(+9>6-i=84}0?C=vxpracr3;c{a^HD>jdyR&jX8%w`o z(asmb-8z=Ds>-l}Ddk`5KU!nUSraNQjclsoS28(2T5@MPQ+{ir%&2LWF&8%)$+TBy z8(0K21{&Rx*TD$3nMG2QgxiviG*ziOx(5sAyf{egU~yyz9I4FR!(!EF(L1>Ywa{ZM zM%5_>#+2lArQ-{Qv`dt;RCA6+ks2Dkl4+OAF0lxeE-l$0H+;+7qmY*LlT?Fde9>(S zoe{7C7D0@SszC3lrGc@j0j$8I|| znRd9`5?hgKdmlbZLIPf?&-SkU;s9I z2`leuu`;h$+<9dt(?*pIcITCqOuJk*gq0$lG{R1y>Kp0~cTIU><}=+aqH`p&Nv4;p zYz&j@T(U4}eVU4|YKkS(9+*hJG2`$%XnIsAP&xmt4PJ7d%6)iV3Q%xbYSmR=#VPa}FD zE9zpgS5OMJJ@#c8emEueE-Ibvh@k@?s#7iH#kwk+!KN+0P&PfOV}2hsNT!+zsYAu2 z{1Bt0oCT&BmS-td>nSZ4O=UGmYy?&L?=iHDu;ijoC-twdqKBAL$*X82^kJdOL0zea zsn)IXkjtu*u~vCDSNV0+FY6Lah8fjma;H`_f!+mM)oYhpYJ|^>EkzFL8bB#9V#d-b z346($OtY$v9{#GvdX-!YRp=;5@7GW!y=Yn%ONV!Ch#&1rsjF#~Z_*r-8BFUIUugjR zKi`yQ%bvrNOJzW2S<`?j52-U|)}`A8o|_&^XQ!;CoEm5Zeu9)Uowp^=S#D2~$I=$C{5wgUr5uMU`ZTR=ovzu!dhFQ@XQ9 z`dd$aHDsrt^491g`>&t-TBeIfT9vYL#lbb;5b2t;Xfq|W8n~P=?{s!z{GdA>&#ju- zkh=yN0o8eOe&rvS)4YO;F^*qn!T)1764nUoVr2Gzbt7Rd7jPLm9Hr5Xgtd}|tdKVn)~cbugH|^Z))smkT7y!Z>7Y-u zY5qC*SKUZhvt$O(+(=k!NwNRUjfAz4g%k(GS<`&z199@W3^Wx)-AI@bbR%(tY@-_q z@aRi%fpOO7eYSuIq8kZoYa68sq8ka&)4p@tWabH{Z$xYhT3o9mPT!C9;hsbvn~CU%)A!@*nJ^*1`;gE#(LrYY zR}Kl$bN=m&(E0z@A>qHC5&E`tTBy_*GU1m{I#|)Iq1Vw|Wpxck8Rgc#lvakSj#;hU z!LnIanFkJGf56|Ys}JptFLZ;O@vEv32BA+N8!pGpu94(->gf@sXe-v%kD7W{q>wY< z6i`%U<({BWjna$T`f^6m22H8U(9c5gWV?F_cPrAXxLIoFa~qEfKQ7?xAVB$CiDN zh#6fC0&%ACF{7&^R6&J$OGCbvhO9CTX{z!erpzZq^Cd0XK(v<<+GUXDfEb9mhX%x= zHv}r%2SIW`G%z4uHY~T;ySV3Gev8R_`4hMP}dZ_<7 zxFO7^ArIJwP=LHFZ^VO?+>40wd5+uup+o_OG3_=!AaO1b}>vTtEd>tr{RwLf(c~%mKoCboIsPiqfg;Uf*X1SKmsO0wj`y zt8dlNrckB^SKk);2#@AW$5PN*>F@BbQ;n{^|1!Gz){=7nI=Uhcb=~XR$U=(C#QCQA z9H$)Ux)(H+Lk+HG1P!jW!IXn5cpE{7#rZm)_i=#=r_t57wT+U6)94ENYtWj!*VTQ) zN}|E2dtH63-Ub2bBz>IUI&=Z$Bz?R&1<_(ce?4FtJfZG&^$Cvq5X10Dce%PA-i@@$ zdtIkKS>NVSH^p0>(_7tCZ*|j@I(e_F&vpC--RfRfpI4Hc5U0r-P2De?n!LKv)D8V6 zT`YN6NR#7Qf?WYvb225Y$|AZ7c9kl(@H~NN<26<1Y zZw#gY?4i3sJv97HQb%-(zEa=eQMb~xN2*&{L#k88t!(B{_R!s+UOI+u-_$*!zFdFg zQLr2eXqa@+J)yq5E)_!E6Y9&`l1oq`x*OEP!mOBB)g-EK(HkJ3s((wOSM_^OqPk}i zr7Jr!btiH<0s%-%m1UL9&8kz&u_{vW@Ka{iAzjKXHhd>3U)v@C^15$au(EjeH~tWme%Wkbm_Ep){2QJSq>U^zKF zI_0~UlyDM@bI_npucyED-Yzo4qSxB?3f`#JzZN*Pg+QqrMfTq0~|k!2{34m{$2F_Yb(83ez$ z+sP1!^_fl&S?I_k{-G(cz%4O=GE4{~$6)ChpWj2J{FD|Y_{GW7?y_a5o8kN^;cGL# zC5lbI-55gSD+yMJw9)dZxqxC7{L8vk_J! zmc|HqP9phMow7~*o)Y^6k(b=7$22p0wk$@joqcLhJ%xxqXrUlVa%xRFpP05@^_XTSXJmFceRz)i;TCnyfZJq@yttyqeDSlq+iY-{Z)J=0pb?yagE$H?vSgEXW z>LH?Ti~Nc*;%L@&^>=jcS*pF0L`9&7i0BsjJJt825b7nO{!WVqP?xG+BI2EpgC<=0 z5K$L8eKsfK9}Ju1Wsyb0N($w!5{ zBjRgHLvIb@^u;<|XsS#XBU8Cxr2}t$vC37Gj|z4FFdyWn9u?~E>h%#&iQY9cqDO`L zyLDPnM)Fai{%$L(6?l#w66%3b%}IfLRH!e}hj|n%F%{6MtG>i3b1m8|&MQ@gS)fxkJv^GerlL;V^sV{>j|p27VGinF zE~oUZRjKEoi_$|vJt7v*M9dR6{bM}^0cH2cln4R&^7-TH)b)_Y+?CX%H11tV4^NtH zW{sPh5~@7UrldjCAWG!kl^paW+UZbTR66x@e{!m4S3>@wM}>DdSC0y@1)|EnDcdBy8}pWfX;1D1NOolIqW-NqRgP7TU{*OeSas?gR@u+xK4v2FbMIp$ZSG^JA|Xdz+p~}P z3_QnrT03DQLjg@bYr{TfKLVb8%uxhrAM-h|Rklg1PL0W`pOpVni*xT|rhyYd&;9fV zq10z0=((T%r=sb(pZ=Gk>A9c&H_=Wlg5LY-4^>17q|*OUG(GpzA1Rui`{|DrP0#)G zCyJ)$e)>~I({n$)P|?)Bb(f?g>A9bd_hMwxv%4(JQFveX|LdQhJhRK1?1%iLJlm`n z;34-mi>6P{HminbQn#gqlayzd)dd0CWjTQ5E{l#vqiF$Gw9BG6&n{~d0`6TFtqJky zoc@pn+boLlY_mQ^fEF*CfvtKitO~6fujAp}EbHOH_xs&7y#3o7Dqei*uN}EE=>uyDS<$J-e)zAx66_ddg915}gGd zFW-;#Wj@q(=qW&ga|Fd{+RF-Q@$&iG0OmveNnYfkry`|QKL0uMtvpLp+Ink=)yqIZDDzu9R3)T?XZo>a$2{pn-RZl=%H3Kh zYewCc-oR{<$>4u;)23}is`wRQP*9qM&}c79)ycH3u2ODFB)KI9p(IW!iG%soHVtt* zfGxA53#)=SSS5Es zo>qTSS7yU(NQnRZNS;`rpwCaN$EN?q?3;1X;g%hepSuHbv%j3dJ>;BTks(D zi0Wixic$v90ycRLsXXlG{Q4D@*xWOt5Jx>a4p(zK{TyX@xEV#k=@sOwrX&8e0;7g) zm233m4kWa}?=v`=evuxZmc($ce7eD-QNH)s(9B73w6Dh*8MGxICbL%fWtln#C{?hk ztw+a-DjutnNw_IRDHR<-S#{dlB)?C_Eb_ZKP-!p`6m9S*T2%2b8h_Bs%hs+$(hVq% z%13{%!wk9MQRSocd-8Hpnd>*()K%oMn;w<9X0>-ME1#U@K1Wf?HtJC+JE?e60%-;J zlPnwZ-{>i0Gb|mIpQd=)p1dNQ(wI`9_A1hCT?dHSECu~c{|2pt0^-SWzoh0%YEo=u z>;T!y@AOwWJoIGrr6;2j1JJRIYJNP#SysN79ne`d^UQ?Grt{s;A1i!CDqjtwfmIG? z$^D7Z%g<@*H@iQ49Ev`w3eu~AyRvFf(R*c46uDR`>mA}&h9wTo&&hw2RHy%^xc30B zs#y2NSJ``KXYC|=lI-+A%1%NOAR&b&E%X2utP~4P5EVp(JEMS2k zdX9Sa*p41OmUC=JY}gTdJ;?v}o0+u|_C5E1zw_MtJ>Pns?5ug`ZSzi9v)*}UR{HlR zD_vLlDqrBUJl1PN(im3)j`(qHjPf2@mw}qFRt^^v^>~I>C9OpwX{}5ng^YW=o{J}e zIX?Y4Ew{Tb_a$HMcrAB!Rgg-KAI&EbdsOu-rUzxxaH*QX<358DWGY(>YSgx9b}iF1Ps1PWPGBdrv6EtbWKr%o=@OJ6 zDOJ!*E0s`;3WjM$syP&l*UdpySh40iwY&+p7-njaQC!}-P48cbJKEMmzN>CQk8^9rQMfl^>+t*k@4F)2f9ty<;~XxwuE33a!^Azy;rp(b z!Rg;#>c&VGAe;nPuJm2)z+IkRY$aLV*=YD!Y`qk4BcC)+;I67{pBC0&FZ9_hP4C1m$)(ka-SUjV zpe(d|F+>!S`wLleCK6wG}TyZ{MXw zBHyLO1WKe`TKuG~@6x)&XW(jmv`cF|^)Wn`)>@z?e4o}MKGAwDRlBsLRNtlb3ul8yl&r?-b*! zFDy(=u!8TUnpDW-i@+>qw`s($iS*sd!=`>JSD-&a*^<5k{wRZVd)VN!bU%1~WT zmi5sn%j)~8sQ15KL1*vxSJ0VgHSFKnW=acBry$<<3b%*XBBA88Yvn$r>$JT&p_)mj zO|e*YXZinc`@FQvEAhXvDfYked9l<7ue#sEl6{OBpSLGA@$YPkh0}~f;(yu{+u<`K z|AT#I90LDqpBc`yd)dtWuXe@4YxWN?429XnLSZ)YP?*gm6y_Ki3J*e`49VUT3UeUH z{4Q|A1L+;XQ9xp8MGaw{C3dROUW;+`(P-{;lXn(-VaD;*Igo#aV;D>|Ib`^iMTBwzsPspeT0r5)ULaPIy1;~-7&{^-Hk?qbGM=R z@44>C+H>870QX&Y%aQP0cQn55x?=`ica!knbKUV?x$Y8(kl07k|JHR!EZ=p{{u99Pl)t|QHt6^C>b$-s2OlDuIn8*WJaf|Jta0)54pEG+Z z9uvDtN8NMgP<8{n9hNN7WR|D)#(b0?o6%x?%*i+LvL~tQ!%ECOmnbohs(%o($`|vn zS?h_BZn%fd0UYHh=6y}JOp}$$7rIByV270c==$b1NMT_9bd5jO7xR)YW}DgUS>$Z^ zjzKfRx5#dcA~>%~TIBkR74dUEk8HebD2v=;)_FXn|LqoYu+JlLFEv@FnCxAtsPEDC zG215iOqQA5z4AV&NCq(zgMt5#Rh<7H6~x?*IFY^4^d|w%0tG zC^=`b5*C0myefO(ab;c~b#ag0RmrKjxgn2Jb6S!8jIR*!R>J2>z5jHUq%{7l{y}dZ zai#R0t6T2uinDUr{^t&09y=KVJ5kQ~tyFiCSRib*s<%OK{dir|Y>d>Wydl8@)= zSchJ~%WV77=aVTL6xm4cYUWU8DK>mRG;V|)14bLnrTr&7wx0fzAy+~?uf9m|y0Fp@ zb5BHVyDR9bi{3^?_~kC{zq$s&hG#HHYvJB|+r@ z44O|t(EL9@k;5lO3WDYpIRlbX5Hx>^BzKuYKoSvg?hKDP_!75y!yv@SeJ#iRYd5Qr z2jm5-t;$XZ$su5pyRf2iB`+!ul8efNS*DhO~iS9ERT5OOx#Mv<-Lb5wW5XSPw2g*Igl3mv^$NpDyGfX!_zT_SF4 zt<@#75BZKrT?oF`niI;FuXfL_wMtSeN!yS<_-c1!t<`v93$dC#tRm^3?JdKcQGlY2 z%soUWA$TU!C7~f#Dv1Y_Q6P8&dWTZ8q>^f4H~7*n{oS73t@_M?lvt6@){b#)X;Gm& zx4Ttbxg9m8yV4wBuq*ioKk5P*)qYQU!d=(Hx*e^4Ku@crm7j(P2cHz*fM?_q4j1ceFp>)9SP=&QdyWUr0Gen7~rA z&y;gB>VTHKQH!Mi-HR(9cK&frm>B)5om&4^y!gKvE{?&z<2Wb2$&{f}A9R{i${3sW zz+QIzW0C*IQ$5l+n^JgXTtFw;`)_w=DSSuF(cyqRZN zXU5S+)}e%CqEjk}ku_1H^wNOrmw>nvz!=A>LL=u=2s0zGI|0JRD&3cJM-tj6bnP1V z_y()O+~h86z$mcVy}rTfI_U{!HptCiUb8Hrd|YN*p4^AsP|phEHf-ZB&3roWL@m#| zUaOjP$7!XC_7&Nrt71Qvg0d>FC!m%Uya4~~mG0O^>$3EpkrT+z9#7E4?e8^O{kVCw zpxLU-ct4K1&o$G}L!RjG9@=cxjOyP9up-l*2?L8TT5EMMZi)|)%Hn7g#Is=(5=Pc9 z_~G%PpO83<&jucW%K1=!R>Xaz*(yrR=#JNe;KQcq3qFc`mq#uM9x+po1cAsp6bQjb z%uJ?YSrIaO)J!EAUv}69qhuERgK2a6CN?uC_zzQD=yS$Vt4cA+c{ez_$M#158d*vu z`dEUYt(l9aO*evlE$1j%hPP_Kv#%wX3TI6KX0V^7RoYl4Q`t(T1La8dw^Elwm3$*g zrolrjn@6__f8SVlG*DGcJOY(6$B)KSj~mBEf>31f8OWeqV&)s!qms;tP@W*m@U>~dSSUNLS3HljaL$IC4H7-Wjo zJy`5jmUtB@rPLLkQgdm_tE^&XiL5mDZm>32w?Ey-8ZGy-Mf+KPK=Aiyk{qy(=x6;8 z1A;ppeVS4jIuw(j|ItQcY=yfDJiOJJn>jD_B8&UOAZnvAw!)pr`HH_6PBvGy(HMK- zsD-yYb35++<(b!f)~y)_aBt)dg`>#d3P%CeosT}nRyd;l%heeSaUFZ%$QVJwEx~&5 zlRik?vmpNR3^Um3Hvs4@&qM$#C`}m~oPis8^eI+kNF|Rx#eHwU{biVWNchVz_lF_h zTZdVK5nfpdd*PIo^j^3&*w0^wIS$X#j%AoXkev)I#xhI+##Y5`X?iDaiO$@XiB8;> zXCx#$Zyko=KK?ok%UbHM!&HK|A6iVOx$@DjtGJ(~lV_Y_8Rj#T!C!`9R8Yq<%q%kS zmSK3Bgk+EiukFlXZIe6|&I>J;9K3ZH6=WpOIK?u|Lu7X%WLG1!_%n}P_}U8Ag1-zy z8h;sv2^4641lCL|{DBPSCy?kBzAoGa(@a&O>$E;{ZQ{D|TqcK0T(8~K0L@>!Int+b zHH}`o*`R0`f{bwF6G`KRBVXjxte2W13QVuvNLBr{n>8fz)^48miLTdz^xDlP3i8%& zSd$%VH?NR^w|0|)QmWGJ>C9kH-%Sb0L9gBHgTmmT*KV>w>7&x$58H#8~=&d_3PeteNMUYKzWV5;D|GE{e!MSV1S52JAWwHxZ~ zuia1ufA=GY41ev0iB`k5dq7Z0QE%{0=Y6m64s7W41ntoMa8h?*?dVOK{EYM}CWbOm znz5DiI}*ofz4cPig=FU~1>NnlYu9DfOF^p99lR1mbN+V|>i;~SW_a)ao8wW{d>ZyY zXhMw*m@M_dOF>VuXq}gWI;{ldsQs5YYX4=08`V}`=562ei(TN3&W z2JgHi6v@~PoPTFUh>;}!!;c9-w~jrtlOew&n7a{#xW=5{|3Jt@!Bd1Xb1JT?> z^OuC0k>HZh7r@Wn4w?}FBt>&G&tDR{h(h?%g*~(KZNgg-VursWv<3-I7gymw&W**J zOehS_34cjwyv%U%Yp*JU5uG%?Po>-iKv%02fV4cGPTKWlW~QtAYin?yq3#2`kIMV> zjCyv+OhM;#Mwe=2#N_Lek->8&otzAE4P?xygnTDAgJ?k`o4`8Us@EKwOq@LXb3jx7 zQU_J!5z9_t#X3UGJEK)r}F z2g81vv!N2^b6h+RG7`=J{EIpt^?ZR6U)?;wY8#GJflwh2YuCxe&h% zP77o;I*E6oU6V7X)-al#3-H_9xgFVkoEliIuM-4WKj#|Y^mkT4{2@*%eg`<^fDCk= zfTDw(BG_QCvmf_EoKHa2;uJukq0V7|40Gne9>bjt_#NR41?@;@5mX%IJcVM6c6KMA zX{+-ie#baxK%=qFYGjOa-a}~)bru7Dm{Se-;Z8Gtk8mb}#dxPLevfp%grY||AE1;+ zJF6h_7^fKO9_v)&_c+G{WP+29--*sV;7@Wk0CTdF3yU7_{1wWb;1u^vU=OU5iE^Lh zqyRLB-Ix+|P8HaX-r$3h}2n4Y0&)XBgBy)%g-7 zJIy&9RHr*Ta6iZS3`);+e#Gw?&P({6=e&d8Go7Phr}@shGPJ)1&JGA(=p2c%E^=aE zdX`g$-?N=DP;0R>6~9ZI0bqBI^969ub^e6k^PB}x@qFhoFuK5b5awO#JP9QdP9H#) zIW~TmI|9EeoJ{b)(0K$@E1hM)xyZQ)kc*u?P&9Fg^DX{e>g411GUsuW?{a4wP**w2 zV7e=uHz4>*=Le8oXZsDCI`yP>8?Dc@m}H(*~aRIQQZA zUZ*dl+~ zkRSHTGy&_Y0uo|&Ogv|w{ddybf%|~-jW`S|Q5myQ7Ux^(nKCk3p|10tOqdx9VN&ON znXoc8G4X>;B;W%e3+G2W0uJeQ;2@lz#Z_eY3@q*ZqKDF@Fu3z;jB)}QpTaoKZ(WGR z6?-adlhpaAJ&9~yLcVZ*7k?)ku2VP%Oy^Ko-Ew|FDQzQ4Tqo7E`K4-M0~U57rr`Ifv-r~C zq?tKnU}T#(YPZg5Q8sgqa|8w~d3#j&CSVwwcRG zJp5Y3bz-J{ED67dMRz*6rdW@4IO*4N@;uKU*EO7cGy4`iSwz-tEPs)izB>R>S%0U^ zidCv#)=kuLIbK1D;}buc|y2} zr^9pJP__&9FvB9%-ZU4yaFsnxNGc$kJ;*DBIDp(dm;N#$y-QF8pj$Lj`P5QC(gddq zsrIcJnmre7@(8ppIhS$duWh9C2PFOlOk(1Dcg#+;Th3LSCB<@&A}A?>M#|}=I9INJ zKVX$JA0+21lITDf&=i66EdWPol0V`m?Oy1a#yi+xkd1j2xB9$>w5P>WxQ|bRVa%*R zCNom)y_#kG7AlwRfxpqCOO&=lzQAE>>m16%?)Hkd~3=j~U#wMD=?g0(Qkd&sfDdc_>4 z$u7XK2%=#uB+s0Pe^~~=aX~p&*lX@d#Jh8Vxb@>QUMMe#X(73l48l9t^Uke0>zYJ3R`@~xLX z0g~>6q{K)(mdsa_q$7S(5~le&Z$f>kYJ4ToOV#3~x)xsvNTqp_h^oa`6>ob@TOvM~ zZS-{yus%_n(5x?35{$86-0jpwMuz#fK#*%0D17y%pWNe*gidrM63#I}gPU@L1`pDi;1BRrphW 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 LB*&IbcGv$8Q)lDJ diff --git a/progs/other.onyx b/progs/other.onyx index 70b9a52e..cb576406 100644 --- a/progs/other.onyx +++ b/progs/other.onyx @@ -1,5 +1,3 @@ -use "progs/test" - other_value :: proc (n: i32) -> i32 { return 8675309 + something_else(n) + global_value; } diff --git a/progs/test.onyx b/progs/test.onyx index 1522bf3b..1e6a9277 100644 --- a/progs/test.onyx +++ b/progs/test.onyx @@ -40,7 +40,6 @@ main3 :: proc #export { local_brute(); } - // This is the entry point main2 :: proc #export { i := 0; diff --git a/src/onyxchecker.c b/src/onyxchecker.c index 64e6836d..120e5514 100644 --- a/src/onyxchecker.c +++ b/src/onyxchecker.c @@ -134,7 +134,11 @@ static b32 check_call(OnyxSemPassState* state, AstCall* call) { return 1; } - if (callee->base.kind != Ast_Kind_Function) { + if (callee->base.type == NULL) { + callee->base.type = type_build_from_ast(state->node_allocator, callee->base.type_node); + } + + if (callee->base.type->kind != Type_Kind_Function) { onyx_message_add(state->msgs, ONYX_MESSAGE_TYPE_CALL_NON_FUNCTION, call->base.token->pos, @@ -205,10 +209,7 @@ static b32 check_call(OnyxSemPassState* state, AstCall* call) { onyx_token_null_toggle(callee->base.token); } - if (callee->base.type == NULL) { - callee->base.type = type_build_from_ast(state->node_allocator, callee->base.type_node); - } - call->base.type = callee->base.type; + call->base.type = callee->base.type->Function.return_type; AstLocal* formal_param = callee->params; AstArgument* actual_param = call->arguments; @@ -372,6 +373,8 @@ static b32 check_expression(OnyxSemPassState* state, AstTyped* expr) { assert(expr->type != NULL); break; + case Ast_Kind_Function: break; + default: retval = 1; DEBUG_HERE; @@ -477,7 +480,6 @@ static b32 check_function(OnyxSemPassState* state, AstFunction* func) { } } - // NOTE: Acutally the return type if (func->base.type == NULL) { func->base.type = type_build_from_ast(state->node_allocator, func->base.type_node); } @@ -508,7 +510,7 @@ static b32 check_function(OnyxSemPassState* state, AstFunction* func) { } } - state->expected_return_type = func->base.type; + state->expected_return_type = func->base.type->Function.return_type; if (func->body) { return check_block(state, func->body); } diff --git a/src/onyxparser.c b/src/onyxparser.c index c99608b5..e0260c1a 100644 --- a/src/onyxparser.c +++ b/src/onyxparser.c @@ -781,15 +781,34 @@ static AstFunction* parse_function_definition(OnyxParser* parser) { AstLocal* params = parse_function_params(parser); func_def->params = params; + AstType* return_type = (AstType *) &basic_type_void; if (parser->curr_token->type == Token_Type_Right_Arrow) { expect(parser, Token_Type_Right_Arrow); - AstType* return_type = parse_type(parser); - func_def->base.type_node = return_type; - } else { - func_def->base.type_node = (AstType *) &basic_type_void; + return_type = parse_type(parser); + } + + u64 param_count = 0; + for (AstLocal* param = params; + param != NULL; + param = (AstLocal *) param->base.next) + param_count++; + + AstFunctionType* type_node = bh_alloc(parser->allocator, sizeof(AstFunctionType) + param_count * sizeof(AstType *)); + type_node->base.kind = Ast_Kind_Function_Type; + type_node->param_count = param_count; + type_node->return_type = return_type; + + u32 i = 0; + for (AstLocal* param = params; + param != NULL; + param = (AstLocal *) param->base.next) { + type_node->params[i] = param->base.type_node; + i++; } + func_def->base.type_node = (AstType *) type_node; + func_def->body = parse_block(parser); return func_def; diff --git a/src/onyxsymres.c b/src/onyxsymres.c index 02774125..7a9a5857 100644 --- a/src/onyxsymres.c +++ b/src/onyxsymres.c @@ -138,6 +138,19 @@ static AstType* symres_type(OnyxSemPassState* state, AstType* type) { return type; } + if (type->kind == Ast_Kind_Function_Type) { + AstFunctionType* ftype = (AstFunctionType *) type; + + ftype->return_type = symres_type(state, ftype->return_type); + + if (ftype->param_count > 0) + fori (i, 0, ftype->param_count - 1) { + ftype->params[i] = symres_type(state, ftype->params[i]); + } + + return type; + } + assert(("Bad type node", 0)); return NULL; } @@ -149,8 +162,17 @@ static void symres_local(OnyxSemPassState* state, AstLocal** local) { static void symres_call(OnyxSemPassState* state, AstCall* call) { AstNode* callee = symbol_resolve(state, call->callee->token); - if (callee) call->callee = callee; - else DEBUG_HERE; + if (callee) + call->callee = callee; + else { + onyx_token_null_toggle(call->callee->token); + onyx_message_add(state->msgs, + ONYX_MESSAGE_TYPE_UNKNOWN_SYMBOL, + call->callee->token->pos, + call->callee->token->text); + onyx_token_null_toggle(call->callee->token); + return; + } symres_statement_chain(state, (AstNode *) call->arguments, (AstNode **) &call->arguments); } @@ -185,6 +207,7 @@ static void symres_expression(OnyxSemPassState* state, AstTyped** expr) { // NOTE: This is a good case, since it means the symbol is already resolved case Ast_Kind_Local: break; + case Ast_Kind_Function: case Ast_Kind_Literal: (*expr)->type_node = symres_type(state, (*expr)->type_node); break; @@ -282,9 +305,7 @@ static void symres_function(OnyxSemPassState* state, AstFunction* func) { } if (func->base.type_node != NULL) { - if (func->base.type_node->kind == Ast_Kind_Symbol) { - func->base.type_node = symres_type(state, func->base.type_node); - } + func->base.type_node = symres_type(state, func->base.type_node); } symres_block(state, func->body); @@ -331,27 +352,6 @@ void onyx_resolve_symbols(OnyxSemPassState* state, ParserOutput* program) { symbol_basic_type_introduce(state, &basic_type_f64); symbol_basic_type_introduce(state, &basic_type_rawptr); - // NOTE: Introduce all global symbols - // bh_arr_each(AstGlobal *, global, program->globals) - // if (!symbol_unique_introduce(state, (AstNode *) *global)) return; - - // bh_arr_each(AstFunction *, function, program->functions) - // if (!symbol_unique_introduce(state, (AstNode *) *function)) return; - - // bh_arr_each(AstForeign *, foreign, program->foreigns) { - // AstKind import_kind = (*foreign)->import->kind; - - // if (import_kind == Ast_Kind_Function || import_kind == Ast_Kind_Global) - // if (!symbol_unique_introduce(state, (*foreign)->import)) return; - // } - - // // NOTE: Then, resolve all symbols in all functions - // bh_arr_each(AstForeign *, foreign, program->foreigns) { - // if ((*foreign)->import->kind == Ast_Kind_Function) { - // symres_function(state, (AstFunction *) (*foreign)->import); - // } - // } - bh_arr_each(AstBinding *, binding, program->top_level_bindings) if (!symbol_unique_introduce(state, (*binding)->base.token, (*binding)->node)) return; diff --git a/src/onyxtypes.c b/src/onyxtypes.c index 908ae1cc..10746fdf 100644 --- a/src/onyxtypes.c +++ b/src/onyxtypes.c @@ -4,23 +4,23 @@ // NOTE: These have to be in the same order as Basic Type basic_types[] = { - { Type_Kind_Basic, { Basic_Kind_Void, 0, 0, "void" } }, + { Type_Kind_Basic, 0, { Basic_Kind_Void, 0, 0, "void" } }, - { Type_Kind_Basic, { Basic_Kind_Bool, Basic_Flag_Boolean, 1, "bool" } }, + { Type_Kind_Basic, 0, { Basic_Kind_Bool, Basic_Flag_Boolean, 1, "bool" } }, - { Type_Kind_Basic, { Basic_Kind_I8, Basic_Flag_Integer, 1, "i8" } }, - { Type_Kind_Basic, { Basic_Kind_U8, Basic_Flag_Integer | Basic_Flag_Unsigned, 1, "u8" } }, - { Type_Kind_Basic, { Basic_Kind_I16, Basic_Flag_Integer, 2, "i16" } }, - { Type_Kind_Basic, { Basic_Kind_U16, Basic_Flag_Integer | Basic_Flag_Unsigned, 2, "u16" } }, - { Type_Kind_Basic, { Basic_Kind_I32, Basic_Flag_Integer, 4, "i32" } }, - { Type_Kind_Basic, { Basic_Kind_U32, Basic_Flag_Integer | Basic_Flag_Unsigned, 4, "u32" } }, - { Type_Kind_Basic, { Basic_Kind_I64, Basic_Flag_Integer, 8, "i64" } }, - { Type_Kind_Basic, { Basic_Kind_U64, Basic_Flag_Integer | Basic_Flag_Unsigned, 8, "u64" } }, + { Type_Kind_Basic, 0, { Basic_Kind_I8, Basic_Flag_Integer, 1, "i8" } }, + { Type_Kind_Basic, 0, { Basic_Kind_U8, Basic_Flag_Integer | Basic_Flag_Unsigned, 1, "u8" } }, + { Type_Kind_Basic, 0, { Basic_Kind_I16, Basic_Flag_Integer, 2, "i16" } }, + { Type_Kind_Basic, 0, { Basic_Kind_U16, Basic_Flag_Integer | Basic_Flag_Unsigned, 2, "u16" } }, + { Type_Kind_Basic, 0, { Basic_Kind_I32, Basic_Flag_Integer, 4, "i32" } }, + { Type_Kind_Basic, 0, { Basic_Kind_U32, Basic_Flag_Integer | Basic_Flag_Unsigned, 4, "u32" } }, + { Type_Kind_Basic, 0, { Basic_Kind_I64, Basic_Flag_Integer, 8, "i64" } }, + { Type_Kind_Basic, 0, { Basic_Kind_U64, Basic_Flag_Integer | Basic_Flag_Unsigned, 8, "u64" } }, - { Type_Kind_Basic, { Basic_Kind_F32, Basic_Flag_Float, 4, "f32" } }, - { Type_Kind_Basic, { Basic_Kind_F64, Basic_Flag_Float, 8, "f64" } }, + { Type_Kind_Basic, 0, { Basic_Kind_F32, Basic_Flag_Float, 4, "f32" } }, + { Type_Kind_Basic, 0, { Basic_Kind_F64, Basic_Flag_Float, 8, "f64" } }, - { Type_Kind_Basic, { Basic_Kind_Rawptr, Basic_Flag_Pointer, 4, "rawptr" } }, + { Type_Kind_Basic, 0, { Basic_Kind_Rawptr, Basic_Flag_Pointer, 4, "rawptr" } }, }; b32 types_are_compatible(Type* t1, Type* t2) { @@ -66,6 +66,24 @@ Type* type_build_from_ast(bh_allocator alloc, AstType* type_node) { return (Type *) ptr_type; } + case Ast_Kind_Function_Type: { + AstFunctionType* ftype_node = (AstFunctionType *) type_node; + u64 param_count = ftype_node->param_count; + + Type* func_type = bh_alloc(alloc, sizeof(Type) + sizeof(Type *) * param_count); + + func_type->kind = Type_Kind_Function; + func_type->Function.param_count = param_count; + func_type->Function.return_type = type_build_from_ast(alloc, ftype_node->return_type); + + if (param_count > 0) + fori (i, 0, param_count - 1) { + func_type->Function.params[i] = type_build_from_ast(alloc, ftype_node->params[i]); + } + + return func_type; + } + case Ast_Kind_Basic_Type: return ((AstBasicType *) type_node)->type; diff --git a/src/onyxwasm.c b/src/onyxwasm.c index cf80a271..8733c75b 100644 --- a/src/onyxwasm.c +++ b/src/onyxwasm.c @@ -756,18 +756,18 @@ static i32 generate_type_idx(OnyxWasmModule* mod, AstFunction* fd) { static char type_repr_buf[128]; char* t = type_repr_buf; - AstLocal* param = fd->params; - i32 param_count = 0; - while (param) { + Type** param_type = fd->base.type->Function.params; + i32 param_count = fd->base.type->Function.param_count; + i32 params_left = param_count; + while (params_left-- > 0) { // HACK: Using these directly as part of a string feels weird but they are // valid characters so I don't think it is going to be much of an issue - *(t++) = (char) onyx_type_to_wasm_type(param->base.type); - param_count++; - param = (AstLocal *) param->base.next; + *(t++) = (char) onyx_type_to_wasm_type(*param_type); + param_type++; } *(t++) = ':'; - WasmType return_type = onyx_type_to_wasm_type(fd->base.type); + WasmType return_type = onyx_type_to_wasm_type(fd->base.type->Function.return_type); *(t++) = (char) return_type; *t = '\0'; -- 2.25.1