From 9b87a0d9c0f126827848ec4a1efa39bba712d8a2 Mon Sep 17 00:00:00 2001 From: Adnan Ioricce Date: Fri, 18 Oct 2024 13:24:47 -0300 Subject: [PATCH] [Chapter18&TypesOfValues] - Following up chapter 18 - A bug was found when trying to run the following expression: - ```lox !(5 - 4 > 3 * 2 == !nil) ``` --- clox/chunk.h | 7 ++++++ clox/clox | Bin 64928 -> 72568 bytes clox/compiler.c | 20 ++++++++++++---- clox/compiler.o | Bin 26192 -> 28200 bytes clox/debug.c | 14 ++++++++++++ clox/debug.o | Bin 12656 -> 16216 bytes clox/value.c | 19 +++++++++++++++- clox/value.h | 28 ++++++++++++++++++++++- clox/value.o | Bin 6528 -> 7832 bytes clox/vm.c | 59 ++++++++++++++++++++++++++++++++++++++++-------- clox/vm.o | Bin 13080 -> 22016 bytes 11 files changed, 131 insertions(+), 16 deletions(-) diff --git a/clox/chunk.h b/clox/chunk.h index 2b3798f..34d73c4 100644 --- a/clox/chunk.h +++ b/clox/chunk.h @@ -6,12 +6,19 @@ typedef enum { OP_CONSTANT, + OP_NIL, + OP_TRUE, + OP_FALSE, + OP_EQUAL, + OP_GREATER, + OP_LESS, OP_RETURN, OP_NEGATE, OP_ADD, OP_SUBTRACT, OP_MULTIPLY, OP_DIVIDE, + OP_NOT, } OpCode; typedef struct { diff --git a/clox/clox b/clox/clox index e1e7feba9c87916e0b80837252a74a14650d7279..109e9f23d1713855649f84ede5ae975dac9b5301 100755 GIT binary patch literal 72568 zcmeFa3wTw<)jzy1XP>jrIXRcy6Oxbfq(}Lh!B*EDAxeW&0GMlpaCVu zSZuwvXi=%vzO}Vg5xho0QQIoo)>20wPvj~Yi8E0nLT@-WXqJ=sfMm=>N2!bG-5~7qJreyHLWr&!4uUgwSX4YO0;6l z4K5dw;)_a1{tUWqm47mSf*&6Q$e?DJS!zqEORr$(H5P zE_N4-!cs0Q`Qy3l&#=r@f3i=QHpu?mU`BxvcXH>R7^mKH_e;6^CBMoe(7`Jr?uovi z^G?(9|0ng$l5%TCI||o~jtW5K`MN__xf<&;At$@cVfZiZYM5us`o3u#gdl;=KUsh3m@u~}!ZWwd^+KX0|Z(cU~g5?z>My^~^dC^59HjG+z!LXHU zRxe#PY(&|}al=NB7!G9kn&rdRtX|i=dD!O4F~i1;Dr;O{Ho`HO?V&5t7f+ixS2MP1 z9i*vxbxjwz7c^dm#8o+Y**4;o=S9+Z^{Oq@r(I5Q=`hDL(XP=%-&kw(W{wxF{ zDC>P)4Z_LvJogRs72iM~{0;O=zJWgL8|YQvK!55R=xe`$z8mzDjiXk-az#_4*05sJ z>UGPt#-`<~*J&G?K{@Zd#-=69E;w)5steAmU$S})2pbw!uWPC&MXPUEu|iw1d36(+ zm#tdT0MUk~^~<&T^&3{K1MkNAB<_Y4OV+GezYOGLDlil*7y8yJ28I~c+|YF1+9j|B z7OiM#(CV93tXZS2U9ooA+6`L$vNh`)S7`ODTC3mGu(}CI=oSC6@{e)+P73zv)?asJrK zv18Y+9JX@VvSAe?%SM!yBlsc)uU?9dUAcDsI@xdMVW<(S48$gv$O&6<2$5F8CL$Tj z$f;tR4$c=Lui{ts>eUEoZtaMqWeD8T-jeu(*WZNY%B8(0@uu9>2(hO2cZoOmA&we2 zL2(^DBPw#PaVkEO(3wO}UjL3K(HU3Obs~w**rKjVNoQP*_uS>x}&ZgN%Vjs zBHx)rS8ET8Z%Lx7F(!R?5=C4j*Isv(YcnYYhMzbYl^x$lIUC$)%9Ewo$Io? z4kyvo+Rd^fN%VhZ{Z@Mao&UQB{@nxr|LcK|LVZ7rwY+D?+N?KEMcCio(PVTVjOT2>g8FTnf7G7x+@*Tmrgw1Ft@-qN93lb=}-p>nC$sKkqyTEou2& z4{h5Ij+W1j(Do4ewzh4p9cv$bR$qXvf9<>)cEnl_V6Z~l-Uil>Z(gv?(%XTi2u>t9qT8Vn1Y@+vwypTU4Etms%&eNOeF>T?f( z(g>Bu-g$B=6nFj^3ZASc^ant-tzEJ9%zFx;tj%h|ImZ(;Kh{UGe_3)|bzXwZ0W=dHeXR zx+xVM70<^G9om`-ch3AzJV|_9UluCd1{qBw|A7R$bKlW9Q7tx+_onoHJ!YIA5RGWD?Sie>+#rAADkL{>Vz57pN+lzRa0tQgGXxUEzkP5PMi`&Ma}7O zig!9M#&|qyjRZwsbl_|Ck^k5=2^*^GYTHYO>Sa?}zVd9j;1Pz8eY~|!rfRT!5NrLQbBm~L zj;JlxKI%T8X!vA1_S9QO=TZj=$CjC~wmEjqj-f_uS$eE(a=50ocxQ{LGib8a)r;U@ zuT*?m(S4wPXS-`mY}w&sH!J&uQSDoDI!!dXZF2s?mQJ0Fs$3Yn{gtM|SnI2u>pvGA z-c(H0Ql%WP&c@HWyD@}`f+slTz^*9!qTZ2i^`lT4*Ikl~S z>MQ{Jl0$s zeVM-Xvq0$TLxM3-47ZCdb6p?PpX)xV{HkqA7z%eE+lwaFP~XJ)(AW9)Kf1eXT8|1Z z;k*HTF6qAn{n)#S7R*@oHiE^Yc$ASQpyrfPSoI)C(^`Moxeyjjd+Kdht+^sn-BwjR zt*xophGj-)1^gIlZvqO9 z{%8++7wOlMepe6rA4qQ^ov|^lfAm7o)wpKT-2Ny=&;Buq{w2lggxEHAlLr6&kn^g2 z^b1LBuY#@3+}?3{R>h}soDna!B7n3$JI>tl;lcxP|2}jY=befJ2de9)wSJ5^_uDzK zWv98sV`QQ6tjtv8+C(rq-AZtreh5Z(4^ ztljzx9<}N~{5$yTW1)4=I@I>jhrzLr)3ECqlu3Udy;sRW<~~J7 zhp<(M!s9+`&J;qd+Rv)7plny&p$%(`cT>Cw9&4>FuB>gXDUQ|xif!v?8XFo^Q#>m)sJ3`?$V}lyK)OpNLSRIg3g0r@#&!(CVT>NNx!jUhUYB zN!Xsw4!6}_`2}LZIy??zr|44;h6R}o7NtPCIOzLkFx?}CrkH=bfI0jBS zj#ixLDWFxKU453=|H;*AUXMPGRdm#1=N7@vtrp{HcRr4ZCiZD>bl!;$-ceJWw+)-X zUt%$d_a3^twte(V=q79h7UNJM);{bUX02GbYKjNewqJl2OtzJOjzF1=12eF>^r5?I zC;SI(ZXCBWu^*V$awy#S{>Rv|wrx2+t!>kZ&ckBnd>~~zUq)H&ghwgZ@SHQMfBcAJ zJR#QBXb;(Bcdkd25hKbO+d9YIT8YJj`sT)mY& zWbav(ocvfNmyxMsjcz^IWcHX6M)KQ$C z@U~cdPKLHGMHSev%xgX3Y?G?btv>HSkG{@{w`+BVp&zY|Uk7tHUx z8S}vDu*Z*M;k>jsUwC-ux2WoTs$w5LiZ0MPk6~7I{hXuKKJnI6(TW`O_oHwhJTW`; z?>Tf0^keUK?uX8JysMszka?phcOEiDWR=0ju5By%XgKy!hn|Tpk7{jaWK6>js`}X} z6?*3!3}u_ya$-Q!IV~qjn}@R`CZ62R7utlL&SBsJe|gg87t0pbp|;b*LZUshT(H+7 zkUJuu!MtNXQ~QBwZ7Ic%@R2}0$NdB0qw`tvv@@P!J!^Td60wa2_K1xG=@;*C|NT*D zy&nN>U?}x;E=q`DXSw(!x87A8N)<6L+%lmQ9O34it(R0_t!T8HU*!|cAJKouektNM zBV*iGn?3N;N-iF2{))~_Y)7%5#`AjX7jx%yE@jkl?1~+FCNc~CH#sNP?uy3R>Yl+< z;ww#)D>}MgX){Ty8MpkIa6|w4op8cI5EQH#Q83i~)=pw+d_!zp5*53a!cJ0|G{b`}R&8$v36q?PG`4`tv;PLIXkUoB`ADsE}y?+$Xt@pcB~AsJ07o zIyb`HmM`5+6)j)-n^M>UjFqGBPzNnV?N9Jb2d4^7Y1g0Nsp9!FUhZsARQUl_{xo~A zZBkCliGrr;mJ|J(@>@>iHlH1nif0dff`?g9+_e)TNo3AQk}m=|KL3)+Ih|QPKe@c; zc0l?&nkptFHXp*TrsTwM+C$fBcRk&J8gp~p3hP9t>nK| z@gM5gN~5s89I6kk={OV(bKF9yn&V%Lr-4JzCZg$=(lMW=Oss8zUDLKS9NKHPbb6~w zH>HR6cHnvViXP9yt$nsm&_df@XK%D$f^E>nSS`%<*pplTF)nnqh03PwLx7l!WX4)g zObgxhTtiORZ)pSLD)GjC*n~oI5+uvpXHs(GpIbgCk8b_SyYX!q7X}^K&*QOat9+Eiy zxxZA{RB%2VaUV9K8pAR4x5o}|{fBqcV%j0$Y!Rp7`%a&E9P-BZtI9&#ZsP{HZIX>v z3nf=iLwIOTyW-RpP0bCVZJ(i7bjQw`*3Pb#!p3c=4BLawqN;O3S2wdM?SXgU^t zEmrd{ued~CwR+8peI?)z)jW6XQIO5%hw4FJ(y*^sQhxxde);!laMh~Nw)0VCRYUW) zKy@{@g4bwXv9G_w+qDtZQFmzj8bHv~ykSMdz9LyVFJ3y+DdqPC`wC_0c&8Mb+j2l# zFVP$J;aHf4brm{AW@vjRAlkQj&AtLz$dN&vkUN3sS@Aq1>q9p@)n5C2de^(4(EQMK zuX7<_6V`{e{T&glsyVdnF!Lp$?L5zRtlkR<-fKL9Msj++gjm{nVJGJ82|f4umN(rk zPo;NV52l^qcZIfJ1+e~#Q`ad7{AfW6eSB zi$IIDPd4^r(*YNqWbY$?*VG=Ym@Qx(p;-B9Ai^h;tBg=Y+nxPBFK?t z<6pY+rR;vzO9g|Dblrj~95*XODQDX1#(n)z&MA=s($+1mb^9YEZ2voWyG}R)@S+a@ zaV8k+gp>VBIN9&x#V-LuVZ%P0ObTsJfZ)6%5E~LKKnGCr@9W<^@b4b@cMtr3u?P6g z+bI#PVW~EGee;^-k#*~vBK%Y_QjZ-^q+dy6zcOD^5kE}qQ8c%4$;uVuBlz-gb7bL$ zB~7aq`LvSqQOhG*BoetaqLmOlW7c_-&zL!n>Qge$zTMblLjlDpwwg3mx3PF4tAk@fXGO4wp_05n12iscc0q`Cx9 zLm8;Z)~;T+gmiqjx_aHpGL0MPb(%I4ez9WR`sS6ZBKX>LeZxhOru7lw4bn%X^Vh9k zA6dI(-9?dQ>(}9P)pbpc?6mdhzh$eM*IiIXwxMr#cVCKh1JaL?4kEpd^f6M(JKf#I zNL5I6NNbS3_)~Xx2FkwwUU&C(NS7h4N2==rFY@0W!$~C4ETp}E>F!>QWCG4d{w{b< zGB39(S{ToSHqr*1PcRWz@c%UbpXeG0JF;*RUx)l-904*vhwA{~WpKh9`(pv}G0nV>I1dKo-VBRzn$2kAzntB`v0|1*3O_-m1h zkUoW7|BUzl#Iby1ReFa?F{Jk!K*c@l3Q0 zc_s2a$m@`EKJlxp<;X8(Ip*1qS&qB|`Gd%RgZype{5~V&UD$!V33I9z4V^MjK`Q!?{{}ck?%pi6?rjE5pO{LG4l6F$GK`To^K8!uSCxMJTLv? z*_ysNtmmb8?44*gAI$JsfmVrr;!%NCR1_(GcV_BJm8=RgSV-SO$IV#*|>rwPsB)auw@r zu}%w?8*5M_EQh&Hji>vC-dT{n0kU}aEcMP3dfAt2P<9K-*k4*rFnpFTXwUSYj{9l; zp&(t0^5;+bS~4ueF$`1&`~dTX*WL=76J^I&J{};WxXx`Bcb@w0l5%9W<)o zMcQMa9RaOKP#hZ1Og;v!pQP0ye;c$g=I7ZiAQ-K08Ss6C+?Ery5H2tS+QpNi4rn4AF5wcy!K9-(`3LN{!elW-cxqzY*u`tCjOuO+{* z8@9C2Zx+SPp6Z83QxJn0^Pi|57g8Qq9nz(s?EvjpBqaAm#E=$1(RBa9 zxYE=8HF0>-$tz>O{RVn9>_6`9srR&C#Grxb5$LV)Z;0!{*wCL+5Y#q9E{}4!IMxx+ zwt;5wOh}CNwD?%paI6u3%yKw!k6-|W|Gxfd4|JqQMfpydt9kvRl;Y_rFMfr~E5*q$ zk)s0Q;UKS3L!u(bH(Sm%BPwz=hK%XFc#_1+mgS6}yi_?|hSy;;D)LXh>RwM^hs(j? z2I9)`I5^#b*FCbFr+~bEEA3Sdz!=Jlr{l>Nrk}VXXGBGg5GAe?QeLggJZ$78))VBN z-YC)d?>l!$T(x7dDAhEt%vJq7s^+EmaG)mIC#%zNge&lYQeStka=iZ$UrZn&d|PvrN)upkP#IOVxQfURbUQ(VMy`s%yjr`PQpu) z!~Z>OjU4?)CI1e!SoM-~_%FfIE$zvP3XTPOFGh(v{0oZ||KVJR-_tv|^x(f{q~bq{ z_glOMsl{1fiJPN;Vy)s2mqbNjzi-grhMu%ET^Qg0Gq8$H2qV;)LN0L&tpRMlnmq=Y zWqVelLoAnP4YFc8%RTh=Yd{I!T|1Xk60CU02K2Re&2?8!Rp8>r}z?CL{-!xIcQS&|UL4{9Oq{@tG3 zyO0eW?!qt(31(e{B2N)-BxiF(XiXmd0K{CtS>J_1&lEzl2+<7$<7&m2u6b?;cbJ5H zo&nu>86XcwG)yS}0GfF-A-Kp3fZ<_FiG^Jw1kuH>SqFJs6QRWp1z!Y~a|ige987IZ z&mrB=LVpFxPB-sEv7aAecq>xqDxU+_ujGxGz79}|=08e?i$m;_5`g+tmJv(3QAkU@ z7`KKH`B^;spEIXHWL;j z_fw;gWE!CP2jJ!%CA3W-RrDW65&icd)O*hla{eu5*|z~WT_?DluIm8P@*r8s$78&c z^R-b+@Ovsx@D zGkIE=q7Atf1bwW-!@pPXeIfzAhlY2k>j8^iO~&9R|;t%F|x-K!+R8FpR<&_HA)knaOv2L|r(K{73h8``UYEP=w+vsPd&aQz-U z{0^H#?s^f(K>$w^c^b&C0lZ9PFOYWtyouy{2gv6D{()p?$qG2P41KP#5%)Uda@^0< zD-3kOH7gTm!6KH0V6=_@K*1%AEs5OQ+avN~{8uBI`B9+7E1W zWx;BHM{>Oe3e3<)$V%^(bVC6g7hXA5D*Kz2j)zR8(xkcf%c14u83P`+?J_F$nx68g z5Z2tkkxZO;^CVNFsJWc&AECKlmmHk2{IMg|pfB8imUPbT9ZB?$C7q#Qx1?VV{(-Uu zj3fIJ{I=>BdOmgA(_xysTyk^%yeqjkf<9i-IpM!bqOX>8YRQ663QbcrTa8g%do{F+ z@pwo|7^IwHZG({L#o6dV9)!9$bms$Dg=GI$a<2suy1iypb|D7|UUH^B8E4No$hLFZ zW}GfXIK?v-N#sAd7b~?m!L3MV z@X&@u$&x7|mrm7=OlE%}^9ne!ybO=Q0QmC7q8ZErSmWXj!f+0Gh-V^jyd~X+HNLzoxQNCG({q(){soMb&J&Xe%U~O0Ljm?i?O^V=feOik{Z;~WBo9_9$!8tOKVaI_v7AxKTMTzF z>LSigBJ*{W&0rb*+>xJ=M|p>DMwP?YF9y;nNENQz4WHJ}f)a+$5jJdP(yj%C+wo69 z4IT%jfPWSk}mLdz=DB~_1I+rqY_G0cTaJq8RF9M7EeLRL(?r<4kU)Zvb zAvbGKZh1X1z?wOSh)*Cc^Eo1ZAGvJJ^HXH*7Lrm-u|f`Xr%Z*JLdG4C3aHH;lnQ=M zBqX?O^N&Qr_URA_o97Zq4IYQi9A~F0MBI0ho@Raly7xN3p$oz85;xYbc_`uCf|Br6 zszghD9JnX!xfW%2lS;rfTHQ47ODGTSjq|590@sTyHhDv46nA*AxP!baAAM&%43454 zg8xAJh@=@L71IjFmNX>)Wm1@LYsI|CG4v(YUFHu`(Ze3D{3)v-m3~+{!!7Yj_**Vf zNxGCok zLsY@=vk``tCDB21ZPZ2-LoVfZ=m_kT*70eAm%eK{bP4MM+3bS7Kz~B@cS%mF=Vai5 zP_Ef~lgRlA@{^Lh5!`$q<@Asicuvw;3uxwDIv&t6?_qP?ZZ&VXq2s0R5{9^iA$)7} zB2r+7RKd}P3JWUwQ(`j>!vvTFWtNzakHdb>$KD4C_d$)Ah|8jp>6O7&MFMX*=Q1C&M3) zM^YIQEN=(yu0LU8s<~2e*Il!5H#A=inH4baL_wZyrJC;nNZSfxnooe=0+^oi5vZE2 z8(y@`b^>}ZY=!dCW!`<%5Ds*ZC4WhyW@T8vB)8@hfj84+w}89fJaUV`+uyUC++GoQ ziv{BHiojdqBbTkEP_<74-coZQV9^Y>=XrpxU!$`%S2gO@T|6@~T)DWLt~Wq;x$0?; ziyuO`T|BY!xcHanY}b!*_qulD?sI*FQorkY+*4dTKnZBUf$p4i^sBJRohuEbweCLB zKoQvUQpja{MPSdjbAW`sBCr<(7s0q3E#)Rym%;}6L}2f0(&&OtRAvovPk?~vH?8jg zuy{rZ&a+9SNQi@(t`!c3QF^XLl5!-j%e?em>#=|b7_4*q6TAY@MMwc2>g1MD=5C-2 za~bbJPk%oxdIu=CtKqxhvY$v-*4t3h$NUO{`oo~Fg^?E^nPyfLC73xVL97vbIcjQU+E|z*>-S^O--AW^uj?&;vSgqd+ z`nRB=9m)L^5d9(C?gX|QDMHSoUxD&tU_U|<&FoN$?m%(a{7{**7Yq*~na`ZmoC_1p z^qMQ;2%i=)hHUd2O0fb!6IYsfDy?N-(z_0^l4Fwjmms1qz2+tH=Jr$agT&xkO=!Ue zrCR|?_xRw8(CxmCjlUANBT)V-l7|*4W>W!5D$5ks90Ow)t+}+fHHYKYXrlfds(uA1 zO{WBBLP4Vb&w!mk67?%)Qvpg!)*pZ)`jN~Vde{GUulkRx`W2uw4Gg~6qyBuT>w_ff zSInjYl$5N0I2ebq{x5phe_5~k?d+%+N?id;)8ODtC`h#b6kt_IqJG6}DnLoe`p*R8 z8AxV^R3G<-ZN2J`sQMM4Gz|^D2nC7y7Xv#NNz|{HO$8_^S$`uKFGMnj_OAchUiDY1 z`W2uwl?7)a{3q(a66&~8i24%S3<-(meVz3acRSN*e8{R&W;%7Z+9O4Ppx z>h4taD`ryxN=nxMFc=?V{pa+q|Mp(>uTu3ZKxrBgoQXX|qW)*0?x3n)F`EidQnLQv zgYkE)zo~cq_x7rPtEyiCN>eoWVvqVeq3&H(zhX8OprmB|pM&uqtpD2H^&jh1|1GM1 z1t?8b!I^mWPqg31%>a@Zf5mJnKuO8^3&5C%WbWx*|7*SKzhBj_0HtYE@WmeW4~4qH zs(!_6DnLoe`cDPpMArXU@A`k%tN!Oy{R&W;#sp{jlH1SOP^;=!%%%dAl&pUV7|&z< zzv*57zFzeoRrM=CX{rqJ2sF|EJh5A+>Q~IB0+f`jzXgm}u>SXY*MBgney$`ZRQ(E2 zPbGb=2$vqNZQq8boz&*fae`&feZqpcO5qz}$z&)%?GPq;gti|*(_Pfo|D@VJiEGnR z3b0OQJ`O+5T#g{k&4T{{V0z|YZk+tw0qL2eSf*vZgn|IU*Wzq}p@NNjCp|EZnN9jwo6*^2_kNHxwNU0I&tZ{*hymh9LX|j5Wd=(6GtziW{o-O4GPC6bH#hX`ku;V=K$Op-co)4hT z6HaCml-ZZymbDc(bw1=g;bePU)gZdO!Trd*;=#r%9&EhMgN=(1Hm-oljbV=MN;TgB zkm5Yp2+(=3c@I>aIf(}wc~TV!@n3sbe5?rvs9np&Q;jRbdIq4ax%gD$$~5^%6zDgN ztb9u7@2MxN#YdWA0lO?d(UkbeVrw>)y7)ljDmD3@BshTVqf#iw!vd3lxfQpN7Uc7< zJ1kCzZem%CWqg_yH?2=5MnErivmsk^qqyUJt+<1{i;o-OC0Y(^3@_D+m}_o6fAk4U z=GAd#o;9cPlt=HAO~$-~7~e|Cro93_y}-k1<>SlW5g6ohB+sdmgQG8=5Af_q$*80o z3W%thB3YL!EmhDko>~_6)`DXiuURDh7tThNie5)YIvmARSnA|+R z^KX?Ea5nJLcac+6;P1x@c0&0MBtJXeKb-yk6QK7X6+Q=n$lDx{fR`@uGKjxID%vl# z(iqgl<2|>Ugkh3!>ATot{n!-UE!u)(rv7sF3kORrrqOkg?cfe++K@CjA?DV@SXl>s z23i5nvLLSY{^(;YqJj5Dl(+`wjYs+57~shOG8f=B2Pum;w8uH*7}AaM98>!iNZCbz z3251Wm5?j@B0zjFwX+|PP#DkT;$w}Wws#k3u9Z3Tc`y6XdNrHs{Z16|J7*?-CyID^ zX5uc*zMl-vnaMCGqWGON6Yp{~%6&`j8`Q>cIo!AA5%%$~%|i(fRLTes9|h_WPlbIG zDEfmyJR?0vkZJnepm@f3zXELQM{)Oz6-Zd;mmHo-f#m4dk!_qnBKqBA8!wQ7ItSh} zK_KP&Gc2hRNTtrtIXn{u64m)VhbJnKn9dJ6Jk|cX+i_Wh*Jm=*80myEhuU0&Z zggN)lL0NJPW3lGm?VOxiO8%vhjZy`IVdAZoyo?L!pTs|Cw z>lqTv;Wr+>AMr+VCWnhwNw4$W2{?z}c=#C7a(MLMI|4{BeyAAJHJ=ZH5fXeHx1%@PM` zmN-bW#6g-R4$>@fkYhng+D&6Eagb(-gEVUgC;_d{K!46IDA#F|KUW$^ zYyEwsfjmg_=cSO#)_IWT&$sVD7S?%?<}V1o3p;Z(Uj&(tv(L+eG=E={Mvu%1r+B?Q z=GM85OY!*#YyDPl&{F(Dr~VJbj+7MdC!mK%T|gutdILX{^6_LWlYL^LPlfMvYopJa zp``>(nk9NCB~*q&OMJRxAxPpV+WB{MIK>ArkFzB&Z z&CBFu7dSng$93K}Ex2Gp})xcvl>JFphrij?*| zUM5HKqcjJfMuBCL=SvuG{tonCfZ=(hz(~n(1}xyY{RkZIi=#X@#iL4G0UU5%H3*_o z)gPheb*eh!WU4lT*-+9P4#zG{@)~EtuBgQYP1yA}DB}C!K-Ni=dChV0?TRpOp3^6DsYqJEG+=zW z_a=($=|HML9*<Z#3gQ5 z5(~jSpAyDjB=?QbV|<#7gbSiV@Bx$r_7ytF80>@4Zm&5#-ihf2V91orF(HEffLGc5 zP*9IrmLu7NfouS<4oS33i5Ln{Et{V^71E+*7lU~-k|R+nE79VBtZjboW+lPz23ja# zjFsG?Ws{SUMG|4lv~&;dOC?2_e;$0mPC>y=sN!+3odM*#0B%7N<|`3H0m}S&xfY~_ z`Fp^8Cz2!4C@az8fHZ$zF1LO{;-}!gj}peVWQ%tuBR`UeWBy1O_ESkw=J$mLyAlPD z0N6()3gjSwr;&vDO2klrGJiqtL1oN~VE!eNBheu%(c*wKe?ji2O5*q6{v9QZmy<32 zLo)Jri3szBEni5At^j4r;vijHbj;fT-lAqPXJdV%qH_#)UGn@x7Fxg0<-71G0ox8X3vZxm&10e;~x-8%izX2}$SPVu7UNq(ppSsb!oaZQ@p>$tiVRf8uhtmhl5w z8B4B9E-`*5OY*URY2zE3*J*l14tEYZm$8z*e4RNxz1rW*U0Wn~r@1^geVE?C3no`Ow;R;NK^N>=D zp93x6zXjsh6JDOrflL?AfmfjTGNgQd@{=Jpu}=Wqhm>{`v|S`E)Vm-XGCzfR=3}5& zVA2gkirx>z+=JT`V3UyomrD`uvf+)~@bM&cu1lZI%Axojuzz228DBtgra6sjx^X)L zDrO*=9|2hkU@>(*F1fj@S313BaeS7DE>lc~0uXh@m6dU=lrKRqZh>NFduIGul7+)p zzs+v719~A3kk3B?QSMNK;w!=P^ZC3G6vsCg;hQAB_#0@Up3k9wvW*=))4)m4U5TXqGzZT`F!2F& z$?(rWD3}Olmh}G3Pb$VK`BNjGb1LL>4tUCKpL3Aoa}IKRNgw#RO0&7<`J98C3g;ll z=N#m?d60u2uJjJjk&s1(IX%AjcXfkce?N*~SZGpuvM2Yl1+^jb~U=C6G#k2RYV6fkX`+ z_rNM(7>kNAivKE5}Io6q>Wk7ZqJjk); z2d)L%PUAMpEX-aD+ARhTa;$T5Hv!pg@F2%pB+R+TcpuExx#H8i`|))bkn?;y_0i2Rgbq z(9y+#jxG*#ba9}givt~99O&rIfllT?Z_X*Oz@SauTxlS!_4bhl^5n#umqISv_#=^g zo8R4qjdO_<1b4tVeDcbVw}puKlL7<=m_n(HG5#Bo?xY|3ngTXMom^FIt}W{{j>+&2l9B z^CfVK+l>{@PjNqoKPSom)c-YBfEu6b4yg9jpqTM ze!|UxU0fW6gr?mq?jY~NU-Z)k@zCx>AKHE~R`QKVgLr6nVh|g71JG-cQcl4Jx?L*J z6##K@ePx!Q!@M`k@^eAwo~8mm@K?wwx_G(KZH`BenLJB<8j2r7GXDXle*pLh$>N`| z+NElG0cI^Qhf<;s=(%9bL`pd&iOE#lZfVX`^HG>%)`5p+k4G|NK$ZbG4@paB9nZ-+ z;y{iRpArytT?Ni>+nT1|U*^yM@QY_fSiR&Vhfhzq-5|6t#&xNM>7Rql$x)~{052F;1 ztpKS{JJ<9+AkDZ2e!{)%Sd=HKFN9kNcAah?o!9D)07 zEkikt=z^h_py=cD`M5LLTpsn0OGJqCa5koXi6PwgU6zRnzHcBWcve29!y{tiS7mje z@L+%uA!AcfRG24pYr}qwl6&vREz1D^kDSO^!bN&dxSzwhUGQ@f@Xy~*6pv#+@Nt^$ zVfP|g7vfeb*>xL^c(?f>0-AXV==UT2m`r?T9jlo5MM`s@zF-R626~?nz_afKbQtNE zNT+Z(6uViAVtr+rH2}m7Qis7U&uS|K9cdMy`^;G*q8hL73#V6nE(M@b;+kacMO)M8 zmPs;c^iZEUZ+TQOeIIWnK-k*PLA7dBRvj=|(VH;u4Wv@K``MsRN^1K&3*NDsU+vp{#68k}{CJ${QG@Ia#2* z6?8rkB0kRxG8Il%e zfb5iYXdj{u85Ad@v>Hix$(Nuf1;Wq?Dd2bs{6ksJUMchUi!#@oIhw~+;Cp#j!e_rd ztQq%h42ojDZWr@4>jn_73Nkuqc_p}SPJIX>O^lGXn66C`u|($m9fcc)@;4pzVXl1i zJcpycKRL2^5VTV4i?mdpU@oCU*!+*J`jSFQ*k=j2jIfrv8x=3&aM;|1>5KY0AbC+YFcCK=G)0I)I*mIyM^&E8K6owb4Q>F|QoswFQimKT# zhg@Cgkk3XhmoFiC6g$5>U%;X}%ZCdVv4uKy00vAS8scU|kMi)sn4xo{WYWuQaU3!u z?|TN-W2}uCRnDF&pEat3h{v3kVkk~elO5QO?%0kby7ngk?nbg2A(W#!^K$h6NV7B* zOglm6zv4MWiETh$18@Y%TOhf))k~ZOT^?T#Q>b!~QmKGG(x8cEn^ON4v>jFIKLYSK zs-JvP^>;}1IK<*OXrhvNsuBeZl$DIP{-P@R0y;lal>}i~3X*r@Nh`T2-iCCxVXI^^ z6p$~~kFiAePXsxpby$q+Wej zWd_vo-&J!gM<#aa|9Nc5+SH0QdVdT>+9CztI&n9|7a5)QQ6q zuiwI8GEeSyKMdGCRx6R8jB1#F{Or4_qD@?)0V4*XDdptBuNJT3*O5I@O$1}4kx zKwReJ+kv}PCq9gdssp_%60x3tX(4Gx5PC$)a2ASzRa*?PF;Epc{gI&tM}+=-Zt8aT zi;A+f4hLrDshQ~EJt%U)S-*l-i&6TpK=HT~kW|5@UKLcp*!=0}%$>5}SJHZY*X;;M*>xzI z4aHNDviW4#3g9v%5nFyFg>(f-VeP8SAUayi@G^vtp-7ImzNjR4V0=yCN^;R{D#0-Z zNsNPHG8K^2fMdNHFitA|L@B-%imxr~P>Lr*X|+8w*_`WaUX&O?DGQlwU}gz&16|y zp_pVo(M_tvQb1Cri+WWmPKz@hmz~5(mUv-N6N6^{4FfEDcQCAIy8S4II9I%~m~G-9 z1?;{5>{tjr99)9}{Fwr3|8M+SSN=k`&&htFo7Vsx8GJj@^T)aQ&Zq09i9czKy2NRx zAx=9DaoTB!(@sO2b{gWe(-5bfhB)ms#A&A?PCE^8+G&W>PD7k_8sfCm5T~7nIPEmV zX{W(MgjC}*+|vwk+G&W>PD7k_8sfCm5T~7nIPEmVX{RAhI}LH#X^7KKL!5RR;>6^h!Mx z)qRd0EttyPr{8=V!~%XNfb&txd(ExOqo@f-x$U63Zq`F(Kx*kocx#BW-BU=8rqG-< zq$X};)G{svF;c|SK>cSPHm$rQ$^y+m3whz|d`yFW%QT!h(?7OgzAZyCE8wbeX6-%b z`MJrLUHwl%!RJ7WPX+K9SU*PcKMmw8r5n$SurlcX6^P-|DC^O5Ef>VOUf07Q4wOVA z4hbII<^^1oipHfBq@ENOl)G40EUrO8&@Qe8FvrDhaicUxk3*6}d&nb9yEM+gUHjgY z@EhogVE`ZQQ;z`=hU|^ENkPhx@01Bco`^Fj2<{@T@1$9u!;I(SwJ1ng`kjKlE_93! z0bvOCNrR9y^DnUBNL*wRcyI8P!y5Aw6#RT(RH!z@AEvl4YdhsjP{|m`jzZG=0I3FW zDv=P7Spa4daRFHfU_O$g?MS>2`8M#1tY0f_tH83HGSs#Oz$HYeZ4ZFmM5vAbuJTpRyZ$d;@hDs2yeavL<`LM(_1uFKHtQZJFFy5}~$Y0R4zin?f9I<#I0Q+Dp*3DgR-mZ8-Rc zQHHjS2T)0b+GYSaod~tf18^2n$r(~n3+7=ekIs!$o-5{7L}55dXX+z0&Eou99G`y* zDi=HmHd*`uoM_E5C|$x@SpPZzYlyJ^D*$XE!uqcTa1D~vnw@dYuc0*!S?4KjH-qIy z%23;#0Cp3hwx0p`DG_RW48S8uj*hR@=D!qY7y&(Z_|B#tHlzkR zCLyJhE*m7))m3t&a5xc%9F^aVh!!idE6#vfBd+h}{D(6045*$FH*=HJgt#stTZ-(m zL?3LCWK)|6b8gQNeV~YLjc?O$PvIX@6Ww_Z6wiw*za_3*LCT)n3p9(Ja5z3O6a=EU zp2%8CrRT%o8xjOKYaTjE;kQ`zwGCBRo{bx z?ci%c5_=29WyblXQQ8QPCiLVEiVBjU@x|yb{DZlzqn_)b<6BCP;&N#U>aC|Hu4gm! zyy$OGdTxV`?IB4QvLB{){m%@{dh0*@!>zIA1{}3x~3o{cQETM zCHEj?e%@2AJuaspCHGWT9~}IP`ksW$<2~he#pM*Fj*S%yT{E{v$4@ASKt4 zb&ZnyEo6S(Q|^(toPw0xfh@io7Iq$m%pZHoJs+1-kdk{Q>oX;H3^HADIpG&a;&MAM zp3nIwA*cwy_!N8}BMJXfT&AX=r12cYE&DBy)?djIGtiW?$k6Tr^#?u?Uh?BpOF_2O z@k2{&e;B8d5rGGTvbGH3P%HC&;G?FJEik2e>|sPf>x}0Im=qA1qS%Otqr_a;Qz=6V-|`0qy`(eJY=9QuqW`UnCyD2A>PE zK0TnH4#^=y@u*VkYYAm6t1cfenRp-`v@Yz3GrK&}Tl z%bdTCr3Kc4o+;?**ld8FDXJL8?>F?2TO9!8iPnL%D+;zUejK5P`m$YkhwZ_SanzG*kl{iG$ZG7p2q|Wg{7AVjw(r4@Y zCizqKG|#*ueZK!}KTCt7gju>$7|QCQKRi~nB2}s`@{(^|FrhsyUa2+CpCG5l>zkXM zR9i+&W7{xH0L$4>@w_i&kL6V6@fdQbg;eC|_HksWHu~77Gkv^elEH%r)iTL%o z7^5O6m$er8SZ%*DjWw(ba$x-viqOyfQ}vQyy5B6!E1a91s)r#~j6sBHC31w}?WLun zQwOB$X3+0<29qWYO!PgTWnKCyem{&zln+j72>SYJT{dM%oR0orS8|M_ITwp|4lP41 zj*bDjXbI{WmP|s&3u0M&$GtpXx~z13 zb{~Fc$&Qn*C;Qr+=mYY6Z3fVOuNpc|rXsf*QD3?)d$Y((HouxPDT<#}kw3YC0difb z=h7>KiP0kqM=z8Zwy-mhYA%QdB|JVc5l%7)>5d0w^yo}y=Bt??)hW|@^`#R`Ox0sW zm~3(Pbg2+yeck-t-I-_&J};nKs=oA35c4{%?WBL@#{nhmL~VDp9>lub$d!OxH*do{*-7u zR>SIE(@V`DOfW_rS5Hr{oN;j>dSKSEQ{1u|F)Y0!iYF}KV;`Bg(a-mSsYV)`f=LVeIwlo1sMq!$#h&K z%W;wHuP;S8J-sHkx7YOPZDH~l=6!A8IGp)$DtYIL0VTcQBy=p_i6Bzw1lLHi56M|s zq#UeYawl-v>fhTyItsl)bbeA)Fq8`TM%-}|AyZq|CP{{=K^ZZ=KoD+W|e4m=r1 zEn?r-YtI;QJhjL%)aT4p?9h7nWf7k=MDHo3(oKqc)I|3{m_dL^L|L(|iWG^i9#8;B z=(U$F!m(F!h$&)UVH5ZD$u^jS&jB5h*#5D#L!C)DEHMeooJlx5!8cBX=<BC` z_0E2GM9;Z75`$qSHj$%xI5_rkqoFPy@$nu+IG&sUr{=OV#wHEl*Y=l{&Vb=}we)aJ z8;?$lt8=!N6Bv6FL=_6~%hR5URROzWqL7grS5<&Fz{wJdO#V|7+t;4^yQs4ts4k1| zWBDiVCOHe`=o%?;&1_=Q z<_232_Hpne9tbN#)F`*IC)s%5=r!Tcd=QfUoF)Pr#yRoOmQ*c6gL-J|HLbIHOdFmC zBqAifEI!E&haVuZlK>Dl$b>WGZszeZL-- zI9{6^;S)ip*VaNkB$p)jOtN2zO@<1aoaF=9TYMHB=)@X6K4MpZxqh<9GMFQo=uIjZ zl8Cg_@ZWt&OV^(IEbe;$@XNFjQ@6 z`jCL<@ZOIpeG(3w=Qwcw*EgRC3yCucXR@o)9Qhcl98zr=#B!E+R*#fol#7ymr{|do z!%2J%lm6IWt#jBc#P@+EDu$P;7&;){6=LA!W63}kBSf$eT_mYE&r$7g7Rn)<3`3JE z7l$>;b1Hd8;jbttdFO0q_}5&Szd^R}6Vo+xYhC|57+{84@HGjcLW^&U*c}%l9YGp| z0z)q}_|p}2ttazl7F`cm}_Q+<#X$AyL7TVyhRrU59=%-pOxa)?KG6yn&HyTXD-J- zk#Nr!OwY!pZ%4VuZSLQq<3BiN8^vgvRSFBXrba~@%rQ`xZk4)IEpxb4I&3F0_k7Fk z)=~GjtpIY%eZ3Vh8>f>mXs!_aVbD#tT_hMy_YLn@nWVH>nG-;txB!1!jSL^j@*9O! zKceZG=~--*Jr9PNZu2Er&B{#oIgSeVf)=;#&a(0yefiWke1YT= zrZ(AEI)n|n;X{}5FG$guW}#0{>P+T~;NXwfr^D@p6WPzw8^n$Nqtkzk8(GRP6}2Dp z#=mi>S$#2F>Yt`$V-V75Mv5|K;E|sq!t(pADlR^s?5qJtGV&V zR{BJ1FueacS~}RVbUM7RNN`$3h2S?#^ys(H9QH3hzWgWs`z*SPeJuLd^*B3E+&KB1 zNorNIe=?&e!I2Patwy`ur^CLhtu$e>%jrNr$r$YYkx zz~G_ze$0Ig%OJOTfez5j)U9-M&fAPE1s~$SMJ)uk6Sq!LDmb;Ep&GU$oR#U*BjmoQ z3EXG@bMBxyK*X$7kAQcj&^JhSz#*-w33~mAXHBAIhqQT$!0Mb{I2ez9ve}Pr(cROn z)E6u>CIjTtaTaOk<6zMd-qKn10#v;AzcMnFoR5L?g8zzB=p^Ur|B4eG>*!>&|4(V( z0v}a%?S0PK`<%>7AcQyCR)eq7t4Vl^3N`@}2#RM&-p6M z6PfEu;u`rX+;6#U4SyBpu`cHMUxhiEr_cCfEF+rjcuojZkZqv5?aIjy$rUI#^iRI) zR7cDp_r%mMvelp*(CruL!L{3nXW0m0?e}Av4Vd<^~?`8w&S5*fzWE$|?oxSGAijD|6lasyX)XY4#Xr7u7e0Calr+7|iO^;)pBU35h2z_XoRq z;=+$3k*ign?zF%VRu_T9EY_GKPK7ICU9N>jMmS=Q(xm6awqz-E8tRC`={>uI2E8ff znf3|JCDbg(sX!m*V%9?4i*55W@M}b4iSH+vnaq8*c^fN?-a$hOyR<)r^&d74reB*j z_=^?Co}SjdR$l>R!Q7AwCFvJ=40@fM!7-*ifu{1Ks*p$6iQjiNt@DSVGanCi$Y?|2 zO@ln75Vu_v=loj+$&2z!bUr&r1578-%7*?r8TxRF)3gV@{UUSd@9?v^N*(Nkj}tQy zEIQNF(3k=O3X+a-#7vB&nnU=9drKInZ9Q+O@~6sMyGA(l~K8WO|jXy21GpJmKamp2(KqcTTs z76o9Yvk~1K$+#shE=BgJdAVtyf;e~#BDOl`(xLV@&>#CTbW02g%pun^2Z9m{w~(kt zAw)cxTC#<{rqWl|F2TbRm8Kn}#8jutJ__EyMAV}qUSnkKqflasaez9ao;aZn7ltB< zfCva#qIVwSZvt4(A>d5_>SE%zu#g|B1V3(>$FGvQ`<467DFdZLwL>Xb!F)5q?BP|=QI1$_oro!?L^Kq3qnx|Zkk^fJ zUpE}mo5|mnvjl0&*~#A+K{j-L6id6YkS*3w&|YI6+f#gO{nnt;0Sd6eaKza*PlFqg z9qydX7HK|)%rIn*r^ZkQyU^PFcp7+Q(@%U*T9eV8PNCd z*-Pn%;SB!DP00lt0tNnjw&%dvpBHWt45aw~*eY;^Q^!C-j|V!X>^+X9*nFUfY*e{8 z`4VJ-bE!Qn!@zH4$?Xmk6!B>bI+}Up9D1CD1(#R>mv$~M^M&(0lCJQaQGga35MYWX zQ8?CfmXtxvH!%`ITBU@*PVI+U)$EJ7R2LBSNGLH5>Q;MX2CP0tk`^nU(C)s)rwHq75~s4rNhvft{0J06PeeIIOTnufyQ&4!uITFeh|XwjbNh<6QZ43|%& z=%Uh|SZ<4RU<5-2t%s=XqeKl>4WxYb`jvV+;rw|vFJ;DSw26d4iym6;niRZk>H-%y z0_Fl6gA-#LLPd609OgR+<^7SH2z}7n<=bp~1p06(%_!6vHQS*xaVmzqO-Ed2Zkw|N z4jOvjFD@&U{pZL4_t&0&Jn*hXdELo*d9`8k0_^aQrAE|3xpi;2*`MeFHUENu|@4d zU_K|=f|v^(7C8bt$C;C*-mUWbK$twIkZc{yCiL9nj6@}?8L6NcJ$ROy#X5QTqB-=W zX^@mYP-xlYWNDAUTWYw&w_db``t-K3Z7qcKBDHNe8O90r@FsiUIq2AJ=RyLv$AQ%h zR`)8s=;}F$P?e6$q78fSmPM8Q*+p?`!&>Ur^9Ybe9u4AcU!Ryp!^E}J9C$TbYyqFQ z?U5MRdamfJ0aW23>J8$nffPl7x<5Q@B@RbaOo+3;3egm2aLl~y5OE~E4{Wth=(Y!@ zA)Z#)^g)UMF?1Yp4SIM2g%RU07UOUh#|FrV)r8PjTOhRY+ptN;imNZ9#};uiRz=Rg zgHBD`Uz2Vd@xl~&taBPjG5GrFejin`nodHkM}bmJieIBrd#odFhKfgFK;6}OW1hlxMJP6vutu$2iqwVT=Jpp1h~?7}oXP<*D42Z|L; zG!W}hU*||>?hwJWiT|*0+<;9CFt`l5psi0)hwU*k#-}fgJ6NC$H265zn3F(SoSdilbsU6zIUE`t*QH2c+J!s&DN4qg~oGWAg0rXWl@JQxOwjY_Cw4z!(lG%?jh*KrZW zDo}^gB(;iAEb&i+c>e<3;B7K;15kQMAY>mYmSCWW;8g3xAr$ens7;3;*t@RRtu9FM zH~cWh-BGn1-%lVrY9aw3OjkYpH`5+XsZZ>&cnHjru5)qOaIt`qxcq6&q=4h5qERh@ zsTfQ*LL4En|3a1C2K9)REsr^mfa(n;I_e&;r^HsmRn>==0AZ676ZrD%my-q|S>j@# ze}ht3(+m_><;#@$h(pl7pU>2Mspj|ycoc2~8gs1Jiir+7e8<4DN8G@She9-}=atmp z5GDmg0D~N{6q6ZA8#617*P_2%lmLtsg%5m)Hk!IfeH7QW@}BB&L_tHu_ww)p6~s70ZKKf5Nd@uz0%{3`ZbS4IDs>Z0+@k702r@*pehwP3 zkKuCxAH0RsbUnN0_r8SR4b1Pr5&W)ae(x9XyNUVj`x1UPGrxC_;CB=Ad(Y1gg18d= zO2p>{f_pW=L^yxQ zR@g=40SC;*h~Gw7g9(Xx=JQ?H|8?kJA47O>`U((egyZdz*35V#9m{mJXN|i0rkaL@ z4K+>S84KnwteaO8u4!mk&|rkaopj$Q9*(vxGs1NX!nG*#VK*$QZ>pQ`VFMu(>5heC zxXYAjOQo}AbXh5rSRD&zjbx;~JrxDZcsdqoA&%h{k#q+ET4UKvIMSZL&sQfSi4Ftr zWT>TUP*mfJbRruIcV^RuYO?{Bv23Dl;1%T;DM@uSM zo{7a;rZsoBo;q<=>uF;rm6exwM$(bwv`nV69PNq6zy|`tfg@@qUJ}OA@X2_=T%$eF zfexbBh@@M)jW~ENGcwthSUPRAQxo`$WF3ZxmqDwY?M67-l@3Q!?On+Zqt2CCgVJ{< z)s>DyzAV>xHr5Vwtrw++c&al7)uh^6!l^jw%c^=>QeDlY7f3SEo=tRwgdYETE^$J$m$Q1oIItIVw+cG zW0?k6lM!2)K<8aOw&;V3VWzDdhu1;mCP#h>a zBiS}RNRALt6y(uvMafpI#G(fZkHuVCkD~5u1gdeh&IeF8(ncW~1iO7?0pG zVHf~ZnM4m)Bp_ml6yl{WkY!PC!d=kg6r`e&&PX(oU1fAf+Hp%Un(Bf9l1h;50Naji z#$d_KXzS`&W<*+AW@xxFb)u?Hrz5Kr*5X{A^r(nP6)HtCF`~=~O(ItkK}}qBMrkZZ zPva$Hz<6i4P4tcW3ID@UzdDvql}AxyIT>YnI@X$*#;MlM^uOd3GGnK7#>X{h#!vYY zr=a_4bi`J$iK0{d>`XxmxDvWxVR&ZU;<}kNl$x=izOkvgzKPN`XDzCpXRxYSvILvI zXkJs@!g=RVdR|RqBR%2t7d6xyi>v2_>+9wbq_%oqBeQF2SX5)QBr>>48cV{s>Y&wh zS2UYQbr2q*GwY^RoiW8=(fsK(4W9Z5X;wo`HRcwWjq5Tn>M}-iD%Bo~C^ie4jE=5k zv+7KJ%`D&(W#gjhO%2sExHHu=XBr)mWX#A?RhdMxGru*i!TDQAJ(|8?!8{m8uGzlc zD6UCR?oh&HluaaKHR*H;bCB1KIC&3WzB>|Tx0A@!M%pv6 zRgglmljbBIU`=@0PG?u9&2T4(Fq|a*ViBX0oq2nThE{7wS2XN$3WvMnzM%@kQ?n~m z#Z&2IBulO~Ln^{(V}Bm$G+ZK@+hf^AnzM|!*BfpPYSNX2vyoQJxyxeS&}>>Tx28T^ zT|d)E#xj{mYYa9N>rSM)Xq3ehD-DHEi|9b5YRFm^M$(yBLl?TMfQ^e5Lg|>FATtHg zcBV4(YHFLp)1h5ZHq^}EsH3`}u5m%V&R5Ty=hD^9n(g8$Vi-H3j@mj@z{K?n>T3`( zv}4HY%A2Yi;BLBECTM*$))FJ}a3gEU^`fy0b8vDpjnPO4LI8z>2er!U;=%?5NJcib z40B>^B{*g>GzL^{JW9yzjbrCGUiG>`WJtwxAFm^@eF=tsUtZt~O_nMFD zX6Z}=cV899l5mEu3vErOx;hgbt=i6zQU-% zzpj2!qmh9^npomp9g*}ZUFNzIHbozs#+vzcGZxH){U{y_=Ya+HW>I~0!#PUjX@ex# z5X*KU>_mW*jv$I-=cS11mHSc(^D(DhD`qf+`NU4)BUYYY?WX5d!=JLjS7$Y>WgU7kH9vB_ZIKq` zlR6_EiRgTq9#yj%(UjRbt>u-cgtKQ;5U+6SY7K;mY^PikT=jgf@{C)iU8U#ylCfko z*~u!RF@rXfA(9(W8p|w8be`RY4rUM`#Ee8{W}+4G8R8?j(s%+SiA;5SXIq4P6cz~C zG^~k67UJqy3ugIPblKe4suihp3%DXk^O3TsSk9_0a-a3FmEfMK&ekAep%p|$)TnGr zC1aJ5mX1gV_$;eLOq|M8wx?EBA{tz2RCXj*R%W38SY>njq~?jMR-`+|wPz;BS477~ zyEEM@lIhdhR&}H&v@R=eZBH~u%g0wtIIVor`0|!mcV(g@+TPUy(gfx*AFIi&lj3bF zyT>-SBu^bbVRB++%ZlaW60287Ry0RXZA~Z3Tcgo(weqM0(@JD3vDOGro><=1v8*Gt zqN5zKOV`SBOazr0PuJzI=3i`aCC#FF?f&00gz{PvsqqzvWwR|Uu{aXUodFaq@RCs# zCsKHJC*2H*GTN?k5C#%cIYuZ?beyRoJx`4!bEUvS<*l5OZk^cO*4i?DY+_3H>Q&2< zhr zXbZvyRHjPN3hm^nL2eRgYDNUmO%W-Lbb#K*30nHMMd8PB&$mmw>u8Z2Iu&o|p1Q}B zcu_}>++)6FBL9~8prrs0T5nlqV;+w@22FD43Ujes!3>%-gT-KQH!%R$v$@c5JYxoOg|b&dH)50k5{ zHP4fq%v*569k&<$3y&P;ryk}p;CakAwEu$3Onl#o+YXAQ;f(NlF&Ieaw*qcLT^c$9 z{mILomzTB1^>C{k7hmGXPZ!GJBOoQ==kh%w%V?&dkT`K{6}8hK^1!VcJ^;Jl<6XFA z1n$nkLmoch4{CT>NK|=n{650t8a~SE#9a=&>r5Y?9~2VO!vp=X8eU4jT<^;d#!t1$ zo;(P;4@NG5MnID%X%-=;x0|kA8UKyHd^4A8tPK_{dxNzJrYkpDHz->sYy*W?S!P6D z1*mho_{rdk9)@$-QtWUqlGmGiN&S1xgL+ULG(Q7CqsgVK%qF?&9kSYYP{3C1V{w6b zmb~C?vWmAAgR^=hGavfmk}4G34k|kU3?hpA(@BKr03i3Wh0AniNWtPaxoO zmg0h50Oc%&a+X4ogGa;WPM-nGy&wPEJhBZ(quQfyqh8)--l2tghq+UFLz!Apf{II) zLS9QDmPUwWr{pGiBKfj}JZ}{mbp;K>v*aD-{q%Uqe2yN^nQxdjA{XO0`G&dAbh-l$ zrLVSbu~2%Obw52GwVtQPOV-=;IAHyq9v6#i1s*qvd+70V@iaZ26|d9d58`8bd@ioU z3k>9T`4k>dtQ>xPNHlr24nS37NG$aLmW5_rX@x}01DOiMvVgH2AP)k%z2-Y+NG#8x z8S*eFo!+J2B0+%a3iHRn*zI8mgF#Mj+QqoTd;l2x{1^oCVO(wf7>)UXAA>+XjN7aS zfN_Z*gFrrvN39otag`r~Kt7C@tbM?^&W}MLAI1UeAHdk+#~_do<6^N{gv8x`3GG){|Ahp`!NXQ!}tSUQWz4C_%R6N!}wfWB}3wu zehdP67>3*=?*YcS9)@MWf}RHGuO3JlyWB0`#+w!Jwcf^dCz?gbp9+KAB9(*4rw6*qSHpVDw+l``-2#l*@ydL8LJafZV?lgZ5&qRp3 z%nx8eqdi1`KEUe|LgHH@HqEK#9>Z<=Ws?L9h0FK3|@b_u9|cnCRp)_AXr92sBkO zzBBHd@-zD|mmIcla`H=l<-Fh!%?r-E1tr%M-Bd&+Hx=Dqluz?k(YsvoZqb@Re#y4L z{Q;u6Kk#%x$vc7fxa7USfr63)fj<>Meja=THz5r9Nbonfg5~eWn$Y?Xm8=il7RoPq zKJ;5I`F&^~Ki?1im7jkPT~M*_z zOL0+W4;~wAGfYl#7e+!z%=ByzppQ@-60;XovVrzCTm+^?s4|Gm=6>^LFJ%%uITp~leMofZ!fyNNb|fna8*EI-VnHx zQmCD+L1BJW^bup4LT(Fe3t*&^j6Msj4d%KkUkkn&R6ITmenBblV2vvtPX(U}>e{x3 z?hPr-2SdN26foHW6y~PTrjQCZ<=w^i7w4)#PcVJsT+kwU4Q}he5#4L%g<8AJ*Ui%9 z0jDfyT*vju*Ub;jqlMuPo8t@0d8mUi5f3jQ9)H5}Qs+2uc-O?+`ugDjBuw+~qL%M` z368G_ER}z`n|jfJUi^nC@qTcYD#I3$NOoaW5c1yiP0=bqAENihfdX$N*95N)LMm4W z?+*FhHhRS+O(@w4=OecUw*_-=B9+?|KK!_j6d#6?Lf*?Hd*nO8&-3zILU$vif7LU1 zADIYzTj6tp5GkSh`S_Q!+dwZ57~1@)zs-hY$ftt84O*x2=y^uI zCC!Lx7NvvZduVJ%;QZf`584iA)unQ|SAIYXudD3)Xf^}uUi*F=xAESQNT3f;OydDD z(FgK#ngqdHej#pzV{qR{$EE#(@*2NE<`bfZ8!g;+;yKcvx&u>V9_7sn4Q=9&G$z0x zCM2QsWJXO&na6XB3h>2ihMVMw4#dhGgn*Eo5EfJOr%Vfp3w=tKQ>Mb|P*4{QiQD`I zb$>tUfE5cF;~oA@Y}yGf(8D%=+Xcbc_n-= z9`^nh2ac|)$mN8MZ~_JBC4{VB5FoIMbxyu zi%6=^6+MT(k!%hYT^X=WoLx>l`6;<#Bepu^Ml8)N zycPEYMD_IihqVr2^cw9k9Jvm$JkU0a9}6npPs^)?@?-HsN!cAmhl}WWdEjROdOi?% zg`aN)4g@Lxad1tDo{xrJrYA-bePk`h#Rjj6Ps}wKow@vG>vn%0w@BopWdGQ^!06ao zw4=zXWgDQR)B6M7*l|mgbubddWVl ztVya6Paklc2J%La{Gt4b6oC_26O?v(FVXu=Tx3o3N@%J^V}Bxl0fG~}w9|XF+Yc(z zR?bOP!%J8ih`{m8htf{(X14~)YJ&F>l8L}*W=mGa;=;&X|@=cK~F(|*#n>KUJs`qc!)luH!SllGgoHJ_0v>Ga<3GUXDbBTg#(H|;NM zYaZiM(&>H7#pe3E1euV65xz=27${(87 znDTA}vc&oY6OrmJ6LB-%7%Xp>Kb6>rSR2H001M>Tiq{U%!0mkj|5H9Gv98)+Q=?v! zSe?BsX{q&}5(Up7`I)`L0hj&7238HvgyjC>L&e7TF)MqmwuW)F9{AWut4lHxmWBJa-TSefZ?E6BjpD9BZ-)CtCV-5Uli@- zfW64;a!NiU*V))jx!y+Xc#kdr!+sFmdIq7Q+;{}=RZ>8oB`;FRt6=A2@`2*K5&S;S zB|oy)I&y=v5kc=pXR9Oca_&X)AQtrUvcSfGA+HPkG$8K{Jc8toz;6QbcY(b~?hPCY zU_FP|pi5c;$o-h+WG`ZPgTr#pQyBev5F+0gGWPnVT~;QK`;MHrRDNdegk&jQD{I~C z#P7-($kt+a{3?{vRyp>sJjw1PR@m3hfP6dSI^MKEr zayS0Hf?0E0k^BWbfSL|@vNM3X8GE^yi)cQ&N6JSr^BD3a$WFdPwvE3}B&0>gMJsiA z8>R^I^xJLuIK00hpR}L1(TJ_12zqiw+^5_?6Q7i$ycns=m)fkO8zaxNqKGYO~}7l^j?wtu;_0^^6y2LLtB>zt_jE+ z0=EU^oq-3Ce*l4+d@ArlK)wVY2iXK)3d%jfy+JICJ`Pg+@+ek_#Seqk$5ul_#P5B%wV;LrC1|7|~T`gJsxr~Vm=k-B5=^n?GA z#&>TxKaMUGDXTOMV6v~yS$gGT9sWIue?Xngm!qx+5(Og?x8=^$g`$%>C=V_ee@ zpL_d(@6i0+Uj(B!zS8GaJO{&{l<8%ldk*4VjlcASD#p8;zw!Pl4fo!?>8OIwH2kBZ z6+VS{^f|2I?k}dzRA7DuC+TsG9`AEBd<68^mz>8iyu?`ejVi`GPUD}V;TyG_UHhEe z51+bz;QtOd>9Np$+BE+)+Ro{>9_h2PA3j$AUd9;tUpE0xa&|Yr+;;X794{~m6xi*( zj1TJ`Tg8mjiXAV~1DxdM{?JiESMy(tKhkjbOm-kopBEVp>(jfy^a^_V>}EbH?f-t8 z;jml%%W;qhfBp=3DcXOdwiB1;6T-L99zDO{w~hD{(R}s}sp9-e3TzBONBYt)y=t^C zIK4uS>Ma~!XEHwQXRzWQhQFZCjDGl>*AF}mIO)aRX@R8pvs&{n)Alx6!!PQG&nAt( zM&qB2JbiA_@KO!e%`~?5!{`2f;8;PhofOL9H~rv$NN@`~!lhN*4)^O2@o_W$XEdE1 zSCPVT>PT}!AEoBQhkOACh0U>6@l_KgvacCmlJ#ZH7`-E8Dk$2ybFnzqW0tcwGXr6b(y5KyucQjca>sJSO-2<=gDOi2HENVbb zIBCpctZk^K+hp}K!(k&l^PKu>oa#lFaC;+MGdrwGXV1iKf?4wxOvm~D1+}$}xU|+( zJsnrp{8ts!iB-Bs!Z#GuH51BK&6-y?eMWdZE`LqJiG02Qln2W{b?+5TsF;X`;M8A~ zZp@^!xWts`$dyhkyn^Dp_(B&RJWQ&V4+9oJ=+ti>C>-OfM7awvalXZrhvPrE&Srro z@&SMEK97e!QD5ls0MroQZ3zF(38iuGM7cHq--&Fh7Z;?CxQC;zPVmi$ym~ru`yqFy zN1YzdL*P4ac@PW^+@w;nKJtDL-B>F?Z%w8;v}(fcac?lmq{3~uh)0*!aEFN{AEw(o z{+ls$@H&IDkvKX`_loiu`)@7ry~c1$dpI3a*N>>aY$6)&OyGJRUCPTN)#Ay6;r>V_ zqkF|y9sM^fJxpb6keIqB>A_ERk7BC3Bz#HFDPVI>1joap{vwaH*0nT=+9#ltB*>BG9Q$++?lb zW>#eBM0f>xN|dE|Bvr)Pv~O%{0j--;6v{~|3O5bLkz^u@Cg5&Ph2jD285I~1NqAns z=y)yABOR?UAf3h4gp`|(G&ke&jGN0H;Fuk=?)w~r~JSCq4=2Q zQiPZM86~RpQ{@}g!~1sUT^DdX5_E#WrSH`AorqiLQ^nu8FE=iBA(N5t)4Tfy+ckZe zi>RNNcJn^7k)v42t$(+!pW-t5(1|1Z=PKAdvtH^?eNH|VXM^!cWG z96_(aMm-X=S>n>)rRnd|^qsnZ`be^K`|rj_ivgpiy7Z%ps*uC)&=UbZuM`NpAZvUN zIQXZf*ZzZnDk3uu>WU_EF4upz9{0Hn<^S!Y9}}!%iZMY&xKuq@NB;I}u(28m>Z;3c zgQnk5Kwl_-xBr)D`steCeoen$(_=fEKSVzQe}(evst>7_qeaY%ZX87^KfSx3(GD+8pKliQzp(y?fa9m%Fu97z zj14rf@j0)cepi30)G&4+f%l2>7+{#Y&oYg3p1xHsr+=5v3n&fz|M$JOH>Kui61>D_&wvhMHW~3|F)uvxr)_HTsrqTN7MW3p!8E@ zSojpX8xJabMElR}hyKNXDuQ1Y40yL*&5rqbzQ+aPd84H;$7(-*JYe+a+P&-lskoqv hfY2MW6+M19E$>rUKe^ey=wB>VnDmc9|EC~p{D1nMrFsAW literal 64928 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 diff --git a/clox/compiler.c b/clox/compiler.c index 68bd0d0..aafb558 100644 --- a/clox/compiler.c +++ b/clox/compiler.c @@ -143,6 +143,15 @@ static void binary() { } } +static void literal() { + switch (parser.previous.type) { + case TOKEN_FALSE: emitByte(OP_FALSE); break; + case TOKEN_NIL: emitByte(OP_NIL); break; + case TOKEN_TRUE: emitByte(OP_TRUE); break; + default: return; // Unreachable. + } +} + static void expression() { // What goes here? parsePrecedence(PREC_ASSIGNMENT); @@ -154,7 +163,7 @@ static void grouping() { static void number() { double value = strtod(parser.previous.start, NULL); - emitConstant(value); + emitConstant(NUMBER_VAL(value)); } static void unary() { @@ -164,6 +173,7 @@ static void unary() { parsePrecedence(PREC_UNARY); // Emit the operator instruction. switch (operatorType) { + case TOKEN_BANG: emitByte(OP_NOT); break; case TOKEN_MINUS: emitByte(OP_NEGATE); break; default: return; // Unreachable. } @@ -200,7 +210,7 @@ ParseRule rules[] = { [TOKEN_SEMICOLON] = {NULL, NULL, PREC_NONE}, [TOKEN_SLASH] = {NULL, binary, PREC_FACTOR}, [TOKEN_STAR] = {NULL, binary, PREC_FACTOR}, - [TOKEN_BANG] = {NULL, NULL, PREC_NONE}, + [TOKEN_BANG] = {unary, NULL, PREC_NONE}, [TOKEN_BANG_EQUAL] = {NULL, NULL, PREC_NONE}, [TOKEN_EQUAL] = {NULL, NULL, PREC_NONE}, [TOKEN_EQUAL_EQUAL] = {NULL, NULL, PREC_NONE}, @@ -214,17 +224,17 @@ ParseRule rules[] = { [TOKEN_AND] = {NULL, NULL, PREC_NONE}, [TOKEN_CLASS] = {NULL, NULL, PREC_NONE}, [TOKEN_ELSE] = {NULL, NULL, PREC_NONE}, - [TOKEN_FALSE] = {NULL, NULL, PREC_NONE}, + [TOKEN_FALSE] = {literal, NULL, PREC_NONE}, [TOKEN_FOR] = {NULL, NULL, PREC_NONE}, [TOKEN_FUN] = {NULL, NULL, PREC_NONE}, [TOKEN_IF] = {NULL, NULL, PREC_NONE}, - [TOKEN_NIL] = {NULL, NULL, PREC_NONE}, + [TOKEN_NIL] = {literal, NULL, PREC_NONE}, [TOKEN_OR] = {NULL, NULL, PREC_NONE}, [TOKEN_PRINT] = {NULL, NULL, PREC_NONE}, [TOKEN_RETURN] = {NULL, NULL, PREC_NONE}, [TOKEN_SUPER] = {NULL, NULL, PREC_NONE}, [TOKEN_THIS] = {NULL, NULL, PREC_NONE}, - [TOKEN_TRUE] = {NULL, NULL, PREC_NONE}, + [TOKEN_TRUE] = {literal, NULL, PREC_NONE}, [TOKEN_VAR] = {NULL, NULL, PREC_NONE}, [TOKEN_WHILE] = {NULL, NULL, PREC_NONE}, [TOKEN_ERROR] = {NULL, NULL, PREC_NONE}, diff --git a/clox/compiler.o b/clox/compiler.o index 7e02c78646d1a6546481557d9df38d6e2afc89ff..7f309884a4c6d66399debab67ba7fbabe2a38036 100644 GIT binary patch literal 28200 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/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 diff --git a/clox/value.c b/clox/value.c index 5657f68..19b7c0b 100644 --- a/clox/value.c +++ b/clox/value.c @@ -24,5 +24,22 @@ void freeValueArray(ValueArray* array) { initValueArray(array); } void printValue(Value value) { - printf("%g", value); + switch (value.type) { + case VAL_BOOL: + printf(AS_BOOL(value) ? "true" : "false"); + break; + case VAL_NIL: printf("nil"); break; + case VAL_NUMBER: printf("%g", AS_NUMBER(value)); break; + } } + +bool valuesEqual(Value a, Value b) { + if (a.type != b.type) return false; + switch (a.type) { + case VAL_BOOL: return AS_BOOL(a) == AS_BOOL(b); + case VAL_NIL: return true; + case VAL_NUMBER: return AS_NUMBER(a) == AS_NUMBER(b); + default: return false; // Unreachable. + } +} + diff --git a/clox/value.h b/clox/value.h index 86d4b1c..ee41d23 100644 --- a/clox/value.h +++ b/clox/value.h @@ -3,7 +3,33 @@ #include "common.h" -typedef double Value; + +//typedef double Value; + +typedef enum { + VAL_BOOL, + VAL_NIL, + VAL_NUMBER, +} ValueType; + +typedef struct { + ValueType type; + union { + bool boolean; + double number; + } as; +} Value; + +#define IS_BOOL(value) ((value).type == VAL_BOOL) +#define IS_NIL(value) ((value).type == VAL_NIL) +#define IS_NUMBER(value) ((value).type == VAL_NUMBER) + +#define AS_BOOL(value) ((value).as.boolean) +#define AS_NUMBER(value) ((value).as.number) + +#define BOOL_VAL(value) ((Value){VAL_BOOL, {.boolean = value}}) +#define NIL_VAL ((Value){VAL_NIL, {.number = 0}}) +#define NUMBER_VAL(value) ((Value){VAL_NUMBER, {.number = value}}) typedef struct { int capacity; diff --git a/clox/value.o b/clox/value.o index 96ee556fd2001884f02b3c0c0a8d918baba6c439..2a9e01695d59cce28b800cb171a33738d1927d51 100644 GIT binary patch literal 7832 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 f!W^By3DBS^K;DA9IQe+>VbpQVX+42-w literal 6528 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 diff --git a/clox/vm.c b/clox/vm.c index 9c6c687..4d4d599 100644 --- a/clox/vm.c +++ b/clox/vm.c @@ -1,3 +1,4 @@ +#include #include #include "common.h" #include "compiler.h" @@ -7,6 +8,20 @@ VM vm; static void resetStack() { vm.stackTop = vm.stack; } + +static void runtimeError(const char* format, ...) { + va_list args; + va_start(args, format); + vfprintf(stderr, format, args); + va_end(args); + fputs("\n", stderr); + + size_t instruction = vm.ip - vm.chunk->code - 1; + int line = vm.chunk->lines[instruction]; + fprintf(stderr, "[line %d] in script\n", line); + resetStack(); +} + void initVM() { resetStack(); } @@ -23,14 +38,26 @@ Value pop() { return *vm.stackTop; } +static Value peek(int distance) { + return vm.stackTop[-1 - distance]; +} + +static bool isFalsey(Value value) { + return IS_NIL(value) || (IS_BOOL(value) && !AS_BOOL(value)); +} + static InterpretResult run() { #define READ_BYTE() (*vm.ip++) #define READ_CONSTANT() (vm.chunk->constants.values[READ_BYTE()]) -#define BINARY_OP(op) \ +#define BINARY_OP(valueType, op) \ do { \ - double b = pop(); \ - double a = pop(); \ - push(a op b); \ + if (!IS_NUMBER(peek(0)) || !IS_NUMBER(peek(1))) { \ + runtimeError("Operands must be numbers."); \ + return INTERPRET_RUNTIME_ERROR; \ + } \ + double b = AS_NUMBER(pop()); \ + double a = AS_NUMBER(pop()); \ + push(valueType(a op b)); \ } while (false) for (;;) { #ifdef DEBUG_TRACE_EXECUTION @@ -53,11 +80,25 @@ static InterpretResult run() { push(constant); break; } - case OP_NEGATE: push(-pop()); break; - case OP_ADD: BINARY_OP(+); break; - case OP_SUBTRACT: BINARY_OP(-); break; - case OP_MULTIPLY: BINARY_OP(*); break; - case OP_DIVIDE: BINARY_OP(/); break; + case OP_NIL: push(NIL_VAL); break; + case OP_TRUE: push(BOOL_VAL(true)); break; + case OP_FALSE: push(BOOL_VAL(false)); break; + case OP_GREATER: BINARY_OP(BOOL_VAL, >); break; + case OP_LESS: BINARY_OP(BOOL_VAL, <); break; + case OP_ADD: BINARY_OP(NUMBER_VAL, +); break; + case OP_SUBTRACT: BINARY_OP(NUMBER_VAL, -); break; + case OP_MULTIPLY: BINARY_OP(NUMBER_VAL, *); break; + case OP_DIVIDE: BINARY_OP(NUMBER_VAL, /); break; + case OP_NOT: + push(BOOL_VAL(isFalsey(pop()))); + break; + case OP_NEGATE: + if (!IS_NUMBER(peek(0))) { + runtimeError("Operand must be a number."); + return INTERPRET_RUNTIME_ERROR; + } + push(NUMBER_VAL(-AS_NUMBER(pop()))); + break; case OP_RETURN: { printValue(pop()); printf("\n"); diff --git a/clox/vm.o b/clox/vm.o index 10f26d50333de48de314a60761be95e74afb5399..287fae95e11ef978ff0c4e20157092b506d08b70 100644 GIT binary patch literal 22016 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