§
    aÒ³glE  ã                   ó.   — d dl mZ  G d„ de¦  «        ZdS )é   )Úc_astc                   ó  — e Zd ZdZd_d„Zd„ Zd„ Zd„ Zd„ Zd„ Z	d	„ Z
d
„ Zd„ Zd„ Z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'“d)d'i¥Zd*„ Zd+„ Zd,„ Zd-„ Zd_d.„Zd/„ Zd0„ Zd1„ Zd2„ Zd3„ Zd4„ Zd5„ Zd6„ Zd7„ Zd8„ Zd9„ Zd:„ Z d;„ Z!d<„ Z"d=„ Z#d>„ Z$d?„ Z%d@„ Z&dA„ Z'dB„ Z(dC„ Z)dD„ Z*dE„ Z+dF„ Z,dG„ Z-dH„ Z.dI„ Z/dJ„ Z0dK„ Z1dL„ Z2dM„ Z3dN„ Z4dO„ Z5dP„ Z6dQ„ Z7dR„ Z8dS„ Z9dT„ Z:dU„ Z;dV„ Z<d_dW„Z=dX„ Z>g dYfdZ„Z?d[„ Z@d\„ ZAd]„ ZBd^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.
    Fc                 ó"   — d| _         || _        dS )z“ Constructs C-code generator

            reduce_parentheses:
                if True, eliminates needless parentheses on binary operators
        é    N)Úindent_levelÚreduce_parentheses)Úselfr	   s     úS/var/www/html/mpstechhub/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   c                 ó^   — d|j         j        z   } t          | || j        ¦  «        |¦  «        S )NÚvisit_)Ú	__class__Ú__name__ÚgetattrÚgeneric_visit)r
   ÚnodeÚ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   c                 ó   — |j         S r   )Úvalue©r
   Úns     r   Úvisit_ConstantzCGenerator.visit_Constant)   s	   € ØŒwˆr   c                 ó   — |j         S r   ©Únamer(   s     r   Úvisit_IDzCGenerator.visit_ID,   s	   € ØŒvˆr   c                 ó2   — d}|j         r|d|j         z   z  }|S )Nz#pragmar   )Ústring)r
   r)   Úrets      r   Úvisit_PragmazCGenerator.visit_Pragma/   s&   € ØˆØŒ8ð 	"Ø�3˜œ‘>Ñ!ˆCØˆ
r   c                 ó|   — |                       |j        ¦  «        }|dz   |                      |j        ¦  «        z   dz   S )Nú[ú])Ú_parenthesize_unless_simpler-   r   Ú	subscript)r
   r)   Úarrrefs      r   Úvisit_ArrayRefzCGenerator.visit_ArrayRef5   s9   € Ø×1Ò1°!´&Ñ9Ô9ˆØ˜‰|˜dŸjšj¨¬Ñ5Ô5Ñ5¸Ñ;Ð;r   c                 ó€   — |                       |j        ¦  «        }||j        z   |                      |j        ¦  «        z   S r   )r6   r-   Útyper   Úfield)r
   r)   Úsrefs      r   Úvisit_StructRefzCGenerator.visit_StructRef9   s6   € Ø×/Ò/°´Ñ7Ô7ˆØ�a”f‰}˜tŸzšz¨!¬'Ñ2Ô2Ñ2Ð2r   c                 ó|   — |                       |j        ¦  «        }|dz   |                      |j        ¦  «        z   dz   S )Nú(ú))r6   r-   r   Úargs)r
   r)   Úfrefs      r   Úvisit_FuncCallzCGenerator.visit_FuncCall=   s9   € Ø×/Ò/°´Ñ7Ô7ˆØ�c‰z˜DŸJšJ q¤vÑ.Ô.Ñ.°Ñ4Ð4r   c                 óÜ   — |j         dk    rd|                      |j        ¦  «        z  S |                      |j        ¦  «        }|j         dk    rd|z  S |j         dk    rd|z  S |j         ›|›�S )NÚsizeofz
sizeof(%s)zp++z%s++zp--z%s--)Úopr   Úexprr6   )r
   r)   Úoperands      r   Úvisit_UnaryOpzCGenerator.visit_UnaryOpA   s|   € ØŒ4�8ÒÐð   $§*¢*¨Q¬VÑ"4Ô"4Ñ4Ð4à×6Ò6°q´vÑ>Ô>ˆGØŒt�uŠ}ˆ}Ø Ñ'Ð'Ø”˜’�Ø Ñ'Ð'à!"¤  w wÐ/Ð/r   z||r   z&&r   ú|é   ú^é   ú&é   z==é   z!=ú>é   z>=ú<z<=z>>é   z<<ú+é   ú-Ú*é	   ú/ú%c                 ó    ‡ ‡— ‰                       ‰j        ˆˆ fd„¦  «        }‰                       ‰j        ˆˆ fd„¦  «        }|›d‰j        ›d|›�S )Nc                 ó¾   •— ‰                      | ¦  «        pF‰j        o?t          | t          j        ¦  «        o%‰j        | j                 ‰j        ‰j                 k     S r   ©Ú_is_simple_noder	   Ú
