
    #	hlE                     &    S SK Jr   " S S\5      rg)   )c_astc                      \ rS rSrSrS`S jrS rS rS rS r	S r
S	 rS
 rS rS rS 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+ rS, rS- rS`S. jrS/ rS0 rS1 rS2 rS3 rS4 rS5 rS6 rS7 rS8 rS9 r S: r!S; r"S< r#S= r$S> r%S? r&S@ r'SA r(SB r)SC r*SD r+SE r,SF r-SG r.SH r/SI r0SJ r1SK r2SL r3SM r4SN r5SO r6SP r7SQ r8SR r9SS r:ST r;SU r<SV r=S`SW jr>SX r?/ SY4SZ jr@S[ rAS\ rBS] rCS^rDg_)a
CGenerator   zUses 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U l         Xl        g)zrConstructs C-code generator

reduce_parentheses:
    if True, eliminates needless parentheses on binary operators
    Nindent_levelreduce_parentheses)selfr   s     G/var/www/html/env/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   c                 l    SUR                   R                  -   n[        XU R                  5      " U5      $ )Nvisit_)	__class____name__getattrgeneric_visit)r   nodemethods      r   visitCGenerator.visit   s.    DNN333tT%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/YV4::a==/s    #)joinchildren)r   r   s   ` r   r   CGenerator.generic_visit#   s&    <77J$--/JJJr   c                     UR                   $ r#   )valuer   ns     r   visit_ConstantCGenerator.visit_Constant)   s    wwr   c                     UR                   $ r#   namer/   s     r   visit_IDCGenerator.visit_ID,   s    vvr   c                 P    SnUR                   (       a  USUR                   -   -  nU$ )Nz#pragmar   )string)r   r0   rets      r   visit_PragmaCGenerator.visit_Pragma/   s%    883>!C
r   c                     U R                  UR                  5      nUS-   U R                  UR                  5      -   S-   $ )N[])_parenthesize_unless_simpler5   r   	subscript)r   r0   arrrefs      r   visit_ArrayRefCGenerator.visit_ArrayRef5   s7    11!&&9|djj55;;r   c                     U R                  UR                  5      nX!R                  -   U R                  UR                  5      -   $ r#   )r@   r5   typer   field)r   r0   srefs      r   visit_StructRefCGenerator.visit_StructRef9   s4    //7ff}tzz!''222r   c                     U R                  UR                  5      nUS-   U R                  UR                  5      -   S-   $ )N())r@   r5   r   args)r   r0   frefs      r   visit_FuncCallCGenerator.visit_FuncCall=   s7    //7czDJJqvv..44r   c                    UR                   S:X  a  SU R                  UR                  5      -  $ U R                  UR                  5      nUR                   S:X  a  SU-  $ UR                   S:X  a  SU-  $ UR                   < U< 3$ )Nsizeofz
sizeof(%s)zp++z%s++zp--z%s--)opr   exprr@   )r   r0   operands      r   visit_UnaryOpCGenerator.visit_UnaryOpA   sw    448  $**QVV"44466qvv>Gttu}''''!"w//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_maprT   dr0   r   s    r   <lambda>+CGenerator.visit_BinaryOp.<locals>.<lambda>k   sd    4//2 M-- M*Q2O M))!$$/43F3Fqtt3LLNr   c                   > TR                  U 5      =(       dg    TR                  =(       aT    [        U [        R                  5      =(       a3    TR
                  U R                     TR
                  TR                     :  (       + $ r#   rm   rr   s    r   rt   ru   w   sd    4//2 L-- L*Q2O L))!$$/$2E2Eadd2KKMr   r   )_parenthesize_ifleftrightrT   )r   r0   lval_strrval_strs   ``  r   visit_BinaryOpCGenerator.visit_BinaryOp_   sV     ((FFNO ((GGMN
 &qttX66r   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#   )ro   r   
Assignment)r0   s    r   rt   -CGenerator.visit_Assignment.<locals>.<lambda>   s    jE4D4D&Er   r   )rw   rvaluer   lvaluerT   )r   r0   r{   s      r   visit_AssignmentCGenerator.visit_Assignment|   s=    ((HHEG "ZZ1144BBr   c                 8    SR                  UR                  5      $ r   )r*   namesr/   s     r   visit_IdentifierTypeCGenerator.visit_IdentifierType   s    xx  r   c                     [        U[        R                  5      (       a  SU R                  U5      -   S-   $ [        U[        R                  5      (       a  SU R                  U5      -   S-   $ U R                  U5      $ )N{}rL   rM   )ro   r   InitListr   ExprListr/   s     r   _visit_exprCGenerator._visit_expr   sb    a((A&,,5>>**A&,,::a= r   c                    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 :  = )r5   _generate_declbitsizer   initr   )r   r0   no_typess       r   
visit_DeclCGenerator.visit_Decl   sh     AFF4#6#6q#999a54::aii#888a66))!&&111A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%      "=0; #'//$/"E0;s    )r   declslenr*   r   r0   r   s   `  r   visit_DeclListCGenerator.visit_DeclList   sa    JJqwwqz"qww<!		 "=01"= = = =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_typerF   r   s      r   visit_TypedefCGenerator.visit_Typedef   sE    99a388AII.44a	  ((r   c                     SU R                  UR                  SS9-   S-   nUS-   U R                  UR                  5      -   $ )NrL   Femit_declnamerM   r   )r   to_typer@   rU   r   s      r   
visit_CastCGenerator.visit_Cast   sC    $%%aiiu%EEK3w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   r0   visited_subexprsrU   s       r   visit_ExprListCGenerator.visit_ExprList   ?    GGD##D$4$4T$:; yy)**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enumr4   _generate_struct_union_enumr/   s     r   
visit_EnumCGenerator.visit_Enum   s    ///??r   c                 V    SR                  U R                  UR                  5      5      $ )Nz_Alignas({}))formatr   	alignmentr/   s     r   visit_AlignasCGenerator.visit_Alignas   s     $$TZZ%<==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},
)indentr5   z{indent}{name} = {value},
)r   r5   r.   )r.   r   r   r5   r   r/   s     r   visit_EnumeratorCGenerator.visit_Enumerator   sq    ww&--((*VV .  
 177((*VVjj) 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   r0   r   r   knrdeclss   `    r   visit_FuncDefCGenerator.visit_FuncDef   s    zz!&&!zz!&&!==zz!G!GGH$;)E1D84??$;%,,r   c                 2   SnUR                    H  n[        U[        R                  5      (       a  X R	                  U5      -  nM7  [        U[        R
                  5      (       a  X R	                  U5      S-   -  nMn  X R	                  U5      S-   -  nM     U$ )Nr!   r   r   )extro   r   FuncDefr   Pragma)r   r0   r   r   s       r   visit_FileASTCGenerator.visit_FileAST   sx    55C#u}}--ZZ_$C..ZZ_t++ZZ_u,,  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{
rZ   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==Mq}}MMMAQ	T 5((r   c                     SU R                  UR                  5      -   S-   U R                  UR                  5      -   S-   $ )NrL   z){r   )r   rF   r   r/   s     r   visit_CompoundLiteral CGenerator.visit_CompoundLiteral   s6    TZZ''$.AFF1CCcIIr   c                     g)N; r/   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*   paramsr/   s   ` r   visit_ParamListCGenerator.visit_ParamList   s    yyAAAAr   c                 t    SnUR                   (       a!  USU R                  UR                   5      -   -  nUS-   $ )Nreturnr   r   )rU   r   r   s      r   visit_ReturnCGenerator.visit_Return   s2    661djj00013wr   c                     g)Nzbreak;r   r/   s     r   visit_BreakCGenerator.visit_Break   s    r   c                     g)Nz	continue;r   r/   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$ )NrL   z) ? z) : rM   )r   condiftrueiffalser   s      r   visit_TernaryOpCGenerator.visit_TernaryOp   sk    4##AFF++f4	S4##AHH--66	S4##AII..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    661

