3
M •ZR™ ã @ 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 rˆddlZnddlZejƒ ZW n e
k
r² dZY nX dZejd ejejB ƒZejd
ejejB ƒZejdƒZejdƒZejd
ƒZejdƒZdaejdejƒZejdƒZ ejdƒZ!ejdƒZ"ejdƒZ#ejdƒZ$ejdƒZ%ejdƒZ&dd„ Z'dd„ Z(dd„ Z)dd„ Z*dd „ Z+G d!d"„ d"e,ƒZ-dS )$é )Úmodel)ÚCOMMON_TYPESÚresolve_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 }xòt j| ƒ}|sP |j| d |jƒ … ƒ |jdƒ d}|j|jƒ ƒ |jƒ }| jd|ƒrn|jdƒ |d7 }d}|}x`|t| ƒk rÖ| | }|dkrž|d7 }n.|dkrº|dkr°P |d8 }n|dkrÌ|dkrÌP |d7 }qxW | ||… | | |d … } qW |j| ƒ dj|ƒS )Nú(ú)Ú*r r z,;=Ú ) Ú_r_star_const_spaceÚsearchÚappendÚstartÚgroupÚendÚ
startswithÚlenÚjoin)ÚcsourceÚpartsÚmatchÚclosingÚendposÚlevelÚiÚcr r r
Ú_workaround_for_old_pycparser0 s<