File manager - Edit - /opt/saltstack/salt/lib/python3.10/site-packages/pycparser/__pycache__/ast_transforms.cpython-310.pyc
Back
o ;j � @ s� d dl mZmZmZmZ ddlmZ dejdejfdd�Zdej ej B d eej dd fdd�Zd ej ejB dej ejB fdd�Zd ej ejB deej ejB ef fdd�Zd S )� )�Any�List�Tuple�cast� )�c_ast�switch_node�returnc C s� t | tj�sJ �t | jtj�s| S t�g | jj�}d}| jjp g D ].}t |tjtjf�r>|j� |� t ||j� |jd }q!|du rI|j� |� q!|j� |� q!|| _| S )a3 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���)� isinstancer �SwitchZstmtZCompoundZcoordZblock_items�Case�Default�append�_extract_nested_case�stmts)r Znew_compoundZ last_case�child� r �L/opt/saltstack/salt/lib/python3.10/site-packages/pycparser/ast_transforms.py�fix_switch_cases s 3r � case_node� stmts_listNc C sD t | jd tjtjf�r | j�� }|�|� ttt |�|� dS 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 �popr r r r )r r �nestedr r r r e s �r �declc C s� t | �\} }|s nq| }t|tj�s*z|j}W n ty# | Y S w t|tj�rd|jv r:d| jvr:| j�d� |jdu rC| j |_| S )a: Atomic specifiers like _Atomic(type) are unusually structured, conferring a qualifier upon the contained type. This function fixes a decl with atomic specifiers to have a sane AST structure, by removing spurious Typename->TypeDecl pairs and attaching the _Atomic qualifier in the right place. T�_AtomicN) �_fix_atomic_specifiers_oncer r �TypeDecl�type�AttributeError�qualsr Zdeclname�name)r �found�typr r r �fix_atomic_specifiersq s$ � �� r$ c C s� | }d}| j }|dur2t|tj�rd|jv rnz |}|}|j }W n ty- | df Y S w |dust|tj�s:J �|dus@J �|j tt|�_ d|j jvrT|j j� d� | dfS )z~Performs one 'fix' round of atomic specifiers. Returns (modified_decl, found) where found is True iff a fix was made. Nr FT) r r r ZTypenamer r r r r r )r �parentZgrandparent�noder r r r � s( �� r )�typingr r r r � r r r r r ZNoder ZDeclZTypedefr$ �boolr r r r r �<module> s( V �� � � �" ��
| ver. 1.4 |
Github
|
.
| PHP 8.2.30 | Generation time: 0 |
proxy
|
phpinfo
|
Settings