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* >zŸfor_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
   