|
|
@ -1,5 +1,5 @@ |
|
|
|
/*
|
|
|
|
** $Id: ltests.c,v 2.93 2010/04/12 16:07:39 roberto Exp roberto $ |
|
|
|
** $Id: ltests.c,v 2.94 2010/04/13 20:48:12 roberto Exp roberto $ |
|
|
|
** Internal Module for Debugging of the Lua Implementation |
|
|
|
** See Copyright Notice in lua.h |
|
|
|
*/ |
|
|
@ -535,12 +535,6 @@ static int settrick (lua_State *L) { |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/*static int set_gcstate (lua_State *L) {
|
|
|
|
static const char *const state[] = {"propagate", "sweep", "finalize"}; |
|
|
|
return 0; |
|
|
|
}*/ |
|
|
|
|
|
|
|
|
|
|
|
static int get_gccolor (lua_State *L) { |
|
|
|
TValue *o; |
|
|
|
luaL_checkany(L, 1); |
|
|
@ -554,15 +548,23 @@ static int get_gccolor (lua_State *L) { |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
static int gcstate (lua_State *L) { |
|
|
|
switch(G(L)->gcstate) { |
|
|
|
case GCSpropagate: lua_pushstring(L, "propagate"); break; |
|
|
|
case GCSsweepstring: lua_pushstring(L, "sweep strings"); break; |
|
|
|
case GCSsweep: lua_pushstring(L, "sweep"); break; |
|
|
|
case GCSfinalize: lua_pushstring(L, "finalize"); break; |
|
|
|
default: lua_assert(0); |
|
|
|
static int gc_state (lua_State *L) { |
|
|
|
static const char *statenames[] = {"", "pause", "propagate", "atomic", |
|
|
|
"sweepstring", "sweepudata", "sweep", "finalize"}; |
|
|
|
static const int states[] = {0, GCSpause, GCSpropagate, GCSatomic, |
|
|
|
GCSsweepstring, GCSsweepudata, GCSsweep, GCSfinalize}; |
|
|
|
int option = luaL_checkoption(L, 1, "", statenames); |
|
|
|
if (option == 0) { |
|
|
|
lua_pushstring(L, statenames[G(L)->gcstate]); |
|
|
|
return 1; |
|
|
|
} |
|
|
|
else { |
|
|
|
lua_lock(L); |
|
|
|
luaC_runtilstate(L, bitmask(states[option])); |
|
|
|
lua_assert(G(L)->gcstate == states[option]); |
|
|
|
lua_unlock(L); |
|
|
|
return 0; |
|
|
|
} |
|
|
|
return 1; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -945,7 +947,7 @@ static int runC (lua_State *L, lua_State *L1, const char *pc) { |
|
|
|
lua_pushnumber(L1, lua_tonumber(L1, getindex)); |
|
|
|
} |
|
|
|
else if EQ("topointer") { |
|
|
|
lua_pushlightuserdata(L1, cast(void *, lua_topointer(L1, getindex))); |
|
|
|
lua_pushnumber(L1, cast(size_t, lua_topointer(L1, getindex))); |
|
|
|
} |
|
|
|
else if EQ("tostring") { |
|
|
|
const char *s = lua_tostring(L1, getindex); |
|
|
@ -964,9 +966,9 @@ static int runC (lua_State *L, lua_State *L1, const char *pc) { |
|
|
|
else if EQ("tocfunction") { |
|
|
|
lua_pushcfunction(L1, lua_tocfunction(L1, getindex)); |
|
|
|
} |
|
|
|
else if EQ("func2udata") { |
|
|
|
else if EQ("func2num") { |
|
|
|
lua_CFunction func = lua_tocfunction(L1, getindex); |
|
|
|
lua_pushlightuserdata(L1, &func); |
|
|
|
lua_pushnumber(L1, cast(size_t, func)); |
|
|
|
} |
|
|
|
else if EQ("return") { |
|
|
|
int n = getnum; |
|
|
@ -1166,8 +1168,7 @@ static int runC (lua_State *L, lua_State *L1, const char *pc) { |
|
|
|
lua_pushinteger(L1, i); |
|
|
|
} |
|
|
|
else if EQ("checkstack") { |
|
|
|
if (!lua_checkstack(L1, getnum)) |
|
|
|
luaL_error(L, "C stack overflow"); |
|
|
|
luaL_checkstack(L1, getnum, NULL); |
|
|
|
} |
|
|
|
else if EQ("newmetatable") { |
|
|
|
lua_pushboolean(L1, luaL_newmetatable(L1, getstring)); |
|
|
@ -1333,7 +1334,7 @@ static const struct luaL_Reg tests_funcs[] = { |
|
|
|
{"doonnewstack", doonnewstack}, |
|
|
|
{"doremote", doremote}, |
|
|
|
{"gccolor", get_gccolor}, |
|
|
|
{"gcstate", gcstate}, |
|
|
|
{"gcstate", gc_state}, |
|
|
|
{"getref", getref}, |
|
|
|
{"hash", hash_query}, |
|
|
|
{"int2fb", int2fb_aux}, |
|
|
|