3
PO[]]                 @   s|   d Z ddlmZmZ ddlmZ ddlT G dd deZG dd	 d	eZ	G d
d de	Z
G dd de	ZG dd deZdS )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,   e Zd Zdd Zdd Zdd Zdd Zd	S )
LinesResultc             C   s   g | _ d| _d S )N )liness)self r   a/home/psgendb/BIRCHDEV/lib-linux-x86_64/python/lib64/python3.6/site-packages/Cython/CodeWriter.py__init__   s    zLinesResult.__init__c             C   s   |  j |7  _ d S )N)r
   )r   r
   r   r   r   put   s    zLinesResult.putc             C   s   | j j| j d| _d S )Nr   )r	   appendr
   )r   r   r   r   newline   s    zLinesResult.newlinec             C   s   | j | | j  d S )N)r   r   )r   r
   r   r   r   putline   s    
zLinesResult.putlineN)__name__
__module____qualname__r   r   r   r   r   r   r   r   r      s   r   c                   s  e Zd ZdZd` fdd	Zdd Zdd Zd	d
 ZdaddZdd Z	dd Z
dbddZdd ZdcddZdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd& Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 Zd4d5 Zd6d7 Zd8d9 Zd:d; Zd<d= Zd>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    Nc                s8   t t| j  |d krt }|| _d| _i | _d| _d S )Nr   )superr   r   r   result
numindents	tempnamestempblockindex)r   r   )	__class__r   r   r   #   s    zDeclarationWriter.__init__c             C   s   | j | | jS )N)visitr   )r   treer   r   r   write,   s    
zDeclarationWriter.writec             C   s   |  j d7  _ d S )Nr   )r   )r   r   r   r   indent0   s    zDeclarationWriter.indentc             C   s   |  j d8  _ d S )Nr   )r   )r   r   r   r   dedent3   s    zDeclarationWriter.dedentr   c             C   s   | j j| j| j |  d S )N)r   r   indent_stringr   )r   r
   r   r   r   	startline6   s    zDeclarationWriter.startlinec             C   s   | j j| d S )N)r   r   )r   r
   r   r   r   r   9   s    zDeclarationWriter.putc             C   s   | j j| j| j |  d S )N)r   r   r"   r   )r   r
   r   r   r   r   <   s    zDeclarationWriter.putlinec             C   s   | j j| d S )N)r   r   )r   r
   r   r   r   endline?   s    zDeclarationWriter.endlinec             C   s   | j | | j  d S )N)r#   r$   )r   r
   r   r   r   lineB   s    
zDeclarationWriter.lineFc             C   sl   t |dkrhxL|d d D ]<}| j| |rL|jd k	rL| jd | j|j | jd qW | j|d  d S )Nr   r   z = z, r&   )lenr   defaultr   )r   items
output_rhsitemr   r   r   comma_separated_listF   s    

z&DeclarationWriter.comma_separated_listc             C   s   t d| d S )Nz"Node not handled by serializer: %r)AssertionError)r   noder   r   r   
visit_NodeP   s    zDeclarationWriter.visit_Nodec             C   s   | j | d S )N)visitchildren)r   r.   r   r   r   visit_ModuleNodeS   s    z"DeclarationWriter.visit_ModuleNodec             C   s   | j | d S )N)r0   )r   r.   r   r   r   visit_StatListNodeV   s    z$DeclarationWriter.visit_StatListNodec             C   sH   |j d krd}n
d|j  }| jd|  | j  | j|j | j  d S )Nr   z"%s"zcdef extern from %s:)include_filer   r    r   bodyr!   )r   r.   filer   r   r   visit_CDefExternNodeY   s    

z&DeclarationWriter.visit_CDefExternNodec             C   s   | j d | j|j d S )Nr   )r   r   base)r   r.   r   r   r   visit_CPtrDeclaratorNodec   s    
z*DeclarationWriter.visit_CPtrDeclaratorNodec             C   s   | j d | j|j d S )N&)r   r   r7   )r   r.   r   r   r   visit_CReferenceDeclaratorNodeg   s    
z0DeclarationWriter.visit_CReferenceDeclaratorNodec             C   s:   | j |j | jd |jd k	r,| j |j | jd d S )N[])r   r7   r   	dimension)r   r.   r   r   r   visit_CArrayDeclaratorNodek   s
    

z,DeclarationWriter.visit_CArrayDeclaratorNodec             C   s:   | j |j | jd |jd k	r,| j |j | jd d S )Nr;   r<   )r   r7   r   r=   )r   r.   r   r   r   r>   r   s
    

c             C   s0   | j |j | jd | j|j | jd d S )N())r   r7   r   r,   argsr$   )r   r.   r   r   r   visit_CFuncDeclaratorNodey   s    
z+DeclarationWriter.visit_CFuncDeclaratorNodec             C   s   | j |j d S )N)r   name)r   r.   r   r   r   visit_CNameDeclaratorNode   s    z+DeclarationWriter.visit_CNameDeclaratorNodec             C   s^   |j rN| jd|j  |jdk r4| jd|j   n|jdkrN| jd|j  | j|j d S )N	unsigned r   signed r   zshort zlong )rE   r   rF   )is_basic_c_typer   signedlongnessrC   )r   r.   r   r   r   visit_CSimpleBaseTypeNode   s    

z+DeclarationWriter.visit_CSimpleBaseTypeNodec             C   s0   | j d | j|j | j|j | j d d S )Nr?   r@   )r   r   	base_type
declarator)r   r.   r   r   r   visit_CComplexBaseTypeNode   s    
z,DeclarationWriter.visit_CComplexBaseTypeNodec             C   s&   | j |j | jd | j|j d S )N.)r   rK   r   rC   )r   r.   r   r   r   visit_CNestedBaseTypeNode   s    
z+DeclarationWriter.visit_CNestedBaseTypeNodec             C   s8   | j |j | jd | j|j|jj  | jd d S )Nr;   r<   )r   base_type_noder   r,   positional_argskeyword_argskey_value_pairs)r   r.   r   r   r   visit_TemplatedTypeNode   s    
z)DeclarationWriter.visit_TemplatedTypeNodec             C   s<   | j d | j|j | jd | j|jdd | j  d S )Nzcdef  T)r*   )r#   r   rK   r   r,   declaratorsr$   )r   r.   r   r   r   visit_CVarDefNode   s
    

z#DeclarationWriter.visit_CVarDefNodec             C   s   | j | |jr@| jd | j|j |jd k	r@| jd|j  |rN| j| | jd | j  |sp| jd nx|D ]}| j| qvW | j  d S )NrU   z "%s":pass)	r#   rC   r   cnamer$   r    r   r   r!   )r   r.   declextras
attributes	attributer   r   r   visit_container_node   s    





z&DeclarationWriter.visit_container_nodec             C   sP   |j rd}nd}|jdkr"|d7 }|jr0|d7 }||j7 }| j||d |j d S )Nz	ctypedef zcdef publiczpublic zpacked )typedef_flag
visibilitypackedkindr_   r]   )r   r.   r[   r   r   r   visit_CStructOrUnionDefNode   s    

z-DeclarationWriter.visit_CStructOrUnionDefNodec             C   sJ   d}|j rddj|j  }|jr4|ddj|j 7 }| j|d||j d S )Nr   z[%s]z, z(%s)zcdef cppclass)	templatesjoinbase_classesr_   r]   )r   r.   r\   r   r   r   visit_CppClassNode   s    z$DeclarationWriter.visit_CppClassNodec             C   s   | j |dd |j d S )Nz	cdef enum)r_   r)   )r   r.   r   r   r   visit_CEnumDefNode   s    z$DeclarationWriter.visit_CEnumDefNodec             C   sJ   | j |j |jr"| jd|j  |jr>| jd | j|j | j  d S )Nz "%s"z = )r#   rC   rZ   r   valuer   r$   )r   r.   r   r   r   visit_CEnumDefItemNode   s    
z(DeclarationWriter.visit_CEnumDefItemNodec             C   s   |j  st|jr,x|jD ]}| j| qW | jd | j|j |jr| jd |jrn| j|j | jd | j|j | jd | j	d | j
  | j|j | j  d S )Nzcdef class r?   rN   r@   rX   )module_namer-   
decoratorsr   r#   r   
class_nameZbase_class_nameZbase_class_moduler$   r    r4   r!   )r   r.   	decoratorr   r   r   visit_CClassDefNode   s"    




z%DeclarationWriter.visit_CClassDefNodec             C   s8   | j d | j|j | jd | j|j | j  d S )Nz	ctypedef rU   )r#   r   rK   r   rL   r$   )r   r.   r   r   r   visit_CTypeDefNode   s
    

z$DeclarationWriter.visit_CTypeDefNodec             C   sF   | j d|j  | j|j | jd | j  | j|j | j  d S )Nzdef %s(z):)	r#   rC   r,   rA   r$   r    r   r4   r!   )r   r.   r   r   r   visit_FuncDefNode   s    
z#DeclarationWriter.visit_FuncDefNodec             C   sR   |j jd k	r"| j|j  | jd | j|j |jd k	rN| jd | j|j d S )NrU   z = )rK   rC   r   r   rL   r(   )r   r.   r   r   r   visit_CArgDeclNode   s    


z$DeclarationWriter.visit_CArgDeclNodec             C   s>   | j d | j|j |jr2| jd | j|j | j  d S )Nzcimport z as )r#   r   rm   as_namer$   )r   r.   r   r   r   visit_CImportStatNode  s    

z'DeclarationWriter.visit_CImportStatNodec             C   s   | j d | j|j | jd d}xX|jD ]N\}}}}|d ksDt|rNd}n
| jd | j| |r,| jd | j| q,W | j  d S )Nzfrom z	 cimport TFz, z as )r#   r   rm   imported_namesr-   r$   )r   r.   firstposrC   ru   rd   r   r   r   visit_FromCImportStatNode  s    




z+DeclarationWriter.visit_FromCImportStatNodec             C   s   | j |j d S )N)r   rC   )r   r.   r   r   r   visit_NameNode  s    z DeclarationWriter.visit_NameNodec             C   s   | j |j d S )N)r   rk   )r   r.   r   r   r   visit_IntNode  s    zDeclarationWriter.visit_IntNodec             C   s   | j d d S )NNone)r   )r   r.   r   r   r   visit_NoneNode"  s    z DeclarationWriter.visit_NoneNodec             C   s$   | j d | j|j | j d d S )Nz(not r@   )r   r   operand)r   r.   r   r   r   visit_NotNode%  s    
zDeclarationWriter.visit_NotNodec             C   s"   | j d | j|j | j  d S )N@)r#   r   rp   r$   )r   r.   r   r   r   visit_DecoratorNode*  s    
z%DeclarationWriter.visit_DecoratorNodec             C   s,   | j |j | jd|j  | j |j d S )Nz %s )r   operand1r   operatoroperand2)r   r.   r   r   r   visit_BinopNode/  s    z!DeclarationWriter.visit_BinopNodec             C   s    | j |j | jd|j  d S )Nz.%s)r   objr   r^   )r   r.   r   r   r   visit_AttributeNode4  s    z%DeclarationWriter.visit_AttributeNodec             C   s   | j t|j d S )N)r   strrk   )r   r.   r   r   r   visit_BoolNode8  s    z DeclarationWriter.visit_BoolNodec             C   s.   |j }|jd k	r|j|j}| jt| d S )N)rk   encodingencoder   repr)r   r.   rk   r   r   r   visit_StringNode<  s    
z"DeclarationWriter.visit_StringNodec             C   s   | j d | j  d S )NrY   )r#   r$   )r   r.   r   r   r   visit_PassStatNodeB  s    
z$DeclarationWriter.visit_PassStatNode)N)r   )r   )F)2r   r   r   r"   r   r   r    r!   r#   r   r   r$   r%   r,   r/   r1   r2   r6   r8   r:   r>   rB   rD   rJ   rM   rO   rT   rW   r_   re   ri   rj   rl   rq   rr   rs   rt   rv   rz   r{   r|   r~   r   r   r   r   r   r   r   __classcell__r   r   )r   r   r      s^   	





		r   c               @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'S )(
CodeWriterc             C   s6   | j   | j|j | jd | j|j | j  d S )Nz = )r#   r   lhsr   rhsr$   )r   r.   r   r   r   visit_SingleAssignmentNodeH  s
    
z%CodeWriter.visit_SingleAssignmentNodec             C   sD   | j   x"|jD ]}| j| | jd qW | j|j | j  d S )Nz = )r#   lhs_listr   r   r   r$   )r   r.   r   r   r   r   visit_CascadedAssignmentNodeO  s    
z'CodeWriter.visit_CascadedAssignmentNodec             C   s4   | j d | j|jj |js(| jd | j  d S )Nzprint ,)r#   r,   	arg_tuplerA   append_newliner   r$   )r   r.   r   r   r   visit_PrintStatNodeW  s
    

zCodeWriter.visit_PrintStatNodec             C   s   | j d | j|j | jd | j|jj | jd | j  | j|j | j	  |j
d k	r| jd | j  | j|j
 | j	  d S )Nzfor z in rX   zelse:)r#   r   targetr   iteratorsequencer$   r    r4   r!   else_clauser%   )r   r.   r   r   r   visit_ForInStatNode^  s    




zCodeWriter.visit_ForInStatNodec             C   s   | j d | j|jd j | jd | j  | j|jd j | j  xR|jdd  D ]@}| j d | j|j | jd | j  | j|j | j  qXW |jd k	r| j	d | j  | j|j | j  d S )Nzif r   rX   r   zelif zelse:)
r#   r   
if_clauses	conditionr$   r    r4   r!   r   r%   )r   r.   clauser   r   r   visit_IfStatNodem  s$    





zCodeWriter.visit_IfStatNodec             C   s   | j |j d S )N)r,   rA   )r   r.   r   r   r   visit_SequenceNode  s    zCodeWriter.visit_SequenceNodec             C   s0   | j |j | jd | j|j | jd d S )Nr?   r@   )r   functionr   r,   rA   )r   r.   r   r   r   visit_SimpleCallNode  s    
zCodeWriter.visit_SimpleCallNodec             C   s   | j |j | jd |j}t|tr4| j |j n| j|j |j	rt|j	t
rxVt|j	jD ]<\}\}}|dkr~| jd | j | | jd | j | q`W ntd| jd d S )Nr?   r   z, =zNot implemented yetr@   )r   r   r   rQ   
isinstanceAsTupleNodeargr,   rA   rR   DictNode	enumeraterS   	Exception)r   r.   ZposargirC   rk   r   r   r   visit_GeneralCallNode  s     




