3
/*^0                 @   s   d Z ddlmZmZmZ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lmZmZmZmZ erddlmZ ndd	lmZ dd
lmZ dddZdS )z
All the crazy things we have to do to handle Python functions in 3.6 and above.
The saga of changes before 3.6 is in other files.
    )iscodecode_has_star_argcode_has_star_star_argCO_GENERATORCO_ASYNC_GENERATOR)Code)
SyntaxTree)ParserError)PYTHON3)print_docstringfind_all_globalsfind_globals_and_nonlocals	find_none)zip_longest)izip_longest)maybe_show_tree_param_default   Nc       =         s	  d: fdd	}|d; j jds"td<}|d= }i }|j}	t|	dkrP|	\}
}}n|	\}
}}}|d> dkrnd?}nd@}d}|r|| }|dkr|d }|dA }|dko|j jdr fdd|ddB D }|dC j}t|}|t|k stx"t|D ]}|| ||| <  qW |d8 }|r,|d8 }|r`||
 }|dkrL|d }|dkr`|dD j}g }|jdd \}}}|r|d }|d dkr|d }|dkstd|d dkrt|d jtrdd |d jD }n0|d tdEkr fdd|d ddF D }ng }|rV|rVt	|| jrV|| j dksJt|| j}n|j}t	|sjtt
| j j}|j}|j}t|jd| }t|j|||  }|j  |j  y  j|j|j|d|jkd}W nB ttfk
r  }  z  jt|   js|  _dS d} ~ X nX t|t| }g }!|rx8t|D ],\}}"|!j|||| |"|j||  qFW x||d d D ]2}#|#|kr|!jd|#||# f  n
|!j|# qW n<x:|D ]2}#|#|kr|!jd|#||# f  n
|!j|# qW |!j  t|rT|j||  }$|$|kr>|!jd|$||$ f  n|!jd|$  |d7 }|r܈ jdd j |! t|dkr j!|dG dkr j!|dH j" jd!r|dI= |dJ }%x|%j dkr|%d }%qW |%|dK< n jd"d j |! d#}&|dkrd	|j#@ s.|dkr jd$ n
 jd% d&}&n|dkrF jd  d&}&d }' }(})|dL j}*|dM dkrndNndO}+|*dP r|+d8 }+|*dQ r||+ }'|+d8 }+|*dR r||+ }(|+d8 }+|*dS r||+ })|(dkr|(d }(dg| }|(r|(dkst fd'd|(ddT D },t$ j!|(dU }t|,t|ks<td(}-x`t|D ]T\}}.|j%|.}/|r|.|krd)|.||. |,| f }0nd*|.|,| f }0|0||/< qJW d+d |D }1xPt|1D ]D\}}2|2r|| }.|.|krd|.||. f ||< nd,|. ||< qW  jd j | d#}&n|dkr&d&}&t&|r|&s@ jd  |j||  }3|rv|3|krv jd-|3||3 f  n jd.|3  |r jd/ n6 jd0 |rd1|kr jd2|d1    j'd3 |dV dkr| r j' j!|dW  |d4kstt(|t) }4t*|t) t) | j+\}5}6x,t,|4 j-@ |5B D ]}7 j' j.d5|7 q>W x"t,|6D ]}8 j' j.d6|8 qbW   j-|48  _-d|jk}9|9ot/| }: j0||j1|j||:d7 | 	r|j#t2t3B @ 	rd&};x |jD ]}<|<d8krd#};P qW |;	r j4dX| d|_d|_dS )YzcDump function definition, doc string, and function body in
      Python version 3.6 and above.
    Nc                sN   |}t  j|| |r&d|||f }nd||f }|dd dkrJ|d7 }|S )zebuild parameters:
            - handle defaults
            - handle format tuple parameters
        z	%s: %s=%sz%s=%s   Nz= None)r   Zshowast)astnamedefault
annotationvalueresult)self a/home/psgendb/BIRCHDEV/python/lib/python3.6/site-packages/uncompyle6/semantics/make_function36.pybuild_param;   s    z$make_function36.<locals>.build_paramr   ZMAKE_   r   Z	docstring      r   exprdictBUILD_CONST_KEY_MAPc                s   g | ]} j |d dqS ) )indent)traverse).0n)r   r   r   
<listcomp>s   s    z#make_function36.<locals>.<listcomp>Zpos_argz+expecting mkfunc default node to be an expr
LOAD_CONSTc             S   s   g | ]}t |qS r   )repr)r)   ar   r   r   r+      s    listtuplesetc                s   g | ]} j |d dqS )r&   )r'   )r(   )r)   r*   )r   r   r   r+      s    ZLOAD_LAMBDAr   )	is_lambdaZnoneInNamesz%s: %sz*%s: %sz*%szlambda z, yield(Fz, *, z*, Tc                s   g | ]} j |d dqS )r&   )r'   )r(   )r)   r*   )r   r   r   r+     s    r&   z	%s: %s=%sz%s=%sc             S   s   g | ]}|d kqS )Nr   )r)   cr   r   r   r+   -  s    z%sz**%s: %sz**%sz: )returnz -> %s:Zstmtszglobal z	nonlocal )r2   Z
returnNoneYIELD_VALUE%|if False:
%+%|yield None%-)Nr;   r   r;   r   r   r;   )r/   r0   r$   r1   r;   r;   r   r;   r;   r;   r;   r   r>   r=   r;   r   r<   r=   r   r   r   r   )r:   )5kind
startswithAssertionErrorattrlenrange
isinstancer0   	frozensetr   r   scannerZcurrentclassco_argcountco_kwonlyargcountr/   co_varnamesreverseZ	build_astZ_tokensZ
_customizeco_namesr	   ParserError2writestrZtolerate_errorsERROR	enumerateappendgetr   joinr(   stripco_flagsevalindexr   Zprintlnr   r1   r   versionsortedZ	mod_globsr'   r   Z
gen_sourceco_namer   r   Ztemplate_engine)=r   noder2   nestedZ	code_noder   Zlambda_indexZ	args_nodeZannotate_dictZ	args_attrZpos_argsZkw_argsZannotate_argcclosureiZkw_pairsZannotate_nodeZannotate_name_nodetypesnameslZkw_nodeZ	defparamsr   Z	expr_nodecodeZscanner_codeZargcZkwonlyargcountZ
paramnameskwargsr   pparamsZdefparamparamZstar_argZast_exprZends_in_commaZann_dictZkw_dictZdefault_tupZfn_bitsrX   defaultssepr*   idxtZother_kwflagZstar_star_argZall_globalsglobals	nonlocalsgnlZhas_noneZrnZneed_bogus_yieldtokenr   )r   r   make_function36.   s   




  "

























rr   )r   N)__doc__Zxdisr   r   r   r   r   Zuncompyle6.scannerr   Zuncompyle6.parsers.treenoder   Z!uncompyle6.semantics.parser_errorr	   Zuncompyle6.parserrM   
uncompyle6r
   Zuncompyle6.semantics.helperr   r   r   r   	itertoolsr   r   Zuncompyle6.showr   rr   r   r   r   r   <module>   s   