zmc
2023-12-22 9fdbf60165db0400c2e8e6be2dc6e88138ac719a
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
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
U
L±dƒã@s0ddlZddlZddlZddlmZmZddlmZddlTdZ    dZ
dZ ej d    kpdej d
kpdej d kZGd d „d ƒZGdd„dƒZGdd„dƒZGdd„dƒZGdd„dƒZGdd„dƒZej dkrÌejZnGdd„dejƒZdd„Zd1dd„Zd2d d!„Zd"d#„Zd$d%„Zd&d'„Zd(d)„Zd*d+„Zd3d/d0„Z dS)4éNé)Ú ffiplatformÚmodel)ÚVerificationError)Ú*i&i'i(Úwin32)ér)réc@s&eZdZd    dd„Zdd„Zdd„ZdS)
Ú
GlobalExprrcCs"||_||_||_||_||_dS©N)ÚnameÚaddressÚtype_opÚsizeÚ check_value)Úselfr r rrr©rúFd:\z\workplace\vscode\pyvenv\venv\Lib\site-packages\cffi/recompiler.pyÚ__init__s
zGlobalExpr.__init__cCsd|j|j|j ¡|jfS)Nz'  { "%s", (void *)%s, %s, (void *)%s },)r r rÚ    as_c_exprr©rrrrrs ÿzGlobalExpr.as_c_exprcCsd|j ¡|j|jfS)Nz
b'%s%s',%d)rÚas_python_bytesr rrrrrÚas_python_exprsÿzGlobalExpr.as_python_exprN)rr©Ú__name__Ú
__module__Ú __qualname__rrrrrrrr
s
r
c@s,eZdZdd„Zdd„Zdd„Zdd„Zd    S)
Ú    FieldExprcCs"||_||_||_||_||_dSr )r Ú field_offsetÚ
field_sizeÚfbitsizeÚ field_type_op)rr rrr r!rrrrs
zFieldExpr.__init__cCs>dt|jƒ}d|j|jfd||jfd||j ¡fS)Nú z  { "%s", %s,
z     %s   %s,
z     %s   %s },)Úlenr rrr!r)rÚspacesrrrr&s  ÿþzFieldExpr.as_c_exprcCst‚dSr )ÚNotImplementedErrorrrrrr,szFieldExpr.as_python_exprcCsD|jjtkrd}n|jjtkr*t|jƒ}nt‚d|j ¡||jfS)NÚz    b'%s%s%s')    r!ÚopÚOP_NOOPÚ OP_BITFIELDÚformat_four_bytesr r%rr )rZ    size_exprrrrÚas_field_python_expr/s   
þzFieldExpr.as_field_python_exprN)rrrrrrr+rrrrrsrc@s$eZdZdd„Zdd„Zdd„ZdS)ÚStructUnionExprc        Cs4||_||_||_||_||_||_||_||_dSr )r Ú
type_indexÚflagsrÚ    alignmentÚcommentÚfirst_field_indexÚc_fields)    rr r-r.rr/r0r1r2rrrr;szStructUnionExpr.__init__cCsPd|j|j|jfd|j|jfd|jt|jƒf|jrFd|jnddS)Nz  { "%s", %d, %s,z
    %s, %s, z%d, %d z    /* %s */ r&z},)    r r-r.rr/r1r#r2r0rrrrrFsÿþýüzStructUnionExpr.as_c_exprcCs>t|jtƒ}dd„|jDƒ}dt|jƒt|ƒ|jd |¡fS)NcSsg|] }| ¡‘qSr)r+)Ú.0Zc_fieldrrrÚ
<listcomp>Osÿz2StructUnionExpr.as_python_expr.<locals>.<listcomp>z(b'%s%s%s',%s)ú,)Úevalr.ZG_FLAGSr2r*r-r Újoin)rr.Z fields_exprrrrrMs ÿüzStructUnionExpr.as_python_exprNrrrrrr,:s r,c@s$eZdZdd„Zdd„Zdd„ZdS)ÚEnumExprcCs"||_||_||_||_||_dSr ©r r-rÚsignedÚallenums)rr r-rr:r;rrrrXs
zEnumExpr.__init__cCsd|j|j|j|j|jfS)Nz1  { "%s", %d, _cffi_prim_int(%s, %s),
    "%s" },r9rrrrr_sÿÿzEnumExpr.as_c_exprc    Cs@ttttttttdœ|j|j    f}dt
|j ƒt
|ƒ|j |j fS)N))rr)rr)ér)r<r)ér)r=r)ér)r>rzb'%s%s%s\x00%s')Z
PRIM_UINT8Z    PRIM_INT8Z PRIM_UINT16Z
PRIM_INT16Z PRIM_UINT32Z
PRIM_INT32Z PRIM_UINT64Z
PRIM_INT64rr:r*r-r r;)rÚ
prim_indexrrrrds ü
û
þzEnumExpr.as_python_exprNrrrrrr8Wsr8c@s$eZdZdd„Zdd„Zdd„ZdS)Ú TypenameExprcCs||_||_dSr ©r r-)rr r-rrrrpszTypenameExpr.__init__cCsd|j|jfS)Nz  { "%s", %d },rArrrrrtszTypenameExpr.as_c_exprcCsdt|jƒ|jfS)Nzb'%s%s')r*r-r rrrrrwszTypenameExpr.as_python_exprNrrrrrr@osr@c@sˆeZdZdZd™dd„Zdd„Zdd„Zd    d
„Zd d „Zd d„Z    dddddgZ
dd„Z dšdd„Z dd„Z dd„Zdd„Zdd „Zd!d"„Zd#d$„Zd%d&„Zd'd(„Zd)d*„Zd+d,„Zd-d.„Zd/d0„Zd1d2„Zd3d4„Zd5d6„Zd7d8„Zd9d:„Zd;d<„Zd=d>„Zd?d@„Z dAdB„Z!d›dDdE„Z"dFdG„Z#dHdI„Z$dJdK„Z%e%Z&dLdM„Z'dNdO„Z(e(Z)dPdQ„Z*e*Z+dRdS„Z,dTdU„Z-dVdW„Z.dœdYdZ„Z/d[d\„Z0d]d^„Z1d_d`„Z2dadb„Z3ddcdd„Z4dedf„Z5dgdh„Z6didj„Z7dkdl„Z8dmdn„Z9dodp„Z:dqdr„Z;dsdt„Z<dudv„Z=dwdx„Z>e>Z?Z@dydz„ZAd{d|„ZBd}d~„ZCdd€„ZDdd‚„ZEeEZFZGdƒd„„ZHd…d†„ZId‡dˆ„ZJd‰dŠ„ZKd‹dŒ„ZLddŽ„ZMdd„ZNeNZOeNZPd‘d’„ZQd“d”„ZRd•d–„ZSeSZTd—d˜„ZUdCS)žÚ
RecompilerrFcCs||_||_||_t|_dSr )ÚffiÚ module_nameÚtarget_is_pythonÚ VERSION_BASEÚ_version)rrCrDrErrrrszRecompiler.__init__cCst|j|ƒ|_dSr )ÚmaxrG)rÚverrrrÚ needs_version‡szRecompiler.needs_versionc    Cs.i|_| d¡t|jtd}g|_|D]œ}|jr(|j|dksDt‚t|jƒ|j|<|j |¡|j    D]P}t
|t j t j t jt jt jfƒsŒt‚|j|dkrªt|jƒ|j|<|j |¡qf|j d¡q(|D]P}|jsÊ|j|dkrÊt|jƒ|j|<|j |¡|jrÊ|jdk    rÊ|j d¡qÊd|j ¡ks0t‚i|_i|_|D]8}t
|t jƒr^d|j|<nt
|t jƒr@d|j|<q@tt|jdd„dƒD]\}}||j|<qtt|jdd„dƒD]\}}||j|<q¼|D](}t|d|jjƒ}|||j|ƒqÖ|jD]}t
|tƒst‚qt|jƒ|_dS)    NZ collecttype©ÚkeyZENDÚLENcSs|jSr ©r ©ÚtprrrÚ<lambda>´óz/Recompiler.collect_type_table.<locals>.<lambda>cSs|jSr rNrOrrrrQ·rRZ_emit_bytecode_)Ú
_typesdictÚ    _generateÚsortedÚstrÚ
cffi_typesZis_raw_functionÚAssertionErrorr#ÚappendÚargsÚ
isinstancerÚVoidTypeÚBasePrimitiveTypeÚ PointerTypeÚStructOrUnionOrEnumÚFunctionPtrTypeZ is_array_typeÚlengthÚvaluesÚ_struct_unionsÚ_enumsÚ StructOrUnionÚEnumTypeÚ    enumerateÚgetattrÚ    __class__rÚCffiOpÚtuple)rZ    all_declsrPÚtp1ÚiÚmethodr'rrrÚcollect_type_tableŠs`
 
