î
\á[\f  ã               @   s™   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 Gd 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                   s@   e  Z d  Z d Z d Z d Z ‡  f d d †  Z d d „  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                sW   t  t |  ƒ j | | ƒ t d | ƒ } | rJ |  j | t ƒ d |  _ n	 d |  _ d  S)NÚnextTF)Úsuperr   Ú
start_treer   ÚwarningÚbind_warningÚshadowed_next)ÚselfZtreeÚfilenameÚn)Ú	__class__© ú,/usr/lib/python3.4/lib2to3/fixes/fix_next.pyr   $   s    zFixNext.start_treec             C   sw  | s t  ‚ | j d ƒ } | j d ƒ } | j d ƒ } | r¯ |  j rg | j t d d | j ƒƒ qsd d „  | Dƒ } d | d	 _ | j t t d
 d | j ƒ| ƒ ƒ nÄ | rÚ t d d | j ƒ} | j | ƒ n™ | rKt | ƒ r5| d } d j d d „  | Dƒ ƒ j	 ƒ  d k r1|  j
 | t ƒ n  d  S| j t d ƒ ƒ n( d | k rs|  j
 | t ƒ d |  _ n  d  S)NÚbaseÚattrÚnameÚ__next__Úprefixc             S   s   g  |  ] } | j  ƒ  ‘ q Sr   )Zclone)Ú.0r   r   r   r   ú
<listcomp>9   s   	 z%FixNext.transform.<locals>.<listcomp>Ú é    r	   Úheadc             S   s   g  |  ] } t  | ƒ ‘ q Sr   )Ústr)r   r   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PATTERNZorderr   r(   r   r   )r   r   r      s
   
r   c             C   s]   t  |  ƒ } | d  k r d Sx: | j D]/ } | j t j k rB d St | |  ƒ r& d Sq& Wd S)NFT)Úfind_assignÚchildrenÚtyper   ÚEQUALÚ
is_subtree)r'   ZassignZchildr   r   r   r$   Q   s    r$   c             C   sH   |  j  t j k r |  S|  j  t j k s7 |  j d  k r; d  St |  j ƒ S)N)r.   ÚsymsZ	expr_stmtZsimple_stmtÚparentr,   )r'   r   r   r   r,   ]   s
    !r,   c                s0   |  ˆ  k r d St  ‡  f d d †  |  j Dƒ ƒ S)NTc             3   s   |  ] } t  | ˆ  ƒ Vq d  S)N)r0   )r   Úc)r'   r   r   ú	<genexpr>g   s    zis_subtree.<locals>.<genexpr>)Úanyr-   )Úrootr'   r   )r'   r   r0   d   s    r0   N)Ú__doc__Zpgen2r   Zpygramr   r1   r   r   Z
fixer_utilr   r   r   r   ZBaseFixr   r$   r,   r0   r   r   r   r   Ú<module>   s   @