§
    ×‘Új …  ã                   óD   — d dl mZ d dlmZ ddlmZ  G d„ d¦  «        ZdS )é    )Ú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
j        defd„Zd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
j         defd„Z!d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
j(        defd„Z)de
j*        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
j1        defd;„Z2de
j3        defd<„Z4de
j5        defd=„Z6de
j7        defd>„Z8de
j9        defd?„Z:dd@œde
j        dAedefdB„Z;d„de
j<        dCedefdD„Z=de
j>        defdE„Z?de
j        de
j@        e
jA        z  e
jB        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
jG        defdM„ZHde
jI        defdN„ZJde
jK        defdO„ZLde
jM        defdP„ZNde
jB        defdQ„ZOde
jP        defdR„ZQde
jR        defdS„ZSde
jT        defdT„ZUde
jV        defdU„ZWde
jX        defdV„ZYde
jZ        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
jb        defd[„Zcde
jd        defd\„Zede
jf        defd]„Zgde
jh        defd^„Zide
jj        defd_„Zkde
jl        defd`„Zmde
jn        defda„Zode
jp        defdb„Zqde
jr        defdc„Zsde
jt        defdd„Zude
jv        defde„Zwde
jx        defdf„Zyde
jz        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
jA        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
jA        z  e
jB        z  dredefds„ZŽd„dJee
j                 dtedefdu„Z�dvee
jR        e
j        z           defdw„Z�d„de
j        dtedefdx„Z‘de
j<        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˜dS )†Ú
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| _         || _        dS )zŠConstructs C-code generator

        reduce_parentheses:
            if True, eliminates needless parentheses on binary operators
        r   N)r	   r
   )Úselfr
   s     ú‡/Users/tedpeters/Documents/Projects/Claude Projects/TPC Houses/house-viewer/.venv/lib/python3.11/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                 ó^   — d|j         j        z   } t          | || j        ¦  «        |¦  «        S )NÚvisit_)Ú	__class__Ú__name__ÚgetattrÚgeneric_visit)r   r   Úmethods      r   ÚvisitzCGenerator.visit&   s0   € Ø˜DœNÔ3Ñ3ˆØ8�w�t˜V TÔ%7Ñ8Ô8¸Ñ>Ô>Ð>r   c                 ór   ‡ — |€dS d                      ˆ fd„|                     ¦   «         D ¦   «         ¦  «        S )NÚ c              3   óH   •K  — | ]\  }}‰                      |¦  «        V — Œd S ©N©r   )Ú.0Úc_nameÚcr   s      €r   ú	<genexpr>z+CGenerator.generic_visit.<locals>.<genexpr>.   s1   øè è € ÐJÐJ©Y¨V°Q˜4Ÿ:š: a™=œ=ÐJÐJÐJÐJÐJÐJr   )ÚjoinÚchildren)r   r   s   ` r   r   zCGenerator.generic_visit*   s<   ø€ Øˆ<Ø�2à—7’7ÐJÐJÐJÐJ¸$¿-º-¹/¼/ÐJÑJÔJÑJÔJÐJr   Únc                 ó   — |j         S r!   )Úvalue©r   r)   s     r   Úvisit_ConstantzCGenerator.visit_Constant0   s	   € ØŒwˆr   c                 ó   — |j         S r!   ©Únamer,   s     r   Úvisit_IDzCGenerator.visit_ID3   s	   € ØŒvˆr   Ú
attributesc                 óF   ‡ — d                      ˆ fd„|D ¦   «         ¦  «        S )Nr   c              3   óB   •K  — | ]}‰                      |¦  «        V — Œd S r!   r"   )r#   Ú	attributer   s     €r   r&   z2CGenerator._generate_attributes.<locals>.<genexpr>7   s/   øè è € ÐJÐJ°)˜Ÿ
š
 9Ñ-Ô-ÐJÐJÐJÐJÐJÐJr   )r'   )r   r2   s   ` r   Ú_generate_attributeszCGenerator._generate_attributes6   s*   ø€ Ø�xŠxÐJÐJÐJÐJ¸zÐJÑJÔJÑJÔJÐJr   c                 ój   — |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   sD   € Ø#$¤;Ð#:ˆQŒ[˜4ÑÐÀÀaÄfÑLˆØŒ;Ð"Ø��q”{Ñ" SÑ(Ñ(ˆAØˆr   c                 ó\   ‡ — dd                      ˆ fd„|j        D ¦   «         ¦  «        z   dz   S )Nz[[ú, c              3   óB   •K  — | ]}‰                      |¦  «        V — Œd S r!   r"   ©r#   Úar   s     €r   r&   z6CGenerator.visit_AttributeSpecifier.<locals>.<genexpr>@   s-   øè è € ÐDÐD°! §
