tries to get the 'lineno' attribute from p.slice[1] that isn't there so getattr() will return the default value of 0 instead of the actual line number.
I figured out that p.slice[2] contains the appropriate 'lineno' attribute. Changing the last param of the Asm constructor calls from
coord=self._coord(p.lineno(1)))
to
coord=self._coord(p.lineno(2)))
makes the code to return correct file:line position for Asm nodes. Coord.column seems often to be set to None while pycparser fills it with meaningful values.
Would you kindly verify whether that simply fix is okay?
I cannot provide any test case right now because it would require a file with several lines. I confirm that the above mentioned fix works for several real-world C sources I fed in so far.
As the title says, the line number in the Coord object is always set to 0 for Asm nodes. This happens because lineno in the following lines
https://github.com/inducer/pycparserext/blob/b602b4de77bee3a9e41223fa1d6bb91dd56209e3/pycparserext/ext_c_parser.py#L300 https://github.com/inducer/pycparserext/blob/b602b4de77bee3a9e41223fa1d6bb91dd56209e3/pycparserext/ext_c_parser.py#L306 https://github.com/inducer/pycparserext/blob/b602b4de77bee3a9e41223fa1d6bb91dd56209e3/pycparserext/ext_c_parser.py#L313 https://github.com/inducer/pycparserext/blob/b602b4de77bee3a9e41223fa1d6bb91dd56209e3/pycparserext/ext_c_parser.py#L320
tries to get the 'lineno' attribute from p.slice[1] that isn't there so getattr() will return the default value of 0 instead of the actual line number.
I figured out that p.slice[2] contains the appropriate 'lineno' attribute. Changing the last param of the Asm constructor calls from
coord=self._coord(p.lineno(1)))
to
coord=self._coord(p.lineno(2)))
makes the code to return correct file:line position for Asm nodes. Coord.column seems often to be set to None while pycparser fills it with meaningful values.
Would you kindly verify whether that simply fix is okay?
I cannot provide any test case right now because it would require a file with several lines. I confirm that the above mentioned fix works for several real-world C sources I fed in so far.