�`^c@s�dZddlmZddlmZddlmZddlmZmZm Z m
Z
mZmZd�Z
dejfd��YZd 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(tpytree(ttoken(t
fixer_base(tAssigntAttrtNametis_tupletis_listtsymsccsbx[t|�D]M\}}|jtjkr
|jdjdkrZ|||dfVqZq
q
WdS(Niuexcepti(t enumeratettypeRt
except_clausetchildrentvalue(tnodestitn((s./sys/lib/python2.7/lib2to3/fixes/fix_except.pytfind_exceptsst FixExceptcBseZeZdZd�ZRS(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)]) >
cCs,|j}g|dD]}|j�^q}g|dD]}|j�^q7}x�t|�D]�\}} t|j�dkr\|jdd!\}
}}|jtddd��|jtj kr�t|j
�dd�}
|j�}d|_|j|
�|
j�}
| j}x0t|�D]"\}}t
|tj�rPqqWt|�s[t|�r|t|t|
td ���}nt||
�}x(t|| �D]}| jd
|�q�W| j||�q�jdkr�|_q�\q\Wg|jd D]}|j�^q�|}tj|j|�S(Nttailtcleanupiiuastprefixu uuargsii(RtcloneRtlenRtreplaceRR
RtNAMEtnew_nameRR t
isinstanceRtNodeRRRRtreversedtinsert_child(tselftnodetresultsRRRtchttry_cleanupRte_suitetEtcommatNtnew_Nttargettsuite_stmtsRtstmttassigntchildtcR((s./sys/lib/python2.7/lib2to3/fixes/fix_except.pyt transform/s6 ##
!.(t__name__t
__module__tTruet
BM_compatibletPATTERNR/(((s./sys/lib/python2.7/lib2to3/fixes/fix_except.pyR$sN(t__doc__tRtpgen2RRt
fixer_utilRRRRRRRtBaseFixR(((s./sys/lib/python2.7/lib2to3/fixes/fix_except.pyt<module>s.
|