aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorldore <laurent.dore@gmail.com>2017-11-22 14:52:53 +0100
committerEli Bendersky <eliben@users.noreply.github.com>2017-11-22 05:52:53 -0800
commitec2331889b3a283dfbd09bc76fc7e117d0644ec0 (patch)
tree4245534f7a6b2e721e915ec9176057e3e265bc6c
parent5da662c5dc5474b724b0a22d5424d6066bd30d91 (diff)
downloadpycparser-ec2331889b3a283dfbd09bc76fc7e117d0644ec0.tar.gz
Add support for #pragma in struct_declaration (Issue #221). (#222)
-rw-r--r--pycparser/c_parser.py5
-rw-r--r--tests/test_c_generator.py3
-rwxr-xr-xtests/test_c_parser.py7
3 files changed, 15 insertions, 0 deletions
diff --git a/pycparser/c_parser.py b/pycparser/c_parser.py
index f84d6bc..fe3b082 100644
--- a/pycparser/c_parser.py
+++ b/pycparser/c_parser.py
@@ -939,6 +939,11 @@ class CParser(PLYParser):
"""
p[0] = None
+ def p_struct_declaration_3(self, p):
+ """ struct_declaration : pppragma_directive
+ """
+ p[0] = [p[1]]
+
def p_struct_declarator_list(self, p):
""" struct_declarator_list : struct_declarator
| struct_declarator_list COMMA struct_declarator
diff --git a/tests/test_c_generator.py b/tests/test_c_generator.py
index 43204c1..267bb3d 100644
--- a/tests/test_c_generator.py
+++ b/tests/test_c_generator.py
@@ -274,6 +274,9 @@ class TestCtoC(unittest.TestCase):
#pragma bar
i = (a, b, c);
}
+ typedef struct s {
+ #pragma baz
+ } s;
''')
def test_compound_literal(self):
diff --git a/tests/test_c_parser.py b/tests/test_c_parser.py
index 8b09a3f..ab6143f 100755
--- a/tests/test_c_parser.py
+++ b/tests/test_c_parser.py
@@ -1348,6 +1348,9 @@ class TestCParser_fundamentals(TestCParser_base):
for(;;) {}
#pragma
}
+ struct s {
+ #pragma baz
+ } s;
'''
s1_ast = self.parse(s1)
self.assertTrue(isinstance(s1_ast.ext[0], Pragma))
@@ -1361,6 +1364,10 @@ class TestCParser_fundamentals(TestCParser_base):
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)
+
+ self.assertTrue(isinstance(s1_ast.ext[2].type.type.decls[0], Pragma))
+ self.assertEqual(s1_ast.ext[2].type.type.decls[0].string, 'baz')
+ self.assertEqual(s1_ast.ext[2].type.type.decls[0].coord.line, 9)
class TestCParser_whole_code(TestCParser_base):