Your IP : 216.73.216.213


Current Path : /opt/alt/python37/lib64/python3.7/site-packages/Cython/Compiler/__pycache__/
Upload File :
Current File : //opt/alt/python37/lib64/python3.7/site-packages/Cython/Compiler/__pycache__/Parsing.cpython-37.pyc

B

Z��Z���@s0
ddlmZddlZejeeeeeeeeeeeeeeeeeeeeeeeejejd�ddlmZddlZddl	Z	ddl
mZm
ZddlmZmZddlmZmZmZdd	lmZdd
lmZddlmZddlmZdd
lmZmZmZmZddlmZddl m!Z!m"Z"ddlm#Z#ddlm$Z$ddlm%Z%e	j&ddkZ'e	j(dkZ)Gdd�de�Z*�d�dd�Z+dd�Z,dd�Z-dd �Z.�d�d"d#�Z/d$d%�Z0d&d'�Z1d(d)�Z2d*d+�Z3d,d-�Z4d.d/�Z5d0d1�Z6d2d3�Z7d4d5�Z8d6d7�Z9d8d9�Z:d:d;�Z;e�e<e<d<d=d>d?d@dAdBdCdDdEg
��Z=dFdG�Z>dHdI�Z?dJdK�Z@dLdM�ZAdNdO�ZBdPdQ�ZCdRdS�ZDdTdU�ZEdVdW�ZFdXdY�ZGdZd[�ZHd\d]�ZId^d_�ZJd`da�ZKdbdc�ZLddde�ZM�d�dfdg�ZNdhdi�ZOdjdk�ZPdldm�ZQdndo�ZRdpdq�ZSdrds�ZTdtdu�ZUdvdw�ZV�d�dxdy�ZWdzd{�ZXd|d}�ZYd~d�ZZd�d��Z[d�d��Z\�d�d�d��Z]d�d��Z^�d�d�d��Z_d�d��Z`d�d��d�D�\ZaZbd�d��Zcd�d��Zdd�d��Zed�d��Zfd�d��Zgd�d��Zhd�d��Zid�d��Zj�d�d�d��Zk�d�d�d��Zld�d��Zmd�d��Znd�d��Zod�d��Zpe�e<e<d�d�d�d�d�d�g��Zqd�d��Zrd�d��Zsd�d��Ztd�d��Zud�d��Zvd�d��Zw�d�d�d��Zxd�d��Zyd�dÄZzd�dńZ{d�dDŽZ|d�dɄZ}�d�d�d˄Z~e�e<e<d�d�d�g��Zd�dЄZ�d�d҄Z�d�dԄZ�d�dքZ�e�e<e<d�d�d�g��Z�d�dڄZ�d�d܄Z�d�dބZ�d�d�Z��d�d�d�Z��d�d�d�Z�d�d�Z�d�d�Z�e�e<e<d<d@d=d?g��Z�d�d�Z�d�d�Z��d�d�d�Z�d�d�Z�d�d�Z�d�d��Z�d�d��Z��d�d�d��Z�d�d��Z��d�d�d��Z��d�d�d��Z��d�d�Z��d�d�Z��d�d�Z��d��d�d�Z��d��d�d	�Z�e*�f�d
�d�Z��d��d�d
�Z��d��d�d�Z��d��d�d�Z��d�d�Z�e�e<e<�d�d�dg��Z��d��d�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+�d,�Z�e�e<e<�d-�d.�d/�d0�d1�d2g��Z�e�e��d3�d3�d4�d4�d4�d3�d4�d5�d6��Z�e�e<e<�d7�d8�d9�d:g��Z�e�e<e�e�Be<e��B�Z�e�e<e<d�dΐd;�d<g��Z��d=�d>�Z��d?�d@�Z�e*�ddddddf�dA�dB�Z��dC�dD�Z��dE�dF�Z�e�e<e<�dG�dH�dI�dJ�dK�dL�dM�dN�dO�dP�dQ�dR�dS�dTd>dBd?d=d@d<�dU�dV�dWd��dXg��Z��dY�dZ�Z��d[�d\�Z��d]�d^�Z��d_�d`�Z�e�e<e<�dI�da�dbd�d�g��Z�e*�dddddf�dc�dd�Z��de�df�Z��d��dg�dh�Zdi�dj�ZÐdk�dl�ZĐdm�dn�ZŐdo�dp�ZƐdq�dr�Zǐds�dt�ZȐdu�dv�Zɐdw�dx�Zʐdy�dz�Zːd{�d|�Z̐d}�d~�Z͐d�d��Zΐd��d��Zϐd��d��ZАd��d��Zѐdd��d��ZҐdÐd��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�de*f�d��d��Z�e�ee�ݐd��jޡZߐd��d��Z�e*f�d��d��Z�d��d��Z�d��d��Z�d��d��Z�dŐd��d��Z�dS(��)�absolute_importN)�Nodes�	ExprNodes�
EncodedString�
bytes_literal�StringEncoding�FileSourceDescriptor�lookup_unicodechar�unicode_category�Future�Options�error�warning�Builtin�
ModuleNode�Utils�_unicode�_bytes�re�sys�_parse_escape_sequences�_parse_escape_sequences_raw�partial�reduce�_IS_PY3�_IS_2BYTE_UNICODE)�StringIO)�lookup�category)rr�)�PyrexScannerr�StringSourceDescriptor)r)r)r)r)rrrr)r)r
r�)r)r)r�i��c@sDeZdZdZdZdZdZdZdZdZ	dZ
dZdZdd�Z
dd	�ZdS)
�Ctx�other�privaterNFcKs|j�|�dS)N)�__dict__�update)�self�kwds�r+�J/opt/alt/python37/lib64/python3.7/site-packages/Cython/Compiler/Parsing.py�__init__5szCtx.__init__cKs&t�}|j}|�|j�|�|�|S)N)r$r'r()r)r*�ctx�dr+r+r,�__call__8s

zCtx.__call__)�__name__�
__module__�__qualname__�level�
visibility�	cdef_flag�typedef_flag�api�overridable�nogil�	namespace�	templates�allow_struct_enum_decoratorr-r0r+r+r+r,r$(sr$�Expected an identifiercCs*|jdkr|j}|��|S|�|�dS)N�IDENT)�sy�systring�nextr
)�s�message�namer+r+r,�p_ident@s

rFcCs@g}x6|jdkr:|�|j�|��|jdkr0P|��qW|S)Nr?�,)r@�appendrArB)rC�namesr+r+r,�p_ident_listHs
rJcCs|��}|j}|��||fS)N)�positionr@rB)rC�pos�opr+r+r,�p_binop_operatorXsrNcCsd||�}xV|j|kr^t|�\}}||�}t�||||�}|dkr
tj|jjkrVd|_q
d|_q
W|S)N�/T)	r@rNr�
binop_noder�division�context�future_directivesZtruedivision)rC�opsZ
p_sub_expr�n1rMrL�n2r+r+r,�p_binop_expr^s
rWTcCsp|��}|��|jdkr(g}d}}nt|ddd�\}}}|�d�|rTt|�}nt|�}tj|||||d�S)N�:F)�
terminator�	annotated)�args�star_arg�starstar_argZresult_expr)	rKrBr@�
p_varargslist�expect�p_test�
p_test_nocondrZ
LambdaNode)rC�allow_conditionalrLr[r\r]�exprr+r+r,�	p_lambdefms



rdcCst|dd�S)NF)rb)rd)rCr+r+r,�p_lambdef_nocond�srecCsh|jdkrt|�S|��}t|�}|jdkr`|��t|�}|�d�t|�}tj||||d�S|SdS)N�lambda�if�else)�testZtrue_valZ	false_val)	r@rdrK�	p_or_testrBr_r`rZCondExprNode)rCrLrcrir%r+r+r,r`�s


r`cCs|jdkrt|�St|�SdS)Nrf)r@rerj)rCr+r+r,ra�s
racCst|dt�S)N)�or)�p_rassoc_binop_expr�
p_and_test)rCr+r+r,rj�srjcCsH||�}|j|krD|��}|j}|��t|||�}t�||||�}|S)N)r@rKrBrlrrP)rCrTZ	p_subexprrUrLrMrVr+r+r,rl�s
rlcCst|dt�S)N)�and)rl�
p_not_test)rCr+r+r,rm�srmcCs8|jdkr,|��}|��tj|t|�d�St|�SdS)N�not)�operand)r@rKrBrZNotNodero�p_comparison)rCrLr+r+r,ro�s

rocCsTt|�}|jtkrP|��}t|�}t|�}tj||||d�}|jtkrPt|�|_|S)N)�operatorZoperand1�operand2)	�p_starred_exprr@�comparison_opsrK�p_cmp_oprZPrimaryCmpNode�p_cascaded_cmp�cascade)rCrUrLrMrVr+r+r,rr�s


rrcCs|jdkrt|�St|�SdS)N�*)r@rur`)rCr+r+r,�p_test_or_starred_expr�s
r{cCs@|��}|jdkr d}|��nd}t|�}|r<t�||�}|S)NrzTF)rKr@rB�
p_bit_exprrZStarredUnpackingNode)rCrLZstarredrcr+r+r,ru�s

rucCs@|��}t|�}t|�}tj|||d�}|jtkr<t|�|_|S)N)rsrt)	rKrwrurZCascadedCmpNoder@rvrxry)rCrLrMrV�resultr+r+r,rx�s


rxcCsp|jdkr"|��|�d�d}n>|jdkrR|��|jdkrL|��d}q`d}n|j}|��|dkrld}|S)Nrp�inZnot_in�is�is_notz<>z!=)r@rBr_)rCrMr+r+r,rw�s