¢
¨1¡¤ÐDÐDÐDÐDÐDÐDr   z]])r'   r2   r,   s   ` r   Úvisit_AttributeSpecifierz#CGenerator.visit_AttributeSpecifier?   s6   ø€ Ø�d—i’iÐDÐDÐDÐD°q´|ÐDÑDÔDÑDÔDÑDÀtÑKÐKr   c                 ó6   — |                       |j        ¦  «        S r!   )r6   r2   r,   s     r   Úvisit_AttributeDeclarationz%CGenerator.visit_AttributeDeclarationB   s   € Ø×(Ò(¨¬Ñ6Ô6Ð6r   c                 ór   — |                       |j        ¦  «        dz   |                      |j        ¦  «        z   S r   )r   Útyper6   r2   r,   s     r   Úvisit_AttributedTypezCGenerator.visit_AttributedTypeE   s0   € Ø�zŠz˜!œ&Ñ!Ô! CÑ'¨$×*CÒ*CÀAÄLÑ*QÔ*QÑQÐQr   c                 ó–   — |                       |j        ¦  «        dz   |                      |j        ¦  «                             ¦   «         z   S r   )r6   r2   Ú_generate_stmtÚstmtÚlstripr,   s     r   Úvisit_AttributedStatementz$CGenerator.visit_AttributedStatementH   sF   € à×%Ò% a¤lÑ3Ô3Øñà×!Ò! !¤&Ñ)Ô)×0Ò0Ñ2Ô2ñ3ð	
r   c                 ó°   — t          |j        t          j        ¦  «        r d|                      |j        ¦  «        z   dz   S d}|j        r|d|j        z   z  }|S )Nz_Pragma(r9   z#pragmar   )Ú
isinstanceÚstringr   ÚConstantr   )r   r)   Úrets      r   Úvisit_PragmazCGenerator.visit_PragmaO   sZ   € Ý�a”h¥¤Ñ/Ô/ð 	;Ø §
¢
¨1¬8Ñ 4Ô 4Ñ4°sÑ:Ð:ØˆØŒ8ð 	"Ø�3˜œ‘>Ñ!ˆCØˆ
r   c                 ó€   — |                       |j        ¦  «        }|dz   |                      |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   sA   € Ø×1Ò1°!´&Ñ9Ô9ˆØ˜‰|˜d×.Ò.¨q¬{ÈÐ.ÑMÔMÑMÐPSÑSÐSr   c                 ó€   — |                       |j        ¦  «        }||j        z   |                      |j        ¦  «        z   S r!   )rZ   r0   rH   r   Úfield)r   r)   Úsrefs      r   Úvisit_StructRefzCGenerator.visit_StructRef[   s6   € Ø×/Ò/°´Ñ7Ô7ˆØ�a”f‰}˜tŸzšz¨!¬'Ñ2Ô2Ñ2Ð2r   c                 ó’   — |                       |j        ¦  «        }|j        �|                      |j        ¦  «        nd}|dz   |z   dz   S )Nr   r8   r9   )rZ   r0   Úargsr   )r   r)   Úfrefrd   s       r   Úvisit_FuncCallzCGenerator.visit_FuncCall_   sJ   € Ø×/Ò/°´Ñ7Ô7ˆà%&¤VÐ%7ˆt�zŠz˜!œ&Ñ!Ô!Ð!¸RˆØ�c‰z˜DÑ  3Ñ&Ð&r   c                 ó–   ‡ — ‰                       |j        ¦  «        }d                     ˆ fd„|j        D ¦   «         ¦  «        }d|› d|› d�S )Nr@   c              3   óB   •K  — | ]}‰                      |¦  «        V — Œd S r!   r"   rB   s     €r   r&   z4CGenerator.visit_GenericSelection.<locals>.<genexpr>i   s-   øè è € Ð GÐ G°1 §¢¨A¡¤Ð GÐ GÐ GÐ GÐ GÐ Gr   z	_Generic(r9   )r[   Úexprr'   Úassociations)r   r)   ri   rj   s   `   r   Úvisit_GenericSelectionz!CGenerator.visit_GenericSelectione   s[   ø€ ð ×Ò ¤Ñ'Ô'ˆØ—y’yÐ GÐ GÐ GÐ G¸¼Ð GÑ GÔ GÑGÔGˆØ2˜4Ð2Ð2 <Ð2Ð2Ð2Ð2r   c                 ó†   — |j         �|                      |j         ¦  «        nd}|› d|                      |j        ¦  «        › �S )NÚdefaultz: )rH   r   r[   ri   ©r   r)   Útyps      r   Úvisit_GenericAssociationz#CGenerator.visit_GenericAssociationl   sE   € Ø$%¤FÐ$6ˆd�jŠj˜œÑ Ô Ð ¸IˆØÐ3Ð3˜×)Ò)¨!¬&Ñ1Ô1Ð3Ð3Ð3r   c                 ó<  — |j         xdk    r! d|                      |j        d¬¦  «        › d�S xdk    r  |                      |j        ¦  «        }|› d�S dk    r|                      |j        ¦  «        }|› d	�S 	 |                      |j        ¦  «        }|j         › |› �S )
NÚsizeofzsizeof(TrW   r9   zp++z++zp--z--)Úopr[   ri   rZ   )r   r)   Úoperands      r   Úvisit_UnaryOpzCGenerator.visit_UnaryOpp   sº   € ØŒdØ�’��ð O ×!1Ò!1°!´&ÀdÐ!1Ñ!KÔ!KÐNÐNÐNÐNØ�’��Ø×:Ò:¸1¼6ÑBÔB�Ø!�~�~�~Ð%Ø’�Ø×:Ò:¸1¼6ÑBÔB�Ø!�~�~�~Ð%ØØ×:Ò:¸1¼6ÑBÔB�Øœ$Ð) Ð)Ð)Ð)r   z||r   z&&r   ú|é   ú^é   ú&é   z==é   z!=ú>é   z>=ú<z<=z>>é   z<<ú+é   ú-Ú*é	   ú/ú%Úprecedence_mapc                 ó    ‡ ‡— ‰                       ‰j        ˆˆ fd„¦  «        }‰                       ‰j        ˆˆ fd„¦  «        }|› d‰j        › d|› �S )Nc                 óò   •— ‰                      | ¦  «        p`‰j        oYt          | t          j        ¦  «        p?t          | t          j        ¦  «        o%‰j        | j                 ‰j        ‰j                 k     S r!   ©Ú_is_simple_noder
   rP   r   ÚUnaryOpÚBinaryOprˆ   rs   ©Údr)   r   s    €€r   ú<lambda>z+CGenerator.visit_BinaryOp.<locals>.<lambda>¥   st   ø€ à×(Ò(¨Ñ+Ô+ð ØÔ.ð å" 1¥e¤mÑ4Ô4ð SÝ% a­¬Ñ8Ô8ð SØ Ô/°´Ô5¸Ô9LÈQÌTÔ9RÒRðð r   c                 óò   •— ‰                      | ¦  «        p`‰j        oYt          | t          j        ¦  «        p?t          | t          j        ¦  «        o%‰j        | j                 ‰j        ‰j                 k     S r!   r‹   r�   s    €€r   r‘   z+CGenerator.visit_BinaryOp.<locals>.<lambda>º   st   ø€ à×(Ò(¨Ñ+Ô+ð ØÔ.ð å" 1¥e¤mÑ4Ô4ð RÝ% a­¬Ñ8Ô8ð RØ Ô/°´Ô5¸Ô8KÈAÌDÔ8QÒQðð r   r   )Ú_parenthesize_ifÚleftÚrightrs   )r   r)   Úlval_strÚrval_strs   ``  r   Úvisit_BinaryOpzCGenerator.visit_BinaryOp˜   sŽ   øø€ ð ×(Ò(ØŒFð
ð 
ð 
ð 
ð 
ñ
ô 
ˆð* ×(Ò(ØŒGð
ð 
ð 
ð 
ð 
ñ
ô 
ˆð Ð.Ð.˜QœTÐ.Ð. HÐ.Ð.Ð.r   c                 óˆ   — |                       |j        d„ ¦  «        }|                      |j        ¦  «        › d|j        › d|› �S )Nc                 ó6   — t          | t          j        ¦  «        S r!   )rP   r   Ú
Assignment)r)   s    r   r‘   z-CGenerator.visit_Assignment.<locals>.<lambda>Ê   s   € ¥
¨1­eÔ.>Ñ ?Ô ?€ r   r   )r“   Úrvaluer[   Úlvaluers   )r   r)   r—   s      r   Úvisit_AssignmentzCGenerator.visit_AssignmentÈ   sR   € Ø×(Ò(ØŒHÐ?Ð?ñ
ô 
ˆð ×"Ò" 1¤8Ñ,Ô,Ð@Ð@¨q¬tÐ@Ð@°hÐ@Ð@Ð@r   c                 ó6   — d                      |j        ¦  «        S r   )r'   Únamesr,   s     r   Úvisit_IdentifierTypezCGenerator.visit_IdentifierTypeÎ   s   € Ø�xŠx˜œÑ Ô Ð r   c                 ó   — dS )Nr   © r,   s     r   Úvisit_InferredTypezCGenerator.visit_InferredTypeÑ   s   € àˆrr   c                 óL   — |j         › d|                      |j        ¦  «        › d�S )Nr8   r9   )rs   r[   ri   r,   s     r   Úvisit_TypeOfzCGenerator.visit_TypeOfÕ   s+   € Ø”$Ð4Ð4˜×)Ò)¨!¬&Ñ1Ô1Ð4Ð4Ð4Ð4r   c                 óh   — |j         r
|j         dz   nd}|› d|                      |j        ¦  «        › d�S )Nr   r   z_BitInt(r9   )Ú
signednessr[   Úwidth)r   r)   Úsigns      r   Úvisit_BitIntTypezCGenerator.visit_BitIntTypeØ   sA   € Ø%&¤\Ð9ˆqŒ|˜cÑ!Ð!°rˆØÐ<Ð< × 0Ò 0°´Ñ 9Ô 9Ð<Ð<Ð<Ð<r   rW   rX   c                óp  — |xt           j        d˜ x�\    d|                      |¦  «        z   dz   S  xt           j        d˜ x�\   |r |                      |¦  «        S  xt           j        d˜ x�\   n xt           j        d˜ x�\   n  n d|                      |¦  «        z   dz   S 	 |                      |¦  «        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£   NÚ{Ú}r8   r9   )r   ÚInitListr   ÚExprListÚCompound)r   r)   rX   s      r   r[   zCGenerator._visit_exprÜ   sà   € ð Ø!•”Ð!Ð!Ð!Ð!Ñ!Ð!Ø˜TŸZšZ¨™]œ]Ñ*¨SÑ0Ð0ð "à!•”Ð!Ð!Ð!Ð!Ñ! [Ð!Ð!Ø—z’z !‘}”}Ð$ð "à!•”Ð!Ð!Ð!Ð!Ñ!Ð!Ð!Ð$4¥E¤NÐ$4Ð$4Ð$4Ð$4Ñ$4Ð$4Ð$4Ð$4Ð$4Ð$4Ø˜TŸZšZ¨™]œ]Ñ*¨SÑ0Ð0ØØ—z’z !‘}”}Ð$r   Úno_typec                 ó  — |r|                       |j        d¬¦  «        n|                      |¦  «        }|j        r |d|                      |j        ¦  «        z   z  }|j        r |d|                      |j        ¦  «        z   z  }|S )NF©Úemit_base_typeú : ú = )Ú_generate_typerH   Ú_generate_declÚbitsizer[   Úinit)r   r)   r²   r=   s       r   Ú
visit_DeclzCGenerator.visit_Declí   s•   € ð
 ð(ˆD×Ò ¤°uÐÑ=Ô=Ð=à×$Ò$ QÑ'Ô'ð 	
ð
 Œ9ð 	5Ø�˜×)Ò)¨!¬)Ñ4Ô4Ñ4Ñ4ˆAØŒ6ð 	2Ø�˜×)Ò)¨!¬&Ñ1Ô1Ñ1Ñ1ˆAØˆr   c                 ó¸  — |                       |j        d         ¦  «        }|j        dd …         D ]j}t          |t          j        ¦  «        r1|d|                      ¦   «         z   |                       |¦  «        z   z  }ŒM|d|                      |d¬¦  «        z   z  }Œkt          |j        d         t          j        ¦  «        r|d|                      ¦   «         z   z  }|S )Nr   r   ú
