Ë
    	°ëj …  ã                   ó<   — d dl mZ d dlmZ ddlmZ  G d„ d«      Zy)é    )ÚCallable)ÚClassVaré   )Úc_astc                   ó:  — e Zd ZU dZeed<   eed<   dƒdeddfd„Zdefd„Z	d	e
j                  defd
„Zd	e
j                  dz  defd„Zde
j                  defd„Zde
j                   defd„Zdee
j&                     defd„Zde
j*                  defd„Zde
j&                  defd„Zde
j0                  defd„Zde
j4                  defd„Zde
j8                  defd„Zde
j<                  defd„Zde
j@                  defd„Z!de
jD                  defd„Z#de
jH                  defd„Z%de
jL                  defd„Z'de
jP                  defd„Z)de
jT                  defd„Z+i dd“dd “d!d"“d#d$“d%d&“d'd(“d)d(“d*d+“d,d+“d-d+“d.d+“d/d0“d1d0“d2d3“d4d3“d5d6“d7d6“d8d6i¥Z,e-e.eef      ed9<   de
j^                  defd:„Z0de
jb                  defd;„Z2de
jf                  defd<„Z4de
jj                  defd=„Z6de
jn                  defd>„Z8de
jr                  defd?„Z:dd@œde
j                  dAedefdB„Z;dƒde
jx                  dCedefdD„Z=de
j|                  defdE„Z?de
j                  de
j€                  e
j‚                  z  e
j„                  z  dz  fdF„ZCdGe
j                  dHe
j                  defdI„ZDdJee
j                     dee
j                  ee
j                     z     fdK„ZEdJee
j                     defdL„ZFde
jŽ                  defdM„ZHde
j’                  defdN„ZJde
j–                  defdO„ZLde
jš                  defdP„ZNde
j„                  defdQ„ZOde
j                   defdR„ZQde
j¤                  defdS„ZSde
j¨                  defdT„ZUde
j¬                  defdU„ZWde
j°                  defdV„ZYde
j´                  defdW„Z[de
j¸                  defdX„Z]de
j¼                  defdY„Z_de
jÀ                  defdZ„Zade
jÄ                  defd[„Zcde
jÈ                  defd\„Zede
jÌ                  defd]„Zgde
jÐ                  defd^„Zide
jÔ                  defd_„Zkde
jØ                  defd`„Zmde
jÜ                  defda„Zode
jà                  defdb„Zqde
jä                  defdc„Zsde
jè                  defdd„Zude
jì                  defde„Zwde
jð                  defdf„Zyde
jô                  defdg„Z{de
jø                  defdh„Z}de
j€                  defdi„Z~de
jþ                  defdj„Z€de
j‚                  defdk„Z�de
�j                  defdl„Zƒde
�j                  defdm„Z…de
�j                  defdn„Z‡de
�j                  defdo„Z‰de
�j                  defdp„Z‹de
�j                  defdq„Z�de
j€                  e
j‚                  z  e
j„                  z  dredefds„ZŽdƒdJee
j                     dtedefdu„Z�dvee
j¤                  e
j<                  z     defdw„Z�dƒde
j                  dtedefdx„Z‘de
jx                  defdy„Z’de
j                  defdz„Z“	 	 	 d„de
j                  d{ee
j                     dz  d|ed}edef
d~„Z”de
j                  de•e
j                  gef   defd€„Z–de
j                  defd�„Z—de
j                  defd‚„Z˜y)…Ú
CGeneratorz£Uses the same visitor pattern as c_ast.NodeVisitor, but modified to
    return a value from each visit method, using string accumulation in
    generic_visit.
    Úindent_levelÚreduce_parenthesesFÚreturnNc                 ó    — d| _         || _        y)zŠConstructs C-code generator

        reduce_parentheses:
            if True, eliminates needless parentheses on binary operators
        r   N)r	   r
   )Úselfr
   s     úb/home/oem/CyberBrain26-unified/dev-env/.venv/lib/python3.12/site-packages/pycparser/c_generator.pyÚ__init__zCGenerator.__init__   s   € ð ˆÔØ"4ˆÕó    c                 ó    — d| j                   z  S ©Nú )r	   )r   s    r   Ú_make_indentzCGenerator._make_indent#   s   € Ø�T×&Ñ&Ñ&Ð&r   Únodec                 ón   — d|j                   j                  z   } t        | || j                  «      |«      S )NÚvisit_)Ú	__class__Ú__name__ÚgetattrÚgeneric_visit)r   r   Úmethods      r   ÚvisitzCGenerator.visit&   s2   € Ø˜DŸN™N×3Ñ3Ñ3ˆØ8Œw�t˜V T×%7Ñ%7Ó8¸Ó>Ð>r   c                 óZ   ‡ — |€ydj                  ˆ fd„|j                  «       D «       «      S )NÚ c              3   óF   •K  — | ]  \  }}‰j                  |«      –— Œ y ­w©N©r   )Ú.0Úc_nameÚcr   s      €r   ú	<genexpr>z+CGenerator.generic_visit.<locals>.<genexpr>.   s   øè ø€ ÒJ©Y¨V°Q˜4Ÿ:™: aŸ=ÑJùs   ƒ!)ÚjoinÚchildren)r   r   s   ` r   r   zCGenerator.generic_visit*   s&   ø€ Øˆ<Øà—7‘7ÓJ¸$¿-¹-»/ÔJÓJÐJr   Únc                 ó   — |j                   S r!   )Úvalue©r   r)   s     r   Úvisit_ConstantzCGenerator.visit_Constant0   s   € Ø�w‰wˆr   c                 ó   — |j                   S r!   ©Únamer,   s     r   Úvisit_IDzCGenerator.visit_ID3   s   € Ø�v‰vˆr   Ú
attributesc                 ó8   ‡ — dj                  ˆ fd„|D «       «      S )Nr   c              3   ó@   •K  — | ]  }‰j                  |«      –— Œ y ­wr!   r"   )r#   Ú	attributer   s     €r   r&   z2CGenerator._generate_attributes.<locals>.<genexpr>7   s   øè ø€ ÒJ°)˜Ÿ
™
 9×-ÑJùó   ƒ)r'   )r   r2   s   ` r   Ú_generate_attributeszCGenerator._generate_attributes6   s   ø€ Ø�x‰xÓJ¸zÔJÓJÐJr   c                 óœ   — |j                   �|j                   dz   nd|j                  z   }|j                  �|d|j                  z   dz   z  }|S )Nz::r   ú(ú))Ú	namespacer0   Ú	arguments©r   r)   Úss      r   Úvisit_AttributezCGenerator.visit_Attribute9   sK   € Ø#$§;¡;Ð#:ˆQ�[‰[˜4ÒÀÀaÇfÁfÑLˆØ�;‰;Ð"Ø��q—{‘{Ñ" SÑ(Ñ(ˆAØˆr   c                 óX   ‡ — ddj                  ˆ fd„|j                  D «       «      z   dz   S )Nz[[ú, c              3   ó@   •K  — | ]  }‰j                  |«      –— Œ y ­wr!   r"   ©r#   Úar   s     €r   r&   z6CGenerator.visit_AttributeSpecifier.<locals>.<genexpr>@   s   øè ø€ ÒD°! §
