Spade
Mini Shell
| Directory:~$ /proc/self/root/lib/python2.7/site-packages/pycparser/ |
| [Home] [System Details] [Kill Me] |
�
g�wUc@s&ddlmZd�Zd�ZdS(i(tc_astcCs�t|tj�st�t|jtj�s1|Stjg|jj�}d}x�|jjD]�}t|tj tj
f�r�|jj|�t||j�|jd}q\|dkr�|jj|�q\|j
j|�q\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 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.
i����N(t
isinstanceRtSwitchtAssertionErrortstmttCompoundtcoordtNonetblock_itemstCasetDefaulttappendt_extract_nested_casetstmts(tswitch_nodetnew_compoundt last_casetchild((s</usr/lib/python2.7/site-packages/pycparser/ast_transforms.pytfix_switch_cases
s3 cCsPt|jdtjtjf�rL|j|jj��t|d|�ndS(s�
Recursively extract consecutive Case statements that are made nested
by the parser and add them to the stmts_list.
ii����N(RR
RR R
RtpopR(t case_nodet
stmts_list((s</usr/lib/python2.7/site-packages/pycparser/ast_transforms.pyRbs"N(tRRR(((s</usr/lib/python2.7/site-packages/pycparser/ast_transforms.pyt<module>
s U