o
    e2                    @   s6
  d dl mZ d dlZejdi dedededededed	ed
ededededededededededededededededejdejdede d dlm	Z	 d dl
Z
d dlZd dlmZmZ d d lmZm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  d!d(l!m!Z! d!d)l"m#Z#m$Z$ d*d+lm%Z% d!d,lm&Z& d!d-lm'Z' ej(d  d.kZ)ej*d/kZ+d0Z,G d1d2 d2eZ-dd4d5Z.d6d7 Z/d8d9 Z0d:d; Z1d<d= Z2d>d? Z3d@dA Z4dBdC Z5dDdEdFZ6dGdH Z7dIdJ Z8dKdL Z9dMdN Z:dOdP Z;dQdR Z<dSdT Z=dUdV Z>dWdX Z?dYdZ Z@eeAeAd[ZBd\d] ZCd^d_ ZDd`da ZEdbdc ZFddde ZGdfdg ZHdhdi ZIdjdk ZJdldm ZKdndo ZLdpdq ZMdrds ZNdtdu ZOdvdw ZPdxdy ZQdzd{ ZRdd}d~ZSdd ZTdd ZUdd ZVdd ZWdd ZXdd ZYdd ZZdd Z[dddZ\dd Z]dd Z^dd Z_dd Z`dd ZadddZbdd ZcdddZddd Zedd dD \ZfZgdd Zhdd Zidd Zjdd Zkdd Zldd Zmdd Zndd Zodd ZpdddZqdddZrdddZsdd Ztdd ZuddĄ ZvddƄ ZweeAeAdǃZxddɄ Zydd˄ Zzdd̈́ Z{ddτ Z|ddф Z}ddӄ Z~dddՄZddׄ Zddل Zddۄ Zdd݄ Zdd߄ ZdddZdd Zdd Zdd Zdd ZeeAeAdZdd Zdd Zdd Zdd ZdddZdddZdd Zdd ZeeAeAdZdd Zdd  ZdddZdd Zdd Zdd Zd	d
 Zd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dd ZdddZddd Ze- fd!d"Zdd#d$Zdd%d&Zdd'd(Zd)d* ZeeAeAd+Zdd,d-Zdd.d/Zd0d1 Zd2d3 Zd4d5 Zd6d7 Zd8d9 Zd:d; Zd<d= Zd>d? ZeeAeAd@ZeedAdAdBdBdBdAdBdCdDZeeAeAdEZeeAeeB eAeB ZeeAeAdFZdGdH ZdIdJ Ze- d d d d d d fdKdLZdMdN ZdOdP ZeeAeAdQZdRdS ZdTdU ZdVdW ZÐdXdY ZeeAeAdZZe- d d d d d!fd[d\ZƐd]d^ Z	 	!dd_d`ZȐdadb Zɐdcdd Zʐdedf Zː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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 Zde-fddZeee
djZdd Ze-fddZdd Zdd Zdd ZdddZdd ZdS (      )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_CDEF_MODIFIERSCOMMON_BINOP_MISTAKES)StringIO)lookupcategory)r   r      )PyrexScannerr   tentatively_scan)r   )r   )r   )r   )r   r   r   r   )r   )r   r      )r   )r   )r      i  )inlinenogilapic                   @   sD   e Zd ZdZdZdZdZdZdZdZ	dZ
dZdZdd Zdd	 ZdS )
Ctxotherprivater   NFc                 K   s   | j | d S N)__dict__update)selfkwds r1   GD:\Projects\ConvertPro\env\Lib\site-packages\Cython/Compiler/Parsing.py__init__7      zCtx.__init__c                 K   s&   t  }|j}|| j || |S r,   )r)   r-   r.   )r/   r0   ctxdr1   r1   r2   __call__:   s
   
zCtx.__call__)__name__
__module____qualname__level
visibility	cdef_flagtypedef_flagr(   overridabler'   	namespace	templatesallow_struct_enum_decoratorr3   r7   r1   r1   r1   r2   r)   *   s    r)   Expected an identifierc                 C   s2   | j dkr| j| j}|   |S | | d S NIDENT)sycontextintern_ustringsystringnextr   )smessagenamer1   r1   r2   p_identB   s
   
rN   c                 C   sP   g }| j dkr&|| j| j |   | j dkr	 |S |   | j dks|S )NrE   ,)rF   appendrG   rH   rI   rJ   )rK   namesr1   r1   r2   p_ident_listJ   s   


