@@ -68,9 +68,10 @@ class AbstractTokenFilter: public ITokenizer {
6868
6969class Tokenizer : public ITokenizer {
7070 public:
71- Tokenizer (std::istream &input):
71+ Tokenizer (std::istream &input, bool addInputLines = false ):
7272 input_ (input),
73- lineNo_ (0 )
73+ lineNo_ (0 ),
74+ addInputLines_ (addInputLines)
7475 {
7576 }
7677
@@ -83,6 +84,7 @@ class Tokenizer: public ITokenizer {
8384 private:
8485 std::istream &input_;
8586 int lineNo_;
87+ bool addInputLines_;
8688
8789 const RE reSideBar_ =
8890 RE (" ^ *((([0-9]+)? \\ | )|(\\ +\\ +\\ + \\ |\\ +)).*$" );
@@ -131,6 +133,9 @@ EToken Tokenizer::readNext(DefEvent *pEvt)
131133 *pEvt = DefEvent ();
132134 pEvt->msg = line;
133135
136+ if (addInputLines_)
137+ pEvt->inputLine = lineNo_;
138+
134139 // check for line markers produced by gcc-9.2.1 (a.k.a. sidebar)
135140 if (boost::regex_match (pEvt->msg , reSideBar_))
136141 // xxx.c:2:1: note: include '<stdlib.h>' or provide a declaration...
@@ -387,7 +392,7 @@ EToken MultilineConcatenator::readNext(DefEvent *pEvt)
387392class BasicGccParser {
388393 public:
389394 BasicGccParser (InStream &input):
390- rawTokenizer_ (input.str()),
395+ rawTokenizer_ (input.str(), input.addInputLines() ),
391396 noiseFilter_ (&rawTokenizer_),
392397 markerConverter_ (&noiseFilter_),
393398 tokenizer_ (&markerConverter_),
@@ -535,6 +540,7 @@ bool BasicGccParser::getNext(Defect *pDef)
535540 DefEvent evt;
536541
537542 const EToken tok = tokenizer_.readNext (&evt);
543+
538544 switch (tok) {
539545 case T_NULL:
540546 if (!hasKeyEvent_ && !defCurrent_.events .empty ())
@@ -828,7 +834,7 @@ bool GccParser::getNext(Defect *pDef)
828834 while (d->core .getNext (&d->lastDef ) && d->tryMerge (pDef))
829835 ;
830836
831- // initialize verbosityLevel
837+ // initialize verbosityLevel
832838 // FIXME: similar code to KeyEventDigger::initVerbosity()
833839 TEvtList &evtList = pDef->events ;
834840 const unsigned evtCount = evtList.size ();
0 commit comments