3
¾‘(^  ã               @   sœ   d 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ƒ ƒ qvW ned
e ƒ d	S )zì
Python 3.7 bytecode decompiler scanner

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

This sets up opcodes Python's 3.7 and calls a generalized
scanner routine for Python 3.
é    )ÚScanner37Base)Ú	opcode_37c               @   s&   e Zd Zddd„Zdi dfdd„ZdS )Ú	Scanner37Nc             C   s   t j| d|ƒ d S )Ngš™™™™™@)r   Ú__init__)ÚselfÚshow_asm© r   úZ/home/psgendb/BIRCHDEV/python/lib/python3.6/site-packages/uncompyle6/scanners/scanner37.pyr   #   s    zScanner37.__init__c             C   sÚ   t j| ||||ƒ\}}xº|D ]²}|j| jjkr@|jd@ r@d|_q|j| jjkr\d|j |_q|j| jjkrxd|j |_q|j| jj	kr˜|jd@ rÎd|_q|j| jj
kr´d|j |_q|j| jjkrd|j |_qW ||fS )	Né   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Ú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Ú	customizeÚtr   r   r	   r   )   s&    

zScanner37.ingest)N)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r	   r   "   s   
r   Ú__main__)ÚPYTHON_VERSIONgš™™™™™@Nz'Need to be Python 3.7 to demo; I am %s.)Ú__doc__Z!uncompyle6.scanners.scanner37baser   Zxdis.opcodesr   r   ZJUMP_OPSZJUMP_OPsr   r   Ú
uncompyle6r    ÚinspectÚcurrentframeÚf_coder   r   r   r   r   ÚprintÚformatr   r   r   r	   Ú<module>   s   