ü
  ÿÿ
zRecompiler.collect_type_tablecCs|j }| |¡Sr )rEÚ
enumfields)rrPZexpand_anonymous_struct_unionrrrÚ _enum_fieldsÄszRecompiler._enum_fieldscCsÐt|tjƒs.t|tƒr*|D]}| |¡qdS||jkrÌd|j|<t|tjƒr^| | ¡¡nnt|tjƒr°|j    dk    rÌ||j
j j krÌ|  |¡D] \}}}}| | |||¡¡qŒn| ¡D]\}}| |¡q¸dSr )r[rZBaseTypeByIdentityrkÚ_do_collect_typerSr`Úas_raw_functionreÚfldtypesrCÚ_parserÚ_included_declarationsrqÚ _field_typeZ
_get_items)rrPÚxZname1rlÚ_rrrrrÏs" 
 
 
 
 ÿzRecompiler._do_collect_typec
Cs¶|jjj ¡}t|ƒD]š\}\}}| dd¡\}}zt|d||fƒ}Wn tk
rhtd|ƒ‚YnXz||_    |||ƒWqt
k
r®}    zt   |    |¡‚W5d}    ~    XYqXqdS)Nr"rz_generate_cpy_%s_%sz"not implemented in recompile(): %r) rCruZ _declarationsÚitemsrUÚsplitrhÚAttributeErrorrÚ_current_qualsÚ    ExceptionrZattach_exception_info)
rÚ    step_nameÚlstr rPÚqualsÚkindZrealnamernÚerrrrTâs"ÿ ÿ
 zRecompiler._generateÚglobalÚfieldÚ struct_unionÚenumÚtypenamecCs(i|_|jD]}g|j|<q tƒ|_| d¡| ¡|jD]4}|j|}|dkrb|jdd„dt|ƒ|j|<q<|jd}|j     ¡D],\}}|t
|ƒksžt ‚||j |j ks†t ‚q†t
|ƒt
|jƒksÊt ‚|jd}|j      ¡D],\}}|t
|ƒksöt ‚||j |j ksÞt ‚qÞt
|ƒt
|j ƒks$t ‚dS)NÚctxr…cSs|jSr rN)ÚentryrrrrQrRz0Recompiler.collect_step_tables.<locals>.<lambda>rKr†r‡)Ú_lstsÚ    ALL_STEPSÚsetÚ_seen_struct_unionsrTÚ_add_missing_struct_unionsÚsortrkrcrzr#rXr rd)rrr€rPrmrrrÚcollect_step_tables÷s*
 
 
 
 
 
zRecompiler.collect_step_tablesr&cCs|j |d¡dS)NÚ
)Ú_fÚwrite)rÚwhatrrrÚ_prntszRecompiler._prntcCs:|jr|dkst‚| |¡n|dk    s*t‚| ||¡dSr )rErXÚwrite_py_source_to_fÚwrite_c_source_to_f)rÚfÚpreamblerrrÚwrite_source_to_fs
   zRecompiler.write_source_to_fcCs0ttj tj t¡|¡dƒ}| ¡}| ¡|S)NÚr)ÚopenÚosÚpathr7ÚdirnameÚ__file__Ú    readlinesÚclose)rÚfilenameÚgÚlinesrrrÚ_rel_readlines!szRecompiler._rel_readlinesc    Cs‚||_|j}|jjdk    r |dƒts,|dƒ| d¡}| d¡}| d¡|||d…<|d |¡ƒ|j     d¡d    }|jjdk    r<|d
|jfƒ|d ƒ| 
|jj¡|d ƒ|d ƒ|d|fƒ|dƒ|d|fƒ|dƒ|d|fƒ|dƒ| d¡}| d¡}| d¡|||d…<|d |¡ƒ|  t ¡|dƒ|ƒ||ƒ|ƒ|dƒ|ƒ|dƒt dd„|j ¡Dƒƒ}t|jƒD]>\}}d}    ||kr¶d|| ¡}    |d|| ¡|    fƒq|jsà|dƒ|dƒ|ƒtƒ|_| d¡i}
|jD]`} |j| } t| ƒ|
| <|
| d kr
|d!| | fƒ| D]} ||  ¡ƒqF|dƒ|ƒq
|jjr|d"ƒ|jjD]f}z|jdd#…\}}Wn(tk
rÈtd$|j|fƒ‚YnX|dkrÜtd%ƒ‚|d&|fƒq†|d'ƒ|dƒ|ƒ|d(ƒ|d)ƒ|jD].} |
| d kr:|d*| ƒn |d+| ƒq|jD]$} | d,krP|d-|
| | fƒqP|jjrŠ|d.ƒn|d/ƒ|d0t|jƒfƒd }|jd ksÄ|jjdk    rÌ|dO}|d1|ƒ|dƒ|ƒ|d2ƒ|d3ƒ|dƒ|ƒ|d ƒ|d4ƒ|d5|fƒ|d6ƒ|d@rL|d7ƒ|d8ƒ|d9ƒ|d:|jƒ|d;ƒ|d<ƒ|d=ƒ|dƒ|d>ƒ|d?ƒ|d@ƒ|dAƒ|dB|fƒ|dCƒ|dD|fƒ|dEƒ|dEƒ|dƒ|d4ƒ|dF|fƒ|d6ƒ|dG|j|jfƒ|d>ƒ|dƒ|d4ƒ|dH|fƒ|d6ƒ|dI|j|jfƒ|d>ƒ|dƒ|ƒ|d2ƒ|dJƒ|dƒd|_dS)KNz#define _CFFI_USE_EMBEDDINGz#define _CFFI_NO_LIMITED_APIz_cffi_include.hz#include "parse_c_type.h"
zparse_c_type.hrr&Ú.éÿÿÿÿz#define _CFFI_MODULE_NAME  "%s"z1static const char _CFFI_PYTHON_STARTUP_CODE[] = {z0 };z#ifdef PYPY_VERSIONz5# define _CFFI_PYTHON_STARTUP_FUNC  _cffi_pypyinit_%sz#elif PY_MAJOR_VERSION >= 3z-# define _CFFI_PYTHON_STARTUP_FUNC  PyInit_%sú#elsez*# define _CFFI_PYTHON_STARTUP_FUNC  init%sú#endifz _embedding.hz#include "_cffi_errors.h"
z_cffi_errors.hz>/************************************************************/zstatic void *_cffi_types[] = {cSsg|]\}}||f‘qSrr©r3rPrmrrrr4Wsz2Recompiler.write_c_source_to_f.<locals>.<listcomp>z // z/* %2d */ %s,%sz  0z};Údeclrz.static const struct _cffi_%s_s _cffi_%ss[] = {z.static const char * const _cffi_includes[] = {r<úQffi object %r includes %r, but the latter has not been prepared with set_source()zMnot implemented yet: ffi.include() of a Python-based ffi inside a C-based ffiz  "%s",z  NULLz?static const struct _cffi_type_context_s _cffi_type_context = {z  _cffi_types,z   _cffi_%ss,z  NULL,  /* no %ss */r…z  %d,  /* num_%ss */z  _cffi_includes,z  NULL,  /* no includes */z  %d,  /* num_types */z  %d,  /* flags */z#ifdef __GNUC__z?#  pragma GCC visibility push(default)  /* for -fvisibility= */ZPyMODINIT_FUNCz"_cffi_pypyinit_%s(const void *p[])Ú{z%    if (((intptr_t)p[0]) >= 0x0A03) {zQ        _cffi_call_python_org = (void(*)(struct _cffi_externpy_s *, char *))p[1];z    }z    p[0] = (const void *)0x%x;z    p[1] = &_cffi_type_context;z#if PY_MAJOR_VERSION >= 3ú    return NULL;Ú}z#  ifdef _MSC_VERz     PyMODINIT_FUNCz#  if PY_MAJOR_VERSION >= 3z%     PyInit_%s(void) { return NULL; }z#  elsez     init%s(void) { }z#  endifzPyInit_%s(void)z5  return _cffi_init("%s", 0x%x, &_cffi_type_context);z init%s(void)z.  _cffi_init("%s", 0x%x, &_cffi_type_context);z#  pragma GCC visibility pop) r“r–rCÚ
_embeddingÚUSE_LIMITED_APIr§Úindexr7rDr{Ú_print_string_literal_in_arrayrJÚVERSION_EMBEDDEDÚdictrSrzrgrWÚ _get_c_namerrÚ_seen_constantsrTrŒr‹r#Ú_included_ffisÚ_assigned_sourcer|rÚ _num_externpyrG)rr™ršÚprntr¦rmZbase_module_nameÚtypeindex2typer'r0Únumsrr€rŠÚffi_to_includeÚincluded_module_nameÚincluded_sourcer.rrrr˜'s: 
 
ÿÿÿ
 
 
 
 
 
 
 ÿ
 
  ÿ
ÿÿÿ
 
ÿ
 
 
 
 
 
ÿÿzRecompiler.write_c_source_to_fcsbt|tƒrd|fSt|ttfƒrZ‡fdd„|Dƒ}t|ƒdkrJ| d¡dd |¡fS| ¡S)Nzb'%s'csg|]}ˆ |¡‘qSr)Ú_to_py)r3Úitemrrrr4Øsz%Recompiler._to_py.<locals>.<listcomp>rr&z(%s)r5)r[rVÚlistrkr#rYr7r)rrxÚreprrrrÃÔs
 
 
zRecompiler._to_pyc     Csœ||_|j}|dƒ|dƒt|jjp(dƒ}t|ƒD]n}|jj|}z|jdd…\}}Wn&tk
r€td|j|fƒ‚YnX|dk    r’tdƒ‚|d||fƒq4|ƒ|d|j    fƒ|d    |j
fƒd|_
t |j ƒ|_ d
d „|j Dƒ}|d |  d  |¡¡fƒtdd „|j ¡Dƒƒ}    |jD]>}
|j|
} t| ƒdkr$|
dkr$|d|
|  | ¡fƒq$|dkr|dd dd „t|ƒDƒ¡fƒ|dƒdS)Nz# auto-generated filezimport _cffi_backendrr<r®zMnot implemented yet: ffi.include() of a C-based ffi inside a Python-based ffizfrom %s import ffi as _ffi%dzffi = _cffi_backend.FFI('%s',z    _version = 0x%x,cSsg|] }| ¡‘qSr)r)r3r'rrrr4þsz3Recompiler.write_py_source_to_f.<locals>.<listcomp>z    _types = %s,r&cSsg|]\}}||f‘qSrrr¬rrrr4srr…z    _%ss = %s,z    _includes = (%s,),ú, cSsg|] }d|‘qS)z_ffi%dr©r3rmrrrr4 sú))r“r–r#rCrºÚranger»r|rrDrGrkrWrÃr7r·rSrzrŒr‹) rr™r½Z num_includesrmrÀrÁrÂZ    types_lstr¾rr€rrrr—ÞsP   ÿ
ÿÿÿ
ÿ 
 
 
ÿzRecompiler.write_py_source_to_fcCs
|j|Sr )rS)rÚtyperrrÚ _gettypenumszRecompiler._gettypenumc    Csnd}t|tjƒr| ¡s| ¡r:|jdkr:d}d|j}nPt|tjƒrXd| d¡f}n2| d¡}d||j dd¡f}|d    krŠ|     t
¡d
}nœt|tj ƒr°|  ||||¡dSt|tj ƒsÈt|tjƒrô| d || |¡|f¡| d |¡dSt|tjƒr$d | d¡}d| |¡}d}nt|ƒ‚| d||||f¡| d|| d¡|f¡| d |¡dS)Nr&Ú_BoolZ_cffi_to_c_intz, %sz(%s)_cffi_to_c_doublez(%s)_cffi_to_c_%sr"ry©Zchar16_tZchar32_tz-1z6  if (_cffi_to_c((char *)&%s, _cffi_type(%d), %s) < 0)z    %s;z(%s)_cffi_to_c_pointerz, _cffi_type(%d)ÚNULLz  %s = %s(%s%s);z'  if (%s == (%s)%s && PyErr_Occurred()))r[rr]Úis_complex_typeÚis_integer_typer ÚUnknownFloatTypeÚ
get_c_nameÚreplacerJÚVERSION_CHAR16CHAR32r^Ú"_convert_funcarg_to_c_ptr_or_arrayr_r–rÌr`r%)    rrPÚfromvarÚtovarÚerrcodeZextraargÚ    converterÚcnameZerrvaluerrrÚ_convert_funcarg_to_csP  
 ÿ
 ÿ 
