diff options
| -rw-r--r-- | lapi.c | 16 | ||||
| -rw-r--r-- | lauxlib.c | 13 | ||||
| -rw-r--r-- | lua.h | 3 |
3 files changed, 19 insertions, 13 deletions
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | ** $Id: lapi.c,v 2.126 2010/05/05 18:53:41 roberto Exp roberto $ | 2 | ** $Id: lapi.c,v 2.127 2010/05/07 18:10:01 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 | */ |
| @@ -61,8 +61,8 @@ static TValue *index2addr (lua_State *L, int idx) { | |||
| 61 | else { | 61 | else { |
| 62 | Closure *func = clvalue(ci->func); | 62 | Closure *func = clvalue(ci->func); |
| 63 | return (idx <= func->c.nupvalues) | 63 | return (idx <= func->c.nupvalues) |
| 64 | ? &func->c.upvalue[idx-1] | 64 | ? &func->c.upvalue[idx-1] |
| 65 | : cast(TValue *, luaO_nilobject); | 65 | : cast(TValue *, luaO_nilobject); |
| 66 | } | 66 | } |
| 67 | } | 67 | } |
| 68 | } | 68 | } |
| @@ -136,6 +136,16 @@ LUA_API const lua_Number *lua_version (lua_State *L) { | |||
| 136 | */ | 136 | */ |
| 137 | 137 | ||
| 138 | 138 | ||
| 139 | /* | ||
| 140 | ** convert an acceptable stack index into an absolute index | ||
| 141 | */ | ||
| 142 | LUA_API int lua_absindex (lua_State *L, int idx) { | ||
| 143 | return (idx > 0 || idx <= LUA_REGISTRYINDEX) | ||
| 144 | ? idx | ||
| 145 | : lua_gettop(L) + idx + 1; | ||
| 146 | } | ||
| 147 | |||
| 148 | |||
| 139 | LUA_API int lua_gettop (lua_State *L) { | 149 | LUA_API int lua_gettop (lua_State *L) { |
| 140 | return cast_int(L->top - (L->ci->func + 1)); | 150 | return cast_int(L->top - (L->ci->func + 1)); |
| 141 | } | 151 | } |
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | ** $Id: lauxlib.c,v 1.208 2010/04/14 15:14:21 roberto Exp roberto $ | 2 | ** $Id: lauxlib.c,v 1.209 2010/05/10 15:25:02 roberto Exp roberto $ |
| 3 | ** Auxiliary functions for building Lua libraries | 3 | ** Auxiliary functions for building Lua libraries |
| 4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
| 5 | */ | 5 | */ |
| @@ -24,11 +24,6 @@ | |||
| 24 | #include "lauxlib.h" | 24 | #include "lauxlib.h" |
| 25 | 25 | ||
| 26 | 26 | ||
| 27 | /* convert a stack index to positive */ | ||
| 28 | #define abs_index(L, i) ((i) > 0 || (i) <= LUA_REGISTRYINDEX ? (i) : \ | ||
| 29 | lua_gettop(L) + (i) + 1) | ||
| 30 | |||
| 31 | |||
| 32 | /* | 27 | /* |
| 33 | ** {====================================================== | 28 | ** {====================================================== |
| 34 | ** Traceback | 29 | ** Traceback |
| @@ -442,7 +437,7 @@ LUALIB_API char *luaL_buffinitsize (lua_State *L, luaL_Buffer *B, size_t sz) { | |||
| 442 | 437 | ||
| 443 | LUALIB_API int luaL_ref (lua_State *L, int t) { | 438 | LUALIB_API int luaL_ref (lua_State *L, int t) { |
| 444 | int ref; | 439 | int ref; |
| 445 | t = abs_index(L, t); | 440 | t = lua_absindex(L, t); |
| 446 | if (lua_isnil(L, -1)) { | 441 | if (lua_isnil(L, -1)) { |
| 447 | lua_pop(L, 1); /* remove from stack */ | 442 | lua_pop(L, 1); /* remove from stack */ |
| 448 | return LUA_REFNIL; /* `nil' has a unique fixed reference */ | 443 | return LUA_REFNIL; /* `nil' has a unique fixed reference */ |
| @@ -463,7 +458,7 @@ LUALIB_API int luaL_ref (lua_State *L, int t) { | |||
| 463 | 458 | ||
| 464 | LUALIB_API void luaL_unref (lua_State *L, int t, int ref) { | 459 | LUALIB_API void luaL_unref (lua_State *L, int t, int ref) { |
| 465 | if (ref >= 0) { | 460 | if (ref >= 0) { |
| 466 | t = abs_index(L, t); | 461 | t = lua_absindex(L, t); |
| 467 | lua_getfield(L, t, freelist); | 462 | lua_getfield(L, t, freelist); |
| 468 | lua_rawseti(L, t, ref); /* t[ref] = t[freelist] */ | 463 | lua_rawseti(L, t, ref); /* t[ref] = t[freelist] */ |
| 469 | lua_pushinteger(L, ref); | 464 | lua_pushinteger(L, ref); |
| @@ -600,7 +595,7 @@ LUALIB_API int luaL_getmetafield (lua_State *L, int obj, const char *event) { | |||
| 600 | 595 | ||
| 601 | 596 | ||
| 602 | LUALIB_API int luaL_callmeta (lua_State *L, int obj, const char *event) { | 597 | LUALIB_API int luaL_callmeta (lua_State *L, int obj, const char *event) { |
| 603 | obj = abs_index(L, obj); | 598 | obj = lua_absindex(L, obj); |
| 604 | if (!luaL_getmetafield(L, obj, event)) /* no metafield? */ | 599 | if (!luaL_getmetafield(L, obj, event)) /* no metafield? */ |
| 605 | return 0; | 600 | return 0; |
| 606 | lua_pushvalue(L, obj); | 601 | lua_pushvalue(L, obj); |
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | ** $Id: lua.h,v 1.268 2010/04/14 15:14:21 roberto Exp roberto $ | 2 | ** $Id: lua.h,v 1.269 2010/05/10 13:50:20 roberto Exp roberto $ |
| 3 | ** Lua - A Scripting Language | 3 | ** Lua - A Scripting Language |
| 4 | ** Lua.org, PUC-Rio, Brazil (http://www.lua.org) | 4 | ** Lua.org, PUC-Rio, Brazil (http://www.lua.org) |
| 5 | ** See Copyright Notice at the end of this file | 5 | ** See Copyright Notice at the end of this file |
| @@ -129,6 +129,7 @@ LUA_API const lua_Number *(lua_version) (lua_State *L); | |||
| 129 | /* | 129 | /* |
| 130 | ** basic stack manipulation | 130 | ** basic stack manipulation |
| 131 | */ | 131 | */ |
| 132 | LUA_API int (lua_absindex) (lua_State *L, int idx); | ||
| 132 | LUA_API int (lua_gettop) (lua_State *L); | 133 | LUA_API int (lua_gettop) (lua_State *L); |
| 133 | LUA_API void (lua_settop) (lua_State *L, int idx); | 134 | LUA_API void (lua_settop) (lua_State *L, int idx); |
| 134 | LUA_API void (lua_pushvalue) (lua_State *L, int idx); | 135 | LUA_API void (lua_pushvalue) (lua_State *L, int idx); |