z CodeWriter.visit_GeneralCallNodec             C   s    | j   | j|j | j  d S )N)r#   r   exprr$   )r   r.   r   r   r   visit_ExprStatNode  s    zCodeWriter.visit_ExprStatNodec             C   s<   | j   | j|j | jd|j  | j|j | j  d S )Nz %s= )r#   r   r   r   r   r   r$   )r   r.   r   r   r   visit_InPlaceAssignmentNode  s
    z&CodeWriter.visit_InPlaceAssignmentNodec             C   sh   | j   | jd | j|j |jd k	r>| jd | j|j | jd | j  | j|j | j  d S )Nzwith z as rX   )	r#   r   r   managerr   r$   r    r4   r!   )r   r.   r   r   r   visit_WithStatNode  s    



zCodeWriter.visit_WithStatNodec             C   sP   | j d | j  | j|j | j  | j d | j  | j|j | j  d S )Nztry:zfinally:)r%   r    r   r4   r!   finally_clause)r   r.   r   r   r   visit_TryFinallyStatNode  s    

z#CodeWriter.visit_TryFinallyStatNodec             C   sZ   | j d | j  | j|j | j  x|jD ]}| j| q.W |jd k	rV| j|j d S )Nztry:)r%   r    r   r4   r!   except_clausesr   )r   r.   xr   r   r   visit_TryExceptStatNode  s    

