HEX
Server: LiteSpeed
System: Linux s787.bom1.mysecurecloudhost.com 4.18.0-477.13.1.lve.el8.x86_64 #1 SMP Thu Jun 1 16:40:47 EDT 2023 x86_64
User: mobilech (5348)
PHP: 8.1.34
Disabled: NONE
Upload Files
File: //opt/saltstack/salt/lib/python3.10/site-packages/pycparser/__pycache__/c_generator.cpython-310.pyc
o

;j�P�@s2ddlmZmZmZddlmZGdd�d�ZdS)�)�Callable�List�Optional�)�c_astc	@s�eZdZUdZeed<eed<d�deddfdd�Zdefd	d
�Z	de
jdefdd
�Zde
e
jdefdd�Zde
jdefdd�Zde
jdefdd�Zde
jdefdd�Zde
jdefdd�Zde
jdefdd�Zde
jdefdd�Zde
jdefdd�Zidd �d!d"�d#d$�d%d&�d'd(�d)d*�d+d*�d,d-�d.d-�d/d-�d0d-�d1d2�d3d2�d4d5�d6d5�d7d8�d9d8�d:d8i�Zde
jdefd;d<�Zde
j defd=d>�Z!de
j"defd?d@�Z#de
jdefdAdB�Z$d�de
j%dCedefdDdE�Z&de
j'defdFdG�Z(de
j)defdHdI�Z*de
j+defdJdK�Z,de
j-defdLdM�Z.de
j/defdNdO�Z0de
j1defdPdQ�Z2de
j3defdRdS�Z4de
j5defdTdU�Z6de
j7defdVdW�Z8de
j9defdXdY�Z:de
j;defdZd[�Z<de
j=defd\d]�Z>de
j?defd^d_�Z@de
jAdefd`da�ZBde
jCdefdbdc�ZDde
jEdefddde�ZFde
jGdefdfdg�ZHde
jIdefdhdi�ZJde
jKdefdjdk�ZLde
jMdefdldm�ZNde
jOdefdndo�ZPde
jQdefdpdq�ZRde
jSdefdrds�ZTde
jUdefdtdu�ZVde
jWdefdvdw�ZXde
jYdefdxdy�ZZde
j[defdzd{�Z\de
j]defd|d}�Z^de
j_defd~d�Z`de
jadefd�d��Zbde
jcdefd�d��Zdde
jedefd�d��Zfde
jgdefd�d��Zhde
jidefd�d��Zjde
jkdefd�d��Zlde
jmdefd�d��Znde
jodefd�d��Zpde
jae
jeBe
j1Bd�edefd�d��Zqd�ere
jdefd�d��Zsd�ere
j5defd�d��Ztd�de
jd�edefd�d��Zude
j%defd�d��Zvgd�fde
jd�ere
jd�edefd�d��Zwde
jd�exe
jgefdefd�d��Zyde
jdefd�d��Zzde
jdefd�d��Z{dS)��
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.
    �indent_level�reduce_parenthesesF�returnNcCsd|_||_dS)z�Constructs C-code generator

        reduce_parentheses:
            if True, eliminates needless parentheses on binary operators
        rN)rr	)�selfr	�r�I/opt/saltstack/salt/lib/python3.10/site-packages/pycparser/c_generator.py�__init__s
zCGenerator.__init__cCs
d|jS�N� )r�rrrr
�_make_indent"�
zCGenerator._make_indent�nodecCsd|jj}t|||j�|�S)NZvisit_)�	__class__�__name__�getattr�
generic_visit)rr�methodrrr
�visit%szCGenerator.visitcs(|durdSd��fdd�|��D��S)N�c3s�|]
\}}��|�VqdS�N�r)�.0Zc_name�crrr
�	<genexpr>-s�z+CGenerator.generic_visit.<locals>.<genexpr>)�join�children)rrrrr
r)szCGenerator.generic_visit�ncC�|jSr)�value�rr#rrr
�visit_Constant/�zCGenerator.visit_ConstantcCr$r��namer&rrr
�visit_ID2r(zCGenerator.visit_IDcCsd}|jr|d|j7}|S)Nz#pragmar)�string)rr#�retrrr
�visit_Pragma5szCGenerator.visit_PragmacCs$|�|j�}|d|�|j�dS)N�[�])�_parenthesize_unless_simpler*rZ	subscript)rr#Zarrrefrrr
�visit_ArrayRef;szCGenerator.visit_ArrayRefcCs"|�|j�}||j|�|j�Sr)r1r*�typer�field)rr#Zsrefrrr
�visit_StructRef?szCGenerator.visit_StructRefcCs6|�|j�}|jdur|�|j�nd}|d|dS)Nr�(�))r1r*�argsr)rr#Zfrefr8rrr
�visit_FuncCallCszCGenerator.visit_FuncCallcCsz|jdkrd|�|j��d�Sdkr!|�|j�}|�d�Sdkr/|�|j�}|�d�S	|�|j�}|j�|��S)N�sizeofzsizeof(r7zp++z++zp--z--)�opr�exprr1)rr#�operandrrr
�
visit_UnaryOpHs



