Your IP : 216.73.216.213


Current Path : /opt/alt/python35/lib64/python3.5/site-packages/Cython/Compiler/__pycache__/
Upload File :
Current File : //opt/alt/python35/lib64/python3.5/site-packages/Cython/Compiler/__pycache__/Parsing.cpython-35.pyc



Z��Z���3@s$
ddlmZddlZejdedededededed	ed
ededed
edededededededededededededejdej�ddlmZddlZddl	Z	ddl
mZm
ZddlmZmZdd lmZmZmZdd!lmZdd"lmZdd#lmZdd$lmZdd%lmZmZmZmZdd&lmZdd'l m!Z!m"Z"d(d)lm#Z#dd*lm$Z$dd+lm%Z%e	j&dd,kZ'e	j(d-kZ)Gd.d/�d/e�Z*d0d1d2�Z+d3d4�Z,d5d6�Z-d7d8�Z.d9d:d;�Z/d<d=�Z0d>d?�Z1d@dA�Z2dBdC�Z3dDdE�Z4dFdG�Z5dHdI�Z6dJdK�Z7dLdM�Z8dNdO�Z9dPdQ�Z:dRdS�Z;eje<e<dTdUdVdWdXdYdZd[d\d]g
��Z=d^d_�Z>d`da�Z?dbdc�Z@ddde�ZAdfdg�ZBdhdi�ZCdjdk�ZDdldm�ZEdndo�ZFdpdq�ZGdrds�ZHdtdu�ZIdvdw�ZJdxdy�ZKdzd{�ZLd|d}�ZMd9d~d�ZNd�d��ZOd�d��ZPd�d��ZQd�d��ZRd�d��ZSd�d��ZTd�d��ZUd�d��ZVddd�d��ZWd�d��ZXd�d��ZYd�d��ZZd�d��Z[d�d��Z\d�d�d��Z]d�d��Z^dd�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��Zjdd�d��Zkdd�d��Zld�d��Zmd�d��Znd�d��Zod�d��Zpeje<e<d�d�d�d�d�d�g��Zqd�d��Zrd�d��Zsd�d��Ztd�d��Zud�d��Zvd�d��Zwdd�d��Zxd�d��Zyd�d��Zzd�d��Z{d�d��Z|d�d��Z}dd�d��Z~eje<e<d�d�d�g��Zd�d��Z�d�d��Z�d�d��Z�d�d��Z�eje<e<d�d�d�g��Z�d�d��Z�d�d��Z�d�d��Z�d�d��Z�d�d�d��Z�d9d�d�d��Z�d�d��Z�d�d�Z�eje<e<dTdXdUdWg��Z�dd�Z�dd�Z�d9d�dd�Z�dd�Z�d	d
�Z�dd�Z�d
d�Z�d�dd�Z�dd�Z�ddd�Z�ddd�Z�dd�Z�dd�Z�dd�Z�ddd�Z�ddd �Z�e*�d!d"�Z�d�d#d$�Z�dd%d&�Z�dddd'd(�Z�d)d*�Z�eje<e<d+d,d-g��Z�dd.d/�Z�dd0d1�Z�d2d3�Z�d4d5�Z�d6d7�Z�d8d9�Z�d:d;�Z�d<d=�Z�d>d?�Z�d@dA�Z�dBdC�Z�eje<e<dDdEdFdGdHdIg��Z�eje�dJd�dKd�dLd�dMd�dNd�dOd�dPd�dQd�i�Z�eje<e<dRdSdTdUg��Z�eje<e�e�Be<e��B�Z�eje<e<d�d�dVdWg��Z�dXdY�Z�dZd[�Z�e*�ddddddd\d]�Z�d^d_�Z�d`da�Z�eje<e<dbdcdddedfdgdhdidjdkdldmdndodVdZdWdUdXdTdpdqdrd�dsg��Z�dtdu�Z�dvdw�Z�dxdy�Z�dzd{�Z�eje<e<ddd|d}d�d�g��Z�e*�dddddd~d�Z�d�d��Z�ddddd�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�d�d��Z�d�d��Z�d�d��Z�d�d��Z�d�d��Z�d�d��Z�dd�d�d��Z�d�dd�d��Z�dd�d��Z�d�d��Z�d�d��Z�d�d��Z�d�d��Z�d�d��Z�d�d��Z�d�d��Z�de*d�d��Z�ejeej�d��j��Z�d�d��Z�e*d�d��Z�d�d��Z�d�d��Z�d�d��Z�dd�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|jj|�dS)N)�__dict__�update)�self�kwds�r+�J/opt/alt/python35/lib64/python3.5/site-packages/Cython/Compiler/Parsing.py�__init__5szCtx.__init__cKs3t�}|j}|j|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$(sr$zExpected an identifiercCs7|jdkr&|j}|j�|S|j|�dS)N�IDENT)�sy�systring�nextr
)�s�message�namer+r+r,�p_ident@s
	
rEcCsTg}xG|jdkrO|j|j�|j�|jdkrBP|j�q	W|S)Nr>�,)r?�appendr@rA)rB�namesr+r+r,�p_ident_listHs
rIcCs)|j�}|j}|j�||fS)N)�positionr?rA)rB�pos�opr+r+r,�p_binop_operatorXs	
rMcCs�||�}x|j|kr�t|�\}}||�}tj||||�}|dkrtj|jjkr�d|_qd|_qW|S)N�/T)	r?rMr�
binop_noder�division�context�future_directivesZtruedivision)rB�opsZ
p_sub_expr�n1rLrK�n2r+r+r,�p_binop_expr^s
rVTc
Cs�|j�}|j�|jdkr8g}d}}n!t|dddd�\}}}|jd�|r{t|�}nt|�}tj|d|d|d|d|�S)	N�:�
terminator�	annotatedF�args�star_arg�starstar_argZresult_expr)	rJrAr?�
p_varargslist�expect�p_test�
p_test_nocondrZ
LambdaNode)rB�allow_conditionalrKrZr[r\�exprr+r+r,�	p_lambdefms


rccCst|dd�S)NraF)rc)rBr+r+r,�p_lambdef_nocond�srdcCs�|jdkrt|�S|j�}t|�}|jdkr�|j�t|�}|jd�t|�}tj|d|d|d|�S|SdS)N�lambda�if�else�testZtrue_valZ	false_val)	r?rcrJ�	p_or_testrAr^r_rZCondExprNode)rBrKrbrhr%r+r+r,r_�s


r_cCs'|jdkrt|�St|�SdS)Nre)r?rdri)rBr+r+r,r`�s
r`cCst|dt�S)N�or)rj)�p_rassoc_binop_expr�
p_and_test)rBr+r+r,ri�sricCsh||�}|j|krd|j�}|j}|j�t|||�}tj||||�}|S)N)r?rJrArkrrO)rBrSZ	p_subexprrTrKrLrUr+r+r,rk�s	
rkcCst|dt�S)N�and)rm)rk�
p_not_test)rBr+r+r,rl�srlcCsL|jdkr>|j�}|j�tj|dt|��St|�SdS)N�not�operand)r?rJrArZNotNodern�p_comparison)rBrKr+r+r,rn�s

rncCs�t|�}|jtkr~|j�}t|�}t|�}tj|d|d|d|�}|jtkr~t|�|_|S)N�operatorZoperand1�operand2)	�p_starred_exprr?�comparison_opsrJ�p_cmp_oprZPrimaryCmpNode�p_cascaded_cmp�cascade)rBrTrKrLrUr+r+r,rq�srqcCs'|jdkrt|�St|�SdS)N�*)r?rtr_)rBr+r+r,�p_test_or_starred_expr�s
rzcCs\|j�}|jdkr.d}|j�nd}t|�}|rXtj||�}|S)NryTF)rJr?rA�
p_bit_exprrZStarredUnpackingNode)rBrKZstarredrbr+r+r,rt�s
rtcCsa|j�}t|�}t|�}tj|d|d|�}|jtkr]t|�|_|S)Nrrrs)	rJrvrtrZCascadedCmpNoder?rurwrx)rBrKrLrU�resultr+r+r,rw�srwcCs�|jdkr/|j�|jd�d}nW|jdkrs|j�|jdkrj|j�d}q�d}n|j}|j�|dkr�d}|S)Nro�inZnot_in�is�is_notz<>z!=)r?rAr^)rBrLr+r+r,rv�s

	

			
rv�<�>z==z>=z<=z<>z!=r}r~rocCst|dt�S)N�|)r�)rV�
p_xor_expr)rBr+r+r,r{sr{cCst|dt�S)N�^)r�)rV�
p_and_expr)rBr+r+r,r�sr�cCst|dt�S)N�&)r�)rV�p_shift_expr)rBr+r+r,r�sr�cCst|dt�S)N�<<�>>)r�r�)rV�p_arith_expr)rBr+r+r,r�sr�cCst|dt�S)N�+�-)r�r�)rV�p_term)rBr+r+r,r�sr�cCst|dt�S)Nry�@rN�%�//)ryr�rNr�r�)rV�p_factor)rBr+r+r,r�sr�cCs
t|�S)N)�	_p_factor)rBr+r+r,r� sr�cCs�|j}|d	krM|j}|j�}|j�tj||t|��S|js�|dkr�|j�}|j�t|�}tj|d|�S|dkr�t|�S|dkr�|j	dkr�t
|�St|�S)
Nr�r��~r�rpr�r>�sizeof)r�r�r�)r?rJrArZ	unop_noder��in_python_fileZ
AmpersandNode�
p_typecastr@�p_sizeof�p_power)rBr?rLrK�argr+r+r,r�$s"		
	


r�c	
Cs |j�}|j�t|�}t|tj�}t|tj�}t|tj�}|r�|r�|r�|jdkr�|j	d�t
|dd�}|jdkr�|j�d}nd}|jd�t
|�}|r�tj|d|d|�Stj|d	|d
|d|d|�S)NzUnknown type�emptyr�?rr��base_type_noderp�	base_type�
declarator�	typecheck)rJrA�
p_c_base_type�
isinstancer�MemoryViewSliceTypeNode�TemplatedTypeNode�CConstTypeNoderDr
�p_c_declaratorr?r^r�rZCythonArrayNodeZTypecastNode)	rBrKr�Zis_memsliceZis_templateZis_constr�r�rpr+r+r,r�7s0


	
r�cCs�|j�}|j�|jd�t|�rSt|�}tj|d|�}n9t|�}t|dd�}tj	|d|d|�}|jd�|S)N�(rpr�rr�r��))
rJrAr^�looking_at_exprr_rZ
SizeofVarNoder�r�ZSizeofTypeNode)rBrKrp�noder�r�r+r+r,r�Ts


r�cCs�|j�}|j�d}|jdkr;d}|j�|jdkrz|jtkrz|rkt|�n	t|�}n%|r�|jdd|dd�d}|r�tj|d|�Stj	|d|�SdS)	NF�fromTr�z''yield from' requires a source argumentrK�fatalr�)
rJrAr?�statement_terminatorsr_�
p_testlistr
rZYieldFromExprNode�
YieldExprNode)rBrKZ
is_yield_fromr�r+r+r,�p_yield_expressionhs

!
r�cCs"t|�}tj|jd|�S)Nrb)r�r�ExprStatNoderK)rBZ
yield_exprr+r+r,�p_yield_statement~sr�cCs�|jdkrJd|jkr+|jd�|j|_t||dd�S|r`|jd�nU|jdkrt|dd�S|jd	kr�|j�t|dd�S|jd
�dS)N�def�pxdzdef statement not allowed here�is_async_defTz7Decorators 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_statementrA�p_with_items)rBr.�
decoratorsr+r+r,�p_async_statement�s

