From b678e532b37394765551886332b2cbb3a4598b10 Mon Sep 17 00:00:00 2001 From: Ivan Bondarev Date: Sat, 26 Dec 2020 18:05:31 +0100 Subject: [PATCH] fix #2101 --- NETGenerator/NETGenerator.cs | 41 +++++++++++++++++++++ TestSuite/ClassLibrary1.dll | Bin 0 -> 4096 bytes TestSuite/records14.pas | 15 ++++++++ TreeConverter/SystemLib/StaticSystemLib.cs | 14 +++---- bin/TestRunner.exe | Bin 32768 -> 41472 bytes bin/TestRunner.pas | 5 +++ 6 files changed, 68 insertions(+), 7 deletions(-) create mode 100644 TestSuite/ClassLibrary1.dll create mode 100644 TestSuite/records14.pas diff --git a/NETGenerator/NETGenerator.cs b/NETGenerator/NETGenerator.cs index 22b2eaab2..417e879d9 100644 --- a/NETGenerator/NETGenerator.cs +++ b/NETGenerator/NETGenerator.cs @@ -8797,9 +8797,50 @@ namespace PascalABCCompiler.NETGenerator bool tmp_dot = is_dot_expr; IExpressionNode[] real_parameters = value.real_parameters; is_dot_expr = false; + { //(ssyy) 29.01.2008 Внёс band, bor под switch basic_function_type ft = value.basic_function.basic_function_type; + if (ft == basic_function_type.objeq && real_parameters[0].type.is_value_type && + real_parameters[0].type is ICompiledTypeNode && !NetHelper.NetHelper.IsStandType((real_parameters[0].type as ICompiledTypeNode).compiled_type) && !real_parameters[0].type.is_nullable_type + && real_parameters[1].type.is_value_type && + real_parameters[1].type is ICompiledTypeNode && !NetHelper.NetHelper.IsStandType((real_parameters[1].type as ICompiledTypeNode).compiled_type) && !real_parameters[1].type.is_nullable_type) + { + Type t1 = (real_parameters[0].type as ICompiledTypeNode).compiled_type; + Type t2 = (real_parameters[1].type as ICompiledTypeNode).compiled_type; + MethodInfo mi = (real_parameters[0].type as ICompiledTypeNode).compiled_type.GetMethod("Equals"); + if (mi != null) + { + real_parameters[0].visit(this); + il.Emit(OpCodes.Box, t1); + real_parameters[1].visit(this); + il.Emit(OpCodes.Box, t2); + il.Emit(OpCodes.Callvirt, mi); + return; + } + + } + if (ft == basic_function_type.objnoteq && real_parameters[0].type.is_value_type && + real_parameters[0].type is ICompiledTypeNode && !NetHelper.NetHelper.IsStandType((real_parameters[0].type as ICompiledTypeNode).compiled_type) && !real_parameters[0].type.is_nullable_type + && real_parameters[1].type.is_value_type && + real_parameters[1].type is ICompiledTypeNode && !NetHelper.NetHelper.IsStandType((real_parameters[1].type as ICompiledTypeNode).compiled_type) && !real_parameters[1].type.is_nullable_type) + { + Type t1 = (real_parameters[0].type as ICompiledTypeNode).compiled_type; + Type t2 = (real_parameters[1].type as ICompiledTypeNode).compiled_type; + MethodInfo mi = (real_parameters[0].type as ICompiledTypeNode).compiled_type.GetMethod("Equals"); + if (mi != null) + { + real_parameters[0].visit(this); + il.Emit(OpCodes.Box, t1); + real_parameters[1].visit(this); + il.Emit(OpCodes.Box, t2); + il.Emit(OpCodes.Callvirt, mi); + il.Emit(OpCodes.Ldc_I4_0); + il.Emit(OpCodes.Ceq); + return; + } + + } switch (ft) { case basic_function_type.booland: diff --git a/TestSuite/ClassLibrary1.dll b/TestSuite/ClassLibrary1.dll new file mode 100644 index 0000000000000000000000000000000000000000..15a8ca53bb25723ec63e1cdf7bc7af0cd76b65e1 GIT binary patch literal 4096 zcmeHKUu+ab82|SAhiicfSP)QTp@4$zdTo!kXw_@)3RK!sdq?q44c)z)URU;R&)q%f znV@}86O9@rCK|(oZ=`P;H4+mNgE3Jf(FY%SAiViRVk9vJ#osr3d%gYZ=SOf@w5607pxd|mD`3-mtx9_B`j=v_|4Vwxmc z1>W_YL_LdTH|wi@_<>3o{ewXVwdRQ#5A`n`xQfDaEysN zo&_h-wk7Gt$|N!bMnN4W(Uf~6IZsJU(;MI%$62D0OJ7p$Y>-<7E{QiiuV_GqQ z3wV95D{_WaN||1@YK86S8IjYS&ew=LLq+KltZ1$U$7#EIf+WC2_Kp404 zQ)ag4=-#s8gmBZ2Sy(7U+y&E;7GuKFXJpG=>U-2de$w7jLEJ8s95Xw;tSDE|^QC#4 zv0~mcbArdjIEHDNUX?Uiay^mL%1T;!n)pB$E|r$CEb?{Bl{O}(ERp7kk(TysC*UVc zJ)5^(&rG`kEAT#;_k?2?lEOJ*ro|GmpBCX%$=sk0< z#=c!awW^|oYgAI|&{(^cyG;zC@TbpBjBkowekD{Nu2VxwI2=~wX-srCe~YQmhNF&N z7_svMGif20C^hZaCtU@4E97UqPNCHcw=C63!5s>%t1NEX9O`HmZW7V`=%mGjBMP=Vu^>H*dbaV* zgj~age65f%=&SPm#N%J#w#u!g6x?IJ b)); + assert(a <> c); + assert(not (a = c)); + var today := DateTime.Today; + assert(today = today); +end. \ No newline at end of file diff --git a/TreeConverter/SystemLib/StaticSystemLib.cs b/TreeConverter/SystemLib/StaticSystemLib.cs index a85be120d..6b763be65 100644 --- a/TreeConverter/SystemLib/StaticSystemLib.cs +++ b/TreeConverter/SystemLib/StaticSystemLib.cs @@ -2221,19 +2221,19 @@ namespace PascalABCCompiler.SystemLibrary return make_object_operator(ctn, SemanticTree.basic_function_type.objnoteq, compiler_string_consts.noteq_name, _bool_type); } - public static void init_reference_type(type_node ctn) + public static void init_reference_type(type_node tn) { if (_bool_type == null) { - wait_add_ref_list.Add(ctn); + wait_add_ref_list.Add(tn); return; } - if (!ctn.is_ref_inited) + if (!tn.is_ref_inited) { - make_assign_operator(ctn); - make_equivalence_operator(ctn); - make_not_equivalence_operator(ctn); - ctn.is_ref_inited = true; + make_assign_operator(tn); + make_equivalence_operator(tn); + make_not_equivalence_operator(tn); + tn.is_ref_inited = true; } } diff --git a/bin/TestRunner.exe b/bin/TestRunner.exe index 6cda33b59b678c8e175a87e000f8ce1dd428afeb..de20bb5a56a014875d0e72b26f0ab818b6b7b27f 100644 GIT binary patch literal 41472 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 literal 32768 zcmeHwdz@RuM#wWiPN%`i*D7s_qUy9M^ zBj29!u(9IXGuH1cRx-n$yTi*5Wd`!)vRln;D`dQpa;8|$EM47~8FB{;bD~kFLz7<9 zL$ty$=`Y*PxZLOVJefw5(M0qPw3w>(z#)8Q@V*;wmM()2^s(Ih@;~V@0D6o?i>@VV zmH+FX8stHEb%5?hRh_uJo2Yr>o;PpJ5QQ5s!hkPmfag>Td#ixoeH9AyHO>`~yfQ>v z=XiyZJD_E_8_hho19&&Q77;CO0N+-1E9(_6md&I9y#uRo|2aekV7!Ce_jX>%xh91$ z0Au537Nv7C{ny$QcT78;oU7`v*IJ$V`0f9b>#)zaD5oiQBl=72$1wZkN!5}&M}0~uhaUN^enI+VSKS1*SenO8HJG&go&LNmt(AuPV@Fk!X_e?C_BUdWk+t2pb` zd@M=;o#(Im4jd1$vJoI`96$B|=3u*E9PCqLo5YPUk9ftw0LOG;GQsaQh1#R98?2cY zkWPo%9fA6D;6kacB`8g|6PQOqWTAs07wUCpDa~s7xeveb#v4}9g?^p2Sg#}Ihmp=Y zCF2o&u{Y_1ypEpR5#tcpChd!(PwVrDaZs!A^}dPMVG0l~#$dL) z%V`R^9r%dmmI5Q#=J7u{ip&=Ov#sl$y=EgBD7-wWz z=!lyI%7TXwp`JsOqbbp6&7d-3KnDE7q+@BbCn>p+oO>Squ}uUbar0`nN#$u>h|-ic zuV(X9Exs#h2g{6gunR#$`EPbM*f)ia+uQ?NMz%+^76$tYKK~S-$CyMrP~U^kXYf7; zBIZ7X!Wzkdq7oqshj4CW7j{oUE%mx&9GDh+wnAgMjzBXJ0DLhKP$=!>z=Bdv?lZ!H zy#hgj!vuB`#F0~(54TD%k#OKMU{%!n-&~Fw8I3l%94C&S>1iy%2}hmjc(lnmd=)bu zGY4dG&W$sV%3(a(InT7YF}fd(@O8u{ z-dj_MgtC<@&_y*HI=Gr)cQuA}%}3Lih$kt4q!vlLA)e+~ykI!o z5ZiT#{nP{@R>jxzsQ)fMzM6ypqjNAxXxy`*tr5g0L!z?juHjiAzoiqWo;n?^oMVfP$Bluib)&tr#TM-t(~Dfe9TOsKmY_7h5B zNFW(hsNLHEZR#c4 zVZo+6YdkL4;ew;mR z)5;>N3SO}vhfUiI?1vfKtT~=Dr%Q-X++$y{NnzOgrvQ{$v0WRSYxB(=Xx|7r5^|&+ zuBrUhg;9$Sn1YLl9tYE#(8%rz+{Shn(a~?WX$Jb=irk7$qps@nRDJ5)hY4%{^IR-L z`X&ftG>4;+lzBBP zlf4Cv6Rn$9Z#U$;j8xXwHMW*vF^spb(*WC+vLh>%x(N}^sB8f%zPoA1%>wZqRNQnI z!nYS7{8Gx4qpyGC@J%$Cl1#HRAG^7SaX6xJxZa94wnf5LLKoo;BD4Bd2JkV}$z6(%kl}Q>1wjICSj>Y-aezVHLl4ZjpHCkh=uE?A$3d1f>PjbtDLEQmkZ<4rDlhB}2Kdav*y@ zbA1YXiJoi^hKYp8I`&9kkaaDJkiIY)+cQoM(S}U#Rv3Z13}ZOXPRTCk(R_aJ9^`-s z;=#%VXuC>gYi4^<#}V!WXqO`#?_utRD4IedD-LQr&r7sj8FKefx4A6V({WdDu@Z&E zT0<5aYK$L1WV5rQpiQtNgZF%8W7$Z2U?Zlq+U3&DbVORMp&k6*3F zN5};}w)}W@4GSS_f<1~&EiFyyL*8SCzG+)970oHX`6qs}He!DRg{4!S+SJWXj*YqA zlHSY$CFeRcg!Tqq{J|t>@%fqQO^2KuPg~fVheQ?NZ4-Pzba@~R8Loy&_-A1j-^||5 zO3&WOWeynX;?U$HUr=8np2k(4M}Yb?E%R!u1k+I#^BY!>Sj<}JR$GkEN}=3fPKM&b z!_|FUh}beAA#%1q9DRL%=t6dVe;Ahg%_R6pCgQL~Nt)oj1}U8!Y=g2$2c0gy8}kAd z4VzaqB@8cuT6P0EREj5G1gLJD98~YcwO&pNl5->Sy&&&%*^TIOu@5@9*I9r~8wOTu zYOCGJF5m!|%H9P<_%U-I%fk&ECOB5+wxN(Lh@+wxg;R59CK4xDHllARU(WTiTMZQgOe?yf_;e# z17l~IhVLpmFdrRk1Mf(dnoun`ShSH0 zq~zFQpUa+r3(la})IIu0@)PXjIM^UDNO_;a`rm_!I|v@pkoOSV14ujS`d=p!ubaMW zai$+hBkp5sp-8GB=Fdd~T-9GQ7T5bCs3i=y!1OrAghp6ACx>`T-d~|p^l8xjba$X$#d?E;iIyqKE?a3P76WldkH}l++`|-|w8--cFxpZ=0=7x{Y0{>_P-)g;ajk*Da&rzf(x1Uaq zr)g&Afxlc)Il1d)&`G>3Sf3d@3@xNGGEOMswm+8V1c4Eu!6wTikS5hf$aSlX2>2sT zHvDp5#)D#{oBQM zYG!w0vhtmnlk4YhS;VK112iOw3pmmuFX#1bNS1p5>Mdss#-cHU{Y^>OxkYA&-2ox+ z7qCK2vwO^lF7{CKSL9K1 zgxlm!DQT;jCj;u!9RiWA>p(Y+FEq*koI#sg2m;~S0znigYpv9(6puh!qwOMGeHq9Ek=@B%fd2!Im-Sm{mj-K>jE z(3zD+6w^p-)9HAqeeiYL4_0i_k@iy+v55)9)#2ug@E$dm^BuOci1&T0yy7C!LyDTb z`^U(8nPwr66gaufSR}P5^-!h*8G^?VUCD4ftYVw8OeZ&$31mMEQ%FYi>JDSN9=?Ve zcCSP&iH9ZFm0XXT|E<>C6vsVW1#P0%bUfl#0r>i0b4VE9*2DMo-##HxktvCm_=APgc zZt+vHip6GT(GpJ_a*@}mBO6=9shTtQm{Z)n=$nkSvJ)n#`6s|Xk^2Pm zZ+7?bT$^)0!q=JcsCyNlH1K%ai9@%lVY7QR+SQ%~ea}|ZQ88l%cx?h&B2_b_+4JL$$h7HwnvC%oo>a?jp#2vl^rlO|p9smla zV5g#RA+>G23rLn7`3NZ3@JEhWYIvl5KohtiSS=(Nn#Zpn8B&kYa8|`yu3-xHTVh6aFj+<<10RiUXeF97!dexDyX6){(fQSvz3u zYkQYLCCvx0ytY?FbxeL)#gvU^S*F14_IY+14W`{2SqPa4P(sNk*TQ9)tq@ z9KtM~Tsg(23dj@j_){m{h|SKPClZP1Y~+{EUW=wBD`I6kpyu z-Um?gZ_raFuFeP0st*5xgat$51hzCDpOayXh}-H|$LFeW?R}e|?V} z!`fjQS?CbAZBwO$Sg7BvM)5vkOWrT>W+Ntf^t+bCbn8hv;ng&7o9Sp0n{j&L$()p!P45W@G#b6OKQC>_^`qJu+q(n z8wNb?5AeRjwfD0?spgO$@KVj;h}y#b2m?dmLwt62*cQDX0bg<}IjN?z5W>IXRnIIg z!w6YY3`THj!ZtoSy$U?Isz1ab+()tY?udFjGdkwE|4kaiH7be2bT$O4~Dfcki z+)eyXDa?SzBI|acg_Db-d(luVczzM=Uy?uGWhl#;nt|YYqoc?qx3UW;;3hg1_Ha zlE2`lzu+lZa9F_pk3$9VfVKZVe7-#cFuN{*ApfOh(PqIDdQ0napT8~+6^>k&y3d)) z9FO8}d@Nvtdh7o70t9`_>Q_Ses<$Rq{r`BC^Ra;UblD4`u#QRN+=qQ@Yw(ZpA*hB^ zU#sR+)Q^Q@68e7z(@;dO4x-x8qajRKuTI2w4&;408sZ5G74?ET>P@cs-~`dG(byrB zM7y^cgBpx|+`-`(?7{pDy!!qpO#Iy}$DH~Omc_1$baBG{Qnx1H1Y1Fj8ul(mVJvOet4rA7eo;Eim`6n{oBlJ9})q0Pzu6YM{f=zNRz&?II zz-aDVs4C(Oy{P@}m)vZ39{UlJuj_WY9vsj*tNoP*FVlMdr`Bb%+k4 z?Ig6Nkaw9!=3Rs6#-2RwcD9Y{0Q^6o?nr3EKAiZL$$N!R(`;#?}Bc zM*_bYkg|oFYKV8E&Ce-;#0Q3H_>PSi5+=mYafy#kX#bo`vU#!pdH=yA{~R@0T5kRe z0BUKU3j%Z2b10A{G}_vip*sB?-wZnWA_^{m`uKUI9w?FZI9_>m-)sqiU!1LfJWiT> zWLpvcJqpgkw?L=&E#OEzn~>Lrw;)d)XL4S3oXKUb&8Q)fBUiXR#RsM`2a=_-uf$i1=9ubJput7;y~c&twQgvT8GCboIaXjUK!8$l7?CQYmL|u3*9W!JSXA{ zmPOphyzi(tz<|*3Lajk2|6DuB!-!KM_hYDdGaWqRaRW>#dp)B|WIMSVmumiN5p0g% zJWj0G{Z`k0(bVkNOQ=qpMb6yNM_bQQzw4j5d_(V2^bG^% zhXQ6UF7Z8{6-h4)Z1Y?TKgb0}sr77v69#&e;iR745_uxby_xFnjr}GS8LU z_>IZQIM}~@G7X4<*QTVJO_2KW7Yu^5-SALeEA^X=J5j$+$_J(VbLstSDZeKz&q?`D zQvREa`n{B`CR3X(yurK^JcAC^rl5(z;XGwXEl-*KZAmwT)H%NJ@wa*IDjY8pr7Rz?GwBIk~ zm#n`;?+eoYf28GgDZ@5n#-*HUvkV>fDRz*~wORfPr0kRS0V&H;?v?gyWYl%ia);Cp zOZ|S74n1i9j$-shd)Q3SH&MpuX_P^FUNHYz%HK$71w;lZX9ie?)1;gqxD%t61ol}m z+9G8hWsr6UZVRO7c;ntckp3)ir;(z^0$hIz_0`4?Bq%-~7&ecie+axBI9|%*C>Z2A zmnYx{%yWzrXa>sTXbxI}v^2cNhOs}9@|QuLMI^-Ktk5z}qqS$Thbaq9z^Ax=7=6=e7D^kw%YB`I0)Xa_0dTQE zLFy4`xj+&8g$Tx6BTy87GlMY)0JY)SqDurC66hEz12XZ;;djv;#xb;8#?6v($Kdz* z2A-pOAD}3{TY8`L9fm{!K=0RmhtbzT_etNoKqUa^6T0tR()WP$Jx-5H-zRn77v(LHAE2}x)3E5U^nN@NMEyZ26;9BJ zpe5o&Q8qhq1D@iXhWdJ^6J^FZ6XjOtn{@H$Jx$xd_X|yr!Ycl%=_@Fol=6E`Uq$^V z()({s-{ip4{57<+Hh&A{!l+@Us5=@!c~Nv5=xmNMwacaCdUgd=k5Su0otWzy4ebh@ z1?asR@c{s%sSVt2tB5uVPH1Vzia4P zf!@1GVcs6zfW9!!49wvn^hN1X-em#(g+RAx=t+Sd)6nw*t>2h&rFGLHpqGPu8GokhQGm4H#6GN3Nv|4cDL>@U0O4N>=sV zitl*tuR*udOnRaQ-GxZ;d=2^-P6fZOK@TA2OzrTgJctu~t_FPp=T82WEOTI;&88n} zh;=rbmY%5kSZA|oZw-0^N7vgl#5y~L9up`&bzh_t&{F~_4W2^JD@ZhW3jKZzW;2Il zt?N^$O+)XGJOe6sD@ewjN>9|FALAE^zoFG`$r{+GNUJ^*neLnq4K{AK=)XG;NHO!1aK4wlqz&ys7PqztV;pB0=v4B3UG0za_ zF%2zpPC(xeHMAViIrIw!fyzn7xs*AB`2~dgLONFli2_kkZRSnyVl^hZO=Ty)2|bjmdghNP9KJdRa)f zXo&T49^EgHn)~_mgg|QU=hM>~ll}dC77IJ$UmL?t9l8$O&o%0Odz{4$&R{xxR8EPgZ3F0(Hc2rU=MD(##liQ zYv{P9>x@;@u|P?7a?_2*YWhbFt!nDTZ%1x9NA=~KZZrC53SS&!MhBY?85`&w8d~Js zZCp$*Y3TZ%<<9Jj3O<)NR68p?LyyE0x7)|X)wcmN-srv zNnL%=H4-ww$6!I<|}$ftSZ7);KYKN8~dkx*-^NsmkYXDCgyaQjI(5E^s| zN|Ux8QCFA`Nc##LGY$Gfm4iZU=O2`&lC6>QokIVxlpjZFA`j+SJlfE%aGsZzpGaB9 zv`DqI;5cm3G?bhlGliapl6%LtybCQR-6-uJmGbk_qA;J3mcN&hr8P-$e??k?O-xPA zf=3yo#-^lQX{-}iQa(h3(TMp7cGhMyA}x>8)zMwX zH)u2(H@`veji$_Jr2QGXH98%2-h;nEABxUI??`F6EoFR16S+U*V(j6;+=8D)=W;b073VG^} zjY5W9vGhOvb*3_Kynp2V+l~R~nDUHX{~( zU0Qw^d)hoGa&9($f|kw3FJ!(iM!$klug89jmKUQxH4lPIpLx9zYIz0isg?orR^!B$ zU!y#`<#*;CMsLfbblBM1(r-Lq@cwkzD6|;XLo(_S<2TVQGy_`gGY=bkTh5{`elF5D^H7B*+N#fZnS2bn^3*MYdu7F#=j4pd?x;ab-lFTYCaPGnRVFwOSIpCmY1zN z%)g0mqdUx}LH`c(A3^61(@1Qi>&+>NUt3dXW?~EKvlC>u>H67;CVL98bv!`y-rmXNsI?0{di+o!@WX4?myQrF41Sk(Y^(Le(h_CIdDDDq28A~-)@G_F0;G9WtH74 zGOU$yGs+($YDMW1+r+QaF15q-Zn_-hduagWji|@u8?!L=8XM4ZJ<2(h44xF6L(`<3 z89WX3rl1)dFy3ds7WkMkFYsF6MdL!0GtF%%J3>i%Es$|OWuV?9^;WJgno~|pbE;L;#N0~GxAKF@=Rm75sw;Vk8=EOd?f(b4GjkUQlPPIznh?~NeGR_OGq2` z3E&@#pv$l0CulpVp)IBHRNGj3a|BNcMGWPV3EI~ADCe$p2S-YU^JtCwGrqLGP^qpP zDVGZ#^{(#QSE&|;XifLxCAx~XYQ8*}_Xc&tdj7+<>-P;82Kx$C>fTnVdijCs;$k`P z?ORqX6;z+p8X7wW3#G!2e6`Ri#C!Hu3*}1DEmx>xNhx2cY$zA2-PNksz`DOUG+ZhS z70T6o6`1|<8aH}koLvR4TqvC}Z_Z$;L_?JU*DDpbk&=JTs*$0BR~)El*l%9qdIehI z4h>@p9`$&h>-i{iHWtf+?w-n=Wv(|=0n%WB5laOYi&nS;`BL#Jk&#w!yP_~qrQV)0 zbIEUmIyBoQZmEPWnKDnbxNW40&Z<|)4{h{{RWQ|i%_w{2=--$X9k& zg{DuxieK|Et|CK9-x^y1nl!H$t;yrhHg|hoeqUXH-tNl2^1!-6Wu%0~a7dL^`T*?h!>6Z#p_Iq_wg!8i4mP=(}wy7k1tox zK2zH8v9z#lWXFzz*H{hC5fTG|P#Yz=xSSTqSFD(od zhw>$YM^-Uwmg54rA4FQ2_bNNlqX}t*Igp^>xx;-0Z+CH^P+=S36*mzEc*JcYgy#CWVD z!z+s0xTc4RQW>Q}dy3Va2w{Ftcc}z7uXpiw=9WwQ&X~8YSZzRR5LY1&)~SOA@2$LT z$==3rrNE*|+wi_MOE$0(RXF6JQxWhAAOVxZUWDeJy~7?>l=m)d+`Qc@ESXBVuz24Z zw?d_28AOIrLo?h$wPG|IPpMR_V8bt{acETGST8SxD;4q{bb>+oDq71ltUslvXRoM^ zm%du439P|du7VECa(Exqt7g<8>(J5Pi^=wr`n)*r6*>JvKUqniP+$$fYGVzYP0@J5GypfZ;?Ft%Jb#!(x_YN=< zZWSam1p*bS?4j*Ns>pU$g}qb=vm2sPp-d%rPyaS|q&!F?!-!kDzB^xHMHPo(S-oZW z>2SV+`~!wu+);+5FZ1w&?h3KM62f>LbRHt}bk)8{JFB$4LfbsrwugFDf+eBD-Hv81 z3a|`}WgYUu?kH6I@rkGfZhfqYG6ARFrit_wufp7AJfgYA?=A0kcVQbX>?pzzq>k98 z5{#3eDA?FZ*nF`0NgvFN6A_kYkomLjXgk{==K#!M^>(Vt%r^Bf!m2z{gA4K)Q`lRC z*}-{wSsBzS;>sbPAR#g>Rz)g(oU05CYB&gQkfY$qJ;sAlsvLlLqs&(;^3V%x z9yw=!e{WxZ-{!vcJuCZHu3oxfMGw2~5Rw2kv2G9Bx-0P>D~+g+t;zGSYu9r3-ipqT zuzQsdF=g3$eC6ovsg}6)_b*w!YFY1cNRB1Pu2rsJ`{tDfs7XtPTi}LOBc&2=sDmmu z%zGZ|hm){=FLOy=7Y69;ZiC$@ae5=T-u{NO_Z)?08L^Qbb`~NS4wp$?XxK$slm{w3VX-t#=U)kvOh* zb)th+D!@M0yOLvKj`|a5$TruzI^R?k8HgSvo2o%7eJWR4@2+t7K#%Tlf6tX8u)Qj$ z3uRblmQqucvBYEJ?Hywzsl^PgL+~#*+@2wU0$hu&Px=7lh;TfUs$dgh1;lSG|3H zjv!Q4=F7$H*rl~S31PUyzO}4sB#wg;irCS_b;h|YqxV+MK67!g>Ze28w7T!&g2x-H zu<$cy0ag|E$cix<`y7lFM@3d55?U25RkBNxN7H(5-||8|@~bUiLwOr=Iwk?@Q`+bq z$|Dxzbf%i~|-^uc!tPL4$V{U(98gwoF!hp|TN4i;|dQG4txJTwL_3&xo8txR~RlK+vXv<1vQn}3ny)rI!i|%j*EH5 zt_8RqAf~bOxdy$B={$4O2pf8JhwN`EEG@@54yP-aaGrP325cXfIjq7Tf8bC5SWpo} zwS{ab_LMo}P!5HaIhI9E^Wy3mX=Bgb?RWIQa)^@ykL#zJr-OY3|M@Xi^**C@t~GFQr}L@Qy+P# z7YA9du&%031r=H?nJEmsQAu@)^aNyLD-kagmiXZ+SKYAqQupmd!ib!2fUihc;~QNM zyXcNOF>Vy=6D>+jBt}i{s(NK>Ua4)jE(7P0Pi-0i~V+`w5 zeBp#gqAWZJmEMk=rUd#K`~}JFD6hs7A^Y(-yx&gKS3#B%{#y)LSdu|}d*k81JnbVo z*fIr7S)9do&ORUS`FOKf^T2GO2+$(}%!MH5NPC7@z;o;sz~zxkWD4^kDvw!=cAr{? zRs!!Vnc711Fx68bjpEj^ zBhCWm`M_k_Gw_8BPk9jh)?=!}qNE~n*bJ?MO3G+0;!j`VmIt3#;d3<t|D$93U`Q3nP=MjgfoY6D zD>CBPi_o@@E*1*x`)g1uLOT>uV=+3u9z6OmnsvtdqSJ9~0Pdh*7Qi2OnlQ9}V6nLl zpq(XRe?_!MJYl&`6Z13R`O2^Rfzcql1x`&or_*4hePmcCVO?}o2yGM2lw1$$JdZxm zV4Y&lp%tiYgC+{#hGY_N=6EvZISeUKPo9ov&-Mrf7xYUUKk#pCxzNQhT1&uUOW-~~ z8r5lKKp`)fDq7JDwjQR-JtLUwfXGyVZK-)t`7R*E_3=>b3H zlYtB_B;)8j)>r4^hfPd}HP5k`dwI>c?3Y$v9mv_PJZ%Uws!F>zwm<4ZTHI4eNiA#% zJFsF^NKnNOAcg>Yntxfmmg59VcBBQIuDyCPUZ;aro!9A*dJL~)=72NLT16_wmqKhm zCu6n~uVo*kVe8=)^sQ|O8iO6`)sXtMu`4=8L(|v5KNjQHxMO{D7`kU4#^Z?=9vQUG zAe!&bnQe|&#NOvKO+APi(h50*}M>HICr5&d?b&4>MDi!7HOI z<84TC{+rW0s$6Ru$FnC_@w6A7$Q|P^Z%;R86D@yhRF5j%WxbPlL0XAF^I$u5kIX=iDxSV2Nfs`}uedJ74x#K87cjCCmx^ta z(c|lLoy>{%T(2I5kzx+t{PhF>vi+RZ@Ba3IPnDe4c2f9@S6zDXv1dMieejsXN;B3L zJ|=N+vynKM_bWwo96V^m_+!5jvyi6ZZQ>oX`9~cAG7VG87=CABhNs8E+!Tvh*qhBD z8co!~cw2#tVYG&&j7q6mVp0!CX-gTDG9+b0N=M2jDVwEasxccB+Zb#CtFRSJ#PL1` z?_<$pwsAN3nMRu+O&1=CsiBO8mc&%#Fo_vJo^A%)@NpvEv++JHjQ&JtcsdL1Fb(0J z=tN(q8FZ{5dcuT85C$5*F@e#~#PD#3 ziBJ5G$+z*^P-65O0Z20XZ5zLPVv$*8fL}mseDtT%_i{87Xp4bNV)WIv>20FHB32=i zF{j6-qvO}%jAs3WqF3`lQels4#%;A;)(6Fw|ZESxxa7UtOmOhtQoTM#l@i6IshaRQ>mqR_{|9w1}R2Uo^IA%Qd)4cTmo zF%_C)Aw+~Qs9u{mcs=YjgntE#Um(iuVMb=`FlHxHw+*aJhk+PG>&yNbiOS;W00 zu77cF*IVXGyY=2krD_BilkhjL@ffqbRvgk5e3ZGKsl$ym|KE~sY{S2Ti6>`pS0i7w s$+I?vf;@M_SZ|z2nMGsK{}=l2)xa(4x7VZc8;Ad1*8j`x|Gx(QFCO&q=Kufz diff --git a/bin/TestRunner.pas b/bin/TestRunner.pas index d47b270c2..101a0e3bd 100644 --- a/bin/TestRunner.pas +++ b/bin/TestRunner.pas @@ -206,6 +206,11 @@ end; procedure RunAllTests(redirectIO: boolean); begin + var dlls := Directory.GetFiles(TestSuiteDir, '*.dll'); + foreach var dll in dlls do + begin + System.IO.File.Copy(dll, TestSuiteDir + PathSeparator + 'exe' + PathSeparator + Path.GetFileName(dll), true); + end; var files := Directory.GetFiles(TestSuiteDir + PathSeparator + 'exe', '*.exe'); for var i := 0 to files.Length - 1 do begin