+
     hlE  c                   s(    ^RI Ht  ! R R]4      tR# )   )c_astc                   s  a  ] tR t^t o RtRUR ltR tR tR tR t	R t
R tR	 tR
 tR tR t/ R^ bR^bR^bR^bR^bR^bR^bR^bR^bR^bR^bR^bR^bR^bR^bR^	bR^	bR^	/CtR tR  tR! tR" tRUR# ltR$ tR% tR& tR' tR( tR) tR* tR+ tR, tR- tR. t R/ t!R0 t"R1 t#R2 t$R3 t%R4 t&R5 t'R6 t(R7 t)R8 t*R9 t+R: t,R; t-R< t.R= t/R> t0R? t1R@ t2RA t3RB t4RC t5RD t6RE t7RF t8RG t9RH t:RI t;RJ t<RK t=RURL lt>RM t?. RN3RO lt@RP tARQ tBRR tCRStDV tERT# )V
CGeneratorzUses the same visitor pattern as c_ast.NodeVisitor, but modified to
return a value from each visit method, using string accumulation in
generic_visit.
c                s     ^ V n         Wn        R# )zrConstructs C-code generator

reduce_parentheses:
    if True, eliminates needless parentheses on binary operators
Nindent_levelreduce_parentheses)selfr      &&:/usr/lib/python3.14/site-packages/pycparser/c_generator.py__init__ZCGenerator.__init__   s     "4    c                s(    R V P                   ,          #  )r   )r      &r   _make_indentZCGenerator._make_indent   s    T&&&&r
   c                st    R VP                   P                  ,           p\        WV P                  4      ! V4      # )Zvisit_)Z	__class____name__Zgetattrgeneric_visit)r   nodeZmethod   && r   visitZCGenerator.visit   s.    DNN333tT%7%78>>r
   c                sb   a  Vf   R# RP                  V 3R lVP                  4        4       4      # )N c              3   sJ   <"   T F  w  rSP                  V4      x  K  	  R # 5iNr   ).0Zc_nameZcr   s   &  r   	<genexpr>Z+CGenerator.generic_visit.<locals>.<genexpr>'   s     J/YV4::a==/    #)joinZchildren)r   r      f&r   r   ZCGenerator.generic_visit#   s&    <77J$--/JJJr
   c                    VP                   # r   )valuer   nr   r   visit_ConstantZCGenerator.visit_Constant)   s    wwr
   c                r   r   namer   r   r   visit_IDZCGenerator.visit_ID,   s    vvr
   c                sb    R pVP                   '       d   VRVP                   ,           ,          pV# )z#pragmar   )Zstring)r   r   Zretr   r   visit_PragmaZCGenerator.visit_Pragma/   s'    8883>!C
r
   c                    V P                  VP                  4      pVR ,           V P                  VP                  4      ,           R,           # )[])_parenthesize_unless_simpler"   r   Z	subscript)r   r   Zarrrefr   r   visit_ArrayRefZCGenerator.visit_ArrayRef5   s7    11!&&9|djj55;;r
   c                s    V P                  VP                  4      pW!P                  ,           V P                  VP                  4      ,           # r   )r(   r"   typer   Zfield)r   r   Zsrefr   r   visit_StructRefZCGenerator.visit_StructRef9   s4    //7ff}tzz!''222r
   c                r%   )())r(   r"   r   args)r   r   Zfrefr   r   visit_FuncCallZCGenerator.visit_FuncCall=   s7    //7czDJJqvv..44r
   c                s*   VP                   R 8X  d#   RV P                  VP                  4      ,          # V P                  VP                  4      pVP                   R8X  d
   RV,          # VP                   R8X  d
   RV,          # VP                   : V: 2# )Zsizeofz
sizeof(%s)zp++z%s++zp--z%s--)opr   exprr(   )r   r   Zoperandr   r   visit_UnaryOpZCGenerator.visit_UnaryOpA   sw    448  $**QVV"44466qvv>Gttu}''''!"w//r
   z||z&&Z|Z^Z&z==z!=Z>z>=Z<z<=z>>z<<Z+Z-*Z/Z%c                s   a a S P                  SP                  VV 3R  l4      pS P                  SP                  VV 3R l4      pV: RSP                  : RV: 2# )c                 s"  < SP                  V 4      ;'       gr    SP                  ;'       d^    \        V \        P                  4      ;'       d<    SP
                  V P                  ,          SP
                  SP                  ,          8  '       * # r   _is_simple_noder   