ÿÿÿz Recompiler._convert_funcarg_to_ccCs.t|tjƒr*| d¡| d¡| d¡dS)NzPy_ssize_t datasizez-struct _cffi_freeme_s *large_args_free = NULLzIif (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);)r[rr^Úadd)rrPÚ    localvarsÚ    freelinesrrrÚ_extra_local_variablesCs 
 
z!Recompiler._extra_local_variablescCs†| d¡| d| |¡||f¡| d¡| d|| d¡f¡| d| |¡||f¡| d¡| d|¡| d    ¡dS)
Nz1  datasize = _cffi_prepare_pointer_call_argument(z(      _cffi_type(%d), %s, (char **)&%s);z  if (datasize != 0) {zI    %s = ((size_t)datasize) <= 640 ? (%s)alloca((size_t)datasize) : NULL;r&zF    if (_cffi_convert_array_argument(_cffi_type(%d), %s, (char **)&%s,z,            datasize, &large_args_free) < 0)z          %s;z  })r–rÌrÓ)rrPr×rØrÙrrrrÖJs$
ÿ
ÿÿÿ
z-Recompiler._convert_funcarg_to_c_ptr_or_arraycCsJt|tjƒr”| ¡r,|jdkr,d||jfSt|tjƒrBd|fS|jdkr€| ¡s€|j dd¡}|dkrt| t    ¡d||fSd    || 
|¡fSn²t|tj tj fƒr¸d
|| 
|¡fSt|tj ƒrÞd
|| 
t  |j¡¡fSt|tjƒr|jdkr td | ¡|fƒ‚d || 
|¡fSt|tjƒr>d    || 
|¡fSt|ƒ‚dS) NrÍz_cffi_from_c_int(%s, %s)z_cffi_from_c_double(%s)ú long doubler"ryrÎz_cffi_from_c_%s(%s)z/_cffi_from_c_deref((char *)&%s, _cffi_type(%d))z0_cffi_from_c_pointer((char *)%s, _cffi_type(%d))z!'%s' is used as %s, but is opaquez0_cffi_from_c_struct((char *)&%s, _cffi_type(%d)))r[rr]rÑr rÒrÐrÔrJrÕrÌr^r`Ú    ArrayTyperÄreZfldnamesÚ    TypeErrorr¸rfr%)rrPÚvarÚcontextrÛrrrÚ_convert_expr_from_cXsP  
 
 ÿÿ ÿ ÿÿÿzRecompiler._convert_expr_from_ccCs| |d|f¡S)Nz
