summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEli Bendersky <eliben@users.noreply.github.com>2015-12-15 05:46:23 -0800
committerEli Bendersky <eliben@users.noreply.github.com>2015-12-15 05:46:23 -0800
commitaceb9c95bd2bf877e301208a34693516eea27850 (patch)
treef50dc61752f20083a16b15b8d8066680ae0dabfa
parent904cecd150c2c5c768944d199169957cdb8433f9 (diff)
parent8a1740608ae3383e1187b897ce4a070b4c3f1cde (diff)
downloadpycparser-aceb9c95bd2bf877e301208a34693516eea27850.tar.gz
Merge pull request #108 from cod3monk/bugfix
Fix for #107 "No coord for Prgama Node"
-rw-r--r--pycparser/c_parser.py4
-rwxr-xr-xtests/test_c_parser.py7
2 files changed, 9 insertions, 2 deletions
diff --git a/pycparser/c_parser.py b/pycparser/c_parser.py
index 494f501..c5a9e68 100644
--- a/pycparser/c_parser.py
+++ b/pycparser/c_parser.py
@@ -557,9 +557,9 @@ class CParser(PLYParser):
| 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 ed957dc..521f77f 100755
--- a/tests/test_c_parser.py
+++ b/tests/test_c_parser.py
@@ -1290,14 +1290,21 @@ class TestCParser_fundamentals(TestCParser_base):
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):