a
`Ǭ @ s d dl mZ d dlmZmZ d dlmZmZ zd dl mZ W n e
yV ddl Z Y n0 ddlZddlZddl
Z
z(e
jdk rddlZnddlZe ZW n e
y dZY n0 dd Zd
ZedejejB ZedejejB Zed
ejZedZedZedZedZdaedej Z!edZ"edZ#edZ$edZ%edZ&edZ'edZ(dd Z)dd Z*dd Z+d d! Z,d"d# Z-d$d% Z.d&d' Z/d(d) Z0d*d+ Z1G d,d- d-e2Z3dS ). )model)COMMON_TYPESresolve_common_type)FFIError CDefError)
_pycparser N) c C s dd l } dd l} d S Nr )Zpycparser.yacctabZpycparser.lextab) pycparser r 2/usr/lib64/python3.9/site-packages/cffi/cparser.py%_workaround_for_static_import_finders s r zz/\*.*?\*/|//([^\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*\.\.\.c C s t d u rt a t S N)
_parser_cacher ZCParserr r r r
_get_parser2 s r c C s g }t | }|sq|| d | |d d}|| | }| d|rl|d |d7 }d}|}|t| k r| | }|dkr|d7 }n.|dkr|dkrq|d8 }n|dv r|dkrq|d7 }qt| || | | |d } q|| d|S )N()*r r z,;= ) _r_star_const_spacesearchappendstartgroupend
startswithlenjoin)csourcepartsmatchclosingendposlevelicr r r
_workaround_for_old_pycparser8 s6
r' c C s, g }t | }|sq| d }|| d | d|dv rR|d n
|d | | dkr| d|}|dk rtd| d|d |dkrtd || |d | | |d d } nB| d
|}|dk rtd|| ||d | |d d } |d q|| d
|S )Nr Cz(void __cffi_extern_python_plus_c_start; z!void __cffi_extern_python_start; {}r z!'extern "Python" {': no '}' foundz7cannot use { } inside a block 'extern "Python" { ... }';z'extern "Python": no ';' foundz void __cffi_extern_python_stop;r )
_r_extern_pythonr r r r r findr NotImplementedErrorr )r r r! r# r" Z semicolonr r r
_preprocess_extern_pythonb s2
r/ c C sJ d| vrd S | D ]0}d|v r| dsdd l}|d qFqd S )N"#r zString 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.)
splitlineslstripr warningswarn)r liner4 r r r
_warn_for_string_literal s
r7 c C s$ | j s dd l}|d| jf d S )Nr zrGlobal variable '%s' in cdef(): for consistency with C it should have a storage class specifier (usually 'extern'))Zstorager4 r5 name)declr4 r r r
/_warn_for_non_extern_non_static_global_variable s
r: c s$ g fdd}t || } | fS )Nc s t } | d| S )Nz#line@%d)r r r )mr% line_directivesr r
replace s z(_remove_line_directives..replace_r_line_directivesub)r r> r r<