
bc           @   s   d  Z  d d l Z d d l Z d d l Td d l m Z d d d d d	 d
 g e Z [ e j e j e j e j	 e
 f Z d d  Z d d  Z d d  Z d d d d d  Z e Z d   Z d   Z d   Z e d k r e   n  d S(   s0   Disassembler of Python byte code into mnemonics.iN(   t   *(   t   __all__t   dist   disassemblet   distbt   discot   findlinestartst
   findlabelsc         C   sH  |  d k r t   d St |  t j  r5 |  j }  n  t |  d  rP |  j }  n  t |  d  rk |  j }  n  t |  d  r |  j	 j
   } | j   x | D]U \ } } t | t  r d | GHy t |  Wn t k
 r } d G| GHn XHq q WnN t |  d  rt |   n2 t |  t  r.t |   n t d t |   j  d S(	   sn   Disassemble classes, methods, functions, or code.

    With no argument, disassemble the last traceback.

    Nt   im_funct	   func_codet   __dict__s   Disassembly of %s:s   Sorry:t   co_codes(   don't know how to disassemble %s objects(   t   NoneR   t
   isinstancet   typest   InstanceTypet	   __class__t   hasattrR   R	   R
   t   itemst   sortt
   _have_codeR   t	   TypeErrorR   t   strt   disassemble_stringt   typet   __name__(   t   xR   t   namet   x1t   msg(    (    s   /usr/lib/python2.7/dis.pyR      s6    
	c         C   sl   |  d k rR y t j }  Wn t k
 r5 t d  n Xx |  j rN |  j }  q9 Wn  t |  j j |  j	  d S(   s2   Disassemble a traceback (default: last traceback).s    no last traceback to disassembleN(
   R   t   syst   last_tracebackt   AttributeErrort   RuntimeErrort   tb_nextR   t   tb_framet   f_codet   tb_lasti(   t   tb(    (    s   /usr/lib/python2.7/dis.pyR   3   s     c         C   sa  |  j  } t |  } t t |    } t |  } d } d } d } x| | k  r\| | }	 t |	  }
 | | k r | d k r Hn  d | | Gn d G| | k r d Gn d G| | k r d Gn d Gt |  j d  Gt	 |
 j
 d  G| d	 } |
 t k rXt | |  t | | d	  d
 | } d } | d } |
 t k rT| d } n  t |  j d  G|
 t k rd t |  j |  d GqX|
 t k rd |  j | d GqX|
 t k rd t | |  d GqX|
 t k rd |  j | d GqX|
 t k rd t | d GqX|
 t k rX| d k rB|  j |  j } n  d | | d GqXn  HqH Wd S(   s   Disassemble a code object.i    s   %3ds      s   -->s   >>s     i   i   i   i   i   l      i   t   (t   )s   (to N(   R   R   t   dictR   t   lenR   t   ordt   reprt   rjustt   opnamet   ljustt   HAVE_ARGUMENTt   EXTENDED_ARGt   hasconstt	   co_constst   hasnamet   co_namest   hasjrelt   haslocalt   co_varnamest
   hascomparet   cmp_opt   hasfreet   co_cellvarst   co_freevars(   t   cot   lastit   codet   labelst
   linestartst   nt   it   extended_argt   freet   ct   opt   oparg(    (    s   /usr/lib/python2.7/dis.pyR   =   s\    	
  
*
c         C   s  t  |   } t |   } d } x| | k  r|  | } t |  }	 | | k rV d Gn d G| | k rm d Gn d Gt |  j d  Gt |	 j d  G| d } |	 t k rt |  |  t |  | d  d	 }
 | d
 } t |
  j d  G|	 t k r$| rd t | |
  d Gqd |
 Gq|	 t	 k rZ| d  k	 rOd | |
 d Gqd |
 Gq|	 t k rd t | |
  d Gq|	 t k r| rd | |
 d Gqd |
 Gq|	 t k rd t |
 d Gqn  Hq! Wd  S(   Ni    s   -->s      s   >>s     i   i   i   i   i   i   R'   R(   s   (%d)s   (to (   R   R*   R+   R,   R-   R.   R/   R0   R2   R4   R   R6   R7   R9   R:   (   R@   R?   t   varnamest   namest	   constantsRA   RC   RD   RG   RH   RI   (    (    s   /usr/lib/python2.7/dis.pyR   n   sH    
  
&
c         C   s   g  } t  |   } d } x | | k  r |  | } t |  } | d } | t k r t |  |  t |  | d  d } | d } d } | t k r | | } n | t k r | } n  | d k r | | k r | j |  q q q q W| S(   s`   Detect all offsets in a byte code which are jump targets.

    Return the list of offsets.

    i    i   i   i   i(   R*   R+   R0   R6   t   hasjabst   append(   R@   RA   RC   RD   RG   RH   RI   t   label(    (    s   /usr/lib/python2.7/dis.pyR      s&    

&
	c   	      c   s   g  |  j  d d d  D] } t |  ^ q } g  |  j  d d d  D] } t |  ^ qF } d } |  j } d } xZ t | |  D]I \ } } | r | | k r | | f V| } n  | | 7} n  | | 7} q W| | k r | | f Vn  d S(   s   Find the offsets in a byte code which are start of lines in the source.

    Generate pairs (offset, lineno) as described in Python/compile.c.

    i    Ni   i   (   t	   co_lnotabR+   R   t   co_firstlinenot   zip(	   R@   RG   t   byte_incrementst   line_incrementst
   lastlinenot   linenot   addrt	   byte_incrt	   line_incr(    (    s   /usr/lib/python2.7/dis.pyR      s    //		c          C   s   t  j d rf t  j d r: t  j j d  t  j d  n  t  j d }  |  sZ |  d k rl d }  ql n d }  |  d k r t  j } n t |   } | j   } |  d k	 r | j	   n d }  t
 | |  d  } t |  d S(   s*   Simple test program to disassemble a file.i   i   s   usage: python dis.py [-|file]
t   -s   <stdin>t   execN(   R   t   argvt   stderrt   writet   exitR   t   stdint   opent   readt   closet   compileR   (   t   fnt   ft   sourceR@   (    (    s   /usr/lib/python2.7/dis.pyt   _test   s"    t   __main__(   t   __doc__R   R   t   opcodeR   t   _opcodes_allt
   MethodTypet   FunctionTypet   CodeTypet	   ClassTypeR   R   R   R   R   R   R   R   R   R   Rh   R   (    (    (    s   /usr/lib/python2.7/dis.pyt   <module>   s(   
#
1	'			