HEX
Server: Apache
System: Linux 185.122.168.184.host.secureserver.net 5.14.0-570.60.1.el9_6.x86_64 #1 SMP PREEMPT_DYNAMIC Wed Nov 5 05:00:59 EST 2025 x86_64
User: barbeatleanalyti (1024)
PHP: 8.1.33
Disabled: NONE
Upload Files
File: //var/opt/nydus/ops/pycparser/__pycache__/c_generator.cpython-39.pyc
a

�,�h~E�@s ddlmZGdd�de�ZdS)�)�c_astc@s6eZdZdZd�dd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdddddddddddd d d!d!d"d"d"d#�Zd$d%�Zd&d'�Zd(d)�Zd*d+�Zd�d,d-�Zd.d/�Zd0d1�Zd2d3�Zd4d5�Zd6d7�Zd8d9�Zd:d;�Zd<d=�Zd>d?�Zd@dA�ZdBdC�ZdDdE�Z dFdG�Z!dHdI�Z"dJdK�Z#dLdM�Z$dNdO�Z%dPdQ�Z&dRdS�Z'dTdU�Z(dVdW�Z)dXdY�Z*dZd[�Z+d\d]�Z,d^d_�Z-d`da�Z.dbdc�Z/ddde�Z0dfdg�Z1dhdi�Z2djdk�Z3dldm�Z4dndo�Z5dpdq�Z6drds�Z7dtdu�Z8dvdw�Z9dxdy�Z:dzd{�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�F/opt/nydus/tmp/pip-target-wkfpz8uv/lib/python/pycparser/c_generator.py�__init__szCGenerator.__init__cCs
d|jS�N� )r�rrrr	�_make_indentszCGenerator._make_indentcCsd|jj}t|||j�|�S)N�visit_)�	__class__�__name__�getattr�
generic_visit)r�node�methodrrr	�visitszCGenerator.visitcs,|durdSd��fdd�|��D��SdS)N�c3s|]\}}��|�VqdS�N�r)�.0Zc_name�cr
rr	�	<genexpr>'�z+CGenerator.generic_visit.<locals>.<genexpr>)�join�children)rrrr
r	r#szCGenerator.generic_visitcCs|jSr)�value�r�nrrr	�visit_Constant)szCGenerator.visit_ConstantcCs|jSr��namer!rrr	�visit_ID,szCGenerator.visit_IDcCsd}|jr|d|j7}|S)Nz#pragmar)�string)rr"�retrrr	�visit_Pragma/szCGenerator.visit_PragmacCs$|�|j�}|d|�|j�dS)N�[�])�_parenthesize_unless_simpler%rZ	subscript)rr"Zarrrefrrr	�visit_ArrayRef5szCGenerator.visit_ArrayRefcCs"|�|j�}||j|�|j�Sr)r,r%�typer�field)rr"Zsrefrrr	�visit_StructRef9szCGenerator.visit_StructRefcCs$|�|j�}|d|�|j�dS)N�(�))r,r%r�args)rr"Zfrefrrr	�visit_FuncCall=szCGenerator.visit_FuncCallcCs\|jdkrd|�|j�S|�|j�}|jdkr8d|S|jdkrJd|Sd|j|fSdS)N�sizeofz
sizeof(%s)zp++z%s++zp--z%s--z%s%s)�opr�exprr,)rr"�operandrrr	�
visit_UnaryOpAs