rR   c                 C   s   |   }| j}|   ||fS r,   )positionrF   rJ   )rK   posopr1   r1   r2   p_binop_operatorZ   s   rV   c                 C   sh   || }| j |v r2t| \}}|| }t||||}|dkr-tj| jjv r*d|_nd |_| j |v s	|S )N/T)	rF   rV   r   
binop_noder   divisionrG   future_directivesZtruedivision)rK   opsZ
p_sub_exprn1rU   rT   n2r1   r1   r2   p_binop_expr`   s   

	r^   c                 C   sb   |   }|   | jdkrg }d  }}n
t| ddd\}}}| d t| }tj|||||dS )N:F)
terminator	annotated)argsstar_argstarstar_argZresult_expr)rS   rJ   rF   p_varargslistexpectp_testr   Z
LambdaNode)rK   rT   rb   rc   rd   exprr1   r1   r2   	p_lambdefo   s   


ri   c                 C   s    t | }| jdkr| d |S )N:=zAinvalid syntax: assignment expression not allowed in this context)p_test_allow_walrus_afterrF   r   )rK   rh   r1   r1   r2   rg      s   

rg   c                 C   sd   | j dkr	t| S |  }t| }| j dkr0|   t| }| d t| }tj||||dS |S )Nlambdaifelse)testZtrue_valZ	false_val)	rF   ri   rS   	p_or_testrJ   rf   rg   r   ZCondExprNode)rK   rT   rh   ro   r*   r1   r1   r2   rk      s   


rk   c                 C   sR   t | }| jdkr'|  }|js| jddd |   t| }tj|||dS |S )Nrj   z=Left-hand side of assignment expression must be an identifierFfatallhsrhs)	rk   rF   rS   is_namer   rJ   rg   r   ZAssignmentExpressionNode)rK   rt   rS   ru   r1   r1   r2   p_namedexpr_test   s   
rw   orand)z||&&c                 C      t | dtS )Nrx   )p_rassoc_binop_expr
p_and_testrK   r1   r1   r2   rp         rp   c                 C   s   || }| j |kr$|  }| j }|   t| ||}t||||}|S | j tv r>t| j  |kr>t|  d| j |f dd |S )NzAFound the C operator '%s', did you mean the Python operator '%s'?r!   r;   )rF   rS   rJ   r|   r   rX   r   r   )rK   rU   Z	p_subexprr\   rT   r]   r1   r1   r2   r|      s   
r|   c                 C   r{   )Nry   )r|   
p_not_testr~   r1   r1   r2   r}      s   r}   c                 C   s4   | j dkr|  }|   tj|t| dS t| S )Nnotoperand)rF   rS   rJ   r   ZNotNoder   p_comparisonrK   rT   r1   r1   r2   r      s
   
r   c                 C   sT   t | }| jtv r(|  }t| }t | }tj||||d}| jtv r(t| |_|S )N)operatorZoperand1operand2)	p_starred_exprrF   comparison_opsrS   p_cmp_opr   ZPrimaryCmpNodep_cascaded_cmpcascade)rK   r\   rT   rU   r]   r1   r1   r2   r      s   


r   c                 C      | j dkr	t| S t| S N*)rF   r   rg   r~   r1   r1   r2   p_test_or_starred_expr      
r   c                 C   r   r   )rF   r   rw   r~   r1   r1   r2    p_namedexpr_test_or_starred_expr   r   r   c                 C   s@   |   }| jdkrd}|   nd}t| }|rt||}|S )Nr   TF)rS   rF   rJ   
p_bit_exprr   ZStarredUnpackingNode)rK   rT   Zstarredrh   r1   r1   r2   r      s   

r   c                 C   s@   |   }t| }t| }tj|||d}| jtv rt| |_|S )N)r   r   )	rS   r   r   r   ZCascadedCmpNoderF   r   r   r   )rK   rT   rU   r]   resultr1   r1   r2   r      s   

r   c                 C   sp   | j dkr|   | d d}n| j dkr)|   | j dkr&|   d}n
d}n| j }|   |dkr6d}|S )Nr   inZnot_inisis_not<>!=)rF   rJ   rf   rK   rU   r1   r1   r2   r     s   



r   )
<>==>=<=r   r   r   r   r   c                 C   r{   )N)|)r^   
p_xor_exprr~   r1   r1   r2   r      r   r   c                 C   r{   )N)^)r^   
p_and_exprr~   r1   r1   r2   r   %  r   r   c                 C   r{   )N)&)r^   p_shift_exprr~   r1   r1   r2   r   *  r   r   c                 C   r{   )N)<<>>)r^   p_arith_exprr~   r1   r1   r2   r   /  r   r   c                 C   r{   )N)+-)r^   p_termr~   r1   r1   r2   r   4  r   r   c                 C   r{   )N)r   @rW   %z//)r^   p_factorr~   r1   r1   r2   r   9  r   r   c                 C   s   t | S r,   )	_p_factorr~   r1   r1   r2   r   >  s   r   c                 C   s   | j }|dv r| j }|  }|   t||t| S | jsJ|dkr5|  }|   t| }tj||dS |dkr=t| S |dkrJ| j	dkrJt
| S t| S )N)r   r   ~r   r   r   rE   sizeof)rF   rS   rJ   r   Z	unop_noder   in_python_fileZAmpersandNode
p_typecastrI   p_sizeofp_power)rK   rF   rU   rT   argr1   r1   r2   r   B  s"   r   c                 C   s   |   }|   t| }t|tj}t|tjtjtjf}|s+|s+|j	d u r+| 
d t| dd}| jdkr=|   d}nd}| d t| }|rRtj|||dS tj|||||dS )	NzUnknown typer!   empty?r   r   )base_type_noder   )	base_type
declaratorr   	typecheck)rS   rJ   p_c_base_type
isinstancer   MemoryViewSliceTypeNodeTemplatedTypeNodeCConstOrVolatileTypeNodeCTupleBaseTypeNoderM   r   p_c_declaratorrF   rf   r   r   ZCythonArrayNodeZTypecastNode)rK   rT   r   Zis_memsliceZis_other_unnamed_typer   r   r   r1   r1   r2   r   U  s4   


r   c                 C   sl   |   }|   | d t| rt| }tj||d}nt| }t| dd}tj	|||d}| d |S )N(r   r!   r   r   r   ))
rS   rJ   rf   looking_at_exprrg   r   ZSizeofVarNoder   r   ZSizeofTypeNode)rK   rT   r   noder   r   r1   r1   r2   r   s  s   

r   c                 C   s   |   }|   d}| jdkrd}|   | jdkr*| jtvr*|r%t| nt| }n|r4| jd|dd d }|r?tj||dS tj	||dS )NFfromTr   z''yield from' requires a source argumentrT   rr   r   )
rS   rJ   rF   statement_terminatorsrg   
p_testlistr   r   ZYieldFromExprNodeYieldExprNode)rK   rT   Zis_yield_fromr   r1   r1   r2   p_yield_expression  s    
r   c                 C   s   t | }tj|j|dS )Nrh   )r   r   ExprStatNoderT   )rK   Z
yield_exprr1   r1   r2   p_yield_statement  s   r   c                 C   s   | j dkrd|jv r| d |j| _t| |ddS |r#| d d S | j dkr.t| ddS | j d	kr=|   t| ddS | d
 d S )Ndefpxddef statement not allowed hereT)is_async_def7Decorators can only be followed by functions or classesforis_asyncwithz2expected one of 'def', 'for', 'with' after 'async')rF   r;   r   p_def_statementp_for_statementrJ   p_with_items)rK   r5   
decoratorsr1   r1   r2   p_async_statement  s   




r   c                 C   s   | j dkr|  d dkrt| S d }| jdkr |  }|   t| }| jdv r3t| |}| jdv s)|r<tj	||d}| jdkrU|  }|   t
| }t|d||}|S )Nnewr   rE   await)r   [.r   **)rI   peek
p_new_exprrF   rS   rJ   p_atom	p_trailerr   ZAwaitExprNoder   rX   )rK   Z	await_posr\   rT   r]   r1   r1   r2   r     s$   




r   c                 C   s,   |   }|   t| }t| tj||dS )N)cppclass)rS   rJ   r   p_callr   ZNewExprNode)rK   rT   r   r1   r1   r2   r     s   r   c                 C   sP   |   }| jdkrt| |S | jdkrt| |S |   t| }tj|||dS )Nr   r   )obj	attribute)rS   rF   r   p_indexrJ   rN   r   AttributeNode)rK   Znode1rT   rM   r1   r1   r2   r     s   



r   Tc           
      C   s  |   }|   g }g }d}d}| jdkr| jdkr3|r%| jd|   d |   |t|  d}nd| jdkrF|   |t|  d}nQt| }| jdkry|   |js^| jd	|jd | j	
|j}tj|j|d
}	t| }||	|f n|r| jd|jd |r|s|d | n||g d}| jdkrn	|   | jdks| jdv r|s|st|dkrt|d dkrt| |d d gg}| d |pg g|fS )NFr   r   %Non-keyword arg following keyword argrT   Tr   =z!Expected an identifier before '='valuerO   r   asyncr!   r   )rS   rJ   rF   r   rP   rg   rw   rv   rT   rG   rH   rM   r   IdentifierStringNodelenp_genexprf   )
rK   allow_genexprT   positional_argskeyword_argsZstarstar_seenZlast_was_tuple_unpackr   encoded_namekeywordr1   r1   r2   p_call_parse_args  s\   






#
r  c                    s  d } fdd|D }t ttj d|}|rg }g }|D ]9}t|tr5|\}	}
|tj|	j|	|
d q|j	r?|
|j q|rQ|tj|d j|dd g }|| q|rg|tj|d j|dd |rt|dkr||d j	r||d }||fS tj |d	}||fS )
Nc                    s2   g | ]}t |trtj |d ntj |dqS )rb   r   )r   listr   	TupleNodeZAsTupleNode.0r   r   r1   r2   
<listcomp>"  s    $z,p_call_build_packed_args.<locals>.<listcomp>r   rT   keyr   r   T)key_value_pairsreject_duplicatesr!   )r   )r   r   r   rX   r   tuplerP   DictItemNoderT   is_dict_literalextendr  DictNoder   MergedDictNode)rT   r   r   keyword_dictZ	subtuples	arg_tuplekwargs
dict_itemsitemr
  r   r1   r   r2   p_call_build_packed_args  s<   

r  c                 C   sh   |   }t| \}}|s#t|dkr#t|d tr#tj|||d dS t|||\}}tj||||dS )Nr!   r   )functionrb   )r  r   r   )	rS   r  r   r   r  r   ZSimpleCallNoder  ZGeneralCallNode)rK   r  rT   r   r   r  r  r1   r1   r2   r   I  s   r   c           
      C   s   |   }|   t| \}}|r(t|d dkr(|d \}}tj||||d}nt||}|r4|d }	ntj||d}	tj|||	d}| 	d |S )Nr   r$   )basestartstopr  r  index])
rS   rJ   p_subscript_listr   r   SliceIndexNodemake_slice_nodesr  	IndexNoderf   )
rK   r  rT   
subscriptsis_single_valuer  r  r   indexesr  r1   r1   r2   r   Z  s"   


r   c                 C   sX   d}t | g}| jdkr(d}|   | jdkr	 ||fS |t |  | jdks||fS )NTrO   Fr  )p_subscriptrF   rJ   rP   )rK   r%  itemsr1   r1   r2   r   n  s   



r   c                 C   sb   |   }t| d}| jdkr|gS |   t| d}| jdkr#||gS |   t| d}|||gS )N)r_   r_   )r_   rO   r  )rS   p_slice_elementrF   rJ   )rK   rT   r  r  stepr1   r1   r2   r'  {  s   





r'  c                 C   s   | j |vr	t| S d S r,   )rF   rg   )rK   Z
follow_setr1   r1   r2   r)    s   
r)  c                 C   s   |  d d S )N...)rf   r~   r1   r1   r2   expect_ellipsis  s   r,  c                 C   sD   g }|D ]}t |dkr||d  q|t| g|R   q|S )Nr!   r   )r   rP   make_slice_node)rT   r$  r   	subscriptr1   r1   r2   r"    s   r"  c                 C   s<   |st | }|st | }|st | }t j| |||dS )N)r  r  r*  )r   NoneNodeZ	SliceNode)rT   r  r  r*  r1   r1   r2   r-    s   


r-  c           	      C   s<  |   }| j}|dkr1|   | jdkrtj|g d}n| jdkr&t| }nt| }| d |S |dkr9t| S |dkrAt	| S |dkrIt
| S |dkrVt|  t|S |d	kr^t| S |d
krp| j}|   tj||dS |dkr| jd d }|   tj||dS |dkrt| \}}}|dkrtj||dS |dkrtj|||dS |dkrtj||dS |dkrtj||dS |dkrtj|||dS | d|  d S |dkr| j}|dkrt|}n,|dkrtj|dd}n |dkrtj|dd}n|dkr| jst|}nt| |}|   |S | d d S ) Nr   r   r  yieldr   {`r+  INTFLOATr   ZIMAGr   BEGIN_STRINGcu)r   bytes_valuebfvalues )r   unicode_valuezinvalid string kind '%s'rE   NoneTrueTFalseFNULLz!Expected an identifier or literal)rS   rF   rJ   r   r  r   p_testlist_comprf   p_list_makerp_dict_or_set_makerp_backquote_exprr,  EllipsisNodep_int_literalrI   	FloatNodeImagNodep_cat_string_literalCharNodeUnicodeNode	BytesNodeJoinedStrNode
StringNoder   r/  BoolNoder   ZNullNodep_name)	rK   rT   rF   r   r   kindr8  r>  rM   r1   r1   r2   r     sr   






r   c                 C   s   |   }| j}|   d}d}|d dv r0|d dv r |d7 }n|d7 }|d d }|d dv sd }|r7d}n|rE|dksC| jjd	krEd}| jrQ|rOt|d
 d}tj|||||dS )Nr=  r   ZUuLlZLlLUTZLLr%   z4illegal integer literal syntax in Python source fileF)is_c_literalr   unsignedlongness)	rS   rI   rJ   rG   language_levelr   r   r   IntNode)rK   rT   r   rW  rX  rV  r1   r1   r2   rH    s6   
	