z"CodeWriter.visit_TryExceptStatNodec             C   st   | j d |jd k	r*| jd | j|j |jd k	rJ| jd | j|j | jd | j  | j|j | j  d S )NexceptrU   z, rX   )	r#   patternr   r   r   r$   r    r4   r!   )r   r.   r   r   r   visit_ExceptClauseNode  s    





z!CodeWriter.visit_ExceptClauseNodec             C   s"   | j d | j|j | j  d S )Nzreturn )r#   r   rk   r$   )r   r.   r   r   r   visit_ReturnStatNode  s    
zCodeWriter.visit_ReturnStatNodec             C   s   | j d d S )Nraise)r%   )r   r.   r   r   r   visit_ReraiseStatNode  s    z CodeWriter.visit_ReraiseStatNodec             C   s   | j d|jj  d S )Nz(import %s))r   rm   rk   )r   r.   r   r   r   visit_ImportNode  s    zCodeWriter.visit_ImportNodec             C   sN   d}x*|j D ] }d| j|f | j|< |d7 }qW |  jd7  _| j|j dS )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.
        r   z$%d_%dr   N)tempsr   r   r   r4   )r   r.   idxhandler   r   r   visit_TempsBlockNode  s    zCodeWriter.visit_TempsBlockNodec             C   s   | j | j|j  d S )N)r   r   r   )r   r.   r   r   r   visit_TempRefNode  s    zCodeWriter.visit_TempRefNodeN)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   F  s&   

