o
    Ni9e                    @   s*  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 dlmZ d dlZd dl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 dd#lmZmZ dd$l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*Z"e e#e#d+Z$G d,d- d-Z%e j&dd/efd0d1Z'e j&d/efd2d3Z(e j&d/ed4efd5d6Z)d/efd7d8Z*e j&d/efd9d:Z+e j&d/efd;d<Z,e j&d/efd=d>Z-e j&d/efd?d@Z.dAdBdCZ/e j&d/efdDdEZ0d/efdFdGZ1e j&d/efdHdIZ2e j&d/efdJdKZ3e j&d/efdLdMZ4e j&d/efdNdOZ5e j&d/efdPdQZ6e j&d/efdRdSZ7e j&d/efdTdUZ8e j&d/efdVdWZ9e e#e#dXZ:e j&d/efdYdZZ;e j&d/efd[d\Z<e j&d/efd]d^Z=e j&d/efd_d`Z>e j&d/efdadbZ?e j&d/efdcddZ@e j&d/efdedfZAe j&d/efdgdhZBe j&d/efdidjZCe j&d/efdkdlZDe j&e$fd/edme#fdndoZEe j&d/efdpdqZFe j&d/efdrdsZGe j&d/efdtduZHe j&d/efdvdwZIe j&d/efdxdyZJe j&dd/ed{e jKd4efd|d}ZLe j&d4efd~dZMe j&d/efddZNe j&d/efddZOe j&d/ed4efddZPe j&d/ed4eQfddZRe j&d/efddZSe j&d/efddZTe j&d4eQfddZUe jVdddZWe j&d/efddZXe j&d/efddZYe j&d/efddZZe j&d/efddZ[e j&d/efddZ\e j&dd Z]e j&d/ed4efddZ^e j&dd/ede_fddZ`e j&d4e jKfddZae j&d/ede jKfddZbe j&de_d4e_fddZce j&dd/ed4efddZde j&d/ed4e_fddZee j&d/ede jKde jKde jfd4eQf
ddZge j&d/ede jKde jKde jKde jfd4eQfddZhe j&d/ed4efddZie j&de_d/efddZje j&d/efddZke j&d/efddZle j&d/efddZme j&d/efddZne j&d/efddÄZoe j&d/efddńZpe j&dd/ed4eQfddǄZqe j&dd/ed4eQfddɄZre j&dd/ed4eQfdd˄Zse j&d/efdd̈́Zte j&d/efddτZue j&d/efddфZve j&d/efddӄZwe e#e#dԃZxe j&d/efddքZye j&d/efdd؄Zze j&d/efddڄZ{e j&d/efdd܄Z|e j&d/efddބZ}e j&d/efddZ~e j&dd/ede jKfddZe j&d/efddZe j&d/efddZe j&d/efddZe j&d/efddZe j&d/efddZe j&dd/ede jKfddZe j&d/ed4efddZe j&d/ede jKd4efddZe j&d/efddZe j&d/efddZe j&d/efddZe j&d/efddZe j&d/efdd Ze j&d/efddZe j&dd/ede jKfddZe j&dd/ede jKde jKd4efddZe j&d/efd	d
Ze j&d/efddZe e#e#dZe j&d/ede_fddZe j&d/efddZe j&dd/ede jKde jKfddZe j&d/efddZe j&d/efddZe j&d/efddZe j&d/efddZe j&dd/ede jKfddZe j&d/ede jKd4eQfdd Ze j&d/ede jKd4efd!d"Ze j&d/efd#d$Ze j&dd/ede jKfd%d&Ze j&dd/ede jKfd'd(Ze j&d/efd)d*Ze j&d/efd+d,Ze j&d/efd-d.Ze j&dd/ede jKfd/d0Ze j&dd/ede jKfd1d2Ze j&e% fd/efd3d4Ze j&dd/ed5e jKd4efd6d7Ze j&dd/ed4efd8d9Ze jVdd/ed:e jKfd;d<Ze j&d/efd=d>Ze e#e#d?Ze j&dd/efd@dAZe j&dd/ed:e jKfdBdCZe j&d/efdDdEZe j&d/ed4e jKfdFdGZe j&d/efdHdIZe j&d/ed4e jKfdJdKZe j&d/ed4e jKfdLdMZe j&d/ed4e jKfdNdOZe j&d/ed4e jKfdPdQZe e#e#dRZe edSdSdTdTdTdSdTdUdVZe e#e#dWZe e#eeB e#eB Ze e#e#dXZe j&d/ed4efdYdZZe j&d/efd[d\Ze jVe% ddddddfd/ed]e jKd^e jKd_e jKd`e jKd:e jKdae jKfdbdcZe j&d/efdddeZe j&d/ed_e jKfdfdgZe e#e#dhZe j&d/ed]e jKd^e jKd_e jKd`e jKd:e jKfdidjZe j&d/ed4e jKfdkdlZe j&d/ed4e jKfdmdnZe j&d/edoe jKd4efdpdqZe e#e#drZe jVe% dddddzfd/edse jKd_e jKdte jKdue jKdve jKd4eQfdwdxZe j&d/ed4e jKfdydzZe j&			zdd/edse jKd_e jKd:e jKdue jKdve jKfd{d|Ze j&d/efd}d~Ze j&d/ed4e jKfddZe j&d/efddZe j&d/efddZe j&d/efddZe j&d/efddZe j&d/edeQfddZe j&d/edeQfddZe j&d/efddZe j&d/efddZe j&d/efddZe j&d/efddZe j&d/ed4eQfddZe j&d/efddZe j&d/efddZe j&d/ed4eQfddZe j&d/efddZe j&dd/edeQde jKfddZe j&dd/ede jfdve jKd4efddZe j&dd/edve jKfddZe j&d/efddZe j&d/efddZe j&d/ed4efddZe j&d/efddZe j&d/efddZe j&d/efddZe j&d4efddZe jVde%fd/efddZe eedjZe j&d/ed4efddZe jVe%fd/efddZe j&d/ed4efddZe j&d/efddZe j&d/efddÄZe j&d/efdĐdńZe j&d/efdƐdǄZe j&d/efdȐdɄZe j&d/efdʐd˄Ze j&d/efd̐d̈́Ze j&d/efdΐdτZe j&d/efdАdфZe j&d/efdҐdӄZe j&d/efdԐdՄZe j&d/efd֐dׄZe j&d/efdؐdلZe j&d/efdڐdۄZe j&d/efdܐd݄Ze j&d/ed4efdސd߄Ze j&d/efddZe jVdde jfddZdS (      NNodes	ExprNodesEncodedStringbytes_literalStringEncodingFileSourceDescriptorlookup_unicodecharFutureOptionserrorwarningBuiltin
ModuleNodeUtils_unicode_bytesre_parse_escape_sequences_parse_escape_sequences_rawpartialreduce_CDEF_MODIFIERSCOMMON_BINOP_MISTAKES)StringIO)lookup)r   r      )PyrexScannerr   tentatively_scan)r   )r   )MatchCaseNodes)r   )r   )r   r   )r   )r   r   CompileError   )r   )r	   )r
   )inlinenogilapi);NEWLINEEOFc                   @   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privateFNc                 K   s   | j | d S N)__dict__update)selfkwds r/   K/home/ubuntu/.local/lib/python3.10/site-packages/Cython/Compiler/Parsing.py__init__6   s   zCtx.__init__c                 K   s&   t  }|j}|| j || |S r*   )r'   r+   r,   )r-   r.   ctxdr/   r/   r0   __call__9   s
   
zCtx.__call__)__name__
__module____qualname__level
visibility	cdef_flagtypedef_flagr#   overridabler"   	namespace	templatesallow_struct_enum_decoratorr1   r4   r/   r/   r/   r0   r'   )   s    r'   Expected an identifiersc                 C   s2   | j dkr| j| j}|   |S | | d S NIDENT)sycontextintern_ustringsystringnextr   )rA   messagenamer/   r/   r0   p_identA   s
   
rK   c                 C   sP   g }| j dkr&|| j| j |   | j dkr	 |S |   | j dks|S )NrC   ,)rD   appendrE   rF   rG   rH   )rA   namesr/   r/   r0   p_ident_listK   s   


rO   returnc                 C   s   |   }| j}|   ||fS r*   )positionrD   rH   )rA   posopr/   r/   r0   p_binop_operator\   s   rT   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)	rD   rT   r   
binop_noder	   divisionrE   future_directivestruedivision)rA   ops
p_sub_exprn1rS   rR   n2r/   r/   r0   p_binop_expre   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_argresult_expr)rQ   rH   rD   p_varargslistexpectp_testr   
LambdaNode)rA   rR   rb   rc   rd   exprr/   r/   r0   	p_lambdefu   s   


rk   c                 C   s    t | }| jdkr| d |S )N:=zAinvalid syntax: assignment expression not allowed in this context)p_test_allow_walrus_afterrD   r   )rA   rj   r/   r/   r0   rh      s   