¡
¨1§ÑDùr6   z]])r'   r2   r,   s   ` r   Úvisit_AttributeSpecifierz#CGenerator.visit_AttributeSpecifier?   s&   ø€ Ø�d—i‘iÓD°q·|±|ÔDÓDÑDÀtÑKÐKr   c                 ó8   — | j                  |j                  «      S r!   )r7   r2   r,   s     r   Úvisit_AttributeDeclarationz%CGenerator.visit_AttributeDeclarationB   s   € Ø×(Ñ(¨¯©Ó6Ð6r   c                 óv   — | j                  |j                  «      dz   | j                  |j                  «      z   S r   )r   Útyper7   r2   r,   s     r   Úvisit_AttributedTypezCGenerator.visit_AttributedTypeE   s.   € Ø�z‰z˜!Ÿ&™&Ó! CÑ'¨$×*CÑ*CÀAÇLÁLÓ*QÑQÐQr   c                 ó’   — | j                  |j                  «      dz   | j                  |j                  «      j	                  «       z   S r   )r7   r2   Ú_generate_stmtÚstmtÚlstripr,   s     r   Úvisit_AttributedStatementz$CGenerator.visit_AttributedStatementH   sA   € à×%Ñ% a§l¡lÓ3Øñà×!Ñ! !§&¡&Ó)×0Ñ0Ó2ñ3ð	
r   c                 óÐ   — t        |j                  t        j                  «      r!d| j	                  |j                  «      z   dz   S d}|j                  r|d|j                  z   z  }|S )Nz_Pragma(r:   z#pragmar   )Ú
isinstanceÚstringr   ÚConstantr   )r   r)   Úrets      r   Úvisit_PragmazCGenerator.visit_PragmaO   sT   € Ü�a—h‘h¤§¡Ô/Ø §
¡
¨1¯8©8Ó 4Ñ4°sÑ:Ð:ØˆØ�8Š8Ø�3˜Ÿ™‘>Ñ!ˆCØˆ
r   c                 ó„   — | j                  |j                  «      }|dz   | j                  |j                  d¬«      z   dz   S )Nú[T©Úallow_commaú])Ú_parenthesize_unless_simpler0   Ú_visit_exprÚ	subscript)r   r)   Úarrrefs      r   Úvisit_ArrayRefzCGenerator.visit_ArrayRefW   s?   € Ø×1Ñ1°!·&±&Ó9ˆØ˜‰|˜d×.Ñ.¨q¯{©{ÈÐ.ÓMÑMÐPSÑSÐSr   c                 óŽ   — | j                  |j                  «      }||j                  z   | j                  |j                  «      z   S r!   )r[   r0   rI   r   Úfield)r   r)   Úsrefs      r   Úvisit_StructRefzCGenerator.visit_StructRef[   s6   € Ø×/Ñ/°·±Ó7ˆØ�a—f‘f‰}˜tŸz™z¨!¯'©'Ó2Ñ2Ð2r   c                 ó    — | j                  |j                  «      }|j                  �| j                  |j                  «      nd}|dz   |z   dz   S )Nr   r9   r:   )r[   r0   Úargsr   )r   r)   Úfrefre   s       r   Úvisit_FuncCallzCGenerator.visit_FuncCall_   sG   € Ø×/Ñ/°·±Ó7ˆà%&§V¡VÐ%7ˆt�z‰z˜!Ÿ&™&Ô!¸RˆØ�c‰z˜DÑ  3Ñ&Ð&r   c                 ó”   ‡ — ‰ j                  |j                  «      }dj                  ˆ fd„|j                  D «       «      }d|› d|› d�S )NrA   c              3   ó@   •K  — | ]  }‰j                  |«      –— Œ y ­wr!   r"   rC   s     €r   r&   z4CGenerator.visit_GenericSelection.<locals>.<genexpr>i   s   øè ø€ Ò G°1 §¡¨A§Ñ Gùr6   z	_Generic(r:   )r\   Úexprr'   Úassociations)r   r)   rj   rk   s   `   r   Úvisit_GenericSelectionz!CGenerator.visit_GenericSelectione   sF   ø€ ð ×Ñ §¡Ó'ˆØ—y‘yÓ G¸¿¹Ô GÓGˆØ˜4˜&  < .°Ð2Ð2r   c                 ó”   — |j                   �| j                  |j                   «      nd}|› d| j                  |j                  «      › �S )NÚdefaultz: )rI   r   r\   rj   ©r   r)   Útyps      r   Úvisit_GenericAssociationz#CGenerator.visit_GenericAssociationl   s@   € Ø$%§F¡FÐ$6ˆd�j‰j˜Ÿ™Ô ¸IˆØ��b˜×)Ñ)¨!¯&©&Ó1Ð2Ð3Ð3r   c                 óR  — |j                   xdk(  r" d| j                  |j                  d¬«      › d�S xdk(  r! | j                  |j                  «      }|› d�S dk(  r | j                  |j                  «      }|› d	�S 	 | j                  |j                  «      }|j                   › |› �S )
NÚsizeofzsizeof(TrX   r:   zp++z++zp--z--)Úopr\   rj   r[   )r   r)   Úoperands      r   Úvisit_UnaryOpzCGenerator.visit_UnaryOpp   s¢   € Ø�d‰dÝð ! ×!1Ñ!1°!·&±&ÀdÐ!1Ó!KÐ LÈAÐNÐNÝØ×:Ñ:¸1¿6¹6ÓB�Ø!˜ "�~Ð%ÛØ×:Ñ:¸1¿6¹6ÓB�Ø!˜ "�~Ð%ØØ×:Ñ:¸1¿6¹6ÓB�ØŸ$™$˜ ˜yÐ)Ð)r   z||r   z&&r   ú|é   ú^é   ú&é   z==é   z!=ú>é   z>=ú<z<=z>>é   z<<ú+é   ú-Ú*é	   ú/ú%Úprecedence_mapc                 ó®   ‡ ‡— ‰ j                  ‰j                  ˆˆ fd„«      }‰ j                  ‰j                  ˆˆ fd„«      }|› d‰j                  › d|› �S )Nc                 ó  •— ‰j                  | «      xsy ‰j                  xrk t        | t        j                  «      xsO t        | t        j
                  «      xr3 ‰j                  | j                     ‰j                  ‰j                     k\   S r!   ©Ú_is_simple_noder
   rQ   r   ÚUnaryOpÚBinaryOpr‰   rt   ©Údr)   r   s    €€r   ú<lambda>z+CGenerator.visit_BinaryOp.<locals>.<lambda>¥   s|   ø€ à×(Ñ(¨Ó+ò Ø×.Ñ.ò ä" 1¤e§m¡mÓ4ò SÜ% a¬¯©Ó8ò SØ ×/Ñ/°·±Ñ5¸×9LÑ9LÈQÏTÉTÑ9RÑRðð r   c                 ó  •— ‰j                  | «      xsy ‰j                  xrk t        | t        j                  «      xsO t        | t        j
                  «      xr3 ‰j                  | j                     ‰j                  ‰j                     kD   S r!   rŒ   r�   s    €€r   r’   z+CGenerator.visit_BinaryOp.<locals>.<lambda>º   s|   ø€ à×(Ñ(¨Ó+ò Ø×.Ñ.ò ä" 1¤e§m¡mÓ4ò RÜ% a¬¯©Ó8ò RØ ×/Ñ/°·±Ñ5¸×8KÑ8KÈAÏDÉDÑ8QÑQðð r   r   )Ú_parenthesize_ifÚleftÚrightrt   )r   r)   Úlval_strÚrval_strs   ``  r   Úvisit_BinaryOpzCGenerator.visit_BinaryOp˜   s\   ù€ ð ×(Ñ(Ø�F‰Fô
ó
ˆð* ×(Ñ(Ø�G‰Gô
ó
ˆð �˜1˜QŸT™T˜F ! H :Ð.Ð.r   c                 ó–   — | j                  |j                  d„ «      }| j                  |j                  «      › d|j                  › d|› �S )Nc                 ó6   — t        | t        j                  «      S r!   )rQ   r   Ú
Assignment)r)   s    r   r’   z-CGenerator.visit_Assignment.<locals>.<lambda>Ê   s   € ¤
¨1¬e×.>Ñ.>Ó ?€ r   r   )r”   Úrvaluer\   Úlvaluert   )r   r)   r˜   s      r   Úvisit_AssignmentzCGenerator.visit_AssignmentÈ   sI   € Ø×(Ñ(Ø�H‰HÑ?ó
ˆð ×"Ñ" 1§8¡8Ó,Ð-¨Q¨q¯t©t¨f°A°h°ZÐ@Ð@r   c                 ó8   — dj                  |j                  «      S r   )r'   Únamesr,   s     r   Úvisit_IdentifierTypezCGenerator.visit_IdentifierTypeÎ   s   € Ø�x‰x˜Ÿ™Ó Ð r   c                  ó   — y)Nr   © r,   s     r   Úvisit_InferredTypezCGenerator.visit_InferredTypeÑ   s   € àr   c                 óX   — |j                   › d| j                  |j                  «      › d�S )Nr9   r:   )rt   r\   rj   r,   s     r   Úvisit_TypeOfzCGenerator.visit_TypeOfÕ   s)   € Ø—$‘$��q˜×)Ñ)¨!¯&©&Ó1Ð2°!Ð4Ð4r   c                 ó~   — |j                   r|j                   dz   nd}|› d| j                  |j                  «      › d�S )Nr   r   z_BitInt(r:   )Ú
signednessr\   Úwidth)r   r)   Úsigns      r   Úvisit_BitIntTypezCGenerator.visit_BitIntTypeØ   s;   € Ø%&§\¢\ˆq�|‰|˜cÒ!°rˆØ��x × 0Ñ 0°·±Ó 9Ð:¸!Ð<Ð<r   rX   rY   c                óp  — |xt         j                  d˜ x�\    d| j                  |«      z   dz   S  xt         j                  d˜ x�\   |r | j                  |«      S  xt         j                  d˜ x�\   n xt         j                  d˜ x�\   n  n d| j                  |«      z   dz   S 	 | j                  |«      S )a+  Render an expression or initializer with its required delimiters.

        Full expression contexts (returns, conditions, subscripts, etc.) allow
        bare commas. Individual arguments and initializers need comma grouping.
        Statement expressions always need their own parentheses.
        r¤   ú{ú}r9   r:   )r   ÚInitListr   ÚExprListÚCompound)r   r)   rY   s      r   r\   zCGenerator._visit_exprÜ   s˜   € ð Ø!”—‘Ö!Ø˜TŸZ™Z¨›]Ñ*¨SÑ0Ð0ð "à!”—‘Õ!¡[Ð!Ø—z‘z !“}Ð$ð "à!”—‘×!Ð$4¤E§N¡N×$4Ò4Ø˜TŸZ™Z¨›]Ñ*¨SÑ0Ð0ØØ—z‘z !“}Ð$r   Úno_typec                 ó  — |r| j                  |j                  d¬«      n| j                  |«      }|j                  r!|d| j	                  |j                  «      z   z  }|j
                  r!|d| j	                  |j
                  «      z   z  }|S )NF©Úemit_base_typeú : ú = )Ú_generate_typerI   Ú_generate_declÚbitsizer\   Úinit)r   r)   r³   r>   s       r   Ú
