HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux spn-python 5.15.0-89-generic #99-Ubuntu SMP Mon Oct 30 20:42:41 UTC 2023 x86_64
User: arjun (1000)
PHP: 8.1.2-1ubuntu2.20
Disabled: NONE
Upload Files
File: //home/arjun/projects/env/lib/python3.10/site-packages/cffi/__pycache__/cparser.cpython-310.pyc
o

%weǬ�@s�ddlmZddlmZmZddlmZmZzddlmZ	Wn
e
y+ddl	Z	YnwddlZddlZddl
Z
ze
jdkrCddlZnddlZe��ZWne
yWdZYnwdd	�Zd
Ze�dejejB�Ze�dejejB�Ze�d
ej�Ze�d�Ze�d�Ze�d�Ze�d�Zdae�dej �Z!e�d�Z"e�d�Z#e�d�Z$e�d�Z%e�d�Z&e�d�Z'e�d�Z(dd�Z)dd�Z*dd�Z+d d!�Z,d"d#�Z-d$d%�Z.d&d'�Z/d(d)�Z0d*d+�Z1Gd,d-�d-e2�Z3dS).�)�model)�COMMON_TYPES�resolve_common_type)�FFIError�	CDefError)�
_pycparser�N)�cCsddl}ddl}dS�Nr)�pycparser.yacctab�pycparser.lextab)�	pycparser�r�E/home/arjun/projects/env/lib/python3.10/site-packages/cffi/cparser.py�%_workaround_for_static_import_finderssrz<cdef source string>z/\*.*?\*/|//([^\n\\]|\\.)*?$z?^\s*#\s*define\s+([A-Za-z_][A-Za-z_0-9]*)\b((?:[^\n\\]|\\.)*?)$z^[ \t]*#[ \t]*(?:line|\d+)\b.*$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*)+z3(\b(int|long|short|signed|unsigned|char)\s*)+\.\.\.z\b(double|float)\s*\.\.\.cCstdurt��atS�N)�
_parser_cacher
�CParserrrrr�_get_parser2srcCsg}	t�|�}|sns|�|d|����|�d�d}|�|���|��}|�d|�r7|�d�|d7}d}|}|t|�kro||}|dkrN|d7}n|dkr\|dkrWn|d8}n	|dvre|dkren
|d7}|t|�ksA|||�|||d�}q|�|�d�|�S)	NT�(�)�*rrz,;=�)	�_r_star_const_space�search�append�start�group�end�
startswith�len�join)�csource�parts�match�closing�endpos�level�i�crrr�_workaround_for_old_pycparser8s<


��

r*cCs,g}	t�|�}|sn�|��d}|�|d|����d|�d�vr)|�d�n|�d�||dkre|�d|�}|dkrBtd	��|�d|d|�dkrQtd
��|�||d|��||dd�}n!|�d|�}|dkrstd��|�|||d��||dd�}|�d
�q|�|�d�	|�S)NTr�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�NotImplementedErrorr!)r"r#r$r&r%�	semicolonrrr�_preprocess_extern_pythonbs6



�
!
r3cCsLd|vrdS|��D]}d|vr#|���d�s#ddl}|�d�dSq
dS)N�"�#rz�String literal found in cdef() or type source. String literals are ignored here, but you should remove them anyway because some character sequences confuse pre-parsing.)�
splitlines�lstripr�warnings�warn)r"�liner8rrr�_warn_for_string_literal�s
��r;cCs(|jsddl}|�d|jf�dSdS)NrzrGlobal variable '%s' in cdef(): for consistency with C it should have a storage class specifier (usually 'extern'))�storager8r9�name)�declr8rrr�/_warn_for_non_extern_non_static_global_variable�s
��r?cs$g��fdd�}t�||�}|�fS)Ncst��}��|���d|S)Nz#line@%d)r rr)�mr(��line_directivesrr�replace�sz(_remove_line_directives.<locals>.replace��_r_line_directive�sub)r"rCrrAr�_remove_line_directives�srGcs�fdd�}t�||�S)Ncs.|��}|�d�s
td���t|dd��S)Nz#line@zBunexpected #line directive (should have been processed and removed�)rr�AssertionError�int)r@�srArrrC�s
z*_put_back_line_directives.<locals>.replacerD)r"rBrCrrAr�_put_back_line_directives�srLcCs�t|�\}}dd�}t�||�}i}t�|�D]}|��\}}|�dd���}|||<qt�d|�}tj	dkr;t
|�}t�d|�}t�d|�}t
�d|�}t|�}t|�t�d	|�}tt�|��}tt|��D]L\}}|��}	||	d
kr�|�d|	|���}
|
|	ks�J�d|d|	�|||
d
d�f}qh||	|	d
�dks�J�d|d|	�|||	d
d�f}qht�d|�}t�d|�}|�dd�}t||�}||fS)NcSsd|���d�dS)N� �
)r�count)r@rrr�replace_keeping_newlines�sz-_preprocess.<locals>.replace_keeping_newlinesz\
rz2.14z volatile volatile const(z volatile volatile const rMz[__dotdotdotarray__]�=�...z%s,__dotdotdot%d__ %sr	z%s __dotdotdot%d__ %sz __dotdotdotint__ z __dotdotdotfloat__ z __dotdotdot__ )rG�
_r_commentrF�	_r_define�finditer�groupsrC�stripr
�__version__r*�_r_stdcall2�_r_stdcall1�_r_cdeclr3r;�_r_partial_array�list�_r_partial_enum�	enumerate�reversedrr0r�_r_int_dotdotdot�_r_float_dotdotdotrL)r"rBrP�macrosr$�	macroname�
macrovalue�matches�number�p�p2rrr�_preprocess�sF

