HEX
Server: LiteSpeed
System: Linux php-prod-1.spaceapp.ru 5.15.0-157-generic #167-Ubuntu SMP Wed Sep 17 21:35:53 UTC 2025 x86_64
User: sport3497 (1034)
PHP: 8.1.33
Disabled: NONE
Upload Files
File: //usr/local/CyberCP/lib/python3.10/site-packages/pycparser/__pycache__/c_generator.cpython-310.pyc
o

�hlE�@s ddlmZGdd�de�ZdS)�)�c_astc@s~eZdZdZd�dd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zidd�dd�dd�dd �d!d"�d#d$�d%d$�d&d'�d(d'�d)d'�d*d'�d+d,�d-d,�d.d/�d0d/�d1d2�d3d2�d4d2i�Zd5d6�Zd7d8�Zd9d:�Zd;d<�Zd�d=d>�Zd?d@�ZdAdB�ZdCdD�ZdEdF�ZdGdH�ZdIdJ�ZdKdL�ZdMdN�ZdOdP�ZdQdR�ZdSdT�ZdUdV�Z dWdX�Z!dYdZ�Z"d[d\�Z#d]d^�Z$d_d`�Z%dadb�Z&dcdd�Z'dedf�Z(dgdh�Z)didj�Z*dkdl�Z+dmdn�Z,dodp�Z-dqdr�Z.dsdt�Z/dudv�Z0dwdx�Z1dydz�Z2d{d|�Z3d}d~�Z4dd��Z5d�d��Z6d�d��Z7d�d��Z8d�d��Z9d�d��Z:d�d��Z;d�d��Z<d�d�d��Z=d�d��Z>gd�fd�d��Z?d�d��Z@d�d��ZAd�d��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.
    FcCsd|_||_dS)z� Constructs C-code generator

            reduce_parentheses:
                if True, eliminates needless parentheses on binary operators
        �N)�indent_level�reduce_parentheses)�selfr�r�H/usr/local/CyberCP/lib/python3.10/site-packages/pycparser/c_generator.py�__init__s
zCGenerator.__init__cCs
d|jS�N� )r�rrrr	�_make_indent�
zCGenerator._make_indentcCsd|jj}t|||j�|�S)N�visit_)�	__class__�__name__�getattr�
generic_visit)r�node�methodrrr	�visitszCGenerator.visitcs(|durdSd��fdd�|��D��S)N�c3s�|]
\}}��|�VqdS�N�r)�.0�c_name�cr
rr	�	<genexpr>'s�z+CGenerator.generic_visit.<locals>.<genexpr>)�join�children)rrrr
r	r#szCGenerator.generic_visitcC�|jSr)�value�r�nrrr	�visit_Constant)�zCGenerator.visit_ConstantcCr!r��namer#rrr	�visit_ID,r&zCGenerator.visit_IDcCsd}|jr|d|j7}|S)Nz#pragmar)�string)rr$�retrrr	�visit_Pragma/szCGenerator.visit_PragmacC�$|�|j�}|d|�|j�dS)N�[�])�_parenthesize_unless_simpler(r�	subscript)rr$�arrrefrrr	�visit_ArrayRef5�zCGenerator.visit_ArrayRefcCs"|�|j�}||j|�|j�Sr)r0r(�typer�field)rr$�srefrrr	�visit_StructRef9szCGenerator.visit_StructRefcCr-)N�(�))r0r(r�args)rr$�frefrrr	�visit_FuncCall=r4zCGenerator.visit_FuncCallcCsX|jdkr
d|�|j�S|�|j�}|jdkrd|S|jdkr%d|Sd|j|fS)N�sizeofz
sizeof(%s)zp++z%s++zp--z%s--z%s%s)�opr�exprr0)rr$�operandrrr	�
visit_UnaryOpAs