rh   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)testtrue_val	false_val)	rD   rk   rQ   	p_or_testrH   rg   rh   r   CondExprNode)rA   rR   rj   rq   r(   r/   r/   r0   rm      s   


rm   c                 C   sR   t | }| jdkr'|  }|js| jddd |   t| }tj|||dS |S )Nrl   z=Left-hand side of assignment expression must be an identifierFfatallhsrhs)	rm   rD   rQ   is_namer   rH   rh   r   AssignmentExpressionNode)rA   ry   rQ   rz   r/   r/   r0   p_namedexpr_test   s   	
r}   orand)z||&&c                 C      t | dtS )Nr~   )p_rassoc_binop_expr
p_and_testrA   r/   r/   r0   rt         rt   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   r8   )rD   rQ   rH   r   r   rV   r   r   )rA   rS   	p_subexprr\   rR   r]   r/   r/   r0   r      s   
r   c                 C   r   )Nr   )r   
p_not_testr   r/   r/   r0   r      s   r   c                 C   s4   | j dkr|  }|   tj|t| dS t| S )Nnotoperand)rD   rQ   rH   r   NotNoder   p_comparisonrA   rR   r/   r/   r0   r      s
   
r   c                 C   sT   t | }| jtv r(|  }t| }t | }tj||||d}| jtv r(t| |_|S )N)operatoroperand1operand2)	p_starred_exprrD   comparison_opsrQ   p_cmp_opr   PrimaryCmpNodep_cascaded_cmpcascade)rA   r\   rR   rS   r]   r/   r/   r0   r      s   


r   c                 C      | j dkr	t| S t| S N*)rD   r   rh   r   r/   r/   r0   p_test_or_starred_expr      
r   c                 C   r   r   )rD   r   r}   r   r/   r/   r0    p_namedexpr_test_or_starred_expr  r   r   c                 C   s@   |   }| jdkrd}|   nd}t| }|rt||}|S )Nr   TF)rQ   rD   rH   
p_bit_exprr   StarredUnpackingNode)rA   rR   starredrj   r/   r/   r0   r     s   

r   c                 C   s@   |   }t| }t| }tj|||d}| jtv rt| |_|S )N)r   r   )	rQ   r   r   r   CascadedCmpNoderD   r   r   r   )rA   rR   rS   r]   resultr/   r/   r0   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   innot_inisis_not<>!=)rD   rH   rg   rA   rS   r/   r/   r0   r   %  s   



r   )
<>==>=<=r   r   r   r   r   c                 C   r   )N)|)r^   
p_xor_exprr   r/   r/   r0   r   B  r   r   c                 C   r   )N)^)r^   
p_and_exprr   r/   r/   r0   r   I  r   r   c                 C   r   )N)&)r^   p_shift_exprr   r/   r/   r0   r   P  r   r   c                 C   r   )N)<<>>)r^   p_arith_exprr   r/   r/   r0   r   W  r   r   c                 C   r   )N+-)r^   p_termr   r/   r/   r0   r   ^  r   r   c                 C   r   )N)r   @rU   %z//)r^   p_factorr   r/   r/   r0   r   e  r   r   c                 C   s   t | S r*   )	_p_factorr   r/   r/   r0   r   l  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   rC   sizeof)rD   rQ   rH   r   	unop_noder   in_python_fileAmpersandNode
p_typecastrG   p_sizeofp_power)rA   rD   rS   rR   argr/   r/   r0   r   r  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 typeTempty?Fr   )base_type_noder   )	base_type
declaratorr   	typecheck)rQ   rH   p_c_base_type
isinstancer   MemoryViewSliceTypeNodeTemplatedTypeNodeCConstOrVolatileTypeNodeCTupleBaseTypeNoderJ   r   p_c_declaratorrD   rg   r   r   CythonArrayNodeTypecastNode)rA   rR   r   is_memsliceis_other_unnamed_typer   r   r   r/   r/   r0   r     s4   


r   c                 C   sl   |   }|   | d t| rt| }tj||d}nt| }t| dd}tj	|||d}| d |S )N(r   Tr   r   r   ))
rQ   rH   rg   looking_at_exprrh   r   SizeofVarNoder   r   SizeofTypeNode)rA   rR   r   noder   r   r/   r/   r0   r     s   

r   statement_terminatorsc                 C   s   |   }|   d}| jdkrd}|   | jdkr*| j|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rR   rw   r   )	rQ   rH   rD   rh   
p_testlistr   r   YieldFromExprNodeYieldExprNode)rA   r   rR   is_yield_fromr   r/   r/   r0   p_yield_expression  s    
r   c                 C   s   t | }tj|j|dS )Nrj   )r   r   ExprStatNoderR   )rA   
yield_exprr/   r/   r0   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')rD   r8   r   p_def_statementp_for_statementrH   p_with_items)rA   r2   
decoratorsr/   r/   r0   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   rC   await)r   [.r   **)rG   peek
p_new_exprrD   rQ   rH   p_atom	p_trailerr   AwaitExprNoder   rV   )rA   	await_posr\   rR   r]   r/   r/   r0   r     s$   




r   c                 C   s,   |   }|   t| }t| tj||dS )N)cppclass)rQ   rH   r   p_callr   NewExprNode)rA   rR   r  r/   r/   r0   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)rQ   rD   r	  p_indexrH   rK   r   AttributeNode)rA   node1rR   rJ   r/   r/   r0   r    s   



r  Tallow_genexpc           	      C   s  |    g }g }d}d}| jdkr| jdkr/|r!| jd|  d |    |t|  d}nd| jdkrB|    |t|  d}nQt| }| jdkru|    |jsZ| 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|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rR   Tr  =z!Expected an identifier before '='valuerL   r   asyncr   r   )rH   rD   r   rQ   rM   rh   r}   r{   rR   rE   rF   rJ   r   IdentifierStringNodelenp_genexprg   )	rA   r  positional_argskeyword_argsstarstar_seenlast_was_tuple_unpackr   encoded_namekeywordr/   r/   r0   p_call_parse_args(  sZ   





#
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   	TupleNodeAsTupleNode.0r   r  r/   r0   
<listcomp>_  s    $z,p_call_build_packed_args.<locals>.<listcomp>r   rR   keyr  r   T)key_value_pairsreject_duplicatesr   )r  )r   r   r   rV   r   tuplerM   DictItemNoderR   is_dict_literalextendr-  DictNoder  MergedDictNode)rR   r  r  keyword_dict	subtuples	arg_tuplekwargs
dict_itemsitemr,  r  r/   r  r0   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  )	rQ   r#  r  r   r%  r   SimpleCallNoder;  GeneralCallNode)rA   r<  rR   r  r  r7  r5  r/   r/   r0   r	    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])
rQ   rH   p_subscript_listr  r   SliceIndexNodemake_slice_nodesr&  	IndexNoderg   )
rA   r?  rR   
subscriptsis_single_valuer@  rA  r   indexesrC  r/   r/   r0   r    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 )NTrL   FrD  )p_subscriptrD   rH   rM   )rA   rJ  itemsr/   r/   r0   rE    s   



rE  c                 C   sZ   t | d}| jdkr|gS |   t | d}| jdkr||gS |   t | d}|||gS )N)r_   r_   )r_   rL   rD  )p_slice_elementrD   rH   )rA   r@  rA  stepr/   r/   r0   rL    s   





rL  c                 C   s   | j |vr	t| S d S r*   )rD   rh   )rA   
follow_setr/   r/   r0   rN    s   
rN  c                 C   s   |  d d S )N...)rg   r   r/   r/   r0   expect_ellipsis  s   rR  c                 C   sD   g }|D ]}t |dkr||d  q|t| g|R   q|S )Nr   r   )r  rM   make_slice_node)rR   rI  r   	subscriptr/   r/   r0   rG    s   rG  c                 C   s<   |st | }|st | }|st | }t j| |||dS )N)r@  rA  rO  )r   NoneNode	SliceNode)rR   r@  rA  rO  r/   r/   r0   rS    s   


