zmc
2023-08-08 e792e9a60d958b93aef96050644f369feb25d61b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
U
L±dµ°ã@sÒddlmZddlmZmZddlmZmZzddlmZ    Wne
k
rXddl    Z    YnXddl Z ddl Z ddl Z z(e jdkrˆddlZnddlZe ¡ZWne
k
r²dZYnXdd    „Zd
Ze  d e je jB¡Ze  d e je jB¡Ze  d e j¡Ze  d¡Ze  d¡Ze  d¡Ze  d¡Zdae  de j ¡Z!e  d¡Z"e  d¡Z#e  d¡Z$e  d¡Z%e  d¡Z&e  d¡Z'e  d¡Z(dd„Z)dd„Z*dd„Z+d d!„Z,d"d#„Z-d$d%„Z.d&d'„Z/d(d)„Z0d*d+„Z1Gd,d-„d-e2ƒZ3dS).é)Úmodel)Ú COMMON_TYPESÚresolve_common_type)ÚFFIErrorÚ    CDefError)Ú
_pycparseréN)écCsddl}ddl}dS©Nr)Zpycparser.yacctabZpycparser.lextab)Ú    pycparser©r úCd:\z\workplace\vscode\pyvenv\venv\Lib\site-packages\cffi/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^[ \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*\.\.\.cCstdkrt ¡atS©N)Ú _parser_cacher ZCParserr r r r Ú _get_parser2srcCsg}t |¡}|sqð| |d| ¡…¡| d¡d}| | ¡¡| ¡}| d|¡rl| d¡|d7}d}|}|t|ƒkrÒ||}|dkrš|d7}n.|dkr¶|dkr¬qÒ|d8}n|dkrÈ|dkrÈqÒ|d7}qt|||…|||d…}q| |¡d |¡S)Nú(ú)Ú*rrz,;=Ú)    Ú_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_pycparser8s: 
 
 
 
 
 
 
r'cCs,g}t |¡}|sq| ¡d}| |d| ¡…¡d| d¡krR| d¡n
| d¡||dkrÊ| d|¡}|dkr„tdƒ‚| d|d|¡dkr¢td    ƒ‚| ||d|…¡||dd…}nB| d
|¡}|dkrætd ƒ‚| |||d…¡||dd…}| d ¡q| |¡d      |¡S)NrÚCz(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_pythonrrrrrÚfindrÚNotImplementedErrorr)rr r!r#r"Z    semicolonr r r Ú_preprocess_extern_pythonbs2 
 
 
r/cCsJd|kr dS| ¡D]0}d|kr| ¡ d¡sddl}| d¡qFqdS)Nú"ú#rz¨String 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.)Ú
splitlinesÚlstriprÚwarningsÚwarn)rÚliner4r r r Ú_warn_for_string_literal”s 
r7cCs$|js ddl}| d|jf¡dS)NrzrGlobal variable '%s' in cdef(): for consistency with C it should have a storage class specifier (usually 'extern'))Zstorager4r5Úname)Údeclr4r r r Ú/_warn_for_non_extern_non_static_global_variable s
þr:cs$g‰‡fdd„}t ||¡}|ˆfS)Ncstˆƒ}ˆ | ¡¡d|S)Nz#line@%d)rrr)Úmr%©Úline_directivesr r Úreplace­sz(_remove_line_directives.<locals>.replace©Ú_r_line_directiveÚsub)rr>r r<r Ú_remove_line_directives§s  rBcs‡fdd„}t ||¡S)Ncs.| ¡}| d¡stdƒ‚ˆt|dd…ƒS)Nz#line@zBunexpected #line directive (should have been processed and removedé)rrÚAssertionErrorÚint)r;Úsr<r r r>µs
z*_put_back_line_directives.<locals>.replacer?)rr=r>r r<r Ú_put_back_line_directives´s rGc Cs¦t|ƒ\}}dd„}t ||¡}i}t |¡D](}| ¡\}}| dd¡ ¡}|||<q.t d|¡}tj    dkrvt
|ƒ}t  d|¡}t  d|¡}t  d|¡}t|ƒ}t|ƒt d    |¡}tt |¡ƒ}tt|ƒƒD]ž\}}| ¡}    ||    d
kr2| d |    | ¡¡}
|
|    kst‚d |d|    …|||
d d…f}qÐ||    |    d …d ksLt‚d|d|    …|||    d d…f}qÐt d|¡}t d|¡}| d d¡}t||ƒ}||fS)NcSsd| ¡ d¡dS)Nú Ú
)rÚcount)r;r r r Úreplace_keeping_newlinesÃsz-_preprocess.<locals>.replace_keeping_newlinesz\
rz2.14z volatile volatile const(z volatile volatile const rHz[__dotdotdotarray__]ú=ú...z%s,__dotdotdot%d__ %sr    z%s __dotdotdot%d__ %sz __dotdotdotint__ z __dotdotdotfloat__ z __dotdotdot__ )rBÚ
_r_commentrAÚ    _r_defineÚfinditerÚgroupsr>Ústripr Ú __version__r'Ú _r_stdcall2Ú _r_stdcall1Ú_r_cdeclr/r7Ú_r_partial_arrayÚlistÚ_r_partial_enumÚ    enumerateÚreversedrr-rrDÚ_r_int_dotdotdotÚ_r_float_dotdotdotrG) rr=rKÚmacrosr!Z    macronameZ
macrovalueÚmatchesÚnumberÚpÚp2r r r Ú _preprocess½sF   
 
    ÿÿ   
