ó
    ùŠÂjµP  ã                   ó8   • S SK JrJrJr  SSKJr   " S S5      rg)é    )ÚCallableÚListÚOptionalé   )Úc_astc            	       óT
  • \ rS rSr% Sr\\S'   \\S'   SlS\SS4S jjrS\	4S jr
S	\R                  S\	4S
 jrS	\\R                     S\	4S jrS\R                   S\	4S jrS\R$                  S\	4S jrS\R(                  S\	4S jrS\R,                  S\	4S jrS\R0                  S\	4S jrS\R4                  S\	4S jrS\R8                  S\	4S jr0 SS_SS_SS_SS_SS_SS_S S_S!S"_S#S"_S$S"_S%S"_S&S'_S(S'_S)S*_S+S*_S,S-_S.S-_S/S-0ErS\R>                  S\	4S0 jr S\RB                  S\	4S1 jr"S\RF                  S\	4S2 jr$S\R                  S\	4S3 jr%SlS\RL                  S4\S\	4S5 jjr'S\RP                  S\	4S6 jr)S\RT                  S\	4S7 jr+S\RX                  S\	4S8 jr-S\R\                  S\	4S9 jr/S\R`                  S\	4S: jr1S\Rd                  S\	4S; jr3S\Rh                  S\	4S< jr5S\Rl                  S\	4S= jr7S\Rp                  S\	4S> jr9S\Rt                  S\	4S? jr;S\Rx                  S\	4S@ jr=S\R|                  S\	4SA jr?S\R€                  S\	4SB jrAS\R„                  S\	4SC jrCS\Rˆ                  S\	4SD jrES\RŒ                  S\	4SE jrGS\R�                  S\	4SF jrIS\R”                  S\	4SG jrKS\R˜                  S\	4SH jrMS\Rœ                  S\	4SI jrOS\R                   S\	4SJ jrQS\R¤                  S\	4SK jrSS\R¨                  S\	4SL jrUS\R¬                  S\	4SM jrWS\R°                  S\	4SN jrYS\R´                  S\	4SO jr[S\R¸                  S\	4SP jr]S\R¼                  S\	4SQ jr_S\RÀ                  S\	4SR jraS\RÄ                  S\	4SS jrcS\RÈ                  S\	4ST jreS\RÌ                  S\	4SU jrgS\RÐ                  S\	4SV jriS\RÔ                  S\	4SW jrkS\RØ                  S\	4SX jrmS\RÜ                  S\	4SY jroS\Rà                  S\	4SZ jrqS\RÄ                  \RÌ                  -  \Rd                  -  S[\	S\	4S\ jrrS]\s\R                     S\	4S^ jrtS]\s\Rl                     S\	4S_ jruSlS\R                  S`\S\	4Sa jjrvS\RL                  S\	4Sb jrw/ Sc4S\R                  Sd\s\R                     Se\S\	4Sf jjrxS\R                  Sg\y\R                  /\4   S\	4Sh jrzS\R                  S\	4Si jr{S\R                  S\4Sj jr|Skr}g)mÚ
CGeneratoré   z—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                 ó   • SU l         Xl        g)zrConstructs C-code generator

reduce_parentheses:
    if True, eliminates needless parentheses on binary operators