zCGenerator.visit_UnaryOprr��������	)z||z&&�|�^�&z==z!=�>z>=�<z<=z>>z<<�+�-�*�/�%cs@���j��fdd��}���j��fdd��}d|�j|fS)Ncs6��|�p2�jo2t|tj�o2�j|j�j�jkSr��_is_simple_noder�
isinstancer�BinaryOp�precedence_mapr6��d�r"rrr	�<lambda>ks
�z+CGenerator.visit_BinaryOp.<locals>.<lambda>cs6��|�p2�jo2t|tj�o2�j|j�j�jkSrrLrQrSrr	rTws
��%s %s %s)�_parenthesize_if�left�rightr6)rr"Zlval_str�rval_strrrSr	�visit_BinaryOp_s
��zCGenerator.visit_BinaryOpcCs*|�|jdd��}d|�|j�|j|fS)NcSst|tj�Sr)rNr�
Assignment)r"rrr	rTrz-CGenerator.visit_Assignment.<locals>.<lambda>rU)rVZrvaluerZlvaluer6)rr"rYrrr	�visit_Assignment|s
�zCGenerator.visit_AssignmentcCsd�|j�Sr)r�namesr!rrr	�visit_IdentifierType�szCGenerator.visit_IdentifierTypecCsPt|tj�rd|�|�dSt|tjtjf�rBd|�|�dS|�|�SdS)N�{�}r1r2)rNrZInitListr�ExprList�Compoundr!rrr	�_visit_expr�s
zCGenerator._visit_exprcCsL|r
|jn|�|�}|jr.|d|�|j�7}|jrH|d|�|j�7}|S)Nz : � = )r%�_generate_declZbitsizer�initrc)rr"�no_type�srrr	�
visit_Decl�s
zCGenerator.visit_DeclcsL��|jd�}t|j�dkrH|dd��fdd�|jdd�D��7}|S)Nrr�, c3s|]}�j|dd�VqdS)T)rgN)ri�r�declr
rr	r�s�z,CGenerator.visit_DeclList.<locals>.<genexpr>)r�decls�lenr�rr"rhrr
r	�visit_DeclList�s�zCGenerator.visit_DeclListcCs2d}|jr|d�|j�d7}||�|j�7}|S)Nrr)�storager�_generate_typer.rorrr	�
visit_Typedef�szCGenerator.visit_TypedefcCs,d|j|jdd�d}|d|�|j�S)Nr1F��
emit_declnamer2r)rrZto_typer,r7rorrr	�
visit_Cast�szCGenerator.visit_CastcCs*g}|jD]}|�|�|��q
d�|�S�Nrj��exprs�appendrcr�rr"Zvisited_subexprsr7rrr	�visit_ExprList�s
zCGenerator.visit_ExprListcCs*g}|jD]}|�|�|��q
d�|�Srwrxr{rrr	�visit_InitList�s
zCGenerator.visit_InitListcCs|j|dd�S)N�enumr$��_generate_struct_union_enumr!rrr	�
visit_Enum�szCGenerator.visit_EnumcCsd�|�|j��S)Nz_Alignas({}))�formatr�	alignmentr!rrr	�
visit_Alignas�szCGenerator.visit_AlignascCs<|jsdj|��|jd�Sdj|��|j|�|j�d�SdS)Nz{indent}{name},
)�indentr%z{indent}{name} = {value},
)r�r%r )r r�rr%rr!rrr	�visit_Enumerator�s�
�zCGenerator.visit_Enumeratorcsj��|j�}d�_��|j�}|jrVd��fdd�|jD��}|d|d|dS|d|dSdS)Nr�;
c3s|]}��|�VqdSrr)r�pr
rr	r�rz+CGenerator.visit_FuncDef.<locals>.<genexpr>�
)rrlr�bodyZparam_declsr)rr"rlr�Zknrdeclsrr
r	�
visit_FuncDef�szCGenerator.visit_FuncDefcCsbd}|jD]R}t|tj�r*||�|�7}q
t|tj�rJ||�|�d7}q
||�|�d7}q
|S)Nrr�r�)�extrNrZFuncDefrZPragma)rr"rhr�rrr	�
visit_FileAST�s
zCGenerator.visit_FileASTcs`���d}�jd7_|jr>|d��fdd�|jD��7}�jd8_|���d7}|S)N�{
r:rc3s|]}��|�VqdSr��_generate_stmt)r�stmtr
rr	r�rz,CGenerator.visit_Compound.<locals>.<genexpr>z}
)rrZblock_itemsrrorr
r	�visit_Compound�szCGenerator.visit_CompoundcCs$d|�|j�d|�|j�dS)Nr1z){r`)rr.rfr!rrr	�visit_CompoundLiteral�sz CGenerator.visit_CompoundLiteralcCsdS)N�;rr!rrr	�visit_EmptyStatement�szCGenerator.visit_EmptyStatementcsd��fdd�|jD��S)Nrjc3s|]}��|�VqdSrr)r�paramr
rr	r�rz-CGenerator.visit_ParamList.<locals>.<genexpr>)r�paramsr!rr
r	�visit_ParamList�szCGenerator.visit_ParamListcCs&d}|jr|d|�|j�7}|dS)N�returnrr�)r7rrorrr	�visit_Return�szCGenerator.visit_ReturncCsdS)Nzbreak;rr!rrr	�visit_Break�szCGenerator.visit_BreakcCsdS)Nz	continue;rr!rrr	�visit_Continue�szCGenerator.visit_ContinuecCsHd|�|j�d}|d|�|j�d7}|d|�|j�d7}|S)Nr1z) ? z) : r2)rc�cond�iftrue�iffalserorrr	�visit_TernaryOp�szCGenerator.visit_TernaryOpcCsdd}|jr||�|j�7}|d7}||j|jdd�7}|jr`||��d7}||j|jdd�7}|S)Nzif (�)
T��
add_indentzelse
)r�rr�r�r�rrorrr	�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�)rfrr��nextr�r�rorrr	�	visit_For
szCGenerator.visit_ForcCs:d}|jr||�|j�7}|d7}||j|jdd�7}|S)N�while (r�Tr�)r�rr�r�rorrr	�visit_Whiles
zCGenerator.visit_WhilecCsJd}||j|jdd�7}||��d7}|jr>||�|j�7}|d7}|S)Nzdo
Tr�r�z);)r�r�rr�rrorrr	�
visit_DoWhileszCGenerator.visit_DoWhilecCs>d}||�|j�7}|jr2|d7}||�|j�7}|d7}|S)Nz_Static_assert(�,r2)rr��messagerorrr	�visit_StaticAssert$szCGenerator.visit_StaticAssertcCs,d|�|j�d}||j|jdd�7}|S)Nzswitch (r�Tr�)rr�r�r�rorrr	�visit_Switch-szCGenerator.visit_SwitchcCs6d|�|j�d}|jD]}||j|dd�7}q|S)Nzcase �:
Tr�)rr7�stmtsr��rr"rhr�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_GotoAszCGenerator.visit_GotocCsdS)Nz...rr!rrr	�visit_EllipsisParamDszCGenerator.visit_EllipsisParamcCs|�|d�S)N�structrr!rrr	�visit_StructGszCGenerator.visit_StructcCs|�|j�Sr)rrr.r!rrr	�visit_TypenameJszCGenerator.visit_TypenamecCs|�|d�S)N�unionrr!rrr	�visit_UnionMszCGenerator.visit_UnioncCsZd}|jD]6}t|tj�r*|d|j7}q
|d|�|�d7}q
|d|�|j�7}|S)Nr�.r*r+rd)r%rNr�IDrrcr7)rr"rhr%rrr	�visit_NamedInitializerPs
z!CGenerator.visit_NamedInitializercCs
|�|�Sr�rrr!rrr	�visit_FuncDeclZszCGenerator.visit_FuncDeclcCs|j|dd�S�NFrtr�r!rrr	�visit_ArrayDecl]szCGenerator.visit_ArrayDeclcCs|j|dd�Sr�r�r!rrr	�visit_TypeDecl`szCGenerator.visit_TypeDeclcCs|j|dd�Sr�r�r!rrr	�
visit_PtrDeclcszCGenerator.visit_PtrDeclcCs�|dvr|j}|j}n(|dks"J�|jdur0dn|jj}|j}|d|jpLd}|dur�|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�r:r�r`)rm�_generate_struct_union_body�valuesZenumerators�_generate_enum_bodyr%rr)rr"r%�membersZ
body_functionrhrrr	r�fs z&CGenerator._generate_struct_union_enumcsd��fdd�|D��S)Nrc3s|]}��|�VqdSrr�rkr
rr	rrz9CGenerator._generate_struct_union_body.<locals>.<genexpr>�r�rr�rr
r	r�~sz&CGenerator._generate_struct_union_bodycs$d��fdd�|D��dd�dS)Nrc3s|]}��|�VqdSrr)rr r
rr	r�rz1CGenerator._generate_enum_body.<locals>.<genexpr>���r�r�r�rr
r	r��szCGenerator._generate_enum_bodycCs�t|�}|r|jd7_|��}|r4|jd8_|tjtjtjtjtjtj	tj
tjtjtj
tjtjtjf
vr�||�|�dS|tjfvr�|�|�S|tjfvr�||�|�S||�|�dSdS)z� Generation from a statement node. This method exists as a wrapper
            for individual visit_* methods to handle different treatment of
            some statements in this context.
        r:r�r�N)r.rrr�Declr[ZCast�UnaryOprOZ	TernaryOp�FuncCall�ArrayRef�	StructRef�Constantr�ZTypedefrarrb�If)rr"r��typr�rrr	r��s �
zCGenerator._generate_stmtcCsfd}|jrd�|j�d}|jr4|d�|j�d7}|jrR||�|jd�d7}||�|j�7}|S)z& Generation from a Decl node.
        rrr)ZfuncspecrrqZalignrrrr.rorrr	re�szCGenerator._generate_declTc	Cst|�}|tjk�r�d}|jr2|d�|j�d7}||�|j�7}|jrR|rR|jnd}t|�D�]\}}t|tj	�r�|dkr�t||dtj
�r�d|d}|d7}|jr�|d�|j�d7}||�|j�d7}q^t|tj
��r(|dk�rt||dtj
��rd|d}|d|�|j�d7}q^t|tj
�r^|j�r`d	d�|j�|�rVd|ndf}q^d
|}q^|�r||d|7}|S|tjk�r�|�|j�S|tjk�r�|j|j|d�S|tjk�r�d�|j�dS|tj	tj
tj
fv�r�|j|j||g|d�S|�|�Sd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rrr1r2r*r+z* %s%srIrtN)r.rZTypeDeclZqualsrrZdeclname�	enumeraterNZ	ArrayDeclZPtrDeclZ	dim_qualsZdimZFuncDeclr3r�reZTypenamerrZIdentifierTyper])	rr"�	modifiersrur�rhZnstr�i�modifierrrr	rr�sR�
��
�zCGenerator._generate_typecCs&|�|�}||�rd|dS|SdS)z� Visits 'n' and returns its string representation, parenthesized
            if the condition function applied to the node returns True.
        r1r2N)rc)rr"�	conditionrhrrr	rV�s
zCGenerator._parenthesize_ifcs��|�fdd��S)z. Common use case for _parenthesize_if
        cs��|�Sr)rMrQr
rr	rT�rz8CGenerator._parenthesize_unless_simple.<locals>.<lambda>)rVr!rr
r	r,�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.
        )rNrr�r�r�r�r�r!rrr	rM�s�zCGenerator._is_simple_nodeN)F)F)F)Cr�
__module__�__qualname__�__doc__r
rrrr#r&r)r-r0r4r9rPrZr\r^rcrirprsrvr|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�rerrrVr,rMrrrr	rs�
�



	
	


5
rN)rr�objectrrrrr	�<module>	s