;
Êâ"Ic            	   @   s  d  Z  d d l Z d d l Z d d l Td d l m Z d d d d g e Z [ d d	 „ Z d d
 „ Z i d d 6d d 6d d 6d d 6d d 6d d 6d d 6Z	 d „  Z
 d „  Z d d „ Z d d d d d „ Z e Z d „  Z d „  Z d  „  Z e d! k o e ƒ  n d S("   u0   Disassembler of Python byte code into mnemonics.i    N(   u   *(   u   __all__u   disu   disassembleu   distbu   discoc             C   su  |  d k o t ƒ  d St |  d ƒ o |  j }  n t |  d ƒ o |  j }  n t |  d ƒ o³ t |  j j ƒ  ƒ } xö | D] \ } } t | t	 j
 t	 j t	 j t f ƒ o^ t d | ƒ y t | ƒ Wn4 t k
 o( } z t d | ƒ WYd d } ~ Xn Xt ƒ  q q Wn\ t |  d ƒ o t |  ƒ n> t |  t t f ƒ o t |  ƒ n t d t |  ƒ j ƒ ‚ d S(	   un   Disassemble classes, methods, functions, or code.

    With no argument, disassemble the last traceback.

    Nu   __func__u   __code__u   __dict__u   Disassembly of %s:u   Sorry:u   co_codeu(   don't know how to disassemble %s objects(   u   Noneu   distbu   hasattru   __func__u   __code__u   sortedu   __dict__u   itemsu
   isinstanceu   typesu
   MethodTypeu   FunctionTypeu   CodeTypeu   typeu   printu   disu	   TypeErroru   disassembleu   bytesu	   bytearrayu   disassemble_stringu   __name__(   u   xu   itemsu   nameu   x1u   msg(    (    u    /mit/python/lib/python3.0/dis.pyu   dis   s2     !c          	   C   sv   |  d k oO y t j }  Wn  t k
 o t d ƒ ‚ Yn Xx |  j o |  j }  q@ Wn t |  j j |  j	 ƒ d S(   u2   Disassemble a traceback (default: last traceback).u    no last traceback to disassembleN(
   u   Noneu   sysu   last_tracebacku   AttributeErroru   RuntimeErroru   tb_nextu   disassembleu   tb_frameu   f_codeu   tb_lasti(   u   tb(    (    u    /mit/python/lib/python3.0/dis.pyu   distb,   s     
 u	   OPTIMIZEDi   u	   NEWLOCALSi   u   VARARGSi   u   VARKEYWORDSi   u   NESTEDi   u	   GENERATORi    u   NOFREEi@   c             C   s‹   g  } xu t  d ƒ D]T } d | >} |  | @o9 | j t j | t | ƒ ƒ ƒ |  | N}  |  p Pqg q q W| j t |  ƒ ƒ d j | ƒ S(   u+   Return pretty representation of code flags.i    i   u   , (   u   rangeu   appendu	   flag2nameu   getu   hexu   join(   u   flagsu   namesu   iu   flag(    (    u    /mit/python/lib/python3.0/dis.pyu   pretty_flagsB   s     

c             C   sº  t  d |  j ƒ t  d |  j ƒ t  d |  j ƒ t  d |  j ƒ t  d |  j ƒ t  d |  j ƒ t  d t |  j ƒ ƒ |  j	 o6 t  d ƒ x) t
 |  j	 ƒ D] } t  d	 | ƒ qš Wn |  j o6 t  d
 ƒ x) t
 |  j ƒ D] } t  d | ƒ qÚ Wn |  j o6 t  d ƒ x) t
 |  j ƒ D] } t  d | ƒ qWn |  j o6 t  d ƒ x) t
 |  j ƒ D] } t  d | ƒ qZWn |  j o6 t  d ƒ x) t
 |  j ƒ D] } t  d | ƒ qšWn d S(   u!   Show details about a code object.u   Name:             u   Filename:         u   Argument count:   u   Kw-only arguments:u   Number of locals: u   Stack size:       u   Flags:            u
   Constants:u   %4d: %ru   Names:u   %4d: %su   Variable names:u   Free variables:u   Cell variables:N(   u   printu   co_nameu   co_filenameu   co_argcountu   co_kwonlyargcountu
   co_nlocalsu   co_stacksizeu   pretty_flagsu   co_flagsu	   co_constsu	   enumerateu   co_namesu   co_varnamesu   co_freevarsu   co_cellvars(   u   cou   i_cu   i_n(    (    u    /mit/python/lib/python3.0/dis.pyu	   show_codeP   s@    

 

 

 

 

 iÿÿÿÿc             C   s%  |  j  } t | ƒ } t t |  ƒ ƒ } t | ƒ } d } d } d } xÙ| | k  oË| | }	 | | k o4 | d k o t ƒ  n t d | | d d ƒn t d d d ƒ| | k o t d d d ƒn t d d d ƒ| | k o t d d d ƒn t d d d ƒt t | ƒ j d	 ƒ d d ƒt t	 |	 j
 d
 ƒ d d ƒ| d } |	 t k o°| | | | d d | }
 d } | d } |	 t k o |
 d } n t t |
 ƒ j d ƒ d d ƒ|	 t k o) t d t |  j |
 ƒ d d d ƒq|	 t k o# t d |  j |
 d d d ƒq|	 t k o& t d t | |
 ƒ d d d ƒq|	 t k o# t d |  j |
 d d d ƒq|	 t k o  t d t |
 d d d ƒq|	 t k oA | d k o |  j |  j } n t d | |
 d d d ƒqn t ƒ  qH Wd S(   u   Disassemble a code object.i    u   %3du   endu    u      u   -->u   >>u     i   i   i   i   i   i   i   u   (u   )u   (to N(   u   co_codeu
   findlabelsu   dictu   findlinestartsu   lenu   Noneu   printu   repru   rjustu   opnameu   ljustu   HAVE_ARGUMENTu   EXTENDED_ARGu   hasconstu	   co_constsu   hasnameu   co_namesu   hasjrelu   haslocalu   co_varnamesu
   hascompareu   cmp_opu   hasfreeu   co_cellvarsu   co_freevars(   u   cou   lastiu   codeu   labelsu
   linestartsu   nu   iu   extended_argu   freeu   opu   oparg(    (    u    /mit/python/lib/python3.0/dis.pyu   disassemblen   s\    	 
  

)#&# $c       
      C   s”  t  |  ƒ } t |  ƒ } d } xo| | k  oa|  | } | | k o t d d d ƒn t d d d ƒ| | k o t d d d ƒn t d d d ƒt t | ƒ j d ƒ d d ƒt t | j d	 ƒ d d ƒ| d
 } | t k o—|  | |  | d
 d }	 | d } t t |	 ƒ j d ƒ d d ƒ| t k oE | o& t d t | |	 ƒ d d d ƒq€t d |	 d d ƒq„| t	 k oE | d  k	 o  t d | |	 d d d ƒq€t d |	 d d ƒq„| t k o& t d t | |	 ƒ d d d ƒq„| t k o? | o  t d | |	 d d d ƒq€t d |	 d d ƒq„| t k o  t d t |	 d d d ƒq„n t ƒ  q! Wd  S(   Ni    u   -->u   endu    u      u   >>u     i   i   i   i   i   i   u   (u   )u   (%d)u   (to (   u
   findlabelsu   lenu   printu   repru   rjustu   opnameu   ljustu   HAVE_ARGUMENTu   hasconstu   hasnameu   Noneu   hasjrelu   haslocalu
   hascompareu   cmp_op(
   u   codeu   lastiu   varnamesu   namesu	   constantsu   labelsu   nu   iu   opu   oparg(    (    u    /mit/python/lib/python3.0/dis.pyu   disassemble_stringž   sH     
  

& & $c             C   sá   g  } t  |  ƒ } d } xÂ | | k  o´ |  | } | d } | t k o |  | |  | d d } | d } d } | t k o | | } n | t k o
 | } n | d k o" | | k o | j | ƒ qÔ qØ q q W| S(   u`   Detect all offsets in a byte code which are jump targets.

    Return the list of offsets.

    i    i   i   i   iÿÿÿÿ(   u   lenu   HAVE_ARGUMENTu   hasjrelu   hasjabsu   append(   u   codeu   labelsu   nu   iu   opu   opargu   label(    (    u    /mit/python/lib/python3.0/dis.pyu
   findlabelsÇ   s&     



c             c   sÎ   t  |  j d d d … ƒ } t  |  j d d d … ƒ } d } |  j } d } x^ t | | ƒ D]M \ } } | o0 | | k o | | f V| } n | | 7} n | | 7} q] W| | k o | | f Vn d S(   u”   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   (   u   listu	   co_lnotabu   Noneu   co_firstlinenou   zip(   u   codeu   byte_incrementsu   line_incrementsu
   lastlinenou   linenou   addru	   byte_incru	   line_incr(    (    u    /mit/python/lib/python3.0/dis.pyu   findlinestartsà   s    	 
c              C   sò   t  j d d … oe t  j d d … o! t  j j d ƒ t  j d ƒ n t  j d }  |  p |  d k o
 d }  q n d }  |  d k o t  j } n t |  ƒ } | j ƒ  } |  d k	 o | j	 ƒ  n d }  t
 | |  d ƒ } t | ƒ d S(   u*   Simple test program to disassemble a file.i   Ni   u   usage: python dis.py [-|file]
u   -u   <stdin>u   exec(   u   sysu   argvu   stderru   writeu   exitu   Noneu   stdinu   openu   readu   closeu   compileu   dis(   u   fnu   fu   sourceu   code(    (    u    /mit/python/lib/python3.0/dis.pyu   _testö   s"    u   __main__(   u   __doc__u   sysu   typesu   opcodeu   __all__u   _opcodes_allu   Noneu   disu   distbu	   flag2nameu   pretty_flagsu	   show_codeu   disassembleu   disassemble_stringu   discou
   findlabelsu   findlinestartsu   _testu   __name__(    (    (    u    /mit/python/lib/python3.0/dis.pyu   <module>   s6   
 
		0	&			