³ņ
C3IHc           @   s`   d  d k  l Z d  d k l Z d  d k l Z d  d k l Z l Z d e f d     YZ	 d S(   i’’’’(   t   Check(   t   BaseVisitor(   t   Warning(   t   astt   walkt   ReachableCheckc           B   s/   e  Z e d  d  Z e d d  Z d   Z RS(   s   Report unreachable codes   Line is unreachables:   Report implicit return in a function with explicit returnss3   Function %s uses both implicit and explicit returnsc            sm   d t  f    f d     Y} xG  i i   D]6 } t | i t i  o t | i i |    q/ q/ Wd  S(   Nt   ReturnsVisitorc              s   e  Z d    Z d   Z d   Z d   Z d   Z d   Z    f d   Z d   Z	    f d   Z
 d	   Z e Z d
   Z e Z RS(   c         S   s   d |  _  d |  _ d  S(   Ni    (   t   always_returnst   has_returns(   t   s(    (    s0   C:\py\_spe\plugins\pychecker2\ReachableChecks.pyt   __init__   s    	c         S   s   d |  _  |  i |  |  i  S(   Ni    (   R   t   visit(   R	   t   node(    (    s0   C:\py\_spe\plugins\pychecker2\ReachableChecks.pyt   check_returns   s    	c         S   sN   x& | D] } |  i  |  p d  Sq q Wd |  _ | o |  i |  n d  S(   Ni    (   R   R   R   (   R	   t   nodest   else_t   n(    (    s0   C:\py\_spe\plugins\pychecker2\ReachableChecks.pyt   alternatives_with_else   s     	c         S   sh   t  | i t i  o | i i |  _ n t  | i t i  o$ | i i d j o d |  _ qd n d  S(   Nt   Nonei   (   t
   isinstancet   testR   t   Constt   valueR   t   Namet   name(   R	   R   (    (    s0   C:\py\_spe\plugins\pychecker2\ReachableChecks.pyt   visitAssert"   s
    c         S   sD   d |  _  t | i t i  p | i i d  j	 o d |  _ n d  S(   Ni   (   R   R   R   R   R   R   R   (   R	   R   (    (    s0   C:\py\_spe\plugins\pychecker2\ReachableChecks.pyt   visitReturn)   s    	c         S   s   d |  _  d  S(   Ni   (   R   (   R	   t   unused_node(    (    s0   C:\py\_spe\plugins\pychecker2\ReachableChecks.pyt
   visitRaise/   s    c            s   |  i  | i  o+ | i o!  i | i i d   i  n d |  _ g  } | i D] \ } } } | | qU ~ } |  i | | i p | i  d  S(   Ni    (	   R   t   bodyR   t   warningR   t   unreachableR   t   handlersR   (   R	   R   t   _[1]t   exct   detailt   codeR    (   t   selft   file(    s0   C:\py\_spe\plugins\pychecker2\ReachableChecks.pyt   visitTryExcept2   s
    !	-c         S   sA   g  } | i  D] \ } } | | q ~ } |  i | | i  d  S(   N(   t   testsR   R   (   R	   R   R!   t   condR$   (    (    s0   C:\py\_spe\plugins\pychecker2\ReachableChecks.pyt   visitIf=   s    *c            sĖ   xÄ t  t | i  d  D]@ } |  i | i |  o#  i | i | d   i  Pq q W| i o_ |  i | i d  oG t | i t i	  o1 |  i
 o'  i | i d   i | i i  n d  S(   Ni   i’’’’(   t   ranget   lenR   R   R   R   R   t   parentR   t   FunctionR   t   implicitReturnR   (   R	   R   R   (   R%   R&   (    s0   C:\py\_spe\plugins\pychecker2\ReachableChecks.pyt	   visitStmtA   s     	

c         S   s   d  S(   N(    (   R	   R   (    (    s0   C:\py\_spe\plugins\pychecker2\ReachableChecks.pyt   visitFunctionN   s    c         S   s   d |  _  d  S(   Ni    (   R   (   R	   t   unused(    (    s0   C:\py\_spe\plugins\pychecker2\ReachableChecks.pyt
   visitWhileR   s    (   t   __name__t
   __module__R
   R   R   R   R   R   R'   R*   R0   R1   t
   visitClassR3   t   visitFor(    (   R%   R&   (    s0   C:\py\_spe\plugins\pychecker2\ReachableChecks.pyR      s   									(	   R   t   scopest   valuesR   R   R   R.   R   R$   (   R%   R&   t   unused_checkerR   t   scope(    (   R%   R&   s0   C:\py\_spe\plugins\pychecker2\ReachableChecks.pyt   check   s
    H (   R4   R5   R   R   R/   R<   (    (    (    s0   C:\py\_spe\plugins\pychecker2\ReachableChecks.pyR      s   	N(
   t   pychecker2.CheckR    t   pychecker2.utilR   t   pychecker2.WarningR   t   compilerR   R   R   (    (    (    s0   C:\py\_spe\plugins\pychecker2\ReachableChecks.pys   <module>   s   