rS  c                 C   sb  |   }| 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s|dkrt| S |dkrt| }|d u rt| | j}|   |S | d d S )Nr   r   r$  yieldr   {`rQ  INTFLOATr  IMAGr  BEGIN_STRINGBEGIN_FT_STRINGrC   z!Expected an identifier or literal)rQ   rD   rH   r   r&  r   p_testlist_comprg   p_list_makerp_dict_or_set_makerp_backquote_exprrR  EllipsisNodep_int_literalrG   	FloatNodeImagNodep_atom_stringp_atom_ident_constantsp_namer   )rA   rR   rD   r   r  r/   r/   r0   r    sN   




r  c                 C   s   |   }t| \}}}|stj|||dS |}|dkr"tj||dS |dkr.tj|||dS |dkr9tj||dS |dkrDtj||dS |dkrOtj||dS | d	| d
 d S )N)r  bytes_valuecr  ubfvaluestzinvalid string kind '')	rQ   p_cat_string_literalr   UnicodeNodeCharNode	BytesNodeJoinedStrNodeTemplateStringNoder   )rA   rR   kindrj  unicode_value	kind_charr/   r/   r0   rg  '  s    rg  c                 C   s|   |   }| j}|dkrt|}n'|dkrtj|dd}n|dkr)tj|dd}n|dkr6| js6t|}ndS |   |S )	z
    Returns None if it isn't a special-cased named constant.
    Only calls s.next() if it successfully matches a named constant.
    NoneTrueTr  FalseFNULLN)rQ   rG   r   rU  BoolNoder   NullNoderH   )rA   rR   rJ   r   r/   r/   r0   rh  ?  s   rh  c                 C   s   |   }tt| j}|   d}d}|d dv r4|d dv r$|d7 }n|d7 }|d d }|d dv sd }|r;d}n|rI|dksG| jjd	krId}| jrU|rSt	|d
 d}t
j|||||dS )N r  UuLlLlLUTLL   z4illegal integer literal syntax in Python source fileF)is_c_literalr  unsignedlongness)rQ   cythoncaststrrG   rH   rE   language_levelr   r   r   IntNode)rA   rR   r  r  r  r  r/   r/   r0   rd  V  s6   
	
rd  c                 C   sH   |   }| js|| jv r| j|}t||}|d ur|S tj||dS )NrJ   )rQ   compile_time_exprcompile_time_envlookup_herewrap_compile_time_constantr   NameNode)rA   rJ   rR   r  r   r/   r/   r0   ri  w  s   
ri  c                    sb  |d u r	t  S |tu rt  S t|trt j |dS t|tr-t j t	||dS t|t
r<t j t	||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 rd S t j |d	S t d
||jjf  d S )Nr  )r  constant_resultg        r   )r  asciic                    s   g | ]}t  |qS r/   )r  r(  r  r/   r0   r*    s    z.wrap_compile_time_constant.<locals>.<listcomp>r$  z4Invalid type for compile-time constant: %r (type %s))r   rU  Ellipsisrc  r   boolr  intr  reprfloatre  complexrf  imagrealrV   r  rt  r   bytesr   rv  r/  r&  r   	__class__r5   )rR   r  r   bvaluerb   r/   r  r0   r    s@   










r  c                 C   s  |   }t| \}}}|dks| jdkr| jdkr|||fS |g|g|g}}}d  }}| jdks7| jdkr|   }t| \}}	}
|dkrLt|d q-||krw||hddhddhfv r_d}n|dksg|dkrmt|d	 q-t|d
||f  q-||	 ||
 || | jdks7| jdks7|dv s|dkrd |vrtd|| j}|dv rtddd |D }|dkrg }t	||D ]\}}t
|tr||7 }q|tj|t|d q|dkrg }|D ]}|| q|||fS )Nrk  r]  r^  zCCannot concatenate char literal with another string or char literalrn  rl  r  rq  z:cannot mix t-string literals with string or bytes literalszFCannot mix string literals of different types, expected %s'', got %s'')rm  rk  r      rl  r  c                 S   s   g | ]}|d ur|qS r*   r/   )r)  rl  r/   r/   r0   r*        z(p_cat_string_literal.<locals>.<listcomp>r  )rQ   p_string_literalrD   r   rM   r   joinsource_encodingr   zipr   r%  r   rt  r2  )rA   rR   ry  rj  rz  bstringsustrings	positions	next_kindnext_bytes_valuenext_unicode_valuerl  r/   r/   r0   rs    sR   








rs  rl  required_typec                 C   s`   | j dkrd S |  }t| |\}}}|dkr#|dkr!| d| |S |dkr)|S | d d S )Nr]  rl  rn  zf-string not allowed hererm  z#internal parser configuration error)rD   rQ   r  r   )rA   r  rR   ry  rj  rz  r/   r/   r0   p_opt_string_literal  s   
r  c                 C   s(   t t| }|D ]	}|dkr dS qdS )N   TF)r  r  r  )stringrA   rk  r/   r/   r0   check_for_non_ascii_characters  s   r  is_rawc           	      C   s   | j }| j}|}| jjdk}|dkr|| |S |dkrC|r8|s1|dks1t|dk s1|d dvr8|| |S d}t||||  |S |d	krN|d
 |S |dkr[| jd|d |S dS )z
    Returns a string of non-escaped characters (if handled) or none.
    If passed an escape sequence returns an empty string.
    r  CHARSESCAPErl  r    r   Uur  r%   
r&   zUnclosed string literalr  N)rD   rG   rE   r  rM   r  _append_escape_sequencer   )	rA   rR   charsry  r  rD   systrr   is_python3_sourcer/   r/   r0   p_string_literal_shared_read  s*   
(


r  rG   c                 C   s   | d }t|dkst|dkr|dv r|S t|}t|t|kr*t| d |d t|}t|dkrKt| d|d  d	|d  d
 dS t| d|  dS )Nz"'r   r    	rbrurfrtrz!Duplicate string prefix characterrzString prefixes r   z and z cannot be combinedzInvalid string prefix r  )rstriplowerr  setr   discardsorted)rR   rG   kind_stringunique_string_prefixesr/   r/   r0   _validate_kind_string  s    

 r  c                 C   s  | j dkr|d u sJ t| S |  }| jjdk}d}t|| j}d|v }d|v r7t|dkr4t|d d}nd|v r>d}n	d	|v rEd	}nd
}|d
kr_|d u r_t	j
| jjv r_t| j}d	}n$|d uri|dv ri|}|dv rrt }n|d
kr}t| j}nt| j}	 |   t| ||||d}	|	d ur|s|rt	j
| jjv rt|	}q| j dkrn| d| j | jf  q|dkrd }
| }t|dkrt|d|  n| \}}
|r|rt	j
| jjv r|dkr| jd|d d }|   |||
fS )Nr^  r  Fr  rk  r   z+Invalid string prefix for character literalrm  rl  r  ub)rl  rn  r  
END_STRINGz(Unexpected token %r:%r in string literalzinvalid character literal: %rz0bytes can only contain ASCII literal characters.r  )rD   p_ft_string_literalrQ   rE   r  r  rG   r  r   r	   unicode_literalsrX   r   StrLiteralBuilderr  UnicodeLiteralBuilderBytesLiteralBuilderrH   r  r  getchar
getstrings)rA   kind_overriderR   r   has_non_ascii_literal_charactersr  r  ry  r  handled_charsrz  rj  r/   r/   r0   r  $  s|   





r  c                 C   sD   g }	 |    | j}|dv r|dkr|    d|S || j q)NT)END_FT_STRING_EXPRr&   Nr  r  )rH   rD   r  rM   rG   )rA   stringsrD   r/   r/   r0   p_read_ft_string_expressions  s   
r  is_single_quotedtf_string_kindc              	   C   s  g }d  } }}d }d}	|   }
|
d |
d |
d d f}t| }| s1t|
d| d g }n| }tt||
d | | j|d} |  jd7  _| jdkrQ| 	  | jd	krat
| th d
B d}nt| }| jdkrpd}	| 	  | jdkr|   }| 	  | j}|dv rt|   d n0tj|st|   d|  | 	  n|   d |d d krt|   d | 	  n| 	  |	s|dkr|d ur|dd\}}|dkrtj|t| d d}|	r|tj|t|d | jdks| jdkr| 	  | jdks| jdks| jdkrt|   d| d| j  |} | jdkr;|   }t| ||ddd}tj||d}|	rJ|d u rJ|d u rJd}|d urTt|}|dkrh|tj|
||||d |S |tj|
|||d  |S )!NFr   r   r    z empty expression not allowed in z-string)parent_scannerr  initial_posINDENTrW  >   }!r_   )r   r  Tr  )r  r_   r  zmissing conversion characterz!invalid conversion character '%s'zDf-string: conversion type must come right after the exclamation markrq  )rR   r  r%   DEDENTr&   zUnexpected characters after z-string expression: r_   rn  is_format_stringr  ro  r  )r  conversion_charformat_specexpression_str)r  r  r  )rQ   r  stripr   r   r   r  bracket_nesting_levelrD   rH   r   r   p_testlist_star_exprrG   r   FormattedValueNodefind_conversion_funcrsplitrt  r   r   r  rM   p_ft_string_middlesrw  TStringInterpolationNode)rA   r  r  r  r   r  r  rj   t_string_expressionself_documentingbracket_posexpr_posexpr_stringoriginal_scannerprevious_pos_rR   format_spec_contentsr/   r/   r0   p_ft_string_replacement_field  s   










	r  r  c                 C   s   g }t  }|  }	 |   | j}t| ||d|d}	|	d ur q
|jr3|tj	||
 d t  }|dkrOt| |||d}
||
 | jdksN| d q
|dkrV	 |S | jdkra|r`	 |S nt|  d	| j| j|f  q)
NTrl  r  r  rX  )r  r  END_FT_STRINGz+Unexpected token %r:%r in %s-string literal)r   r  rQ   rH   rD   r  r  rM   r   rt  	getstringr  r2  expectedr   rG   )rA   r  r  r  r  middlesbuilderrR   rD   r  fieldsr/   r/   r0   r    sL   





r  c                 C   sx   t |  | j}d|v rdnd}d|v }| jd}t|dk}t| ||d|d}| jdkr3| | |   |d |fS )	Nrq  rn  r  
rRbBuUfFtTr  Fr  r  )	r  rQ   rG   lstripr  r  rD   r  rH   )rA   r  r  r  quotesr  r  r/   r/   r0   r    s   


r  escape_sequencec              	   C   s  t |dk r|d d S |d }|dv r#|t|dd  d d S |dv r.|| d S |dv r<|t| d S |dkrBd S |d	kret |d
krZ|t|dd  d d S |jd| dd d S |dv r| dv rd}|dkrd }zt|dd }t|}W nA t	y   |jdt
|dd d dd 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    \r   01234567   z'"\abfnrtvr  x      zInvalid hex escape '%s'Frv   NUu)rl  rn  r  r  Nr  z!Unknown Unicode character name %srl  )   
   i zInvalid unicode escape '%s'r   )r  rM   append_charvalr  r   char_from_escape_sequencer   r   ordKeyErrorr  r   append_uescape)ry  r  r  rA   rk  chrvalucharr/   r/   r0   r  '  sR   

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 )	NrD  r$  r  2iterable unpacking cannot be used in comprehensionr   r  )looprM   typehas_local_scoperL   )rQ   rH   rD   rg   r   ListNoder   
is_starredr   ComprehensionAppendNode
p_comp_forComprehensionNoder   	list_typerE   r  %p_namedexpr_test_or_starred_expr_list)rA   rR   rj   rM   r  exprsr/   r/   r0   r`  X  s,   









