diff --git a/ltests.c b/ltests.c index f775d8f6..8a81ce76 100644 --- a/ltests.c +++ b/ltests.c @@ -1,5 +1,5 @@ /* -** $Id: ltests.c,v 2.55 2008/08/26 13:27:42 roberto Exp roberto $ +** $Id: ltests.c,v 2.56 2008/10/28 12:54:25 roberto Exp roberto $ ** Internal Module for Debugging of the Lua Implementation ** See Copyright Notice in lua.h */ @@ -728,13 +728,20 @@ static int newstate (lua_State *L) { lua_Alloc f = lua_getallocf(L, &ud); lua_State *L1 = lua_newstate(f, ud); if (L1) - lua_pushinteger(L, (unsigned long)L1); + lua_pushlightuserdata(L, L1); else lua_pushnil(L); return 1; } +static lua_State *getstate (lua_State *L) { + lua_State *L1 = cast(lua_State *, lua_touserdata(L, 1)); + luaL_argcheck(L, L1 != NULL, 1, "state expected"); + return L1; +} + + static int loadlib (lua_State *L) { static const luaL_Reg libs[] = { {"baselibopen", luaopen_base}, @@ -746,21 +753,20 @@ static int loadlib (lua_State *L) { {"packageopen", luaopen_package}, {NULL, NULL} }; - lua_State *L1 = cast(lua_State *, - cast(unsigned long, luaL_checknumber(L, 1))); + lua_State *L1 = getstate(L); lua_pushvalue(L1, LUA_GLOBALSINDEX); luaL_register(L1, NULL, libs); return 0; } static int closestate (lua_State *L) { - lua_State *L1 = cast(lua_State *, cast(unsigned long, luaL_checknumber(L, 1))); + lua_State *L1 = getstate(L); lua_close(L1); return 0; } static int doremote (lua_State *L) { - lua_State *L1 = cast(lua_State *,cast(unsigned long,luaL_checknumber(L, 1))); + lua_State *L1 = getstate(L); size_t lcode; const char *code = luaL_checklstring(L, 2, &lcode); int status; @@ -856,8 +862,8 @@ static int testC (lua_State *L) { char buff[30]; lua_State *L1; const char *pc; - if (lua_isnumber(L, 1)) { - L1 = cast(lua_State *,cast(unsigned long,luaL_checknumber(L, 1))); + if (lua_isuserdata(L, 1)) { + L1 = getstate(L); pc = luaL_checkstring(L, 2); } else {