ó
…¾^Yc           @   sy   d  Z  d d l Z d d l Z d d l Z d d l m Z e j d Z e j r_ e	 e ƒ Z n  d e
 f d „  ƒ  YZ d S(   s#   Raw data collector for coverage.py.iÿÿÿÿN(   t   envt   YIELD_VALUEt   PyTracerc           B   sV   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 RS(	   s-   Python implementation of the raw data tracer.c         C   s¡   d  |  _ t |  _ d  |  _ d  |  _ d  |  _ d  |  _ g  |  _ d |  _	 g  |  _
 d  |  _ d |  _ d  |  _ t |  _ t |  _ t |  _ t j t |  d t ƒ d  S(   Ni    t	   in_atexit(   t   Nonet   datat   Falset
   trace_arcst   should_tracet   should_trace_cachet   warnt	   threadingt   cur_file_dictt	   last_linet
   data_stackt   last_exc_backt   last_exc_firstlinenot   threadt   stoppedt	   _activityR   t   atexitt   registert   setattrt   True(   t   self(    (    s3   /tmp/pip-build-hU8Cw8/coverage/coverage/pytracer.pyt   __init__%   s     															c         C   s;   d j  t |  ƒ t d „  |  j j ƒ  Dƒ ƒ t |  j ƒ ƒ S(   Ns)   <PyTracer at {0}: {1} lines in {2} files>c         s   s   |  ] } t  | ƒ Vq d  S(   N(   t   len(   t   .0t   v(    (    s3   /tmp/pip-build-hU8Cw8/coverage/coverage/pytracer.pys	   <genexpr>@   s    (   t   formatt   idt   sumR   t   valuesR   (   R   (    (    s3   /tmp/pip-build-hU8Cw8/coverage/coverage/pytracer.pyt   __repr__=   s    	c         C   s¦  |  j  r d S|  j r„ | |  j k rx |  j rZ |  j rZ |  j |  j f } d |  j | <n  |  j j ƒ  \ |  _ |  _ n  d |  _ n  | d k rˆt	 |  _
 |  j j |  j |  j f ƒ | j j } |  j j | ƒ } | d k r|  j | | ƒ } | |  j | <n  d |  _ | j rN| j } | |  j k r;i  |  j | <n  |  j | |  _ n  t | d d ƒ d k  ry| j j |  _ qŸ| j |  _ n| d k rê|  j d k	 rŸ| j } |  j rÎd |  j |  j | f <n d |  j | <| |  _ qŸnµ | d k ru|  j rW|  j rW| j j }	 |	 s.|	 | j t k rW| j j }
 d |  j |  j |
 f <qWn  |  j j ƒ  \ |  _ |  _ n* | d k rŸ| j |  _ | j j |  _ n  |  j S(	   s*   The trace function passed to sys.settrace.Nt   callt   f_lastiiÿÿÿÿi    t   linet   returnt	   exception(   R   R   R   R   R   R   R   R   t   popR   R   t   appendt   f_codet   co_filenameR	   t   getR   t   tracet   source_filenameR   t   getattrt   co_firstlinenot   f_linenot   co_codeR#   R   t   f_backt   _trace(   R   t   framet   eventt
   arg_unusedt   pairt   filenamet   dispt	   tracenamet   linenot   codet   first(    (    s3   /tmp/pip-build-hU8Cw8/coverage/coverage/pytracer.pyR3   D   sX    								c         C   su   t  |  _ |  j r^ |  j d k r6 |  j j ƒ  |  _ q^ |  j j |  j j ƒ  j k r^ |  j Sn  t j	 |  j ƒ |  j S(   sd   Start this Tracer.

        Return a Python function suitable for use with sys.settrace().

        N(
   R   R   R   R   R   t   currentThreadt   identR3   t   syst   settrace(   R   (    (    s3   /tmp/pip-build-hU8Cw8/coverage/coverage/pytracer.pyt   start…   s    		
c         C   s½   t  |  _ |  j r4 |  j j |  j j ƒ  j k r4 d S|  j r¬ t j ƒ  } t	 j
 os t	 j d k os |  j os | d k } | r¬ | |  j k r¬ |  j d | f d d ƒq¬ n  t j d ƒ d S(   s   Stop this Tracer.Ni   i   s7   Trace function changed, measurement is likely wrong: %rt   slugs   trace-changed(   i   i   (   R   R   R   R   R?   R>   R
   R@   t   gettraceR    t   PYPYt   PYPYVERSIONR   R   R3   RA   (   R   t   tft	   dont_warn(    (    s3   /tmp/pip-build-hU8Cw8/coverage/coverage/pytracer.pyt   stop™   s    	'	-c         C   s   |  j  S(   s   Has there been any activity?(   R   (   R   (    (    s3   /tmp/pip-build-hU8Cw8/coverage/coverage/pytracer.pyt   activity°   s    c         C   s   t  |  _ d S(   s   Reset the activity() flag.N(   R   R   (   R   (    (    s3   /tmp/pip-build-hU8Cw8/coverage/coverage/pytracer.pyt   reset_activity´   s    c         C   s   d S(   s+   Return a dictionary of statistics, or None.N(   R   (   R   (    (    s3   /tmp/pip-build-hU8Cw8/coverage/coverage/pytracer.pyt	   get_stats¸   s    (   t   __name__t
   __module__t   __doc__R   R!   R3   RB   RI   RJ   RK   RL   (    (    (    s3   /tmp/pip-build-hU8Cw8/coverage/coverage/pytracer.pyR      s   			A				(   RO   R   t   disR@   t   coverageR    t   opmapR   t   PY2t   chrt   objectR   (    (    (    s3   /tmp/pip-build-hU8Cw8/coverage/coverage/pytracer.pyt   <module>   s   	