???<!-- GIF89;a -->
123123123123
.....................................................................................................................................???<!-- GIF89;a -->
123123123123
.....................................................................................................................................
]C                 @   sn  d  d l  Z  d  d l Z d  d l Z d  d l Z d  d l Td  d l m Z d d d d d d	 d
 d d d d g e Z [ e j e j e j	 e
 e e f Z d d   Z d d d d d Z d d d d d Z d d d d d d d d d d d d d  d! d" d# d$ d% i	 Z d& d'   Z d( d)   Z d* d   Z d+ d,   Z d d d- d  Z e j d. d/  Z Gd0 d   d e  Z d1 d d2 d  Z d3 d4   Z d5 d6   Z d d d d d d  d7 d8  Z dG d d d9 d Z dH d d d d d d d d: d  d; d< Z d d d= d>  Z  e Z! d? d@   Z" dA d
   Z# dB d	   Z$ GdC d   d  Z% dD dE   Z& e' dF k rje&   d S)I    N)*)__all__	code_infodisdisassembledistbdiscofindlinestarts
findlabels	show_codeget_instructionsInstructionBytecodec             C   sA   y t  |  | d  } Wn$ t k
 r< t  |  | d  } Yn X| S)Nevalexec)compileSyntaxError)sourcenamec r   (/opt/alt/python35/lib64/python3.5/dis.py_try_compile   s
    r   filec            C   s  |  d  k r t  d |  d  St |  d  r5 |  j }  t |  d  rM |  j }  t |  d  re |  j }  t |  d  r"t |  j j    } x| D] \ } } t | t	  r t
 d | d | y t | d | Wn8 t k
 r} z t
 d | d | WYd  d  } ~ Xn Xt
 d |  q Wn t |  d  rDt |  d | nc t |  t t f  rlt |  d | n; t |  t  rt |  d | n t d	 t |   j   d  S)
Nr   __func____code__gi_code__dict__zDisassembly of %s:zSorry:co_codez(don't know how to disassemble %s objects)r   hasattrr   r   r   sortedr   items
isinstance
_have_codeprintr   	TypeErrorr   bytes	bytearray_disassemble_bytesstr_disassemble_strtype__name__)xr   r!   r   Zx1msgr   r   r   r       s6    			&c            C   ss   |  d  k rS y t  j }  Wn t k
 r9 t d   Yn Xx |  j rR |  j }  q= Wt |  j j |  j d | d  S)Nz no last traceback to disassembler   )	syslast_tracebackAttributeErrorRuntimeErrortb_nextr   tb_framef_codetb_lasti)tbr   r   r   r   r   C   s        Z	OPTIMIZED   Z	NEWLOCALS   ZVARARGS   ZVARKEYWORDS   ZNESTED    Z	GENERATOR@   ZNOFREE   Z	COROUTINE   ZITERABLE_COROUTINEc             C   s   g  } xk t  d  D]J } d | >} |  | @r | j t j | t |    |  | N}  |  s Pq W| j t |    d j |  S)Nr=   r8   z, )rangeappendCOMPILER_FLAG_NAMESgethexjoin)flagsnamesiflagr   r   r   pretty_flags\   s    


rK   c             C   s   t  |  d  r |  j }  t  |  d  r0 |  j }  t  |  d  rH |  j }  t |  t  rf t |  d  }  t  |  d  ry |  St d t |   j	   d  S)Nr   r   r   z<disassembly>r   z(don't know how to disassemble %s objects)
r   r   r   r   r"   r)   r   r%   r+   r,   )r-   r   r   r   _get_code_objectj   s    			rL   c             C   s   t  t |    S)N)_format_code_inforL   )r-   r   r   r   r   y   s    c             C   s  g  } | j  d |  j  | j  d |  j  | j  d |  j  | j  d |  j  | j  d |  j  | j  d |  j  | j  d t |  j   |  j	 r | j  d  x( t
 |  j	  D] } | j  d	 |  q W|  j r| j  d
  x( t
 |  j  D] } | j  d |  q W|  j r[| j  d  x( t
 |  j  D] } | j  d |  q@W|  j r| j  d  x( t
 |  j  D] } | j  d |  qW|  j r| j  d  x( t
 |  j  D] } | j  d |  qWd j |  S)NzName:              %szFilename:          %szArgument count:    %szKw-only arguments: %szNumber of locals:  %szStack size:        %szFlags:             %sz