isinstancer   ÚBinaryOpÚprecedence_maprG   ©Údr)   r
   s    €€r   ú<lambda>z+CGenerator.visit_BinaryOp.<locals>.<lambda>k   s]   ø€ ˜4×/Ò/°Ñ2Ô2ð MØÔ-ð Mµ*¸QÅÄÑ2OÔ2Oð MØÔ)¨!¬$Ô/°4Ô3FÀqÄtÔ3LÒLðN€ r   c                 ó¾   •— ‰                      | ¦  «        pF‰j        o?t          | t          j        ¦  «        o%‰j        | j                 ‰j        ‰j                 k     S r   r_   rd   s    €€r   rf   z+CGenerator.visit_BinaryOp.<locals>.<lambda>w   s]   ø€ ˜4×/Ò/°Ñ2Ô2ð LØÔ-ð Lµ*¸QÅÄÑ2OÔ2Oð LØÔ)¨!¬$Ô/°$Ô2EÀaÄdÔ2KÒKðM€ r   r   )Ú_parenthesize_ifÚleftÚrightrG   )r
   r)   Úlval_strÚrval_strs   ``  r   Úvisit_BinaryOpzCGenerator.visit_BinaryOp_   s—   øø€ ð ×(Ò(ØŒFðNð Nð Nð Nð NñOô Oˆð ×(Ò(ØŒGðMð Mð Mð Mð MñNô Nˆð
 &˜X˜X q¤t t t¨X¨XÐ6Ð6r   c                 óˆ   — |                       |j        d„ ¦  «        }|                      |j        ¦  «        ›d|j        ›d|›�S )Nc                 ó6   — t          | t          j        ¦  «        S r   )ra   r   Ú
Assignment)r)   s    r   rf   z-CGenerator.visit_Assignment.<locals>.<lambda>   s   € ¥j°µEÔ4DÑ&EÔ&E€ r   r   )rh   Úrvaluer   ÚlvaluerG   )r
   r)   rl   s      r   Úvisit_AssignmentzCGenerator.visit_Assignment|   sO   € Ø×(Ò(ØœHØEÐEñGô Gˆð "ŸZšZ¨¬Ñ1Ô1Ð1Ð1°1´4°4°4¸¸ÐBÐBr   c                 ó6   — d                      |j        ¦  «        S r   )r$   Únamesr(   s     r   Úvisit_IdentifierTypezCGenerator.visit_IdentifierType‚   s   € Ø�xŠx˜œÑ Ô Ð r   c                 ó   — t          |t          j        ¦  «        rd|                      |¦  «        z   dz   S t          |t          j        ¦  «        rd|                      |¦  «        z   dz   S |                      |¦  «        S )NÚ{Ú}r@   rA   )ra   r   ÚInitListr   ÚExprListr(   s     r   Ú_visit_exprzCGenerator._visit_expr…   sn   € Ý�a�œÑ(Ô(ð 	!Ø˜Ÿš A™œÑ&¨Ñ,Ð,Ý˜�5œ>Ñ*Ô*ð 	!Ø˜Ÿš A™œÑ&¨Ñ,Ð,à—:’:˜a‘=”=Ð r   c                 óÞ   — |r|j         n|                      |¦  «        }|j        r |d|                      |j        ¦  «        z   z  }|j        r |d|                      |j        ¦  «        z   z  }|S )Nz : ú = )r-   Ú_generate_declÚbitsizer   Úinitr|   )r
   r)   Úno_typeÚss       r   Ú
visit_DeclzCGenerator.visit_Decl�   st   € ð Ð9ˆAŒFˆF 4×#6Ò#6°qÑ#9Ô#9ˆØŒ9Ð8�a˜5 4§:¢:¨a¬iÑ#8Ô#8Ñ8Ñ8�aØŒ6ð 	2Ø�˜×)Ò)¨!¬&Ñ1Ô1Ñ1Ñ1ˆAØˆr   c                 óà   ‡ — ‰                       |j        d         ¦  «        }t          |j        ¦  «        dk    r4|dd                     ˆ fd„|j        dd …         D ¦   «         ¦  «        z   z  }|S )Nr   r   ú, c              3   óF   •K  — | ]}‰                      |d ¬¦  «        V — ŒdS )T)r‚   N)r„   ©r    Údeclr
   s     €r   r#   z,CGenerator.visit_DeclList.<locals>.<genexpr>š   sG   øè è € ð "=ð "=Ø(,ð #'§/¢/°$À /Ñ"EÔ"Eð "=ð "=ð "=ð "=ð "=ð "=r   )r   ÚdeclsÚlenr$   ©r
   r)   rƒ   s   `  r   Úvisit_DeclListzCGenerator.visit_DeclList—   sƒ   ø€ Ø�JŠJ�q”w˜q”zÑ"Ô"ˆÝˆqŒw‰<Œ<˜!ÒÐØ�˜Ÿ	š	ð "=ð "=ð "=ð "=Ø01´¸¸¸´ð"=ñ "=ô "=ñ =ô =ñ =ñ =ˆAàˆr   c                 ó’   — d}|j         r |d                     |j         ¦  «        dz   z  }||                      |j        ¦  «        z  }|S )Nr   r   )Ústorager$   Ú_generate_typer;   rŒ   s      r   Úvisit_TypedefzCGenerator.visit_Typedefž   sJ   € ØˆØŒ9Ð4�a˜3Ÿ8š8 A¤IÑ.Ô.°Ñ4Ñ4�aØ	ˆT× Ò  ¤Ñ(Ô(Ñ(ˆØˆr   c                 ó†   — d|                       |j        d¬¦  «        z   dz   }|dz   |                      |j        ¦  «        z   S )Nr@   F©Úemit_declnamerA   r   )r�   Úto_typer6   rH   rŒ   s      r   Ú
visit_CastzCGenerator.visit_Cast¤   sE   € Ø�$×%Ò% a¤i¸uÐ%ÑEÔEÑEÈÑKˆØ�3‰w˜×9Ò9¸!¼&ÑAÔAÑAÐAr   c                 ó”   — g }|j         D ]*}|                     |                      |¦  «        ¦  «         Œ+d                     |¦  «        S ©Nr†   ©ÚexprsÚappendr|   r$   ©r
   r)   Úvisited_subexprsrH   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        ¦  «        ¦  «        S )Nz_Alignas({}))Úformatr   Ú	alignmentr(   s     r   Úvisit_AlignaszCGenerator.visit_Alignas·   s$   € Ø×$Ò$ T§Z¢Z°´Ñ%<Ô%<Ñ=Ô=Ð=r   c                 óú   — |j         s.d                     |                      ¦   «         |j        ¬¦  «        S d                     |                      ¦   «         |j        |                      |j         ¦  «        ¬¦  «        S )Nz{indent}{name},
)Úindentr-   z{indent}{name} = {value},
)r¬   r-   r'   )r'   r¨   r   r-   r   r(   s     r   Úvisit_EnumeratorzCGenerator.visit_Enumeratorº   s�   € ØŒwð 
	Ø&×-Ò-Ø×(Ò(Ñ*Ô*Ø”Vð .ñ ô ð ð
 1×7Ò7Ø×(Ò(Ñ*Ô*Ø”VØ—j’j ¤Ñ)Ô)ð 8ñ ô ð r   c                 ó  ‡ — ‰                       |j        ¦  «        }d‰ _        ‰                       |j        ¦  «        }|j        r7d                     ˆ fd„|j        D ¦   «         ¦  «        }|dz   |z   dz   |z   dz   S |dz   |z   dz   S )Nr   ú;
c              3   óB   •K  — | ]}‰                      |¦  «        V — Œd S r   r   )r    Úpr
   s     €r   r#   z+CGenerator.visit_FuncDef.<locals>.<genexpr>Ì   s-   øè è € Ð!GÐ!G°A $§*¢*¨Q¡-¤-Ð!GÐ!GÐ!GÐ!GÐ!GÐ!Gr   ú
)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Ð!G¸¼Ð!GÑ!GÔ!GÑGÔGˆHØ˜$‘; Ñ)¨EÑ1°DÑ8¸4Ñ?Ð?à˜$‘; Ñ%¨Ñ,Ð,r   c                 ó&  — d}|j         D ]†}t          |t          j        ¦  «        r||                      |¦  «        z  }Œ5t          |t          j        ¦  «        r||                      |¦  «        dz   z  }Œk||                      |¦  «        dz   z  }Œ‡|S )Nr   r²   r¯   )Úextra   r   ÚFuncDefr   ÚPragma)r
   r)   rƒ   r¸   s       r   Úvisit_FileASTzCGenerator.visit_FileASTÑ   s‘   € ØˆØ”5ð 	-ð 	-ˆCÝ˜#�uœ}Ñ-Ô-ð -Ø�T—Z’Z ‘_”_Ñ$��Ý˜C¥¤Ñ.Ô.ð -Ø�T—Z’Z ‘_”_ tÑ+Ñ+��à�T—Z’Z ‘_”_ uÑ,Ñ,��Øˆr   c                 ó
  ‡ — ‰                       ¦   «         dz   }‰ xj        dz  c_        |j        r)|d                     ˆ fd„|j        D ¦   «         ¦  «        z  }‰ xj        dz  c_        |‰                       ¦   «         dz   z  }|S )Nú{
rL   r   c              3   óB   •K  — | ]}‰                      |¦  «        V — Œd S r   ©Ú_generate_stmt)r    Ústmtr
   s     €r   r#   z,CGenerator.visit_Compound.<locals>.<genexpr>à   s1   øè è € ÐMÐM°t˜×,Ò,¨TÑ2Ô2ÐMÐMÐMÐMÐMÐMr   z}
)r   r   Úblock_itemsr$   rŒ   s   `  r   Úvisit_CompoundzCGenerator.visit_CompoundÜ   s™   ø€ Ø×ÒÑÔ %Ñ'ˆØÐÔ˜QÑÐÔØŒ=ð 	NØ�—’ÐMÐMÐMÐM¸q¼}ÐMÑMÔMÑMÔMÑMˆAØÐÔ˜QÑÐÔØ	ˆT×ÒÑ Ô  5Ñ(Ñ(ˆØˆr   c                 ó~   — d|                       |j        ¦  «        z   dz   |                       |j        ¦  «        z   dz   S )Nr@   z){ry   )r   r;   r�   r(   s     r   Úvisit_CompoundLiteralz CGenerator.visit_CompoundLiteralå   s8   € Ø�T—Z’Z ¤Ñ'Ô'Ñ'¨$Ñ.°·²¸A¼FÑ1CÔ1CÑCÀcÑIÐIr   c                 ó   — dS )Nú;© 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                 ó^   — d}|j         r |d|                      |j         ¦  «        z   z  }|dz   S )NÚreturnr   rÇ   )rH   r   rŒ   s      r   Úvisit_ReturnzCGenerator.visit_Returnï   s4   € ØˆØŒ6Ð0�1˜˜dŸjšj¨¬Ñ0Ô0Ñ0Ñ0�1Ø�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 )Nr@   z) ? z) : rA   )r|   ÚcondÚiftrueÚiffalserŒ   s      r   Úvisit_TernaryOpzCGenerator.visit_TernaryOpú   sn   € Ø�4×#Ò# A¤FÑ+Ô+Ñ+¨fÑ4ˆØ	ˆS�4×#Ò# A¤HÑ-Ô-Ñ-°Ñ6Ñ6ˆØ	ˆS�4×#Ò# A¤IÑ.Ô.Ñ.°Ñ4Ñ4ˆØˆr   c                 ó  — d}|j         r||                      |j         ¦  «        z  }|dz  }||                      |j        d¬¦  «        z  }|j        r9||                      ¦   «         dz   z  }||                      |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Ð*�1˜Ÿ
š
 1¤6Ñ*Ô*Ñ*�1Ø	ˆU‰