r`  c                 C   s,   | j dv r
t| |S | j dkrt| |S |S )Nr  ro   )rD   r  	p_comp_if)rA   bodyr/   r/   r0   p_comp_iterw  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   )	rQ   rD   rH   rg   p_for_boundsr,   r#  r   ForStatNode)rA   r"  rR   r   kwr/   r/   r0   r    s   

r  c                 C   s<   |   }|   t| }tj|tj||t| |dgd dS )N	conditionr"  
if_clausesr&  )rQ   rH   rt   r   
IfStatNodeIfClauseNoder#  )rA   r"  rR   rq   r/   r/   r0   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  rL   r  )key_expr
value_exprr   )r  rM   r  r  r$  )rb   r  )r  r.  )rQ   rH   rD   r   r3  r  r   r   rM   rh   rg   r0  rR   r   r%  r  r   	dict_typeDictComprehensionAppendNoder,  r  set_typer  r  r  r2  SetNodeis_set_literalMergedSequenceNoder1  r4  )rA   rR   partstarget_typelast_was_simple_itemr:  r,  r  comprehension_typerM   r  rM  	set_itemspartr9  r/   r/   r0   ra    s   







%0




ra  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 )NrL   rY  r   r   r$  r   )
rQ   rH   rh   rD   rM   rg   r  r   r&  BackquoteNode)rA   rR   rb   r   r/   r/   r0   rb    s   




rb  c                 C   P   |d ur|gng }| j tvr&|t|  | j dkr	 |S |   | j tvs|S NrL   )rD   expr_terminatorsrM   rh   rH   rA   rj   r   r/   r/   r0   p_simple_expr_list)     


rF  c                 C   rB  rC  )rD   rD  rM   r   rH   rE  r/   r/   r0   p_test_or_starred_expr_list4  rG  rH  c                 C   rB  rC  )rD   rD  rM   r   rH   rE  r/   r/   r0   r  ?  rG  r  c                 C   >   |   }t| }| jdkr|   t| |}tj||dS |S NrL   r$  )rQ   rh   rD   rH   rF  r   r&  rA   rR   rj   r   r/   r/   r0   r   L     

r   c                 C   rI  rJ  )rQ   r   rD   rH   rH  r   r&  rK  r/   r/   r0   r  Z  rL  r  c                 C   sR   |   }t| }| jdkr|   t| |}tj||dS | jdv r't| |S |S )NrL   r$  r  )rQ   r   rD   rH   r  r   r&  r  rK  r/   r/   r0   r_  h  s   



r_  c                 C   s2   t | tj|jtj|j|dd}tj|j|dS )Nr   r   )r  )r  r   r   rR   r   r   GeneratorExpressionNode)rA   rj   r  r/   r/   r0   r  v  s   r  )r   rD  r  r_   r  r%   r&   c                 C   &   |   }|   t| }tj||dS N)rN   )rQ   rH   rO   r   
GlobalNoderA   rR   rN   r/   r/   r0   p_global_statement  s   rR  c                 C   rN  rO  )rQ   rH   rO   r   NonlocalNoderQ  r/   r/   r0   p_nonlocal_statement  s   rT  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  rW  r   z([-+*/%^&|]|<<|>>|\*\*|//|@)=r   rB  z&Illegal operand for inplace operation.r  )r   ry   rz   r   r    )ry   rz   first)lhs_listrz   ) r  rD   r{   is_subscriptis_attributerH   p_annotation
annotationr  r   rR   r   rM   r  r   matchr   r   rF  rH  r?  rS  r@  rA  r  r  r   r   InPlaceAssignmentNoder   SingleAssignmentNodeCascadedAssignmentNode)rA   rj   has_annotation	expr_listry   r   rz   r/   r/   r0   p_expression_or_assignment  sR   







ra  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 )NFr   rL   r%   r&   Tr$  )r7  streamappend_newline)	rQ   rH   rD   rh   rM   r   r&  r   PrintStatNode)rA   rR   ends_with_commarc  rb   r7  r/   r/   r0   p_print_statement  s4   






rg  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' argumentsrv   rL   r$  )rQ   rH   r   r   r   r&  rb   r  r   rD   rM   rh   r   ExecStatNode)rA   rR   codetuple_variantrb   r/   r/   r0   p_exec_statement  s2   

rk  c                 C   rN  )Nr$  )rQ   rH   rF  r   DelStatNode)rA   rR   rb   r/   r/   r0   p_del_statement  s   rm  Fwith_newlinec                 C   s.   |   }| d |r| jddd t|S )NpassExpected a newlineTignore_semicolon)rQ   rg   expect_newliner   PassStatNode)rA   rn  rR   r/   r/   r0   p_pass_statement  s
   

ru  c                 C      |   }|   t|S r*   )rQ   rH   r   BreakStatNoder   r/   r/   r0   p_break_statement     
rx  c                 C   rv  r*   )rQ   rH   r   ContinueStatNoder   r/   r/   r0   p_continue_statement"  ry  r{  c                 C   s6   |   }|   | jtvrt| }nd }tj||dS )Nr  )rQ   rH   rD   r   r   r   ReturnStatNode)rA   rR   r  r/   r/   r0   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 )NrL   r   )exc_type	exc_valueexc_tbcause)rQ   rH   rD   r   rh   r   RaiseStatNodeReraiseStatNode)rA   rR   r~  r  r  r  r/   r/   r0   p_raise_statement6  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t||rcdnd d d	d
}	||	 q4t	j||dS )NT
as_allowedrL   cimport)module_nameas_nameis_absoluter  r  r   r  is_import_as_namer8   imported_namesrx   stats)rQ   rD   rH   p_dotted_namerM   r	   absolute_importrE   rX   r   CImportStatNoder]  r   r  
ImportNoder  r  StatListNode)
rA   rR   ry  rM  r  r  target_namedotted_namer  statr/   r/   r0   p_import_statementT  s>   


	r  first_statementc              	   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|tj|tj||dd||d|dS )N)r   rQ  r   importr  r  Fr  zExpected 'import' or 'cimport'r  r   r   TrL   r   
__future__z?from __future__ imports must occur at the beginning of the filezinvalid syntaxbracesznot a chancez future feature %s is not defined)r  relative_levelr  r  r  r  )modulerM  )rQ   rH   rD   r  rE   rF   r	   r  rX   r  r   p_imported_namerM   rg   getattrAttributeErroraddr   rt  FromCImportStatNoder   r  r  FromImportStatNoder  )rA   r  rR   r8   dotted_name_posr  r  ry  
is_cimportis_parenthesizedr  name_posrJ   r  	directiveimported_name_stringsrM  r/   r/   r0   p_from_import_statementu  s   













r  c                 C   s"   |   }t| }t| }|||fS r*   )rQ   rK   	p_as_name)rA   rR   rJ   r  r/   r/   r0   r    s   
r  r  c                 C   sj   |   }t| }d }|g}| jdkr"|   |t|  | jdks|r(t| }||| jd||fS )Nr   )	rQ   rK   rD   rH   rM   r  rE   rF   r  )rA   r  rR   r  r  rN   r/   r/   r0   r    s   

r  c                 C   s(   | j dkr| jdkr|   t| S d S )NrC   as)rD   rG   rH   rK   r   r/   r/   r0   r    s   r  c                 C   sH   |   }|   t| }| jdkr|   t| }nd }tj|||dS )NrL   )r+  r  )rQ   rH   rh   rD   r   AssertStatNode)rA   rR   condr  r/   r/   r0   p_assert_statement  s   

r  c                 C   s\   |   }|   t| g}| jdkr"|   |t|  | jdkst| }tj|||dS )Nelifr,  )rQ   rH   p_if_clauserD   rM   p_else_clauser   r.  )rA   rR   r-  r&  r/   r/   r0   p_if_statement  s   


r  c                 C   s(   |   }t| }t| }tj|||dS )Nr*  )rQ   r}   p_suiter   r/  )rA   rR   rq   r"  r/   r/   r0   r    s   r  c                 C   s   | j dkr|   t| S d S )Nrp   )rD   rH   r  r   r/   r/   r0   r  
  s   
r  c                 C   s:   |   }|   t| }t| }t| }tj||||dS )N)r+  r"  r&  )rQ   rH   r}   r  r  r   WhileStatNode)rA   rR   rq   r"  r&  r/   r/   r0   p_while_statement  s   r  r   c                 C   sP   |   }|   t| d|d}t| }t| }|j|||d tj|fi |S )NTr$  )r"  r&  r   )rQ   rH   r'  r  r  r,   r   r(  )rA   r   rR   r)  r"  r&  r/   r/   r0   r      s   r   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  bound1	relation1	relation2bound2rO  )p_for_targetrD   rH   p_for_iteratorr2  r   r   p_for_from_relationrQ   rK   p_for_from_stepr   r  r{   r   rR   rJ   rg   )rA   r%  r   r  r  r  rel1	name2_posname2rel2_posrel2r  rO  r/   r/   r0   r'  ,  sP   






r'  c                 C   s*   | j tv r| j }|   |S | d d S )Nz#Expected one of '<', '<=', '>' '>=')rD   inequality_relationsrH   r   r   r/   r/   r0   r  Y  s
   
r  c                 C   s,   | j dkr| jdkr|   t| }|S d S )NrC   by)rD   rG   rH   r   )rA   rO  r/   r/   r0   r  c  s
   r  )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 rJ  )rQ   r   rD   rH   rM   r   r&  )rA   r`   rR   rj   r   r/   r/   r0   p_targetq  s   



