o
    e }                     @   s   d Z ddlZddlZddlZddlZddlmZmZmZ ddl	m
Z
 ddlmZ ddlmZ dd	eedfd
dZejeeefddZe ZG dd deZG dd de
ZdS )aw  
Part of the astor library for Python AST manipulation.

License: 3-clause BSD

Copyright (c) 2008      Armin Ronacher
Copyright (c) 2012-2017 Patrick Maupin
Copyright (c) 2013-2017 Berker Peksag

This module converts an AST into Python source code.

Before being version-controlled as part of astor,
this code came from here (in 2012):

    https://gist.github.com/1250562

    N   )get_op_symbolget_op_precedence
Precedence)ExplicitNodeVisitor)pretty_string)pretty_sourcez    Fc                 C   s~   |du rt }nt|stdt|t std||||}||  |jd t|jd tdkr:d|jd< ||jS )a  This function can convert a node tree back into python sourcecode.
    This is useful for debugging purposes, especially if you're dealing with
    custom asts not generated by python itself.

    It could be that the sourcecode is evaluable when the AST itself is not
    compilable / evaluable.  The reason for this is that the AST contains some
    more data than regular sourcecode does, which is dropped during
    conversion.

    Each level of indentation is replaced with `indent_with`.  Per default this
    parameter is equal to four spaces as suggested by PEP 8, but it might be
    adjusted to match the application's styleguide.

    If `add_line_information` is set to `True` comments for the line numbers
    of the nodes are added to the output.  This can be used to spot wrong line
    number information of statement nodes.

    `source_generator_class` defaults to `SourceGenerator`, and specifies the
    class that will be instantiated and used to generate the source code.

    Nz(source_generator_class should be a classz>source_generator_class should be a subclass of SourceGenerator
r    )	SourceGeneratorinspectisclass	TypeError
issubclassvisitresultappendset)nodeindent_withadd_line_informationr   r   Zsource_generator_class	generator r   >D:\Projects\ConvertPro\env\Lib\site-packages\astor/code_gen.py	to_source   s   




r   c                    s    fddS )z This only uses a closure for performance reasons,
        to reduce the number of attribute lookups.  (set_precedence
        is called a lot of times.)
    c                    s^   |  r	| } |D ]!}| r| |_ q|r$| g|R   q|du s,J |qdS )z>Set the precedence (of the parent) into the children.
        N)_pp)valuenodesr   ASTr   
isinstancelistset_precedencer   r   r"   M   s   


z)precedence_setter.<locals>.set_precedencer   )r   r   r    r!   r   r   r   precedence_setterF   s   r#   c                   @   s,   e Zd ZdZdZdd Zdd Zdd Zd	S )
DelimitzA context manager that can add enclosing
       delimiters around the output of a
       SourceGenerator method.  By default, the
       parentheses are added, but the enclosed code
       may set discard=True to get rid of them.
    Fc           
      G   s   d}d}d}|D ]}t |tjr|du r|}q|}q|}q||d  |j }| _t|| _|d | _|durPt|p<| | _	}|
| | _}	||	k| _dS dS )z use write instead of using result directly
            for initial data, because it may flush
            preceding data into result.
        z()Nr   r   )r    astr   writer   lenindexclosingr   pget__ppppdiscard)
selftreeargs
delimitersr   opargr   r*   r,   r   r   r   __init__j   s$   

zDelimit.__init__c                 C   s   | S Nr   )r.   r   r   r   	__enter__   s   zDelimit.__enter__c                 G   s2   | j }| jd }| jrd||< d S || j d S )Nr   r
   )r   r(   r-   r   r)   )r.   exc_infor   startr   r   r   __exit__   s
   