r   c               @   s$   e Zd Zdd Zdd Zdd ZdS )	PxdWriterc             C   s   t dj| j|j |S )N
)printrg   r   r	   )r   r.   r   r   r   __call__  s    zPxdWriter.__call__c             C   sj   d|j krd S |jr | jd n
| jd |jdkrJ| j|j | jd |jrZ| jd | j|j d S )Ninlinezcpdef zcdef privaterU   zapi )	modifiersoverridabler#   rb   r   apir   rL   )r   r.   r   r   r   visit_CFuncDefNode  s    




zPxdWriter.visit_CFuncDefNodec             C   s   d S )Nr   )r   r.   r   r   r   visit_StatNode  s    zPxdWriter.visit_StatNodeN)r   r   r   r   r   r   r   r   r   r   r     s   r   c                   s  e Zd Zdg fdd	Zdd Zdd Zdd	 Zd
d Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd ZdhddZdd Zdd  Zd!d" Zdjd#d$Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d/d0d0d0d1Zd2d3d4d4d4d4d4d4d4d4d4d4d5d6d7d8d8d9d9d:d:d:d:d: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 Z'dWdX Z(dYdZ Z)d[d\ Z*dld]d^Z+d_d` Z,dadb Z-dcdd Z.dedf Z/  Z0S )mExpressionWriterNc                s,   t t| j  |d krd}|| _dg| _d S )Nr   r   )r   r   r   r   
precedence)r   r   )r   r   r   r     s
    zExpressionWriter.__init__c             C   s   | j | | jS )N)r   r   )r   r   r   r   r   r     s    
