Your IP : 216.73.216.213


Current Path : /opt/alt/python37/lib64/python3.7/site-packages/Cython/__pycache__/
Upload File :
Current File : //opt/alt/python37/lib64/python3.7/site-packages/Cython/__pycache__/CodeWriter.cpython-37.pyc

B

Z��Z]]�@s|dZddlmZmZddlmZddlTGdd�de�ZGdd	�d	e�Z	Gd
d�de	�Z
Gdd
�d
e	�ZGdd�de�ZdS)a
Serializes a Cython code tree to Cython code. This is primarily useful for
debugging and testing purposes.

The output is in a strict format, no whitespace or comments from the input
is preserved (and it could not be as it is not present in the code tree).
�)�absolute_import�print_function�)�TreeVisitor)�*c@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�LinesResultcCsg|_d|_dS)N�)�lines�s)�self�r�D/opt/alt/python37/lib64/python3.7/site-packages/Cython/CodeWriter.py�__init__szLinesResult.__init__cCs|j|7_dS)N)r
)rr
rrr
�putszLinesResult.putcCs|j�|j�d|_dS)Nr)r	�appendr
)rrrr
�newlineszLinesResult.newlinecCs|�|�|��dS)N)rr)rr
rrr
�putlines
zLinesResult.putlineN)�__name__�
__module__�__qualname__rrrrrrrr
rsrcs�eZdZdZd`�fdd�	Zdd�Zdd�Zd	d
�Zdadd
�Zdd�Z	dd�Z
dbdd�Zdd�Zdcdd�Z
dd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'd&�Zd(d)�Zd*d+�Zd,d-�Zd.d/�Zd0d1�Zd2d3�Zd4d5�Zd6d7�Zd8d9�Zd:d;�Zd<d=�Zd>d?�Z d@dA�Z!dBdC�Z"dDdE�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_�Z0�Z1S)d�DeclarationWriterz    Ncs8tt|���|dkrt�}||_d|_i|_d|_dS)Nr)�superrrr�result�
numindents�	tempnames�tempblockindex)rr)�	__class__rr
r#szDeclarationWriter.__init__cCs|�|�|jS)N)�visitr)r�treerrr
�write,s
zDeclarationWriter.writecCs|jd7_dS)Nr)r)rrrr
�indent0szDeclarationWriter.indentcCs|jd8_dS)Nr)r)rrrr
�dedent3szDeclarationWriter.dedentrcCs|j�|j|j|�dS)N)rr�
indent_stringr)rr
rrr
�	startline6szDeclarationWriter.startlinecCs|j�|�dS)N)rr)rr
rrr
r9szDeclarationWriter.putcCs|j�|j|j|�dS)N)rrr"r)rr
rrr
r<szDeclarationWriter.putlinecCs|j�|�dS)N)rr)rr
rrr
�endline?szDeclarationWriter.endlinecCs|�|�|��dS)N)r#r$)rr
rrr
�lineBs
zDeclarationWriter.lineFcCslt|�dkrhxL|dd�D]<}|�|�|rL|jdk	rL|�d�|�|j�|�d�qW|�|d�dS)Nr���z = z, )�lenr�defaultr)r�items�
output_rhs�itemrrr
�comma_separated_listFs

z&DeclarationWriter.comma_separated_listcCstd|��dS)Nz"Node not handled by serializer: %r)�AssertionError)r�noderrr
�
visit_NodePszDeclarationWriter.visit_NodecCs|�|�dS)N)�
visitchildren)rr.rrr
�visit_ModuleNodeSsz"DeclarationWriter.visit_ModuleNodecCs|�|�dS)N)r0)rr.rrr
�visit_StatListNodeVsz$DeclarationWriter.visit_StatListNodecCsH|jdkrd}n
d|j}|�d|�|��|�|j�|��dS)Nrz"%s"zcdef extern from %s:)Zinclude_filerr r�bodyr!)rr.�filerrr
�visit_CDefExternNodeYs

z&DeclarationWriter.visit_CDefExternNodecCs|�d�|�|j�dS)Nr)rr�base)rr.rrr
�visit_CPtrDeclaratorNodecs
z*DeclarationWriter.visit_CPtrDeclaratorNodecCs|�d�|�|j�dS)N�&)rrr6)rr.rrr
�visit_CReferenceDeclaratorNodegs
z0DeclarationWriter.visit_CReferenceDeclaratorNodecCs:|�|j�|�d�|jdk	r,|�|j�|�d�dS)N�[�])rr6r�	dimension)rr.rrr
�visit_CArrayDeclaratorNodeks


z,DeclarationWriter.visit_CArrayDeclaratorNodecCs:|�|j�|�d�|jdk	r,|�|j�|�d�dS)Nr:r;)rr6rr<)rr.rrr
r=rs


cCs0|�|j�|�d�|�|j�|�d�dS)N�(�))rr6rr,�argsr$)rr.rrr
�visit_CFuncDeclaratorNodeys
z+DeclarationWriter.visit_CFuncDeclaratorNodecCs|�|j�dS)N)r�name)rr.rrr
�visit_CNameDeclaratorNode�sz+DeclarationWriter.visit_CNameDeclaratorNodecCs^|jrN|�d|j�|jdkr4|�d|j�n|jdkrN|�d|j�|�|j�dS)N)z	unsigned rzsigned rzshort zlong )Zis_basic_c_typer�signedZlongnessrB)rr.rrr
�visit_CSimpleBaseTypeNode�s

z+DeclarationWriter.visit_CSimpleBaseTypeNodecCs0|�d�|�|j�|�|j�|�d�dS)Nr>r?)rr�	base_type�
declarator)rr.rrr
�visit_CComplexBaseTypeNode�s
z,DeclarationWriter.visit_CComplexBaseTypeNodecCs&|�|j�|�d�|�|j�dS)N�.)rrFrrB)rr.rrr
�visit_CNestedBaseTypeNode�s
z+DeclarationWriter.visit_CNestedBaseTypeNodecCs8|�|j�|�d�|�|j|jj�|�d�dS)Nr:r;)rZbase_type_noderr,�positional_args�keyword_args�key_value_pairs)rr.rrr
�visit_TemplatedTypeNode�s
z)DeclarationWriter.visit_TemplatedTypeNodecCs<|�d�|�|j�|�d�|j|jdd�|��dS)Nzcdef � T)r*)r#rrFrr,Zdeclaratorsr$)rr.rrr
�visit_CVarDefNode�s


z#DeclarationWriter.visit_CVarDefNodecCs�|�|�|jr@|�d�|�|j�|jdk	r@|�d|j�|rN|�|�|�d�|��|sp|�d�nx|D]}|�|�qvW|��dS)NrOz "%s"�:�pass)	r#rBr�cnamer$r rrr!)rr.�decl�extras�
attributes�	attributerrr
�visit_container_node�s





z&DeclarationWriter.visit_container_nodecCsP|jrd}nd}|jdkr"|d7}|jr0|d7}||j7}|�||d|j�dS)Nz	ctypedef zcdef �publiczpublic zpacked )Ztypedef_flag�
visibilityZpacked�kindrXrV)rr.rTrrr
�visit_CStructOrUnionDefNode�s

z-DeclarationWriter.visit_CStructOrUnionDefNodecCsJd}|jrdd�|j�}|jr4|dd�|j�7}|�|d||j�dS)Nrz[%s]z, z(%s)z
cdef cppclass)Z	templates�joinZbase_classesrXrV)rr.rUrrr
�visit_CppClassNode�sz$DeclarationWriter.visit_CppClassNodecCs|�|dd|j�dS)Nz	cdef enum)rXr))rr.rrr
�visit_CEnumDefNode�sz$DeclarationWriter.visit_CEnumDefNodecCsJ|�|j�|jr"|�d|j�|jr>|�d�|�|j�|��dS)Nz "%s"z = )r#rBrSr�valuerr$)rr.rrr
�visit_CEnumDefItemNode�s
z(DeclarationWriter.visit_CEnumDefItemNodecCs�|jr
t�|jr*x|jD]}|�|�qW|�d�|�|j�|jr�|�d�|jrl|�|j�|�d�|�|j�|�d�|�	d�|�
�|�|j�|��dS)Nzcdef class r>rIr?rQ)
�module_namer-Z
decoratorsrr#r�
class_nameZbase_class_nameZbase_class_moduler$r r3r!)rr.�	decoratorrrr
�visit_CClassDefNode�s"





z%DeclarationWriter.visit_CClassDefNodecCs8|�d�|�|j�|�d�|�|j�|��dS)Nz	ctypedef rO)r#rrFrrGr$)rr.rrr
�visit_CTypeDefNode�s


z$DeclarationWriter.visit_CTypeDefNodecCsF|�d|j�|�|j�|�d�|��|�|j�|��dS)Nzdef %s(z):)	r#rBr,r@r$r rr3r!)rr.rrr
�visit_FuncDefNode�s
z#DeclarationWriter.visit_FuncDefNodecCsR|jjdk	r"|�|j�|�d�|�|j�|jdk	rN|�d�|�|j�dS)NrOz = )rFrBrrrGr()rr.rrr
�visit_CArgDeclNode�s


z$DeclarationWriter.visit_CArgDeclNodecCs>|�d�|�|j�|jr2|�d�|�|j�|��dS)Nzcimport z as )r#rrb�as_namer$)rr.rrr
�visit_CImportStatNodes

z'DeclarationWriter.visit_CImportStatNodecCs�|�d�|�|j�|�d�d}xX|jD]N\}}}}|dksDt�|rNd}n
|�d�|�|�|r,|�d�|�|�q,W|��dS)Nzfrom z	 cimport TFz, z as )r#rrbZimported_namesr-r$)rr.�first�posrBrir[rrr
�visit_FromCImportStatNodes




z+DeclarationWriter.visit_FromCImportStatNodecCs|�|j�dS)N)rrB)rr.rrr
�visit_NameNodesz DeclarationWriter.visit_NameNodecCs|�|j�dS)N)rr`)rr.rrr
�
visit_IntNodeszDeclarationWriter.visit_IntNodecCs|�d�dS)N�None)r)rr.rrr
�visit_NoneNode"sz DeclarationWriter.visit_NoneNodecCs$|�d�|�|j�|�d�dS)Nz(not r?)rr�operand)rr.rrr
�
visit_NotNode%s
zDeclarationWriter.visit_NotNodecCs"|�d�|�|j�|��dS)N�@)r#rrdr$)rr.rrr
�visit_DecoratorNode*s
z%DeclarationWriter.visit_DecoratorNodecCs,|�|j�|�d|j�|�|j�dS)Nz %s )r�operand1r�operator�operand2)rr.rrr
�visit_BinopNode/sz!DeclarationWriter.visit_BinopNodecCs |�|j�|�d|j�dS)Nz.%s)r�objrrW)rr.rrr
�visit_AttributeNode4sz%DeclarationWriter.visit_AttributeNodecCs|�t|j��dS)N)r�strr`)rr.rrr
�visit_BoolNode8sz DeclarationWriter.visit_BoolNodecCs.|j}|jdk	r|�|j�}|�t|��dS)N)r`�encoding�encoder�repr)rr.r`rrr
�visit_StringNode<s
z"DeclarationWriter.visit_StringNodecCs|�d�|��dS)NrR)r#r$)rr.rrr
�visit_PassStatNodeBs
z$DeclarationWriter.visit_PassStatNode)N)r)r)F)2rrrr"rrr r!r#rrr$r%r,r/r1r2r5r7r9r=rArCrErHrJrNrPrXr\r^r_rarerfrgrhrjrmrnrorqrsruryr{r}r�r��
__classcell__rr)rr
rs^	





		rc@s�eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'S)(�
CodeWritercCs6|��|�|j�|�d�|�|j�|��dS)Nz = )r#r�lhsr�rhsr$)rr.rrr
�visit_SingleAssignmentNodeHs

z%CodeWriter.visit_SingleAssignmentNodecCsD|��x"|jD]}|�|�|�d�qW|�|j�|��dS)Nz = )r#Zlhs_listrrr�r$)rr.r�rrr
�visit_CascadedAssignmentNodeOs
z'CodeWriter.visit_CascadedAssignmentNodecCs4|�d�|�|jj�|js(|�d�|��dS)Nzprint �,)r#r,Z	arg_tupler@Zappend_newlinerr$)rr.rrr
�visit_PrintStatNodeWs


zCodeWriter.visit_PrintStatNodecCs�|�d�|�|j�|�d�|�|jj�|�d�|��|�|j�|�	�|j
dk	r�|�d�|��|�|j
�|�	�dS)Nzfor z in rQzelse:)r#r�targetr�iterator�sequencer$r r3r!�else_clauser%)rr.rrr
�visit_ForInStatNode^s




zCodeWriter.visit_ForInStatNodecCs�|�d�|�|jdj�|�d�|��|�|jdj�|��xR|jdd�D]@}|�d�|�|j�|�d�|��|�|j�|��qXW|jdk	r�|�	d�|��|�|j�|��dS)Nzif rrQrzelif zelse:)
r#r�
if_clauses�	conditionr$r r3r!r�r%)rr.Zclauserrr
�visit_IfStatNodems$





zCodeWriter.visit_IfStatNodecCs|�|j�dS)N)r,r@)rr.rrr
�visit_SequenceNode�szCodeWriter.visit_SequenceNodecCs0|�|j�|�d�|�|j�|�d�dS)Nr>r?)r�functionrr,r@)rr.rrr
�visit_SimpleCallNode�s
zCodeWriter.visit_SimpleCallNodecCs�|�|j�|�d�|j}t|t�r4|�|j�n|�|j�|j	r�t|j	t
�r�xVt|j	j�D]<\}\}}|dkr~|�d�|�|�|�d�|�|�q`Wnt
d��|�d�dS)Nr>rz, �=zNot implemented yetr?)rr�rrK�
isinstance�AsTupleNode�argr,r@rL�DictNode�	enumeraterM�	Exception)rr.Zposarg�irBr`rrr
�visit_GeneralCallNode�s 




z CodeWriter.visit_GeneralCallNodecCs |��|�|j�|��dS)N)r#r�exprr$)rr.rrr
�visit_ExprStatNode�szCodeWriter.visit_ExprStatNodecCs<|��|�|j�|�d|j�|�|j�|��dS)Nz %s= )r#rr�rrwr�r$)rr.rrr
�visit_InPlaceAssignmentNode�s
z&CodeWriter.visit_InPlaceAssignmentNodecCsh|��|�d�|�|j�|jdk	r>|�d�|�|j�|�d�|��|�|j�|��dS)Nzwith z as rQ)	r#rr�managerr�r$r r3r!)rr.rrr
�visit_WithStatNode�s



zCodeWriter.visit_WithStatNodecCsP|�d�|��|�|j�|��|�d�|��|�|j�|��dS)Nztry:zfinally:)r%r rr3r!Zfinally_clause)rr.rrr
�visit_TryFinallyStatNode�s

z#CodeWriter.visit_TryFinallyStatNodecCsZ|�d�|��|�|j�|��x|jD]}|�|�q.W|jdk	rV|�|j�dS)Nztry:)r%r rr3r!Zexcept_clausesr�)rr.�xrrr
�visit_TryExceptStatNode�s

z"CodeWriter.visit_TryExceptStatNodecCst|�d�|jdk	r*|�d�|�|j�|jdk	rJ|�d�|�|j�|�d�|��|�|j�|��dS)N�exceptrOz, rQ)	r#�patternrrr�r$r r3r!)rr.rrr
�visit_ExceptClauseNode�s





z!CodeWriter.visit_ExceptClauseNodecCs"|�d�|�|j�|��dS)Nzreturn )r#rr`r$)rr.rrr
�visit_ReturnStatNode�s
zCodeWriter.visit_ReturnStatNodecCs|�d�dS)N�raise)r%)rr.rrr
�visit_ReraiseStatNode�sz CodeWriter.visit_ReraiseStatNodecCs|�d|jj�dS)Nz(import %s))rrbr`)rr.rrr
�visit_ImportNode�szCodeWriter.visit_ImportNodecCsNd}x*|jD] }d|j|f|j|<|d7}qW|jd7_|�|j�dS)z�
        Temporaries are output like $1_1', where the first number is
        an index of the TempsBlockNode and the second number is an index
        of the temporary which that block allocates.
        rz$%d_%drN)Ztempsrrrr3)rr.�idx�handlerrr
�visit_TempsBlockNode�szCodeWriter.visit_TempsBlockNodecCs|�|j|j�dS)N)rrr�)rr.rrr
�visit_TempRefNode�szCodeWriter.visit_TempRefNodeN)rrrr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrr
r�Fs&



r�c@s$eZdZdd�Zdd�Zdd�ZdS)�	PxdWritercCstd�|�|�j��|S)N�
)�printr]rr	)rr.rrr
�__call__�szPxdWriter.__call__cCsjd|jkrdS|jr |�d�n
|�d�|jdkrJ|�|j�|�d�|jrZ|�d�|�|j�dS)N�inlinezcpdef zcdef ZprivaterOzapi )�	modifiersZoverridabler#rZrZapirrG)rr.rrr
�visit_CFuncDefNode�s




zPxdWriter.visit_CFuncDefNodecCsdS)Nr)rr.rrr
�visit_StatNodeszPxdWriter.visit_StatNodeN)rrrr�r�r�rrrr
r��sr�cs�eZdZdh�fdd�	Zdd�Zdd�Zdd	�Zd
d�Zdd
�Zdd�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdidd�Zdd�Zdd �Zd!d"�Zdjd$d%�Zd&d'�Zd(d)�Zd*d+�Zd,d-�Zd.d/�Zd0d0d1d1d1d2�Zd3d4d5d5d5d5d5d5d5d5d5d5d6d7d8d9d9d:d:d;d;d;d;d;d<d=�Zd>d?�Zd@dA�ZdBdC�ZdDdE�ZdFdG�ZdHdI�Z dJdK�Z!dLdM�Z"dNdO�Z#dPdQ�Z$dRdS�Z%dTdU�Z&dVdW�Z'dXdY�Z(dZd[�Z)d\d]�Z*dkd^d_�Z+d`da�Z,dbdc�Z-ddde�Z.dfdg�Z/�Z0S)l�ExpressionWriterNcs,tt|���|dkrd}||_dg|_dS)Nrr)rr�rr�
precedence)rr)rrr
rs
zExpressionWriter.__init__cCs|�|�|jS)N)rr)rrrrr
rs
zExpressionWriter.writecCs|j|7_dS)N)r)rr
rrr
rszExpressionWriter.putcCs&|j�|�r"|jdt|��|_dS)N)r�endswithr')rr
rrr
�removeszExpressionWriter.removecCsHt|�dkrDx(|dd�D]}|�|�|�d�qW|�|d�dS)Nrr&z, )r'rr)rr)r+rrr
r, s