zDelimit.__exit__N)__name__
__module____qualname____doc__r-   r4   r6   r9   r   r   r   r   r$   `   s    r$   c                   @   s  e Zd ZdZdZdeeeefddZ	e
dejdjfddZd	d
 Zdd ZdddZdd Zdd Zdd Zdd Zdd Zdd ZdddZdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zdd+d,Zd-d. Z d/d0 Z!d1d2 Z"dd3d4Z#d5d6 Z$d7d8 Z%dd9d:Z&d;d< Z'd=d> Z(d?d@ Z)dAdB Z*dCdD Z+dEdF Z,dGdH Z-dIdJ Z.dKdL Z/dMdN Z0dOdP Z1dQdR Z2dSdT Z3dUdV Z4dWdX Z5dYdZ Z6d[d\ Z7d]d^ Z8d_d` Z9efdadbZ:dcdd Z;dedf Z<dgdh Z=ddidjZ>dkdl Z?dmdn Z@dodp ZAeBjCdqkfdrdsZDdtdu ZEdvdw ZFdxdy ZGdzd{ ZHd|d} ZId~d ZJdd ZKdd ZLdd ZMdd ZNdd ZOdd ZPdd ZQdd ZRdd ZSdd ZTdd ZUdd ZVdd ZWdd ZXdd ZYdd ZZdd Z[dd Z\dd Z]dd Z^e^Z_dd Z`dd Zadd Zbdd ZcdS )r   zThis visitor is able to transform a well formed syntax tree into Python
    sourcecode.

    For more details have a look at the docstring of the `node_to_source`
    function.

    Fc                    sf   g _ |_|_d_d_d_|_tj j	j j
 fdd}|_d S )Nr   )r   r   c                     sv   | D ]6}| r| q|r|  qj r2dj   df_jj  d_ |r8| qdS )zr self.write is a closure for performance (to reduce the number
                of attribute lookups).
            r	   r   N)	new_linescolinfor   indentation)paramsitemr   r   callabler    r'   r   r.   r   r   r   r&      s   

z'SourceGenerator.__init__.<locals>.write)r   r   r   r@   r>   r?   r   r%   r   r   r   r&   )r.   r   r   r   r'   r    rD   r&   r   rC   r   r4      s   
zSourceGenerator.__init__r   )keywordsr   c                    sF   | dstt|dd |  fdd}t| || |S )za Get an attribute of the node.
            like dict.get (returns None if doesn't exist)
        get_   Nc                    s   |  S r5   r   )r   defaultZgeta	shortnamer   r   getter   s   z+SourceGenerator.__getattr__.<locals>.getter)
startswithAttributeErrorgetattrsetattr)r.   namedefaultsrK   r   rH   r   __getattr__   s   
zSourceGenerator.__getattr__c                 G   s   t | g|R  S r5   )r$   )r.   r0   r   r   r   delimit      zSourceGenerator.delimitc                 G   s   |d d ur| j |  dS d S )NTr&   )r.   stuffr   r   r   conditional_write   s   
z!SourceGenerator.conditional_writeNr   c                 C   sB   t | jd| | _|d ur| jr| d|j  d| _d S d S d S )Nr   z
# line: %s)maxr>   r   r&   lineno)r.   r   extrar   r   r   newline   s
   
zSourceGenerator.newlinec                 C   s*   |  j d7  _ | j|  |  j d8  _ d S Nr   )r@   r&   )r.   Z
statementsr   r   r   body   s   
zSourceGenerator.bodyc                 C   s$   |r|  | jd | | d S d S )Nzelse:)r&   r\   r^   )r.   Zelsewhatr   r   r   	else_body   s   zSourceGenerator.else_bodyc                 C   s   |  |j  | |j d S r5   )r^   r_   orelser.   r   r   r   r   body_or_else      zSourceGenerator.body_or_elsec                    s   g  fdd fdd}t |dg }d}|r6|t|jt|j 7 }|||jd |   d ||j|j|d    d|j  |}|ra|jd u r[ d |||j  d	|j	 d S )
Nc                      s    r	  d d S d d S N, Tr&   r   r   )r.   
want_commar   r   write_comma   s   z4SourceGenerator.visit_arguments.<locals>.write_commac                    sV   t tj| d gt| t|  }t| || D ]\}} |  d| qd S )N=)r"   r   Commar'   zipr&   rX   )r0   rQ   paddingr3   rI   )r.   rh   r   r   	loop_args   s   z2SourceGenerator.visit_arguments.<locals>.loop_argsposonlyargsr   /***)
rN   r'   rQ   r0   r&   rX   varargZget_kwonlyargskw_defaultskwarg)r.   r   rm   rn   offset
kwonlyargsr   )r.   rg   rh   r   visit_arguments   s"   

zSourceGenerator.visit_argumentsc                 O   s   |  | | j|  d S r5   )r\   r&   )r.   r   rA   kwr   r   r   	statement  s   
zSourceGenerator.statementc                 C   s*   | j |d |jD ]	}| |d| q	d S )Nr[   @)r\   decorator_listry   )r.   r   r[   	decoratorr   r   r   
decorators  s   
zSourceGenerator.decoratorsc                 C   sT   t tjg|R   t|D ]\}}| |rdnd| q| |r%d d S d d S )Nre   r
   ,)r"   r   rj   	enumerater&   )r.   itemsZtrailingidxrB   r   r   r   
comma_list  s   zSourceGenerator.comma_listc                 C   sH   t ||jg|jR   | | |jD ]}| |d q| |j d S )N = )r"   r   targetsr\   r&   r   )r.   r   targetr   r   r   visit_Assign   s
   

zSourceGenerator.visit_Assignc                 C   s0   t ||j|j | ||jt|jd|j d S )Nz %s= )r"   r   r   ry   r   r2   ra   r   r   r   visit_AugAssign'  s   zSourceGenerator.visit_AugAssignc                 C   sv   t ||j|j t tj|j t|jtjo|j	 }|rdnd}|r$dnd}| 
|||j|d|j | d|j d S )N(r
   ): r   )r"   r   
annotationr   rj   r   r    r%   Namesimplery   rX   )r.   r   Zneed_parensbeginendr   r   r   visit_AnnAssign,  s   zSourceGenerator.visit_AnnAssignc                 C   sZ   |  |d|jd |jpdd | |j |jdkr)ddd |jD v r+d	| _d S d S d S )
Nzfrom .r
   z import 
__future__unicode_literalsc                 s       | ]}|j V  qd S r5   )rP   .0xr   r   r   	<genexpr>:  s    
z3SourceGenerator.visit_ImportFrom.<locals>.<genexpr>T)ry   levelmoduler   namesusing_unicode_literalsra   r   r   r   visit_ImportFrom5  s   

z SourceGenerator.visit_ImportFromc                 C      |  |d | |j d S )Nzimport )ry   r   r   ra   r   r   r   visit_Import>  rc   zSourceGenerator.visit_Importc                 C   s$   t ||j | | | | d S r5   )r"   r   ry   generic_visitra   r   r   r   
visit_ExprB  s   
zSourceGenerator.visit_Exprc                 C   s   |rdnd}|  || jrdnd | |d||jf d | |j | d | d| | | d	 | 	|j	 | jsG| j
dd
 d S d S )Nasync r
   r      z%sdef %sr   r   z ->:rz   )r~   r@   ry   rP   rw   r0   r&   rX   Zget_returnsr^   r\   r.   r   is_asyncprefixr   r   r   visit_FunctionDefG  s   

z!SourceGenerator.visit_FunctionDefc                 C      | j |dd d S NT)r   )r   ra   r   r   r   visit_AsyncFunctionDefT     z&SourceGenerator.visit_AsyncFunctionDefc                    s   g   fdd} |d |d|j  |jD ]}|| q|D ]}||jp2d|jr7dnd|j q)|d	| |d
|  rWd	pXd
 |j jskjdd d S d S )Nc                      s*    r	 d d S  d  d d S )Nre   Tr   rf   r   Z	have_argsr.   r   r   paren_or_commaZ  s   
z6SourceGenerator.visit_ClassDef.<locals>.paren_or_commar   zclass %sr
   ri   rq   rp   z):r   rz   )r~   ry   rP   basesr&   Zget_keywordsr3   r   rX   get_starargs
get_kwargsr^   r@   r\   )r.   r   r   basekeywordr   r   r   visit_ClassDefW  s"   
zSourceGenerator.visit_ClassDefc                 C   s   t ||j | |d|jd | |j 	 |j}t|dkrBt|d tjrB|d }t ||j | 	| j
d|jd | |j n| | d S q)Nzif r   Tr   r   zelif )r"   testry   r^   r`   r'   r    r%   Ifr&   r\   r_   )r.   r   Zelse_r   r   r   visit_Ifp  s   
zSourceGenerator.visit_Ifc                 C   sB   t ||j |r
dnd}| |d| |jd|jd | | d S )Nr   r
   z%sfor  in r   )r"   r   ry   iterrb   r   r   r   r   	visit_For  s   zSourceGenerator.visit_Forc                 C   r   r   )r   ra   r   r   r   visit_AsyncFor  r   zSourceGenerator.visit_AsyncForc                 C   s,   t ||j | |d|jd | | d S )Nzwhile r   )r"   r   ry   rb   ra   r   r   r   visit_While  s   zSourceGenerator.visit_Whilec                 C   sX   |rdnd}|  |d|  t|dr| | n| |j | d | |j d S )Nr   r
   z%swith context_exprr   )ry   hasattrvisit_withitemr   r   r&   r^   r   r   r   r   
