Viewing File: /opt/alt/python38/lib64/python3.8/site-packages/cffi/__pycache__/cparser.cpython-38.pyc

U

ل=^W@sddlmZddlmZmZddlmZmZzddlmZ	Wne
k
rXddl	Z	YnXddlZddlZddl
Z
z(e
jdkrddlZnddlZeZWne
k
rdZYnXdd	Zd
ZedejejBZedejejBZed
ZedZedZedZdaedejZ edZ!edZ"edZ#edZ$edZ%edZ&edZ'ddZ(ddZ)ddZ*dd Z+d!d"Z,d#d$Z-d%d&Z.Gd'd(d(e/Z0dS)))model)COMMON_TYPESresolve_common_type)FFIError	CDefError)
_pycparserN)cCsddl}ddl}dSNr)Zpycparser.yacctabZpycparser.lextab)	pycparserr/cparser.py%_workaround_for_static_import_finderssrz<cdef source string>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*)+z3(\b(int|long|short|signed|unsigned|char)\s*)+\.\.\.z\b(double|float)\s*\.\.\.cCstdkrtatSN)
_parser_cacherZCParserrrrr
_get_parser1srcCsg}t|}|sq||d||dd}|||}|d|rl|d|d7}d}|}|t|kr||}|dkr|d7}n.|dkr|dkrq|d8}n|dkr|dkrq|d7}qt||||||d}q||d|S)N()*rrz,;=)	_r_star_const_spacesearchappendstartgroupend
startswithlenjoin)csourcepartsmatchclosingendposlevelicrrr
_workaround_for_old_pycparser7s:






r'cCs,g}t|}|sq|d}||d|d|dkrR|dn
|d||dkr|d|}|dkrtd|d|d|dkrtd	|||d|||dd}nB|d
|}|dkrtd||||d||dd}|dq||d
	|S)NrCz(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_pythonrrrrrfindrNotImplementedErrorr)rr r!r#r"Z	semicolonrrr
_preprocess_extern_pythonas2



r/cCsJd|krdS|D]0}d|kr|dsddl}|dqFqdS)N"#rzString 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.)
splitlineslstriprwarningswarn)rliner4rrr
_warn_for_string_literals
r7cCs$|js ddl}|d|jfdS)NrzrGlobal variable '%s' in cdef(): for consistency with C it should have a storage class specifier (usually 'extern'))Zstorager4r5name)declr4rrr
/_warn_for_non_extern_non_static_global_variables
r:c	Cstd|}i}t|D](}|\}}|dd}|||<qtd|}tjdkrbt	|}t
d|}td|}td|}t
|}t|td|}tt|}tt|D]\}}|}||dkr|d	||}||kstd
|d||||ddf}q|||dd	ks6td|d||||ddf}qtd
|}td|}|d	d|fS)N z\
rz2.14z volatile volatile const(z volatile volatile const z[__dotdotdotarray__]=...z%s,__dotdotdot%d__ %sr	z%s __dotdotdot%d__ %sz __dotdotdotint__ z __dotdotdotfloat__ z __dotdotdot__ )
_r_commentsub	_r_definefinditergroupsreplacestripr__version__r'_r_stdcall2_r_stdcall1_r_cdeclr/r7_r_partial_arraylist_r_partial_enum	enumeratereversedrr-rAssertionError_r_int_dotdotdot_r_float_dotdotdot)	rmacrosr!Z	macronameZ
macrovalueZmatchesZnumberpZp2rrr
_preprocesss>

rScCstt}|d|d|d|d|dt}d}d}d}t|D]}||kr|dkr|r||||d}nj|dkrd	}d}nX|dkr|d
7}nF|dkr|d
8}n4|dkr|r|dkr||||n
|||}qV|S)Nr+,rrtypedefFrrTr)setradd_r_wordsfindalldiscard)rZlook_for_wordsZ
words_usedZ
is_typedefZparenZ
previous_wordZwordrrr
_common_type_namess>










r[c@seZdZddZddZddZddZd:ddZd
dZddZ	ddZ
ddZddZddZ
ddZddZd;ddZd d!Zd<d"d#Zd=d$d%Zd>d&d'Zd(d)Zd?d*d+Zd,d-Zd@d.d/Zd0d1Zd2d3Zd4d5Zd6d7Zd8d9Zd
S)AParsercCs:i|_t|_d|_t|_i|_i|_g|_	d|_
dSr
)
_declarationsrV_included_declarations_anonymous_counterweakrefWeakKeyDictionary_structnode2type_options_int_constants_recomplete_uses_new_featureselfrrr
__init__
s
zParser.__init__c
Cs,t|\}}t|}g}t|jD].}|dr"|dd}||||q"|t|7}g}|d|D]}|d|qp|d|dtf||d|}t	dk	rt	
zJzt
|}	Wn4tjjk
r}
z||
|W5d}
~
XYnXW5t	dk	r t	X|	||fS)Ntypedef z*# 1 "<cdef automatic initialization code>"ztypedef int %s;z@typedef int __dotdotdotint__, __dotdotdotfloat__, __dotdotdot__;z# 1 "%s"
)rSr[sortedr]rrrZCDEF_SOURCE_STRINGrlockacquirereleaserparserZc_parserZ
ParseErrorconvert_pycparser_error)rhrrQZctn	typenamesr8csourcelinestypenameZfullcsourceasterrr
_parses4