z%ExpressionWriter.comma_separated_listcCstd|��dS)Nz"Node not handled by serializer: %r)r-)rr.rrr
r/'szExpressionWriter.visit_NodecCs|�|j�dS)N)rrB)rr.rrr
rn*szExpressionWriter.visit_NameNodecCs|�d�dS)Nrp)r)rr.rrr
rq-szExpressionWriter.visit_NoneNodecCs|�d�dS)Nz...)r)rr.rrr
�visit_EllipsisNode0sz#ExpressionWriter.visit_EllipsisNodecCs|�t|j��dS)N)rr|r`)rr.rrr
r}3szExpressionWriter.visit_BoolNodecCs|�t|j��dS)N)rr|r`)rr.rrr
�visit_ConstNode6sz ExpressionWriter.visit_ConstNodecCs|�|j�|�d�dS)N�j)rr`)rr.rrr
�visit_ImagNode9szExpressionWriter.visit_ImagNodercCs8t|j�}|ddkr"|dd�}|�d||f�dS)NrZubrz%s%s)r�r`r)rr.�prefixZrepr_valrrr
�emit_string=s
zExpressionWriter.emit_stringcCs|�|d�dS)N�b)r�)rr.rrr
�visit_BytesNodeCsz ExpressionWriter.visit_BytesNodecCs|�|�dS)N)r�)rr.rrr
r�Fsz!ExpressionWriter.visit_StringNodecCs|�|d�dS)N�u)r�)rr.rrr
�visit_UnicodeNodeIsz"ExpressionWriter.visit_UnicodeNode�rrcCs2|\}}|��}|�|�|�|�|�|�dS)N)�
subexpr_nodesrr,)rr.�parens�
open_paren�close_parenr)rrr
�
emit_sequenceLs


