1 
2 #include "workspaceparserthread.h"
3 
4 #include <sdk.h>
5 #ifndef CB_PRECOMP
6     #include <logmanager.h>
7 #endif
8 
9 #include "parserthreadf.h"
10 #include "nativeparserf.h"
11 
12 wxMutex s_WorkspaceParserMutex;
13 wxMutex s_NewTokensMutex;
14 
WorkspaceParserThread(NativeParserF * parent,int idWSPThreadEvent)15 WorkspaceParserThread::WorkspaceParserThread(NativeParserF* parent, int idWSPThreadEvent) :
16     m_pNativeParser(parent),
17     m_idWSPThreadEvent(idWSPThreadEvent)
18 {
19 }
20 
~WorkspaceParserThread()21 WorkspaceParserThread::~WorkspaceParserThread()
22 {
23 }
24 
Execute()25 int WorkspaceParserThread::Execute()
26 {
27     s_WorkspaceParserMutex.Lock();
28     ParseFiles();
29     s_WorkspaceParserMutex.Unlock();
30 
31     return 0;
32 }
33 
ParseFiles()34 void WorkspaceParserThread::ParseFiles()
35 {
36     TokensArrayF* pTokens = new TokensArrayF();
37     IncludeDB* pIncludeDB = new IncludeDB();
38     wxArrayString* pWSFiles = m_pNativeParser->GetWSFiles();
39     ArrayOfFortranSourceForm* pWSFileForms = m_pNativeParser->GetWSFileForms();
40     wxArrayString* pWSProjFilenames = m_pNativeParser->GetWSFileProjFilenames();
41 
42     for (size_t i=0; i<pWSFiles->size(); i++)
43     {
44         ParserThreadF* thread = new ParserThreadF(pWSProjFilenames->Item(i), UnixFilename(pWSFiles->Item(i)), pTokens,
45                                                   pWSFileForms->at(i), false, pIncludeDB);
46         thread->Parse();
47         delete thread;
48     }
49     s_NewTokensMutex.Lock();
50     m_pNativeParser->GetParser()->SetNewTokens(pTokens);
51     m_pNativeParser->GetParser()->SetNewIncludeDB(pIncludeDB);
52     s_NewTokensMutex.Unlock();
53 
54     wxCommandEvent event( wxEVT_COMMAND_ENTER, m_idWSPThreadEvent );
55     m_pNativeParser->AddPendingEvent(event);
56 }
57