From ec2331889b3a283dfbd09bc76fc7e117d0644ec0 Mon Sep 17 00:00:00 2001 From: ldore Date: Wed, 22 Nov 2017 14:52:53 +0100 Subject: [PATCH] Add support for #pragma in struct_declaration (Issue #221). (#222) --- pycparser/c_parser.py | 5 +++++ tests/test_c_generator.py | 3 +++ tests/test_c_parser.py | 7 +++++++ 3 files changed, 15 insertions(+) diff --git a/pycparser/c_parser.py b/pycparser/c_parser.py index f84d6bc6..fe3b082e 100644 --- a/pycparser/c_parser.py +++ b/pycparser/c_parser.py @@ -939,6 +939,11 @@ def p_struct_declaration_2(self, p): """ 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 43204c1e..267bb3df 100644 --- a/tests/test_c_generator.py +++ b/tests/test_c_generator.py @@ -274,6 +274,9 @@ def test_pragma(self): #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 8b09a3ff..ab6143f3 100755 --- a/tests/test_c_parser.py +++ b/tests/test_c_parser.py @@ -1348,6 +1348,9 @@ def test_pragma(self): for(;;) {} #pragma } + struct s { + #pragma baz + } s; ''' s1_ast = self.parse(s1) self.assertTrue(isinstance(s1_ast.ext[0], Pragma)) @@ -1361,6 +1364,10 @@ def test_pragma(self): 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):