a
    ze                     @   sb   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 )
   )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   ./usr/lib/python3.9/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 qqt|
st|
rt|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       z'FixExcept.transform.<locals>.<listcomp>tailc                 S   s   g | ]}|  qS r   r   )r   Zchr   r   r   r   4   r   cleanup      as )prefix argsr   c                 S   s   g | ]}|  qS r   r   )r   cr   r   r   r   \   r      )r
   r   lenr   replacer   r   r   NAMEnew_namer   r#   r   
isinstancer   ZNoder   r	   r   r   reversedZinsert_child)selfZnoderesultsr
   r   Ztry_cleanupr   Ze_suiteEZcommaNZnew_NtargetZsuite_stmtsr   ZstmtZassignchildr   r   r   r   	transform/   s6    


 zFixExcept.transformN)__name__
__module____qualname__ZBM_compatibleZPATTERNr4   r   r   r   r   r   $   s   r   N)r$   r   Zpgen2r   r   Z
fixer_utilr   r   r   r   r	   r
   r   ZBaseFixr   r   r   r   r   <module>   s
    