r  c                 C   s
   t | dS )Nr   )r  r   r/   r/   r0   r    s   
r  c                 C   s6   |   }|rt| }nt| }|rtjntj||dS )N)sequence)rQ   r   rt   r   AsyncIteratorNodeIteratorNode)rA   r%  r   rR   rj   r/   r/   r0   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)exceptrp   r  rp   )r"  except_clausesr&  finally)r"  finally_clausezExpected 'except' or 'finally')
rQ   rH   r  rD   rM   p_except_clauser   TryExceptStatNodeTryFinallyStatNoder   )rA   rR   r"  r  r&  r  r/   r/   r0   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_   rL   rC   r  r    r  T)patternr  r"  is_except_as)rQ   rH   rD   rh   r   r   r&  rb   rG   rE   r  rK   r  r  r   ExceptClauseNode)rA   rR   r~  r  r  pos2rJ   r"  r/   r/   r0   r    s2   

r  c           
      C   s   |   }|   t| dd }| d | jrU|}| j||}|rS| j| t	|}|
 }t||| |j| jd}t||}	W d    |	S 1 sLw   Y  |	S d S t|S )Nrl  r    z!Syntax error in include statement)r  parse_comments)rQ   rH   r  rs  compile_time_evalrE   find_include_fileincluded_filesrM   r   get_file_objectr   encodingr  p_statement_listr   rt  )
rA   r2   rR   unicode_include_file_nameinclude_file_nameinclude_file_pathsource_descrn  s2treer/   r/   r0   p_include_statement  s&   



r  c                 C   s0   |    | jdkr| jst| }|S t| }|S )Ntemplate)rH   rG   r   p_with_templater   )rA   r   r/   r/   r0   p_with_statement  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
    Fr/   r   r   r_   r  Nr"  )rD   r   rH   p_with_items_listrg   r   r  reversed)	rA   r   brackets_succeededrM  errorsr"  clsrR   r.   r/   r/   r0   r     s$   






r   c                 C   s@   g }	 | t| | | jdkr	 |S |   | jdkr	 |S q)NTrL   r   )rM   p_with_itemrD   rH   )rA   r   rM  r/   r/   r0   r  	  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 )	NrC   )r"   gilzwith gil/nogil cannot be asyncr   r   )stater+  r  )managerr  r   )rQ   r   rD   rG   r   rH   rh   rg   r   GILStatNoder   WithStatNode)rA   r   rR   r  r+  r  r  r/   r/   r0   r  	  s$   


r  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   rL   rD  r_   z-Syntax error in template function declaration)rQ   rH   rg   rM   rG   rD   rs  expect_indentr'   r>   p_c_func_or_var_declarationexpect_dedentr   )rA   rR   r>   body_ctxfunc_or_varr/   r/   r0   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continuerP   raiser  r   r  rW  assertro  )rD   rR  rT  rg  rk  rm  rx  r{  r}  r  r  r  r   r  ru  ra  )rA   r  r   r/   r/   r0   p_simple_statementU	  sX   










	


r  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 )Nr  r$   rb  Fr   r   r  cdefz@The 'cdef' keyword is only allowed in Cython files (pyx/pxi/pxd)z%Syntax error in simple statement list)r  rR   r   r   rt  rM   rD   rH   r  r  r   rj   r{   rJ   r   rs  )rA   r2   r  r  rR   r  r/   r/   r0   p_simple_statement_listy	  s4   







r  c                 C   s   | j }d| _ t| }|| _ |S )Nr   )r  r   )rA   oldrj   r/   r/   r0   p_compile_time_expr	  s
   r	  c                 C   sd   |   }| j}|   t| }| d t| }| jr&||}||| | j	ddd t
|S )Nr  rp  Trq  )rQ   r  rH   rK   rg   r	  r  compile_time_valuedeclarers  r   rt  )rA   rR   denvrJ   rj   r  r/   r/   r0   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   ELIFELSE)rQ   r  r  rH   r	  r  r
  r  rD   r   rt  )	rA   r2   rR   
saved_evalcurrent_evalr  r   rj   r"  r/   r/   r0   p_IF_statement	  s4   





r  c                 C   s  |j }|  }d }| jdkr|jdvr| d t| |S | jdkr5| jjddr1t	|ddd	 t
| S | jd
krN| jjddrIt	|ddd	 t| |S | jdkr~|jdvr]| d |j| _t| }|js}| jdvr}| jdkrx| jdkrxn| d n| jdkr|rt| 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rd|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r8| d& t| |S |jd'krS| jdkrS| jd(krSt| S | jdkre|jd(kret| ddS |jd)v r{t| }|d urv|S | d* | jd+krt | S | jd,krt!| 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|	|
 | jdkr| jd0krt'| |}|d ur|S t(| ||d1S )2Nctypedefr  
module_pxdz#ctypedef statement not allowed hereDEFzwarn.deprecated.DEFFzThe 'DEF' statement  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   IFzwarn.deprecated.IFTzThe '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<  propertyr  c_class_pxdr(   zdecorator not allowed here)r   r  cpdefr  r  rC   r  r   ro  )rn  r  r  )r  r  r<  r  r  zcdef statement not allowed here)r<   %'api' not allowed with this statementrv   r   r   r  r   r  )r  r<  r  r(   z!class definition not allowed hereincludez"include statement not allowed herer  r  )r  r  z%Executable statement not allowed herero   whiler   tryr   r[  r  ))r:   rQ   rD   r8   r   p_ctypedef_statementrE   compiler_directivesgetr   r  r  p_decoratorsr?   rG   ru  rH   p_cdef_statementr   CFuncDefNodeCVarDefNodeCClassDefNodeCStructOrUnionDefNodeCEnumDefNoder   r   r#   r   p_class_statementr  p_property_declp_ignorable_statementr  r  r   r  r  r   put_backp_match_statementr  )rA   r2   r  r:   rR   r   r<   r   tup
ident_name	ident_posmatch_statementr/   r/   r0   p_statement	  s   























$




r4  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r  r&   r  Fr   r   r  )	rQ   rD   r4  r   r   rt  rM   r  r  )rA   r2   r  rR   r  r  r/   r/   r0   r  N
  s   



r  c                 C   s   t | |ddd S )NFwith_doc_onlyr   )p_suite_with_docstringrA   r2   r/   r/   r0   r  a
  s   r  r7  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_   r%   r  Frv   )r  r  r<  r(   zSyntax error in declarationsTrq  )rg   rD   rH   r  p_doc_stringr  r  r#   r   r8   r  ru  rs  _extract_docstring)rA   r2   r7  docr"  r/   r/   r0   r8  f
  s$   




r8  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.Frv   rC   r  r>   Tr   r   r  r   r  r  rL   zUnmatched %sz or )rD   r   r  rG   rH   r   rh   r   r   r   CComplexBaseTypeNoderR   r   r  rM   r  r  )rA   
end_sy_setr>   r  r  pos_idxparsed_typeidentr   r   r   keyword_nodewas_keywordr/   r/   r0   p_positional_and_keyword_args~
  sZ   	






*rE  nonemptyc                 C   s$   | j dkrt| |dS t| ||dS )Nr   r=  rF  r>   )rD   p_c_complex_base_typep_c_simple_base_type)rA   rF  r>   r/   r/   r0   r   
  s   
r   c                 C   s.   | j dkr| jtv r| j}|   |S tdS )NrC   r  )rD   rG   calling_convention_wordsrH   r   )rA   r   r/   r/   r0   p_calling_convention
  s
   rK  )	__stdcall__cdecl
__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   rL   r   )
componentsr   )rQ   rH   r   r   r   r>  rD   rM   r   rg   is_memoryviewslice_accessp_memoryviewslice_accessp_buffer_or_template)rA   r>   rR   r   r   	type_noderO  r/   r/   r0   rH  
  s6   






rH  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 )NFr   r   rC   constzDuplicate 'const'TvolatilezDuplicate 'volatile'rG  )r   is_constis_volatilez"Expected an identifier, found '%s'r  r  r   r   r   r  r   )r   r  r   r   )rJ   module_pathis_basic_c_typesignedr  r  r>   r   )r   rJ   )rQ   rD   rG   r   rH   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_namerM   rK   rJ  r.  CSimpleBaseTypeNoderP  rQ  rR  CNestedBaseTypeNode)rA   rF  r>   is_basicrZ  r  r  rX  rR   rV  rW  r   rJ   r  old_posrS  r/   r/   r0   rI  
  s   










