+
    JV-j  ã                   óZ   € ^ RI HtHtHtHt ^RIHt R R ltR R ltR R lt	R	 R
 lt
R# )é    )ÚAnyÚListÚTupleÚcast)Úc_astc                óX   € V ^8„  d   QhR\         P                  R\         P                  /# )é   Úswitch_nodeÚreturn)r   ÚSwitch)Úformats   "Úi/Volumes/fast/ai/experiments/ui-tars-smoke/.venv/lib/python3.14/site-packages/pycparser/ast_transforms.pyÚ__annotate__r      s&   € ÷ Sñ S¤%§,¡,ð S´5·<±<ñ Só    c                ó¸  € \        V \        P                  4      '       g   Q h\        V P                  \        P                  4      '       g   V # \        P                  ! . V P                  P
                  4      pRpV P                  P                  ;'       g    .  F´  p\        V\        P                  \        P                  34      '       dF   VP                  P                  V4       \        W1P                  4       VP                  R,          pKx  Vf   VP                  P                  V4       K™  VP                  P                  V4       K¶  	  Wn        V # )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   r   ÚstmtÚCompoundÚcoordÚblock_itemsÚCaseÚDefaultÚappendÚ_extract_nested_caseÚstmts)r
   Únew_compoundÚ	last_caseÚchilds   &   r   Úfix_switch_casesr       s  € ôf �k¤5§<¡<×0Ò0Ð0Ð0Ü�k×&Ñ&¬¯©×7Ò7ØÐô —>’> " k×&6Ñ&6×&<Ñ&<Ó=€Lð 48€Ið
 ×!Ñ!×-Ñ-×3Ð3°Ò3ˆÜ�eœeŸj™j¬%¯-©-Ð8×9Ò9ð
 ×$Ñ$×+Ñ+¨EÔ2Ü  ×(@Ñ(@ÔAØ$×0Ñ0°Õ4ŠIð Ò Ø×(Ñ(×/Ñ/°Ö6à—‘×&Ñ& uÖ-ñ 4ð" $ÔØÐr   c                óœ   € V ^8„  d   QhR\         P                  \         P                  ,          R\        \         P                  ,          RR/# )r	   Ú	case_nodeÚ
stmts_listr   N)r   r   r   r   ÚNode)r   s   "r   r   r   e   s:   € ÷ 	<ñ 	<Ü�z‰zœEŸM™MÕ)ð	<Ü7;¼E¿J¹JÕ7Gð	<à	ñ	<r   c                ó  € \        V P                  ^ ,          \        P                  \        P                  34      '       dH   V P                  P                  4       pVP                  V4       \        \        \        V4      V4       R# R# )zsRecursively extract consecutive Case statements that are made nested
by the parser and add them to the stmts_list.
N)
r   r   r   r   r   Úpopr   r   r   r   )r"   r#   Únesteds   && r   r   r   e   s^   € ô �)—/‘/ !Õ$¤u§z¡z´5·=±=Ð&A×BÒBØ—‘×$Ñ$Ó&ˆØ×Ñ˜&Ô!ÜœT¤# vÓ.°
Ö;ñ Cr   c                ó¬   € V ^8„  d   QhR\         P                  \         P                  ,          R\         P                  \         P                  ,          /# ©r	   Údeclr   )r   ÚDeclÚTypedef)r   s   "r   r   r   q   s6   € ÷ ñ Ü
�*‰*”u—}‘}Õ
$ðä
‡Z�Z”%—-‘-Õñr   c                óx  €  \        V 4      w  rV'       d   K   T p\        T\        P                  4      '       g    TP                  pK/  RTP                  9   d-   RT P                  9  d   T P                  P                  R4       TP                  f   T P                  Tn        T #   \
         d    T u # i ; i)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.
Ú_Atomic)
Ú_fix_atomic_specifiers_oncer   r   ÚTypeDeclÚtypeÚAttributeErrorÚqualsr   ÚdeclnameÚname)r*   ÚfoundÚtyps   &  r   Úfix_atomic_specifiersr8   q   sœ   € ð Ü1°$Ó7‰ˆß‰uØð
 €CÜ˜œeŸn™n×-Ò-ð	Ø—(‘(ŠCð �C—I‘IÔ )°4·:±:Ô"=Ø�
‰
×Ñ˜)Ô$Ø
‡|�|ÒØ—y‘yˆŒà€Køô ô 	ØŠKð	ús   ½B) Â)B9Â8B9c                óÎ   € V ^8„  d   QhR\         P                  \         P                  ,          R\        \         P                  \         P                  ,          \        3,          /# r)   )r   r+   r,   r   Úbool)r   s   "r   r   r   “   s@   € ÷ ñ Ü
�*‰*”u—}‘}Õ
$ðä
Œ5�:‰:œŸ™Õ%¤tÐ+Õ,ñr   c                óô  € T pRpV P                   pVeF   \        V\        P                  4      '       d   RVP                  9   d   M TpTpVP                   pKI  \        V\        P                  4      '       g   Q hVf   Q hVP                   \        \        V4      n         RVP                   P                  9  d&   VP                   P                  P                  R4       V R3#   \
         d    T R3u # i ; i)zvPerforms one 'fix' round of atomic specifiers.
Returns (modified_decl, found) where found is True iff a fix was made.
Nr.   FT)
r1   r   r   ÚTypenamer3   r2   r0   r   r   r   )r*   ÚparentÚgrandparentÚnodes   &   r   r/   r/   “   sÙ   € ð €FØ€KØ—	‘	€DØ
Ò
Ü�dœEŸN™N×+Ò+°	¸T¿Z¹ZÔ0GØð	Ø ˆKØˆFØ—9‘9ŠDô �fœeŸn™n×-Ò-Ð-Ð-ØÒ"Ð"Ð"Ø"&§)¡)„DŒˆkÓÔØ˜Ÿ	™	Ÿ™Ô'Ø�	‰	�‰×Ñ˜yÔ)Ø�ˆ:Ðøô ô 	ð ˜�;Òð		ús   ÁC% Ã%C7Ã6C7N)Útypingr   r   r   r   Ú r   r    r   r8   r/   © r   r   Ú<module>rC      s'   ð÷ *Ó )å õSõl	<õ÷Dr   