a ‚oe;ã@s0ddlmZdd„Zdd„Zdd„Zdd „Zd S) é)Úc_astcCsªt|tjƒsJ‚t|jtjƒs"|St g|jj¡}d}|jjp@gD]\}t|tjtjfƒr||j  |¡t ||jƒ|jd}qB|dur’|j  |¡qB|j   |¡qB||_|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éÿÿÿÿ) Ú isinstancerZSwitchZstmtZCompoundZcoordZ block_itemsÚCaseÚDefaultÚappendÚ_extract_nested_caseÚstmts)Z switch_nodeZ new_compoundZ last_caseÚchild©r ú9C:\Program Files\Certbot\pkgs\pycparser\ast_transforms.pyÚfix_switch_cases s3   r cCs:t|jdtjtjfƒ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. érN)rr rrrrÚpopr)Z case_nodeZ stmts_listr r r rcsrcCs~t|ƒ\}}|sqq|}t|tjƒsHz |j}WqtyD|YS0qd|jvrhd|jvrh|j d¡|jdurz|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. Ú_AtomicN) Ú_fix_atomic_specifiers_oncerrÚTypeDeclÚtypeÚAttributeErrorÚqualsrZdeclnameÚname)ÚdeclÚfoundÚtypr r r Úfix_atomic_specifiersls       rcCs˜|}d}|j}|dur^t|tjƒr.d|jvr.q^z|}|}|j}WqtyZ|dfYS0qt|tjƒsnJ‚|j|_d|jjvr�|jj d¡|dfS)zƒ Performs one 'fix' round of atomic specifiers. Returns (modified_decl, found) where found is True iff a fix was made. NrFT)rrrZTypenamerrrr)rÚparentZ grandparentZnoder r r rŒs"   rN)Úrr rrrr r r r Ú s V