@@ -1104,6 +1104,10 @@ void Tokenizer::simplifyTypedef()
11041104 typedefInfo.filename = list.file (typedefToken);
11051105 typedefInfo.lineNumber = typedefToken->linenr ();
11061106 typedefInfo.column = typedefToken->column ();
1107+ if (Token::Match (typedefToken->next (), " struct|enum|class|union %name% {" ) && typedefToken->strAt (2 ) == typedefInfo.name )
1108+ typedefInfo.tagToken = typedefToken->tokAt (2 );
1109+ else
1110+ typedefInfo.tagToken = nullptr ;
11071111 typedefInfo.used = t.second .isUsed ();
11081112 typedefInfo.isFunctionPointer = isFunctionPointer (t.second .nameToken ());
11091113 if (typedefInfo.isFunctionPointer ) {
@@ -1638,8 +1642,12 @@ void Tokenizer::simplifyTypedefCpp()
16381642 TypedefInfo typedefInfo;
16391643 typedefInfo.name = typeName->str ();
16401644 typedefInfo.filename = list.file (typeName);
1641- typedefInfo.lineNumber = typeName->linenr ();
1642- typedefInfo.column = typeName->column ();
1645+ typedefInfo.lineNumber = typeDef->linenr ();
1646+ typedefInfo.column = typeDef->column ();
1647+ if (Token::Match (typeDef->next (), " struct|enum|class|union %name% {" ) && typeDef->strAt (2 ) == typedefInfo.name )
1648+ typedefInfo.tagToken = typeDef->tokAt (2 );
1649+ else
1650+ typedefInfo.tagToken = nullptr ;
16431651 typedefInfo.used = false ;
16441652 typedefInfo.isFunctionPointer = isFunctionPointer (typeName);
16451653 if (typedefInfo.isFunctionPointer ) {
@@ -3170,6 +3178,7 @@ bool Tokenizer::simplifyUsing()
31703178 usingInfo.filename = list.file (nameToken);
31713179 usingInfo.lineNumber = nameToken->linenr ();
31723180 usingInfo.column = nameToken->column ();
3181+ usingInfo.tagToken = nullptr ;
31733182 usingInfo.used = true ;
31743183 usingInfo.isFunctionPointer = false ;
31753184 mTypedefInfo .push_back (std::move (usingInfo));
@@ -6326,7 +6335,15 @@ std::string Tokenizer::dumpTypedefInfo() const
63266335 outs += " column=\" " ;
63276336 outs += std::to_string (typedefInfo.column );
63286337 outs += " \" " ;
6338+ if (typedefInfo.tagToken ) {
6339+ outs += " tagline=\" " ;
6340+ outs += std::to_string (typedefInfo.tagToken ->linenr ());
6341+ outs += " \" " ;
63296342
6343+ outs += " tagcolumn=\" " ;
6344+ outs += std::to_string (typedefInfo.tagToken ->column ());
6345+ outs += " \" " ;
6346+ }
63306347 outs += " used=\" " ;
63316348 outs += std::to_string (typedefInfo.used ?1 :0 );
63326349 outs += " \" " ;
0 commit comments