rccCsüttƒ}| d¡| d¡| d¡| d¡| d¡tƒ}d}d}d}t |¡D] }||krò|dkrˆ|rò| |¡| |¡d}nj|dkršd    }d}nX|dkr¬|d
7}nF|dkr¾|d
8}n4|dkrè|rò|dkrò| |¡| |¡n
| |¡|}qV|S) Nr+ú,rrÚtypedefFrrTr)ÚsetrÚaddÚ_r_wordsÚfindallÚdiscard)rZlook_for_wordsZ
words_usedZ
is_typedefZparenZ previous_wordÚwordr r r Ú_common_type_namesÿs>
 
 
 
 
 
 
 
 
 
 
rlc@sòeZdZdd„Zdd„Zdd„Zdd„Zd:d d „Zd d„Zdd„Z    dd„Z
dd„Z dd„Z dd„Z dd„Zdd„Zd;dd„Zd d!„Zd<d"d#„Zd=d$d%„Zd>d&d'„Zd(d)„Zd?d*d+„Zd,d-„Zd@d.d/„Zd0d1„Zd2d3„Zd4d5„Zd6d7„Zd8d9„Zd
S)AÚParsercCs:i|_tƒ|_d|_t ¡|_i|_i|_g|_    d|_
dSr
) Ú _declarationsrfÚ_included_declarationsÚ_anonymous_counterÚweakrefÚWeakKeyDictionaryÚ_structnode2typeÚ_optionsÚ_int_constantsÚ _recompleteÚ_uses_new_feature©Úselfr r r Ú__init__)s
zParser.__init__c
Cs,t|ƒ\}}t|ƒ}g}t|jƒD].}| d¡r"|dd…}| |¡| |¡q"|t|ƒ7}g}| d¡|D]}| d|¡qp| d¡| dtf¡| |¡d |¡}t    dk    rÂt     
¡zJzt ƒ  |¡}    Wn4tjjk
r}
z| |
|¡W5d}
~
XYnXW5t    dk    r t      ¡X|    ||fS)Nútypedef éz*# 1 "<cdef automatic initialization code>"ztypedef int %s;z@typedef int __dotdotdotint__, __dotdotdotfloat__, __dotdotdot__;z# 1 "%s"rI)rcrlÚsortedrnrrrjÚCDEF_SOURCE_STRINGrÚlockÚacquireÚreleaserÚparser Zc_parserÚ
ParseErrorÚconvert_pycparser_error) ryrr^ZctnÚ    typenamesr8Ú csourcelinesÚtypenameZ fullcsourceÚastÚer r r Ú_parse3s4 
 
 
 
 
 
"
 
