a XC?h.�@sZdZddlmZddlmZddlmZddlmZmZm Z m Z m Z Gdd�dej �Z dS) z�Fixer for generator.throw(E, V, T). g.throw(E) -> g.throw(E) g.throw(E, V) -> g.throw(E(V)) g.throw(E, V, T) -> g.throw(E(V).with_traceback(T)) g.throw("foo"[, V[, T]]) will warn about string exceptions.�)�pytree)�token)� fixer_base)�Name�Call�ArgList�Attr�is_tuplec@seZdZdZdZdd�ZdS)�FixThrowTz� power< any trailer< '.' 'throw' > trailer< '(' args=arglist< exc=any ',' val=any [',' tb=any] > ')' > > | power< any trailer< '.' 'throw' > trailer< '(' exc=any ')' > > c Cs�|j}|d��}|jtjur.|�|d�dS|�d�}|durDdS|��}t|�rndd�|jdd�D�}n d|_ |g}|d }d |vr�|d ��}d|_ t ||�} t | t d ��t |g�g} |�t�|j| ��n|�t ||��dS) N�excz+Python 3 does not support string exceptions�valcSsg|] }|���qS�)�clone)�.0�cr r �)�z&FixThrow.transform..��������args�tb�with_traceback)�symsr�typer�STRINGZcannot_convert�getr Zchildren�prefixrrrr�replacerZNodeZpower) �selfZnodeZresultsrr r rZ throw_argsr�eZwith_tbr r r� transforms*      zFixThrow.transformN)�__name__� __module__� __qualname__Z BM_compatibleZPATTERNr"r r r rr sr N)�__doc__rrZpgen2rrZ fixer_utilrrrrr ZBaseFixr r r r r�s