Skip to content

Commit

Permalink
Fixed issue showing wrong inline source fragment for multi-line macros
Browse files Browse the repository at this point in the history
  • Loading branch information
doxygen committed Sep 10, 2023
1 parent a3cba26 commit 2b8fea9
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 14 deletions.
26 changes: 14 additions & 12 deletions src/definition.cpp
Expand Up @@ -812,7 +812,7 @@ FilterCache &FilterCache::instance()
* The line actually containing the bracket is returned via endLine.
* Note that for VHDL code the bracket search is not done.
*/
bool readCodeFragment(const QCString &fileName,
bool readCodeFragment(const QCString &fileName,bool isMacro,
int &startLine,int &endLine,QCString &result)
{
bool filterSourceFiles = Config_getBool(FILTER_SOURCE_FILES);
Expand All @@ -829,7 +829,8 @@ bool readCodeFragment(const QCString &fileName,

bool found = lang==SrcLangExt_VHDL ||
lang==SrcLangExt_Python ||
lang==SrcLangExt_Fortran;
lang==SrcLangExt_Fortran ||
isMacro;
// for VHDL, Python, and Fortran no bracket search is possible
char *p=str.data();
if (p && *p)
Expand Down Expand Up @@ -1068,26 +1069,27 @@ void DefinitionImpl::writeInlineCode(OutputList &ol,const QCString &scopeName) c
{
bool inlineSources = Config_getBool(INLINE_SOURCES);
ol.pushGeneratorState();
//printf("Source Fragment %s: %d-%d bodyDef=%p\n",qPrint(name()),
// m_startBodyLine,m_endBodyLine,m_bodyDef);
//printf("Source Fragment %s: %d-%d\n",qPrint(name()),
// m_impl->body->startLine,m_impl->body->endLine);
if (inlineSources && hasSources())
{
QCString codeFragment;
const MemberDef *thisMd = 0;
if (m_impl->def->definitionType()==Definition::TypeMember)
{
thisMd = toMemberDef(m_impl->def);
}
bool isMacro = thisMd && thisMd->memberType()==MemberType_Define;
int actualStart=m_impl->body->startLine,actualEnd=m_impl->body->endLine;
if (readCodeFragment(m_impl->body->fileDef->absFilePath(),
if (readCodeFragment(m_impl->body->fileDef->absFilePath(),isMacro,
actualStart,actualEnd,codeFragment)
)
{
//printf("Adding code fragment '%s' ext='%s'\n",
// qPrint(codeFragment),qPrint(m_impl->defFileExt));
//printf("Adding code fragment '%s' ext='%s' range=%d-%d\n",
// qPrint(codeFragment),qPrint(m_impl->defFileExt),actualStart,actualEnd);
auto intf = Doxygen::parserManager->getCodeParser(m_impl->defFileExt);
intf->resetCodeParserState();
//printf("Read:\n'%s'\n\n",qPrint(codeFragment));
const MemberDef *thisMd = 0;
if (m_impl->def->definitionType()==Definition::TypeMember)
{
thisMd = toMemberDef(m_impl->def);
}

auto &codeOL = ol.codeGenerators();
codeOL.startCodeFragment("DoxyCode");
Expand Down
2 changes: 1 addition & 1 deletion src/definition.h
Expand Up @@ -401,7 +401,7 @@ DefinitionMutable *toDefinitionMutable(Definition *d);
* via \a result. The function returns TRUE if successful and FALSE
* in case of an error.
*/
bool readCodeFragment(const QCString &fileName,
bool readCodeFragment(const QCString &fileName,bool isMacro,
int &startLine,int &endLine,
QCString &result);
#endif
2 changes: 1 addition & 1 deletion src/vhdldocgen.cpp
Expand Up @@ -2794,7 +2794,7 @@ void VhdlDocGen::createFlowChart(const MemberDef *mdef)
int actualStart= mdef->getStartBodyLine();
int actualEnd=mdef->getEndBodyLine();
const FileDef* fd=mdef->getFileDef();
bool b=readCodeFragment( fd->absFilePath(), actualStart,actualEnd,codeFragment);
bool b=readCodeFragment( fd->absFilePath(), false, actualStart, actualEnd, codeFragment);
if (!b) return;

auto parser { Doxygen::parserManager->getOutlineParser(".vhd") };
Expand Down

0 comments on commit 2b8fea9

Please sign in to comment.