z Parser._parsecCsfd}t|ƒ}t dtf|¡}|rbt| d¡dƒ}| ¡}d|krRt|ƒkrbnn ||d}|S)Nz    %s:(\d+):ré
)ÚstrÚrer!r~rErr2r)ryr‰rr6Úmsgr!Úlinenumr†r r r Ú_convert_pycparser_errorYs zParser._convert_pycparser_errorcCs@| ||¡}t|ƒ}|r*d| ¡|f}n
d|f}t|ƒ‚dS)Nzcannot parse "%s"
%szparse error
%s)rrŒrRr)ryr‰rr6rŽr r r r„gs  
zParser.convert_pycparser_errorFNcCsz|r&|dkrtdƒ‚|r tdƒ‚d}n$|rF||d@rJtd|fƒ‚nd}|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)ÚoverrideÚpackedÚ    dllexport)Ú
ValueErrorrtÚ_internal_parse)ryrr‘r’Úpackr“Z prev_optionsr r r r‚qs( ÿþz Parser.parsec
Cs&| |¡\}}}| |¡t|jƒ}|D]}|jdkr(qDq(dsDt‚d}zFd|_|D]4}|}t|tj    j
ƒrz|  |¡qVt|tj    j ƒrj|jsšt d|ƒ‚d}t|jjtj    jƒrÐ|jjjd d¡rÐ| |¡}n‚t|jtj    jƒr0t|jjtj    jƒr0t|jjjtj    jƒr0|jjjjd d¡r0| |¡}n"|j|j|jdd|jfd    \}}|jd
|j||d qV|jjd krzqVt d |jj|ƒ‚qVWnt k
rÔ}    z$t|    jƒdkrÂ|    j|f|    _‚W5d}    ~    XYnNtk
r }    z.| |    |¡}
|
r|    jdd|
f|    _‚W5d}    ~    XYnXdS)NÚ __dotdotdot__rÚ__cffi_extern_python_stopz!typedef does not declare any nameéÿÿÿÿZ __dotdotdotTz*(%s *)0)r8Úpartial_length_okÚtypedef_exampler{©ÚqualsZPragmazBunexpected <%s>: this construct is valid C but not valid in cdef()rz
    *** Err: %s)rŠÚ_process_macrosÚiterÚextr8rDÚ_inside_extern_pythonÚ
isinstancer Úc_astZDeclÚ _parse_declZTypedefrÚtypeÚIdentifierTypeÚnamesrÚ_get_unknown_typeÚPtrDeclÚTypeDeclÚ_get_unknown_ptr_typeÚ_get_type_and_qualsÚ_declareÚ    __class__Ú__name__rÚargsrr) ryrrˆr^Úiteratorr9Z current_declrZrealtyper‰rŽr r r r•‰sr
 
 
 
 ÿÿ ÿ
ÿþü 
þ
þþ
 zParser._internal_parsecCs8||jkr*|j||krdStd|fƒ‚||j|<dS)Nz%multiple declarations of constant: %s)rur)ryÚkeyÚvalr r r Ú_add_constantsÀs
ÿzParser._add_constantscCsˆ| ¡ d¡}| d¡}|r(|dd…}| d¡rT|dkrT| d¡sTd|dd…}t|dƒ}|rh| }| ||¡| d||¡dS)    NÚulú-rÚ0Ú0xZ0orúmacro )ÚlowerÚrstriprrEr´r­)ryr8Zint_strÚnegZpyvaluer r r Ú_add_integer_constantÈs
 ÿ
 zParser._add_integer_constantcCsd| ¡D]V\}}| ¡}t |¡r0| ||¡q|dkrJ| d||¡qtd||||fƒ‚qdS)NrMr¹z¶only 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)ÚitemsrRÚ_r_int_literalr!r½r­r)ryr^r²Úvaluer r r rž×s
 
úÿzParser._process_macroscCsX| ||¡}|j d¡rd}n$|jdkr.d}n|jdkr>d}nd}| ||j|¡dS)Nr“zdllexport_python Z__cffi_extern_python_startzextern_python Z!__cffi_extern_python_plus_c_startzextern_python_plus_c z    function )Ú_get_type_pointerrtÚgetr¡r­r8)ryÚtprr9Útagr r r Ú_declare_functionès  
 