r@   T)r²   éÿÿÿÿ)r   ÚdeclsrP   r   ÚPragmar   r¼   )r   r)   r=   Údecls       r   Úvisit_DeclListzCGenerator.visit_DeclListû   sÔ   € Ø�JŠJ�q”w˜q”zÑ"Ô"ˆØ”G˜A˜B˜B”Kð 	@ð 	@ˆDÝ˜$¥¤Ñ-Ô-ð @ð �T˜D×-Ò-Ñ/Ô/Ñ/°$·*²*¸TÑ2BÔ2BÑBÑB��à�T˜DŸOšO¨D¸$˜OÑ?Ô?Ñ?Ñ?��Ý�a”g˜b”k¥5¤<Ñ0Ô0ð 	,Ø�˜×)Ò)Ñ+Ô+Ñ+Ñ+ˆAØˆr   c                 ó2  — t          |t          j        t          j        f¦  «        sdS |j        }t          |t          j        t          j        t          j        t          j        t          j	        f¦  «        rN|j        }t          |t          j        t          j        t          j        t          j        t          j	        f¦  «        °Nt          |t          j
        t          j        f¦  «        r	|j        �|S t          |t          j        ¦  «        r	|j        �|S dS )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)rP   r   ÚDeclÚTypedefrH   ÚPtrDeclÚ	ArrayDeclÚFuncDeclÚTypeDeclÚAttributedTypeÚStructÚUnionrÀ   ÚEnumÚvaluesrn   s      r   Ú_defined_typezCGenerator._defined_type  sì   € õ ˜!�eœj­%¬-Ð8Ñ9Ô9ð 	Ø�4ØŒfˆÝØå”Ý”Ý”Ý”ÝÔ$ðñ	
ô 	
ð 
	ð ”(ˆCõ Øå”Ý”Ý”Ý”ÝÔ$ðñ	
ô 	
ð 
	õ �c�EœL­%¬+Ð6Ñ7Ô7ð 	¸C¼IÐ<QØˆJÝ�c�5œ:Ñ&Ô&ð 	¨3¬:Ð+AØˆJØˆtr   r”   r•   c                 óÖ  — t          |¦  «        t          |¦  «        urdS t          |t          j        ¦  «        rZt          |t          j        ¦  «        r@|j        |j        k    o/|j        |j        k    o|j        |j        k    o|j        |j        k    S t          |t          j        ¦  «        r:t          |t          j        ¦  «        r |j        |j        k    o|j        |j        k    S dS )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)	rH   rP   r   rÅ   ÚqualsÚalignÚstorageÚfuncspecrÆ   )r   r”   r•   s      r   Ú_same_decl_specszCGenerator._same_decl_specs'  sÚ   € õ �‰:Œ:�T %™[œ[Ð(Ð(Ø�5Ý�d�EœJÑ'Ô'ð 	­J°u½e¼jÑ,IÔ,Ið 	à”