visit_With  s   

zSourceGenerator.visit_Withc                 C   r   r   )r   ra   r   r   r   visit_AsyncWith  r   zSourceGenerator.visit_AsyncWithc                 C      |  |j | d|j d S N as )r&   r   rX   optional_varsra   r   r   r   r        zSourceGenerator.visit_withitemc                 C      |  t|j d S r5   )r&   reprr   ra   r   r   r   visit_NameConstant     z"SourceGenerator.visit_NameConstantc                 C      |  |d d S )Npassry   ra   r   r   r   
visit_Pass  rT   zSourceGenerator.visit_Passc                 C   sH   |  |d |j}|jd ur| d |jg|j }| ||j  d S )Nzprint z >> )ry   valuesdestr&   r   nl)r.   r   r   r   r   r   visit_Print  s   

zSourceGenerator.visit_Printc                 C   r   )Nzdel )ry   r   r   ra   r   r   r   visit_Delete  rc   zSourceGenerator.visit_Deletec                 C   s4   |  |d | |j | j|j  | |j d S )Ntry:)ry   r^   r&   handlersr_   r`   ra   r   r   r   visit_TryExcept     zSourceGenerator.visit_TryExceptc                 C   sV   |  |d | |j | j|j  | |j |jr)|  |d | |j d S d S Nr   zfinally:)ry   r^   r&   r   r_   r`   	finalbodyra   r   r   r   	visit_Try  s   zSourceGenerator.visit_Tryc                 C   sB   |  |d | d|jr| d|j | d | |j d S )Nexcept r   r   )ry   rX   typerP   r&   r^   ra   r   r   r   visit_ExceptHandler  s
   
