File: //lib/python3.6/site-packages/pycparser/__pycache__/ast_transforms.cpython-36.opt-1.pyc
3
g¨wUð
ã @ s d dl mZ dd„ Zdd„ ZdS )é )Úc_astc C sš t | jtjƒs| S tjg | jjƒ}d}xh| jjD ]\}t |tjtjfƒrj|jj|ƒ t ||jƒ |jd }q0|dkr€|jj|ƒ q0|j
j|ƒ q0W || _| S )aÜ 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 it 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.
Nr éÿÿÿÿ)Ú
isinstanceZstmtr ZCompoundZcoordZblock_itemsÚCaseÚDefaultÚappendÚ_extract_nested_caseÚstmts)Zswitch_nodeZnew_compoundZ last_caseZchild© r
ú$/usr/lib/python3.6/ast_transforms.pyÚfix_switch_cases
s 4r c C s: t | jd tjtjfƒr6|j| jjƒ ƒ t|d |ƒ dS )z€ Recursively extract consecutive Case statements that are made nested
by the parser and add them to the stmts_list.
é r Nr )r r r r r r Úpopr )Z case_nodeZ
stmts_listr
r
r r b s r N)Ú r r r r
r
r
r Ú<module>
s U