3
^E                 @   s  d Z ddlZddlmZ ddlmZ ddlmZ ddlm	Z	m
Z
mZ g ag ae	rZdd ZnddlZd	d
 Zdd Zi fddZdi fddZdd Zdd Zdd ZdZi ZdwddZeed< dxddZeed< dydd Zeed!< dzd"d#Zeed$< d{d%d&Zeed'< d|d(d)Zeed*< d}d+d,Zeed-< d~d.d/Z e ed0< dd1d2Z!e!ed3< dd4d5Z"e"ed6< dd7d8Z#e#ed9< dd:d;Z$e$ed<< dd=d>Z%e%ed?< dd@dAZ&e&edB< ddCdDZ'e'edE< ddFdGZ(e(edH< ddIdJZ)e)edK< ddLdMZ*e*edN< ddOdPZ+e+edQ< ddRdSZ,e,edT< ddUdVZ-e-edW< ddXdYZ.e.edZ< dd[d\Z/e/ed]< dd^d_Z0e0ed`< ddadbZ1e1edc< dddd,Zeed-< ddedfZ2e2edg< ddhdiZ3e3edj< ddkdlZ4e4edm< e4edn< ddodpZ5e5edq< ddrdsZ6e6edt< di fdudvZ7dS )aP  CPython magic- and version-independent Python object
deserialization (unmarshal).

This is needed when the bytecode extracted is from
a different version than the currently-running Python.

When the running interpreter and the read-in bytecode are the same,
you can simply use Python's built-in marshal.loads() to produce a code
object
    N)unpack)magic_int2float)to_portable)PYTHON3PYTHON_VERSIONIS_PYPYc             C   s   | S )N )nr   r   K/home/psgendb/BIRCHDEV/python/lib/python3.6/site-packages/xdis/unmarshal.pylong+   s    r   c             C   s8   t r,y
| jdS  tk
r"   | S X | j S t| S d S )Nzutf-8)r   decodeUnicodeDecodeErrorstr)sr   r   r
   
compat_str3   s    
r   c             C   sB   t dk r6tjd| }y
|jdS  tk
r2   |S X nt| S d S )Ng      @ZNFKDascii)r   unicodedata	normalizeencodeUnicodeEncodeErrorr   )ur   r   r   r
   
compat_u2sA   s    
r   c             C   s   g a g a| j }t| jd}d}|d@ r@d}tjd |d@ }t|}|dks`|dkrl|d
krl| j| ntd| j	|f t
| ||d}|r|td< |S )a>  
    marshal.load() written in Python. When the Python bytecode magic loaded is the
    same magic for the running Python interpreter, we can simply use the
    Python-supplied marshal.load().

    However we need to use this when versions are different since the internal
    code structures are different. Sigh.
       F   TN   c    CzRFile %s doesn't smell like Python bytecode:
expecting code indicator 'c'; got '%s')code_objectsr   )r   r   )internStringsinternObjectstellordreadappendchrseek	TypeErrornameload_code_internal)fp	magic_intr   Zseek_posbsave_refr   coder   r   r
   	load_codeP   s&    

r0   Fc             C   s  t |}|dkr&td| jdd }n"|dkrDtd| jdd }nd}|dkrdtd| jdd }|dkrrd}nd }|dkrtd| jdd }nd}|dkrtd| jdd }n"|dkrtd| jdd }nd}|dkrtd| jdd }	n$|dkrtd| jdd }	nd}	|dkr:td| jdd }
n$|dkrZtd| jdd }
nd}
t| |d|d}tdko~|dk}t| |||d}t| ||d}|dkrt| ||d}ng }|dkrt| ||d}t| ||d}nt }t }t| ||d}t| |}|dkrV|dkr2td| jdd }ntd| jdd }t| ||d}nd}d}t|||||	|
|||||||||||}||t|< |S )Ngffffff@z<i   r   g?z<h   T  U  ^  gffffff@g      @g      ?T)bytes_for_sr   )r   g       @r    )r3   r4   r5   )r   r   r$   r*   r   tupler   r   )r+   r,   r6   r   versionco_argcountZco_posonlyargcountZkwonlyargcount
co_nlocalsco_stacksizeco_flagsco_code	co_constsco_namesco_varnamesco_freevarsco_cellvarsco_filenameco_nameco_firstlineno	co_lnotabr/   r   r   r
   load_code_typet   s    







rI   c             C   s"   d }|rt t}tj|  | |fS )N)lenr!   r%   )objflagir   r   r
   r_ref_reserve   s
    
rN   c             C   s   |d k	r| t |< | S )N)r!   )rK   rM   r   r   r
   r_ref_insert   s    rO   c             C   s   |rt j|  | S )N)r!   r%   )rK   rL   r   r   r
   r_ref   s    
rP   r   c             C   s   d S )Nr   )r+   rL   r6   r,   r   r   r   r
   t_C_NULL  s    rQ   0c             C   s   d S )Nr   )r+   rL   r6   r,   r   r   r   r
   t_None  s    rS   Nc             C   s   t S )N)StopIteration)r+   rL   r6   r,   r   r   r   r
   t_stopIteration  s    rV   Sc             C   s   t S )N)Ellipsis)r+   rL   r6   r,   r   r   r   r
   	t_Elipsis  s    rY   .c             C   s   dS )NFr   )r+   rL   r6   r,   r   r   r   r
   t_False&  s    r[   Fc             C   s   dS )NTr   )r+   rL   r6   r,   r   r   r   r
   t_True-  s    r]   Tc             C   s   t ttd| jdd |S )Nz<ir1   r   )rP   intr   r$   )r+   rL   r6   r,   r   r   r   r
   t_int324  s    r`   rM   c       
      C   s   t d| jdd }|dkr$tdS t|}td}x:td|D ],}tt d| jdd }	||	|d > 7 }q@W |dk rt|d }t||S )	Nz<ir1   r   z<hr2      r   r8   )r   r$   r   absranger_   rP   )
