diff options
Diffstat (limited to 'lvm.c')
-rw-r--r-- | lvm.c | 30 |
1 files changed, 15 insertions, 15 deletions
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | ** $Id: lvm.c,v 1.241 2002/06/24 13:08:45 roberto Exp roberto $ | 2 | ** $Id: lvm.c,v 1.242 2002/06/24 14:11:14 roberto Exp roberto $ |
3 | ** Lua virtual machine | 3 | ** Lua virtual machine |
4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
5 | */ | 5 | */ |
@@ -205,30 +205,30 @@ static int luaV_strcmp (const TString *ls, const TString *rs) { | |||
205 | 205 | ||
206 | 206 | ||
207 | int luaV_lessthan (lua_State *L, const TObject *l, const TObject *r) { | 207 | int luaV_lessthan (lua_State *L, const TObject *l, const TObject *r) { |
208 | if (ttype(l) == LUA_TNUMBER && ttype(r) == LUA_TNUMBER) | 208 | if (ttype(l) != ttype(r)) |
209 | return luaG_ordererror(L, l, r); | ||
210 | else if (ttype(l) == LUA_TNUMBER) | ||
209 | return nvalue(l) < nvalue(r); | 211 | return nvalue(l) < nvalue(r); |
210 | else if (ttype(l) == LUA_TSTRING && ttype(r) == LUA_TSTRING) | 212 | else if (ttype(l) == LUA_TSTRING) |
211 | return luaV_strcmp(tsvalue(l), tsvalue(r)) < 0; | 213 | return luaV_strcmp(tsvalue(l), tsvalue(r)) < 0; |
212 | else { /* try TM */ | 214 | else if (call_binTM(L, l, r, L->top, TM_LT)) |
213 | if (!call_binTM(L, l, r, L->top, TM_LT)) | ||
214 | luaG_ordererror(L, l, r); | ||
215 | return !l_isfalse(L->top); | 215 | return !l_isfalse(L->top); |
216 | } | 216 | return luaG_ordererror(L, l, r); |
217 | } | 217 | } |
218 | 218 | ||
219 | 219 | ||
220 | static int luaV_lessequal (lua_State *L, const TObject *l, const TObject *r) { | 220 | static int luaV_lessequal (lua_State *L, const TObject *l, const TObject *r) { |
221 | if (ttype(l) == LUA_TNUMBER && ttype(r) == LUA_TNUMBER) | 221 | if (ttype(l) != ttype(r)) |
222 | return luaG_ordererror(L, l, r); | ||
223 | else if (ttype(l) == LUA_TNUMBER) | ||
222 | return nvalue(l) <= nvalue(r); | 224 | return nvalue(l) <= nvalue(r); |
223 | else if (ttype(l) == LUA_TSTRING && ttype(r) == LUA_TSTRING) | 225 | else if (ttype(l) == LUA_TSTRING) |
224 | return luaV_strcmp(tsvalue(l), tsvalue(r)) <= 0; | 226 | return luaV_strcmp(tsvalue(l), tsvalue(r)) <= 0; |
225 | else { /* try TM */ | 227 | else if (call_binTM(L, l, r, L->top, TM_LE)) /* first try `le' */ |
226 | if (call_binTM(L, l, r, L->top, TM_LE)) /* first try `le' */ | 228 | return !l_isfalse(L->top); |
227 | return !l_isfalse(L->top); | 229 | else if (call_binTM(L, r, l, L->top, TM_LT)) /* else try `lt' */ |
228 | else if (!call_binTM(L, r, l, L->top, TM_LT)) /* else try `lt' */ | ||
229 | luaG_ordererror(L, l, r); | ||
230 | return l_isfalse(L->top); | 230 | return l_isfalse(L->top); |
231 | } | 231 | return luaG_ordererror(L, l, r); |
232 | } | 232 | } |
233 | 233 | ||
234 | 234 | ||