z#SourceGenerator.visit_ExceptHandlerc                 C   s4   |  |d | |j |  |d | |j d S r   )ry   r^   r   ra   r   r   r   visit_TryFinally  r   z SourceGenerator.visit_TryFinallyc                 C   s^   |j |jf}|d d u r|d d d n|}| |d|j | d|d  | d|d  d S )Nr   rU   zexec r   re   r   )globalslocalsry   r^   rX   )r.   r   Zdictsr   r   r   
visit_Exec  s
   zSourceGenerator.visit_Execc                 C   s2   t ||j|j | |d|j | d|j d S )Nzassert re   )r"   r   msgry   rX   ra   r   r   r   visit_Assert  s   zSourceGenerator.visit_Assertc                 C      |  |dd|j d S )Nzglobal re   ry   joinr   ra   r   r   r   visit_Global     zSourceGenerator.visit_Globalc                 C   r   )Nz	nonlocal re   r   ra   r   r   r   visit_Nonlocal  r   zSourceGenerator.visit_Nonlocalc                 C   s*   t ||j | |d | d|j d S )Nreturnr   )r"   r   ry   rX   ra   r   r   r   visit_Return  s   zSourceGenerator.visit_Returnc                 C   r   )Nbreakr   ra   r   r   r   visit_Break  rT   zSourceGenerator.visit_Breakc                 C   r   )Ncontinuer   ra   r   r   r   visit_Continue  rT   zSourceGenerator.visit_Continuec                 C   sr   |  |d | d| |r| d|j d S | d| |r7t||j | d|j | d|j d S d S )Nraiser   z from re   )ry   rX   Zget_exccauseget_typer"   instZtbackra   r   r   r   visit_Raise  s   zSourceGenerator.visit_Raisec                 C   s   |  |jd|j d S )Nr   )r&   r   attrra   r   r   r   visit_Attribute  s   zSourceGenerator.visit_Attributec                    s  | j g   fdd}|j}|j}| |}| |}|||| }||d u7 }||d u7 }|dkr7tjntj}	t|	g|R   | 	|j
 d |D ]}