ˆØ	ˆT× Ò  ¤°dÐ Ñ;Ô;Ñ;ˆØŒ9ð 	AØ�×"Ò"Ñ$Ô$ xÑ/Ñ/ˆAØ�×$Ò$ Q¤Y¸4Ð$Ñ@Ô@Ñ@ˆAØˆr   c                 óJ  — d}|j         r||                      |j         ¦  «        z  }|dz  }|j        r |d|                      |j        ¦  «        z   z  }|dz  }|j        r |d|                      |j        ¦  «        z   z  }|dz  }||                      |j        d¬¦  «        z  }|S )Nzfor (rÇ   r   rÜ   TrÝ   )r�   r   r×   ÚnextrÀ   rÁ   rŒ   s      r   Ú	visit_ForzCGenerator.visit_For
  s­   € ØˆØŒ6Ð*�1˜Ÿ
š
 1¤6Ñ*Ô*Ñ*�1Ø	ˆS‰ˆØŒ6Ð0�1˜˜dŸjšj¨¬Ñ0Ô0Ñ0Ñ0�1Ø	ˆS‰ˆØŒ6Ð0�1˜˜dŸjšj¨¬Ñ0Ô0Ñ0Ñ0�1Ø	ˆU‰
ˆØ	ˆT× Ò  ¤°DÐ Ñ9Ô9Ñ9ˆØˆr   c                 óš   — d}|j         r||                      |j         ¦  «        z  }|dz  }||                      |j        d¬¦  «        z  }|S )Núwhile (rÜ   TrÝ   )r×   r   rÀ   rÁ   rŒ   s      r   Úvisit_WhilezCGenerator.visit_While  sS   € ØˆØŒ6Ð*�1˜Ÿ
š
 1¤6Ñ*Ô*Ñ*�1Ø	ˆU‰