(*(%s *)0))Ú _global_type©rrPr rrrÚ _typedef_type{szRecompiler._typedef_typecCs| | ||¡¡dSr )rrrérèrrrÚ!_generate_cpy_typedef_collecttype~sz,Recompiler._generate_cpy_typedef_collecttypecCsdSr rrèrrrÚ_generate_cpy_typedef_declsz%Recompiler._generate_cpy_typedef_declcCs$|j|}|jd t||ƒ¡dS)Nrˆ)rSr‹rYr@)rrPr r-rrrÚ _typedef_ctx„s
zRecompiler._typedef_ctxcCsf| ||¡}| ||¡t|ddƒdkr<|j||jddn&t|tjƒrb|j|j|jj|j|ddS)NÚoriginZ unknown_type)Ú
approxname)rîÚ    named_ptr)    rérìrhÚ _struct_ctxr r[rZNamedPointerTypeÚtotyperèrrrÚ_generate_cpy_typedef_ctxˆs   ÿz$Recompiler._generate_cpy_typedef_ctxcCs(| | ¡¡|jr$|js$| |¡dSr )rrrsÚellipsisrErèrrrÚ"_generate_cpy_function_collecttype”s z-Recompiler._generate_cpy_function_collecttypec    Cs |jr
t‚t|tjƒst‚|jr0| ||¡dS|j}t|j    ƒ}|dkrNd}n|dkr\d}nd}g}g}d|}t
|j    ƒD],\}    }
|  |
  d|    |¡¡|  d|    ¡qzd      |¡} | p¸d
} |jrÌ|jd } nd } d | || f} |d|j  | ¡fƒ|dƒd      |¡}d}t|jtjƒrd }|d|||fƒ|dƒ|dƒ|dƒ|d||fƒ|dƒd|}t
|j    ƒD]&\}    }
|
  d|    |¡}|d|ƒqrtƒ}tƒ}|j    D]}
| |
||¡q¬t|ƒD]}|d|fƒqÊt|jtjƒs d}d|}d|j  d|¡}||ƒ|dƒnd}d }t|j    ƒdkr˜tt|j    ƒƒ}|D]}    |d|    ƒqJ|ƒ|d|t|ƒt|ƒd      dd„|Dƒ¡fƒ|dƒ|ƒt
|j    ƒD](\}    }
| |
d |    d|    d!¡|ƒq¨|d"ƒ|d#ƒd$d„tt|j    ƒƒDƒ}d      |¡}|d%|||fƒ|d&ƒ|d'ƒ|ƒ|d(ƒ|dkrF|d)ƒ|r†|d*| |jd+d,¡ƒ|D]}|d-|ƒqh|d.ƒn(|D]}|d-|ƒqŠ|d/ƒ|d0ƒ|dƒ|d1ƒd2d3„}d4}g}g}d|}t
|j    ƒD]P\}    }
d }||
ƒrd5}d6}|
  d7||    f|¡}|  |¡|  d8||    f¡qä|j}||ƒrxd|}|  d9|¡}| d|¡tj}d}d:}d6}|rþd      |¡} | pd
} d;| || f} |d|  | ¡fƒ|dƒ|rÊ||ƒd      |¡}|d%|||fƒ|rô|d<ƒ|dƒn|d=||fƒ|d>ƒ|ƒdS)?NrZnoargrZarg0rZúargument of %sz x%dúx%drÇÚvoidr"r&z%s_cffi_d_%s(%s)z    static %sr¯zreturn z   %s%s(%s);r±z#ifndef PYPY_VERSIONzstatic PyObject *z(_cffi_f_%s(PyObject *self, PyObject *%s)z  %s;z    result = ú result of %sz resultz  PyObject *pyresult;z  PyObject *arg%d;z1  if (!PyArg_UnpackTuple(args, "%s", %d, %d, %s))cSsg|] }d|‘qS)z&arg%drrÈrrrr4æsz:Recompiler._generate_cpy_function_decl.<locals>.<listcomp>r°zarg%dz return NULLz  Py_BEGIN_ALLOW_THREADSz  _cffi_restore_errno();cSsg|] }d|‘qS)rörrÈrrrr4ñsz  { %s%s(%s); }z  _cffi_save_errno();z  Py_END_ALLOW_THREADSz  (void)self; /* unused */z  (void)noarg; /* unused */z  pyresult = %s;Úresultz result typez  z  return pyresult;z  Py_INCREF(Py_None);z  return Py_None;rªcSs t|tjƒpt|tjƒo| ¡Sr )r[rreÚ PrimitiveTyperÐ)rËrrrÚneed_indirections  þz@Recompiler._generate_cpy_function_decl.<locals>.need_indirectionFrTz %sx%dz%sx%dz *resultz
*result = z%s_cffi_f_%s(%s)z  return result;z#  define _cffi_f_%s _cffi_d_%sr«)rErXr[rr`róÚ_generate_cpy_constant_declr–r#rZrgrYrÓr7Úabirùr\rràrUrÊrÜræÚinsertZ    void_type)rrPr r½ÚnumargsÚargnameÚ    argumentsZcall_argumentsrårmrËÚrepr_argumentsrýÚname_and_argumentsZ result_codeÚargrÞrßr­Z result_declÚrngZfreelinerûÚ
differenceZ indirectionZ    tp_resultrrrÚ_generate_cpy_function_decl™s
 
 
 
 
 