r+   rL   r6   r,   r   r	   sizedjZmdr   r   r
   t_long;  s    rg   lc             C   s&   t d| jdd }|r"tj| |S )Nz<q   r   )r   r$   r!   r%   )r+   r.   r6   r,   r   rK   r   r   r
   t_int64L  s    
rj   Ic             C   s,   t d| jdd }| j|}tt||S )NBr   r   )r   r$   rP   float)r+   r.   r6   r,   r   strsizer   r   r   r
   t_floatV  s    
ro   fc             C   s   t ttd| jdd |S )Nz<dri   r   )rP   rm   r   r$   )r+   r.   r6   r,   r   r   r   r
   t_binary_float_  s    rq   gc                s>   |dkr fdd}n fdd}| }| }t t|||S )Nim  c                  s   t  jtd jdd S )Nrl   r   r   )rm   r$   r   r   )r+   r   r
   <lambda>h  s    zt_complex.<locals>.<lambda>c                  s   t  jtd jdd S )Nz<ir1   r   )rm   r$   r   r   )r+   r   r
   rs   j  s    )rP   complex)r+   r.   r6   r,   r   Z	get_floatrealimagr   )r+   r
   	t_complexf  s    rw   xc             C   s8   t d| jdd }t d| jdd }tt|||S )Nz<dri   r   )r   r$   rP   rt   )r+   r.   r6   r,   r   ru   rv   r   r   r
   t_binary_complexs  s    ry   yc             C   s4   t d| jdd }| j|}|s*t|}t||S )Nz<ir1   r   )r   r$   r   rP   )r+   r.   r6   r,   r   rn   r   r   r   r
   t_string}  s
    
r{   r   c             C   s6   t d| jdd }t| j|}tj| t||S )Nz<ir1   r   )r   r$   r   r    r%   rP   )r+   r.   r6   r,   r   rn   internedr   r   r
   t_ASCII_interned  s    
r}   Ac             C   s0   t d| jdd }| j|}t|}t||S )Nz<ir1   r   )r   r$   r   rP   )r+   r.   r6   r,   r   rn   r   r   r   r
   t_ASCII  s    
r   ac             C   s(   t d| jdd }tt| j||S )Nrl   r   r   )r   r$   rP   r   )r+   r.   r6   r,   r   rn   r   r   r
   t_short_ASCII  s    r   zc             C   s6   t d| jdd }t| j|}tj| t||S )Nrl   r   r   )r   r$   r   r    r%   rP   )r+   r.   r6   r,   r   rn   r|   r   r   r
   t_short_ASCII_interned  s    
r   Zc             C   s6   t d| jdd }t| j|}tj| t||S )Nz<ir1   r   )r   r$   r   r    r%   rP   )r+   r.   r6   r,   r   rn   r|   r   r   r
   