ˆØ	ˆT× Ò  ¤°DÐ Ñ9Ô9Ñ9ˆØˆr   c                 óÎ   — d}||                       |j        d¬¦  «        z  }||                      ¦   «         dz   z  }|j        r||                      |j        ¦  «        z  }|dz  }|S )Nzdo
TrÝ   rä   z);)rÀ   rÁ   r   r×   r   rŒ   s      r   Úvisit_DoWhilezCGenerator.visit_DoWhile  sn   € ØˆØ	ˆT× Ò  ¤°DÐ Ñ9Ô9Ñ9ˆØ	ˆT×ÒÑ Ô  9Ñ,Ñ,ˆØŒ6Ð*�1˜Ÿ
š
 1¤6Ñ*Ô*Ñ*�1Ø	ˆT‰	ˆØˆr   c                 ó    — d}||                       |j        ¦  «        z  }|j        r"|dz  }||                       |j        ¦  «        z  }|dz  }|S )Nz_Static_assert(ú,rA   )r   r×   ÚmessagerŒ   s      r   Úvisit_StaticAssertzCGenerator.visit_StaticAssert$  sX   € ØˆØ	ˆT�ZŠZ˜œÑÔÑˆØŒ9ð 	'Ø�‰HˆAØ�—’˜AœIÑ&Ô&Ñ&ˆAØ	ˆS‰ˆØˆr   c                 ó„   — d|                       |j        ¦  «        z   dz   }||                      |j        d¬¦  «        z  }|S )Nzswitch (rÜ   TrÝ   )r   r×   rÀ   rÁ   rŒ   s      r   Úvisit_SwitchzCGenerator.visit_Switch-  sC   € Ø˜Ÿš A¤FÑ+Ô+Ñ+¨eÑ3ˆØ	ˆT× Ò  ¤°DÐ Ñ9Ô9Ñ9ˆØˆr   c                 óŽ   — d|                       |j        ¦  «        z   dz   }|j        D ]}||                      |d¬¦  «        z  }Œ|S )Nzcase ú:
