Skip to content

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

@maximumspatium

Description

@maximumspatium

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

p[0] = Asm(p[1], p[3], None, None, None, coord=self._coord(p.lineno(1)))

p[0] = Asm(p[1], p[3], p[5], None, None, coord=self._coord(p.lineno(1)))

p[0] = Asm(p[1], p[3], p[5], p[7], None, coord=self._coord(p.lineno(1)))

p[0] = Asm(p[1], p[3], p[5], p[7], p[9], coord=self._coord(p.lineno(1)))

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions