Ë
    ªÌj�V  ã                   ó<   — d dl mZ d dlmZ ddlmZ  G d„ d«      Zy)é    )ÚCallable)ÚClassVaré   )Úc_astc                   ó6
  — e Zd ZU dZeed<   eed<   dmd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
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i dd“dd“dd“dd“dd“dd “d!d “d"d#“d$d#“d%d#“d&d#“d'd(“d)d(“d*d+“d,d+“d-d.“d/d.“d0d.i¥Z e!e"eef      ed1<   de
jF                  defd2„Z$de
jJ                  defd3„Z&de
jN                  defd4„Z(de
j                  defd5„Z)dmde
jT                  d6edefd7„Z+de
jX                  defd8„Z-de
j\                  defd9„Z/de
j`                  defd:„Z1de
jd                  defd;„Z3de
jh                  defd<„Z5de
jl                  defd=„Z7de
jp                  defd>„Z9de
jt                  defd?„Z;de
jx                  defd@„Z=de
j|                  defdA„Z?de
j€                  defdB„ZAde
j„                  defdC„ZCde
jˆ                  defdD„ZEde
jŒ                  defdE„ZGde
j�                  defdF„ZIde
j”                  defdG„ZKde
j˜                  defdH„ZMde
jœ                  defdI„ZOde
j                   defdJ„ZQde
j¤                  defdK„ZSde
j¨                  defdL„ZUde
j¬                  defdM„ZWde
j°                  defdN„ZYd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À                  defdR„Zade
jÄ                  defdS„Zcde
jÈ                  defdT„Zede
jÌ                  defdU„Zgde
jÐ                  defdV„Zide
jÔ                  defdW„Zkde
jØ                  defdX„Zmde
jÜ                  defdY„Zode
jà                  defdZ„Zqde
jä                  defd[„Zsde
jè                  defd\„Zude
jÌ                  e
jÔ                  z  e
jl                  z  d]edefd^„Zvd_ewe
j                     defd`„Zxd_ewe
jt                     defda„Zydmde
j                  dbedefdc„Zzde
jT                  defdd„Z{	 	 	 dnde
j                  deewe
j                     dz  dfedgedef
dh„Z|de
j                  die}e
j                  gef   defdj„Z~de
j                  defdk„Zde
j                  defdl„Z€y)oÚ
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_parenthesesÚreturnNc                 ó    — d| _         || _        y)zŠConstructs C-code generator

        reduce_parentheses:
            if True, eliminates needless parentheses on binary operators
        r   N)r	   r
   )Úselfr
   s     úR/var/www/photos/backend/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   c                 óF   — d}|j                   r|d|j                   z   z  }|S )Nz#pragmar   )Ústring)r   r)   Úrets      r   Úvisit_PragmazCGenerator.visit_Pragma6   s%   € ØˆØ�8Š8Ø�3˜Ÿ™‘>Ñ!ˆCØˆ
r   c                 ó€   — | j                  |j                  «      }|dz   | j                  |j                  «      z   dz   S )Nú[ú])Ú_parenthesize_unless_simpler0   r   Ú	subscript)r   r)   Úarrrefs      r   Úvisit_ArrayRefzCGenerator.visit_ArrayRef<   s7   € Ø×1Ñ1°!·&±&Ó9ˆØ˜‰|˜dŸj™j¨¯©Ó5Ñ5¸Ñ;Ð;r   c                 óŽ   — | j                  |j                  «      }||j                  z   | j                  |j                  «      z   S r!   )r9   r0   Útyper   Ú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   r0   Úargsr   )r   r)   ÚfrefrE   s       r   Úvisit_FuncCallzCGenerator.visit_FuncCallD   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 )Nú, c              3   ó@   •K  — | ]  }‰j                  |«      –— Œ y ­wr!   r"   )r#   Úar   s     €r   r&   z4CGenerator.visit_GenericSelection.<locals>.<genexpr>M   s   øè ø€ Ò G°1 §¡¨A§Ñ Gùó   ƒz	_Generic(rD   )Ú_visit_exprÚexprr'   Úassociations)r   r)   rN   rO   s   `   r   Úvisit_GenericSelectionz!CGenerator.visit_GenericSelectionI   sF   ø€ ð ×Ñ §¡Ó'ˆØ—y‘yÓ G¸¿¹Ô GÓGˆØ˜4˜&  < .°Ð2Ð2r   c                 ó”   — |j                   �| j                  |j                   «      nd}|› d| j                  |j                  «      › �S )NÚdefaultz: )r>   r   rM   rN   )r   r)   Útyps      r   Úvisit_GenericAssociationz#CGenerator.visit_GenericAssociationP   s@   € Ø$%§F¡FÐ$6ˆd�j‰j˜Ÿ™Ô ¸IˆØ��b˜×)Ñ)¨!¯&©&Ó1Ð2Ð3Ð3r   c                 óN  — |j                   xdk(  r  d| j                  |j                  «      › d�S xdk(  r! | j                  |j                  «      }|› d�S dk(  r | j                  |j                  «      }|› d�S 	 | j                  |j                  «      }|j                   › |› �S )NÚsizeofzsizeof(rD   zp++z++zp--z--)Úopr   rN   r9   )r   r)   Úoperands      r   Úvisit_UnaryOpzCGenerator.visit_UnaryOpT   s›   € Ø�d‰dÝð ! §¡¨A¯F©FÓ!3Ð 4°AÐ6Ð6ÝØ×:Ñ:¸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s] ‰j                  xrO t        | t        j                  «      xr3 ‰j
                  | j                     ‰j
                  ‰j                     k\   S r!   ©Ú_is_simple_noder
   Ú
isinstancer   ÚBinaryOprl   rW   ©Údr)   r   s    €€r   ú<lambda>z+CGenerator.visit_BinaryOp.<locals>.<lambda>ˆ   sj   ø€ à×(Ñ(¨Ó+ò OØ×.Ñ.ò OÜ" 1¤e§n¡nÓ5òOà×+Ñ+¨A¯D©DÑ1°T×5HÑ5HÈÏÉÑ5NÑNð	ð r   c                 óæ   •— ‰j                  | «      xs] ‰j                  xrO t        | t        j                  «      xr3 ‰j
                  | j                     ‰j
                  ‰j                     kD   S r!   ro   rs   s    €€r   ru   z+CGenerator.visit_BinaryOp.<locals>.<lambda>š   sj   ø€ à×(Ñ(¨Ó+ò NØ×.Ñ.ò NÜ" 1¤e§n¡nÓ5òNà×+Ñ+¨A¯D©DÑ1°D×4GÑ4GÈÏÉÑ4MÑMð	ð r   r   )Ú_parenthesize_ifÚleftÚrightrW   )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   ru   z-CGenerator.visit_Assignment.<locals>.<lambda>§   s   € ¤
¨1¬e×.>Ñ.>Ó ?€ r   r   )rw   Úrvaluer   ÚlvaluerW   )r   r)   r{   s      r   Úvisit_AssignmentzCGenerator.visit_Assignment¥   sG   € Ø×(Ñ(Ø�H‰HÑ?ó
ˆð —*‘*˜QŸX™XÓ&Ð' q¨¯©¨¨a°¨zÐ:Ð:r   c                 ó8   — dj                  |j                  «      S r   )r'   Únamesr,   s     r   Úvisit_IdentifierTypezCGenerator.visit_IdentifierType«   s   € Ø�x‰x˜Ÿ™Ó Ð r   c                 ó  — |xt         j                  d˜ x�\    d| j                  |«      z   dz   S  xt         j                  d˜ x�\   n xt         j                  d˜ x�\   n  n d| j                  |«      z   dz   S 	 | j                  |«      S )N© ú{ú}rC   rD   )r   ÚInitListr   ÚExprListÚCompoundr,   s     r   rM   zCGenerator._visit_expr®   sr   € ØØ!”—‘Ö!Ø˜TŸZ™Z¨›]Ñ*¨SÑ0Ð0ð "à!”—‘×!Ð$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_typez : ú = )Ú_generate_typer>   Ú_generate_declÚbitsizer   ÚinitrM   )r   r)   r�   Úss       r   Ú
visit_DeclzCGenerator.visit_Decl·   s‚   € ñ
 ð ×Ñ §¡°uÐÔ=à×$Ñ$ QÓ'ð 	
ð
 �9Š9Ø�˜Ÿ™ A§I¡IÓ.Ñ.Ñ.ˆAØ�6Š6Ø�˜×)Ñ)¨!¯&©&Ó1Ñ1Ñ1ˆAØˆr   c                 óÎ   ‡ — ‰ j                  |j                  d   «      }t        |j                  «      dkD  r-|ddj                  ˆ fd„|j                  dd  D «       «      z   z  }|S )Nr   r   rI   c              3   óD   •K  — | ]  }‰j                  |d ¬«      –— Œ y­w)T)r�   N)r–   ©r#   Údeclr   s     €r   r&   z,CGenerator.visit_DeclList.<locals>.<genexpr>È   s#   øè ø€ ò "Ø8<�—‘ ¨d�×3ñ"ùs   ƒ )r   ÚdeclsÚlenr'   ©r   r)   r•   s   `  r   Úvisit_DeclListzCGenerator.visit_DeclListÅ   sc   ø€ Ø�J‰J�q—w‘w˜q‘zÓ"ˆÜˆq�w‰w‹<˜!ÒØ�˜Ÿ	™	ó "Ø@AÇÁÈÈÀô"ó ñ ñ ˆAð ˆr   c                 ó    — d}|j                   r!|dj                  |j                   «      dz   z  }|| j                  |j                  «      z  }|S )Nr   r   )Ústorager'   r‘   r>   r�   s      r   Úvisit_TypedefzCGenerator.visit_TypedefÍ   sH   € ØˆØ�9Š9Ø�—‘˜!Ÿ)™)Ó$ sÑ*Ñ*ˆAØ	ˆT× Ñ  §¡Ó(Ñ(ˆØˆr   c                 óŠ   — d| j                  |j                  d¬«      z   dz   }|dz   | j                  |j                  «      z   S )NrC   F©Úemit_declnamerD   r   )r‘   Úto_typer9   rN   r�   s      r   Ú
visit_CastzCGenerator.visit_CastÔ   sC   € Ø�$×%Ñ% a§i¡i¸uÐ%ÓEÑEÈÑKˆØ�3‰w˜×9Ñ9¸!¿&¹&ÓAÑAÐAr   c                 óŠ   — g }|j                   D ]"  }|j                  | j                  |«      «       Œ$ dj                  |«      S ©NrI   ©ÚexprsÚappendrM   r'   ©r   r)   Úvisited_subexprsrN   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(rD   )r   Ú	alignmentr,   s     r   Úvisit_AlignaszCGenerator.visit_Alignasç   s   € Ø˜4Ÿ:™: a§k¡kÓ2Ð3°1Ð5Ð5r   c                 óÎ   — |j                   s| j                  «       › |j                  › d�S | j                  «       › |j                  › d| j                  |j                   «      › d�S )Nz,
r�   )r+   r   r0   r   r,   s     r   Úvisit_EnumeratorzCGenerator.visit_Enumeratorê   s[   € Ø�wŠwØ×'Ñ'Ó)Ð*¨1¯6©6¨(°#Ð6Ð6à×'Ñ'Ó)Ð*¨1¯6©6¨(°#°d·j±jÀÇÁÓ6IÐ5JÈ#ÐNÐNr   c                 ó  ‡ — ‰ j                  |j                  «      }d‰ _        ‰ j                  |j                  «      }|j                  r5dj                  ˆ fd„|j                  D «       «      }|dz   |z   dz   |z   dz   S |dz   |z   dz   S )Nr   ú;
c              3   ó@   •K  — | ]  }‰j                  |«      –— Œ y ­wr!   r"   )r#   Úpr   s     €r   r&   z+CGenerator.visit_FuncDef.<locals>.<genexpr>õ   s   øè ø€ Ò!G°A $§*¡*¨Q§-Ñ!GùrL   ú
)r   rš   r	   ÚbodyÚparam_declsr'   )r   r)   rš   rÁ   Úknrdeclss   `    r   Úvisit_FuncDefzCGenerator.visit_FuncDefð   s€   ø€ Ø�z‰z˜!Ÿ&™&Ó!ˆØˆÔØ�z‰z˜!Ÿ&™&Ó!ˆØ�=Š=Ø—z‘zÓ!G¸¿¹Ô!GÓGˆHØ˜$‘; Ñ)¨EÑ1°DÑ8¸4Ñ?Ð?à˜$‘; Ñ%¨Ñ,Ð,r   c                 ó  — d}|j                   D ]v  }|xt        j                  d˜ x�\    || j                  |«      z  }Œ0 t        j                  d˜ x�\   || j                  |«      dz   z  }Œ^ 	 || j                  |«      dz   z  }Œx |S )Nr   r‡   rÀ   r½   )Úextr   ÚFuncDefr   ÚPragma)r   r)   r•   rÆ   s       r   Úvisit_FileASTzCGenerator.visit_FileASTú   s…   € ØˆØ—5‘5ò 	1ˆCØØ$”U—]‘]–_Ø˜Ÿ™ C›Ñ(‘Að %ä—\‘\•^Ø˜Ÿ™ C›¨4Ñ/Ñ/‘Að $àØ˜Ÿ™ C›¨5Ñ0Ñ0‘Að	1ð ˆr   c                 ó  ‡ — ‰ j                  «       dz   }‰ xj                  dz  c_        |j                  r'|dj                  ˆ fd„|j                  D «       «      z  }‰ xj                  dz  c_        |‰ j                  «       dz   z  }|S )Nú{
r[   r   c              3   ó@   •K  — | ]  }‰j                  |«      –— Œ y ­wr!   ©Ú_generate_stmt)r#   Ústmtr   s     €r   r&   z,CGenerator.visit_Compound.<locals>.<genexpr>
  s   øè ø€ ÒM°t˜×,Ñ,¨T×2ÑMùrL   z}
)r   r	   Úblock_itemsr'   r�   s   `  r   Úvisit_CompoundzCGenerator.visit_Compound  sy   ø€ Ø×ÑÓ %Ñ'ˆØ×Ò˜QÑÕØ�=Š=Ø�—‘ÓM¸q¿}¹}ÔMÓMÑMˆAØ×Ò˜QÑÕØ	ˆT×ÑÓ  5Ñ(Ñ(ˆØˆr   c                 ó‚   — d| j                  |j                  «      z   dz   | j                  |j                  «      z   dz   S )NrC   z){r‰   )r   r>   r”   r,   s     r   Úvisit_CompoundLiteralz CGenerator.visit_CompoundLiteral  s6   € Ø�T—Z‘Z §¡Ó'Ñ'¨$Ñ.°·±¸A¿F¹FÓ1CÑCÀcÑIÐIr   c                  ó   — y)Nú;r‡   r,   s     r   Úvisit_EmptyStatementzCGenerator.visit_EmptyStatement  s   € Ør   c                 óL   ‡ — dj                  ˆ fd„|j                  D «       «      S )NrI   c              3   ó@   •K  — | ]  }‰j                  |«      –— Œ y ­wr!   r"   )r#   Úparamr   s     €r   r&   z-CGenerator.visit_ParamList.<locals>.<genexpr>  s   øè ø€ ÒA¨u˜Ÿ™ E×*ÑAùrL   )r'   Úparamsr,   s   ` r   Úvisit_ParamListzCGenerator.visit_ParamList  s   ø€ Ø�y‰yÓA¸¿¹ÔAÓAÐAr   c                 ój   — d}|j                   r!|d| j                  |j                   «      z   z  }|dz   S )Nr   r   rÕ   )rN   r   r�   s      r   Úvisit_ReturnzCGenerator.visit_Return  s3   € ØˆØ�6Š6Ø��t—z‘z !§&¡&Ó)Ñ)Ñ)ˆ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 )NrC   z) ? z) : rD   )rM   Ú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                 ó,  — d}|j                   r|| j                  |j                   «      z  }|dz  }|| j                  |j                  d¬«      z  }|j                  r6|| j                  «       dz   z  }|| j                  |j                  d¬«      z  }|S )Nzif (ú)
T©Ú
add_indentzelse
)rã   r   rÎ   rä   rå   r   r�   s      r   Úvisit_IfzCGenerator.visit_If*  sŽ   € ØˆØ�6Š6Ø�—‘˜AŸF™FÓ#Ñ#ˆAØ	ˆU‰
ˆØ	ˆT× Ñ  §¡°dÐ Ó;Ñ;ˆØ�9Š9Ø�×"Ñ"Ó$ xÑ/Ñ/ˆAØ�×$Ñ$ Q§Y¡Y¸4Ð$Ó@Ñ@ˆAØˆr   c                 óp  — d}|j                   r|| j                  |j                   «      z  }|dz  }|j                  r!|d| j                  |j                  «      z   z  }|dz  }|j                  r!|d| j                  |j                  «      z   z  }|dz  }|| j	                  |j
                  d¬«      z  }|S )Nzfor (rÕ   r   rè   Tré   )r”   r   rã   ÚnextrÎ   rÏ   r�   s      r   Ú	visit_ForzCGenerator.visit_For5  s©   € ØˆØ�6Š6Ø�—‘˜AŸF™FÓ#Ñ#ˆAØ	ˆS‰ˆØ�6Š6Ø��t—z‘z !§&¡&Ó)Ñ)Ñ)ˆAØ	ˆS‰ˆØ�6Š6Ø��t—z‘z !§&¡&Ó)Ñ)Ñ)ˆAØ	ˆU‰
ˆØ	ˆT× Ñ  §¡°DÐ Ó9Ñ9ˆØˆr   c                 ó¨   — d}|j                   r|| j                  |j                   «      z  }|dz  }|| j                  |j                  d¬«      z  }|S )Núwhile (rè   Tré   )rã   r   rÎ   rÏ   r�   s      r   Úvisit_WhilezCGenerator.visit_WhileC  sQ   € ØˆØ�6Š6Ø�—‘˜AŸF™FÓ#Ñ#ˆAØ	ˆU‰
ˆØ	ˆT× Ñ  §¡°DÐ Ó9Ñ9ˆØˆr   c                 óÔ   — d}|| j                  |j                  d¬«      z  }|| j                  «       dz   z  }|j                  r|| j	                  |j                  «      z  }|dz  }|S )Nzdo
Tré   rð   z);)rÎ   rÏ   r   rã   r   r�   s      r   Úvisit_DoWhilezCGenerator.visit_DoWhileK  si   € ØˆØ	ˆT× Ñ  §¡°DÐ Ó9Ñ9ˆØ	ˆT×ÑÓ  9Ñ,Ñ,ˆØ�6Š6Ø�—‘˜AŸF™FÓ#Ñ#ˆAØ	ˆT‰	ˆØˆr   c                 ó®   — d}|| j                  |j                  «      z  }|j                  r#|dz  }|| j                  |j                  «      z  }|dz  }|S )Nz_Static_assert(rI   rD   )r   rã   Úmessager�   s      r   Úvisit_StaticAssertzCGenerator.visit_StaticAssertT  sS   € ØˆØ	ˆT�Z‰Z˜Ÿ™ÓÑˆØ�9Š9Ø�‰IˆAØ�—‘˜AŸI™IÓ&Ñ&ˆAØ	ˆS‰ˆØˆr   c                 óˆ   — d| j                  |j                  «      z   dz   }|| j                  |j                  d¬«      z  }|S )Nzswitch (rè   Tré   )r   rã   rÎ   rÏ   r�   s      r   Úvisit_SwitchzCGenerator.visit_Switch]  sA   € Ø˜Ÿ™ A§F¡FÓ+Ñ+¨eÑ3ˆØ	ˆT× Ñ  §¡°DÐ Ó9Ñ9ˆØˆr   c                 ó–   — d| j                  |j                  «      z   dz   }|j                  D ]  }|| j                  |d¬«      z  }Œ |S )Nzcase ú:
Tré   )r   rN   ÚstmtsrÎ   ©r   r)   r•   rÏ   s       r   Ú
visit_CasezCGenerator.visit_Caseb  sP   € Ø�d—j‘j §¡Ó(Ñ(¨5Ñ0ˆØ—G‘Gò 	<ˆDØ�×$Ñ$ T°dÐ$Ó;Ñ;‰Að	<àˆr   c                 óX   — d}|j                   D ]  }|| j                  |d¬«      z  }Œ |S )Nz	default:
Tré   )rû   rÎ   rü   s       r   Úvisit_DefaultzCGenerator.visit_Defaulth  s9   € ØˆØ—G‘Gò 	<ˆDØ�×$Ñ$ T°dÐ$Ó;Ñ;‰Að	<àˆr   c                 óX   — |j                   dz   | j                  |j                  «      z   S )Nrú   )r0   rÎ   rÏ   r,   s     r   Úvisit_LabelzCGenerator.visit_Labeln  s$   € Ø�v‰v˜‰~ × 3Ñ 3°A·F±FÓ ;Ñ;Ð;r   c                 ó&   — d|j                   z   dz   S )Nzgoto rÕ   r/   r,   s     r   Ú
visit_GotozCGenerator.visit_Gotoq  s   € Ø˜Ÿ™Ñ #Ñ%Ð%r   c                  ó   — y)Nz...r‡   r,   s     r   Úvisit_EllipsisParamzCGenerator.visit_EllipsisParamt  s   € Ør   c                 ó&   — | j                  |d«      S )NÚstructr´   r,   s     r   Úvisit_StructzCGenerator.visit_Structw  s   € Ø×/Ñ/°°8Ó<Ð<r   c                 ó8   — | j                  |j                  «      S r!   )r‘   r>   r,   s     r   Úvisit_TypenamezCGenerator.visit_Typenamez  s   € Ø×"Ñ" 1§6¡6Ó*Ð*r   c                 ó&   — | j                  |d«      S )NÚunionr´   r,   s     r   Úvisit_UnionzCGenerator.visit_Union}  s   € Ø×/Ñ/°°7Ó;Ð;r   c                 óü   — d}|j                   D ]I  }t        |t        j                  «      r|d|j                   z   z  }Œ0|d| j	                  |«      z   dz   z  }ŒK |d| j                  |j                  «      z   z  }|S )Nr   ú.r7   r8   r�   )r0   rq   r   ÚIDr   rM   rN   )r   r)   r•   r0   s       r   Úvisit_NamedInitializerz!CGenerator.visit_NamedInitializer€  s|   € ØˆØ—F‘Fò 	2ˆDÜ˜$¤§¡Ô)Ø�S˜4Ÿ9™9‘_Ñ$‘à�S˜4Ÿ:™: dÓ+Ñ+¨cÑ1Ñ1‘ð		2ð
 	
ˆ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£   r  r,   s     r   Úvisit_ArrayDeclzCGenerator.visit_ArrayDecl�  ó   € Ø×"Ñ" 1°EÐ"Ó:Ð:r   c                 ó(   — | j                  |d¬«      S r  r  r,   s     r   Úvisit_TypeDeclzCGenerator.visit_TypeDecl�  r  r   c                 ó(   — | j                  |d¬«      S r  r  r,   s     r   Úvisit_PtrDeclzCGenerator.visit_PtrDecl“  r  r   r0   c                 ó>  — |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                  }|dz   |j                  xs d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'.
        )r  r  r³   Nr   r   rÀ   r[   rË   r‰   )rq   r   ÚStructÚUnionr›   Ú_generate_struct_union_bodyÚEnumÚvaluesÚenumeratorsÚ_generate_enum_bodyr0   r   r	   )r   r)   r0   ÚmembersÚbody_functionr•   s         r   rµ   z&CGenerator._generate_struct_union_enum–  s  € ð Ð&Ñ&Ü˜a¤%§,¡,´·±Ð!<Ô=Ð=Ð=Ø—g‘gˆGØ ×<Ñ<‰Mà˜6’>Ð!�>Ü˜a¤§¡Ô,Ð,Ð,ØŸh™hÐ.‘d°A·H±H×4HÑ4HˆGØ ×4Ñ4ˆMØ�3‰J˜!Ÿ&™&š, BÑ'ˆØÐð �‰IˆAØ�×"Ñ"Ó$Ñ$ˆAØ×Ò Ñ"ÕØ�‰JˆAØ‘˜wÓ'Ñ'ˆAØ×Ò Ñ"ÕØ�×"Ñ"Ó$ sÑ*Ñ*ˆAØˆr   r%  c                 ó8   ‡ — dj                  ˆ fd„|D «       «      S )Nr   c              3   ó@   •K  — | ]  }‰j                  |«      –— Œ y ­wr!   rÍ   r™   s     €r   r&   z9CGenerator._generate_struct_union_body.<locals>.<genexpr>³  s   øè ø€ ÒE°T�t×*Ñ*¨4×0ÑEùrL   ©r'   ©r   r%  s   ` r   r   z&CGenerator._generate_struct_union_body²  s   ø€ Ø�w‰wÓE¸WÔEÓEÐEr   c                 óD   ‡ — dj                  ˆ fd„|D «       «      d d dz   S )Nr   c              3   ó@   •K  — | ]  }‰j                  |«      –— Œ y ­wr!   r"   )r#   r+   r   s     €r   r&   z1CGenerator._generate_enum_body.<locals>.<genexpr>·  s   øè ø€ Ò>¨U�t—z‘z %×(Ñ>ùrL   éþÿÿÿrÀ   r)  r*  s   ` r   r$  zCGenerator._generate_enum_bodyµ  s$   ø€ à�w‰wÓ>°gÔ>Ó>¸sÀÐCÀdÑJÐJr   rê   c                 ó˜  — |r| xj                   dz  c_         | j                  «       }|r| xj                   dz  c_         |x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  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.
        r[   r‡   r½   rÀ   )r	   r   r   ÚDeclr   ÚCastÚUnaryOprr   Ú	TernaryOpÚFuncCallÚArrayRefÚ	StructRefÚConstantr  ÚTypedefr‹   ÚCompoundLiteralÚGenericSelectionÚStaticAssertr   rŒ   ÚIf)r   r)   rê   Úindents       r   rÎ   zCGenerator._generate_stmt¹  sŽ  € ñ
 Ø×Ò Ñ"ÕØ×"Ñ"Ó$ˆÙØ×Ò Ñ"Õàð'�”—
‘
—�Ø$”%×"Ñ"×$Ð$Ø”%—*‘*—,�,Ø!”%—-‘-—/�/Ø"”%—.‘.×"Ð"Ø#”%—/‘/×#Ø"”%—.‘.×"Ø"”%—.‘.×"Ø#”%—/‘/×#Ø"”%—.‘.×"Ø”%—(‘(—*Ø!”%—-‘-—/Ø"”%—.‘.×"Ø)”%×'Ñ'×)Ø*”%×(Ñ(×*Ø&”%×$Ñ$×&ó'ð&  §
¡
¨1£Ñ-°Ñ5Ð5Ø!”—‘Ö!ð
 —z‘z !“}Ð$ð "ô —‘•Ø §
¡
¨1£Ñ-Ð-ð àØ §
¡
¨1£Ñ-°Ñ4Ð4r   c                 ób  ‡ — d}|j                   rdj                  |j                   «      dz   }|j                  r!|dj                  |j                  «      dz   z  }|j                  r*|dj                  ˆ fd„|j                  D «       «      dz   z  }|‰ j	                  |j
                  «      z  }|S )zGeneration from a Decl node.r   r   c              3   ó@   •K  — | ]  }‰j                  |«      –— Œ y ­wr!   r"   )r#   Úalignr   s     €r   r&   z,CGenerator._generate_decl.<locals>.<genexpr>í  s   øè ø€ ÒA°˜$Ÿ*™* U×+ÑAùrL   )Úfuncspecr'   r    r?  r‘   r>   r�   s   `  r   r’   zCGenerator._generate_declå  s�   ø€ àˆØ�:Š:Ø—‘˜Ÿ™Ó$ sÑ*ˆAØ�9Š9Ø�—‘˜!Ÿ)™)Ó$ sÑ*Ñ*ˆAØ�7Š7Ø�—‘ÓA¸¿¹ÔAÓAÀCÑGÑGˆAØ	ˆT× Ñ  §¡Ó(Ñ(ˆØˆ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}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  }Œ® xt         j                  d˜ x�f\    |dk7  r(t        ||dz
     t         j                  «      rd|z   dz   }|j                  �| j	                  |j                  «      nd}	|d|	z   dz   z  }�Œ) t         j                  d˜ x�B\   |j                  r-dj                  |j                  «      }