��
rjcCs�tt�}|�d�|�d�|�d�|�d�|�d�t�}d}d}d}t�|�D]P}||vry|dkrD|rC|�|�|�|�d}n5|dkrMd	}d}n,|dkrV|d
7}n#|dkr_|d
8}n|dkrt|rs|dkrs|�|�|�|�n|�|�|}q+|S)Nr.�,rr�typedefFrrTr)�setr�add�_r_words�findall�discard)r"�look_for_words�
words_used�
is_typedef�paren�
previous_word�wordrrr�_common_type_names�sB






�



�
rxc@s�eZdZdd�Zdd�Zdd�Zdd�Z	
		d:dd�Zd
d�Zdd�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zd;dd�Zd d!�Zd<d"d#�Z			
d=d$d%�Zd<d&d'�Zd(d)�Zd>d*d+�Zd,d-�Zd?d.d/�Zd0d1�Zd2d3�Zd4d5�Zd6d7�Zd8d9�Zd
S)@�ParsercCs:i|_t�|_d|_t��|_i|_i|_g|_	d|_
dSr
)�
_declarationsrm�_included_declarations�_anonymous_counter�weakref�WeakKeyDictionary�_structnode2type�_options�_int_constants�_recomplete�_uses_new_feature��selfrrr�__init__)s

zParser.__init__c
Cs<t|�\}}t|�}g}t|j�D]}|�d�r(|dd�}|�|�|�|�q|t|�7}g}|�d�|D]	}|�d|�q8|�d�|�dtf�|�|�d�|�}t	durat	�
�z-zt��|�}	Wnt
jjy�}
z|�|
|�WYd}
~
nd}
~
wwWt	dur�t	��n
t	dur�t	��ww|	||fS)N�typedef �z*# 1 "<cdef automatic initialization code>"ztypedef int %s;z@typedef int __dotdotdotint__, __dotdotdotfloat__, __dotdotdot__;z# 1 "%s"rN)rjrx�sortedrzrrrq�CDEF_SOURCE_STRINGr!�lock�acquirer�parser
�c_parser�
ParseError�convert_pycparser_error�release)r�r"rc�ctn�	typenamesr=�csourcelines�typename�fullcsource�ast�errr�_parse3sD


�



�����
�
z
Parser._parsecCshd}t|�}t�dtf|�}|r2t|�d�d�}|��}d|kr)t|�kr2n|S||d}|S)Nz	%s:(\d+):r�
)�str�rer$r�rJrr6r )r�r�r"r:�msgr$�linenumr�rrr�_convert_pycparser_errorYs�zParser._convert_pycparser_errorcCsB|�||�}t|�}|rd|��|f}t|��d|f}t|��)Nzcannot parse "%s"
%szparse error
%s)r�r�rWr)r�r�r"r:r�rrrr�gs
�zParser.convert_pycparser_errorFNcCs~|r|dkr
td��|rtd��d}n|r#||d@r"td|f��nd}|j}z|||d�|_|�|�W||_dS||_w)NTzB'packed' should be False or True; use 'pack' to give another valuez$cannot give both 'pack' and 'packed'rz%'pack' must be a power of two, not %rr)�override�packed�	dllexport)�
ValueErrorr��_internal_parse)r�r"r�r��packr��prev_optionsrrrr�qs*���zParser.parsec
Cs�|�|�\}}}|�|�t|j�}|D]	}|jdkrnqJ�d}z�d|_|D]�}|}t|tjj	�r9|�
|�q(t|tjj�r�|jsHtd|��d}t|j
j
tjj�rc|j
j
jd�d�rc|�|�}n=t|j
tjj�r�t|j
j
tjj�r�t|j
j
j
tjj�r�|j
j
j
jd�d�r�|�|�}n|j|j
|jdd|jfd	�\}}|jd
|j||d�q(|jjdkr�q(td
|jj|��WdSty�}	zt|	j�dkr�|	j|f|	_�d}	~	wty�}	z|�|	|�}
|
r�|	jdd|
f|	_�d}	~	ww)N�
__dotdotdot__r�__cffi_extern_python_stopz!typedef does not declare any name����__dotdotdotTz*(%s *)0)r=�partial_length_ok�typedef_exampler���quals�PragmazBunexpected <%s>: this construct is valid C but not valid in cdef()rz
    *** Err: %s)r��_process_macros�iter�extr=�_inside_extern_python�
