Skip to content

Commit bc56c8a

Browse files
committed
issue doxygen#9447 nested inline namespaces are incorrectly generated
1 parent a59c705 commit bc56c8a

1 file changed

Lines changed: 24 additions & 0 deletions

File tree

src/scanner.l

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4630,6 +4630,7 @@ NONLopt [^\n]*
46304630
std::shared_ptr<Entry> original_root = yyextra->current_root; // save root this namespace is in
46314631
if (yyextra->current->section.isNamespace() && yyextra->current->type == "namespace")
46324632
{
4633+
//printf("namespace %s\n",qPrint(yyextra->current->name));
46334634
int split_point;
46344635
// save documentation values
46354636
QCString doc = yyextra->current->doc;
@@ -4659,6 +4660,11 @@ NONLopt [^\n]*
46594660
yyextra->current->program.str(std::string());
46604661
new_current->name = yyextra->current->name.mid(split_point + 2);
46614662
yyextra->current->name = yyextra->current->name.left(split_point);
4663+
if (yyextra->current->name.startsWith("inline ")) // C++20 style nested inline namespace syntax
4664+
{
4665+
yyextra->current->name = yyextra->current->name.mid(7);
4666+
yyextra->current->spec.setInline(true);
4667+
}
46624668
if (!yyextra->current_root->name.isEmpty()) yyextra->current->name.prepend(yyextra->current_root->name+"::");
46634669

46644670
yyextra->current_root->moveToSubEntryAndKeep(yyextra->current);
@@ -4678,6 +4684,11 @@ NONLopt [^\n]*
46784684
yyextra->current->rqli = rqli;
46794685
}
46804686
QCString &cn = yyextra->current->name;
4687+
if (cn.startsWith("inline ")) // C++20 style nested inline namespace syntax
4688+
{
4689+
cn = cn.mid(7);
4690+
yyextra->current->spec.setInline(true);
4691+
}
46814692
QCString rn = yyextra->current_root->name;
46824693
//printf("cn='%s' rn='%s' yyextra->isTypedef=%d\n",qPrint(cn),qPrint(rn),yyextra->isTypedef);
46834694
if (!cn.isEmpty() && !rn.isEmpty())
@@ -6478,6 +6489,19 @@ NONLopt [^\n]*
64786489
}
64796490
BEGIN( ClassVar );
64806491
}
6492+
<CompoundName>({ID}{BN}*"::"{BN}*)+("inline"{BN}+({ID}{BN}*"::"{BN}*)*)+{ID} { // C++20 style nested inline namespace syntax
6493+
if (yyextra->current->section.isNamespace())
6494+
{
6495+
yyextra->current->name = QCString(yytext).simplifyWhiteSpace();
6496+
storeClangId(yyscanner,yyextra->current->name.data());
6497+
lineCount(yyscanner);
6498+
BEGIN( ClassVar );
6499+
}
6500+
else
6501+
{
6502+
REJECT;
6503+
}
6504+
}
64816505
<CompoundName>{CSSCOPENAME} { // C# style scope
64826506
yyextra->current->name = substitute(yytext,".","::");
64836507
lineCount(yyscanner);

0 commit comments

Comments
 (0)