diff options
author | Julian Hammer <julian.hammer@fau.de> | 2015-12-14 14:48:16 +0100 |
---|---|---|
committer | Julian Hammer <julian.hammer@fau.de> | 2015-12-15 08:27:32 +0100 |
commit | 8a1740608ae3383e1187b897ce4a070b4c3f1cde (patch) | |
tree | 85776817ee217e7162c6da024478dbac26980eba | |
parent | fd2c7731c4d4cd225fe0a47fe6de6f528f22842c (diff) | |
download | pycparser-8a1740608ae3383e1187b897ce4a070b4c3f1cde.tar.gz |
fixed #107 "No coord for Prgama Node"
-rw-r--r-- | pycparser/c_parser.py | 4 | ||||
-rwxr-xr-x | tests/test_c_parser.py | 7 |
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): |