HEX
Server: Apache
System: Linux server2.voipitup.com.au 4.18.0-553.104.1.lve.el8.x86_64 #1 SMP Tue Feb 10 20:07:30 UTC 2026 x86_64
User: posscale (1027)
PHP: 8.2.29
Disabled: exec,passthru,shell_exec,system
Upload Files
File: //opt/saltstack/salt/lib/python3.10/site-packages/pycparser/__pycache__/c_generator.cpython-310.pyc
o

�N�glE�@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�I/opt/saltstack/salt/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)NZvisit_)�	__class__�__name__�getattr�
generic_visit)r�node�methodrrr	�visitszCGenerator.visitcs(|durdSd��fdd�|��D��S)N�c3s�|]
\}}��|�VqdS�N�r)�.0Zc_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_ConstantcCrr��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&rZ	subscript)rr"Zarrrefrrr	�visit_ArrayRef5�zCGenerator.visit_ArrayRefcCs"|�|j�}||j|�|j�Sr)r.r&�typer�field)rr"Zsrefrrr	�visit_StructRef9szCGenerator.visit_StructRefcCr+)N�(�))r.r&r�args)rr"Zfrefrrr	�visit_FuncCall=r0zCGenerator.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�exprr.)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_mapr9��d�r"rrr	�<lambda>k�
�z+CGenerator.visit_BinaryOp.<locals>.<lambda>cs6��|�p�jot|tj�o�j|j�j�jkSrrOrTrVrr	rWwrX�%s %s %s)�_parenthesize_if�left�rightr9)rr"Zlval_str�rval_strrrVr	�visit_BinaryOp_s
��zCGenerator.visit_BinaryOpcCs*|�|jdd��}d|�|j�|j|fS)NcSst|tj�Sr)rQr�
Assignment)r"rrr	rW�z-CGenerator.visit_Assignment.<locals>.<lambda>rY)rZZrvaluerZlvaluer9)rr"r]rrr	�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�{�}r4r5)rQrZInitListr�ExprListr!rrr	�_visit_expr�s