TrÝ   )r   rH   ÚstmtsrÀ   ©r
   r)   rƒ   rÁ   s       r   Ú
visit_CasezCGenerator.visit_Case2  sT   € Ø�d—j’j ¤Ñ(Ô(Ñ(¨5Ñ0ˆØ”Gð 	<ð 	<ˆDØ�×$Ò$ T°dÐ$Ñ;Ô;Ñ;ˆAˆAØˆr   c                 óR   — d}|j         D ]}||                      |d¬¦  «        z  }Œ|S )Nz	default:
TrÝ   )rð   rÀ   rñ   s       r   Úvisit_DefaultzCGenerator.visit_Default8  s<   € ØˆØ”Gð 	<ð 	<ˆDØ�×$Ò$ T°dÐ$Ñ;Ô;Ñ;ˆAˆAØˆr   c                 óL   — |j         dz   |                      |j        ¦  «        z   S )Nrï   )r-   rÀ   rÁ   r(   s     r   Úvisit_LabelzCGenerator.visit_Label>  s#   € ØŒv˜‰~ × 3Ò 3°A´FÑ ;Ô ;Ñ;Ð;r   c                 ó   — d|j         z   dz   S )Nzgoto rÇ   r,   r(   s     r   Ú
visit_GotozCGenerator.visit_GotoA  s   € Ø˜œÑ #Ñ%Ð%r   c                 ó   — dS )Nz...rÈ   r(   s     r   Úvisit_EllipsisParamzCGenerator.visit_EllipsisParamD  s   € Øˆur   c                 ó.   — |                       |d¦  «        S )NÚstructr¤   r(   s     r   Úvisit_StructzCGenerator.visit_StructG  s   € Ø×/Ò/°°8Ñ<Ô<Ð<r   c                 ó6   — |                       |j        ¦  «        S r   )r�   r;   r(   s     r   Úvisit_TypenamezCGenerator.visit_TypenameJ  s   € Ø×"Ò" 1¤6Ñ*Ô*Ð*r   c                 ó.   — |                       |d¦  «        S )NÚunionr¤   r(   s     r   Úvisit_UnionzCGenerator.visit_UnionM  s   € Ø×/Ò/°°7Ñ;Ô;Ð;r   c                 óê   — d}|j         D ]H}t          |t          j        ¦  «        r|d|j         z   z  }Œ*|d|                      |¦  «        z   dz   z  }ŒI|d|                      |j        ¦  «        z   z  }|S )Nr   ú.r4   r5   r~   )r-   ra   r   ÚIDr   r|   rH   )r
   r)   rƒ   r-   s       r   Úvisit_NamedInitializerz!CGenerator.visit_NamedInitializerP  s„   € ØˆØ”Fð 	2ð 	2ˆDÝ˜$¥¤Ñ)Ô)ð 2Ø�S˜4œ9‘_Ñ$��à�S˜4Ÿ:š: dÑ+Ô+Ñ+¨cÑ1Ñ1��Ø	ˆU�T×%Ò% a¤fÑ-Ô-Ñ-Ñ-ˆØˆr   c                 ó,   — |                       |¦  «        S r   ©r�   r(   s     r   Úvisit_FuncDeclzCGenerator.visit_FuncDeclZ  s   € Ø×"Ò" 1Ñ%Ô%Ð%r   c                 ó0   — |                       |d¬¦  «        S ©NFr“   r  r(   s     r   Úvisit_ArrayDeclzCGenerator.visit_ArrayDecl]  ó   € Ø×"Ò" 1°EÐ"Ñ:Ô:Ð:r   c                 ó0   — |                       |d¬¦  «        S r  r  r(   s     r   Úvisit_TypeDeclzCGenerator.visit_TypeDecl`  r  r   c                 ó0   — |                       |d¬¦  «        S r  r  r(   s     r   Úvisit_PtrDeclzCGenerator.visit_PtrDeclc  r  r   c                 óh  — |dv r|j         }| j        }n$|dk    sJ ‚|j        €dn|j        j        }| j        }|dz   |j        pdz   }|�i|dz  }||                      ¦   «         z  }| xj        dz  c_        |dz  }| ||¦  «        z  }| xj        dz  c_        ||                      ¦   «         d	z   z  }|S )
zq Generates code for structs, unions, and enums. name should be
            'struct', 'union', or 'enum'.
        )rü   r  r£   Nr   r   r²   rL   r½   ry   )rŠ   Ú_generate_struct_union_bodyÚvaluesÚenumeratorsÚ_generate_enum_bodyr-   r   r   )r
   r)   r-   ÚmembersÚbody_functionrƒ   s         r   r¥   z&CGenerator._generate_struct_union_enumf  së   € ð Ð&Ð&Ð&Ø”gˆGØ Ô<ˆMˆMà˜6’>�>�>�>ØœhÐ.�d�d°A´HÔ4HˆGØ Ô4ˆMØ�3‰J˜!œ&˜, BÑ'ˆØÐð �‰IˆAØ�×"Ò"Ñ$Ô$Ñ$ˆAØÐÔ Ñ"ÐÔØ�‰JˆAØ��˜wÑ'Ô'Ñ'ˆAØÐÔ Ñ"ÐÔØ�×"Ò"Ñ$Ô$ sÑ*Ñ*ˆAØˆr   c                 óF   ‡ — d                      ˆ fd„|D ¦   «         ¦  «        S )Nr   c              3   óB   •K  — | ]}‰                      |¦  «        V — Œd S r   r¿   rˆ   s     €r   r#   z9CGenerator._generate_struct_union_body.<locals>.<genexpr>  s1   øè è € ÐEÐE°T�t×*Ò*¨4Ñ0Ô0ÐEÐEÐEÐEÐEÐEr   ©r$   ©r
   r  s   ` r   r  z&CGenerator._generate_struct_union_body~  s*   ø€ Ø�wŠwÐEÐEÐEÐE¸WÐEÑEÔEÑEÔEÐEr   c                 ó\   ‡ — d                      ˆ fd„|D ¦   «         ¦  «        d d…         dz   S )Nr   c              3   óB   •K  — | ]}‰                      |¦  «        V — Œd S r   r   )r    r'   r
   s     €r   r#   z1CGenerator._generate_enum_body.<locals>.<genexpr>ƒ  s/   øè è € Ð>Ð>¨U�t—z’z %Ñ(Ô(Ð>Ð>Ð>Ð>Ð>Ð>r   éþÿÿÿr²   r  r  s   ` r   r  zCGenerator._generate_enum_body�  s8   ø€ à�wŠwÐ>Ð>Ð>Ð>°gÐ>Ñ>Ô>Ñ>Ô>¸sÀ¸sÔCÀdÑJÐJr   c                 ó¸  — t          |¦  «        }|r| xj        dz  c_        |                      ¦   «         }|r| xj        dz  c_        |t          j        t          j        t          j        t          j        t          j        t          j	        t          j
        t          j        t          j        t          j        t          j        t          j        t          j        fv r||                      |¦  «        z   dz   S |t          j        fv r|                      |¦  «        S |t          j        fv r||                      |¦  «        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.
        rL   r¯   r²   )r;   r   r   r   ÚDeclrp   ÚCastÚUnaryOprb   Ú	TernaryOpÚFuncCallÚArrayRefÚ	StructRefÚConstantr  ÚTypedefr{   r   ÚCompoundÚIf)r
   r)   rÞ   Útypr¬   s        r   rÀ   zCGenerator._generate_stmt…  s  € õ
 �1‰gŒgˆØÐ-�tÐ(Ô(¨AÑ-Ð(Ô(Ø×"Ò"Ñ$Ô$ˆØÐ-�tÐ(Ô(¨AÑ-Ð(Ô(àÝ”
�EÔ,­e¬j½%¼-Ý”¥¤µ´ÅÄÝ”¥¤µ´½5¼=Ý”ð	 ð  ð  ð ˜DŸJšJ q™MœMÑ)¨EÑ1Ð1Ø•U”^Ð%Ð%Ð%ð
 —:’:˜a‘=”=Ð Ø•U”X�KÐÐØ˜DŸJšJ q™MœMÑ)Ð)à˜DŸJšJ q™MœMÑ)¨DÑ0Ð0r   c                 ó4  — d}|j         rd                     |j         ¦  «        dz   }|j        r |d                     |j        ¦  «        dz   z  }|j        r&||                      |j        d         ¦  «        dz   z  }||                      |j        ¦  «        z  }|S )z& Generation from a Decl node.
        r   r   r   )Úfuncspecr$   r�   Úalignr   r�   r;   rŒ   s      r   r   zCGenerator._generate_decl£  s“   € ð ˆØŒ:Ð5˜3Ÿ8š8 A¤JÑ/Ô/°#Ñ5�qØŒ9Ð4�a˜3Ÿ8š8 A¤IÑ.Ô.°Ñ4Ñ4�aØŒ7Ð5�A˜Ÿš A¤G¨A¤JÑ/Ô/°#Ñ5Ñ5�AØ	ˆT× Ò  ¤Ñ(Ô(Ñ(ˆØˆr   Tc                 ó   — t          |¦  «        }|t          j        k    �rÑd}|j        r |d                     |j        ¦  «        dz   z  }||                      |j         ¦  «        z  }|j        r	|r|j        nd}t          |¦  «        D �]\\  }}t          |t          j	        ¦  «        r~|dk    r+t          ||dz
           t          j
        ¦  «        rd|z   dz   }|dz  }|j        r |d                     |j        ¦  «        dz   z  }||                      |j        ¦  «        dz   z  }Œžt          |t          j        ¦  «        rV|dk    r+t          ||dz
           t          j
        ¦  «        rd|z   dz   }|d|                      |j        ¦  «        z   dz   z  }�Œt          |t          j
        ¦  «        r4|j        r(d	d                     |j        ¦  «        ›|rd|z   nd›�}�ŒWd