visit_DeclzCGenerator.visit_Declí   s„   € ñ
 ð ×Ñ §¡°uÐÔ=à×$Ñ$ QÓ'ð 	
ð
 �9Š9Ø�˜×)Ñ)¨!¯)©)Ó4Ñ4Ñ4ˆAØ�6Š6Ø�˜×)Ñ)¨!¯&©&Ó1Ñ1Ñ1ˆAØˆr   c                 óœ  — | j                  |j                  d   «      }|j                  dd  D ]^  }t        |t        j                  «      r)|d| j                  «       z   | j                  |«      z   z  }ŒF|d| j                  |d¬«      z   z  }Œ` t        |j                  d   t        j                  «      r|d| j                  «       z   z  }|S )Nr   r   ú
rA   T)r³   éÿÿÿÿ)r   ÚdeclsrQ   r   ÚPragmar   r½   )r   r)   r>   Údecls       r   Úvisit_DeclListzCGenerator.visit_DeclListû   sº   € Ø�J‰J�q—w‘w˜q‘zÓ"ˆØ—G‘G˜A˜B�Kò 	@ˆDÜ˜$¤§¡Ô-ð �T˜D×-Ñ-Ó/Ñ/°$·*±*¸TÓ2BÑBÑB‘à�T˜DŸO™O¨D¸$˜OÓ?Ñ?Ñ?‘ð	@ô �a—g‘g˜b‘k¤5§<¡<Ô0Ø�˜×)Ñ)Ó+Ñ+Ñ+ˆAØˆr   c                 ó¨  — t        |t        j                  t        j                  f«      sy|j                  }t        |t        j
                  t        j                  t        j                  t        j                  t        j                  f«      rd|j                  }t        |t        j
                  t        j                  t        j                  t        j                  t        j                  f«      rŒdt        |t        j                  t        j                  f«      r|j                  �|S t        |t        j                  «      r|j                  �|S y)a¹  Return the struct, union, or enum body this declarator defines.

        ``union { struct a b; } u, *uu`` both return that same union node.
        ``struct Foo x`` has no body, so it returns None. Callers compare
        the result with ``is``: two anonymous structs that only look alike
        are different nodes. Attribute wrappers are skipped too, since
        each declarator can have its own wrapper around the shared body.
        N)rQ   r   ÚDeclÚTypedefrI   ÚPtrDeclÚ	ArrayDeclÚFuncDeclÚTypeDeclÚAttributedTypeÚStructÚUnionrÁ   ÚEnumÚvaluesro   s      r   Ú_defined_typezCGenerator._defined_type  sä   € ô ˜!œeŸj™j¬%¯-©-Ð8Ô9ØØ�f‰fˆÜØä—‘Ü—‘Ü—‘Ü—‘Ü×$Ñ$ðô	
ð —(‘(ˆCô Øä—‘Ü—‘Ü—‘Ü—‘Ü×$Ñ$ðõ	
ô �cœEŸL™L¬%¯+©+Ð6Ô7¸C¿I¹IÐ<QØˆJÜ�cœ5Ÿ:™:Ô&¨3¯:©:Ð+AØˆJØr   r•   r–   c                 ó>  — t        |«      t        |«      uryt        |t        j                  «      r„t        |t        j                  «      rj|j                  |j                  k(  xrO |j
                  |j
                  k(  xr4 |j                  |j                  k(  xr |j                  |j                  k(  S t        |t        j                  «      rNt        |t        j                  «      r4|j                  |j                  k(  xr |j                  |j                  k(  S y)aX  Return whether two declarators have the same specifiers.

        ``static struct { int a; } x, y`` matches: both names are
        ``static``. ``static struct { int a; } x`` followed by
        ``struct { int a; } y`` does not, because only ``x`` is ``static``.
        Qualifiers, alignment, and function specifiers are compared too.
        F)	rI   rQ   r   rÆ   ÚqualsÚalignÚstorageÚfuncspecrÇ   )r   r•   r–   s      r   Ú_same_decl_specszCGenerator._same_decl_specs'  sÍ   € ô �‹:œT %›[Ñ(ØÜ�dœEŸJ™JÔ'¬J°u¼e¿j¹jÔ,Ià—
‘
˜eŸk™kÑ)ò 4Ø—J‘J %§+¡+Ñ-ò4à—L‘L E§M¡MÑ1ò4ð —M‘M U§^¡^Ñ3ð	ô �dœEŸM™MÔ*¬z¸%ÄÇÁÔ/OØ—:‘: §¡Ñ,ÒN°·±ÀÇÁÑ1NÐNØr   Únodesc                 óè  — g }d}|t        |«      k  rß||   }| j                  |«      }|€|j                  |«       |dz  }Œ=|dz   }|t        |«      k  rU| j                  |||   «      r@| j                  ||   «      |urn)|dz  }|t        |«      k  r| j                  |||   «      rŒ@||dz   k(  r|j                  |«       n|j                  t	        ||| «      «       |}|t        |«      k  rŒß|S )a¨  Group consecutive declarators that share one type definition.

        ``union { struct a b; } u, *uu = &u`` is one group: both names
        point at that union and their specifiers match.
        ``struct { int a; } x; struct { int a; } y;`` stays two items,
        because those are different definition nodes. One name on its
        own, or a name whose specifiers differ from the next, is left
        alone.
        r   r   )ÚlenrÑ   Úappendr×   Úlist)r   rØ   ÚgroupedÚindexr   ÚdefinedÚends          r   Ú_coalesce_defined_typesz"CGenerator._coalesce_defined_types<  s  € ð 8:ˆØˆØ”c˜%“jÒ Ø˜‘<ˆDØ×(Ñ(¨Ó.ˆGØˆØ—‘˜tÔ$Ø˜‘
�ØØ˜!‘)ˆCØœ˜E›
Ò" t×'<Ñ'<¸TÀ5ÈÁ:Ô'NØ×%Ñ% e¨C¡jÓ1¸Ñ@ØØ�q‘�ð œ˜E›
Ò" t×'<Ñ'<¸TÀ5ÈÁ:Õ'Nð �e˜a‘iÒØ—‘˜tÕ$à—‘œt E¨%°Ð$4Ó5Ô6ØˆEð! ”c˜%“jÓ ð" ˆr   c                 ó  — |d   }t        |t        j                  «      rƒg }|dd D ]S  }t        |t        j                  «      st        d«      ‚|j	                  | j                  |j                  d¬«      «       ŒU | j                  |«      dz   dj                  |«      z   S g }|D ]8  }t        |t        j                  «      st        d«      ‚|j	                  |«       Œ: | j                  t        j                  |«      «      S )	a  Emit a group as one declaration, with the body on the first name.

        ``typedef struct { int a; } B, C`` keeps a single ``typedef`` and
        one body. ``struct { int a; } x, *y`` keeps ``*y`` on that same
        declaration instead of repeating the struct.
        r   r   Nz$typedef group contains a non-typedefFrµ   rA   z,declaration group contains a non-declaration)rQ   r   rÇ   Ú	TypeErrorrÛ   r¹   rI   r   r'   rÆ   ÚDeclList)r   rØ   ÚfirstÚextrasrÃ   rÁ   s         r   Ú_visit_decl_groupzCGenerator._visit_decl_group]  sé   € ð �a‘ˆÜ�eœUŸ]™]Ô+Ø "ˆFØ˜a˜b˜	ò T�Ü! $¬¯©Ô6Ü#Ð$JÓKÐKØ—‘˜d×1Ñ1°$·)±)ÈEÐ1ÓRÕSðTð —:‘:˜eÓ$ tÑ+¨d¯i©i¸Ó.?Ñ?Ð?Ø"$ˆØò 	ˆDÜ˜d¤E§J¡JÔ/ÜÐ NÓOÐOØ�L‰L˜Õð	ð �z‰zœ%Ÿ.™.¨Ó/Ó0Ð0r   c                 óô   — |j                   r| j                  |j                   «      dz   nd}|j                  r!|dj                  |j                  «      dz   z  }|| j	                  |j
                  «      z  }|S ©Nr   r   )r2   r7   rÕ   r'   r¹   rI   r=   s      r   Úvisit_TypedefzCGenerator.visit_Typedefs  sd   € Ø=>¿\º\ˆD×%Ñ% a§l¡lÓ3°cÒ9ÈrˆØ�9Š9Ø�—‘˜!Ÿ)™)Ó$ sÑ*Ñ*ˆAØ	ˆT× Ñ  §¡Ó(Ñ(ˆØˆr   c                 óŠ   — d| j                  |j                  d¬«      z   dz   }|dz   | j                  |j                  «      z   S )Nr9   F©Úemit_declnamer:   r   )r¹   Úto_typer[   rj   r=   s      r   Ú
visit_CastzCGenerator.visit_Castz  sC   € Ø�$×%Ñ% a§i¡i¸uÐ%ÓEÑEÈÑKˆØ�3‰w˜×9Ñ9¸!¿&¹&ÓAÑAÐAr   c                 óŠ   — g }|j                   D ]"  }|j                  | j                  |«      «       Œ$ dj                  |«      S ©NrA   ©ÚexprsrÛ   r\   r'   ©r   r)   Úvisited_subexprsrj   s       r   Úvisit_ExprListzCGenerator.visit_ExprList~  óD   € ØÐØ—G‘Gò 	<ˆDØ×#Ñ# D×$4Ñ$4°TÓ$:Õ;ð	<à�y‰yÐ)Ó*Ð*r   c                 óŠ   — g }|j                   D ]"  }|j                  | j                  |«      «       Œ$ dj                  |«      S rñ   rò   rô   s       r   Úvisit_InitListzCGenerator.visit_InitList„  r÷   r   c                 ó(   — | j                  |d¬«      S )NÚenumr/   ©Ú_generate_struct_union_enumr,   s     r   Ú
visit_EnumzCGenerator.visit_EnumŠ  s   € Ø×/Ñ/°¸Ð/Ó?Ð?r   c                 ó@   — d| j                  |j                  «      › d�S )Nz	_Alignas(r:   )r\   Ú	alignmentr,   s     r   Úvisit_AlignaszCGenerator.visit_Alignas�  s!   € Ø˜4×+Ñ+¨A¯K©KÓ8Ð9¸Ð;Ð;r   c                 ó  — |j                   }|j                  r!|d| j                  |j                  «      z   z  }|j                  s| j	                  «       › |› d�S | j	                  «       › |› d| j                  |j                  «      › d�S )Nr   z,
r¸   )r0   r2   r7   r+   r   r\   )r   r)   r0   s      r   Úvisit_EnumeratorzCGenerator.visit_Enumerator�  sƒ   € Ø�v‰vˆØ�<Š<Ø�C˜$×3Ñ3°A·L±LÓAÑAÑAˆDØ�wŠwØ×'Ñ'Ó)Ð*¨4¨&°Ð4Ð4à×'Ñ'Ó)Ð*¨4¨&°°D×4DÑ4DÀQÇWÁWÓ4MÐ3NÈcÐRÐRr   c                 ó  ‡ — ‰ j                  |j                  «      }d‰ _        ‰ j                  |j                  «      }|j                  r2dj                  ˆ fd„|j                  D «       «      }|dz   |z   |z   dz   S |dz   |z   dz   S )Nr   r   c              3   ó@   •K  — | ]  }‰j                  |«      –— Œ y ­wr!   )rL   )r#   Úpr   s     €r   r&   z+CGenerator.visit_FuncDef.<locals>.<genexpr>ž  s   øè ø€ ÒM¸!˜t×2Ñ2°1×5ÑMùr6   r¿   )r   rÃ   r	   ÚbodyÚparam_declsr'   )r   r)   rÃ   r  Úknrdeclss   `    r   Úvisit_FuncDefzCGenerator.visit_FuncDef™  s{   ø€ Ø�z‰z˜!Ÿ&™&Ó!ˆØˆÔØ�z‰z˜!Ÿ&™&Ó!ˆØ�=Š=Ø—w‘wÓM¸q¿}¹}ÔMÓMˆHØ˜$‘; Ñ)¨DÑ0°4Ñ7Ð7à˜$‘; Ñ%¨Ñ,Ð,r   c                 ó‚  — d}| j                  |j                  «      D ]ž  }t        |t        «      r|| j	                  |«      dz   z  }Œ+|xt
        j                  d˜ x�\    || j                  |«      z  }ŒX t
        j                  d˜ x�\   || j                  |«      dz   z  }Œ† 	 || j                  |«      dz   z  }Œ  |S )Nr   ú;