˜eœkÒ)ð 4Ø”J %¤+Ò-ð4à”L E¤MÒ1ð4ð ”M U¤^Ò3ð	õ �d�EœMÑ*Ô*ð 	O­z¸%ÅÄÑ/OÔ/Oð 	OØ”: ¤Ò,ÐN°´ÀÄÒ1NÐNØˆur   Únodesc                 ót  — g }d}|t          |¦  «        k     �r||         }|                      |¦  «        }|€|                     |¦  «         |dz  }ŒN|dz   }|t          |¦  «        k     rn|                      |||         ¦  «        rR|                      ||         ¦  «        |urn4|dz  }|t          |¦  «        k     r|                      |||         ¦  «        °R||dz   k    r|                     |¦  «         n*|                     t	          |||…         ¦  «        ¦  «         |}|t          |¦  «        k     �°|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   Nr   )ÚlenrÐ   ÚappendrÖ   Úlist)r   r×   ÚgroupedÚindexr   ÚdefinedÚends          r   Ú_coalesce_defined_typesz"CGenerator._coalesce_defined_types<  sN  € ð 8:ˆØˆØ•c˜%‘j”jÒ Ñ Ø˜”<ˆDØ×(Ò(¨Ñ.Ô.ˆGØˆØ—’˜tÑ$Ô$Ð$Ø˜‘
�ØØ˜!‘)ˆCØ�˜E™
œ
Ò"Ð" t×'<Ò'<¸TÀ5ÈÄ:Ñ'NÔ'NÐ"Ø×%Ò% e¨C¤jÑ1Ô1¸Ð@Ð@ØØ�q‘�ð �˜E™
œ
Ò"Ð" t×'<Ò'<¸TÀ5ÈÄ:Ñ'NÔ'NÐ"ð �e˜a‘iÒÐØ—’˜tÑ$Ô$Ð$Ð$à—’�t E¨%°¨)Ô$4Ñ5Ô5Ñ6Ô6Ð6ØˆEð! •c˜%‘j”jÒ Ñ ð" ˆr   c                 óH  — |d         }t          |t          j        ¦  «        r•g }|dd…         D ]Z}t          |t          j        ¦  «        st          d¦  «        ‚|                     |                      |j        d¬¦  «        ¦  «         Œ[|                      |¦  «        dz   d                     |¦  «        z   S g }|D ]@}t          |t          j	        ¦  «        st          d¦  «        ‚|                     |¦  «         ŒA|                      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´   r@   z,declaration group contains a non-declaration)rP   r   rÆ   Ú	TypeErrorrÚ   r¸   rH   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˜bœ	ð Tð T�Ý! $­¬Ñ6Ô6ð LÝ#Ð$JÑKÔKÐKØ—’˜d×1Ò1°$´)ÈEÐ1ÑRÔRÑSÔSÐSÐSØ—:’:˜eÑ$Ô$ tÑ+¨d¯iªi¸Ñ.?Ô.?Ñ?Ð?Ø"$ˆØð 	ð 	ˆDÝ˜d¥E¤JÑ/Ô/ð PÝÐ NÑOÔOÐOØ�LŠL˜ÑÔÐÐØ�zŠz�%œ.¨Ñ/Ô/Ñ0Ô0Ð0r   c                 óÚ   — |j         r|                      |j         ¦  «        dz   nd}|j        r |d                     |j        ¦  «        dz   z  }||                      |j        ¦  «        z  }|S ©Nr   r   )r2   r6   rÔ   r'   r¸   rH   r<   s      r   Úvisit_TypedefzCGenerator.visit_Typedefs  sn   € Ø=>¼\ÐQˆD×%Ò% a¤lÑ3Ô3°cÑ9Ð9ÈrˆØŒ9ð 	+Ø�—’˜!œ)Ñ$Ô$ sÑ*Ñ*ˆAØ	ˆT× Ò  ¤Ñ(Ô(Ñ(ˆØˆr   c                 ó†   — d|                       |j        d¬¦  «        z   dz   }|dz   |                      |j        ¦  «        z   S )Nr8   F©Úemit_declnamer9   r   )r¸   Úto_typerZ   ri   r<   s      r   Ú
visit_CastzCGenerator.visit_Castz  sE   € Ø�$×%Ò% a¤i¸uÐ%ÑEÔEÑEÈÑKˆØ�3‰w˜×9Ò9¸!¼&ÑAÔAÑAÐAr   c                 ó”   — g }|j         D ]*}|                     |                      |¦  «        ¦  «         Œ+d                     |¦  «        S ©Nr@   ©ÚexprsrÚ   r[   r'   ©r   r)   Úvisited_subexprsri   s       r   Úvisit_ExprListzCGenerator.visit_ExprList~  óQ   € ØÐØ”Gð 	<ð 	<ˆDØ×#Ò# D×$4Ò$4°TÑ$:Ô$:Ñ;Ô;Ð;Ð;Ø�yŠyÐ)Ñ*Ô*Ð*r   c                 ó”   — g }|j         D ]*}|                     |                      |¦  «        ¦  «         Œ+d                     |¦  «        S rð   rñ   ró   s       r   Úvisit_InitListzCGenerator.visit_InitList„  rö   r   c                 ó0   — |                       |d¬¦  «        S )NÚenumr/   ©Ú_generate_struct_union_enumr,   s     r   Ú
visit_EnumzCGenerator.visit_EnumŠ  s   € Ø×/Ò/°¸Ð/Ñ?Ô?Ð?r   c                 ó>   — d|                       |j        ¦  «        › d�S )Nz	_Alignas(r9   )r[   Ú	alignmentr,   s     r   Úvisit_AlignaszCGenerator.visit_Alignas�  s#   € Ø;˜4×+Ò+¨A¬KÑ8Ô8Ð;Ð;Ð;Ð;r   c                 ó  — |j         }|j        r |d|                      |j        ¦  «        z   z  }|j        s|                      ¦   «         › |› d�S |                      ¦   «         › |› d|                      |j        ¦  «        › d�S )Nr   z,
r·   )r0   r2   r6   r+   r   r[   )r   r)   r0   s      r   Úvisit_EnumeratorzCGenerator.visit_Enumerator�  s–   € ØŒvˆØŒ<ð 	BØ�C˜$×3Ò3°A´LÑAÔAÑAÑAˆDØŒwð 	SØ×'Ò'Ñ)Ô)Ð4¨4Ð4Ð4Ð4Ð4à×'Ò'Ñ)Ô)ÐR¨4ÐRÐR°D×4DÒ4DÀQÄWÑ4MÔ4MÐRÐRÐRÐRr   c                 ó  ‡ — ‰                       |j        ¦  «        }d‰ _        ‰                       |j        ¦  «        }|j        r4d                     ˆ fd„|j        D ¦   «         ¦  «        }|dz   |z   |z   dz   S |dz   |z   dz   S )Nr   r   c              3   óB   •K  — | ]}‰                      |¦  «        V — Œd S r!   )rK   )r#   Úpr   s     €r   r&   z+CGenerator.visit_FuncDef.<locals>.<genexpr>ž  s1   øè è € ÐMÐM¸!˜t×2Ò2°1Ñ5Ô5ÐMÐMÐMÐMÐMÐMr   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ÐMÐMÐM¸q¼}ÐMÑMÔMÑMÔMˆHØ˜$‘; Ñ)¨DÑ0°4Ñ7Ð7à˜$‘; Ñ%¨Ñ,Ð,r   c                 ó–  — d}|                       |j        ¦  «        D ]«}t          |t          ¦  «        r||                      |¦  «        dz   z  }Œ3|xt
          j        d˜ x�\    ||                      |¦  «        z  }Œ` t
          j        d˜ x�\   ||                      |¦  «        dz   z  }ŒŽ 	 ||                      |¦  «        dz   z  }Œ¬|S )Nr   ú;
r£   r¾   )	rà   ÚextrP   rÛ   ræ   r   ÚFuncDefr   rÁ   )r   r)   r=   r  s       r   Úvisit_FileASTzCGenerator.visit_FileAST£  sÛ   € ØˆØ×/Ò/°´Ñ6Ô6ð 
	1ð 
	1ˆCÝ˜#�tÑ$Ô$ð Ø�T×+Ò+¨CÑ0Ô0°5Ñ8Ñ8�ØØØ$•U”]�_�_�_�_‘_�_Ø˜Ÿš C™œÑ(�A�Að %å”\�^�^�^�^‘^Ø˜Ÿš C™œ¨4Ñ/Ñ/�A�Að $àØ˜Ÿš C™œ¨5Ñ0Ñ0�A�AØˆr   c                 óð   — |                       ¦   «         dz   }| xj        dz  c_        |j        r||                      |j        ¦  «        z  }| xj        dz  c_        ||                       ¦   «         dz   z  }|S )Nú{
rw   z}
)r   r	   Úblock_itemsÚ_generate_bodyr<   s      r   Úvisit_CompoundzCGenerator.visit_Compound²  s„   € Ø×ÒÑÔ %Ñ'ˆØÐÔ˜QÑÐÔØŒ=ð 	4Ø�×$Ò$ Q¤]Ñ3Ô3Ñ3ˆAØÐÔ˜QÑÐÔØ	ˆT×ÒÑ Ô  5Ñ(Ñ(ˆØˆr   c                 óÐ   — |j         rd                     |j         ¦  «        dz   nd}d|z   |                      |j        ¦  «        z   dz   |                      |j        ¦  «        z   dz   S )Nr   r   r8   z){r®   )rÔ   r'   r   rH   r»   )r   r)   rÔ   s      r   Úvisit_CompoundLiteralz CGenerator.visit_CompoundLiteral»  sa   € Ø/0¬yÐ@�#—(’(˜1œ9Ñ%Ô%¨Ñ+Ð+¸bˆØ�W‰}˜tŸzšz¨!¬&Ñ1Ô1Ñ1°DÑ8¸4¿:º:ÀaÄfÑ;MÔ;MÑMÐPSÑSÐSr   c                 ó   — dS )Nú;r£   r,   s     r   Úvisit_EmptyStatementzCGenerator.visit_EmptyStatement¿  s   € Øˆsr   c                 óP   ‡ — d                      ˆ fd„|j        D ¦   «         ¦  «        S )Nr@   c              3   óB   •K  — | ]}‰                      |¦  «        V — Œd S r!   r"   )r#   Úparamr   s     €r   r&   z-CGenerator.visit_ParamList.<locals>.<genexpr>Ã  s/   øè è € ÐAÐA¨u˜Ÿš EÑ*Ô*ÐAÐAÐAÐAÐAÐAr   )r'   Úparamsr,   s   ` r   Úvisit_ParamListzCGenerator.visit_ParamListÂ  s,   ø€ Ø�yŠyÐAÐAÐAÐA¸¼ÐAÑAÔAÑAÔAÐAr   c                 ób   — d}|j         r"|d|                      |j         d¬¦  «        z   z  }|dz   S )Nr   r   TrW   r  )ri   r[   r<   s      r   Úvisit_ReturnzCGenerator.visit_ReturnÅ  s?   € ØˆØŒ6ð 	BØ��t×'Ò'¨¬¸DÐ'ÑAÔAÑAÑAˆAØ�3‰wˆr   c                 ó   — dS )Nzbreak;r£   r,   s     r   Úvisit_BreakzCGenerator.visit_BreakË  s   € Øˆxr   c                 ó   — dS )Nz	continue;r£   r,   s     r   Úvisit_ContinuezCGenerator.visit_ContinueÎ  s   € Øˆ{r   c                 óÒ   — d|                       |j        ¦  «        z   dz   }|d|                       |j        ¦  «        z   dz   z  }|d|                       |j        ¦  «        z   dz   z  }|S )Nr8   z) ? z) : r9   )r[   ÚcondÚiftrueÚiffalser<   s      r   Úvisit_TernaryOpzCGenerator.visit_TernaryOpÑ  sn   € Ø�$×"Ò" 1¤6Ñ*Ô*Ñ*¨VÑ3ˆØ	ˆS�4×#Ò# A¤HÑ-Ô-Ñ-°Ñ6Ñ6ˆØ	ˆS�4×#Ò# A¤IÑ.Ô.Ñ.°Ñ4Ñ4ˆØˆr   c                 ó  — d}|j         r||                      |j         d¬¦  «        z  }|dz  }||                      |j        d¬¦  «        z  }|j        r9||                      ¦   «         dz   z  }||                      |j        d¬¦  «        z  }|S )Nzif (TrW   ú)
©Ú
add_indentzelse
)r%  r[   rK   r&  r'  r   r<   s      r   Úvisit_IfzCGenerator.visit_If×  s¢   € ØˆØŒ6ð 	<Ø�×!Ò! !¤&°dÐ!Ñ;Ô;Ñ;ˆAØ	ˆU‰
ˆØ	ˆT× Ò  ¤°dÐ Ñ;Ô;Ñ;ˆØŒ9ð 	AØ�×"Ò"Ñ$Ô$ xÑ/Ñ/ˆAØ�×$Ò$ Q¤Y¸4Ð$Ñ@Ô@Ñ@ˆAØˆr   c                 óV  — d}|j         r||                      |j         d¬¦  «        z  }|dz  }|j        r"|d|                      |j        d¬¦  «        z   z  }|dz  }|j        r"|d|                      |j        d¬¦  «        z   z  }|dz  }||                      |j        d¬¦  «        z  }|S )Nzfor (TrW   r  r   r*  r+  )r»   r[   r%  ÚnextrK   rL   r<   s      r   Ú	visit_ForzCGenerator.visit_Forâ  sÍ   € ØˆØŒ6ð 	<Ø�×!Ò! !¤&°dÐ!Ñ;Ô;Ñ;ˆAØ	ˆS‰ˆØŒ6ð 	BØ��t×'Ò'¨¬¸DÐ'ÑAÔAÑAÑAˆAØ	ˆS‰ˆØŒ6ð 	BØ��t×'Ò'¨¬¸DÐ'ÑAÔAÑAÑAˆAØ	ˆU‰
ˆØ	ˆT× Ò  ¤°DÐ Ñ9Ô9Ñ9ˆØˆr   c                 óž   — d}|j         r||                      |j         d¬¦  «        z  }|dz  }||                      |j        d¬¦  «        z  }|S )Núwhile (TrW   r*  r+  )r%  r[   rK   rL   r<   s      r   Úvisit_WhilezCGenerator.visit_Whileð  s]   € ØˆØŒ6ð 	<Ø�×!Ò! !¤&°dÐ!Ñ;Ô;Ñ;ˆAØ	ˆU‰
ˆØ	ˆT× Ò  ¤°DÐ Ñ9Ô9Ñ9ˆØˆr   c                 óÒ   — d}||                       |j        d¬¦  «        z  }||                      ¦   «         dz   z  }|j        r||                      |j        d¬¦  «        z  }|dz  }|S )Nzdo
Tr+  r2  rW   z);)rK   rL   r   r%  r[   r<   s      r   Úvisit_DoWhilezCGenerator.visit_DoWhileø  sx   € ØˆØ	ˆT× Ò  ¤°DÐ Ñ9Ô9Ñ9ˆØ	ˆT×ÒÑ Ô  9Ñ,Ñ,ˆØŒ6ð 	<Ø�×!Ò! !¤&°dÐ!Ñ;Ô;Ñ;ˆAØ	ˆT‰	ˆØˆr   c                 ó    — d}||                       |j        ¦  «        z  }|j        r"|dz  }||                      |j        ¦  «        z  }|dz  }|S )Nz_Static_assert(r@   r9   )r[   r%  Úmessager   r<   s      r   Úvisit_StaticAssertzCGenerator.visit_StaticAssert  sZ   € ØˆØ	ˆT×Ò˜aœfÑ%Ô%Ñ%ˆØŒ9ð 	'Ø�‰IˆAØ�—’˜AœIÑ&Ô&Ñ&ˆAØ	ˆS‰ˆØˆr   c                 óˆ   — d|                       |j        d¬¦  «        z   dz   }||                      |j        d¬¦  «        z  }|S )Nzswitch (TrW   r*  r+  )r[   r%  rK   rL   r<   s      r   Úvisit_SwitchzCGenerator.visit_Switch
  sJ   € Ø˜×)Ò)¨!¬&¸dÐ)ÑCÔCÑCÀeÑKˆØ	ˆT× Ò  ¤°DÐ Ñ9Ô9Ñ9ˆØˆr   c                 óÖ   — |j         r|                      |j         ¦  «        dz   nd}|d|                      |j        ¦  «        z   dz   z  }||                      |j        pg d¬¦  «        z   S )Nr   r   zcase ú:
Tr+  )r2   r6   r[   ri   r  Ústmtsr<   s      r   Ú
visit_CasezCGenerator.visit_Case  sp   € Ø=>¼\ÐQˆD×%Ò% a¤lÑ3Ô3°cÑ9Ð9ÈrˆØ	ˆW�t×'Ò'¨¬Ñ/Ô/Ñ/°%Ñ7Ñ7ˆØ�4×&Ò& q¤w }°"ÀÐ&ÑFÔFÑFÐFr   c                 óš   — |j         r|                      |j         ¦  «        dz   nd}|dz  }||                      |j        pg d¬¦  «        z   S )Nr   r   z	default:
Tr+  )r2   r6   r  r=  r<   s      r   Úvisit_DefaultzCGenerator.visit_Default  sV   € Ø=>¼\ÐQˆD×%Ò% a¤lÑ3Ô3°cÑ9Ð9ÈrˆØ	ˆ\ÑˆØ�4×&Ò& q¤w }°"ÀÐ&ÑFÔFÑFÐFr   c                 óž   — |j         r|                      |j         ¦  «        dz   nd}||j        z   dz   |                      |j        ¦  «        z   S )Nr   r   r<  )r2   r6   r0   rK   rL   r<   s      r   Úvisit_LabelzCGenerator.visit_Label  sN   € Ø=>¼\ÐQˆD×%Ò% a¤lÑ3Ô3°cÑ9Ð9ÈrˆØ�1”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                 ó   — dS )Nz...r£   r,   s     r   Úvisit_EllipsisParamzCGenerator.visit_EllipsisParam   s   € Øˆur   c                 ó.   — |                       |d¦  «        S )NÚstructrû   r,   s     r   Úvisit_StructzCGenerator.visit_Struct#  s   € Ø×/Ò/°°8Ñ<Ô<Ð<r   c                 óˆ   — |j         r|                      |j         ¦  «        dz   nd}||                      |j        ¦  «        z   S rè   )r2   r6   r¸   rH   r<   s      r   Úvisit_TypenamezCGenerator.visit_Typename&  sC   € Ø=>¼\ÐQˆD×%Ò% a¤lÑ3Ô3°cÑ9Ð9ÈrˆØ�4×&Ò& q¤vÑ.Ô.Ñ.Ð.r   c                 ó.   — |                       |d¦  «        S )NÚunionrû   r,   s     r   Úvisit_UnionzCGenerator.visit_Union*  s   € Ø×/Ò/°°7Ñ;Ô;Ð;r   c                 óB   — d|                       |j        ¦  «        z   dz   S )NrV   rY   )r[   ri   r,   s     r   Úvisit_ArrayDesignatorz CGenerator.visit_ArrayDesignator-  s"   € Ø�T×%Ò% a¤fÑ-Ô-Ñ-°Ñ3Ð3r   c                 óÞ   — d}|j         D ]B}t          |t          j        ¦  «        r|d|j         z   z  }Œ*||                      |¦  «        z  }ŒC|d|                      |j        ¦  «        z   z  }|S )Nr   ú.r·   )r0   rP   r   ÚIDr   r[   ri   )r   r)   r=   r0   s       r   Úvisit_NamedInitializerz!CGenerator.visit_NamedInitializer0  sz   € ØˆØ”Fð 	&ð 	&ˆDÝ˜$¥¤Ñ)Ô)ð &Ø�S˜4œ9‘_Ñ$��à�T—Z’Z Ñ%Ô%Ñ%��Ø	ˆU�T×%Ò% a¤fÑ-Ô-Ñ-Ñ-ˆØˆr   c                 ó,   — |                       |¦  «        S r!   ©r¸   r,   s     r   Úvisit_FuncDeclzCGenerator.visit_FuncDecl:  s   € Ø×"Ò" 1Ñ%Ô%Ð%r   c                 ó0   — |                       |d¬¦  «        S ©NFrë   rV  r,   s     r   Úvisit_ArrayDeclzCGenerator.visit_ArrayDecl=  ó   € Ø×"Ò" 1°EÐ"Ñ:Ô:Ð:r   c                 ó0   — |                       |d¬¦  «        S rY  rV  r,   s     r   Úvisit_TypeDeclzCGenerator.visit_TypeDecl@  r[  r   c                 ó0   — |                       |d¬¦  «        S rY  rV  r,   s     r   Úvisit_PtrDeclzCGenerator.visit_PtrDeclC  r[  r   r0   c                 óè  — |dv r7t          |t          j        t          j        f¦  «        sJ ‚|j        }| j        }n@|dk    sJ ‚t          |t          j        ¦  «        sJ ‚|j        €dn|j        j        }| j	        }|j
        r|                      |j
        ¦  «        dz   nd}|dz   |z   |j        pdz   }t          |t          j        ¦  «        r9|j        �2|                     ¦   «         dz   |                      |j        ¦  «        z   }|�i|dz  }||                      ¦   «         z  }| xj        dz  c_        |d	z  }| ||¦  «        z  }| xj        dz  c_        ||                      ¦   «         d
