Your IP : 216.73.216.60


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



.�Wɐ�@s
ddlmZmZddlmZmZyddlmZWnek
r`ddlZYnXddl	Z	ddl
Z
ddlZy:ejdkr�ddl
ZnddlZej�ZWnek
r�dZYnXe
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�Ze
jd�Z e
jd�Z!dd�Z"dd�Z#dd�Z$dd�Z%dd�Z&Gdd�de'�Z(dS) �)�api�model)�COMMON_TYPES�resolve_common_type)�
_pycparser�N�z/\*.*?\*/|//([^\n\\]|\\.)*?$z?^\s*#\s*define\s+([A-Za-z_][A-Za-z_0-9]*)\b((?:[^\n\\]|\\.)*?)$z=\s*\.\.\.\s*[,}]|\.\.\.\s*\}z__dotdotdot\d+__$z\[\s*\.\.\.\s*\]z\w+|\Sz-?0?x?[0-9a-f]+[lu]*$z\b(__stdcall|WINAPI)\bz[(]\s*(__stdcall|WINAPI)\bz\b__cdecl\bz9\bextern\s*"(Python|Python\s*\+\s*C|C\s*\+\s*Python)"\s*.z'[*]\s*((const|volatile|restrict)\b\s*)+cCstdkrtj�atS)N)�
_parser_cache�	pycparserZCParser�rr�?/opt/alt/python35/lib64/python3.5/site-packages/cffi/cparser.py�_get_parser%sr
cCshg}xEtj|�}|sP|j|d|j���|jd�d}|j|j��|j�}|jd|�r�|jd�|d7}d}|}x�|t|�kr'||}|dkr�|d7}n?|dkr|dkr�P|d8}n|dkr|dkrP|d7}q�W|||�|||d�}q	W|j|�dj|�S)N�(�)�*rrz,;=�)	�_r_star_const_space�search�append�start�group�end�
startswith�len�join)�csource�parts�match�closing�endpos�level�i�crrr�_workaround_for_old_pycparser+s<





&
r#cCs�g}x|tj|�}|sP|j�d}|j|d|j���d|jd�krq|jd�n
|jd�||dkr|jd|�}|dkr�tjd��|jd|d|�dkr�t	d	��|j||d|��||dd�}n\|jd
|�}|dkrEtjd��|j|||d��||dd�}|jd�q	W|j|�d
j
|�S)Nr�Cz(void __cffi_extern_python_plus_c_start; z!void __cffi_extern_python_start; �{�}rz!'extern "Python" {': no '}' foundz7cannot use { } inside a block 'extern "Python" { ... }'�;z'extern "Python": no ';' foundz  void __cffi_extern_python_stop;r)�_r_extern_pythonrrrrr�findr�	CDefError�NotImplementedErrorr)rrrrrZ	semicolonrrr�_preprocess_extern_pythonUs4


r,c	Cs�tjd|�}i}xKtj|�D]:}|j�\}}|jdd�j�}|||<q(Wtjd|�}tjdkr�t	|�}t
jd|�}tjd|�}tjd|�}t
|�}tjd|�}ttj|��}x�tt|��D]�\}}|j�}||dkr�|jd	||j��}||ksdt�d
|d|�|||dd�f}q|||d�d	ks�t�d|d|�|||dd�f}qW|jd	d
�|fS)N� z\
rz2.14z volatile volatile const(z volatile volatile const z[__dotdotdotarray__]�=z...z%s,__dotdotdot%d__ %srz%s __dotdotdot%d__ %sz __dotdotdot__ )�
_r_comment�sub�	_r_define�finditer�groups�replace�stripr
�__version__r#�_r_stdcall2�_r_stdcall1�_r_cdeclr,�_r_partial_array�list�_r_partial_enum�	enumerate�reversedrr)r�AssertionError)	r�macrosrZ	macronameZ
macrovalue�matches�number�p�p2rrr�_preprocess�s4 rEcCsbtt�}|jd�|jd�|jd�|jd�|jd�t�}d}d}d}x�tj|�D]�}||krT|dkr�|rT|j|�|j|�d}n�|dkr�d	}d}nz|dkr�|d
7}na|dkr|d
8}nH|dkrG|rT|dkrT|j|�|j|�n
|j|�|}qxW|S)Nr'�,rr�typedefFrrTr)�setr�add�_r_words�findall�discard)rZlook_for_wordsZ
words_usedZ
is_typedefZparenZ
previous_word�wordrrr�_common_type_names�s>




	

		




rNc@s`eZdZdd�Zdd�Zdd�Zdd�Zd	d	d	d
d�Zdd
�Zdd�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zd	ddd�Zdd �Zd!d"d#�Zd!d	d$d%�Zd!d&d'�Zd(d)�Zd!d	d*d+�Zd,d-�Zd	d.d/�Zd0d1�Zd2d3�Zd4d5�Zd!S)6�ParsercCsUi|_t�|_d|_tj�|_i|_i|_g|_	d|_
dS)Nr)�
_declarationsrH�_included_declarations�_anonymous_counter�weakref�WeakKeyDictionary�_structnode2type�_options�_int_constants�_recomplete�_uses_new_feature)�selfrrr�__init__�s					zParser.__init__c	CsXt|�\}}t|�}g}xPt|j�D]?}|jd�r4|dd�}|j|�|j|�q4W|t|�7}dd�|D�}|jd�|j|�dj|�}tdk	r�tj	�zXyt
�j|�}Wn;tj
jk
r/}z|j||�WYdd}~XnXWdtdk	rJtj�X|||fS)Nztypedef �cSsg|]}d|�qS)ztypedef int %s;r)�.0�typenamerrr�
<listcomp>�s	z!Parser._parse.<locals>.<listcomp>ztypedef int __dotdotdot__;�
)rErN�sortedrPrrrLr�lock�acquirer
�parser
Zc_parserZ
ParseError�convert_pycparser_error�release)	rZrr@Zctn�	typenames�name�csourcelines�ast�errr�_parse�s,



