관리-도구
편집 파일: ast_transforms.cpython-39.opt-1.pyc
a ������_^@����������������������@���s ���d�dl�mZ�dd��Zdd��ZdS�)����)�c_astc�����������������C���s����t�|�jtj�s|�S�t�g�|�jj�}d}|�jjp0g�D�]\}t�|tjtjf�rl|j�|��t ||j��|jd�}q2|du�r�|j�|��q2|j �|��q2||�_|�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 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. N���)� isinstanceZstmtr���ZCompoundZcoordZblock_items�Case�Default�append�_extract_nested_case�stmts)Zswitch_nodeZnew_compoundZ last_case�child��r����</usr/lib/python3.9/site-packages/pycparser/ast_transforms.py�fix_switch_cases ���s����4r ���c�����������������C���s:���t�|�jd�tjtjf�r6|�|�j�����t|d�|��dS�)z� Recursively extract consecutive Case statements that are made nested by the parser and add them to the stmts_list. �����r���N)r���r ���r���r���r���r����popr���)Z case_nodeZ stmts_listr���r���r���r���c���s����r���N)��r���r ���r���r���r���r���r����<module> ���s���V