summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulian Hammer <julian.hammer@fau.de>2015-12-14 14:48:16 +0100
committerJulian Hammer <julian.hammer@fau.de>2015-12-15 08:27:32 +0100
commit8a1740608ae3383e1187b897ce4a070b4c3f1cde (patch)
tree85776817ee217e7162c6da024478dbac26980eba
parentfd2c7731c4d4cd225fe0a47fe6de6f528f22842c (diff)
downloadpycparser-8a1740608ae3383e1187b897ce4a070b4c3f1cde.tar.gz
fixed #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):