zParser._declare_functioncCs|j}t|tjjƒrJ|j||jd\}}t|tjƒs8t    ‚| 
|||¡nÆt|tjj ƒrf|  d|¡nHt|tjj ƒr‚|  d|¡n,t|tjjƒrž|  d|¡n|js®td|ƒ‚|jr|j|dd\}}|jrà| 
|||¡n0| ¡r(t|dƒr(t|jd    ƒr(t |jj¡r(| |j|jj¡nè| ¡rŽt|jtjjƒrŽ|jjd
krŽt|jjd    ƒrŽt |jjj¡rŽ| |jd
|jjj¡n‚|tjkr²|j d ¡r²|j|_n^|jd krÆtd ƒ‚|tj@rò|jsò|j d|j||dnt!|ƒ|j d|j||ddS)N)r8ÚstructÚunionÚenumz'construct does not declare any variableT©ršÚinitrÀr¶Z__cffi_extern_python_r˜z<cannot declare constants or variables with 'extern "Python"'z    constant rœz    variable )"r¥r¢r r£ÚFuncDeclr¬r8rÚRawFunctionTyperDrÅÚStructÚ_get_struct_union_enum_typeÚUnionÚEnumrZis_raw_functionZis_integer_typeÚhasattrrÊr¿r!rÀr½ÚUnaryOpÚopÚexprÚ    void_typerr¡ÚQ_CONSTZ is_array_typer­r:)ryr9ÚnoderÃrr r r r¤ôsjÿÿ
 
ÿ
þ ý
ÿ
þ ýü ÿ 
ÿ
 ÿzParser._parse_declcCs| |¡dSr
)Úparse_type_and_quals)ryÚcdeclr r r Ú
parse_type'szParser.parse_typecCs`| d|¡dd…\}}|r"t‚|jdjjjd}t|tjj    ƒrTt
d|j fƒ‚|  |j¡S)Nzvoid __dummy(
%s
);ér™rzunknown identifier '%s') rŠrDr r¥r°Úparamsr¢r r£ÚIDrr8r¬)ryrÙrˆr^Úexprnoder r r rØ*s zParser.parse_type_and_qualsrcCsx||jkrF|j|\}}||kr,||kr,dS|j d¡sFtd|fƒ‚d| ¡ksVt‚||f|j|<|rt|j |¡dS)Nr‘zPmultiple declarations of %s (for interactive usage, try cdef(xx, override=True))r—)rnrtrÂrÚsplitrDrorg)ryr8ÚobjÚincludedrZprevobjZ    prevqualsr r r r­2s
 ÿÿzParser._declarecCsZd}t|tjjtjjfƒrVd|jkr.|tjO}d|jkrB|tjO}d|jkrV|tj    O}|S)NrÚconstÚvolatileZrestrict)
r¢r r£rªr©rrrÖZ
Q_VOLATILEZ
Q_RESTRICT©ryr¥rr r r Ú_extract_quals@s
ÿ
 
 
 
 
 
zParser._extract_qualscCsjt|tjƒr| ¡St|tjƒr^|j d¡r^|jdd… ¡r^|jdkr^|dk    r^t     |||¡St 
||¡S)Nú$r) r¢rrÌÚas_function_pointerZStructOrUnionOrEnumr8rÚisdigitÚ    forcenameZNamedPointerTypeÚ PointerType)ryr¥rÚdeclnamer r r rÁLs  
ÿÿþþzParser._get_type_pointercCsbt|tjjƒrtt|jtjjƒrtt|jjƒdkrtd|jjd|jkrt|jd|jjd\}}||     |¡O}||fSt|tjj
ƒrê|j dkr’d}n|j |j |d}|dk    rÄ|dkr¼d|f}d|}|j |j||d\}}t ||¡|fSt|tjjƒr,|  |j¡\}}    |j||    |d    }|     |¡}||fSt|tjjƒrâ|     |¡}|j}
t|
tjjƒrpt|
jƒ} | d
d gkri} | r´| d}|d kr´|  |d¡d| |<| d=nq´qxg} d D](}t|  |d¡ƒD]}|  |¡qАq¼| sòdg} | dgkrd| ksd| krg} | | } d | ¡}|dkr<tj|fS|dkrVtd|jjƒ‚t||ƒ\}}|||BfSt|
tjjƒr–| d|
|¡}||fSt|
tjjƒr¼| d|
|¡}||fSt|
tjjƒrâ| d|
|¡}||fSt|tjj ƒr| !||¡dfSt|tjjƒr(|jd||dddfSt|tjjƒrN|jd||dddfStd|jjƒ‚dS)Nrr{rrÉrMz_cffi_array_len(%s)r)ršr›)rëÚsignedÚchar)ÚshortÚlongrìÚunsigned)rðrîrïrErîrïrHZvoidr—z:%d: bad usage of "..."rÆrÇrÈT)Únestedz(:%d: bad or unsupported type declaration)"r¢r r£rªr¥r¦rr§rnråZ    ArrayDeclZdimÚ_parse_constantr¬rÚ    ArrayTyper©rÁrXrÂÚrangerrrÕrÚcoordr6rrÍrÎrÏrÐrËÚ_parse_function_type)ryÚtypenoder8ršr›rÃrÚlengthZitemtypeZ    itemqualsr¥r§ÚprefixesZnewnamesÚprefixr%ÚidentZtp0Zquals0r r r r¬Us²ÿþý
ÿ
þ
 
 
 
 
 
 
 
 
ÿ 
ÿÿ
ÿÿÿzParser._get_type_and_qualsc     s6tt|jdgƒƒ}t|ƒD]4\}}t|dƒstd|p6d|dt|ddƒfƒ‚qt|ƒdko˜t|d    jt    j
j ƒo˜t|d    jjt    j
j ƒo˜|d    jjj d
gk}|rº| ¡|sºtd |p´dƒ‚‡fd d „|Dƒ}|sà|tjgkràg}ˆ |j¡\}}    d}
t|jdƒr"|jjdd…dddgkr"d}
t t|ƒ|||
¡S)NrÜr¥zt%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ú?rr™r—z=%s: a function with only '(...)' as argument is not correct Ccsg|]}ˆjˆ |j¡Ž‘qSr )Ú _as_func_argr¬r¥)Ú.0Z argdeclnoderxr r Ú
<listcomp>Ósÿz/Parser._parse_function_type.<locals>.<listcomp>réýÿÿÿrãrâZ    __stdcall)rXÚgetattrr°rZrÑrrr¢r¥r r£rªr¦r§ÚpoprrÕr¬rrÌÚtuple) ryr÷ÚfuncnamerÜr%ÚargZellipsisr°ÚresultrÚabir rxr rö¾sH
 