|z   }�Œ^|r|d|z   z  }|S |t          j        k    r|                      |j         ¦  «        S |t          j        k    r|                      |j         |¬¦  «        S |t          j        k    rd                     |j        ¦  «        dz   S |t          j	        t          j
        t          j        fv r!|                      |j         ||gz   |¬¦  «        S |                      |¦  «        S )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@   rA   r4   r5   z* rY   r“   )r;   r   ÚTypeDeclÚqualsr$   r   ÚdeclnameÚ	enumeratera   Ú	ArrayDeclÚPtrDeclÚ	dim_qualsÚdimÚFuncDeclrB   r!  r   ÚTypenamer�   ÚIdentifierTyperu   )	r
   r)   Ú	modifiersr”   r,  rƒ   ÚnstrÚiÚmodifiers	            r   r�   zCGenerator._generate_type­  sÛ  € õ �1‰gŒgˆð •%”.Ò Ñ ØˆAØŒwÐ4˜˜SŸXšX a¤gÑ.Ô.°Ñ4Ñ4˜Ø�—’˜AœFÑ#Ô#Ñ#ˆAà!"¤ÐE°ÐE�1”:�:À2ˆDõ
  )¨Ñ3Ô3ð *ñ *‘��8Ý˜h­¬Ñ8Ô8ð *Ø˜Qš˜Ý" 9¨Q°©UÔ#3µU´]ÑCÔCð à#&¨¡:°Ñ#3˜DØ˜C‘K�DØÔ)ð CØ §¢¨Ô);Ñ <Ô <¸sÑ BÑB˜Ø˜DŸJšJ x¤|Ñ4Ô4°sÑ:Ñ:�D�DÝ ­%¬.Ñ9Ô9ð 