z   z  }|S )zlGenerates code for structs, unions, and enums. name should be
        'struct', 'union', or 'enum'.
        )rH  rM  rú   Nr   r   r¶   r¾   rw   r  r®   )rP   r   rÌ   rÍ   rÀ   r  rÎ   rÏ   ÚenumeratorsÚ_generate_enum_bodyr2   r6   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Ø Ô/ˆMˆMà˜6’>�>�>�>Ý˜a¥¤Ñ,Ô,Ð,Ð,Ð,ØœhÐ.�d�d°A´HÔ4HˆGØ Ô4ˆMà=>¼\ÐQˆD×%Ò% a¤lÑ3Ô3°cÑ9Ð9Èrð 	ð �3‰J˜Ñ# q¤v |°Ñ4ˆÝ�a�œÑ$Ô$ð 	C¨Ô):Ð)FØ—’‘
”
˜UÑ" T§Z¢Z°Ô0AÑ%BÔ%BÑBˆAØÐð �‰IˆAØ�×"Ò"Ñ$Ô$Ñ$ˆAØÐÔ Ñ"ÐÔØ�‰JˆAØ��˜wÑ'Ô'Ñ'ˆAØÐÔ Ñ"ÐÔØ�×"Ò"Ñ$Ô$ sÑ*Ñ*ˆAØˆr   r,  c                 ór  — |                       ¦   «         }|r|dz  }g }|                      |¦  «        D ]p}t          |t          ¦  «        r/|                     ||                      |¦  «        z   dz   ¦  «         ŒF|                     |                      ||¬¦  «        ¦  «         Œqd                     |¦  «        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à   rP   rÛ   rÚ   ræ   rK   r'   )r   r×   r,  ÚindentÚpartsÚitems         r   r  zCGenerator._generate_bodyg  sÂ   € ð ×"Ò"Ñ$Ô$ˆØð 	Ø�d‰NˆFØˆØ×0Ò0°Ñ7Ô7ð 	Oð 	OˆDÝ˜$¥Ñ%Ô%ð OØ—’˜V d×&<Ò&<¸TÑ&BÔ&BÑBÀUÑJÑKÔKÐKÐKà—’˜T×0Ò0°À*Ð0ÑMÔMÑNÔNÐNÐNØ�wŠw�u‰~Œ~Ðr   re  c                 ób  — g }d }|D ]|}t          |t          j        ¦  «        r)|                     |                      |¦  «        ¦  «         ŒEt          |¦  «        }|                     |                      |¦  «        ¦  «         Œ}|�||         d d…         dz   ||<   d                     |¦  «        S )Néþÿÿÿr¾   r   )rP   r   rÁ   rÚ   rK   rÙ   r   r'   )r   re  ri  Úlast_enumeratorÚmembers        r   rb  zCGenerator._generate_enum_bodyx  sµ   € ð ˆØˆØð 	1ð 	1ˆFÝ˜&¥%¤,Ñ/Ô/ð 1Ø—’˜T×0Ò0°Ñ8Ô8Ñ9Ô9Ð9Ð9å"% e¡*¤*�Ø—’˜TŸZšZ¨Ñ/Ô/Ñ0Ô0Ð0Ð0ð Ð&Ø%*¨?Ô%;¸C¸R¸CÔ%@À4Ñ%GˆE�/Ñ"Ø�wŠw�u‰~Œ~Ðr   c                 óš  — |r| xj         dz  c_         |                      ¦   «         }|r| xj         dz  c_         |xxt          j        d˜ x�\   �nF xt          j        d˜ x�\   �n1 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�\   ng xt          j        d˜ x�\   nS xt          j        d˜ x�\   n? xt          j        d˜ x�\   n+ xt          j        d˜ x�\   n xt          j        d˜ x�\   n  n  ||                      |¦  «        z   dz   S xt          j        d˜ x�\    |                      |¦  «        S  xt          j        d˜ x�\    ||                      |¦  «        z   S  t          j        d˜ x�\   ||                      |¦  «        z   S  	 ||                      |¦  «        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.
        rw   r£   Nr  r¾   )r	   r   r   rÅ   r›   ÚCastr�   rŽ   Ú	TernaryOpÚFuncCallÚArrayRefÚ	StructRefrR   rS  rÆ   r°   ÚCompoundLiteralÚGenericSelectionÚStaticAssertÚAttributeDeclarationr   r±   ÚAttributedStatementÚIf)r   r)   r,  rh  s       r   rK   zCGenerator._generate_stmt‰  sæ  € ð
 ð 	#ØÐÔ Ñ"ÐÔØ×"Ò"Ñ$Ô$ˆØð 	#ØÐÔ Ñ"ÐÔàð/�•”
����‘‘�Ø$•%Ô"Ð$Ð$Ð$Ð$Ñ$Ñ$Ð$Ø•%”*�,�,�,�,‘,‘,�,Ø!•%”-�/�/�/�/‘/‘/�/Ø"•%”.Ð"Ð"Ð"Ð"Ñ"Ð"Ð"Ø#•%”/Ð#Ð#Ð#Ð#Ñ#Ð#Ð#Ø"•%”.Ð"Ð"Ð"Ð"Ñ"Ð"Ð"Ø"•%”.Ð"Ð"Ð"Ð"Ñ"Ð"Ð"Ø#•%”/Ð#Ð#Ð#Ð#Ñ#Ð#Ð#Ø"•%”.Ð"Ð"Ð"Ð"Ñ"Ð"Ð"Ø•%”(�*�*�*�*‘*�*�*Ø!•%”-�/�/�/�/‘/�/�/Ø"•%”.Ð"Ð"Ð"Ð"Ñ"Ð"Ð"Ø)•%Ô'Ð)Ð)Ð)Ð)Ñ)Ð)Ð)Ø*•%Ô(Ð*Ð*Ð*Ð*Ñ*Ð*Ð*Ø&•%Ô$Ð&Ð&Ð&Ð&Ñ&Ð&Ð&Ø.•%Ô,Ð.Ð.Ð.Ð.Ñ.Ð.Ð.Ð.Ð.Ð.Ð.ð  §
¢
¨1¡¤Ñ-°Ñ5Ð5Ø!•”Ð!Ð!Ð!Ð!Ñ!Ð!ð
 —z’z !‘}”}Ð$ð "ð -•Ô*Ð,Ð,Ð,Ð,Ñ,Ð,Ø §
¢
¨1¡¤Ñ-Ð-ð -å”����‘Ø §
¢
¨1¡¤Ñ-Ð-ð àØ §
¢
¨1¡¤Ñ-°Ñ4Ð4r   c                 óœ  ‡ — |j         r‰                      |j         ¦  «        dz   nd}|j        r |d                     |j        ¦  «        dz   z  }|j        r |d                     |j        ¦  «        dz   z  }|j        r,|d                     ˆ fd„|j        D ¦   «         ¦  «        dz   z  }t          |j        t          j	        t          j
        t          j        t          j        f¦  «        r|‰                      |j        ¦  «        z  }nD|j        r |d                     |j        ¦  «        dz   z  }|‰                      |j        ¦  «        z  }|S )zGeneration from a Decl node.r   r   c              3   óB   •K  — | ]}‰                      |¦  «        V — Œd S r!   r"   )r#   rÓ   r   s     €r   r&   z,CGenerator._generate_decl.<locals>.<genexpr>À  s/   øè è € ÐAÐA°˜$Ÿ*š* UÑ+Ô+ÐAÐAÐAÐAÐAÐAr   )r2   r6   rÕ   r'   rÔ   rÓ   rP   rH   r   rÊ   rÇ   rÈ   rÉ   r¸   rÒ   Ú_generate_type_specifierr<   s   `  r   r¹   zCGenerator._generate_decl¸  sD  ø€ à=>¼\ÐQˆD×%Ò% a¤lÑ3Ô3°cÑ9Ð9ÈrˆØŒ:ð 	,Ø�—’˜!œ*Ñ%Ô%¨Ñ+Ñ+ˆAØŒ9ð 	+Ø�—’˜!œ)Ñ$Ô$ sÑ*Ñ*ˆAØŒ7ð 	HØ�—’ÐAÐAÐAÐA¸¼ÐAÑAÔAÑAÔAÀCÑGÑGˆAÝØŒF•U”^¥U¤]µE´OÅUÄ^ÐTñ
