U
vf @ s d dl mZ d dlmZmZ d dlmZmZ zd dl mZ W n e
k
rX ddl Z Y nX ddlZddlZddl
Z
z(e
jdk rddlZnddlZe ZW n e
k
r dZY nX 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 ?/opt/alt/python38/lib64/python3.8/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 krt 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|dkr|dkrq|d7 }qt| || | | |d } q|| d|S )N()*r r z,;= ) _r_star_const_spacesearchappendstartgroupend
startswithlenjoin)csourcepartsmatchclosingendposlevelicr r r
_workaround_for_old_pycparser8 s:
r' c C s, g }t | }|sq| d }|| d | d|dkrR|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" semicolonr r r
_preprocess_extern_pythonb s2
r0 c C sJ d| krd S | D ]0}d|kr| 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 liner5 r r r
_warn_for_string_literal s
r8 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'))Zstorager5 r6 name)declr5 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= r
_remove_line_directives s rC c s fdd}t || S )Nc s. | }|dstd t|dd S )Nz#line@zBunexpected #line directive (should have been processed and removed )r r AssertionErrorint)r<