From 4d8877e56be37449a580b379c386c0de97920d10 Mon Sep 17 00:00:00 2001 From: James Roseborough Date: Thu, 20 Sep 2012 05:15:31 +0000 Subject: [PATCH] Improve compatibility with lua 5.2. --- src/core/org/luaj/vm2/LuaError.java | 10 ++- src/core/org/luaj/vm2/LuaString.java | 88 +++++++++++++-------- src/core/org/luaj/vm2/lib/BaseLib.java | 2 +- test/junit/org/luaj/vm2/FragmentsTest.java | 5 ++ test/lua/baselib.lua | 4 +- test/lua/luaj3.0-tests.zip | Bin 299058 -> 299026 bytes test/lua/mathlib.lua | 1 - 7 files changed, 69 insertions(+), 41 deletions(-) diff --git a/src/core/org/luaj/vm2/LuaError.java b/src/core/org/luaj/vm2/LuaError.java index c233ca41..7c6c5540 100644 --- a/src/core/org/luaj/vm2/LuaError.java +++ b/src/core/org/luaj/vm2/LuaError.java @@ -47,8 +47,14 @@ public class LuaError extends RuntimeException { protected Throwable cause; public String getMessage() { - return traceback != null? traceback: - (fileline != null? fileline + " ": "") + super.getMessage(); + if (traceback != null) + return traceback; + String m = super.getMessage(); + if (m == null) + return null; + if (fileline != null) + return fileline + " " + m; + return m; } /** Construct LuaError when a program exception occurs. diff --git a/src/core/org/luaj/vm2/LuaString.java b/src/core/org/luaj/vm2/LuaString.java index 5e540dee..59ec8a78 100644 --- a/src/core/org/luaj/vm2/LuaString.java +++ b/src/core/org/luaj/vm2/LuaString.java @@ -183,29 +183,29 @@ public class LuaString extends LuaValue { } // unary operators - public LuaValue neg() { double d = scannumber(10); return Double.isNaN(d)? super.neg(): valueOf(-d); } + public LuaValue neg() { double d = scannumber(); return Double.isNaN(d)? super.neg(): valueOf(-d); } // basic binary arithmetic - public LuaValue add( LuaValue rhs ) { double d = scannumber(10); return Double.isNaN(d)? arithmt(ADD,rhs): rhs.add(d); } + public LuaValue add( LuaValue rhs ) { double d = scannumber(); return Double.isNaN(d)? arithmt(ADD,rhs): rhs.add(d); } public LuaValue add( double rhs ) { return valueOf( checkarith() + rhs ); } public LuaValue add( int rhs ) { return valueOf( checkarith() + rhs ); } - public LuaValue sub( LuaValue rhs ) { double d = scannumber(10); return Double.isNaN(d)? arithmt(SUB,rhs): rhs.subFrom(d); } + public LuaValue sub( LuaValue rhs ) { double d = scannumber(); return Double.isNaN(d)? arithmt(SUB,rhs): rhs.subFrom(d); } public LuaValue sub( double rhs ) { return valueOf( checkarith() - rhs ); } public LuaValue sub( int rhs ) { return valueOf( checkarith() - rhs ); } public LuaValue subFrom( double lhs ) { return valueOf( lhs - checkarith() ); } - public LuaValue mul( LuaValue rhs ) { double d = scannumber(10); return Double.isNaN(d)? arithmt(MUL,rhs): rhs.mul(d); } + public LuaValue mul( LuaValue rhs ) { double d = scannumber(); return Double.isNaN(d)? arithmt(MUL,rhs): rhs.mul(d); } public LuaValue mul( double rhs ) { return valueOf( checkarith() * rhs ); } public LuaValue mul( int rhs ) { return valueOf( checkarith() * rhs ); } - public LuaValue pow( LuaValue rhs ) { double d = scannumber(10); return Double.isNaN(d)? arithmt(POW,rhs): rhs.powWith(d); } + public LuaValue pow( LuaValue rhs ) { double d = scannumber(); return Double.isNaN(d)? arithmt(POW,rhs): rhs.powWith(d); } public LuaValue pow( double rhs ) { return MathLib.dpow(checkarith(),rhs); } public LuaValue pow( int rhs ) { return MathLib.dpow(checkarith(),rhs); } public LuaValue powWith( double lhs ) { return MathLib.dpow(lhs, checkarith()); } public LuaValue powWith( int lhs ) { return MathLib.dpow(lhs, checkarith()); } - public LuaValue div( LuaValue rhs ) { double d = scannumber(10); return Double.isNaN(d)? arithmt(DIV,rhs): rhs.divInto(d); } + public LuaValue div( LuaValue rhs ) { double d = scannumber(); return Double.isNaN(d)? arithmt(DIV,rhs): rhs.divInto(d); } public LuaValue div( double rhs ) { return LuaDouble.ddiv(checkarith(),rhs); } public LuaValue div( int rhs ) { return LuaDouble.ddiv(checkarith(),rhs); } public LuaValue divInto( double lhs ) { return LuaDouble.ddiv(lhs, checkarith()); } - public LuaValue mod( LuaValue rhs ) { double d = scannumber(10); return Double.isNaN(d)? arithmt(MOD,rhs): rhs.modFrom(d); } + public LuaValue mod( LuaValue rhs ) { double d = scannumber(); return Double.isNaN(d)? arithmt(MOD,rhs): rhs.modFrom(d); } public LuaValue mod( double rhs ) { return LuaDouble.dmod(checkarith(), rhs); } public LuaValue mod( int rhs ) { return LuaDouble.dmod(checkarith(), rhs); } public LuaValue modFrom( double lhs ) { return LuaDouble.dmod(lhs, checkarith()); } @@ -252,7 +252,7 @@ public class LuaString extends LuaValue { /** Check for number in arithmetic, or throw aritherror */ private double checkarith() { - double d = scannumber(10); + double d = scannumber(); if ( Double.isNaN(d) ) aritherror(); return d; @@ -268,7 +268,7 @@ public class LuaString extends LuaValue { return (long) checkdouble(); } public double checkdouble() { - double d = scannumber(10); + double d = scannumber(); if ( Double.isNaN(d) ) argerror("number"); return d; @@ -277,22 +277,19 @@ public class LuaString extends LuaValue { return valueOf(checkdouble()); } public LuaNumber checknumber(String msg) { - double d = scannumber(10); + double d = scannumber(); if ( Double.isNaN(d) ) argerror("number"); return valueOf(d); } - public LuaValue tonumber() { - return tonumber(10); - } public boolean isnumber() { - double d = scannumber(10); + double d = scannumber(); return ! Double.isNaN(d); } public boolean isint() { - double d = scannumber(10); + double d = scannumber(); if ( Double.isNaN(d) ) return false; int i = (int) d; @@ -300,7 +297,7 @@ public class LuaString extends LuaValue { } public boolean islong() { - double d = scannumber(10); + double d = scannumber(); if ( Double.isNaN(d) ) return false; long l = (long) d; @@ -309,7 +306,7 @@ public class LuaString extends LuaValue { public byte tobyte() { return (byte) toint(); } public char tochar() { return (char) toint(); } - public double todouble() { double d=scannumber(10); return Double.isNaN(d)? 0: d; } + public double todouble() { double d=scannumber(); return Double.isNaN(d)? 0: d; } public float tofloat() { return (float) todouble(); } public int toint() { return (int) tolong(); } public long tolong() { return (long) todouble(); } @@ -627,6 +624,17 @@ public class LuaString extends LuaValue { // --------------------- number conversion ----------------------- + /** + * convert to a number using baee 10 or base 16 if it starts with '0x', + * or NIL if it can't be converted + * @return IntValue, DoubleValue, or NIL depending on the content of the string. + * @see LuaValue#tonumber() + */ + public LuaValue tonumber() { + double d = scannumber(); + return Double.isNaN(d)? NIL: valueOf(d); + } + /** * convert to a number using a supplied base, or NIL if it can't be converted * @param base the base to use, such as 10 @@ -639,26 +647,36 @@ public class LuaString extends LuaValue { } /** - * Convert to a number in a base, or return Double.NaN if not a number. - * @param base the base to use, such as 10 + * Convert to a number in base 10, or base 16 if the string starts with '0x', + * or return Double.NaN if it cannot be converted to a number. * @return double value if conversion is valid, or Double.NaN if not */ - public double scannumber( int base ) { - if ( base >= 2 && base <= 36 ) { - int i=m_offset,j=m_offset+m_length; - while ( i=j ) - return Double.NaN; - if ( ( base == 10 || base == 16 ) && ( m_bytes[i]=='0' && i+1=j ) + return Double.NaN; + if ( m_bytes[i]=='0' && i+1 36 ) + return Double.NaN; + int i=m_offset,j=m_offset+m_length; + while ( i=j ) + return Double.NaN; + return scanlong( base, i, j ); } /** diff --git a/src/core/org/luaj/vm2/lib/BaseLib.java b/src/core/org/luaj/vm2/lib/BaseLib.java index d77ea2d0..1266cbb1 100644 --- a/src/core/org/luaj/vm2/lib/BaseLib.java +++ b/src/core/org/luaj/vm2/lib/BaseLib.java @@ -321,7 +321,7 @@ public class BaseLib extends OneArgFunction implements ResourceFinder { public LuaValue call(LuaValue e, LuaValue base) { if (base.isnil()) return e.tonumber(); - final int b = base.optint(10); + final int b = base.checkint(); if ( b < 2 || b > 36 ) argerror(2, "base out of range"); return e.checkstring().tonumber(b); diff --git a/test/junit/org/luaj/vm2/FragmentsTest.java b/test/junit/org/luaj/vm2/FragmentsTest.java index 9a7b410b..e9fe961a 100644 --- a/test/junit/org/luaj/vm2/FragmentsTest.java +++ b/test/junit/org/luaj/vm2/FragmentsTest.java @@ -555,5 +555,10 @@ public class FragmentsTest extends TestSuite { "end\n"+ "g()\n"); } + + public void testNullError() { + runFragment( LuaValue.varargsOf(LuaValue.FALSE, LuaValue.NIL), + "return pcall(error)\n"); + } } } diff --git a/test/lua/baselib.lua b/test/lua/baselib.lua index 9cb89006..96c50ce8 100644 --- a/test/lua/baselib.lua +++ b/test/lua/baselib.lua @@ -72,8 +72,8 @@ print( 'pcall(pairs,"a")', pcall(pairs,"a") ) print( 'pcall(pairs,1)', pcall(pairs,1) ) for k,v in pairs({}) do print('pairs1',k,v)end for k,v in pairs({'one','two'}) do print('pairs2',k,v)end -for k,v in pairs({aa='aaa',bb='bbb'}) do print('pairs3',k,v)end -for k,v in pairs({aa='aaa',bb='bbb','one','two'}) do print('pairs4',k,v)end +for k,v in pairs({aa='aaa'}) do print('pairs3',k,v)end +for k,v in pairs({aa='aaa','one','two'}) do print('pairs4',k,v)end for k,v in pairs({[20]='30',[30]='20'}) do print('pairs5',k,v)end -- _G diff --git a/test/lua/luaj3.0-tests.zip b/test/lua/luaj3.0-tests.zip index 740fcbb77c0337ae7108e76b82c3988e46a025ec..50515d1ccf65534dd855f583f967a6869076e9bd 100644 GIT binary patch delta 13954 zcmZ`=cRW@9|G($nVnqDUkpJ1cwt z&bfW6PkleXKknmw-p}`Izuxn_&#k&ek#dVdLi-E`q(Y%kgs6`)$5aVfX*fln;7eM~hU2qjN$%2k5Ju zm~D+Gt134S1S{PXI&Rh6eaR$M^pdHz1goFW`>5kpNlkv&!C1>mY=psfxOU5tcESWV zy_S4*jDqfowTgt3fdVH_wJZyc#C`@iPb={Rh)U!+HS9c3;~mQlWUq|wGyVK-f6Lx% zN4ow5FYB_8TquckfixjymF})uR&`URmb=Dmi4}KrZxT)aT247D@cEKM0 z@RWm+#v-0cchA+(SJm5H!#?HZ#1g}r-FPN0Z$+d!hwWcT5&Qc{8xET~yfY;>bbVwp zH?eWFRHR9HEVBJr>@lF<{e)}eJEFh}Y=M~*CoNvK^J{IE_w6I(Zj7Q6Z?DPQ)7TcF zvX-^;BnDghJ1^X)d37S_?gTp?i5DA7)h&O=LjJ{n*52V9hVpHqZg zkT9U`(Ry8w#AFz#UeeX0=JAP6=6pXD18*ov$O={KJ(C67sBJ-vqLanxJX^l&IwLak zbP3$8DE!-6VLK&n)a@^NNs6{8Nih=IWAaw3g^9&g)>IsY)<1SUGtb3HM4zvCQbsU4 z#Hh6z%YV1~Iu+eHHp=t*vXze#UbUVp!*U(<`RF_K{^Ab7chQPER^u#DXn)PMNt?`c zt~oFOU?9jm%DY9~`(l*%SrK=lpD~ynUE(X~T;{YbE8G6DqvPr8mn7sG_Y#TS=VRWG zR901fw7e4gg1|*TWc%5XCc%%FPTPHPMxZXCxds1_;}!<)L=Y2?7b@=$cYYh zYuM<}u<1Eg7gsmc#K|v>a;dz&dF{>lQ%-?j@HW;H%HN)&v+he7FHbmKL2|`kDbGP| z^m+x)a`k(L>LOQHSCY~jenxg%#_y^GB})-lytc@|K(g$@7c1sYin=1*)92>mqqxf* z8!2YllWU^+t$Z6=#y?9YV^dm)&QPQmIX$rK;5Ho_4modIt*1Ps`|(?3p7TAY_1^AU z{p(i_u&K>#I6R7a{k)GAUVA7}wONXl=P$4l7*#xIT`kNsAfvZym ztFFQ8bvoY-mA9@WDMTx`r)xd#Po7}Lr(wrj|6Zly@LGjI;ugy_t_5)PSSr^|Akw&g zm@`OhA!wqDwbyWL)oLjeJD}0FaQlQu{Up^_vC(b!Ptq3)7kpGP#moX`kIjPCYH#*j zpA<<7Pkv>3H6ANzzAfN7R`IGMctU8q&#!IV|A?7bb3A?slNtA#=k{XPjl=k5GRORS_Pk((yF}>5g2gKCao0JGM9dB$2+x6CSZS9dStO+Wlg7z*AP%x z*;7)o5Xrn&y{zw-KBz9;<-71M!6j|c?7O4Eo=KOPzDd!Wn#qfXd6UwP;icWz-*-PK zR|@!kgr(rofd5DJxjHc;?0~$kvVDD}@5|uyn#zr@!yh8l-^l~pk+<)-e^(HZ3i7|3 zkZjxNDhigzf17A(+MgT29!x1S7}ngXy}x`~<1V&;=z-pMPz^xe@5McW$Dqo8$@WZx*qZ3`2} zs_nfm#$RvEt*l*jb=ny5biC73W1vf1RwaJO?&uXUhDc~;Z$f6%E!QE zYCb1rwGc@>A%Z=o9tV*!k0Ah!luXR~xH=PuDZpvnU%t}VYy-x!qREwV1`7VFQ-CcTN-odKdKShg~>6EOAXn@>;g#4R=N0 zd&%7<@a5<>*N#HD5~O_B4;w9IclYOGFD+ZLbh^Oc#$PUob(>a}V`*|Ms1p@BW9~w< z=99lMe7$ydc=PN0&WjI=*Sp?|emS|H^gKH`AMS*VZes!!b_LJtPL&5&5+e^EfHi4Uu zse>MA+1uW{6VW}TaEeJ+T$h~oePpMWwa>XPX)OXQQ;~Z0Hn~8No)*guizq!yFA}}v zu7*uI()6Qc$y+Y+u{kCInq@KlR1N9#lpoYTrVX+WvM!RHCp(XoDOHSgXB1@~3$?g2 zTAAE+lz`ejQ3)$8W5$8mYAj;emaE|iP;{}!Qx&$NtKy9_Y8sI?K-;mL%_NY?;SLYI zDW>*?=5Ynd*1k=kPq2)Vp>5gFj8MNJy6z4CLR+KQ#KO`llv+3VJ~x`m;X(>asU{l* zNtQ^mIz@13#mLecXp!jrs;0a1aSvgvQu_vRAoJ_wo2=N;2J=91r7+&z{qbzhC+QYc zno^YR98H-wyIxYqeOqm@i(Kj8>hO?#Eoqb4De^o`OJvIPCapWaGWIKX@R{5}ImQR} zH;ja0=Df{>RJMrkx!r|q46~Mxdzu+Nl|PsP-?deJrO-d#Y*TJvW-DDw+81X+G)ix* z;2rnWUwZ#Dw%(^rx_8hhyMXVE!p)8{-Z7b`*(~7Mn{r>Nr0uv1DKr%17AfC-xGi_x z)!warKmIi>jW{{QENxB!&*amh=G}mhQ)15KMwTbGirEOh8Z$BupQ|K(tKu*%a#hw; z2Cty&>jPRp3&r)j7WG|fOy`;mP#L;!-^Xw&;Ub}!nHPt9$^ zGa;`>9VDCt*P^~kQ#h;Uep6w&LipG^{SKZJx#)vVYRTG}kl`2iOCZ13s-l8H?4LeN zOU&vzmnZMm!QP8TNT)fPQes;;?t-eDmy zL_GUW+x-UTmXQZv-q~r&GbHo6R&~cj^oj4D$sed&@kyu@KgT_&9DA*=ZI?FxW6i8* z=U~En$!;;-Jkpfm@VzrSj-M1*uIsglPyly5<;L$+TUlme8z=>gQTamc=?UujQ^tpK z`5PUVsf@daT@uO5=w|Tax#>+?3|5X^YJRBH4-{(Fik6mCu^2&adcNR`SU$s^zTrcxT5IJ zM{G2`@RH1!4vR|I{l+~@kaF$-pdc%EKcaoF!r}9T;*(iN!R_NQk0|lVXD&T!&|#x2 zy4m6<;5xu2R8~!Ca(g1KBS3}U#p@gK;}@qZw3+IRst%cHh4Fnnk{o|LjXO@oAaui? zemTjelteGc`KGyjn`GQ~w7Lt;vXknUFf%*1rYubD8%-6gwo26`E8Qa_2&||h4AsSN zARBcy9S@9dc=J$<^#!TUs)Wi~W5}08Uk~uet6TZ!)wx<&50A~fI2K}0_bEGaqJ@}$ zL#IC@Ysobvl6JQ3`}Jgb6nI{W_w4#6-|G725Pz!c3lrTi_3v~2+BOxV9yWz;_ZGiv z@te)G^7!iJVYLU}P_q>IQGN{f5aZeozDjvwO>k2;qn3|W;B4%}ud{cHj(?WE$=$?V zZMH;Fp-7+h&^FXeRI11|diw6N;zx1D#Vn*W4Xy{1 zWF0(F92FKh1Q;@~+&-nCdsN*+TsxJ#Tk*56K=0EQLeh(8+h!i_(59XiIEJj{SOGBt zq^uH8MAr6#6Oy>T1;$XKP<_T1udGN>J@pBW?78vclXaU`w)3hrL(GUmTND4}$SdaY#EX<7Cyf$2XDQBn_D;%t zQ*h_{P+p>&T=Pdao=Yk5r}%9+6L}+9<+8uprqB%2t;a1|dr|M6~~>yff! zUbH;irghAMN0M(OXO_#(P3pYtKeqqyQtW#^nJRAYnc_PD>zt;f2(4bYrs7ELIq^he zy?gh_og<$HM)h&q=}Y!m3lG)W=^tB_V{zh-N1u9W`*ksbu8leRmc4(=4IOTEC@U*H z!P#mz*PXxMyo`Zt7Q-3aZ&(t$?JAQo#)n}7+hr3Q>aDAHN<#FWue}!2Xgt~c;vyH5 zG3N+J&zdj=OA*@zoqJ5zT5CFbi#AJwj~^ciItXvr<&h|ra0=GgAP+!&7nUGtFs#Hs z*XsVMBRg?3vM}xw^ALyal)G@cg?{=STC$BMWm!6)f`@5h?YKNwbh9GXwrM0j+sN30 zf)5x}jkVe>IAwNU<;$3x+i5UB`!?f&HpQddmv`^-2#H}SV@E}Jbw&?zTT0Ne-QC@b zM~?&&a1U-~pDHs>ef32P%9I*te0Gg_lIjMU13w~Z{^UYP5m|jUXG23kIIA|HT!{R7 z`@zQUYF&(&mv6XF1GC2~EU}7qH`M{k-%&P!)X!5$Te4kwq_oBNwwfyDJsfvGk38JEv~}Rt!1uk-OVMujs%PoGd|uEv zqS{L6g!g?wv6(s8uaxxt_yB&kT$1d!-U`O&T(sv8bNO=cb)iQ+ScDYcQlAyC%|EQf z3vXI#3JQ*^ZhZJ$4nCH{svIJZ5+e?r$M>9$S+O2dr#&h9;RULK-L``LVq-gX`^zC^ z-}fA?#YSe2x*P09Gwl~>9mN}sSf0f+<@VlbkU)7}NcDd=zEm`_A(J#JE;_<3!z)tk zOjnq+Xqwi`c(sJzRhy6Xq2gmt|TwhE0%aXRd{q5xq<>0OP4>Ri8y{Bb-T__mN7=Or_h}ium|9I%Z zA>Q$pyt2E1*0dEvuJ_GPyiyMqB$?+%NrPV3q}m)7=S~Qd4yz>OVfN@c0DixT9Fj?0 zGvUGiF{xE^m}UWJ7CnRim*#^`+v+eL(CSiTh;~QM@od0?8)-;jyp_77jFPa zJ)~qFS9h(z!_oOv#otnNOpow#uThfg#O;#Q{T%^z@w)vS&^W<*Zr%r*&9 z-q^q$Xra)4fU^3`&JST9_P3Dbt*)04AVZ|ojS~aS_{hUu3Lpout4^H`&^?4aWN`o< zRLBFVG~i5uJOrHr3`miO_lCd`V&q}U8W=xf08vPJW&x0enq~nJ zq_Q*%R3K&k9B>&apDqH&p>y8=ex!2s8}J_1fQa!!N?3vk#JK<*MJliuYovrF1VciL zfB;f~#VA9WivTB5fo0htB`oF^+!LVJOMu`%U7>D!39ukRK-2x-V8TAYB#nTjl4y~i zl%ta9FLb2Hn8-NF)JcMmLdlRr>@@)O5o-r~VW&&~+H%ybYoU3O4h^vxphbTQxL|;$ zLWTn5WQG?03Enb8lTsmIr5pO#KOnB3)a|;V+wqW=*FL{x?E9cANpa+nXrZ4n#v{=o zLF7($ z3Oz!}IP#laYXoCJjDUA$f3pwGVy@yscVYjRNf2xjRbAdbh6QI=69M>3+Zq8_fRm9$ z3I6mITBZegp*2d-84+$n1^)CGY2bmHslW)NL6aK%8QdQYh18%0(tt+;{!H2rQMNQ- z2GVdq14{f8I;24WvY`cyk%lH(@Mot+8WIsKjP92~bv1OL0y29-D-7V#pAw!sfRr>p zuey+~-Qt%kw*y~w-8_{#UqBB%iwE(D;2W+Viw@+<2vTFmr49#u4ve&0SDiVV5}W!& zBFE+6WG!`T_4S*leX{ph)VljIkS zXW@mo4hj(MYn<8a8e+-QNF>UcwCGakX}B2R?|i=Vlh?gOcHvbN-A&^M$NZNEjjR2b zJ1?Z8cF3)tW6952*j?@=Xe3&9?R?70^_?`?B#VIt{k~K2-60W%D2cHLEbRU@txKPo z*n4cR5_-r3gh2^npT}gL(w>#R5zcVYsUuu83S309^**d-x^}-l_TrF>{eyNZ` zdp8V2UnPgd>z%?QP&5vo3bvKxRRQeq00FiYShlU_NPjYr#yYxB9 zD7hpf?Ii^RtamPd%q4MCOy$6^fvjoeYWo>W7j1@ZSyi(mQ~fV zkzV{ccV4DRoL;H^VB8u}ukP9Z=)K4ovnA<)VL{D10al5M=H-ZhxjN<-kHQ0Hq?v;X zwkJo{7d<(P+C$p(&b(zfW2KcT{k~c^<6OILng*fDBT+18+E>0pwP#;-(!(C=Bw@C~ zTop~t1)DZ&Jy97f8AYCv(@Akoay+IsK>iF9iW^n5cKj;K>eU_lXa^<|9Wv5YL3(mB zStX7_!a1}6{mE#L+Xb=OT^j~5K~DC|D60B93lyUIl{5i|a}C7BnA;=YQBK&b)PM{SDBu6M}4WBTH2Ti?OYwWwcUyDbG1b9l!i?)8*@s2*td+skS&3& zTB}EpBA?C%o1*ZUXby@Z^&`cuPWZP^Dy5AT1)Y9ou{^Fef&#A^@VGvso_Vi69FmhE z5PnQd8l`H|pULQUQmR%=+LC9|zva|d=K+NWb4M#xu?croBG{dlKGLKYA9`aINvnqm z*D0GmIpq-PKt;r7$-iZzz0wx){glG8)&?JM8e`9)*RoCM)24S1ks6&cpidF1A?QdU z;ESw4O;WPpr4l6`zh{g}r=O2rTLD#75-bYrw3ejHqfZY;+Fd~tqGUnjs^E_%4U=gys^;zuMjw_>R z?&+^8{4`LQsD_=Pb-v7QNPd|dcfsnT;}@>(nuX37lF_)F1if`LmgyX3=GohCOWb-- zeNq3eEA~6dEBOVCyHL*b@bQ!f0@`*1u5@w4>+xKI0c4n`2~C>Mo|1`aZ>-v~4@X=c zvn!!5PoW`vZGLtu=DF#q54}MfUS4^xG=mvM+0vsf)5gy(HYsmq$SK{>B@^D~Pzav; zGNTxqW1d>V+LXLGv-WPhjwh3%zRKoKmN2hvMR*@JmcomgDE9dkO|_vzo?M*g@|+Ed zt@Kn$-G)BPwjbtgn5aG&MOs zTTy^c@?8&SzXaY0fs3WC6N#m(2eYif{=-5K%z$Az=hRi9fW@?Lmoakn*`ztMc~Os^ z1QQQ_z;>(J+9y@4eMu_%VivOF^4=b0@?ECa@g$@4_yeDY5dZyf{pz$ec092EsDe62%<*kE zBu!KQ`JD-Ab+Hrgh~vta=FZ)Ge14(_@8(mvryDHT(dtuy^E)F`eXC0AK8ngA=(l~| zeo-FzrB^mujDngU?_~^VjCaf31N_Tdm`^LwY zXL^!Do@AD}xbX037}738ZmoXX{d)Oo_>AxgTkP)3 z7Uwur1oQnFL)yMRTki?JW0Mb`O&HV!n&xzutekAGbb1&jX1ci15X9w(b*9eHx+`7U zub6DwROgM%9<WVP=e_0m z>5=Un!|h(|!Txyh-j40g)}?~+U{Ag5Etx0EWfJT1?q1loWESi3dKwCGDXD$4fq}gz zy&A9TAIQk{x(1zaE&!kgJ=O(PMHKvkQXf6-FjKZEx3Di) zwlB|){(7`2PIdrzuhG)VWMj{^Vq4F3qf}Px1AbLTG{mn5K2h~sSIFy}tnT|5Nb~MS z`Ad55uunnrH*)iu68X>FaOiq*eK1f=sVgl}J7|+*aXNc`s&8-7r7=LeKe4Y*({@)} z4C2!V0}efk_wl6kxcDF|5-QgR4S{Y5-vHbti1d7H%w}FxM|1&X01llR^^jjuRL<@? zRwrZ#wgW&cv}pw5&d=<|zb6v|V~`(rdJi@KH5))x=Ab^DK7F1dQZ%?>WOFERfjltffK(R`K3 z0Dll-E{Q@NM*Ukwo*4>dV{7egk9;5U7wa*EwdY;d8jp@Q{ZHg>r?dNdMsDaX_-@a@E_-$I9t{l;ZO6>-Fv#WFM~{U593fMPcIJ# zm;Xu#LX`(o(UK;kP+nHnPXCo~glHKNwR8g^a&Wq2<@CQEiy`5zRmITObw{x=(9)2IV%xIIjOOM$oT|3payG3imP%F(+R z6bg?5g~I>CB!w&#%E$R{$xxspJk~j(Y)4QZsD+jsK~oG@F)G!vm<4jW0;&M)(ETf* z8HTa~m3qE{7UFaQRWNi_D2Ocqq=NjN;C;$%=$R9E5kNsK&Y&?+3i&z1wJ50H8D_iG zj7rUGriZj#U{MNCq6=sW$Ut*0pgAB7opyzl^>3pfF#|L`1bTq{(3~sCfbrc&K|y9{ zT8PyRRKqwE0?>0eG}8})GB=nYlo)`X5ChB*p$B*rI_wTZniMcqB$@_Nc87V!XaPth z3}k}RykMbk5CSO<07?!684)pRm1Q7T&{7l}*~>_6^*I2E zHUkV$n-3g5I_QuuXo30C13)ajust!pa4J~)0q89O%>LCER09$qK0o*s-j~l%gdaS2 z(?WxOpdOqH;j5rNhJFTsdS(DhDB~)44s+v2jSD*LkBFJYwNXQEvj7Ri9R!LW;rOHX zMExXa^9Qvtl5+s$J_qnXa|k8VACz~0v{6A>0pJ-7)wh3??gYR}m*AS~`Vi<50-KfA{Y)qD-;t9Dj@^rbuh?;$yoy64oFQ1zf%7_`LiM;W!6tN4vMVc z>VG_d$1$ofR1{Ld!YjnTR*GOO$OMEy*;tV6-|!~{&V;u9Ma_HJCrjJH?I}_e-V{jbCBH_j>@b?4-YA6)#9~`P?Xk;)j{EGu;{@8W%l4f{%CniV1 zeMA@M2)YhCk{U_;uW1-SS( zED#ObzVsP`%uh6sWi*J~-{E#vxDGepwq;}v_h%-uNlC9wv8fI9{;;n!iE3$ z)yr>3;q4$iw;f>wp>vEN{a?n+z>+a$Tp+ye(;xbeE!yd8aQo4tAXIS$o@j%wfyiy| z?{p6r+H<+UyN(-7zsJuHeaXTg)F}+o{-qB{fW15iu_XNR61OA22*VgTB{21K4b6X< z(SWekLIZH|Q@<)QDsV4E;9gK2`FGceJNGMEzqW<{6*e|R%+4T3CmB4aPK*AYg@3rQ zW&|Z)|I^mD*I`=>pn16X$ClrT;!gybm=?`Jl$))Gors;4i^~=7OPBxNdm$+eg(-pa zP;Mef^V1_4#1tT=b3+8q*hTn9_RnDWVM@8hKVn@x9c+DU{}M_Gu_S?{_(v__Qv>S% E0F?fQ+yDRo delta 14085 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 Cvg~01 diff --git a/test/lua/mathlib.lua b/test/lua/mathlib.lua index 9ed3ac3c..5f14e6f6 100644 --- a/test/lua/mathlib.lua +++ b/test/lua/mathlib.lua @@ -228,7 +228,6 @@ local x = -1 local mz, z = 0/x, 0 -- minus zero, zero print('mz, z', mz, z) print('mz == z', mz == z) -print('1/mz < 0 and 0 < 1/z', 1/mz < 0 and 0 < 1/z) local a = {[mz] = 1} print('a[z] == 1 and a[mz] == 1', a[z] == 1 and a[mz] == 1) -- string with same binary representation as 0.0 (may create problems