From c9b627f33f6507587a6a5911a877c7d19681c49b Mon Sep 17 00:00:00 2001 From: Paze AI Date: Sun, 16 Aug 2026 17:12:46 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20C++=20=E9=98=B6=E6=AE=B5=201=20?= =?UTF-8?q?=E6=94=AF=E6=8C=81=20(pcc-cpp=20=E8=BD=AC=E6=8D=A2=E5=99=A8)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 实现 C++ 到 C 的转换器 (tools/pcc-cpp.c),pcc 检测 .cpp 文件时 自动转换后编译。阶段 1 支持: 1. class 定义 → struct (数据成员 + 继承的 __base 嵌套) 2. 成员函数 (类内声明/类外定义/内联定义) - 名称修饰: Class::method → Class_method - 自动添加 this 参数: (struct Class *this) - 方法体内裸成员名 → this->member - 基类成员 → this->__base.member 3. 构造函数/析构函数 - 名称修饰: Class::Class → Class_ctor, ~Class → Class_dtor - 局部对象声明时自动调用构造 - 支持带参构造 (var(a,b) → Ctor(&var, a, b)) - 初始化列表跳过 (: Base(args)) 4. 成员调用: obj.method(args) → Class_method(&obj, args) 5. 继承: class B : public A → struct B { struct A __base; } 6. 简单继承的成员访问/方法遮蔽 同时修复: - AFF_TYPE_CPP 与 AFF_PRINT_ERROR 位冲突 (0x10) - #pragma pack(push,MACRO) 宏展开 (x86_64 下 TOK_ASM_push 未定义) - 头文件 _CRT_PACKING pragma 改为数字 验证: pcc test.cpp 直接编译运行, 含继承/构造/成员的程序 exit=0 --- .gitignore | 2 + bin/pcc-cpp.exe | Bin 0 -> 104490 bytes bin/pcc.exe | Bin 385024 -> 386560 bytes docs/cpp-plan.md | 86 +++ libpcc.c | 82 +++ pcc.h | 3 + pccpp.c | 6 +- pcctok.h | 16 + tools/pcc-cpp.c | 1037 +++++++++++++++++++++++++++++++++++++ win32/include/direct.h | 2 +- win32/include/dirent.h | 2 +- win32/include/dos.h | 2 +- win32/include/excpt.h | 2 +- win32/include/io.h | 2 +- win32/include/locale.h | 2 +- win32/include/malloc.h | 2 +- win32/include/math.h | 2 +- win32/include/setjmp.h | 2 +- win32/include/stdio.h | 2 +- win32/include/stdlib.h | 2 +- win32/include/sys/stat.h | 2 +- win32/include/sys/timeb.h | 2 +- win32/include/sys/utime.h | 2 +- win32/include/time.h | 2 +- win32/include/wchar.h | 2 +- win32/include/wctype.h | 2 +- 26 files changed, 1247 insertions(+), 19 deletions(-) create mode 100644 bin/pcc-cpp.exe create mode 100644 docs/cpp-plan.md create mode 100644 tools/pcc-cpp.c diff --git a/.gitignore b/.gitignore index 0d13d72..e977286 100644 --- a/.gitignore +++ b/.gitignore @@ -92,3 +92,5 @@ bin/* !bin/pcc-asm.exe !bin/pcc-get.exe !bin/pcc-impdef.exe +!bin/pcc-cpp.exe + diff --git a/bin/pcc-cpp.exe b/bin/pcc-cpp.exe new file mode 100644 index 0000000000000000000000000000000000000000..fb032e9faee2ad0580d6a6b2b7980b5982956ca4 GIT binary patch literal 104490 zcmeFa3wTu3)i-`7Nj+V;z`>nmtnVFE-zTfx%p6CBO z|9>8sv(MgZueJ8tYp=cb^;BKcYz#6CBOm_{959R)Jo#54zhC{+faKvPY#VMoJ>XpFC2{Vn4Q!#I1eVe}d&=MBxv8*lsuK=i?_pCJ+8=Ab$%KK9MzKZWIFUueq=l<;C>hdBV?QJzF`<01_Wj}lkpP|?r(0kgZo3#o#p+3KP})Cp)pkr3(#N^N!od&==@2Ycq-6tay_JlGww`M;t7VF!F5)#wQB;UhH?X}zI|K_@Z< zDP$@Y-0HxNfzj{G@)-xZ5LgWskQc$AgJ&m5wK8|euIfZwYsjwY>J3>>79z1X6s_$w zA{&wI8f3GLXxbMk+V^Y(ul#?-9{8B<%> zak(sgd5Du@ys=yIkYGwNew z5lS0J&S5`h$S!We!!~31ogVK5XIGpfMX=4g5EW~U6xzW(h;BeJZ1YwXXF8|zHMl3V zdS^3ec#SRq7QP7Ve8o-yW6uDS-*#R4Wb;fK+7#iY<2 zHkowDhgv|xKufcY$?T_H*wqRaZKkyZAPztrptGK7ojep`3=f$+6jBJ6rM}4&yW+ZN zdiZUFg-$9YQ4L){fu?kStF@&ybtdD0s0Ys;yJBG$_)!wo(31^r3MLqy0Az4QD7rTk zN-P{z5w8lsh?UyGK(y5tS|4ib8N^zD=vPu^-M|Z5SkK9S;s=;Zm8Eg5OY#Xs)26Kt zB}P1pFku|Zfd;9~X(lQn2djO-dP9k0^T;d#PZOGh4u(;vP{V_TkJO63Ac~q_M;EzF z^oD$$WWuiMfyR);t4~8+Vfp|$F&MD!4x(N5MTT5mp$?Wq7q+GsYUoNYbZwRju?Mh& z=mpxGk70b2aGUWLN(>u<{K=Pr-#Vef*uluGKiyG4^qD@S5`9ReNEcON*OU-*RlH4e zUbxD|?{+eh*EY8nvY7=4GKj!`KM{zHL-iX5#?8<8%zNLf9R z%MT#@hSm5W%Aos@)M-ji(bjzE$RVM4JNcui5}^VFq0;S60zyFZzL_FsvfWSsk`sda zR|&Lwji#s6UzABrgaBIOkAH`t(4hedOl_IMDgl{qf=nvEIpu54?MHLCkLV`alvRea z|BW&{2P>UXwJQ%U%CE`0wWXl}h#OnO}o~ zeq`?Y5w5_i{|#o3Rm_g0+RQ;!44VVR1w#R?H6vC+3GW7@2N&a~xy7i;F2;lZWRL0= z#z?m9f7>D%~PiJmy_n;P$$?(3|A>Px6~dbG8m z%C6|GicjsWOiV499_>k2mbHb-I(^Sa-$}QzrwJpVsPq{G|_g#1el(?p!%@b*{%fg5gw9fMdBV@D~8l$AgZX{&ycZ61$c zqS_ZPE=C|*5HS%ogyZXif^8cq712@Yl?o=P22wUBAHqJm>mYy*^AunpPt8J~UbNJU znaT$x)am6=FX7L#vgIM$+@w=~^-K2n`{8gDMlAI4wC1g-x?EktOVWi}7PgpRJ-HJF0DwOW;64|ClGU*ZQO7H0wc-UTQkz#kRBm019rT!3K&;8+_NCT9WM?E(xZzz-C_iCF;O zRse%rETpAsk-aD@waQKPGxbKK{=GdT!_(YU*ajmt6{&y9NIb?w zvJnGY+jE)~TL50E28Kxk^ z+9Lnz+Vtl@TlXA|E)kug5E;oE!G|lU^R85qiWCChjaE##75m7L9o#2u>{F=ey{unb znU|ls(AobF5rB*2qboELis{D4(F5izk{r(8kv%nJb?rVXdfk)kI*=u_e%G|TeATe& zX+WU)C@@pwdC5oNfFpO*DUYUySZnAY>47%fdEv9SFQ1jpmAQOQclj&=pX0+Gw*%zY z++L))?GRq{g7cJtu~b#P5MH!-e6Z)wO#? zJsx6DEETX<7b!VK@py{Mqm$tgZ45j*!lRSn@f7gre6D%asr~cVPAKr0gTmwSl)gMV zeRy+Y3wOAW`%?|Ef8+?6N@C|QH1s?kzYQ7%%BupR7aL68kiHYEAtfiG3 z#qtE$Lg6dttN3a1?E z&rkw%ILyR|pbG!ZWf;6smfA7AWQpqcvi;D6xqv{(W1H6^6ittaoCtDh_?2t6Go{^G z2b0oa`Y@G=`ZJQ40f5gmUVw|O7z{4Ul(x1Q)^A(m!F|!%eP!WO@q2xE6n-a$kH_!W za0z~EsU-WxhtW*-oy%sjuQXDusU5GW1?V%MVVn0`;wrhxc{*)Ui4w_iLCVFI&{KpQ-sw8&h0^re<{RVbU2QW0$X3>Fn;r5FVgHsBR~))lWeotI z`-rMf-^Zvs)Gq!$fZ_7^y5eRNgJvARlfT5&TOFomR^a6T!k(|adhce~wou~nQ4QoW zo~Yn!{QeLgmGM|L-|U!*Y;zt2tx!D1X|zyuI}?rYSfn!qX=2oa>7M%~QzF)j)TuIi zMRniy2>RD!(Gwi^4`l9}`a`7dihU@OvhNpi3WQm|fkbqt_i=V39vdOF1pB1A$Y_m9 zCK7Z`WI0x{xbp(K8e@LNH`zDBmC@})WrPn!0T|WMz?vcp(d~pZ!cZZdLPN@w)DfY? z{VbSHA$#4u5Q-~};n~uNV3z6c&^k@%6v##uZP;~~%?u@iz0>0_(P1WTqN@EiNZjC( z&w@X*fA}iGj}O^WYn2JJScADt#;+WO5#Mtj{^J0zxrq#M$qa{M{?1l15R+Qh)t$if zhAlDBybh$xoI@9z(phjdcA4K83$AT*I;>y*l{T&5eprPjqbmS-?SjH3}=tMW{y#L981IYzKz`R~3Jb{Fc*jUyS z{*pcfZ1dM}XTVM56yP4Oa6gVHA}Ub0hefwb9;@-s!hc-n7>OKTpl1i^+jWlDf2N$n zs8I3Q=Ji>yoF)P6r5g587j_e|`;c;`q{IsF3PJLr&0j1ZVcYa8WLE4supiyd$g*%y z1+EWIQh|x#uc^RTm`i~_ir4YuWiDJ%*0N@S)=&m6BQ;Auiv%HO0m8A?_k1AGT*d+olTG0uB z)XGd!Sd$*CNRQNb9`x|Iq?-tsFpUi9T1EPUGR5tDFH1J*E~H{G$Z3bd=sj!YmU$+MIfLD7N{1q*FmoK$(Xr!ZxBPx%W0mb(_vA!L(FCs`>%+`&)#~ z>oxRNfwp3gq4qjrrKmmrC2joJ=9wyQgi7^@$~Ri)TfMg2)Y?8M>8C|2EAVLB3sDhx=ODMZ_xIFUd0AqLA1c$$LMRnkkEJ5;mgS z`7r9(xQaEliNtn2vHcB6SUVAHg<`Obrxh!`R z(y|WI1V#hKHY<=3)uYRqC{7bY!W>6@KotLx(yP@dg>y6zrf#>*B9$j{CJ1*b_2@L-(-%+K=5G3FTs3W#96C}KjZOH^%Gr`VGuqzYn&IEfhK_?UJ z%>>h#pzI@2JQToCYr_6autW!)7xz*OZ6C4lzVHahy#6UA!!)~1PEJ7}k02e+QUJL! zQ>CMRNWbeR#N^y1Xl@rYsKqGakZs?Se3&;eH)?SQ#y$}C0%wLmR|@pt@JQR7D!~HG zQ~!ZK;Ulcdsn zuSM^PMcN2ZYl~okMLG#>i7}zX+6E~=4*GWIYe4VfNDN!>BumxqbbXBF7!L=0JjsP- zQlkN$0Dx`Y0MC#5H44oCX)_U--#`?3dkiCL&Y?LK;5oTMI55Xc?l$KZDI)V2 zz|*3|0AZWM1mR%HEKh<3l-Xw=lFX3EBt%irm>0F)*o)LxR$A6bW-A zl%RHMvow>sdm2b75>{h~CNfj~!~P=Gzd>Z;afv!>196QbP1l@7uww!TrcXt-RMMVbLK#Arl z0A{Letkwfa_<>Dipxt>8om^@J*7uPSoz^AJbBJ)x0}i6;G7owIg;ce)-oSLsf=Aq$R~ij61k~e40s|439M8E z3RMXR16^YxM)io~h@6qmhiI_T?NZ7xMs*s^u%jO%wu45{6R%SvXl6IE;Xmf2=)v$q z2|pf|humQV{fY(~XaxP%wNeNv3ktEeM~skI#OQWDjPRK*x13mDR7V3#!ooziE50%* z?!#J}AHQHGbESrU?Yp7`9FD)u6d-s6{hM?bS81#? zG9PXfeiv!1&)usV#0`S!as}y)4qs5vQ#AAs1lk=P`oRbP^yu&il~>BSM&%o<^UYCI zP)_DSIp2RTBa`bD>|2N;%U^e4H)+`4YFJA9JO%rNh8?P4y-A;9=Ye-95F6=PqeIls zE@lMw-$|a-Bxma*q~B6)<(gigX#Z*&&K={ZU#6$2Q5;__57n6}iSI z#zh5W!@74>Tsat!E**9X3u2mqv`z?bvp+fYEvWdh}M$U&vK2uKzyB-=ES zBNUQx(e1*VwT@aJ-Q;4d&=_Avhvlp##@(nR+q_LMszKeD|4>waNtn5WX%Uz!1ZJQ? z-2^g_8PtU#hpa)}F`3kyLEWG~Nq5zPxl33o8Pr{gW(2pAgSx+<2ZtCEnxW&skPPZx zlz17`-GMai`Fx39$axypsTnTF8D#$Fc(KhN024}yh zv215nZ`OP!!S7#>hi&fLqbl`Uuy}|f^A|*s#i@$S)DH8%5Q7S(q?wDZA7b1o=XU2J zK<+Xh1A7Ef_}iTS#PB>hx`1&)%uPxR>jJ}Ce7{4dN6%&<5TfQzcRoafGxyIF;S9u4 z;po|PKTNvjbVQN2N7hMob%H0r=MuTcJZh z`$Ogc+S5t=J!nVrlS3$-*WZ;|Y8;8I82{pp{IC^;6pgKjV#Z>{4_XoNvlUI(DF1|B z)wz!-Hwen8M#5H9s*r>=lCFdl3av<(wAO7xj_4*A;};JpT6YuU`NVjsU_4zgqJQ#8FCgJBvHTYTAnzkTwXEh*cv?#*L^41G{4XjW{TP!OQ_-E7Qv3Fg?$5s=mWq!yayW6bIaqcE;aTOwwr2=F!X)hpcSF9d!MpSAPvM)YKAkFK3h7712cB0OqG?A*n zj60_rukqMSvKigZ2WE!d^j{&RIy$fBMbJuPP@pgq#yn(;{RIq(pW9zU*5$FxP!W8iP05eu0V{)`l zU|V%U9TGZXVHN;?sin3#5?IJMMypWT!|_I?9SNoznI~c9BZ@d@Dl+H-nH^o=dp#N0 zYZPoZq6mAY3%f~Roe=ri{uT@Jq|Oxsg;6Tk&vdRYzoW!*6TE=vc45+rUE{d~pKegd zw@DAVK;vP{*v*uLd5y-iMesz%IhTN9>SXwg)B?9U6T^NCvRcB6fvY)rCM4gS9FJey zJXG*PTmOJO9kHcaRLK^FLa88QmA*m++d=xze^$Ir)J2FY=yIQm9)rdO_YiNQ6<11X z@n|W&M9Vfx2<{(oC4w_le&HL@Dd?Y?^Oc5Vs#H-Jq`oMrd=u>5B$_CG7W0~Jnf2C* zA8G7c1VSwzCa_eEUM`>s7vtS=out#dx3Dl6?>h@Ey zSMcKcEf1;u;UugkNR_|H2=dCLso2*;4}{rZekmmJyCqi z4<)a>ft4y@(P|ultVsQFZt7_|^;6Z_r{$&|s#CjF>Lt0UpTrbXJZJ&TO}VMB>C_)0 z)sC^Cp*h{UbQIBxNDr0m2*uwFB`(IQWxY2yYoa*Lnc1AIw*kcI zeGM9UgyQaQiRO|C#aV*juv ze+`J7uZWD*MArUWMDG1cB8Ll+*Z-g!1A0H!+Pd#cId>qML=kt6vqLfHQy*@lNN#QL8EhlMBF zrcZ*0h0AU8)7L2je|WTQrX+ZH_-Nbgk>H_WZ18?ff|eCS3p1P-UxL`D!T*=oVp&YQ z;{jo1Gor{!k+33*i5IJs@9C6}8>AX6XAQ8}<{gMeU0^Zs7KEh7`8zZVg)39}ZqWI* zNj@v~hNPO^Oa-C4(1ALWfGYW0Bw+nZVG(!wz3&N6$7&2K1cNLcAFXqTnET5vgTCi)k_Xoi(pniV)< zHxVn=3l^|jpKhB+Xo|E@FDr_JHN`nXF--0MsY?0VtBS;Ql`_Ja3oOnb{+mU45oxHc zO}4oMAr^ue>s7|5bwN2kU-5hs`Kz62v6bp-63 zttcC;t+^i^22THCvuVQgLr~bSHnrsxq-|p{DazTkST&R~<6tG*$)S`dH&Y^UG!jE` z^N?2ifW4R4J62(2 zIee>dVw;y~Wab8vvCRiHwec>s@+@k-p!Tf{wX}>Ah>UiR4CL!$jMya&sNFE_@s~q(ei!lV!NyS3 zd1?ew+L1!3Bk4d_bWs|6jB)nwuaL_OssRc;zJon$&e0k4e+68~idY?H6+#rf!%?*6 zubJhO!s~+T@|JVMtKRPl+9#7XnrmJd=a0-1yr~W9(b|$c?gTFJMXtpr*ML6ks6B;y zEL1nP?U>fXkQH|@M}z5tl-h}mRv>Dj&JhpMVW=))kmucpkY_?L9eIgsibxss=~``_oV_ax4JLbVQI$Q7tBwX54$g%#QB~3QiK;rzciDlkEdDwihzVH{|b~A zQI>zHpMj7)qd=OJGbKz0+{U{V2$1j4X`{+Nwhmo2suaIrZa@8l9)AZ`>V{#JLJXx8 zLn*|tdMD)r*Nw+u-2|oy3Hex-RyiW19@j5fJ8}gylf`xRyUg@8XIyC+ilA3>Chb5ye^z)&7;lc(P!?u zt|);9`Iq4s_OPeF3NBPqiTwowKveo#fhmBC7~-wO3XImBQ}fV!@%XVh2ib5g*1CHM zTOp4Ipe3$`=A-DnVg@7J*v`q34Orb^!8*Sr}MXxBD8gD~sb`FpWrMWmUVn`@n4J8@&;{l*t=_P7fr?!++(sEGh zA}ordg~FUnLFQRsm6_kR}g&=XTdDxR*4F;V%AMIt>cLoCU zbxwx{*frfKSu4(BU}|fs97cyp9F6S&JVJ(X1N`3O_#$1fiGs7tuZbh~b)c4Gj^hzf zwr8eixp>zI%Hv)|Ff4CiK6nX+)z|=F@cU-o0HybJPP18{tpfvu?2sSI^1uKPO7&rl zYtrx|g50{x8blG#k|LrAsuA1(1kwnmv1`dT*E|%e{V&*s02)NV2#EYsmR6u?!CTAd21Zlgbb3o@n3N9bNz7@hEOPsWm&HIHWC`Cw1ONv-(^9jD9$aUT zBYy)SFBV9$N8ATOLn!E$)Yq6nm8m6l3Ve3y^AV{_2ctR&3qY``VfcT|`YHjtikxSO zr#*yrS|%u=X-w=^RjJ@A3Pv9Q;dt=XXzi<0ZoA12zAD}_H2sx#*sXAW2^Z)fo}rF* zvgjqod6N!`IU(4&s!)eo>)_D`Vx|+YnMw-JK?U6w zLA`{h;^($+N7DuL9sJ>=aeS6iNYu1U6~CQ&vH=Yz#k&`DJhTM3vAu=yJVUDEX(}1N zl<_Rixb`{ zd6@g~&~9Z4V?3t=4TVg`_hvb7^hcD#U9D{nT$-8yey%SK*=FlMff34f9xRQz7pVl* z+6_l3NSI&`L-c}z4ny>cAQQWIE%POCky59SmX!h1jdS;F?Vgeph18^@3|2U=V&9V544e4d*x}!-;9N z*4)Y<>ZH|*qMtG*L$_VL5?sUkk0u`{v0R=|!8KDD3uOW97%#X6=R%ChC{lyfSj?bF zfEcGv#UgBl))>ymiy>U?Q~4stNDEad-AI8fMKW(wc{upA8ebPZ3ib-nfi4%~cZgPK z**KgZ^oLebR%f9_NnNyex@ZaHp-nADHG*M{n(fP}$U%LQ;#g8nMhb^-Vbl3G`YX*^ zYMgK$KACM%uBXbNKg@+GY)%c@SH$P2~Nqp3T#m4I^@IXj;(1SZw7VxT!#G%s}xaHn}x8M=o)lKpnPn&Y+a zlCJm$e;6TNqFuaMv4WnoT0zInA2BLn&i8>RW%@&?!@Lf8_}5`xtV5uCj3A;< zdbQ9^4R=ZalPYkQgD8rv`b@V8uzz^#-Da=T(EUXqW5p@n%=KWpU0lkzue=*f1Jdb) zp0u)OaS-OkVDoVw7!D|t^;AC>Rw&x23xNAQ8ge5OaC8LsF{46NF~WMLi$S_Ciby(j zHX^`V5!|W?a5OPdh1Y83*j5z4L6!LB>ISLfqrrVXI=<)-$y~)DxVCIUaNn|R!e7p; zRYgW9ZO(TWfC)GyxANQ}8smCl%AAD7O1G%2xyK>&j5)cLM7$yi*YKY+Md|?qx=20Q zMe=UIn%Y8pNyI0CJ`nd)3LK+zP@SGY`>Qj1D^rA{kXlL&h?r#bkvl+BMDb0s-D2j`0a zO-ahxdAnlNXoxX@F5)nl2uz+SF`g8PF7o@bH6mM<&-N!v+q_uu>6LvOI^Im#dAkA3 zP}ZfGZut)Dlkd))e3Ox{U-`cQFj25*t>aDl@$f(NYSd?4SUlxmMP_cZeLvg$8K!+z zWs0G64pa2B`aUM=O9x!v_a~Rd={9ROVAu|aR&I)PyT(;^%^r}IF5-N}R5yg#?J;$& z3m~IJZHslYpF**y5vU$#7NIguVqMhZaxv9@ImRR#sY6*UY@{Pn9nEenz~w~$eOYyA zGVjL?B`QaiEITT+Iw^0_Ax3DNge3L0_jpDaku$FDJD;7oFc9q`&}Y7`Tq`x=+njrD z02!Ha#(f7I{p!Q%>hcmyWNkHO!pqro0z|b#0pMsTGGY2Ix|7%IW&91^;RISVaU~d- zjy5W!HM8g?b~Vu>densWx``e{fDm+PFx0nk;|ni&`rcfaP(gwyoe4`ezAktqYuyN$ zNDr38t4CpEBbOwqF#!tTb$Q5(89jfjb;S`n2-8`|;TxmlB*{<_VrzL>1;b;2Q>Fpp z)kP`RVxXgp0Qmv-^*%Vi-#^a!H~XwXNb#i(!~zUO-}#L?X(C#1 zlm>^6s0n{)PM0tQnLm0hY83se>Yp$*tY-0k4zjqMiChCHGN)glI{}ni3Dwz^&=Ks0 zRG?)4S1Mz%!s}JW4SfVR3kFt!6!obLEOTO@jE+F61xrs-ExkF_auRZ5yerkRKh|3R zdR86PO%=H$s`I2aIXTjW^TFLjs|T@ru7kkTB_Q?p^kIw_DD=aauF<|jPqr$rMq{h~ zjT&8hb-$H$O-_xzHLG8svvO-R)1pv(PL8aHTT($?ne+TMsoT#!inl{aI8UYC+@ZX7BJMh)$qJ%0e*WMDpCjs;R`;)0jISyKb+{!*wd8F(<>S=QxdtS$n`gm$Z{ z9sNB`+YDK^3B~^_WTS~*i{-hhu2B5?Zd3%VOev;tw_(Jkhd2|^dfDH11RXL<^UDHw z^Ab*i^KoVUO;{-JPTR{;+O!5>pu7J*o*>0}@|A2_U7^oFKG>CfNhJ_?RK1vzQjDFF z6bHc4yw5p&C7BcpspK(@@2)()E?{Fo8o4nq)s~)usg?7v(KPzbAly77b5-d<`fePh zwdq~PSWK~Yg|@x;g8JiR*k|vAaFwCpP)jCQXtT=U*kWqJhihX!G+g%c?qrQfcZ~7SkQVAJsgdP|nWzrkk$; ztZMeMgf&ja;fkjW|5*TIQWG?WXio+5kHK43av*gyT)(uBv7S{cg&nU_{G>6GaF*@v z!)*CL%%Z1B%q!q#E;hlN*#u{bbMZ>Z9u%^#Kr6%~X}qQrO916q0a(H{KOL~a_Mo(4 z)%)W>c7c$Cy;!<4Qa2$mn1LIRsg)LN??~M;yzT&n>PBCP$z*9E-4NuY33XIh2BWQm znJp0Q2@IhM3Q$ceiUSRO<$bmwHFMmG))RRU5S)JPk;TGt7=VU7pNWYm=k$slL=@Z- zb!pVOcFlf)AHxd_<6UK)Zc0GZ(&KQK0r6$Js6DCCEIPK-3O?9e46by;%Fg5Q!m^NX z|1d~FqrymO3@#I_*^l)fag`W72HO@`XfUr_rSgoc#B`V6qopdayMbgpe)6M>_UFm< zSd%;kR-Wzwd5uunkZjI#N-MZ&%d&9?@b2Y+|0PxDML=Lex6;d{n(ZWM3FTh1JsFoo zWz%{`+EXvvQ^rduM|=7w?oSem6M{XuJ!P=;@N%WB`gtd}9hI^j1(cWm%3EXJs_l7e zQO{eoy=uV>rJ!#fhr@Uo6(j&(w^TL3)qB@Mb=?h>sv$Ce*EGE{kGVtu03ryKU2oO4 zVsQcOv(0IQ4R>SMV%wbk-=Lq8hT4wiWDYa|R{|p}a>1kqn<*wW*lYoox;QKG>k_Vz zOl;b)o1E#~@jEzzSale)NHQ!x(oSAfXqsunS1E?KJmP3|AmV15(>lrgAFm zU_~55g8h|=s&plNwZyP1Ze)R=jToiC>eigYKsgKu9;I}&aToy$FP~x{oY}#U>oQPA zy;&O=-dfZPp<@B3+?E^PU_cbwfV=eTS|vC|5dRF<0?u%qkpCTwl&EudAB@VTiY|z= zJR+L@XCwqO$XPqX*>V+1g%MGr>IGEl>$pK|Y76`agEjd4<&^8*XzgC3uE=_(=5;E| zd|Cg8+g-CaUd{GLpQ{8um(|GeW+>hhQe!&1VgxD$qNX1feV@aVo<1gb0WM$id?YSD zb_92lD;KMBes|)vTRXq+T_#m6O^vfxbdSEu*M0^RvKva)5NJFIIS-J7xazI~Y@`yq z8nMl8$E1dU?zA`jL?%FPRc8(orkNnXZj@%ABb z^I&$dscgSdkIjQ%m!`d}9Zok|4l&fj?IK% zpq^uBhQ|ca2pML_KwrO9cMP~`P(i?V9LN`g@3w-DOsSgP1U^4z435f;Df7_7|M$>m zkdIYC^l9~e74-U@gXu~+=6YbtB^MXnb;&P+NTaQJS)-J;_XBO|6Uy2X=fhLkpDLzQ zHTjHlDXK3FLMUKG`+Er1og#xdkGFr}pE5_r$wb!(XQHo@xdIncxE$m-nWBQ6VG)OP z9Gg-lU{mLNC00u4fs7$Y8A0en(En6wD3bGf$ASz!aM!Q*>}4n?#y4;;#Q+Qj42uWN zX-ufcxQT|=DqFQNQ-ThNc%Z1IXqjA)o$;5YScX@u{dbigip1kCHF^j22LlwZ*hQu@LooqB5z%A#z6q}9;+(N*h#M~2;y1=gLMGCwa zNl~5)63^!b3a=RkK-8(mjT*X)o{qT2DNRlNWr^C;(7&StmqE?33{W0uUbXM5inN$x zx34bJPcZ~d9Wy|YCa4KLVRg{|gjIf20UeQuKE(-PXaE|AtDAmmki>pp6?yPwLSMigeU?%v?WWCld4_oQLyb-OpeUN}Xqd|pNUMw*^s z$u=FiRRPS#0J8fU1)Hl5Q*jAJzv>|0HDV)i2awV~fRxw2`DKz`D&ksjhlxSAefbBV zU#nWDWVz^w95u@w&TwjvdY0h$B$%Gx5yUA4R zUcqC=9@t(#fYk>a>_O2UOBStqec1It0Zk01mvQrBR%I!r7QLt&hop373U0jXgh5!Y z6P8t{{A?O7_IB}#y%Ibt&Op+TTk*YvJ&9`0QIZ_zJ-Xs;sRC~AZN*qPo7P&?3T1?A z`v*lA^`b+=hMlH!(XR-4Zu{5sSL~xaUnpz7BAe}O%oxEd24J|Xb?;J=WSB!`__8&7 zSxxKJGM|#EEc!6$qsyx#rG2i!Ewshx>98NkKyu3B;Twz!K85_}$Ah18`f0$f&XEPn z7d1B%f_rPLba+f~uiG5N36PegT(`6Ow88DTazf|IHOaC7 z6sfQF=&mBj2^vd(9^KiR4Z3*ZiH!F6Vns(gXJmTHLNAHFsW{70Ky>inZCa*)f@nAH zf9St}1I$pK@v&AC>UP!)rC?jVE;HTMrI(0bLGtkDR z9~Y>FNg?ZZv`CwQ5C5^tG#=alOSMt^0|>V{SL>T~I6vb~7Odc8!BUttnWCX>8*qB& zFK{Sxr)R3Bh*U8r12>726vg+4x6(^BgYfb3N2Y19j?h;+>Dl8#D#%BtaM^m|aK@Y-4x?EVGl>n!=O=QpO#aLMTa8 zzS3rtv_;DX;WpXw6U)R7AHTSy`-Jg-DT8in(k}fo{ zrV}*4tD47q8vQ$^J5vjH_1-S<+-KPCygm&M0%wbWs)P!>dY<2yNpA&{&l@{}kJI(< z2yRx7r{QlMKs93|&=LF%&>47X<%`V!U|fJr)0mWEcMeq@qwcawF(8z$Q_$4jZZ+OFL`d9jHRS;iaVxCG6sAKY z)bv52gl@AMPgiiaSxs-MxQNxbL%~I?rd=v7?7@Ytrl(Zga>OaP0}kRz-s(JnFEreCVKIacGZ;J*THj@9&i6*n8Z zgkjzhH`{8uOU2E?eNl?WEURgmiko3IUaR0{SWP#mxGS(xSK+(DYPwj(Ra%W3R5>cG zrn6PtbS$i*j|7eBR?~?p?jox(plDoVH4RsB7g~+$R5>oRn!Zqy3|ftx7DL{k)$~^t zcY)RTS7e)V8qZZUrdmyps1vkcOx<v-+SdGu9xKpgAGgRDY z?ifN7YC2K92dqY}QX%dnt8pqq$stI9Y1{zM1jey`HyR%IS$VVX(weYIG>>amsqUG_A`lt00GB+pU%60+de2Aef_b2hk5x`i3KSp);w1bMQ9 z)WB-lpONJaH3;wsWTk)ok4S$8=~#&a_&+O9P8d%b42;f?V(NpEy0Kx;m#|e*I*yxi zki~<|sVm7%grht!NgqjRmgU-mVgc`q41;xU##Tv~sb=iYs>O{ILvfnFS)G)@x4E1M zjo#=)(GSI`bU7X?fsu(ohDt&AF%uFpw5DIo2W^R%f0Yf%8PK6Y} zB}vQx{2ycd?Kkh+nEy-;{Xe1p-*EJj&!NliL){PR_x}s(-(}te^8Rm^{RQ%W$-&f1 zK>bJmf_gLaTK^~1-@~eC@Sa`W3YJCV!}DS*PD$Z-cF2+esZ1dx*f(r?~jDuEu#q?@tQ6b+X8 zV1&_;sND_dW#|K;qcV~opi4v=Iw&vdEkpsYWIsE?y@93hi{$%PXGVr=U?R@?O^Z`M-eQ@-Hy&y?4NgiQx$-jtjNG_D9r1@aiwLdRXku7-H4cZ&` zBM!$tV5soHLl~OF!D7P;WYG>j{#iGCNN(|vPLPEZu3=z$$whL$;>)mN-#|!m79eMG zsu#}#QWB5ZmyOA>Ui@e`o|KYDdhwh%6nJ{ipwmb?&X99a9G>7vR5haLcjv6u9(xwN z^5E`h?QWy409N^Kbjhv!j$H6J$u{I>v8)(Z!GSp1SwVu2>-flUAx3+ed{D&=y6t9k zO%v*8>qICxLM?OpsbL~V%7HbeB+SJwB|#u_64hONkNZ=V67P?9;fTEtOCubp zIKHk7z!(7ZpawZJ$3A)MXyA1I$%~i_v}oLFn>n}yP^xTWs}&oEG%TZ{Z7Y}M1zylZ zbysVb1oK>c796Xtc5o+F@Hu?J4r7^CKZir;ap666JHXau*{*yJMxAm#iqrH5<6}O$DYd7w?l{SgcWf>gU{Caen54+;iGCTGa)^+S z{`)HaqqU_*1dF6(UC5z0*u^0F0?rLenNR0bki%)v=%P|tX_S@TgEM*H|G?;7xGSBo z!@6__r?7}$Zbj?MryhxO;as;D7y=Sa4aWX--%InjHz3-2B)aqZ4`e{=eDip+#{DVK zq?)v9lxW}i7=D&}V|!K?T6|5(G^`4NJcQfKZdhkz#iitgHjCuf>VTcme!Qk-*G^hg zDDoB*7w3{V9a(}ZNy9FaazDg~C(1cT>I3$)2r4z!Pump*va}y>!;xQ>Lmi-Dop+!- z96D!sU+VHsnrepxLVkp>Kvkzt7)*g3V>(J+0+QWa2j*PLdfe|2qXdztk0G}*w}!)F zO)gB%!31Q&9bb(r@ z%wq>z5NyFbEOZ-D((+|;tOe6T>d5pME^6sXEx_RvDqe}9S0nBPN1H|D-PknPy4*&Z zBd6}qLdYu>)&{u_9$f_a0|21C%elrUpy783igh*Fi-JiDW`yK_Gm6tW*4mFy7=Bf= zpYnMGkjE1>!a3!}`~STH-z(gzO8ys>hxxIxe_If&tmw|A$}G9&Le4j%;aJ;){%G$B zeU=rg0+>DI9!oUU0A%JhRWwt!R;bp*VCkxlR6G6U(a;o3%E8)Vfu=2O=BOs^0aANV zI>%LEgu4-kD$l9@fPEMg01MNs+5oDyXZarmWDLOD(&&%&r;d}ZhbPdTj*1alIm{vK_eJ5-y#n zCAe2Rvv3_KH`TcN;zIF6Gl=5?bNu2u&<*lPY{a7@I2XT0$d=nZaoZ^S6>GwH zp&h{PxL73@vM@P-8gF-2Vknus7_~3}^h|*krvT8G5c*g^w;;QbJPaW;d6$W5z6Lk@ zggLwBX@oh!`83mE5TWus+9mwf9R&`3EO09jb+9tXfoAc;OURCEg|ab;`$=x@HmdnTM)_P2o5uh-YE$3B>zVI6yFQ{^R3d(kFD#T z$GiC*ynk$6jd#C!mxO0@g8BK@hcAC@o!Z6d+Z0Iq$JUHCPDK|WJszAHt(|GC9Q4`s zGgmK~c~(AsvYAHRNyzvdGFD;I+HVF`PUP}eVaTYn<1L7{v90mo41l-Jw@wQd+M({+%ERjkv z>-^D8Ovy(y9yoUm5l{Xcs#jmgP#z|cYT=)6(nm11u z4MHW4ZH=}Lf(mxTq>TVDg{kmrJi(Jh)k6dfNNq|;wcL2{W>t{XSvrG#KjA3fE?MSf z`$j?WD{2mKH1~SQWV6zY&9DUDR68e}5RG*_s0HDxhpRu0OmJdLS(%C=!7?pcJIx56 z$lsMfHH~8~TGpNd7~G+>iR}DnjRDdBN{un5Kd4>a4AVqp{#Z5h3E{fTEn`UA6<;ru9a4|wi#{dd^9+y zW3&e=!QmUC^JZFtneZZhe<<*=b%Qj|jnUvzU+P?e#$_4!P&MAgRGH5LHiKK*d^RahAjUMvFa89v*7{124EPujCfoH zW+_-d%KmK;FlD7S*ujUfa9ja>ewY*@H^S{IK~=$4%c2k_p_EA-wnnmDr?9)RRU611 zZWkI%(hwCBHhf~$70(pTuWDE6i;Qsju9!9pw8k{vEUd6D8xXi-< zo7{H$aN=UfYHXH8ths)OCE18D0Ba;;K~^6V)S}oSm7|pm+BPA$&{}t)E-;GWH^&7t z^~4Ba!aOo7c4P857(FJTg0xhA2L;V&wW?(bgN6Z+tlx|=VlQp4h~My`{3zb!9yndEUrnJrXa4+P&!gn9enPwL4jmZ*7q**))W%h`;hbKk+;I2v+K|=#8_B*iU*+C4|un6_IM47ij z-?F+)Y4qA~uMDyg)KBT#2$W%b90t#2u12J@`~s1VQu65CNKgI;eg>))PZo3?{#_MS zO5Il_-$Ws`a>X7+SWG-fGktWFV9>}YIz{rxqoR0} z1uL~JgI43+N7o9!73xNwPc4*IN?K{uogA&LFzNz!O@$q-#Kyr(+Z8Ht$B0SrRYYr7 z7rSpL^|;Nr#|m8K52YgV|CPw7a-{W%J;KUzDaY)M6|SwQfO~unZ5=U&Pb4~wIMgOYoM6u$6+YXG88Wlw1OSf- zR$vk++H-;umrn!*K}Ty>30tdN?w?e`DOEKf(gxQRF4y;}WE2P8^EHs5-_2-ZNQ4T# zkPbZK)P)J#uttyCYjg4_PzY1%guC-f`T)F*{)E-6`*Y}<)wJ3ZOkUjzs^AK4wDaqn zrbhj9l@pv~xVa63C^(EKr4G^8M%m(ieum-04A(3)0s#%FZr8xCn>1^6bwPAog z^$3`=Xe~4l(%`hPXi}r9Lr&drwkr^=J;w-N#W&2Xq0m!NdX@<>IK46gQw=;dktm9R zbJcHbBQD)lrXH$g2o0D{v4yqfJQ z+S|xw(c16?tI;QZ%}k?SSV4iI$n|>1Brb6Xk8o|@&}c9WH5PLUTAtYLnlRR|_F^E! zrnX`Xf34W}z>=nK#o~C$<-v+Y2mn5?@jx-pF*s@Koui;_HMSxNKzZtu(XI}R5_Eky z084$f^8!_qEl3K$%#}n65Ncta>nBCsSLcVTOfWJT#e4$W&Alq~>ZcREKbUN~MTU4` zG2WO-flN1pZ7r$P?W~KsD@e)H4xh3wIW%quwm4jMK-Z(CqW;jT!m3BZ0!IdYm~9~d z3PgEuePJLaZi#X>`qa{eQrY0=a!NIfMXKHG@ay+Aa5NeBO&Q8 z-A+C|G>o9sf zC~o5~b8D&^OrqAH-H~AOUY+JChNG-vj$+Kh9&g=`)fdaSZcw1k>ZFV6K{AjR=IuA+8|6 z25`D866bK8h({wc6X8Rv_Tu^s7IJ{xl7b`t%eFBaPu>z(7F)x(`7zj=k1x`3_BV09 zyGDgYmJq@?!NVDLVrG8MZ7YGOBbp((3M7v;0x`;QUWx>bfjy4Dqe4dS&5&)tlWhfM zo4JV1m2a9EkT+*3K#R}O;He?FF)RRv)12>@YdT~pNA6mdr5qJU^TIm~v5t|zf2iz- z*f8n~?&GN#_frdceX#Y7eUmxOxHI9>!zbh1$CYYtE=|Y{bZmOvbtfQt$$A0K)I#dpi=$isSS5S@0}netkG29P6j!avb>P_WMZPgMNEC6M2B5`T2^!BoH2EanfyY}1rs7dq zVLG+hh_;@>lRcmH@3+Y zWj5V5+}cBJHMbxlHIiBQ=>oKrzv25P9_#K6bUaBbcdyF!bcFU{m0AhnYN`iPGiz(O z0&)an)Hz4UAZz_PAhjT;e{TT{8a!?!A5sTv4=IBB*FimXmBRcYdUg$yBjD&G;LskC zr}8M$TBLmsh zzj`m{KSTp~br=gQn!=3?m=ci~VD3Z;okJqz*k3_nEXU&@6cXxbCt)PiiY;>(DRE6I zt&$vCF_y+>-=IcVX|pzQ1|Y7KicU`jNM!|_};j8>hEfB|oZRyU=d4{PP@!D}l&220(LMfLRv!VeKW?LxRmXY7GG ztXEzE3b%RLW6UDmdJkfw!ETnDpA*<<-FZF6M|ksiW+i8rOK&aVp=|xFpgIeFVGmJ& zBaA^Qx=#2TO3^y8r;3W<=~{(unUGzy2PRK$5D8Dk{%d6q-C9bR1~w9COQ1Y?s{663 zzQH!{8`bqa1NGg8ZwArtiVOjLe=;a4VBYsAb&`t8%bIUcN`9H_K{Z$8q@A<%7Ib~i z`-0!Rj%l`8lLMluy{~F99a4&;aGoana#18sYT}R~SKCzs{gdLj2Q2h>9K)06}9_c#q{E}*_T z^b{oEhB}aOZ>?J>VnHP2l`Q8RxNw;5-OS8Xp18@~gy2k!Zl2sn(XAI4xt{=OMck&5 z+0?afVsL-G-YL>Zf}SDN(mhJG-7ei|dRz~OLlsY<72BTS?OyecVpZB1O*suoj^66_ z*y+0G;age)DESz==IM^$Zi)f<9M>~fUbshaXw`1*g=ZQs%qP!-R(#hnCa*=w9~hj(Hh$#4C-1# zuh6YEHM>{9uq3BbfxjppCK)4r$!4T(X14(2gp#t&dU_2bp?29(`&yR$T<-VFM%{`# z7TF>FTS(Y?$bW4{F4ol6ne=4isYUMH4v% zJASbrK)34M(!G_yIjh}WSUdLH z8jnbOeUWZ=H>-Bgo6+Lkdbd;;IO8`*>SdS4?ly-WI1l@Whe8#=jUR#r5Y|#(#d09J z%{wrlf0foShpi1<^u|VxtMYX0wN9hs`(OBxlDV zWUO}_;`^i8^vhmmzYqCJ;Oy}lHQe08;;VbBv9TH3;jxz)5jk^cy5(VG0!~7+q9xRe z&IiVp=DTM9YMc(U3|zJlOs}2?lh|7iR)+@DnE!zbQ2}9|CRQ0Q)9`ZQYM565MMlW5 z7_pFas;Gshy?Lt-R(HU^%SF!qbag~sPKwKEWp#6(YxPG%daRLPPY&_PkT~wjI9*Xc z4b*wvUj(DwJxc2^lIt1LrMM*zV1*octhihAWe@Ct^5_+L?9+-2F7|)cJrq^voWP-C zTEv4vM{oTYR5-az?eg7&u`|Df{vT7jPv#}GYyhdmVifqKCWgd~{O1oty?f6JGE z9>Z^VBE$Z+G>q5IoZ`6OD?(4FT?BW}ZXqYwcnQ2;d4^bNSrFT?og z9cD{v_u+^R6f{-b%rX>6BIqr9Q3ieBxjdudg5NeHquAKp!3X^LKJRDcyz7t3DKFz& zG;BD2ukf| z@PfJ$0rRLODV`rim9?Vu=($Y;s}7jZLaDMQQelNLCI?}|>A_DnCma_lPKbxd_o!>1 ziCksbM3Ap$?i#jY2>gD0K52>$&dHs)oAJs1fkx?tAomg3GpcP$8eRLI^ z0Z`S`qd*w6`CvVu-CQ=OMb=fO@pCTFX`rdV%|mMH6!+l3GsRcF`0+@Q5E;_&733%0 zRf$zX9B3+W#vv;jg?^@SEoI3xyJ|o7ECfVWRq1%;D2TSrxq}jNXNz<3(TEZwZybb= ziNi9y)c*D#N|8&Q=P-**8tRE-Kvks*zn=9F8l|A>l3Gel$&kvHXLW}EX`se3fFcIA z$KZkW86IT_sKJi-&~gY&CDD-$NY{3xb1PWtFfb{EBO0v~Zt_Efamt&5y%G{#0aY$R6z5dYY_Q~KKpqg_nk`awsEJ4ss9>h;K$3+~FwlE!NASss=3X8;vyl|7 zEjJ=#l@t#J952$dw$PdI<7}vo0Py{-IO3gLh#Y$0p=FEH(ZCfxT0^c4euM--5llRo zrJ$J?x!ObB3T5WeNBB6?yiC2+5#Md}TM<_Z!kT-0m5bbSh{tt1g`Rj_^e)e9xnLrM z6-SX#s!TGwGM_3*#9B4+W+XS@2i2JuDL{^oP=>kC6CB%}##+NYb2vBw4dLhHAoiLM zL^W^|9`&LCaiSN+SgUcZy)SaIB8gkK0PYD;6Q#9TpBgW^a4YiX=z`Xf8zerfU3fZj zVD$S~Txo6|`1!F;|5wj1G+Z87C%*sxspN3`&(-r=`gx6hUaX(z>gTEYd9;2O>gN}j zB9r>j&o}k+d3h#(eKF>zGJmM(|5yD{%fIUHhPRCh!i;@KJx|lmGxYN;{X9oMC+g>U z`Z-lUr|IWK`gyT_R_SN8eqN!U-_*~m_47LYyiq@A>u32ViZ8be>{R%d{qBbOq-o54 zr%B2F%g)RA3jE*ky8{PWr>L_FjKkIm?=Nt*Pviq9#W)K8YrPZ|2<*t^uc6O-bD#GO zecm_g_j7kDJYD)Z=vnpd*H4#hd7pPTexPUg<^{_Q{){{C#v5nPT0YO1vvAh(<;L>x zvdEmUu{1J!;et8F(q#*7ofV#k=aTTeIpKM8jm7hBGv>})I1iDFXDynyeCez?^Nh&y z1&ePoZe6e}9GSJySg?5Eg2nTU`O6l}TRa!LFBdIcNE~yPEM6X-w_@osqj2={LSyuD zBY^*-m)|%iykr@lbM+Ikw=P*Q*9hQm^m6k9^OP9`@E5yKFz?iQzAhLYcP4mtTES)oF+?=IL0}B=} zjfBTDbnUn$_%uRTUav1SmKk$qEnd7N99Xh+-eS-wG;YHc^~R)0#(DUiY@9dQm^|4S zIoUY*WMkE;|JB~NfX8)J=N?(I<2<-kp16>NxvrBajit!4WXs0J<48*EMz#lAP88>H zG@3ah4W1YC&?5=lX&&GdzM_USnA`-$Ce#8#BSKOPp+P{(HJ1P)q{SaiL6nfXTv|j3 z)X&9u z65QHo-M-PfW#fEhkMWDV{wx(Vb3MNvD67|vJM?-aWp2(66_O4T7)>X`@l?RcX4Ba~ zQ}>Q-o40Pi+)}rxWEK+PY&<_6Xxg>)8r);Yju9stOQc5w*>GyekOj2JuKQF3Jp)9L!*a>8vTp^JU z#B+gsIvvO*!-)h!fkC>H!A&FwIoGs%d$+V=cWQ4cJt|Vi?6#BP{4f&RboqMZ4)T%8 z!6id01D6b49tbpLo%~2Ru@M(%NKbLP4SpDH9$nKO$QDxhc+v^P!tq2Q>(HyVaBPl7 zVFAiuCNLb%1yboiJc$z1oI|ybr&B2A*YWE8)`F8AXOUrR3_iak8WEnbu6sDMZt7Ng^EylkNbuKIuq05kQ{hh;d1@ zMJ8{dc!Tjg^6gf~izjQrHkH77q#ZSZa+?*3m4SRXJLKfyIow(q7>_%NC|w`}0`PJH zf-};Prc@!3K#6FwQdYrA;2#x_?cwd#))ZAi{Eeqj2pNmbLdZkMH-)>>kwfo(cGIVi z47{i5PrkD0-^V{3I=B1Vn;L%oj)yL2zHdX@o@;i~HKA!qn9~(OPA?SnJVC7@=gYsd z0xz#Uv^cwV{L7oWUY}b0#1n_#fAueZwdtShcXV!RyQuY7TSo8Lv*8Q5|Md?$&M$ak zXu;3lbMym`J^SE>)rThk_78r!b=}58FL(du_deS8& zaovmZ^xP0+_k!=^bl;abecN$Hi+8nbru#GJL>Rs6J0D=w`TEz12JF(Jt3Z#9Y*|b6 z;C*jMf(C!|VCzB9iHo29{NI7LU;2x^XLVU3{Z{Gd-PgB|bXiBX4<*0&i7tHSdEkZq zA9MxZ`^4BqkDlKh`sqLZ-3xEHw)@_{-L~YLbH#4R^*_F)w^NPf*JbS*gaqq6k{ZkI zmtR{i>i9`94w53~X7u}0S>B$?`?F=&b7j{PqWzWleA)F_+4b#Z*E40;{bkpovg=}5 zdOFL}A1u4xQg$6GyDpZ=pDpvpblLsP9^GG!A^m!w41Y~m*ZM%ySSTFX8$ern&GoD; z1vfC(xyD}8etBS3M@w6as@b*Sui3u4T#(3++T{JV?L8&`lZ~XF~w|>$39~}c<)5n3FtFIl(G4euGu3LO{p7o1`;{HzV;qlVz z=@C<79ivwxycA)g1)M7pCi*0vEr$>$`UU*H_a=mizIwi84I@nSLOj68BOCx-iL;1s zD=59E=`MtWpts}PhcM9@ocAG2^iQ$nzJxH*?q!zs2*O0Wu&8<%VWN-Xd>Ub*U%{T+ z8H9;m{YJ~0MVM$5=T8tO`XJ8Z2orq{XT#ZbjDGDRBo|?#?^zDJ5hnT!&L)J3zG($! zhzJvX6lV}&qMvTY%d!wAx~JW;`Vl6&{LSzK!bHE@1wSB6^pCHB9}p(`{I!^UB24t0 z?XVBw0H}>~5@Dj>!TC7CL|?->jj*-Dvd+Z$48kZ+)+0EdLzpPal{Jen(bGbh^b!Vi z!&@!uWrTyEAH~^tP939n_949p6TNXa(u*+BgE-p}CK|W_=|!06(>Qw(o&jCI2kAwa zXp~NbF@Lgte3NBm5S|15vzw8}2ov3j$6EUkCi*j+_aRL5Uu@(x;X!|e^AUut0mQ@k zIKo8F42*N}+ z6_D=;6Fq$#`HnEr_^l}O2oqg*8_GPwL|?$!fS*7RExiL}0AZrSc)N7@k%fM#*#5hnV5oJE9*w%lh~ z??ssCNA9<*{RmHiPUCzSVWL0&0LlQuMBn;J)OUmjK>r-)(+Cs&*_(XAxu1a_5GFcv7=A#Q=*^#lK7@%jKM6k|O!U&fh93|n`p8r81HwdanuZ?` zCi>?%A4a$Y`o=E;hj0M&5YEF0Pk}ak34TDh5p)FS48ld?;d~z98PE&93_l=@=S|ia z&X)-TiswtXS;r`zEm=zuCW_}uRwKeh@odRjhA`2majrlZ&zUSdV?z5~$0(jNSsM^0 zdIipIgz>D&x(R15!ULe6z}b)R6zBzCLHmGk0CfESpk5$c1byhM)CU0nHOq2v?nC(0 z@gL`bx`suI8|v#qr!TEvymTjp&{iOiC|53RM4scMHlC;-W;ghI1%_zdnGK82tUJdd zNp&Q%jmreT=gj&gcPwfx<3kVW(y$&|7+=^`RrsvMmz-69T3h|Vq70>_?zD!*r`7YT z1$9U}y*5+$USWSVHZ?Zf-B`c0?m7!;JbUroXV;%z_ijtrA@23jy$c%dzM%ep)RmUF zxXY|X@C@t~xG3RBXV#PhOsk|HdtwPUy7%%@`A!ojFTdudw zqgTfDVx;Y7HtdFf4>JFr+2A1jB@w;^;j36!lpRl=c;k4(ZhX?U(_=%{6ZZ0@ZMq#^ znQqv$qW~NKk=aQ49#cL-oqq$b^WO3^U%1>>uYKO|vqHX~??gQb$a->)C%tW+aJGuD z7cb>Vo#nQAvG;mp?-b$k_Al$fJmv{YJjs97!@pO_ar41z%Q@5&+3 znxyPr=wBO3k8+_Kb6ni zKmXP9`LeohwyUoTJEgG8DX~lJ``K34gI!74a<;W^(KSxKH=N7&(8epQC)97n_7?1z z!hV}_@XPhRPI$y%TTKnyupcUZ6?PBxrLT`iovz_<*81S$T~2;?YB-#VCY)%`Sj5TD zE}*O93D{wMZ1Jvy<7BL_FYZg^V8V5@56Ak=VzE0(>@va{n&hzkN?7AsA{F$dl~yZn z*>;zm%Qz9*+huc|NX#lntTE2C9sn1+glHEU zwhQH~|BY+f>f@wFtOqHa9u&xfxXL+sJDkbb`SFZ{6#&jD8?v3T zc;2$UZP^hX`T;`eWD*u(Rj|&+9kf5xjPu6om|8d~X??HG#_p-TR&%{wNU_jM z_1J^SB)(i99!zKR)}jVvGw$JM1P%Poxec)h_Pas;>lvOdT{ zgnN)eZ1bOGeTc#dm}`BQLMdz?vkveOA|2!*MEV4U@@Yu?>xKe${~0RB{5=}rp)*TV|KkJ#yjYP6}nG#CPspFIfPI=(Jo(JkI zJaVJ6sHd%tt31`U3$$Q?rJ!6PSqm*7}#KER<`nz#?IJY%5lHTiNmtQF( zZMbq?i5sr;YTt0BN(9B-fP`nT8+tIFpq=a$eWbz3Tik#R7<%A$9c){*GUhQ_2qjNz!+QV(JwoYetbI0nzbvx z!|Ni=(KYL$?cw(D8fSIqNwTA5)q<9+imh3@CbD)-b7!lws=2*w^}6PD9fO0-ovWj* zu{F`wXm~BNB*1D0N?`3-v#NDLOFEs_*xK-_w&uau;A-TJ)7gxi>S%87j72+I!>c;N z>sa1!OEz5TDV3~hT&WdyG$mKcw&X1pwx7Gr)_=dy3~#>!rKVDAsk0O;Z7GFH{iT7@ za4Az7D-}!oN)x61rBZ3KG*voWnl1$o3>?TDC?1$NP&zPqVCul(1Jeg)4p_5zHVW?* z5AHiSad7{^$%COo1BWt)iiai+l@3iEnm#mhX!g+DA#1X6GBDXX8JrAF4oqeyi<1+R zrOBzu>B*VN*~z&{>tl@{3w#WM=CBq4vg{)R9~u4#0;i7OiU(R^=*=K`2Tpof$50)H z`p%fsg1L}9Fr8&r)V(jkS#N=Z`5K-kD-LG48RAf$aSUBi3>s0moZrLMg&ODgaYYB7 z6Rq$)mWF}q}!y=vaprKYJ`dPp!IcRs~dF@u38c{ zewjFGZ4h^OENrf@u4bHorRzEuTowzxT{chBxh^gTvsT3+++8?HmYJ>&y3G!3ey|1> zu#iC5NML0uV17VAxNE+Y((Th=Y^Z{qD}kA-fT0%_&Q!qM49vi33)@4l?{BPN^8wOT zLC)U*GhM-+zXxWj0_JDH1S;5bI*QF~1vx8#DOJF%2WFxICIrlMg|v?X^CU9eEMuD} z%h_=cFo6oX9s{Pe0_MBG1S?<`!IokLn=b<93uqWjn>RCi<@(gCi#bNGgFHW9~K;#Ue>k<%piX1EDoyu^>qPp<&u^$R}f4Brij1#h@vIq zVyMlluj|9#^Kt6ODx|$tm9fk9o4As#G1)Cz7;=KbKYG9OHl}b0%cv9x;AH8thHU&S6jx0iPCiYoe$c~V zKYGWtWwBDnLRskA0@rdm#JU}v+kLgO7UFXfr}c)rWI6log9!OD{>>btx3pZ0Y(;~to>D9NEF?Zn*{cq-6`jUCILmXih@L0_ z9;+#J0m#u0*@{wW;;m=^wNXE0D@v^hk_UUv1ExmggL@e7k)?pTl{!9RqsW9I7 zBrrkvlD9v2aL01>JHC>+V40`fX7bPXaigrq7cQK}9cFXc{DLIOJXPB3U`p8`^K=rq z#Pf7T83J;|=%NS=NvN+Q3^Jzdp!}Lr`E_~OU3YXbgF8IGQsF$C%eWaP({5n^Nrg-A z8M#PVo=J|Ic79L(m1z%2&(}4|TN)*sXREOJyNJbY9*rlWk#IIzo6WP3!)^A-3sDCL zl+Bu{>Vj-;L~#Itf9Ch|k8z*djE8_UWp+)r=m9XBMKeDK%0_Wqm6;dlfXWV;7jxkA zbd>>cDf42Xbjfn~j4Fp1Fq9p#96qed;aNbC7xaVt6Rg5NFC!ZFkB!#}(bH?!K{D-) zRg}XMOS_rxWIfrOslw)qk#=r#K9R#Rw`(z4D|;+zhq3?uTv0YS2ZNfT;*c)-nlw*W zdA`3wx7l$7m{5h5?fbwy;#+=Rm13;_2h3M}F&tw0`QLDZ+Di90kusK1b;qplEpVBX zN~Mdh$w&^Tgjum?&mOuzFQ#i}--`a;&Hd7=tnDq6!!dg@3t>b*SVYC)b-5Kns1q{=6SJo^A;^HbezEK301^&ZKlt6^0MmFKC`mgwI{d$hBT88Ep#PZ&iwsX zukv9MJ8RrLCmHhnQ;k8taUCJh?}$|zj-mR#5)zSlp5sK?mIeJR>hiRz%YOh}`XT$c zmvM)WwJy{FxRP~{>M51L`nvi1xYjCscpc=3x|1J{Vsn$njnY5C%_mZK%z7dF_l5jJ z38j1=sKVv}Wiu^3joQObB7Gcouk>nW?+tUE z{cDKlehwf{NwPd*>2mnJLH_>l{ijZ?$ez9+28(?QTSogXzfSE%KJ4vUblRHkCJyF=w_^ zQ>LpZb@xLKuic)ln{J`A{t1RmX`cTDI5WQawNIt!Obox)|Iz$;Dm~BTP%3DRMXx_6 z;(2A^0^^o`IzFWcM%ReWQgUTCqNOIXB+q&CT4(jbL!DSBisvIPYnbTCli&f;{x4k)- zqz%ClWtB=hwh@rSbRTk;&dEU(9b5#sTKCU4C+2QoBib4LFslq>FW&X+Fh26+k<)5eFp8;%WGoO~enUczmZv*p!FJ_~{ya>z> zuk(|$Nnw5gO#FI3%w~l-9o^a!{eGA(g?R%oZ@$3~)1xp~0`oOr%ry$L5t!{a`^nj= zFulOsKj4SCR$**lzU7PA&M>hIJ^QyTReqRPlZf?d*iSO;|Ki8(z=Q_5KYdXa>lSe*k8aR!FfRdfdfX3llfo=ThY^39ALbT? zSq99yy?&Shg}EG<7kn{;3bP)V5-PP>!lMck0_GiAKTJ$vBEa0A^TW_S7=9Fh`FWmW z7MdyW8b>XOy%IYbWOPQ&)@GS@pDyHRxti8yrD|~ z38BdX3^re^-Io{CBGCs@IOcN6R#fg8pq`qK(0DJCONk$r3gq4J;q)I@_94fRJ-vvj zCr$b=2sUMo@96XdTI>*n!c0K8!#( z6IJ-Ip7Ec_F=)35x{+>#$hfXVt|{!(F%0`q-e%#_0X5SW&`{B&_W zau&($p}e>g1r`52$H~r%yvhsell4QkhutbK2t)N*Kd7ynt|Bjvs=OG&w~fN?5`+*p z2megHi~C1!qrSv^h!2(I^65cq+84w3n&I68B-{G&yXW^ase2W=is+lkyMDikAj~p6 zqMO1fZ9a_5FK#o*IdB2i&nT)oPIi7htnw?MbjX0rFUnK=hdnFs7YX$ovj57c{%g#0 z*9}sh&Q+18KXLQaw|;fNhXW7!<>~XPUUUKT=K`aT6TYV~Az*&?q51Pv<^|V9X{WUh z{W#fq@wCbd^0R)(yx0#6{`=+y#UMWi@Z%j`#xB=|;7X1YE&)J}6MUL63!kd82IMS~ zNqHMMQyOO!oZ^T5^5P}st9yWX$rnR&Fn+urm=y>7ia{!7+NvL zXG`%$jRbyDJFTVS!;l=n520x3ioAyRZGxl5HjMKGIG+@f^%C`((*7l2{`H_=iK^pb zA?X{yjDN%rQ?D@319RwMKg?op^o#X6WzXw?x%uOMnBP;F*8|i12|vu)3bP!TOF!v{Iags;0`tgU z`eDvjm^HxMH06ikNs_gjmtLw(=i^5jm-3t9uUWg#!yUNBbI6&3sws8Ux9f*ompF!M z%SX9S>i}HI+WmQ8@E`U(gTJdaoNQ^Spi)BX>pFE~1e#iaP!%me2XMRvh-KKf`Qov0 zZx?zMd|0Z&ha5xp+@{$}7t)6VvPAh;r)NaQ>M>u?qk6 z`1mK`anKI`c-EA! zf3_kfRwx((eTpxJJ4)75jv*gnQMc?k**<)_3LloL@ZoF~K8))=^cFAdab+G#G(P56 z#%^?dn81wH7o+=-W5|cGG7p~odOA~u52-F!s;7;Ouou=Y^h|18`4DfFO5sOQo;oTx zRrqE9_1f;XP53D!Leql@DIn3f3E(m`{!5{{-JtW z$v>GY{PRKOAN77W+p}Tbx|!PfPy5wD?grULaSZvVzY70gsyNSBqMCm2%vh6Rv;kjLqMM=c!^=9R4XT;2&~E9vIqo4pH!ro^~2QOCNGMgn?n@{t>?n%BZn~ zE(a0R%5611q;V8nB|#L+&)9XUf-y-=^$g$IpRT|9Iv0kjo(-(k~@3 z_4FKa%vMr9r20-RfqR_DykME~;WAf%2+6uk^_}~WFt{i?Xx=nXg%6J_ACiD~Y0H=L z1*fY0;W~hs5gyamAzxHpUE#s#D-6dJrVE(*C%ETzIX_mIArD5E!%dMbEw_hqCx{zm zo)<0c)CuJdwZ{4(XTJ2d1m4op3|c>A?obX^%AJWSa%U-o@L4VC`73xsKMsP^D15k( ze>jHxWA1j5rFUBSXa1fjRK={eTlvSwhhoH*D*t$#CxWu|tET+)SK*&6Rrn`x4!3ln+15JcpX4C?GwOW;COFpA z0{)@oJ&$Zu=~81q9*aB{1BS}Fd(`GJT?R>$EmE`!kM&jIu}~Er+p0W97QAK@;h%sL z_^ZnODaVk1Za}%w({>{M8K|N~%2eT>fhzn{tinGJqib+m?8~t0ND8{nt#Nv;eu)mskeNjQI;`!3k~n}j4W5JR-y_YPA%j^vDdNmS>6WMs})z( zwx~Ig%6F?JP96M;wZljS{-bpgoQ?^2PUEys;=aaNvjm9}9HD)(ChZ9b(Ij`!-VBY? zK4oaX*w8*zllF|Ey<})VY-n#cv>&cXd*0Aa`!4jfPaE3*$k0ArllCz~JMAgZwI4CG z?>R}@Z#T3bHnh(e+GB?HBQ>SHXlS1{v>!FJ=MC*MHEF-g(0;_wK5J-ym!bV=P1^Bk zGCh|&W(@7e4DAmX+GlIh{$4{n?cV^?ZGYP54DFMK_G2|^r(b1ix;kbJ?Z*x6kDVm# z_Zixc8QN(Oty#F{DMR~QO=;h6XrD8*FEz9uIZ4_dG_=zbdo88yjfVDT4eiHkN_)xB zPJ?k>`!YlO_YCdU=W6L;A2zhp^Lbr+z|j7pp?zsh+9wU|jfVCnL;IYey|E_kj~LpQ z8QNP7?Y}m(FRMvA?X%MS+z~Le)AMr;vt|*-V}c{bHi4S7)9)fQ$sJ9G_MoBtEJJ%! zP1+9|+FK3nw8ulUaLsv!_STxTf8NmEX=o1_+AlV=ch;nR+Rz>}wD%j@FEz9WYtl}? z_t3oBvBl6nU}$eKv~Q_N`w>HX$k0A)Xzw(%hicOPjG?{X(4H~02Mz80HEEwQv=12C z#|-VXDkAbr)c1j!v_EHPA2zfX4edJ(?ZY)`KWb>t7~1z4+HW$nXKK>^yrF%}&^}>k zj~Uv>YSKPyXfGPt_Z!;thW27j+FvlV?=!TQ4DIhUwC}4)`!PfNgrR-X(EeUS`$SFJ ze`09gZ)l$~wBK)N-(QpVIYWEN(0!9Hf6vf9Q-7fb9k?VhRAaar@~2MP2%K|WBK7i zYA^QWxRQkr>9ZjyW_Zfr5g>vm?I{Cq+1lu7IkTsZLU6k05G(fP`n-1yU!2u4Eu%{?(md{Gs z_d_EuEyA8PbJAwj$1Rnm<%G0{4DDlv_6bA#tf9TJChfh3_Kcx@pP~I5hW2GOY2RXK zA2zfX4eis0_CQVAyAACFhW0T-`(Zl3j zhicNk($L;&Xy0OJr+qSd+WTwL-ehQRGPDN`?TxN>(Z?-cppTRNyDLZb?;c%p{YR$a zchJ8hS=@&U^zW|C@)^CyW|4N<8&;`*ANbv+tG%Ssg$}yxkg3=wb9w$Tz}kLUHtLK` zA?kOmJu2-H_lr*W`kYj|0a1C{1O8*S-(kL!O(A6ujUh28Wur-HEvL5tvk&Q_yY=(D zKQjr;7%->^z|am8eSAogZU<)Bx%^J~u6w#q2km;DU1*0%HkXZXDEsAiJ-vHBV&7_6 z@@?42NF4W&J&;9h!XgX5D`8)m=PL{WaOijdm_}g_=X{ndRIv#2H{i&8=a?UWGl1Gi zSDf>6aOiM3i}1_xCQb6$;LHKQ?IHBV;FL7ZT5!m1E~bm*h?=sYd;SdkI&B6C=Qi6BXNkr zWr#(2@!D(Bo=xD;$0=P-KXGuNa0;7K;P9O)QqDNT1U#|c4-S=gSI(p0=;`_*II{Iy zMCCAHqn^vR@$;1a12DAeNLRq%rKt2RO7frU!$q(+qtcFB)-rHHDtCyp0-U9)BoJp6 zIPz`tTvr!3B$oS-F#X`n;HF!m;^6417zgK=hItn_vzk300*4N6bJ9t&+BCst(BwnB zUUOuy5VQ6x4xv9ra9K7x!jn5U0^@SfX6DlgmWGOO3to?<7AL#IXmWN#v37(c0#uS6V&R?W^kUv9ZC~V*A3w4Eq0t@X{F^)z!}guli;*!7JeC=jPgb< zK9mZhtd=y-e*>71!jOeO0;f~iOuw{^Bs12G7VF=Das9(EnQ`l=hFOAl08MKp>QZnf zH9xNgr&UWuA2>xV6)ECqa_#`{b}g%g?KurL*PuPSj^^d-a4Y$ z{BeqX#)hsamMR`(b~fm;PCy%64MDzld>n4&d{*M z>eTG%0_M2FkmQ}<(Ae3vX9%1rWlt=UNawI9+@#4FC0zHVsHbdq@&^O7Ddnx!S`ykApL(Y=)ny_*j#gJzpeylrCtG(`ZmH^WOx< z(tP+saQN<7>BE=68BnPpt6l}iEt$l5(=vEf$$_p2>2garVcLN?qU6NrL!scdYBpaB z3}kye9|cEmMMuCv(glY9<`}hLt#_Po7chJutW3rGz!_HBNy`Cn_)cAkd5kz(P5Cl7 zTa=$E*0;bZYHi&M;52HOUxFjo*?4}P@%!Z-yBwU1vL}`)FmG&8-e9E#4wB!T;&R?X za$p6F6lLRDaK@AzvhWsgj%%D0IIWt6w}CS&WN^vvCOMi9OW+*Vf>YGw+yc&=*7_B|nd;;7Z|G~^hW|f5`=WoEt zXmV!2k*kH=8!v+6`jBER#V4eKn&k7qnN~iu3n@N_)+Dz8Q_@ng5gfN|k#GB)Q?cls zV5BdkICQlQu_jbWxCK|qa4J0HM8lbkH5|^_kw`wBMN`gyMjcO$gcI>-h`#absKsCBw4x>J#4`D8ixdR~{G-V9IaND93<3D)XnX`;TjHwt5mzVcRIZrI?87S7;D)AFOK#x1@`R_<8dX&T(V=nvD#Gu{;zR zb|QQ6JvdhIY$|z1L|Ode`9wY!#b>B(ynsAnI$M=f4uraDaJfQyKHSzMYQt4wjF6&* zOd=jZDY7#eG%fhBnez3mx88~>f^QewS!W3E-E*>bjB1ErMx8SDhsm=H#qc z9D^lxVTGen8%rUBs95ow3~>fNubm%e01h2Op+!|-pH?rVVIli{&l`057|ltVbXm%i-Anh5IN!-EOO z!k1ql2L4G$Fl_LRPqnXp={8C6Y?s)x^s=4Eu`}Cq{F#kGHDde zEhP%CCN#?b&fVMlwr=aOL%Vu*cki%w_Vn)P;*RLq-VJA*Km;2Lx4Uyrb{n#$C+oKD z*>Ifln`M~G#R8n?%Vd`A-(reJ9iL^gBb1S>y7DWQBx|oT&T`qN*HQvtkFIHVQB>e1 z!nm1*A5p|T_my<`Q1O*oyRUbbYFfPC@@ppD_?5eT9ra4U&ke!I83sh%Zd}PFncl67ceo2jyoef9hV|FI3 zD`L0c87CW$*ch1)0V50^8n@Ol0lgYCp9t;R^4VpW}7`!7t;%VAqt*@*QM}*K871&q^}0Y^xgRd zZgUY>4_N?XFMNAm-PCqR(y15<-!KhzP-HOd_2UuJ*53PqPLCBG@h*>6+~=l>cb(Xg zj1P;+;W+Wm4=>JT0jCe~Y&LCTd-GbvJVm@O!M$WJym2qtkf&u$N5|?8SVE;Bjwh4h z=-@aeF6c4m9|G6{&mV1|KE?;pyW;O&jQyO%>NY!!+~9o}D_zt!tCC2sNZ@lRj3c0@ z+cU=Ec8FyuaRJ8-+L1yQLxnM$26{p}pNH*o^1D;~?NHGkIkUPto`55u^*Fig+Z)oQGb~vC}aULaiA-b&k$}yei62I$B6L zGz!O)B63@LP99;TcT2aE zz~r2oTFh4xYEZ+%;>rS7fYy$&i*PbG zgy}Y(zq|4H60yimzRXi50!0@~YG~Bl3?|p1exTV+(eq*zK@MIOqe7+Oxnj)gg*Cj_ z;VoldB8M`Afg>AY2<7x7Pgz2X*0zn0!6;YoTiejN#IHgf?n_@Ek2+l_H6oI2cVPzR zL@P|OyFfn+o)jIx0y3LENiI_IgtJv2KvQnK*EkZjl36A)#qn&IZe zL={tl6_FA^*Elc4UI z-5iZe$UosMmUhZIE4M3!g;dL>ihMkU$}I-U7f_Yl}OAl=X!erJNgPmn@k)3=f!P@MIr&?*=aCLhZRovw|;Yt2<*ahqT zwpw}PXxa4jrB!?AHruvmGAtW*TDga#wRr{=F|ln&shw{CMc<0PB+eF% zjB2Ol{z5oA5kaFHbuw5Pl-)PU7CjpUy;C*TeQVX8y99q_$7WMSl9f%| z<}tB@PanPcIUSt`#^#=8n#|?9B@nr%ck>PQ)@`93*!R@Eb!QJ%k{gs|3pTtEt1T4i zos@S#!>dAGiG@jOaD)2q9VL))de>W~MwJ719z=26#SpsErcu(p=ul7_XfUEmq}D^v z;|p2sNv_#{iCuWAt125TF=Hs#Y4DBW%}nLb-?191me|YsPO61`6 literal 0 HcmV?d00001 diff --git a/bin/pcc.exe b/bin/pcc.exe index aac99cfda8506f0f05e8b5b2267a17c0a4f1b6e7..716fe08e613d5af051da4cd04c5d7c3c93a2ddde 100644 GIT binary patch delta 98481 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 ZkMq98WOx + this->y; } +``` + +### 3. 成员调用 +```cpp +Point p; +p.sum(); // → Point_sum(&p) +``` +`p.x = 5` 直接用 struct 字段访问(无需转换) + +### 4. 构造函数 +```cpp +Point::Point(int a, int b) { x = a; y = b; } +``` +→ +```c +void Point_ctor(struct Point *this, int a, int b) { this->x = a; this->y = b; } +``` +局部对象声明时自动插入构造调用 + +### 5. 析构函数 +```cpp +Point::~Point() { } +``` +→ +```c +void Point_dtor(struct Point *this) { } +``` + +### 6. 简单继承 +```cpp +class Shape : public Point { }; +``` +→ +```c +struct Shape { struct Point __base; }; +``` + +## 实现形式 +- **pcc-cpp.c**:独立转换器,读取 .cpp,输出 .c +- pcc 检测 .cpp 文件时自动调用(内部集成) +- 用 pcc 自身编译(自举) + +## 测试用例 +```cpp +class Point { +public: + int x, y; + Point(int a, int b) { x = a; y = b; } + int sum() { return x + y; } +}; +int main() { + Point p(3, 4); + return p.sum() - 7; +} +``` diff --git a/libpcc.c b/libpcc.c index 9109d41..5525a5e 100644 --- a/libpcc.c +++ b/libpcc.c @@ -822,6 +822,7 @@ static int pcc_compile(PCCState *s1, int filetype, const char *str, int fd) } preprocess_start(s1, filetype); + s1->cpp_mode = !!(filetype & AFF_TYPE_CPP); /* C++ mode */ tccgen_init(s1); if (s1->output_type == PCC_OUTPUT_PREPROCESS) { @@ -1196,8 +1197,10 @@ static int guess_filetype(const char *filename) if (1) { /* use a file extension to detect a filetype */ const char *ext = pcc_fileextension(filename); + if (ext[0]) { ext++; + if (!strcmp(ext, "S")) filetype = AFF_TYPE_ASMPP; else if (!strcmp(ext, "s")) @@ -1206,6 +1209,11 @@ static int guess_filetype(const char *filename) || !PATHCMP(ext, "h") || !PATHCMP(ext, "i")) filetype = AFF_TYPE_C; + else if (!PATHCMP(ext, "cpp") + || !PATHCMP(ext, "cc") + || !PATHCMP(ext, "cxx") + || !PATHCMP(ext, "c++")) + filetype = AFF_TYPE_C | AFF_TYPE_CPP; else filetype |= AFF_TYPE_BIN; } else { @@ -1244,12 +1252,86 @@ ST_FUNC int pcc_add_file_internal(PCCState *s1, const char *filename, int flags) if (flags & AFF_TYPE_BIN) return pcc_add_binary(s1, flags, filename, fd); + /* C++ source: transpile to C via pcc-cpp, then compile the result */ + if (flags & AFF_TYPE_CPP) { + + char cmdbuf[2048]; + char tmpc[1024]; + char pcccpp[1024]; + const char *exedir; + /* find pcc-cpp next to pcc.exe (or in PATH) */ + pcccpp[0] = 0; +#ifdef _WIN32 + { + char selfpath[1024]; + char *slash; + GetModuleFileNameA(NULL, selfpath, sizeof selfpath); + slash = strrchr(selfpath, '\\'); + if (slash) { + *slash = 0; + snprintf(pcccpp, sizeof pcccpp, "%s\\pcc-cpp.exe", selfpath); + if (GetFileAttributesA(pcccpp) == INVALID_FILE_ATTRIBUTES) + strcpy(pcccpp, "pcc-cpp"); + } else + strcpy(pcccpp, "pcc-cpp"); + } +#else + strcpy(pcccpp, "pcc-cpp"); +#endif + snprintf(tmpc, sizeof tmpc, "%s.pcc.c", filename); +#ifdef _WIN32 + snprintf(cmdbuf, sizeof cmdbuf, "\"%s\" \"%s\" -o \"%s\"", + pcccpp, filename, tmpc); + /* use CreateProcess so quoted paths with spaces work */ + { + STARTUPINFOA si; + PROCESS_INFORMATION pi; + char *cmdline = (char*)pcc_malloc(strlen(cmdbuf) + 1); + if (!cmdline) { close(fd); return -1; } + strcpy(cmdline, cmdbuf); + memset(&si, 0, sizeof si); + si.cb = sizeof si; + if (!CreateProcessA(NULL, cmdline, NULL, NULL, FALSE, 0, NULL, + NULL, &si, &pi)) { + pcc_error_noabort("cannot run pcc-cpp (%lu)", (unsigned long)GetLastError()); + pcc_free(cmdline); + close(fd); + return -1; + } + WaitForSingleObject(pi.hProcess, INFINITE); + CloseHandle(pi.hProcess); + CloseHandle(pi.hThread); + pcc_free(cmdline); + } +#else + snprintf(cmdbuf, sizeof cmdbuf, "%s \"%s\" -o \"%s\"", + pcccpp, filename, tmpc); + if (system(cmdbuf) != 0) { + pcc_error_noabort("pcc-cpp failed on '%s'", filename); + close(fd); + return -1; + } +#endif + close(fd); + /* compile the generated C file */ + fd = _pcc_open(s1, tmpc); + if (fd < 0) { + pcc_error_noabort("cannot open generated file '%s'", tmpc); + return -1; + } + flags &= ~AFF_TYPE_CPP; + flags |= AFF_TYPE_C; + dynarray_add(&s1->target_deps, &s1->nb_target_deps, pcc_strdup(tmpc)); + return pcc_compile(s1, flags, tmpc, fd); + } + dynarray_add(&s1->target_deps, &s1->nb_target_deps, pcc_strdup(filename)); return pcc_compile(s1, flags, filename, fd); } LIBPCCAPI int pcc_add_file(PCCState *s, const char *filename) { + return pcc_add_file_internal(s, filename, s->filetype | AFF_PRINT_ERROR); } diff --git a/pcc.h b/pcc.h index 7fc9b13..1d6d5a7 100644 --- a/pcc.h +++ b/pcc.h @@ -790,6 +790,8 @@ struct PCCState { unsigned char gnu_ext; /* use PazeCC extensions */ unsigned char pcc_ext; + /* C++ mode (compile .cpp files with C++ extensions) */ + unsigned char cpp_mode; unsigned char dflag; /* -dX value */ unsigned char Pflag; /* -P switch (LINE_MACRO_OUTPUT_FORMAT) */ @@ -1285,6 +1287,7 @@ ST_FUNC int pcc_add_file_internal(PCCState *s1, const char *filename, int flags) #define AFF_TYPE_ASM 2 #define AFF_TYPE_ASMPP 4 #define AFF_TYPE_LIB 8 +#define AFF_TYPE_CPP 0x100 /* C++ source file */ #define AFF_TYPE_MASK (7 | AFF_TYPE_BIN) /* values from pcc_object_type(...) */ #define AFF_BINTYPE_REL 1 diff --git a/pccpp.c b/pccpp.c index f0ffefb..7f785e8 100644 --- a/pccpp.c +++ b/pccpp.c @@ -1702,7 +1702,8 @@ static int pragma_parse(PCCState *s1) #pragma pack(pop) // restore previous */ next(); skip('('); - if (tok == TOK_ASM_pop) { + if (tok == TOK_ASM_pop || (tok >= TOK_IDENT && + !strcmp(get_tok_str(tok, NULL), "pop"))) { next(); if (s1->pack_stack_ptr <= s1->pack_stack) { stk_error: @@ -1712,7 +1713,8 @@ static int pragma_parse(PCCState *s1) } else { int val = 0; if (tok != ')') { - if (tok == TOK_ASM_push) { + if (tok == TOK_ASM_push || (tok >= TOK_IDENT && + !strcmp(get_tok_str(tok, NULL), "push"))) { next(); if (s1->pack_stack_ptr >= s1->pack_stack + PACK_STACK_SIZE - 1) goto stk_error; diff --git a/pcctok.h b/pcctok.h index 86b76c3..89bc265 100644 --- a/pcctok.h +++ b/pcctok.h @@ -369,6 +369,22 @@ DEF(TOK_longjmp, "longjmp") #endif +/* ------------ C++ keywords ------------ */ + DEF(TOK_CLASS, "class") + DEF(TOK_CPP_PUBLIC, "public") + DEF(TOK_CPP_PRIVATE, "private") + DEF(TOK_CPP_PROTECTED, "protected") + DEF(TOK_THIS, "this") + DEF(TOK_CPP_NEW, "new") + DEF(TOK_CPP_DELETE, "delete") + DEF(TOK_CPP_NAMESPACE, "namespace") + DEF(TOK_CPP_USING, "using") + DEF(TOK_CPP_VIRTUAL, "virtual") + DEF(TOK_CPP_INLINE, "inline") + DEF(TOK_CPP_FRIEND, "friend") + DEF(TOK_CPP_TEMPLATE, "template") + DEF(TOK_CPP_CONSTEXPR, "constexpr") + /*********************************************************************/ /* Tiny Assembler */ diff --git a/tools/pcc-cpp.c b/tools/pcc-cpp.c new file mode 100644 index 0000000..c9fd1b0 --- /dev/null +++ b/tools/pcc-cpp.c @@ -0,0 +1,1037 @@ +/* + * pcc-cpp.c - C++ to C transpiler for PCC (stage 1) + * + * Converts a C++ subset (class, member functions, ctors/dtors, + * simple inheritance) into equivalent C code, which is then + * compiled by pcc. + * + * License: MIT + */ + +#include +#include +#include +#include +#include + +/* ---------------- tokenizer ---------------- */ + +typedef enum { + T_EOF, T_IDENT, T_NUMBER, T_STRING, T_CHAR, + T_CLASS, T_STRUCT, T_PUBLIC, T_PRIVATE, T_PROTECTED, + T_THIS, T_NEW, T_DELETE, T_NAMESPACE, T_USING, T_VIRTUAL, + T_INLINE, T_FRIEND, T_TEMPLATE, T_CONSTEXPR, + T_PREPROC, T_PUNCT +} TokType; + +typedef struct { + TokType type; + char text[256]; + long ival; +} Token; + +static FILE *g_in, *g_out; +static Token g_tok; +static int g_line = 1; + +typedef struct ClassInfo { + char name[128]; + char base[128]; + int has_ctor; + int has_dtor; + char members[64][64]; /* member names (data + functions) */ + int n_members; + struct ClassInfo *next; +} ClassInfo; +static ClassInfo *g_classes = NULL; + +static ClassInfo *find_class(const char *name) +{ + ClassInfo *c; + for (c = g_classes; c; c = c->next) + if (strcmp(c->name, name) == 0) + return c; + return NULL; +} + +static void add_member(ClassInfo *ci, const char *m) +{ + int i; + if (!ci) return; + for (i = 0; i < ci->n_members; i++) + if (!strcmp(ci->members[i], m)) return; + if (ci->n_members < 64) + strncpy(ci->members[ci->n_members++], m, 63); + +} + +static int is_member(ClassInfo *ci, const char *m) +{ + int i; + if (!ci) return 0; + for (i = 0; i < ci->n_members; i++) + if (!strcmp(ci->members[i], m)) return 1; + /* search base class */ + if (ci->base[0]) { + ClassInfo *b = find_class(ci->base); + if (b) return is_member(b, m); + } + return 0; +} + +/* find access path for a member: base-class member -> this->__base */ +static void member_path(ClassInfo *ci, const char *m, char *out, int outsz) +{ + int i; + for (i = 0; i < ci->n_members; i++) + if (!strcmp(ci->members[i], m)) { + snprintf(out, outsz, "this"); + return; + } + if (ci->base[0]) { + ClassInfo *b = find_class(ci->base); + if (b && is_member(b, m)) { + snprintf(out, outsz, "this->__base"); + return; + } + } + snprintf(out, outsz, "this"); +} + +static void add_class(const char *name) +{ + ClassInfo *c; + if (find_class(name)) return; + c = (ClassInfo*)calloc(1, sizeof *c); + strncpy(c->name, name, sizeof c->name - 1); + c->next = g_classes; + g_classes = c; +} + +/* ---------------- tokenizer ---------------- */ + +static Token g_peek; /* one-token lookahead buffer */ +static int g_have_peek = 0; +static Token g_pb[16]; /* pushback stack for peeking */ +static int g_pb_len = 0; + +static void next_tok_internal(Token *t); /* fwd decl */ + +/* read next token (from pushback, peek buffer, or input) */ +static void read_tok(Token *t) +{ + if (g_pb_len > 0) { + *t = g_pb[--g_pb_len]; + return; + } + if (g_have_peek) { + *t = g_peek; + g_have_peek = 0; + } else { + next_tok_internal(t); + } +} + +/* push a token back onto the stack (LIFO) */ +static void unread_tok(const Token *t) +{ + if (g_pb_len < 16) + g_pb[g_pb_len++] = *t; + else { + /* fallback: single peek */ + g_peek = *t; + g_have_peek = 1; + } +} + +static void next_tok(void) +{ + read_tok(&g_tok); +} + +static int getc2(void) +{ + int c = fgetc(g_in); + if (c == '\n') g_line++; + return c; +} + +static void ungetc2(int c) +{ + if (c == '\n') g_line--; + ungetc(c, g_in); +} + +static TokType kw_type(const char *s) +{ + if (!strcmp(s, "class")) return T_CLASS; + if (!strcmp(s, "struct")) return T_STRUCT; + if (!strcmp(s, "public")) return T_PUBLIC; + if (!strcmp(s, "private")) return T_PRIVATE; + if (!strcmp(s, "protected")) return T_PROTECTED; + if (!strcmp(s, "this")) return T_THIS; + if (!strcmp(s, "new")) return T_NEW; + if (!strcmp(s, "delete")) return T_DELETE; + if (!strcmp(s, "namespace")) return T_NAMESPACE; + if (!strcmp(s, "using")) return T_USING; + if (!strcmp(s, "virtual")) return T_VIRTUAL; + if (!strcmp(s, "inline")) return T_INLINE; + if (!strcmp(s, "friend")) return T_FRIEND; + if (!strcmp(s, "template")) return T_TEMPLATE; + if (!strcmp(s, "constexpr")) return T_CONSTEXPR; + return T_IDENT; +} + +/* read a raw token from the input stream */ +static void next_tok_internal(Token *t) +{ + int c; + for (;;) { + c = getc2(); + if (c == EOF) { t->type = T_EOF; t->text[0] = 0; return; } + if (isspace(c)) continue; + if (c == '/') { + int c2 = getc2(); + if (c2 == '/') { + while ((c = getc2()) != '\n' && c != EOF); + continue; + } else if (c2 == '*') { + int prev = 0; + while ((c = getc2()) != EOF) { + if (prev == '*' && c == '/') break; + prev = c; + } + continue; + } else { + ungetc2(c2); + t->type = T_PUNCT; + t->text[0] = '/'; t->text[1] = 0; + return; + } + } + break; + } + + /* preprocessor directive: copy the whole line verbatim */ + if (c == '#') { + int n = 0; + g_tok.type = T_PREPROC; + g_tok.text[n++] = '#'; + while (n < 250) { + c = getc2(); + if (c == '\n' || c == EOF) break; + g_tok.text[n++] = (char)c; + } + g_tok.text[n] = 0; + return; + } + + if (isalpha(c) || c == '_') { + int n = 0; + t->text[n++] = (char)c; + while (n < 255) { + c = getc2(); + if (isalnum(c) || c == '_') + t->text[n++] = (char)c; + else { ungetc2(c); break; } + } + t->text[n] = 0; + t->type = kw_type(t->text); + return; + } + + if (isdigit(c)) { + int n = 0; + t->text[n++] = (char)c; + while (n < 255) { + c = getc2(); + if (isalnum(c) || c == '.' || c == '_') + t->text[n++] = (char)c; + else { ungetc2(c); break; } + } + t->text[n] = 0; + t->ival = strtol(t->text, NULL, 0); + t->type = T_NUMBER; + return; + } + + if (c == '"') { + int n = 0; + t->type = T_STRING; + t->text[n++] = '"'; + while (n < 250) { + c = getc2(); + t->text[n++] = (char)c; + if (c == '\\') { + t->text[n++] = (char)getc2(); + } else if (c == '"') break; + else if (c == EOF || c == '\n') break; + } + t->text[n] = 0; + return; + } + + if (c == '\'') { + int n = 0; + t->type = T_CHAR; + t->text[n++] = '\''; + while (n < 250) { + c = getc2(); + t->text[n++] = (char)c; + if (c == '\\') { + t->text[n++] = (char)getc2(); + } else if (c == '\'') break; + else if (c == EOF || c == '\n') break; + } + t->text[n] = 0; + return; + } + + { + int c2 = getc2(); + char two[3] = { (char)c, (char)c2, 0 }; + static const char *multi[] = { "::", "->", "<<", ">>", "<=", ">=", "==", + "!=", "&&", "||", "++", "--", "+=", "-=", + "*=", "/=", "%=", "&=", "|=", "^=" }; + int i; + for (i = 0; i < (int)(sizeof multi / sizeof multi[0]); i++) + if (!strcmp(two, multi[i])) { + strcpy(t->text, two); + t->type = T_PUNCT; + return; + } + ungetc2(c2); + t->text[0] = (char)c; + t->text[1] = 0; + t->type = T_PUNCT; + } +} + +/* ---------------- output with smart spacing ---------------- */ + +static int g_out_is_word = 0; /* last emitted char was word char */ + +static void emit(const char *fmt, ...) +{ + va_list ap; + va_start(ap, fmt); + vfprintf(g_out, fmt, ap); + va_end(ap); +} + +/* emit a token with proper spacing */ +static int g_need_space = 0; /* whether to add space before next word */ + +static void emit_tok(void) +{ + const char *t = g_tok.text; + int c; + if (g_tok.type == T_PREPROC) { + emit("\n%s\n", t); /* preprocessor line verbatim */ + g_need_space = 1; + return; + } + if (g_tok.type == T_PUNCT) { + c = t[0]; + if (c == ')' || c == ']' || c == ';' || c == ',' || c == '}' || + c == '.' || c == ':' || c == '(' ) + emit("%s", t); + else if (g_need_space) { + emit(" %s", t); + } else { + emit("%s", t); + } + /* after '.', '->', '::' no space before next word */ + g_need_space = !(c == '.' || t[1] == '>' || + (c == ':' && t[1] == ':')); + } else { + if (g_need_space) + emit(" %s", t); + else + emit("%s", t); + g_need_space = 1; + } +} + +/* pending member function prototypes (emitted after struct) */ +static char g_protos[8192]; +static int g_proto_len; +static char g_params[1024]; /* captured params for inline defs */ + +static void proto_emit(const char *fmt, ...) +{ + va_list ap; + int n; + va_start(ap, fmt); + n = vsnprintf(g_protos + g_proto_len, sizeof g_protos - g_proto_len, fmt, ap); + va_end(ap); + if (n > 0) g_proto_len += n; + if (g_proto_len >= (int)sizeof g_protos - 1) g_proto_len = sizeof g_protos - 1; +} + +/* ---------------- class parsing ---------------- */ + +static void gather_decl(char *type, int typesz, char *name, int namesz); + +static void parse_member_decl(const char *cls, const char *ret_type, const char *mname_in) +{ + char name[256]; + char mname[256]; + int is_ctor, is_dtor; + ClassInfo *ci = find_class(cls); + + if (mname_in && mname_in[0]) + strncpy(name, mname_in, sizeof name - 1); + else + strncpy(name, g_tok.text, sizeof name - 1); + name[sizeof name - 1] = 0; + is_ctor = !strcmp(name, cls); + is_dtor = (name[0] == '~' && !strcmp(name + 1, cls)); + if (ci) { + if (is_ctor) ci->has_ctor = 1; + if (is_dtor) ci->has_dtor = 1; + else add_member(ci, name); + } + /* only advance if g_tok is the name (not already consumed) */ + if (!mname_in || !mname_in[0]) + next_tok(); + + if (is_ctor) + snprintf(mname, sizeof mname, "%s_ctor", cls); + else if (is_dtor) + snprintf(mname, sizeof mname, "%s_dtor", cls); + else + snprintf(mname, sizeof mname, "%s_%s", cls, name); + + /* constructors/destructors return void */ + if (is_ctor || is_dtor) + ret_type = "void"; + + proto_emit(" %s %s(struct %s *this", ret_type, mname, cls); + g_params[0] = 0; + if (g_tok.type == T_PUNCT && !strcmp(g_tok.text, "(")) { + next_tok(); + if (g_tok.type == T_PUNCT && !strcmp(g_tok.text, ")")) { + proto_emit(");\n"); + next_tok(); + } else { + proto_emit(", "); + int depth = 0; + while (!(g_tok.type == T_EOF)) { + if (g_tok.type == T_PUNCT && !strcmp(g_tok.text, ")") && depth == 0) + break; + if (g_tok.type == T_PUNCT && !strcmp(g_tok.text, "(")) depth++; + if (g_tok.type == T_PUNCT && !strcmp(g_tok.text, ")")) depth--; + /* smart spacing for prototype params */ + { + const char *tt = g_tok.text; + int c = tt[0]; + if (g_tok.type == T_PUNCT) { + if (!(c == ')' || c == ']' || c == ';' || c == ',' || + c == '*' || c == '&' || c == '(' )) + proto_emit(" "); + proto_emit("%s", tt); + strncat(g_params, " ", sizeof g_params - strlen(g_params) - 1); + strncat(g_params, tt, sizeof g_params - strlen(g_params) - 1); + } else { + proto_emit(" %s", tt); + strncat(g_params, " ", sizeof g_params - strlen(g_params) - 1); + strncat(g_params, tt, sizeof g_params - strlen(g_params) - 1); + } + } + next_tok(); + } + proto_emit(");\n"); + if (g_tok.type == T_PUNCT && !strcmp(g_tok.text, ")")) next_tok(); + } + } + /* skip constructor initializer list: ": Base(args, ...)" */ + if (g_tok.type == T_PUNCT && !strcmp(g_tok.text, ":")) { + int bd = 0; + while (!(g_tok.type == T_EOF)) { + if (g_tok.type == T_PUNCT && !strcmp(g_tok.text, "(")) bd++; + if (g_tok.type == T_PUNCT && !strcmp(g_tok.text, ")")) bd--; + if (g_tok.type == T_PUNCT && !strcmp(g_tok.text, "{") && bd == 0) + break; + next_tok(); + } + } + /* after the prototype, either ';' (decl only) or '{' (inline body) */ + if (g_tok.type == T_PUNCT && !strcmp(g_tok.text, "{")) { + /* inline member function definition: emit the body as a + separate function after the class */ + ClassInfo *mci = find_class(cls); + proto_emit("%s %s(struct %s *this%s", ret_type, mname, cls, + g_params[0] ? ", " : ""); + proto_emit("%s) {\n", g_params); + next_tok(); /* consume '{' */ + { + int bd = 1; + while (bd > 0) { + if (g_tok.type == T_EOF) break; + if (g_tok.type == T_PUNCT && !strcmp(g_tok.text, "{")) { bd++; proto_emit(" {"); next_tok(); continue; } + if (g_tok.type == T_PUNCT && !strcmp(g_tok.text, "}")) { bd--; if (bd > 0) proto_emit("}"); next_tok(); continue; } + if (g_tok.type == T_THIS) { proto_emit("this"); next_tok(); continue; } + /* bare member name -> this->member (or this->__base->member) */ + if (g_tok.type == T_IDENT && mci && is_member(mci, g_tok.text)) { + char path[64]; + member_path(mci, g_tok.text, path, sizeof path); + /* path is "this" -> this->x ; "this->__base" -> this->__base.x */ + if (!strcmp(path, "this")) + proto_emit(" this->%s", g_tok.text); + else + proto_emit(" %s.%s", path, g_tok.text); + next_tok(); + continue; + } + proto_emit(" %s", g_tok.text); + next_tok(); + } + } + proto_emit("}\n\n"); + /* skip trailing ; */ + if (g_tok.type == T_PUNCT && !strcmp(g_tok.text, ";")) next_tok(); + } else { + while (!(g_tok.type == T_EOF)) { + if (g_tok.type == T_PUNCT && + (!strcmp(g_tok.text, ";") || !strcmp(g_tok.text, "}"))) break; + next_tok(); + } + if (g_tok.type == T_PUNCT && !strcmp(g_tok.text, ";")) next_tok(); + } +} + +static void parse_class(void) +{ + char clsname[128]; + char base[128] = ""; + ClassInfo *ci; + + next_tok(); + if (g_tok.type != T_IDENT) { emit("/* anon class */\n"); return; } + strncpy(clsname, g_tok.text, sizeof clsname - 1); + clsname[sizeof clsname - 1] = 0; + next_tok(); + + if (g_tok.type == T_PUNCT && !strcmp(g_tok.text, ":")) { + next_tok(); + if (g_tok.type == T_PUBLIC || g_tok.type == T_PRIVATE || + g_tok.type == T_PROTECTED || g_tok.type == T_VIRTUAL) + next_tok(); + if (g_tok.type == T_IDENT) { + strncpy(base, g_tok.text, sizeof base - 1); + base[sizeof base - 1] = 0; + next_tok(); + } + } + + add_class(clsname); + ci = find_class(clsname); + if (base[0]) strncpy(ci->base, base, sizeof ci->base - 1); + + emit("struct %s {\n", clsname); + if (base[0]) + emit(" struct %s __base;\n", base); + + if (g_tok.type == T_PUNCT && !strcmp(g_tok.text, "{")) next_tok(); + else { emit("};\n\n"); return; } + + while (!(g_tok.type == T_PUNCT && !strcmp(g_tok.text, "}"))) { + if (g_tok.type == T_EOF) break; + if (g_tok.type == T_PUBLIC || g_tok.type == T_PRIVATE || + g_tok.type == T_PROTECTED) { + next_tok(); + if (g_tok.type == T_PUNCT && !strcmp(g_tok.text, ":")) next_tok(); + continue; + } + if (g_tok.type == T_PUNCT && !strcmp(g_tok.text, ";")) { next_tok(); continue; } + { + char tybuf[512] = ""; + char tmp[256]; + /* use gather_decl: type + name (stops at '(' or ';' or '}') */ + gather_decl(tybuf, sizeof tybuf, tmp, sizeof tmp); + if (tmp[0] && g_tok.type == T_PUNCT && !strcmp(g_tok.text, "(")) { + /* member function decl */ + parse_member_decl(clsname, tybuf[0] ? tybuf : "int", tmp); + } else if (tmp[0]) { + /* data member(s): type name [more] ; */ + ClassInfo *cci = find_class(clsname); + emit(" %s %s", tybuf, tmp); + add_member(cci, tmp); + while (!(g_tok.type == T_PUNCT && + (!strcmp(g_tok.text, ";") || !strcmp(g_tok.text, "}")))) { + if (g_tok.type == T_EOF) break; + /* additional declarators: , y */ + if (g_tok.type == T_PUNCT && !strcmp(g_tok.text, ",")) { + emit(", "); + next_tok(); + /* next word is another member name */ + if (g_tok.type == T_IDENT) { + add_member(cci, g_tok.text); + } + continue; + } + emit_tok(); + next_tok(); + } + emit(";\n"); + if (g_tok.type == T_PUNCT && !strcmp(g_tok.text, ";")) next_tok(); + } else if (g_tok.type == T_PUNCT && !strcmp(g_tok.text, "}")) { + /* nothing - end of class */ + } else { + /* unknown, copy through */ + if (tybuf[0]) emit("%s", tybuf); + while (!(g_tok.type == T_PUNCT && + (!strcmp(g_tok.text, ";") || !strcmp(g_tok.text, "}")))) { + if (g_tok.type == T_EOF) break; + emit_tok(); + next_tok(); + } + emit(";\n"); + if (g_tok.type == T_PUNCT && !strcmp(g_tok.text, ";")) next_tok(); + } + } + } + if (g_tok.type == T_PUNCT && !strcmp(g_tok.text, "}")) next_tok(); + if (g_tok.type == T_PUNCT && !strcmp(g_tok.text, ";")) next_tok(); + emit("};\n"); + /* emit member function prototypes after the struct */ + if (g_proto_len) { + emit("%s", g_protos); + g_proto_len = 0; + } + emit("\n"); +} + +/* member function definition: Ret Class::method(params) { body } */ +static void parse_member_definition(const char *ret_type) +{ + char cls[128], method[128], mname[256]; + int is_ctor = 0, is_dtor = 0; + ClassInfo *ci; + + strncpy(cls, g_tok.text, sizeof cls - 1); + cls[sizeof cls - 1] = 0; + next_tok(); + if (g_tok.type == T_PUNCT && !strcmp(g_tok.text, "::")) next_tok(); + if (g_tok.type != T_IDENT) { emit("/* bad member def */\n"); return; } + strncpy(method, g_tok.text, sizeof method - 1); + method[sizeof method - 1] = 0; + if (!strcmp(method, cls)) is_ctor = 1; + if (method[0] == '~') is_dtor = 1; + next_tok(); + + if (is_ctor) + snprintf(mname, sizeof mname, "%s_ctor", cls); + else if (is_dtor) + snprintf(mname, sizeof mname, "%s_dtor", cls); + else + snprintf(mname, sizeof mname, "%s_%s", cls, method); + ci = find_class(cls); + if (ci) { if (is_ctor) ci->has_ctor = 1; if (is_dtor) ci->has_dtor = 1; } + + /* constructors/destructors return void */ + if (is_ctor || is_dtor) + ret_type = "void"; + + emit("%s %s(struct %s *this", ret_type, mname, cls); + + if (g_tok.type == T_PUNCT && !strcmp(g_tok.text, "(")) { + next_tok(); + if (g_tok.type == T_PUNCT && !strcmp(g_tok.text, ")")) { + emit(")"); + next_tok(); + } else { + emit(", "); + int depth = 0; + while (!(g_tok.type == T_EOF)) { + if (g_tok.type == T_PUNCT && !strcmp(g_tok.text, ")") && depth == 0) break; + if (g_tok.type == T_PUNCT && !strcmp(g_tok.text, "(")) depth++; + if (g_tok.type == T_PUNCT && !strcmp(g_tok.text, ")")) depth--; + emit_tok(); + next_tok(); + } + emit(")"); + if (g_tok.type == T_PUNCT && !strcmp(g_tok.text, ")")) next_tok(); + } + } + + /* skip constructor initializer list: ": Base(args, ...)" */ + if (g_tok.type == T_PUNCT && !strcmp(g_tok.text, ":")) { + int bd = 0; + /* skip to '{' at depth 0 */ + while (!(g_tok.type == T_EOF)) { + if (g_tok.type == T_PUNCT && !strcmp(g_tok.text, "(")) bd++; + if (g_tok.type == T_PUNCT && !strcmp(g_tok.text, ")")) bd--; + if (g_tok.type == T_PUNCT && !strcmp(g_tok.text, "{") && bd == 0) + break; + next_tok(); + } + } + + emit(" {\n"); + if (g_tok.type == T_PUNCT && !strcmp(g_tok.text, "{")) next_tok(); + { + int depth = 0; + ClassInfo *mci = find_class(cls); + while (!(g_tok.type == T_PUNCT && !strcmp(g_tok.text, "}") && depth == 0)) { + if (g_tok.type == T_EOF) break; + if (g_tok.type == T_PUNCT && !strcmp(g_tok.text, "{")) { depth++; emit(" {"); next_tok(); continue; } + if (g_tok.type == T_PUNCT && !strcmp(g_tok.text, "}")) { + if (depth > 0) { depth--; emit("}"); next_tok(); continue; } + break; + } + if (g_tok.type == T_THIS) { + emit("this"); + next_tok(); + continue; + } + /* bare member name -> this->member (or this->__base->member) */ + if (g_tok.type == T_IDENT && mci && is_member(mci, g_tok.text)) { + char path[64]; + member_path(mci, g_tok.text, path, sizeof path); + if (!strcmp(path, "this")) + emit(" this->%s", g_tok.text); + else + emit(" %s.%s", path, g_tok.text); + next_tok(); + continue; + } + emit_tok(); + next_tok(); + } + } + if (g_tok.type == T_PUNCT && !strcmp(g_tok.text, "}")) next_tok(); + emit("}\n\n"); +} + +/* ---------------- top-level ---------------- */ + +static void parse_function(const char *ret_type, const char *name) +{ + if (g_tok.type == T_PUNCT && !strcmp(g_tok.text, "::")) { + /* member function: class is 'name', method follows */ + g_tok.type = T_IDENT; + strncpy(g_tok.text, name, sizeof g_tok.text - 1); + g_tok.text[sizeof g_tok.text - 1] = 0; + parse_member_definition(ret_type); + return; + } + + emit("%s %s", ret_type, name); + while (!(g_tok.type == T_PUNCT && !strcmp(g_tok.text, "{"))) { + if (g_tok.type == T_EOF) break; + emit_tok(); + next_tok(); + } + if (g_tok.type == T_PUNCT && !strcmp(g_tok.text, "{")) { + int depth = 0; + char varcls[64][128]; /* variable name -> class name */ + char varname[64][64]; + int nvars = 0; + emit(" {"); + next_tok(); + while (!(g_tok.type == T_PUNCT && !strcmp(g_tok.text, "}") && depth == 0)) { + if (g_tok.type == T_EOF) break; + if (g_tok.type == T_PUNCT && !strcmp(g_tok.text, "{")) { depth++; emit(" {"); next_tok(); continue; } + if (g_tok.type == T_PUNCT && !strcmp(g_tok.text, "}")) { + if (depth > 0) { depth--; emit("}"); next_tok(); continue; } + break; + } + /* variable declaration: struct Cls var; -> record var:Cls */ + if (g_tok.type == T_IDENT && find_class(g_tok.text) && + (nvars < 64)) { + char clsname[128]; + strncpy(clsname, g_tok.text, sizeof clsname - 1); + clsname[sizeof clsname - 1] = 0; + emit(" struct %s", clsname); + next_tok(); + /* next token(s): var [= ...] */ + if (g_tok.type == T_IDENT && nvars < 64) { + char vname[64]; + strncpy(varcls[nvars], clsname, 127); + strncpy(varname[nvars], g_tok.text, 63); + strncpy(vname, g_tok.text, sizeof vname - 1); + vname[sizeof vname - 1] = 0; + nvars++; + emit(" %s", g_tok.text); + next_tok(); + /* if this class has a ctor, call it after declaration */ + { + ClassInfo *cci = find_class(clsname); + if (cci && cci->has_ctor) { + /* check for parenthesized ctor args: var(args) */ + if (g_tok.type == T_PUNCT && !strcmp(g_tok.text, "(")) { + emit("; %s_ctor(&%s", clsname, vname); + next_tok(); + /* first arg or ')' */ + if (g_tok.type == T_PUNCT && !strcmp(g_tok.text, ")")) { + emit(")"); + next_tok(); + } else { + emit(", "); + int adepth = 0; + while (!(g_tok.type == T_PUNCT && + !strcmp(g_tok.text, ")") && adepth == 0)) { + if (g_tok.type == T_EOF) break; + if (g_tok.type == T_PUNCT && + !strcmp(g_tok.text, "(")) adepth++; + if (g_tok.type == T_PUNCT && + !strcmp(g_tok.text, ")")) adepth--; + emit_tok(); + next_tok(); + } + emit(")"); + if (g_tok.type == T_PUNCT && + !strcmp(g_tok.text, ")")) next_tok(); + } + continue; + } else { + emit("; %s_ctor(&%s)", clsname, vname); + } + } + } + } + continue; + } + /* member call: var.method(args) -> Class_method(&var, args) */ + if (g_tok.type == T_IDENT) { + int vi; + for (vi = 0; vi < nvars; vi++) { + if (!strcmp(g_tok.text, varname[vi])) { + Token t1, t2, t3; + /* peek: . method ( */ + read_tok(&t1); + if (t1.type == T_PUNCT && !strcmp(t1.text, ".")) { + read_tok(&t2); + if (t2.type == T_IDENT) { + read_tok(&t3); + if (t3.type == T_PUNCT && !strcmp(t3.text, "(")) { + char meth[128]; + char mname[256]; + strncpy(meth, t2.text, sizeof meth - 1); + meth[sizeof meth - 1] = 0; + snprintf(mname, sizeof mname, "%s_%s", + varcls[vi], meth); + emit(" %s(&%s", mname, varname[vi]); + /* peek already consumed: var . method ( + g_tok is still the var name. Read one + token to reach first arg or ')' */ + next_tok(); /* -> first arg or ) */ + /* now g_tok is first arg or ')' */ + if (!(g_tok.type == T_PUNCT && + !strcmp(g_tok.text, ")"))) { + int adepth = 0; + while (!(g_tok.type == T_PUNCT && + !strcmp(g_tok.text, ")") && adepth == 0)) { + if (g_tok.type == T_EOF) break; + if (g_tok.type == T_PUNCT && + !strcmp(g_tok.text, "(")) adepth++; + if (g_tok.type == T_PUNCT && + !strcmp(g_tok.text, ")")) adepth--; + emit_tok(); + next_tok(); + } + } + emit(")"); + if (g_tok.type == T_PUNCT && + !strcmp(g_tok.text, ")")) next_tok(); + goto next_body_tok; + } + unread_tok(&t3); + } + unread_tok(&t2); + } + unread_tok(&t1); + break; + } + } + } + /* class name used as type -> add 'struct' */ + if (g_tok.type == T_IDENT && find_class(g_tok.text)) { + emit(" struct %s", g_tok.text); + next_tok(); + continue; + } + emit_tok(); + next_tok(); + next_body_tok: + ; + } + if (g_tok.type == T_PUNCT && !strcmp(g_tok.text, "}")) next_tok(); + emit("}\n\n"); + } +} + +/* collect tokens until we hit a '(', ';', '{', '}', ',' or EOF. + The last identifier seen is the declared name; everything + before it is the type. Returns the name in 'name'. */ +static void gather_decl(char *type, int typesz, char *name, int namesz) +{ + type[0] = 0; + name[0] = 0; + + for (;;) { + if (g_tok.type == T_EOF) break; + if (g_tok.type == T_PUNCT) { + const char *t = g_tok.text; + if (!strcmp(t, "(") || !strcmp(t, ";") || !strcmp(t, "{") || + !strcmp(t, "}") || !strcmp(t, ",")) break; + /* punctuators like * & [] are part of the type/name */ + strncat(type, t, typesz - strlen(type) - 1); + strncat(type, " ", typesz - strlen(type) - 1); + next_tok(); + continue; + } + /* word token */ + { + char word[256]; + strncpy(word, g_tok.text, sizeof word - 1); + word[sizeof word - 1] = 0; + next_tok(); + if (g_tok.type == T_PUNCT && + (!strcmp(g_tok.text, "(") || !strcmp(g_tok.text, "::"))) { + /* this word is the name */ + strncpy(name, word, namesz - 1); + name[namesz - 1] = 0; + return; + } + if (g_tok.type == T_PUNCT && !strcmp(g_tok.text, ",")) { + /* this word is the name of the first declarator */ + strncpy(name, word, namesz - 1); + name[namesz - 1] = 0; + return; + } + if (g_tok.type == T_PUNCT && + (!strcmp(g_tok.text, ";") || !strcmp(g_tok.text, "}") || + !strcmp(g_tok.text, "{"))) { + /* word is the name (declarator before ; } {) */ + strncpy(name, word, namesz - 1); + name[namesz - 1] = 0; + return; + } + /* it's part of the type */ + strncat(type, word, typesz - strlen(type) - 1); + strncat(type, " ", typesz - strlen(type) - 1); + } + } + /* no name found; caller handles */ +} + +static void parse_program(void) +{ + for (;;) { + char tybuf[512]; + if (g_tok.type == T_EOF) break; + + if (g_tok.type == T_CLASS) { parse_class(); continue; } + if (g_tok.type == T_PREPROC) { + emit("%s\n", g_tok.text); + next_tok(); + continue; + } + + if (g_tok.type == T_STRUCT) { + next_tok(); + emit("struct "); + while (!(g_tok.type == T_EOF)) { + emit_tok(); + next_tok(); + if (g_tok.type == T_PUNCT && !strcmp(g_tok.text, "}")) break; + } + if (g_tok.type == T_PUNCT && !strcmp(g_tok.text, "}")) { + emit("}"); + next_tok(); + } + if (g_tok.type == T_PUNCT && !strcmp(g_tok.text, ";")) { + emit(";"); + next_tok(); + } + emit("\n"); + continue; + } + + if (g_tok.type == T_PUBLIC || g_tok.type == T_PRIVATE || + g_tok.type == T_PROTECTED) { + next_tok(); + if (g_tok.type == T_PUNCT && !strcmp(g_tok.text, ":")) next_tok(); + continue; + } + + if (g_tok.type == T_USING || g_tok.type == T_NAMESPACE || + g_tok.type == T_TEMPLATE || g_tok.type == T_INLINE || + g_tok.type == T_CONSTEXPR || g_tok.type == T_FRIEND || + g_tok.type == T_VIRTUAL) { + next_tok(); + while (!(g_tok.type == T_EOF)) { + if (g_tok.type == T_PUNCT && + (!strcmp(g_tok.text, ";") || !strcmp(g_tok.text, "}"))) break; + next_tok(); + } + if (g_tok.type == T_PUNCT && !strcmp(g_tok.text, ";")) { + emit("/* skipped */\n"); + next_tok(); + } + continue; + } + + if (g_tok.type == T_PUNCT && !strcmp(g_tok.text, ";")) { + emit(";\n"); + next_tok(); + continue; + } + + { + char tybuf[512], nmbuf[256]; + gather_decl(tybuf, sizeof tybuf, nmbuf, sizeof nmbuf); + if (nmbuf[0]) { + parse_function(tybuf[0] ? tybuf : "int", nmbuf); + } else if (g_tok.type == T_EOF) { + break; + } else if (g_tok.type == T_PUNCT && !strcmp(g_tok.text, "(")) { + /* function without return type (C style) */ + emit("int "); + parse_function("int", "f"); + } else { + /* global variable: type + rest */ + if (tybuf[0]) emit("%s", tybuf); + while (!(g_tok.type == T_EOF)) { + if (g_tok.type == T_PUNCT && + (!strcmp(g_tok.text, ";") || !strcmp(g_tok.text, "}"))) break; + emit_tok(); + next_tok(); + } + if (g_tok.type == T_PUNCT && !strcmp(g_tok.text, ";")) { emit(";"); next_tok(); } + emit("\n"); + } + } + } +} + +int main(int argc, char **argv) +{ + const char *infile = NULL, *outfile = NULL; + int i; + + for (i = 1; i < argc; i++) { + if (argv[i][0] == '-' && argv[i][1] == 'o' && i + 1 < argc) + outfile = argv[++i]; + else if (argv[i][0] != '-') + infile = argv[i]; + } + if (!infile) { + fprintf(stderr, "usage: pcc-cpp input.cpp [-o output.c]\n"); + return 1; + } + g_in = fopen(infile, "r"); + if (!g_in) { fprintf(stderr, "cannot open %s\n", infile); return 1; } + g_out = outfile ? fopen(outfile, "w") : stdout; + if (!g_out) { fprintf(stderr, "cannot open %s\n", outfile); return 1; } + + next_tok(); + parse_program(); + + fclose(g_in); + if (g_out != stdout) fclose(g_out); + return 0; +} diff --git a/win32/include/direct.h b/win32/include/direct.h index 99ce69d..ae2ad77 100644 --- a/win32/include/direct.h +++ b/win32/include/direct.h @@ -9,7 +9,7 @@ #include <_mingw.h> #include -#pragma pack(push,_CRT_PACKING) +#pragma pack(push,8) #ifdef __cplusplus extern "C" { diff --git a/win32/include/dirent.h b/win32/include/dirent.h index cd31f59..006e066 100644 --- a/win32/include/dirent.h +++ b/win32/include/dirent.h @@ -12,7 +12,7 @@ #define _DIRENT_H_ -#pragma pack(push,_CRT_PACKING) +#pragma pack(push,8) #include diff --git a/win32/include/dos.h b/win32/include/dos.h index 294e8fe..913debc 100644 --- a/win32/include/dos.h +++ b/win32/include/dos.h @@ -9,7 +9,7 @@ #include <_mingw.h> #include -#pragma pack(push,_CRT_PACKING) +#pragma pack(push,8) #ifdef __cplusplus extern "C" { diff --git a/win32/include/excpt.h b/win32/include/excpt.h index 26cc943..26d933c 100644 --- a/win32/include/excpt.h +++ b/win32/include/excpt.h @@ -8,7 +8,7 @@ #include <_mingw.h> -#pragma pack(push,_CRT_PACKING) +#pragma pack(push,8) #ifdef __cplusplus extern "C" { diff --git a/win32/include/io.h b/win32/include/io.h index e2aeec3..7207418 100644 --- a/win32/include/io.h +++ b/win32/include/io.h @@ -10,7 +10,7 @@ #include <_mingw.h> #include -#pragma pack(push,_CRT_PACKING) +#pragma pack(push,8) #ifndef _POSIX_ diff --git a/win32/include/locale.h b/win32/include/locale.h index 686aa9b..9f1ddf2 100644 --- a/win32/include/locale.h +++ b/win32/include/locale.h @@ -8,7 +8,7 @@ #include <_mingw.h> -#pragma pack(push,_CRT_PACKING) +#pragma pack(push,8) #ifdef __cplusplus extern "C" { diff --git a/win32/include/malloc.h b/win32/include/malloc.h index 5e30c82..9316a4d 100644 --- a/win32/include/malloc.h +++ b/win32/include/malloc.h @@ -8,7 +8,7 @@ #include <_mingw.h> -#pragma pack(push,_CRT_PACKING) +#pragma pack(push,8) #ifndef _MM_MALLOC_H_INCLUDED #define _MM_MALLOC_H_INCLUDED diff --git a/win32/include/math.h b/win32/include/math.h index 9e9eec6..0b274a1 100644 --- a/win32/include/math.h +++ b/win32/include/math.h @@ -14,7 +14,7 @@ struct exception; -#pragma pack(push,_CRT_PACKING) +#pragma pack(push,8) #define _DOMAIN 1 #define _SING 2 diff --git a/win32/include/setjmp.h b/win32/include/setjmp.h index ab6a424..df274e4 100644 --- a/win32/include/setjmp.h +++ b/win32/include/setjmp.h @@ -8,7 +8,7 @@ #include <_mingw.h> -#pragma pack(push,_CRT_PACKING) +#pragma pack(push,8) #ifdef __cplusplus extern "C" { diff --git a/win32/include/stdio.h b/win32/include/stdio.h index da88793..f887cfb 100644 --- a/win32/include/stdio.h +++ b/win32/include/stdio.h @@ -8,7 +8,7 @@ #include <_mingw.h> -#pragma pack(push,_CRT_PACKING) +#pragma pack(push,8) #ifdef __cplusplus extern "C" { diff --git a/win32/include/stdlib.h b/win32/include/stdlib.h index b710ec1..96268f4 100644 --- a/win32/include/stdlib.h +++ b/win32/include/stdlib.h @@ -9,7 +9,7 @@ #include <_mingw.h> #include -#pragma pack(push,_CRT_PACKING) +#pragma pack(push,8) #ifdef __cplusplus extern "C" { diff --git a/win32/include/sys/stat.h b/win32/include/sys/stat.h index 4a95e65..772ef4a 100644 --- a/win32/include/sys/stat.h +++ b/win32/include/sys/stat.h @@ -13,7 +13,7 @@ #include <_mingw.h> #include -#pragma pack(push,_CRT_PACKING) +#pragma pack(push,8) #ifdef __cplusplus extern "C" { diff --git a/win32/include/sys/timeb.h b/win32/include/sys/timeb.h index 3483773..9fe2fd4 100644 --- a/win32/include/sys/timeb.h +++ b/win32/include/sys/timeb.h @@ -12,7 +12,7 @@ #error Only Win32 target is supported! #endif -#pragma pack(push,_CRT_PACKING) +#pragma pack(push,8) #ifdef __cplusplus extern "C" { diff --git a/win32/include/sys/utime.h b/win32/include/sys/utime.h index fec8304..d106c06 100644 --- a/win32/include/sys/utime.h +++ b/win32/include/sys/utime.h @@ -12,7 +12,7 @@ #include <_mingw.h> -#pragma pack(push,_CRT_PACKING) +#pragma pack(push,8) #ifdef __cplusplus extern "C" { diff --git a/win32/include/time.h b/win32/include/time.h index 6c72e26..8041f47 100644 --- a/win32/include/time.h +++ b/win32/include/time.h @@ -12,7 +12,7 @@ #error Only Win32 target is supported! #endif -#pragma pack(push,_CRT_PACKING) +#pragma pack(push,8) #ifdef __cplusplus extern "C" { diff --git a/win32/include/wchar.h b/win32/include/wchar.h index 389196f..53a27a2 100644 --- a/win32/include/wchar.h +++ b/win32/include/wchar.h @@ -8,7 +8,7 @@ #include <_mingw.h> -#pragma pack(push,_CRT_PACKING) +#pragma pack(push,8) #ifdef __cplusplus extern "C" { diff --git a/win32/include/wctype.h b/win32/include/wctype.h index a44cb38..74e7812 100644 --- a/win32/include/wctype.h +++ b/win32/include/wctype.h @@ -12,7 +12,7 @@ #include <_mingw.h> -#pragma pack(push,_CRT_PACKING) +#pragma pack(push,8) #ifdef __cplusplus extern "C" {