3
h!                @   s	  d dl mZ d dlZejeeeeeeeeeeeeeeeeeeeeeeeejejeed d dlm	Z	 d dl
Z
d dlZd dlmZmZ d dlmZmZ ddlmZmZmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZmZmZm Z  ddl!m!Z! ddl"m#Z#m$Z$ ddlm%Z% ddlm&Z& ddlm'Z' ej(d  dkZ)ej*dkZ+dZ,G dd deZ-dddZ.dd Z/d d! Z0d"d# Z1d$d% Z2d&d' Z3d(d) Z4d*d+ Z5d,d-d.Z6d/d0 Z7d1d2 Z8d3d4 Z9d5d6 Z:d7d8 Z;d9d: Z<d;d< Z=d=d> Z>d?d@ Z?dAdB Z@ejeAeAdZBdMdN ZCdOdP ZDdQdR ZEdSdT ZFdUdV ZGdWdX ZHdYdZ ZId[d\ ZJd]d^ ZKd_d` ZLdadb ZMdcdd ZNdedf ZOdgdh ZPdidj ZQdkdl ZRddndoZSdpdq ZTdrds ZUdtdu ZVdvdw ZWdxdy ZXdzd{ ZYd|d} ZZd~d Z[dddZ\dd Z]dd Z^dd Z_dd Z`dd ZadddZbdd ZcdddZddd Zedd dD \ZfZgdd Zhdd Zidd Zjdd Zkdd Zldd Zmdd Zndd Zodd ZpdddZqdddZrdddZsdd Ztdd Zudd Zvdd ZwejeAeAdZxdd Zydd ZzddÄ Z{ddń Z|ddǄ Z}ddɄ Z~ddd˄Zdd̈́ Zddτ Zddф Zddӄ ZddՄ ZdddׄZddل Zddۄ Zdd݄ Zdd߄ ZejeAeAdŃZdd Zdd Zdd Zdd ZdddZdddZdd Zdd ZejeAeAdȃZdd Zdd ZdddZdd Zdd Zdd Zdd Zdʐd dZdd Zdd Zdd Zdːdd	Zd̐d
dZdd Zdd Zdd Zd͐ddZdΐddZe- fddZdϐddZdАddZdѐddZdd ZejeAeAd҃ZdӐd#d$ZdԐd%d&Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 ZejeAeAdՃZejed֐dאdؐdِdڐdېdܐdݐd=ZejeAeAdރZejeAeeB eAeB ZejeAeAd߃ZdFdG ZdHdI Ze- d d d d d d fdJdKZdLdM ZdNdO ZejeAeAdZdbdc Zddde Zdfdg ZÐdhdi ZejeAeAdZe- d d d d dfdldmZƐdndo ZǐddpdqZȐdrds Zɐdtdu Zʐdvdw Zːdxdy Z̐dzd{ Z͐d|d} Zΐd~d Zϐdd ZАdd Zѐdd ZҐdd ZӐdd ZԐdd ZՐdd Z֐dd Zאdd ZؐdddZِdddZڐdddZېdd Zܐdd Zݐdd Zސdd Zߐdd Zdd Zdd Zde-fddZejee
jdjZdd Ze-fddZdd Zdd Zdd ZdddZdd ZdS (      )absolute_importN)Nodes	ExprNodesEncodedStringbytes_literalStringEncodingFileSourceDescriptorlookup_unicodecharunicode_categoryFutureOptionserrorwarningBuiltin
ModuleNodeUtils_unicode_bytesresys_parse_escape_sequences_parse_escape_sequences_rawpartialreduce_IS_PY3_IS_2BYTE_UNICODE_CDEF_MODIFIERSCOMMON_BINOP_MISTAKES)StringIO)lookupcategory)r   r      )PyrexScannerr   tentatively_scan)r   )r   )r   )r   )r   r   r   r   )r   )r   r      )r   )r   )r      i  inlinenogilapic               @   sD   e Zd ZdZdZdZdZdZdZdZ	dZ
dZdZdd Zdd	 ZdS )
Ctxotherprivater   NFc             K   s   | j j| d S )N)__dict__update)selfkwds r0   i/var/www/html/CrowdFlow/Picklecon/ble_analysis_env/lib/python3.6/site-packages/Cython/Compiler/Parsing.py__init__7   s    zCtx.__init__c             K   s&   t  }|j}|j| j |j| |S )N)r)   r,   r-   )r.   r/   ctxdr0   r0   r1   __call__:   s
    
zCtx.__call__)__name__
__module____qualname__level
visibility	cdef_flagtypedef_flagr(   overridabler'   	namespace	templatesallow_struct_enum_decoratorr2   r5   r0   r0   r0   r1   r)   *   s   r)   Expected an identifierc             C   s2   | j dkr$| jj| j}| j  |S | j| d S )NIDENT)sycontextintern_ustringsystringnextr   )smessagenamer0   r0   r1   p_identB   s
    
rK   c             C   sH   g }x>| j dkrB|j| jj| j | j  | j dkr8P | j  qW |S )NrB   ,)rC   appendrD   rE   rF   rG   )rH   namesr0   r0   r1   p_ident_listJ   s    
rO   c             C   s   | j  }| j}| j  ||fS )N)positionrC   rG   )rH   posopr0   r0   r1   p_binop_operatorZ   s    rS   c             C   sd   || }xV| j |kr^t| \}}|| }tj||||}|dkr
tj| jjkrVd|_q
d |_q
W |S )N/T)	rC   rS   r   
binop_noder   divisionrD   future_directivesZtruedivision)rH   opsZ
p_sub_exprn1rR   rQ   n2r0   r0   r1   p_binop_expr`   s    
r[   c             C   sb   | j  }| j  | jdkr(g }d  }}nt| ddd\}}}| jd t| }tj|||||dS )N:F)
terminator	annotated)argsstar_argstarstar_argZresult_expr)rP   rG   rC   p_varargslistexpectp_testr   Z
LambdaNode)rH   rQ   r_   r`   ra   exprr0   r0   r1   	p_lambdefo   s    


rf   c             C   s    t | }| jdkr| jd |S )Nz:=zAinvalid syntax: assignment expression not allowed in this context)p_test_allow_walrus_afterrC   r   )rH   re   r0   r0   r1   rd      s    

rd   c             C   sh   | j dkrt| S | j }t| }| j dkr`| j  t| }| jd t| }tj||||dS |S d S )Nlambdaifelse)testZtrue_valZ	false_val)	rC   rf   rP   	p_or_testrG   rc   rd   r   ZCondExprNode)rH   rQ   re   rk   r*   r0   r0   r1   rg      s    


rg   c             C   sR   t | }| jdkrN| j }|js.| jddd | j  t| }tj|||dS |S )Nz:=z=Left-hand side of assignment expression must be an identifierF)fatal)lhsrhs)	rg   rC   rP   is_namer   rG   rd   r   ZAssignmentExpressionNode)rH   rn   rP   ro   r0   r0   r1   p_namedexpr_test   s    
rq   orand)z||z&&c             C   s   t | dtS )Nrr   )p_rassoc_binop_expr
p_and_test)rH   r0   r0   r1   rl      s    rl   c             C   s~   || }| j |krF| j }| j }| j  t| ||}tj||||}n4| j tkrzt| j  |krzt| j d| j |f dd |S )NzAFound the C operator '%s', did you mean the Python operator '%s'?r!   )r9   )rC   rP   rG   rt   r   rU   r   r   )rH   rR   Z	p_subexprrY   rQ   rZ   r0   r0   r1   rt      s    
rt   c             C   s   t | dtS )Nrs   )rt   
p_not_test)rH   r0   r0   r1   ru      s    ru   c             C   s8   | j dkr,| j }| j  tj|t| dS t| S d S )Nnot)operand)rC   rP   rG   r   ZNotNoderv   p_comparison)rH   rQ   r0   r0   r1   rv      s
    
rv   c             C   sT   t | }| jtkrP| j }t| }t | }tj||||d}| jtkrPt| |_|S )N)operatorZoperand1operand2)	p_starred_exprrC   comparison_opsrP   p_cmp_opr   ZPrimaryCmpNodep_cascaded_cmpcascade)rH   rY   rQ   rR   rZ   r0   r0   r1   ry      s    


ry   c             C   s   | j dkrt| S t| S d S )N*)rC   r|   rd   )rH   r0   r0   r1   p_test_or_starred_expr   s    
r   c             C   s   | j dkrt| S t| S d S )Nr   )rC   r|   rq   )rH   r0   r0   r1    p_namedexpr_test_or_starred_expr   s    
r   c             C   s@   | j  }| jdkr d}| j  nd}t| }|r<tj||}|S )Nr   TF)rP   rC   rG   
p_bit_exprr   ZStarredUnpackingNode)rH   rQ   Zstarredre   r0   r0   r1   r|      s    

r|   c             C   s@   | j  }t| }t| }tj|||d}| jtkr<t| |_|S )N)rz   r{   )	rP   r~   r|   r   ZCascadedCmpNoderC   r}   r   r   )rH   rQ   rR   rZ   resultr0   r0   r1   r      s    


r   c             C   sp   | j dkr"| j  | jd d}n>| j dkrR| j  | j dkrL| j  d}q`d}n| j }| j  |dkrld}|S )Nrw   inZnot_inisis_notz<>z!=)rC   rG   rc   )rH   rR   r0   r0   r1   r~     s    



r~   <>==>=<=<>!=r   r   rw   c             C   s   t | dtS )N|)r   )r[   
p_xor_expr)rH   r0   r0   r1   r      s    r   c             C   s   t | dtS )N^)r   )r[   
p_and_expr)rH   r0   r0   r1   r   %  s    r   c             C   s   t | dtS )N&)r   )r[   p_shift_expr)rH   r0   r0   r1   r   *  s    r   c             C   s   t | dtS )N<<>>)r   r   )r[   p_arith_expr)rH   r0   r0   r1   r   /  s    r   c             C   s   t | dtS )N+-)r   r   )r[   p_term)rH   r0   r0   r1   r   4  s    r   c             C   s   t | dtS )Nr   @rT   %//)r   r   rT   r   r   )r[   p_factor)rH   r0   r0   r1   r   9  s    r   c             C   s   t | S )N)	_p_factor)rH   r0   r0   r1   r   >  s    r   c             C   s   | j }|d	kr6| j }| j }| j  tj||t| S | js|dkrj| j }| j  t| }tj||dS |dkrzt| S |dkr| j	dkrt
| S t| S )
Nr   r   ~r   )rx   r   rB   sizeof)r   r   r   )rC   rP   rG   r   Z	unop_noder   in_python_fileZAmpersandNode
p_typecastrF   p_sizeofp_power)rH   rC   rR   rQ   argr0   r0   r1   r   B  s"    r   c             C   s   | j  }| j  t| }t|tj}t|tjtjtjf}|p@| rX|j	d krX| j
d t| dd}| jdkr|| j  d}nd}| jd t| }|rtj|||dS tj|||||dS )	NzUnknown typer!   )empty?r   r   )base_type_noderx   )	base_type
declaratorrx   	typecheck)rP   rG   p_c_base_type
isinstancer   MemoryViewSliceTypeNodeTemplatedTypeNodeCConstOrVolatileTypeNodeCTupleBaseTypeNoderJ   r   p_c_declaratorrC   rc   r   r   ZCythonArrayNodeZTypecastNode)rH   rQ   r   Zis_memsliceZis_other_unnamed_typer   r   rx   r0   r0   r1   r   U  s0    