||
 qNttjgdd |D R   |D ]}|jpld}
||
|
rtdnd	|j qf| |d
| | |d	| d d S )Nc                      s    rd d S   d d S rd   )r   r   rg   r&   r   r   rh     s   z/SourceGenerator.visit_Call.<locals>.write_commar   r   c                 s   r   r5   )r   r   r   r   r   r     s    z-SourceGenerator.visit_Call.<locals>.<genexpr>r
   ri   rq   rp   r   )r&   r0   rE   r   r   r   rj   call_one_argr"   r   funcr3   r   rX   )r.   r   r'   rh   r0   rE   ZstarargskwargsZnumargsr*   r3   r   r   r   r   
visit_Call  s.   


zSourceGenerator.visit_Callc                 C      |  |j d S r5   )r&   idra   r   r   r   
visit_Name"  rT   zSourceGenerator.visit_Namec                 C   s   |j }t|tttfr(| | | | W d    d S 1 s!w   Y  d S t|tr6| ||j  d S |t	u rA| 
d d S | 
t| d S Nz...)r   r    intfloatcomplexrS   _handle_numeric_constantstr_handle_string_constantEllipsisr&   r   )r.   r   r   r   r   r   visit_Constant'  s   "
zSourceGenerator.visit_Constantc                 C   s   | j |d dd d S )NT)	is_joined)r  ra   r   r   r   visit_JoinedStr4  r   zSourceGenerator.visit_JoinedStrc                    sP   |}|tjk|tjk }d j}j\}}j|d  }	|r/|	d |d  |	d< d|	}	tj	dk |rf fddt
|}
| d d||
d  }||
d = ||f_d}n|d usnJ d|}j}|||	|}|rd| }nt|d	dr|j| }| |d
d }|rt
|d |f_d S d S )Nr
   r   )      c              	      s  | j D ]}t|tjr|jdddd qt|tjrmd? t	|dd r3|j
 nt||j |j |jdkrNdt|j  |jd ur]d	 |j W d    n1 sgw   Y  q r|t|tjr||j qt|j}J d| d S )N{z{{}z}}{}	expr_textrU   z!%sr   Fz Invalid node %s inside JoinedStr)r   r    r%   Strr&   sreplaceFormattedValuerS   rN   r  r"   r   r   
conversionchrformat_specConstantr   r:   )r   r   kindZhas_ast_constantrecurser.   r   r   r  U  s,   





z8SourceGenerator._handle_string_constant.<locals>.recurseFzNode value cannot be Nonefr  r	   r   )r+   r   ExprAssignr&   r   r?   r   sysversion_infor'   r   r   rN   r  rfind)r.   r   r   r
  
precedenceZembeddedr   Z	res_indexZ	str_indexcurrent_liner(   ZmystrZuni_litlfr   r  r   r  7  sD   










z'SourceGenerator._handle_string_constantc                 C   s   |  ||j d S r5   )r  r  ra   r   r   r   	visit_Str  r   zSourceGenerator.visit_Strc                 C   r   r5   )r&   r   r  ra   r   r   r   visit_Bytes  r   zSourceGenerator.visit_Bytesc                 C   s   |}dd }|t |tr|jn|dd}t |trA||jdd}|jdkr(|}n|jdkr2d| }nd|d	d
g|d |f }n|}| | d S )Nc                 S   sn   |rdnd}z!t | r| dk rd| W S d| W S t | r&d||f W S W n	 ty0   Y nw t| | S )Njr
   r   z-1e1000Z1e1000z(1e1000%s-1e1000%s))mathisinfisnanOverflowErrorr   )r*   	imaginaryr  r   r   r   part  s   



z6SourceGenerator._handle_numeric_constant.<locals>.partF)r-  Tr   z(%s+0j)z(%s%s%s)+r
   -)r    r  realimagrL   r&   )r.   r   r   r.  r1  r2  r  r   r   r   r    s   



