U
    A`f                     @   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* >
    Zprec                    s>   t t| || td|}|r4| |t d| _nd| _d S )NnextTF)superr   
start_treer   warningbind_warningshadowed_next)selfZtreefilenamen	__class__ ,/usr/lib/python3.8/lib2to3/fixes/fix_next.pyr   $   s    
zFixNext.start_treec                 C   s  |st |d}|d}|d}|rz| jrF|td|jd n2dd |D }d|d	 _|ttd
|jd| n|rtd|jd}|| nl|rt|r|d }ddd |D 	 dkr| 
|t d S |td nd|kr| 
|t d| _d S )Nbaseattrname__next__)prefixc                 S   s   g | ]}|  qS r   )Zclone.0r   r   r   r   
<listcomp>9   s     z%FixNext.transform.<locals>.<listcomp>     r	   headc                 S   s   g | ]}t |qS r   )strr   r   r   r   r   E   s     Z__builtin__globalT)AssertionErrorgetr   replacer   r   r   is_assign_targetjoinstripr   r   )r   nodeZresultsr   r   r   r   r    r   r   r   	transform.   s.    




zFixNext.transform)	__name__
__module____qualname__ZBM_compatibleZPATTERNorderr   r*   __classcell__r   r   r   r   r      s
   
r   c                 C   sF   t | }|d krdS |jD ]&}|jtjkr0 dS t|| r dS qdS )NFT)find_assignchildrentyper   EQUAL
is_subtree)r)   ZassignZchildr   r   r   r&   Q   s    

r&   c                 C   s4   | j tjkr| S | j tjks&| jd kr*d S t| jS N)r2   symsZ	expr_stmtZsimple_stmtparentr0   r)   r   r   r   r0   ]   s
    r0   c                    s$   |  krdS t  fdd| jD S )NTc                 3   s   | ]}t | V  qd S r5   )r4   )r   cr8   r   r   	<genexpr>g   s     zis_subtree.<locals>.<genexpr>)anyr1   )rootr)   r   r8   r   r4   d   s    r4   N)__doc__Zpgen2r   Zpygramr   r6   r   r   Z
fixer_utilr   r   r   r   ZBaseFixr   r&   r0   r4   r   r   r   r   <module>   s   @