MOON
Server: Apache
System: Linux server30c.hostingraja.org 3.10.0-962.3.2.lve1.5.63.el7.x86_64 #1 SMP Fri Oct 8 12:03:35 UTC 2021 x86_64
User: jibhires (1887)
PHP: 8.1.30
Disabled: show_source, system, shell_exec, passthru, exec, popen, proc_open, allow_url_fopen, symlink, escapeshellcmd, pcntl_exec
Upload Files
File: //opt/alt/python38/lib/python3.8/site-packages/pycparser/__pycache__/c_generator.cpython-38.pyc
U

��_5�@s ddlmZGdd�de�ZdS)�)�c_astc@s�eZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdldd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zd)d*�Zd+d,�Zd-d.�Zd/d0�Zd1d2�Zd3d4�Zd5d6�Zd7d8�Zd9d:�Zd;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�Z-dWdX�Z.dYdZ�Z/d[d\�Z0d]d^�Z1dmd_d`�Z2dadb�Z3gfdcdd�Z4dedf�Z5dgdh�Z6didj�Z7dkS)n�
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.
    cCs
d|_dS)N���indent_level��self�r	�/c_generator.py�__init__szCGenerator.__init__cCs
d|jS�N� rrr	r	r
�_make_indentszCGenerator._make_indentcCsd|jj}t|||j�|�S)NZvisit_)�	__class__�__name__�getattr�
generic_visit)r�node�methodr	r	r
�visitszCGenerator.visitcs,|dkrdSd��fdd�|��D��SdS)N�c3s|]\}}��|�VqdS�N�r)�.0Zc_name�crr	r
�	<genexpr>#sz+CGenerator.generic_visit.<locals>.<genexpr>)�joinZchildren)rrr	rr
rszCGenerator.generic_visitcCs|jSr)�value�r�nr	r	r
�visit_Constant%szCGenerator.visit_ConstantcCs|jSr��namerr	r	r
�visit_ID(szCGenerator.visit_IDcCs$|�|j�}|d|�|j�dS)N�[�])�_parenthesize_unless_simpler"rZ	subscript)rrZarrrefr	r	r
�visit_ArrayRef+szCGenerator.visit_ArrayRefcCs"|�|j�}||j|�|j�Sr)r&r"�typerZfield)rrZsrefr	r	r
�visit_StructRef/szCGenerator.visit_StructRefcCs$|�|j�}|d|�|j�dS)N�(�))r&r"r�args)rrZfrefr	r	r
�visit_FuncCall3szCGenerator.visit_FuncCallcCs\|�|j�}|jdkrd|S|jdkr0d|S|jdkrJd|�|j�Sd|j|fSdS)Nzp++z%s++zp--z%s--Zsizeofz
sizeof(%s)z%s%s)r&�expr�opr)rrZoperandr	r	r
�
visit_UnaryOp7s


zCGenerator.visit_UnaryOpcs<��|j�fdd��}��|j�fdd��}d||j|fS)Ncs��|�Sr��_is_simple_node��drr	r
�<lambda>F�z+CGenerator.visit_BinaryOp.<locals>.<lambda>cs��|�Srr1r3rr	r
r5Hr6�%s %s %s)�_parenthesize_if�left�rightr/)rrZlval_str�rval_strr	rr
�visit_BinaryOpDs
�
�zCGenerator.visit_BinaryOpcCs*|�|jdd��}d|�|j�|j|fS)NcSst|tj�Sr)�
isinstancer�
Assignment)rr	r	r
r5Nr6z-CGenerator.visit_Assignment.<locals>.<lambda>r7)r8ZrvaluerZlvaluer/)rrr;r	r	r
�visit_AssignmentKs
�zCGenerator.visit_AssignmentcCsd�|j�Sr)r�namesrr	r	r
�visit_IdentifierTypeQszCGenerator.visit_IdentifierTypecCsJt|tj�rd|�|�dSt|tj�r<d|�|�dS|�|�SdS)N�{�}r*r+)r=rZInitListr�ExprListrr	r	r
�_visit_exprTs
zCGenerator._visit_exprFcCsL|r
|jn|�|�}|jr.|d|�|j�7}|jrH|d|�|j�7}|S)N� : � = )r"�_generate_declZbitsizer�initrE)rr�no_type�sr	r	r
�
visit_Decl\szCGenerator.visit_DeclcsL��|jd�}t|j�dkrH|dd��fdd�|jdd�D��7}|S)Nrr�, c3s|]}�j|dd�VqdS)T)rJN)rL)r�declrr	r
ris�z,CGenerator.visit_DeclList.<locals>.<genexpr>)r�decls�lenr�rrrKr	rr
�visit_DeclListfs�zCGenerator.visit_DeclListcCs2d}|jr|d�|j�d7}||�|j�7}|S)Nrr
)�storager�_generate_typer(rQr	r	r
�
visit_Typedefms
zCGenerator.visit_TypedefcCs(d|�|j�d}|d|�|j�S)Nr*r+r
)rTZto_typer&r.rQr	r	r
�
visit_CastsszCGenerator.visit_CastcCs*g}|jD]}|�|�|��q
d�|�S�NrM�Zexprs�appendrEr�rrZvisited_subexprsr.r	r	r
�visit_ExprListws
zCGenerator.visit_ExprListcCs*g}|jD]}|�|�|��q
d�|�SrWrXrZr	r	r
�visit_InitList}s
zCGenerator.visit_InitListcCs�d}|jr|d|j7}|jr�|d7}t|jj�D]H\}}||j7}|jr^|d|�|j�7}|t|jj�dkr2|d7}q2|d7}|S)N�enumr
z {rGrrMrC)r"�values�	enumerateZenumeratorsrrrP)rrrK�iZ
enumeratorr	r	r
�
visit_Enum�s

zCGenerator.visit_Enumcsj��|j�}d�_��|j�}|jrVd��fdd�|jD��}|d|d|dS|d|dSdS)Nr�;
c3s|]}��|�VqdSrr)r�prr	r
r�sz+CGenerator.visit_FuncDef.<locals>.<genexpr>�
)rrNr�bodyZparam_declsr)rrrNreZknrdeclsr	rr
�
visit_FuncDef�szCGenerator.visit_FuncDefcCsBd}|jD]2}t|tj�r*||�|�7}q
||�|�d7}q
|S)Nrrb)�extr=rZFuncDefr)rrrKrgr	r	r
�
visit_FileAST�s
zCGenerator.visit_FileASTcs`���d}�jd7_|jr>|d��fdd�|jD��7}�jd8_|���d7}|S)N�{
�rc3s|]}��|�VqdSr)�_generate_stmt)r�stmtrr	r
r�sz,CGenerator.visit_Compound.<locals>.<genexpr>z}
)rrZblock_itemsrrQr	rr
�visit_Compound�szCGenerator.visit_CompoundcCsdS)N�;r	rr	r	r
�visit_EmptyStatement�szCGenerator.visit_EmptyStatementcsd��fdd�|jD��S)NrMc3s|]}��|�VqdSrr)rZparamrr	r
r�sz-CGenerator.visit_ParamList.<locals>.<genexpr>)rZparamsrr	rr
�visit_ParamList�szCGenerator.visit_ParamListcCs&d}|jr|d|�|j�7}|dS)N�returnr
rn)r.rrQr	r	r
�visit_Return�szCGenerator.visit_ReturncCsdS)Nzbreak;r	rr	r	r
�visit_Break�szCGenerator.visit_BreakcCsdS)Nz	continue;r	rr	r	r
�visit_Continue�szCGenerator.visit_ContinuecCs8|�|j�d}||�|j�d7}||�|j�7}|S)Nz ? rF)rE�cond�iftrue�iffalserQr	r	r
�visit_TernaryOp�szCGenerator.visit_TernaryOpcCsdd}|jr||�|j�7}|d7}||j|jdd�7}|jr`||��d7}||j|jdd�7}|S)Nzif (�)
T��
add_indentzelse
)rurrkrvrwrrQr	r	r
�visit_If�szCGenerator.visit_IfcCs~d}|jr||�|j�7}|d7}|jr<|d|�|j�7}|d7}|jr^|d|�|j�7}|d7}||j|jdd�7}|S)Nzfor (rnr
ryTrz)rIrru�nextrkrlrQr	r	r
�	visit_For�szCGenerator.visit_ForcCs:d}|jr||�|j�7}|d7}||j|jdd�7}|S)N�while (ryTrz)rurrkrlrQr	r	r
�visit_While�szCGenerator.visit_WhilecCsJd}||j|jdd�7}||��d7}|jr>||�|j�7}|d7}|S)Nzdo
Trzrz);)rkrlrrurrQr	r	r
�
visit_DoWhile�szCGenerator.visit_DoWhilecCs,d|�|j�d}||j|jdd�7}|S)Nzswitch (ryTrz)rrurkrlrQr	r	r
�visit_Switch�szCGenerator.visit_SwitchcCs6d|�|j�d}|jD]}||j|dd�7}q|S)Nzcase �:
Trz)rr.�stmtsrk�rrrKrlr	r	r
�
visit_Case�s
zCGenerator.visit_CasecCs&d}|jD]}||j|dd�7}q
|S)Nz	default:
Trz)r�rkr�r	r	r
�
visit_Default�s
zCGenerator.visit_DefaultcCs|jd|�|j�S)Nr�)r"rkrlrr	r	r
�visit_Label�szCGenerator.visit_LabelcCsd|jdS)Nzgoto rnr!rr	r	r
�
visit_Goto�szCGenerator.visit_GotocCsdS)Nz...r	rr	r	r
�visit_EllipsisParam�szCGenerator.visit_EllipsisParamcCs|�|d�S)N�struct��_generate_struct_unionrr	r	r
�visit_StructszCGenerator.visit_StructcCs|�|j�Sr)rTr(rr	r	r
�visit_TypenameszCGenerator.visit_TypenamecCs|�|d�S)N�unionr�rr	r	r
�visit_UnionszCGenerator.visit_UnioncCsbd}|jD]>}t|tj�r*|d|j7}q
t|tj�r
|d|jd7}q
|d|�|j�7}|S)Nr�.r$r%rG)r"r=r�ID�Constantrrr.)rrrKr"r	r	r
�visit_NamedInitializers
z!CGenerator.visit_NamedInitializercCs
|�|�Sr)rTrr	r	r
�visit_FuncDeclszCGenerator.visit_FuncDeclcCs~|d|jpd}|jrz|d7}||��7}|jd7_|d7}|jD]}||�|�7}qH|jd8_||��d7}|S)ze Generates code for structs and unions. name should be either
            'struct' or union.
        r
rrdrjrirC)r"rOrrrk)rrr"rKrNr	r	r
r�s
z!CGenerator._generate_struct_unioncCs�t|�}|r|jd7_|��}|r4|jd8_|tjtjtjtjtjtj	tj
tjtjtj
tjtjtjf
kr�||�|�dS|tjfkr�|�|�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.
        rjrbrdN)r(rrr�Declr>ZCastZUnaryOpZBinaryOpZ	TernaryOp�FuncCall�ArrayRef�	StructRefr�r�ZTypedefrDrZCompound)rrr{�typ�indentr	r	r
rk(s2�
zCGenerator._generate_stmtcCsHd}|jrd�|j�d}|jr4|d�|j�d7}||�|j�7}|S)z& Generation from a Decl node.
        rr
)ZfuncspecrrSrTr(rQr	r	r
rHDszCGenerator._generate_declcCs�t|�}|tjk�rHd}|jr2|d�|j�d7}||�|j�7}|jrN|jnd}t|�D]�\}}t|tj	�r�|dkr�t||dtj
�r�d|d}|d|�|j�d7}qZt|tj�r�|dkr�t||dtj
�r�d|d}|d|�|j
�d7}qZt|tj
�rZ|j�r(d	d�|j�|f}qZd
|}qZ|�rD|d|7}|S|tjk�r`|�|j�S|tjk�rx|�|j�S|tjk�r�d�|j�dS|tj	tj
tjfk�r�|�|j||g�S|�|�SdS)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
rrr*r+r$r%z* %s %s�*N)r(rZTypeDeclZqualsrrZdeclnamer_r=Z	ArrayDeclZPtrDeclZdimZFuncDeclr,r�rHZTypenamerTZIdentifierTyper@)rrZ	modifiersr�rKZnstrr`Zmodifierr	r	r
rTMs@
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.
        r*r+N)rE)rrZ	conditionrKr	r	r
r8{s
zCGenerator._parenthesize_ifcs��|�fdd��S)z. Common use case for _parenthesize_if
        cs��|�Srr1r3rr	r
r5�r6z8CGenerator._parenthesize_unless_simple.<locals>.<lambda>)r8rr	rr
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.
        )r=rr�r�r�r�r�rr	r	r
r2�s�zCGenerator._is_simple_nodeN)F)F)8r�
__module__�__qualname__�__doc__rrrrr r#r'r)r-r0r<r?rArErLrRrUrVr[r\rarfrhrmrorprrrsrtrxr|r~r�r�r�r�r�r�r�r�r�r�r�r�r�r�rkrHrTr8r&r2r	r	r	r
rsj



		


	.
rN)rr�objectrr	r	r	r
�<module>	s