zExpressionWriter.writec             C   s   |  j |7  _ d S )N)r   )r   r
   r   r   r   r     s    zExpressionWriter.putc             C   s&   | j j|r"| j d t|  | _ d S )N)r   endswithr'   )r   r
   r   r   r   remove  s    zExpressionWriter.removec             C   sH   t |dkrDx(|d d D ]}| j| | jd qW | j|d  d S )Nr   r   z, r&   r&   )r'   r   r   )r   r)   r+   r   r   r   r,      s
    
z%ExpressionWriter.comma_separated_listc             C   s   t d| d S )Nz"Node not handled by serializer: %r)r-   )r   r.   r   r   r   r/   '  s    zExpressionWriter.visit_Nodec             C   s   | j |j d S )N)r   rC   )r   r.   r   r   r   r{   *  s    zExpressionWriter.visit_NameNodec             C   s   | j d d S )Nr}   )r   )r   r.   r   r   r   r~   -  s    zExpressionWriter.visit_NoneNodec             C   s   | j d d S )Nz...)r   )r   r.   r   r   r   visit_EllipsisNode0  s    z#ExpressionWriter.visit_EllipsisNodec             C   s   | j t|j d S )N)r   r   rk   )r   r.   r   r   r   r   3  s    zExpressionWriter.visit_BoolNodec             C   s   | j t|j d S )N)r   r   rk   )r   r.   r   r   r   visit_ConstNode6  s    z ExpressionWriter.visit_ConstNodec             C   s   | j |j | j d d S )Nj)r   rk   )r   r.   r   r   r   visit_ImagNode9  s    zExpressionWriter.visit_ImagNoder   c             C   s8   t |j}|d dkr"|dd  }| jd||f  d S )Nr   ubr   z%s%s)r   rk   r   )r   r.   prefixZrepr_valr   r   r   emit_string=  s    
zExpressionWriter.emit_stringc             C   s   | j |d d S )Nb)r   )r   r.   r   r   r   visit_BytesNodeC  s    z ExpressionWriter.visit_BytesNodec             C   s   | j | d S )N)r   )r   r.   r   r   r   r   F  s    z!ExpressionWriter.visit_StringNodec             C   s   | j |d d S )Nu)r   )r   r.   r   r   r   visit_UnicodeNodeI  s    z"ExpressionWriter.visit_UnicodeNodec             C   s2   |\}}|j  }| j| | j| | j| d S )N)subexpr_nodesr   r,   )r   r.   parens
open_parenclose_parenr)   r   r   r   emit_sequenceL  s
    