r   N©r   r   )Úselfr   s     ÚK/var/www/website/venv/lib/python3.13/site-packages/pycparser/c_generator.pyÚ__init__ÚCGenerator.__init__   s   € ð ˆÔØ"4Õó    c                 ó    • SU R                   -  $ ©NÚ )r   )r   s    r   Ú_make_indentÚCGenerator._make_indent"   s   € Ø�T×&Ñ&Ñ&Ð&r   Únodec                 ól   • SUR                   R                  -   n[        XU R                  5      " U5      $ )NÚvisit_)Ú	__class__Ú__name__ÚgetattrÚgeneric_visit)r   r   Úmethods      r   ÚvisitÚCGenerator.visit%   s.   € Ø˜DŸN™N×3Ñ3Ñ3ˆÜ�t T×%7Ñ%7Ô8¸Ó>Ð>r   c                 ó^   ^ • Uc  gSR                  U 4S jUR                  5        5       5      $ )NÚ c              3   óJ   >#   • U  H  u  pTR                  U5      v •  M     g 7f©N©r"   )Ú.0Úc_nameÚcr   s      €r   Ú	<genexpr>Ú+CGenerator.generic_visit.<locals>.<genexpr>-   s   øé € ÐJº/©Y¨V˜4Ÿ:™: aŸ=˜=º/ùs   ƒ #)ÚjoinÚchildren)r   r   s   ` r   r    ÚCGenerator.generic_visit)   s&   ø€ Ø‰<Øà—7‘7ÔJ¸$¿-¹-¼/ÓJÓJÐJr   Únc                 ó   • UR                   $ r'   )Úvalue©r   r1   s     r   Úvisit_ConstantÚCGenerator.visit_Constant/   s   € Ø�w‰wˆr   c                 ó   • UR                   $ r'   ©Únamer4   s     r   Úvisit_IDÚCGenerator.visit_ID2   s   € Ø�v‰vˆr   c                 óP   • SnUR                   (       a  USUR                   -   -  nU$ )Nz#pragmar   )Ústring)r   r1   Úrets      r   Úvisit_PragmaÚCGenerator.visit_Pragma5   s%   € ØˆØ�8�8Ø�3˜Ÿ™‘>Ñ!ˆCØˆ
r   c                 ó€   • U R                  UR                  5      nUS-   U R                  UR                  5      -   S-   $ )NÚ[Ú])Ú_parenthesize_unless_simpler9   r"   Ú	subscript)r   r1   Úarrrefs      r   Úvisit_ArrayRefÚCGenerator.visit_ArrayRef;   s7   € Ø×1Ñ1°!·&±&Ó9ˆØ˜‰|˜dŸj™j¨¯©Ó5Ñ5¸Ñ;Ð;r   c                 óŒ   • U R                  UR                  5      nX!R                  -   U R                  UR                  5      -   $ r'   )rD   r9   Útyper"   Úfield)r   r1   Úsrefs      r   Úvisit_StructRefÚCGenerator.visit_StructRef?   s4   € Ø×/Ñ/°·±Ó7ˆØ—f‘f‰}˜tŸz™z¨!¯'©'Ó2Ñ2Ð2r   c                 ó¢   • U R                  UR                  5      nUR                  b  U R                  UR                  5      OSnUS-   U-   S-   $ )Nr%   Ú(Ú))rD   r9   Úargsr"   )r   r1   ÚfrefrR   s       r   Úvisit_FuncCallÚCGenerator.visit_FuncCallC   sG   € Ø×/Ñ/°·±Ó7ˆØ%&§V¡VÑ%7ˆt�z‰z˜!Ÿ&™&Ô!¸RˆØ�c‰z˜DÑ  3Ñ&Ð&r   c                 óT  • UR                   =S:X  a     SU R                  UR                  5       S3$ =S:X  a!    U R                  UR                  5      nU S3$ S:X  a   U R                  UR                  5      nU S3$  U R                  UR                  5      nUR                    U 3$ )NÚsizeofzsizeof(rQ   zp++z++zp--z--)Úopr"   ÚexprrD   )r   r1   Úoperands      r   Úvisit_UnaryOpÚCGenerator.visit_UnaryOpH   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<<Ú+é   Ú-Ú*é	   Ú/Ú%c                 ó²   ^ ^• T R                  TR                  UU 4S j5      nT R                  TR                  UU 4S j5      nU STR                   SU 3$ )Nc                 ó  >• TR                  U 5      =(       dg    TR                  =(       aT    [        U [        R                  5      =(       a3    TR
                  U R                     TR
                  TR                     :¬  (       + $ r'   ©Ú_is_simple_noder   Ú
isinstancer   ÚBinaryOpÚprecedence_maprX   ©Údr1   r   s    €€r   Ú<lambda>Ú+CGenerator.visit_BinaryOp.<locals>.<lambda>|   se   ø€ Ø×$Ñ$ QÓ'÷ KØ×*Ñ*÷ KÜ˜q¤%§.¡.Ó1÷Kà×'Ñ'¨¯©Ñ-°×1DÑ1DÀQÇTÁTÑ1JÑJõ	r   c                 ó  >• TR                  U 5      =(       dg    TR                  =(       aT    [        U [        R                  5      =(       a3    TR
                  U R                     TR
                  TR                     :„  (       + $ r'   rq   rv   s    €€r   rx   ry   Œ   se   ø€ Ø×$Ñ$ QÓ'÷ JØ×*Ñ*÷ JÜ˜q¤%§.¡.Ó1÷Jà×'Ñ'¨¯©Ñ-°×0CÑ0CÀAÇDÁDÑ0IÑIõ	r   r   )Ú_parenthesize_ifÚleftÚrightrX   )r   r1   Úlval_strÚrval_strs   ``  r   Úvisit_BinaryOpÚCGenerator.visit_BinaryOpp   s\   ù€ ð ×(Ñ(Ø�F‰Fõó
ˆð  ×(Ñ(Ø�G‰Gõó
ˆð �˜1˜QŸT™T˜F ! H :Ð.Ð.r   c                 ó–   • U R                  UR                  S 5      nU R                  UR                  5       SUR                   SU 3$ )Nc                 ó6   • [        U [        R                  5      $ r'   )rs   r   Ú
Assignment)r1   s    r   rx   Ú-CGenerator.visit_Assignment.<locals>.<lambda>—   s   € ¤
¨1¬e×.>Ñ.>Ô ?r   r   )r{   Úrvaluer"   ÚlvaluerX   )r   r1   r   s      r   Úvisit_AssignmentÚCGenerator.visit_Assignment•   sG   € Ø×(Ñ(Ø�H‰HÑ?ó
ˆð —*‘*˜QŸX™XÓ&Ð' q¨¯©¨¨a°¨zÐ:Ð:r   c                 ó8   • SR                  UR                  5      $ r   )r.   Únamesr4   s     r   Úvisit_IdentifierTypeÚCGenerator.visit_IdentifierType›   s   € Ø�x‰x˜Ÿ™Ó Ð r   c                 ó   • U=[         R                  S` =b  u     SU R                  U5      -   S-   $   =[         R                  S` =b  u   O  =[         R                  S` =b  u   O    O  SU R                  U5      -   S-   $  U R                  U5      $ )N© Ú{Ú}rP   rQ   )r   ÚInitListr"   ÚExprListÚCompoundr4   s     r   Ú_visit_exprÚCGenerator._visit_exprž   sx   € ØØ!”—‘×!Ø˜TŸZ™Z¨›]Ñ*¨SÑ0Ð0ð "à!”—‘×!Ð!Ð$4¤E§N¡N×$4Ð$4Ò4Ø˜TŸZ™Z¨›]Ñ*¨SÑ0Ð0ØØ—z‘z !“}Ð$r   Úno_typec                 ó  • U(       a  UR                   OU R                  U5      nUR                  (       a!  USU R                  UR                  5      -   -  nUR                  (       a!  USU R                  UR                  5      -   -  nU$ )Nz : ú = )r9   Ú_generate_declÚbitsizer"   Úinitr•   )r   r1   r—   Úss       r   Ú
visit_DeclÚCGenerator.visit_Decl§   si   € ö ˆA�FŠF 4×#6Ñ#6°qÓ#9ˆØ�9�9Ø�˜Ÿ™ A§I¡IÓ.Ñ.Ñ.ˆAØ�6�6Ø�˜×)Ñ)¨!¯&©&Ó1Ñ1Ñ1ˆAØˆr   c                 óÒ   ^ • T R                  UR                  S   5      n[        UR                  5      S:”  a.  USSR                  U 4S jUR                  SS   5       5      -   -  nU$ )Nr   r   ú, c              3   óD   >#   • U  H  nTR                  US S9v •  M     g7f)T)r—   N)rž   ©r)   Údeclr   s     €r   r,   Ú,CGenerator.visit_DeclList.<locals>.<genexpr>µ   s!   øé € ð "Ú@K¸�—‘ ¨d�Õ3Âùs   ƒ )r"   ÚdeclsÚlenr.   ©r   r1   r�   s   `  r   Úvisit_DeclListÚCGenerator.visit_DeclList²   sc   ø€ Ø�J‰J�q—w‘w˜q‘zÓ"ˆÜˆq�w‰w‹<˜!ÓØ�˜Ÿ	™	ô "Ø@AÇÁÈÈÁó"ó ñ ñ ˆAð ˆr   c                 ó¨   • SnUR                   (       a!  USR                  UR                   5      S-   -  nX R                  UR                  5      -  nU$ )Nr%   r   )Ústorager.   Ú_generate_typerJ   r¨   s      r   Úvisit_TypedefÚCGenerator.visit_Typedefº   sF   € ØˆØ�9�9Ø�—‘˜!Ÿ)™)Ó$ sÑ*Ñ*ˆAØ	× Ñ  §¡Ó(Ñ(ˆØˆr   c                 ó„   • SU R                  UR                  SS9-   S-   nUS-   U R                  UR                  5      -   $ )NrP   F©Úemit_declnamerQ   r   )r­   Úto_typerD   rY   r¨   s      r   Ú
visit_CastÚCGenerator.visit_CastÁ   sC   € Ø�$×%Ñ% a§i¡i¸uÐ%ÐEÑEÈÑKˆØ�3‰w˜×9Ñ9¸!¿&¹&ÓAÑAÐAr   c                 óŽ   • / nUR                    H#  nUR                  U R                  U5      5        M%     SR                  U5      $ ©Nr¡   ©ÚexprsÚappendr•   r.   ©r   r1   Úvisited_subexprsrY   s       r   Úvisit_ExprListÚCGenerator.visit_ExprListÅ   ó?   € ØÐØ—G”GˆDØ×#Ñ# D×$4Ñ$4°TÓ$:Ö;ñ à�y‰yÐ)Ó*Ð*r   c                 óŽ   • / nUR                    H#  nUR                  U R                  U5      5        M%     SR                  U5      $ r·   r¸   r»   s       r   Úvisit_InitListÚCGenerator.visit_InitListË   r¿   r   c                 ó"   • U R                  USS9$ )NÚenumr8   ©Ú_generate_struct_union_enumr4   s     r   Ú
visit_EnumÚCGenerator.visit_EnumÑ   s   € Ø×/Ñ/°¸Ð/Ð?Ð?r   c                 óV   • SR                  U R                  UR                  5      5      $ )Nz_Alignas({}))Úformatr"   Ú	alignmentr4   s     r   Úvisit_AlignasÚCGenerator.visit_AlignasÔ   s    € Ø×$Ñ$ T§Z¡Z°·±Ó%<Ó=Ð=r   c                 óø   • UR                   (       d(  SR                  U R                  5       UR                  S9$ SR                  U R                  5       UR                  U R	                  UR                   5      S9$ )Nz{indent}{name},
)Úindentr9   z{indent}{name} = {value},
)rÏ   r9   r3   )r3   rÊ   r   r9   r"   r4   s     r   Úvisit_EnumeratorÚCGenerator.visit_Enumerator×   sq   € Ø�w�wØ&×-Ñ-Ø×(Ñ(Ó*Ø—V‘Vð .ð ð ð
 1×7Ñ7Ø×(Ñ(Ó*Ø—V‘VØ—j‘j §¡Ó)ð 8ð ð r   c                 ó"  ^ • T R                  UR                  5      nST l        T R                  UR                  5      nUR                  (       a6  SR                  U 4S jUR                   5       5      nUS-   U-   S-   U-   S-   $ US-   U-   S-   $ )Nr   ú;
c              3   óF   >#   • U  H  nTR                  U5      v •  M     g 7fr'   r(   )r)   Úpr   s     €r   r,   Ú+CGenerator.visit_FuncDef.<locals>.<genexpr>é   s   øé € Ð!Gº°A $§*¡*¨Q§- -ºùó   ƒ!Ú
)r"   r¤   r   ÚbodyÚparam_declsr.   )r   r1   r¤   rÙ   Úknrdeclss   `    r   Úvisit_FuncDefÚCGenerator.visit_FuncDefä   s€   ø€ Ø�z‰z˜!Ÿ&™&Ó!ˆØˆÔØ�z‰z˜!Ÿ&™&Ó!ˆØ�=�=Ø—z‘zÔ!G¸¿ºÓ!GÓGˆHØ˜$‘; Ñ)¨EÑ1°DÑ8¸4Ñ?Ð?à˜$‘; Ñ%¨Ñ,Ð,r   c                 ó  • SnUR                    Hx  nU=[        R                  S` =b  u     X R                  U5      -  nM1    [        R                  S` =b  u   X R                  U5      S-   -  nM`     X R                  U5      S-   -  nMz     U$ )Nr%   r�   rØ   rÓ   )Úextr   ÚFuncDefr"   ÚPragma)r   r1   r�   rß   s       r   Úvisit_FileASTÚCGenerator.visit_FileASTî   sz   € ØˆØ—5”5ˆCØØ$”U—]‘]—_ØŸ™ C›Ñ(’Að %ä—\‘\–^ØŸ™ C›¨4Ñ/Ñ/’Að $àØŸ™ C›¨5Ñ0Ñ0’Añ ð ˆr   c                 ó   ^ • T R                  5       S-   nT =R                  S-  sl        UR                  (       a(  USR                  U 4S jUR                   5       5      -  nT =R                  S-  sl        UT R                  5       S-   -  nU$ )Nú{
r^   r%   c              3   óF   >#   • U  H  nTR                  U5      v •  M     g 7fr'   ©Ú_generate_stmt)r)   Ústmtr   s     €r   r,   Ú,CGenerator.visit_Compound.<locals>.<genexpr>þ   s   øé € ÐMº}°t˜×,Ñ,¨T×2Ð2º}ùr×   z}
)r   r   Úblock_itemsr.   r¨   s   `  r   Úvisit_CompoundÚCGenerator.visit_Compoundú   sy   ø€ Ø×ÑÓ %Ñ'ˆØ×Ò˜QÑÕØ�=�=Ø�—‘ÔM¸q¿}º}ÓMÓMÑMˆAØ×Ò˜QÑÕØ	ˆT×ÑÓ  5Ñ(Ñ(ˆØˆr   c                 ó‚   • SU R                  UR                  5      -   S-   U R                  UR                  5      -   S-   $ )NrP   z){r‘   )r"   rJ   rœ   r4   s     r   Úvisit_CompoundLiteralÚ CGenerator.visit_CompoundLiteral  s6   € Ø�T—Z‘Z §¡Ó'Ñ'¨$Ñ.°·±¸A¿F¹FÓ1CÑCÀcÑIÐIr   c                 ó   • g)NÚ;r�   r4   s     r   Úvisit_EmptyStatementÚCGenerator.visit_EmptyStatement  s   € Ør   c                 óN   ^ • SR                  U 4S jUR                   5       5      $ )Nr¡   c              3   óF   >#   • U  H  nTR                  U5      v •  M     g 7fr'   r(   )r)   Úparamr   s     €r   r,   Ú-CGenerator.visit_ParamList.<locals>.<genexpr>
  s   øé € ÐAº¨u˜Ÿ™ E×*Ð*ºùr×   )r.   Úparamsr4   s   ` r   Úvisit_ParamListÚCGenerator.visit_ParamList	  s   ø€ Ø�y‰yÔA¸¿ºÓAÓAÐAr   c                 ót   • SnUR                   (       a!  USU R                  UR                   5      -   -  nUS-   $ )Nr   r   rò   )rY   r"   r¨   s      r   Úvisit_ReturnÚCGenerator.visit_Return  s3   € ØˆØ�6�6Ø��t—z‘z !§&¡&Ó)Ñ)Ñ)ˆAØ�3‰wˆr   c                 ó   • g)Nzbreak;r�   r4   s     r   Úvisit_BreakÚCGenerator.visit_Break  s   € Ør   c                 ó   • g)Nz	continue;r�   r4   s     r   Úvisit_ContinueÚCGenerator.visit_Continue  s   € Ør   c                 óØ   • SU R                  UR                  5      -   S-   nUSU R                  UR                  5      -   S-   -  nUSU R                  UR                  5      -   S-   -  nU$ )NrP   z) ? z) : rQ   )r•   ÚcondÚiftrueÚiffalser¨   s      r   Úvisit_TernaryOpÚ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                 ó,  • SnUR                   (       a  X R                  UR                   5      -  nUS-  nX R                  UR                  SS9-  nUR                  (       a1  X R                  5       S-   -  nX R                  UR                  SS9-  nU$ )Nzif (ú)
T©Ú
add_indentzelse
)r  r"   rè   r  r  r   r¨   s      r   Úvisit_IfÚCGenerator.visit_If  s†   € ØˆØ�6�6Ø—‘˜AŸF™FÓ#Ñ#ˆAØ	ˆU‰
ˆØ	× Ñ  §¡°dÐ Ð;Ñ;ˆØ�9�9Ø×"Ñ"Ó$ xÑ/Ñ/ˆAØ×$Ñ$ Q§Y¡Y¸4Ð$Ð@Ñ@ˆAØˆr   c                 ó„  • SnUR                   (       a  X R                  UR                   5      -  nUS-  nUR                  (       a!  USU R                  UR                  5      -   -  nUS-  nUR                  (       a!  USU R                  UR                  5      -   -  nUS-  nX R	                  UR
                  SS9-  nU$ )Nzfor (rò   r   r  Tr  )rœ   r"   r  Únextrè   ré   r¨   s      r   Ú	visit_ForÚCGenerator.visit_For)  s¥   € ØˆØ�6�6Ø—‘˜AŸF™FÓ#Ñ#ˆAØ	ˆS‰ˆØ�6�6Ø��t—z‘z !§&¡&Ó)Ñ)Ñ)ˆAØ	ˆS‰ˆØ�6�6Ø��t—z‘z !§&¡&Ó)Ñ)Ñ)ˆAØ	ˆU‰
ˆØ	× Ñ  §¡°DÐ Ð9Ñ9ˆØˆr   c                 ó¨   • SnUR                   (       a  X R                  UR                   5      -  nUS-  nX R                  UR                  SS9-  nU$ )Núwhile (r  Tr  )r  r"   rè   ré   r¨   s      r   Úvisit_WhileÚCGenerator.visit_While7  sM   € ØˆØ�6�6Ø—‘˜AŸF™FÓ#Ñ#ˆAØ	ˆU‰
ˆØ	× Ñ  §¡°DÐ Ð9Ñ9ˆØˆr   c                 óÒ   • SnX R                  UR                  SS9-  nX R                  5       S-   -  nUR                  (       a  X R	                  UR                  5      -  nUS-  nU$ )Nzdo
Tr  r  z);)rè   ré   r   r  r"   r¨   s      r   Úvisit_DoWhileÚCGenerator.visit_DoWhile?  sc   € ØˆØ	× Ñ  §¡°DÐ Ð9Ñ9ˆØ	×ÑÓ  9Ñ,Ñ,ˆØ�6�6Ø—‘˜AŸF™FÓ#Ñ#ˆAØ	ˆT‰	ˆØˆr   c                 ó´   • SnX R                  UR                  5      -  nUR                  (       a"  US-  nX R                  UR                  5      -  nUS-  nU$ )Nz_Static_assert(Ú,rQ   )r"   r  Úmessager¨   s      r   Úvisit_StaticAssertÚCGenerator.visit_StaticAssertH  sO   € ØˆØ	�Z‰Z˜Ÿ™ÓÑˆØ�9�9Ø�‰HˆAØ—‘˜AŸI™IÓ&Ñ&ˆAØ	ˆS‰ˆØˆr   c                 ó€   • SU R                  UR                  5      -   S-   nX R                  UR                  SS9-  nU$ )Nzswitch (r  Tr  )r"   r  rè   ré   r¨   s      r   Úvisit_SwitchÚCGenerator.visit_SwitchQ  s?   € Ø˜Ÿ™ A§F¡FÓ+Ñ+¨eÑ3ˆØ	× Ñ  §¡°DÐ Ð9Ñ9ˆØˆr   c                 ó’   • SU R                  UR                  5      -   S-   nUR                   H  nX R                  USS9-  nM     U$ )Nzcase ú:
Tr  )r"   rY   Ústmtsrè   ©r   r1   r�   ré   s       r   Ú
visit_CaseÚCGenerator.visit_CaseV  sI   € Ø�d—j‘j §¡Ó(Ñ(¨5Ñ0ˆØ—G”GˆDØ×$Ñ$ T°dÐ$Ð;Ñ;ŠAñ àˆr   c                 óT   • SnUR                    H  nX R                  USS9-  nM     U$ )Nz	default:
Tr  )r&  rè   r'  s       r   Úvisit_DefaultÚCGenerator.visit_Default\  s2   € ØˆØ—G”GˆDØ×$Ñ$ T°dÐ$Ð;Ñ;ŠAñ àˆr   c                 óX   • UR                   S-   U R                  UR                  5      -   $ )Nr%  )r9   rè   ré   r4   s     r   Úvisit_LabelÚCGenerator.visit_Labelb  s$   € Ø�v‰v˜‰~ × 3Ñ 3°A·F±FÓ ;Ñ;Ð;r   c                 ó&   • SUR                   -   S-   $ )Nzgoto rò   r8   r4   s     r   Ú
visit_GotoÚCGenerator.visit_Gotoe  s   € Ø˜Ÿ™Ñ #Ñ%Ð%r   c                 ó   • g)Nz...r�   r4   s     r   Úvisit_EllipsisParamÚCGenerator.visit_EllipsisParamh  s   € Ør   c                 ó&   • U R                  US5      $ )NÚstructrÅ   r4   s     r   Úvisit_StructÚCGenerator.visit_Structk  s   € Ø×/Ñ/°°8Ó<Ð<r   c                 ó8   • U R                  UR                  5      $ r'   )r­   rJ   r4   s     r   Úvisit_TypenameÚCGenerator.visit_Typenamen  s   € Ø×"Ñ" 1§6¡6Ó*Ð*r   c                 ó&   • U R                  US5      $ )NÚunionrÅ   r4   s     r   Úvisit_UnionÚCGenerator.visit_Unionq  s   € Ø×/Ñ/°°7Ó;Ð;r   c                 ó  • SnUR                    HP  n[        U[        R                  5      (       a  USUR                   -   -  nM6  USU R	                  U5      -   S-   -  nMR     USU R                  UR                  5      -   -  nU$ )Nr%   Ú.rB   rC   r™   )r9   rs   r   ÚIDr"   r•   rY   )r   r1   r�   r9   s       r   Úvisit_NamedInitializerÚ!CGenerator.visit_NamedInitializert  sz   € ØˆØ—F”FˆDÜ˜$¤§¡×)Ñ)Ø�S˜4Ÿ9™9‘_Ñ$’à�S˜4Ÿ:™: dÓ+Ñ+¨cÑ1Ñ1’ñ	 ð
 	