r¤   r¿   )	rá   ÚextrQ   rÜ   rç   r   ÚFuncDefr   rÂ   )r   r)   r>   r  s       r   Úvisit_FileASTzCGenerator.visit_FileAST£  s·   € ØˆØ×/Ñ/°·±Ó6ò 
	1ˆCÜ˜#œtÔ$Ø�T×+Ñ+¨CÓ0°5Ñ8Ñ8�ØØØ$”U—]‘]–_Ø˜Ÿ™ C›Ñ(‘Að %ä—\‘\•^Ø˜Ÿ™ C›¨4Ñ/Ñ/‘Að $àØ˜Ÿ™ C›¨5Ñ0Ñ0‘Að
	1ð ˆr   c                 ó   — | j                  «       dz   }| xj                  dz  c_        |j                  r|| j                  |j                  «      z  }| xj                  dz  c_        || j                  «       dz   z  }|S )Nú{
rx   z}
)r   r	   Úblock_itemsÚ_generate_bodyr=   s      r   Úvisit_CompoundzCGenerator.visit_Compound²  st   € Ø×ÑÓ %Ñ'ˆØ×Ò˜QÑÕØ�=Š=Ø�×$Ñ$ Q§]¡]Ó3Ñ3ˆAØ×Ò˜QÑÕØ	ˆT×ÑÓ  5Ñ(Ñ(ˆØˆr   c                 óà   — |j                   rdj                  |j                   «      dz   nd}d|z   | j                  |j                  «      z   dz   | j                  |j                  «      z   dz   S )Nr   r   r9   z){r¯   )rÕ   r'   r   rI   r¼   )r   r)   rÕ   s      r   Úvisit_CompoundLiteralz CGenerator.visit_CompoundLiteral»  sZ   € Ø/0¯yªy�#—(‘(˜1Ÿ9™9Ó%¨Ò+¸bˆØ�W‰}˜tŸz™z¨!¯&©&Ó1Ñ1°DÑ8¸4¿:¹:ÀaÇfÁfÓ;MÑMÐPSÑSÐSr   c                  ó   — y)Nú;r¤   r,   s     r   Úvisit_EmptyStatementzCGenerator.visit_EmptyStatement¿  s   € Ør   c                 óL   ‡ — dj                  ˆ fd„|j                  D «       «      S )NrA   c              3   ó@   •K  — | ]  }‰j                  |«      –— Œ y ­wr!   r"   )r#   Úparamr   s     €r   r&   z-CGenerator.visit_ParamList.<locals>.<genexpr>Ã  s   øè ø€ ÒA¨u˜Ÿ™ E×*ÑAùr6   )r'   Úparamsr,   s   ` r   Úvisit_ParamListzCGenerator.visit_ParamListÂ  s   ø€ Ø�y‰yÓA¸¿¹ÔAÓAÐAr   c                 ón   — d}|j                   r#|d| j                  |j                   d¬«      z   z  }|dz   S )Nr   r   TrX   r  )rj   r\   r=   s      r   Úvisit_ReturnzCGenerator.visit_ReturnÅ  s:   € ØˆØ�6Š6Ø��t×'Ñ'¨¯©¸DÐ'ÓAÑAÑAˆAØ�3‰wˆr   c                  ó   — y)Nzbreak;r¤   r,   s     r   Úvisit_BreakzCGenerator.visit_BreakË  s   € Ør   c                  ó   — y)Nz	continue;r¤   r,   s     r   Úvisit_ContinuezCGenerator.visit_ContinueÎ  s   € Ør   c                 óØ   — d| j                  |j                  «      z   dz   }|d| j                  |j                  «      z   dz   z  }|d| j                  |j                  «      z   dz   z  }|S )Nr9   z) ? z) : r:   )r\   ÚcondÚiftrueÚiffalser=   s      r   Úvisit_TernaryOpzCGenerator.visit_TernaryOpÑ  sk   € Ø�$×"Ñ" 1§6¡6Ó*Ñ*¨VÑ3ˆØ	ˆS�4×#Ñ# A§H¡HÓ-Ñ-°Ñ6Ñ6ˆØ	ˆS�4×#Ñ# A§I¡IÓ.Ñ.°Ñ4Ñ4ˆØˆr   c                 ó0  — d}|j                   r || j                  |j                   d¬«      z  }|dz  }|| j                  |j                  d¬«      z  }|j                  r6|| j                  «       dz   z  }|| j                  |j                  d¬«      z  }|S )Nzif (TrX   ú)
©Ú
add_indentzelse
)r&  r\   rL   r'  r(  r   r=   s      r   Úvisit_IfzCGenerator.visit_If×  s•   € ØˆØ�6Š6Ø�×!Ñ! !§&¡&°dÐ!Ó;Ñ;ˆAØ	ˆU‰
ˆØ	ˆT× Ñ  §¡°dÐ Ó;Ñ;ˆØ�9Š9Ø�×"Ñ"Ó$ xÑ/Ñ/ˆAØ�×$Ñ$ Q§Y¡Y¸4Ð$Ó@Ñ@ˆAØˆr   c                 ó|  — d}|j                   r || j                  |j                   d¬«      z  }|dz  }|j                  r#|d| j                  |j                  d¬«      z   z  }|dz  }|j                  r#|d| j                  |j                  d¬«      z   z  }|dz  }|| j	                  |j
                  d¬«      z  }|S )Nzfor (TrX   r  r   r+  r,  )r¼   r\   r&  ÚnextrL   rM   r=   s      r   Ú	visit_ForzCGenerator.visit_Forâ  s¾   € ØˆØ�6Š6Ø�×!Ñ! !§&¡&°dÐ!Ó;Ñ;ˆAØ	ˆS‰ˆØ�6Š6Ø��t×'Ñ'¨¯©¸DÐ'ÓAÑAÑAˆAØ	ˆS‰ˆØ�6Š6Ø��t×'Ñ'¨¯©¸DÐ'ÓAÑAÑAˆAØ	ˆU‰