ÿý ÿ ÿþûÿÿ
ÿzParser._parse_function_typecCs6t|tjƒrt |j|¡St|tjƒr.| ¡S|SdSr)r¢rrórêÚitemrÌrçrär r r rýás
  zParser._as_func_argcCs*z |j|WStk
r YnX|}|j}|dkrd|dk    rFd|}n|jd7_d|j}d}n"|}d||f}|j |d¡\}}    |dkr|dkrªt |ddd¡}nP|dkrÄt |ddd¡}n6|dkrì|d    krÜt    d
ƒ‚| 
||j ¡}nt d |fƒ‚|dk    r4|  ||¡n"|dkr4|j dk    r4td |ƒ‚|jsF| |¡|jrld |jkrl|  d|j|¡||j|<|dkr„|S|jdkr”|S|jdk    r¬t    d|ƒ‚g}
g} g} g} |jD]Ú}t|jtjjƒrüd |jj¡d    krü| ||¡qÂ|jdkrd}n | |j¡}d|_|j|jdd\}}|jrH| ||¡t|tjƒrj|jrj| ||¡|
  |jpxd¡|   |¡|   |¡|   |¡qÂt!|
ƒ|_t!| ƒ|_"t!| ƒ|_#t!| ƒ|_$| dgt%| ƒkrþt|tjƒrþ|jrþtd|fƒ‚|j& d¡|_'|j(r&d|_(|j)  |¡|S)Nz$%srz$%dz%s %s)NNrÆrÇrÈr—z!Enums cannot be declared with ...z    kind = %rz^enum %s: the '{}' declaration should appear on the first time the enum is mentioned, not laterræz anonymous %sz"duplicate declaration of struct %srr™FTrÉz#%s: using both bitfields and '...;'r’r)*rsÚKeyErrorr8rprnrÂrZ
StructTypeZ    UnionTyperÚ_build_enum_typeÚvaluesrDr­r.réZforce_the_nameÚdeclsÚfldnamesr¢r¥r r£r¦rr§Ú _make_partialÚbitsizeròÚ_partial_lengthr¬ÚpartialrrÚfldtypesÚ
fldbitsizeÚfldqualsrrtr’Z    completedrv)ryÚkindr¥r8rñZ
force_nameÚ explicit_namerÃr²Ú_r rrrr9rZfqualr r r rÎés¦     
 
 
 
 
ÿÿ
 
 
 
ÿ   ÿ
 
 
 
 
 
 
ÿ z"Parser._get_struct_union_enum_typecCs>t|tjƒstd|fƒ‚| ¡s4|s4td|fƒ‚d|_dS)Nz%s cannot be partialz%s is partial but has no C nameT)r¢rZ StructOrUnionrZ
has_c_namer.r)ryrÃrñr r r r_s
  zParser._make_partialcCst|tjjƒr8|j}d|dkr.dkrØnn¦| d¡}z&| d¡rTt|dƒWSt|dƒWSWndtk