þÿ
 
 
ÿ
 
 
 
 
 
ÿ
 
z&Recompiler._generate_cpy_function_declcCsŽ|jr|js| ||¡dS|j| ¡}t|jƒ}|jr@t}n |dkrNt}n|dkr\t    }nt
}|j d  t |d|t||ƒd|d¡dS)Nrrr„z
_cffi_f_%sz
_cffi_d_%s)r)rórEÚ_generate_cpy_constant_ctxrSrsr#rZZOP_DLOPEN_FUNCZOP_CPYTHON_BLTN_NZOP_CPYTHON_BLTN_OZOP_CPYTHON_BLTN_Vr‹rYr
rj)rrPr r-rÿZ    meth_kindrrrÚ_generate_cpy_function_ctx;s$  
 
 
þÿz%Recompiler._generate_cpy_function_ctxcCsTt|tjƒrP|j}|dkr0| d¡}d||f}| |d||j¡}t ||¡}|S)Nú...rz_cffi_array_len(((%s)0)->%s)ú%s[0])r[rrârarÓrwrÄ)rZ    tp_structÚ
field_nameZtp_fieldÚ actual_lengthZptr_struct_nameÚtp_itemrrrrwQs 
ÿ ÿ zRecompiler._field_typecCs,| |¡|jr(| ¡D]}| |¡qdSr )rrrEÚanonymous_struct_fieldsÚ_struct_collecttype)rrPÚfldtyperrrr]s
 zRecompiler._struct_collecttypec Cs@|jdkrdS|j}d|f}|dƒ|d||fƒ|dƒ|dƒ|dƒ| |¡D]Ä\}}}}    z‚| ¡sv|dkr”|dkr|d    |||fƒWqXt|tjƒrÄ|jdks´|jd
krÄ|j}|d }q”|d |j    d d||    d|fƒWqXt
k
r}
z|dt |
ƒƒW5d}
~
XYqXXqX|dƒ|d||fƒ|ƒdS)Nz_cffi_checkfld_%sZ_CFFI_UNUSED_FNzstatic void %s(%s *p)r¯z8  /* only to generate compile-time warnings or errors */z
  (void)p;rr&z>  (void)((p->%s) | 0);  /* check that '%s.%s' is an integer */r
z[0]z  { %s = &p->%s; (void)tmp; }z*tmpzfield %r©rz
  /* %s */r±z(struct _cffi_align_%s { char x; %s y; };) rtr–rqrÑr[rrârarÄrÓrrV) rrPrÛrîr½Z checkfuncnameÚfnameZftyper ÚfqualrƒrrrÚ _struct_decldsB
 
ÿ ÿÿ
þ $zRecompiler._struct_declNc Cs¬|j|}d}g}t|tjƒr(| d¡|jdkr@| d¡d}||jjjkr¼|dksd||jjjkr¼|jdkrpn|j    sŽt
|  ¡ƒr„n
| d¡|j rÊ|j dkr°t d||j fƒ‚| d¡n| d¡d    }d
 |¡pÖd }g}|dkrht| |¡ƒ}    |    D]\}
} } } | ||
| ¡} | | d |j|
f¡t}| d krFt}d| }nL|dksjt| tjƒrp| jdkrpd}n"d|dkr†| d¡n|j|
f}|dks¦| d kr¬d}n,|dk    rÆd|j|
f}nd| d¡|
f}| t|
||| t||j| ƒƒ¡qøt|jdƒ}|jd |¡|dkr2d}d}d}n4|dk    rNd|jf}d}nd|f}d|f}d}nd}d}d}|}|jd t|j|||||||ƒ¡|j  |¡dS)NZ _CFFI_F_UNIONZ_CFFI_F_OPAQUEÚopaqueZ_CFFI_F_CHECK_FIELDSrz…%r is declared with 'pack=%r'; only 0 or 1 are supported in API mode (try to use "...;", which does not require a 'pack' declaration)Z_CFFI_F_PACKEDZ_CFFI_F_EXTERNALZexternalú|Ú0z field '%s.%s'rz %d /* bits */z
(size_t)-1zsizeof(((%s)0)->%s)rz"((char *)&((%s)0)->%s) - (char *)0zoffsetof(%s, %s)r&r…z
(size_t)-2éþÿÿÿZunnamedzsizeof(*(%s)0)z-1 /* unknown alignment */ú
sizeof(%s)z"offsetof(struct _cffi_align_%s, y)r©r†)!rSr[rZ    UnionTyperYrtrCrurvÚpartialÚanyrÚpackedr%r7rÅrqrwÚ_check_not_opaquer r(r)rârarÓrrjr#r‹Úextendr,rŽrÝ)rrPrÛrîrïr-Zreason_for_not_expandingr.r2rpZfldnamerr rr'rÚoffsetr1Zalignr0rrrrð†s°
 
 
 
ÿ þ
 
 
ýÿ 
 
 ÿ
 
 
 