rw�<�>z==z>=z<=z<>z!=r~rrpcCst|dt�S)N)�|)rW�
p_xor_expr)rCr+r+r,r|sr|cCst|dt�S)N)�^)rW�
p_and_expr)rCr+r+r,r�sr�cCst|dt�S)N)�&)rW�p_shift_expr)rCr+r+r,r�sr�cCst|dt�S)N)z<<z>>)rW�p_arith_expr)rCr+r+r,r�sr�cCst|dt�S)N)�+�-)rW�p_term)rCr+r+r,r�sr�cCst|dt�S)N)rz�@rO�%z//)rW�p_factor)rCr+r+r,r�sr�cCst|�S)N)�	_p_factor)rCr+r+r,r� sr�cCs�|j}|dkr6|j}|��}|��t�||t|��S|js�|dkrj|��}|��t|�}tj||d�S|dkrzt|�S|dkr�|j	dkr�t
|�St|�S)N)r�r��~r�)rqr�r?�sizeof)r@rKrBrZ	unop_noder��in_python_fileZ
AmpersandNode�
p_typecastrA�p_sizeof�p_power)rCr@rMrL�argr+r+r,r�$s"r�c	Cs�|��}|��t|�}t|tj�}t|tj�}t|tj�}|s\|s\|s\|jdkr\|�	d�t
|dd�}|jdkr�|��d}nd}|�d�t
|�}|r�tj|||d�Stj|||||d�S)	NzUnknown typer)�empty�?rr�)�base_type_noderq)�	base_type�
declaratorrq�	typecheck)rKrB�
p_c_base_type�
isinstancer�MemoryViewSliceTypeNode�TemplatedTypeNode�CConstTypeNoderEr
�p_c_declaratorr@r_r�rZCythonArrayNodeZTypecastNode)	rCrLr�Zis_memsliceZis_templateZis_constr�r�rqr+r+r,r�7s0



r�cCsl|��}|��|�d�t|�r:t|�}tj||d�}n$t|�}t|dd�}tj	|||d�}|�d�|S)N�()rqr)r�)r�r��))
rKrBr_�looking_at_exprr`rZ
SizeofVarNoder�r�ZSizeofTypeNode)rCrLrq�noder�r�r+r+r,r�Ts


r�cCs�|��}|��d}|jdkr*d}|��|jdkrT|jtkrT|rJt|�nt|�}n|rh|jd|dd�d}|r~tj||d�Stj	||d�SdS)NF�fromTr�z''yield from' requires a source argument)rL�fatal)r�)
rKrBr@�statement_terminatorsr`�
p_testlistr
rZYieldFromExprNode�
YieldExprNode)rCrLZ
is_yield_fromr�r+r+r,�p_yield_expressionhs

r�cCst|�}tj|j|d�S)N)rc)r�r�ExprStatNoderL)rCZ
yield_exprr+r+r,�p_yield_statement~sr�cCs�|jdkr4d|jkr|�d�|j|_t||dd�S|rD|�d�n>|jdkrZt|dd�S|jd	krx|��t|dd�S|�d
�dS)N�def�pxdzdef statement not allowed hereT)�is_async_defz7Decorators can only be followed by functions or classes�for)�is_async�withz2expected one of 'def', 'for', 'with' after 'async')r@r4r
�p_def_statement�p_for_statementrB�p_with_items)rCr.�
decoratorsr+r+r,�p_async_statement�s




r�cCs�|jdkr"|��ddkr"t|�Sd}|jdkr@|��}|��t|�}x|jdkr`t||�}qJW|rttj	||d�}|jdkr�|��}|��t
|�}t�|d||�}|S)N�newrr?�await)r��[�.)r�z**)rA�peek�
p_new_exprr@rKrB�p_atom�	p_trailerrZ
AwaitExprNoder�rP)rCZ	await_posrUrLrVr+r+r,r��s"

r�cCs,|��}|��t|�}t|tj||d��S)N)�cppclass)rKrBr��p_callrZNewExprNode)rCrLr�r+r+r,r��sr�cCsT|��}|jdkrt||�S|jdkr0t||�S|��t|�}tj|||d�SdS)Nr�r�)�obj�	attribute)rKr@r��p_indexrBrFr�
AttributeNode)rCZnode1rLrEr+r+r,r��s



r�c
Cs�|��}|��g}g}d}d}�x0|jdk�rR|jdkrl|rP|jd|��d�|��|�t|��d}n�|jdkr�|��|�t|��d}n�t|�}|jdkr�|��|js�|jd	|jd�|j�	|j
�}tj|j|d
�}	t|�}|�|	|f�nB|�r|jd|jd�|�r*|�s*|d�|�n|�|g�d}|jdk�rHP|��q$W|jd
k�r�|�s�|�s�t
|�dk�r�t
|d�dk�r�t||dd�gg}|�d�|�p�gg|fS)NFr�rzz%Non-keyword arg following keyword arg)rLTz**�=z!Expected an identifier before '=')�value���rG)r��asyncrr)rKrBr@r
rHr`�is_namerLrR�intern_ustringrEr�IdentifierStringNode�len�p_genexpr_)
rC�allow_genexprL�positional_args�keyword_argsZ
starstar_seenZlast_was_tuple_unpackr��encoded_name�keywordr+r+r,�p_call_parse_args�sV



 
r�csd}�fdd�|D�}tttj�d�|�}|�rg}g}xz|D]r}t|t�rn|\}	}
|�tj|	j|	|
d��q>|j	r�|�
|j�q>|r�|�tj|dj|dd��g}|�|�q>W|r�|�tj|dj|dd��|�rt
|�dkr�|dj	r�|d}ntj�|d	�}||fS)
Ncs2g|]*}t|t�r tj�|d�ntj�|d��qS))r[)r�)r��listr�	TupleNodeZAsTupleNode)�.0r�)rLr+r,�
<listcomp>sz,p_call_build_packed_args.<locals>.<listcomp>r�)rL�keyr�rT)�key_value_pairs�reject_duplicatesr)r�)rrrrPr��tuplerH�DictItemNoderL�is_dict_literal�extendr��DictNoder��MergedDictNode)rLr�r��keyword_dictZ	subtuples�	arg_tuple�kwargs�
dict_items�itemr�r�r+)rLr,�p_call_build_packed_argss4



r�cCsl|��}t|�\}}|sFt|�dkrFt|dt�rFtj|||dd�St|||�\}}tj||||d�SdS)Nrr)�functionr[)r�r�r�)	rKr�r�r�r�rZSimpleCallNoder�ZGeneralCallNode)rCr�rLr�r�r�r�r+r+r,r�*sr�c
Cs�|��}|��t|�\}}|rPt|d�dkrP|d\}}tj||||d�}n6t||�}|rh|d}	ntj||d�}	tj|||	d�}|�	d�|S)Nrr")�base�start�stop)r[)r��index�])
rKrB�p_subscript_listr�r�SliceIndexNode�make_slice_nodesr��	IndexNoder_)
rCr�rL�
subscripts�is_single_valuer�r�r}�indexesr�r+r+r,r�;s



r�cCsLd}t|�g}x4|jdkrBd}|��|jdkr2P|�t|��qW||fS)NTrGFr�)�p_subscriptr@rBrH)rCr��itemsr+r+r,r�Os

r�cCsb|��}t|d�}|jdkr"|gS|��t|d�}|jdkrF||gS|��t|d�}|||gS)N)rXrX)rXrGr�)rK�p_slice_elementr@rB)rCrLr�r��stepr+r+r,r�\s




r�cCs|j|krt|�SdSdS)N)r@r`)rCZ
follow_setr+r+r,r�ls
r�cCs"|�d�|�d�|�d�dS)Nr�)r_)rCr+r+r,�expect_ellipsists

r�cCsFg}x<|D]4}t|�dkr*|�|d�q
|�t|f|���q
W|S)Nrr)r�rH�make_slice_node)rLr�r}�	subscriptr+r+r,r�ys
r�cCs<|st�|�}|st�|�}|s*t�|�}tj||||d�S)N)r�r�r�)r�NoneNodeZ	SliceNode)rLr�r�r�r+r+r,r��s


r�c	CsN|��}|j}|dkrb|��|jdkr8tj|gd�}n|jdkrLt|�}nt|�}|�d�|S|dkrrt|�S|dkr�t	|�S|dkr�t
|�S|dkr�t|�t�|�S|d	kr�t
|�S|d
kr�|j}|��tj||d�S|dk�r|jdd
�}|��tj||d�S|dk�r�t|�\}}}|dk�r>tj||d�S|dk�rXtj|||d�S|dk�rptj||d�S|dk�r�tj||d�S|dk�r�tj|||d�S|�d|�n�|dk�r@|j}|dk�r�t�|�}n\|dk�r�tj|dd�}nB|dk�rtj|dd�}n(|dk�r*|j�s*t�|�}n
t||�}|��|S|�d�dS) Nr�r�)r[�yieldr��{�`r��INTZFLOAT)r�ZIMAGr��BEGIN_STRING�c�u)r��bytes_value�b�f)�values�)r��
unicode_valuezinvalid string kind '%s'r?�None�TrueT�FalseF�NULLz!Expected an identifier or literal)rKr@rBrr�r��p_testlist_compr_�p_list_maker�p_dict_or_set_maker�p_backquote_exprr��EllipsisNode�
p_int_literalrA�	FloatNode�ImagNode�p_cat_string_literalZCharNode�UnicodeNode�	BytesNode�
JoinedStrNode�
StringNoder
r��BoolNoder�ZNullNode�p_name)	rCrLr@r}r��kindrrrEr+r+r,r��sr
















r�cCs�|��}|j}|��d}d}x:|ddkrX|ddkrB|d7}n|d7}|dd�}q Wd}|rhd}n|r�|dks�|jjd	kr�d}|jr�|r�t|d
�d}tj|||||d�S)
Nrr�ZUuLlZLl�L�UTZLLr#z4illegal integer literal syntax in Python source fileF)�is_c_literalr��unsigned�longness)	rKrArBrR�language_levelr�r
r�IntNode)rCrLr�r$r%r#r+r+r,r�s2

rcCsH|��}|js:||jkr:|j�|�}t||�}|dk	r:|Stj||d�S)N)rE)rK�compile_time_expr�compile_time_envZlookup_here�wrap_compile_time_constantr�NameNode)rCrErLr�r�r+r+r,r�s
rcs�t|�}|dkrt���S|tkr,t���St|t�rDtj�|d�St|t�r^tj	�||d�St|t
�rxtj�||d�St|t�r�tj
�t|j�td|j�d�}|jr�tj�dtj�t|j�|jd�||d�}|St|t��r�tj�t|�d�St|t��rt|d�}tj�||d�St|t��rR�fdd�|D�}d|k�rLtj�|d	�SdSn(t�szt|t��rztj	�|�d
�|d�St�d||jjf�dS)N)r�)r��constant_resultgr�)r,�asciicsg|]}t�|��qSr+)r*)r�r�)rLr+r,r�sz.wrap_compile_time_constant.<locals>.<listcomp>)r[r!z4Invalid type for compile-time constant: %r (type %s))�reprrr��Ellipsisrr��boolr�intr'�floatr�complexr�imag�realrPrrrrrrr�r�r�long�rstripr
�	__class__r1)rLr��repr�Zbvaluer[r+)rLr,r*�sD