r�cCs�|jdkr/|j�ddkr/t|�Sd}|jdkrZ|j�}|j�t|�}x"|jd
kr�t||�}qiW|r�tj	|d|�}|jd	kr�|j�}|j�t
|�}tj|d	||�}|S)N�newrr>�awaitr��[�.r�z**)r�r�r�)r@�peek�
p_new_exprr?rJrA�p_atom�	p_trailerrZ
AwaitExprNoder�rO)rBZ	await_posrTrKrUr+r+r,r��s"%


r�cCs>|j�}|j�t|�}t|tj|d|��S)N�cppclass)rJrAr��p_callrZNewExprNode)rBrKr�r+r+r,r��s
r�cCsw|j�}|jdkr(t||�S|jdkrDt||�S|j�t|�}tj|d|d|�SdS)Nr�r��obj�	attribute)rJr?r��p_indexrArEr�
AttributeNode)rBZnode1rKrDr+r+r,r��s


r�c
CsO|j�}|j�g}g}d}d}x�|jdkr�|jdkr�|rn|jdd|j��|j�|jt|��d}n|jdkr�|j�|jt|��d}n�t|�}|jdkr\|j�|js
|jd	d|j�|jj	|j
�}tj|jd
|�}	t|�}|j|	|f�nS|rx|jdd|j�|r�|r�|dj|�n|j|g�d}|jdkr�P|j�q1W|jdkr/|r/|r/t
|�dkr/t
|d�dkr/t||dd�gg}|jd�|pHgg|fS)NFr�ryz%Non-keyword arg following keyword argrKTz**�=z!Expected an identifier before '='�valuerrFr��asyncr���)r�r�)rJrAr?r
rGr_�is_namerKrQ�intern_ustringrDr�IdentifierStringNode�len�p_genexpr^)
rB�allow_genexprK�positional_args�keyword_argsZ
starstar_seenZlast_was_tuple_unpackr��encoded_name�keywordr+r+r,�p_call_parse_args�sV

	
	
	

(
r�c	s�d}�fdd�|D�}tttj�d�|�}|rzg}g}x�|D]�}t|t�r�|\}	}
|jtjd|	jd|	d|
��qV|j	r�|j
|j�qV|r�|jtj|djd|d	d
��g}|j|�qVW|r3|jtj|djd|d	d
��|rzt
|�dkre|dj	re|d}ntj�d|�}||fS)
NcsIg|]?}t|t�r0tj�d|�ntj�d|��qS)rZr�)r��listr�	TupleNodeZAsTupleNode)�.0r�)rKr+r,�
<listcomp>s	z,p_call_build_packed_args.<locals>.<listcomp>r�rK�keyr�r�key_value_pairs�reject_duplicatesTrr�)rrrrOr��tuplerG�DictItemNoderK�is_dict_literal�extendr��DictNoder��MergedDictNode)rKr�r��keyword_dictZ	subtuples�	arg_tuple�kwargs�
dict_items�itemr�r�r+)rKr,�p_call_build_packed_argss4

+	
r�cCs�|j�}t|�\}}|rgt|�dkrgt|dt�rgtj|d|d|d�St|||�\}}tj|d|d|d|�SdS)Nrr�functionrZr�r�)	rJr�r�r�r�rZSimpleCallNoder�ZGeneralCallNode)rBr�rKr�r�r�r�r+r+r,r�*s,r�c
Cs�|j�}|j�t|�\}}|rxt|d�dkrx|d\}}tj|d|d|d|�}nRt||�}|r�|d}	ntj|d|�}	tj|d|d|	�}|j	d�|S)	Nrr"�base�start�stoprZ�index�])
rJrA�p_subscript_listr�r�SliceIndexNode�make_slice_nodesr��	IndexNoder^)
rBr�rK�
subscripts�is_single_valuer�r�r|�indexesr�r+r+r,r�;s


r�cCshd}t|�g}xF|jdkr]d}|j�|jdkrGP|jt|��qW||fS)NTrFFr�)�p_subscriptr?rArG)rBr��itemsr+r+r,r�Os
r�cCs�|j�}t|d�}|jdkr1|gS|j�t|d�}|jdkrc||gS|j�t|d�}|||gS)NrWrFr�)rW)rWrFr�)rWrFr�)rJ�p_slice_elementr?rA)rBrKr�r��stepr+r+r,r�\s


r�cCs!|j|krt|�SdSdS)N)r?r_)rBZ
follow_setr+r+r,r�ls
r�cCs+|jd�|jd�|jd�dS)Nr�)r^)rBr+r+r,�expect_ellipsists

r�cCsWg}xJ|D]B}t|�dkr9|j|d�q
|jt||��q
W|S)Nrr)r�rG�make_slice_node)rKr�r|�	subscriptr+r+r,r�ys
r�cCs^|stj|�}|s*tj|�}|s?tj|�}tj|d|d|d|�S)Nr�r�r�)r�NoneNodeZ	SliceNode)rKr�r�r�r+r+r,r��sr�c	Cs#|j�}|j}|dkr�|j�|jdkrRtj|dg�}n*|jdkrpt|�}nt|�}|jd�|S|dkr�t|�S|dkr�t	|�S|dkr�t
|�S|dkr�t|�tj|�S|d	krt
|�S|d
kr:|j}|j�tj|d|�S|dkrv|jdd �}|j�tj|d|�S|dkrRt|�\}}}|dkr�tj|d|�S|dkr�tj|d|d|�S|dkr�tj|d|�S|dkrtj|d|�S|dkr>tj|d|d|�S|jd|�n�|dkr|j}|dkr�tj|�}n|dkr�tj|dd�}n[|dkr�tj|dd�}n7|dkr�|jr�tj|�}nt||�}|j�|S|jd�dS)!Nr�r�rZ�yieldr��{�`r��INTZFLOATr�ZIMAGr�BEGIN_STRING�c�u�bytes_value�b�f�values��
unicode_valuezinvalid string kind '%s'r>�None�TrueT�FalseF�NULLz!Expected an identifier or literalr�)rJr?rArr�r��p_testlist_compr^�p_list_maker�p_dict_or_set_maker�p_backquote_exprr��EllipsisNode�
p_int_literalr@�	FloatNode�ImagNode�p_cat_string_literalZCharNode�UnicodeNode�	BytesNode�
JoinedStrNode�
StringNoder
r�BoolNoder�ZNullNode�p_name)	rBrKr?r|r��kindr	rrDr+r+r,r��sr	







	

	
r�c
Cs�|j�}|j}|j�d}d}xK|ddkrx|ddkr[|d7}n
|d7}|dd�}q.Wd}|r�d}n*|r�|dks�|jjd	kr�d}|jr�|r�t|d
�d}tj|d|d
|d|d|�S)Nr
rZUuLlZLl�L�UTZLLr#z4illegal integer literal syntax in Python source fileF�is_c_literalr��unsigned�longnessr�r�r�)	rJr@rArQ�language_levelr�r
r�IntNode)rBrKr�r&r'r%r+r+r,r�s2	


		
rcCsi|j�}|jrV||jkrV|jj|�}t||�}|dk	rV|Stj|d|�S)NrD)rJ�compile_time_expr�compile_time_envZlookup_here�wrap_compile_time_constantr�NameNode)rBrDrKr�r�r+r+r,r!�sr!c	sAt|�}|dkr%tj��S|tkr>tj��St|t�r`tj�d|�St|t�r�tj	�d|d|�St|t
�r�tj�d|d|�St|t�r;tj
�dt|j�dtd|j��}|jr7tj�dtj�dt|j�d|j�|d|�}|St|t�rctj�dt|��St|t�r�t|d�}tj�d|d|�St|t�r��fdd�|D�}d|kr�tj�d|�SdSn8tr t|t�r tj	�d|jd	�d|�St�d
||jjf�dS)Nr�Zconstant_resultgr��asciicsg|]}t�|��qSr+)r,)r�r�)rKr+r,r�s	z.wrap_compile_time_constant.<locals>.<listcomp>rZr#z4Invalid type for compile-time constant: %r (type %s))�reprrr�Ellipsisrr��boolr �intr)�floatr�complexr�imag�realrOrrrrrrr�r�r�long�rstripr
�	__class__r1)rKr��repr�ZbvaluerZr+)rKr,r,�sD

