summaryrefslogtreecommitdiff
path: root/pycparser/c_parser.py
diff options
context:
space:
mode:
authorEli Bendersky <eliben@gmail.com>2012-02-03 11:22:25 +0200
committerEli Bendersky <eliben@gmail.com>2012-02-03 11:22:25 +0200
commit12f0c9d099e997c91a2622c25ce112632ef5e115 (patch)
treeadeaf93e542e7a3d536637f47ce99c6414a392cb /pycparser/c_parser.py
parent5433326654f0f266fa692c6f76477ea0accde6f8 (diff)
downloadpycparser-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.py8
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 """