using light userdata to represent "remote" states
This commit is contained in:
22
ltests.c
22
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
|
** Internal Module for Debugging of the Lua Implementation
|
||||||
** See Copyright Notice in lua.h
|
** See Copyright Notice in lua.h
|
||||||
*/
|
*/
|
||||||
@@ -728,13 +728,20 @@ static int newstate (lua_State *L) {
|
|||||||
lua_Alloc f = lua_getallocf(L, &ud);
|
lua_Alloc f = lua_getallocf(L, &ud);
|
||||||
lua_State *L1 = lua_newstate(f, ud);
|
lua_State *L1 = lua_newstate(f, ud);
|
||||||
if (L1)
|
if (L1)
|
||||||
lua_pushinteger(L, (unsigned long)L1);
|
lua_pushlightuserdata(L, L1);
|
||||||
else
|
else
|
||||||
lua_pushnil(L);
|
lua_pushnil(L);
|
||||||
return 1;
|
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 int loadlib (lua_State *L) {
|
||||||
static const luaL_Reg libs[] = {
|
static const luaL_Reg libs[] = {
|
||||||
{"baselibopen", luaopen_base},
|
{"baselibopen", luaopen_base},
|
||||||
@@ -746,21 +753,20 @@ static int loadlib (lua_State *L) {
|
|||||||
{"packageopen", luaopen_package},
|
{"packageopen", luaopen_package},
|
||||||
{NULL, NULL}
|
{NULL, NULL}
|
||||||
};
|
};
|
||||||
lua_State *L1 = cast(lua_State *,
|
lua_State *L1 = getstate(L);
|
||||||
cast(unsigned long, luaL_checknumber(L, 1)));
|
|
||||||
lua_pushvalue(L1, LUA_GLOBALSINDEX);
|
lua_pushvalue(L1, LUA_GLOBALSINDEX);
|
||||||
luaL_register(L1, NULL, libs);
|
luaL_register(L1, NULL, libs);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int closestate (lua_State *L) {
|
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);
|
lua_close(L1);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int doremote (lua_State *L) {
|
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;
|
size_t lcode;
|
||||||
const char *code = luaL_checklstring(L, 2, &lcode);
|
const char *code = luaL_checklstring(L, 2, &lcode);
|
||||||
int status;
|
int status;
|
||||||
@@ -856,8 +862,8 @@ static int testC (lua_State *L) {
|
|||||||
char buff[30];
|
char buff[30];
|
||||||
lua_State *L1;
|
lua_State *L1;
|
||||||
const char *pc;
|
const char *pc;
|
||||||
if (lua_isnumber(L, 1)) {
|
if (lua_isuserdata(L, 1)) {
|
||||||
L1 = cast(lua_State *,cast(unsigned long,luaL_checknumber(L, 1)));
|
L1 = getstate(L);
|
||||||
pc = luaL_checkstring(L, 2);
|
pc = luaL_checkstring(L, 2);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|||||||
Reference in New Issue
Block a user