File: //lib64/python3.9/lib2to3/fixes/__pycache__/fix_throw.cpython-39.pyc
a
    �DOg.  �                   @   sZ   d Z ddlmZ ddlmZ ddlmZ ddlmZmZm	Z	m
Z
mZ G dd� 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                   @   s   e Zd ZdZdZdd� ZdS )�FixThrowTz�
    power< any trailer< '.' 'throw' >
           trailer< '(' args=arglist< exc=any ',' val=any [',' tb=any] > ')' >
    >
    |
    power< any trailer< '.' 'throw' > trailer< '(' exc=any ')' > >
    c                 C   s�   | j }|d �� }|jtju r.| �|d� d S |�d�}|d u rDd S |�� }t|�rndd� |jdd� D �}nd|_	|g}|d	 }d
|v r�|d
 �� }d|_	t
||�}	t|	td��t
|g�g }
|�t�|j|
�� n|�t
||�� d S )N�excz+Python 3 does not support string exceptions�valc                 S   s   g | ]}|� � �qS � )�clone)�.0�cr
   r
   �//usr/lib64/python3.9/lib2to3/fixes/fix_throw.py�
<listcomp>)   �    z&FixThrow.transform.<locals>.<listcomp>�   ���� �args�tb�with_traceback)�symsr   �typer   �STRINGZcannot_convert�getr	   Zchildren�prefixr   r   r   r   �replacer   ZNodeZpower)�selfZnode�resultsr   r   r   r   Z
throw_argsr   �eZwith_tbr
   r
   r   �	transform   s*    
zFixThrow.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	   ZBaseFixr
   r
   r
   r
   r   �<module>   s