166**1	U
	  d ;;99""$x//A$$QYY4$@@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    661

166**1	S661djj0001	S661djj0001	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_While  sL    661

166**1	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  sb    	  D 99	 9,,661

166**1	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(,rM   )r   r  messager   s      r   visit_StaticAssertCGenerator.visit_StaticAssert$  sO    	ZZ99HAAII&&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_Switch-  s?    AFF++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   rU   stmtsr   r   r0   r   r   s       r   
visit_CaseCGenerator.visit_Case2  sI    djj((50GGD$$Td$;;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_Default8  s2    GGD$$Td$;;A r   c                 X    UR                   S-   U R                  UR                  5      -   $ )Nr!  )r5   r   r   r/   s     r   visit_LabelCGenerator.visit_Label>  s$    vv~ 3 3AFF ;;;r   c                 &    SUR                   -   S-   $ )Nzgoto r   r4   r/   s     r   
visit_GotoCGenerator.visit_GotoA  s    #%%r   c                     g)Nz...r   r/   s     r   visit_EllipsisParamCGenerator.visit_EllipsisParamD  s    r   c                 &    U R                  US5      $ )Nstructr   r/   s     r   visit_StructCGenerator.visit_StructG  s    //8<<r   c                 8    U R                  UR                  5      $ r#   )r   rF   r/   s     r   visit_TypenameCGenerator.visit_TypenameJ  s    ""166**r   c                 &    U R                  US5      $ )Nunionr   r/   s     r   visit_UnionCGenerator.visit_UnionM  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!   .r>   r?   r   )r5   ro   r   IDr   r   rU   )r   r0   r   r5   s       r   visit_NamedInitializer!CGenerator.visit_NamedInitializerP  sz    FFD$))S499_$S4::d++c11	 
 	