'z
Parser._parsecCs�d}t|�}|jd�r�d|dd�kr�|d|jdd��}|j�r�t|d�}|j�}d|ko�t|�knr�||d}|S)N�:r�
)�strrr)�isdigit�int�
splitlinesr)rZrkr�line�msgZlinenumrirrr�_convert_pycparser_error
s%"zParser._convert_pycparser_errorcCs]|j||�}t|�}|r=d|j�|f}n
d|f}tj|��dS)Nzcannot parse "%s"
%szparse error
%s)ruror5rr*)rZrkrrsrtrrrres
zParser.convert_pycparser_errorFcCsF|j}z,d|d|d|i|_|j|�Wd||_XdS)N�override�packed�	dllexport)rV�_internal_parse)rZrrvrwrxZprev_optionsrrrrd%s	zParser.parsec
CsM|j|�\}}}|j|�t|j�}x|D]}|jdkr;Pq;Wy�d|_x�|D]{}t|tjj	�r�|j
|�qht|tjj�r�|js�tj
d|��d}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|�qhtj
d	|��qhWWn^tjk
rH}z;|j||�}	|	r3|jdd
|	f|_�WYdd}~XnXdS)N�
__dotdotdot__�__cffi_extern_python_stopz!typedef does not declare any namerrrhztypedef �qualszunrecognized constructz
    *** Err: %s���)rl�_process_macros�iter�extrh�_inside_extern_python�
isinstancer
�c_astZDecl�_parse_declZTypedefrr*�type�IdentifierType�names�_get_unknown_type�PtrDecl�TypeDeclrZunknown_ptr_type�_get_type_and_quals�_declare�FFIErrorru�args)
rZrrjr@�iterator�declr|Zrealtyperkrtrrrry/sD

	
			 zParser._internal_parsecCsM||jkr<|j||kr&dStjd|f��||j|<dS)Nz%multiple declarations of constant: %s)rWrr�)rZ�key�valrrr�_add_constantsYszParser._add_constantscCs�|j�jd�}|jd�}|r:|dd�}|jd�ry|dkry|jd�ryd|dd�}t|d�}|r�|}|j||�|jd||�dS)	NZul�-r�0�0xZ0orzmacro )�lower�rstriprrqr�r�)rZrhZint_str�negZpyvaluerrr�_add_integer_constantaszParser._add_integer_constantcCs�x�|j�D]|\}}|j�}tj|�rG|j||�q
|dkrj|jd||�q
tjd||||f��q
WdS)Nz...zmacro z�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)�itemsr5�_r_int_literalrr�r�rr*)rZr@r��valuerrrr~pszParser._process_macroscCs~|j||�}|jjd�r-d}n6|jdkrEd}n|jdkr]d}nd}|j||j|�dS)Nrxzdllexport_python Z__cffi_extern_python_startzextern_python Z!__cffi_extern_python_plus_c_startzextern_python_plus_c z	function )�_get_type_pointerrV�getr�r�rh)rZ�tpr|r��tagrrr�_declare_function�s			zParser._declare_functioncCs�|j}t|tjj�rj|j|d|j�\}}t|tj�sTt	�|j
|||�n\t|tjj�r�|jd|�nkt|tjj
�r�|jd|�nCt|tjj�r�|jd|�n|js�tjd|��|jr�|j|dd�\}}|jr@|j
|||�n�|j�r�t|d�r�t|jd	�r�tj|jj�r�|j|j|jj�n(|j�r$t|jtjj�r$|jjd
kr$t|jjd	�r$tj|jjj�r$|j|jd
|jjj�n�|tjkrT|jjd�rT|j|_nr|jdkrrtjd
��|tj@r�|j r�|j!d|j|d|�n|j!d|j|d|�dS)Nrh�struct�union�enumz'construct does not declare any variable�partial_length_okT�initr�r�Z__cffi_extern_python_r{z<cannot declare constants or variables with 'extern "Python"'z	constant r|z	variable )"r�r�r
r��FuncDeclr�rhr�RawFunctionTyper?r��Struct�_get_struct_union_enum_type�Union�Enumrr*Zis_raw_functionZis_integer_type�hasattrr�r�rr�r��UnaryOp�op�expr�	void_typerr��Q_CONSTZ
is_array_typer�)rZr��noder�r|rrrr��sP							 zParser._parse_declcCs|j|�dS)Nr)�parse_type_and_quals)rZ�cdeclrrr�
parse_type�szParser.parse_typecCs�|jd|�dd�\}}|s0t�|jdjjjd}t|tjj	�rxt
jd|jf��|j
|j�S)Nzvoid __dummy(
%s
);�rrzunknown identifier '%s'r})rlr?r�r�r��paramsr�r
r��IDrr*rhr�)rZr�rjr@�exprnoderrrr��s#
zParser.parse_type_and_qualsrcCs�||jkrf|j|\}}||kr>||kr>dS|jjd�sftjd|f��d|j�ks~t�||f|j|<|r�|jj|�dS)NrvzPmultiple declarations of %s (for interactive usage, try cdef(xx, override=True))rz)	rPrVr�rr��splitr?rQrI)rZrh�obj�includedr|ZprevobjZ	prevqualsrrrr��s
zParser._declarecCsd}t|tjjtjjf�r{d|jkrC|tjO}d|jkr_|tjO}d|jkr{|tj	O}|S)Nr�const�volatileZrestrict)
r�r
r�r�r�r|rr�Z
Q_VOLATILEZ
Q_RESTRICT)rZr�r|rrr�_extract_quals�s