r*cCs�|��}t|�\}}}|dks(|jdkr2|||fS|g|g|g}}}d}}x�|jdkr�|��}t|�\}}	}
|dkr�t|d�qRnF||kr�t||g�tddg�tddg�fkr�d}nt|d||f�qR|�|	�|�|
�|�|�qRW|dk�s|dk�r d|k�r tt�|�|j	�}|d	k�rBt
d�d
d�|D���}|dk�r�g}xFt||�D]8\}}t
|t��rz||7}n|�tj|t
|�d���q\W|||fS)
NrrzCCannot concatenate char literal with another string or char literalr	rrzFCannot mix string literals of different types, expected %s'', got %s'')rrr)rrcSsg|]}|dk	r|�qS)Nr+)r�rr+r+r,r�Dsz(p_cat_string_literal.<locals>.<listcomp>)r�)rK�p_string_literalr@r
�setrHrrZ
join_bytes�source_encodingr�join�zipr�r�rr)rCrLr rrZbstringsZustringsZ	positionsZ	next_kindZnext_bytes_valueZnext_unicode_valuerr+r+r,r$s@

$




rrcCs`|jdkrdS|��}t||�\}}}|dkrF|dkrB|�d|�|S|dkrR|S|�d�dS)Nrrr	zf-string not allowed hererz#internal parser configuration error)r@rKr:r
)rCZ
required_typerLr rrr+r+r,�p_opt_string_literalPs
r?cCsx|D]}|dkrdSqWdS)N�€TFr+)�stringrr+r+r,�check_for_non_ascii_characters_s
rBc
Cs |��}|jjdk}d}|j�d���}t|�dkr�tt|��t|�krRt|d�d|krld|krlt|d�d|kr�d	|kr�t|d
�d|kr�d	|kr�t|d�d|k}d
|kr�t|�dkr�t|d�d
}n2d	|kr�d	}d}n d|kr�d}nd|kr�d}nd}|dk�r4|dk�r4t	j
|jjk�r4t�
|j�}d}nP|dk	�rL|dk�rL|}|dk�r`t��}n$|dk�rxt�
|j�}nt�|j�}�x|��|j}	|j}
|	dk�r�|�|
�|�r�|�s�t|
��r�d}n�|	dk�r0|�r |�s�|dk�s�|
ddk�r |�|
�|�r.|�s.t|
��r.d}nt|||
|�nR|	dk�rF|�d�n<|	dk�rTPn.|	dk�rn|jd|d�n|�d|	|jf��q�W|d
k�r�d}|��}t|�dk�r�t|d|�n4|��\}}|�r�|�r�|dk�r�|jd|d�d}|d	k�rt|||d|kd�}|��|||fS) Nr#Fz"'rz!Duplicate string prefix characterrrz*String prefixes b and u cannot be combinedr	z*String prefixes b and f cannot be combinedz*String prefixes u and f cannot be combined�rrz+Invalid string prefix for character literalTrZub)rr	ZCHARS�ESCAPEZUu�NEWLINE�
Z
END_STRING�EOFzUnclosed string literal)rLz(Unexpected token %r:%r in string literalzinvalid character literal: %rz0bytes can only contain ASCII literal characters.)�is_raw)rKrRr&rAr7�lowerr�r;r
r�unicode_literalsrSrZStrLiteralBuilderr<�UnicodeLiteralBuilderZBytesLiteralBuilderrBr@rHrB�_append_escape_sequenceZgetcharZ
getstrings�
p_f_string)
rCZ
kind_overriderLZis_python3_sourceZ has_non_ascii_literal_charactersZkind_stringrHr �charsr@Zsystrrrr+r+r,r:fs�





$





$






r:c	Cs&|d}|dkr,|�t|dd�d���n�|dkrB|�|��n�|dkr^|�t�|���n�|dkrj�n�|dkr�t|�dkr�|�t|d	d�d
��n|jd|dd
��nt|dk�r|dk�rd}|dk�r�d}yt|dd��}t|�}Wn�t	k
�r*|jdt
|dd���d�dd
�Yn�tk
�r�|dk	�r�t
�r�t|�d	k�r�t|d�dk�r�t|d�dk�r�dt|d�ddt|d�d?}n�YnXnPt|�dk�r�t|d	d�d
�}|dk�r|�d|�d}n|jd|dd
�|dk�r"|�||�n
|�|�dS)Nr�01234567�z'"\ZabfnrtvrF�x�r"�zInvalid hex escape '%s'F)r�ZNUu)rr	rr��Nr#z!Unknown Unicode character name %srrZCsii��
i�)�rUi��zInvalid unicode escape '%s')Zappend_charvalr1rHrZchar_from_escape_sequencer�r
r	�ord�KeyErrorr.�lstrip�	TypeErrorrr
Zappend_uescape)r �builderZescape_sequencerCrZchrvalZucharr+r+r,rL�sJ
"$*


rLcCs.g|]&}t�d|rdndd�d��j�qS)s(\\(?:s\\?s][\\abfnrtv"\'{]|[0-7]{2,3}|N\{[^}]*\}|x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|U[0-9a-fA-F]{8}|[NxuU]|s)?|\{\{?|\}\}?|[^\\{}]+)zus-ascii)r�compile�decode�match)r�rHr+r+r,r��sr�)TFcCs�g}d}t|�}t��}t|�}|r(tnt}	�x0||k�r^|}
|d|
|d<|	||�}|dkrntt|�d�|��}|�	�}|d}
|
dkr�|s�t|�dkr�t
d|||�n
|�|�q0|
dk�r|dkr�|�d�nD|jr�|�t
j||��d	��t��}t|||||�\}}|�|�q0|
d
k�rR|dk�r>|�d
�n|jdt|�d
�q0|�|�q0W|j�r�|�t
j||��d	��|S)Nrr"zInvalid escape sequence�\rr	rz{{)r��}z}}z#f-string: single '}' is not allowed)rL)r�rrKr�rrr
r��end�grouprLrHrNrrZ	getstring�p_f_string_expr)rCrrLrHr
Z
next_start�sizer[�	error_posZ
_parse_seqrar^�partrZ	expr_noder+r+r,rM
sF



rMcCs�|}t|�}d}}}	d}
d}d}|}
d}�x�||krB|�d�||}|
|kr�|dkr�|d|d||df}t|d�nN||
kr�|r�|d|kr�||d|kr�||d|kr�d}|}
|d7}n|}
n�|d	k�r|}
|d|k�r�||d|k�r�||d|k�r�d
}|d7}n�|dk�r2|d7}n�|dk�rP|dk�rP|d8}nd|d
k�rf|�d�nN|dk�r�|dk�r�|dk�r�|d|k�r�||ddk�r�|d7}q0|}P|d7}q0W|||��dd��dd�}|d|d|d|df}|���st|d�|dk�rR|d7}|d|k�r:t|d�n||}|d7}||}|dk�rNd}d}d}|d}x�||k�r�|jd|d�||}|�s�|�s�|dk�r�|d7}n$|dk�r�|dk�r�|d8}n|}P|d	k�r4|�s(|d|k�r(||d|k�r(||d|k�r(|}|d7}n|�s4|}|d7}�qrW|||�}
|dk�rf|�d|�td|�}t||d||j|d�}t|�}|dk	�r�tj	�
|��s�t|d|�|
�r�tj|t||
||�d �}	|dtj	||||	d!�fS)"Ni@rFz'missing '}' in format string expressionr_rr"z$backslashes not allowed in f-stringsz'"Tz{[(z}])�#zformat string cannot include #z!:}�!r�z
rF�
z(empty expression not allowed in f-stringz(invalid conversion char at end of stringrXzmissing '}' in format specifier)rLrr`z4missing '}' in format string expression', found '%s'z(%s))Zparent_scannerr<Zinitial_posz!invalid conversion character '%s')r
)r��conversion_char�format_spec)
r�r
�replace�striprr r<r�rZFormattedValueNodeZfind_conversion_funcrrM)rCrrLZstarting_indexrH�irdrjZ
terminal_charrkZformat_spec_strZNO_CHARZnested_depthZ
quote_charZin_triple_quotesrreZexpr_strZexpr_posZ	in_stringZstart_format_spec�buf�scannerrcr+r+r,rc=s�
,

2




*










8


rccCs�|��}|��|jdkr2|�d�tj|gd�St|�}|jdkr�|jrT|�d�tj	||d�}t
||�}|�d�tj|||tj
|jjdkd�S|jdkr�|��t||�}n|g}|�d�tj||d�S)	Nr�)r[)r�r�z2iterable unpacking cannot be used in comprehension)rcr#)�looprH�typeZhas_local_scoperG)rKrBr@r_r�ListNoder{�
is_starredr
�ComprehensionAppendNode�
p_comp_for�ComprehensionNoderZ	list_typerRr&�p_test_or_starred_expr_list)rCrLrcrHrq�exprsr+r+r,r�s*








rcCs0|jdkrt||�S|jdkr(t||�S|SdS)N)r�r�rg)r@rv�	p_comp_if)rC�bodyr+r+r,�p_comp_iter�s




r|cCs^|��}d}|jdkr"d}|��|�d�t|d|d�}|jdt||�|d�tj|f|�S)NFr�Tr�)�allow_testlistr�)�else_clauser{r�)	rKr@rBr_�p_for_boundsr(r|r�ForStatNode)rCr{rLr��kwr+r+r,rv�s

rvcCs<|��}|��t|�}tj|tj||t||�d�gdd�S)N)�	conditionr{)�
if_clausesr~)rKrBrar�
IfStatNode�IfClauseNoder|)rCr{rLrir+r+r,rz�srzcCs�|��}|��|jdkr0|��tj|gd�Sg}d}d}�x,|jdkr�|dkrf|jdkr`dnd}n.|t|j�kr�|�d	|j|dkr�d
ndf�|��|jdkr�|�d�t|�}|�|�d}nzt	|�}|dkr�|jd
kr�dnd}|dk�r|�
d
�|}t	|�}tj|j||d�}|�r2|d�|�n|�|g�d}|jdk�rf|��|jdk�rhPq@Pq@W|jdk�rtt|�dk�r2t
|dt��r2t|d�dk�r2|dd}|dk�r�t
|tj��s�tt|���tj}tj|j|j|jd�}	ntj}tj|j|d�}	t||	�}
|�
d�tj||
|	|d�St|�dk�r\t
|dt��s\|�d�n
|�
d�tj|gd�S|�
d�|dk�r:g}g}xT|D]L}
t
|
t��r�|�|
�n.|�r�|�tj|dj|d��g}|�|
��q�W|�r|�tj|dj|d��t|�dk�r(|dj�r(|dStj||tjd�Sg}g}xT|D]L}
t
|
t��rd|�|
�n.|�r�|�tj|dj|d��g}|�|
��qHW|�r�|�tj|dj|d��t|�dk�r�|dj�r�|dStj||dd�SdS)Nr`)r�rF)rzz**rzrr"z%unexpected %sitem found in %s literalr;�dictzexpected expression, found '*'rX)r�r�r�TrG)r�r�)Zkey_exprZ
value_expr)rc)rqrHrrz2iterable unpacking cannot be used in comprehension)r[)r[rr)r�r�) rKrBr@rr�r�r
rurHr`r_r�rLr�r��AssertionErrorrrr�	dict_typeZDictComprehensionAppendNoder�r��set_typerurvrwr�ZSetNodeZis_set_literalZMergedSequenceNoder�r�)rCrL�partsZtarget_typeZlast_was_simple_itemr�r�r�Zcomprehension_typerHrqr�Z	set_itemsrfr�r+r+r,r�s�






0







rcCs||��}|��t|�g}x$|jdkr>|��|�t|��qW|�d�t|�dkr`|d}ntj||d�}tj	||d�S)NrGrrr)r[)r�)
rKrBr`r@rHr_r�rr�Z
BackquoteNode)rCrLr[r�r+r+r,rks


rcCsH|dk	r|gpg}x0|jtkrB|�t|��|jdkr8P|��qW|S)NrG)r@�expr_terminatorsrHr`rB)rCrcryr+r+r,�p_simple_expr_listzs
r�cCsH|dk	r|gpg}x0|jtkrB|�t|��|jdkr8P|��qW|S)NrG)r@r�rHr{rB)rCrcryr+r+r,rx�s
rxcCsB|��}t|�}|jdkr:|��t||�}tj||d�S|SdS)NrG)r[)rKr`r@rBr�rr�)rCrLrcryr+r+r,r��s

r�cCsB|��}t|�}|jdkr:|��t||�}tj||d�S|SdS)NrG)r[)rKr{r@rBrxrr�)rCrLrcryr+r+r,�p_testlist_star_expr�s

r�cCsV|��}t|�}|jdkr:|��t||�}tj||d�S|jdkrNt||�S|SdS)NrG)r[)r�r�)rKr{r@rBrxrr�r�)rCrLrcryr+r+r,r�s



rcCs2t|tj|jtj|j|d�d��}tj|j|d�S)N)r�)rc)rq)rvrr�rLrr�ZGeneratorExpressionNode)rCrcrqr+r+r,r��sr�r�r�r`rXr�rEcCs&|��}|��t|�}tj||d�S)N)rI)rKrBrJrZ
GlobalNode)rCrLrIr+r+r,�p_global_statement�sr�cCs&|��}|��t|�}tj||d�S)N)rI)rKrBrJrZNonlocalNode)rCrLrIr+r+r,�p_nonlocal_statement�sr�cCs�t|�}|jdkr6|js$|js$|jr6|��t|�|_|jdkrV|jrV|j	d|j
d�|g}x<|jdkr�|��|jdkr�t|�}nt|�}|�|�q^Wt
|�dk�rtt�d|j��r\|d}t|tj�r�tj|j
|jt|j
|j|j�d	�}n$t|tjtjtjf��st	|j
d
�|jdd�}|��|jdk�r@t|�}nt|�}tj|j
|||d�S|d}tj|j
|d
�S|d}t
|�dk�r�tj|j
|d|d�Stj|j
|dd�|d�SdS)NrXr�zqa starred assignment target must be in a list or tuple - maybe you meant to use an index assignment: var[0] = ...)rLrrz([-+*/%^&|]|<<|>>|\*\*|//|@)=r)r�r�z&Illegal operand for inplace operation.r�)rs�lhs�rhs)rcr")r�r�)Zlhs_listr�) r�r@r�Zis_subscriptZis_attributerBr`�
annotationrtr
rLr�rHr�rr^r�rr�r�r�r�r�r�r�r+r�rZInPlaceAssignmentNoder��SingleAssignmentNodeZCascadedAssignmentNode)rCrcZ	expr_listr�rsr�r+r+r,�p_expression_or_assignment�sH




r�cCs�|��}d}|��|jdkrL|��t|�}|jdkrP|��|jdk}nd}g}|jdkr�|�t|��x4|jdkr�|��|jdkr�d}P|�t|��qnWtj||d�}tj||||d�S)Nrz>>rG)rErGr)r[)r��streamZappend_newline)	rKrBr@r`rHrr�rZ
PrintStatNode)rCrLZends_with_commar�r[r�r+r+r,�p_print_statements.



r�cCs�|��}|��t|�}t|tj�rZd}|j}t|�dkrd|jdt|�|dd�|g}n
d}|g}|j	dkr�|r�|jddd�|��|�
t|��|j	d	kr�|��|�
t|��tj
||d
�S)NT)r"r#z.expected tuple of length 2 or 3, got length %dF)rLr�r~z@tuple variant of exec does not support additional 'in' arguments)r�rG)r[)rKrBr|r�rr�r[r�r
r@rHr`rZExecStatNode)rCrL�codeZ
tuple_variantr[r+r+r,�p_exec_statements,


r�cCs&|��}|��t|�}tj||d�S)N)r[)rKrBr�rZDelStatNode)rCrLr[r+r+r,�p_del_statement9sr�cCs.|��}|�d�|r$|jddd�t�|�S)N�passzExpected a newlineT)�ignore_semicolon)rKr_�expect_newliner�PassStatNode)rC�with_newlinerLr+r+r,�p_pass_statementAs

r�cCs|��}|��t�|�S)N)rKrBrZ
BreakStatNode)rCrLr+r+r,�p_break_statementHsr�cCs|��}|��t�|�S)N)rKrBrZContinueStatNode)rCrLr+r+r,�p_continue_statementNsr�cCs6|��}|��|jtkr$t|�}nd}tj||d�S)N)r�)rKrBr@r�r�rZReturnStatNode)rCrLr�r+r+r,�p_return_statementTs

r�cCs�|��}|��d}d}d}d}|jtkr�t|�}|jdkrh|��t|�}|jdkr�|��t|�}n|jdkr�|��t|�}|s�|s�|r�tj|||||d�St�|�SdS)NrGr�)�exc_type�	exc_value�exc_tb�cause)rKrBr@r�r`rZ
RaiseStatNodeZReraiseStatNode)rCrLr�r�r�r�r+r+r,�p_raise_statement^s0




r�c
Cs|��}|j}|��t|dd�g}x(|jdkrL|��|�t|dd��q&Wg}tj|jjk}x�|D]�\}}}}|dkr�t	j
||||d�}	nr|r�d|kr�tj|tj
||j�d�d�gd	�}
nd}
t	j|tj||p�|d
�tj|tj
||d�|r�dnd|
d�d
�}	|�|	�qfWt	j||d�S)Nr)�
as_allowedrG�cimport)�module_name�as_name�is_absoluter�rz)r�)r[)rEr)r�r4�	name_list)r�r�)�stats)rKr@rB�
p_dotted_namerHrrrRrSrZCImportStatNoderrsr�r�r�r+�
ImportNode�StatListNode)rCrLr r�r�r��target_name�dotted_namer��statr�r+r+r,�p_import_statement{s<

r�c	Cs�|��}|��|jdkr@d}x$|jdkr<|d7}|��q Wnd}|dk	rn|jdkrn|��|j�d�}}n.|dkr�tj|jjkr�d}t|dd�\}}}}|jdkr�|�	d�|j}|��|d	k}d}	|jd
kr�|��|j�d
�ddfg}
|��n$|jdk�rd}	|��t
||�g}
x>|jd
k�rZ|��|	�rF|jdk�rFP|
�t
||���qW|	�rl|�d�|dk�r|�s�|�	d�n�|�r�|�	d�nvxt|
D]l\}}}
}|dk�r�|�	d|�Pyt
t|�}Wn(tk
�r�|�	d||�PYnX|jj�|��q�Wt�|�S|d	k�r6tj||||
d�Sg}g}xH|
D]@\}}}
}|�tj||d��|�|tj||
�px|d�f��qDWtj|
dd|d�}tj|tj|tj||d�||d�|d�SdS)Nr�rr)�importr�rF)r�zExpected 'import' or 'cimport'r�rzr�TrGr��
__future__z?from __future__ imports must occur at the beginning of the filezinvalid syntaxZbracesznot a chancez future feature %s is not defined)r�Zrelative_level�imported_names)r�)rE)r[)r�r4r�)�moduler�)rKrBr@rRr�rrrSr�r
�p_imported_namerHr_�getattr�AttributeError�addrr�ZFromCImportStatNoderr�r+rsZFromImportStatNoder�)rC�first_statementrLr4Zdotted_name_posr��_r �
is_cimportZis_parenthesizedr�Zname_posrEr�Z	directiveZimported_name_stringsr�Zimport_listr+r+r,�p_from_import_statement�s�









 r��class�struct�unioncCsD|��}d}|r(|jtkr(|j}|��t|�}t|�}||||fS)N)rKrA�imported_name_kindsrBrF�	p_as_name)rCr�rLr rEr�r+r+r,r��sr�cCsf|��}t|�}d}|g}x$|jdkr>|��|�t|��qW|rLt|�}|||j�d�|��|fS)Nr�)	rKrFr@rBrHr�rRr�r=)rCr�rLr�r�rIr+r+r,r��sr�cCs,|jdkr$|jdkr$|��t|�SdSdS)Nr?�as)r@rArBrF)rCr+r+r,r�
sr�cCsH|��}|��t|�}|jdkr4|��t|�}nd}tj|||d�S)NrG)�condr�)rKrBr`r@rZAssertStatNode)rCrLr�r�r+r+r,�p_assert_statements

