/** This file is part of the Code::Blocks IDE and licensed under the GNU General Public License, version 3* http://www.gnu.org/licenses/gpl-3.0.html** $Revision$* $Id$* $HeadURL$*/#include <sdk.h>#ifndef CB_PRECOMP#include <wx/string.h>#include <cbproject.h>#include <projectfile.h>#endif#include "parserthreadedtask.h"#include "cclogger.h"#include "parser.h"#include "tokentree.h"#define CC_PARSERTHREADEDTASK_DEBUG_OUTPUT 0#if defined(CC_GLOBAL_DEBUG_OUTPUT)#if CC_GLOBAL_DEBUG_OUTPUT == 1#undef CC_PARSERTHREADEDTASK_DEBUG_OUTPUT#define CC_PARSERTHREADEDTASK_DEBUG_OUTPUT 1#elif CC_GLOBAL_DEBUG_OUTPUT == 2#undef CC_PARSERTHREADEDTASK_DEBUG_OUTPUT#define CC_PARSERTHREADEDTASK_DEBUG_OUTPUT 2#endif#endif#if CC_PARSERTHREADEDTASK_DEBUG_OUTPUT == 1#define TRACE(format, args...) \CCLogger::Get()->DebugLog(F(format, ##args))#define TRACE2(format, args...)#elif CC_PARSERTHREADEDTASK_DEBUG_OUTPUT == 2#define TRACE(format, args...) \do \{ \if (g_EnableDebugTrace) \CCLogger::Get()->DebugLog(F(format, ##args)); \} \while (false)#define TRACE2(format, args...) \CCLogger::Get()->DebugLog(F(format, ##args))#else#define TRACE(format, args...)#define TRACE2(format, args...)#endif// class ParserThreadedTaskParserThreadedTask::ParserThreadedTask(Parser* parser, wxMutex& parserMTX) :m_Parser(parser),m_ParserMutex(parserMTX){}int ParserThreadedTask::Execute(){TRACE(_T("ParserThreadedTask::Execute(): Enter"));if (!m_Parser) return 0;CC_LOCKER_TRACK_P_MTX_LOCK(m_ParserMutex)wxString preDefs(m_Parser->m_PredefinedMacros);StringList batchFiles(m_Parser->m_BatchParseFiles);CC_LOCKER_TRACK_P_MTX_UNLOCK(m_ParserMutex);TRACE(_T("ParserThreadedTask::Execute(): Parse predefined macros(in buffer)"));if (!preDefs.IsEmpty())m_Parser->ParseBuffer(preDefs, false, false);m_Parser->ClearPredefinedMacros();if (m_Parser->m_IgnoreThreadEvents)m_Parser->m_IsFirstBatch = true;TRACE(_T("ParserThreadedTask::Execute(): Parse source files"));while (!batchFiles.empty()){TRACE(_T("-ParserThreadedTask::Execute(): Parse %s"), batchFiles.front().wx_str());m_Parser->Parse(batchFiles.front()); // bool isLocal = true, bool locked = falsebatchFiles.pop_front();}CC_LOCKER_TRACK_P_MTX_LOCK(m_ParserMutex)m_Parser->m_BatchParseFiles.clear();if (m_Parser->m_IgnoreThreadEvents){m_Parser->m_IgnoreThreadEvents = false; // we need to hear the pool finish eventm_Parser->m_IsParsing = true;}CC_LOCKER_TRACK_P_MTX_UNLOCK(m_ParserMutex);TRACE(_T("ParserThreadedTask::Execute(): Leave"));return 0;}// class MarkFileAsLocalThreadedTaskMarkFileAsLocalThreadedTask::MarkFileAsLocalThreadedTask(Parser* parser, cbProject* project) :m_Parser(parser), m_Project(project){}int MarkFileAsLocalThreadedTask::Execute(){TRACE(_T("MarkFileAsLocalThreadedTask::Execute()"));if (!m_Project) return 0;if (!m_Parser) return 0;// mark all project files as localfor (FilesList::const_iterator it = m_Project->GetFilesList().begin();it != m_Project->GetFilesList().end(); ++it){ProjectFile* pf = *it;if (!pf)continue;if (ParserCommon::FileType(pf->relativeFilename) != ParserCommon::ftOther){TokenTree* tree = m_Parser->GetTokenTree();CC_LOCKER_TRACK_TT_MTX_LOCK(s_TokenTreeMutex)tree->MarkFileTokensAsLocal(pf->file.GetFullPath(), true, m_Project);CC_LOCKER_TRACK_TT_MTX_UNLOCK(s_TokenTreeMutex)}}return 0;}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。