3
MZR @ s d dl mZ d dlmZmZ d dlmZmZ yd dl mZ W n e
k
rX ddl Z Y nX ddlZddlZddl
Z
y(e
jd#k rddlZnddlZej ZW n e
k
r dZY nX dZejd ejejB Zejd
ejejB ZejdZejdZejd
ZejdZdaejdejZejdZ ejdZ!ejdZ"ejdZ#ejdZ$ejdZ%ejdZ&dd Z'dd Z(dd Z)dd Z*dd Z+G d!d" d"e,Z-dS )$ )model)COMMON_TYPESresolve_common_type)FFIError CDefError)
_pycparser N zz/\*.*?\*/|//([^\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*\.\.\.c C s t d krtj a t S )N)
_parser_cache pycparserZCParser r r /usr/lib64/python3.6/cparser.py_get_parser* s r c C s g }xt j| }|sP |j| d |j |jd d}|j|j |j }| jd|rn|jd |d7 }d}|}x`|t| k r| | }|dkr|d7 }n.|dkr|dkrP |d8 }n|dkr|dkrP |d7 }qxW | || | | |d } qW |j| dj|S )N()*r r z,;= ) _r_star_const_spacesearchappendstartgroupend
startswithlenjoin)csourcepartsmatchclosingendposlevelicr r r
_workaround_for_old_pycparser0 s<