ô 
ð 		7ð �×$Ò$ Q¤VÑ,Ô,Ñ,ˆAˆAð Œwð -Ø�S—X’X˜aœgÑ&Ô&¨Ñ,Ñ,�Ø�×.Ò.¨q¬vÑ6Ô6Ñ6ˆAØˆr   c                 óp  — t          |t          j        ¦  «        rJ|                      |j        ¦  «                             ¦   «         dz   |                      |j        ¦  «        z   S t          |t          j        ¦  «        r$d|j	        v rd|  
                    |¦  «        z   dz   S |                      |¦  «        S )Nr   Ú_Atomicz_Atomic(r9   )rP   r   rË   r}  rH   rd  r6   r2   ÚTypenamerÒ   r   r¸   r,   s     r   r}  z#CGenerator._generate_type_specifierÍ  s­   € Ý�a�Ô-Ñ.Ô.ð 	à×-Ò-¨a¬fÑ5Ô5×<Ò<Ñ>Ô>Øñà×+Ò+¨A¬LÑ9Ô9ñ:ðõ
 �a�œÑ(Ô(ð 	4¨Y¸!¼'Ð-AÐ-Að  §
¢
¨1¡¤Ñ-°Ñ3Ð3Ø×"Ò" 1Ñ%Ô%Ð%r   TÚ	modifiersrì   rµ   c                 óÔ  — |€g }|xt           j        d˜ x��¢\    d}|rD|j        r |d                     |j        ¦  «        dz   z  }||                      |j        ¦  «        z  }|j        r	|r|j        nd}|j        r |d|                      |j        ¦  «        z   z  }t          |¦  «        D �]å\  }}|xt           j
        d˜ x�±\    |dk    r+t          ||dz
           t           j        ¦  «        rd|z   dz   }|d	z  }|j        r |d                     |j        ¦  «        dz   z  }|j        �||                      |j        ¦  «        z  }|d
z  }|j        r |d|                      |j        ¦  «        z   z  }ŒÈ xt           j        d˜ x�‹\    |dk    r+t          ||dz
           t           j        ¦  «        rd|z   dz   }|j        �|                      |j        ¦  «        nd}	|d|	z   dz   z  }|j        r |d|                      |j        ¦  «        z   z  }�Œd t           j        d˜ x�p\   d}
|j        r |
d|                      |j        ¦  «        z   z  }
|j        r |
dd                     |j        ¦  «        z   z  }
|r|j        s|j        rdnd}|
|z   |z   }�Œä �Œç|s|S |r |                     ¦   «         }||rdnd|z   z  }|S  xt           j        d˜ x�\    |                      |j        ¦  «        S  xt           j        d˜ x�I\    |j        r|                      |j        ¦  «        dz   nd}
|
|                      |j        ||¬¦  «        z   S  xt           j        d˜ x� \    d                     |j        ¦  «        dz   S  xt           j
        d˜ x�\   n+ xt           j        d˜ x�\   n xt           j        d˜ x�\   n  n# |                      |j        ||gz   ||¬¦  «        S 	 |                      |¦  «        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.
        Nr£   r   r   r   r   r8   r9   rV   rY   r„   )rì   rµ   )r   rÊ   rÒ   r'   r   rH   Údeclnamer2   r6   Ú	enumeraterÈ   rP   rÇ   Ú	dim_qualsÚdimr[   rÉ   rd   rd  rÅ   r¹   r€  r¸   ÚIdentifierTyper    )r   r)   r�  rì   rµ   r=   ÚnstrÚiÚmodifierrd   ÚprefixÚ	separators               r   r¸   zCGenerator._generate_typeÚ  s   € ð ÐØˆIð Ø!•”Ð!Ð!Ð!Ñ!Ñ!Ð!Ø�Ø!ð ,Ø”wð 5Ø˜SŸXšX a¤gÑ.Ô.°Ñ4Ñ4˜Ø˜Ÿš A¤FÑ+Ô+Ñ+�Aà%&¤ZÐI°MÐI�q”z�zÀr�Ø”<ð JØ˜C $×";Ò";¸A¼LÑ"IÔ"IÑIÑI�Dõ
 $-¨YÑ#7Ô#7ð )=ñ )=‘K�A�xØ"Ø.�Uœ_Ð.Ð.Ð.Ð.Ñ.Ð.Ø  Ašv˜v­*°Y¸qÀ1¹uÔ5EÅuÄ}Ñ*UÔ*U˜vØ'*¨T¡z°CÑ'7 Ø  C™K˜DØ'Ô1ð KØ $¨¯ª°Ô1CÑ(DÔ(DÀsÑ(JÑ J Ø'œ|Ð7Ø $¨×(8Ò(8¸¼Ñ(FÔ(FÑ F Ø  C™K˜DØ'Ô2ð "Ø $¨¨d×.GÒ.GØ$,Ô$7ñ/"ô /"ñ )"ñ !" øð /ð .�Uœ^Ð-Ð-Ð-Ð-Ñ-Ð-Ø  Ašv˜v­*°Y¸qÀ1¹uÔ5EÅuÄ}Ñ*UÔ*U˜vØ'*¨T¡z°CÑ'7 ð $,¤=Ð#<ð !%§
¢
¨8¬=Ñ 9Ô 9Ð 9à%'ð !ð
 ! C¨$¡J°Ñ$4Ñ4˜DØ'Ô2ð "Ø $¨¨d×.GÒ.GØ$,Ô$7ñ/"ô /"ñ )"ñ !" ùð .õ #œ]˜_˜_˜_˜_™_Ø%(˜FØ'Ô2ð "Ø &¨#°×0IÒ0IØ$,Ô$7ñ1"ô 1"ñ +"ñ !" ð  (œ~ð IØ &¨#°·²¸¼Ñ0HÔ0HÑ*HÑ H ð $(ð!(Ø-5Ô-@ð!(ØDLÄNð!(  à%'ð &ð
 $*¨IÑ#5¸Ñ#<˜D™Dð -™_ð &ð  Ø�KØð 3ØŸš™
