File: //lib64/python3.6/lib2to3/fixes/__pycache__/fix_except.cpython-36.pyc
3
  \
  �               @   sf   d Z ddlmZ ddlmZ ddlmZ ddlmZmZm	Z	m
Z
mZmZ dd� Z
G dd	� d	ej�Zd
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   sH   xBt | �D ]6\}}|jtjkr
|jd jdkr
|| |d  fV  q
W d S )N�    �exceptr   )�	enumerate�typer
   �
except_clause�children�value)Znodes�i�n� r   �0/usr/lib64/python3.6/lib2to3/fixes/fix_except.py�find_excepts   s    r   c               @   s   e Zd ZdZdZdd� ZdS )�	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 }dd� |d D �}dd� |d D �}�x*t|�D �]\}}t|j�dkr6|jdd� \}}	}
|	jtdd	d
�� |
jtjk�rDt| j	� d	d
�}|
j
� }d|_|
j|� |j
� }|j}
x"t|
�D ]\}}t
|tj�r�P q�W t|
�s�t|
��rt|t|td���}n
t||�}x&t|
d |� �D ]}|jd
|� �q W |j||� q6|
jdkr6d	|
_q6W dd� |jd d� D �| | }tj|j|�S )Nc             S   s   g | ]}|j � �qS r   )�clone)�.0r   r   r   r   �
<listcomp>2   s    z'FixExcept.transform.<locals>.<listcomp>�tailc             S   s   g | ]}|j � �qS r   )r   )r   Zchr   r   r   r   4   s    Zcleanup�   �   �as� )�prefix� �argsr   c             S   s   g | ]}|j � �qS r   )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