isinstancer   BinaryOpprecedence_mapr0   dr   r      &r   <lambda>+CGenerator.visit_BinaryOp.<locals>.<lambda>k   sv    4//2 M M-- M M*Q2O M M))!$$/43F3Fqtt3LLNr
   c                 s"  < SP                  V 4      ;'       gr    SP                  ;'       d^    \        V \        P                  4      ;'       d<    SP
                  V P                  ,          SP
                  SP                  ,          8  '       * # r   r4   r9   r;   r   r<   r=   w   sv    4//2 L L-- L L*Q2O L L))!$$/$2E2Eadd2KKMr
   r   )_parenthesize_ifZleftZrightr0   )r   r   Zlval_strrval_strs   ff  r   visit_BinaryOpZCGenerator.visit_BinaryOp_   sV     ((FFNO ((GGMN
 &qttX66r
   c                s    V P                  VP                  R  4      pV P                  VP                  4      : RVP                  : RV: 2# )c                 s6    \        V \        P                  4      # r   )r6   r   
Assignment)r   r   r   r<   Z-CGenerator.visit_Assignment.<locals>.<lambda>   s    jE4D4D&Er
   r   )r>   Zrvaluer   Zlvaluer0   )r   r   r?   r   r   visit_AssignmentZCGenerator.visit_Assignment|   s=    ((HHEG "ZZ1144BBr
   c                s8    R P                  VP                  4      # r   )r   namesr   r   r   visit_IdentifierTypeZCGenerator.visit_IdentifierType   s    xx  r
   c                s    \        V\        P                  4      '       d    R V P                  V4      ,           R,           # \        V\        P                  4      '       d    RV P                  V4      ,           R,           # V P                  V4      # )Z{}r,   r-   )r6   r   ZInitListr   ExprListr   r   r   _visit_exprZCGenerator._visit_expr   sb    a((A&,,5>>**A&,,::a= r
   c                s<   V'       d   VP                   MV P                  V4      pVP                  '       d*   VR V P                  VP                  4      ,           ,          pVP                  '       d*   VRV P                  VP                  4      ,           ,          pV# )z :  = )r"   _generate_declZbitsizer   initrG   )r   r   no_types   &&& r   
visit_DeclZCGenerator.visit_Decl   sl     AFF4#6#6q#9999a54::aii#888a666))!&&111Ar
   c                s   a  S P                  VP                  ^ ,          4      p\        VP                  4      ^8  d;   VRRP                  V 3R lVP                  R,           4       4      ,           ,          pV# )    , c              3   sJ   <"   T F  pSP                  VR R7      x  K  	  R# 5i)T)rK   N)rN   r   declr      & r   r   Z,CGenerator.visit_DeclList.<locals>.<genexpr>   s(      "=0; #'//$/"E"E0;r   :r    NN)r   declsZlenr   r   r   rL      f& r   visit_DeclListZCGenerator.visit_DeclList   s_    JJqwwqz"qww<!		 "=01"= = = =Ar
   c                s    R pVP                   '       d*   VRP                  VP                   4      R,           ,          pW P                  VP                  4      ,          pV# )r   r   )storager   _generate_typer*   rU   r   r   visit_TypedefZCGenerator.visit_Typedef   sG    999a388AII.44a	  ((r
   c                s    R V P                  VP                  RR7      ,           R,           pVR,           V P                  VP                  4      ,           # )r,   Femit_declnamer-   r   )rY   Zto_typer(   r1   rU   r   r   
visit_CastZCGenerator.visit_Cast   sC    $%%aiiu%EEK3w99!&&AAAr
   c                    . pVP                    F#  pVP                  V P                  V4      4       K%  	  R P                  V4      # rP   ZexprsZappendrG   r   r   r   Zvisited_subexprsr1      &&  r   visit_ExprListZCGenerator.visit_ExprList   ?    GGD##D$4$4T$:; yy)**r
   c                r^   r_   r`   ra   rb   r   visit_InitListZCGenerator.visit_InitList   rd   r
   c                (    V P                  VR R7      # )Zenumr!   _generate_struct_union_enumr   r   r   
visit_EnumZCGenerator.visit_Enum   s    ///??r
   c                sV    R P                  V P                  VP                  4      4      # )z_Alignas({}))formatr   Z	alignmentr   r   r   visit_AlignasZCGenerator.visit_Alignas   s     $$TZZ%<==r
   c                s   VP                   '       g,   R P                  V P                  4       VP                  R7      # RP                  V P                  4       VP                  V P	                  VP                   4      R7      # )z{indent}{name},
)indentr"   z{indent}{name} = {value},
)rl   r"   r   )r   rj   r   r"   r   r   r   r   visit_EnumeratorZCGenerator.visit_Enumerator   ss    www&--((*VV .  
 177((*VVjj) 8  r
   c                sd  a  S P                  VP                  4      p^ S n        S P                  VP                  4      pVP                  '       dK   RP                  V 3R lVP                   4       4      pVR,           V,           R,           V,           R,           # VR,           V,           R,           # )rO   ;
c              3   F   <"   T F  pSP                  V4      x  K  	  R # 5ir   r   )r   Zpr   rS   r   r   Z+CGenerator.visit_FuncDef.<locals>.<genexpr>   s     !GA$**Q--   !
)r   rR   r   bodyZparam_declsr   )r   r   rR   rr   Zknrdeclss   f&   r   visit_FuncDefZCGenerator.visit_FuncDef   s    zz!&&!zz!&&!===zz!G!GGH$;)E1D84??$;%,,r
   c                s^   R pVP                    F  p\        V\        P                  4      '       d   W P	                  V4      ,          pK<  \        V\        P
                  4      '       d!   W P	                  V4      R,           ,          pK|  W P	                  V4      R,           ,          pK  	  V# )r   rq   rn   )extr6   r   ZFuncDefr   ZPragma)r   r   rL   rt   rb   r   visit_FileASTZCGenerator.visit_FileAST   sx    55C#u}}--ZZ_$C..ZZ_t++ZZ_u,,  r
   c                sR  a  S P                  4       R ,           pS ;P                  ^,          un        VP                  '       d-   VRP                  V 3R lVP                   4       4      ,          pS ;P                  ^,          un        VS P                  4       R,           ,          pV# ){
r   c              3   ro   r   _generate_stmt)r   stmtr   rS   r   r   Z,CGenerator.visit_Compound.<locals>.<genexpr>   s     M}t,,T22}rp   z}
)r   r   Zblock_itemsr   rU   rV   r   visit_CompoundZCGenerator.visit_Compound   s{    %'Q===Mq}}MMMAQ	T 5((r
   c                s    R V P                  VP                  4      ,           R,           V P                  VP                  4      ,           R,           # )r,   z){rE   )r   r*   rJ   r   r   r   visit_CompoundLiteralZ CGenerator.visit_CompoundLiteral   s6    TZZ''$.AFF1CCcIIr
   c                    R # ); r   r   r   visit_EmptyStatementZCGenerator.visit_EmptyStatement   s    r
   c                sN   a  R P                  V 3R lVP                   4       4      # )rP   c              3   ro   r   r   )r   Zparamr   rS   r   r   Z-CGenerator.visit_ParamList.<locals>.<genexpr>   s     AuE**rp   )r   Zparamsr   r   r   visit_ParamListZCGenerator.visit_ParamList   s    yyAAAAr
   c                s    R pVP                   '       d*   VRV P                  VP                   4      ,           ,          pVR,           # )Zreturnr   r}   )r1   r   rU   r   r   visit_ReturnZCGenerator.visit_Return   s4    6661djj00013wr
   c                r|   )zbreak;r~   r   r   r   visit_BreakZCGenerator.visit_Break   s    r
   c                r|   )z	continue;r~   r   r   r   visit_ContinueZCGenerator.visit_Continue   s    r
   c                s   R V P                  VP                  4      ,           R,           pVR V P                  VP                  4      ,           R,           ,          pVR V P                  VP                  4      ,           R,           ,          pV# )r,   z) ? z) : r-   )rG   condiftrueiffalserU   r   r   visit_TernaryOpZCGenerator.visit_TernaryOp   sk    4##AFF++f4	S4##AHH--66	S4##AII..44r
   c                sl   R pVP                   '       d"   W P                  VP                   4      ,          pVR,          pW P                  VP                  RR7      ,          pVP                  '       dA   W P                  4       R,           ,          pW P                  VP                  RR7      ,          pV# )zif ()
T
add_indentzelse
)r   r   rx   r   r   r   rU   r   r   visit_IfZCGenerator.visit_If   s    6661

166**1	U
	  d ;;999""$x//A$$QYY4$@@Ar
   c                s   R pVP                   '       d"   W P                  VP                   4      ,          pVR,          pVP                  '       d*   VRV P                  VP                  4      ,           ,          pVR,          pVP                  '       d*   VRV P                  VP                  4      ,           ,          pVR,          pW P	                  VP
                  RR7      ,          pV# )zfor (r}   r   r   Tr   )rJ   r   r   Znextrx   ry   rU   r   r   	visit_ForZCGenerator.visit_For
  s    6661

166**1	S6661djj0001	S6661djj0001	U
	  D 99r
   c                s    R pVP                   '       d"   W P                  VP                   4      ,          pVR,          pW P                  VP                  RR7      ,          pV# )while (r   Tr   )r   r   rx   ry   rU   r   r   visit_WhileZCGenerator.visit_While  sN    6661

166**1	U
	  D 99r
   c                s   R pW P                  VP                  RR7      ,          pW P                  4       R,           ,          pVP                  '       d"   W P	                  VP                  4      ,          pVR,          pV# )zdo
Tr   r   z);)rx   ry   r   r   r   rU   r   r   visit_DoWhileZCGenerator.visit_DoWhile  sd    	  D 99	 9,,6661

166**1	T	r
   c                s    R pW P                  VP                  4      ,          pVP                  '       d+   VR,          pW P                  VP                  4      ,          pVR,          pV# )z_Static_assert(Z,r-   )r   r   ZmessagerU   r   r   visit_StaticAssertZCGenerator.visit_StaticAssert$  sQ    	ZZ999HAAII&&A	Sr
   c                s    R V P                  VP                  4      ,           R,           pW P                  VP                  RR7      ,          pV# )zswitch (r   Tr   )r   r   rx   ry   rU   r   r   visit_SwitchZCGenerator.visit_Switch-  s?    AFF++e3	  D 99r
   c                s    R V P                  VP                  4      ,           R,           pVP                   F  pW P                  VRR7      ,          pK  	  V# )zcase :
Tr   )r   r1   stmtsrx   r   r   rL   ry   rb   r   
visit_CaseZCGenerator.visit_Case2  sI    djj((50GGD$$Td$;;A r
   c                sb    R pVP                    F  pW P                  VRR7      ,          pK  	  V# )z	default:
Tr   )r   rx   r   rb   r   visit_DefaultZCGenerator.visit_Default8  s2    GGD$$Td$;;A r
   c                sh    VP                   R ,           V P                  VP                  4      ,           # )r   )r"   rx   ry   r   r   r   visit_LabelZCGenerator.visit_Label>  s$    vv~ 3 3AFF ;;;r
   c                s6    R VP                   ,           R,           # )zgoto r}   r!   r   r   r   
visit_GotoZCGenerator.visit_GotoA  s    #%%r
   c                r|   )z...r~   r   r   r   visit_EllipsisParamZCGenerator.visit_EllipsisParamD  s    r
   c                &    V P                  VR 4      # )structrg   r   r   r   visit_StructZCGenerator.visit_StructG  s    //8<<r
   c                s8    V P                  VP                  4      # r   )rY   r*   r   r   r   visit_TypenameZCGenerator.visit_TypenameJ  s    ""166**r
   c                r   )unionrg   r   r   r   visit_UnionZCGenerator.visit_UnionM  s    //7;;r
   c                sF   R pVP                    Fe  p\        V\        P                  4      '       d   VRVP                   ,           ,          pK?  VRV P	                  V4      ,           R,           ,          pKg  	  VRV P                  VP                  4      ,           ,          pV# )r   Z.r&   r'   rH   )r"   r6   r   IDr   rG   r1   )r   r   rL   r"   rb   r   visit_NamedInitializerZ!CGenerator.visit_NamedInitializerP  sz    FFD$))S499_$S4::d++c11	 
 	
UT%%aff---r
   c                s$    V P                  V4      # r   rY   r   r   r   visit_FuncDeclZCGenerator.visit_FuncDeclZ  s    ""1%%r
   c                rf   Fr[   r   r   r   r   visit_ArrayDeclZCGenerator.visit_ArrayDecl]      ""1E"::r
   c                rf   r   r   r   r   r   visit_TypeDeclZCGenerator.visit_TypeDecl`  r   r
   c                rf   r   r   r   r   r   visit_PtrDeclZCGenerator.visit_PtrDeclc  r   r
   c                s   VR9   d   VP                   pV P                  pM2VP                  f   RMVP                  P                  pV P                  pVR,           VP
                  ;'       g    R,           pVe   VR,          pWPP                  4       ,          pV ;P                  ^,          un        VR,          pWT! V4      ,          pV ;P                  ^,          un        WPP                  4       R,           ,          pV# )z\Generates code for structs, unions, and enums. name should be
'struct', 'union', or 'enum'.
Nr   r   rq   rv   rE   )r   r   )rT   _generate_struct_union_bodyZvaluesZenumerators_generate_enum_bodyr"   r   r   )r   r   r"   membersZbody_functionrL   s   &&&   r   rh   Z&CGenerator._generate_struct_union_enumf  s     &&ggG <<M  hh.dAHH4H4HG 44M3J!&&,,B' IA""$$A"JAw''A"""$s**Ar
   c                s:   a  R P                  V 3R lV 4       4      # )r   c              3   ro   r   rw   rQ   rS   r   r   Z9CGenerator._generate_struct_union_body.<locals>.<genexpr>  s     EWTt**400Wrp   r   r   r   r   r   r   Z&CGenerator._generate_struct_union_body~  s    wwEWEEEr
   c                sN   a  R P                  V 3R lV 4       4      RR R,           # )r   c              3   ro   r   r   )r   r   r   rS   r   r   Z1CGenerator._generate_enum_body.<locals>.<genexpr>  s     >gUtzz%((grp   Nrq   ir   r   r   r   r   ZCGenerator._generate_enum_body  s$    ww>g>>sCdJJr
   c                sp   \        V4      pV'       d   V ;P                  ^,          un        V P                  4       pV'       d   V ;P                  ^,          un        V\        P                  \        P
                  \        P                  \        P                  \        P                  \        P                  \        P                  \        P                  \        P                  \        P                  \        P                  \        P                  \        P                   39   d   W@P#                  V4      ,           R,           # V\        P$                  39   d   V P#                  V4      # V\        P&                  39   d   W@P#                  V4      ,           # W@P#                  V4      ,           R,           # )zGeneration from a statement node. This method exists as a wrapper
for individual visit_* methods to handle different treatment of
some statements in this context.
rn   rq   )r*   r   r   r   DeclrA   ZCastZUnaryOpr7   Z	TernaryOpFuncCallArrayRef	StructRefConstantr   ZTypedefrF   r   ZCompoundZIf)r   r   r   typrl   s   &&&  r   rx   ZCGenerator._generate_stmt  s   
 1gt((A-(""$t((A-(

E,,ejj%--5==	    JJqM)E11U^^%%
 ::a= UXXKJJqM))JJqM)D00r
   c                s   RpVP                   '       d#   RP                  VP                   4      R,           pVP                  '       d*   VRP                  VP                  4      R,           ,          pVP                  '       d0   W P	                  VP                  ^ ,          4      R,           ,          pW P                  VP                  4      ,          pV# )z%Generation from a Decl node.
        r   r   )Zfuncspecr   rX   Zalignr   rY   r*   rU   r   r   rI   ZCGenerator._generate_decl  s     :::388AJJ/#5q999a388AII.44a777AAGGAJ/#55A	  ((r
   Tc                sp   \        V4      pV\        P                  8X  Ed   RpVP                  '       d*   VRP	                  VP                  4      R,           ,          pWPP                  VP                   4      ,          pVP                  '       d   V'       d   VP                  MRp\        V4       EF  w  rx\        V\        P                  4      '       d   V^ 8w  d>   \        W'^,
          ,          \        P                  4      '       d   RV,           R,           pVR,          pVP                  '       d*   VRP	                  VP                  4      R,           ,          pW`P                  VP                  4      R,           ,          pK  \        V\        P                  4      '       dx   V^ 8w  d>   \        W'^,
          ,          \        P                  4      '       d   RV,           R,           pVRV P                  VP                  4      ,           R,           ,          pEKo  \        V\        P                  4      '       g   EK  VP                  '       d7   RRP	                  VP                  4      : V'       d
   RV,           MR: 2pEK  RV,           pEK  	  V'       d   VRV,           ,          pV# V\        P                  8X  d   V P!                  VP                   4      # V\        P"                  8X  d   V P%                  VP                   VR	7      # V\        P&                  8X  d#   RP	                  VP(                  4      R,           # V\        P                  \        P                  \        P                  39   d&   V P%                  VP                   W!.,           VR	7      # V P                  V4      # )
zRecursive 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&   r'   z* r3   r[   )r*   r   ZTypeDeclZqualsr   r   ZdeclnameZ	enumerater6   Z	ArrayDeclZPtrDeclZ	dim_qualsZdimZFuncDeclr.   r   rI   ZTypenamerY   ZIdentifierTyperC   )	r   r   Z	modifiersr\   r   rL   ZnstrZiZmodifiers	   &&&&     r   rY   ZCGenerator._generate_type  s    1g %.. AwwwSXXagg.44AFF##A!"1::2D
  )3h88Q"9U#3U]]CC#&:#3DCKD))));); <s BBJJx||4s::D%..99Q"9U#3U]]CC#&:#3DC$**X]]";;cAAD%--88~~~+.88HNN+C9=3:2+E G  #Tz'  4( Q#*_QHEJJ&&qvv..ENN"&&qvv}&MME(((88AGG$s**U__emmU^^DD&&qvvy37D ' F F ::a= r
   c                sd    V P                  V4      pV! V4      '       d   RV,           R,           # V# )z|Visits 'n' and returns its string representation, parenthesized
if the condition function applied to the node returns True.
r,   r-   )rG   )r   r   Z	conditionrL   rM   r   r>   ZCGenerator._parenthesize_if  s0     QQ<<7S= Hr
   c                s0   a  S P                  VV 3R l4      # )z-Common use case for _parenthesize_if
        c                 s0   < SP                  V 4      '       * # r   )r5   )r:   r   s   &r   r<   Z8CGenerator._parenthesize_unless_simple.<locals>.<lambda>  s    d6J6J16M2Mr
   )r>   r   r   r   r(   Z&CGenerator._parenthesize_unless_simple  s     $$Q(MNNr
   c                s    \        V\        P                  \        P                  \        P                  \        P
                  \        P                  34      # )ziReturns True for nodes that are "simple" - i.e. nodes that always
have higher precedence than operators.
)r6   r   r   r   r   r   r   r   r   r   r5   ZCGenerator._is_simple_node  s9     !ennehh#oou~~? @ 	@r
   r   N)F)Fr   Z
__module__Z__qualname__Z__firstlineno__Z__doc__r	   r   r   r   r    r#   r$   r)   r+   r/   r2   r8   r@   rB   rD   rG   rN   rW   rZ   r]   rc   re   ri   rk   rm   rs   ru   rz   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   r   r   rx   rI   rY   r>   r(   r5   Z__static_attributes__Z__classdictcell__)Z__classdict__s   @r   r   r      s7    	5'?K<350 	a 	a	
 	Q 	Q 	Q 	a q 	Q a a "&q 	a q 	Q Q 	Q Q QN7:C!!B++@>-	JB
	
<&=+<&;;;0FK1< +-d 3!jO
@ @r
   r   N)r   r   Zobjectr   r~   r
   r   <module>r      s    j@ j@r
   