zExpressionWriter.emit_sequencec             C   s   | j |d d S )Nz[])r   )r   r.   r   r   r   visit_ListNodeS  s    zExpressionWriter.visit_ListNodec             C   s   | j |d d S )Nz())r   )r   r.   r   r   r   visit_TupleNodeV  s    z ExpressionWriter.visit_TupleNodec             C   s,   t |j dkr| j|d n
| jd d S )Nr   z{}zset())r'   r   r   r   )r   r.   r   r   r   visit_SetNodeY  s    zExpressionWriter.visit_SetNodec             C   s   | j |d d S )Nz{})r   )r   r.   r   r   r   visit_DictNode_  s    zExpressionWriter.visit_DictNodec             C   s&   | j |j | jd | j |j d S )Nz: )r   keyr   rk   )r   r.   r   r   r   visit_DictItemNodeb  s    
z#ExpressionWriter.visit_DictItemNode      )not!+-~r                     	   
      )orandinnot_inisis_not<z<=>z>=z!=z==|^r9   z<<z>>r   r   r   r   /z//%z**c             C   s,   | j d }||kr| jd | j j| d S )Nr   r?   r&   )r   r   r   )r   new_precold_precr   r   r   operator_enterz  s    

zExpressionWriter.operator_enterc             C   s2   | j dd  \}}||kr$| jd | j j  d S )Nr   r@   )r   r   pop)r   r  r  r   r   r   operator_exit  s    
zExpressionWriter.operator_exitc             C   s:   d}| j | }| j| | jd | j|j | j  d S )Nr   znot )unop_precedencer	  r   r   r   r  )r   r.   opprecr   r   r   r     s    


zExpressionWriter.visit_NotNodec             C   sB   |j }| j| }| j| | jd|j   | j|j | j  d S )Nz%s)r   r  r	  r   r   r   r  )r   r.   r  r  r   r   r   visit_UnopNode  s    