"

z
Parser._parsecCsfd}t|}tdtf|}|rbt|dd}|}d|krRt|krbnn||d}|S)Nz	%s:(\d+):r
)strrer!rnintrr2r)rhrxrr6msgr!Zlinenumrurrr
_convert_pycparser_error:szParser._convert_pycparser_errorcCs@|||}t|}|r*d||f}n
d|f}t|dS)Nzcannot parse "%s"
%szparse error
%s)rr{rDr)rhrxrr6r~rrr
rsHs
zParser.convert_pycparser_errorFNcCsz|r&|dkrtd|r tdd}n$|rF||d@rJtd|fnd}|j}z|||d|_||W5||_XdS)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)overridepacked	dllexport)
ValueErrorrc_internal_parse)rhrrrpackrZprev_optionsrrr
rrRs(zParser.parsec
Cs||\}}}||t|j}|D]}|jdkr(qDq(dsDtd}z<d|_|D]*}|}t|tj	j
rz||qVt|tj	jr`|jst
d|d}t|jjtj	jr|jjjddr||}nxt|jtj	jr0t|jjtj	jr0t|jjjtj	jr0|jjjjddr0||}n|j|j|jdd\}}|jd	|j||d
qV|jjdkrpqVt
d|jj|qVWnt
k
r}	z$t|	jd
kr|	j|f|	_W5d}	~	XYnNtk
r}	z.||	|}
|
r|	jdd|
f|	_W5d}	~	XYnXdS)N
__dotdotdot__r__cffi_extern_python_stopz!typedef does not declare any nameZ__dotdotdotT)r8partial_length_okrjqualsZPragmazBunexpected <%s>: this construct is valid C but not valid in cdef()rz
    *** Err: %s)ry_process_macrositerextr8rN_inside_extern_python
isinstancerc_astZDecl_parse_declZTypedefrtypeIdentifierTypenamesr_get_unknown_typePtrDeclTypeDecl_get_unknown_ptr_type_get_type_and_quals_declare	__class____name__rargsrr)rhrrwrQiteratorr9Zcurrent_declrZrealtyperxr~rrr
rjsp






zParser._internal_parsecCs8||jkr*|j||krdStd|f||j|<dS)Nz%multiple declarations of constant: %s)rdr)rhkeyvalrrr
_add_constantss
zParser._add_constantscCs|d}|d}|r(|dd}|drT|dkrT|dsTd|dd}t|d}|rh|}||||d||dS)	NZul-r00xZ0ormacro )lowerrstriprr}rr)rhr8Zint_strnegZpyvaluerrr
_add_integer_constants

zParser._add_integer_constantcCsd|D]V\}}|}t|r0|||q|dkrJ|d||qtd||||fqdS)Nr=rzonly 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)itemsrD_r_int_literalr!rrr)rhrQrvaluerrr
rs

zParser._process_macroscCsX|||}|jdrd}n$|jdkr.d}n|jdkr>d}nd}|||j|dS)Nrzdllexport_python Z__cffi_extern_python_startzextern_python Z!__cffi_extern_python_plus_c_startzextern_python_plus_c z	function )_get_type_pointerrcgetrrr8)rhtprr9tagrrr
_declare_functions

zParser._declare_functioncCs|j}t|tjjrJ|j||jd\}}t|tjs8t	|
|||nt|tjjrf|d|nHt|tjj
r|d|n,t|tjjr|d|n|jstd||jr|j|dd\}}|jr|
|||n0|r(t|dr(t|jd	r(t|jjr(||j|jjn|rt|jtjjr|jjd
krt|jjd	rt|jjjr||jd
|jjjn|tjkr|jdr|j|_n^|jdkrtd
|tj@r|js|j d|j||dnt!||j d|j||ddS)N)r8structunionenumz'construct does not declare any variableTrinitrrZ__cffi_extern_python_rz<cannot declare constants or variables with 'extern "Python"'z	constant rz	variable )"rrrrFuncDeclrr8rRawFunctionTyperNrStruct_get_struct_union_enum_typeUnionEnumrZis_raw_functionZis_integer_typehasattrrrr!rrUnaryOpopexpr	void_typerrQ_CONSTZ
is_array_typerr:)rhr9Znoderrrrr
rsj






zParser._parse_declcCs||dSr
)parse_type_and_quals)rhcdeclrrr

parse_typeszParser.parse_typecCs`|d|dd\}}|r"t|jdjjjd}t|tjj	rTt
d|jf||jS)Nzvoid __dummy(
%s
);rrzunknown identifier '%s')
ryrNrrrparamsrrrIDrr8r)rhrrwrQexprnoderrr
r
szParser.parse_type_and_qualsrcCsx||jkrF|j|\}}||kr,||kr,dS|jdsFtd|fd|ksVt||f|j|<|rt|j|dS)NrzPmultiple declarations of %s (for interactive usage, try cdef(xx, override=True))r)r]rcrrsplitrNr^rW)rhr8objincludedrZprevobjZ	prevqualsrrr
rs
zParser._declarecCsZd}t|tjjtjjfrVd|jkr.|tjO}d|jkrB|tjO}d|jkrV|tj	O}|S)NrconstvolatileZrestrict)
rrrrrrrrZ
Q_VOLATILEZ
Q_RESTRICTrhrrrrr
_extract_quals s