zExpressionWriter.emit_sequencecCs|�|d�dS)Nz[])r�)rr.rrr
�visit_ListNodeSszExpressionWriter.visit_ListNodecCs|�|d�dS)Nz())r�)rr.rrr
�visit_TupleNodeVsz ExpressionWriter.visit_TupleNodecCs,t|���dkr|�|d�n
|�d�dS)Nrz{}zset())r'r�r�r)rr.rrr
�
visit_SetNodeYszExpressionWriter.visit_SetNodecCs|�|d�dS)Nz{})r�)rr.rrr
�visit_DictNode_szExpressionWriter.visit_DictNodecCs&|�|j�|�d�|�|j�dS)Nz: )r�keyrr`)rr.rrr
�visit_DictItemNodebs
z#ExpressionWriter.visit_DictItemNode��)�not�!�+�-�~r�������	�
�)�or�and�inZnot_in�is�is_not�<z<=�>z>=z!=z==�|�^r8z<<z>>r�r�rrt�/z//�%z**cCs,|jd}||kr|�d�|j�|�dS)Nr&r>)r�rr)r�new_prec�old_precrrr
�operator_enterzs

zExpressionWriter.operator_entercCs2|jdd�\}}||kr$|�d�|j��dS)N���r?)r�r�pop)rr�r�rrr
�
operator_exit�s
zExpressionWriter.operator_exitcCs:d}|j|}|�|�|�d�|�|j�|��dS)Nr�znot )�unop_precedencer�rrrrr�)rr.�op�precrrr
rs�s


zExpressionWriter.visit_NotNodecCsB|j}|j|}|�|�|�d|j�|�|j�|��dS)Nz%s)rwr�r�rrrrr�)rr.r�r�rrr
�visit_UnopNode�s

zExpressionWriter.visit_UnopNodecCsX|j}|j�|d�}|�|�|�|j�|�d|�dd��|�|j�|�	�dS)Nrz %s �_rO)
rw�binop_precedence�getr�rrvr�replacerxr�)rr.r�r�rrr
ry�s
z ExpressionWriter.visit_BinopNodecCs|�|�dS)N)ry)rr.rrr
�visit_BoolBinopNode�sz$ExpressionWriter.visit_BoolBinopNodecCs|�|�dS)N)ry)rr.rrr
�visit_PrimaryCmpNode�sz%ExpressionWriter.visit_PrimaryCmpNodecCsJ|�|j�|�d�t|jt�r0|�|j�n|�|j�|�d�dS)Nr:r;)rr6rr��index�	TupleNoder�)rr.rrr
�visit_IndexNode�s
z ExpressionWriter.visit_IndexNodecCsn|�|j�|�d�|jr(|�|j�|�d�|jrD|�|j�|jr`|�d�|�|j�|�d�dS)Nr:rQr;)rr6r�start�stop�slice)rr.rrr
�visit_SliceIndexNode�s


