* @brief Creates a fresh Lua state with safe libraries and watchdog hook. */
| 148 | * @brief Creates a fresh Lua state with safe libraries and watchdog hook. |
| 149 | */ |
| 150 | void DataModel::LuaScriptEngine::createState() |
| 151 | { |
| 152 | Q_ASSERT(m_state == nullptr); |
| 153 | |
| 154 | m_state = luaL_newstate(); |
| 155 | Q_ASSERT(m_state != nullptr); |
| 156 | |
| 157 | lua_atpanic(m_state, luaPanicHandler); |
| 158 | |
| 159 | openSafeLibs(m_state); |
| 160 | |
| 161 | DataModel::installLuaConsole(m_state); |
| 162 | |
| 163 | DataModel::installLuaCompat(m_state); |
| 164 | |
| 165 | DataModel::NotificationCenter::installScriptApi(m_state); |
| 166 | |
| 167 | DataModel::FrameBuilder::instance().injectTableApiLua(m_state); |
| 168 | |
| 169 | DataModel::DeviceWriteApi::installLua(m_state, m_sourceId); |
| 170 | |
| 171 | DataModel::ActionFireApi::installLua(m_state); |
| 172 | |
| 173 | DataModel::DashboardApi::installLua(m_state); |
| 174 | |
| 175 | DataModel::ScriptApiCall::installLua(m_state, m_sourceId); |
| 176 | |
| 177 | lua_pushlightuserdata(m_state, this); |
| 178 | lua_setfield(m_state, LUA_REGISTRYINDEX, "__ss_engine__"); |
| 179 | |
| 180 | lua_sethook(m_state, watchdogHook, LUA_MASKCOUNT, kHookInstructionCount); |
| 181 | |
| 182 | m_deadline = QDeadlineTimer(QDeadlineTimer::Forever); |
| 183 | m_loaded = false; |
| 184 | m_disabled = false; |
| 185 | m_parseRef = LUA_NOREF; |
| 186 | m_consecutiveTimeouts = 0; |
| 187 | } |
| 188 | |
| 189 | /** |
| 190 | * @brief Closes the Lua state and resets internal flags. |
nothing calls this directly
no test coverage detected