#(eǴ * d dl mZ d Zd Zd Zd ZdS ) )c_astc & t | t j sJ t | j t j s| S t j g | j j }d}| j j pg D ]}t |t j t j f r=|j | t ||j |j d }e||j | |j | || _ | 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) isinstancer SwitchstmtCompoundcoordblock_itemsCaseDefaultappend_extract_nested_casestmts)switch_nodenew_compound last_casechilds j/builddir/build/BUILD/cloudlinux-venv-1.0.10/venv/lib/python3.11/site-packages/pycparser/ast_transforms.pyfix_switch_casesr s f k5<00000k&77 >"k&6&<==L I ".4" . .eej%-899 . $++E222 (@AAA$04II (//6666&&u----#K c t | j d t j t j f rD| | j t |d | 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 r popr ) case_node stmts_lists r r r c sl )/!$uz5=&ABB 9)/--//000Z^Z888889 9r c T t | \ } }|sn| }t |t j s5 |j }n# t $ r | cY S w xY wt |t j 5d|j v r#d| j vr| j d |j | j |_ | S )aK 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_Atomic) _fix_atomic_specifiers_oncer r TypeDecltypeAttributeErrorqualsr declnamename)declfoundtyps r fix_atomic_specifiersr) l s 1$77e Cen-- (CC KKK en-- CI)4:"="= )$$$ |yKs = AAc \ | }d}| j }|Gt |t j r d|j v rn# |}|}|j }n# t $ r | dfcY S w xY w|Gt |t j sJ |j |_ d|j j vr|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 Typenamer# r" r r )r&