File: //opt/alt/python35/lib64/python3.5/lib2to3/fixes/__pycache__/fix_except.cpython-35.opt-1.pyc
��Yf
  �               @   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 d �  Z
 Gd d	 �  d	 e j � Z d
 S)a�  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
�   )�pytree)�token)�
fixer_base)�Assign�Attr�Name�is_tuple�is_list�symsc             c   s\   xU t  |  � D]G \ } } | j t j k r
 | j d j d k r
 | |  | d f Vq
 Wd  S)N�    �exceptr   )�	enumerate�typer
   �
except_clause�children�value)Znodes�i�n� r   �=/opt/alt/python35/lib64/python3.5/lib2to3/fixes/fix_except.py�find_excepts   s    r   c               @   s(   e  Z d  Z d Z d Z d d �  Z d S)�	FixExceptTa1  
    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  } d d �  | d D� } d d �  | d D� } x�t | � D]�\ } } t | j � d k rD | j d d � \ } }	 }
 |	 j t d d	 d
 �� |
 j t j k r�t |  j	 �  d	 d
 �} |
 j
 �  } d | _ |
 j | � | j
 �  } | j }
 x- t |
 � D] \ } } t
 | t j � rPqWt |
 � sCt |
 � rdt | t | t d � � � } n t | | � } x. t |
 d  | � � D] } | j d
 | � q�W| j | | � qD |
 j d k rD d
 |
 _ qD Wd d �  | j d  d � D� | | } t j | j | � S)Nc             S   s   g  |  ] } | j  �  � q Sr   )�clone)�.0r   r   r   r   �
<listcomp>2   s   	 z'FixExcept.transform.<locals>.<listcomp>�tailc             S   s   g  |  ] } | j  �  � q Sr   )r   )r   Zchr   r   r   r   4   s   	 Zcleanup�   �   �as�prefix� � �argsr   c             S   s   g  |  ] } | j  �  � q Sr   )r   )r   �cr   r   r   r   \   s   	 �   )r
   r   �lenr   �replacer   r   r   �NAME�new_namer   r   r
   �
isinstancer   ZNoder   r	   r   r   �reversedZinsert_child)�selfZnodeZresultsr
   r   Ztry_cleanupr   Ze_suite�EZcomma�NZnew_N�targetZsuite_stmtsr   ZstmtZassignZchildr   r   r   r   �	transform/   s6    		
	!
(zFixExcept.transformN)�__name__�
__module__�__qualname__Z
BM_compatibleZPATTERNr/   r   r   r   r   r   $   s   r   N)�__doc__r!   r   Zpgen2r   r   Z
fixer_utilr   r   r   r   r	   r
   r   ZBaseFixr   r   r   r   r   �<module>   s   .