zParser._extract_qualscCsjt|tjr|St|tjr^|jdr^|jddr^|jdkr^|dk	r^t	|||St
||S)N$r)rrras_function_pointerZStructOrUnionOrEnumr8risdigit	forcenameZNamedPointerTypePointerType)rhrrdeclnamerrr
r,s
zParser._get_type_pointercCs>t|tjjrtt|jtjjrtt|jjdkrtd|jjd|jkrt|jd|jjd\}}||	|O}||fSt|tjj
r|jdkrd}n|j|j|d}|j
|j|d\}}t|||fSt|tjjr|
|j\}}|j|||d}|	|}||fSt|tjjr|	|}|j}	t|	tjjrLt|	j}
|
ddgkri}|
r|
d}|dkr||dd||<|
d=nqqTg}d	D](}
t||
dD]}||
qq|
sd
g}
|
d
gkrd|ksd|krg}
||
}
d
|
}|dkrtj|fS|dkr2td|jjt||\}}|||BfSt|	tjjrr|d|	|}||fSt|	tjjr|d|	|}||fSt|	tjjr|d|	|}||fSt|tjj r|!||dfSt|tjjr|jd||dddfSt|tjjr*|jd||dddfStd|jjdS)Nrrjrr)rsignedchar)shortlongrunsigned)rrrr}rrr;Zvoidrz:%d: bad usage of "..."rrrT)nestedz(:%d: bad or unsupported type declaration)"rrrrrrrrr]rZ	ArrayDeclZdim_parse_constantrr	ArrayTyperrrJrrangerrrrcoordr6rrrrrr_parse_function_type)rhtypenoder8rrrZlengthZitemtypeZ	itemqualsrrprefixesZnewnamesprefixr%ZidentZtp0Zquals0rrr
r5s











zParser._get_type_and_qualsc	s6tt|jdg}t|D]4\}}t|dstd|p6d|dt|ddfqt|dkot|d	jt	j
jot|d	jjt	j
jo|d	jjj
d
gk}|r||std|pdfdd
|D}|s|tjgkrg}|j\}}	d}
t|jdr"|jjdddddgkr"d}
tt||||
S)Nrrzt%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 expressionrr8?rrrz=%s: a function with only '(...)' as argument is not correct Ccsg|]}j|jqSr)_as_func_argrr).0Zargdeclnodergrr

<listcomp>sz/Parser._parse_function_type.<locals>.<listcomp>rrrZ	__stdcall)rJgetattrrrLrrrrrrrrrrpoprrrrrtuple)rhrfuncnamerr%argZellipsisrresultrZabirrgr
rsH


zParser._parse_function_typecCs6t|tjrt|j|St|tjr.|S|SdSr)rrrritemrrrrrr
rs
zParser._as_func_argcCs*z|j|WStk
r YnX|}|j}|dkrd|dk	rFd|}n|jd7_d|j}d}n"|}d||f}|j|d\}}	|dkr|dkrt|ddd}nP|dkrt|ddd}n6|dkr|d	krt	d
|
||j}ntd|f|dk	r4|
||n"|dkr4|jdk	r4td||jsF|||jrld
|jkrl|
d|j|||j|<|dkr|S|jdkr|S|jdk	rt	d|g}
g}g}g}
|jD]}t|jtjjrd|jjd	kr|||q|jdkrd}n||j}d|_|j|jdd\}}|jrH|||t|tjrj|jrj||||
 |jpxd| || ||
 |qt!|