0	0	
"	r,cCs<|j�}t|�\}}}|dks<|jdkrI|||fS|g|g|g}}}d}}x�|jdkrQ|j�}t|�\}}	}
|dkr�t|d�qsne||kr't||g�tddg�tddg�fkr
d}nt|d||f�qs|j|	�|j|
�|j|�qsW|dksv|dkr�d|kr�ttj|�|j	�}|d
kr�t
djd	d
�|D���}|dkr/g}x[t||�D]J\}}t
|t�r	||7}q�|jtj|dt
|���q�W|||fS)NrrzCCannot concatenate char literal with another string or char literalrrr
zFCannot mix string literals of different types, expected %s'', got %s''r
cSs"g|]}|dk	r|�qS)Nr+)r�rr+r+r,r�Ds	z(p_cat_string_literal.<locals>.<listcomp>r�)r
rr
)rr
)rJ�p_string_literalr?r
�setrGrrZ
join_bytes�source_encodingr�join�zipr�r�rr)rBrKr"r	rZbstringsZustringsZ	positionsZ	next_kindZnext_bytes_valueZnext_unicode_valuerr+r+r,r$s@


6		

$"
&rrcCs�|jdkrdS|j�}t||�\}}}|dkrc|dkr_|jd|�|S|dkrs|S|jd�dS)Nrrrzf-string not allowed herer
z#internal parser configuration error)r?rJr;r
)rBZ
required_typerKr"r	rr+r+r,�p_opt_string_literalPsr@cCs%x|D]}|dkrdSqWdS)N�€TFr+)�stringrr+r+r,�check_for_non_ascii_characters_s
rCc
Cs.|j�}|jjdk}d}|jjd�j�}t|�dkr�tt|��t|�kryt|d�d|kr�d|kr�t|d�d|kr�d	|kr�t|d
�d|kr�d	|kr�t|d�d|k}d
|kr(t|�dkrt|d�d
}nKd	|krCd	}d}n0d|krXd}nd|krmd}nd}|dkr�|dkr�t	j
|jjkr�tj
|j�}d}nl|dk	r�|dkr�|}|dkr�tj�}n3|dkrtj
|j�}ntj|j�}x<|j�|j}	|j}
|	dkr�|j|
�|rb|rbt|
�rbd}q*|	dkr�|r�|s�|dks�|
ddkr�|j|
�|r�|r�t|
�r�d}qbt|||
|�q*|	dkr|jd�q*|	dkr&Pq*|	dkrH|jdd|�q*|jd|	|jf�q*W|d
kr�d}|j�}t|�dkr�t|d|�nC|j�\}}|r�|r�|d kr�|jdd|�d}|d	krt|||dd|k�}|j�|||fS)!Nr#Fz"'rz!Duplicate string prefix characterr
rz*String prefixes b and u cannot be combinedrz*String prefixes b and f cannot be combinedz*String prefixes u and f cannot be combined�rrz+Invalid string prefix for character literalTr
ZubZCHARS�ESCAPEZUu�NEWLINE�
Z
END_STRING�EOFzUnclosed string literalrKz(Unexpected token %r:%r in string literalzinvalid character literal: %rz0bytes can only contain ASCII literal characters.�is_raw)rr)rr)rJrQr(r@r8�lowerr�r<r
r�unicode_literalsrRrZStrLiteralBuilderr=�UnicodeLiteralBuilderZBytesLiteralBuilderrAr?rGrC�_append_escape_sequenceZgetcharZ
getstrings�
p_f_string)
rBZ
kind_overriderKZis_python3_sourceZ has_non_ascii_literal_charactersZkind_stringrIr"�charsr?Zsystrrr	r+r+r,r;fs�





				-	
		
	(
		
r;cCs�|d}|dkr9|jt|dd�d��nr|dkrU|j|�nV|dkrz|jtj|��n1|dkr�n"|dkr�t|�dkr�|jt|d	d�d
��q�|jd|dd
�n�|dkr�|dkr�d}|dkrd}y&t|dd ��}t|�}Wqt	k
r~|jdt
|dd!��jd�dd
�Yqtk
r|dk	rt
rt|�d	krt|d�dkrt|d�dkrdt|d�ddt|d�d?}n�YqXnht|�d"krht|d	d�d
�}|dkr|jd|�d#}n|jd|dd
�|dkr�|j||�n
|j|�dS)$Nr�01234567�z'"\ZabfnrtvrG�x�r"�zInvalid hex escape '%s'r�FZNUurrr
�Nr#z!Unknown Unicode character name %srZCsii��
i��i��zInvalid unicode escape '%s')rrr
r�r�r�)rWrVr�)Zappend_charvalr2rGrZchar_from_escape_sequencer�r
r	�ord�KeyErrorr/�lstrip�	TypeErrorrr
Zappend_uescape)r"�builderZescape_sequencerBrZchrvalZucharr+r+r,rM�sJ
##
	+
$,1	rMcCs?g|]5}tjd|r!dnddjd��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�rIr+r+r,r��s	r�FcCsg}d}t|�}tj�}t|�}|r<tnt}	x�||kr�|}
|d|
|d<|	||�}|dkr�tt|�d�|j�}|j	�}|d}
|
dkr|r�t|�dkr�t
d|||�q�|j|�qE|
dkr�|dkr,|jd�q�|jrc|jt
j|d	|j���tj�}t|||||�\}}|j|�qE|
d
kr�|dkr�|jd
�q�|jdd
t|��qE|j|�qEW|jr|jt
j|d	|j���|S)Nrr"zInvalid escape sequence�\rrrz{{r��}z}}z#f-string: single '}' is not allowedrK)r�rrLr�rrr
r��end�grouprMrGrOrrZ	getstring�p_f_string_expr)rBrrKrIrZ
next_start�sizer\�	error_posZ
_parse_seqrbr_�partrZ	expr_noder+r+r,rN
sF
	"	"rNc	Cs|}t|�}d}}}	d}
d&}d}|}
d}x�||krZ|jd�||}|
|kr|dkr�|d|d||df}t|d�q*||
kr*|r|d|kr||d|kr||d|krd}|}
|d7}q*|}
n|d	krt|}
|d|kr*||d|kr*||d|kr*d
}|d7}n�|dkr�|d7}n�|dkr�|dkr�|d8}nx|d
kr�|jd�n\|dkr*|dkr*|dkr#|d|kr#||ddkr#|d7}qA|}P|d7}qAW|||�jdd�jdd�}|d|d|d|df}|j�s�t|d�|dkr�|d7}|d|kr�t|d�n||}|d7}||}|dkr!d}d}d}|d}x�||kr:|jdd|�||}|r�|r�|dkrk|d7}n,|dkr�|dkr�|d8}n|}P|d	kr|r�|d|kr�||d|kr�||d|kr�|}|d7}n
|s|}|d7}qW|||�}
|dkr>|jd|�td|�}t||dd|d|jd |�}t|�}|dk	r�tj	j
|�r�t|d!|�|
r�tj|d"t||
||��}	|dtj	|d#|d$|d%|	�fS)'Nr"�rFz'missing '}' in format string expressionr`rz$backslashes not allowed in f-stringsz'"Tz{[(z}])�#zformat string cannot include #z!:}�!r�z
rG�
z(empty expression not allowed in f-stringz(invalid conversion char at end of stringrWzmissing '}' in format specifierrKrraz4missing '}' in format string expression', found '%s'z(%s)Zparent_scannerr=Zinitial_posz!invalid conversion character '%s'rr��conversion_char�format_speci@)
r�r
�replace�striprr r=r�rZFormattedValueNodeZfind_conversion_funcrrN)rBrrKZstarting_indexrI�irerlZ
terminal_charrmZformat_spec_strZNO_CHARZnested_depthZ
quote_charZin_triple_quotesrrfZexpr_strZexpr_posZ	in_stringZstart_format_spec�buf�scannerrbr+r+r,rd=s�

8
	8


0
(#








?
($
rdcCs/|j�}|j�|jdkrE|jd�tj|dg�St|�}|jd
kr�|jrv|jd�tj	|d|�}t
||�}|jd�tj|d|d|d	tj
d
|jjdk�S|jdkr|j�t||�}n	|g}|jd�tj|d|�S)Nr�rZr�r�z2iterable unpacking cannot be used in comprehensionrb�looprG�typeZhas_local_scoper#rF)r�r�)rJrAr?r^r�ListNoderz�
is_starredr
�ComprehensionAppendNode�
p_comp_for�ComprehensionNoderZ	list_typerQr(�p_test_or_starred_expr_list)rBrKrbrGrs�exprsr+r+r,r�s*

	


	
rcCs@|jdkrt||�S|jdkr8t||�S|SdS)Nr�r�rf)r�r�)r?rx�	p_comp_if)rB�bodyr+r+r,�p_comp_iter�s


r~cCs�|j�}d}|jdkr1d}|j�|jd�t|ddd|�}|jdddt||�d|�tj||�S)	NFr�Tr��allow_testlistr��else_clauser})	rJr?rAr^�p_for_boundsr(r~r�ForStatNode)rBr}rKr��kwr+r+r,rx�s

%rxcCs\|j�}|j�t|�}tj|dtj|d|dt||��gdd�S)N�
if_clauses�	conditionr}r�)rJrAr`r�
IfStatNode�IfClauseNoder~)rBr}rKrhr+r+r,r|�s
r|cCsB|j�}|j�|jdkrB|j�tj|dg�Sg}d}d}x�|jdkr|dkr�|jdkr�dnd}nA|t|j�kr�|jd	|j|dkr�d
ndf�|j�|jdkr�|jd�t|�}|j|�d}n�t	|�}|dkrL|jd
krFdnd}|dkr�|j
d
�|}t	|�}tj|jd|d|�}|r�|dj|�n|j|g�d}|jdkr�|j�|jdkr�PqWPqWW|jd kr`t|�dkr
t
|dt�r
t|d�dkr
|dd}|dkr�t
|tj�s~tt|���tj}tj|jd|jd|j�}	n!tj}tj|jd|�}	t||	�}
|j
d�tj|d|
d|	d|�St|�dkr@t
|dt�r@|jd�n
|j
d�tj|dg�S|j
d�|dkr]g}g}xi|D]a}
t
|
t�r�|j|
�q�|r�|jtj|djd|��g}|j|
�q�W|r|jtj|djd|��t|�dkrA|djrA|dStj|d|dtj�Sg}g}xi|D]a}
t
|
t�r�|j|
�qp|r�|jtj|djd|��g}|j|
�qpW|r�|jtj|djd|��t|�dkr%|djr%|dStj|d|dd�SdS)!Nrar�rFry�**rr"z%unexpected %sitem found in %s literalr<�dictzexpected expression, found '*'rWr�r�TrFr�r�Zkey_exprZ
value_exprrbrsrGrtz2iterable unpacking cannot be used in comprehensionrZr�r�)ryr�r�)r�r�) rJrAr?rr�r�r
rtrGr_r^r�rKr�r��AssertionErrorrtr�	dict_typeZDictComprehensionAppendNoder�r��set_typerwrxryr�ZSetNodeZis_set_literalZMergedSequenceNoder�r�)rBrK�partsZtarget_typeZlast_was_simple_itemr�r�r�Zcomprehension_typerGrsr�Z	set_itemsrgr�r+r+r,r�s�

	#


	