zCGenerator._visit_exprcCsL|r|jn|�|�}|jr|d|�|j�7}|jr$|d|�|j�7}|S)Nz : � = )r&�_generate_declZbitsizer�initrh)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)rlN)rn�r�declr
rr	r�s��z,CGenerator.visit_DeclList.<locals>.<genexpr>)r�decls�lenr�rr"rmrr
r	�visit_DeclList�s�zCGenerator.visit_DeclListcCs2d}|jr|d�|j�d7}||�|j�7}|S)Nrr)�storager�_generate_typer1rtrrr	�
visit_Typedef�szCGenerator.visit_TypedefcCs,d|j|jdd�d}|d|�|j�S)Nr4F��
emit_declnamer5r)rwZto_typer.r:rtrrr	�
visit_Cast�szCGenerator.visit_CastcC�*g}|jD]
}|�|�|��qd�|�S�Nro�Zexprs�appendrhr�rr"Zvisited_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>�
)rrqr�bodyZparam_declsr)rr"rqr�Zknrdeclsrr
r	�
visit_FuncDef�szCGenerator.visit_FuncDefcCsbd}|jD])}t|tj�r||�|�7}qt|tj�r%||�|�d7}q||�|�d7}q|S)Nrr�r�)�extrQrZFuncDefrZPragma)rr"rmr�rrr	�
visit_FileAST�s
zCGenerator.visit_FileASTcs`���d}�jd7_|jr|d��fdd�|jD��7}�jd8_|���d7}|S)N�{
r>rc3r�r��_generate_stmt)r�stmtr
rr	r�r�z,CGenerator.visit_Compound.<locals>.<genexpr>z}
)rrZblock_itemsrrtrr
r	�visit_Compound�szCGenerator.visit_CompoundcCs$d|�|j�d|�|j�dS)Nr4z){rf)rr1rkr!rrr	�visit_CompoundLiteral�s$z CGenerator.visit_CompoundLiteralcC�dS)N�;rr!rrr	�visit_EmptyStatement��zCGenerator.visit_EmptyStatementcsd��fdd�|jD��S)Nroc3r�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:rrtrrr	�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)Nr4z) ? z) : r5)rh�cond�iftrue�iffalsertrrr	�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�rrtrrr	�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�)rkrr��nextr�r�rtrrr	�	visit_For
szCGenerator.visit_ForcCs:d}|jr
||�|j�7}|d7}||j|jdd�7}|S)N�while (r�Tr�)r�rr�r�rtrrr	�visit_Whiles
zCGenerator.visit_WhilecCsJd}||j|jdd�7}||��d7}|jr||�|j�7}|d7}|S)Nzdo
Tr�r�z);)r�r�rr�rrtrrr	�
visit_DoWhileszCGenerator.visit_DoWhilecCs>d}||�|j�7}|jr|d7}||�|j�7}|d7}|S)Nz_Static_assert(�,r5)rr��messagertrrr	�visit_StaticAssert$szCGenerator.visit_StaticAssertcCs,d|�|j�d}||j|jdd�7}|S)Nzswitch (r�Tr�)rr�r�r�rtrrr	�visit_Switch-szCGenerator.visit_SwitchcCs6d|�|j�d}|jD]}||j|dd�7}q
|S)Nzcase �:
Tr�)rr:�stmtsr��rr"rmr�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_StructGrdzCGenerator.visit_StructcCs|�|j�Sr)rwr1r!rrr	�visit_TypenameJrdzCGenerator.visit_TypenamecCr�)N�unionr�r!rrr	�visit_UnionMrdzCGenerator.visit_UnioncCsZd}|jD]}t|tj�r|d|j7}q|d|�|�d7}q|d|�|j�7}|S)Nr�.r,r-ri)r&rQr�IDrrhr:)rr"rmr&rrr	�visit_NamedInitializerPs
z!CGenerator.visit_NamedInitializercCs
|�|�Sr�rwr!rrr	�visit_FuncDeclZrzCGenerator.visit_FuncDeclcCr��NFryr�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�r>r�rf)rr�_generate_struct_union_body�valuesZenumerators�_generate_enum_bodyr&rr)rr"r&�membersZ
body_functionrmrrr	r�fs z&CGenerator._generate_struct_union_enumcsd��fdd�|D��S)Nrc3r�rr�rpr
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.
        r>r�r�)r1rrr�Declr_ZCastZUnaryOprRZ	TernaryOp�FuncCall�ArrayRef�	StructRef�Constantr�ZTypedefrgrZCompoundZIf)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)ZfuncspecrrvZalignrrwr1rtrrr	rj�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rrr4r5r,r-z* %s%srKry)r1rZTypeDeclZqualsrrZdeclname�	enumeraterQZ	ArrayDeclZPtrDeclZ	dim_qualsZdimZFuncDeclr6r�rjZTypenamerwZIdentifierTyperb)	rr"�	modifiersrzr�rmZnstr�i�modifierrrr	rw�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.
        r4r5)rh)rr"Z	conditionrmrrr	rZ�s
zCGenerator._parenthesize_ifcs��|�fdd��S)z. Common use case for _parenthesize_if
        cs��|�Sr)rPrTr
rr	rW�r`z8CGenerator._parenthesize_unless_simple.<locals>.<lambda>)rZr!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.
        )rQrr�r�r�r�r�r!rrr	rP�s�zCGenerator._is_simple_nodeN)F)Cr�
__module__�__qualname__�__doc__r
rrrr#r'r*r/r3r7r<rSr^rarcrhrnrurxr{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�rjrwrZr.rPrrrr	rs�
�������	�	�	�	�
�
������



	
	


5
rN)rr�objectrrrrr	�<module>s