aboutsummaryrefslogtreecommitdiff
path: root/lapi.c
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>2009-06-17 14:53:14 -0300
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>2009-06-17 14:53:14 -0300
commit6980cb1aa7bb0238b9cb916320b0c6365bfbb10e (patch)
tree70d14f0d45e4d002d302a9f5404feff3e20c0c53 /lapi.c
parent59a59fafc6693e0f2656b59a1b278f6ca89d64cf (diff)
downloadlua-6980cb1aa7bb0238b9cb916320b0c6365bfbb10e.tar.gz
lua-6980cb1aa7bb0238b9cb916320b0c6365bfbb10e.tar.bz2
lua-6980cb1aa7bb0238b9cb916320b0c6365bfbb10e.zip
new functions 'lua_arith' and 'lua_compare'
Diffstat (limited to 'lapi.c')
-rw-r--r--lapi.c28
1 files changed, 15 insertions, 13 deletions
diff --git a/lapi.c b/lapi.c
index 8f07a35b..d2a2f705 100644
--- a/lapi.c
+++ b/lapi.c
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: lapi.c,v 2.78 2009/06/01 19:09:26 roberto Exp roberto $ 2** $Id: lapi.c,v 2.79 2009/06/15 19:51:31 roberto Exp roberto $
3** Lua API 3** Lua API
4** See Copyright Notice in lua.h 4** See Copyright Notice in lua.h
5*/ 5*/
@@ -275,32 +275,34 @@ LUA_API int lua_rawequal (lua_State *L, int index1, int index2) {
275} 275}
276 276
277 277
278LUA_API int lua_equal (lua_State *L, int index1, int index2) { 278LUA_API void lua_arith (lua_State *L, int op) {
279 StkId o1, o2; 279 lua_lock(L);
280 int i; 280 api_checknelems(L, 2);
281 lua_lock(L); /* may call tag method */ 281 luaV_arith(L, L->top - 2, L->top - 2, L->top - 1, op - LUA_OPADD + TM_ADD);
282 o1 = index2adr(L, index1); 282 L->top--;
283 o2 = index2adr(L, index2);
284 i = (o1 == luaO_nilobject || o2 == luaO_nilobject) ? 0 : equalobj(L, o1, o2);
285 lua_unlock(L); 283 lua_unlock(L);
286 return i;
287} 284}
288 285
289 286
290LUA_API int lua_lessthan (lua_State *L, int index1, int index2) { 287LUA_API int lua_compare (lua_State *L, int index1, int index2, int op) {
291 StkId o1, o2; 288 StkId o1, o2;
292 int i; 289 int i;
293 lua_lock(L); /* may call tag method */ 290 lua_lock(L); /* may call tag method */
294 o1 = index2adr(L, index1); 291 o1 = index2adr(L, index1);
295 o2 = index2adr(L, index2); 292 o2 = index2adr(L, index2);
296 i = (o1 == luaO_nilobject || o2 == luaO_nilobject) ? 0 293 if (o1 == luaO_nilobject || o2 == luaO_nilobject)
297 : luaV_lessthan(L, o1, o2); 294 i = 0;
295 else switch (op) {
296 case LUA_OPEQ: i = equalobj(L, o1, o2); break;
297 case LUA_OPLT: i = luaV_lessthan(L, o1, o2); break;
298 case LUA_OPLE: i = luaV_lessequal(L, o1, o2); break;
299 default: api_check(L, 0); i = 0;
300 }
298 lua_unlock(L); 301 lua_unlock(L);
299 return i; 302 return i;
300} 303}
301 304
302 305
303
304LUA_API lua_Number lua_tonumber (lua_State *L, int idx) { 306LUA_API lua_Number lua_tonumber (lua_State *L, int idx) {
305 TValue n; 307 TValue n;
306 const TValue *o = index2adr(L, idx); 308 const TValue *o = index2adr(L, idx);