ÿþý
ÿ
ÿÿ
 
 
 
 
ÿÿzRecompiler._struct_ctxcCs:t|tjƒr|j}qt|tjƒr6|jdkr6td|ƒ‚dS)Nz0%s is of an opaque type (not declared in cdef()))r[rrârÄrertrã)rrPÚlocationrrrrÜs  ÿzRecompiler._check_not_opaquecCs¾t|j ¡ƒ}|jdd„d|D]–\}}||jkr"|jrHtd|fƒ‚|j d¡rv|jdd…     ¡rv|jdd…}n4|jdkrœ|j
dkrœd}|  |d¡ntd    |fƒ‚|  |d|¡q"dS)
NcSs|dS)Nrr)Ztp_orderrrrrQérRz7Recompiler._add_missing_struct_unions.<locals>.<lambda>rKzDinternal inconsistency: %r is partial but was not seen at this pointú$rZ_IO_FILEÚFILEzinternal inconsistency: %r) rÅrcrzrrŽrr%r Ú
startswithÚisdigitZ    forcenamerìrð)rr€rPÚorderrîrrrrãs" 
þÿz%Recompiler._add_missing_struct_unionscCs| |¡dSr )rrèrrrÚ _generate_cpy_struct_collecttypeúsz+Recompiler._generate_cpy_struct_collecttypecCs2| d¡}d|kr"|| dd¡fS|d|fSdS)Nr&r"ry)rÓrÔ)rrPrÛrrrÚ _struct_namesþs
zRecompiler._struct_namescCs|j|f| |¡žŽdSr )rr(rèrrrÚ_generate_cpy_struct_declsz$Recompiler._generate_cpy_struct_declcCs|j|f| |¡žŽdSr )rðr(rèrrrÚ_generate_cpy_struct_ctx    sz#Recompiler._generate_cpy_struct_ctxcCs(t|tjƒr| ||¡n
| |¡dSr )r[rrfÚ_generate_cpy_enum_collecttyperrèrrrÚ#_generate_cpy_anonymous_collecttypes z.Recompiler._generate_cpy_anonymous_collecttypecCs.t|tjƒr| |¡n| ||d|¡dS©NZtypedef_)r[rrfÚ_generate_cpy_enum_declrrèrrrÚ_generate_cpy_anonymous_decls  z'Recompiler._generate_cpy_anonymous_declcCs0t|tjƒr| ||¡n| ||d|¡dSr-)r[rrfÚ    _enum_ctxrðrèrrrÚ_generate_cpy_anonymous_ctxs z&Recompiler._generate_cpy_anonymous_ctxÚconstcCs||f|jkrtd||fƒ‚|j ||f¡|j}d||f}|r¸|d|ƒ|dƒ|d|fƒ|d||fƒ|dk    r¦|dkrd|f}|d    |fƒ|d
ƒ|d ƒ|d ƒn>|dksÄt‚|d |ƒ|dƒ|d| d¡|fƒ|d ƒ|ƒdS)Nz duplicate declaration of %s '%s'z _cffi_%s_%sz$static int %s(unsigned long long *o)r¯z  int n = (%s) <= 0;zI  *o = (unsigned long long)((%s) | 0);  /* check that %s is an integer */rz%dUz"  if (!_cffi_check_int(*o, n, %s))z     n |= 2;z   return n;r±zstatic void %s(char *o)z  *(%s)o = %s;r)r¹rrÝr–rXrÓ)rÚis_intr rPÚcategoryrr½ÚfuncnamerrrÚ_generate_cpy_const&s6
ÿ  ÿ
 
  zRecompiler._generate_cpy_constcCs | ¡}|r|jr| |¡dSr )rÑrErr©rrPr r3rrrÚ"_generate_cpy_constant_collecttypeDs
z-Recompiler._generate_cpy_constant_collecttypecCs| ¡}| |||¡dSr )rÑr6r7rrrrüIsz&Recompiler._generate_cpy_constant_declcCs^|js| ¡rttdƒ}n$|jr&t}nt}|j|}t||ƒ}|jd t    |d||ƒ¡dS)Nr©r„ú_cffi_const_%s)
rErÑrjÚOP_CONSTANT_INTZOP_DLOPEN_CONSTZ OP_CONSTANTrSr‹rYr
)rrPr rZ
const_kindr-rrrrMs 
 
 
ÿz%Recompiler._generate_cpy_constant_ctxcCs| |¡dSr )rrrèrrrr+]sz)Recompiler._generate_cpy_enum_collecttypecCs|jD]}| d|¡qdS)NT)Ú enumeratorsr6)rrPr Ú
enumeratorrrrr.`s
z"Recompiler._generate_cpy_enum_declc     Csä|j|}ttdƒ}|jr"| ¡t|j|jƒD](\}}|jd     t
|d|||d¡q0|dk    r‚d|kr‚|js‚d|}d|}n4|  |j g¡}    |j   |    ¡}tt|j  |    d¡ƒdkƒ}d     |j¡}
|jd
     t|j||||
ƒ¡dS) Nr©r„r9©rr"rz ((%s)-1) <= 0rr5r‡)rSrjÚOP_ENUMrEZcheck_not_partialÚzipr;Z
enumvaluesr‹rYr
Zbuild_baseinttyperCÚsizeofÚintÚcastr7r8r ) rrPrÛr-rr<Z    enumvaluerr:Zbasetpr;rrrr0ds(
 
 
 ÿÿ
 
ÿzRecompiler._enum_ctxcCs| || ¡¡dSr )r0r¸rèrrrÚ_generate_cpy_enum_ctxysz!Recompiler._generate_cpy_enum_ctxcCsdSr rrèrrrÚ_generate_cpy_macro_collecttypesz*Recompiler._generate_cpy_macro_collecttypecCs&|dkrd}n|}|jd||ddS)Nr
Tr=)r6)rrPr rrrrÚ_generate_cpy_macro_decl‚sz#Recompiler._generate_cpy_macro_declcCsT|dkr"|jrtd|fƒ‚d}n|}ttdƒ}|jd t|d|||d¡dS)Nr
zGcannot use the syntax '...' in '#define %s ...' when using the ABI moder©r„r9r=)rErrjr:r‹rYr
)rrPr rrrrrÚ_generate_cpy_macro_ctx‰sÿÿ
 
 ÿÿz"Recompiler._generate_cpy_macro_ctxcCsFt|tjƒrB|j}|dkr$d|f}| |jd|¡}t ||¡}|S)Nr
z_cffi_array_len(%s)r )r[rrârarçrÄ)rrPZ global_namer rrrrrçšs 
 zRecompiler._global_typecCs| | ||¡¡dSr )rrrçrèrrrÚ"_generate_cpy_variable_collecttype£sz-Recompiler._generate_cpy_variable_collecttypecCs„|j}| ||¡}t|tjƒr4|jdkr4|j}d}nd}d|f}|d|j||jdƒ|dƒ|d||fƒ|dƒ|ƒdS)    Nr&ú&z*_cffi_var_%s(void)ústatic rr¯z  return %s(%s);r±)    r–rçr[rrârarÄrÓr})rrPr r½Z    ampersandr­rrrÚ_generate_cpy_variable_decl¦s     
z&Recompiler._generate_cpy_variable_declcCsL| ||¡}|j|}|jr"t}nt}|jd t|d|t||ƒƒ¡dS)Nr„z _cffi_var_%s)    rçrSrEZ OP_GLOBAL_VARZOP_GLOBAL_VAR_Fr‹rYr
rj)rrPr r-r'rrrÚ_generate_cpy_variable_ctx½s 
 
ÿz%Recompiler._generate_cpy_variable_ctxcCst|tjƒst‚| |¡dSr )r[rr`rXrrrèrrrÚ'_generate_cpy_extern_python_collecttypeÊsz2Recompiler._generate_cpy_extern_python_collecttypecCs|j}t|jtjƒrd}nd|}d|j d|¡f}|d|ƒ|d|j||fƒ|ƒg}d|}t|jƒD]"\}}    |     d||¡}
|     |
¡qrd     
|¡} | p¦d
} d || f} |j d krÆd | } dd„} t t |jƒddƒ}| |jƒröt |dƒ}t|jtjƒr&d|j d¡||j d¡|f}|d||j | ¡fƒ|dƒ|d|ƒ|dƒt|jƒD]X\}}    d|}
t|    tjƒsŒ| |    ƒržd|
}
t |    ¡}    |d|     d¡|d|
fƒqd|d|ƒt|jtjƒsð|d|j d¡fƒ|dƒ|ƒ|jd7_dS)Nrrøz(int)sizeof(%s)r&z3static struct _cffi_externpy_s _cffi_externpy__%s =z  { "%s.%s", %s, 0, 0 };rõz a%drÇr÷z%s(%s)Ú    __stdcallz_cffi_stdcall cSst|tjƒo|jdkS)Nrá)r[rrúr rOrrrÚmay_need_128_bitsês ÿz9Recompiler._extern_python_decl.<locals>.may_need_128_bitsr>éz!sizeof(%s) > %d ? sizeof(%s) : %dz%s%sr¯z   char a[%s];z  char *p = a;za%drHz  *(%s)(p + %d) = %s;rz,  _cffi_call_python(&_cffi_externpy__%s, p);z  return *(%s)p;r±r)r–r[rùrr\rÓrDrgrZrYr7rýrHr#rer^r¼)rrPr Z tag_and_spacer½Zsize_of_resultrårrmrËrrrrNZ    size_of_arrrÚ_extern_python_declÑsj ÿ ÿ 
 
 
 
 
 
þ ÿ
  zRecompiler._extern_python_declcCs| ||d¡dS)NrI©rPrèrrrÚ _generate_cpy_extern_python_declsz+Recompiler._generate_cpy_extern_python_declcCs| ||d¡dS)NzCFFI_DLLEXPORT rQrèrrrÚ#_generate_cpy_dllexport_python_decl