;$	!	
&


##
##rcCs�|j�}|j�t|�g}x0|jdkrW|j�|jt|��q(W|jd�t|�dkr�|d}ntj|d|�}tj	|d|�S)NrFrrrrZr�)
rJrAr_r?rGr^r�rr�Z
BackquoteNode)rBrKrZr�r+r+r,rks



rcCsb|dk	r|gpg}x@|jtkr]|jt|��|jdkrPP|j�qW|S)NrF)r?�expr_terminatorsrGr_rA)rBrbr{r+r+r,�p_simple_expr_listzsr�cCsb|dk	r|gpg}x@|jtkr]|jt|��|jdkrPP|j�qW|S)NrF)r?r�rGrzrA)rBrbr{r+r+r,rz�srzcCs[|j�}t|�}|jdkrS|j�t||�}tj|d|�S|SdS)NrFrZ)rJr_r?rAr�rr�)rBrKrbr{r+r+r,r��s
r�cCs[|j�}t|�}|jdkrS|j�t||�}tj|d|�S|SdS)NrFrZ)rJrzr?rArzrr�)rBrKrbr{r+r+r,�p_testlist_star_expr�s
r�cCsw|j�}t|�}|jdkrS|j�t||�}tj|d|�S|jdkrot||�S|SdS)NrFrZr�r�)r�r�)rJrzr?rArzrr�r�)rBrKrbr{r+r+r,r�s

rc	CsIt|tj|jdtj|jd|���}tj|jd|�S)Nrbr�rs)rxrr�rKrr�ZGeneratorExpressionNode)rBrbrsr+r+r,r��s'r�r�r�rarWr�rFcCs5|j�}|j�t|�}tj|d|�S)NrH)rJrArIrZ
GlobalNode)rBrKrHr+r+r,�p_global_statement�s
r�cCs5|j�}|j�t|�}tj|d|�S)NrH)rJrArIrZNonlocalNode)rBrKrHr+r+r,�p_nonlocal_statement�s
r�c	Csyt|�}|jdkrO|js6|js6|jrO|j�t|�|_|jdkr}|jr}|j	dd|j
�|g}xT|jdkr�|j�|jdkr�t|�}nt|�}|j|�q�Wt
|�dkrtjd|j�r�|d}t|tj�rYtj|j
d	|jd
t|j
|j|j��}n1t|tjtjtjf�s�t	|j
d�|jdd�}|j�|jdkr�t|�}nt|�}tj|j
d|d
|d|�S|d}tj|j
d|�S|d}t
|�dkrOtj|j
d
|dd|�Stj|j
d|dd�d|�SdS)NrWr�zqa starred assignment target must be in a list or tuple - maybe you meant to use an index assignment: var[0] = ...rKrrz([-+*/%^&|]|<<|>>|\*\*|//|@)=rr�r�z&Illegal operand for inplace operation.rr�lhs�rhsrbr"Zlhs_listr�r�r�) r�r?r�Zis_subscriptZis_attributerAr_�
annotationrvr
rKr�rGr�rr_r�rr�r�r�r�r�r�r�r-r�rZInPlaceAssignmentNoder��SingleAssignmentNodeZCascadedAssignmentNode)rBrbZ	expr_listr�rrr�r+r+r,�p_expression_or_assignment�sH*

	

		!!
"

 r�cCs|j�}d}|j�|jdkrl|j�t|�}|jdkrr|j�|jdk}nd}g}|jdkr�|jt|��xF|jdkr�|j�|jd
kr�d}P|jt|��q�Wtj|d|�}tj|d|d	|d
|�S)Nrz>>rFrFrHrrZr��streamZappend_newline)rFrH)rFrH)rFrH)	rJrAr?r_rGrr�rZ
PrintStatNode)rBrKZends_with_commar�rZr�r+r+r,�p_print_statements.



r�cCs|j�}|j�t|�}t|tj�r�d}|j}t|�dkr�|jdt|�d|dd�|g}nd}|g}|j	dkr|r�|jd	dd�|j�|j
t|��|j	d
kr|j�|j
t|��tj
|d|�S)
NTr"r#z.expected tuple of length 2 or 3, got length %drKr�Fr}z@tuple variant of exec does not support additional 'in' argumentsrFrZ)r"r#)rJrAr{r�rr�rZr�r
r?rGr_rZExecStatNode)rBrK�codeZ
tuple_variantrZr+r+r,�p_exec_statements,
	
	

r�cCs5|j�}|j�t|�}tj|d|�S)NrZ)rJrAr�rZDelStatNode)rBrKrZr+r+r,�p_del_statement9s
r�cCs?|j�}|jd�|r2|jddd�tj|�S)N�passzExpected a newline�ignore_semicolonT)rJr^�expect_newliner�PassStatNode)rB�with_newlinerKr+r+r,�p_pass_statementAs

r�cCs#|j�}|j�tj|�S)N)rJrArZ
BreakStatNode)rBrKr+r+r,�p_break_statementHs
r�cCs#|j�}|j�tj|�S)N)rJrArZContinueStatNode)rBrKr+r+r,�p_continue_statementNs
r�cCsM|j�}|j�|jtkr4t|�}nd}tj|d|�S)Nr�)rJrAr?r�r�rZReturnStatNode)rBrKr�r+r+r,�p_return_statementTs
r�c
Cs|j�}|j�d}d}d}d}|jtkr�t|�}|jdkr�|j�t|�}|jdkr�|j�t|�}n%|jdkr�|j�t|�}|s�|s�|r�tj|d|d|d|d|�Stj|�SdS)NrFr��exc_type�	exc_value�exc_tb�cause)rJrAr?r�r_rZ
RaiseStatNodeZReraiseStatNode)rBrKr�r�r�r�r+r+r,�p_raise_statement^s0



r�cCs�|j�}|j}|j�t|dd�g}x6|jdkrl|j�|jt|dd��q7Wg}tj|jjk}x|D]\}}}}|dkr�t	j
|d|d|d|�}	n�|rd|krtj|d	tj
|d
|jjd��g�}
nd}
t	j|dtj|d
|p@|�dtj|dtj
|d
|�d|rsdndd|
��}	|j|	�q�Wt	j|d|�S)N�
as_allowedrrF�cimport�module_name�as_name�is_absoluter�rZr�ryr�rDr�r4r�	name_list�stats)rJr?rA�
p_dotted_namerGrrrQrRrZCImportStatNoderrur�r�r�r-�
ImportNode�StatListNode)rBrKr"r�r�r��target_name�dotted_namer��statr�r+r+r,�p_import_statement{s<	

*r�cCs�|j�}|j�|jdkrXd}x0|jdkrT|d7}|j�q.Wnd}|dk	r�|jdkr�|j�|jjd�}}nE|dkr�tj|jjkr�d}t|dd�\}}}}|jd kr�|j	d	�|j}|j�|dk}d}	|jd
krd|j�|jjd
�ddfg}
|j�n1|jdkr�d}	|j�t
||�g}
xI|jd
kr�|j�|	r�|jdkr�P|
jt
||��q�W|	r�|jd�|dkr�|s|j	d�n�|r,|j	d�n�x�|
D]\}}}
}|dkrb|j	d|�Pyt
t|�}Wn'tk
r�|j	d||�PYnX|jjj|�q3Wtj|�S|dkr�tj|d|d|d|
�Sg}g}x^|
D]V\}}}
}|jtj|d|��|j|tj|d|
pM|�f�qWtj|
ddd|�}tj|dtj|dtj|d|�d|d|�d|�SdS)!Nr�rr�importr�r
r�FzExpected 'import' or 'cimport'ryr�TrFr��
__future__z?from __future__ imports must occur at the beginning of the filezinvalid syntaxZbracesznot a chancez future feature %s is not definedr�Zrelative_level�imported_namesr�rDrZ�moduler4r�r�)r�r�)r�r�)rJrAr?rQr�rrrRr�r
�p_imported_namerGr^�getattr�AttributeError�addrr�ZFromCImportStatNoderr�r-ruZFromImportStatNoder�)rB�first_statementrKr4Zdotted_name_posr��_r"�
is_cimportZis_parenthesizedr�Zname_posrDr�Z	directiveZimported_name_stringsr�Zimport_listr+r+r,�p_from_import_statement�s�

"!
	
'





&	r��class�struct�unioncCsb|j�}d}|r:|jtkr:|j}|j�t|�}t|�}||||fS)N)rJr@�imported_name_kindsrArE�	p_as_name)rBr�rKr"rDr�r+r+r,r��s	
r�cCs�|j�}t|�}d}|g}x0|jdkrY|j�|jt|��q*W|rlt|�}|||jjdj|��|fS)Nr�)	rJrEr?rArGr�rQr�r>)rBr�rKr�r�rHr+r+r,r��s	
r�cCs:|jdkr2|jdkr2|j�t|�SdSdS)Nr>�as)r?r@rArE)rBr+r+r,r�
s

r�cCsi|j�}|j�t|�}|jdkrJ|j�t|�}nd}tj|d|d|�S)NrF�condr�)rJrAr_r?rZAssertStatNode)rBrKr�r�r+r+r,�p_assert_statements