Constants:z%4d: %rzNames:z%4d: %szVariable names:zFree variables:zCell variables:
)rB   co_nameco_filenameco_argcountco_kwonlyargcount
co_nlocalsco_stacksizerK   co_flags	co_consts	enumerateco_namesco_varnamesco_freevarsco_cellvarsrF   )colinesZi_cZi_nr   r   r   rM   }   s:    					rM   c            C   s   t  t |   d | d  S)Nr   )r$   r   )r\   r   r   r   r   r      s    _InstructionzBopname opcode arg argval argrepr offset starts_line is_jump_targetc               @   s"   e  Z d  Z d d d d  Z d S)r      Fc             C   s0  g  } | rM |  j  d  k	 r< d | } | j | |  j   n | j d |  | rc | j d  n | j d  |  j r | j d  n | j d  | j t |  j  j d   | j |  j j d   |  j d  k	 r| j t |  j  j d	   |  j	 r| j d
 |  j	 d  d j
 |  j   S)Nz%%%dd z-->z   z>>z  r:         ())starts_linerB   is_jump_targetreproffsetrjustopnameljustargargreprrF   rstrip)selflineno_widthZmark_as_currentZfieldsZ
lineno_fmtr   r   r   _disassemble   s&    
		zInstruction._disassembleN)r,   
__module____qualname__rq   r   r   r   r   r      s   
first_linec            C   sx   t  |   } | j | j } t t |   } | d  k	 rJ | | j } n d } t | j | j | j	 | j
 | | |  S)Nr   )rL   r[   rZ   dictr	   co_firstlineno_get_instructions_bytesr   rY   rX   rV   )r-   rt   r\   
cell_names
linestartsline_offsetr   r   r   r      s    c             C   s,   |  } | d  k	 r | |  } | t  |  f S)N)rg   )Zconst_indexZ
const_listargvalr   r   r   _get_const_info   s    
r|   c             C   s;   |  } | d  k	 r% | |  } | } n t  |  } | | f S)N)rg   )Z
name_indexZ	name_listr{   rm   r   r   r   _get_name_info   s    
	r}   c          
   c   s  t  |   } d  } d  }	 xt |   D]\ }
 } } | d  k	 rh | j |
 d   } | d  k	 rh | | 7} |
 | k } d  } d } | d  k	 r| } | t k r t | |  \ } } n | t k r t | |  \ } } n | t k r|
 d | } d t |  } n | t	 k r+t | |  \ } } ng | t
 k rJt | } | } nH | t k rnt | |  \ } } n$ | t k rd | d | d f } t t | | | | | |
 | |  Vq% Wd  S)N r_   zto z%d positional, %d keyword pairr@   )r
   _unpack_opargsrD   Zhasconstr|   Zhasnamer}   hasjrelrg   ZhaslocalZ
hascompareZcmp_opZhasfreeZhasnargsr   rj   )codevarnamesrH   	constantscellsry   rz   labelsre   freerh   oprl   rf   r{   rm   r   r   r   rw     s@    


		rw   c         
   C   sT   |  j  |  j } t t |    } t |  j | |  j |  j |  j | | d | d  S)Nr   )	r[   rZ   ru   r	   r(   r   rY   rX   rV   )r\   lastir   rx   ry   r   r   r   r   :  s    rz   c         	   C   s   | d  k	 }	 |	 r d n d }
 x t  |  | | | | | d | D]h } |	 og | j d  k	 og | j d k } | r} t d |  | j | k } t | j |
 |  d | q@ Wd  S)Nr_   r   rz   r   )rw   re   rh   r$   rq   )r   r   r   rH   r   r   ry   r   rz   Zshow_linenorp   ZinstrZnew_source_lineZis_current_instrr   r   r   r(   A  s    r(   c            C   s   t  t |  d  d | d  S)Nz<dis>r   )r   r   )r   r   r   r   r   r*   S  s    r*   c             c   s   d } t  |   } d } x | | k  r |  | } | } | d } d  } | t k r |  | |  | d d | } d } | d } | t k r | d } | | | f Vq Wd  S)Nr   r8   r@   r9   i   )lenZHAVE_ARGUMENTZEXTENDED_ARG)r   Zextended_argnrI   r   rh   rl   r   r   r   r   Y  s    