r   c             C   sl   | j  }| j  | jd t| r:t| }tj||d}n$t| }t| dd}tj	|||d}| jd |S )N()rx   r!   )r   )r   r   ))
rP   rG   rc   looking_at_exprrd   r   ZSizeofVarNoder   r   ZSizeofTypeNode)rH   rQ   rx   noder   r   r0   r0   r1   r   s  s    


r   c             C   s   | j  }| j  d}| jdkr*d}| j  | jdkrT| jtkrT|rJt| nt| }n|rh| jd|dd d }|r~tj||dS tj	||dS d S )NFfromTr   z''yield from' requires a source argument)rQ   rm   )r   )
rP   rG   rC   statement_terminatorsrd   
p_testlistr   r   ZYieldFromExprNodeYieldExprNode)rH   rQ   Zis_yield_fromr   r0   r0   r1   p_yield_expression  s    

r   c             C   s   t | }tj|j|dS )N)re   )r   r   ExprStatNoderQ   )rH   Z
yield_exprr0   r0   r1   p_yield_statement  s    r   c             C   s   | j dkr4d|jkr| jd |j| _t| |ddS |rD| jd n>| j dkrZt| ddS | j d	krx| j  t| ddS | jd
 d S )Ndefpxdzdef statement not allowed hereT)is_async_defz7Decorators can only be followed by functions or classesfor)is_asyncwithz2expected one of 'def', 'for', 'with' after 'async')rC   r9   r   p_def_statementp_for_statementrG   p_with_items)rH   r3   
decoratorsr0   r0   r1   p_async_statement  s    




r   c             C   s   | j dkr"| j d dkr"t| S d }| jdkr@| j }| j  t| }x| jd
kr`t| |}qJW |rttj	||d}| jd	kr| j }| j  t
| }tj|d	||}|S )Nnewr   rB   awaitr   [.)r   z**)r   r   r   )rF   peek
p_new_exprrC   rP   rG   p_atom	p_trailerr   ZAwaitExprNoder   rU   )rH   Z	await_posrY   rQ   rZ   r0   r0   r1   r     s"    

r   c             C   s,   | j  }| j  t| }t| tj||dS )N)cppclass)rP   rG   r   p_callr   ZNewExprNode)rH   rQ   r   r0   r0   r1   r     s    r   c             C   sT   | j  }| jdkrt| |S | jdkr0t| |S | j  t| }tj|||dS d S )Nr   r   )obj	attribute)rP   rC   r   p_indexrG   rK   r   AttributeNode)rH   node1rQ   rJ   r0   r0   r1   r     s    



r   Tc       
      C   s  | j  }| j  g }g }d}d}x2| jdkrT| jdkrl|rP| jd| j  d | j  |jt|  d}n| jdkr| j  |jt|  d}nt| }| jdkr| j  |js| jd	|jd | j	j
|j}tj|j|d
}	t| }|j|	|f nD|r| jd|jd |r,| r,|d j| n|j|g d}| jdkrJP | j  q$W | jdkr| r| rt|dkrt|d dkrt| |d d gg}| jd |pg g|fS )NFr   r   z%Non-keyword arg following keyword arg)rQ   Tz**=z!Expected an identifier before '=')valuer!   rL   r   asyncr   )r   r   )rP   rG   rC   r   rM   rd   rq   rp   rQ   rD   rE   rJ   r   IdentifierStringNodelenp_genexprc   )
rH   allow_genexprQ   positional_argskeyword_argsZstarstar_seenZlast_was_tuple_unpackr   encoded_namekeywordr0   r0   r1   p_call_parse_args  sV    



 
r   c                s  d } fdd|D }t ttj d|}|rg }g }xz|D ]r}t|trn|\}	}
|jtj|	j|	|
d q>|j	r|j
|j q>|r|jtj|d j|dd g }|j| q>W |r|jtj|d j|dd |rt|dkr|d j	r|d }ntj |d	}||fS )
Nc                s2   g | ]*}t |tr tj |d ntj |dqS ))r_   )r   )r   listr   	TupleNodeZAsTupleNode).0r   )rQ   r0   r1   
<listcomp>#  s   z,p_call_build_packed_args.<locals>.<listcomp>r   )rQ   keyr   r   T)key_value_pairsreject_duplicatesr!   )r   )r   r   r   rU   r   tuplerM   DictItemNoderQ   is_dict_literalextendr   DictNoder   MergedDictNode)rQ   r   r   keyword_dictZ	subtuples	arg_tuplekwargs
dict_itemsitemr   r   r0   )rQ   r1   p_call_build_packed_args  s4    



r   c             C   sn   | j  }t| \}}| rHt|dkrHt|d trHtj|||d dS t|||\}}tj||||dS d S )Nr!   r   )functionr_   )r   r   r   )	rP   r   r   r   r   r   ZSimpleCallNoder   ZGeneralCallNode)rH   r   rQ   r   r   r   r   r0   r0   r1   r   I  s     r   c       
      C   s   | j  }| j  t| \}}|rPt|d dkrP|d \}}tj||||d}n6t||}|rh|d }	ntj||d}	tj|||	d}| j	d |S )Nr   r$   )basestartstop)r_   )r   index])
rP   rG   p_subscript_listr   r   SliceIndexNodemake_slice_nodesr   	IndexNoderc   )
rH   r   rQ   
subscriptsis_single_valuer   r   r   indexesr   r0   r0   r1   r   Z  s    



r   c             C   sL   d}t | g}x4| jdkrBd}| j  | jdkr2P |jt |  qW ||fS )NTrL   Fr   )p_subscriptrC   rG   rM   )rH   r  itemsr0   r0   r1   r   n  s    

r   c             C   sb   | j  }t| d}| jdkr"|gS | j  t| d}| jdkrF||gS | j  t| d}|||gS )Nr\   rL   r   )r\   )r\   rL   r   )r\   rL   r   )rP   p_slice_elementrC   rG   )rH   rQ   r   r   stepr0   r0   r1   r  {  s    




r  c             C   s   | j |krt| S d S d S )N)rC   rd   )rH   Z
follow_setr0   r0   r1   r	    s    
r	  c             C   s   | j d d S )Nz...)rc   )rH   r0   r0   r1   expect_ellipsis  s    r  c             C   sF   g }x<|D ]4}t |dkr*|j|d  q
|jt| f|  q
W |S )Nr!   r   )r   rM   make_slice_node)rQ   r  r   	subscriptr0   r0   r1   r    s    
r  c             C   s<   |st j| }|st j| }|s*t j| }t j| |||dS )N)r   r   r
  )r   NoneNodeZ	SliceNode)rQ   r   r   r
  r0   r0   r1   r    s    


r  c       	      C   sP  | j  }| j}|dkrb| j  | jdkr8tj|g d}n| jdkrLt| }nt| }| jd |S |dkrrt| S |dkrt	| S |dkrt
| S |dkrt|  tj|S |d	krt| S |d
kr| j}| j  tj||dS |dkr| jd d  }| j  tj||dS |dkrt| \}}}|dkr>tj||dS |dkrXtj|||dS |dkrptj||dS |dkrtj||dS |dkrtj|||dS | jd|  n|dkrB| j}|dkrtj|}n^|dkrtj|dd}nD|dkrtj|dd}n*|dkr,| j r,tj|}n
t| |}| j  |S | jd d S )!Nr   r   )r_   yieldr   {`z...INTFLOAT)r   ZIMAGr!   BEGIN_STRINGcu)r   bytes_valuebf)values )r   unicode_valuezinvalid string kind '%s'rB   NoneTrueTFalseFZNULLz!Expected an identifier or literalr   )rP   rC   rG   r   r   r   p_testlist_comprc   p_list_makerp_dict_or_set_makerp_backquote_exprr  EllipsisNodep_int_literalrF   	FloatNodeImagNodep_cat_string_literalCharNodeUnicodeNode	BytesNodeJoinedStrNode
StringNoder   r  BoolNoder   ZNullNodep_name)	rH   rQ   rC   r   r   kindr  r  rJ   r0   r0   r1   r     sr    
















r   c             C   s   | j  }| j}| j  d}d}x:|d dkrX|d dkrB|d7 }n|d7 }|d d }q W d }|rhd}n|r|dks| jjd	krd}| jr|rt|d
 d}tj|||||dS )Nr  r!   ZUuLlZLlLUTZLLr%   z4illegal integer literal syntax in Python source fileF)is_c_literalr   unsignedlongnessr   r   r   )	rP   rF   rG   rD   language_levelr   r   r   IntNode)rH   rQ   r   r4  r5  r3  r0   r0   r1   r%    s2    

r%  c             C   sJ   | j  }| j r<|| jkr<| jj|}t||}|d k	r<|S tj||dS )N)rJ   )rP   compile_time_exprcompile_time_envZlookup_herewrap_compile_time_constantr   NameNode)rH   rJ   rQ   r   r   r0   r0   r1   r/    s    
r/  c                s  t |}|d krtj S |tkr,tj S t|trDtj |dS t|tr^tj	 ||dS t|t
rxtj ||dS t|trtj t |jtd|jd}|jrtj dtj t |j|jd||d}|S t|t rtj t|dS t|trt|d}tj ||dS t|trR fdd|D }d |krLtj |d	S d S n*t r|t|tr|tj	 |jd
|dS t d||jjf  d S )N)r   )r   constant_resultg        r   )r<  asciic                s   g | ]}t  |qS r0   )r:  )r   r   )rQ   r0   r1   r   3  s   z.wrap_compile_time_constant.<locals>.<listcomp>)r_   r1  z4Invalid type for compile-time constant: %r (type %s))reprr   r  Ellipsisr$  r   boolr.  intr7  floatr&  complexr'  imagrealrU   r   r*  r   r   r   r+  r   r   r   longrstripr   	__class__r6   )rQ   r   repr   Zbvaluer_   r0   )rQ   r1   r:    sD    








r:  c             C   s  | j  }t| \}}}|dks(| jdkr2|||fS |g|g|g  }}}d  }}x| jdkr| j  }t| \}}	}
|dkrt|d qRn:||kr||hddhddhfkrd}nt|d||f  qR|j|	 |j|
 |j| qRW |dks|dkrd |krttj|| j}|dkr6t	dj
d	d
 |D }|dkrg }xFt||D ]8\}}t|trn||7 }n|jtj|t	|d qPW |||fS )Nr  r  zCCannot concatenate char literal with another string or char literalr  r  r  zFCannot mix string literals of different types, expected %s'', got %s''r  c             S   s   g | ]}|d k	r|qS )Nr0   )r   r  r0   r0   r1   r   a  s    z(p_cat_string_literal.<locals>.<listcomp>)r   )r  r  r  )r  r  )rP   p_string_literalrC   r   rM   r   r   Z