r��;rGcCsX|��}|��t|�g}x$|jdkr>|��|�t|��qWt|�}tj|||d�S)N�elif)r�r~)rKrB�p_if_clauser@rH�
p_else_clauserr�)rCrLr�r~r+r+r,�p_if_statement!s
r�cCs(|��}t|�}t|�}tj|||d�S)N)r�r{)rKr`�p_suiterr�)rCrLrir{r+r+r,r�-s
r�cCs"|jdkr|��t|�SdSdS)Nrh)r@rBr�)rCr+r+r,r�4s
r�cCs:|��}|��t|�}t|�}t|�}tj||||d�S)N)r�r{r~)rKrBr`r�r�rZ
WhileStatNode)rCrLrir{r~r+r+r,�p_while_statement;sr�FcCsL|��}|��t|d|d�}t|�}t|�}|j|||d�tj|f|�S)NT)r}r�)r{r~r�)rKrBrr�r�r(rr�)rCr�rLr�r{r~r+r+r,r�Gsr�c
Cs t|�}|jdkr4|��t|||d�}t||d�S|j�s|�s|jdkr^|��t|�}n
|d}}t|�}|��}t	|�}|��}	t|�}
t|�}t
|�}|dkr�tj||d�}n(|j
s�t|jd�n||jkr�t|d�|d|
dkr�t|	d	�t||||
||d
�S|�d�iSdS)Nr~)r�)�target�iteratorr�)rEz4Target of for-from statement must be a variable namez5Variable name in for-from range does not match targetrz,Relation directions in for-from do not match)r��bound1Z	relation1Z	relation2�bound2r�)�p_for_targetr@rB�p_for_iteratorr�r�r|�p_for_from_relationrKrF�p_for_from_steprr+r�r
rLrEr_)
rCr}r�r�r�r�Zrel1Z	name2_posZname2Zrel2_posZrel2r�r�r+r+r,rRsH





rcCs*|jtkr|j}|��|S|�d�dS)Nz#Expected one of '<', '<=', '>' '>=')r@�inequality_relationsrBr
)rCrMr+r+r,r�}s

r�cCs0|jdkr(|jdkr(|��t|�}|SdSdS)Nr?Zby)r@rArBr|)rCr�r+r+r,r��s
r�cCsp|��}t|�}|jdkrh|��|g}x0|j|krX|�t|��|jdkrNP|��q*Wtj||d�S|SdS)NrG)r[)rKrur@rBrHrr�)rCrYrLrcryr+r+r,�p_target�s

r�cCs
t|d�S)Nr~)r�)rCr+r+r,r��sr�cCs6|��}|rt|�}nt|�}|r(tjntj||d�S)N)�sequence)rKr�rjrZAsyncIteratorNodeZIteratorNode)rCr}r�rLrcr+r+r,r��s

r�cCs�|��}|��t|�}g}d}|jdkr�x|jdkrF|�t|��q,W|jdkrb|��t|�}tj||||d�}|jdkr�|S|jdkr�|��t|�}tj|||d�S|�	d�dS)N)�exceptrhr�rh)r{�except_clausesr~�finally)r{�finally_clausezExpected 'except' or 'finally')
rKrBr�r@rH�p_except_clauserZTryExceptStatNodeZTryFinallyStatNoder
)rCrLr{r�r~r�r+r+r,�p_try_statement�s,




r�cCs�|��}|��d}d}d}|jdkr�t|�}t|tj�rB|j}n|g}|jdksr|jdkr�|jdkr�|j	j
dkr�|��t|�}n>|jdkr�|jdkr�|��|��}t|�}tj||d�}d}t
|�}tj|||||d	�S)
NFrXrGr?r�r")rET)�patternr�r{�is_except_as)rKrBr@r`r�rr�r[rArRr&rFr+r�rZExceptClauseNode)rCrLr�r�r��pos2rEr{r+r+r,r��s0

r�c
	Cs�|��}|��t|d�d}|�d�|jr�|}|j�||�}|r�|j�|�t	�
|��.}t|�}t||||j
|jd�}t||�}	WdQRX|	SdSn
t�|�SdS)Nrr"z!Syntax error in include statement)r<�parse_comments)rKrBr:r��compile_time_evalrRZfind_include_fileZincluded_filesrHrZopen_source_filerr �encodingr��p_statement_listrr�)
rCr.rLZunicode_include_file_nameZinclude_file_nameZinclude_file_pathr	Zsource_desc�s2�treer+r+r,�p_include_statement�s 
r�cCs.|��|jdkr"|js"t|�}nt|�}|S)N�template)rBrAr��p_with_templater�)rCr�r+r+r,�p_with_statement�s

r�cCs�|��}|jsr|jdkrr|jdkrr|r0|�d�|j}|��|jdkrZ|��t|�}nt|�}tj	|||d�St
|�}d}|jdkr�|jdkr�|��t|�}|jdkr�|��t||d�}nt|�}tj|||||d�S)	Nr?)r:�gilzwith gil/nogil cannot be asyncrG)�stater{r�)r�)�managerr�r{r�)
rKr�r@rAr
rBr�r�rZGILStatNoder`ruZWithStatNode)rCr�rLr�r{r�r�r+r+r,r�s*



r�cCs�|��}g}|��|�d�|�|j�|��x*|jdkr\|��|�|j�|��q4W|�d�|jdkr�|��|�d�|��t�}||_	t
|||�}|��|St|d�dS)Nr�rGr�rXz-Syntax error in template function declaration)
rKrBr_rHrAr@r��
expect_indentr$r<�p_c_func_or_var_declaration�
expect_dedentr
)rCrLr<�body_ctxZfunc_or_varr+r+r,r�s*



r�cCs0|jdkrt|�}�n|jdkr,t|�}�n|jdkr@t|�}n�|jdkrTt|�}n�|jdkrht|�}n�|jdkr|t|�}n�|jdkr�t|�}n�|jdkr�t|�}n�|jd	kr�t	|�}nt|jd
kr�t
|�}n`|jdkr�t||d�}nH|jd
kr�t|�}n4|jdk�rt
|�}n|jdk�r$t|�}nt|�}|S)N�global�nonlocal�print�exec�del�break�continue�return�raise)r�r�r�)r�r�assertr�)r@r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�)rCr�r�r+r+r,�p_simple_statement6s<






















rcCs�t||d�}|j}g}t|tj�s,|�|�xJ|jdkrv|��|jdkrLPt||d�}t|tj�rfq.|�|�d}q.W|s�t�|�}n$t|�dkr�|d}ntj	||d�}|jdkr�t|tj
�r�|jjr�|jj
dkr�|�d	|�|�d
�|S)N)r�r�)rErGFrr)r��cdefz@The 'cdef' keyword is only allowed in Cython files (pyx/pxi/pxd)z%Syntax error in simple statement list)rrLr�rr�rHr@rBr�r�r�rcr�rEr
r�)rCr.r�r�rLr�r+r+r,�p_simple_statement_listXs2





rcCs|j}d|_t|�}||_|S)Nr)r(r�)rC�oldrcr+r+r,�p_compile_time_expr{s
rcCsd|��}|j}|��t|�}|�d�t|�}|jrL|�|�}|�||�|j	ddd�t
�|�S)Nr�zExpected a newlineT)r�)rKr)rBrFr_rr��compile_time_value�declarer�rr�)rCrL�denvrErcr�r+r+r,�p_DEF_statement�s

rc	Cs�|��}|j}|}|j}d}xL|��t|�}|o>t|�|��|_t||�}|jrZ|}d}|jdkrPqW|jdkr�|��||_t||�}|r�|}|s�t	�
|�}||_|S)NrZELIF�ELSE)rKr�r)rBrr0rr�r@rr�)	rCr.rLZ
saved_evalZcurrent_evalrr}rcr{r+r+r,�p_IF_statement�s2




r
c	Cs�|j}d}|jdkr2|jdkr(|�d�t||�S|jdkrDt|�S|jdkrXt||�S|jdkr�|jdkrv|�d�|j|_t|�}|js�|jd	kr�|jd
kr�|j	dkr�q�|�d�n|jd
kr�|r�t
|dd�Sd}|jdkr�d}|��n|jdk�r
d}d}|��|�r�|jdk�r&|�d�|j|_t|||d��}|dk	�r�t
jt
jt
jf}|j�rp|t
jt
jf7}t||��s�|�d�||_|S|j�r�|jddd��n|jdk�r�d|jk�r�|jdk�r�|�d�|j|_t||�S|jdk�r|jdk�r|�d�t||�S|jd k�rB|jdk�r8|�d!�t||�S|jd"k�rn|jd
k�rn|j	d#k�rnt|�S|jd
k�r�|jd#k�r�t
|d$d�S|jd%k�r�t|�}|dk	�r�|S|�d&�|jd'k�r�t|�S|jd(k�r�t|�S|jd)k�r�t|�S|jd*k�rt|�S|jd+k�r"t|�S|jdk�rB|��t |||�S|jd
k�r�|j	dk�r�|j	}|��|jdk�r�t |||�S|�r�|�d�|�!d
|�t"|||d,�SdS)-N�ctypedef)r��
module_pxdz#ctypedef statement not allowed hereZDEFZIFr�)r�r��c_classr��propertyr�c_class_pxdr%zdecorator not allowed here)r�r�cpdefr�r?r�z7Decorators can only be followed by functions or classesr�r)r�rrr)r�rr�r
rzcdef statement not allowed here)r9z%'api' not allowed with this statementF)r�r�r�rzdef statement not allowed herer�)r�r�r�r%z!class definition not allowed here�includez"include statement not allowed herer
rT)rrz%Executable statement not allowed hererg�whiler��tryr�)r�)#r6r@r4r
�p_ctypedef_statementrr
�p_decoratorsr=rAr�rB�p_cdef_statementr�CFuncDefNode�CVarDefNode�
CClassDefNode�CStructOrUnionDefNode�CEnumDefNoder�r�r8r��p_class_statementr��p_property_decl�p_ignorable_statementr�r�r�r�r�r��put_backr)	rCr.r�r6r�r9r��tupZ
ident_namer+r+r,�p_statement�s�




