z(SourceGenerator._handle_numeric_constant)r  r   c                 C   s   |  |P}| |j |s=|jrEt|jts(|jdk r(tjd }|j|k|_n%| 	|}t|t
j |_W d    d S W d    d S W d    d S W d    d S 1 sXw   Y  d S )Nr   r   )rS   r  nr-   r    r  r   Powr,   Z	get__p_opr%   USub)r.   r   newr1   Zpow_lhsr2   r   r   r   	visit_Num  s   
	



"zSourceGenerator.visit_Numc                 C   sV   |  |}|j}|jo||_| |t|dk W d    d S 1 s$w   Y  d S r]   )rS   eltsr-   r   r'   )r.   r   r1   r8  r   r   r   visit_Tuple  s
   "zSourceGenerator.visit_Tuplec                 C   <   |  d | |j W d    d S 1 sw   Y  d S Nz[])rS   r   r8  ra   r   r   r   
visit_List  s   "zSourceGenerator.visit_Listc                 C   sP   |j r!| d | |j  W d    d S 1 sw   Y  d S | d d S )Nr  z{1}.__class__())r8  rS   r   r&   ra   r   r   r   	visit_Set  s
   "zSourceGenerator.visit_Setc                 C   s   t tjg|jR   | d- tt|j|jD ]\}\}}| |r%dnd|r*|nd|r/dnd| qW d    d S 1 s?w   Y  d S )Nr  re   r
   r   rq   )	r"   r   rj   r   rS   r   rk   keysr&   )r.   r   r   keyr   r   r   r   
visit_Dict  s   
"zSourceGenerator.visit_Dictc                 C   s   |j |j|j}}}| ||4}t|tj}|j}t|r#t	jd n|| t|r-t	j
n|d | | |t|d| W d    d S 1 sHw   Y  d S )Nr    %s )r2   leftrightrS   r    r%   r4  r*   r"   r   ZPowRHSr&   r   )r.   r   r2   rB  rC  r1   Zispowr*   r   r   r   visit_BinOp  s   "zSourceGenerator.visit_BinOpc                 C   s   |  ||j/}t|jd}t|jd g|jR   t|jD ]\}}| |r)|p*d| qW d    d S 1 s9w   Y  d S )NrA  r   r
   )rS   r2   r   r"   r*   r   r   r&   )r.   r   r1   r2   r   r   r   r   r   visit_BoolOp  s   "zSourceGenerator.visit_BoolOpc                 C   s   |  ||jd 2}t|jd |jg|jR   | |j t|j|jD ]\}}| t	|d| q%W d    d S 1 s>w   Y  d S )Nr   r   rA  )
rS   opsr"   r*   rB  comparatorsr   rk   r&   r   )r.   r   r1   r2   rC  r   r   r   visit_Compare  s   "zSourceGenerator.visit_Comparec                 C   sj   |  |&}|j}t||j t|d |j d|_| |jd|j W d    d S 1 s.w   Y  d S )Nr   Fz := )rS   r*   r"   r   r   r-   r&   )r.   r   r1   r*   r   r   r   visit_NamedExpr  s   "zSourceGenerator.visit_NamedExprc                 C   sr   |  ||j(}t|j|j |j|j_t|j}| || r"dnd|j W d    d S 1 s2w   Y  d S )Nr   r
   )	rS   r2   r"   r*   operandZ_p_opr   r&   isalpha)r.   r   r1   symr   r   r   visit_UnaryOp  s   

"zSourceGenerator.visit_UnaryOpc                 C   s$   t ||j | |jd|jd d S )N[])r"   slicer&   r   ra   r   r   r   visit_Subscript  s   zSourceGenerator.visit_Subscriptc                 C   s|   t ||j|j|j | |j | d | |j |jd ur:| d t|jtjr2|jj	dks<| 
|j d S d S d S )Nr   None)r"   loweruppersteprX   r&   r    r%   r   r   r   ra   r   r   r   visit_Slice  s   


zSourceGenerator.visit_Slicec                 C   sJ   |  |}t|j|j | |j W d    d S 1 sw   Y  d S r5   )rS   r"   r*   r   r   r.   r   r1   r   r   r   visit_Index(  s   "zSourceGenerator.visit_Indexc                 C   s.   |j }t|g|R   | |t|dk d S r]   )dimsr"   r   r'   )r.   r   rY  r   r   r   visit_ExtSlice-  s   zSourceGenerator.visit_ExtSlicec                 C   s\   |  | tt|d |j | d | d|j W d    d S 1 s'w   Y  d S )Nr   yieldr   )rS   r"   r   r   r&   rX   ra   r   r   r   visit_Yield2  s
   
