3
/*ä^	  ã               @   s¨   d Z ddlmZ ddlmZ ddlmZ ejZG dd„ deƒZ	e
dkr¤ddlmZ ed	kr˜dd
lZejƒ jZe	ƒ jeƒ\ZZx&eD ]Zeejƒ ƒ q‚W nede ƒ d
S )zì
Python 3.6 bytecode decompiler scanner

Does some additional massaging of xdis-disassembled instructions to
make things easier for decompilation.

This sets up opcodes Python's 3.6 and calls a generalized
scanner routine for Python 3.
é    )Úprint_function)ÚScanner3)Ú	opcode_36c               @   s&   e Zd Zddd„Zdi dfdd„ZdS )Ú	Scanner36NFc             C   s   t j| d||ƒ d S )NgÍÌÌÌÌÌ@)r   Ú__init__)ÚselfÚshow_asmÚis_pypy© r
   úZ/home/psgendb/BIRCHDEV/python/lib/python3.6/site-packages/uncompyle6/scanners/scanner36.pyr      s    zScanner36.__init__c       	      C   sø   t j| ||||ƒ\}}| jdko$| j }xÆ|D ]¾}|rV|j| jjkrV|jd@ rVd|_q.|j| jj	krrd|j |_q.|j| jj
krŽd|j |_q.|j| jjkr®|jd@ rìd|_q.|rÎ|j| jjkrÎd|j |_q.|r.|j| jjkr.d	|j |_q.W ||fS )
NgÍÌÌÌÌÌ@é   ZCALL_FUNCTION_EX_KWzBUILD_STRING_%szCALL_FUNCTION_KW_%sé   ZFORMAT_VALUE_ATTRzBUILD_MAP_UNPACK_WITH_CALL_%dzBUILD_TUPLE_UNPACK_WITH_CALL_%d)r   ÚingestÚversionr	   ÚopÚopcÚCALL_FUNCTION_EXÚattrÚkindÚBUILD_STRINGÚCALL_FUNCTION_KWÚFORMAT_VALUEÚBUILD_MAP_UNPACK_WITH_CALLÚBUILD_TUPLE_UNPACK_WITH_CALL)	r   ÚcoÚ	classnameZcode_objectsr   ÚtokensÚ	customizeZ
not_pypy36Útr
   r
   r   r      s,    

zScanner36.ingest)NF)Ú__name__Ú
__module__Ú__qualname__r   r   r
   r
   r
   r   r      s   
r   Ú__main__)ÚPYTHON_VERSIONgÍÌÌÌÌÌ@Nz'Need to be Python 3.6 to demo; I am %s.)Ú__doc__Ú
__future__r   Zuncompyle6.scanners.scanner3r   Zxdis.opcodesr   r   ZJUMP_OPSr   r   Ú
uncompyle6r#   ÚinspectÚcurrentframeÚf_coder   r   r   r   r   ÚprintÚformatr
   r
   r
   r   Ú<module>
   s     