$


r!cCsz|��}g}x8|jdkrDt|||d�}t|tj�r4q|�|�d}qW|sTt�|�St|�dkrh|dStj||d�SdS)N)�DEDENTrG)r�Frr)r�)	rKr@r!r�rr�rHr�r�)rCr.r�rLr�r�r+r+r,r�	s

r�cCst||dd�dS)NF)�
with_doc_onlyr)�p_suite_with_docstring)rCr.r+r+r,r�#	sr�cCs�|�d�d}|jdkrH|��|��|r4t|�}t||�}|��n@|jr\|jddd�|j	dkrrt
||�}nt|�}|jddd	�|s�t
|�\}}||fS)
NrXrEz%'api' not allowed with this statementF)r�)r�r�r�r%zSyntax error in declarationsT)r�)r_r@rBr��p_doc_stringr�r�r8r
r4rr�r��_extract_docstring)rCr.r#�docr{r+r+r,r$'	s$




r$c
Cs�g}g}d}�xv|j|k�r�|jdks0|jdkr>|jddd�d}|jdkr�|��ddkr�|j}|��|��t|�r�t|�}n.t||d	�}	t|d
d�}
t	j
|	j|	|
d�}d
}tj
|j|d�}|�||f�d
}npt|�r�t|�}n.t||d	�}	t|d
d�}
t	j
|	j|	|
d�}d
}|�|�|d
7}t|�dk�rF|jd|jd�|jdk�rz|j|k�rx|�rx|�dd�|��P|��qW||fS)z�
    Parses positional and keyword arguments. end_sy_set
    should contain any s.sy that terminate the argument list.
    Argument expansion (* and **) are not allowed.

    Returns: (positional_args, keyword_args)
    rrzz**z$Argument expansion not allowed here.F)r�r?r�)r<r)r�)r�r�T)r�z%Non-keyword arg following keyword arg)rLrGzUnmatched %sz or )r@r
r�rArBr�r`r�r�r�CComplexBaseTypeNoderLrr�rHr�r=)
rCZ
end_sy_setr<r�r�Zpos_idxZparsed_type�identr�r�r�Zkeyword_nodeZwas_keywordr+r+r,�p_positional_and_keyword_args>	sP





r*cCs*|jdkrt||d�St||||d�SdS)Nr�)r<)�nonemptyr<)r@�p_c_complex_base_type�p_c_simple_base_type)rC�	self_flagr+r<r+r+r,r�v	s
r�cCs.|jdkr&|jtkr&|j}|��|SdSdS)Nr?r)r@rA�calling_convention_wordsrB)rCr}r+r+r,�p_calling_convention~	s
r0Z	__stdcallZ__cdeclZ
__fastcallcCs�|��}|��t||d�}t|dd�}tj|||d�}|jdkr�|g}xP|jdkr�|��|jdkrhPt||d�}t|dd�}|�tj|||d��qJWtj||d�}|�	d�|jdkr�t
|�r�t||�}nt|||�}|S)	N)r<T)r�)r�r�rGr�)�
componentsr�)
rKrBr�r�rr(r@rHZCTupleBaseTypeNoder_�is_memoryviewslice_access�p_memoryviewslice_access�p_buffer_or_template)rCr<rLr�r��	type_noder1r+r+r,r,�	s.



r,c
Cs�d}d}d}d}g}|��}	|jdks6t|	d|j�|jdkr�|��t||||d�}
t|
tj�rztj	|	|
j
d�|
_
|
Stj	|	|
d�St|��r$d}|jdkr�|jtkr�t|j\}}|j}|��n4t
|�\}}|jdkr�|jtkr�|j}|��nd}|jdk�r$|jd	k�r$d}|���nt|��rl|j}|��x�|jd
k�rh|�|�|��t|�}�q>Wn�|j}|��|�r$|jdk�r$|jdk�r|��|jdk�s�|jd
k�s�|jdk�s�|jdk�r�|jtk�r�|�dd�n|�dd�|�d|�d}n|jdk�r$|�d|�d}tj|	||||||||d�	}|jdk�rnt|��rbt||�}nt|||�}|jd
k�r�|��t|�}tj|	||d�}|S)Nrrr?z"Expected an identifier, found '%s'�const)r.r+r<)r�r1r3r�r�rzz**r�)rzz**r�r�)rE�module_path�is_basic_c_type�signedr3r%�is_self_argr<r�)r�rE)rKr@r
rArBr�r�rr�r�r��looking_at_base_type�special_basic_c_types�p_sign_and_longness�basic_c_type_names�looking_at_dotted_namerHrFr/r�CSimpleBaseTypeNoder2r3r4ZCNestedBaseTypeNode)
rCr.r+r<Zis_basicr9r%r3r7rLr�rEr5r+r+r,r-�	s�






$

r-cCsn|��}|��t|d|�\}}|�d�|jdkr@t|||�}tj|dd�|D�d�}tj	||||d�}|S)N)r�r�r�cSs"g|]\}}tj|j||d��qS))rLr�r�)rr�rL)r�r�r�r+r+r,r�	
sz(p_buffer_or_template.<locals>.<listcomp>)r�)r�r�r�)
rKrBr*r_r@r4rr�rr�)rCr�r<rLr�r�r�r}r+r+r,r4�	s

r4cCsV|r|s|S|s4|r4t|�r&t||�St||d�Sn|sR|sRt|�rNt||�S|SdS)N)r2r3r4)rCr�r+r�r+r+r,�p_bracketed_base_type
s

rAcCs�|j|jfg}|��d}|jdkr*d}n2|jdkr\|�|j|jf�|��|jdkr\d}x |ddd�D]}|j|�qlW|S)NFrXTrr�)r@rArBrHr)rC�saved�retval�svr+r+r,r2'
s


r2cCsh|��}|��t|�\}}x"|D]}t|�dkr"|�d�q"W|�d�t||�}tj|||d�}|S)Nr"zDAn axis specification in memoryview declaration does not have a ':'.r�)r��axes)	rKrBr�r�r
r_r�rr�)rCr�rLr�r�r�r�r}r+r+r,r3<
s


r3cCs|jdko|jtkS)Nr?)r@rAr/)rCr+r+r,�looking_at_nameL
srFcCsN|jtkrdS|jdk�rFd}|j}g}|��x,|jdkr\|��|�|j�|�d�q2W|j|jf}|jdkrzd}n�|jdks�|jdkr�|��|jdk}|j|�nN|jdkr�|��|jdk}|j|�n&|jd	kr�|��|jd
k}|j|�|��x&|D]}|�d|�|�dd��qW|�d|�|�oD|dSdSdS)NFr?r�Trzz**)r�r�r�r�r�r)rA�base_type_start_wordsr@rBrHr_r�reverse)rC�is_typerEZdotted_pathrB�pr+r+r,r�O
sB








r�cCs|jdko|jtkS)Nr?)r@rArG)rCr+r+r,r;w
sr;cCs:|jdkr2|j}|��|jdk}|�d|�|SdSdS)Nr?r�r)r@rArBr)rCrEr}r+r+r,r?{
s

r?cCs,|j|jf}t|�dk}|s(|\|_|_|S)zSee if we're looking at a.b.c(r�)�
start_lineZ	start_colr�)rCrKr}r+r+r,�looking_at_call�
s
rL�void�charr1r2�double�bint)rr)r"r)rr)�
Py_UNICODE�Py_UCS4Z	Py_hash_t�
Py_ssize_tZssize_t�size_tZ	ptrdiff_t�Py_tss_t�shortr6r9r$�enum�packedcCstd}d}xb|jdkrj|jtkrj|jdkr.d}n2|jdkr>d}n"|jdkrNd}n|jd	kr`|d7}|��q
W||fS)
Nrrr?r$r9r"rVr�r6)r@rA�sign_and_longness_wordsrB)rCr9r%r+r+r,r=�
s



r=cCs,t|d�}|dk	r$t|�}|j|_nd}|S)Nr)r?rr<r�)rC�literal�cnamer+r+r,�p_opt_cname�
s

r\c	Cs|��}|jdkrx|��|jdks,t|�rVtj||j�d�dd�}	t||||	|�}
q�t	||||||dd�}
|�
d�nt|||||||�}
|s�|
jr�|jdkr�t
|��d|
j�xH|jdkr�|��}|jd	kr�t||
�}
n|��t||||
|�}
d
}q�W|
S)Nr�r�r)rEr[r)r�rI�cmethod_flagr+�calling_convention_allowedz&%s on something that is not a function)r�r�r�r)rKr@rBrFr�CNameDeclaratorNoderRr��p_c_func_declaratorr�r_�p_c_simple_declarator�calling_conventionr
�p_c_array_declarator)rCr.r�rIr]�
assignabler+r^rLr�r}r+r+r,r��
s0




r�cCsB|��}|��|jdkr$t|�}nd}|�d�tj|||d�S)Nr�)r�Z	dimension)rKrBr@r�r_rZCArrayDeclaratorNode)rCr�rLZdimr+r+r,rc�
s