rH  c                 C   sH   |   }| js|| jv r| j|}t||}|d ur|S tj||dS )NrM   )rS   compile_time_exprcompile_time_envZlookup_herewrap_compile_time_constantr   NameNode)rK   rM   rT   r   r   r1   r1   r2   rR    s   
rR  c                    s  t |}|d u rt S |tu rt S t|tr"tj |dS t|tr/tj	 ||dS t|t
r<tj ||dS t|tritj t |jtd|jd}|jrgtj dtj t |j|jd||d}|S t|trwtj t|dS t|trt|d}tj ||dS t|tr fdd|D }d |vrtj |d	S d S tst|trtj	 |d
|dS t d||jjf  d S )Nr   )r   constant_resultg        r   )r`  asciic                    s   g | ]}t  |qS r1   )r^  r  r   r1   r2   r  3  s    z.wrap_compile_time_constant.<locals>.<listcomp>r  rT  z4Invalid type for compile-time constant: %r (type %s))reprr   r/  EllipsisrG  r   boolrQ  intrZ  floatrI  complexrJ  imagrealrX   r   rM  r   r   r   rN  r  r  r   longrstripr   	__class__r8   )rT   r   repr   Zbvaluerb   r1   r   r2   r^    sJ   











r^  c                 C   s  |   }t| \}}}|dks| jdkr|||fS |g|g|g}}}d  }}| jdkrs|   }t| \}}	}
|dkrBt|d q(||kr_||hddhddhfv rUd}n
t|d||f  q(||	 ||
 || | jdks-|dv s|dkrd |vrtt|| j}|d	v rt	d
d
d |D }|dkrg }t||D ]\}}t|tr||7 }q|tj|t	|d q|||fS )Nr6  r5  zCCannot concatenate char literal with another string or char literalr:  r7  r=  zFCannot mix string literals of different types, expected %s'', got %s'')r9  r6  r=  r7  r=  c                 S   s   g | ]}|d ur|qS r,   r1   )r  r7  r1   r1   r2   r  a      z(p_cat_string_literal.<locals>.<listcomp>r   )rS   p_string_literalrF   r   rP   r   r   Z
join_bytessource_encodingr   joinzipr   r  r   rM  )rK   rT   rS  r8  r>  ZbstringsZustringsZ	positionsZ	next_kindZnext_bytes_valueZnext_unicode_valuer7  r1   r1   r2   rK  A  sD   









rK  r7  c                 C   s`   | j dkrd S |  }t| |\}}}|dkr#|dkr!| d| |S |dkr)|S | d d S )Nr5  r7  r:  zf-string not allowed herer9  z#internal parser configuration error)rF   rS   rp  r   )rK   Zrequired_typerT   rS  r8  r>  r1   r1   r2   p_opt_string_literalm  s   
rt  c                 C   s   | D ]	}|dkr dS qdS )N   TFr1   )stringr6  r1   r1   r2   check_for_non_ascii_characters|  s
   rw  c                 C   s.  |   }| jjdk}d}|d |d |d t| j f}| jd }t|dkr`tt|t|kr9t|d d|v rFd	|v rFt|d
 d|v rSd|v rSt|d d	|v r`d|v r`t|d d|v }d|v rvt|dkrst|d d}nd|v rd}d}nd|v rd}n	d	|v rd	}nd}|dkr|d u rt	j
| jjv rt| j}	d	}n$|d ur|dv r|}|dv rt }	n|dkrt| j}	nt| j}		 |   | j}
| j}|
dkr|	| |r|st|rd}nX|
dkr|r|s|d	ks|d dvr|	| |r|st|rd}n0t||	||  n(|
dkr%|	d n|
dkr+n|
dkr8| jd|d n
| d|
| jf  q|dkr]d }|	 }t|dkr\t|d|  n"|	 \}}|r|rt	j
| jjv r|dkr}| jd |d d }|dkrt| ||d|v d!}|   |||fS )"Nr%   Fr   r!   r$   z"'z!Duplicate string prefix characterr9  r7  z*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rr6  z+Invalid string prefix for character literalTr=  Zub)r7  r:  ZCHARSESCAPEZUuNEWLINE
Z
END_STRINGEOFzUnclosed string literalr   z(Unexpected token %r:%r in string literalzinvalid character literal: %rz0bytes can only contain ASCII literal characters.)is_raw)rS   rG   rY  r   rI   rk  lowersetr   r   unicode_literalsrZ   r   ZStrLiteralBuilderrq  UnicodeLiteralBuilderZBytesLiteralBuilderrJ   rF   rP   rw  _append_escape_sequenceZgetcharZ
getstrings
p_f_string)rK   Zkind_overriderT   Zis_python3_sourceZ has_non_ascii_literal_charactersZstring_start_posZkind_stringr}  rS  charsrF   Zsystrr>  r8  r1   r1   r2   rp    s   
 







 







rp  c              	   C   s  |d }|dv r| t|dd  d d S |dv r!|| d S |dv r/|t| d S |dkr5d S |dkrXt|dkrM| t|d	d  d
 d S |jd| dd d S |dv r| dv rd}|dkrd }zt|dd }t|}W n{ t	y   |jdt
|dd d dd Y na ty   |d urtrt|d	krt|d dkrt|d dkrdt|d d  dt|d d  ? }n Y n'w t|dv rt|d	d  d
}|dkr|d|  d}n	|jd| dd |dkr||| d S d S || d S )Nr!   01234567   z'"\Zabfnrtvr{  x   r$      zInvalid hex escape '%s'Frq   ZNUu)r7  r:  r=  r   Nr%   z!Unknown Unicode character name %sr7  r   Csi   i   
   i   )   r  i zInvalid unicode escape '%s')Zappend_charvalre  rP   r   Zchar_from_escape_sequencer   r   r	   ordKeyErrorrb  lstrip	TypeErrorr   r
   Zappend_uescape)rS  builderZescape_sequencerK   r6  ZchrvalZucharr1   r1   r2   r    sX   
 *
r  c                 C   s.   g | ]}t d |rdnd d djqS )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   )?|\{\{?|\}\}?|[^\\{}]+)zus-ascii)r   compiledecodematch)r  r}  r1   r1   r2   r    s    
r  )TFc                 C   s   | d | d | d | d fS )Nr   r!   r$   r1   )rT   rv  ir1   r1   r2   _f_string_error_pos,  s   r  c                 C   sf  g }d}t |}t }|rtnt}||k r|}	|||}
|
d u r*tt|||d |
 }|
 }|d }|dkrP|sJt |dkrJt	d|||  nT|
| nN|dkr|dkr^|
d n@|jrq|
tj|| d t }t| ||||\}}|| n|d	kr|d
kr|
d	 ntt|||	d n|
| ||k s|jr|
tj|| d |S )Nr   zInvalid escape sequence\r!   r:  r1  z{{r   }z}}z#f-string: single '}' is not allowed)r   r   r  r   r   r   r  endgroupr  rP   r  r   rM  Z	getstringp_f_string_exprr  )rK   r>  rT   r}  r<  Z
next_startsizer  Z
_parse_seqr  r  partr6  Z
expr_nodesr1   r1   r2   r  0  sH   

!r  c                 C   s  |}t |}d  } }}	d }
d }d}d}|}d}d}	 ||kr n|| }||krb|dkr:|s7tt|||d d}n||kra|r_|d |k r^||d  |kr^||d  |kr^d}|}|d7 }nu|}nr|d	v r|}|d |k r||d  |kr||d  |krd}|d7 }nO|d
v r|d7 }nF|dkr|dv r|d8 }n9|dkrtt|||d n+|dkr|dv r|d |k r|dv r||d  dkr|d7 }q|dv r|d7 }q|}n|d7 }q||| dddd}|d |d |d | d f}| stt|||d |dkr8|d7 }||k r)||  r)|d7 }||k r)||  s||k r8|| }||| }|dkrU|d7 }|d |krIn|| }|d7 }|| }|dkrd}d}d}|d }	 ||krkn[|| }|s|s|dkr|d7 }n|dkr|dkr|d8 }n|}n5|d	v r|s|d |k r||d  |kr||d  |kr| }|d7 }n|s| }|d7 }qe||| }
|r|d u r|
d u rd}|dkrtt|||d|rd| nd  td| }t||d | | j|d}t	|}|d urt
j|st|d |  |
r*t
j|t| |
||d!}	g }|r<|t
j|t|d" |t
j||||	d# |d |fS )$Ni   @r   FTr  z$backslashes not allowed in f-stringsr$   r!   z'"z{[(z}])#zformat string cannot include #z><=!:}z!=><r   z><z
r{  z(empty expression not allowed in f-string!r_   r1  r  rx  z'missing '}' in format string expressionz, found '%s'r=  z(%s))Zparent_scannerrq  Zinitial_posz!invalid conversion character '%s'r;  r   )r   conversion_charformat_spec)r   r   r  replacestripisspacer   r"   rq  r   r   ZFormattedValueNodeZfind_conversion_funcrO  r  rP   rM  r   r   )rK   r>  rT   Zstarting_indexr}  r  r  r  Zterminal_charr  Zformat_spec_strZ	expr_textZNO_CHARZnested_depth
quote_charZin_triple_quotesZbackslash_reportedr6  Zexpr_strZexpr_posZ	in_stringZstart_format_specbufscannerrh   nodesr1   r1   r2   r  _  s   ,,

.











8

r  c                 C   s   |   }|   | jdkr| d tj|g dS t| }| jdv rJ|jr*| d tj	||d}t
| |}| d tj|||tj| jjdkdS | jdkrY|   t| |}n|g}| d tj||dS )	Nr  r  r   2iterable unpacking cannot be used in comprehensionr   r%   )looprP   typeZhas_local_scoperO   )rS   rJ   rF   rf   r   ListNoder   
is_starredr   ComprehensionAppendNode
p_comp_forComprehensionNoder   Z	list_typerG   rY  %p_namedexpr_test_or_starred_expr_list)rK   rT   rh   rP   r  exprsr1   r1   r2   rD    s,   









rD  c                 C   s,   | j dv r
t| |S | j dkrt| |S |S )Nr   rm   )rF   r  	p_comp_if)rK   bodyr1   r1   r2   p_comp_iter  s
   



r  c                 C   sb   |   }d}| jdkrd}|   | d t| d|d}|jd t| ||d tj|fi |S )NFr   Tr   allow_testlistr   )else_clauser  r   )	rS   rF   rJ   rf   p_for_boundsr.   r  r   ForStatNode)rK   r  rT   r   kwr1   r1   r2   r     s   

r  c                 C   s<   |   }|   t| }tj|tj||t| |dgd dS )N	conditionr  
if_clausesr  )rS   rJ   rp   r   
IfStatNodeIfClauseNoder  )rK   r  rT   ro   r1   r1   r2   r  .  s   r  c                 C   s  |   }|   | jdkr|   tj|g dS g }d}d}	 | jdv rc|dkr2| jdkr/dnd	}n|t| jkrI| d
| j|dkrDdndf  |   | jdkrW| d t| }|| d}n;t	| }|dkrt| jdkrrd	nd}|d	kr| 
d |}t	| }tj|j||d}|r|d | n||g d}| jdkr|   | jdkrnnnq| jdv r2t|dkrt|d trt|d dkr|d d }|d	krt|tjsJ t|tj}tj|j|j|jd}	ntj}tj|j|d}	t| |	}
| 
d tj||
|	|dS t|dkr&t|d ts&| d n| 
d tj|g dS | 
d |dkrg }g }|D ]'}t|trQ|| qB|rc|tj|d j|d g }|| qB|rz|tj|d j|d t|dkr|d jr|d S tj||tjdS g }g }|D ]'}t|tr|| q|r|tj|d j|d g }|| q|r|tj|d j|d t|dkr|d jr|d S tj||ddS )Nr  r  r   FTr   r   r   r!   r$   z%unexpected %sitem found in %s literalr  dictzexpected expression, found '*'r_   )r
  r   r   rO   r   )Zkey_exprZ
value_exprr   )r  rP   r  r  r  )rb   r  )r   r  )rS   rJ   rF   r   r  r   r   r   rP   rg   rf   r  rT   r   r  r  r   	dict_typeZDictComprehensionAppendNoder
  r   set_typer  r  r  r  ZSetNodeZis_set_literalZMergedSequenceNoder  r  )rK   rT   partsZtarget_typeZlast_was_simple_itemr  r
  r   Zcomprehension_typerP   r  r(  Z	set_itemsr  r  r1   r1   r2   rE  D  s   







%0




rE  c                 C   s   |   }|   t| g}| jdkr"|   |t|  | jdks| d t|dkr2|d }ntj||d}tj	||dS )NrO   r2  r!   r   r  r   )
rS   rJ   rg   rF   rP   rf   r   r   r  ZBackquoteNode)rK   rT   rb   r   r1   r1   r2   rF    s   




rF  c                 C   P   |d ur|gpg }| j tvr&|t|  | j dkr	 |S |   | j tvs|S NrO   )rF   expr_terminatorsrP   rg   rJ   rK   rh   r  r1   r1   r2   p_simple_expr_list     


r  c                 C   r  r  )rF   r  rP   r   rJ   r  r1   r1   r2   p_test_or_starred_expr_list  r  r  c                 C   r  r  )rF   r  rP   r   rJ   r  r1   r1   r2   r    r  r  c                 C   >   |   }t| }| jdkr|   t| |}tj||dS |S NrO   r  )rS   rg   rF   rJ   r  r   r  rK   rT   rh   r  r1   r1   r2   r        

r   c                 C   r  r  )rS   r   rF   rJ   r  r   r  r  r1   r1   r2   p_testlist_star_expr  r  r  c                 C   sR   |   }t| }| jdkr|   t| |}tj||dS | jdv r't| |S |S )NrO   r  r   )rS   r   rF   rJ   r  r   r  r   r  r1   r1   r2   rC    s   



rC  c                 C   s2   t | tj|jtj|j|dd}tj|j|dS )Nr   r   )r  )r  r   r   rT   r   r   ZGeneratorExpressionNode)rK   rh   r  r1   r1   r2   r     s   r   )r   r  r  r_   r   rz  c                 C   &   |   }|   t| }tj||dS N)rQ   )rS   rJ   rR   r   Z
GlobalNoderK   rT   rQ   r1   r1   r2   p_global_statement  s   r  c                 C   r  r  )rS   rJ   rR   r   ZNonlocalNoder  r1   r1   r2   p_nonlocal_statement  s   r  c                 C   s  t | }d}| jdkr|js|js|jrd}|   t| |_| jdkr/|jr/| j	d|j
d |g}| jdkrS|   | jdkrEt| }nt | }|| | jdks7t|dkrtd	| jr|d
 }t|tjr|tj|j
|jt|j
|j|jd}nt|tjtjtjfst	|j
d | jd d }|   | jdkrt| }nt| }tj|j
|||dS |d
 }tj|j
|dS |d }t|dkrtj|j
|d
 ||dS tj|j
|d d |dS )NFr_   Tr   zqa starred assignment target must be in a list or tuple - maybe you meant to use an index assignment: var[0] = ...r   r0  r!   z([-+*/%^&|]|<<|>>|\*\*|//|@)=r   r  z&Illegal operand for inplace operation.r   )r   rt   ru   r   r$   )rt   ru   first)Zlhs_listru   ) r  rF   rv   Zis_subscriptZis_attributerJ   p_annotation
annotationr  r   rT   r   rP   r   r   r  r   r   r!  r#  r  r-  r  r  r   r_  r   r   ZInPlaceAssignmentNoder   SingleAssignmentNodeZCascadedAssignmentNode)rK   rh   Zhas_annotationZ	expr_listrt   r   ru   r1   r1   r2   p_expression_or_assignment#  sR   







r  c                 C   s   |   }d}|   | jdkr&|   t| }| jdkr%|   | jdv }nd }g }| jdvrS|t|  | jdkrS|   | jdv rGd}n|t|  | jdks;tj||d}tj|||| dS )Nr   r   rO   rz  r|  r!   r  )r  streamZappend_newline)	rS   rJ   rF   rg   rP   r   r  r   ZPrintStatNode)rK   rT   Zends_with_commar  rb   r  r1   r1   r2   p_print_statementV  s4   






r  c                 C   s   |   }|   t| }t|tjr-d}|j}t|dvr,| jdt| |dd |g}nd}|g}| j	dkr[|r@| jddd |   |
t|  | j	d	kr[|   |
t|  tj||d
S )NT)r$   r%   z.expected tuple of length 2 or 3, got length %dFr   r   z@tuple variant of exec does not support additional 'in' argumentsrq   rO   r  )rS   rJ   r   r   r   r  rb   r   r   rF   rP   rg   r   ZExecStatNode)rK   rT   codeZtuple_variantrb   r1   r1   r2   p_exec_statementr  s2   

r  c                 C   r  )Nr  )rS   rJ   r  r   ZDelStatNode)rK   rT   rb   r1   r1   r2   p_del_statement  s   r  c                 C   s.   |   }| d |r| jddd t|S )NpassExpected a newlineTZignore_semicolon)rS   rf   expect_newliner   PassStatNode)rK   with_newlinerT   r1   r1   r2   p_pass_statement  s
   

r  c                 C      |   }|   t|S r,   )rS   rJ   r   ZBreakStatNoder   r1   r1   r2   p_break_statement     
r  c                 C   r  r,   )rS   rJ   r   ZContinueStatNoder   r1   r1   r2   p_continue_statement  r  r  c                 C   s6   |   }|   | jtvrt| }nd }tj||dS )Nr   )rS   rJ   rF   r   r   r   ZReturnStatNode)rK   rT   r   r1   r1   r2   p_return_statement  s   

r  c                 C   s   |   }|   d }d }d }d }| jtvrAt| }| jdkr4|   t| }| jdkr3|   t| }n| jdkrA|   t| }|sG|sG|rQtj|||||dS t|S )NrO   r   )exc_type	exc_valueexc_tbcause)rS   rJ   rF   r   rg   r   ZRaiseStatNodeZReraiseStatNode)rK   rT   r  r  r  r  r1   r1   r2   p_raise_statement  s4   




r  c           
      C   s   |   }| j}|   t| ddg}| jdkr)|   |t| dd | jdksg }tj| jjv }|D ]?\}}}}|dkrHt	j
||||d}	n&t	j|tj||pQ|dtj|tj||d|r`dnd d	|v oh|d u d d
d}	||	 q4t	j||dS )Nr!   
as_allowedrO   cimport)module_nameas_nameis_absoluter[  r   r   r   )r  r;   Zget_top_level_module	name_listrs   stats)rS   rF   rJ   p_dotted_namerP   r   r   rG   rZ   r   ZCImportStatNoder  r   r_  
ImportNoder   StatListNode)
rK   rT   rS  r(  r  r  target_namedotted_namer  statr1   r1   r2   p_import_statement  s>   


	r  c              	   C   s  |   }|   | jdv r%d}| jdv r$|t| j7 }|   | jdv snd }|d ur<| jdv r<|   | jd}}n|d u rItj| jjv rId}t	| dd\}}}}| jdvr]| 
