void csp::OpTestSuite_RunAll::Terminate( Host& host ) { if( m_pCurrentClosure ) m_pCurrentClosure->process.Terminate( host ); UnrefClosures( m_pClosuresHead ); if( m_pCurrentClosure ) UnrefClosure( m_pCurrentClosure ); }
void csp::OpAlt::Terminate( Host& host ) { lua::LuaStack stack = host.LuaState().GetStack(); m_process.Terminate( host ); DetachChannels(); UnrefChannels( stack ); UnrefArguments( stack ); UnrefClosures( stack ); UnrefProcess( stack ); }
csp::WorkResult::Enum csp::OpAlt::StartTriggeredProcess( Host& host ) { CORE_ASSERT( m_pCaseTriggered ); lua::LuaStack& stack = host.LuaState().GetStack(); lua::LuaState thread = stack.NewThread(); stack.GetTopValue().PushValue(); m_processRefKey = stack.RefInRegistry(); m_process.SetLuaThread( thread ); m_process.SetParentProcess( ThisProcess() ); lua::LuaStack threadStack = thread.GetStack(); threadStack.PushRegistryReferenced( m_pCaseTriggered->m_closureRefKey ); for( int i = 0; i < m_numArguments; ++i ) threadStack.PushRegistryReferenced( m_arguments[i].refKey ); int numArguments = m_numArguments == CSP_NO_ARGS ? 0 : m_numArguments; WorkResult::Enum result = m_process.StartEvaluation( host, numArguments ); UnrefClosures( stack ); return result; }