isinstancer
�c_ast�Decl�_parse_decl�Typedefr�type�IdentifierType�namesr�_get_unknown_type�PtrDecl�TypeDecl�_get_unknown_ptr_type�_get_type_and_quals�_declare�	__class__�__name__r �argsrr�)r�r"r�rc�iteratorr>�current_declr��realtyper�r�rrrr��sx


����
���


�������zParser._internal_parsecCs8||jvr|j||krdStd|f��||j|<dS)Nz%multiple declarations of constant: %s)r�r)r��key�valrrr�_add_constants�s
�zParser._add_constantscCs�|���d�}|�d�}|r|dd�}|�d�r*|dkr*|�d�s*d|dd�}t|d�}|r4|}|�||�|�d||�dS)	N�ul�-r�0�0x�0or�macro )�lower�rstriprrJr�r�)r�r=�int_str�neg�pyvaluerrr�_add_integer_constant�s
�
zParser._add_integer_constantcCsb|��D]*\}}|��}t�|�r|�||�q|dkr%|�d||�qtd||||f��dS)NrRr�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)�itemsrW�_r_int_literalr$r�r�r)r�rcr��valuerrrr��s

���zParser._process_macroscCsX|�||�}|j�d�rd}n|jdkrd}n
|jdkrd}nd}|�||j|�dS)Nr�zdllexport_python �__cffi_extern_python_startzextern_python �!__cffi_extern_python_plus_c_startzextern_python_plus_c z	function )�_get_type_pointerr��getr�r�r=)r��tpr�r>�tagrrr�_declare_function�s

zParser._declare_functioncCs|j}t|tjj�r%|j||jd�\}}t|tj�sJ�|�	|||�dSt|tjj
�r3|�d|�n$t|tjj�rA|�d|�nt|tjj
�rO|�d|�n|jsWtd|��|jr�|j|dd�\}}|jro|�	|||�dS|��r�t|d�r�t|jd	�r�t�|jj�r�|�|j|jj�dS|��r�t|jtjj�r�|jjd
kr�t|jjd	�r�t�|jjj�r�|�|jd
|jjj�dS|tjur�|j�d�r�|j|_dS|jdkr�td
��|tj@r�|js�|jd|j||d�dSt |�|jd|j||d�dSdS)N)r=�struct�union�enumz'construct does not declare any variableT�r��initr�r��__cffi_extern_python_r�z<cannot declare constants or variables with 'extern "Python"'z	constant r�z	variable )!r�r�r
r��FuncDeclr�r=r�RawFunctionTyper��Struct�_get_struct_union_enum_type�Union�Enumr�is_raw_function�is_integer_type�hasattrr�r�r$r�r��UnaryOp�op�expr�	void_typerr��Q_CONST�
is_array_typer�r?)r�r>�noder�r�rrrr��sj�
��
������

�
��zParser._parse_declcCs|�|�dSr
)�parse_type_and_quals)r��cdeclrrr�
parse_type'szParser.parse_typecCs`|�d|�dd�\}}|rJ�|jdjjjd}t|tjj�r*t	d|j
f��|�|j�S)Nzvoid __dummy(
%s
);�r�rzunknown identifier '%s')r�r�r�r��paramsr�r
r��IDrr=r�)r�r�r�rc�exprnoderrrr�*szParser.parse_type_and_qualsrcCs|||jvr#|j|\}}||ur||krdS|j�d�s#td|f��d|��vs+J�||f|j|<|r<|j�|�dSdS)Nr�zPmultiple declarations of %s (for interactive usage, try cdef(xx, override=True))r�)rzr�r�r�splitr{rn)r�r=�obj�includedr��prevobj�	prevqualsrrrr�2s
���zParser._declarecCsZd}t|tjjtjjf�r+d|jvr|tjO}d|jvr!|tjO}d|jvr+|tj	O}|S)Nr�const�volatile�restrict)
r�r
r�r�r�r�rr��
Q_VOLATILE�
Q_RESTRICT�r�r�r�rrr�_extract_quals@s
�





zParser._extract_qualscCsjt|tj�r
|��St|tj�r/|j�d�r/|jdd���r/|jdur/|dur/t�	|||�St�
||�S)N�$r)r�rr��as_function_pointer�StructOrUnionOrEnumr=r�isdigit�	forcename�NamedPointerType�PointerType)r�r�r��declnamerrrr�Ls
��zParser._get_type_pointercCsPt|tjj�r:t|jtjj�r:t|jj�dkr:d|jjd|jvr:|jd|jjd\}}||�	|�O}||fSt|tjj
�ru|jdurId}n|j|j|d�}|durb|dkr^d|f}d|}|j
|j||d�\}}t�||�|fSt|tjj�r�|�
|j�\}}	|j||	|d	�}|�	|�}||fSt|tjj��rj|�	|�}|j}
t|
tjj��r1t|
j�}|d
dgk�ri}|r�|d}|dvr�|�|d�d||<|d=nn|s�g}
d
D]}t|�|d��D]}|
�|�q�q�|s�dg}|dgk�rd|v�sd|v�rg}|
|}d�|�}|dk�rtj|fS|dk�r$td|jj��t||�\}}|||BfSt|
tjj��rD|�d|
|�}||fSt|
tjj��rW|�d|
|�}||fSt|
tjj��rj|�d|
|�}||fSt|tjj ��rz|�!||�dfSt|tjj��r�|jd||dd�dfSt|tjj��r�|jd||dd�dfStd|jj��)Nrr�rr�rRz_cffi_array_len(%s)r)r�r�)r�signed�char)�short�longr�unsigned)rrrrJrrrM�voidr�z:%d: bad usage of "..."r�r�r�T)�nestedz(:%d: bad or unsupported type declaration)"r�r
r�r�r�r�r r�rzr	�	ArrayDecl�dim�_parse_constantr�r�	ArrayTyper�r�r]r��rangerr!r�r�coordr:rr�r�r�r�r��_parse_function_type)r��typenoder=r�r�r�r��length�itemtype�	itemqualsr�r��prefixes�newnames�prefixr(�ident�tp0�quals0rrrr�Us��
�

�


��



�
��
���zParser._get_type_and_qualsc	s0tt|jdg��}t|�D]\}}t|d�s'td|pd|dt|dd�f��q
t|�dkoLt|d	jt	j
j�oLt|d	jjt	j
j�oL|d	jjj
d
gk}|r]|��|s]td|pZd���fdd
�|D�}|sp|tjgkrpg}��|j�\}}	d}
t|jd�r�|jjdd�gd�kr�d}
t�t|�|||
�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 expressionrr=�?rr�r�z=%s: a function with only '(...)' as argument is not correct Ccsg|]}�j��|j���qSr)�_as_func_argr�r�)�.0�argdeclnoder�rr�
<listcomp>�s�z/Parser._parse_function_type.<locals>.<listcomp>r����)rrr�	__stdcall)r]�getattrr�r_r�rr r�r�r
r�r�r�r��poprr�r�r�r��tuple)r�r �funcnamer�r(�arg�ellipsisr��resultr��abirr�rr�sJ

���������
�zParser._parse_function_typecCs2t|tj�r
t�|j|�St|tj�r|��S|Sr)r�rrr�itemr�rrrrrr+�s
zParser._as_func_argcCs
z|j|WStyYnw|}|j}|dur1|dur"d|}n|jd7_d|j}d}n|}d||f}|j�|d�\}}	|dur�|dkrSt�|ddd�}n(|dkr`t�|ddd�}n|dkrt|d	krlt	d
��|�
||j�}ntd|f��|dur�|�
||�n|dkr�|jdur�td|��|js�|�|�|jr�d
|jvr�|�
d|j|�||j|<|dkr�|S|jdur�|S|jdur�t	d|��g}
g}g}g}
|jD]h}t|jtjj�r�d�|jj�d	kr�|�||�q�|jdur�d}n|�|j�}d|_|j|jdd�\}}|j�r|�||�t|tj��r&|j�r&|�||�|
� |j�p-d�|� |�|� |�|
� |�q�t!|
�|_t!|�|_"t!|�|_#t!|
�|_$|dgt%|�k�rot|tj��ro|j�rotd|f��|j&�d�|_'|j(�r�d|_(|j)� |�|S)Nz$%srz$%dz%s %s)NNr�r�r�r�z!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 %srr�FTr�z#%s: using both bitfields and '...;'r�r)*r�KeyErrorr=r|rzr�r�
StructType�	UnionTyper�_build_enum_type�valuesrIr�r1r�force_the_name�decls�fldnamesr�r�r
r�r�r!r��
_make_partial�bitsizer�_partial_lengthr��partialrr3�fldtypes�
fldbitsize�fldqualsr r�r��	completedr�)r��kindr�r=r�
force_name�
explicit_namer�r��_rArFrGrHr>rC�fqualrrrr��s�	�

