summaryrefslogtreecommitdiffstats
path: root/src/doxygen.cpp
diff options
context:
space:
mode:
authorDimitri van Heesch <doxygen@gmail.com>2020-06-28 19:57:14 (GMT)
committerDimitri van Heesch <doxygen@gmail.com>2020-06-28 19:57:14 (GMT)
commitff5ebce0649b5e1fbef2660234f5cc8184e80148 (patch)
tree63487b226b3e3b92355d670fbec5ea7382fc9475 /src/doxygen.cpp
parentd0f24b762e23b1b0c069209978aa403acc027cdf (diff)
downloadDoxygen-ff5ebce0649b5e1fbef2660234f5cc8184e80148.zip
Doxygen-ff5ebce0649b5e1fbef2660234f5cc8184e80148.tar.gz
Doxygen-ff5ebce0649b5e1fbef2660234f5cc8184e80148.tar.bz2
Refactor: make preprocessor run in parallel
And at the same time make sure it gives the same results as when processed using a single thread.
Diffstat (limited to 'src/doxygen.cpp')
-rw-r--r--src/doxygen.cpp45
1 files changed, 26 insertions, 19 deletions
diff --git a/src/doxygen.cpp b/src/doxygen.cpp
index d8436bb..01b47f5 100644
--- a/src/doxygen.cpp
+++ b/src/doxygen.cpp
@@ -159,7 +159,7 @@ bool Doxygen::userComments = FALSE;
QCString Doxygen::spaces;
bool Doxygen::generatingXmlOutput = FALSE;
GenericsSDict *Doxygen::genericsDict;
-DefineList Doxygen::macroDefinitions;
+DefinesPerFileList Doxygen::macroDefinitions;
// locally accessible globals
static std::unordered_map< std::string, const Entry* > g_classEntries;
@@ -7701,28 +7701,35 @@ static void addSourceReferences()
// add the macro definitions found during preprocessing as file members
static void buildDefineList()
{
- for (const auto &def : Doxygen::macroDefinitions)
+ for (const auto &s : g_inputFiles)
{
- std::unique_ptr<MemberDef> md { createMemberDef(
- def->fileName,def->lineNr,def->columnNr,
- "#define",def->name,def->args,0,
- Public,Normal,FALSE,Member,MemberType_Define,
- ArgumentList(),ArgumentList(),"") };
-
- if (!def->args.isEmpty())
+ auto it = Doxygen::macroDefinitions.find(s);
+ if (it!=Doxygen::macroDefinitions.end())
{
- md->moveArgumentList(stringToArgumentList(SrcLangExt_Cpp, def->args));
- }
- md->setInitializer(def->definition);
- md->setFileDef(def->fileDef);
- md->setDefinition("#define "+def->name);
+ for (const auto &def : it->second)
+ {
+ std::unique_ptr<MemberDef> md { createMemberDef(
+ def->fileName,def->lineNr,def->columnNr,
+ "#define",def->name,def->args,0,
+ Public,Normal,FALSE,Member,MemberType_Define,
+ ArgumentList(),ArgumentList(),"") };
- MemberName *mn=Doxygen::functionNameLinkedMap->add(def->name);
- if (def->fileDef)
- {
- def->fileDef->insertMember(md.get());
+ if (!def->args.isEmpty())
+ {
+ md->moveArgumentList(stringToArgumentList(SrcLangExt_Cpp, def->args));
+ }
+ md->setInitializer(def->definition);
+ md->setFileDef(def->fileDef);
+ md->setDefinition("#define "+def->name);
+
+ MemberName *mn=Doxygen::functionNameLinkedMap->add(def->name);
+ if (def->fileDef)
+ {
+ def->fileDef->insertMember(md.get());
+ }
+ mn->push_back(std::move(md));
+ }
}
- mn->push_back(std::move(md));
}
}