d | j}|   |dk}d}	| jd	kr|   | jd	d fg}
|   n| jd
krd}	|   t| g}
| jdkr|   |	r| jdkrn|
t|  | jdks|	r| d |dkr|s| 
d n=|r| 
d n5|
D ]2\}}}|dkr| 
d|  n"ztt|}W n ty   | 
d| | Y  n	w | jj| qt|S |rtj||||
dS g }g }|
D ]\}}}|tj||d ||tj||p.|df qtj|
d d |d}tj|tj|tj||d||d|dS )N)r   r+  r   importr  r=  Fr  zExpected 'import' or 'cimport'r  r   r   TrO   r   
__future__z?from __future__ imports must occur at the beginning of the filezinvalid syntaxZbracesznot a chancez future feature %s is not defined)r  Zrelative_levelimported_namesr   r[  r  )r  r;   r  )moduler(  )rS   rJ   rF   r   rG   rH   r   r   rZ   r   r   p_imported_namerP   rf   getattrAttributeErroraddr   r  ZFromCImportStatNoder   r   r_  r  ZFromImportStatNoder  )rK   first_statementrT   r;   Zdotted_name_posr  _rS  Z
is_cimportZis_parenthesizedr
  name_posrM   r  	directiveZimported_name_stringsr(  Zimport_listr1   r1   r2   p_from_import_statement  s   













r  c                 C   s"   |   }t| }t| }|||fS r,   )rS   rN   	p_as_name)rK   rT   rM   r  r1   r1   r2   r  @  s   
r  c                 C   sj   |   }t| }d }|g}| jdkr"|   |t|  | jdks|r(t| }||| jd||fS )Nr   )	rS   rN   rF   rJ   rP   r  rG   rH   rr  )rK   r  rT   r  r  rQ   r1   r1   r2   r   G  s   

r   c                 C   s(   | j dkr| jdkr|   t| S d S )NrE   as)rF   rI   rJ   rN   r~   r1   r1   r2   r  T  s   r  c                 C   sH   |   }|   t| }| jdkr|   t| }nd }tj|||dS )NrO   )r  r   )rS   rJ   rg   rF   r   ZAssertStatNode)rK   rT   Zcondr   r1   r1   r2   p_assert_statement\  s   

r  );rz  r|  c                 C   s\   |   }|   t| g}| jdkr"|   |t|  | jdkst| }tj|||dS )Nelifr  )rS   rJ   p_if_clauserF   rP   p_else_clauser   r  )rK   rT   r  r  r1   r1   r2   p_if_statementl  s   


r  c                 C   s(   |   }t| }t| }tj|||dS )Nr  )rS   rw   p_suiter   r  )rK   rT   ro   r  r1   r1   r2   r  x  s   r  c                 C   s   | j dkr|   t| S d S )Nrn   )rF   rJ   r  r~   r1   r1   r2   r    s   
r  c                 C   s:   |   }|   t| }t| }t| }tj||||dS )N)r  r  r  )rS   rJ   rw   r  r  r   ZWhileStatNode)rK   rT   ro   r  r  r1   r1   r2   p_while_statement  s   r  Fc                 C   sP   |   }|   t| d|d}t| }t| }|j|||d tj|fi |S )NTr  )r  r  r   )rS   rJ   r  r  r  r.   r   r  )rK   r   rT   r  r  r  r1   r1   r2   r     s   r   c                 C   s  t | }| jdkr|   t| ||d}t||dS | js|s| jdkr-|   t| }n|d }}t| }|  }t	| }|  }	t| }
t| }t
| }|d u rZtj||d}n|jsdt|jd n
||jkrnt|d |d |
d kr{t|	d	 t||||
||d
S | d i S )Nr   r   )targetiteratorr   r[  z4Target of for-from statement must be a variable namez5Variable name in for-from range does not match targetr   z,Relation directions in for-from do not match)r  bound1Z	relation1Z	relation2bound2r*  )p_for_targetrF   rJ   p_for_iteratorr  r   r   p_for_from_relationrS   rN   p_for_from_stepr   r_  rv   r   rT   rM   rf   )rK   r  r   r  r   r!  Zrel1Z	name2_posZname2Zrel2_posZrel2r"  r*  r1   r1   r2   r    sP   






r  c                 C   s*   | j tv r| j }|   |S | d d S )Nz#Expected one of '<', '<=', '>' '>=')rF   inequality_relationsrJ   r   r   r1   r1   r2   r%    s
   