join_bytessource_encodingr   joinzipr   r   r   r*  )rH   rQ   r0  r  r  ZbstringsZustringsZ	positionsZ	next_kindZnext_bytes_valueZnext_unicode_valuer  r0   r0   r1   r(  A  s@    






r(  r  c             C   s`   | j dkrd S | j }t| |\}}}|dkrF|dkrB| jd| |S |dkrR|S | jd d S )Nr  r  r  zf-string not allowed herer  z#internal parser configuration error)rC   rP   rJ  r   )rH   Zrequired_typerQ   r0  r  r  r0   r0   r1   p_opt_string_literalm  s    
rN  c             C   s   x| D ]}|dkrdS qW dS )N   TFr0   )stringr  r0   r0   r1   check_for_non_ascii_characters|  s    
rQ  c             C   sX  | j  }| jjdk}d}|d |d |d t| j f}| jjdj }t|dkrtt|t|krrt|d d|krd	|krt|d
 d|krd|krt|d d	|krd|krt|d d|k}d|krt|dkrt|d d}n6d|krd}d}n$d|krd}nd	|krd	}nd}|dkrX|d krXt	j
| jjkrXtj| j}	d	}nP|d k	rp|dkrp|}|d!krtj }	n$|dkrtj| j}	ntj| j}	x| j  | j}
| j}|
dkr|	j| |r| rt|rd}n|
dkrX|rH|s |d	ks |d dkrH|	j| |rV| rVt|rVd}nt||	||  nR|
dkrn|	jd n<|
dkr|P n.|
dkr| jd|d n| jd|
| jf  qW |dkrd }|	j }t|dkr(t|d|  nD|	j \}}|r(|r(t	j
| jjkr(|dkr$| jd|d d }|dkrFt| ||d|kd }| j  |||fS )"Nr%   Fr   r!   r$   z"'z!Duplicate string prefix characterr  r  z*String prefixes b and u cannot be combinedr  z*String prefixes b and f cannot be combinedz*String prefixes u and f cannot be combinedrr  z+Invalid string prefix for character literalTr  ZubZCHARSESCAPEZUuNEWLINE
Z
END_STRINGEOFzUnclosed string literal)rQ   z(Unexpected token %r:%r in string literalzinvalid character literal: %rz0bytes can only contain ASCII literal characters.)is_raw)r  r  )rP   rD   r6  r   rF   rG  lowersetr   r   unicode_literalsrW   r   ZStrLiteralBuilderrK  UnicodeLiteralBuilderZBytesLiteralBuilderrG   rC   rM   rQ  _append_escape_sequenceZgetcharZ
getstrings
p_f_string)rH   Zkind_overriderQ   Zis_python3_sourceZ has_non_ascii_literal_charactersZstring_start_posZkind_stringrW  r0  charsrC   Zsystrr  r  r0   r0   r1   rJ    s    
 






$





$






rJ  c             C   s$  |d }|dkr,|j t|dd  d n|dkrB|j| n|dkr^|jtj| n|dkrjn|dkrt|dkr|j t|d	d  d
 n|jd| dd nr|dko| dkrd}|dkrd }yt|dd  }t|}W n t	k
r(   |jdt
|dd! jd dd Y n tk
r   |d k	rtrt|d	krt|d dkrt|d dkrdt|d d  dt|d d  ? }n Y nX nPt|d"krt|d	d  d
}|dkr|jd|  d#}n|jd| dd |dkr |j|| n
|j| d S )$Nr!   01234567   z'"\ZabfnrtvrU  x   r$      zInvalid hex escape '%s'F)rm   ZNUur  r  r  Nr%   z!Unknown Unicode character name %sr   Csi   i   
   i      i zInvalid unicode escape '%s')r  r  r  r   r   r   )rg  rf  r   )Zappend_charvalrA  rM   r   Zchar_from_escape_sequencer   r   r	   ordKeyErrorr>  lstrip	TypeErrorr   r
   Zappend_uescape)r0  builderZescape_sequencerH   r  ZchrvalZucharr0   r0   r1   r\    sJ    
"$*


r\  c             C   s.   g | ]&}t jd |rdnd d jdjqS )s   (\\(?:s   \\?s]   [\\abfnrtv"\'{]|[0-7]{2,3}|N\{[^}]*\}|x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|U[0-9a-fA-F]{8}|[NxuU]|s   )?|\{\{?|\}\}?|[^\\{}]+)zus-ascii)r   compiledecodematch)r   rW  r0   r0   r1   r     s   r   Fc             C   s   | d | d | d | d fS )Nr   r!   r$   r0   )rQ   rP  ir0   r0   r1   _f_string_error_pos,  s    rq  c             C   sr  g }d}t |}tj }|r tnt}x&||k rL|}	|||}
|
d krZtt|||d |
j }|
j }|d }|dkr| rt |dkrt	d|||  n
|j
| q(|dkr|dkr|j
d nD|jr|j
tj||j d tj }t| ||||\}}|j| q(|d	kr@|d
kr,|j
d	 ntt|||	d q(|j
| q(W |jrn|j
tj||j d |S )Nr   zInvalid escape sequence\r!   r  r  z{{)r   }z}}z#f-string: single '}' is not allowed)r   r   r[  r   r   r   rq  endgroupr\  rM   r^  r   r*  Z	getstringp_f_string_exprr   )rH   r  rQ   rW  r  Z
next_startsizerl  Z
_parse_seqrt  ro  partr  Z
expr_nodesr0   r0   r1   r]  0  sD    



r]  c             C   s  |}t |}d  } }}	d }
d }d$}d}|}d}d}x||krBP || }||kr|dkrv|sptt|||d d}nN||kr|r|d |k r||d  |kr||d  |krd}|}|d7 }n|}n|d	kr|}|d |k r||d  |kr||d  |krd}|d7 }n|d
kr*|d7 }n|dkrH|dkrH|d8 }n|dkrftt|||d nd|dkr|dkr|d |k r|dkr||d  dkr|d7 }q8n|dkr|d7 }q8|}P |d7 }q8W ||| jddjdd}|d |d |d | d f}|j s,tt|||d |dkr|d7 }x&||k rd|| j rd|d7 }q@W ||k r|| }||| }|dkr|d7 }|d |krn|| }|d7 }|| }|dkrd}d}d}|d }x||krP || }| r:| r:|dkr|d7 }n$|dkr:|dkr4|d8 }n|}P |d	kr| r|d |k r||d  |kr||d  |kr| }|d7 }n|s| }|d7 }qW ||| }
|r|d kr|
d krd}|dkr tt|||d|rd| nd  td| }t||d | | j|d}t	|}|d k	rTt
jj| rTt|d |  |
rrt
j|t| |
||d!}	g }|r|jt
j|tj|d" |jt
j||||	d# |d |fS )%Nr$      r   Frr  z$backslashes not allowed in f-stringsTr!   z'"z{[(z}])#zformat string cannot include #z><=!:}z!=><r   z><z
rU  z(empty expression not allowed in f-string!r\   r  rs  rR  z'missing '}' in format string expressionz, found '%s'r  z(%s))Zparent_scannerrK  Zinitial_posz!invalid conversion character '%s')r  )r   )r   conversion_charformat_speci   @)r   r   rq  replacestripisspacer   r"   rK  r   r   ZFormattedValueNodeZfind_conversion_funcr,  r]  rM   r*  r   r   )rH   r  rQ   Zstarting_indexrW  rp  rw  r}  Zterminal_charr~  Zformat_spec_strZ	expr_textZNO_CHARZnested_depth
quote_charZin_triple_quotesZbackslash_reportedr  Zexpr_strZexpr_posZ	in_stringZstart_format_specbufscannerre   Znodesr0   r0   r1   rv  _  s    ,

2

















:

rv  c             C   s   | j  }| j  | jdkr2| jd tj|g dS t| }| jd
kr|jrT| jd tj	||d}t
| |}| jd tj|||tj| jjdkdS | jd	kr| j  t| |}n|g}| jd tj||dS )Nr   )r_   r   r   z2iterable unpacking cannot be used in comprehension)re   r%   )looprM   typeZhas_local_scoperL   )r   r   )rP   rG   rC   rc   r   ListNoder   
is_starredr   ComprehensionAppendNode
p_comp_forComprehensionNoder   Z	list_typerD   r6  %p_namedexpr_test_or_starred_expr_list)rH   rQ   re   rM   r  exprsr0   r0   r1   r!    s*    








r!  c             C   s0   | j dkrt| |S | j dkr(t| |S |S d S )Nr   r   ri   )r   r   )rC   r  	p_comp_if)rH   bodyr0   r0   r1   p_comp_iter  s
    



r  c             C   s^   | j  }d}| jdkr"d}| j  | jd t| d|d}|jd t| ||d tj|f|S )NFr   Tr   )allow_testlistr   )else_clauser  r   )	rP   rC   rG   rc   p_for_boundsr-   r  r   ForStatNode)rH   r  rQ   r   kwr0   r0   r1   r     s    

r  c             C   s<   | j  }| j  t| }tj|tj||t| |dgd dS )N)	conditionr  )
if_clausesr  )rP   rG   rl   r   
IfStatNodeIfClauseNoder  )rH   r  rQ   rk   r0   r0   r1   r  .  s    r  c             C   s  | j  }| j  | jdkr0| j  tj|g dS g }d}d}x,| jdkr|dkrf| jdkr`dnd}n.|t| jkr| jd	| j|dkrd
ndf  | j  | jdkr| jd t| }|j| d}nzt	| }|dkr| jdkrdnd}|dkr| j
d |}t	| }tj|j||d}|r2|d j| n|j|g d}| jdkrf| j  | jdkrhP q@P q@W | jdkrvt|dkr2t|d tr2t|d dkr2|d d }|dkrt|tjstt|tj}tj|j|j|jd}	ntj}tj|j|d}	t| |	}
| j
d tj||
|	|dS t|dkr^t|d t r^| jd n
| j
d tj|g dS | j
d |dkr<g }g }xT|D ]L}t|tr|j| n.|r|jtj|d j|d g }|j| qW |r|jtj|d j|d t|dkr*|d jr*|d S tj||tjdS g }g }xT|D ]L}t|trf|j| n.|r|jtj|d j|d g }|j| qJW |r|jtj|d j|d t|dkr|d jr|d S tj||ddS d S )Nrs  )r   r   Fr   **r!   r$   z%unexpected %sitem found in %s literalrY  dictzexpected expression, found '*'r\   )r   r   TrL   r   r   )Zkey_exprZ
value_expr)re   )r  rM   r  z2iterable unpacking cannot be used in comprehension)r_   )r_   r  )r   r   )r   r  r   )r   r   ) rP   rG   rC   r   r   r   r   r|   rM   rd   rc   r   rQ   r   r   AssertionErrorr  r   	dict_typeZDictComprehensionAppendNoder   r   set_typer  r  r  r   ZSetNodeZis_set_literalZMergedSequenceNoder   r   )rH   rQ   partsZtarget_typeZlast_was_simple_itemr   r   r   Zcomprehension_typerM   r  r  Z	set_itemsrx  r   r0   r0   r1   r"  D  s    






0


 




r"  c             C   s|   | j  }| j  t| g}x$| jdkr>| j  |jt|  qW | jd t|dkr`|d }ntj||d}tj	||dS )NrL   r  r!   r   )r_   )r   )
rP   rG   rd   rC   rM   rc   r   r   r   ZBackquoteNode)rH   rQ   r_   r   r0   r0   r1   r#    s    