UT%%aff---r   c                 $    U R                  U5      $ r#   r   r/   s     r   visit_FuncDeclCGenerator.visit_FuncDeclZ  s    ""1%%r   c                 "    U R                  USS9$ NFr   rC  r/   s     r   visit_ArrayDeclCGenerator.visit_ArrayDecl]      ""1E"::r   c                 "    U R                  USS9$ rG  rC  r/   s     r   visit_TypeDeclCGenerator.visit_TypeDecl`  rJ  r   c                 "    U R                  USS9$ rG  rC  r/   s     r   visit_PtrDeclCGenerator.visit_PtrDeclc  rJ  r   c                    US;   a  UR                   nU R                  nO9US:X  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'.
)r3  r:  r   Nr   r!   r   rZ   r   r   )r   _generate_struct_union_bodyvaluesenumerators_generate_enum_bodyr5   r   r
   )r   r0   r5   membersbody_functionr   s         r   r   &CGenerator._generate_struct_union_enumf  s     &&ggG <<M6>!>hh.dAHH4H4HG 44M3J!&&,B' IA""$$A"JAw''A"""$s**A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     EWTt**400Wr   r*   r   rV  s   ` r   rR  &CGenerator._generate_struct_union_body~  s    wwEW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%   r.   r   s     r   r(   1CGenerator._generate_enum_body.<locals>.<genexpr>  s     >gUtzz%((gr   r   r\  r]  s   ` r   rU  CGenerator._generate_enum_body  s$    ww>g>>sCdJJr   c                 .   [        U5      nU(       a  U =R                  S-  sl        U R                  5       nU(       a  U =R                  S-  sl        U[        R                  [        R
                  [        R                  [        R                  [        R                  [        R                  [        R                  [        R                  [        R                  [        R                  [        R                  [        R                  [        R                   4;   a  X@R#                  U5      -   S-   $ U[        R$                  4;   a  U R#                  U5      $ U[        R&                  4;   a  X@R#                  U5      -   $ X@R#                  U5      -   S-   $ )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.
rZ   r   r   )rF   r
   r   r   Declr   CastUnaryOprp   	TernaryOpFuncCallArrayRef	StructRefConstantr?  Typedefr   r   CompoundIf)r   r0   r
  typr   s        r   r   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                 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   rF   r   s      r   r   CGenerator._generate_decl  s     ::388AJJ/#5q99a388AII.44a77AAGGAJ/#55A	  ((r   Tc                 v   [        U5      nU[        R                  :X  Ga)  SnUR                  (       a!  USR	                  UR                  5      S-   -  nXPR                  UR                   5      -  nUR                  (       a  U(       a  UR                  OSn[        U5       GH  u  px[        U[        R                  5      (       a  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X`R                  UR                  5      S-   -  nM  [        U[        R                  5      (       aY  US:w  a,  [        X'S-
     [        R                  5      (       a  SU-   S-   nUSU R                  UR                  5      -   S-   -  nGM(  [        U[        R                  5      (       d  GMJ  UR                  (       a1  S	SR	                  UR                  5      < U(       a  SU-   OS< 3nGM  S
U-   nGM     U(       a  USU-   -  nU$ U[        R                  :X  a  U R!                  UR                   5      $ U[        R"                  :X  a  U R%                  UR                   US9$ U[        R&                  :X  a  SR	                  UR(                  5      S-   $ U[        R                  [        R                  [        R                  4;   a  U R%                  UR                   X!/-   US9$ U R                  U5      $ )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   rL   rM   r>   r?   z* rg   r   )rF   r   TypeDeclqualsr*   r   declname	enumeratero   	ArrayDeclPtrDecl	dim_qualsdimFuncDeclrN   re  r   Typenamer   IdentifierTyper   )	r   r0   	modifiersr   rp  r   nstrimodifiers	            r   r   CGenerator._generate_type  s    1g %.. Aww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                 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.
rL   rM   )r   )r   r0   	conditionr   s       r   rw   CGenerator._parenthesize_if  s0     QQ<<7S= Hr   c                 0   ^  T R                  UU 4S j5      $ )z-Common use case for _parenthesize_if
        c                 0   > TR                  U 5      (       + $ r#   )rn   )rs   r   s    r   rt   8CGenerator._parenthesize_unless_simple.<locals>.<lambda>  s    d6J6J16M2Mr   )rw   r/   s   ` r   r@   &CGenerator._parenthesize_unless_simple  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.
)ro   r   rl  r?  rj  rk  ri  r/   s     r   rn   CGenerator._is_simple_node  s9     !ennehh#oou~~? @ 	@r   r	   N)F)Er   
__module____qualname____firstlineno____doc__r   r   r   r   r1   r6   r;   rC   rI   rP   rW   rq   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-  r0  r4  r7  r;  r@  rD  rH  rL  rO  r   rR  rU  r   r   r   rw   r@   rn   __static_attributes__r   r   r   r   r      s.   	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   objectr   r   r   r   <module>r     s    j@ j@r   