r%  c                 C   s,   | j dkr| jdkr|   t| }|S d S )NrE   Zby)rF   rI   rJ   r   )rK   r*  r1   r1   r2   r&    s
   r&  )r   r   r   r   c                 C   sp   |   }t| }| jdkr6|   |g}| j|kr/|t|  | jdkr&n	|   | j|kstj||dS |S r  )rS   r   rF   rJ   rP   r   r  )rK   r`   rT   rh   r  r1   r1   r2   p_target  s   



r(  c                 C   s
   t | dS )Nr   )r(  r~   r1   r1   r2   r#    s   
r#  c                 C   s6   |   }|rt| }nt| }|rtjntj||dS )N)sequence)rS   r   rp   r   ZAsyncIteratorNodeZIteratorNode)rK   r  r   rT   rh   r1   r1   r2   r$    s
   
r$  c                 C   s   |   }|   t| }g }d }| jdv rC| jdkr&|t|  | jdks| jdkr3|   t| }tj||||d}| jdkrC|S | jdkrX|   t| }tj|||dS | 	d d S )N)exceptrn   r*  rn   )r  except_clausesr  finally)r  finally_clausezExpected 'except' or 'finally')
rS   rJ   r  rF   rP   p_except_clauser   ZTryExceptStatNodeZTryFinallyStatNoder   )rK   rT   r  r+  r  r-  r1   r1   r2   p_try_statement  s2   





r/  c                 C   s   |   }|   d }d }d}| jdkrat| }t|tjr!|j}n|g}| jdks9| jdkrB| jdkrB| j	j
dkrB|   t| }n| jdkra| jdkra|   |   }t| }tj||d}d}t| }tj|||||d	S )
NFr_   rO   rE   r  r$   r[  T)patternr  r  is_except_as)rS   rJ   rF   rg   r   r   r  rb   rI   rG   rY  rN   r_  r  r   ZExceptClauseNode)rK   rT   r  r  r1  pos2rM   r  r1   r1   r2   r.    s2   

r.  c           
      C   s   |   }|   t| dd }| d | jrV|}| j||}|rT| j| t	
|}t|}t||| |j| jd}t||}	W d    |	S 1 sMw   Y  |	S d S t|S )Nr7  r$   z!Syntax error in include statement)rq  parse_comments)rS   rJ   rp  r  compile_time_evalrG   Zfind_include_fileZincluded_filesrP   r   Zopen_source_filer   r"   encodingr3  p_statement_listr   r  )
rK   r5   rT   Zunicode_include_file_nameZinclude_file_nameZinclude_file_pathr:  Zsource_descs2treer1   r1   r2   p_include_statement1  s&   


r9  c                 C   s0   |    | jdkr| jst| }|S t| }|S )Ntemplate)rJ   rI   r   p_with_templater   )rK   r   r1   r1   r2   p_with_statementF  s   r<  c           	      C   s   d}d}| j dkr8t|  }|   t| |}| d | j dkr&| d W d   n1 s0w   Y  | }|s?t| |}t| }t|D ]\}}}||fd|i|}qG|S )	a  
    Copied from CPython:
    | 'with' '(' a[asdl_withitem_seq*]=','.with_item+ ','? ')' ':' b=block {
        _PyAST_With(a, b, NULL, EXTRA) }
    | 'with' a[asdl_withitem_seq*]=','.with_item+ ':' tc=[TYPE_COMMENT] b=block {
        _PyAST_With(a, b, NEW_TYPE_COMMENT(p, tc), EXTRA) }
    Therefore the first thing to try is the bracket-enclosed
    version and if that fails try the regular version
    Fr1   r   r   r_   r=  Nr  )rF   r#   rJ   p_with_items_listrf   r   r  reversed)	rK   r   Zbrackets_succeededr(  errorsr  clsrT   r0   r1   r1   r2   r   O  s$   







r   c                 C   s@   g }	 | t| | | jdkr	 |S |   | jdkr	 |S q)NTrO   r   )rP   p_with_itemrF   rJ   )rK   r   r(  r1   r1   r2   r=  o  s   

r=  c                 C   s   |   }| js<| jdkr<| jdv r<|r| d | j}|   d }| jdkr3|   t| }| d tj	|||dfS t| }d }| jdkrT| jdkrT|   t
| }tj||||dfS )	NrE   )r'   gilzwith gil/nogil cannot be asyncr   r   )stater  r  )managerr  r   )rS   r   rF   rI   r   rJ   rg   rf   r   ZGILStatNoder   ZWithStatNode)rK   r   rT   rC  r  rD  r  r1   r1   r2   rA  |  s$   


rA  c                 C   s   |   }g }|   | d || j |   | jdkr1|   || j |   | jdks| d | jdkrZ|   | d |   t }||_	t
| ||}|   |S t|d d S )Nr   rO   r  r_   z-Syntax error in template function declaration)rS   rJ   rf   rP   rI   rF   r  expect_indentr)   rA   p_c_func_or_var_declarationexpect_dedentr   )rK   rT   rA   body_ctxZfunc_or_varr1   r1   r2   r;    s,   





r;  c                 C   sD  | j dkrt| }|S | j dkrt| }|S | j dkr!t| }|S | j dkr,t| }|S | j dkr7t| }|S | j dkrBt| }|S | j dkrMt| }|S | j dkrXt| }|S | j d	krct	| }|S | j d
v rnt
| }|S | j dkr{t| |d}|S | j dkrt| }|S | j dkrt| }|S | j dkrt| }|S t| }|S )Nglobalnonlocalprintexecdelbreakcontinuereturnraiser  r   r  r0  assertr  )rF   r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  )rK   r  r   r1   r1   r2   p_simple_statement  sX   










	


rT  c                 C   s   t | |d}|j}g }t|tjs|| | jdkr>|   | jdv r%nt | |d}t|tjr2q|| d}| jdks|sFt|}nt|dkrQ|d }ntj	||d}| jdvrst|tj
rs|jjrs|jjdkrs| d	| | d
 |S )NrR  r  r  Fr!   r   r  cdefz@The 'cdef' keyword is only allowed in Cython files (pyx/pxi/pxd)z%Syntax error in simple statement list)rT  rT   r   r   r  rP   rF   rJ   r   r  r   rh   rv   rM   r   r  )rK   r5   r  r  rT   r  r1   r1   r2   p_simple_statement_list  s4   







rV  c                 C   s   | j }d| _ t| }|| _ |S )Nr!   )r\  r   )rK   oldrh   r1   r1   r2   p_compile_time_expr  s
   rX  c                 C   sd   |   }| j}|   t| }| d t| }| jr&||}||| | j	ddd t
|S )Nr   r  Tr  )rS   r]  rJ   rN   rf   rX  r4  compile_time_valuedeclarer  r   r  )rK   rT   denvrM   rh   r   r1   r1   r2   p_DEF_statement  s   


r\  c           	      C   s   |   }| j}|}| j}d }	 |   t| }|ot||| _t| |}| jr-|}d}| jdkr3nq| jdkrI|   || _t| |}|rI|}|sPt	
|}|| _|S )Nr!   r   ZELIFELSE)rS   r4  r]  rJ   rX  rd  rY  r  rF   r   r  )	rK   r5   rT   Z
saved_evalZcurrent_evalr[  r   rh   r  r1   r1   r2   p_IF_statement	  s4   





r^  c           
      C   s  |j }d }| jdkr|jdvr| d t| |S | jdkr+t|  ddd t| S | jdkr>t|  d	dd t| |S | jd
krn|jdvrM| d |j| _t	| }|j
sm| jdvrm| jdkrh| jdkrhn| d n| jdkr{|r{t| ddS d}| jdkrd}|   n| jdkrd}d}|   |r|jdvr| d |j| _t| ||d}|d urtjtjtjf}|j
r|tjtjf7 }t||s| d ||_|S |jr| jddd d S | jdkrd|jv r|jdkr| d |j| _t| |S | jd kr|jd!vr| d" t| |S | jd#kr)|jdvr$| d$ t| |S |jd%kr?| jdkr?| jd&kr?t| S | jdkrQ|jd&krQt| d'dS |jd(v rgt| }|d urb|S | d) | jd*krqt| S | jd+kr{t| S | jd,krt| S | jd-krt | S | jd.krt!| S | jdkr|   t"| ||S | jdkr| jdkr| j}|  }	|   | jdkrt"| ||S |r| d | #d||	 t$| ||d/S )0Nctypedefr  
module_pxdz#ctypedef statement not allowed hereZDEFzThe 'DEF' statement is deprecated and will be removed in a future Cython version. Consider using global variables, constants, and in-place literals instead. See https://github.com/cython/cython/issues/4310r!   r   ZIFzThe 'IF' statement is deprecated and will be removed in a future Cython version. Consider using runtime conditions or C macros instead. See https://github.com/cython/cython/issues/4310r   )r  classc_classr  propertyra  c_class_pxdr*   zdecorator not allowed here)r   rU  cpdefrb  r   rE   r   r   r  )r  r   rU  rf  )r  ra  r  rc  re  zcdef statement not allowed here)r?   %'api' not allowed with this statementFrq   r   r   re  r   rb  )r  r  rb  r*   z!class definition not allowed hereincludez"include statement not allowed hererc  rd  T)re  rd  z%Executable statement not allowed hererm   whiler   tryr   rR  )%r=   rF   r;   r   p_ctypedef_statementr   rS   r\  r^  p_decoratorsrB   rI   r  rJ   p_cdef_statementr   CFuncDefNodeCVarDefNodeCClassDefNodeCStructOrUnionDefNodeCEnumDefNoder   r   r(   r   p_class_statementr9  p_property_declp_ignorable_statementr  r  r   r/  r<  r   put_backrV  )
rK   r5   r  r=   r   r?   r   tupZ
ident_nameZ	ident_posr1   r1   r2   p_statement&	  s   
























$


rx  c                 C   sz   |   }g }| jdvr%t| ||d}t|tjrq|| d}| jdvs|s,t|S t|dkr6|d S tj||dS )NDEDENTr|  rR  Fr!   r   r  )	rS   rF   rx  r   r   r  rP   r   r  )rK   r5   r  rT   r  r  r1   r1   r2   r6  	  s   



r6  c                 C   s   t | |ddd S )NFwith_doc_onlyr!   )p_suite_with_docstringrK   r5   r1   r1   r2   r  	  s   r  c                 C   s   |  d d }| jdkr$|   |   |rt| }t| |}|   n |jr.| jddd |j	dv r9t
| |}nt| }| jddd	 |sLt|\}}||fS )
Nr_   rz  rg  Frq   )r  rb  r  r*   zSyntax error in declarationsTr  )rf   rF   rJ   rE  p_doc_stringr6  rG  r(   r   r;   rV  r  r  _extract_docstring)rK   r5   r|  docr  r1   r1   r2   r}  	  s$   




r}  c                 C   s  g }g }d}| j |vr| j dks| j dkr| jddd d}| j dkrh|  d dkrh| j}|   |   t| r?t| }nt| |d	}	t| d
d}
t	j
|	j|	|
d}d}tj|j|d}|||f d}n7t| rqt| }nt| |d	}	t| d
d}
t	j
|	j|	|
d}d}|| |d
7 }t|dkr| jd|jd | j dkr| j |vr|r| dd|  	 ||fS |   | j |vs||fS )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)
    r   r   r   z$Argument expansion not allowed here.Frq   rE   r   rA   r!   r   r   Tr   r   r   rO   zUnmatched %sz or )rF   r   r   rI   rJ   r   rg   r   r   r   CComplexBaseTypeNoderT   r   r   rP   r   rr  )rK   Z
end_sy_setrA   r   r   Zpos_idxZparsed_typeidentr   r   r   Zkeyword_nodeZwas_keywordr1   r1   r2   p_positional_and_keyword_args	  sZ   






*r  c                 C   s$   | j dkrt| |dS t| ||dS )Nr   r  nonemptyrA   )rF   p_c_complex_base_typep_c_simple_base_type)rK   r  rA   r1   r1   r2   r   	  s   
r   c                 C   s*   | j dkr| jtv r| j}|   |S dS )NrE   r=  )rF   rI   calling_convention_wordsrJ   )rK   r   r1   r1   r2   p_calling_convention 
  s
   r  )Z	__stdcallZ__cdeclZ
__fastcallc                 C   s   |   }|   t| |d}t| dd}tj|||d}| jdkrV|g}| jdkrO|   | jdkr3nt| |d}t| dd}|tj|||d | jdks)tj||d}| 	d | jdkrqt
| rkt| |}|S t| ||}|S )	Nr  Tr   r   rO   r   )
componentsr   )rS   rJ   r   r   r   r  rF   rP   r   rf   is_memoryviewslice_accessp_memoryviewslice_accessp_buffer_or_template)rK   rA   rT   r   r   	type_noder  r1   r1   r2   r  
  s6   






r  c              
   C   s  d}d}d}d}g }|   }d }	}
| jdkr?| jdkr&|	r#t|d d}	n| jdkr5|
r2t|d d}
nn	|   | jdks|	sC|
rft| ||d}t|tjr]tj	||j
|	|
d	|_
|S tj	|||	|
d	S | jdkrst|d
| j  t| rd}| jdkr| jtv rt| j \}}| j}|   nt| \}}| jdkr| jtv r| j}|   nd}| jdkr| jdkrd}|   nt| r| j}|   | jdkr|| |   t| }| jdksnh| j}|   }|   |rH| jdkrH| jdkr9|   }|   | jdks | jdks | jdks | jdkr(| jtv r(| dd| n | dd| | d|| d }n| jdvrH| d|| d }tj||||||||d}| jdkrlt| rft| |}nt| ||}| jdkr|   t| }tj|||d}|S )Nr   r!   rE   constzDuplicate 'const'ZvolatilezDuplicate 'volatile'r  )r   is_constis_volatilez"Expected an identifier, found '%s're  rg  r   r   r   r   r   )r   r   r   r   )rM   module_pathis_basic_c_typesignedrg  rX  rA   r   )r   rM   )rS   rF   rI   r   rJ   r   r   r   r   r   r   looking_at_base_typespecial_basic_c_typesp_sign_and_longnessbasic_c_type_nameslooking_at_dotted_namerP   rN   r  rv  CSimpleBaseTypeNoder  r  r  ZCNestedBaseTypeNode)rK   r  rA   Zis_basicr  rX  rg  r  rT   r  r  r   rM   r  Zold_posr  r1   r1   r2   r  *
  s   










$
r  c                 C   sn   |   }|   t| d|\}}| d | jdkr t| ||}tj|dd |D d}tj	||||d}|S )N)r  r  r   c                 S   s"   g | ]\}}t j|j||d qS )r	  )r   r  rT   )r  r
  r   r1   r1   r2   r  
  s    z(p_buffer_or_template.<locals>.<listcomp>r  )r   r   r   )
rS   rJ   r  rf   rF   r  r   r  r   r   )rK   r   rA   rT   r   r   r  r   r1   r1   r2   r  
  s$   


r  c                 C   sX   |r|s|S |s|rt | rt| |S t| |d S |s(|s*t | r&t| |S |S d S d S r,   )r  r  r  )rK   r   r  r   r1   r1   r2   p_bracketed_base_type
  s   

r  c                 C   s   | j | j|  fg}|   d}| jdkrd}n| j dkr4|| j | j|  f |   | j dkr4d}|d d d D ]}| j|  q;|S )NFr_   Tr3  r   )rF   rI   rS   rJ   rP   rv  )rK   savedretvalsvr1   r1   r2   r  
  s   


r  c                 C   sd   |   }|   t| \}}|D ]}t|dk r| d q| d t||}tj|||d}|S )Nr$   zDAn axis specification in memoryview declaration does not have a ':'.r  )r   Zaxes)	rS   rJ   r   r   r   rf   r"  r   r   )rK   r   rT   r$  r  r.  r&  r   r1   r1   r2   r  
  s   


r  c                 C   s   | j dko	| jtvS rD   )rF   rI   r  r~   r1   r1   r2   looking_at_name
  s   r  c                 C   sr  | j tv rdS | jdkrd}| j }|  }g }|   | jdkr8|   || j |  f | d | jdks | j| j |  f}| jdkrId}nE| jdksS| jdkrb|   | jdv }| j|  n,| jdkrv|   | jdk}| j|  n| jd	kr|   | jd
kpt|  }| j|  |	  |D ]}| jdg|R   | dd|d  q| d|| | o|d S dS )NFrE   r   Tr   r   )r   r  r   r   r  r!   r   )
rI   base_type_start_wordsrF   rS   rJ   rP   rf   rv  r   reverse)rK   is_typerM   r  dotted_pathr  pr1   r1   r2   r   
  sF   










r   c                 C   s   | j dko	| jtv S rD   )rF   rI   r  r~   r1   r1   r2   r  
  s   r  c                 C   s@   | j dkr| j}|  }|   | j dk}| d|| |S dS )NrE   r   r   )rF   rI   rS   rJ   rv  )rK   rM   r  r   r1   r1   r2   r    s   

r  )Zvoidcharre  rf  doublebint)r   r   )r$   r   )r!   r   )Z
Py_UNICODEZPy_UCS4Z	Py_hash_tZ
Py_ssize_tZssize_tZsize_tZ	ptrdiff_tZPy_tss_t)shortrj  r  rW  )structunionenumpackedc                 C   s   d}d}| j dkr=| jtv r=| jdkrd}n| jdkrd}n| jdkr&d}n	| jd	kr/|d7 }|   | j dkr=| jtv s||fS )
Nr!   r   rE   rW  r  r$   r  r   rj  )rF   rI   sign_and_longness_wordsrJ   )rK   r  rX  r1   r1   r2   r  5  s   




r  c                 C   s.   t | d}|d urt|}| j|_|S d }|S )Nr7  )rt  r   rq  r5  )rK   literalcnamer1   r1   r2   p_opt_cnameD  s   
r  c              	   C   s  |   }| jdkr<|   | jdkst| r+tj|| jdd d}	t| |||	|}
nt	| |||||dd}
| 
d n
t| ||||||}
|sZ|
jrZ| jdkrZt|   d|
j  | jdv r|   }| jd	krnt| |
}
n|   t| |||
|}
d
}| jdv s_|
S )Nr   r   r=  )rM   r  r!   )r   r  cmethod_flagr  calling_convention_allowedz&%s on something that is not a function)r   r   r   r   )rS   rF   rJ   r  r   CNameDeclaratorNoderG   rH   p_c_func_declaratorr   rf   p_c_simple_declaratorcalling_conventionr   p_c_array_declarator)rK   r5   r   r  r  
assignabler  r  rT   r  r   r1   r1   r2   r   M  s8   





r   c                 C   sB   |   }|   | jdkrt| }nd }| d tj|||dS )Nr  )r  	dimension)rS   rJ   rF   r   rf   r   ZCArrayDeclaratorNode)rK   r  rT   dimr1   r1   r2   r  p  s   


r  c              
   C   s   t | ||dd}t| }| d t| }t| |jdk\}}	}
|r-|
r-t|  ddd |p2t| }t| }t	j
||||||	|pE|jpE||dS )	Nr   )r  nonempty_declaratorsr   externzThe keyword 'nogil' should appear at the end of the function signature line. Placing it before 'except' or 'noexcept' will be disallowed in a future version of Cython.r$   r   )r  rb   Zhas_varargsZexception_valueZexception_checkr'   with_gil)p_c_arg_listp_optional_ellipsisrf   p_nogilp_exception_value_clauser<   r   rS   
p_with_gilr   ZCFuncDeclaratorNoder'   )rK   rT   r5   r  r  rb   ellipsisr'   exc_val	exc_check
exc_clauser  r1   r1   r2   r  z  s(   
r  )r   r   r   rW   r   z++z--r   r   r   r   r   r   rO   r   r   r   r   r   r   []()r  r   rd  c              	   C   s  |   }t| }| jdv rP| jdk}	|   |   }
| jdko#| jdk}|r*|   t| ||||||d}|r>tj|
|d}|	rGtj||d}tj||d}n| jdks^| jdkr| j	j
r| jdkrftjntj}|   t| ||||||d}|||d}nd }| jdkr| j}|rt|   d	 |   t| }|d
kr| jdkr|r|   t| }n|rt|   d d}d }|d u r|jd ur|r|jd | }|d
krY|jdkrY|rY| j}dd |D r9|   |dkr| d d}n0|dkr| d d}n#|dv r| j|kr|d9 }|   n| jdkr&|| j7 }|   |tvr4| jd| dd ||7 }n |dkrY| j}|tvrO| jd| dd |d | }|   tj||||d}||_|S )Nr  r   r  rE   )r   r  r  r  r  )r  r   rz   zDeclarator should be emptyr   r   zEmpty declaratorr=  ::r  c                 S   s   g | ]}|d v rdqS )z+-*/<=>!%&|([^~,r!   r1   )r  r6  r1   r1   r2   r    ro  z)p_c_simple_declarator.<locals>.<listcomp>r   r   r  r   r  r  )r   r   r   r   r$   z,Overloading operator '%s' not yet supported.Frq    )rM   r  default)rS   r  rF   rJ   rI   r   r   ZCConstDeclaratorNodeZCPtrDeclaratorNoderG   cppZ CppRvalueReferenceDeclaratorNodeZCReferenceDeclaratorNoder   r  rg   r@   r<   rf   supported_overloaded_operatorsr  r  )rK   r5   r   r  r  r  r  rT   r  Z	is_ptrptrZ	const_posr  r  r   Z
node_classru   rM   r  rU   r1   r1   r2   r    s   















r  c                 C   $   | j dkr| jdkr|   dS dS )NrE   r'   r!   r   rF   rI   rJ   r~   r1   r1   r2   r       r  c                 C   s$   | j dkr|   | d dS dS )Nr   rB  r!   r   )rF   rJ   Zexpect_keywordr~   r1   r1   r2   r    s
   

r  c                 C   sT  d}d}|rdnd}| j dkr| jdkrd}|   d}nu| j dkrd}|   | j dkr4d}|   n^| j dkrd}|  d	 }|   | j dkrm| j}|d
krc|  d	 |d krbt|  d n/t| |}|   n%| j dkrtj|  dd}|   n| j dkrd}|   nd}t| }|s|s| j	j
rd}t|  dd	d |||fS )a  
    Parse exception value clause.

    Maps clauses to exc_check / exc_value / exc_clause as follows:
     ______________________________________________________________________
    |                             |             |             |            |
    | Clause                      | exc_check   | exc_value   | exc_clause |
    | ___________________________ | ___________ | ___________ | __________ |
    |                             |             |             |            |
    | <nothing> (default func.)   | True        | None        | False      |
    | <nothing> (cdef extern)     | False       | None        | False      |
    | noexcept                    | False       | None        | True       |
    | except <val>                | False       | <val>       | True       |
    | except? <val>               | True        | <val>       | True       |
    | except *                    | True        | None        | True       |
    | except +                    | '+'         | None        | True       |
    | except +*                   | '+'         | '*'         | True       |
    | except +<PyErr>             | '+'         | <PyErr>     | True       |
    | ___________________________ | ___________ | ___________ | __________ |

    Note that the only reason we need `exc_clause` is to raise a
    warning when `'except'` or `'noexcept'` is placed after the
    `'nogil'` keyword.
    FNTrE   Znoexceptr*  r   r   r$   r'   r!   zf'except +nogil' defines an exception handling function. Use 'except + nogil' for the 'nogil' modifier.r   r   zdImplicit noexcept declaration is deprecated. Function declaration should contain 'noexcept' keyword.r   )rF   rI   rJ   rS   r   rR  r   rL  rg   rG   legacy_implicit_noexceptr   )rK   Z	is_externr  r  r  Zplus_char_posrM   r1   r1   r2   r    sP   










r  )r   r   r+  r   r_   rW   c           	      C   sX   g }|}| j tvr*|t| ||||||d | j dkr	 |S |   d}| j tvs	|S )N)r  kw_onlyra   rO   r   )rF   c_arg_list_terminatorsrP   p_c_arg_declrJ   )	rK   r5   	in_pyfuncr  r  r  ra   rb   is_self_argr1   r1   r2   r  A  s   


r  c                 C   s   | j dkrt|  dS dS )Nr+  r!   r   )rF   r,  r~   r1   r1   r2   r  Q  s   
r  c                 C   sX  |   }d }}	d }
d }| jrtj|d g dddd|d d	}nt| |d}t| ||d}| jdv r_| js_| j}|   | jdkrI| jdkrI|   n| 	d |sWt	|d|  |d	k}	|d
k}|rn| jdkrn|   t
| }| jdkr|   d|jv r| jdv rt|}
|   nd|jv rt| }
n
t	|d nt| }
tj|||||	|
||dS )Nr   )rM   r  r  r  rg  rX  r  rA   r  )r   rx   rE   r?  zExpected 'None'z*'%s None' only allowed in Python functionsrx   r   r_   r   r   )r   r   r&   z;default values cannot be specified in pxd files, use ? or *)r   r   not_noneor_noner  r  r  )rS   r   r   r  r   r   rF   rJ   rI   r   r  r;   r   r/  	modifiersrg   ZCArgDeclNode)rK   r5   r  r  r  r  ra   rT   r  r  r  r  r   r   rS  r1   r1   r2   r  X  sZ   








r  c                 C   r  )NrE   r(   r!   r   r  r~   r1   r1   r2   p_api  r  r  c                 C   s  |   }t| |j|_|jpt| |_|jr#|jdvr#t|d|j  |jdkr3| jdkr3t| ||S | jdkrB|   t| ||S t	| rVd|_
|jrQt|d t| |S | jdkrh|jrct|d t| |S | jd	kr|jd
vrwt|d |jrt|d t| ||S | jdkr| jdkrt| ||S | jdkr| jtv r|jd
vrt|d |jr| jdkrt|d t| ||S | jdkr| jdkrt| ||S t| ||S )N)r+   publiczCannot combine 'api' with '%s'r  r   r  r!   z$cdef blocks cannot be declared cpdefr_   rb  r`  z*Extension type definition not allowed herez(Extension types cannot be declared cpdefrE   r   z/C struct/union/enum definition not allowed herer  z'C struct/union cannot be declared cpdeffused)rS   p_visibilityr<   r(   r  r   rF   p_cdef_extern_blockrJ   r  r'   r?   p_cdef_blockr;   p_c_class_definitionrI   p_cpp_class_definitionstruct_enum_unionp_struct_enump_fused_definitionrF  )rK   r5   rT   r1   r1   r2   rm    sL   














