σ
κι[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	 m
 Z
 m Z m Z d   Z d e j f d     YZ d	 S(
   sͺ  Fixer for except statements with named exceptions.

The following cases will be converted:

- "except E, T:" where T is a name:

    except E as T:

- "except E, T:" where T is not a name, tuple or list:

        except E as t:
            T = t

    This is done because the target of an "except" clause must be a
    name.

- "except E, T:" where T is a tuple or list literal:

        except E as t:
            T = t.args
i   (   t   pytree(   t   token(   t
   fixer_base(   t   Assignt   Attrt   Namet   is_tuplet   is_listt   symsc         c   sb   x[ t  |   D]M \ } } | j t j k r | j d j d k rZ | |  | d f VqZ q q Wd  S(   Ni    u   excepti   (   t	   enumeratet   typeR   t   except_clauset   childrent   value(   t   nodest   it   n(    (    s.   /usr/lib/python2.7/lib2to3/fixes/fix_except.pyt   find_excepts   s    t	   FixExceptc           B   s   e  Z e Z d  Z d   Z RS(   s1  
    try_stmt< 'try' ':' (simple_stmt | suite)
                  cleanup=(except_clause ':' (simple_stmt | suite))+
                  tail=(['except' ':' (simple_stmt | suite)]
                        ['else' ':' (simple_stmt | suite)]
                        ['finally' ':' (simple_stmt | suite)]) >
    c         C   s,  |  j  } g  | d D] } | j   ^ q } g  | d D] } | j   ^ q7 } xt |  D]\ } }	 t | j  d k r\ | j d d !\ }
 } } | j t d d d  | j t j	 k rΙt |  j
   d d } | j   } d | _ | j |  | j   } |	 j } x0 t |  D]" \ } } t | t j  rPqqWt |  s[t |  r|t | t | t d	    } n t | |  } x( t | |   D] } |	 j d
 |  qW|	 j | |  qη| j d k rηd | _ qηq\ q\ Wg  | j d  D] } | j   ^ qω| | } t j | j |  S(   Nt   tailt   cleanupi   i   u   ast   prefixu    u    u   argsi    i   (   R   t   cloneR   t   lenR   t   replaceR   R
   R   t   NAMEt   new_nameR   R	   t
   isinstanceR    t   NodeR   R   R   R   t   reversedt   insert_child(   t   selft   nodet   resultsR   R   R   t   cht   try_cleanupR   t   e_suitet   Et   commat   Nt   new_Nt   targett   suite_stmtsR   t   stmtt   assignt   childt   cR   (    (    s.   /usr/lib/python2.7/lib2to3/fixes/fix_except.pyt	   transform/   s6    	##		!.(   t   __name__t
   __module__t   Truet   BM_compatiblet   PATTERNR/   (    (    (    s.   /usr/lib/python2.7/lib2to3/fixes/fix_except.pyR   $   s   N(   t   __doc__t    R    t   pgen2R   R   t
   fixer_utilR   R   R   R   R   R   R   t   BaseFixR   (    (    (    s.   /usr/lib/python2.7/lib2to3/fixes/fix_except.pyt   <module>   s   .	