@@ -1104,18 +1104,26 @@ void Tokenizer::simplifyTypedef()
11041104 typedefInfo.filename = list.file (typedefToken);
11051105 typedefInfo.lineNumber = typedefToken->linenr ();
11061106 typedefInfo.column = typedefToken->column ();
1107+ typedefInfo.tagLineNumber = typedefInfo.lineNumber ;
1108+ typedefInfo.tagColumn = typedefInfo.column ;
11071109 typedefInfo.used = t.second .isUsed ();
11081110 typedefInfo.isFunctionPointer = isFunctionPointer (t.second .nameToken ());
1109- if (typedefInfo.isFunctionPointer ) {
1110- const Token* tok = typedefToken;
1111- while (tok != t.second .endToken ()) {
1111+ const Token* tok = typedefToken;
1112+ while (tok != t.second .endToken ()) {
1113+ if (tok->str () == typedefInfo.name ) {
1114+ typedefInfo.tagLineNumber = tok->linenr ();
1115+ typedefInfo.tagColumn = tok->column ();
1116+ if (!typedefInfo.isFunctionPointer )
1117+ break ;
1118+ }
1119+ if (typedefInfo.isFunctionPointer ) {
11121120 TypedefToken ttok;
11131121 ttok.name = tok->str ();
11141122 ttok.lineNumber = tok->linenr ();
11151123 ttok.column = tok->column ();
11161124 typedefInfo.typedefInfoTokens .emplace_back (ttok);
1117- tok = tok->next ();
11181125 }
1126+ tok = tok->next ();
11191127 }
11201128 mTypedefInfo .push_back (std::move (typedefInfo));
11211129
@@ -1638,20 +1646,28 @@ void Tokenizer::simplifyTypedefCpp()
16381646 TypedefInfo typedefInfo;
16391647 typedefInfo.name = typeName->str ();
16401648 typedefInfo.filename = list.file (typeName);
1641- typedefInfo.lineNumber = typeName->linenr ();
1642- typedefInfo.column = typeName->column ();
1649+ typedefInfo.lineNumber = typeDef->linenr ();
1650+ typedefInfo.column = typeDef->column ();
1651+ typedefInfo.tagLineNumber = typedefInfo.lineNumber ;
1652+ typedefInfo.tagColumn = typedefInfo.column ;
16431653 typedefInfo.used = false ;
16441654 typedefInfo.isFunctionPointer = isFunctionPointer (typeName);
1645- if (typedefInfo.isFunctionPointer ) {
1646- const Token* t = typeDef;
1647- while (t != tok) {
1655+ const Token* t = typeDef;
1656+ while (t != tok) {
1657+ if (t->str () == typedefInfo.name ) {
1658+ typedefInfo.tagLineNumber = t->linenr ();
1659+ typedefInfo.tagColumn = t->column ();
1660+ if (!typedefInfo.isFunctionPointer )
1661+ break ;
1662+ }
1663+ if (typedefInfo.isFunctionPointer ) {
16481664 TypedefToken ttok;
16491665 ttok.name = t->str ();
16501666 ttok.lineNumber = t->linenr ();
16511667 ttok.column = t->column ();
16521668 typedefInfo.typedefInfoTokens .emplace_back (ttok);
1653- t = t->next ();
16541669 }
1670+ t = t->next ();
16551671 }
16561672 mTypedefInfo .push_back (std::move (typedefInfo));
16571673
@@ -3170,6 +3186,8 @@ bool Tokenizer::simplifyUsing()
31703186 usingInfo.filename = list.file (nameToken);
31713187 usingInfo.lineNumber = nameToken->linenr ();
31723188 usingInfo.column = nameToken->column ();
3189+ usingInfo.tagLineNumber = usingInfo.lineNumber ;
3190+ usingInfo.tagColumn = usingInfo.column ;
31733191 usingInfo.used = true ;
31743192 usingInfo.isFunctionPointer = false ;
31753193 mTypedefInfo .push_back (std::move (usingInfo));
@@ -6327,6 +6345,14 @@ std::string Tokenizer::dumpTypedefInfo() const
63276345 outs += std::to_string (typedefInfo.column );
63286346 outs += " \" " ;
63296347
6348+ outs += " tagline=\" " ;
6349+ outs += std::to_string (typedefInfo.tagLineNumber );
6350+ outs += " \" " ;
6351+
6352+ outs += " tagcolumn=\" " ;
6353+ outs += std::to_string (typedefInfo.tagColumn );
6354+ outs += " \" " ;
6355+
63306356 outs += " used=\" " ;
63316357 outs += std::to_string (typedefInfo.used ?1 :0 );
63326358 outs += " \" " ;
0 commit comments