sz.Recompiler._generate_cpy_dllexport_python_declcCs| ||d¡dS)Nr&rQrèrrrÚ'_generate_cpy_extern_python_plus_c_decl sz2Recompiler._generate_cpy_extern_python_plus_c_declcCsR|jrtdƒ‚|jrtdƒ‚|j|}tt|ƒ}|jd t    |d|||ƒ¡dS)Nz,cannot use 'extern "Python"' in the ABI modez$a vararg function is extern "Python"r„z&_cffi_externpy__%s)
rErrór%rSrjZOP_EXTERN_PYTHONr‹rYr
)rrPr r-rrrrÚ_generate_cpy_extern_python_ctxsÿ
 
 
ÿz*Recompiler._generate_cpy_extern_python_ctxcCsæ|j}|dƒt|tƒs$| d¡}n
| d¡z| d¡Wntk
rXd|}YnX| d¡D]|}|}tdƒtkr„tt    |ƒ}nt
|ƒdd…}|d    |  ¡ƒd
}|D]*}t |ƒd krÈ||ƒd
}|d |f7}q¬||ƒqddS) Nz=// # NB. this is not a string because of a size limit in MSVCzutf-8Úasciis# -*- encoding: utf8 -*-
Tz//rr©z// r&éLz%d,) r–r[ÚbytesÚencodeÚdecodeÚUnicodeDecodeErrorÚ
splitlinesrËÚmapÚordrVÚrstripr#)rÚsr½Úliner0Z printed_lineÚcrrrrµs,
 
   z)Recompiler._print_string_literal_in_arraycCstttƒ|j|<dSr )rjÚ OP_PRIMITIVEZ    PRIM_VOIDrW©rrPr´rrrÚ_emit_bytecode_VoidType=sz"Recompiler._emit_bytecode_VoidTypecCst|j}tt|ƒ|j|<dSr )ZPRIMITIVE_TO_INDEXr rjrcrW)rrPr´r?rrrÚ_emit_bytecode_PrimitiveType@s
z'Recompiler._emit_bytecode_PrimitiveTypecCs(d|j|j|jf}tt|ƒ|j|<dS)Nzl_cffi_prim_int(sizeof(%s), (
           ((%s)-1) | 0 /* check that %s is an integer type */
         ) <= 0)©r rjrcrW©rrPr´r`rrrÚ!_emit_bytecode_UnknownIntegerTypeDsþz,Recompiler._emit_bytecode_UnknownIntegerTypecCs$d|j|jf}tt|ƒ|j|<dS)Nzd_cffi_prim_float(sizeof(%s) *
           (((%s)1) / 2) * 2 /* integer => 0, float => 1 */
         )rgrhrrrÚ_emit_bytecode_UnknownFloatTypeJs
þz*Recompiler._emit_bytecode_UnknownFloatTypecCs¼tt|j|jƒ|j|<|d7}|jD]H}|j|}||krft|tjƒrV|     ||¡ntt
|ƒ|j|<|d7}q&t |j ƒ}|j dk    r¨|j dkr˜|dO}ntd|j fƒ‚tt|ƒ|j|<dS)NrrMr<zabi=%r)rjZ OP_FUNCTIONrSrùrWrZr[rrúrfr(rArórýr%ZOP_FUNCTION_END)rrPr´rlZ    realindexr.rrrÚ_emit_bytecode_RawFunctionTypePs
 
 
 
 
 
 
z)Recompiler._emit_bytecode_RawFunctionTypecCstt|j|jƒ|j|<dSr )rjÚ
OP_POINTERrSrñrWrdrrrÚ_emit_bytecode_PointerTypecsz%Recompiler._emit_bytecode_PointerTypecCs"| ¡}tt|j|ƒ|j|<dSr )rsrjrlrSrW)rrPr´ÚrawrrrÚ_emit_bytecode_FunctionPtrTypeisz)Recompiler._emit_bytecode_FunctionPtrTypecCs’|j|j}|jdkr(tt|ƒ|j|<nf|jdkrNtdt|ƒ dd¡fƒ‚n@|j|ddksdt    ‚tt
|ƒ|j|<tdt|jƒƒ|j|d<dS)Nr
zitype %s badly placed: the '...' array length can only be used on global arrays or on fields of structuresz/*...*/rrM) rSrÄrarjZ OP_OPEN_ARRAYrWrrVrÔrXZOP_ARRAY)rrPr´Z
item_indexrrrÚ_emit_bytecode_ArrayTypems 
 
ÿÿÿz#Recompiler._emit_bytecode_ArrayTypecCs|j|}tt|ƒ|j|<dSr )rcrjZOP_STRUCT_UNIONrW)rrPr´Z struct_indexrrrÚ_emit_bytecode_StructType{s
z$Recompiler._emit_bytecode_StructTypecCs|j|}tt|ƒ|j|<dSr )rdrjr>rW)rrPr´Z
enum_indexrrrÚ_emit_bytecode_EnumType€s
z"Recompiler._emit_bytecode_EnumType)F)r&)N)Nr2N)N)Vrrrr¼rrJrorqrrrTrŒr‘r–r›r§r˜rÃr—rÌrÜràrÖrærérêrërìròrôrr    rwrrrðrrr'Z_generate_cpy_union_collecttyper(r)Z_generate_cpy_union_declr*Z_generate_cpy_union_ctxr,r/r1r6r8rürr+r.r0rCrDrErFrçrGrJrKrLZ*_generate_cpy_dllexport_python_collecttypeZ._generate_cpy_extern_python_plus_c_collecttyperPrRrSrTrUZ"_generate_cpy_dllexport_python_ctxZ&_generate_cpy_extern_python_plus_c_ctxrµrerfrirjrkrmZ_emit_bytecode_ConstPointerTypeZ_emit_bytecode_NamedPointerTyperorprqZ_emit_bytecode_UnionTyperrrrrrrB~s²
: 
.
4-# # "
V    ÿ
 
     þ6 þrB)rcseZdZ‡fdd„Z‡ZS)ÚNativeIOcs(t|tƒr| d¡}tt|ƒ |¡dS)NrV)r[ÚunicoderYÚsuperrsr”)rr`©rirrr”‰s
 
