B
     S]
                 @   sF   d Z ddlmZ ddlmZmZmZ ddlmZ G dd dejZ	dS )z/Fixer that changes xrange(...) into range(...).   )
fixer_base)NameCallconsuming_calls)patcompc                   sh   e Zd ZdZdZ fddZdd Zdd Zd	d
 Zdd Z	dZ
ee
ZdZeeZdd Z  ZS )	FixXrangeTz
              power<
                 (name='range'|name='xrange') trailer< '(' args=any ')' >
              rest=any* >
              c                s   t t| || t | _d S )N)superr   
start_treesettransformed_xranges)selftreefilename)	__class__ )lib/python3.7/lib2to3/fixes/fix_xrange.pyr	      s    zFixXrange.start_treec             C   s
   d | _ d S )N)r   )r   r   r   r   r   r   finish_tree   s    zFixXrange.finish_treec             C   sD   |d }|j dkr| ||S |j dkr4| ||S tt|d S )NnameZxrangerange)valuetransform_xrangetransform_range
ValueErrorrepr)r   noderesultsr   r   r   r   	transform   s    

zFixXrange.transformc             C   s0   |d }| td|jd | jt| d S )Nr   r   )prefix)replacer   r   r   addid)r   r   r   r   r   r   r   r   $   s    zFixXrange.transform_xrangec             C   sj   t || jkrf| |sfttd|d  g}ttd|g|jd}x|d D ]}|| qPW |S d S )Nr   argslist)r   rest)r    r   in_special_contextr   r   Zcloner   Zappend_child)r   r   r   Z
range_callZ	list_callnr   r   r   r   *   s    

zFixXrange.transform_rangez3power< func=NAME trailer< '(' node=any ')' > any* >zfor_stmt< 'for' any 'in' node=any ':' any* >
            | comp_for< 'for' any 'in' node=any any* >
            | comparison< any 'in' node=any any*>
         c             C   sf   |j d krdS i }|j j d k	rJ| j|j j |rJ|d |krJ|d jtkS | j|j |od|d |kS )NFr   func)parentp1matchr   r   p2)r   r   r   r   r   r   r$   ?   s    
zFixXrange.in_special_context)__name__
__module____qualname__ZBM_compatibleZPATTERNr	   r   r   r   r   ZP1r   Zcompile_patternr(   ZP2r*   r$   __classcell__r   r   )r   r   r      s   	

r   N)
__doc__ r   Z
fixer_utilr   r   r   r   ZBaseFixr   r   r   r   r   <module>   s   