| Server IP : 23.254.227.96 / Your IP : 216.73.216.21 Web Server : Apache/2.4.62 (Unix) OpenSSL/1.1.1k System : Linux hwsrv-1277026.hostwindsdns.com 4.18.0-477.13.1.el8_8.x86_64 #1 SMP Tue May 30 14:53:41 EDT 2023 x86_64 User : viralblo ( 1001) PHP Version : 8.1.31 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /lib/python3.6/site-packages/pycparser/__pycache__/ |
Upload File : |
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