diff --git a/pycparser/c_parser.py b/pycparser/c_parser.py index 494f501e..c5a9e687 100644 --- a/pycparser/c_parser.py +++ b/pycparser/c_parser.py @@ -557,9 +557,9 @@ def p_pppragma_directive(self, p): | PPPRAGMA PPPRAGMASTR """ if len(p) == 3: - p[0] = c_ast.Pragma(p[2]) + p[0] = c_ast.Pragma(p[2], self._coord(p.lineno(2))) else: - p[0] = c_ast.Pragma("") + p[0] = c_ast.Pragma("", self._coord(p.lineno(1))) # In function definitions, the declarator can be followed by # a declaration list, for old "K&R style" function definitios. diff --git a/tests/test_c_parser.py b/tests/test_c_parser.py index ed957dc9..521f77ff 100755 --- a/tests/test_c_parser.py +++ b/tests/test_c_parser.py @@ -1290,14 +1290,21 @@ def test_pragma(self): void main() { #pragma foo for(;;) {} + #pragma } ''' s1_ast = self.parse(s1) self.assertTrue(isinstance(s1_ast.ext[0], Pragma)) self.assertEqual(s1_ast.ext[0].string, 'bar') + self.assertEqual(s1_ast.ext[0].coord.line, 2) self.assertTrue(isinstance(s1_ast.ext[1].body.block_items[0], Pragma)) self.assertEqual(s1_ast.ext[1].body.block_items[0].string, 'foo') + self.assertEqual(s1_ast.ext[1].body.block_items[0].coord.line, 4) + + self.assertTrue(isinstance(s1_ast.ext[1].body.block_items[2], Pragma)) + self.assertEqual(s1_ast.ext[1].body.block_items[2].string, '') + self.assertEqual(s1_ast.ext[1].body.block_items[2].coord.line, 6) class TestCParser_whole_code(TestCParser_base):