r#  c             C   sH   |d k	r|gpg }x0| j tkrB|jt|  | j dkr8P | j  qW |S )NrL   )rC   expr_terminatorsrM   rd   rG   )rH   re   r  r0   r0   r1   p_simple_expr_list  s    
r  c             C   sH   |d k	r|gpg }x0| j tkrB|jt|  | j dkr8P | j  qW |S )NrL   )rC   r  rM   r   rG   )rH   re   r  r0   r0   r1   p_test_or_starred_expr_list  s    
r  c             C   sH   |d k	r|gpg }x0| j tkrB|jt|  | j dkr8P | j  qW |S )NrL   )rC   r  rM   r   rG   )rH   re   r  r0   r0   r1   r    s    
r  c             C   sB   | j  }t| }| jdkr:| j  t| |}tj||dS |S d S )NrL   )r_   )rP   rd   rC   rG   r  r   r   )rH   rQ   re   r  r0   r0   r1   r     s    

r   c             C   sB   | j  }t| }| jdkr:| j  t| |}tj||dS |S d S )NrL   )r_   )rP   r   rC   rG   r  r   r   )rH   rQ   re   r  r0   r0   r1   p_testlist_star_expr  s    

r  c             C   sV   | j  }t| }| jdkr:| j  t| |}tj||dS | jdkrNt| |S |S d S )NrL   )r_   r   r   )r   r   )rP   r   rC   rG   r  r   r   r   )rH   rQ   re   r  r0   r0   r1   r     s    



r   c             C   s2   t | tj|jtj|j|dd}tj|j|dS )N)r   )re   )r  )r  r   r   rQ   r   r   ZGeneratorExpressionNode)rH   re   r  r0   r0   r1   r     s    r   r   r   rs  r\   r   rT  c             C   s&   | j  }| j  t| }tj||dS )N)rN   )rP   rG   rO   r   Z
GlobalNode)rH   rQ   rN   r0   r0   r1   p_global_statement  s    r  c             C   s&   | j  }| j  t| }tj||dS )N)rN   )rP   rG   rO   r   ZNonlocalNode)rH   rQ   rN   r0   r0   r1   p_nonlocal_statement  s    r  c             C   s  t | }d}| jdkr>|js(|js(|jr>d}| j  t| |_| jdkr^|jr^| j	d|j
d |g}x<| jdkr| j  | jdkrt| }nt | }|j| qfW t|dkr|tjd	| jrd|d
 }t|tjrtj|j
|jt|j
|j|jd}n$t|tjtjtjfst	|j
d | jd d }| j  | jdkrHt| }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 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] = ...)rQ   r  r!   z([-+*/%^&|]|<<|>>|\*\*|//|@)=r   )r   r   z&Illegal operand for inplace operation.)rz   rn   ro   )re   r$   )rn   ro   first)Zlhs_listro   r   r   r   ) r  rC   rp   Zis_subscriptZis_attributerG   p_annotation
annotationr  r   rQ   r   rM   r   r   ro  r   r   r  r  r   r  r   r   r   r;  r   r   ZInPlaceAssignmentNoder   SingleAssignmentNodeZCascadedAssignmentNode)rH   re   Zhas_annotationZ	expr_listrn   rz   ro   r0   r0   r1   p_expression_or_assignment#  sL    




r  c             C   s   | j  }d}| j  | jdkrL| j  t| }| jdkrP| j  | jd	k}nd }g }| jd
kr|jt|  x4| jdkr| j  | jdkrd}P |jt|  qnW tj||d}tj|||| dS )Nr   z>>rL   rT  rV  r!   )r_   )r   streamZappend_newline)rT  rV  )rT  rV  )rT  rV  )	rP   rG   rC   rd   rM   r   r   r   ZPrintStatNode)rH   rQ   Zends_with_commar  r_   r   r0   r0   r1   p_print_statementV  s.    



r  c             C   s   | j  }| j  t| }t|tjrZd}|j}t|dkrd| jdt| |dd |g}n
d}|g}| j	dkr|r| jddd	 | j  |j
t|  | j	d
kr| j  |j
t|  tj||dS )NTr$   r%   z.expected tuple of length 2 or 3, got length %dF)rQ   rm   r   z@tuple variant of exec does not support additional 'in' arguments)rm   rL   )r_   )r$   r%   )rP   rG   r   r   r   r   r_   r   r   rC   rM   rd   r   ZExecStatNode)rH   rQ   codeZtuple_variantr_   r0   r0   r1   p_exec_statementr  s,    


r  c             C   s&   | j  }| j  t| }tj||dS )N)r_   )rP   rG   r  r   ZDelStatNode)rH   rQ   r_   r0   r0   r1   p_del_statement  s    r  c             C   s.   | j  }| jd |r$| jddd tj|S )NpasszExpected a newlineT)ignore_semicolon)rP   rc   expect_newliner   PassStatNode)rH   with_newlinerQ   r0   r0   r1   p_pass_statement  s
    
r  c             C   s   | j  }| j  tj|S )N)rP   rG   r   ZBreakStatNode)rH   rQ   r0   r0   r1   p_break_statement  s    r  c             C   s   | j  }| j  tj|S )N)rP   rG   r   ZContinueStatNode)rH   rQ   r0   r0   r1   p_continue_statement  s    r  c             C   s6   | j  }| j  | jtkr$t| }nd }tj||dS )N)r   )rP   rG   rC   r   r   r   ZReturnStatNode)rH   rQ   r   r0   r0   r1   p_return_statement  s    

r  c             C   s   | j  }| j  d }d }d }d }| jtkrt| }| jdkrh| j  t| }| jdkr| j  t| }n| jdkr| j  t| }|s|s|rtj|||||dS tj|S d S )NrL   r   )exc_type	exc_valueexc_tbcause)rP   rG   rC   r   rd   r   ZRaiseStatNodeZReraiseStatNode)rH   rQ   r  r  r  r  r0   r0   r1   p_raise_statement  s0    




r  c       
      C   s   | j  }| j}| j  t| ddg}x(| jdkrL| j  |jt| dd q&W g }tj| jjk}x|D ]~\}}}}|dkrt	j
||||d}	nLt	j|tj||p|dtj|tj||d|rdnd d	|ko|d kd d
d}	|j|	 qfW t	j||dS )Nr!   )
as_allowedrL   cimport)module_nameas_nameis_absolute)rJ   )r   r   r   )r  r9   Zget_top_level_module	name_list)rn   ro   )stats)rP   rC   rG   p_dotted_namerM   r   r   rD   rW   r   ZCImportStatNoder  r   r;  
ImportNoder   StatListNode)
rH   rQ   r0  r  r  r  target_namedotted_namer  statr0   r0   r1   p_import_statement  s6    

r  c             C   s  | j  }| j  | jdkrFd}x*| jdkrB|t| j7 }| j  q W nd }|d k	rt| jdkrt| j  | jjd }}n.|d krtj| jjkrd}t	| dd\}}}}| jdkr| j
d	 | j}| j  |dk}d}	| jd
k r| j  | jjd
d fg}
| j  n"| jdkrd}	| j  t| g}
x<| jdkr\| j  |	rJ| jdkrJP |
jt|  q"W |	rn| jd |dkr|s| j
d n|r| j
d ntxr|
D ]j\}}}|dkr| j
d| P ytt|}W n( tk
r   | j
d| | P Y nX | jjj| qW tj|S |r2tj||||
dS g }g }xF|
D ]>\}}}|jtj||d |j|tj||pr|df q@W tj|
d d |d}tj|tj|tj||d||d|dS d S )Nr   ...r   importr  r  F)r  zExpected 'import' or 'cimport'r   r   TrL   r   
__future__z?from __future__ imports must occur at the beginning of the filezinvalid syntaxZbracesznot a chancez future feature %s is not defined)r  Zrelative_levelimported_names)r   )rJ   )r_   )r  r9   r  )moduler  )r   r  )r   r  )r  r  )r  r  )rP   rG   rC   r   rD   rE   r   r   rW   r  r   p_imported_namerM   rc   getattrAttributeErroraddr   r  ZFromCImportStatNoder   r   r;  r  ZFromImportStatNoder  )rH   first_statementrQ   r9   Zdotted_name_posr  _r0  Z
is_cimportZis_parenthesizedr  name_posrJ   r  	directiveZimported_name_stringsr  Zimport_listr0   r0   r1   p_from_import_statement  s    








 r  c             C   s"   | j  }t| }t| }|||fS )N)rP   rK   	p_as_name)rH   rQ   rJ   r  r0   r0   r1   r  @  s    r  c             C   sf   | j  }t| }d }|g}x$| jdkr>| j  |jt|  qW |rLt| }||| jjdj||fS )Nr   )	rP   rK   rC   rG   rM   r  rD   rE   rL  )rH   r  rQ   r  r  rN   r0   r0   r1   r  G  s    r  c             C   s,   | j dkr$| jdkr$| j  t| S d S d S )NrB   as)rC   rF   rG   rK   )rH   r0   r0   r1   r  T  s    r  c             C   sH   | j  }| j  t| }| jdkr4| j  t| }nd }tj|||dS )NrL   )r  r   )rP   rG   rd   rC   r   ZAssertStatNode)rH   rQ   Zcondr   r0   r0   r1   p_assert_statement\  s    

r  ;rV  c             C   sX   | j  }| j  t| g}x$| jdkr>| j  |jt|  qW t| }tj|||dS )Nelif)r  r  )rP   rG   p_if_clauserC   rM   p_else_clauser   r  )rH   rQ   r  r  r0   r0   r1   p_if_statementl  s    
r  c             C   s(   | j  }t| }t| }tj|||dS )N)r  r  )rP   rq   p_suiter   r  )rH   rQ   rk   r  r0   r0   r1   r  x  s
    r  c             C   s"   | j dkr| j  t| S d S d S )Nrj   )rC   rG   r  )rH   r0   r0   r1   r    s    
