If we have a foo.cbp (located in e:/foo/), which contains 5 files below:
a.cpp
b.cpp
a.h
b.h
prep.h
foo.cbp has custom compiler include search path: c:/wx/include
foo.cbp has custom macro definition __GNUWIN32__ and __WXMSW__
we have prioirty file setting in CodeCompletion dialog:
"prep.h",<wxprep.h>, "stdafx.h"
We use mingw compiler which is located in d:/mingw463/
Now, we are going to parse this project.
1, Parser's include paths:
add project common folder to Parser object: e:/foo
add project setting search path c:/wx/include
2, Compiler's buildin include paths
add d:/mingw463/include
add d:/mingw463/lib/gcc/i686-w64-mingw32/4.6.3/include
3, Compiler's buildin Preprocessor macros:
run GCC -dM command, get a buffer like:
#define __DBL_MIN_EXP__ (-1021)
#define __UINT_LEAST16_MAX__ 65535
#define __FLT_MIN__ 1.17549435082228750797e-38F
#define __UINT_LEAST8_TYPE__ unsigned char
#define _WIN32 1
...
4, Project's preprocessor macros:
#define __GNUWIN32__
#define __WXMSW__
5, Search all the setting priority files in the above include paths
"prep.h" was found under e:/foo/ -> it is a local priority header
<wxprep.h> was found under c:/wx/include -> it is a global priority header
"stdafx.h" not find in any paths, skip
6, Create a ParserThreadTask thread, waiting for ThreadDone event.
7, in ParserThreadTask executing, did the following:
7.1 parse preprocessor macros gothered from step3 and step4
7.2 parse priority headers, in our example, it is c:/wx/include/wxprep.h and e:/foo/prep.h
7.3 parse a.h and b.h
7.4 parse a.cpp and b.cpp
7.5 parse system priority header again, which is c:/wx/include/wxprep.h in our case
7.6 mark a.h b.h a.cpp b.cpp as local parsed files
8, Done
BTW: it looks like the step7 is quite complex, it involve a lot of Timer tick and Thread creation.