rm  c                 C   s   t | |ddS )Nr!   )r=   )r  r~  r1   r1   r2   r    r4   r  c                 C   s   |j rt|d d }| d | jdkr|   nt| dd }|ddd}| jd	kr7|   t| dd |_t| r>d|_	t
| |d
\}}tj|||||jdS )Nz+cdef extern blocks cannot be declared cpdefr   r   r7  r$   r!   r  )r=   r<   r@   T)include_fileverbatim_includer  r@   )r?   r   rf   rF   rJ   rp  rI   r@   r  r'   r}  r   ZCDefExternNode)rK   rT   r5   r  r  r  r1   r1   r2   r    s(   




r  c           	      C   s  |    d}| jjr| jdks| jdkr| jdkrd}|    | jdkr@| j}|    t| }|d u r?|jd ur?|jd | }nd  }}|rK| d |r`| jdkr`|    t| }| 	d	 nt
j|d
g ddddd}| 	d g }d }| jdkrt| || n |    |   t| }| jdvrt| || | jdvs|   |s|jdkrt|d t
j|||||||j|j|j|j|jdk|dS )NFrb  rE   r  Tr  zUnnamed scoped enum not allowedr   r   re  r!   r   )rM   r  r  r  rg  rX  r_   rz  ry  r  zDEmpty enum definition not allowed outside a 'cdef extern from' blockra  )rM   r  scopedr(  underlying_typer>   r<   Zcreate_wrapperr(   in_pxdr  )rJ   rG   r  rF   rI   r  r@   r   r   rf   r   r  p_c_enum_linerE  r  rG  r<   rr  r>   r?   r(   r;   )	rK   rT   r5   r  rM   r  r  r(  r  r1   r1   r2   p_c_enum_definition  sd   &







r  c                 C   sb   | j dkr&t| || | j dkr%|   | j dv rnt| || | j dksn|   | d d S )Nr  rO   r  zSyntax error in enum item list)rF   p_c_enum_itemrJ   r  )rK   r5   r(  r1   r1   r2   r    s   



r  c                 C   sr   |   }t| }t| }|d u r|jd ur|jd | }d }| jdkr+|   t| }|tj	||||d d S )Nr  r   )rM   r  r   )
rS   rN   r  r@   rF   rJ   rg   rP   r   ZCEnumDefItemNode)rK   r5   r(  rT   rM   r  r   r1   r1   r2   r  "  s   

r  c           	      C   sn  d}| j dkrd}|   | jdks| j dkr| d | j }|   t| }t| }|d u r;|jd ur;|jd | }d }| jdkr|   g }| jdkrY|   | jd	dd
 n7| d | 	  t