rÆt    |ƒdkrÂ| 
¡dd…d    kr t|d
ƒYS| 
¡dd…d krÂt|dƒYSYnXt d |fƒ‚n`|dd kr*|dd kr*t    |ƒdkst    |ƒdkr*|ddkr*t |dƒSt d |fƒ‚t|tjj ƒr`|jdkr`| |j¡St|tjj ƒrŠ|jdkrŠ| |j¡ St|tjjƒr´|j|jkr´|j|jSt|tjjƒrð|jdkrð|ràd|_dStd|jjƒ‚t|tjjƒrð| |j¡}| |j¡}|jdkr,||S|jdkr@||S|jdkrT||S|jdkrl| ||¡S|jdkrŒ|| ||¡|S|jdkr ||>S|jdkr´||?S|jdkrÈ||@S|jdkrÜ||BS|jd krð||AStd!|jjƒ‚dS)"Nr·rÚ9ZuUlLr|r‹rrÛr¸éÚ0bzinvalid constant %rú'r™r    éú\éþÿÿÿú+r¶Z__dotdotdotarray__TrMzT:%d: unsupported '[...]' here, cannot derive the actual array length in this contextrú/ú%z<<z>>ú&ú|ú^z?:%d: unsupported expression: expected a simple numeric constant)r¢r r£ÚConstantrÀr»rrEr”rrºrÚordrÒrÓròrÔrÝr8rurrrõr6ZBinaryOpÚleftÚrightÚ_c_div)ryrÞršrFr'r(r r r ròfsŽ
 
 
ÿ
ÿ
ÿ ÿ ÿ
ÿ ÿþ             ÿzParser._parse_constantcCs0||}|dk|dkAr,||dkr,|d7}|S)Nrrr )ryÚaÚbrr r r r)¯sz Parser._c_divc    Cs°|dk    ržd}g}g}d}|jD]X}t |j¡r4d}q|jdk    rJ| |j¡}| |j¡| |¡| |j|¡|d7}qt|ƒ}t|ƒ}t     
|||¡}||_ nt     
|dd¡}|S)NFrTrr ) Ú enumeratorsÚ_r_enum_dotdotdotr!r8rÀròrr´rrZEnumTyper)    ryrr rr,Z
enumvaluesZ nextenumvaluerÈrÃr r r r
µs*
 
 
 
zParser._build_enum_typecCsr|j ¡D]B\}\}}| d¡r"q
| dd¡d}|dkr
|j||d|dq
|j ¡D]\}}| ||¡qXdS)Nzanonymous $enum_$rHrr)rÆrÇrÈZ    anonymousreT)rár)rnr¾rrßr­rur´)ryÚotherr8rÃrrÚkÚvr r r ÚincludeÍs
zParser.includecCsŒ|jjj}|dgkr t |j¡S|dgkrL|jdkr@d|j|_t |j¡S|dgkrx|jdkrld|j|_t |j¡Std|j    j
ƒ‚dS)Nr—Z__dotdotdotint__z'typedef int... %s'Z__dotdotdotfloat__z'typedef float... %s'ú*:%d: unsupported usage of "..." in typedef) r¥r§rZ unknown_typer8rwZUnknownIntegerTypeZUnknownFloatTyperrõr6)ryr9r…r r r r¨×s
 
 
 
 
 
  ÿzParser._get_unknown_typecCs2|jjjjdgkrt |j¡Std|jjƒ‚dS)Nr—r2)r¥r§rZunknown_ptr_typer8rrõr6)ryr9r r r r«ês
 ÿzParser._get_unknown_ptr_type)FFNF)Fr)N)NFN)N)NF)F)r¯Ú
__module__Ú __qualname__rzrŠrr„r‚r•r´r½ržrÅr¤rÚrØr­rårÁr¬rörýrÎrròr)r
r1r¨r«r r r r rm's>
&
ÿ
7 3
 
    ÿ
i
#
v
I
rm)4rrZ commontypesrrÚerrorrrrr Ú ImportErrorrqrÚsysÚ version_infoÚthreadÚ_threadÚ allocate_lockrrr~ÚcompileÚDOTALLÚ    MULTILINErNrOr@rYr-rWrhrÚ
IGNORECASEr¿rUrTrVr,rr\r]rr'r/r7r:rBrGrcrlÚobjectrmr r r r Ú<module>s` 
 
 
 
ÿ
þ
 
 
 
 
 
 
 
ÿ
 
*2      B(