3
/*^$                 @   s   d dl Z d dlmZ d dlmZ d dlmZ erDe j d Ze jZ	ne j	 d Ze j	Z	e
d!Ze
d"Ze
d#Zd%ddZdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  ZdS )&    N)iscode)
SyntaxTree)PYTHON3   STORE_GLOBALDELETE_GLOBALLOAD_GLOBALSTORE_DEREFDELETE_DEREF"'"""'''c             C   sj   d }x |D ]}| j |dkr
|}P q
W |d kr>d}| jdd} xdD ]\}}| j||} qDW d
|| |f S )Nr   z"""z\"""	\t
\n\rz%s%s%sr   r   r   r   r   r   )r   r   r   )findreplace)squotesquoteqorigr    r    X/home/psgendb/BIRCHDEV/python/lib/python3.6/site-packages/uncompyle6/semantics/helper.pyescape_string   s    
 r"   c             C   s>   x8| D ]0}t |tr t||}q|jtkr|j|j qW |S )z?Search Syntax Tree node to find variable names that are global.)
isinstancer   find_all_globalskindread_write_global_opsaddpattr)nodeglobsnr    r    r!   r$   '   s    


r$   c             C   sb   xHt | t| d D ]0}| |  jdkr| |  }t|jsBt|S qW ds^td|| f d S )Nr   Z	LOAD_CODEFz+did not find code node starting at %d in %s)rangelenr%   r   attrAssertionError)r)   startiZ	code_noder    r    r!   find_code_node>   s    
r2   c             C   s   x| D ]|}t |tr*t|||||\}}q|jtkrB|j|j q|dkr|jtkr|j|jkr|j|j	kr|j	dkr|j|j qW ||fS )zrsearch a node of parse tree to find variable names that need a
    either 'global' or 'nonlocal' statements added.g      @z<lambda>)
r#   r   find_globals_and_nonlocalsr%   read_global_opsr'   r(   nonglobal_opsco_freevarsco_name)r)   r*   	nonlocalscodeversionr+   r    r    r!   r3   H   s    




r3   c             C   sJ   xD| D ]<}t |tr*|dkrBt|rBdS q|jdkr|jd krdS qW dS )Nreturn_stmtreturn_if_stmtT
LOAD_CONSTF)r;   r<   )r#   r   	find_noner%   r(   )r)   r+   r    r    r!   r>   Y   s    

r>   c             C   s   g }x| D ]x}|dkrJxj|D ](}|dks,t x|D ]}|j| q2W qW q
|dkrxx.|D ]}|dksht |j| qXW q
|j| q
W |S )zt
    List of expressions may be nested in groups of 32 and 1024
    items. flatten that out and return the list
    Zexpr1024Zexpr32expr)r/   append)r)   Z
flat_elemselemZsubelemZ
subsubelemr    r    r!   flatten_listc   s    




rB   c             C   sL   | j dkrdS |d	 }|dkrH|d dks.t|d d }|dkrHd|_ dS )
zIf we can avoid the outer parenthesis
    of a generator function, set the node key to
    'call_generator' and the caller will do the default
    action on that. Otherwise we do nothing.
    ZCALL_FUNCTION_1N   Zpos_argr   r?   Zgenerator_expZcall_generator)r%   r/   )Zmapping_keyr)   Z	args_noder+   r    r    r!   gen_function_parens_adjust{   s    
rE   c       
      C   s|  d}|j |dkr$|j ddkr$d}| j| t r`t|t r`| jd t|j dd }ntrd| j  koxdkn  ryt|j dd jd	 W n t	k
r   | jd Y nX t|j dd }nt|j dd }xd%D ]\}}|j
||} qW d|krjd|krjt|dkrj|d& dkrj|d' dksR|d( dkrj| jd |j
dd}nn|d) }t|r|d* |kr|d d+ d | }|dkrd}n|dkstd}|j
||}|j
dd
}|jd}| j| t|dkr| j| nrt|dkr&| j|d | nR| j|d  x2|dd, D ]"}	|	rX| j|	 n
| jd qBW | j|d- | dS ).Nz"""r   z'''r   urC   g333333@g@ascii\\r   \r\nr   \n\r\"r   \'r   \rz\"""z\'''z

Tr   r   r   r   r   rH   r   rI   r   rJ   r   rK   r   rL   r   rM   r   )rP   rQ   rR   rS   rT   rU   r   r   rD   r   r   r   r   r   )r   writer   r#   strrepr
expandtabsr:   encodeUnicodeEncodeErrorr   r-   r/   splitZprintln)
selfindentZ	docstringr   r   r   Zquote1Zreplace_strlinesliner    r    r!   print_docstring   sj    

    






ra   c             C   s   | j dr"| jdr"| dd } nd| j drD| jdrD| dd } nB| j drf| jdrf| dd	 } n | j dr| jdr| dd
 } | S )Nz'''   z"""r   r   r   rc   r   r   )
startswithendswith)r   r    r    r!   strip_quotes   s    rf   )r   r   r   )r   r   )r	   r
   r   r   r   r   )rg   )sysZxdisr   Zuncompyle6.parsers.treenoder   
uncompyle6r   maxsizeZminintZmaxint	frozensetr&   r4   r5   r"   r$   r2   r3   r>   rB   rE   ra   rf   r    r    r    r!   <module>   s(   


K