void LuaPlusGCFunction(void* s) { lua_State* L = (lua_State*)s; LuaPlus::LuaState* state = lua_State_To_LuaState(L); if (!state) return; global_State* g = G(L); LuaPlus::LuaObject* curObj = (LuaPlus::LuaObject*)G(L)->gchead_next; while (curObj != (LuaPlus::LuaObject*)&G(L)->gctail_next) { markvalue(g, curObj->GetTObject()); curObj = *(LuaPlus::LuaObject**)curObj; } }
LuaObject LuaState::CreateThread(LuaState* parentState) { lua_State* L1 = lua_newthread(LuaState_to_lua_State(parentState)); lua_TValue tobject; #if LUA_REFCOUNT setnilvalue2n(L1, &tobject); #else setnilvalue(&tobject); #endif /* LUA_REFCOUNT */ setthvalue(parentState->GetCState(), &tobject, L1); LuaObject retObj = LuaObject(lua_State_To_LuaState(L1), &tobject); setnilvalue(&tobject); lua_pop(LuaState_to_lua_State(parentState), 1); return retObj; }
void ScriptFunctionsRegister(struct lua_State* L) { LuaState* state = lua_State_To_LuaState(L); LuaObject globalsObj = state->GetGlobals(); globalsObj.Register("GetTickCount", LS_GetTickCount); #if defined(_MSC_VER) && defined(WIN32) && !defined(_XBOX) && !defined(_XBOX_VER) && !defined(PLATFORM_PS3) #elif defined(__APPLE__) char modulePath[MAXPATHLEN + 1]; unsigned int path_len = MAXPATHLEN; _NSGetExecutablePath(modulePath, &path_len); char* slashPtr = strrchr(modulePath, '/'); slashPtr++; *slashPtr = 0; #endif // _MSC_VER state->GetGlobals().Register("LuaDumpGlobals", LS_LuaDumpGlobals); state->GetGlobals().Register("LuaDumpObject", LS_LuaDumpObject); state->GetGlobals().Register("LuaDumpFile", LS_LuaDumpFile); }
/*static*/ LuaState* LuaState::Create() { return lua_State_To_LuaState(lua_newstate(luaHelper_defaultAlloc, luaHelper_ud)); }
/*static*/ LuaState* LuaState::CastState( lua_State* L ) { return lua_State_To_LuaState(L); }
void Push(lua_State* L, int (*value)(LuaState*)) { LuaState* state = lua_State_To_LuaState(L); state->PushCClosure(value, 0); }