r��;rHcCs}|j�}|j�t|�g}x0|jdkrW|j�|jt|��q(Wt|�}tj|d|d|�S)N�elifr�r�)rJrA�p_if_clauser?rG�
p_else_clauserr�)rBrKr�r�r+r+r,�p_if_statement!s

r�cCs=|j�}t|�}t|�}tj|d|d|�S)Nr�r})rJr_�p_suiterr�)rBrKrhr}r+r+r,r�-s
r�cCs+|jdkr#|j�t|�SdSdS)Nrg)r?rAr�)rBr+r+r,r�4s

r�cCsY|j�}|j�t|�}t|�}t|�}tj|d|d|d|�S)Nr�r}r�)rJrAr_r�r�rZ
WhileStatNode)rBrKrhr}r�r+r+r,�p_while_statement;s
r�cCsr|j�}|j�t|ddd|�}t|�}t|�}|jd|d|d|�tj||�S)NrTr�r}r�)rJrAr�r�r�r(rr�)rBr�rKr�r}r�r+r+r,r�Gs
r�c

Cs�t|�}|jdkrM|j�t||d|�}td|d|�S|jr�|r�|jdkr�|j�t|�}n
|d}}t|�}|j�}t	|�}|j�}	t|�}
t|�}t
|�}|dkrtj|d|�}n8|j
s't|jd�n||jkrCt|d�|d	|
d	krdt|	d
�td|d|d|d
|
d|d|�S|jd�iSdS)Nr}r��target�iteratorr�rDz4Target 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�bound1Z	relation1Z	relation2�bound2r�)�p_for_targetr?rA�p_for_iteratorr�r�r{�p_for_from_relationrJrE�p_for_from_steprr-r�r
rKrDr^)
rBrr�r�r�r�Zrel1Z	name2_posZname2Zrel2_posZrel2r�r�r+r+r,r�RsH


		

r�cCs7|jtkr&|j}|j�|S|jd�dS)Nz#Expected one of '<', '<=', '>' '>=')r?�inequality_relationsrAr
)rBrLr+r+r,r�}s
	
r�cCs@|jdkr8|jdkr8|j�t|�}|SdSdS)Nr>Zby)r?r@rAr{)rBr�r+r+r,r��s

r�cCs�|j�}t|�}|jdkr�|j�|g}x@|j|kr||jt|��|jdkroP|j�q=Wtj|d|�S|SdS)NrFrZ)rJrtr?rArGrr�)rBrXrKrbr{r+r+r,�p_target�s
	r�cCs
t|d�S)Nr})r�)rBr+r+r,r��sr�cCsO|j�}|r!t|�}nt|�}|r<tjntj|d|�S)N�sequence)rJr�rirZAsyncIteratorNodeZIteratorNode)rBrr�rKrbr+r+r,r��s
r�cCs|j�}|j�t|�}g}d}|jd	kr�x&|jdkre|jt|��q@W|jdkr�|j�t|�}tj|d|d|d|�}|jdkr�|S|jdkr�|j�t|�}tj|d|d|�S|j	d�dS)
N�exceptrgr}�except_clausesr��finally�finally_clausezExpected 'except' or 'finally')r�rg)
rJrAr�r?rG�p_except_clauserZTryExceptStatNodeZTryFinallyStatNoder
)rBrKr}r�r�r�r+r+r,�p_try_statement�s,

	

r�c
CsN|j�}|j�d}d}d}|jdkrt|�}t|tj�ra|j}n	|g}|jdks�|jdkr�|jdkr�|j	j
dkr�|j�t|�}n[|jdkr|jdkr|j�|j�}t|�}tj|d|�}d}t
|�}tj|d	|d
|d|d|�S)
NFrWrFr>r�r"rDT�patternr�r}�is_except_as)rJrAr?r_r�rr�rZr@rQr(rEr-r�rZExceptClauseNode)rBrKr�r�r��pos2rDr}r+r+r,r��s0
	-

r�c
Cs�|j�}|j�t|d�d}|jd�|jr�|}|jj||�}|r�|jj|�t	j
|��F}t|�}t|||d|j
d|j�}t||�}	WdQRX|	SdSn
tj|�SdS)Nrr"z!Syntax error in include statementr=�parse_comments)rJrAr;r��compile_time_evalrQZfind_include_fileZincluded_filesrGrZopen_source_filerr �encodingr��p_statement_listrr�)
rBr.rKZunicode_include_file_nameZinclude_file_nameZinclude_file_pathrZsource_desc�s2Ztreer+r+r,�p_include_statement�s 

	$r�cCsB|j�|jdkr2|jr2t|�}nt|�}|S)N�template)rAr@r��p_with_templater�)rBr�r+r+r,�p_with_statement�s

r�c
CsL|j�}|jr�|jdkr�|jdkr�|rG|jd�|j}|j�|jdkr�|j�t|�}nt|�}tj	|d|d|�St
|�}d}|jdkr�|jdkr�|j�t|�}|jdkr|j�t|d	|�}nt|�}tj|d
|d|d|d	|�S)
Nr>r:�gilzwith gil/nogil cannot be asyncrF�stater}r�r��managerr�)r:r�)
rJr�r?r@r
rAr�r�rZGILStatNoder_rtZWithStatNode)rBr�rKr�r}r�r�r+r+r,r�s*(
	



r�cCs�|j�}g}|j�|jd�|j|j�|j�x7|jdkr||j�|j|j�|j�qFW|jd�|jdkr�|j�|jd�|j�t�}||_	t
|||�}|j�|St|d�dS)Nr�rFr�rWz-Syntax error in template function declaration)
rJrAr^rGr@r?r��
expect_indentr$r<�p_c_func_or_var_declaration�
expect_dedentr
)rBrKr<�body_ctxZfunc_or_varr+r+r,r�s*







		
r�cCs�|jdkrt|�}n�|jdkr<t|�}nz|jdkrZt|�}n\|jdkrxt|�}n>|jdkr�t|�}n |jdkr�t|�}n|jdkr�t|�}n�|jdkr�t|�}n�|jd	krt	|�}n�|jdkr,t
|�}n�|jdkrPt|d
|�}nf|jdkrnt|�}nH|jdkr�t
|�}n*|jdkr�t|�}nt|�}|S)N�global�nonlocal�print�exec�del�break�continue�return�raiser�r�r�r�r�assertr�)r�r�)r?r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�)rBr�r�r+r+r,�p_simple_statement6s<rcCsVt|d|�}|j}g}t|tj�s@|j|�xg|jdkr�|j�|jdkrlPt|d|�}t|tj�r�qC|j|�d}qCW|s�tj|�}n4t|�dkr�|d}ntj	|d|�}|jd
krEt|tj
�rE|jjrE|jj
d	krE|jd
|�|jd�|S)Nr�r�rFrHFrrr��cdefz@The 'cdef' keyword is only allowed in Cython files (pyx/pxi/pxd)z%Syntax error in simple statement list)rFrH)rFrH)rrKr�rr�rGr?rAr�r�r�rbr�rDr
r�)rBr.r�r�rKr�r+r+r,�p_simple_statement_listXs2	





rcCs+|j}d|_t|�}||_|S)Nr)r*r�)rB�oldrbr+r+r,�p_compile_time_expr{s
			rcCs�|j�}|j}|j�t|�}|jd�t|�}|jrl|j|�}|j||�|j	ddd�t
j|�S)Nr�zExpected a newliner�T)rJr+rArEr^rr��compile_time_value�declarer�rr�)rBrK�denvrDrbr�r+r+r,�p_DEF_statement�s	

	r