r   c             C   s   g  } x t  |   D]u \ } } } | d  k	 r d } | t k rQ | d | } n | t k rc | } | d k r | | k r | j |  q W| S)Nr8   r_   r   )r   r   ZhasjabsrB   )r   r   rh   r   rl   Zlabelr   r   r   r
   l  s    c             c   s   t  |  j d d  d   } t  |  j d d  d   } d  } |  j } d } xT t | |  D]C \ } } | r | | k r | | f V| } | | 7} | | 7} q] W| | k r | | f Vd  S)Nr   r9   r8   )list	co_lnotabrv   zip)r   Zbyte_incrementsZline_incrementsZ
lastlinenolinenoaddrZ	byte_incrZ	line_incrr   r   r   r	     s    	
c               @   sj   e  Z d  Z d d d d d d  Z d d   Z d d	   Z e d
 d    Z d d   Z d d   Z	 d S)r   rt   Ncurrent_offsetc            C   s   t  |  |  _ } | d  k r7 | j |  _ d |  _ n | |  _ | | j |  _ | j | j |  _ t t	 |   |  _
 | |  _ | |  _ d  S)Nr   )rL   codeobjrv   rt   _line_offsetr[   rZ   _cell_namesru   r	   _linestarts_original_objectr   )ro   r-   rt   r   r\   r   r   r   __init__  s    		zBytecode.__init__c          	   C   s=   |  j  } t | j | j | j | j |  j |  j d |  j S)Nrz   )	r   rw   r   rY   rX   rV   r   r   r   )ro   r\   r   r   r   __iter__  s
    		zBytecode.__iter__c             C   s   d j  |  j j |  j  S)Nz{}({!r}))format	__class__r,   r   )ro   r   r   r   __repr__  s    zBytecode.__repr__c             C   s2   x | j  r | j  } q W|  | j j d | j S)Nr   )r3   r4   r5   r6   )clsr7   r   r   r   from_traceback  s    zBytecode.from_tracebackc             C   s   t  |  j  S)N)rM   r   )ro   r   r   r   info  s    zBytecode.infoc             C   s   |  j  } |  j d  k	 r$ |  j } n d
 } t j   ` } t | j d | j d | j d | j d |  j	 d |  j
 d |  j d | d	 | | j   SWd  QRXd  S)Nr8   r   rH   r   r   ry   rz   r   r   r   )r   r   ioStringIOr(   r   rY   rX   rV   r   r   r   getvalue)ro   r\   rh   outputr   r   r   r     s    				zBytecode.dis)
r,   rr   rs   r   r   r   classmethodr   r   r   r   r   r   r   r     s   c              C   s   d d  l  }  |  j   } | j d d |  j   d d d d | j   } | j  } | j   } Wd  QRXt | | j j d  } t	 |  d  S)	Nr   infiler+   nargs?default-r   )
argparseArgumentParseradd_argumentFileType
parse_argsr   readr   r   r   )r   parserargsr   r   r   r   r   r   _test  s    %r   __main__r   r   )(r/   typescollectionsr   Zopcoder   Z_opcodes_all
MethodTypeFunctionTypeCodeTyper   staticmethodr+   r#   r   r   r   rC   rK   rL   r   rM   r   
namedtupler^   r   r   r|   r}   rw   r   r(   r*   r   r   r
   r	   r   r   r,   r   r   r   r   <module>   sb   
	#		3	.	=