���






�





�z"Parser._get_struct_union_enum_typecCs>t|tj�s
td|f��|��s|std|f��d|_dS)Nz%s cannot be partialz%s is partial but has no C nameT)r�r�
StructOrUnionr�
has_c_namer1rE)r�r�rrrrrB_s

zParser._make_partialcCs�t|tjj�r�|j}d|dkrdkrgnnO|�d�}z|�d�r)t|d�WSt|d�WSty_t	|�dkr]|�
�dd�d	krLt|d
�YS|�
�dd�dkr]t|d�YSYnwtd|f��|dd
kr�|dd
kr�t	|�dks�t	|�dkr�|ddkr�t|d�Std|f��t|tjj
�r�|jdkr�|�|j�St|tjj
�r�|jdkr�|�|j�St|tjj�r�|j|jvr�|j|jSt|tjj�r�|jdkr�|r�d|_dStd|jj��t|tjj��re|�|j�}|�|j�}|jdk�r||S|jdk�r
||S|jdk�r||S|jdk�r#|�||�S|jdk�r3||�||�|S|jdk�r=||>S|jdk�rG||?S|jdk�rQ||@S|jdk�r[||BS|jd k�re||AStd!|jj��)"Nr�r�9�uUlLr�r�rr�r���0bzinvalid constant %r�'r�r	��\����+r��__dotdotdotarray__TrRzT:%d: unsupported '[...]' here, cannot derive the actual array length in this contextr�/�%z<<z>>�&�|�^z?:%d: unsupported expression: expected a simple numeric constant)r�r
r��Constantr�r�rrJr�r r�r�ordr�r�rr�r�r=r�rDrrr:�BinaryOp�left�right�_c_div)r�r�r�rKrcrdrrrrfs�

��$


��zParser._parse_constantcCs0||}|dk|dkAr||dkr|d7}|S)Nrrr)r��a�br7rrrre�sz
Parser._c_divc	Cs�|durPd}g}g}d}|jD],}t�|j�rd}q|jdur%|�|j�}|�|j�|�|�|�|j|�|d7}qt|�}t|�}t	�
|||�}||_|St	�
|dd�}|S)NFrTrr)�enumerators�_r_enum_dotdotdotr$r=r�rrr�r3r�EnumTyperE)	r�rLr@rErh�
enumvalues�
nextenumvaluer�r�rrrr=�s,



�zParser._build_enum_typecCsr|j��D]!\}\}}|�d�rq|�dd�d}|dvr&|j||d|d�q|j��D]
\}}|�||�q,dS)Nzanonymous $enum_$rMrr)r�r�r��	anonymousrlT)rr�)rzr�rr�r�r�r�)r��otherr=r�r�rJ�k�vrrr�include�s
��zParser.includecCs�|jjj}|dgkrt�|j�S|dgkr&|jdur d|j|_t�|j�S|dgkr<|jdur6d|j|_t�|j�Std|j	j
��)Nr��__dotdotdotint__z'typedef int... %s'�__dotdotdotfloat__z'typedef float... %s'�*:%d: unsupported usage of "..." in typedef)r�r�r�unknown_typer=r��UnknownIntegerType�UnknownFloatTyperrr:)r�r>r�rrrr��s





�zParser._get_unknown_typecCs.|jjjjdgkrt�|j�Std|jj��)Nr�rt)r�r�r�unknown_ptr_typer=rrr:)r�r>rrrr��s
�zParser._get_unknown_ptr_type)FFNF)Frr)NFN)NF)F)r��
__module__�__qualname__r�r�r�r�r�r�r�r�r�r�r�r�r�r�r	r�r�rr+r�rBrrer=rqr�r�rrrrry's@
&

�73

	
�
i#
v
I
ry)4rr�commontypesrr�errorrrrr
�ImportErrorr}r��sys�version_info�thread�_thread�
allocate_lockr�rr��compile�DOTALL�	MULTILINErSrTrEr^rir\ror�
IGNORECASEr�rZrYr[r/rrarbrr*r3r;r?rGrLrjrx�objectryrrrr�<module>sf�

�
�
�







�

*2
	B(