zCGenerator.visit_UnaryOpz||rz&&r�|��^��&�z==�z!=�>�z>=�<z<=z>>�z<<�+��-�*�	�/�%cs@���j��fdd��}���j��fdd��}d|�j|fS)Ncs6��|�p�jot|tj�o�j|j�j�jkSr��_is_simple_noder�
isinstancer�BinaryOp�precedence_mapr?��d�r$rrr	�<lambda>k�
�z+CGenerator.visit_BinaryOp.<locals>.<lambda>cs6��|�p�jot|tj�o�j|j�j�jkSrrUrZr\rr	r]wr^�%s %s %s)�_parenthesize_if�left�rightr?)rr$�lval_str�rval_strrr\r	�visit_BinaryOp_s
��zCGenerator.visit_BinaryOpcCs*|�|jdd��}d|�|j�|j|fS)NcSst|tj�Sr)rWr�
Assignment)r$rrr	r]�z-CGenerator.visit_Assignment.<locals>.<lambda>r_)r`�rvaluer�lvaluer?)rr$rdrrr	�visit_Assignment|s
�zCGenerator.visit_AssignmentcCsd�|j�Sr)r�namesr#rrr	�visit_IdentifierType��zCGenerator.visit_IdentifierTypecCsFt|tj�rd|�|�dSt|tj�rd|�|�dS|�|�S)N�{�}r9r:)rWr�InitListr�ExprListr#rrr	�_visit_expr�s

zCGenerator._visit_exprcCsL|r|jn|�|�}|jr|d|�|j�7}|jr$|d|�|j�7}|S)Nz : � = )r(�_generate_decl�bitsizer�initrr)rr$�no_type�srrr	�
visit_Decl�s
zCGenerator.visit_DeclcsL��|jd�}t|j�dkr$|dd��fdd�|jdd�D��7}|S)Nrr�, c3s�|]
}�j|dd�VqdS)T)rwN)ry�r�declr
rr	r�s��z,CGenerator.visit_DeclList.<locals>.<genexpr>)r�decls�lenr�rr$rxrr
r	�visit_DeclList�s�zCGenerator.visit_DeclListcCs2d}|jr|d�|j�d7}||�|j�7}|S)Nrr)�storager�_generate_typer5rrrr	�
visit_Typedef�szCGenerator.visit_TypedefcCs,d|j|jdd�d}|d|�|j�S)Nr9F��
emit_declnamer:r)r��to_typer0r@rrrr	�
visit_Cast�szCGenerator.visit_CastcC�*g}|jD]
}|�|�|��qd�|�S�Nrz��exprs�appendrrr�rr$�visited_subexprsr@rrr	�visit_ExprList��

zCGenerator.visit_ExprListcCr�r�r�r�rrr	�visit_InitList�r�zCGenerator.visit_InitListcC�|j|dd�S)N�enumr'��_generate_struct_union_enumr#rrr	�
visit_Enum��zCGenerator.visit_EnumcCsd�|�|j��S)Nz_Alignas({}))�formatr�	alignmentr#rrr	�
visit_Alignas�szCGenerator.visit_AlignascCs8|js
dj|��|jd�Sdj|��|j|�|j�d�S)Nz{indent}{name},
)�indentr(z{indent}{name} = {value},
)r�r(r")r"r�rr(rr#rrr	�visit_Enumerator�s�
�zCGenerator.visit_Enumeratorcsf��|j�}d�_��|j�}|jr+d��fdd�|jD��}|d|d|dS|d|dS)Nr�;
c3��|]}��|�VqdSrr)r�pr
rr	r���z+CGenerator.visit_FuncDef.<locals>.<genexpr>�
)rr|r�body�param_declsr)rr$r|r��knrdeclsrr
r	�
visit_FuncDef�szCGenerator.visit_FuncDefcCsbd}|jD])}t|tj�r||�|�7}qt|tj�r%||�|�d7}q||�|�d7}q|S)Nrr�r�)�extrWr�FuncDefr�Pragma)rr$rxr�rrr	�
visit_FileAST�s
zCGenerator.visit_FileASTcs`���d}�jd7_|jr|d��fdd�|jD��7}�jd8_|���d7}|S)N�{
rDrc3r�r��_generate_stmt)r�stmtr
rr	r�r�z,CGenerator.visit_Compound.<locals>.<genexpr>z}
)rr�block_itemsrrrr
r	�visit_Compound�szCGenerator.visit_CompoundcCs$d|�|j�d|�|j�dS)Nr9z){ro)rr5rvr#rrr	�visit_CompoundLiteral�s$z CGenerator.visit_CompoundLiteralcC�dS)N�;rr#rrr	�visit_EmptyStatement��zCGenerator.visit_EmptyStatementcsd��fdd�|jD��S)Nrzc3r�rr)r�paramr
rr	r�r�z-CGenerator.visit_ParamList.<locals>.<genexpr>)r�paramsr#rr
r	�visit_ParamList�szCGenerator.visit_ParamListcCs&d}|jr|d|�|j�7}|dS)N�returnrr�)r@rrrrr	�visit_Return�szCGenerator.visit_ReturncCr�)Nzbreak;rr#rrr	�visit_Break�r�zCGenerator.visit_BreakcCr�)Nz	continue;rr#rrr	�visit_Continue�r�zCGenerator.visit_ContinuecCsHd|�|j�d}|d|�|j�d7}|d|�|j�d7}|S)Nr9z) ? z) : r:)rr�cond�iftrue�iffalserrrr	�visit_TernaryOp�szCGenerator.visit_TernaryOpcCsdd}|jr
||�|j�7}|d7}||j|jdd�7}|jr0||��d7}||j|jdd�7}|S)Nzif (�)
T��
add_indentzelse
)r�rr�r�r�rrrrr	�visit_IfszCGenerator.visit_IfcCs~d}|jr
||�|j�7}|d7}|jr|d|�|j�7}|d7}|jr/|d|�|j�7}|d7}||j|jdd�7}|S)Nzfor (r�rr�Tr�)rvrr��nextr�r�rrrr	�	visit_For
szCGenerator.visit_ForcCs:d}|jr
||�|j�7}|d7}||j|jdd�7}|S)N�while (r�Tr�)r�rr�r�rrrr	�visit_Whiles
zCGenerator.visit_WhilecCsJd}||j|jdd�7}||��d7}|jr||�|j�7}|d7}|S)Nzdo
Tr�r�z);)r�r�rr�rrrrr	�
visit_DoWhileszCGenerator.visit_DoWhilecCs>d}||�|j�7}|jr|d7}||�|j�7}|d7}|S)Nz_Static_assert(�,r:)rr��messagerrrr	�visit_StaticAssert$szCGenerator.visit_StaticAssertcCs,d|�|j�d}||j|jdd�7}|S)Nzswitch (r�Tr�)rr�r�r�rrrr	�visit_Switch-szCGenerator.visit_SwitchcCs6d|�|j�d}|jD]}||j|dd�7}q
|S)Nzcase �:
Tr�)rr@�stmtsr��rr$rxr�rrr	�
visit_Case2s
zCGenerator.visit_CasecCs&d}|jD]}||j|dd�7}q|S)Nz	default:
Tr�)r�r�r�rrr	�
visit_Default8s
zCGenerator.visit_DefaultcCs|jd|�|j�S)Nr�)r(r�r�r#rrr	�visit_Label>szCGenerator.visit_LabelcCsd|jdS)Nzgoto r�r'r#rrr	�
visit_GotoAr�zCGenerator.visit_GotocCr�)Nz...rr#rrr	�visit_EllipsisParamDr�zCGenerator.visit_EllipsisParamcC�|�|d�S)N�structr�r#rrr	�visit_StructGrmzCGenerator.visit_StructcCs|�|j�Sr)r�r5r#rrr	�visit_TypenameJrmzCGenerator.visit_TypenamecCr�)N�unionr�r#rrr	�visit_UnionMrmzCGenerator.visit_UnioncCsZd}|jD]}t|tj�r|d|j7}q|d|�|�d7}q|d|�|j�7}|S)Nr�.r.r/rs)r(rWr�IDrrrr@)rr$rxr(rrr	�visit_NamedInitializerPs
z!CGenerator.visit_NamedInitializercCs
|�|�Sr�r�r#rrr	�visit_FuncDeclZrzCGenerator.visit_FuncDeclcCr��NFr�r�r#rrr	�visit_ArrayDecl]r�zCGenerator.visit_ArrayDeclcCr�r�r�r#rrr	�visit_TypeDecl`r�zCGenerator.visit_TypeDeclcCr�r�r�r#rrr	�
visit_PtrDeclcr�zCGenerator.visit_PtrDeclcCs�|dvr|j}|j}n|dksJ�|jdurdn|jj}|j}|d|jp&d}|durV|d7}||��7}|jd7_|d7}|||�7}|jd8_||��d	7}|S)
zq Generates code for structs, unions, and enums. name should be
            'struct', 'union', or 'enum'.
        )r�r�r�Nrrr�rDr�ro)r}�_generate_struct_union_body�values�enumerators�_generate_enum_bodyr(rr)rr$r(�members�
body_functionrxrrr	r�fs z&CGenerator._generate_struct_union_enumcsd��fdd�|D��S)Nrc3r�rr�r{r
rr	rr�z9CGenerator._generate_struct_union_body.<locals>.<genexpr>�r�rr�rr
r	r�~sz&CGenerator._generate_struct_union_bodycs$d��fdd�|D��dd�dS)Nrc3r�rr)rr"r
rr	r�r�z1CGenerator._generate_enum_body.<locals>.<genexpr>���r�r�r�rr
r	r��s$zCGenerator._generate_enum_bodycCs�t|�}|r
|jd7_|��}|r|jd8_|tjtjtjtjtjtj	tj
tjtjtj
tjtjtjf
vrA||�|�dS|tjfvrL|�|�S|tjfvrY||�|�S||�|�dS)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.
        rDr�r�)r5rrr�Declrf�Cast�UnaryOprX�	TernaryOp�FuncCall�ArrayRef�	StructRef�Constantr��Typedefrqr�Compound�If)rr$r��typr�rrr	r��s �
zCGenerator._generate_stmtcCsfd}|jr
d�|j�d}|jr|d�|j�d7}|jr)||�|jd�d7}||�|j�7}|S)z& Generation from a Decl node.
        rrr)�funcspecrr��alignrr�r5rrrr	rt�szCGenerator._generate_declTc	Cs�t|�}|tjkr�d}|jr|d�|j�d7}||�|j�7}|jr(|r(|jnd}t|�D]\}}t|tj	�rh|dkrLt||dtj
�rLd|d}|d7}|jr]|d�|j�d7}||�|j�d7}q.t|tj
�r�|dkr�t||dtj
�r�d|d}|d|�|j�d7}q.t|tj
�r�|jr�d	d�|j�|r�d|ndf}q.d
|}q.|r�|d|7}|S|tjkr�|�|j�S|tjkr�|j|j|d�S|tjkr�d�|j�dS|tj	tj
tj
fvr�|j|j||g|d�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.
        rrrrr9r:r.r/z* %s%srQr�)r5r�TypeDecl�qualsrr�declname�	enumeraterW�	ArrayDecl�PtrDecl�	dim_quals�dim�FuncDeclr;r�rt�Typenamer��IdentifierTyperk)	rr$�	modifiersr�r�rx�nstr�i�modifierrrr	r��sT
����


�
zCGenerator._generate_typecCs"|�|�}||�rd|dS|S)z� Visits 'n' and returns its string representation, parenthesized
            if the condition function applied to the node returns True.
        r9r:)rr)rr$�	conditionrxrrr	r`�s
zCGenerator._parenthesize_ifcs��|�fdd��S)z. Common use case for _parenthesize_if
        cs��|�Sr)rVrZr
rr	r]�rgz8CGenerator._parenthesize_unless_simple.<locals>.<lambda>)r`r#rr
r	r0�sz&CGenerator._parenthesize_unless_simplecCst|tjtjtjtjtjf�S)z~ Returns True for nodes that are "simple" - i.e. nodes that always
            have higher precedence than operators.
        )rWrr�r�r�r�r�r#rrr	rV�s�zCGenerator._is_simple_nodeN)F)Cr�
__module__�__qualname__�__doc__r
rrrr%r)r,r3r8r=rBrYrerjrlrrryr�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�rtr�r`r0rVrrrr	rs�
�������	�	�	�	�
�
������



	
	


5
rN)rr�objectrrrrr	�<module>s