bg;*ddlmZdZdZdZdZdS))c_astc&t|tjsJt|jtjs|Stjg|jj}d}|jjpgD]}t|tjtjfr=|j |t||j|jd}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) isinstancerSwitchstmtCompoundcoord block_itemsCaseDefaultappend_extract_nested_casestmts) switch_node new_compound last_casechilds i/builddir/build/BUILD/cloudlinux-venv-1.0.7/venv/lib/python3.11/site-packages/pycparser/ast_transforms.pyfix_switch_casesr sf k5< 0 000 0 k& 7 7>"k&6&<==LI ".4".. eej%-8 9 9 .  $ + +E 2 2 2  (@ A A A$04II (//6666&&u----#K ct|jdtjtjfrD||jt|d|dSdS)z Recursively extract consecutive Case statements that are made nested by the parser and add them to the stmts_list. rN)rrrr r rpopr) case_node stmts_lists rrrcsl)/!$uz5=&ABB9)/--//000Z^Z8888899rcT t|\}}|sn|}t|tjs5 |j}n#t $r|cYSwxYwt|tj5d|jvr#d|jvr|jd|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_oncerrTypeDecltypeAttributeErrorqualsrdeclnamename)declfoundtyps rfix_atomic_specifiersr)ls1$77 e   Cen-- (CC   KKK en-- CI)4:"="= )$$$ |y Ks= A  A c\|}d}|j}|Gt|tjr d|jvrn# |}|}|j}n#t $r|dfcYSwxYw|Gt|tjsJ|j|_d|jjvr|jjd|dfS)z Performs one 'fix' round of atomic specifiers. Returns (modified_decl, found) where found is True iff a fix was made. NrFT)r!rrTypenamer#r"r r)r&parent grandparentnodes rrrsFK 9D   dEN + +  TZ0G0G   KF9DD   ;        fen - --- -yK '' y))) :s ?AAN)rrrr)rrrr1sdSSSl999@r