Current File : //usr/lib64/python2.7/site-packages/cffi/cparser.pyo
�
p�Wc@s�ddlmZmZddlmZmZyddlmZWnek
r_ddlZnXddl	Z	ddl
Z
ddlZy:ejdkr�ddl
ZnddlZej�ZWnek
r�dZnXe
jde
je
jB�Ze
jde
je
jB�Ze
jd	�Ze
jd
�Ze
jd�Ze
jd�Zdae
jd
e
j�Ze
jd�Ze
jd�Ze
jd�Z e
jd�Z!e
jd�Z"d�Z#d�Z$d�Z%d�Z&d�Z'de(fd��YZ)dS(i(tapitmodel(tCOMMON_TYPEStresolve_common_type(t
_pycparseri����Nis/\*.*?\*/|//([^\n\\]|\\.)*?$s?^\s*#\s*define\s+([A-Za-z_][A-Za-z_0-9]*)\b((?:[^\n\\]|\\.)*?)$s=\s*\.\.\.\s*[,}]|\.\.\.\s*\}s__dotdotdot\d+__$s\[\s*\.\.\.\s*\]s\w+|\Ss-?0?x?[0-9a-f]+[lu]*$s\b(__stdcall|WINAPI)\bs[(]\s*(__stdcall|WINAPI)\bs\b__cdecl\bs9\bextern\s*"(Python|Python\s*\+\s*C|C\s*\+\s*Python)"\s*.s'[*]\s*((const|volatile|restrict)\b\s*)+cCstdkrtj�antS(N(t
_parser_cachetNonet	pycparsertCParser(((s2/usr/lib64/python2.7/site-packages/cffi/cparser.pyt_get_parser%scCsng}xKtrStj|�}|s(Pn|j||j� �|jd�d}|j|j��|j�}|jd|�r�|jd�|d7}nd}|}x�|t|�kr6||}|dkr�|d7}nH|dkr
|dkr�Pn|d8}n|dkr)|dkr)Pq)n|d7}q�W|||!|||}q	W|j|�dj	|�S(Nt(t)t*iis,;=t(
tTruet_r_star_const_spacetsearchtappendtstarttgrouptendt
startswithtlentjoin(tcsourcetpartstmatchtclosingtendpostleveltitc((s2/usr/lib64/python2.7/site-packages/cffi/cparser.pyt_workaround_for_old_pycparser+s<	






cCs�g}xvtr~tj|�}|s(Pn|j�d}|j||j� �d|jd�krt|jd�n
|jd�||dkr|jd|�}|dkr�tj	d��n|jd|d|�dkr�t
d	��n|j||d|!�||d}nV|jd
|�}|dkrHtj	d��n|j|||d!�||d}|jd�q	W|j|�d
j|�S(NitCs(void __cffi_extern_python_plus_c_start; s!void __cffi_extern_python_start; t{t}is!'extern "Python" {': no '}' founds7cannot use { } inside a block 'extern "Python" { ... }'t;s'extern "Python": no ';' founds  void __cffi_extern_python_stop;R
(Rt_r_extern_pythonRRRRRtfindRt	CDefErrortNotImplementedErrorR(RRRRRt	semicolon((s2/usr/lib64/python2.7/site-packages/cffi/cparser.pyt_preprocess_extern_pythonUs4
	

c	Cs�tjd|�}i}xKtj|�D]:}|j�\}}|jdd�j�}|||<q(Wtjd|�}tjdkr�t	|�}nt
jd|�}tjd|�}tjd|�}t
|�}tjd|�}ttj|��}x�tt|��D]�\}}|j�}||dkrw|jd	||j��}d
|| |||df}qd|| |||df}qW|jd	d
�|fS(Nt s\
R
s2.14s volatile volatile const(s volatile volatile const s[__dotdotdotarray__]t=s...s%s,__dotdotdot%d__ %sis%s __dotdotdot%d__ %ss __dotdotdot__ (t
_r_commenttsubt	_r_definetfinditertgroupstreplacetstripRt__version__R t_r_stdcall2t_r_stdcall1t_r_cdeclR*t_r_partial_arraytlistt_r_partial_enumt	enumeratetreversedRR&R(	RtmacrosRt	macronamet
macrovaluetmatchestnumbertptp2((s2/usr/lib64/python2.7/site-packages/cffi/cparser.pyt_preprocess�s0

cCsktt�}|jd�|jd�|jd�|jd�|jd�t�}t}d}d}x�tj|�D]�}||kr]|dkr�|rZ|j|�|j|�t}qZq]|dkr�t}d}q]|dkr�|d7}q]|dkr|d8}q]|dkrM|rZ|dkrZ|j|�|j|�qZq]|j|�n|}qxW|S(	NR$t,R
RttypedefiR
i(tsetRtaddtFalset_r_wordstfindalltdiscardR(Rtlook_for_wordst
words_usedt
is_typedeftparent
previous_wordtword((s2/usr/lib64/python2.7/site-packages/cffi/cparser.pyt_common_type_names�s>




	

	



tParsercBs
eZd�Zd�Zd�Zd�Zeeed�Zd�Zd�Z	d�Z
d�Zd	�Zd
�Z
d�Zd�Zed
d�Zd�Zdd�Zded�Zdd�Zd�Zded�Zd�Zed�Zd�Zd�Zd�ZRS(cCsUi|_t�|_d|_tj�|_i|_i|_g|_	d|_dS(Ni(t
_declarationsRGt_included_declarationst_anonymous_countertweakreftWeakKeyDictionaryt_structnode2typet_optionst_int_constantst_recompleteRt_uses_new_feature(tself((s2/usr/lib64/python2.7/site-packages/cffi/cparser.pyt__init__�s					c
CsSt|�\}}t|�}g}xMt|j�D]<}|jd�r4|d}|j|�|j|�q4q4W|t|�7}g|D]}d|^q�}|jd�|j|�dj|�}tdk	r�tj
�nzFyt�j|�}Wn)t
jjk
r'}	|j|	|�nXWdtdk	rEtj�nX|||fS(Nstypedef istypedef int %s;stypedef int __dotdotdot__;s
(RDRStsortedRURRRLRtlockRtacquireR	tparseRtc_parsert
ParseErrortconvert_pycparser_errortrelease(
R_RR=tctnt	typenamestnamettypenametcsourcelinestastte((s2/usr/lib64/python2.7/site-packages/cffi/cparser.pyt_parse�s.




cCs�d}t|�}|jd�r�d|dkr�|d|jdd�!}|j�r�t|d�}|j�}d|ko�t|�knr�||d}q�q�n|S(Nt:ii
(RtstrRR&tisdigittintt
splitlinesR(R_RoRtlinetmsgtlinenumRm((s2/usr/lib64/python2.7/site-packages/cffi/cparser.pyt_convert_pycparser_error
s"cCs]|j||�}t|�}|r=d|j�|f}n
d|f}tj|��dS(Nscannot parse "%s"
%ssparse error
%s(RyRrR3RR'(R_RoRRvRw((s2/usr/lib64/python2.7/site-packages/cffi/cparser.pyRgs
cCsI|j}z/i|d6|d6|d6|_|j|�Wd||_XdS(Ntoverridetpackedt	dllexport(R[t_internal_parse(R_RRzR{R|tprev_options((s2/usr/lib64/python2.7/site-packages/cffi/cparser.pyRd%s	

c

CsD|j|�\}}}|j|�t|j�}x!|D]}|jdkr;Pq;q;Wy�d|_x�|D]~}t|tjj	�r�|j
|�qkt|tjj�r�|js�tj
d|��nd}t|jjtjj�r|jjjddkr|j|�}n�t|jtjj�r�t|jjtjj�r�t|jjjtjj�r�|jjjjdgkr�tj|j�}n!|j|jd|j�\}}|jd|j|d|�qktj
d	|��qkWWnOtjk
r?}|j||�}	|	r9|jdd
|	f|_n�nXdS(Nt
__dotdotdot__t__cffi_extern_python_stops!typedef does not declare any nameii����Rkstypedef tqualssunrecognized constructs
    *** Err: %s(Rpt_process_macrostitertextRkt_inside_extern_pythont
isinstanceRtc_asttDeclt_parse_decltTypedefRR'ttypetIdentifierTypetnamest_get_unknown_typetPtrDecltTypeDeclRtunknown_ptr_typet_get_type_and_qualst_declaretFFIErrorRytargs(
R_RRnR=titeratortdeclR�trealtypeRoRw((s2/usr/lib64/python2.7/site-packages/cffi/cparser.pyR}/sD

	
		 cCsP||jkr?|j||kr&dStjd|f��n||j|<dS(Ns%multiple declarations of constant: %s(R\RR�(R_tkeytval((s2/usr/lib64/python2.7/site-packages/cffi/cparser.pyt_add_constantsYscCs�|j�jd�}|jd�}|r7|d}n|jd�rs|dkrs|jd�rsd|d}nt|d�}|r�|}n|j||�|jd||�dS(	Ntult-it0t0xt0oismacro (tlowertrstripRRtR�R�(R_Rktint_strtnegtpyvalue((s2/usr/lib64/python2.7/site-packages/cffi/cparser.pyt_add_integer_constantas

cCs�x�|j�D]|\}}|j�}tj|�rG|j||�q
|dkrj|jd||�q
tjd||||f��q
WdS(Ns...smacro s�only supports one of the following syntax:
  #define %s ...     (literally dot-dot-dot)
  #define %s NUMBER  (with NUMBER an integer constant, decimal/hex/octal)
got:
  #define %s %s(titemsR3t_r_int_literalRR�R�RR'(R_R=R�tvalue((s2/usr/lib64/python2.7/site-packages/cffi/cparser.pyR�pscCs~|j||�}|jjd�r-d}n6|jdkrEd}n|jdkr]d}nd}|j||j|�dS(NR|sdllexport_python t__cffi_extern_python_startsextern_python t!__cffi_extern_python_plus_c_startsextern_python_plus_c s	function (t_get_type_pointerR[tgetR�R�Rk(R_ttpR�R�ttag((s2/usr/lib64/python2.7/site-packages/cffi/cparser.pyt_declare_function�s			cCs�|j}t|tjj�rR|j|d|j�\}}|j|||�net|tjj�rz|j	d|�nnt|tjj
�r�|j	d|�nFt|tjj�r�|j	d|�n|js�tj
d|��n|jr�|j|dt�\}}|jr+|j|||�q�|j�r�t|d�r�t|jd�r�tj|jj�r�|j|j|jj�q�|j�rt|jtjj�r|jjd	krt|jjd�rtj|jjj�r|j|jd	|jjj�q�|tjkr?|jjd
�r?|j|_q�|jdkr`tj
d��n|tj@r�|jr�|j d
|j|d|�q�|j d|j|d|�ndS(NRktstructtuniontenums'construct does not declare any variabletpartial_length_oktinitR�R�t__cffi_extern_python_R�s<cannot declare constants or variables with 'extern "Python"'s	constant R�s	variable (!R�R�RR�tFuncDeclR�RkR�tStructt_get_struct_union_enum_typetUniontEnumRR'Rtis_raw_functiontis_integer_typethasattrR�R�RR�R�tUnaryOptoptexprRt	void_typeRR�tQ_CONSTt
is_array_typeR�(R_R�tnodeR�R�((s2/usr/lib64/python2.7/site-packages/cffi/cparser.pyR��sN					 cCs|j|�dS(Ni(tparse_type_and_quals(R_tcdecl((s2/usr/lib64/python2.7/site-packages/cffi/cparser.pyt
parse_type�scCsx|jd|�d \}}|jdjjjd}t|tjj�rht	j
d|jf��n|j|j�S(Nsvoid __dummy(
%s
);ii����isunknown identifier '%s'(
RpR�R�R�tparamsR�RR�tIDRR'RkR�(R_R�RnR=texprnode((s2/usr/lib64/python2.7/site-packages/cffi/cparser.pyR��s
icCs�||jkrl|j|\}}||kr>||kr>dS|jjd�sltjd|f��qln||f|j|<|r�|jj|�ndS(NRzsPmultiple declarations of %s (for interactive usage, try cdef(xx, override=True))(RUR[R�RR�RVRH(R_RktobjtincludedR�tprevobjt	prevquals((s2/usr/lib64/python2.7/site-packages/cffi/cparser.pyR��scCs�d}t|tjjtjjf�r�d|jkrF|tjO}nd|jkre|tjO}nd|jkr�|tj	O}q�n|S(Nitconsttvolatiletrestrict(
R�RR�R�R�R�RR�t
Q_VOLATILEt
Q_RESTRICT(R_R�R�((s2/usr/lib64/python2.7/site-packages/cffi/cparser.pyt_extract_quals�scCs�t|tj�r|j�St|tj�r�|jjd�r�|jdj�r�|jdkr�|dk	r�tj
|||�Stj||�S(Nt$i(R�RtRawFunctionTypetas_function_pointertStructOrUnionOrEnumRkRRst	forcenameRtNamedPointerTypetPointerType(R_R�R�tdeclname((s2/usr/lib64/python2.7/site-packages/cffi/cparser.pyR��s
%c
Cs�t|tjj�r�t|jtjj�r�t|jj�dkr�d|jjd|jkr�|jd|jjd\}}||j	|�O}||fSt|tjj
�r|jdkr�d}n|j
|jd|�}|j|jd|�\}}tj||�|fSt|tjj�rw|j|j�\}}|j||d|�}|j	|�}||fSt|tjj�r�|j	|�}|j}	t|	tjj�r4t|	j�}
|
ddgkr�i}xE|
r'|
d}|dkr#|j|d�d||<|
d=q�Pq�Wg}x>dD]6}
x-t|j|
d��D]}|j|
�qTWq5W|
s�dg}
n|
dgkr�d|ks�d	|kr�g}
q�n||
}
ndj|
�}|d
kr�tj|fS|dkrtjd|jj��nt||�\}}|||BfSt|	tjj�rh|jd|	|�}||fSt|	tjj �r�|jd|	|�}||fSt|	tjj!�r�|jd|	|�}||fSnt|tjj"�r�|j#||�dfSt|tjj�r2|jd||dt$�dfSt|tjj �rf|jd||dt$�dfStjd|jj��dS(Nistypedef iR�R�tsignedtchartshorttlongtunsignedRtR+tvoidRs:%d: bad usage of "..."R�R�R�tnesteds(:%d: bad or unsupported type declaration(R�slongR�R�(R�R�slong(%R�RR�R�R�R�RR�RUR�t	ArrayDecltdimRt_parse_constantR�Rt	ArrayTypeR�R�R9R�trangeRRR�RR�tcoordRvRR�R�R�R�R�t_parse_function_typeR(R_ttypenodeRkR�R�R�tlengthtitemtypet	itemqualsR�R�tprefixestnewnamestprefixRtidentttp0tquals0((s2/usr/lib64/python2.7/site-packages/cffi/cparser.pyR��s�!
	
		




	




	c
Cs�tt|jdg��}x^t|�D]P\}}t|d�s(tjd|pUd|dt|dd�f��q(q(Wt|�dko�t|d	j	t
jj�o�t|d	j	j	t
jj
�o�|d	j	j	jd
gk}|r|j�|stjd|p
d��qng|D]!}|j|j|j	��^q!}|rj|tjgkrjg}n|j|j	�\}	}
d}t|j	d�r�|j	jd
dddgkr�d}q�ntjt|�|	||�S(NR�R�st%s arg %d: unknown type '%s' (if you meant to use the old C syntax of giving untyped arguments, it is not supported)s
in expressioniRkt?ii����Rs=%s: a function with only '(...)' as argument is not correct CR�i����R�R�t	__stdcall(R9tgetattrR�R;R�RR'RR�R�RR�R�R�R�tpopt_as_func_argR�RR�RR�R�ttuple(R_R�tfuncnameR�RtargtellipsistargdeclnodeR�tresultR�tabi((s2/usr/lib64/python2.7/site-packages/cffi/cparser.pyR�Ks6	 
+	cCsIt|tj�r%tj|j|�St|tj�rA|j�S|SdS(N(R�RR�R�titemR�R�(R_R�R�((s2/usr/lib64/python2.7/site-packages/cffi/cparser.pyR�ns

cCs]y|j|SWntk
r"nX|}|j}|dkr||dk	rWd|}n|jd7_d|j}d}n1|}d||f}|jj|d�\}}	|dkr{|dkr�tj|ddd�}ny|dkrtj	|ddd�}nR|dkrF|dkr.t
d	��n|j||j�}nt
d
|f��|dk	r�|j||�q�n.|dkr�|jdk	r�td|��n|js�|j|�n|jr�d|jkr�|jd
|j|�n||j|<|dkr|S|jdkr$|S|jdk	rItj
d|��ng}
g}g}g}
x2|jD]'}t|jtjj�r�dj|jj�dkr�|j||�qkn|jdkr�d}n|j|j�}t|_ |j!|jdt"�\}}|j r'|j||�nt|tj�rU|j#rU|j||�n|
j$|jpgd�|j$|�|j$|�|
j$|�qkWt%|
�|_t%|�|_&t%|�|_'t%|
�|_(|dgt)|�krt|tj�r|j#rtd|f��qn|j*jd�|_+|j,rYd|_,|j-j$|�n|S(Ns$%sis$%ds%s %sR�R�R�Rs!Enums cannot be declared with ...s	kind = %rs^enum %s: the '{}' declaration should appear on the first time the enum is mentioned, not laterR�sanonymous %ss"duplicate declaration of struct %sR
i����R�s#%s: using both bitfields and '...;'R{i(NN(.RZtKeyErrorRkRRWRUR�Rt
StructTypet	UnionTypeR't_build_enum_typetvaluestAssertionErrorR�R(R�tforce_the_nametdeclstfldnamesRR�R�RR�R�RR�t
_make_partialtbitsizeR�RIt_partial_lengthR�RtpartialRR�tfldtypest
fldbitsizetfldqualsRR[R{t	completedR](R_tkindR�RkR�t
force_namet
explicit_nameR�R�t_RRRRR�R
tfqual((s2/usr/lib64/python2.7/site-packages/cffi/cparser.pyR�vs�	

	

	
	
			

		cCsbt|tj�s+tjd|f��n|j�rU|rUtd|f��nt|_dS(Ns%s cannot be partials%s is partial but has no C name(	R�Rt
StructOrUnionRR't
has_c_nameR(RR(R_R�R�((s2/usr/lib64/python2.7/site-packages/cffi/cparser.pyR�s
cCst|tjj�r
|j}|jd�re|jd�sK|jd�rXt|d�St|d�Sd|dko�dknr�t|d	�S|dd
kr�|dd
kr�t|�dks�t|�d
kr�|ddkr�t|d�St	j
d|f��nt|tjj�rA|jdkrA|j
|j�St|tjj�rv|jdkrv|j
|j�St|tjj�r�|j|jkr�|j|jS|r�t|tjj�r�|jdkr�t|_dSnt	jd|jj��dS(NR�R�t0Xiit1it9i
t'i����iiis\i����sinvalid constant %rt+R�t__dotdotdotarray__s...s?:%d: unsupported expression: expected a simple numeric constant(R�RR�tConstantR�RRtRtordRR'R�R�R�R�R�RkR\RRR�R�Rv(R_R�R�ts((s2/usr/lib64/python2.7/site-packages/cffi/cparser.pyR��s8	

 
 4		c	Cs|dk	r�t}g}g}d}x�|jD]�}tj|j�rRt}q.n|jdk	rv|j|j�}n|j	|j�|j	|�|j
|j|�|d7}q.Wt|�}t|�}tj
|||�}||_ntj
|dd�}|S(Nii(((RRItenumeratorst_r_enum_dotdotdotRRkRR�R�RR�R�RtEnumTypeR(	R_RR
RR$t
enumvaluest
nextenumvalueR�R�((s2/usr/lib64/python2.7/site-packages/cffi/cparser.pyRs*
cCs�xy|jj�D]h\}\}}|jd�r7qn|jdd�d}|dkr|j||d
td|�qqWx-|jj�D]\}}|j||�q�WdS(
Nsanonymous $enum_$R+iiR�R�R�t	anonymousRFR�R�(sstructsunionsenumR)stypedef(RUR�RtsplitR�RR\R�(R_totherRkR�R�Rtktv((s2/usr/lib64/python2.7/site-packages/cffi/cparser.pytinclude1s"#c	Cs�|jjj}t|�dkr1tj|j�S|d dgksW|d dgkrltj|j�}nOx:|d D].}|dkrwtjd|j	j
��qwqwWtj|j�}|jdkr�dd
j|d �|jf|_n|S(Nii����tfloattdoubleRtR�R�R�R�R�s:%d: bad usage of "..."s'typedef %s... %s'R+(sintsshortslongssignedsunsignedschar(R�R�RRtunknown_typeRktUnknownFloatTypeRR�R�RvtUnknownIntegerTypeR^RR(R_R�RjRtt((s2/usr/lib64/python2.7/site-packages/cffi/cparser.pyR�;s 		#N(t__name__t
__module__R`RpRyRgRIRdR}R�R�R�R�R�R�R�R�R�RR�R�R�R�R�RR�RR.R�(((s2/usr/lib64/python2.7/site-packages/cffi/cparser.pyRT�s2	
			

	*					2				^#	v	&		
(i(*R
RRtcommontypesRRRRtImportErrorRXtretsystversion_infotthreadt_threadt
allocate_lockRbRtcompiletDOTALLt	MULTILINER-R/R:R%R8RJRt
IGNORECASER�R6R5R7R%RR	R R*RDRStobjectRT(((s2/usr/lib64/python2.7/site-packages/cffi/cparser.pyt<module>sF
$

					*	2	3	(