c	Cs�|j�}|j}|}|j}d}xl|j�t|�}|o[t|j|��|_t||�}|jr�|}d}|jdkr-Pq-W|jdkr�|j�||_t||�}|r�|}|s�t	j
|�}||_|S)NrZELIF�ELSE)rJr�r+rArr1rr�r?rr�)	rBr.rKZ
saved_evalZcurrent_evalr	r|rbr}r+r+r,�p_IF_statement�s2		
	
		rc		Cs�|j}d}|jdkrG|jd+kr:|jd�t||�S|jdkr`t|�S|jdkr|t||�S|jdkr	|jd,kr�|jd�|j|_t|�}|jr.|jd-kr.|jdkr�|j	dkr�q.|jd�n%|jdkr.|r.t
|dd�Sd}|jdkrVd}|j�n%|jdkr{d}d}|j�|r-|jd.kr�|jd�|j|_t||d|��}|dk	r)t
jt
jt
jf}|jr|t
jt
jf7}t||�s |jd�||_|S|jrL|jddd�n�|jdkr�d|jkr�|jdkr�|jd�|j|_t||�S|jdkr�|jd/kr�|jd �t||�S|jd!kr|jd0kr|jd"�t||�S|jd	krF|jdkrF|j	dkrFt|�S|jdkrt|jdkrtt
|dd#�S|jd1kr�t|�}|dk	r�|S|jd$�|jd%kr�t|�S|jd&kr�t|�S|jd'kr�t|�S|jd(krt|�S|jd)kr)t|�S|jdkrR|j�t |||�S|jdkr�|j	dkr�|j	}|j�|jdkr�t |||�S|r�|jd�|j!d|�t"||d*|�SdS)2N�ctypedefr��
module_pxdz#ctypedef statement not allowed hereZDEFZIFr�r��c_classr��property�c_class_pxdr%zdecorator not allowed herer�r�cpdefr>r�z7Decorators can only be followed by functions or classesr�r�rrzcdef statement not allowed herer9z%'api' not allowed with this statementr�Fr�zdef statement not allowed herez!class definition not allowed here�includez"include statement not allowed hereTz%Executable statement not allowed hererf�whiler��tryr�r�)r�r)r�r�rr�rrrr%)r�rrr�)r�rr�rr)r�r�r�r%)r�r)rr)#r6r?r4r
�p_ctypedef_statementr
r�p_decoratorsr=r@r�rA�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)	rBr.r�r6r�r9r��tupZ
ident_namer+r+r,�p_statement�s�	







	
		





-







	

r#cCs�|j�}g}xP|jdkrdt||d|�}t|tj�rNq|j|�d}qW|sxtj|�St|�dkr�|dStj|d|�SdS)	N�DEDENTrHr�Frrr�)r$rH)	rJr?r#r�rr�rGr�r�)rBr.r�rKr�r�r+r+r,r�	s


r�cCst||dd�dS)N�
with_doc_onlyFr)�p_suite_with_docstring)rBr.r+r+r,r�#	sr�cCs�|jd�d}|jdkrd|j�|j�|rHt|�}t||�}|j�n\|jr�|jddd�|j	d
kr�t
||�}nt|�}|jd
dd�|s�t
|�\}}||fS)NrWrFz%'api' not allowed with this statementr�Fr�r�r�r%zSyntax error in declarationsr�T)r�r�r�r%)r^r?rAr��p_doc_stringr�r�r8r
r4rr�r��_extract_docstring)rBr.r%�docr}r+r+r,r&'	s$



	r&c
Cs-g}g}d}x|j|kr"|jdksB|jdkrU|jddd�d}|jdkr4|j�ddkr4|j}|j�|j�t|�r�t|�}nHt|d	|�}	t|d
d�}
t	j
|	jd|	d
|
�}d}tj
|jd|�}|j||f�d}n�t|�rOt|�}nHt|d	|�}	t|d
d�}
t	j
|	jd|	d
|
�}d}|j|�|d7}t|�dkr�|jdd|j�|jdkr|j|kr|r|jddj|��P|j�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)
    rryz**z$Argument expansion not allowed here.r�Fr>r�r<r�rr�r�Tr�z%Non-keyword arg following keyword argrKrFzUnmatched %sz or )r?r
r�r@rAr�r_r�r�r�CComplexBaseTypeNoderKrr�rGr�r>)
rBZ
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|d|�SdS)Nr�r<�nonempty)r?�p_c_complex_base_type�p_c_simple_base_type)rB�	self_flagr-r<r+r+r,r�v	sr�cCs=|jdkr5|jtkr5|j}|j�|SdSdS)Nr>r
)r?r@�calling_convention_wordsrA)rBr|r+r+r,�p_calling_convention~	s
	
r2Z	__stdcallZ__cdeclZ
__fastcallcCsH|j�}|j�t|d|�}t|dd�}tj|d|d|�}|jdkr�|g}xs|jdkr�|j�|jdkr�Pt|d|�}t|dd�}|jtj|d|d|��qpWtj|d|�}|j	d�|jd	krDt
|�r2t||�}nt|||�}|S)
Nr<r�Tr�r�rFr��
componentsr�)
rJrAr�r�rr*r?rGZCTupleBaseTypeNoder^�is_memoryviewslice_access�p_memoryviewslice_access�p_buffer_or_template)rBr<rKr�r��	type_noder3r+r+r,r.�	s.
	

r.c
Cs�d}d}d}d}g}|j�}	|jdksMt|	d|j�|jdkr�|j�t|d|d|d|�}
t|
tj�r�tj	|	d	|
j
�|
_
|
Stj	|	d	|
�St|�r�d}|jdkr!|jtkr!t|j\}}|j}|j�nLt
|�\}}|jdkrg|jtkrg|j}|j�nd
}|jdkr�|jdkr�d}|j�nHt|�r�|j}|j�x&|jdkr�|j|�|j�t|�}q�Wn�|j}|j�|r�|jdkr�|jd
kr�|j�|jdks�|jdks�|jdks�|jdkr�|jtkr�|jd
d
�q�|jd
d
�|jd|�d}n%|jdkr�|jd|�d}tj|	d|d|d|d|d|d|d|d|�}|jdkrdt|�rRt||�}nt|||�}|jdkr�|j�t|�}tj|	d	|d|�}|S)Nrrr>z"Expected an identifier, found '%s'�constr0r-r<r�r2r4r�r�ry�**r�r�rD�module_path�is_basic_c_type�signedr'�is_self_arg)ryr9r�r�)rJr?r
r@rAr�r�rr�r�r��looking_at_base_type�special_basic_c_types�p_sign_and_longness�basic_c_type_names�looking_at_dotted_namerGrEr1r!�CSimpleBaseTypeNoder4r5r6ZCNestedBaseTypeNode)
rBr0r-r<Zis_basicr<r'r4r:rKr�rDr7r+r+r,r/�	s�
	
	

	


	

-	
r/cCs�|j�}|j�t|d	|�\}}|jd�|jdkr\t|||�}tj|ddd�|D��}tj	|d|d|d|�}|S)
Nr�r�r�c	Ss7g|]-\}}tjd|jd|d|��qS)rKr�r�)rr�rK)r�r�r�r+r+r,r�	
s	z(p_buffer_or_template.<locals>.<listcomp>r�r�r�)r�)
rJrAr,r^r?r6rr�rr�)rBr�r<rKr�r�r�r|r+r+r,r6�	s

	
	r6cCsy|r|r|S|rJ|rJt|�r7t||�St||d�Sn+|ru|rut|�rqt||�S|SdS)N)r4r5r6)rBr�r-r�r+r+r,�p_bracketed_base_type
s



rDcCs�|j|jfg}|j�d}|jdkr=d}nG|jdkr�|j|j|jf�|j�|jdkr�d}x(|ddd�D]}|j|�q�W|S)NFrWTrrr�)r?r@rArGr!)rB�saved�retval�svr+r+r,r4'
s
	
r4cCs�|j�}|j�t|�\}}x-|D]%}t|�dkr/|jd�q/W|jd�t||�}tj|d|d|�}|S)Nr"zDAn axis specification in memoryview declaration does not have a ':'.r�r��axes)	rJrAr�r�r
r^r�rr�)rBr�rKr�r�rr�r|r+r+r,r5<
s


	r5cCs|jdko|jtkS)Nr>)r?r@r1)rBr+r+r,�looking_at_nameL
srIcCs�|jtkrdS|jdkr�d}|j}g}|j�x:|jdkr}|j�|j|j�|jd�qDW|j|jf}|jdkr�d}n�|jdks�|jdkr�|j�|jdk}|j|�nm|jd	kr'|j�|jdk}|j|�n5|jd
kr\|j�|jdk}|j|�|j�x.|D]&}|jd|�|jdd�qmW|jd|�|o�|dSdSdS)
NFr>r�Tryz**r�r�r�r�r)r�r�)r@�base_type_start_wordsr?rArGr^r!�reverse)rB�is_typerDZdotted_pathrE�pr+r+r,r�O
sB	

	





r�cCs|jdko|jtkS)Nr>)r?r@rJ)rBr+r+r,r>w
sr>cCsM|jdkrE|j}|j�|jdk}|jd|�|SdSdS)Nr>r�r)r?r@rAr!)rBrDr|r+r+r,rB{
s	
rBcCs@|j|jf}t|�dk}|s<|\|_|_|S)zSee if we're looking at a.b.c(r�)�
start_lineZ	start_colr�)rBrJr|r+r+r,�looking_at_call�
s
rO�void�charr2r3�double�bint�
Py_UNICODE�Py_UCS4Z	Py_hash_t�
Py_ssize_tZssize_t�size_tZ	ptrdiff_t�Py_tss_t�shortr7r<r&�enum�packedcCs�d}d}x�|jdkr�|jtkr�|jdkrEd}nI|jdkr]d}n1|jdkrud	}n|jdkr�|d7}|j�qW||fS)
Nrrr>r&r<r"rYr7r�)r?r@�sign_and_longness_wordsrA)rBr<r'r+r+r,r@�
s!			
r@cCs@t|d�}|dk	r6t|�}|j|_nd}|S)Nr)r@rr=r�)rB�literal�cnamer+r+r,�p_opt_cname�
sr_c
Cs�|j�}|jdkr�|j�|jdks@t|�r�tj|d|jjd�dd�}	t||||	|�}
q�t	||d|d|d|d	|d
d�}
|j
d�nt|||||||�}
|r|
jr|jdkrt
|j�d|
j�xh|jdkr�|j�}|jd
krUt||
�}
n"|j�t||||
|�}
d}qW|
S)Nr�r�rDr
r^r�rL�cmethod_flagr-�calling_convention_allowedrz&%s on something that is not a functionr�r)r�r�)rJr?rArIr�CNameDeclaratorNoderQr��p_c_func_declaratorr�r^�p_c_simple_declarator�calling_conventionr
�p_c_array_declarator)rBr.r�rLr`�
assignabler-rarKr�r|r+r+r,r��
s0
'	

