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    @