ó
,ş]c           @   s   d  Z  d d l m Z m Z d d l m Z d d l m Z m Z m	 Z	 m
 Z
 m Z m Z d d l m Z d e j f d     YZ d S(	   s  Fixer for 'raise E, V'

From Armin Ronacher's ``python-modernize``.

raise         -> raise
raise E       -> raise E
raise E, 5    -> raise E(5)
raise E, 5, T -> raise E(5).with_traceback(T)
raise E, None, T -> raise E.with_traceback(T)

raise (((E, E'), E''), E'''), 5 -> raise E(5)
raise "foo", V, T               -> warns about string exceptions

raise E, (V1, V2) -> raise E(V1, V2)
raise E, (V1, V2), T -> raise E(V1, V2).with_traceback(T)


CAVEATS:
1) "raise E, V, T" cannot be translated safely in general. If V
   is not a tuple or a (number, string, None) literal, then:

   raise E, V, T -> from future.utils import raise_
                    raise_(E, V, T)
i˙˙˙˙(   t   pytreet
   fixer_base(   t   token(   t   Namet   Callt   is_tuplet   Commat   Attrt   ArgList(   t   touch_import_topt   FixRaisec           B   s   e  Z e Z d  Z d   Z RS(   sB   
    raise_stmt< 'raise' exc=any [',' val=any [',' tb=any]] >
    c         C   sA  |  j  } | d j   } | j t j k rE d } |  j | |  d  St |  r x* t |  r} | j d j d j   } qT Wd | _ n  d | k rŠ | d j   } n d  } d | k rŇ| d j   } t |  rg  | j d d !D] } | j   ^ qč }	 t
 | |	  } qŇ| j t j t j f k rKd	 | _ t
 | | g  } qŇ| j t j k ro| j d
 k roqŇt d d |  d	 | _ | t   | g }	 | d  k	 rź|	 t   | g 7}	 n  t
 t d  |	  Sn  | d  k	 rd | _ t | t d   t | g  g }
 n	 | g }
 t j | j t d  g |
 d | j S(   Nt   excs+   Python 3 does not support string exceptionsi   i    u    t   tbt   vali˙˙˙˙u    u   Noneu   future.utilsu   raise_t    t   with_tracebacku   raiset   prefix(   t   symst   clonet   typeR   t   STRINGt   cannot_convertR   t   childrenR   t   NoneR   t   NUMBERt   NAMEt   valueR	   R   R   R   R   R    t   Nodet
   raise_stmt(   t   selft   nodet   resultsR   R   t   msgR   R   t   ct   argst   exc_list(    (    s?   /usr/lib/python2.7/site-packages/libfuturize/fixes/fix_raise.pyt	   transform*   sH    	)	!			(	(   t   __name__t
   __module__t   Truet   BM_compatiblet   PATTERNR$   (    (    (    s?   /usr/lib/python2.7/site-packages/libfuturize/fixes/fix_raise.pyR
   #   s   N(   t   __doc__t   lib2to3R    R   t   lib2to3.pgen2R   t   lib2to3.fixer_utilR   R   R   R   R   R   t   libfuturize.fixer_utilR	   t   BaseFixR
   (    (    (    s?   /usr/lib/python2.7/site-packages/libfuturize/fixes/fix_raise.pyt   <module>   s
   .