diff options
| author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2018-08-24 10:17:54 -0300 |
|---|---|---|
| committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2018-08-24 10:17:54 -0300 |
| commit | 8c8a91f2ef7acccb99e3737913faad8d48b39571 (patch) | |
| tree | 0807151944b7f7fd00eedfcfe94b4ee26fe25b21 /ltm.c | |
| parent | f99509581ee73c1c2dbddb3398e87c098771d31f (diff) | |
| download | lua-8c8a91f2ef7acccb99e3737913faad8d48b39571.tar.gz lua-8c8a91f2ef7acccb99e3737913faad8d48b39571.tar.bz2 lua-8c8a91f2ef7acccb99e3737913faad8d48b39571.zip | |
Deprecated the emulation of '__le' using '__lt'
As hinted in the manual for Lua 5.3, the emulation of the metamethod
for '__le' using '__le' has been deprecated. It is slow, complicates
the logic, and it is easy to avoid this emulation by defining a proper
'__le' function.
Moreover, often this emulation was used wrongly, with a programmer
assuming that an order is total when it is not (e.g., NaN in
floating-point numbers).
Diffstat (limited to 'ltm.c')
| -rw-r--r-- | ltm.c | 2 |
1 files changed, 2 insertions, 0 deletions
| @@ -188,6 +188,7 @@ int luaT_callorderTM (lua_State *L, const TValue *p1, const TValue *p2, | |||
| 188 | TMS event) { | 188 | TMS event) { |
| 189 | if (callbinTM(L, p1, p2, L->top, event)) /* try original event */ | 189 | if (callbinTM(L, p1, p2, L->top, event)) /* try original event */ |
| 190 | return !l_isfalse(s2v(L->top)); | 190 | return !l_isfalse(s2v(L->top)); |
| 191 | #if defined(LUA_COMPAT_LT_LE) | ||
| 191 | else if (event == TM_LE) { | 192 | else if (event == TM_LE) { |
| 192 | /* try '!(p2 < p1)' for '(p1 <= p2)' */ | 193 | /* try '!(p2 < p1)' for '(p1 <= p2)' */ |
| 193 | L->ci->callstatus |= CIST_LEQ; /* mark it is doing 'lt' for 'le' */ | 194 | L->ci->callstatus |= CIST_LEQ; /* mark it is doing 'lt' for 'le' */ |
| @@ -197,6 +198,7 @@ int luaT_callorderTM (lua_State *L, const TValue *p1, const TValue *p2, | |||
| 197 | } | 198 | } |
| 198 | /* else error will remove this 'ci'; no need to clear mark */ | 199 | /* else error will remove this 'ci'; no need to clear mark */ |
| 199 | } | 200 | } |
| 201 | #endif | ||
| 200 | luaG_ordererror(L, p1, p2); /* no metamethod found */ | 202 | luaG_ordererror(L, p1, p2); /* no metamethod found */ |
| 201 | return 0; /* to avoid warnings */ | 203 | return 0; /* to avoid warnings */ |
| 202 | } | 204 | } |