zParser._extract_qualsNcCs�t|tj�r|j�St|tj�r�|jjd�r�|jdd�j�r�|jdkr�|dk	r�tj	|||�Stj
||�S)N�$r)r�rr��as_function_pointerZStructOrUnionOrEnumrhrrp�	forcenameZNamedPointerType�PointerType)rZr�r|�declnamerrrr��s
+zParser._get_type_pointercCsqt|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�r%t|	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}
|
dgkr�d|ks�d	|kr�g}
||
}
dj|
�}|d
kr�tj|fS|dkrtjd|jj��t||�\}}|||BfSt|	tjj�rY|jd|	|�}||fSt|	tjj�r�|jd|	|�}||fSt|	tjj �r�|jd|	|�}||fSt|tjj!�r�|j"||�dfSt|tjj�r |jd||dd�dfSt|tjj�rT|jd||dd�dfStjd|jj��dS)Nrztypedef rr�r��signed�char�short�long�unsignedrqr-�voidrzz:%d: bad usage of "..."r�r�r��nestedTz(:%d: bad or unsupported type declaration)r�r�r�r�)r�r�r�)#r�r
r�r�r�r�rr�rPr�Z	ArrayDeclZdim�_parse_constantr�r�	ArrayTyper�r�r;r��rangerrr�rr��coordrsrr�r�r�r�r��_parse_function_type)rZ�typenoderhr�r�r|�lengthZitemtypeZ	itemqualsr�r��prefixesZnewnames�prefixr!�identZtp0Zquals0rrrr��s�!
	
		


	

	




	zParser._get_type_and_qualsc	s�tt|jdg��}x[t|�D]M\}}t|d�s(tjd|pUd|dt|dd�f��q(Wt|�dko�t|dj	t
jj�o�t|dj	j	t
jj
�o�|dj	j	jd	gk}|r|j�|stjd
|p
d���fdd�|D�}|rI|tjgkrIg}�j|j	�\}}	d}
t|j	d
�r�|j	jdd�dddgkr�d}
tjt|�|||
�S)Nr�r�zt%s arg %d: unknown type '%s' (if you meant to use the old C syntax of giving untyped arguments, it is not supported)z
in expressionrrh�?rrzz=%s: a function with only '(...)' as argument is not correct Ccs+g|]!}�j�j|j���qSr)�_as_func_argr�r�)r]Zargdeclnode)rZrrr_`s	z/Parser._parse_function_type.<locals>.<listcomp>r|rr�r�Z	__stdcallr}r}r}���)r;�getattrr�r=r�rr*rr�r�r
r�r�r�r��poprr�r�r|r��tuple)rZr��funcnamer�r!�argZellipsisr��resultr|Zabir)rZrr�Ks6	

%zParser._parse_function_typecCsIt|tj�r%tj|j|�St|tj�rA|j�S|SdS)N)r�rr�r��itemr�r�)rZr�r|rrrr�ns

zParser._as_func_argc
Cs:y|j|SWntk
r#YnX|}|j}|dkr}|dk	rXd|}n|jd7_d|j}d}n1|}d||f}|jj|d�\}}	|dkrv|dkr�tj|ddd�}nv|dkrtj|ddd�}nO|dkrD|dkr,t	d	��|j
||j�}ntd
|f��|dk	r�|j
||�n+|dkr�|jdk	r�td|��|js�|j|�|jr�d|jkr�|j
d
|j|�||j|<|dkr|S|jdkr|S|jdk	r8tj	d|��g}
g}g}g}
x)|jD]}t|jtjj�r�dj|jj�dkr�|j||�qZ|jdkr�d}n|j|j�}d|_|j|jdd�\}}|jr|j||�t|tj�r;|j r;|j||�|
j!|jpMd�|j!|�|j!|�|
j!|�qZWt"|
�|_t"|�|_#t"|�|_$t"|
�|_%|dgt&|�kr�t|tj�r�|j r�td|f��|j'jd�|_(|j)r6d|_)|j*j!|�|S)Nz$%srz$%dz%s %sr�r�r�rzz!Enums cannot be declared with ...z	kind = %rz^enum %s: the '{}' declaration should appear on the first time the enum is mentioned, not laterr�zanonymous %sz"duplicate declaration of struct %srFr�Tz#%s: using both bitfields and '...;'rwr)NNr}r})+rU�KeyErrorrhrRrPr�rZ
StructTypeZ	UnionTyper*�_build_enum_type�valuesr?r�r+r�Zforce_the_name�decls�fldnamesrr�r�r
r�r�rr��
_make_partial�bitsizer��_partial_lengthr��partialrr��fldtypes�
fldbitsize�fldqualsrrVrwZ	completedrX)rZ�kindr�rhr�Z
force_name�
explicit_namer�r��_r�r�r�r�r�r�Zfqualrrrr�vs�	

	

	
	

			


		z"Parser._get_struct_union_enum_typecCs\t|tj�s(tjd|f��|j�rO|rOtd|f��d|_dS)Nz%s cannot be partialz%s is partial but has no C nameT)r�rZ
StructOrUnionrr*Z
has_c_namer+r�)rZr�r�rrrr��s
zParser._make_partialcCs�t|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��t|tjj�r>|jdkr>|j
|j�St|tjj�rs|jdkrs|j
|j�St|tjj�r�|j|jkr�|j|jS|r�t|tjj�r�|jdkr�d|_dSt	jd|jj��dS)Nr�r�Z0X�r\�1r�9rn�'rr��\r�zinvalid constant %r�+r�Z__dotdotdotarray__Tz...z?:%d: unsupported expression: expected a simple numeric constantr}���)r�r
r�ZConstantr�rrqr�ordrr*r�r�r�r�r�rhrWr�r�r�rs)rZr�r��srrrr��s8	

 
 4		zParser._parse_constantc	Cs|dk	r�d}g}g}d}x�|jD]|}tj|j�rOd}q.|jdk	rp|j|j�}|j|j�|j|�|j|j|�|d7}q.Wt|�}t|�}t	j
|||�}||_nt	j
|ff�}|S)NFrTr)�enumerators�_r_enum_dotdotdotrrhr�r�rr�r�rZEnumTyper�)	rZr�r�r�r�Z
enumvaluesZ
nextenumvaluer�r�rrrr�s*
zParser._build_enum_typecCs�xs|jj�D]b\}\}}|jd�r4q|jdd�d}|d
kr|j||d
dd|�qWx-|jj�D]\}}|j||�q�WdS)Nzanonymous $enum_$r-rrr�r�r��	anonymousrGr�Tr|)r�r�r�r�rG)rPr�rr�r�rWr�)rZ�otherrhr�r|r��k�vrrr�include1s" zParser.includecCs|jjj}|ddks%t�t|�dkrGtj|j�S|dd�dgksy|dd�dgkr�tj|j�}nRx=|dd�D]+}|dkr�tj	d|j
j��q�Wtj|j�}|j
dkrdd
j|dd��|jf|_
|S)Nrrz�floatZdoublerqr�r�r�r�r�z:%d: bad usage of "..."z'typedef %s... %s'r-r}r}r}r})rqr�r�r�r�r�r})r�r�r?rrZunknown_typerhZUnknownFloatTyperr�r�rsZUnknownIntegerTyperYr)rZr�rgr��trrrr�;s"		&zParser._get_unknown_type)�__name__�
__module__�__qualname__r[rlrurerdryr�r�r~r�r�r�r�r�r�r�r�r�r�r�r�r�r�rr�rrrrrO�s2


*2	^#v&
rO)r))rrrZcommontypesrrrr
�ImportErrorrS�re�sys�version_info�thread�_thread�
allocate_lockrb�compile�DOTALL�	MULTILINEr/r1r<r�r:rJr	�
IGNORECASEr�r8r7r9r(rr
r#r,rErN�objectrOrrrr�<module>sF
$
			*23(