
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
U
    ¡ê,a  ã                   @   sf   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G d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   sD   t | ƒD ]6\}}|jtjkr|jd jdkr|| |d  fV  qd S )Né    Úexceptr   )Ú	enumerateÚtyper
   Úexcept_clauseÚchildrenÚvalue)ZnodesÚiÚn© r   ú=/opt/alt/python38/lib64/python3.8/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   sx  | j }dd„ |d D ƒ}dd„ |d D ƒ}t|ƒD �]\}}t|jƒdkr2|jdd… \}}	}
|	 tdd	d
�¡ |
jtjk�r8t|  	¡ d	d
�}|
 
¡ }d|_|
 |¡ | 
¡ }|j}t|ƒD ]\}}t|tjƒr¼ qÖq¼t|
ƒsæt|
ƒrüt|t|tdƒƒƒ}n
t||ƒ}t|d |… ƒD ]}| d|¡ �q| ||¡ q2|
jdkr2d	|
_q2dd„ |jd d… D ƒ| | }t |j|¡S )Nc                 S   s   g | ]}|  ¡ ‘qS r   ©Úclone)Ú.0r   r   r   r   Ú
<listcomp>2   s     z'FixExcept.transform.<locals>.<listcomp>Útailc                 S   s   g | ]}|  ¡ ‘qS r   r   )r   Zchr   r   r   r   4   s     Zcleanupé   é   Úasú )ÚprefixÚ Úargsr   c                 S   s   g | ]}|  ¡ ‘qS r   r   )r   Úcr   r   r   r   \   s     é   )r
   r   Úlenr   Úreplacer   r   r   ÚNAMEÚnew_namer   r!   r   Ú
isinstancer   ZNoder   r	   r   r   ÚreversedZinsert_child)ÚselfZnodeZresultsr
   r   Ztry_cleanupr   Ze_suiteÚEZcommaÚNZnew_NÚtargetZsuite_stmtsr   ZstmtZassignZchildr   r   r   r   Ú	transform/   s6    


 zFixExcept.transformN)Ú__name__Ú
__module__Ú__qualname__ZBM_compatibleZPATTERNr0   r   r   r   r   r   $   s   r   N)Ú__doc__r"   r   Zpgen2r   r   Z
fixer_utilr   r   r   r   r	   r
   r   ZBaseFixr   r   r   r   r   Ú<module>   s    