r  c             C   s:   | j  }| j  t| }t| }t| }tj||||dS )N)r  r  r  )rP   rG   rq   r  r  r   ZWhileStatNode)rH   rQ   rk   r  r  r0   r0   r1   p_while_statement  s    r  c             C   sL   | j  }| j  t| d|d}t| }t| }|j|||d tj|f|S )NT)r  r   )r  r  r   )rP   rG   r  r  r  r-   r   r  )rH   r   rQ   r  r  r  r0   r0   r1   r     s    r   c             C   s$  t | }| jdkr4| j  t| ||d}t||dS | j o@| r| jdkr`| j  t| }n
|d  }}t| }| j }t	| }| j }	t| }
t| }t
| }|d krtj||d}n(|jst|jd n||jkrt|d |d |
d k rt|	d	 t||||
||d
S | jd i S d S )Nr   )r   )targetiteratorr   )rJ   z4Target of for-from statement must be a variable namez5Variable name in for-from range does not match targetr   z,Relation directions in for-from do not match)r  bound1Z	relation1Z	relation2bound2r
  )p_for_targetrC   rG   p_for_iteratorr  r   r   p_for_from_relationrP   rK   p_for_from_stepr   r;  rp   r   rQ   rJ   rc   )rH   r  r   r  r  r  Zrel1Z	name2_posZname2Zrel2_posZrel2r  r
  r0   r0   r1   r    sH    





r  c             C   s*   | j tkr| j }| j  |S | jd d S )Nz#Expected one of '<', '<=', '>' '>=')rC   inequality_relationsrG   r   )rH   rR   r0   r0   r1   r    s
    
r  c             C   s0   | j dkr(| jdkr(| j  t| }|S d S d S )NrB   Zby)rC   rF   rG   r   )rH   r
  r0   r0   r1   r    s
    r  c             C   sp   | j  }t| }| jdkrh| j  |g}x0| j|krX|jt|  | jdkrNP | j  q*W tj||dS |S d S )NrL   )r_   )rP   r|   rC   rG   rM   r   r   )rH   r]   rQ   re   r  r0   r0   r1   p_target  s    

r  c             C   s
   t | dS )Nr   )r  )rH   r0   r0   r1   r    s    r  c             C   s6   | j  }|rt| }nt| }|r(tjntj||dS )N)sequence)rP   r   rl   r   ZAsyncIteratorNodeZIteratorNode)rH   r  r   rQ   re   r0   r0   r1   r    s
    
r  c             C   s   | j  }| j  t| }g }d }| jdkrx| jdkrF|jt|  q,W | jdkrb| j  t| }tj||||d}| jdkr|S | jdkr| j  t| }tj|||dS | j	d d S )Nexceptrj   )r  except_clausesr  finally)r  finally_clausezExpected 'except' or 'finally')r  rj   )
rP   rG   r  rC   rM   p_except_clauser   ZTryExceptStatNodeZTryFinallyStatNoder   )rH   rQ   r  r  r  r  r0   r0   r1   p_try_statement  s,    




r  c             C   s   | j  }| j  d }d }d}| jdkrt| }t|tjrB|j}n|g}| jdksr| jdkr| jdkr| j	j
dkr| j  t| }n>| jdkr| jdkr| j  | j  }t| }tj||d}d}t| }tj|||||d	S )
NFr\   rL   rB   r  r$   )rJ   T)patternr  r  is_except_as)rP   rG   rC   rd   r   r   r   r_   rF   rD   r6  rK   r;  r  r   ZExceptClauseNode)rH   rQ   r  r  r  pos2rJ   r  r0   r0   r1   r    s0    

r  c       
      C   s   | j  }| j  t| dd }| jd | jr|}| jj||}|r| jj| t	j
|.}t|}t||| |j| jd}t||}	W d Q R X |	S d S n
tj|S d S )Nr  r$   z!Syntax error in include statement)rK  parse_comments)rP   rG   rJ  r  compile_time_evalrD   Zfind_include_fileZincluded_filesrM   r   Zopen_source_filer   r"   encodingr  p_statement_listr   r  )
rH   r3   rQ   Zunicode_include_file_nameZinclude_file_nameZinclude_file_pathr  Zsource_descs2treer0   r0   r1   p_include_statement1  s     
r  c             C   s0   | j   | jdkr$| j r$t| }nt| }|S )Ntemplate)rG   rF   r   p_with_templater   )rH   r   r0   r0   r1   p_with_statementF  s
    
r  c       	      C   s   d}f }| j dkr\t| 6}| j  t| |}| jd | j dkrL| jd W dQ R X | }|sjt| |}t| }x*t|D ]\}}}||fd|i|}q|W |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  Nr  )rC   r#   rG   p_with_items_listrc   r   r  reversed)	rH   r   Zbrackets_succeededr  errorsr  clsrQ   r/   r0   r0   r1   r   O  s     






r   c             C   s>   g }x4|j t| | | jdkr"P | j  | jdkrP qW |S )NrL   r   )rM   p_with_itemrC   rG   )rH   r   r  r0   r0   r1   r  o  s    

r  c             C   s   | j  }| j rz| jdkrz| jd
krz|r2| jd | j}| j  d }| jdkrh| j  t| }| jd tj	|||dfS t| }d }| jdkr| jdkr| j  t
| }tj||||d	fS d S )NrB   r'   gilzwith gil/nogil cannot be asyncr   r   )stater  r  )managerr  r   )r'   r  )rP   r   rC   rF   r   rG   rd   rc   r   ZGILStatNoder|   ZWithStatNode)rH   r   rQ   r  r  r	  r  r0   r0   r1   r  |  s$    


r  c             C   s   | j  }g }| j  | jd |j| j | j  x*| jdkr\| j  |j| j | j  q4W | jd | jdkr| j  | jd | j  t }||_	t
| ||}| j  |S t|d d S )Nr   rL   r   r\   z-Syntax error in template function declaration)rP   rG   rc   rM   rF   rC   r  expect_indentr)   r?   p_c_func_or_var_declarationexpect_dedentr   )rH   rQ   r?   body_ctxZfunc_or_varr0   r0   r1   r     s*    



r   c             C   s0  | j dkrt| }n| j dkr,t| }n | j dkr@t| }n| j dkrTt| }n| j dkrht| }n| j dkr|t| }n| j dkrt| }n| j dkrt| }n| j d	krt	| }nt| j dkrt
| }n`| j dkrt| |d}nH| j dkrt| }n4| j dkrt| }n| j dkr$t| }nt| }|S )Nglobalnonlocalprintexecdelbreakcontinuereturnraiser  r  r   )r  r  assertr  )r  r  )rC   r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  )rH   r  r   r0   r0   r1   p_simple_statement  s<    






















r  c             C   s   t | |d}|j}g }t|tjs,|j| xJ| jdkrv| j  | jdkrLP t | |d}t|tjrfq.|j| d}q.W |stj|}n$t|dkr|d }ntj	||d}| jdkrt|tj
r|jjr|jjd	kr| jd
| | jd |S )N)r  r  rT  rV  Fr!   r   )r  cdefz@The 'cdef' keyword is only allowed in Cython files (pyx/pxi/pxd)z%Syntax error in simple statement list)rT  rV  )rT  rV  )r  rQ   r   r   r  rM   rC   rG   r   r  r   re   rp   rJ   r   r  )rH   r3   r  r  rQ   r  r0   r0   r1   p_simple_statement_list  s2    





r  c             C   s   | j }d| _ t| }|| _ |S )Nr!   )r8  r   )rH   oldre   r0   r0   r1   p_compile_time_expr  s
    r  c             C   sd   | j  }| j}| j  t| }| jd t| }| jrL|j|}|j|| | j	ddd t
j|S )Nr   zExpected a newlineT)r  )rP   r9  rG   rK   rc   r  r  compile_time_valuedeclarer  r   r  )rH   rQ   denvrJ   re   r   r0   r0   r1   p_DEF_statement  s    

r   c       	      C   s   | j  }| j}|}| j}d }xL| j  t| }|o>t|j|| _t| |}| jrZ|}d}| jdkrP qW | jdkr| j  || _t| |}|r|}|st	j
|}|| _|S )Nr   ZELIFELSE)rP   r  r9  rG   r  r@  r  r  rC   r   r  )	rH   r3   rQ   Z
saved_evalZcurrent_evalr  r   re   r  r0   r0   r1   p_IF_statement	  s2    




r"  c       
   	   C   s  |j }d }| jdkr2|jd-kr(| jd t| |S | jdkrDt| S | jdkrjt| j ddd	 t| |S | jd
kr|jd.kr| jd |j| _t	| }|j
 r| jd/kr| jdkr| jdkrn
| jd n| jdko| rt| ddS d}| jdkrd}| j  n| jdkr"d}d}| j  |r|jd0kr>| jd |j| _t| ||d}|d k	rtjtjtjf}|j
r|tjtjf7 }t||s| jd ||_|S |jr| jddd n
| jdkrd |jkr|jdkr| jd! |j| _t| |S | jdkr.|jd1kr$| jd" t| |S | jd#krZ|jd2krP| jd$ t| |S |jdkr| jdkr| jdkrt| S | jdkr|jdkrt| d%dS |jd3krt| }|d k	r|S | jd& | jd'krt| S | jd(krt| S | jd)krt| S | jd*kr&t | S | jd+kr:t!| S | jdkrZ| j  t"| ||S | jdkr| jdkr| j}| j }	| j  | jdkrt"| ||S |r| jd | j#d||	 t$| ||d,S d S )4Nctypedefr  
module_pxdz#ctypedef statement not allowed hereZDEFZIFzThe 'IF' statement is deprecated and will be removed in a future Cython version. Consider using runtime conditions or C macros instead. See https://github.com/cython/cython/issues/4310r!   )r9   r   classc_classr   propertyc_class_pxdr*   zdecorator not allowed herer   r  cpdefr   rB   z7Decorators can only be followed by functions or classesr  )r  r   zcdef statement not allowed here)r=   z%'api' not allowed with this statementF)rm   r   zdef statement not allowed herez!class definition not allowed hereincludez"include statement not allowed hereTz%Executable statement not allowed hereri   whiler   tryr   )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;   rC   r9   r   p_ctypedef_statementr   r   rP   r"  p_decoratorsr@   rF   r  rG   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_backr  )
rH   r3   r  r;   r   r=   r   tupZ
ident_nameZ	ident_posr0   r0   r1   p_statement&	  s    



















$


r:  c             C   sz   | j  }g }x8| jdkrDt| ||d}t|tjr4q|j| d}qW |sTtj|S t|dkrh|d S tj||dS d S )	NDEDENTrV  )r  Fr!   r   )r  )r;  rV  )	rP   rC   r:  r   r   r  rM   r   r  )rH   r3   r  rQ   r  r  r0   r0   r1   r  	  s    

r  c             C   s   t | |ddd S )NF)with_doc_onlyr!   )p_suite_with_docstring)rH   r3   r0   r0   r1   r  	  s    r  c             C   s   | j d d }| jdkrH| j  | j  |r4t| }t| |}| j  n@|jr\| jddd |j	dkrrt
| |}nt| }| jd
dd |st|\}}||fS )Nr\   rT  z%'api' not allowed with this statementF)rm   r  r%  r   r*   zSyntax error in declarationsT)r  )r  r%  r   r*   )rc   rC   rG   r
  p_doc_stringr  r  r(   r   r9   r  r  r  _extract_docstring)rH   r3   r<  docr  r0   r0   r1   r=  	  s$    




r=  c             C   s  g }g }d}xv| j |kr| j dks0| j dkr>| jddd d}| j dkr| j d dkr| j}| j  | j  t| rt| }n.t| |d	}	t| d
d}
t	j
|	j|	|
d}d}tj|j|d}|j||f d}npt| rt| }n.t| |d	}	t| d
d}
t	j
|	j|	|
d}d}|j| |d
7 }t|dkrF| jd|jd | j dkrz| j |krx|rx| jddj|  P | j  qW ||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   z**z$Argument expansion not allowed here.F)rm   rB   r   )r?   r!   )r   )r   r   T)r   z%Non-keyword arg following keyword arg)rQ   rL   zUnmatched %sz or )rC   r   r   rF   rG   r   rd   r   r   r   CComplexBaseTypeNoderQ   r   r   rM   r   rL  )rH   Z
end_sy_setr?   r   r   Zpos_idxZparsed_typeidentr   r   r   Zkeyword_nodeZwas_keywordr0   r0   r1   p_positional_and_keyword_args	  sP    





rC  c             C   s(   | j dkrt| |dS t| ||dS d S )Nr   )r?   )nonemptyr?   )rC   p_c_complex_base_typep_c_simple_base_type)rH   rD  r?   r0   r0   r1   r   	  s    
r   c             C   s.   | j dkr&| jtkr&| j}| j  |S dS d S )NrB   r  )rC   rF   calling_convention_wordsrG   )rH   r   r0   r0   r1   p_calling_convention
  s
    rH  	__stdcall__cdecl