r�cCs`|j�}|j�|jdkr4t|�}nd}|jd�tj|d|d|�S)Nr�r�Z	dimension)rJrAr?r�r^rZCArrayDeclaratorNode)rBr�rKZdimr+r+r,rf�
s

rfcCs�t||d|dd�}t|�}|jd�t|�}t|�\}}	t|�}
tj|d|d|d|d|d	|	d
|p�|jp�|
d|
�S)Nr`�nonempty_declaratorsrr�r�rZZhas_varargsZexception_valueZexception_checkr:�with_gil)	�p_c_arg_list�p_optional_ellipsisr^�p_nogil�p_exception_value_clause�
p_with_gilrZCFuncDeclaratorNoder:)rBrKr.r�r`rZZellipsisr:�exc_val�	exc_checkrir+r+r,rc�
s	
rcr�r�ryrNr�z++z--r�r�r�r�z<<z>>rFz[]z()rjr1c
Cs|j�}t|�}|jdkr�|j�|jdkr�|j�}	|j�t||d|d|d|d|d|�}
tj|	d|
�}n-t||d|d|d|d|d|�}tj|d|�}n-|jd	krM|j�t||d|d|d|d|d|�}tj|dtj|d|��}n�|jd
kr�|j�t||d|d|d|d|d|�}tj	|d|�}nbd}
|jdkr2|j}|r�t
|j�d�|j�t|�}|d
krW|jdkrW|rW|j�t|�}
n%|rKt
|j�d�d}d}|dkr�|j
dk	r�|r�|j
d|}|d
kr�|jdkr�|r�|j}dd�|D�r�|j�|dkr�|jd�d}nz|dkr|jd�d}nX|d&krF|j|krF|d9}|j�n&|jdkrl||j7}|j�|tkr�|j
d|d d!�||7}nP|dkr�|j}|tkr�|j
d|d d!�|d"|}|j�tj|d#|d$|d%|
�}||_|S)'Nryr8r�rLr`rgr-r�z**r�r>zDeclarator should be emptyrrr�zEmpty declaratorr
z::�externcSs"g|]}|dkrd�qS)z+-*/<=>!%&|([^~,rr+)r�rr+r+r,r�=s	z)p_c_simple_declarator.<locals>.<listcomp>r�r�z()r�r�z[]r�r�r�r"z,Overloading operator '%s' not yet supported.r�F� rDr^�default)r�r�r�r�)rJr2r?rAr@r�rZCConstDeclaratorNodeZCPtrDeclaratorNodeZCReferenceDeclaratorNoder
r_r_r;r5r^�supported_overloaded_operatorsrbre)rBr.r�rLr`rgr-rKreZ	const_posZ
const_baser�r|r�rDr^rLr+r+r,rds�

	

	
!
!!	

	
	




	
	rdcCs4|jdkr,|jdkr,|j�dSdSdS)Nr>r:rr)r?r@rA)rBr+r+r,rl\s
rlcCs2|jdkr*|j�|jd�dSdSdS)Nr�r�rr)r?rAZexpect_keyword)rBr+r+r,rncs


rncCs�d}d}|jdkr�|j�|jdkrGd}|j�n~|jdkr�d}|j�|jdkr�|j}|j�t||�}n+|jdkr�d}|j�t|�}||fS)Nrr�ryrr�r>r�)r?rAr@r!r_)rBrorprDr+r+r,rmks&


	

rmz**r�c	Cstg}|}xa|jtkro|jt||||d|d|d|��|jdkr\P|j�d}qW|S)Nr-�kw_onlyrYrFr)r?�c_arg_list_terminatorsrG�p_c_arg_declrA)	rBr.�	in_pyfuncr`rhrurYrZr=r+r+r,rj�s


rjcCs%|jdkrt|�dSdSdS)Nr�rr)r?r�)rBr+r+r,rk�s
rkcCs|j�}d}}	d}
d}|jrmtj|dddgddddddddd|d	d�}nt||d
|�}t||d
|�}
|jdkr*|jr*|j}|j�|jd
kr�|jdkr�|j�n
|j	d�|st	|d|�|dk}	|dk}|rU|jdkrU|j�t
|�}|jdkr�|j�d|jkr�|jd kr�tj
|�}
|j�q�d|jkr�t
|�}
q�t	|d�nt
|�}
tj|d|d|
d|d|	d|
d|d|�S)!NrrDr:r;r<r4r'r=r<r-rorjr>rzExpected 'None'z*'%s None' only allowed in Python functionsrWr�r�ryr��inlinez;default values cannot be specified in pxd files, use ? or *r�r��not_none�or_nonersr�ru)rorj)ryr�)rJr�rrCr�r�r?rAr@r
r_r4rr�	modifiersZCArgDeclNode)rBr.rxr`r-rurYrKrzr{rsr�r�r�r"r+r+r,rw�sV
		





rwcCs4|jdkr,|jdkr,|j�dSdSdS)Nr>r8rr)r?r@rA)rBr+r+r,�p_api�s
r}cCsV|j�}t||j�|_|jp3t|�|_|jre|jdkret|d|j�|jdkr�|jdkr�t|||�S|jdkr�|j�t|||�St	|�r�d|_
|jr�t|d�t||�S|jd	kr&|jrt|d�t||�S|jd
krw|j
dkrQt|d
�|jrgt|d�t|||�S|jdkr�|jdkr�t|||�S|jdkr|jtkr|j
dkr�t|d�|jr|jdkrt|d�t|||�S|jdkrB|jdkrBt|||�St|||�SdS)Nr&�publiczCannot combine 'api' with '%s'rqr�r�rz$cdef blocks cannot be declared cpdefrWr�r�rz*Extension type definition not allowed herez(Extension types cannot be declared cpdefr>r�z/C struct/union/enum definition not allowed hererZz'C struct/union cannot be declared cpdef�fused)r&r~)r�r)r�r)rJ�p_visibilityr5r8r}r
r?�p_cdef_extern_blockrArlr:r9�p_cdef_blockr4�p_c_class_definitionr@�p_cpp_class_definition�struct_enum_union�
p_struct_enum�p_fused_definitionr�)rBr.rKr+r+r,r�sL	
		

	


	

	
rcCst||dd��S)Nr6r)r�)rBr.r+r+r,r��sr�c
Cs�|jrt|d�d}|jd�|jdkrE|j�nt|d�d}|dddd	�}|jd
kr�|j�t|d�d|_t|�r�d|_	t
||d�\}}tj|d|d
|d|d
|j�S)Nz+cdef extern blocks cannot be declared cpdefr�ryrr"r6rr5rqr;T�include_file�verbatim_includer})
r9r
r^r?rAr;r@r;rlr:r&rZCDefExternNode)rBrKr.r�r�r}r+r+r,r�s&	



	r�cCsD|j�|jdkrg|j}|j�t|�}|dkrs|jdk	rs|jd|}nd}d}d}|jd�g}|jdkr�t|||�nD|j�|j�x#|jdkr�t|||�q�W|j�t	j
|d|d|d	|d
|jd|jd|j
d
|jd|jdk�S)Nr>z::rWrFr$rHrDr^r�r7r5Zcreate_wrapperr8�in_pxdr)r$rH)rAr?r@r_r;r^�
p_c_enum_liner�r�rrr7r5r9r8r4)rBrKr.rDr^r�r+r+r,�p_c_enum_definitions0
	




	r�cCs}|jdkrbt|||�xJ|jdkr^|j�|jdkrKPt|||�q"Wn
|j�|jd�dS)Nr�rFrFrHzSyntax error in enum item list)rFrH)r?�
p_c_enum_itemrAr�)rBr.r�r+r+r,r�7s

r�c	Cs�|j�}t|�}t|�}|dkrP|jdk	rP|jd|}d}|jdkr{|j�t|�}|jtj	|d|d|d|��dS)Nz::r�rDr^r�)
rJrEr_r;r?rAr_rGrZCEnumDefItemNode)rBr.r�rKrDr^r�r+r+r,r�Cs
r�c	Cs�d}|jdkrPd}|j�|jdksC|jdkrP|jd�|j}|j�t|�}t|�}|dkr�|jdk	r�|jd|}d}|jdkrW|j�|jd�|j�g}t	�}x[|jd	krI|jd
kr/|j
t||j�|��q�|j�|j
d�q�W|j�n
|j
d�tj|d
|d|d|d|d|jd|jd|jd|jdkd|�	S)NFr[Tr>r�z::rWrFr$r�zExpected a newlinez*Syntax error in struct or union definitionrDr^r"�
attributesr7r5r8r�r)r@rAr?ZexpectedrEr_r;r^r�r$rGr�rJr�r�rrr7r5r8r4)	rBrKr.r[r"rDr^r�r�r+r+r,�p_c_struct_or_union_definitionPs>

	



	


r�cCs�|jd
krt|d�|j�t|�}|jd�|j�|j�g}xL|jdkr�|jdkr�|jt	|��n
|j�|j�q\W|j
�|s�t|d�tj|d|d	|�S)z5
    c(type)def fused my_fused_type:
        ...
    r�rz&Fused type definition not allowed hererWr$r�zNeed at least one typerD�types)r�r)
r4r
rArEr^r�r�r?rGr�r�rZ
FusedTypeNode)rBrKr.rDr�r+r+r,r�ts"







r�cCs3|jdkrt|||�St|||�SdS)NrZ)r@r�r�)rBrKr.r+r+r,r��sr�cCs||j�}|}|jdkrx|jd	krx|j}|dkrn||krn|jd||fdd�|j�|S)
Nr>rqr~�readonlyr&z,Conflicting visibility options '%s' and '%s'r�F)rqr~r�)rJr?r@r
rA)rBZprev_visibilityrKr5r+r+r,r��s		
r�cCsF|jdkrB|jdkrB|j}|j�|gt|�SgS)Nr>ry)ry)r?r@rA�
p_c_modifiers)rB�modifierr+r+r,r��s
	
r�c
Cst|jd"k}t|�}t|ddd|j�}t||d|�d|dddd�}|j|_|jd	kr�|jd
kr�|jdkr�|j�d}nd}|jd
krV|jd#kr�|jr�|j	d�t
|tdd��\}}	tj
|d|jd|d|d|	d|d|d|jd|jd|�	}
n|re||_|g}x[|jdkr�|j�|jdkr�Pt||d|dddd�}|j|�qqW|jd}|jddd�|jd$kr|j|krt|�}nd}tj|d|jd|d |d!|jd%kd|d|jd|d|j�}
|
S)&Nrrr-rr<r|r`rgr>r8�	cpp_classrrWr�rz&C function definition not allowed herer4r�r5r�r�r}r)r8r9�is_const_methodrFrFz&Syntax error in C variable declarationr�T�declaratorsr�)rr)r�rrrr�)rr)rr)r4r�r�r<r�r9r?r@rAr
r&r$rrr5r8r�rGrNr�r'r)
rBrKr.r`r|r�r�r�r)Zsuiter|r�Zdoc_liner+r+r,r��sb-
	
					

		r�c
CsK|j�}|j�t||j�}t|�}|ddd|�}|rXd|_|jdkrwt|||�S|jdkr�|jt	kr�t
|||�S|jdkr�|jdkr�t|||�St|dd�}t
||dddd�}|jd	d
d�tj|d|d
|d|d|d|jdk�SdS)Nr7rr5r�r>rr-rLz"Syntax error in ctypedef statementr�Tr�r�r8r�r)rJrAr�r5r}r8r?r�r@r�r�r�r�r�r�rZCTypeDefNoder4)rBr.rKr5r8r�r�r+r+r,r�s*
	rcCs	g}x�|jdkr|j�}|j�t|dd�d}|jd�}tj|d|jj|d��}x?|dd�D]-}tj	|d|jj|�d	|�}q�W|jd
kr�t
||�}|jtj
|d|��|jd�q	W|S)
Nr�r�rr"r�rDrr�r�r��	decoratorz"Expected a newline after decorator)r?rJrAr��splitrr-rQr�r�r�rGrZ
DecoratorNoder�)rBr�rKZ	decstringrHr�rDr+r+r,r�s
%%rcCs|j�}|r|j�|j�t|�}|jd�t|dd�\}}}|jd�t|�r�t|d�d}|jdkr�|j�t	|�}t
|tdd��\}	}
|r�|j�t
j|d|d	|d
|d|d|	d
|
d|d|d|�	S)Nr�rXr�z(Python function cannot be declared nogilz->r4r�rDrZr[r\r)r}r�r��return_type_annotation)rJZenter_asyncrArEr^r]rlr
r?r_r&r$Z
exit_asyncrZDefNode)rBr�r�rKrDrZr[r\r�r)r}r+r+r,r�
s*






r�cCst|ddddd|�}d}d}|jdkr�|j�|jdkrdt|d|�}|jdkr�|j�|jt|ddddddd|��n|j|kr�|jd	�|jd
kr�|j�t|d|�}|jdkr|j�|||fS)NrxrrhrYryr>rFruz-Syntax error in Python function argument listz**)rjr?rA�
p_py_arg_declr�r
)rBrXrYrZr[r\r+r+r,r]-
s(	




r]cCsb|j�}t|�}d}|rI|jdkrI|j�t|�}tj|d|d|�S)NrWrDr�)rJrEr?rAr_rZ
PyArgDeclNode)rBrYrKrDr�r+r+r,r�C
s
r�c
Cs|j�}|j�tt|��}|j|_d}d}|jdkrt|dd�\}}t|||�\}}|dkr�t	j
|dg�}t|tdd��\}}	t
j|d|d|d	|d
|d|	d|d
|jjdk�S)Nr�r�FrZr4r�rD�basesr�r)r}r�Zforce_py3_semanticsr#)rJrArrEr=r�r?r�r�rr�r&r$rZPyClassDefNoderQr()
rBr�rK�
class_namer�r�r�r�r)r}r+r+r,rM
s$
rcCs(|j�g}t|�}x6|jdkrT|j�|j|�t|�}qW|rw|jdkrwt|d�|r�|jdkr�|jdkr�|j�t|�}n|}d}d}d}|jdkrt|dd�\}	}
|
r|jd	�t||	|
�\}}|dkr?t	j
|d
g�}|jdkr�|jd(krz|jrzt|j�d
�t
|�\}}|jdkr�|jdkr�d}nd}t|td|��\}
}n|jd�d}
d}|jdkr+|st|d�|r�t|d�n�|jdkrc|sMt|d�|s�t|d�nU|jdkr�|jr�|s�t|d�|s�t|d�nt|d|j�tj|d|jd|jd|jddj|�d |d!|d"|d#|d$|d%|jdkd&|
d'|�S))Nr�rqz6Qualified class name only allowed for 'extern' C classr>r�r�r�Fz$C classes cannot take keyword bases.rZr�r~zBName options only allowed for 'public', 'api', or 'extern' C classrWrrrr4z"Syntax error in C class definitionz)Module name required for 'extern' C classz?Type object name specification not allowed for 'extern' C classz>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})r~rq)rArEr?rGr5r
r@r�r�rr�r8rJ�p_c_class_optionsr4r&r$r�rrr7r>)rBrKr.r:r�r�r�r�r�r�r�r�Z
body_levelr)r}r+r+r,r�d
s�



$

	!


	
			r�cCs�d}d}|jd�x{|jdkr,P|jdkrT|j�t|�}n%|jdkry|j�t|�}|jdkr�P|j�qW|jdd�||fS)Nr�r>�objectrtrFr�zExpected 'object' or 'type')r^r?r@rArE)rBr�r�r+r+r,r��
s"


r�cCse|j�}|j�t|�}t|tdd�dd�\}}tj|d|d|d|�S)Nr4rr%TrDr)r})rJrArEr&r$rZPropertyNode)rBrKrDr)r}r+r+r,r�
s
!rcCsQ|jdkrM|j�}t|�}|jddd�tj|d|�SdS)zO
    Parses any kind of ignorable statement that is allowed in .pxd files.
    rzSyntax error in stringr�TrbN)r?rJr�r�rr�)rBrKZstring_noder+r+r,r �
sr cCsl|jdkrd|j�}t|�\}}}|jddd�|dkrS|St|d�|SdSdS)	NrzSyntax error in doc stringr�Trr
z2Python 3 requires docstrings to be unicode strings)rr
)r?rJrr�r)rBrKr"Zbytes_resultZunicode_resultr+r+r,r'�
s
r'cCs>d}|dkrn�t|tj�rW|jjr�|j}tj|jdg�}n^t|tj�r�|jr�|j}t|dtj�r�|djjr�|dj}|d=|dkr�d}njt|tj	�r�t
|jd�|j}n<t|tj�r+|j
}|dkr4|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).
    Nr�rz2Python 3 requires docstrings to be unicode strings)r�rr�rbZis_string_literalr�rKr�rrrr�rr)r�Zdoc_noder�r)r+r+r,r(�
s2		
				r(cCsZt||d|�dd�}|jdkrV|jdt|j�t|j�f�|S)Nr4r�rrHz!Syntax error in statement [%s,%s])r�r?r
r/r@)rBr4r.r}r+r+r,�p_codes
	 r�z$^#\s*cython\s*:\s*((\w|[.])+\s*=.*)$cCs�i}x�|jdkr�t|j�}|r�|jd�j�}y |jtj|dd��Wn?tk
r�}z|j	|j
ddd�WYdd}~XnX|j�q	W|S)NZcommentlinerZignore_unknownTrr�F)r?�!_match_compiler_directive_commentr@rcror(rZparse_directive_list�
ValueErrorr
rZrA)rBr|�m�
directives�er+r+r,�p_compiler_directive_commentss-r�c	
Cs�|j�}t|�}d|_d|krA|jj|d�t|�}|r\d}nd}t||d|�dd�}|jdkr�|jd	t	|j�t	|j
�f�t|d
|d|d|d
|�S)NFr(rr�r4r�rrHz!Syntax error in statement [%s,%s]r)r}�full_module_name�directive_comments)rJr�r�rQZset_language_levelr'r�r?r
r/r@r)	rBr�r�r.rKr�r)r4r}r+r+r,�p_modules 			 r�cCsNt|�}|jdkr>|jd�|jd�d}nd}||fS)Nr�ryFT)rEr?r^)rBrD�requiredr+r+r,�p_template_definition5s

	r�cCs�|j�g}t|�}t|�}|dkrT|jdk	rT|jd|}|jdkrpt|d�|jdkr�|j�t|�g}x0|jdkr�|j�|jt|��q�W|jd�dd�|D�}nd}d}|jd	krq|j�t	|d
|�g}x6|jdkr`|j�|jt	|d
|��q+W|jd�ng}|jdkr�t|j
�d�t|�}	|jd
krm|j�|jd�|j�g}
t
d|jddd|	p�|j�}||_xR|jdkr_|jdkrE|
jt||��q|j�|jd�qW|j�nd}
|jd�tj|d|d|d|d|jd|jdkd|
d
|�S)Nz::r�z*Qualified class name not allowed C++ classr�rFr�cSsg|]\}}|�qSr+r+)r�rDr�r+r+r,r�Ps	z*p_cpp_class_definition.<locals>.<listcomp>r�r<r�z&Name options not allowed for C++ classrWrFr5r4r�r:r$r�zExpected a newlinez$Syntax error in C++ class definitionrDr^�base_classesr�rr�)rArEr_r;r?r
r�rGr^r�rJrlr�r$r5r:r<�p_cpp_class_attributer�r�rZCppClassNoder4)rBrKr.r:r�r^r<Ztemplate_namesr�r:r�r�r+r+r,r�?sh









