o
    Š�bcf  ã                   @   sn   d Z ddlmZ ddlmZ ddlmZ ddlm	Z	m
Z
mZ dZG dd„ dejƒZd	d
„ Zdd„ Zdd„ ZdS )z.Fixer for it.next() -> next(it), per PEP 3114.é   )Útoken)Úpython_symbols)Ú
fixer_base)ÚNameÚCallÚfind_bindingz;Calls to builtin next() possibly shadowed by global bindingc                       s0   e Zd ZdZdZdZ‡ fdd„Zdd„ Z‡  ZS )ÚFixNextTa¾  
    power< base=any+ trailer< '.' attr='next' > trailer< '(' ')' > >
    |
    power< head=any+ trailer< '.' attr='next' > not trailer< '(' ')' > >
    |
    classdef< 'class' any+ ':'
              suite< any*
                     funcdef< 'def'
                              name='next'
                              parameters< '(' NAME ')' > any+ >
                     any* > >
    |
    global=global_stmt< 'global' any* 'next' any* >
    Úprec                    s@   t t| ƒ ||¡ td|ƒ}|r|  |t¡ d| _d S d| _d S )NÚnextTF)Úsuperr   Ú
start_treer   ÚwarningÚbind_warningÚshadowed_next)ÚselfÚtreeÚfilenameÚn©Ú	__class__© ú-/usr/lib/python3.10/lib2to3/fixes/fix_next.pyr   $   s   


zFixNext.start_treec                 C   s  |sJ ‚|  d¡}|  d¡}|  d¡}|r?| jr$| td|jd�¡ d S dd„ |D ƒ}d|d	 _| ttd
|jd�|ƒ¡ d S |rOtd|jd�}| |¡ d S |rxt|ƒro|d }d dd„ |D ƒ¡ ¡ dkrm|  	|t
¡ d S | tdƒ¡ d S d|v r‡|  	|t
¡ d| _d S d S )NÚbaseÚattrÚnameÚ__next__)Úprefixc                 S   s   g | ]}|  ¡ ‘qS r   )Úclone©Ú.0r   r   r   r   Ú
<listcomp>9   ó    z%FixNext.transform.<locals>.<listcomp>Ú é    r
   Úheadc                 S   s   g | ]}t |ƒ‘qS r   )Ústrr   r   r   r   r    E   r!   Ú__builtin__ÚglobalT)Úgetr   Úreplacer   r   r   Úis_assign_targetÚjoinÚstripr   r   )r   ÚnodeÚresultsr   r   r   r   r$   r   r   r   Ú	transform.   s0   




þzFixNext.transform)	Ú__name__Ú
__module__Ú__qualname__ÚBM_compatibleÚPATTERNÚorderr   r/   Ú__classcell__r   r   r   r   r      s    
r   c                 C   sF   t | ƒ}|d u r
dS |jD ]}|jtjkr dS t|| ƒr  dS qdS )NFT)Úfind_assignÚchildrenÚtyper   ÚEQUALÚ
is_subtree)r-   ÚassignÚchildr   r   r   r*   Q   s   

ÿr*   c                 C   s4   | j tjkr| S | j tjks| jd u rd S t| jƒS ©N)r9   ÚsymsÚ	expr_stmtÚsimple_stmtÚparentr7   ©r-   r   r   r   r7   ]   s
   
r7   c                    s$   | ˆ krdS t ‡ fdd„| jD ƒƒS )NTc                 3   s   � | ]}t |ˆ ƒV  qd S r>   )r;   )r   ÚcrC   r   r   Ú	<genexpr>g   s   € zis_subtree.<locals>.<genexpr>)Úanyr8   )Úrootr-   r   rC   r   r;   d   s   r;   N)Ú__doc__Úpgen2r   Úpygramr   r?   r"   r   Ú
fixer_utilr   r   r   r   ÚBaseFixr   r*   r7   r;   r   r   r   r   Ú<module>   s    @