ˆØ	ˆT× Ñ  §¡°DÐ Ó9Ñ9ˆØˆr   c                 ó¬   — d}|j                   r || j                  |j                   d¬«      z  }|dz  }|| j                  |j                  d¬«      z  }|S )Núwhile (TrX   r+  r,  )r&  r\   rL   rM   r=   s      r   Úvisit_WhilezCGenerator.visit_Whileð  sX   € ØˆØ�6Š6Ø�×!Ñ! !§&¡&°dÐ!Ó;Ñ;ˆAØ	ˆU‰
ˆØ	ˆT× Ñ  §¡°DÐ Ó9Ñ9ˆØˆr   c                 óØ   — d}|| j                  |j                  d¬«      z  }|| j                  «       dz   z  }|j                  r || j	                  |j                  d¬«      z  }|dz  }|S )Nzdo
Tr,  r3  rX   z);)rL   rM   r   r&  r\   r=   s      r   Úvisit_DoWhilezCGenerator.visit_DoWhileø  sp   € ØˆØ	ˆT× Ñ  §¡°DÐ Ó9Ñ9ˆØ	ˆT×ÑÓ  9Ñ,Ñ,ˆØ�6Š6Ø�×!Ñ! !§&¡&°dÐ!Ó;Ñ;ˆAØ	ˆT‰	ˆØˆr   c                 ó®   — d}|| j                  |j                  «      z  }|j                  r#|dz  }|| j                  |j                  «      z  }|dz  }|S )Nz_Static_assert(rA   r:   )r\   r&  Úmessager   r=   s      r   Úvisit_StaticAssertzCGenerator.visit_StaticAssert  sU   € ØˆØ	ˆT×Ñ˜aŸf™fÓ%Ñ%ˆØ�9Š9Ø�‰IˆAØ�—‘˜AŸI™IÓ&Ñ&ˆAØ	ˆS‰ˆØˆr   c                 óŒ   — d| j                  |j                  d¬«      z   dz   }|| j                  |j                  d¬«      z  }|S )Nzswitch (TrX   r+  r,  )r\   r&  rL   rM   r=   s      r   Úvisit_SwitchzCGenerator.visit_Switch
  sH   € Ø˜×)Ñ)¨!¯&©&¸dÐ)ÓCÑCÀeÑKˆØ	ˆT× Ñ  §¡°DÐ Ó9Ñ9ˆØˆr   c                 óê   — |j                   r| j                  |j                   «      dz   nd}|d| j                  |j                  «      z   dz   z  }|| j	                  |j
                  xs g d¬«      z   S )Nr   r   zcase ú:
Tr,  )r2   r7   r\   rj   r  Ústmtsr=   s      r   Ú
visit_CasezCGenerator.visit_Case  si   € Ø=>¿\º\ˆD×%Ñ% a§l¡lÓ3°cÒ9ÈrˆØ	ˆW�t×'Ñ'¨¯©Ó/Ñ/°%Ñ7Ñ7ˆØ�4×&Ñ& q§w¡w¢}°"ÀÐ&ÓFÑFÐFr   c                 ó¬   — |j                   r| j                  |j                   «      dz   nd}|dz  }|| j                  |j                  xs g d¬«      z   S )Nr   r   z	default:
Tr,  )r2   r7   r  r>  r=   s      r   Úvisit_DefaultzCGenerator.visit_Default  sP   € Ø=>¿\º\ˆD×%Ñ% a§l¡lÓ3°cÒ9ÈrˆØ	ˆ\ÑˆØ�4×&Ñ& q§w¡w¢}°"ÀÐ&ÓFÑFÐFr   c                 ó¶   — |j                   r| j                  |j                   «      dz   nd}||j                  z   dz   | j                  |j                  «      z   S )Nr   r   r=  )r2   r7   r0   rL   rM   r=   s      r   Úvisit_LabelzCGenerator.visit_Label  sJ   € Ø=>¿\º\ˆD×%Ñ% a§l¡lÓ3°cÒ9ÈrˆØ�1—6‘6‰z˜EÑ! D×$7Ñ$7¸¿¹Ó$?Ñ?Ð?r   c                 ó&   — d|j                   z   dz   S )Nzgoto r  r/   r,   s     r   Ú
visit_GotozCGenerator.visit_Goto  s   € Ø˜Ÿ™Ñ #Ñ%Ð%r   c                  ó   — y)Nz...r¤   r,   s     r   Úvisit_EllipsisParamzCGenerator.visit_EllipsisParam   s   € Ør   c                 ó&   — | j                  |d«      S )NÚstructrü   r,   s     r   Úvisit_StructzCGenerator.visit_Struct#  s   € Ø×/Ñ/°°8Ó<Ð<r   c                 ó–   — |j                   r| j                  |j                   «      dz   nd}|| j                  |j                  «      z   S ré   )r2   r7   r¹   rI   r=   s      r   Úvisit_TypenamezCGenerator.visit_Typename&  s=   € Ø=>¿\º\ˆD×%Ñ% a§l¡lÓ3°cÒ9ÈrˆØ�4×&Ñ& q§v¡vÓ.Ñ.Ð.r   c                 ó&   — | j                  |d«      S )NÚunionrü   r,   s     r   Úvisit_UnionzCGenerator.visit_Union*  s   € Ø×/Ñ/°°7Ó;Ð;r   c                 óD   — d| j                  |j                  «      z   dz   S )NrW   rZ   )r\   rj   r,   s     r   Úvisit_ArrayDesignatorz CGenerator.visit_ArrayDesignator-  s!   € Ø�T×%Ñ% a§f¡fÓ-Ñ-°Ñ3Ð3r   c                 óð   — d}|j                   D ]C  }t        |t        j                  «      r|d|j                   z   z  }Œ0|| j	                  |«      z  }ŒE |d| j                  |j                  «      z   z  }|S )Nr   ú.r¸   )r0   rQ   r   ÚIDr   r\   rj   )r   r)   r>   r0   s       r   Úvisit_NamedInitializerz!CGenerator.visit_NamedInitializer0  sr   € ØˆØ—F‘Fò 	&ˆDÜ˜$¤§¡Ô)Ø�S˜4Ÿ9™9‘_Ñ$‘à�T—Z‘Z Ó%Ñ%‘ð		&ð
 	