$
rI  c                 C   sn   |   }|   t| d|\}}| d | jdkr t| ||}tj|dd |D d}tj	||||d}|S )N)rD  rD  r   c                 S   s"   g | ]\}}t j|j||d qS )r+  )r   r0  rR   )r)  r,  r  r/   r/   r0   r*  _  s    z(p_buffer_or_template.<locals>.<listcomp>r0  )r  r  r   )
rQ   rH   rE  rg   rD   rR  r   r3  r   r   )rA   r   r>   rR   r  r  r5  r   r/   r/   r0   rR  O  s$   


rR  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_   TrZ  r  )rD   rG   rQ   rH   rM   r.  )rA   savedretvalsvr/   r/   r0   rP  j  s   


rP  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 ':'.rD  )r   axes)	rQ   rH   rE  r  r   rg   rG  r   r   )rA   r   rR   rI  r  rT  rK  r   r/   r/   r0   rQ    s   


rQ  c                 C   s   | j dko	| jtvS rB   )rD   rG   rJ  r   r/   r/   r0   looking_at_name  s   rh  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 )NFrC   r   Tr   r  )r   rD  r   r   rD  r   r   )
rG   base_type_start_wordsrD   rQ   rH   rM   rg   r.  r   reverse)rA   is_typerJ   r  dotted_pathrd  pr/   r/   r0   r     sF   










r   c                 C   s   | j dko	| jtv S rB   )rD   rG   ri  r   r/   r/   r0   r[    s   r[  c                 C   s@   | j dkr| j}|  }|   | j dk}| d|| |S dS )NrC   r   F)rD   rG   rQ   rH   r.  )rA   rJ   r  r   r/   r/   r0   r_    s   

r_  )voidcharr  r  doublebint)r   r   )r    r   )r   r   )
Py_UNICODEPy_UCS4	Py_hash_t
Py_ssize_tssize_tsize_t	ptrdiff_tPy_tss_t)shortlongrZ  r  )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   rC   r  rZ  r    rz  r  r{  )rD   rG   sign_and_longness_wordsrH   )rA   rZ  r  r/   r/   r0   r]    s   




r]  c                 C   s.   t | d}|d urt|}| j|_|S d }|S )Nrl  )r  r   r  r  )rA   literalcnamer/   r/   r0   p_opt_cname  s   
r  r   rk  cmethod_flag
assignablecalling_convention_allowedc              	   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  )rJ   r  T)r   rk  r  rF  r  z&%s on something that is not a functionr   r   r   r   )rQ   rD   rH   rh  r   CNameDeclaratorNoderE   rF   p_c_func_declaratorr   rg   p_c_simple_declaratorcalling_conventionr   p_c_array_declarator)rA   r2   r   rk  r  r  rF  r  rR   r?  r   r/   r/   r0   r     s8   	





r   c                 C   sB   |   }|   | jdkrt| }nd }| d tj|||dS )NrD  )r?  	dimension)rQ   rH   rD   r   rg   r   CArrayDeclaratorNode)rA   r?  rR   dimr/   r/   r0   r  4  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   has_varargsexception_valueexception_checkr"   with_gilhas_explicit_exc_clause)p_c_arg_listp_optional_ellipsisrg   p_nogilp_exception_value_clauser9   r   rQ   
p_with_gilr   CFuncDeclaratorNoder"   )rA   rR   r2   r?  r  rb   ellipsisr"   exc_val	exc_check
exc_clauser  r/   r/   r0   r  @  s(   
r  )r   r   r   rU   r   z++z--r   r   r   r   r   r   rL   r   r   r   r   r   r   []()r  r  r  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 )Nr1  r  rT  rC   )r   rk  r  r  rF  )r?  r   r   zDeclarator should be emptyr   r  zEmpty declaratorr  ::r  c                 S   s   g | ]}|d v rdqS )z+-*/<=>!%&|([^~,r   r/   )r)  rk  r/   r/   r0   r*    r  z)p_c_simple_declarator.<locals>.<listcomp>r   r   r  r   rD  r  )r   r   r   r   r    z,Overloading operator '%s' not yet supported.Frv    )rJ   r  default)rQ   rK  rD   rH   rG   r   r   CConstDeclaratorNodeCPtrDeclaratorNoderE   cpp CppRvalueReferenceDeclaratorNodeCReferenceDeclaratorNoder   r  rh   r=   r9   rg   supported_overloaded_operatorsr  r  )rA   r2   r   rk  r  r  rF  rR   r  	is_ptrptr	const_posrV  r?  r   
node_classrz   rJ   r  rS   r/   r/   r0   r  c  s   















r  c                 C   $   | j dkr| jdkr|   dS dS )NrC   r"   TFrD   rG   rH   r   r/   r/   r0   r       r  c                 C   s$   | j dkr|   | d dS dS )Nr   r  TF)rD   rH   expect_keywordr   r/   r/   r0   r    s
   

r  	is_externc                 C   s.  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| }|||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.
    FNTrC   noexceptr  r   r   r    r"   r   zf'except +nogil' defines an exception handling function. Use 'except + nogil' for the 'nogil' modifier.r  r   )	rD   rG   rH   rQ   r   ri  r   ru  rh   )rA   r  r  r  r  plus_char_posrJ   r/   r/   r0   r    sJ   










r  )r   r  rQ  r   r_   rU   	in_pyfuncr  kw_onlyra   c           	      C   sX   g }|}| j tvr*|t| ||||||d | j dkr	 |S |   d}| j tvs	|S )N)rF  r  ra   rL   r   )rD   c_arg_list_terminatorsrM   p_c_arg_declrH   )	rA   r2   r  r  r  r  ra   rb   is_self_argr/   r/   r0   r    s   


r  c                 C   s   | j dkrt|  dS dS )NrQ  TF)rD   rR  r   r/   r/   r0   r  &  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 )NFr   )rJ   rX  rY  rZ  r  r  r  r>   rF  )r   r~   rC   r|  zExpected 'None'z*'%s None' only allowed in Python functionsr~   r   r_   r  r   )r   r   r!   z;default values cannot be specified in pxd files, use ? or *)r   r   not_noneor_noner  rZ  r  )rQ   r   r   r`  r   r   rD   rH   rG   r   rY  r8   r   rU  	modifiersrh   CArgDeclNode)rA   r2   r  r  rF  r  ra   rR   r  r  r  rZ  r   r   ry  r/   r/   r0   r  /  sZ   








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   )rQ   rh   r   AnnotationNode)rA   rR   rj   r/   r/   r0   rY  f  s   rY  c                 C   r  )NrC   r#   TFr  r   r/   r/   r0   p_apis  r  r  c                 C   s  t | |j|_|jpt| |_|jr|jdvrt|d|j  |jdkr/| jdkr/t| ||S | jdkr>|   t| ||S t| rRd|_	|j
rMt|d t| |S | jdkrd|j
r_t|d t| |S | jd	kr|jd
vrst|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  Tz$cdef blocks cannot be declared cpdefr_   r  r  z*Extension type definition not allowed herez(Extension types cannot be declared cpdefrC   r  z/C struct/union/enum definition not allowed herer~  z'C struct/union cannot be declared cpdeffused)p_visibilityr9   r#   r  r   rD   p_cdef_extern_blockrH   r  r"   r<   p_cdef_blockr8   p_c_class_definitionrG   p_cpp_class_definitionstruct_enum_unionp_struct_enump_fused_definitionr  rA   rR   r2   r/   r/   r0   r%  |  sJ   














r%  c                 C   s   t | |ddS )NT)r:   )r  r9  r/   r/   r0   r    s   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   rl  r    Tr  )r:   r9   r=   )include_fileverbatim_includer"  r=   )r<   r   rg   rD   rH   r  rG   r=   r  r"   r8  r   CDefExternNode)rA   rR   r2   r  r  r"  r/   r/   r0   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 )NFr  rC   r|  Tr  zUnnamed scoped enum not allowedr   r   r  r   r   )rJ   rX  rY  rZ  r  r  r_   r%   r5  r  zDEmpty enum definition not allowed outside a 'cdef extern from' blockr  )rJ   r  scopedrM  underlying_typer;   r9   create_wrapperr#   in_pxdr<  )rH   rE   r  rD   rG   r  r=   r   r   rg   r   r`  p_c_enum_liner  r:  r  r9   r*  r;   r<   r#   r8   )	rA   rR   r2   r  rJ   r  r  rM  r<  r/   r/   r0   p_c_enum_definition  sd   &