"zSourceGenerator.visit_Yieldc                 C   >   |  | | d|j W d    d S 1 sw   Y  d S )Nzyield from rS   r&   r   ra   r   r   r   visit_YieldFrom9     "zSourceGenerator.visit_YieldFromc                 C   r]  )Nzawait r^  ra   r   r   r   visit_Await>  r`  zSourceGenerator.visit_Awaitc                 C   sb   |  |"}t|j|j | d | |j | d|j W d    d S 1 s*w   Y  d S )Nzlambda r   )rS   r"   r*   r^   r&   rw   r0   rW  r   r   r   visit_LambdaB  s   
"zSourceGenerator.visit_Lambdac                 C   s   |  d d S r  rV   ra   r   r   r   visit_EllipsisI  s   zSourceGenerator.visit_Ellipsisc                 C   F   |  d | j|jg|jR   W d    d S 1 sw   Y  d S r;  rS   r&   elt
generatorsra   r   r   r   visit_ListCompL     "zSourceGenerator.visit_ListCompc                 C   sf   |  |$}|jtjkrd|_ttj|j | j|jg|j	R   W d    d S 1 s,w   Y  d S )NT)
rS   r,   r   r   r-   r"   rj   rf  r&   rg  rW  r   r   r   visit_GeneratorExpP  s   "z"SourceGenerator.visit_GeneratorExpc                 C   rd  )Nr  re  ra   r   r   r   visit_SetCompW  ri  zSourceGenerator.visit_SetCompc                 C   sL   |  d | j|jd|jg|jR   W d    d S 1 sw   Y  d S )Nr  r   )rS   r&   r?  r   rg  ra   r   r   r   visit_DictComp[  s   "zSourceGenerator.visit_DictCompc                 C   sl   |  |'}t|jd |j|j t|j|j | |jd|jd|j W d    d S 1 s/w   Y  d S )Nr    if z else )rS   r"   r*   r^   r   r`   r&   rW  r   r   r   visit_IfExp_  s
   "zSourceGenerator.visit_IfExpc                 C   s   |  d|j d S )Nrp   )r&   r   ra   r   r   r   visit_Starrede  r   zSourceGenerator.visit_Starredc                 C   r:  )Nz``)rS   r   r   ra   r   r   r   
visit_Reprh  s   "zSourceGenerator.visit_Reprc                 C   s   | j |j  d S r5   )r&   r^   ra   r   r   r   visit_Modulem  rT   zSourceGenerator.visit_Modulec                 C   r   r5   )r   r^   ra   r   r   r   visit_Expressionr  rT   z SourceGenerator.visit_Expressionc                 C   r   )Nr   )r&   r3   rX   r   ra   r   r   r   	visit_argw  r   zSourceGenerator.visit_argc                 C   r   r   )r&   rP   rX   asnamera   r   r   r   visit_alias{  r   zSourceGenerator.visit_aliasc                 C   sf   t ||jg|jR   t tj|j | |rdnd}| ||jd|j |jD ]}| d| q(d S )Nz async for z for r   rm  )r"   r   ifsr   Zcomprehension_targetr   Zget_is_asyncr&   )r.   r   stmtZif_r   r   r   visit_comprehension  s   
z#SourceGenerator.visit_comprehension)Nr   )F)dr:   r;   r<   r=   r   r   r'   r    rD   r4   dictr   ZhighestgetrR   rS   rX   r\   r^   r_   rb   rw   ry   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!  r7  r9  r<  r=  r@  rD  rE  rH  rI  rM  rQ  rV  rX  rZ  r\  r_  ra  rb  rc  rh  rj  rk  rl  rn  ro  rp  rq  Zvisit_Interactiverr  rs  ru  rx  r   r   r   r   r      s    
&

!
		


		#
T#
	
	r   )r=   r%   r   r)  r   Zop_utilr   r   r   Z	node_utilr   Zstring_reprr   Zsource_reprr   r   r   r    r!   r#   r"   objectr$   r   r   r   r   r   <module>   s&   
'
/