summaryrefslogtreecommitdiffstats
path: root/src/doxygen.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/doxygen.cpp')
-rw-r--r--src/doxygen.cpp100
1 files changed, 53 insertions, 47 deletions
diff --git a/src/doxygen.cpp b/src/doxygen.cpp
index d8436bb..5ac1980 100644
--- a/src/doxygen.cpp
+++ b/src/doxygen.cpp
@@ -159,7 +159,8 @@ bool Doxygen::userComments = FALSE;
QCString Doxygen::spaces;
bool Doxygen::generatingXmlOutput = FALSE;
GenericsSDict *Doxygen::genericsDict;
-DefineList Doxygen::macroDefinitions;
+DefinesPerFileList Doxygen::macroDefinitions;
+bool Doxygen::clangAssistedParsing = FALSE;
// locally accessible globals
static std::unordered_map< std::string, const Entry* > g_classEntries;
@@ -7477,18 +7478,18 @@ static void generateFileSources()
if (!Doxygen::inputNameLinkedMap->empty())
{
#if USE_LIBCLANG
- static bool clangAssistedParsing = Config_getBool(CLANG_ASSISTED_PARSING);
- if (clangAssistedParsing)
+ if (Doxygen::clangAssistedParsing)
{
- QDict<void> g_processedFiles(10007);
+ StringUnorderedSet processedFiles;
// create a dictionary with files to process
- QDict<void> g_filesToProcess(10007);
+ StringUnorderedSet filesToProcess;
+
for (const auto &fn : *Doxygen::inputNameLinkedMap)
{
for (const auto &fd : *fn)
{
- g_filesToProcess.insert(fd->absFilePath(),(void*)0x8);
+ filesToProcess.insert(fd->absFilePath().str());
}
}
// process source files (and their include dependencies)
@@ -7515,9 +7516,9 @@ static void generateFileSources()
}
char *incFile = filesInSameTu.first();
- while (incFile && g_filesToProcess.find(incFile))
+ while (incFile && filesToProcess.find(incFile)!=filesToProcess.end())
{
- if (fd->absFilePath()!=incFile && !g_processedFiles.find(incFile))
+ if (fd->absFilePath()!=incFile && processedFiles.find(incFile)==processedFiles.end())
{
QStrList moreFiles;
bool ambig;
@@ -7536,13 +7537,13 @@ static void generateFileSources()
msg(" Parsing code for file %s...\n",ifd->docName().data());
ifd->parseSource(TRUE,moreFiles);
}
- g_processedFiles.insert(incFile,(void*)0x8);
+ processedFiles.insert(incFile);
}
}
incFile = filesInSameTu.next();
}
fd->finishParsing();
- g_processedFiles.insert(fd->absFilePath(),(void*)0x8);
+ processedFiles.insert(fd->absFilePath().str());
}
}
}
@@ -7551,7 +7552,7 @@ static void generateFileSources()
{
for (const auto &fd : *fn)
{
- if (!g_processedFiles.find(fd->absFilePath())) // not yet processed
+ if (processedFiles.find(fd->absFilePath().str())==processedFiles.end()) // not yet processed
{
QStrList filesInSameTu;
fd->startParsing();
@@ -7701,28 +7702,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));
}
}
@@ -9056,11 +9064,6 @@ static std::shared_ptr<Entry> parseFile(OutlineParserInterface &parser,
FileDef *fd,const char *fn,
bool sameTu,QStrList &filesInSameTu)
{
-#if USE_LIBCLANG
- static bool clangAssistedParsing = Config_getBool(CLANG_ASSISTED_PARSING);
-#else
- static bool clangAssistedParsing = FALSE;
-#endif
QCString fileName=fn;
QCString extension;
int ei = fileName.findRev('.');
@@ -9107,7 +9110,7 @@ static std::shared_ptr<Entry> parseFile(OutlineParserInterface &parser,
convBuf.addChar('\0');
- if (clangAssistedParsing && !sameTu)
+ if (Doxygen::clangAssistedParsing && !sameTu)
{
fd->getAllIncludeFilesRecursively(filesInSameTu);
}
@@ -9123,16 +9126,15 @@ static std::shared_ptr<Entry> parseFile(OutlineParserInterface &parser,
static void parseFiles(const std::shared_ptr<Entry> &root)
{
#if USE_LIBCLANG
- static bool clangAssistedParsing = Config_getBool(CLANG_ASSISTED_PARSING);
- if (clangAssistedParsing)
+ if (Doxygen::clangAssistedParsing)
{
- QDict<void> g_processedFiles(10007);
+ StringUnorderedSet processedFiles;
// create a dictionary with files to process
- QDict<void> g_filesToProcess(10007);
+ StringUnorderedSet filesToProcess;
for (const auto &s : g_inputFiles)
{
- g_filesToProcess.insert(s.c_str(),(void*)0x8);
+ filesToProcess.insert(s);
}
// process source files (and their include dependencies)
@@ -9153,9 +9155,9 @@ static void parseFiles(const std::shared_ptr<Entry> &root)
// Now process any include files in the same translation unit
// first. When libclang is used this is much more efficient.
char *incFile = filesInSameTu.first();
- while (incFile && g_filesToProcess.find(incFile))
+ while (incFile && filesToProcess.find(incFile)!=filesToProcess.end())
{
- if (qstrcmp(incFile,s.c_str()) && !g_processedFiles.find(incFile))
+ if (qstrcmp(incFile,s.c_str()) && processedFiles.find(incFile)==processedFiles.end())
{
FileDef *ifd=findFileDef(Doxygen::inputNameLinkedMap,incFile,ambig);
if (ifd && !ifd->isReference())
@@ -9164,19 +9166,19 @@ static void parseFiles(const std::shared_ptr<Entry> &root)
//printf(" Processing %s in same translation unit as %s\n",incFile,s->c_str());
fileRoot = parseFile(*parser.get(),ifd,incFile,TRUE,moreFiles);
root->moveToSubEntryAndKeep(fileRoot);
- g_processedFiles.insert(incFile,(void*)0x8);
+ processedFiles.insert(incFile);
}
}
incFile = filesInSameTu.next();
}
parser->finishTranslationUnit();
- g_processedFiles.insert(s.c_str(),(void*)0x8);
+ processedFiles.insert(s);
}
}
// process remaining files
for (const auto &s : g_inputFiles)
{
- if (!g_processedFiles.find(s.c_str())) // not yet processed
+ if (processedFiles.find(s)==processedFiles.end()) // not yet processed
{
bool ambig;
QStrList filesInSameTu;
@@ -9187,7 +9189,7 @@ static void parseFiles(const std::shared_ptr<Entry> &root)
std::shared_ptr<Entry> fileRoot = parseFile(*parser.get(),fd,s.c_str(),FALSE,filesInSameTu);
root->moveToSubEntryAndKeep(fileRoot);
parser->finishTranslationUnit();
- g_processedFiles.insert(s.c_str(),(void*)0x8);
+ processedFiles.insert(s);
}
}
}
@@ -10700,6 +10702,10 @@ void parseInput()
{
atexit(exitDoxygen);
+#if USE_LIBCLANG
+ Doxygen::clangAssistedParsing = Config_getBool(CLANG_ASSISTED_PARSING);
+#endif
+
// we would like to show the versionString earlier, but we first have to handle the configuration file
// to know the value of the QUIET setting.
QCString versionString = getFullVersion();
@@ -11578,7 +11584,7 @@ void generateOutput()
if (Debug::isFlagSet(Debug::Time))
{
msg("Total elapsed time: %.3f seconds\n(of which %.3f seconds waiting for external tools to finish)\n",
- ((double)Debug::elapsedTime())/1000.0,
+ ((double)Debug::elapsedTime()),
Portable::getSysElapsedTime()
);
g_s.print();