File: //proc/thread-self/root/lib/python3.6/site-packages/pycparser/ast_transforms.pyc
�
Ʋ@ac @ s8 d d l m Z d � Z d � Z d � Z d � Z d S( i ( t c_astc C s� t | t j � s t � t | j t j � s1 | St j g | j j � } d } x� | j j pa g D]� } t | t j t j
f � r� | j j | � t | | j � | j d } qb | d k r� | j j | � qb | j
j | � qb W| | _ | S( s� The 'case' statements in a 'switch' come out of parsing with one
child node, so subsequent statements are just tucked to the parent
Compound. Additionally, consecutive (fall-through) case statements
come out messy. This is a peculiarity of the C grammar. The following:
switch (myvar) {
case 10:
k = 10;
p = k + 1;
return 10;
case 20:
case 30:
return 20;
default:
break;
}
Creates this tree (pseudo-dump):
Switch
ID: myvar
Compound:
Case 10:
k = 10
p = k + 1
return 10
Case 20:
Case 30:
return 20
Default:
break
The goal of this transform is to fix this mess, turning it into the
following:
Switch
ID: myvar
Compound:
Case 10:
k = 10
p = k + 1
return 10
Case 20:
Case 30:
return 20
Default:
break
A fixed AST node is returned. The argument may be modified.
i����N( t
isinstanceR t Switcht AssertionErrort stmtt Compoundt coordt Nonet block_itemst Caset Defaultt appendt _extract_nested_caset stmts( t switch_nodet new_compoundt last_caset child( ( s ../pycparser/ast_transforms.pyt fix_switch_cases
s 3 c C sP t | j d t j t j f � rL | j | j j � � t | d | � n d S( s� Recursively extract consecutive Case statements that are made nested
by the parser and add them to the stmts_list.
i i����N( R R
R R R
R t popR ( t case_nodet
stmts_list( ( s ../pycparser/ast_transforms.pyR c s "c C s� x&