z%ExpressionWriter.visit_SliceIndexNodecCsT|jjs|�|j�|�d�|jjs2|�|j�|jjsP|�d�|�|j�dS)NrQ)rZis_nonerrr�step)rr.rrr
�visit_SliceNode�s

z ExpressionWriter.visit_SliceNodecCs<|�|j�|�d�|�|j�|�d�|�|j�dS)Nz if z else )rZtrue_valr�testZ	false_val)rr.rrr
�visit_CondExprNode�s


z#ExpressionWriter.visit_CondExprNodecCs |�|j�|�d|j�dS)Nz.%s)rrzrrW)rr.rrr
r{�sz$ExpressionWriter.visit_AttributeNodecCs0|�|j�|�d�|�|j�|�d�dS)Nr>r?)rr�rr,r@)rr.rrr
r��s
z%ExpressionWriter.visit_SimpleCallNodecCs�|dkrdSt|t�r0|�|j�|�|j�nrt|t�rbxf|��D]}|�|�|�d�qDWn@t|t	�r�|�d�|�|j
�|�d�n|�|�|�d�dS)Nz, r)r�ZAddNode�
emit_pos_argsrvrxrr�rrr�r�)rr.r�rrr
r
�s





zExpressionWriter.emit_pos_argscCs�|dkrdSt|t�r4x�|��D]}|�|�q Wndt|t�rzxX|��D],}|�d|jj�|�|j�|�d�qHWn|�d�|�|�|�d�dS)Nz%s=z, z**)	r�ZMergedDictNoder��
emit_kwd_argsr�rr�r`r)rr.r�rrr
r�s



zExpressionWriter.emit_kwd_argscCsF|�|j�|�d�|�|j�|�|j�|�d�|�d�dS)Nr>z, r?)rr�rr
rKrrLr�)rr.rrr
r��s

z&ExpressionWriter.visit_GeneralCallNodecCsj|\}}|�|�|�|�|�d�|�|�|�d�|�|�|r\|�d�|�|�|�|�dS)Nz for z in z if )rr)rr3r�r�r�r�r�r�rrr
�emit_comprehensions







z#ExpressionWriter.emit_comprehensioncCs|�|j�dS)N)rr�)rr.rrr
�visit_ComprehensionAppendNodesz.ExpressionWriter.visit_ComprehensionAppendNodecCs&|�|j�|�d�|�|j�dS)Nz: )rZkey_exprrZ
value_expr)rr.rrr
�!visit_DictComprehensionAppendNodes
z2ExpressionWriter.visit_DictComprehensionAppendNodecCspdddd�}||j��}|jj}|jj}|jjj}d}t|d�rZ|jdj	}|jdj}|�
|||||�dS)Nz[]z{})�list�dict�setr�r)�typeZpy_type_name�loopr3r�r�r��hasattrr�r�r)rr.Ztpmapr�r3r�r�r�rrr
�visit_ComprehensionNodes

z(ExpressionWriter.visit_ComprehensionNodecCsn|jj}|jj}|jjj}d}t|d�rF|jdj}|jdjjj	}nt|d�rX|jj	}|�
||||d�dS)Nr�rr�z())rr3r�r�r�rr�r�r�r�r)rr.r3r�r�r�rrr
�visit_GeneratorExpressionNode$s


z.ExpressionWriter.visit_GeneratorExpressionNode)N)r)r�)r�)1rrrrrrr�r,r/rnrqr�r}r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rsr�ryr�r�rrrr	r{r�r
rr�rr
rrrr�rr)rr
r�sn


		





r�N)
�__doc__�
__future__rrZCompiler.VisitorrZCompiler.ExprNodes�objectrrr�r�r�rrrr
�<module>s)0