|rd|› �nd}d
|
› |› �}�Œxd|z   }�Œ �Œ‚ |s|S |r|d|z   z  }|S  xt         j                  d˜ x�\    | j!                  |j
                  «      S  xt         j"                  d˜ x�!\    | j%                  |j
                  ||¬«      S  xt         j&                  d˜ x�!\    dj                  |j(                  «      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   rC   rD   r7   r8   z* rh   )r¤   r�   )r   ÚTypeDeclÚqualsr'   r   r>   ÚdeclnameÚ	enumerateÚ	ArrayDeclrq   ÚPtrDeclÚ	dim_qualsÚdimÚFuncDeclrE   r/  r’   ÚTypenamer‘   ÚIdentifierTyper„   )r   r)   rA  r¤   r�   r•   ÚnstrÚiÚmodifierrE   rD  Úsuffixs               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�ô
 $-¨YÓ#7ó 2‘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·<±<Ó(@Ñ @ Ø  C™K™Dð /ð .œUŸ^™^Ö-Ø  Ašv¬*°Y¸qÀ1¹uÑ5EÄuÇ}Á}Ô*UØ'*¨T¡z°CÑ'7 ð $,§=¡=Ð#<ð !%§
¡
¨8¯=©=Ô 9à%'ð !ð
 ! C¨$¡J°Ñ$4Ñ4šDð .ô #Ÿ]™]�_Ø'Ÿ~š~Ø(+¯©°·±Ó(@ Ù7;¨1¨T¨F©À Ø)+¨E¨7°6°(Ð';¢à'*¨T¡z¢ò -ð)2ñ6 &Ø�KÙØ˜˜t™‘O�AØ�ðW "ðX ”—‘–Ø×*Ñ*¨1¯6©6Ó2Ð2ð à!”—‘Ö!Ø×*Ñ*Ø—F‘FØ"/Ø#1ð +ó ð ð "ð (”×%Ñ%Ö'Ø—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.
        rC   rD   )rM   )r   r)   rR  r•   s       r   rw   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!   )rp   )rt   r   s    €r   ru   z8CGenerator._parenthesize_unless_simple.<locals>.<lambda>R  s   ø€ °d×6JÑ6JÈ1Ó6MÐ2M€ r   )rw   r,   s   ` r   r9   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   r6  r  r4  r5  r3  r9  r,   s     r   rp   zCGenerator._is_simple_nodeT  sE   € ô Øä—‘Ü—‘Ü—‘Ü—‘Ü—‘Ü×&Ñ&ðó

ð 
	
r   )F)NTT)�r   Ú
__module__Ú__qualname__Ú__doc__ÚintÚ__annotations__Úboolr   Ústrr   r   ÚNoder   r   r6  r-   r  r1   rÈ   r5   r4  r<   r5  rA   r3  rG   r9  rP   ÚGenericAssociationrT   r1  rY   rl   r   Údictrr   r|   r   r‚   rM  r…   rM   r/  r–   ÚDeclListrž   r7  r¡   r0  r¦   r‹   r®   rŠ   r±   r!  r¶   ÚAlignasr¹   Ú
Enumeratorr»   rÇ   rÄ   ÚFileASTrÉ   rŒ   rÑ   r8  rÓ   ÚEmptyStatementrÖ   Ú	ParamListrÛ   ÚReturnrÝ   ÚBreakrß   ÚContinuerá   r2  ræ   r;  rë   ÚForrî   ÚWhilerñ   ÚDoWhileró   r:  rö   ÚSwitchrø   ÚCaserý   ÚDefaultrÿ   ÚLabelr  ÚGotor  ÚEllipsisParamr  r  r  rL  r
  r  r  ÚNamedInitializerr  rK  r  rG  r  rC  r  rH  r  rµ   Úlistr   r$  rÎ   r’   r‘   r   rw   r9   rp   r‡   r   r   r   r      s�  … ñð
 ÓØÓñ	5¨4ð 	5¸Dó 	5ð'˜có 'ð?˜%Ÿ*™*ð ?¨ó ?ðK %§*¡*¨tÑ"3ð K¸ó Kð §¡ð °3ó ð˜%Ÿ(™(ð  só ð˜eŸl™lð ¨só ð< §¡ð <°3ó <ð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ó '/ðR; %×"2Ñ"2ð ;°só ;ð! e×&:Ñ&:ð !¸só !ð%˜UŸZ™Zð %¨Có %ñ˜EŸJ™Jð °ð À#ó ð §¡ð °3ó ð˜uŸ}™}ð °ó ðB˜EŸJ™Jð B¨3ó Bð+ §¡ð +°3ó +ð+ §¡ð +°3ó +ð@˜EŸJ™Jð @¨3ó @ð6˜uŸ}™}ð 6°ó 6ðO %×"2Ñ"2ð O°só Oð-˜uŸ}™}ð -°ó -ð
˜uŸ}™}ð 
°ó 
ð §¡ð °3ó ðJ u×'<Ñ'<ð JÀó Jð 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ó ð
˜EŸJ™Jð ¨3ó ð˜uŸ}™}ð °ó ð<˜UŸ[™[ð <¨Só <ð&˜EŸJ™Jð &¨3ó &ð U×%8Ñ%8ð ¸Só ð=˜eŸl™lð =¨só =ð+ §¡ð +°3ó +ð<˜UŸ[™[ð <¨Só <ð¨×(>Ñ(>ð À3ó ð& §¡ð &°3ó &ð; §¡ð ;°Só ;ð; §¡ð ;°3ó ;ð;˜uŸ}™}ð ;°ó ;ðØ—‘ §¡Ñ+¨e¯j©jÑ8ðØ@Cðà	óð8F°4¸¿
¹
Ñ3Cð FÈó FðK¨4°×0@Ñ0@Ñ+Að KÀcó Kñ*5 §
¡
ð *5¸ð *5Èó *5ðX
 §
¡
ð 
¨só 
ð .2Ø"Ø#ñQ%à�:‰:ðQ%ð ˜Ÿ
™
Ñ# dÑ*ðQ%ð ð	Q%ð
 ðQ%ð 
óQ%ðf
Ø—‘ð
Ø(0°%·*±*°¸tÐ1CÑ(Dð
à	ó
ðO¨U¯Z©Zð O¸Có Oð
 §¡ð 
°ô 
r   r   N)Úcollections.abcr   Útypingr   r   r   r   r‡   r   r   ú<module>rw     s   ðõ %Ý å ÷S	
ò S	
r   