ˆU�T×%Ñ% a§f¡fÓ-Ñ-Ñ-ˆØˆr   c                 ó$   • U R                  U5      $ r'   ©r­   r4   s     r   Úvisit_FuncDeclÚCGenerator.visit_FuncDecl~  s   € Ø×"Ñ" 1Ó%Ð%r   c                 ó"   • U R                  USS9$ ©NFr±   rG  r4   s     r   Úvisit_ArrayDeclÚCGenerator.visit_ArrayDecl�  ó   € Ø×"Ñ" 1°EÐ"Ð:Ð:r   c                 ó"   • U R                  USS9$ rK  rG  r4   s     r   Úvisit_TypeDeclÚCGenerator.visit_TypeDecl„  rN  r   c                 ó"   • U R                  USS9$ rK  rG  r4   s     r   Úvisit_PtrDeclÚCGenerator.visit_PtrDecl‡  rN  r   r9   c                 ó`  • US;   aJ  [        U[        R                  [        R                  45      (       d   eUR                  nU R
                  nOZUS:X  d   e[        U[        R                  5      (       d   eUR                  c  SOUR                  R                  nU R                  nUS-   UR                  =(       d    S-   nUbe  US-  nXPR                  5       -  nU =R                  S-  sl        US-  nXT" U5      -  nU =R                  S-  sl        XPR                  5       S	-   -  nU$ )
z\Generates code for structs, unions, and enums. name should be
'struct', 'union', or 'enum'.
)r7  r>  rÄ   Nr   r%   rØ   r^   rå   r‘   )rs   r   ÚStructÚUnionr¦   Ú_generate_struct_union_bodyÚEnumÚvaluesÚenumeratorsÚ_generate_enum_bodyr9   r   r   )r   r1   r9   ÚmembersÚbody_functionr�   s         r   rÆ   Ú&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                 ó:   ^ • SR                  U 4S jU 5       5      $ )Nr%   c              3   óF   >#   • U  H  nTR                  U5      v •  M     g 7fr'   rç   r£   s     €r   r,   Ú9CGenerator._generate_struct_union_body.<locals>.<genexpr>§  s   øé € ÐEºW°T�t×*Ñ*¨4×0Ð0ºWùr×   ©r.   ©r   r]  s   ` r   rX  Ú&CGenerator._generate_struct_union_body¦  s   ø€ Ø�w‰wÔE¹WÓEÓEÐEr   c                 óF   ^ • SR                  U 4S jU 5       5      S S S-   $ )Nr%   c              3   óF   >#   • U  H  nTR                  U5      v •  M     g 7fr'   r(   )r)   r3   r   s     €r   r,   Ú1CGenerator._generate_enum_body.<locals>.<genexpr>«  s   øé € Ð>²g¨U�t—z‘z %×(Ð(²gùr×   éþÿÿÿrØ   rc  rd  s   ` r   r\  ÚCGenerator._generate_enum_body©  s$   ø€ à�w‰wÔ>±gÓ>Ó>¸sÀÐCÀdÑJÐJr   r  c                 ó.  • U(       a  U =R                   S-  sl         U R                  5       nU(       a  U =R                   S-  sl         U==[        R                  S` =b  u   GO0  =[        R                  S` =b  u   GO  =[        R
                  S` =b  u   Oý  =[        R                  S` =b  u   Oä  =[        R                  S` =b  u   OË  =[        R                  S` =b  u   O²  =[        R                  S` =b  u   O™  =[        R                  S` =b  u   O€  =[        R                  S` =b  u   Og  =[        R                  S` =b  u   ON  =[        R                  S` =b  u   O5  =[        R                  S` =b  u   O  =[        R                  S` =b  u   O    O    X0R!                  U5      -   S-   $ =[        R"                  S` =b  u     U R!                  U5      $   [        R$                  S` =b  u   X0R!                  U5      -   $    X0R!                  U5      -   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ÚUnaryOprt   Ú	TernaryOpÚFuncCallÚArrayRefÚ	StructRefÚConstantrC  ÚTypedefr“   r"   r”   ÚIf)r   r1   r  rÏ   s       r   rè   ÚCGenerator._generate_stmt­  st  € ö
 Ø×Ò Ñ"ÕØ×"Ñ"Ó$ˆÞØ×Ò Ñ"Õàð#�”—
‘
—‘Ø$”%×"Ñ"×$Ñ$Ø”%—*‘*—,�,Ø!”%—-‘-—/�/Ø"”%—.‘.×"Ð"Ø#”%—/‘/×#Ð#Ø"”%—.‘.×"Ð"Ø"”%—.‘.×"Ð"Ø#”%—/‘/×#Ð#Ø"”%—.‘.×"Ð"Ø”%—(‘(—*�*Ø!”%—-‘-—/�/Ø"”%—.‘.×"Ð"ó#ð" §
¡
¨1£Ñ-°Ñ5Ð5Ø!”—‘×!ð
 —z‘z !“}Ð$ð "ô —‘–Ø§
¡
¨1£Ñ-Ð-ð àØ§
¡
¨1£Ñ-°Ñ4Ð4r   c                 ón  • SnUR                   (       a  SR                  UR                   5      S-   nUR                  (       a!  USR                  UR                  5      S-   -  nUR                  (       a#  X R	                  UR                  S   5      S-   -  nX R                  UR                  5      -  nU$ )zGeneration from a Decl node.r%   r   r   )Úfuncspecr.   r¬   Úalignr"   r­   rJ   r¨   s      r   rš   ÚCGenerator._generate_decl×  s‰   € àˆØ�:�:Ø—‘˜Ÿ™Ó$ sÑ*ˆAØ�9�9Ø�—‘˜!Ÿ)™)Ó$ sÑ*Ñ*ˆAØ�7�7Ø—‘˜AŸG™G A™JÓ'¨#Ñ-Ñ-ˆAØ	× Ñ  §¡Ó(Ñ(ˆØˆr   TÚ	modifiersr²   c                 óà  • U=[         R                  S` =Gb;  u     SnUR                  (       a!  USR                  UR                  5      S-   -  nX@R	                  UR
                  5      -  nUR                  (       a  U(       a  UR                  OSn[        U5       GH   u  pgU=[         R                  S` =b�  u     US:w  a,  [        X&S-
     [         R                  5      (       a  SU-   S-   nUS-  nUR                  (       a!  USR                  UR                  5      S-   -  nUR                  b  XPR	                  UR                  5      -  nUS	-  nM¹    =[         R                  S` =bm  u     US:w  a,  [        X&S-
     [         R                  5      (       a  SU-   S-   nUR                  b  U R	                  UR                  5      OSnUSU-   S-   -  nGM<    [         R                  S` =bN  u   UR                  (       a3  SR                  UR                  5      n	U(       a  SU 3OSn
S
U	 U
 3nGM—  SU-   nGMŸ    GM£     U(       a  USU-   -  nU$   =[         R                  S` =b  u     U R!                  UR
                  5      $   =[         R"                  S` =b  u     U R%                  UR
                  US9$   =[         R&                  S` =b!  u     SR                  UR(                  5      S-   $   =[         R                  S` =b  u   O5  =[         R                  S` =b  u   O  =[         R                  S` =b  u   O    O  U R%                  UR
                  X!/-   US9$  U R	                  U5      $ )zË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.
r�   r%   r   r   r   rP   rQ   rB   rC   z* rk   r±   )r   ÚTypeDeclÚqualsr.   r"   rJ   ÚdeclnameÚ	enumerateÚ	ArrayDeclrs   ÚPtrDeclÚ	dim_qualsÚdimÚFuncDeclrR   rl  rš   ÚTypenamer­   ÚIdentifierTyper‹   )r   r1   r{  r²   r�   ÚnstrÚiÚmodifierrR   r~  Úsuffixs              r   r­   ÚCGenerator._generate_typeã  sÞ  € ð Ø!”—‘×!Ð!Ø�Ø—7—7Ø˜Ÿ™ !§'¡'Ó*¨SÑ0Ñ0�AØ—Z‘Z §¡Ó'Ñ'�à%&§Z§Z¶M�q—z’zÀr�ô
 $-¨Y×#7‘K�AØ"Ø.œUŸ_™_×.Ø  A›v¬*°YÀ1¹uÑ5EÄuÇ}Á}×*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À1¹uÑ5EÄuÇ}Á}×*UÑ*UØ'*¨T¡z°CÑ'7 ð $,§=¡=Ñ#<ð !%§
¡
¨8¯=©=Ô 9à%'ð !ð
 ! C¨$¡J°Ñ$4Ñ4›Dð .ô #Ÿ]™]ž_Ø'Ÿ~Ÿ~Ø(+¯©°·±Ó(@ Þ7;¨1¨T¨F©À Ø)+¨E¨7°6°(Ð';£à'*¨T¡z£ó -ñ) $8ö6 Ø˜˜t™‘O�AØ�ðQ "ðR ”—‘—Ø×*Ñ*¨1¯6©6Ó2Ð2ð à!”—‘×!Ø×*Ñ*¨1¯6©6ÀÐ*ÐOÐOð "à'”×%Ñ%×'Ø—x‘x §¡Ó(¨3Ñ.Ð.ð (à"”—‘×"Ð" _¤U§]¡]§_ _Ð7G´u·~±~×7GÐ7GÒGØ×*Ñ*Ø—F‘F˜I¨™O¸=ð +ð ð ð Ø—z‘z !“}Ð$r   Ú	conditionc                 óR   • U R                  U5      nU" U5      (       a  SU-   S-   $ U$ )z|Visits 'n' and returns its string representation, parenthesized
if the condition function applied to the node returns True.
rP   rQ   )r•   )r   r1   r�  r�   s       r   r{   ÚCGenerator._parenthesize_if&  s0   € ð ×Ñ˜QÓˆÙ�Q�<‰<Ø˜‘7˜S‘=Ð àˆHr   c                 ó0   ^ • T R                  UU 4S j5      $ )z$Common use case for _parenthesize_ifc                 ó0   >• TR                  U 5      (       + $ r'   )rr   )rw   r   s    €r   rx   Ú8CGenerator._parenthesize_unless_simple.<locals>.<lambda>4  s   ø€ °d×6JÑ6JÈ1Ó6MÕ2Mr   )r{   r4   s   ` r   rD   Ú&CGenerator._parenthesize_unless_simple2  s   ø€ à×$Ñ$ QÔ(MÓNÐNr   c                 ó°   • [        U[        R                  [        R                  [        R                  [        R
                  [        R                  45      $ )ziReturns True for nodes that are "simple" - i.e. nodes that always
have higher precedence than operators.
)rs   r   rs  rC  rq  rr  rp  r4   s     r   rr   ÚCGenerator._is_simple_node6  s6   € ô ØÜ�^‰^œUŸX™X¤u§~¡~´u·±ÌÏÉÐWó
ð 	
r   r   )F)~r   Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__ÚintÚ__annotations__Úboolr   Ústrr   r   ÚNoder"   r   r    rs  r5   rC  r:   rá   r?   rq  rG   rr  rM   rp  rT   rn  r[   ru   rt   r€   r„   rˆ   r‡  rŒ   r•   rl  rž   ÚDeclListr©   rt  r®   rm  r´   r“   r½   r’   rÁ   rY  rÇ   ÚAlignasrÌ   Ú
EnumeratorrÐ   rà   rÜ   ÚFileASTrâ   r”   rì   ÚCompoundLiteralrï   ÚEmptyStatementró   Ú	ParamListrú   ÚReturnrý   ÚBreakr   ÚContinuer  ro  r	  ru  r  ÚForr  ÚWhiler  ÚDoWhiler  ÚStaticAssertr  ÚSwitchr"  ÚCaser(  ÚDefaultr+  ÚLabelr.  ÚGotor1  ÚEllipsisParamr4  rV  r8  r†  r;  rW  r?  ÚNamedInitializerrD  r…  rH  r�  rL  r}  rP  r‚  rS  rÆ   r   rX  r\  rè   rš   r­   r   r{   rD   rr   Ú__static_attributes__r�   r   r   r	   r	      s%  ‡ ñð
 ÓØÓñ	5¨4ð 	5¸Dõ 	5ð'˜cô 'ð?˜%Ÿ*™*ð ?¨ô ?ðK (¨5¯:©:Ñ"6ð K¸3ô Kð §¡ð °3ô ð˜%Ÿ(™(ð  sô ð˜eŸl™lð ¨sô ð< §¡ð <°3ô <ð3 §¡ð 3°Sô 3ð' §¡ð '°3ô 'ð
*˜uŸ}™}ð *°ô *ð"ð 	ˆaðð 	ˆað	ð
 	ˆQðð 	ˆQðð 	ˆQðð 	ˆaðð 	ˆaðð 	ˆQðð 	ˆaðð 	ˆQðð 	ˆaðð 	ˆaðð 	ˆaðð  	ˆQð!ð" 	ˆQð#ð$ 	ˆQð%ð& 	ˆQð'ð( 	ˆQñ)€Nð.#/ §¡ð #/°3ô #/ðJ; %×"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ô @ð>˜uŸ}™}ð >°ô >ð %×"2Ñ"2ð °sô ð-˜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ðT
 §
¡
ð 
¨sô 
ð ')Ø"ñ	A%à�:‰:ðA%ð ˜Ÿ
™
Ñ#ðA%ð ð	A%ð
 
õA%ðF
Ø—‘ð
Ø(0°%·*±*°¸tÐ1CÑ(Dð
à	ô
ðO¨U¯Z©Zð O¸Cô Oð
 §¡ð 
°÷ 
r   r	   N)Útypingr   r   r   r%   r   r	   r�   r   r   Ú<module>r¶     s   ð÷ ,Ñ +å ÷o
ò o
r   