r  rM  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 )Nro  rL   rb  zSyntax error in enum item list)rD   p_c_enum_itemrH   rs  )rA   r2   rM  r/   r/   r0   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  )rJ   r  r  )
rQ   rK   r  r=   rD   rH   rh   rM   r   CEnumDefItemNode)rA   r2   rM  rR   rJ   r  r  r/   r/   r0   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  TrC   r|  r  r_   ro  rp  rq  r%   )r9   r  r  zOEmpty struct or union definition not allowed outside a 'cdef extern from' blockz*Syntax error in struct or union definitionr  )	rJ   r  ry  
attributesr;   r9   r#   r  r  )rG   rH   rD   r  rK   r  r=   rs  rg   r  r'   r9   rM   r  rQ   r  r   r   r)  r;   r#   r8   )	rA   rR   r2   r  ry  rJ   r  r  r  r/   r/   r0   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_   r  ro  zNeed at least one type)rJ   types)r8   r   rH   rK   rg   rs  r  rD   rM   r   r  r   FusedTypeNode)rA   rR   r2   rJ   r  r/   r/   r0   r  Q  s$   





	
r  c                 C   s"   | j dkrt| ||S t| ||S )Nr~  )rG   r  r  r  r/   r/   r0   r  u  s   
r  c                 C   sP   |}| j dkr&| jdv r&| j}|dkr"||kr"| jd||f dd |   |S )NrC   )r  r  readonlyr)   z,Conflicting visibility options '%s' and '%s'Frv   )rD   rG   r   rH   )rA   prev_visibilityr9   r/   r/   r0   r  }  s   r  c                 C   s4   | j dkr| jdv r| j}|   |gt|  S g S )NrC   )r!   )rD   rG   rH   p_c_modifiers)rA   modifierr/   r/   r0   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)r  r  TrG  )r  )r  r  rF  rC   rT  	cpp_classF->z~Return type annotation is not allowed in cdef/cpdef signatures. Please define it before the function name, as in C signatures.rv   r_   )r  r  r  r  r  z&C function definition not allowed herer<  r   )	r9   r   r   r"  r<  r  r#   r<   is_const_methodrL   r%   r   z&Syntax error in C variable declarationrq  )r  r  )r9   r   declaratorsr  r<  r#   r  r<   )r8   r  r   r>   r   r<   rD   rG   rH   r   rh   r8  r'   r   r&  r9   r#   r  rM   
start_liners  r:  r'  )rA   rR   r2   r  r  r   r   r  r<  suiter   r  doc_liner/   r/   r0   r    s|   



&





	r  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 )NT)r;   r9   r  rC   r  r  )rk  rF  z"Syntax error in ctypedef statementrq  r  )r   r   r9   r#   r  )rQ   rH   r  r9   r  r#   rD   r  rG   r  r  r  r   r   rs  r   CTypeDefNoder8   )rA   r2   rR   r9   r#   r   r   r/   r/   r0   r!    s,   
r!  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)rD   rQ   rH   r}   rM   r   DecoratorNoders  )rA   r   rR   r  r/   r/   r0   r$    s   


r$  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.
    rC   zTCannot use cdef modifier '%s' in Python function signature. Use a decorator instead.Frv   )rD   r   r   rK   )rA   rJ   r/   r/   r0   _reject_cdef_modifier_in_py  s   r  r   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.rC   r   )r`   r  r<  r   )	rJ   rb   rc   rd   r<  r"  r   r   return_type_annotation)rR   rQ   enter_asyncrH   r  rK   rg   rD   rG   rf   rY  r8  r'   
exit_asyncr   DefNode)rA   r   r   rR   rJ   rb   rc   rd   r  r<  r"  r/   r/   r0   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 )NT)r  r  ra   rU   r   zTGot zero positional-only arguments despite presence of positional-only specifier '/'r   rL   z-Syntax error in Python function argument listr   rC   )ra   )r  r  r  ra   r  )r  rD   r  r   rH   pos_onlyr2  p_py_arg_decl)rA   r`   ra   rb   rc   rd   r   r/   r/   r0   rf   *  sF   




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





rf   c                 C   sB   |   }t| }d }|r| jdkr|   t| }tj|||dS )Nr_   )rJ   rZ  )rQ   rK   rD   rH   rY  r   PyArgDeclNode)rA   ra   rR   rJ   rZ  r/   r/   r0   r  P  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$  r  r   r  )rJ   basesr  r<  r"  r   force_py3_semantics)rQ   rH   r   rK   r  r  rD   r#  r;  r   r&  r8  r'   r   PyClassDefNoderE   r  )
rA   r   rR   
class_namer7  r5  r  r  r<  r"  r/   r/   r0   r+  [  s&   

r+  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 classrC   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_   r  r  r  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')r9   r;   r#   r  r  r  r  objstruct_nametypeobj_name
check_sizer  r<  r"  )rH   rK   rD   rM   r9   r   rG   r#  r;  r   r&  r#   rQ   p_c_class_optionsr8   r8  r'   rs  r   r(  r;   r  )rA   rR   r2   rX  r  r  r  r  r  r  r  r  r  
body_levelr<  r"  r/   r/   r0   r  s  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   rC   objectr  r  )ignorewarnr   z/Expected one of ignore, warn or error, found %rrL   rD  z)Expected 'object', 'type' or 'check_size')rg   rD   rG   rH   rK   r   )rA   r  r  r  r/   r/   r0   r    s0   








r  c                 C   sB   |   }|   t| }t| tdddd\}}tj||||dS )Nr  r   Tr6  )rJ   r<  r"  )rQ   rH   rK   r8  r'   r   PropertyNode)rA   rR   rJ   r<  r"  r/   r/   r0   r,    s   
r,  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.
    r]  zSyntax error in stringTrq  r   N)rD   rQ   r  rs  r   r   )rA   rR   string_noder/   r/   r0   r-    s   
r-  c                 C   sL   | j dkr$|  }t| \}}}| jddd |dv r|S t|d |S d S )Nr]  zSyntax error in doc stringTrq  r  2Python 3 requires docstrings to be unicode strings)rD   rQ   rs  rs  r   )rA   rR   ry  bytes_resultunicode_resultr/   r/   r0   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 |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   rj   is_string_literalr  rR   r  r   rv  r   r  )r   doc_noder  r<  r/   r/   r0   r;     s2   
r;  c                 C   s@   t | ||ddd}| jdkr| dt| jt| jf  |S )Nr   Tr  r&   !Syntax error in statement [%s,%s])r  rD   r   r  rG   )rA   r8   r2   r"  r/   r/   r0   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 )Ncommentliner   T)ignore_unknownr   Frv   zDuplicate directive found: %sz@Conflicting settings found for top-level directive %s: %r and %rr  r  legacy_implicit_noexcept)rD   rQ   !_match_compiler_directive_commentrG   groupr  r
   parse_directive_list
ValueErrorr   rb   rH   directive_typesr#  r%  r   rE   set_language_levelr
  r,   )rA   r   rR   mdirectives_stringnew_directiveserJ   r/   r/   r0   p_compiler_directive_comments-  sF   



"r  c           	      C   s   |   }t| }d| _| jjd u r| jd |rdnd}t| }t| ||ddd}| jdkr?| 	d	t
| jt
| jf  t|||||d
S )NF3r  r  r   Tr  r&   r  )r<  r"  full_module_namedirective_comments)rQ   r  r  rE   r  r  r:  r  rD   r   r  rG   r   )	rA   r   r  r2   rR   r  r8   r<  r"  r/   r/   r0   p_moduleU  s    
r  c                 C   s>   t | }| jdkr| d | d d}||fS d}||fS )Nr  r   FT)rK   rD   rg   )rA   rJ   requiredr/   r/   r0   p_template_definitionj  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   rL   rD  c                 S   s   g | ]\}}|qS r/   r/   )r)  rJ   r  r/   r/   r0   r*        z*p_cpp_class_definition.<locals>.<listcomp>r   r=  r   z&Name options not allowed for C++ classr_   r%   r  )r9   r8   r"   r  ro  rp  z$Syntax error in C++ class definitionr  )rJ   r  base_classesr9   r  r  r>   )rH   rK   r  r=   rD   r   r  rM   rg   r   rQ   r  r  r:  r'   r9   r"   r>   p_cpp_class_attributers  r  r   CppClassNoder8   )rA   rR   r2   r  r  r>   template_namesr  r"   r  r  r/   r/   r0   r  v  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r?| jtv r?| jdkr9t| ||S t| ||S t| ||}|d urit	j
t	jt	jf}|jr\|t	jt	jf7 }t||sf| d ||_|S )Nr   r  r  rC   r~  r   )rQ   rD   r$  rG   r  r!  r  r  r  r   r&  r'  r(  r?   r)  r*  r   r   r   )rA   r2   rR   r   r   r0  r/   r/   r0   r    s*   






r  c                 C   s  | j dkr
| jdksJ |  }t| E}|   t| }d }| j dkr'|g}| j dkrB|   | j dkr6n|t|  | j dks,|d urMtj	||d}| 
d W d    n1 s\w   Y  |red S |   |   g }| j dkr|t| | | j dkst|   tj|||dS )NrC   r[  rL   r_   r$  r  )subjectcases)rD   rG   rQ   r   rH   r}   rM   rh   r   r&  rg   rs  r  p_case_blockr  r   	MatchNode)rA   r2   rR   r  r!  subjectsr"  r/   r/   r0   r/    s8   






r/  c                 C   sp   | j dkr
| jdks| d |   |  }t| }d }| j dkr*|   t| }t| |}tj	||||dS )NrC   casero   )r  r"  guard)
rD   rG   r  rH   rQ   
p_patternsrh   r  r   MatchCaseNode)rA   r2   rR   r  r'  r"  r/   r/   r0   r#    s   


r#  c                 C   s   g }d}|   }	 t| }t| }W d    n1 sw   Y  |r7|r&n*|d }| j|jd |jd d || | jdkrNd}|   | jdv rMnnnq	|rYtj	||dS |d S )	NFTr   r   r  rL   )r_   ro   patterns)
rQ   r   p_maybe_star_patternr   rb   rM   rD   rH   r   MatchSequencePatternNode)rA   r+  seqrR   r  r  r  r/   r/   r0   r(    s0   




r(  c                 C   sV   | j dkr%|   d }| jdkrt| }n|   tj|  |dd}|S t| }|S )Nr   r  T)r  is_star)rD   rH   rG   p_pattern_capture_targetr   MatchAndAssignPatternNoderQ   	p_pattern)rA   r  r  r/   r/   r0   r,  #  s   



