diff options
author | Eli Bendersky <eliben@gmail.com> | 2012-02-03 11:22:25 +0200 |
---|---|---|
committer | Eli Bendersky <eliben@gmail.com> | 2012-02-03 11:22:25 +0200 |
commit | 12f0c9d099e997c91a2622c25ce112632ef5e115 (patch) | |
tree | adeaf93e542e7a3d536637f47ce99c6414a392cb /pycparser/c_parser.py | |
parent | 5433326654f0f266fa692c6f76477ea0accde6f8 (diff) | |
download | pycparser-12f0c9d099e997c91a2622c25ce112632ef5e115.tar.gz |
Transform the AST to create a correct representation of the cases inside a switch statement
Diffstat (limited to 'pycparser/c_parser.py')
-rw-r--r-- | pycparser/c_parser.py | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/pycparser/c_parser.py b/pycparser/c_parser.py index a53ccd4..cd21c3d 100644 --- a/pycparser/c_parser.py +++ b/pycparser/c_parser.py @@ -13,6 +13,7 @@ import ply.yacc from . import c_ast from .c_lexer import CLexer from .plyparser import PLYParser, Coord, ParseError +from .ast_transforms import fix_switch_cases class CParser(PLYParser): @@ -1085,11 +1086,11 @@ class CParser(PLYParser): def p_labeled_statement_2(self, p): """ labeled_statement : CASE constant_expression COLON statement """ - p[0] = c_ast.Case(p[2], p[4], self._coord(p.lineno(1))) + p[0] = c_ast.Case(p[2], [p[4]], self._coord(p.lineno(1))) def p_labeled_statement_3(self, p): """ labeled_statement : DEFAULT COLON statement """ - p[0] = c_ast.Default(p[3], self._coord(p.lineno(1))) + p[0] = c_ast.Default([p[3]], self._coord(p.lineno(1))) def p_selection_statement_1(self, p): """ selection_statement : IF LPAREN expression RPAREN statement """ @@ -1101,7 +1102,8 @@ class CParser(PLYParser): def p_selection_statement_3(self, p): """ selection_statement : SWITCH LPAREN expression RPAREN statement """ - p[0] = c_ast.Switch(p[3], p[5], self._coord(p.lineno(1))) + p[0] = fix_switch_cases( + c_ast.Switch(p[3], p[5], self._coord(p.lineno(1)))) def p_iteration_statement_1(self, p): """ iteration_statement : WHILE LPAREN expression RPAREN statement """ |