œ
�AØ Ð*˜#˜#¨¨dÑ2Ñ2�AØ�ð{ "ð| •”����‘�Ø×*Ò*¨1¬6Ñ2Ô2Ð2ð à!•”Ð!Ð!Ð!Ð!Ñ!Ð!ð ”|ð�D×-Ò-¨a¬lÑ;Ô;¸cÑAÐAàð ð
  × 3Ò 3Ø”FØ"/Ø#1ð !4ñ !ô !ñ ð ð "ð (•Ô%Ð'Ð'Ð'Ð'Ñ'Ð'Ø—x’x ¤Ñ(Ô(¨3Ñ.Ð.ð (à"•”Ð"Ð"Ð"Ð"Ñ"Ð"Ð" _¥U¤] _ _ _ _¡_ _ _Ð7Gµu´~Ð7GÐ7GÐ7GÐ7GÑ7GÐ7GÐ7GÐ7GÐ7GÐ7GØ×*Ò*Ø”FØ  ‘OØ"/Ø#1ð	 +ñ ô ð ð Ø—z’z !‘}”}Ð$r   Ú	conditionc                 óV   — |                       |¦  «        } ||¦  «        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.
        r8   r9   )r[   )r   r)   r�  r=   s       r   r“   zCGenerator._parenthesize_ifD  s:   € ð ×Ò˜QÑÔˆØˆ9�Q‰<Œ<ð 	Ø˜‘7˜S‘=Ð àˆHr   c                 ó6   ‡ — ‰                       |ˆ fd„¦  «        S )z$Common use case for _parenthesize_ifc                 ó0   •— ‰                      | ¦  «         S r!   )rŒ   )r�   r   s    €r   r‘   z8CGenerator._parenthesize_unless_simple.<locals>.<lambda>R  s   ø€ °d×6JÒ6JÈ1Ñ6MÔ6MÐ2M€ r   )r“   r,   s   ` r   rZ   z&CGenerator._parenthesize_unless_simpleP  s#   ø€ à×$Ò$ QÐ(MÐ(MÐ(MÐ(MÑNÔ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.
        )rP   r   rR   rS  rs  rt  rr  rv  r,   s     r   rŒ   zCGenerator._is_simple_nodeT  s=   € õ Øå”Ý”Ý”Ý”Ý”ÝÔ&ðñ

ô 

ð 
	
r   )F)NTT)™r   Ú
__module__Ú__qualname__Ú__doc__ÚintÚ__annotations__Úboolr   Ústrr   r   ÚNoder   r   rR   r-   rS  r1   rÛ   ÚAttributeSpecifierr6   Ú	Attributer>   rD   rx  rF   rË   rI   ry  rN   rÁ   rT   rs  r^   rt  rb   rr  rf   rv  rk   ÚGenericAssociationrp   r�   ru   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é   rp  rî   r°   rõ   r¯   rø   rý   ÚAlignasr   Ú
Enumeratorr  r  r	  ÚFileASTr  r±   r  ru  r  ÚEmptyStatementr  Ú	ParamListr  ÚReturnr  ÚBreakr!  ÚContinuer#  rq  r(  rz  r-  ÚForr0  ÚWhiler3  ÚDoWhiler5  rw  r8  ÚSwitchr:  ÚCaser>  ÚDefaultr@  ÚLabelrB  ÚGotorD  ÚEllipsisParamrF  rI  r€  rK  rN  ÚArrayDesignatorrP  ÚNamedInitializerrT  rÉ   rW  rÈ   rZ  rÊ   r]  rÇ   r_  rü   r  rb  rK   r¹   r}  r¸   r   r“   rZ   rŒ   r£   r   r   r   r      sÖ  € € € € € € ðð ð
 ÐÐÑØÐÐÑð	5ð 	5¨4ð 	5¸Dð 	5ð 	5ð 	5ð 	5ð'˜cð 'ð 'ð 'ð 'ð?˜%œ*ð ?¨ð ?ð ?ð ?ð ?ðK %¤*¨tÑ"3ð K¸ð Kð Kð Kð Kð ¤ð °3ð ð ð ð ð˜%œ(ð  sð ð ð ð ðK¨t°EÔ4LÔ/Mð KÐRUð Kð Kð Kð Kð ¤ð °Sð ð ð ð ðL¨%Ô*Bð LÀsð Lð Lð Lð Lð7¨EÔ,Fð 7È3ð 7ð 7ð 7ð 7ðR eÔ&:ð R¸sð Rð Rð Rð Rð
¨5Ô+Dð 
Èð 
ð 
ð 
ð 
ð˜eœlð ¨sð ð ð ð ðT ¤ð T°3ð Tð Tð Tð Tð3 ¤ð 3°Sð 3ð 3ð 3ð 3ð' ¤ð '°3ð 'ð 'ð 'ð 'ð3¨Ô(>ð 3À3ð 3ð 3ð 3ð 3ð4¨%Ô*Bð 4Àsð 4ð 4ð 4ð 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ð 0€N�H˜T # s (œ^Ô,ð ð ñ ð../ ¤ð ./°3ð ./ð ./ð ./ð ./ð`A %Ô"2ð A°sð Að Að Að Að! eÔ&:ð !¸sð !ð !ð !ð !ð EÔ$6ð ¸3ð ð ð ð ð5˜eœlð 5¨sð 5ð 5ð 5ð 5ð= %Ô"2ð =°sð =ð =ð =ð =ð AFð %ð %ð %˜UœZð %¸ð %È#ð %ð %ð %ð %ð"ð ˜EœJð °ð À#ð ð ð ð ð ¤ð °3ð ð ð ð ðØ”ðà	Œ˜œÑ	# e¤jÑ	0°4Ñ	7ðð ð ð ð> U¤Zð ¸¼
ð Àtð ð ð ð ð*Ø˜%œ*Ô%ðà	ˆeŒj˜4 ¤
Ô+Ñ+Ô	,ðð ð ð ðB1 t¨E¬JÔ'7ð 1¸Cð 1ð 1ð 1ð 1ð,˜uœ}ð °ð ð ð ð ðB˜EœJð B¨3ð Bð Bð Bð Bð+ ¤ð +°3ð +ð +ð +ð +ð+ ¤ð +°3ð +ð +ð +ð +ð@˜EœJð @¨3ð @ð @ð @ð @ð<˜uœ}ð <°ð <ð <ð <ð <ðS %Ô"2ð S°sð Sð Sð Sð Sð-˜uœ}ð -°ð -ð -ð -ð -ð˜uœ}ð °ð ð ð ð ð ¤ð °3ð ð ð ð ðT uÔ'<ð TÀð Tð Tð Tð Tð eÔ&:ð ¸sð ð ð ð ðB ¤ð B°Sð Bð Bð Bð Bð˜eœlð ¨sð ð ð ð ð˜Uœ[ð ¨Sð ð ð ð ð ¤ð °3ð ð ð ð ð ¤ð °Sð ð ð ð ð	˜%œ(ð 	 sð 	ð 	ð 	ð 	ð˜5œ9ð ¨ð ð ð ð ð˜Uœ[ð ¨Sð ð ð ð ð˜uœ}ð °ð ð ð ð ð EÔ$6ð ¸3ð ð ð ð ð˜eœlð ¨sð ð ð ð ð
G˜EœJð G¨3ð Gð Gð Gð Gð
G˜uœ}ð G°ð Gð Gð Gð Gð
@˜Uœ[ð @¨Sð @ð @ð @ð @ð&˜EœJð &¨3ð &ð &ð &ð &ð UÔ%8ð ¸Sð ð ð ð ð=˜eœlð =¨sð =ð =ð =ð =ð/ ¤ð /°3ð /ð /ð /ð /ð<˜Uœ[ð <¨Sð <ð <ð <ð <ð4 uÔ'<ð 4Àð 4ð 4ð 4ð 4ð¨Ô(>ð À3ð ð ð ð ð& ¤ð &°3ð &ð &ð &ð &ð; ¤ð ;°Sð ;ð ;ð ;ð ;ð; ¤ð ;°3ð ;ð ;ð ;ð ;ð;˜uœ}ð ;°ð ;ð ;ð ;ð ;ðØ” ¤Ñ+¨e¬jÑ8ðØ@Cðà	ðð ð ð ðBð  D¨¬Ô$4ð À$ð ÐSVð ð ð ð ð"Ø˜EÔ,¨u¬|Ñ;Ô<ðà	ðð ð ð ð"-5ð -5 ¤
ð -5¸ð -5Èð -5ð -5ð -5ð -5ð^ ¤
ð ¨sð ð ð ð ð*&¨%¬*ð &¸ð &ð &ð &ð &ð  .2Ø"Ø#ðh%ð h%àŒ:ðh%ð ˜œ
Ô# dÑ*ðh%ð ð	h%ð
 ðh%ð 
ðh%ð h%ð h%ð h%ðT
Ø”ð
Ø(0°%´*°¸tÐ1CÔ(Dð
à	ð
ð 
ð 
ð 
ðO¨U¬Zð O¸Cð Oð Oð Oð Oð
 ¤ð 
°ð 
ð 
ð 
ð 
ð 
ð 
r   r   N)Úcollections.abcr   Útypingr   r   r   r   r£   r   r   ú<module>r¶     sy   ðð %Ð $Ð $Ð $Ð $Ð $Ø Ð Ð Ð Ð Ð à Ð Ð Ð Ð Ð ðS
ð S
ð S
ð S
ð S
ñ S
ô S
ð S
ð S
ð S
r   