*Ø˜Qš˜Ý" 9¨Q°©UÔ#3µU´]ÑCÔCð à#&¨¡:°Ñ#3˜DØ˜C $§*¢*¨X¬]Ñ";Ô";Ñ;¸cÑAÑA�D‘DÝ ­%¬-Ñ8Ô8ð *Ø”~ð *ð *Ø+.¯8ª8°H´NÑ+CÔ+CÐ+CØ9=Ð+E¨3°©:¨:À2Ð+Eð G˜™ð  # T™z˜ùØÐ$�Q˜# ™*‘_�QØˆHØ•E”JÒÐØ×&Ò& q¤vÑ.Ô.Ð.Ø•E”NÒ"Ð"Ø×&Ò& q¤v¸}Ð&ÑMÔMÐMØ•EÔ(Ò(Ð(Ø—8’8˜AœGÑ$Ô$ sÑ*Ð*Ø•U”_¥e¤mµU´^ÐDÐDÐDØ×&Ò& q¤v¨y¸A¸3©Ø7Dð 'ñ Fô Fð Fð —:’:˜a‘=”=Ð r   c                 ó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.
        r@   rA   )r|   )r
   r)   Ú	conditionrƒ   s       r   rh   zCGenerator._parenthesize_ifâ  s:   € ð ×Ò˜QÑÔˆØˆ9�Q‰<Œ<ð 	Ø˜‘7˜S‘=Ð àˆHr   c                 ó6   ‡ — ‰                       |ˆ fd„¦  «        S )z. Common use case for _parenthesize_if
        c                 ó0   •— ‰                      | ¦  «         S r   )r`   )re   r
   s    €r   rf   z8CGenerator._parenthesize_unless_simple.<locals>.<lambda>ï  s   ø€ °d×6JÒ6JÈ1Ñ6MÔ6MÐ2M€ r   )rh   r(   s   ` r   r6   z&CGenerator._parenthesize_unless_simpleì  s%   ø€ ð ×$Ò$ QÐ(MÐ(MÐ(MÐ(MÑNÔNÐNr   c                 ó�   — t          |t          j        t          j        t          j        t          j        t          j        f¦  «        S )z~ Returns True for nodes that are "simple" - i.e. nodes that always
            have higher precedence than operators.
        )ra   r   r(  r  r&  r'  r%  r(   s     r   r`   zCGenerator._is_simple_nodeñ  s5   € õ ˜!�eœn­e¬h½¼Ý#œo­u¬~ð?ñ @ô @ð 	@r   N)F)Cr   Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r*   r.   r2   r9   r>   rD   rJ   rc   rm   rs   rv   r|   r„   r�   r‘   r–   rž   r¡   r¦   rª   r­   r¶   r»   rÃ   rÅ   rÉ   rÎ   rÑ   rÓ   rÕ   rÚ   rß   râ   rå   rç   rë   rí   rò   rô   rö   rø   rú   rý   rÿ   r  r  r	  r  r  r  r¥   r  r  rÀ   r   r�   rh   r6   r`   rÈ   r   r   r   r      sà  € € € € € ðð ð	5ð 	5ð 	5ð 	5ð'ð 'ð 'ð?ð ?ð ?ðKð Kð Kðð ð ðð ð ðð ð ð<ð <ð <ð3ð 3ð 3ð5ð 5ð 5ð0ð 0ð 0ðð 	ˆaðð 	ˆað	ð
 	ˆQðð 	ˆQðð 	ˆQðð 	ˆaðð �qðð 	ˆQðð �aðð ˜aðð "& qðð 	ˆaðð �qðð 	ˆQðð �Qðð 	ˆQðð �Qðð ˜Qðð €Nð7ð 7ð 7ð:Cð Cð Cð!ð !ð !ð!ð !ð !ðð ð ð ðð ð ðð ð ðBð Bð Bð+ð +ð +ð+ð +ð +ð@ð @ð @ð>ð >ð >ðð ð ð-ð -ð -ð	ð 	ð 	ðð ð ðJð Jð Jðð ð ðBð Bð Bðð ð ð
ð ð ðð ð ðð ð ðð ð ð	ð 	ð 	ðð ð ðð ð ðð ð ðð ð ð
ð ð ðð ð ð<ð <ð <ð&ð &ð &ðð ð ð=ð =ð =ð+ð +ð +ð<ð <ð <ðð ð ð&ð &ð &ð;ð ;ð ;ð;ð ;ð ;ð;ð ;ð ;ðð ð ð0Fð Fð FðKð Kð Kð1ð 1ð 1ð 1ð<ð ð ð +-¸dð 3!ð 3!ð 3!ð 3!ðjð ð ðOð Oð Oð
@ð @ð @ð @ð @r   r   N)r   r   Úobjectr   rÈ   r   r   ú<module>rI     sa   ðð Ð Ð Ð Ð Ð ðj@ð j@ð j@ð j@ð j@�ñ j@ô j@ð j@ð j@ð j@r   