bool gmDebugSession::AddBreakPoint(const void * a_bp, int a_threadId) { BreakPoint * bp = m_breaks.Find((void *const&)a_bp); if(bp) return false; bp = GM_NEW( BreakPoint() ); bp->m_bp = a_bp; bp->m_threadId = a_threadId; m_breaks.Insert(bp); return true; }
gmCodeGenPrivate::FunctionState * gmCodeGenPrivate::PushFunction() { if(m_currentFunction) { if(m_currentFunction != m_functionStack.GetLast()) { m_currentFunction = m_functionStack.GetNext(m_currentFunction); } else { m_currentFunction = GM_NEW( FunctionState() ); m_functionStack.InsertLast(m_currentFunction); } } else { if(m_functionStack.IsEmpty()) { m_currentFunction = GM_NEW( FunctionState() ); m_functionStack.InsertLast(m_currentFunction); } else { m_currentFunction = m_functionStack.GetFirst(); } } m_currentFunction->Reset(); m_currentFunction->m_byteCode.SetSwapEndianOnWrite(m_hooks->SwapEndian()); // if we are debugging, set up some line number debugging. if(m_debug) { m_currentFunction->m_byteCode.m_emitCallback = gmLineNumberCallback; } return m_currentFunction; }
gmThread::gmThread(gmMachine * a_machine, int a_initialByteSize) { m_frame = NULL; m_machine = a_machine; m_size = a_initialByteSize / sizeof(gmVariable); m_stack = GM_NEW( gmVariable[m_size] ); m_top = 0; m_base = 0; m_numParameters = 0; #if GMDEBUG_SUPPORT m_debugUser = 0; m_debugFlags = 0; #endif // GMDEBUG_SUPPORT m_timeStamp = 0; m_startTime = 0; m_instruction = NULL; m_state = KILLED; m_id = GM_INVALID_THREAD; m_blocks = NULL; m_signals = NULL; m_user = 0; }