File: //opt/alt/python27/lib/python2.7/site-packages/libfuturize/fixes/fix_next_call.pyc
�
�A�[c           @   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 d e j
 f d �  �  YZ d	 �  Z d
 �  Z d �  Z d S(
   s  
Based on fix_next.py by Collin Winter.
Replaces it.next() -> next(it), per PEP 3114.
Unlike fix_next.py, this fixer doesn't replace the name of a next method with __next__,
which would break Python 2 compatibility without further help from fixers in
stage 2.
i����(   t   token(   t   python_symbols(   t
   fixer_base(   t   Namet   Callt   find_bindings;   Calls to builtin next() possibly shadowed by global bindingt   FixNextCallc           B   s,   e  Z e Z d  Z d Z d �  Z d �  Z RS(   s�   
    power< base=any+ trailer< '.' attr='next' > trailer< '(' ')' > >
    |
    power< head=any+ trailer< '.' attr='next' > not trailer< '(' ')' > >
    |
    global=global_stmt< 'global' any* 'next' any* >
    t   prec         C   sW   t  t |  � j | | � t d | � } | rJ |  j | t � t |  _ n	 t |  _ d  S(   Nt   next(	   t   superR   t
   start_treeR   t   warningt   bind_warningt   Truet
   shadowed_nextt   False(   t   selft   treet   filenamet   n(    (    sP   /opt/alt/python27/lib/python2.7/site-packages/libfuturize/fixes/fix_next_call.pyR
       s    c         C   s>  | s t  � | j d � } | j d � } | j d � } | r� |  j rK q:g  | D] } | j �  ^ qR } d | d _ | j t t d d | j �| � � n� | r� n� | rt | � r:| d } d j	 g  | D] } t
 | � ^ q� � j �  d	 k r|  j | t
 � n  d  Sn( d
 | k r:|  j | t
 � t |  _ n  d  S(   Nt   baset   attrt   namet    i    R   t   prefixt   headt   __builtin__t   global(   t   AssertionErrort   getR   t   cloneR   t   replaceR   R   t   is_assign_targett   joint   strt   stripR   R   R
   (   R   t   nodet   resultsR   R   R   R   R   (    (    sP   /opt/alt/python27/lib/python2.7/site-packages/libfuturize/fixes/fix_next_call.pyt	   transform*   s*    	
(
4(   t   __name__t
   __module__R
   t
   BM_compatiblet   PATTERNt   orderR
   R&