rcc
Csbt|||dd�}t|�}|�d�t|�}t|�\}}	t|�}
tj||||||	|pZ|jpZ|
|
d�S)Nr)r]�nonempty_declaratorsr�)r�r[Zhas_varargsZexception_valueZexception_checkr:�with_gil)	�p_c_arg_list�p_optional_ellipsisr_�p_nogil�p_exception_value_clause�
p_with_gilrZCFuncDeclaratorNoder:)rCrLr.r�r]r[Zellipsisr:�exc_val�	exc_checkrfr+r+r,r`�
s
r`r�r�rzrOr�z++z--r�r�r�r�z<<z>>rGz[]z()rhr0c	Cs�|��}t|�}|jdkr�|��|jdkrb|��}	|��t|||||||d�}
tj|	|
d�}nt|||||||d�}tj||d�}�nZ|jdkr�|��t|||||||d�}tj|tj||d�d�}�n|jdk�r
|��t|||||||d�}tj	||d�}�n�d}
|jdk�rr|j}|�r4t
|��d�|��t|�}|d	k�r�|jd
k�r�|�r�|��t|�}
n|�r�t
|��d�d}d}|dk�r�|j
dk	�r�|�r�|j
d
|}|d	k�r�|jdk�r�|�r�|j}dd�|D��r�|��|dk�r|�d�d}n`|dk�r&|�d�d}nF|dk�rN|j|k�rN|d9}|��n|jd
k�rl||j7}|��|tk�r�|j
d|dd�||7}n@|dk�r�|j}|tk�r�|j
d|dd�|d|}|��tj||||
d�}||_|S)Nrzr6)r�rIr]rdr+)r�z**r�r?zDeclarator should be emptyrsr�zEmpty declaratorrz::�externcSsg|]}|dkrd�qS)z+-*/<=>!%&|([^~,rr+)r�rr+r+r,r�=sz)p_c_simple_declarator.<locals>.<listcomp>r�r�z()r�r�z[])r�r�r�r�r"z,Overloading operator '%s' not yet supported.F)r�� )rEr[�default)rKr0r@rBrAr�rZCConstDeclaratorNodeZCPtrDeclaratorNodeZCReferenceDeclaratorNoder
r\r`r;r5r_�supported_overloaded_operatorsr_rb)rCr.r�rIr]rdr+rLrbZ	const_posZ
const_baser�r}r�rEr[rMr+r+r,ras�





















racCs(|jdkr |jdkr |��dSdSdS)Nr?r:rr)r@rArB)rCr+r+r,ri\sricCs(|jdkr |��|�d�dSdSdS)Nr�r�rr)r@rBZexpect_keyword)rCr+r+r,rkcs


rkcCs�d}d}|jdkr�|��|jdkr2d}|��nX|jdkrld}|��|jdkr�|j}|��t||�}n|jdkr�d}|��t|�}||fS)Nrr�rzrr�r?r�)r@rBrArr`)rCrlrmrEr+r+r,rjks&





rjz**r�c	CsPg}|}xB|jtkrJ|�t|||||||d��|jdkr<P|��d}q
W|S)N)r+�kw_onlyrZrGr)r@�c_arg_list_terminatorsrH�p_c_arg_declrB)	rCr.�	in_pyfuncr]rerrrZr[r:r+r+r,rg�s

rgcCs|jdkrt|�dSdSdS)Nr�rr)r@r�)rCr+r+r,rh�s
rhcCsb|��}d}}	d}
d}|jr<tj|dgdddd|dd�	}nt|||d�}t|||d�}
|jdkr�|js�|j}|��|jdkr�|jdkr�|��n
|�	d�|s�t	|d|�|d	k}	|d
k}|r�|jdkr�|��t
|�}|jdk�rH|��d
|jk�r@|jdk�rt�
|�}
|��n d|jk�r4t
|�}
n
t	|d�nt
|�}
tj|||
||	|
||d�S)Nr)rEr7r8r9r3r%r:r<)r+)rprkr?r
zExpected 'None'z*'%s None' only allowed in Python functionsrkrprXr�r�)rzr��inlinez;default values cannot be specified in pxd files, use ? or *)r�r��not_none�or_nonerpr�rr)rKr�rr@r�r�r@rBrAr
r`r4rr��	modifiersZCArgDeclNode)rCr.rur]r+rrrZrLrwrxrpr�r�r�r r+r+r,rt�sV




rtcCs(|jdkr |jdkr |��dSdSdS)Nr?r8rr)r@rArB)rCr+r+r,�p_api�srzcCs�|��}t||j�|_|jp"t|�|_|jrF|jdkrFt|d|j�|jdkrf|jdkrft|||�S|jdkr�|��t|||�St	|�r�d|_
|jr�t|d�t||�S|jdkr�|jr�t|d�t||�S|jd	k�r|j
d
kr�t|d�|j�rt|d�t|||�S|jd
k�r2|jdk�r2t|||�S|jd
k�r�|jtk�r�|j
d
k�r`t|d�|j�r~|jdk�r~t|d�t|||�S|jd
k�r�|jdk�r�t|||�St|||�SdS)N)r&�publiczCannot combine 'api' with '%s'rnr�r�rz$cdef blocks cannot be declared cpdefrXr�)r�rz*Extension type definition not allowed herez(Extension types cannot be declared cpdefr?r�z/C struct/union/enum definition not allowed hererWz'C struct/union cannot be declared cpdef�fused)rK�p_visibilityr5r8rzr
r@�p_cdef_extern_blockrBrir:r9�p_cdef_blockr4�p_c_class_definitionrA�p_cpp_class_definition�struct_enum_union�
p_struct_enum�p_fused_definitionr�)rCr.rLr+r+r,r�sL











rcCst||dd��S)Nr)r6)r�)rCr.r+r+r,r�srcCs�|jrt|d�d}|�d�|jdkr2|��nt|d�d}|ddd�}|jd	krn|��t|d�d|_t|�r|d|_	t
||d
�\}}tj|||||jd�S)Nz+cdef extern blocks cannot be declared cpdefr�rzrr"rrn)r6r5r;T)�include_file�verbatim_includer{r;)
r9r
r_r@rBr:rAr;rir:r$rZCDefExternNode)rCrLr.r�r�r{r+r+r,r~s&




r~cCs�|��|jdkrJ|j}|��t|�}|dkrR|jdk	rR|jd|}nd}d}d}|�d�g}|jdkr|t|||�n4|��|��x|jdkr�t|||�q�W|��t	j
|||||j|j|j
|j|jdkd�	S)Nr?z::rXrE)r"rGr)rEr[r�r7r5Zcreate_wrapperr8�in_pxd)rBr@rAr\r;r_�
p_c_enum_liner�r�rrr7r5r9r8r4)rCrLr.rEr[r�r+r+r,�p_c_enum_definitions0


r�cCs^|jdkrHt|||�x8|jdkrD|��|jdkr6Pt|||�qWn|��|�d�dS)Nr�rG)rErGzSyntax error in enum item list)r@�
p_c_enum_itemrBr�)rCr.r�r+r+r,r�7s

r�cCsr|��}t|�}t|�}|dkr8|jdk	r8|jd|}d}|jdkrV|��t|�}|�tj	||||d��dS)Nz::r�)rEr[r�)
rKrFr\r;r@rBr`rHrZCEnumDefItemNode)rCr.r�rLrEr[r�r+r+r,r�Cs

r�c	Cs*d}|jdkr8d}|��|jdks.|jdkr8|�d�|j}|��t|�}t|�}|dkrv|jdk	rv|jd|}d}|jdkr�|��|�d�|��g}t	�}xB|jd	kr�|jd
kr�|�
t||��|��q�|��|�
d�q�W|��n
|�
d�tj||||||j|j|j|jd
k|d�
S)NFrXTr?r�z::rXrEr"r�zExpected a newlinez*Syntax error in struct or union definitionr)	rEr[r �
attributesr7r5r8r�rX)rArBr@ZexpectedrFr\r;r_r�r$rHr�rKr�r�rrr7r5r8r4)	rCrLr.rXr rEr[r�r�r+r+r,�p_c_struct_or_union_definitionPs>






r�cCs�|jdkrt|d�|��t|�}|�d�|��|��g}x8|jdkrz|jdkrh|�t	|��n|��|��qDW|�
�|s�t|d�tj|||d�S)z5
    c(type)def fused my_fused_type:
        ...
    )r�rz&Fused type definition not allowed hererXr"r�zNeed at least one type)rE�types)
r4r
rBrFr_r�r�r@rHr�r�rZ
FusedTypeNode)rCrLr.rEr�r+r+r,r�ts"




r�cCs&|jdkrt|||�St|||�SdS)NrW)rAr�r�)rCrLr.r+r+r,r��s
r�cCsX|��}|}|jdkrT|jdkrT|j}|dkrL||krL|jd||fdd�|��|S)Nr?)rnr{�readonlyr&z,Conflicting visibility options '%s' and '%s'F)r�)rKr@rAr
rB)rCZprev_visibilityrLr5r+r+r,r}�sr}cCs4|jdkr0|jdkr0|j}|��|gt|�SgS)Nr?)rv)r@rArB�
p_c_modifiers)rC�modifierr+r+r,r��s
r�c
Cs�|jdk}t|�}t|d|jd�}t|||d�|ddd�}|j|_|jdkrn|jdkrn|jdkrn|��d}nd	}|jd
kr�|jdkr�|js�|�	d�t
|td
d��\}}	tj
||j|||	|||j|j|d�
}
n�|r�||_|g}xB|jdk�r"|��|jdk�rPt|||ddd�}|�|�q�W|jd}|jddd�|jdk�r^|j|k�r^t|�}nd}tj||j|||jdk||j||jd�	}
|
S)N)r
rr)r+r<)ry)r]rdr+r?r6�	cpp_classrrX)r�r
rrr�z&C function definition not allowed herer�)r4)	r5r�r�r{r'ryr8r9�is_const_methodrGrEz&Syntax error in C variable declarationT)r�)rr)r5r��declaratorsr�r'r8ryr9)r4r�r�r<r�r9r@rArBr
r$r$rrr5r8r�rHrKr�r%r)
rCrLr.r]ryr�r�r�r'Zsuiter}r�Zdoc_liner+r+r,r��sb








r�cCs�|��}|��t||j�}t|�}|d|d�}|r:d|_|jdkrPt|||�S|jdkrp|jt	krpt
|||�S|jdkr�|jdkr�t|||�St|dd�}t
||ddd�}|jdd	d
�tj||||||jdkd�SdS)
Nr)r7r5r�r?r|)r+)rIr+z"Syntax error in ctypedef statementT)r�r)r�r�r5r8r�)rKrBr}r5rzr8r@r�rAr�r�r�r�r�r�rZCTypeDefNoder4)rCr.rLr5r8r�r�r+r+r,r�s*
rcCs�g}x�|jdkr�|��}|��t|dd�d}|�d�}tj||j�|d�d�}x,|dd�D]}tj	||j�|�|d�}qbW|jd	kr�t
||�}|�tj
||d
��|�d�qW|S)Nr�r)r�r"r�)rEr)r�r�r�)�	decoratorz"Expected a newline after decorator)r@rKrBr��splitrr+rRr�r�r�rHrZ
DecoratorNoder�)rCr�rLZ	decstringrIr�rEr+r+r,r�s