|_t!||_"t!||_#t!|
|_$|dgt%|krt|tjr|jrtd|f|j&d|_'|j(r&d|_(|j) ||S)Nz$%srz$%dz%s %s)NNrrrrz!Enums cannot be declared with ...z	kind = %rz^enum %s: the '{}' declaration should appear on the first time the enum is mentioned, not laterrzanonymous %sz"duplicate declaration of struct %srrFTrz#%s: using both bitfields and '...;'rr)*rbKeyErrorr8r_r]rrZ
StructTypeZ	UnionTyper_build_enum_typevaluesrNrr.rZforce_the_namedeclsfldnamesrrrrrrr
_make_partialbitsizer_partial_lengthrpartialrrfldtypes
fldbitsizefldqualsrrcrZ	completedre)rhkindrr8rZ
force_name
explicit_namerr_rrrrr9rZfqualrrr
rs	















z"Parser._get_struct_union_enum_typecCs>t|tjstd|f|s4|s4td|fd|_dS)Nz%s cannot be partialz%s is partial but has no C nameT)rrZ
StructOrUnionrZ
has_c_namer.r)rhrrrrr
r4s
zParser._make_partialcCst|tjjr8|j}d|dkr.dkrnn|d}z&|drTt|dWSt|dWSWndtk
rt	|dkr|
ddd	krt|d
YS|
dddkrt|dYSYnXtd|fn`|dd
kr*|dd
kr*t	|dkst	|dkr*|ddkr*t|dStd|ft|tjj
r`|jdkr`||jSt|tjj
r|jdkr||jSt|tjjr|j|jkr|j|jSt|tjjr|jdkr|rd|_dStd|jjt|tjjr||j}||j}|jdkr,||S|jdkr@||S|jdkrT||S|jdkrl|||S|jdkr|||||S|jdkr||>S|jdkr||?S|jdkr||@S|jdkr||BS|jd kr||AStd!|jjdS)"Nrr9ZuUlLrkrzrrrZ0bzinvalid constant %r'rr	\+rZ__dotdotdotarray__Tr=zT:%d: unsupported '[...]' here, cannot derive the actual array length in this contextr/%z<<z>>&|^z?:%d: unsupported expression: expected a simple numeric constant)rrrZConstantrrrr}rrrrordrrrrrr8rdrrrr6ZBinaryOpleftright_c_div)rhrrsrrrrr
r;s





zParser._parse_constantcCs0||}|dk|dkAr,||dkr,|d7}|S)Nrrr)rhabrrrr
rsz
Parser._c_divc	Cs|dk	rd}g}g}d}|jD]X}t|jr4d}q|jdk	rJ||j}||j||||j||d7}qt|}t|}t	
|||}||_nt	
|dd}|S)NFrTrr)enumerators_r_enum_dotdotdotr!r8rrrrrrZEnumTyper)	rhrrrrZ
enumvaluesZ
nextenumvaluerrrrr
rs*



zParser._build_enum_typecCsr|jD]B\}\}}|dr"q
|ddd}|dkr
|j||d|dq
|jD]\}}|||qXdS)Nzanonymous $enum_$r;rr)rrrZ	anonymousrUT)rr)r]rrrrrdr)rhotherr8rrrkvrrr
includes
zParser.includecCs|jjj}|dgkr t|jS|dgkrL|jdkr@d|j|_t|jS|dgkrx|jdkrld|j|_t|jStd|j	j
dS)NrZ__dotdotdotint__z'typedef int... %s'Z__dotdotdotfloat__z'typedef float... %s'*:%d: unsupported usage of "..." in typedef)rrrZunknown_typer8rfZUnknownIntegerTypeZUnknownFloatTyperrr6)rhr9rtrrr
rs





zParser._get_unknown_typecCs2|jjjjdgkrt|jStd|jjdS)Nrr)rrrZunknown_ptr_typer8rrr6)rhr9rrr
rs
zParser._get_unknown_ptr_type)FFNF)Fr)N)NF)N)NF)F)r
__module____qualname__riryrrsrrrrrrrrrrrrrrrrrrrrrrrrrrrr
r\s:
&

63

	
^
#
v
I
r\)1rrZcommontypesrrerrorrrrrImportErrorr`r|sysversion_infothread_thread
allocate_lockrorrncompileDOTALL	MULTILINEr>r@rKrrIrXr
IGNORECASErrGrFrHr,rrOrPrr'r/r7r:rSr[objectr\rrrr
<module>sZ














*2:(
Back to Directory File Manager