3
/*^                 @   s   d Z ddl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mZmZmZ errd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 Python before 3.0.
The saga of changes continues in 3.0 and above and in other files.
    )iscodecode_has_star_argcode_has_star_star_arg)Code)PYTHON3)ParserError)print_docstringfind_all_globalsfind_globals_and_nonlocals	find_none)zip_longest)izip_longest)maybe_show_tree_param_default   Nc                s
  fdd|d j jds t|d  }t|jtrX|d|jd d  }|j\}}}	n|d|j }d}d}
|
r|rt||
 jr||
 j dkst||
 j}n|j}t|stt|jj	}|j
}t|jd| }|j  |j  y j|j|j|d|jkd	 W nB ttfk
rN } z jt| js@|_dS d}~X nX d}j} fd
dt||ddD }|j  t|r|jd|j|   |d7 }|r.jddj| t dkr@j d! dkr@j d" j jdr@ d#=  d$ }x|j dkr"|d }q
W | d%< njddj| |dkrd|j @ sx|dkrljd n
jd n
jd x*|D ]"}|dkrqn
j!| P qW t"|r|dkr̈jd jd|j||    |rjd n
j#d t|j$dkr:|j$d dk	r:| r:t%||j$d  |sN dksNtt& t' }t( t' t' |j)\}}j)dks| stx,t*|j+@ |B D ]}j#jd| qW  j+|8  _+d|jk}|ot,  }j- |j.|j||d d|_d|_dS )&zk
    Dump function defintion, doc string, and function body.
    This code is specialied for Python 2.
    c                sf   |j dr j| |}|r^ j|dd}t j|| d||f }|d	d dkrZ|d7 }|S |S dS )
zebuild parameters:
            - handle defaults
            - handle format tuple parameters
        . )indentz%s=%s   Nz= None)
startswithZget_tuple_parametertraverser   Zshowast)astnamedefaultvalueresult)self `/home/psgendb/BIRCHDEV/python/lib/python3.6/site-packages/uncompyle6/semantics/make_function2.pybuild_param-   s    
z#make_function2.<locals>.build_paramr   ZMAKE_r   NZLOAD_LAMBDAr   )	is_lambdaZnoneInNamesc                s   g | ]\}} ||qS r   r   ).0r   r   )r   r    r   r   
<listcomp>u   s   z"make_function2.<locals>.<listcomp>)	fillvaluez*%szlambda z, r   yieldexpr(   z, *, z*, Zpos_argz**%sz: z):Zstmtsg      @zglobal )r!   Z
returnNoner)   r)   r   r)   r)   r)   )/kindr   AssertionError
isinstanceattrtupler   r   scannerZcurrentclassco_argcountlistco_varnamesreverseZ	build_astZ_tokensZ
_customizeco_namesr   ParserError2writestrZtolerate_errorsERRORr   r   r   appendjoinlenr   stripco_flagsZpreorderr   Zprintln	co_constsr   r	   setr
   versionsortedZ	mod_globsr   Z
gen_sourceco_name)r   noder!   nestedZ	code_nodeZ	args_nodeZ	defparamsZpos_argsZkw_argsZannotate_argcZlambda_indexcodeZargcZ
paramnamespZkw_pairsr   paramsZast_exprnZall_globalsglobals	nonlocalsgZhas_noneZrnr   )r   r    r   r   make_function2'   s    











(
rL   )r   N)__doc__Zxdisr   r   r   Zuncompyle6.scannerr   
uncompyle6r   Z!uncompyle6.semantics.parser_errorr   Zuncompyle6.parserr5   Zuncompyle6.semantics.helperr   r	   r
   r   	itertoolsr   r   Zuncompyle6.showr   rL   r   r   r   r   <module>   s   