LuaObject LuaState::CreateThread(LuaState* parentState) { lua_State* L1 = lua_newthread(parentState->GetCState()); lua_TValue tobject; setnilvalue2n(L1, &tobject); setthvalue(parentState->GetCState(), &tobject, L1); LuaObject retObj = LuaObject((LuaState*)lua_getstateuserdata(L1), &tobject); setnilvalue(&tobject); lua_pop(parentState->GetCState(), 1); return retObj; }
void LuaPlusGCFunction(void* s) { GCState* st = (GCState*)s; LuaState* state = (LuaState*)lua_getstateuserdata(st->L); if (!state) return; LuaObject* curObj = state->GetHeadObject()->m_next; while (curObj != state->GetTailObject()) { markobject(st, &curObj->m_object); curObj = curObj->m_next; } }
void LuaState::LuaPlusGCFunction(void* s) { lua_State* L = (lua_State*)s; LuaState* state = (LuaState*)lua_getstateuserdata(L); if (!state) return; global_State* g = G(L); LuaObject* curObj = state->GetHeadObject()->m_next; while (curObj != (LuaObject*)state->GetTailObject()) { markvalue(g, curObj->GetTObject()); curObj = ((MiniLuaObject*)curObj)->m_next; } }
/*static*/ LuaState* LuaState::CastState( lua_State* L ) { LuaState* state = (LuaState*)lua_getstateuserdata( L ); return state; }
extern "C" void LuaState_UserStateFree(lua_State* L) { LuaState* state = (LuaState*)lua_getstateuserdata(L); if (state) LuaState::Destroy(state); }