r,  c                 C   s8  g }|   }	 |t|  | jdkrn|   qt|dkr'tj||d}n|d }| jdkr| jdkr|   t	| }|j
t|  W d    n1 sPw   Y  |rq| jdkrq|   tj|d jd |d jd d	S |rt	|  t| }tj|jd
d	W  d    S 1 sw   Y  | |d  |S )NTr   r   )alternativesr   rC   r  r  whatzInvalid pattern target)rQ   rM   p_closed_patternrD   rH   r  r   OrPatternNoderG   r   
as_targetsr0  r   	ErrorNoderb   rh   rR   r   )rA   r+  rR   r  r  rj   r/   r/   r0   r2  7  s:   

"
 r2  c                 C   s  | j dkr| jdkr|  }|   t|S | j dkr t| S | j dkr)t| S | j dkrXt| }t	| }|sB|W  d   S W d   t| S 1 sOw   Y  t| S t| }t
| }|sl|W  d   S W d   n1 svw   Y  t| }t| }|s|W  d   S W d   n1 sw   Y  t| }t| }|s|W  d   S W d   t| S 1 sw   Y  t| S )a	  
    The PEG parser specifies it as
    | literal_pattern
    | capture_pattern
    | wildcard_pattern
    | value_pattern
    | group_pattern
    | sequence_pattern
    | mapping_pattern
    | class_pattern

    For the sake avoiding too much backtracking, we know:
    * starts with "{" is a sequence_pattern
    * starts with "[" is a mapping_pattern
    * starts with "(" is a group_pattern or sequence_pattern
    * wildcard pattern is just identifier=='_'
    The rest are then tried in order with backtracking
    rC   r  rX  r   r   N)rD   rG   rQ   rH   r   r1  p_mapping_patternp_sequence_patternr   p_group_patternp_literal_patternp_capture_patternp_value_patternp_class_pattern)rA   rR   r  r   r/   r/   r0   r6  [  sV   









r6  c           
      C   s  d}d}| j dkr| j }|  }|   d}| j }|  }d }|dkr(t| }n|dkr:| j}|   tj||d}|d urI|dkrItj||d}|d ur| j d	v r| j }|   | j d
krd| d n|  }| jd d }|   tj	|||tj
|  |dd}|d u r|d
kr| jd d }|   tj
||| d}|dkrtj||d}|d urtj||dS |r| d |dkrt| }tj||dS |dkrt| }	|	rtj||	ddS | d d S )NFr  r   TrZ  r[  r  r   r   r\  zExpected imaginary numberr  )r   r   zExpected a numberr]  rC   )r  is_is_checkzFailed to match literal)rD   rQ   rH   rd  rG   r   re  UnaryMinusNoder   rV   rf  r   MatchValuePatternNoderg  rh  )
rA   next_must_be_a_numbersignsign_posrD   rR   resr  add_posr   r/   r/   r0   r=    sd   



r=  c                 C   s   t j|  t| dS )N)r  )r   r1  rQ   r0  r   r/   r/   r0   r>    s   r>  c                 C   s   | j dkr
| d |  }t| | j}|   | j dkr"| d | j dkr@|  }|   t| }tj|||d}| j dks'| j dv rM| d| j   t	j
||dS )NrC   Expected identifierr   r  )r   r  zUnexpected symbol '%s'r  )rD   r   rQ   ri  rG   rH   rK   r   r  r   rC  )rA   rR   rG  attr_posattrr/   r/   r0   r?    s    






r?  c                 C   s    |  d t| }|  d |S )Nr   r   )rg   r2  )rA   r  r/   r/   r0   r<    s   

r<  c                 C   s   | j }|  }|dv rP|dkrdnd}|   g }| j |krD|t|  | j dkr/|   n|dkr>t|dkr>| d n| j |ks| | tj	||d	S | d
 d S )Nr  r   rD  r   rL   r   r   z3tuple-like pattern of length 1 must finish with ','r*  zExpected '[' or '(')
rD   rQ   rH   rM   r,  r  r   rg   r   r-  )rA   openerrR   closerr+  r/   r/   r0   r;    s"   





r;  c           	      C   s<  |   }| d | jdkr|   t|S d }g }d }| jdkr{|r*|s*|   }| jdkr8|   t| }n4t| }t| }|j	}W d    n1 sNw   Y  |r\t
| }|j	}| d t| }|||f | jdkrrn	|   | jdks"| d |d urtj|ddS tj|dd	 |D d
d	 |D |dS )NrX  r  r  r_   rL   z7** pattern must be the final part of a mapping pattern.r4  c                 S      g | ]}|d  qS r   r/   r)  kvr/   r/   r0   r*  3  r  z%p_mapping_pattern.<locals>.<listcomp>c                 S   rN  r   r/   rP  r/   r/   r0   r*  4  r  )keysvalue_patternsdouble_star_capture_target)rQ   rg   rD   rH   r   MatchMappingPatternNoder0  r   r=  r  r?  r2  rM   r   r9  )	rA   rR   rU  items_patternsstar_star_arg_posr  r  r,  r  r/   r/   r0   r:  
  sP   










r:  c           
      C   s  |   }t| | j}|   | jdkr,|   }|   t| }tj|||d}| jdks|}| d | jdkrC|   t	j
||dS g }g }d }| jdkrt| }	|t|  W d    n1 sdw   Y  |	sr|rq|   }nt| }	|t|  W d    n1 sw   Y  | jdkrn	|   | jdksN| d |d urtj|ddS t	j
|||d	d
 |D dd
 |D dS )Nr   r  r   r   )class_rL   z+Positional patterns follow keyword patternsr4  c                 S   rN  rO  r/   rP  r/   r/   r0   r*  f  r  z#p_class_pattern.<locals>.<listcomp>c                 S   rN  rR  r/   rP  r/   r/   r0   r*  g  r  )rY  positional_patternskeyword_pattern_nameskeyword_pattern_patterns)rQ   ri  rG   rH   rD   rK   r   r  rg   r   ClassPatternNoder   rM   r2  p_keyword_patternr   r9  )
rA   rR   rG  rJ  rK  rY  rZ  keyword_patternskeyword_patterns_errorr  r/   r/   r0   r@  9  sX   









r@  c                 C   sB   | j dkr
| d t| | j}|   | d t| }||fS )NrC   rI  r  )rD   r   ri  rG   rH   rg   r2  )rA   r   r  r/   r/   r0   r^  k  s   


r^  c                 C   sZ   | j dkr
| d | jdkr| d t| | j}|   | j dv r+| d| j   |S )NrC   rI  r  z$Pattern capture target cannot be '_')r   r   r  zIllegal next symbol '%s')rD   r   rG   ri  rH   )rA   r  r/   r/   r0   r0  v  s   




r0  r8   c           	      C   s~  d| }|  | |r|  | d |s|  d d S t|tu rM|  d|d  d|d  d |d	d  D ]
}t| ||d  q8|  | d
 d S t|tjrz|j}W n tye   |j	j
}Y nw |  | d|j d t|j D ]\}}|dkr|dkrt| ||d | qyd S t|tu r|  d |D ]
}t| ||d  q|  | d d S |  | | d d S )Nz  z: zNone
r   r   z @ r   r  r    z)
tagrR   z[
z]
)writer  r/  print_parse_treer   r   Nodera  r  r  r5   rR   r  r+   rM  r%  )	rn  r   r8   r,  indr:  ra  rJ   r  r/   r/   r0   rc    s:   
 

rc  r/   )r@   )T)NN)rl  r*   )FrO  )TF)FN)FFFT)NF)r   T)r  r  r  r/  r2  ior   r   unicodedatar   r   	functoolsr   r   Scanningr   r   r   r  r   r   r   r   r   r   r   r   Errorsr   r   r   r   r	   r
   r   	frozensetr   r'   cfuncrK   rO   rT   r^   rk   rh   rm   r}   r   rt   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  rq  r#  r;  r	  r  rE  r%  rL  rN  rR  rG  ccallrS  r  rg  rh  rd  ri  r  rs  r  r  r  r  r  r  r  rs  r  r  r  r  r`  r#  r  r!  ra  rb  rF  rH  r  r   r  r_  r  rD  rR  rT  ra  rg  rk  rm  ru  rx  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  r4  r  r  r8  rE  r   rK  rJ  rH  rI  rR  rP  rQ  rh  r   r[  r_  r^  r\  r  ri  r  r]  r  r   r  r  r  r  r  r  r  r  r  r  r  rY  r  r%  r  r  r  r  r  r  r  r  r  r  r  r!  r$  r  r   rf   r  r+  r  r  r,  r-  r:  r;  r  compiler[  r  r  r  r  r  r  r/  r#  r(  r,  r2  r6  r=  r>  r?  r<  r;  r:  r@  r^  r0  r{  rc  r/   r/   r/   r0   <module>   sJ  		

2*	, 

%3Nl(0
n


3	 P ,,		(		    #$y$9 	 b*


%	R	 D
6)?-#D
& ,% 
L	
'?!#1B.1
 