zExpressionWriter.visit_UnopNodec             C   sX   |j }| jj|d}| j| | j|j | jd|jdd  | j|j | j	  d S )Nr   z %s _rU   )
r   binop_precedencegetr	  r   r   r   replacer   r  )r   r.   r  r  r   r   r   r     s    
z ExpressionWriter.visit_BinopNodec             C   s   | j | d S )N)r   )r   r.   r   r   r   visit_BoolBinopNode  s    z$ExpressionWriter.visit_BoolBinopNodec             C   s   | j | d S )N)r   )r   r.   r   r   r   visit_PrimaryCmpNode  s    z%ExpressionWriter.visit_PrimaryCmpNodec             C   sJ   | j |j | jd t|jtr0| j|j n| j |j | jd d S )Nr;   r<   )r   r7   r   r   index	TupleNoder   )r   r.   r   r   r   visit_IndexNode  s    
z ExpressionWriter.visit_IndexNodec             C   sn   | j |j | jd |jr(| j |j | jd |jrD| j |j |jr`| jd | j |j | jd d S )Nr;   rX   r<   )r   r7   r   startstopslice)r   r.   r   r   r   visit_SliceIndexNode  s    


z%ExpressionWriter.visit_SliceIndexNodec             C   sT   |j js| j|j  | jd |jjs2| j|j |jjsP| jd | j|j d S )NrX   )r  is_noner   r   r  step)r   r.   r   r   r   visit_SliceNode  s    

z ExpressionWriter.visit_SliceNodec             C   s<   | j |j | jd | j |j | jd | j |j d S )Nz if z else )r   true_valr   test	false_val)r   r.   r   r   r   visit_CondExprNode  s
    

z#ExpressionWriter.visit_CondExprNodec             C   s    | j |j | jd|j  d S )Nz.%s)r   r   r   r^   )r   r.   r   r   r   r     s    z$ExpressionWriter.visit_AttributeNodec             C   s0   | j |j | jd | j|j | jd d S )Nr?   r@   )r   r   r   r,   rA   )r   r.   r   r   r   r     s    
z%ExpressionWriter.visit_SimpleCallNodec             C   s   |d krd S t |tr0| j|j | j|j nrt |trbxf|j D ]}| j| | jd qDW n@t |t	r| jd | j|j
 | jd n| j| | jd d S )Nz, r   )r   AddNodeemit_pos_argsr   r   r  r   r   r   r   r   )r   r.   r   r   r   r   r&    s    





zExpressionWriter.emit_pos_argsc             C   s   |d krd S t |tr4x|j D ]}| j| q W ndt |trzxX|j D ],}| jd|jj  | j|j | jd qHW n| jd | j| | jd d S )Nz%s=z, z**)	r   MergedDictNoder   emit_kwd_argsr   r   r   rk   r   )r   r.   r   r   r   r   r(    s    



zExpressionWriter.emit_kwd_argsc             C   sF   | j |j | jd | j|j | j|j | jd | jd d S )Nr?   z, r@   )r   r   r   r&  rQ   r(  rR   r   )r   r.   r   r   r   r     s    

z&ExpressionWriter.visit_GeneralCallNodec             C   sj   |\}}| j | | j| | j d | j| | j d | j| |r\| j d | j| | j | d S )Nz for z in z if )r   r   )r   r4   r   r   r   r   r   r   r   r   r   emit_comprehension   s    







z#ExpressionWriter.emit_comprehensionc             C   s   | j |j d S )N)r   r   )r   r.   r   r   r   visit_ComprehensionAppendNode  s    z.ExpressionWriter.visit_ComprehensionAppendNodec             C   s&   | j |j | jd | j |j d S )Nz: )r   key_exprr   
value_expr)r   r.   r   r   r   !visit_DictComprehensionAppendNode  s    
z2ExpressionWriter.visit_DictComprehensionAppendNodec             C   sp   dddd}||j j  }|jj}|jj}|jjj}d }t|drZ|jd j	}|jd j}| j
||||| d S )Nz[]z{})listdictsetr   r   )typepy_type_nameloopr4   r   r   r   hasattrr   r   r)  )r   r.   Ztpmapr   r4   r   r   r   r   r   r   visit_ComprehensionNode  s    

z(ExpressionWriter.visit_ComprehensionNodec             C   sn   |j j}|j j}|j jj}d }t|drF|jd j}|jd jjj	}nt|drX|jj	}| j
||||d d S )Nr   r   r   z())r3  r4   r   r   r   r4  r   r   r   r   r)  )r   r.   r4   r   r   r   r   r   r   visit_GeneratorExpressionNode$  s    


z.ExpressionWriter.visit_GeneratorExpressionNode)N)r   r   r   )r7  r   r   )r8  )1r   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   r   r&  r(  r   r)  r*  r-  r5  r6  r   r   r   )r   r   r     sn   


		


r   N)__doc__
__future__r   r   ZCompiler.Visitorr   ZCompiler.ExprNodesobjectr   r   r   r   r   r   r   r   r   <module>   s     ) 0