zCGenerator.visit_UnaryOpz||rz&&r�|��^��&�z==�z!=�>�z>=�<z<=z>>�z<<�+��-�*�	�/�%csF���j��fdd��}���j��fdd��}|�d�j�d|��S)Ncs6��|�p�jot|tj�o�j|j�j�jkSr��_is_simple_noder	�
isinstancer�BinaryOp�precedence_mapr;��d�r#rrr
�<lambda>|�

��z+CGenerator.visit_BinaryOp.<locals>.<lambda>cs6��|�p�jot|tj�o�j|j�j�jkSrrQrVrXrr
rY�rZr)�_parenthesize_if�left�rightr;)rr#Zlval_str�rval_strrrXr
�visit_BinaryOpps
��	zCGenerator.visit_BinaryOpcCs0|�|jdd��}|�|j��d|j�d|��S)NcSst|tj�Sr)rSr�
Assignment)r#rrr
rY��z-CGenerator.visit_Assignment.<locals>.<lambda>r)r[ZrvaluerZlvaluer;)rr#r^rrr
�visit_Assignment�s
�zCGenerator.visit_AssignmentcCsd�|j�Sr)r!�namesr&rrr
�visit_IdentifierType��zCGenerator.visit_IdentifierTypecCsn|tjd�rd|�|�dStjd�rntjd�r$nn
d|�|�dS	|�|�S)Nr�{�}r6r7)r�InitListr�ExprList�Compoundr&rrr
�_visit_expr�s�*
zCGenerator._visit_expr�no_typecCsL|r|jn|�|�}|jr|d|�|j�7}|jr$|d|�|j�7}|S)Nz : � = )r*�_generate_declZbitsizer�initrk)rr#rl�srrr
�
visit_Decl�szCGenerator.visit_DeclcsL��|jd�}t|j�dkr$|dd��fdd�|jdd�D��7}|S)Nrr�, c3s�|]
}�j|dd�VqdS)T)rlN)rq�r�declrrr
r �s�
�z,CGenerator.visit_DeclList.<locals>.<genexpr>)r�decls�lenr!�rr#rprrr
�visit_DeclList�s�zCGenerator.visit_DeclListcCs2d}|jr|d�|j�d7}||�|j�7}|S)Nrr)�storager!�_generate_typer3rwrrr
�
visit_Typedef�s
zCGenerator.visit_TypedefcCs,d|j|jdd�d}|d|�|j�S)Nr6F��
emit_declnamer7r)rzZto_typer1r<rwrrr
�
visit_Cast�szCGenerator.visit_CastcC�*g}|jD]
}|�|�|��qd�|�S�Nrr�Zexprs�appendrkr!�rr#Zvisited_subexprsr<rrr
�visit_ExprList��

zCGenerator.visit_ExprListcCrr�r�r�rrr
�visit_InitList�r�zCGenerator.visit_InitListcC�|j|dd�S)N�enumr)��_generate_struct_union_enumr&rrr
�
visit_Enum��zCGenerator.visit_EnumcCsd�|�|j��S)Nz_Alignas({}))�formatr�	alignmentr&rrr
�
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&rrr
�visit_Enumerator�s�
�zCGenerator.visit_Enumeratorcsf��|j�}d�_��|j�}|jr+d��fdd�|jD��}|d|d|dS|d|dS)Nr�;
c3��|]}��|�VqdSrr)r�prrr
r ���z+CGenerator.visit_FuncDef.<locals>.<genexpr>�
)rrtr�bodyZparam_declsr!)rr#rtr�Zknrdeclsrrr
�
visit_FuncDef�szCGenerator.visit_FuncDefcCsnd}|jD]/}|tjd�r||�|�7}ntjd�r)||�|�d7}n	||�|�d7}q|S)Nrrr�r�)�extr�FuncDefr�Pragma)rr#rpr�rrr
�
visit_FileAST�s
���zCGenerator.visit_FileASTcs`���d}�jd7_|jr|d��fdd�|jD��7}�jd8_|���d7}|S)N�{
r@rc3r�r��_generate_stmt)r�stmtrrr
r �r�z,CGenerator.visit_Compound.<locals>.<genexpr>z}
)rrZblock_itemsr!rwrrr
�visit_Compound�szCGenerator.visit_CompoundcCs$d|�|j�d|�|j�dS)Nr6z){rg)rr3ror&rrr
�visit_CompoundLiterals$z CGenerator.visit_CompoundLiteralcC�dS)N�;rr&rrr
�visit_EmptyStatement�zCGenerator.visit_EmptyStatementcsd��fdd�|jD��S)Nrrc3r�rr)r�paramrrr
r 
r�z-CGenerator.visit_ParamList.<locals>.<genexpr>)r!�paramsr&rrr
�visit_ParamList	szCGenerator.visit_ParamListcCs&d}|jr|d|�|j�7}|dS)Nr
rr�)r<rrwrrr
�visit_ReturnszCGenerator.visit_ReturncCr�)Nzbreak;rr&rrr
�visit_Breakr�zCGenerator.visit_BreakcCr�)Nz	continue;rr&rrr
�visit_Continuer�zCGenerator.visit_ContinuecCsHd|�|j�d}|d|�|j�d7}|d|�|j�d7}|S)Nr6z) ? z) : r7)rk�cond�iftrue�iffalserwrrr
�visit_TernaryOpszCGenerator.visit_TernaryOpcCsdd}|jr
||�|j�7}|d7}||j|jdd�7}|jr0||��d7}||j|jdd�7}|S)Nzif (�)
T��
add_indentzelse
)r�rr�r�r�rrwrrr
�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�rr�Tr�)rorr��nextr�r�rwrrr
�	visit_For)szCGenerator.visit_ForcCs:d}|jr
||�|j�7}|d7}||j|jdd�7}|S)N�while (r�Tr�)r�rr�r�rwrrr
�visit_While7szCGenerator.visit_WhilecCsJd}||j|jdd�7}||��d7}|jr||�|j�7}|d7}|S)Nzdo
Tr�r�z);)r�r�rr�rrwrrr
�
visit_DoWhile?szCGenerator.visit_DoWhilecCs>d}||�|j�7}|jr|d7}||�|j�7}|d7}|S)Nz_Static_assert(�,r7)rr��messagerwrrr
�visit_StaticAssertHszCGenerator.visit_StaticAssertcCs,d|�|j�d}||j|jdd�7}|S)Nzswitch (r�Tr�)rr�r�r�rwrrr
�visit_SwitchQszCGenerator.visit_SwitchcCs6d|�|j�d}|jD]}||j|dd�7}q
|S)Nzcase �:
Tr�)rr<�stmtsr��rr#rpr�rrr
�
visit_CaseVs
zCGenerator.visit_CasecCs&d}|jD]}||j|dd�7}q|S)Nz	default:
Tr�)r�r�r�rrr
�
visit_Default\s
zCGenerator.visit_DefaultcCs|jd|�|j�S)Nr�)r*r�r�r&rrr
�visit_LabelbszCGenerator.visit_LabelcCsd|jdS)Nzgoto r�r)r&rrr
�
visit_Gotoer�zCGenerator.visit_GotocCr�)Nz...rr&rrr
�visit_EllipsisParamhr�zCGenerator.visit_EllipsisParamcC�|�|d�S)N�structr�r&rrr
�visit_StructkrezCGenerator.visit_StructcCs|�|j�Sr)rzr3r&rrr
�visit_TypenamenrezCGenerator.visit_TypenamecCr�)N�unionr�r&rrr
�visit_UnionqrezCGenerator.visit_UnioncCsZd}|jD]}t|tj�r|d|j7}q|d|�|�d7}q|d|�|j�7}|S)Nr�.r/r0rm)r*rSr�IDrrkr<)rr#rpr*rrr
�visit_NamedInitializerts
z!CGenerator.visit_NamedInitializercCs
|�|�Sr�rzr&rrr
�visit_FuncDecl~rzCGenerator.visit_FuncDeclcCr��NFr|r�r&rrr
�visit_ArrayDecl�r�zCGenerator.visit_ArrayDeclcCr�r�r�r&rrr
�visit_TypeDecl�r�zCGenerator.visit_TypeDeclcCr�r�r�r&rrr
�
visit_PtrDecl�r�zCGenerator.visit_PtrDeclr*cCs�|dvrt|tjtjf�sJ�|j}|j}n|dksJ�t|tj�s$J�|jdur+dn|jj}|j	}|d|j
p9d}|duri|d7}||��7}|jd7_|d7}|||�7}|jd8_||��d	7}|S)
zlGenerates code for structs, unions, and enums. name should be
        'struct', 'union', or 'enum'.
        )r�r�r�Nrrr�r@r�rg)
rSr�Struct�Unionru�_generate_struct_union_body�Enum�valuesZenumerators�_generate_enum_bodyr*rr)rr#r*�membersZ
body_functionrprrr
r��s$z&CGenerator._generate_struct_union_enumr�csd��fdd�|D��S)Nrc3r�rr�rsrrr
r �r�z9CGenerator._generate_struct_union_body.<locals>.<genexpr>�r!�rr�rrr
r��sz&CGenerator._generate_struct_union_bodycs$d��fdd�|D��dd�dS)Nrc3r�rr)rr%rrr
r �r�z1CGenerator._generate_enum_body.<locals>.<genexpr>���r�r�r�rrr
r��s$zCGenerator._generate_enum_bodyr�cCs�|r	|jd7_|��}|r|jd8_|tjd�r notjd�r)nftjd�r2n]tjd�r;nTtjd�rDnKtjd�rMnBtj	d�rVn9tj
d�r_n0tjd�rhn'tjd�rqntj
d�rzntjd�r�ntjd�r�nn||�|�dStjd�r�|�|�Stjd�r�||�|�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�r�)rrr�Declr`�Cast�UnaryOprT�	TernaryOp�FuncCall�ArrayRef�	StructRef�Constantr��Typedefrirrj�If)rr#r�r�rrr
r��s8
��zCGenerator._generate_stmtcCsfd}|jr
d�|j�d}|jr|d�|j�d7}|jr)||�|jd�d7}||�|j�7}|S)zGeneration from a Decl node.rrr)Zfuncspecr!ryZalignrrzr3rwrrr
rn�szCGenerator._generate_declT�	modifiersr}cCsz|tjd�r�d}|jr|d�|j�d7}||�|j�7}|jr(|r(|jnd}t|�D]�\}}|tjd�rr|dkrOt	||dtj
�rOd|d}|d7}|jr`|d�|j�d7}|jd	urm||�|j�7}|d
7}nZtj
d�r�|dkr�t	||dtj
�r�d|d}|jd	ur�|�|j�nd}|d|d7}n'tj
d�r�|jr�d�|j�}	|r�d|��nd}
d|	�|
��}nd|}nq.|r�|d|7}|Stjd�r�|�|j�Stjd�r�|j|j|d
�Stjd��r	d�|j�dStjd��rntj
d��rn
tj
d��r'nn
|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.
        rrrrrr6r7r/Nr0z* rMr|)r�TypeDecl�qualsr!rr3Zdeclname�	enumerate�	ArrayDeclrS�PtrDeclZ	dim_qualsZdim�FuncDeclr8r�rn�Typenamerz�IdentifierTyperc)rr#r�r}rpZnstr�i�modifierr8r��suffixrrr
rz�sn

�	
���	
���)���B�
zCGenerator._generate_type�	conditioncCs"|�|�}||�rd|dS|S)z�Visits 'n' and returns its string representation, parenthesized
        if the condition function applied to the node returns True.
        r6r7)rk)rr#r�rprrr
r[&s
zCGenerator._parenthesize_ifcs��|�fdd��S)z$Common use case for _parenthesize_ifcs��|�Sr)rRrVrrr
rY4raz8CGenerator._parenthesize_unless_simple.<locals>.<lambda>)r[r&rrr
r12sz&CGenerator._parenthesize_unless_simplecCst|tjtjtjtjtjf�S)zyReturns True for nodes that are "simple" - i.e. nodes that always
        have higher precedence than operators.
        )rSrr�r�r�r�r�r&rrr
rR6s�zCGenerator._is_simple_node)F)|r�
__module__�__qualname__�__doc__�int�__annotations__�boolr�strrrZNoderrrr�r'r�r+r�r.r�r2r�r5r�r9r�r>rUrTr_r`rbr�rdrkr�rqZDeclListrxr�r{r�r~rir�rhr�r�r�ZAlignasr�Z
Enumeratorr�r�r�ZFileASTr�rjr�ZCompoundLiteralr�ZEmptyStatementr�Z	ParamListr�ZReturnr�ZBreakr��Continuer�r�r�r�r�ZForr�ZWhiler�ZDoWhiler�ZStaticAssertr�ZSwitchr�ZCaser�ZDefaultr�ZLabelr�ZGotor�Z
EllipsisParamr�r�r�r�r�r�r�ZNamedInitializerr�r�r�r�r�r�r�r�r�r�rr�r�r�rnrzrr[r1rRrrrr
rs�
������	�
���
��������%	

			
��
�*����
�C��
�rN)�typingrrrrrrrrrr
�<module>s