ˆU�T×%Ñ% a§f¡fÓ-Ñ-Ñ-ˆØˆr   c                 ó$   — | j                  |«      S r!   ©r¹   r,   s     r   Úvisit_FuncDeclzCGenerator.visit_FuncDecl:  s   € Ø×"Ñ" 1Ó%Ð%r   c                 ó(   — | j                  |d¬«      S ©NFrì   rW  r,   s     r   Úvisit_ArrayDeclzCGenerator.visit_ArrayDecl=  ó   € Ø×"Ñ" 1°EÐ"Ó:Ð:r   c                 ó(   — | j                  |d¬«      S rZ  rW  r,   s     r   Úvisit_TypeDeclzCGenerator.visit_TypeDecl@  r\  r   c                 ó(   — | j                  |d¬«      S rZ  rW  r,   s     r   Úvisit_PtrDeclzCGenerator.visit_PtrDeclC  r\  r   r0   c                 óF  — |dv rEt        |t        j                  t        j                  f«      sJ ‚|j                  }| j
                  }nS|dk(  sJ ‚t        |t        j                  «      sJ ‚|j                  €dn|j                  j                  }| j                  }|j                  r| j                  |j                  «      dz   nd}|dz   |z   |j                  xs dz   }t        |t        j                  «      r;|j                  �/|j                  «       dz   | j                  |j                  «      z   }|�h|dz  }|| j!                  «       z  }| xj"                  dz  c_        |d	z  }| ||«      z  }| xj"                  dz  c_        || j!                  «       d
z   z  }|S )zlGenerates code for structs, unions, and enums. name should be
        'struct', 'union', or 'enum'.
        )rI  rN  rû   Nr   r   r·   r¿   rx   r  r¯   )rQ   r   rÍ   rÎ   rÁ   r  rÏ   rÐ   ÚenumeratorsÚ_generate_enum_bodyr2   r7   r0   Úunderlying_typeÚrstripr   r   r	   )r   r)   r0   ÚmembersÚbody_functionr2   r>   s          r   rý   z&CGenerator._generate_struct_union_enumF  s|  € ð Ð&Ñ&Ü˜a¤%§,¡,´·±Ð!<Ô=Ð=Ð=Ø—g‘gˆGØ ×/Ñ/‰Mà˜6’>Ð!�>Ü˜a¤§¡Ô,Ð,Ð,ØŸh™hÐ.‘d°A·H±H×4HÑ4HˆGØ ×4Ñ4ˆMà=>¿\º\ˆD×%Ñ% a§l¡lÓ3°cÒ9Èrð 	ð �3‰J˜Ñ# q§v¡v¢|°Ñ4ˆÜ�aœŸ™Ô$¨×):Ñ):Ð)FØ—‘“
˜UÑ" T§Z¡Z°×0AÑ0AÓ%BÑBˆAØÐð �‰IˆAØ�×"Ñ"Ó$Ñ$ˆAØ×Ò Ñ"ÕØ�‰JˆAØ‘˜wÓ'Ñ'ˆAØ×Ò Ñ"ÕØ�×"Ñ"Ó$ sÑ*Ñ*ˆAØˆr   r-  c                 ó4  — | j                  «       }|r|dz  }g }| j                  |«      D ][  }t        |t        «      r'|j	                  || j                  |«      z   dz   «       Œ:|j	                  | j                  ||¬«      «       Œ] dj                  |«      S )zãEmit statements or members, grouping shared type definitions.

        Callers handle braces and indentation levels; _generate_stmt supplies the
        punctuation for individual statements, declarations, and pragmas.
        z  r  r,  r   )r   rá   rQ   rÜ   rÛ   rç   rL   r'   )r   rØ   r-  ÚindentÚpartsÚitems         r   r  zCGenerator._generate_bodyg  s–   € ð ×"Ñ"Ó$ˆÙØ�d‰NˆFØˆØ×0Ñ0°Ó7ò 	OˆDÜ˜$¤Ô%Ø—‘˜V d×&<Ñ&<¸TÓ&BÑBÀUÑJÕKà—‘˜T×0Ñ0°À*Ð0ÓMÕNð		Oð
 �w‰w�u‹~Ðr   rf  c                 ó&  — g }d }|D ]h  }t        |t        j                  «      r!|j                  | j	                  |«      «       Œ>t        |«      }|j                  | j                  |«      «       Œj |�||   d d dz   ||<   dj                  |«      S )Néþÿÿÿr¿   r   )rQ   r   rÂ   rÛ   rL   rÚ   r   r'   )r   rf  rj  Úlast_enumeratorÚmembers        r   rc  zCGenerator._generate_enum_bodyx  s‘   € ð ˆØˆØò 	1ˆFÜ˜&¤%§,¡,Ô/Ø—‘˜T×0Ñ0°Ó8Õ9ä"% e£*�Ø—‘˜TŸZ™Z¨Ó/Õ0ð	1ð Ð&Ø%*¨?Ñ%;¸C¸RÐ%@À4Ñ%GˆE�/Ñ"Ø�w‰w�u‹~Ðr   c                 ó"  — |r| xj                   dz  c_         | j                  «       }|r| xj                   dz  c_         |xxt        j                  d˜ x�\   �nˆ xt        j                  d˜ x�\   �no xt        j
                  d˜ x�\   �nV xt        j                  d˜ x�\   �n= xt        j                  d˜ x�\   �n$ xt        j                  d˜ x�\   �n xt        j                  d˜ x�\   nó xt        j                  d˜ x�\   nÛ xt        j                  d˜ x�\   nÃ xt        j                  d˜ x�\   n« xt        j                  d˜ x�\   n“ xt        j                  d˜ x�\   n{ xt        j                  d˜ x�\   nc xt        j                   d˜ x�\   nK xt        j"                  d˜ x�\   n3 xt        j$                  d˜ x�\   n xt        j&                  d˜ x�\   n  n  || j)                  |«      z   dz   S xt        j*                  d˜ x�\    | j)                  |«      S  xt        j,                  d˜ x�\    || j)                  |«      z   S  t        j.                  d˜ x�\   || j)                  |«      z   S  	 || j)                  |«      z   dz   S )z»Generation from a statement node. This method exists as a wrapper
        for individual visit_* methods to handle different treatment of
        some statements in this context.
        rx   r¤   r  r¿   )r	   r   r   rÆ   rœ   ÚCastrŽ   r�   Ú	TernaryOpÚFuncCallÚArrayRefÚ	StructRefrS   rT  rÇ   r±   ÚCompoundLiteralÚGenericSelectionÚStaticAssertÚAttributeDeclarationr   r²   ÚAttributedStatementÚIf)r   r)   r-  ri  s       r   rL   zCGenerator._generate_stmt‰  sÅ  € ñ
 Ø×Ò Ñ"ÕØ×"Ñ"Ó$ˆÙØ×Ò Ñ"Õàð/�”—