rcCs�|��}|r|��|��t|�}|�d�t|dd�\}}}|�d�t|�r\t|d�d}|jdkrz|��t	|�}t
|tdd��\}	}
|r�|��t
j||||||	|
|||d�
S)	Nr�r�)rYz(Python function cannot be declared nogilz->r�)r4)	rEr[r\r]r'r{r�r��return_type_annotation)rKZenter_asyncrBrFr_r^rir
r@r`r$r$Z
exit_asyncrZDefNode)rCr�r�rLrEr[r\r]r�r'r{r+r+r,r�
s*




r�c	Cs�t|dd|d�}d}d}|jdkr�|��|jdkr@t||d�}|jdkrl|��|�t|ddd|d��n|j|kr�|�d�|jd	kr�|��t||d�}|jdkr�|��|||fS)
Nr)rurerZrzr?)rZrG)rurerrrZz-Syntax error in Python function argument listz**)rgr@rB�
p_py_arg_declr�r
)rCrYrZr[r\r]r+r+r,r^-
s(







r^cCsB|��}t|�}d}|r2|jdkr2|��t|�}tj|||d�S)NrX)rEr�)rKrFr@rBr`rZ
PyArgDeclNode)rCrZrLrEr�r+r+r,r�C
sr�c

Cs�|��}|��tt|��}|j|_d}d}|jdkrVt|dd�\}}t|||�\}}|dkrlt	j
|gd�}t|tdd��\}}	t
j||||||	||jjdkd�S)	Nr�F)r�)r[r�)r4r#)rE�basesr�r'r{r�Zforce_py3_semantics)rKrBrrFr<r�r@r�r�rr�r$r$rZPyClassDefNoderRr&)
rCr�rL�
class_namer�r�r�r�r'r{r+r+r,rM
s$
rcCs:|��g}t|�}x(|jdkr<|��|�|�t|�}qW|rV|jdkrVt|d�|r�|jdkr�|jdkr�|��t|�}n|}d}d}d}|jdkr�t|dd�\}	}
|
r�|�d	�t||	|
�\}}|dkr�t	j
|gd
�}|jdk�r|jdk�r|j�st|��d
�t
|�\}}|jdk�rP|jdk�r6d}nd}t|t|d��\}
}n|�d�d}
d}|jdk�r�|�s~t|d�|�rt|d�nt|jdk�r�|�s�t|d�|�st|d�nF|jdk�r�|j�r|�s�t|d�|�st|d�nt|d|j�tj||j|j|jd�|�||||||jdk|
|d�
S)Nr�rnz6Qualified class name only allowed for 'extern' C classr?r�r�F)r�z$C classes cannot take keyword bases.)r[r�)r{rnzBName options only allowed for 'public', 'api', or 'extern' C classrXrrr
)r4z"Syntax error in C class definitionz)Module name required for 'extern' C classz?Type object name specification not allowed for 'extern' C classr{z>Object struct name specification required for 'public' C classz<Type object name specification required for 'public' C classr&z;Object struct name specification required for 'api' C classz9Type object name specification required for 'api' C classzInvalid class visibility '%s')r5r7r8r�r�r�r��objstruct_name�typeobj_namer�r'r{)rBrFr@rHr5r
rAr�r�rr�r8rK�p_c_class_optionsr4r$r$r�rrr7r=)rCrLr.r7r�r�r�r�r�r�r�r�Z
body_levelr'r{r+r+r,r�d
s�








r�cCs�d}d}|�d�xZ|jdkr P|jdkr<|��t|�}n|jdkrV|��t|�}|jdkrbP|��qW|�dd�||fS)Nr�r?�objectrrrGr�zExpected 'object' or 'type')r_r@rArBrF)rCr�r�r+r+r,r��
s"





r�cCsB|��}|��t|�}t|tdd�dd�\}}tj||||d�S)Nr)r4T)r#)rEr'r{)rKrBrFr$r$rZPropertyNode)rCrLrEr'r{r+r+r,r�
srcCs:|jdkr6|��}t|�}|jddd�tj||d�SdS)zO
    Parses any kind of ignorable statement that is allowed in .pxd files.
    rzSyntax error in stringT)r�)rcN)r@rKr�r�rr�)rCrLZstring_noder+r+r,r�
s
rcCsP|jdkrH|��}t|�\}}}|jddd�|dkr:|St|d�|SdSdS)NrzSyntax error in doc stringT)r�)rrz2Python 3 requires docstrings to be unicode strings)r@rKrr�r)rCrLr Zbytes_resultZunicode_resultr+r+r,r%�
s

r%cCs�d}|dkrnpt|tj�r:|jjr~|j}tj|jgd�}nDt|tj�r~|jr~|j}t|dtj�r~|djjr~|dj}|d=|dkr�d}nHt|tj	�r�t
|jd�|j}n(t|tj�r�|j
}|dkr�|j}n|j}||fS)z�
    Extract a docstring from a statement or from the first statement
    in a list.  Remove the statement if found.  Return a tuple
    (plain-docstring or None, node).
    N)r�rz2Python 3 requires docstrings to be unicode strings)r�rr�rcZis_string_literalr�rLr�rrrr�rr)r�Zdoc_noder�r'r+r+r,r&�
s2
r&cCs@t|||d�dd�}|jdkr<|�dt|j�t|j�f�|S)N)r4r)r�rGz!Syntax error in statement [%s,%s])r�r@r
r.rA)rCr4r.r{r+r+r,�p_codes

r�z$^#\s*cython\s*:\s*((\w|[.])+\s*=.*)$c
Cs�i}x�|jdkr�t|j�}|r||�d���}y|�tj|dd��Wn6tk
rz}z|j	|j
ddd�Wdd}~XYnX|��qW|S)NZcommentlinerT)Zignore_unknownrF)r�)r@�!_match_compiler_directive_commentrArbrmr(rZparse_directive_list�
ValueErrorr
r[rB)rCr}�m�
directives�er+r+r,�p_compiler_directive_commentss
&r�c	Cs�|��}t|�}d|_d|kr.|j�|d�t|�}|r@d}nd}t|||d�dd�}|jdkr�|�d	t	|j�t	|j
�f�t|||||d
�S)NFr&rr�)r4r)r�rGz!Syntax error in statement [%s,%s])r'r{�full_module_name�directive_comments)rKr�r�rRZset_language_levelr%r�r@r
r.rAr)	rCr�r�r.rLr�r'r4r{r+r+r,�p_modules 
r�cCs8t|�}|jdkr,|�d�|�d�d}nd}||fS)Nr�rzFT)rFr@r_)rCrE�requiredr+r+r,�p_template_definition5s


r�c
Cs�|��g}t|�}t|�}|dkr<|jdk	r<|jd|}|jdkrPt|d�|jdkr�|��t|�g}x$|jdkr�|��|�t|��qnW|�d�dd�|D�}nd}d}|jd	k�r|��t	||d
�g}x(|jdkr�|��|�t	||d
��q�W|�d�ng}|jdk�r*t|�
�d�t|�}	|jd
k�r�|��|�d�|��g}
t
|jd|	�pn|jd�}||_xB|jdk�r�|jdk�r�|
�t||��n|��|�d��q|W|��nd}
|�d�tj|||||j|jdk|
|d�S)Nz::r�z*Qualified class name not allowed C++ classr�rGr�cSsg|]\}}|�qSr+r+)r�rEr�r+r+r,r�Psz*p_cpp_class_definition.<locals>.<listcomp>r�)r<r�z&Name options not allowed for C++ classrXrEr�)r5r4r:r"r�zExpected a newlinez$Syntax error in C++ class definitionr)rEr[�base_classesr5r�r�r<)rBrFr\r;r@r
r�rHr_r�rKrir�r$r5r:r<�p_cpp_class_attributer�r�rZCppClassNoder4)rCrLr.r7r�r[r<Ztemplate_namesr�r:r�r�r+r+r,r�?sh







r�cCs�d}|jdkrt|�}|jdkr0t||��|�S|jdkrDt||�S|jdkr�|jtkr�|jdkrrt||��|�St||��|�Sn\t||��|�}|dk	r�t	j
t	jt	jf}|j
r�|t	jt	jf7}t||�s�|�d�||_|SdS)Nr�r�rr?rWz7Decorators can only be followed by functions or classes)r@rrAr�rKrr�r�r�rrrrr=rrr�r
r�)rCr.r�r�r r+r+r,r�zs(






r�c
Cs�d|}|�rl|�|�|r*|�d|�t|�}|tkr�|�d|d|df�x*tdt|��D]}t||||d�qdW|�d|�dSt|tj��ry
|j	}Wnt
k
r�|jj}YnX|�d||j
f�x8|j��D]*\}}	|d	kr�|d
kr�t||	|d|�q�WdS|tk�rl|�d�x*tt|��D]}t||||d��q<W|�d|�dS|�d
||f�dS)Nz  z%s: z	(%s @ %s
rrr"z%s)
z%s @ %s
�tagrLz[
z%s]
z%s%s
)�writerrr��ranger��print_parse_treer�r�Noder�r�r8r1rLr'r�r�)
r	r�r4r��ind�trnr�rEr�r+r+r,r��s:



r�)r>)T)T)NN)r)N)N)N)r)r)F)TF)TF)F)r)r)r)r)F)N)rrN)N)N)rrrr)NF)r�r)r)N)�r�r�cythonrr�rP�iorrr�unicodedatarr	rr
�	functoolsrrZScanningr rr!rrrrrrrrrrZErrorsr
rrrr�version_infor�
maxunicoderr$rFrJrNrWrdrer`rarjrlrmrorrr{rurxrwr;rvr|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�rrr*rr?rBr:rLrrrMrcrr|rvrzrrr�rxr�r�rr�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�rr�r�r�r�r�r�r�r�r�r�r�r�rrrrr
r!r�r�r$r*r�r0r/r,r-r4rAr2r3rFr�r;r?rLr>r�r<rYrGr�r=r\r�rcr`rqrarirkrjrsrgrhrtrzrrr~r�r�r�r�r�r�r}r�r�rrr�r^r�rr�r�rrr%r&r�r\r^r�r�r�r�r�r�r�r+r+r+r,�<module>s�



	3*

? 
),d.0z	n
	/
$Q

+		"#f8	Q(
$	
!
$V 3)
$"8
I	
#

;