zNativeIO.write)rrrr”Ú __classcell__rrrvrrsˆsrsc
Cs|rtd|fƒt|||dkd}| ¡| ¡tƒ}| ||¡| ¡}zBt|dƒ }| t    |ƒd¡|krvt
‚W5QRX|rŒtdƒWdSt
k
rd|t   ¡f}    t|    dƒ}|  |¡W5QRXzt  |    |¡Wn,tk
rt  |¡t  |    |¡YnXYd    SXdS)
Nz generating %s)rErœrz(already up-to-date)Fz%s.~%dÚwT)ÚprintrBror‘rsr›ÚgetvaluerÚreadr#ÚIOErrorržÚgetpidr”ÚrenameÚOSErrorÚunlink)
rCrDršZ target_fileÚverboseZ
recompilerr™ÚoutputÚf1Ztmp_filerrrÚ_make_c_or_py_sourceŽs6ÿ   
r„FcCs|dk    s t‚t|||||ƒSr )rXr„)rCrDršZ target_c_filerrrrÚ make_c_sourceªs 
ÿr…cCst||d||ƒSr )r„)rCrDZtarget_py_filerrrrÚmake_py_source¯s
ÿr†cCsj| d¡}z$t tjj|f|dd…žŽ¡Wntk
rBYnX|d|7<tjj|f|žŽ|fS)Nr¨r©)r{ržÚmakedirsrŸr7r)Z    outputdirÚmodnameÚ    extensionÚpartsrrrÚ_modname_to_file³s
$r‹cCs*t||ƒ}| |||f¡t|||ƒ|Sr )rhrYÚsetattr)Ú    patchlistÚclsr Znew_methÚoldrrrÚ _patch_methÁs
 rcCs$t|ƒD]\}}}t|||ƒqdSr )ÚreversedrŒ)rrŽr Zold_methrrrÚ_unpatch_methsÇsr’cs\tjdkr(ddlm}t||ddd„ƒtjdkrXddlm}‡fd    d
„}t||d |ƒ‰dS) Nrr)Ú MSVCCompilerZ_remove_visual_c_refcSs|Sr r)rZ manifest_filerrrrQÐrRz&_patch_for_embedding.<locals>.<lambda>Údarwin)Ú    CCompilercs<d|jkr,t|jƒ|_|j d¡}d|j|<ˆ|f|ž|ŽS)Nz-bundlez -dynamiclib)Ú    linker_sorÅr´)rrZÚkwdsrm©Zold_link_shared_objectrrÚmy_link_shared_objectÕs
 
 
z3_patch_for_embedding.<locals>.my_link_shared_objectZlink_shared_object)ÚsysÚplatformZdistutils.msvc9compilerr“rÚdistutils.ccompilerr•)rr“r•r™rr˜rÚ_patch_for_embeddingËs
 ÿ
  þrcslddlm}ˆ d¡rRˆdd…‰tjdkr6ˆd7‰ntjdkrJˆd7‰nˆd    7‰t||d
‡fd d „ƒdS) Nr)Ú    build_extz.*rrz.dllr”z.dylibz.soZget_ext_filenamecsˆSr r)rZext_name©ÚtargetrrrQírRz#_patch_for_target.<locals>.<lambda>)Zdistutils.command.build_extržÚendswithršr›r)rr ržrrŸrÚ_patch_for_targetßs 
 
 
 
 
 
ÿr¢r¨Tú.cc     Ksžt|tƒs| d¡}|jr$| | ¡|dk    r^|jdk    } | rF| | ¡|dkrzt|||ƒ\}} |rl|g| } tj    j
| Ž}n|}|    dkr˜| r”d|}    nd}    t j ||f| Ž}t |||||d}|rTg}t ¡}zn| rÚt|ƒ|    dkrìt||    ƒ|r|dkrd}nd}td|tj     |¡fƒt |¡t  d|||
¡}W5t |¡t|ƒX|S||fSn<|dkrxt||d    ƒ\}}t||||d}|r’|Sd|fSdS)
NrVz%s.*r)rr¨zthe current directory isz setting the current directory toz%s %rz.py)r[rVrYZ_windows_unicodeZ_apply_windows_unicoder²Z_apply_embedding_fixr‹ržrŸr7rÚ get_extensionr…ÚgetcwdÚchdirr’rr¢ryÚabspathÚcompiler†)rCrDršZtmpdirZcall_c_compilerZc_fileZsource_extensionZextradirZcompiler_verboser Údebugr—Z    embeddingrŠZ
ext_c_fileÚextÚupdatedrÚcwdÚmsgZoutputfilenameryrrrÚ    recompileðsl
 
 
 
 
 
ÿ
 
 
ÿ
 
 
ÿ
 
 
 
ÿr®)F)F)r¨TNr£NrNN)!ržršÚior&rrÚerrorrZ cffi_opcoderFr¶rÕr›Ú version_infor³r
rr,r8r@rBÚStringIOrsÚBytesIOr„r…r†r‹rr’rr¢r®rrrrÚ<module>sX ÿ
 
 
þ