‘
—�Ø$”%×"Ñ"×$Ð$Ø”%—*‘*—,�,Ø!”%—-‘-—/�/Ø"”%—.‘.×"Ð"Ø#”%—/‘/×#Ð#Ø"”%—.‘.×"Ø"”%—.‘.×"Ø#”%—/‘/×#Ø"”%—.‘.×"Ø”%—(‘(—*Ø!”%—-‘-—/Ø"”%—.‘.×"Ø)”%×'Ñ'×)Ø*”%×(Ñ(×*Ø&”%×$Ñ$×&Ø.”%×,Ñ,×.ó!/ð(  §
¡
¨1£Ñ-°Ñ5Ð5Ø!”—‘Ö!ð
 —z‘z !“}Ð$ð "ð -”×*Ñ*Ö,Ø §
¡
¨1£Ñ-Ð-ð -ä—‘•Ø §
¡
¨1£Ñ-Ð-ð àØ §
¡
¨1£Ñ-°Ñ4Ð4r   c                 óú  ‡ — |j                   r‰ j                  |j                   «      dz   nd}|j                  r!|dj                  |j                  «      dz   z  }|j                  r!|dj                  |j                  «      dz   z  }|j
                  r*|dj                  ˆ fd„|j
                  D «       «      dz   z  }t        |j                  t        j                  t        j                  t        j                  t        j                  f«      r |‰ j                  |j                  «      z  }|S |j                  r!|dj                  |j                  «      dz   z  }|‰ j                  |j                  «      z  }|S )zGeneration from a Decl node.r   r   c              3   ó@   •K  — | ]  }‰j                  |«      –— Œ y ­wr!   r"   )r#   rÔ   r   s     €r   r&   z,CGenerator._generate_decl.<locals>.<genexpr>À  s   øè ø€ ÒA°˜$Ÿ*™* U×+ÑAùr6   )r2   r7   rÖ   r'   rÕ   rÔ   rQ   rI   r   rË   rÈ   rÉ   rÊ   r¹   rÓ   Ú_generate_type_specifierr=   s   `  r   rº   zCGenerator._generate_decl¸  s"  ø€ à=>¿\º\ˆD×%Ñ% a§l¡lÓ3°cÒ9ÈrˆØ�:Š:Ø�—‘˜!Ÿ*™*Ó%¨Ñ+Ñ+ˆAØ�9Š9Ø�—‘˜!Ÿ)™)Ó$ sÑ*Ñ*ˆAØ�7Š7Ø�—‘ÓA¸¿¹ÔAÓAÀCÑGÑGˆAÜØ�F‰F”U—^‘^¤U§]¡]´E·O±OÄUÇ^Á^ÐTô
ð �×$Ñ$ Q§V¡VÓ,Ñ,ˆAð ˆð �wŠwØ�S—X‘X˜aŸg™gÓ&¨Ñ,Ñ,�Ø�×.Ñ.¨q¯v©vÓ6Ñ6ˆAØˆr   c                 óf  — t        |t        j                  «      rH| j                  |j                  «      j                  «       dz   | j                  |j                  «      z   S t        |t        j                  «      r%d|j                  v rd| j                  |«      z   dz   S | j                  |«      S )Nr   Ú_Atomicz_Atomic(r:   )rQ   r   rÌ   r~  rI   re  r7   r2   ÚTypenamerÓ   r   r¹   r,   s     r   r~  z#CGenerator._generate_type_specifierÍ  s—   € Ü�aœ×-Ñ-Ô.à×-Ñ-¨a¯f©fÓ5×<Ñ<Ó>Øñà×+Ñ+¨A¯L©LÓ9ñ:ðô
 �aœŸ™Ô(¨Y¸!¿'¹'Ñ-Að  §
¡
¨1£Ñ-°Ñ3Ð3Ø×"Ñ" 1Ó%Ð%r   Ú	modifiersrí   r¶   c                 ó°  — |€g }|xt         j                  d˜ x��î\    d}|rK|j                  r!|dj                  |j                  «      dz   z  }|| j	                  |j
                  «      z  }|j                  r|r|j                  nd}|j                  r!|d| j                  |j                  «      z   z  }t        |«      D �]   \  }}|xt         j                  d˜ x�À\    |dk7  r(t        ||dz
     t         j                  «      rd|z   dz   }|dz  }|j                  r!|dj                  |j                  «      dz   z  }|j                  �|| j                  |j                  «      z  }|d	z  }|j                  sŒº|d| j                  |j                  «      z   z  }ŒÜ xt         j                   d˜ x�•\    |dk7  r(t        ||dz
     t         j                  «      rd|z   dz   }|j"                  �| j	                  |j"                  «      nd}	|d|	z   dz   z  }|j                  s�Œc|d| j                  |j                  «      z   z  }�Œ† t         j                  d˜ x�†\   d
}
|j                  r!|
d| j                  |j                  «      z   z  }
|j                  r!|
ddj                  |j                  «      z   z  }
|r|j                  s|j                  rdnd}|
|z   |z   }�Œ  �Œ# |s|S |r|j%                  «       }||rdnd|z   z  }|S  xt         j&                  d˜ x�\    | j)                  |j
                  «      S  xt         j*                  d˜ x�P\    |j                  r| j                  |j                  «      dz   nd}
|
| j-                  |j
                  ||¬«      z   S  xt         j.                  d˜ x�!\    dj                  |j0                  «      dz   S  xt         j                  d˜ x�\   n3 xt         j                  d˜ x�\   n xt         j                   d˜ x�\   n  n$ | j-                  |j
                  ||gz   ||¬«      S 	 | j	                  |«      S )a|  Recursive generation from a type node. n is the type node.
        modifiers collects the PtrDecl, ArrayDecl and FuncDecl modifiers
        encountered on the way down to a TypeDecl, to allow proper
        generation from it.
        emit_base_type controls whether the shared type specifier and its
        qualifiers are emitted, independently of the declarator parts.
        r¤   r   r   r   r   r9   r:   rW   rZ   r…   )rí   r¶   )r   rË   rÓ   r'   r   rI   Údeclnamer2   r7   Ú	enumeraterÉ   rQ   rÈ   Ú	dim_qualsÚdimr\   rÊ   re   re  rÆ   rº   r�  r¹   ÚIdentifierTyper¡   )r   r)   r‚  rí   r¶   r>   ÚnstrÚiÚmodifierre   ÚprefixÚ	separators               r   r¹   zCGenerator._generate_typeÚ  s  € ð ÐØˆIð Ø!”—‘×!Ø�Ù!Ø—w’wØ˜SŸX™X a§g¡gÓ.°Ñ4Ñ4˜Ø˜Ÿ™ A§F¡FÓ+Ñ+�Aà%&§Z¢Z±M�q—z’zÀr�Ø—<’<Ø˜C $×";Ñ";¸A¿L¹LÓ"IÑIÑI�Dô
 $-¨YÓ#7ó )=‘K�A�xØ"Ø.œUŸ_™_Ö.Ø  Ašv¬*°Y¸qÀ1¹uÑ5EÄuÇ}Á}Ô*UØ'*¨T¡z°CÑ'7 Ø  C™K˜DØ'×1Ò1Ø $¨¯©°×1CÑ1CÓ(DÀsÑ(JÑ J Ø'Ÿ|™|Ð7Ø $¨×(8Ñ(8¸¿¹Ó(FÑ F Ø  C™K˜DØ'×2Ó2Ø $¨¨d×.GÑ.GØ$,×$7Ñ$7ó/"ñ )"ñ !"¡ð /ð .œUŸ^™^Ö-Ø  Ašv¬*°Y¸qÀ1¹uÑ5EÄuÇ}Á}Ô*UØ'*¨T¡z°CÑ'7 ð $,§=¡=Ð#<ð !%§
¡
¨8¯=©=Ô 9à%'ð !ð
 ! C¨$¡J°Ñ$4Ñ4˜DØ'×2Ô2Ø $¨¨d×.GÑ.GØ$,×$7Ñ$7ó/"ñ )"ñ !"¢ð .ô #Ÿ]™]�_Ø%(˜FØ'×2Ò2Ø &¨#°×0IÑ0IØ$,×$7Ñ$7ó1"ñ +"ñ !" ð  (Ÿ~š~Ø &¨#°·±¸¿¹Ó0HÑ*HÑ H ñ $(¨X×-@Ò-@ÀHÇNÂNñ !$à%'ð &ð
 $*¨IÑ#5¸Ñ#<šDò -ð9)=ñT &Ø�KÙØŸ™›
