3
/*^/F                 @   s   d Z ddlmZ ddlmZmZ ddlmZ ddlm	Z	m
Z
 ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ dd ZdS )z9Isolate Python 3 version-specific semantic actions here.
    )TABLE_DIRECT)co_flags_is_asynciscode)Code)find_code_nodegen_function_parens_adjust)make_function3_annotate)customize_for_version35)customize_for_version36)customize_for_version37)customize_for_version38c       	         s  t jdAdEdHdJdMdNdOdPdQdRdSdTdUd |dks2t fdd}| _ fdd}| _ fdd}| _|dk rt jdXd[d^d(  fd)d*}| _n|d+k r fd,d-}| _d.|  k od/kn   r fd0d1}| _n|d.k r  fd2d1}| _ fd3d4}| _	t jdadbd8 |d/krt jdcded: |d;krt
 | |d<krt | |d=krt | |d>krt | d S )fN for %c in %c   storer   expr%c if not %c else %c   %|except %c as %c:
      

%|def %c%c
%c%P, d   %|import %c%c
   , %c%[0]{attr}=%c%|raise %c from %c
%c%-%c%|else:
%+%c1%|# inspect.currentframe().f_locals = __locals__
%|with %c:
%+%c%-%|with %c as (%c):
%+%c%-)comp_forZ
if_exp_notZexcept_cond2Zfunction_def_annotateZcall_generatorZimportmultipleZimport_contkwargZraise_stmt2tf_tryelsestmtl3Zstore_localswithZ
withasstmtg      @c                sr   | d d }t |dkrd|d dkrd|d }|d }|dkrBd|_|jjdrd|dkr^d|_nd	|_ j|  d S )
Nr   r   stmtZ
try_exceptZtf_try_exceptZtryelsestmttryelsestmtl3r%   Ztf_tryelsestmt)lenkind
startswithdefault)nodeZsuite_stmtsr'   Ztry_something)self \/home/psgendb/BIRCHDEV/python/lib/python3.6/site-packages/uncompyle6/semantics/customize3.pytryfinallystmtD   s    z.customize_for_version3.<locals>.tryfinallystmtc                sZ   j }d _ | d j}t|s"tt| j j} j|j|j	} j
|j	 x2t|dksp|dkr|d  d!krd _ |d }qPW |d }| d" g}g } jd
ko|dkrh|d	 g}|d dkst|d }x|dkrT|d dkr|d }|j|d  |d	 }q|d d#krP|d }|d jdkr:|j| n|jdg |d }qP qW  j|d  nP|dksvtg }x|dkr|d }|dkr|j|d  |d	 }|d dkr|d d }	|	dkr|	d }	|	dkr|	d }	|j|	 n|d$kr6|d jdkr |j| n|jdg |d }n\|dkrT|j| |d% }n>|dkr~|j|d d  |d }|j|d d  |d	 }q~W |dkst| j|d  t|}
xt|D ]\}}||
krP || dkrt|jr jd  jd  j|  jd  j||  |t|k rʈ j||  qW | _ dS )&zgList comprehensions in Python 3 when handled as a closure.
        See if we can combine code.
           r   sstmtreturnRETURN_LASTRETURN_VALUEr   r   r   g      @Z	list_iterr   	comp_iterr#   r   comp_ifcomp_if_notr   Zlist_for	attributelist_iflist_if_notZ	list_if37Z	list_aforZlc_body
LOAD_DEREFz asyncz for z in N)r3   r4   )r5   r6   )r8   r9   )r;   r<   r>   )Zprecattrr   AssertionErrorr   scannercurrentclassZ	build_astZ_tokensZ
_customizeZ	customizer)   versionappendr*   Zpreorder	enumerater   co_flagswrite)r-   pZcode_objcodeastncollectionsZlist_ifsZstorescZn_collsir   )r.   r/   r0   listcomp_closure3S   s    
















z1customize_for_version3.<locals>.listcomp_closure3c       	         s  d j   kodkn  st j}d}| dkr^ j dkrJ| d d j}n| d d j}| }n| d }| d d j}| d }d	|d kst|d }|d dkrHd j   kodkn   rxn|D ]4}t|drt|jr|j}P q|dkr|d j}qW n0x.|D ]&}t|drt|jr|j}P qW | dkr>| }n| d }n|d d dkr|d }t|d drt|dj}n"t|d drt|dj}ndt|d dr|s|d }nt|d dr|d }ndnB|s$|d dkr|d j}n
|d j}| dkr| }n| d }| dkr: jd n
 jd t| _ j j	d j  j
|  jd  j   j|  j  | _t jdkr jd n
 jd  j  dS )zDHandle "classdef" nonterminal for 3.0 >= version 3.0 <= 3.5
        g      @g      @NZclassdefdeco2gffffff
@r   r   r   mkfunckwargs	no_kwargsg	@r@   r   load_closurer   z1Internal Error n_classdef: cannot find class body__len__z1Internal Error n_classdef: cannot superclass name
z

zclass :z


)rR   rS   r?   r?   rX   )rS   rR   )rD   rA   rC   r@   hasattrr   r   rH   strindentZprint_super_classes3Zprintlnindent_morebuild_classindent_lessr)   param_stackprune)	r-   ZcclassZsubclass_info
class_namer]   rQ   rL   Zsubclass_coderT   )r.   r/   r0   n_classdef3   s    
















z+customize_for_version3.<locals>.n_classdef3%|if %c:
%+%c%-testfalse_then_ifstmts_jump30%|if not %c:
%+%c%-testtrue_then%|try:
%+%c%-%c

suite_stmts_optexcept_handler)Zifstmt30Zifnotstmt30Ztry_except30c                sH   | d dkr:| d d }|dkr:|j dd dkr: j   j|  d S )Nr   r   	LOAD_FASTr   z_[)Zpattrr`   r,   )r-   rL   )r.   r/   r0   n_comp_iterJ  s
    z+customize_for_version3.<locals>.n_comp_itergffffff
@c                sb   | d dkst | d d dkr:d} j|| d d  nd	} j|| d d d   j  d S )
Nr   r   Zget_iteryield from %cr:   r   r   )rm   rn   r   r:   )rm   ro   )rA   template_enginer`   )r-   template)r.   r/   r0   n_yield_fromX  s    z,customize_for_version3.<locals>.n_yield_fromg	@g333333@c                s    j | }| }x|dd  D ]}|| }qW |jjdr:n|jjdr| d j}|d@ }|d? d@ }|dkr|dkrdddd|d d	ff}n"d
dd|d d	fdd| dd	ff} j||   j  n
t||   j|  d S )Nr   ZCALL_FUNCTION_VAR_KWZCALL_FUNCTION_VAR      r   z%c(*%c, %C)r   z, z%c(%C, *%c, %C)r>   rX   rX   rX   rX   )_get_mappingr*   r+   r@   rp   r`   r   r,   )r-   mappingkeyrO   ZargcnargsrR   rq   )r.   r/   r0   n_callh  s.    



z&customize_for_version3.<locals>.n_callc                sD    j | }| }x|dd  D ]}|| }qW t||   j|  d S )Nr   )ru   r   r,   )r-   rv   rw   rO   )r.   r/   r0   ry     s    

c                s  | d dkrdnd} j dkr,| d|  }nF j dksB| d dkrP| d|  }n"| d d	krj| d d }n| d } j  x*tt| d ddD ]}| | d
krP qW  jj dd  dkrʈ j|jj t	 | d||d t j
dk r jd n
 jd  j   j  d S )Nr   EXTENDED_ARGr   r   g	@gffffff
@rR   r   r   Zannotate_tupler   zdef F)Z	is_lambdaZ	code_nodeannotate_lastz

z


rX   r>   rX   rX   r?   r?   r?   r?   r>   r>   )rD   r\   ranger)   fgetvaluerH   r@   co_namer   r_   r^   r`   )r-   rO   rJ   r{   )r.   r/   r0   n_mkfunc_annotate  s*    

z1customize_for_version3.<locals>.n_mkfunc_annotate%|try:
%+%c%-%c%|else:
%+%c%-else_suitel%{pattr})r(   LOAD_CLASSDEREFyield from %c)r   Z
yield_fromg      @g@g@gffffff@r   r   r   r   )r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   )r   r   r   r>   )r   r>   r   r>   r   r>   r   r   )r   r   r   )r   r   r   )r   r   )r   r   )r   r   r   )r   r   r   r   )r    )r!   r   r   )r"   r   r   r   r   rd   r   re   )rc   r   r   r   rg   r   re   )rf   r   r   r   ri   r   rj   )rh   r   r   r   ri   r   r   )r   r   r   r   )r   )r   r   r   )r   r   )r   updaterA   Zn_tryfinallystmtrP   rb   rl   rr   ry   r   r	   r
   r   r   )	r.   rD   r1   rP   rb   rl   rr   ry   r   r/   )r.   r0   customize_for_version3#   s       
yh
      


(
	,   










r   N)__doc__Zuncompyle6.semantics.constsr   Zxdisr   r   Zuncompyle6.scannerr   Zuncompyle6.semantics.helperr   r   Z#uncompyle6.semantics.make_function3r   Z uncompyle6.semantics.customize35r	   Z uncompyle6.semantics.customize36r
   Z uncompyle6.semantics.customize37r   Z uncompyle6.semantics.customize38r   r   r/   r/   r/   r0   <module>   s   