__fastcallc             C   s   | j  }| j  t| |d}t| dd}tj|||d}| jdkr|g}xP| jdkr| j  | jdkrhP t| |d}t| dd}|jtj|||d qJW tj||d}| j	d | jdkrt
| rt| |}nt| ||}|S )	N)r?   T)r   )r   r   rL   r   )
componentsr   )rP   rG   r   r   r   rA  rC   rM   r   rc   is_memoryviewslice_accessp_memoryviewslice_accessp_buffer_or_template)rH   r?   rQ   r   r   	type_noderL  r0   r0   r1   rE  
  s.    



rE  c          
   C   s  d}d}d}d}g }| j  }d }	}
xT| jdkrx| jdkrN|	rHt|d d}	n | jdkrl|
rft|d d}
nP | j  q&W |	s|
rt| ||d}t|tjrtj	||j
|	|
d	|_
|S tj	|||	|
d	S | jdkrt|d
| j  t| rd}| jdkr&| jtkr&t| j \}}| j}| j  n8t| \}}| jdkrZ| jtkrZ| j}| j  nd}| jdkr| jdkrd}| j  nt| r| j}| j  x,| jdkr|j| | j  t| }qW n| j}| j  }| j  |r| jdkr| jdkr| j  }| j  | jdksN| jdksN| jdksN| jdkr^| jtkr^| jdd| n | jdd| | jd|| d }n| jdkr| jd|| d }tj||||||||d}| jdkrt| rt| |}nt| ||}| jdkr| j  t| }tj|||d}|S )Nr   r!   rB   constzDuplicate 'const'ZvolatilezDuplicate 'volatile')rD  r?   )r   is_constis_volatilez"Expected an identifier, found '%s'rA  rC  r   r   r   **r   r   )rJ   module_pathis_basic_c_typesignedrC  r5  r?   )r   rJ   )r   rT  r   r   )rP   rC   rF   r   rG   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   rG  r8  CSimpleBaseTypeNoderM  rN  rO  ZCNestedBaseTypeNode)rH   rD  r?   Zis_basicrW  r5  rC  rU  rQ   rR  rS  r   rJ   r  Zold_posrP  r0   r0   r1   rF  ,
  s    
 

 






$
rF  c             C   sn   | j  }| j  t| d|\}}| jd | jdkr@t| ||}tj|dd |D d}tj	||||d}|S )Nr   r   c             S   s"   g | ]\}}t j|j||d qS ))rQ   r   r   )r   r   rQ   )r   r   r   r0   r0   r1   r   
  s   z(p_buffer_or_template.<locals>.<listcomp>)r   )r   r   r   )r   )
rP   rG   rC  rc   rC   rO  r   r   r   r   )rH   r   r?   rQ   r   r   r   r   r0   r0   r1   rO  
  s    

rO  c             C   s^   |r| r|S | r8|r8t | r*t| |S t| |d S n"| rZ| rZt | rVt| |S |S d S )N)rM  rN  rO  )rH   r   rD  r   r0   r0   r1   p_bracketed_base_type
  s    



r^  c             C   s   | j | j| j fg}| j  d}| jdkr0d}n8| j dkrh|j| j | j| j f | j  | j dkrhd}x |d d d D ]}| j|  qxW |S )NFr\   Tr  r!   r   )rC   rF   rP   rG   rM   r8  )rH   savedretvalsvr0   r0   r1   rM  
  s    


rM  c             C   sh   | j  }| j  t| \}}x"|D ]}t|dk r"| jd q"W | jd t||}tj|||d}|S )Nr$   zDAn axis specification in memoryview declaration does not have a ':'.r   )r   Zaxes)	rP   rG   r   r   r   rc   r  r   r   )rH   r   rQ   r  r  r  r  r   r0   r0   r1   rN  
  s    


rN  c             C   s   | j dko| jtkS )NrB   )rC   rF   rG  )rH   r0   r0   r1   looking_at_name
  s    rb  c             C   s|  | j tkrdS | jdkrtd}| j }| j }g }| j  x4| jdkrl| j  |j| j | j f | jd q:W | j| j | j f}| jdkrd}n| jdks| jdkr| j  | jdk}| j|  n\| jd	kr| j  | jdk}| j|  n4| jd
kr| j  | jdkpt|  }| j|  |j	  x.|D ]&}| jd|  | jdd|d  q,W | jd|| | or|d S dS d S )NFrB   r   Tr   z**r   r   r   r   r!   r   )r   r   )rB   )
rF   base_type_start_wordsrC   rP   rG   rM   rc   r8  r   reverse)rH   is_typerJ   r  dotted_pathr_  pr0   r0   r1   r   
  sD    






r   c             C   s   | j dko| jtkS )NrB   )rC   rF   rc  )rH   r0   r0   r1   rX    s    rX  c             C   sD   | j dkr<| j}| j }| j  | j dk}| jd|| |S dS d S )NrB   r   r   )rC   rF   rP   rG   r8  )rH   rJ   r  r   r0   r0   r1   r\    s    

r\  voidcharrA  rB  doublebint)Z
Py_UNICODEZPy_UCS4Z	Py_hash_tZ
Py_ssize_tZssize_tZsize_tZ	ptrdiff_tZPy_tss_tshortrF  rW  r4  structunionenumpackedc             C   st   d}d}xb| j dkrj| jtkrj| jdkr.d}n2| jdkr>d}n"| jdkrNd	}n| jdkr`|d7 }| j  q
W ||fS )
Nr!   r   rB   r4  rW  r$   rl  rF  r   )rC   rF   sign_and_longness_wordsrG   )rH   rW  r5  r0   r0   r1   rZ  7  s    



rZ  c             C   s,   t | d}|d k	r$t|}| j|_nd }|S )Nr  )rN  r   rK  r  )rH   literalcnamer0   r0   r1   p_opt_cnameF  s    

rt  c          	   C   s  | j  }| jdkrx| j  | jdks,t| rVtj|| jjdd d}	t| |||	|}
qt	| |||||dd}
| j
d nt| ||||||}
| r|
jr| jdkrt| j  d|
j  xJ| jd
kr | j  }| jdkrt| |
}
n| j  t| |||
|}
d	}qW |
S )Nr   r   r  )rJ   rs  r!   )r   re  cmethod_flagrD  calling_convention_allowedz&%s on something that is not a functionr   r   )r   r   )rP   rC   rG   rb  r   CNameDeclaratorNoderD   rE   p_c_func_declaratorr   rc   p_c_simple_declaratorcalling_conventionr   p_c_array_declarator)rH   r3   r   re  ru  
assignablerD  rv  rQ   r   r   r0   r0   r1   r   O  s0    