�AØ¡™#¨¨dÑ2Ñ2�AØ�ð{ "ð| ”—‘–Ø×*Ñ*¨1¯6©6Ó2Ð2ð à!”—‘Ö!ð —|’|ð ×-Ñ-¨a¯l©lÓ;¸cÒAàð ð
  × 3Ñ 3Ø—F‘FØ"/Ø#1ð !4ó !ñ ð ð "ð (”×%Ñ%Ö'Ø—x‘x §¡Ó(¨3Ñ.Ð.ð (à"”—‘×" _¤U§]¡]§_Ð7G´u·~±~×7GÒGØ×*Ñ*Ø—F‘FØ  ‘OØ"/Ø#1ð	 +ó ð ð Ø—z‘z !“}Ð$r   Ú	conditionc                 óH   — | j                  |«      } ||«      rd|z   dz   S |S )zŒVisits 'n' and returns its string representation, parenthesized
        if the condition function applied to the node returns True.
        r9   r:   )r\   )r   r)   rŽ  r>   s       r   r”   zCGenerator._parenthesize_ifD  s.   € ð ×Ñ˜QÓˆÙ�QŒ<Ø˜‘7˜S‘=Ð àˆHr   c                 ó.   ‡ — ‰ j                  |ˆ fd„«      S )z$Common use case for _parenthesize_ifc                 ó(   •— ‰j                  | «       S r!   )r�   )r‘   r   s    €r   r’   z8CGenerator._parenthesize_unless_simple.<locals>.<lambda>R  s   ø€ °d×6JÑ6JÈ1Ó6MÐ2M€ r   )r”   r,   s   ` r   r[   z&CGenerator._parenthesize_unless_simpleP  s   ø€ à×$Ñ$ QÓ(MÓNÐNr   c           	      óÎ   — t        |t        j                  t        j                  t        j                  t        j
                  t        j                  t        j                  f«      S )zyReturns True for nodes that are "simple" - i.e. nodes that always
        have higher precedence than operators.
        )rQ   r   rS   rT  rt  ru  rs  rw  r,   s     r   r�   zCGenerator._is_simple_nodeT  sE   € ô Øä—‘Ü—‘Ü—‘Ü—‘Ü—‘Ü×&Ñ&ðó

ð 
	
r   )F)NTT)™r   Ú
__module__Ú__qualname__Ú__doc__ÚintÚ__annotations__Úboolr   Ústrr   r   ÚNoder   r   rS   r-   rT  r1   rÜ   ÚAttributeSpecifierr7   Ú	Attributer?   rE   ry  rG   rÌ   rJ   rz  rO   rÂ   rU   rt  r_   ru  rc   rs  rg   rw  rl   ÚGenericAssociationrq   rŽ   rv   r‰   r   Údictr�   r™   rœ   rŸ   rˆ  r¢   ÚInferredTyper¥   ÚTypeOfr§   Ú
BitIntTyper¬   r\   rÆ   r½   rä   rÄ   rÍ   rÎ   rÏ   rÑ   r×   rá   rç   rÇ   rê   rq  rï   r±   rö   r°   rù   rþ   ÚAlignasr  Ú
Enumeratorr  r  r
  ÚFileASTr  r²   r  rv  r  ÚEmptyStatementr  Ú	ParamListr  ÚReturnr   ÚBreakr"  ÚContinuer$  rr  r)  r{  r.  ÚForr1  ÚWhiler4  ÚDoWhiler6  rx  r9  ÚSwitchr;  ÚCaser?  ÚDefaultrA  ÚLabelrC  ÚGotorE  ÚEllipsisParamrG  rJ  r�  rL  rO  ÚArrayDesignatorrQ  ÚNamedInitializerrU  rÊ   rX  rÉ   r[  rË   r^  rÈ   r`  rý   r  rc  rL   rº   r~  r¹   r   r”   r[   r�   r¤   r   r   r   r      sp	  … ñð
 ÓØÓñ	5¨4ð 	5¸Dó 	5ð'˜có 'ð?˜%Ÿ*™*ð ?¨ó ?ðK %§*¡*¨tÑ"3ð K¸ó Kð §¡ð °3ó ð˜%Ÿ(™(ð  só ðK¨t°E×4LÑ4LÑ/Mð KÐRUó Kð §¡ð °Só ðL¨%×*BÑ*Bð LÀsó Lð7¨E×,FÑ,Fð 7È3ó 7ðR e×&:Ñ&:ð R¸só Rð
¨5×+DÑ+Dð 
Èó 
ð˜eŸl™lð ¨só ðT §¡ð T°3ó Tð3 §¡ð 3°Só 3ð' §¡ð '°3ó 'ð3¨×(>Ñ(>ð 3À3ó 3ð4¨%×*BÑ*Bð 4Àsó 4ð*˜uŸ}™}ð *°ó *ð"0ð 	ˆað0ð 	ˆað	0ð
 	ˆQð0ð 	ˆQð0ð 	ˆQð0ð 	ˆað0ð 	ˆað0ð 	ˆQð0ð 	ˆað0ð 	ˆQð0ð 	ˆað0ð 	ˆað0ð 	ˆað0ð  	ˆQð!0ð" 	ˆQð#0ð$ 	ˆQð%0ð& 	ˆQð'0ð( 	ˆQñ)0€N�H˜T # s (™^Ñ,ó ð../ §¡ð ./°3ó ./ð`A %×"2Ñ"2ð A°só Að! e×&:Ñ&:ð !¸só !ð E×$6Ñ$6ð ¸3ó ð5˜eŸl™lð 5¨só 5ð= %×"2Ñ"2ð =°só =ð AFò %˜UŸZ™Zð %¸ð %È#ó %ñ"˜EŸJ™Jð °ð À#ó ð §¡ð °3ó ðØ—‘ðà	�‰˜Ÿ™Ñ	# e§j¡jÑ	0°4Ñ	7óð> U§Z¡Zð ¸¿
¹
ð Àtó ð*Ø˜%Ÿ*™*Ñ%ðà	ˆe�j‰j˜4 §
¡
Ñ+Ñ+Ñ	,óðB1 t¨E¯J©JÑ'7ð 1¸Có 1ð,˜uŸ}™}ð °ó ðB˜EŸJ™Jð B¨3ó Bð+ §¡ð +°3ó +ð+ §¡ð +°3ó +ð@˜EŸJ™Jð @¨3ó @ð<˜uŸ}™}ð <°ó <ðS %×"2Ñ"2ð S°só Sð-˜uŸ}™}ð -°ó -ð˜uŸ}™}ð °ó ð §¡ð °3ó ðT u×'<Ñ'<ð TÀó Tð e×&:Ñ&:ð ¸só ðB §¡ð B°Só Bð˜eŸl™lð ¨só ð˜UŸ[™[ð ¨Só ð §¡ð °3ó ð §¡ð °Só ð	˜%Ÿ(™(ð 	 só 	ð˜5Ÿ9™9ð ¨ó ð˜UŸ[™[ð ¨Só ð˜uŸ}™}ð °ó ð E×$6Ñ$6ð ¸3ó ð˜eŸl™lð ¨só ð
G˜EŸJ™Jð G¨3ó Gð
G˜uŸ}™}ð G°ó Gð
@˜UŸ[™[ð @¨Só @ð&˜EŸJ™Jð &¨3ó &ð U×%8Ñ%8ð ¸Só ð=˜eŸl™lð =¨só =ð/ §¡ð /°3ó /ð<˜UŸ[™[ð <¨Só <ð4 u×'<Ò'<ð 4Àó 4ð¨×(>Ò(>ð À3ó ð& §¢ð &°3ó &ð; §¢ð ;°Só ;ð; §¢ð ;°3ó ;ð;˜uŸ}š}ð ;°ó ;ðØ—‘ §¡Ñ+¨e¯j©jÑ8ðØ@Cðà	óñB D¨¯©Ñ$4ð À$ð ÐSVó ð"Ø˜E×,Ñ,¨u¯|©|Ñ;Ñ<ðà	óñ"-5 §
¡
ð -5¸ð -5Èó -5ð^ §
¡
ð ¨só ð*&¨%¯*©*ð &¸ó &ð  .2Ø"Ø#ñh%à�:‰:ðh%ð ˜Ÿ
™
Ñ# dÑ*ðh%ð ð	h%ð
 ðh%ð 
óh%ðT
Ø—‘ð
Ø(0°%·*±*°¸tÐ1CÑ(Dð
à	ó
ðO¨U¯Z©Zð O¸Có Oð
 §¡ð 
°ô 
r   r   N)Úcollections.abcr   Útypingr   r   r   r   r¤   r   r   ú<module>r·     s   ðõ %Ý å ÷S
ò S
r   