'	


	r�cCsFd}|jdkr!t|�}|jdkrFt||j�|�S|jdkrbt||�S|jdkr�|jtkr�|jdkr�t||j�|�St||j�|�Sn�t||j�|�}|dk	r>t	j
t	jt	jf}|j
r|t	jt	jf7}t||�s5|jd�||_|SdS)Nr�r�r
r>rZz7Decorators can only be followed by functions or classes)r?rr@r�rJrr�r�r�rrrrr=rrr�r
r�)rBr.r�r�r"r+r+r,r�zs(
	
	r�c
Cs�d|}|r�|j|�|r4|jd|�t|�}|tkr�|jd|d|df�x5tdt|��D]}t||||d�q�W|jd|�dSt|tj�rey
|j	}Wnt
k
r�|jj}YnX|jd||j
f�xL|jj�D];\}}	|d	kr"|d
kr"t||	|d|�q"WdS|tkr�|jd�x2tt|��D]}t||||d�q�W|jd|�dS|jd
||f�dS)Nz  z%s: z	(%s @ %s
rrr"z%s)
z%s @ %s
�tagrKz[
z%s]
z%s%s
)�writertr��ranger��print_parse_treer�r�Noder�r�r9r1rKr'r�r�)
rr�r4r��ind�trpr�rDr�r+r+r,r��s:




r�)TF)rr)rr)r"r)r"r)r"r)rr)r"r)rr)�r�r�cythonrr�rS�iorrr�unicodedatarr	rr
�	functoolsrrZScanningr rr!r
rrrrrrrrrZErrorsr
rrrr�version_infor�
maxunicoderr$rErIrMrVrcrdr_r`rirkrlrnrqrzrtrwrvr<rur{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�rr!r,rr@rCr;rMrrrNrdrr~rxr|rrr�rzr�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�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrr
rr#r�r�r&r,r�r2r1r.r/r6rDr4r5rIr�r>rBrOrAr�r?r\rJr�r@r_r�rfrcrtrdrlrnrmrvrjrkrwr}rr�r�r�r�r�r�r�r�r�r�r�rrr�r]r�rr�r�rr r'r(r�r]r_r�r�r�r�r�r�r�r+r+r+r,�<module>s�"
	3*

? 
),d.	0z	n
	/
$Q!

!+$		"#f8	Q(
$		!
V'3)
$"8
I	
#
;