|jd}| jdkr| jdkr~|t| |  | n	|   | d	 | jdksm|   |s|jdkrt|d n| d tj||||||j|j|j|jdk|d
S )NFr  TrE   r  r  r_   r  r  r  rz  )r<   rz  r  zOEmpty struct or union definition not allowed outside a 'cdef extern from' blockz*Syntax error in struct or union definitionra  )	rM   r  rS  
attributesr>   r<   r(   r  r  )rI   rJ   rF   expectedrN   r  r@   r  rf   rE  r)   r<   rP   rF  rS   rG  r   r   rq  r>   r(   r;   )	rK   rT   r5   r  rS  rM   r  r  rH  r1   r1   r2   p_c_struct_or_union_definition/  sP   










r  c                 C   s   |j dvr
t|d |   t| }| d |   |   g }| jdkr@| jdkr3|t	|  n|   |   | jdks&| 
  |sKt|d tj|||dS )z5
    c(type)def fused my_fused_type:
        ...
    r`  z&Fused type definition not allowed herer_   rz  r  zNeed at least one type)rM   types)r;   r   rJ   rN   rf   r  rE  rF   rP   r   rG  r   ZFusedTypeNode)rK   rT   r5   rM   r  r1   r1   r2   r  [  s$   





	
r  c                 C   s"   | j dkrt| ||S t| ||S )Nr  )rI   r  r  )rK   rT   r5   r1   r1   r2   r  }  s   
r  c                 C   sX   |   }|}| jdkr*| jdv r*| j}|dkr&||kr&| jd||f dd |   |S )NrE   )r  r  readonlyr+   z,Conflicting visibility options '%s' and '%s'Frq   )rS   rF   rI   r   rJ   )rK   Zprev_visibilityrT   r<   r1   r1   r2   r    s   r  c                 C   s4   | j dkr| jdv r| j}|   |gt|  S g S )NrE   )r&   )rF   rI   rJ   p_c_modifiers)rK   modifierr1   r1   r2   r    s
   r  c                 C   s  |j dv }t| }t| d|jd}t| ||d|ddd}|j|_| jdkr7| jdkr7|j dkr7|   d}nd	}| jd
krM| j	ddd |   t
|  | jdkr}|j dvr_|js_| 	d t| tdd\}}	tj||j|||	|||j|j|d
}
|
S |r||_|g}| jdkr|   | jdkrnt| ||ddd}|| | jdks| jd }| jddd |j dv r| j|krt| }nd }tj||j|||j dv ||j||jd	}
|
S )N)rc  re  r!   r  )r  )r  r  r  rE   r  	cpp_classr   ->z~Return type annotation is not allowed in cdef/cpdef signatures. Please define it before the function name, as in C signatures.Frq   r_   )r  rc  ra  re  r  z&C function definition not allowed herer  r   )	r<   r   r   r  r  r  r(   r?   is_const_methodrO   rz  z&Syntax error in C variable declarationTr  )ra  re  )r<   r   declaratorsr  r  r(   r  r?   )r;   r  r   rA   r   r?   rF   rI   rJ   r   rg   r}  r)   r   rn  r<   r(   r  rP   
start_liner  r  ro  )rK   rT   r5   r  r  r   r   r  r  Zsuiter   r  Zdoc_liner1   r1   r2   rF    s|   



&





	rF  c                 C   s   |   }|   t| |j}t| }|d|d}|rd|_| jdkr(t| ||S | jdkr8| jt	v r8t
| ||S | jdkrH| jdkrHt| ||S t| dd}t| |ddd}| jdd	d
 tj||||||jdkdS )Nr!   )r>   r<   rb  rE   r  r  )r  r  z"Syntax error in ctypedef statementTr  ra  )r   r   r<   r(   r  )rS   rJ   r  r<   r  r(   rF   r  rI   r  r  r  r   r   r  r   ZCTypeDefNoder;   )rK   r5   rT   r<   r(   r   r   r1   r1   r2   rk    s,   
rk  c                 C   sR   g }| j dkr'|  }|   t| }|tj||d | d | j dks|S )Nr   )	decoratorz"Expected a newline after decorator)rF   rS   rJ   rw   rP   r   ZDecoratorNoder  )rK   r   rT   r  r1   r1   r2   rl    s   


rl  c                 C   s0   | j dkr|tv r| jd| dd t| S |S )zqStep over incorrectly placed cdef modifiers (@see _CDEF_MODIFIERS) to provide a good error message for them.
    rE   zTCannot use cdef modifier '%s' in Python function signature. Use a decorator instead.Frq   )rF   r   r   rN   )rK   rM   r1   r1   r2   _reject_cdef_modifier_in_py  s   r  c                 C   s   |r|d j n|  }|r|   |   t| t| }| dd| jdkr(| jn| j  t	| dd\}}}| d t| | j d }| jdkrV|   t
| }t| | j t| tdd	\}	}
|rf|   tj||||||	|
|||d

S )Nr   r   z~Expected '(', found '%s'. Did you use cdef syntax in a Python declaration? Use decorators and Python type annotations instead.rE   r   )r`   r  r  r   )	rM   rb   rc   rd   r  r  r   r   return_type_annotation)rT   rS   Zenter_asyncrJ   r  rN   rf   rF   rI   re   r  r}  r)   Z
exit_asyncr   ZDefNode)rK   r   r   rT   rM   rb   rc   rd   r  r  r  r1   r1   r2   r     s6   