r   c             C   sB   | j  }| j  | jdkr$t| }nd }| jd tj|||dS )Nr   )r   Z	dimension)rP   rG   rC   r   rc   r   ZCArrayDeclaratorNode)rH   r   rQ   Zdimr0   r0   r1   r{  r  s    


r{  c             C   s   t | ||dd}t| }| jd t| }t| |jdk\}}	}
|rZ|
rZt| j ddd |pdt| }t| }t	j
||||||	|p|jp|||
d	S )	Nr   )ru  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$   )r9   )r   r_   Zhas_varargsZexception_valueZexception_checkr'   with_gilZhas_explicit_exc_clause)p_c_arg_listp_optional_ellipsisrc   p_nogilp_exception_value_clauser:   r   rP   
p_with_gilr   ZCFuncDeclaratorNoder'   )rH   rQ   r3   r   ru  r_   Zellipsisr'   exc_val	exc_check
exc_clauser  r0   r0   r1   rx  |  s"    
rx  r   r   r   rT   r   ++--r   r   r   r   <<>>rL   []()r|  r@  c          	   C   s  | j  }t| }| jd!kr| jdk}	| j  | j  }
| jdkoF| jdk}|rT| j  t| ||||||d}|r|tj|
|d}|	rtj||d}tj||d}n<| jdks| jdko| j	j
r| jdkrtjntj}| j  t| ||||||d}|||d}nd }| jdkrj| j}|r,t| j  d	 | j  t| }|d
kr| jdkr|r| j  t| }n|r~t| j  d d}d }|d kr|jd k	r|r|jd | }|d
kr|jdkr|r| j}dd |D r| j  |dkr| jd d}n`|dkr| jd d}nF|d"krF| j|krF|d9 }| j  n| jdkrd|| j7 }| j  |tkr| jd| dd ||7 }n@|dkr| j}|tkr| jd| dd |d | }| j  tj||||d }||_|S )#Nr   **rQ  rB   )r   re  ru  r|  rD  )r   r   z&&zDeclarator should be emptyrz   r   zEmpty declaratorr  z::r~  c             S   s   g | ]}|d krdqS )z+-*/<=>!%&|([^~,r!   r0   )r   r  r0   r0   r1   r     s    z)p_c_simple_declarator.<locals>.<listcomp>r   r   z()r   r   z[]r   r   r   r$   z,Overloading operator '%s' not yet supported.F)rm    )rJ   rs  default)r   r  )r   r   r   r   )rP   rH  rC   rG   rF   r   r   ZCConstDeclaratorNodeZCPtrDeclaratorNoderD   cppZ CppRvalueReferenceDeclaratorNodeZCReferenceDeclaratorNoder   rt  rd   r>   r:   rc   supported_overloaded_operatorsrw  rz  )rH   r3   r   re  ru  r|  rD  rQ   rz  Z	is_ptrptrZ	const_posrR  r   r   Z
node_classro   rJ   rs  rR   r0   r0   r1   ry    s    


















ry  c             C   s(   | j dkr | jdkr | j  dS dS d S )NrB   r'   r!   r   )rC   rF   rG   )rH   r0   r0   r1   r    s    r  c             C   s(   | j dkr | j  | jd dS dS d S )Nr   r  r!   r   )rC   rG   Zexpect_keyword)rH   r0   r0   r1   r    s
    

r  c             C   s6  d}d}|rdnd}| j dkr:| jdkr:d}| j  d}n| j dkr,d}| j  | j dkrjd}| j  n| j dkrd}| j d	 }| j  | j dkr| j}|d
kr| j d	 |d krt| j d nt| |}| j  n&| j dkr,tj| j dd}| j  n&| j dkr d}| j  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.
    FNTrB   Znoexceptr  r   r   r$   r'   r!   zf'except +nogil' defines an exception handling function. Use 'except + nogil' for the 'nogil' modifier.)r   r   )	rC   rF   rG   rP   r   r/  r   r)  rd   )rH   Z	is_externr  r  r  Zplus_char_posrJ   r0   r0   r1   r    sD    






r  **...c       	   
   C   sP   g }|}xB| j tkrJ|jt| ||||||d | j dkr<P | j  d}q
W |S )N)rD  kw_onlyr^   rL   r   )rC   c_arg_list_terminatorsrM   p_c_arg_declrG   )	rH   r3   	in_pyfuncru  r}  r  r^   r_   is_self_argr0   r0   r1   r  A  s    

r  c             C   s   | j dkrt|  dS dS d S )Nz...r!   r   )rC   r  )rH   r0   r0   r1   r  Q  s    
r  c             C   sb  | j  }d }}	d }
d }| jr<tj|d g dddd|d d	}nt| |d}t| ||d}| jdkr| j r| j}| j  | jdkr| jdkr| j  n
| j	d |st	|d	|  |dk}	|dk}|r| jd
kr| j  t
| }| jdkrH| j  d|jkr@| jdkrtj|}
| j  n d|jkr4t| }
n
t	|d nt| }
tj|||||	|
||dS )Nr   )rJ   rU  rV  rW  rC  r5  r  r?   )rD  rw   rr   rB   r  zExpected 'None'z*'%s None' only allowed in Python functionsr\   r   r   r   r   r&   z;default values cannot be specified in pxd files, use ? or *)r   r   not_noneor_noner  r  r  )rw   rr   )r   r   )rP   r   r   r]  r   r   rC   rG   rF   r   r  r9   r   r  	modifiersrd   ZCArgDeclNode)rH   r3   r  ru  rD  r  r^   rQ   r  r  r  r  r   r   r0  r0   r0   r1   r  X  sV    




r  c             C   s(   | j dkr | jdkr | j  dS dS d S )NrB   r(   r!   r   )rC   rF   rG   )rH   r0   r0   r1   p_api  s    r  c             C   s  | j  }t| |j|_|jp"t| |_|jrF|jdkrFt|d|j  |jdkrf| jdkrft| ||S | jdkr| j  t| ||S t	| rd|_
|jrt|d t| |S | jd	kr|jrt|d t| |S | jd
kr|jdk rt|d |jrt|d t| ||S | jdkr4| jdkr4t| ||S | jdkr| jtkr|jdkrbt|d |jr| jdkrt|d t| ||S | jdkr| jdkrt| ||S t| ||S d S )Nr+   publiczCannot combine 'api' with '%s'r~  r   r  r!   z$cdef blocks cannot be declared cpdefr\   r%  r  r$  z*Extension type definition not allowed herez(Extension types cannot be declared cpdefrB   r   z/C struct/union/enum definition not allowed herero  z'C struct/union cannot be declared cpdeffused)r+   r  )r  r$  )r  r$  )rP   p_visibilityr:   r(   r  r   rC   p_cdef_extern_blockrG   r  r'   r=   p_cdef_blockr9   p_c_class_definitionrF   p_cpp_class_definitionstruct_enum_unionp_struct_enump_fused_definitionr  )rH   r3   rQ   r0   r0   r1   r/    sL    










r/  c             C   s   t | |ddS )Nr!   )r;   )r  )rH   r3   r0   r0   r1   r    s    r  c             C   s   |j rt|d d }| jd | jdkr2| j  nt| dd }|ddd}| jd	krn| j  t| dd |_t| r|d|_	t
| |d
\}}tj|||||jdS )Nz+cdef extern blocks cannot be declared cpdefr   r   r  r$   r!   r~  )r;   r:   r>   T)include_fileverbatim_includer  r>   )r=   r   rc   rC   rG   rJ  rF   r>   r  r'   r=  r   ZCDefExternNode)rH   rQ   r3   r  r  r  r0   r0   r1   r    s&    




r  c       	      C   s  | j   d}| jjr>| jdks2| jdkr>| jdkr>d}| j   | jdkr| j}| j   t| }|d kr|jd k	r|jd | }nd  }}|r| jd |r| jdkr| j   t| }| j	d	 nt
j|d
g ddddd}| j	d g }d }| jdkrt| || n@| j   | j  t| }x| jdkr:t| || qW | j  | rb|jdkrbt|d t
j|||||||j|j|j|j|jdk|dS )NFr%  rB   rm  Tz::zUnnamed scoped enum not allowedr   r   rA  r!   r   )rJ   rU  rV  rW  rC  r5  r\   rT  r;  rV  r~  zDEmpty enum definition not allowed outside a 'cdef extern from' blockr$  )rJ   rs  scopedr  underlying_typer<   r:   Zcreate_wrapperr(   in_pxdr@  )r;  rV  )rG   rD   r  rC   rF   rt  r>   r   r   rc   r   r]  p_c_enum_liner
  r>  r  r:   r4  r<   r=   r(   r9   )	rH   rQ   r3   r  rJ   rs  r  r  r@  r0   r0   r1   p_c_enum_definition  s\    &



r  c             C   s^   | j dkrHt| || x8| j dkrD| j  | j dkr6P t| || qW n| j  | jd d S )Nr  rL   rT  rV  zSyntax error in enum item list)rT  rV  )rC   p_c_enum_itemrG   r  )rH   r3   r  r0   r0   r1   r    s    

r  c             C   sr   | j  }t| }t| }|d kr8|jd k	r8|jd | }d }| jdkrV| j  t| }|jtj	||||d d S )Nz::r   )rJ   rs  r   )
rP   rK   rt  r>   rC   rG   rd   rM   r   ZCEnumDefItemNode)rH   r3   r  rQ   rJ   rs  r   r0   r0   r1   r  "  s    

r  c       	      C   sv  d}| j dkr8d}| j  | jdks.| j dkr8| jd | j }| j  t| }t| }|d krv|jd k	rv|jd | }d }| jdkrB| j  g }| jdkr| j  | jd	dd
 nn| jd | j	  t
|jd}xF| jdkr| jdkr|jt| | j | q| j  | jd	 qW | j  | rL|jdkrLt|d n
| jd tj||||||j|j|j|jdk|d
S )NFrp  TrB   rm  z::r\   r  zExpected a newline)r  rT  )r:   r;  r~  zOEmpty struct or union definition not allowed outside a 'cdef extern from' blockz*Syntax error in struct or union definitionr$  )	rJ   rs  r0  
attributesr<   r:   r(   r  rp  )rF   rG   rC   expectedrK   rt  r>   r  rc   r
  r)   r:   rM   r  rP   r  r   r   r3  r<   r(   r9   )	rH   rQ   r3   rp  r0  rJ   rs  r  r  r0   r0   r1   p_c_struct_or_union_definition/  sH    




r  c             C   s   |j d	krt|d | j  t| }| jd | j  | j  g }x8| jdkrz| jdkrh|jt	|  n| j  | j  qDW | j
  |st|d tj|||dS )
z5
    c(type)def fused my_fused_type:
        ...
    r  r$  z&Fused type definition not allowed herer\   r;  r  zNeed at least one type)rJ   types)r  r$  )r9   r   rG   rK   rc   r  r
  rC   rM   r   r  r   ZFusedTypeNode)rH   rQ   r3   rJ   r  r0   r0   r1   r  [  s"    




r  c             C   s&   | j dkrt| ||S t| ||S d S )Nro  )rF   r  r  )rH   rQ   r3   r0   r0   r1   r  }  s    
r  c             C   sX   | j  }|}| jdkrT| jd	krT| j}|dkrL||krL| jd||f dd | j  |S )
NrB   r~  r  readonlyr+   z,Conflicting visibility options '%s' and '%s'F)rm   )r~  r  r  )rP   rC   rF   r   rG   )rH   Zprev_visibilityrQ   r:   r0   r0   r1   r    s    r  c             C   s4   | j dkr0| jdkr0| j}| j  |gt|  S g S )NrB   r&   )r&   )rC   rF   rG   p_c_modifiers)rH   modifierr0   r0   r1   r    s
    r  c             C   s  |j dk}t| }t| d|jd}t| ||d|ddd}|j|_| jdkrn| jdkrn|j d	krn| j  d}nd
}| jdkr| j	ddd | j  t
|  | jdk r|j dkr|j r| j	d t| tdd\}}	tj||j|||	|||j|j|d
}
n|r||_|g}xD| jdkrR| j  | jdkr2P t| ||ddd}|j| qW | jd }| jddd |j dkr| j|krt| }nd }tj||j|||j dk||j||jd	}
|
S ) Nr&  r(  r!   )rD  r?   )r  )ru  r|  rD  rB   rQ  	cpp_classr   z->z~Return type annotation is not allowed in cdef/cpdef signatures. Please define it before the function name, as in C signatures.F)rm   r\   r  r$  z&C function definition not allowed herer   )r9   )	r:   r   r   r  r@  r  r(   r=   is_const_methodrL   rT  z&Syntax error in C variable declarationT)r  )r:   r   declaratorsr  r@  r(   r  r=   )r&  r(  )r  r&  r$  r(  r  )r&  r(  )r$  r(  )r9   r  r   r?   r   r=   rC   rF   rG   r   rd   r=  r)   r   r0  r:   r(   r  rM   Z
start_liner  r>  r1  )rH   rQ   r3   ru  r  r   r   r  r@  Zsuiter   r  Zdoc_liner0   r0   r1   r    sn    








r  c             C   s   | j  }| j  t| |j}t| }|d|d}|r:d|_| jdkrPt| ||S | jdkrp| jt	krpt
| ||S | jdkr| jdkrt| ||S t| dd}t| |ddd}| jdd	d
 tj||||||jdkdS d S )Nr!   )r<   r:   r%  rB   r  )rD  )re  rD  z"Syntax error in ctypedef statementT)r  r$  )r   r   r:   r(   r  )rP   rG   r  r:   r  r(   rC   r  rF   r  r  r  r   r   r  r   ZCTypeDefNoder9   )rH   r3   rQ   r:   r(   r   r   r0   r0   r1   r-    s*    
r-  c             C   sN   g }xD| j dkrH| j }| j  t| }|jtj||d | jd qW |S )Nr   )	decoratorz"Expected a newline after decorator)rC   rP   rG   rq   rM   r   ZDecoratorNoder  )rH   r   rQ   r  r0   r0   r1   r.    s    r.  c             C   s0   | j dkr,|tk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.
    rB   zTCannot use cdef modifier '%s' in Python function signature. Use a decorator instead.F)rm   )rC   r   r   rK   )rH   rJ   r0   r0   r1   _reject_cdef_modifier_in_py  s    r  c             C   s   |r|d j n| j }|r"| j  | j  t| t| }| jdd| jdkrP| jn| j  t	| dd\}}}| jd t| | j d }| jdkr| j  t
| }t| | j t| tdd	\}	}
|r| j  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.rB   r   )r]   z->r   )r9   )	rJ   r_   r`   ra   r@  r  r   r   return_type_annotation)rQ   rP   Zenter_asyncrG   r  rK   rc   rC   rF   rb   r  r=  r)   Z
exit_asyncr   ZDefNode)rH   r   r   rQ   rJ   r_   r`   ra   r  r@  r  r0   r0   r1   r     s0    


r   c             C   s8  t | dd|d}d }d }| jdkrt|dkr8| jd | j  x|D ]
}d|_qFW | jdkr~| j  |jt | dd|d n| j|kr| jd | jdkr| j  | jd	krt| |d
}| jdkr| j  |jt | ddd|d n| j|kr| jd | jdkr| j  t| |d
}| jdkr.| j  |||fS )Nr!   )r  r}  r^   rT   r   zTGot zero positional-only arguments despite presence of positional-only specifier '/'rL   z-Syntax error in Python function argument listr   rB   )r^   )r  r}  r  r^   z**)r  rC   r   r   rG   Zpos_onlyr   p_py_arg_decl)rH   r]   r^   r_   r`   ra   r   r0   r0   r1   rb   #  s@    













rb   c             C   sB   | j  }t| }d }|r2| jdkr2| j  t| }tj|||dS )Nr\   )rJ   r  )rP   rK   rC   rG   r  r   ZPyArgDeclNode)rH   r^   rQ   rJ   r  r0   r0   r1   r  G  s    r  c       
   
   C   s   | j  }| j  tt| }| j|_d }d }| jdkrVt| dd\}}t|||\}}|d krlt	j