t_interned  s    
r   tc             C   sR   t d| jdd }| j|}tdkr>tr>t|jddd|S t|jd|S d S )Nz<ir1   r   g	@zutf-8ignore)errors)r   r$   r   r   rP   r   )r+   r.   r6   r,   r   rn   Zunicodestringr   r   r
   	t_unicode  s
    
r   r   c             C   sZ   t d| jdd }tt |\}}x*|dkrN|t| |||df7 }|d8 }q&W t||S )Nrl   r   r   )r6   r   )r   r$   rN   r9   r*   rO   )r+   r.   r6   r,   r   	tuplesizeretrM   r   r   r
   t_small_tuple  s    
r   )c             C   sP   t d| jdd }tt |}x*|dkrJ|t| |||df7 }|d8 }q"W |S )Nz<ir1   r   )r6   r   r   )r   r$   rP   r9   r*   )r+   r.   r6   r,   r   r   r   r   r   r
   t_tuple  s    
r   (c             C   sP   t d| jdd }tt |}x*|dkrJ|t| |||df7 }|d8 }q"W |S )Nz<ir1   r   )r6   r   r   )r   r$   rP   listr*   )r+   r.   r6   r,   r   r	   r   r   r   r
   t_list  s    
r   [c             C   s^   t d| jdd }tt |\}}x*|dkrN|t| |||df7 }|d8 }q&W tt||S )Nz<ir1   r   )r6   r   r   )r   r$   rN   r9   r*   rO   	frozenset)r+   r.   r6   r,   r   setsizer   rM   r   r   r
   t_frozenset  s    
r   <c             C   s^   t d| jdd }tt |\}}x*|dkrN|t| |||df7 }|d8 }q&W tt||S )Nz<ir1   r   )r6   r   r   )r   r$   rN   r9   r*   rO   set)r+   r.   r6   r,   r   r   r   rM   r   r   r
   t_set   s    
r   >c             C   s   t ttd| jdd |S )Nz<ir1   r   )rP   r_   r   r$   )r+   r.   r6   r,   r   r   r   r
   r`     s    c             C   s   t dd S )Nz*marshaltype key '{' (dict) not implemented)KeyError)r+   r.   r6   r,   r   r   r   r
   t_dict  s    r   {c             C   s   t d| jdd }t| S )Nz<ir1   r   )r   r$   r    )r+   r.   r6   r,   r   refnumr   r   r
   t_python2_string_reference&  s    r   Rc             C   s"   t | |d|d}|rtj| |S )NF)r6   r   )rI   r!   r%   )r+   r.   r6   r,   r   r/   r   r   r
   t_code0  s    
r   r   r   c             C   s    t d| jdd }t| }|S )Nz<ir1   r   )r   r$   r!   )r+   r.   r6   r,   r   r   or   r   r
   t_object_reference<  s    r   rc             C   s   t dd S )Nzunknown marshal type '?')r   )r+   r.   r6   r,   r   r   r   r
   	t_unknownG  s    r   ?c             C   s   t | jd}d}|t@ r*d}|td @ }t|}|tkrNt| | ||||S y&tjjdt |tt ||f  W n, t	k
r   tjjdt ||f  Y nX d S )Nr   FTzUnknown type %i (hex %x) %c
zUnknown type %i %c
)
r#   r$   FLAG_REFr&   UNMARSHAL_DISPATCH_TABLEsysstderrwritehexr(   )r+   r,   r6   r   Zb1r.   ZmarshalTyper   r   r
   r*   P  s     r*   )NNNN)NNNNN)NNNNN)NNNNN)NNNNN)NNNNN)NNN)NNN)NNN)NNN)NNN)NNN)NNN)NN)NNN)NNN)NNN)NNN)NNN)NNN)NNN)NNN)NNN)NNN)NNN)NNN)NNN)NNNN)NNN)NNNN)NNNN)8__doc__r   structr   Zxdis.magicsr   Zxdis.codetyper   Zxdis.version_infor   r   r   r    r!   r   r   r   r   r0   rI   rN   rO   rP   r   r   rQ   rS   rV   rY   r[   r]   r`   rg   rj   ro   rq   rw   ry   r{   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r*   r   r   r   r
   <module>   s   
$p	


















	



	


	
	