r   r   c              	   C   s0  t | dd|d}d }d }| jdkrGt|dkr| d |   |D ]}d|_q"| jdkr=|   |t | dd|d n
| j|krG| d | jdkr{|   | jd	kr[t| |d
}| jdkrq|   |t | ddd|d n
| j|kr{| d | jdkr|   t| |d
}| jdkr|   |||fS )Nr!   )r  r  ra   rW   r   zTGot zero positional-only arguments despite presence of positional-only specifier '/'rO   z-Syntax error in Python function argument listr   rE   )ra   )r  r  r  ra   r   )r  rF   r   r   rJ   Zpos_onlyr  p_py_arg_decl)rK   r`   ra   rb   rc   rd   r   r1   r1   r2   re   #  sF   
















re   c                 C   sB   |   }t| }d }|r| jdkr|   t| }tj|||dS )Nr_   )rM   r  )rS   rN   rF   rJ   r  r   ZPyArgDeclNode)rK   ra   rT   rM   r  r1   r1   r2   r  G  s   r  c           
   
   C   s   |   }|   tt| }| j|_d }d }| jdkr+t| dd\}}t|||\}}|d u r6t	j
|g d}t| tdd\}}	tj||||||	|| jjdkdS )	Nr   Fr   r  rb  r   r%   )rM   basesr   r  r  r   Zforce_py3_semantics)rS   rJ   r   rN   rq  r5  rF   r  r  r   r  r}  r)   r   ZPyClassDefNoderG   rY  )
rK   r   rT   
class_namer  r  r   r   r  r  r1   r1   r2   rs  Q  s&   

rs  c                 C   s(  |    g }t| }| jdkr!|    || t| }| jdks|r-|jdkr-t|d |rB| jdkrB| jdkrB|    t| }n|}d }d }d }d }	| jdkrht| dd\}
}|r`| d	 t||
|\}}|d u rst	j
|g d
}| jdkr|jdvr|jst|  d t| \}}}	| jdkr|jdkrd}nd}t| t|d\}}n	| d d }d }|jdkr|st|d |rt|d n3|jdkr|st|d |st|d n|jdkr|jr|st|d |st|d nt|d|j  tj||j|j|jd|||||||	|jdk||dS )Nr   r  z6Qualified class name only allowed for 'extern' C classrE   r  r   Fr   z$C classes cannot take keyword bases.r  r   )r  r  zBName options only allowed for 'public', 'api', or 'extern' C classr_   ra  re  rc  r   z"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 classzInvalid class visibility '%s')r<   r>   r(   r  r  r  r  objstruct_nametypeobj_name
check_sizer  r  r  )rJ   rN   rF   rP   r<   r   rI   r  r  r   r  r(   rS   p_c_class_optionsr;   r}  r)   r  r   rp  r>   rr  )rK   rT   r5   r  r  r  r  r  r  r  r   r   r  Z
body_levelr  r  r1   r1   r2   r  h  s   



















r  c                 C   s   d }d }d }|  d 	 | jdkrn?| jdkr |   t| }n&| jdkr.|   t| }n| jdkrF|   t| }|dvrF| d|  | jd	krLn|   q|  d
d |||fS )Nr   r!   rE   objectr  r  )ignorewarnr   z/Expected one of ignore, warn or error, found %rrO   r  z)Expected 'object', 'type' or 'check_size')rf   rF   rI   rJ   rN   r   )rK   r  r  r  r1   r1   r2   r    s0   








r  c                 C   sB   |   }|   t| }t| tdddd\}}tj||||dS )Nrd  r   Tr{  )rM   r  r  )rS   rJ   rN   r}  r)   r   ZPropertyNode)rK   rT   rM   r  r  r1   r1   r2   rt    s   
rt  c                 C   s:   | j dkr|  }t| }| jddd tj||dS dS )zO
    Parses any kind of ignorable statement that is allowed in .pxd files.
    r5  zSyntax error in stringTr  r   N)rF   rS   r   r  r   r   )rK   rT   Zstring_noder1   r1   r2   ru    s   
ru  c                 C   sL   | j dkr$|  }t| \}}}| jddd |dv r|S t|d |S d S )Nr5  zSyntax error in doc stringTr  rn  2Python 3 requires docstrings to be unicode strings)rF   rS   rK  r  r   )rK   rT   rS  Zbytes_resultZunicode_resultr1   r1   r2   r    s   

r  c                 C   s   d}| du rn8t | tjr| jjr| j}tj| jg d} n"t | tjr?| jr?| j}t |d tjr?|d jjr?|d j}|d= |du rId}|| fS t |tj	r\t
| jd |j}|| fS t |tjrp|j}|du rl|j}|| fS |j}|| fS )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  r   r
  )r   r   r   rh   Zis_string_literalr  rT   r  r   rN  r   r   rP  r>  )r   Zdoc_noder  r  r1   r1   r2   r    s<   
r  c                 C   s@   t | ||ddd}| jdkr| dt| jt| jf  |S )Nr   r!   rR  r|  !Syntax error in statement [%s,%s])r6  rF   r   rb  rI   )rK   r;   r5   r  r1   r1   r2   p_code  s   
r  z$^#\s*cython\s*:\s*((\w|[.])+\s*=.*)$c              
   C   sZ  i }| j dkr|  }t| j}|r|d }z	tj|dd}W n  tyB } z| j	|j
d dd |   W Y d }~qd }~ww |D ]A}||vrLqEtj|tu re||  || 7  < || ||< qE|| || krvt|d|f  qE| j	d	||| || f |d
 qEd|v r| j|d  d|v r|d | j_|| |   | j dks|S )NZcommentliner!   T)Zignore_unknownr   Frq   zDuplicate directive found: %sz@Conflicting settings found for top-level directive %s: %r and %rr   rY  r  )rF   rS   !_match_compiler_directive_commentrI   r  r  r   Zparse_directive_list
ValueErrorr   rb   rJ   Zdirective_typesgetr  r   rG   set_language_levelr  r.   )rK   r   rT   mZdirectives_stringZnew_directiveserM   r1   r1   r2   p_compiler_directive_comments  sF   



"r  c           
      C   s   |   }t| }d| _| jjd u r2| jd |d jr2dd l}|jd|d j t	t
jr.dndd |r6dnd	}t| }t| ||d
dd}	| jdkrZ| dt| jt| jf  t|||	||dS )NFZ3strr   zwCython directive 'language_level' not set, using '3str' for now (Py3). This has changed from earlier releases! File: %sr!   r$   )
stacklevelra  r  r   rR  r|  r  )r  r  full_module_namedirective_comments)rS   r  r3  rG   rY  r  filenamewarningsr	  FutureWarningcythoncompiledr  r6  rF   r   rb  rI   r   )
rK   r   r  r5   rT   r  r  r;   r  r  r1   r1   r2   p_moduleF  s2   

r  c                 C   s>   t | }| jdkr| d | d d}||fS d}||fS )Nr   r   FT)rN   rF   rf   )rK   rM   requiredr1   r1   r2   p_template_definitiona  s   


r  c              
   C   s  |    t| }t| }|d u r|jd ur|jd | }| jdkr&t|d | jdkrV|    t| g}| jdkrI|    |t|  | jdks9| d dd |D }nd }d }| jd	kr|    t	| |d
g}| jdkr|    |t	| |d
 | jdkso| d ng }| jdkrt| 
 d t| }| jdkr|    | d |   t|  g }	t|jd|p|jd}
||
_| jdkr| jdkr|	t| |
 n	|    | d | jdks|   nd }	| d tj|||||j|jdk|	|dS )Nr  r   z*Qualified class name not allowed C++ classr   rO   r  c                 S   s   g | ]\}}|qS r1   r1   )r  rM   r  r1   r1   r2   r  {  s    z*p_cpp_class_definition.<locals>.<listcomp>r   r  r   z&Name options not allowed for C++ classr_   rz  r  )r<   r;   r'   rz  r  r  z$Syntax error in C++ class definitionra  )rM   r  base_classesr<   r  r  rA   )rJ   rN   r  r@   rF   r   r  rP   rf   r   rS   r  rE  r  r)   r<   r'   rA   p_cpp_class_attributer  rG  r   ZCppClassNoder;   )rK   rT   r5   r  r  rA   Ztemplate_namesr  r'   r  rH  r1   r1   r2   r  k  sp   


















r  c                 C   s   d }| j dkrt| }| jdkrt| |  |S | jdkr"t| |S | j dkrA| jtv rA| jdkr9t| |  |S t| |  |S t| |  |}|d urmt	j
t	jt	jf}|jr`|t	jt	jf7 }t||sj| d ||_|S )Nr   r   r_  rE   r  r   )rF   rl  rI   r  rS   rk  r  r  rF  r   rn  ro  rp  rB   rq  rr  r   r   r   )rK   r5   r   r   rw  r1   r1   r2   r     s(   






r   c           
      C   sl  d| }|r|  | |r|  d|  t|}|tu rF|  d|d |d f  tdt|D ]}t| || |d  q0|  d|  d S t|tjrz|j	}W n t
y^   |jj}Y nw |  d||jf  |j D ]\}}	|d	kr|d
krt| |	|d | qnd S |tu r|  d tt|D ]}t| || |d  q|  d|  d S |  d||f  d S )Nz  z%s: z	(%s @ %s
r   r!   r$   z%s)
z%s @ %s
tagrT   z[
z%s]
z%s%s
)writer  r  ranger   print_parse_treer   r   Noder!  r  rl  r8   rT   r-   r(  r  )
r:  r   r;   r
  indtr  r!  rM   r   r1   r1   r2   r$    s>   


r$  c                 C   s   |   }t| }tj||dS )a  An annotation just has the "test" syntax, but also stores the string it came from

    Note that the string is *allowed* to be changed/processed (although isn't here)
    so may not exactly match the string generated by Python, and if it doesn't
    then it is not a bug.
    r   )rS   rg   r   ZAnnotationNode)rK   rT   rh   r1   r1   r2   r    s   r  r1   )rC   )T)NN)r7  r,   )r   )F)FN)r   r   r   r!   )NF)r   r!   )r!   )r	  r   r  rZ  r  r  r  r  ior   r   r   unicodedatar   r	   r    r
   	functoolsr   r   ZScanningr"   r   r#   r=  r   r   r   r   r   r   r   r   r   ZErrorsr   r   r   r   r   version_infor   
maxunicoder   r   r)   rN   rR   rV   r^   ri   rg   rk   rw   r   rp   r|   r}   r   r   r   r   r   r   r   	frozensetr   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   rH  rR  r^  rK  rt  rw  rp  r  r   r   r  r  r  rD  r  r  r  rE  rF  r  r  r  r   r  rC  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.  r9  r<  r   r=  rA  r;  rT  rV  rX  r\  r^  rx  r6  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  rm  r  r  r  r  r  r  r  r  r  r  rF  rk  rl  r  r   re   r  rs  r  r  rt  ru  r  r  r  r  r  r  r  r  r  r  r   r$  r  r1   r1   r1   r2   <module>   sB  	


	3*? 
),f.
/ 	n
	
3
 Q
+
		 "#o8	a)

	#
PE4)>,"@
 $
L	#
'
>