o
    bc
                     @   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__ //usr/lib/python3.10/lib2to3/fixes/fix_xrange.pyr
      s   zFixXrange.start_treec                 C   s
   d | _ d S r   )r   r   r   r   r   finish_tree   s   
zFixXrange.finish_treec                 C   s@   |d }|j dkr| ||S |j dkr| ||S tt|)Nname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idr   r   r   r   r   $   s   zFixXrange.transform_xrangec                 C   sj   t || jvr1| |s3ttd|d  g}ttd|g|jd}|d D ]}|| q'|S d S d S )Nr   argslistr"   rest)r&   r   in_special_contextr   r   cloner#   append_child)r   r   r    
range_call	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 u rdS i }|j j d ur%| j|j j |r%|d |u r%|d jtv S | j|j |o2|d |u S )NFr   func)parentp1matchr   r   p2)r   r   r    r   r   r   r*   ?   s   
zFixXrange.in_special_context)__name__
__module____qualname__BM_compatiblePATTERNr
   r   r!   r   r   P1r   compile_patternr2   P2r4   r*   __classcell__r   r   r   r   r      s    	

r   N)
__doc__ r   
fixer_utilr   r   r   r   BaseFixr   r   r   r   r   <module>   s
   