inducer / pycparserext

Extensions for Eli Bendersky's pycparser
http://pypi.python.org/pypi/pycparserext
Other
83 stars 29 forks source link

Coord.line is always set to 0 for Asm nodes #40

Open maximumspatium opened 6 years ago

maximumspatium commented 6 years ago

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.

inducer commented 6 years ago

I'm happy to take your word for it--could you submit a PR?