|g d}t| tdd\}}	tj||||||	|| jjdkdS )	Nr   F)r   )r_   r%  )r9   r%   )rJ   basesr   r@  r  r   Zforce_py3_semantics)rP   rG   r   rK   rK  r  rC   r   r   r   r   r=  r)   r   ZPyClassDefNoderD   r6  )
rH   r   rQ   
class_namer   r   r   r   r@  r  r0   r0   r1   r5  Q  s$    
r5  c             C   sD  | j   g }t| }x(| jdkr<| j   |j| t| }qW |rV|jdkrVt|d |r| jdkr| jdkr| j   t| }n|}d }d }d }d }	| jdkrt| dd\}
}|r| jd	 t||
|\}}|d krt	j
|g d
}| jdkr |jdkr|j rt| j d t| \}}}	| jdkrX|jdkr>d}nd}t| t|d\}}n| jd d }d }|jdkr|st|d |rt|d nt|jdkr|st|d |st|d nF|jdkr|jr|st|d |st|d nt|d|j  tj||j|j|jdj|||||||	|jdk||dS )Nr   r~  z6Qualified class name only allowed for 'extern' C classrB   r  r   F)r   z$C classes cannot take keyword bases.)r_   r   r  zBName options only allowed for 'public', 'api', or 'extern' C classr\   r$  r(  r&  )r9   z"Syntax error in C class definitionz)Module name required for 'extern' C classz?Type object name specification not allowed for 'extern' C classz>Object struct name specification required for 'public' C classz<Type object name specification required for 'public' C classr+   z;Object struct name specification required for 'api' C classz9Type object name specification required for 'api' C classzInvalid class visibility '%s')r:   r<   r(   r  r  r  r  objstruct_nametypeobj_name
check_sizer  r@  r  )r  r~  )rG   rK   rC   rM   r:   r   rF   r   r   r   r   r(   rP   p_c_class_optionsr9   r=  r)   r  r   r2  r<   rL  )rH   rQ   r3   rU  r  r  r  r  r  r  r   r   r  Z
body_levelr@  r  r0   r0   r1   r  h  s    








r  c             C   s   d }d }d }| j d x| jdkr$P | jdkr@| j  t| }nL| jdkr\| j  t| }n0| jdkr| j  t| }|dkr| jd	|  | jd
krP | j  qW | j dd |||fS )Nr   rB   objectr  r  ignorewarnr   z/Expected one of ignore, warn or error, found %rrL   r   z)Expected 'object', 'type' or 'check_size')r  r  r   )rc   rC   rF   rG   rK   r   )rH   r  r  r  r0   r0   r1   r    s.    







r  c             C   sB   | j  }| j  t| }t| tdddd\}}tj||||dS )Nr'  )r9   T)r<  )rJ   r@  r  )rP   rG   rK   r=  r)   r   ZPropertyNode)rH   rQ   rJ   r@  r  r0   r0   r1   r6    s    r6  c             C   s:   | j dkr6| j }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 stringT)r  )re   N)rC   rP   r   r  r   r   )rH   rQ   Zstring_noder0   r0   r1   r7    s    
r7  c             C   sP   | j dkrH| j }t| \}}}| jddd |dkr:|S t|d |S d S d S )	Nr  zSyntax error in doc stringT)r  r  r  z2Python 3 requires docstrings to be unicode strings)r  r  )rC   rP   r(  r  r   )rH   rQ   r0  Zbytes_resultZunicode_resultr0   r0   r1   r>    s    

r>  c             C   s   d}| dkrnpt | tjr:| jjr~| j}tj| jg d} nDt | tjr~| jr~| j}t |d tjr~|d jjr~|d j}|d= |dkrd}nHt |tj	rt
| jd |j}n(t |tjr|j}|dkr|j}n|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).
    N)r  r   z2Python 3 requires docstrings to be unicode strings)r   r   r   re   Zis_string_literalr  rQ   r  r   r+  r   r   r-  r  )r   Zdoc_noder  r@  r0   r0   r1   r?    s2    
r?  c             C   s@   t | ||ddd}| jdkr<| jdt| jt| jf  |S )N)r9   r!   )r  rV  z!Syntax error in statement [%s,%s])r  rC   r   r>  rF   )rH   r9   r3   r  r0   r0   r1   p_code  s
    
r  z$^#\s*cython\s*:\s*((\w|[.])+\s*=.*)$c             C   sd  i }xX| j dkr^| j }t| j}|rT|jdj }ytj|dd}W n@ tk
r } z$| j	|j
d dd | j  wW Y d d }~X nX x|D ]}||krqtjj|tkr||  || 7  < || ||< q|| || krt|d|f  q| j	d	||| || f |d
 qW d|kr4| jj|d  d|krJ|d | j_|j| | j  qW |S )NZcommentliner!   T)Zignore_unknownr   F)rm   zDuplicate directive found: %sz@Conflicting settings found for top-level directive %s: %r and %r)rQ   r6  legacy_implicit_noexcept)rC   rP   !_match_compiler_directive_commentrF   ru  r  r   Zparse_directive_list
ValueErrorr   r_   rG   Zdirective_typesgetr   r   rD   set_language_levelr  r-   )rH   r   rQ   mZdirectives_stringZnew_directiveserJ   r0   r0   r1   p_compiler_directive_comments  s:    




r  c       
      C   s   | j  }t| }d| _| jjd krd| jjd |d jrddd l}|jd|d j t	t
jr\dndd |rldnd	}t| }t| ||d
dd}	| jdkr| jdt| jt| jf  t|||	||dS )NFZ3strr   zwCython directive 'language_level' not set, using '3str' for now (Py3). This has changed from earlier releases! File: %sr!   r$   )
stacklevelr$  r  )r9   )r  rV  z!Syntax error in statement [%s,%s])r@  r  full_module_namedirective_comments)rP   r  r  rD   r6  r  filenamewarningsr  FutureWarningcythonZcompiledr>  r  rC   r   r>  rF   r   )
rH   r   r  r3   rQ   r  r  r9   r@  r  r0   r0   r1   p_moduleF  s*    


r  c             C   s8   t | }| jdkr,| jd | jd d}nd}||fS )Nr   r   FT)rK   rC   rc   )rH   rJ   requiredr0   r0   r1   p_template_definitiona  s    


r  c          
   C   s  | j   t| }t| }|d kr8|jd k	r8|jd | }| jdkrLt|d | jdkr| j   t| g}x$| jdkr| j   |jt|  qjW | jd dd |D }nd }d }| jd	kr| j   t	| |d
g}x(| jdkr| j   |jt	| |d
 qW | jd ng }| jdkr&t| j
 d t| }| jdkr| j   | jd | j  t|  g }	t|jd|pr|jd}
||
_xB| jdkr| jdkr|	jt| |
 n| j   | jd qW | j  nd }	| jd tj|||||j|jdk|	|dS )Nz::r   z*Qualified class name not allowed C++ classr   rL   r   c             S   s   g | ]\}}|qS r0   r0   )r   rJ   r  r0   r0   r1   r   {  s    z*p_cpp_class_definition.<locals>.<listcomp>r   )r?   r   z&Name options not allowed for C++ classr\   rT  r  )r:   r9   r'   r;  r  zExpected a newlinez$Syntax error in C++ class definitionr$  )rJ   rs  base_classesr:   r  r  r?   )rG   rK   rt  r>   rC   r   r  rM   rc   r   rP   r  r
  r>  r)   r:   r'   r?   p_cpp_class_attributer  r  r   ZCppClassNoder9   )rH   rQ   r3   r  rs  r?   Ztemplate_namesr  r'   r  r  r0   r0   r1   r  k  sh    







r  c             C   s   d }| j dkrt| }| jdkr0t| | j |S | jdkrDt| |S | j dkr| jtkr| jdkrrt| | j |S t| | j |S n\t| | j |}|d k	rt	j
t	jt	jf}|jr|t	jt	jf7 }t||s| jd ||_|S d S )Nr   r   r#  rB   ro  z7Decorators can only be followed by functions or classes)rC   r.  rF   r  rP   r-  r  r  r  r   r0  r1  r2  r@   r3  r4  r   r   r   )rH   r3   r   r   r9  r0   r0   r1   r    s(    






r  c       
      C   s  d| }|rl| j | |r*| j d|  t|}|tkr| j d|d |d f  x*tdt|D ]}t| || |d  qdW | j d|  d S t|tjry
|j	}W n t
k
r   |jj}Y nX | j d||jf  x8|jj D ]*\}}	|d	kr|d
krt| |	|d | qW d S |tkrl| j d x*tt|D ]}t| || |d  q<W | j d|  d S | j d||f  d S )Nz  z%s: z	(%s @ %s
r   r!   r$   z%s)
z%s @ %s
tagrQ   z[
z%s]
z%s%s
)writer  r   ranger   print_parse_treer   r   Noder  r  rH  r6   rQ   r,   r  r   )
r  r   r9   r   indtrp  r  rJ   r   r0   r0   r1   r    s:    



r  c             C   s   | j  }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.
    )re   )rP   rd   r   ZAnnotationNode)rH   rQ   re   r0   r0   r1   r    s    r  )r&   r'   r(   )rA   )
r   r   r   r   r   r   r   r   r   rw   )T)NN)r  )N)TF)N)N)N)r   r   rs  r\   r   rT  )r   )r   )r  rT  rV  )F)TF)r   r   r   r   )TF)F)r   )r   )r   )r   )F)N)FN)rI  rJ  rK  )N)N)rh  ri  rA  rB  rj  rk  )r   r   )r   r   )r$   r   )r$   r   )r$   r   )r   r   )r$   r   )r!   r   )rl  rF  rW  r4  )rm  rn  ro  rp  )r   r   r   rT   r   r  r  r   r   r   r   r  r  rL   r   r   r   r   r   r   r  r  r|  r   r@  )r   r  r  r   r\   rT   )r   r   r   r!   )NF)r   r!   )r!   )N)r  r   r  r  r  rk  r   r  ior   r   r   unicodedatar   r	   r    r
   	functoolsr   r   ZScanningr"   r   r#   r  r   r   r   r   r   r   r   r   r   ZErrorsr   r   r   r   r   version_infor   
maxunicoder   r   r)   rK   rO   rS   r[   rf   rd   rg   rq   r   rl   rt   ru   rv   ry   r   r   r|   r   r~   	frozensetr}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r	  r  r  r  r   r%  r/  r:  r(  rN  rQ  rJ  r\  r   r   rq  r]  rv  r!  r  r  r  r"  r#  r  r  r  r   r  r   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r   r  r  r  r  r  r  r  r  r  r  r  r   r  r  r   r  r  r  r   r"  r:  r  r  r=  rC  r   rH  rG  rE  rF  rO  r^  rM  rN  rb  r   rX  r\  r[  rY  rq  rc  r  rZ  rt  r   r{  rx  r  ry  r  r  r  r  r  r  r  r  r/  r  r  r  r  r  r  r  r  r  r  r  r-  r.  r  r   rb   r  r5  r  r  r6  r7  r>  r?  r  rm  ro  r  r  r  r  r  r  r  r  r0   r0   r0   r1   <module>   s  





 
	3*? 
),f./ 	n
	
	3
 Q
+
		 "#q8	
a)


	
!
    
PC
 3)>,"@
 $
L	#
'
>