/usr/lib64/python3.9/site-packages/cffi/__pycache__
NameSizeModeActions
api.cpython-39.opt-1.pyc342910644editdlrm
api.cpython-39.pyc343260644editdlrm
backend_ctypes.cpython-39.opt-1.pyc396540644editdlrm
backend_ctypes.cpython-39.pyc399230644editdlrm
cffi_opcode.cpython-39.opt-1.pyc46910644editdlrm
cffi_opcode.cpython-39.pyc47190644editdlrm
commontypes.cpython-39.opt-1.pyc18260644editdlrm
commontypes.cpython-39.pyc18640644editdlrm
cparser.cpython-39.opt-1.pyc235720644editdlrm
cparser.cpython-39.pyc236870644editdlrm
error.cpython-39.opt-1.pyc14840644editdlrm
error.cpython-39.pyc14840644editdlrm
ffiplatform.cpython-39.opt-1.pyc35410644editdlrm
ffiplatform.cpython-39.pyc35410644editdlrm
lock.cpython-39.opt-1.pyc3810644editdlrm
lock.cpython-39.pyc3810644editdlrm
model.cpython-39.opt-1.pyc195920644editdlrm
model.cpython-39.pyc197230644editdlrm
pkgconfig.cpython-39.opt-1.pyc51190644editdlrm
pkgconfig.cpython-39.pyc51190644editdlrm
recompiler.cpython-39.opt-1.pyc464780644editdlrm
recompiler.cpython-39.pyc469180644editdlrm
setuptools_ext.cpython-39.opt-1.pyc72390644editdlrm
setuptools_ext.cpython-39.pyc72580644editdlrm
vengine_cpy.cpython-39.opt-1.pyc352310644editdlrm
vengine_cpy.cpython-39.pyc354440644editdlrm
vengine_gen.cpython-39.opt-1.pyc207330644editdlrm
vengine_gen.cpython-39.pyc209810644editdlrm
verifier.cpython-39.opt-1.pyc92710644editdlrm
verifier.cpython-39.pyc92880644editdlrm
__init__.cpython-39.opt-1.pyc4830644editdlrm
__init__.cpython-39.pyc4830644editdlrm
Edit: /usr/lib64/python3.9/site-packages/cffi/__pycache__/recompiler.cpython-39.pyc (46918B)
a <œ`8üã@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ú5/usr/lib64/python3.9/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Ú Osÿz2StructUnionExpr.as_python_expr..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 gd¢Z dd„Z d–dd„Z dd„Z dd„Zdd„Zdd„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<„Z d=d>„Z!d—d@dA„Z"dBdC„Z#dDdE„Z$dFdG„Z%e%Z&dHdI„Z'dJdK„Z(e(Z)dLdM„Z*e*Z+dNdO„Z,dPdQ„Z-dRdS„Z.d˜dUdV„Z/dWdX„Z0dYdZ„Z1d[d\„Z2d]d^„Z3d™d_d`„Z4dadb„Z5dcdd„Z6dedf„Z7dgdh„Z8didj„Z9dkdl„Z:dmdn„Z;dodp„Ze>Z?Z@dudv„ZAdwdx„ZBdydz„ZCd{d|„ZDd}d~„ZEeEZFZGdd€„ZHd�d‚„ZIdƒd„„ZJd…d†„ZKd‡dˆ„ZLd‰dŠ„ZMd‹dŒ„ZNeNZOeNZPd�dŽ„ZQd�d�„ZRd‘d’„ZSeSZTd“d”„ZUd?S)šÚ RecompilerrFcCs||_||_||_t|_dSr )ÚffiÚ module_nameÚtarget_is_pythonÚ VERSION_BASEÚ_version)rrCrDrErrrr�szRecompiler.__init__cCst|j|ƒ|_dSr )ÚmaxrG)rZverrrrÚ needs_version‡szRecompiler.needs_versionc Cs.i|_| d¡t|jtd�}g|_|D]œ}|jr(|j|dusDJ‚t|jƒ|j|<|j |¡|jD]P}t |t j t j t j t jt jfƒsŒJ‚|j|durªt|jƒ|j|<|j |¡qf|j d¡q(|D]P}|jsÊ|j|durÊt|jƒ|j|<|j |¡|jrÊ|jdurÊ|j d¡qÊd|j ¡v�s0J‚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ƒ�sJ‚�qt|jƒ|_dS) NZ collecttype©ÚkeyZENDÚLENcSs|jSr ©r ©ÚtprrrÚ´óz/Recompiler.collect_type_table..cSs|jSr rMrNrrrrP·rQZ_emit_bytecode_)Ú _typesdictÚ _generateÚsortedÚstrÚ cffi_typesZis_raw_functionr#Ú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_declsrOÚtp1ÚiÚmethodr'rrrÚcollect_type_tableŠs`   ü   ÿÿ zRecompiler.collect_type_tablecCs|j }| |¡Sr )rEÚ enumfields)rrOZexpand_anonymous_struct_unionrrrÚ _enum_fieldsÄszRecompiler._enum_fieldscCsÐt|tjƒs.t|tƒr*|D]}| |¡qdS||jvrÌd|j|<t|tjƒr^| | ¡¡nnt|tjƒr°|j durÌ||j j j vrÌ|  |¡D] \}}}}| | |||¡¡qŒn| ¡D]\}}| |¡q¸dSr )rYrZBaseTypeByIdentityriÚ_do_collect_typerRr^Úas_raw_functionrcÚfldtypesrCÚ_parserÚ_included_declarationsroÚ _field_typeZ _get_items)rrOÚxZname1rjÚ_rrrrpÏs"         ÿzRecompiler._do_collect_typec Cs¶|jjj ¡}t|ƒD]š\}\}}| dd¡\}}zt|d||fƒ}Wntyftd|ƒ‚Yn0z||_ |||ƒWqt y®} zt   | |¡‚WYd} ~ qd} ~ 00qdS)Nr"rz_generate_cpy_%s_%sz"not implemented in recompile(): %r) rCrsZ _declarationsÚitemsrTÚsplitrfÚAttributeErrorrÚ_current_qualsÚ ExceptionrZattach_exception_info) rÚ step_nameÚlstr rOÚqualsÚkindZrealnamerlÚerrrrSâ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žJ‚||j |j ks†J‚q†t |ƒt |jƒksÊJ‚|jd}|j   ¡D],\}}|t |ƒksöJ‚||j |j ksÞJ‚qÞt |ƒt |j ƒk�s$J‚dS)NÚctxrƒcSs|jSr rM)ÚentryrrrrPrQz0Recompiler.collect_step_tables..rJr„r…) Ú_lstsÚ ALL_STEPSÚsetÚ_seen_struct_unionsrSÚ_add_missing_struct_unionsÚsortrirarxr#r rb)rr}r~rOrkrrrÚcollect_step_tables÷s*       zRecompiler.collect_step_tablesr&cCs|j |d¡dS)NÚ )Ú_fÚwrite)rZwhatrrrÚ_prntszRecompiler._prntcCs:|jr|dusJ‚| |¡n|dus*J‚| ||¡dSr )rEÚ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 Csl||_|j}|jjdur |dƒts,|dƒ| d¡}| d¡}| d¡|||d…<|d |¡ƒ|j  d¡d }|jjdu�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} ||v�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]d}z|jdd#…\}}Wn&t�yÆtd$|j|fƒ‚Yn0|du�rÚtd%ƒ‚|d&|fƒ�q†|d'ƒ|dƒ|ƒ|d(ƒ|d)ƒ|jD].} | | d k�r8|d*| ƒn |d+| ƒ�q|jD]$} | d,k�rN|d-| | | fƒ�qN|jj�rˆ|d.ƒn|d/ƒ|d0t|jƒfƒd }|j�r¸|dO}|d1|ƒ|dƒ|ƒ|d2ƒ|d3ƒ|dƒ|ƒ|d ƒ|d4ƒ|d5|fƒ|d6ƒ|j�r6|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©r3rOrkrrrr4WrQz2Recompiler.write_c_source_to_f..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¤Úindexr7rDryÚ_print_string_literal_in_arrayrIÚVERSION_EMBEDDEDÚdictrRrxrerVÚ _get_c_namerr‹Ú_seen_constantsrSrŠr‰r#Ú_included_ffisÚ_assigned_sourcerzrÚ _num_externpyrG)rr–r—Úprntr£rkZbase_module_nameÚtypeindex2typer'r0Znumsr}r~rˆÚffi_to_includeÚincluded_module_nameÚincluded_sourcer.rrrr•'s2   ÿÿÿ        ÿ    ÿ ÿÿÿ  ÿ      ÿÿ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ØrQz%Recompiler._to_py..rr&z(%s)r5)rYrUÚlistrir#rWr7r)rrvZreprrrr¿Ôs    zRecompiler._to_pyc Csš||_|j}|dƒ|dƒt|jjp(dƒ}t|ƒD]l}|jj|}z|jdd…\}}Wn$ty~td|j|fƒ‚Yn0|dur�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þrQz3Recompiler.write_py_source_to_f..z _types = %s,r&cSsg|]\}}||f‘qSrrr©rrrr4rQrrƒz _%ss = %s,z _includes = (%s,),ú, cSsg|] }d|‘qS)z_ffi%dr©r3rkrrrr4 rQú))r‘r“r#rCr·Úranger¸rzrrDrGrirVr¿r7r´rRrxrŠr‰) rr–rºZ num_includesrkr¼r½r¾Z types_lstr»r}r~rrrr”ÞsN   ÿ  ÿÿÿ ÿ    ÿzRecompiler.write_py_source_to_fcCs |j|Sr )rR)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 vrŠ|  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"rw©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)ZNULLz %s = %s(%s%s);z' if (%s == (%s)%s && PyErr_Occurred()))rYrr[Úis_complex_typeÚis_integer_typer ÚUnknownFloatTypeÚ get_c_nameÚreplacerIÚVERSION_CHAR16CHAR32r\Ú"_convert_funcarg_to_c_ptr_or_arrayr]r“rÇr^r%) rrOÚfromvarÚtovarÚerrcodeZextraargZ converterÚcnameZerrvaluerrrÚ_convert_funcarg_to_csJ    ÿ  ÿ  ÿÿ ÿ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);)rYrr\Úadd)rrOÚ 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Í)rrOrÑ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¡}|dvrt| t ¡d||fSd ||  |¡fSn²t|tj tj fƒr¸d ||  |¡fSt|tj ƒrÞd ||  t  |j¡¡fSt|tjƒ�r|jdu�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"rwrÉ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)))rYrr[rËr rÌrÊrÎrIrÏrÇr\r^Ú ArrayTyperÀrcZfldnamesÚ TypeErrorrµrdr%)rrOÚvarÚcontextrÔrrrÚ_convert_expr_from_cXsD      ÿ ÿ ÿ ÿ ÿ ÿzRecompiler._convert_expr_from_ccCs| |d|f¡S)Nz (*(%s *)0))Ú _global_type©rrOr rrrÚ _typedef_type{szRecompiler._typedef_typecCs| | ||¡¡dSr )rprâ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†)rRr‰rWr@)rrOr 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årfÚ _struct_ctxr rYrZNamedPointerTypeÚtotyperárrrÚ_generate_cpy_typedef_ctxˆs   ÿz$Recompiler._generate_cpy_typedef_ctxcCs(| | ¡¡|jr$|js$| |¡dSr )rprqÚellipsisrErárrrÚ"_generate_cpy_function_collecttype”s z-Recompiler._generate_cpy_function_collecttypec Cs |jr J‚t|tjƒsJ‚|jr0| ||¡dS|j}t|jƒ}|dkrNd}n|dkr\d}nd}g}g}d|}t |jƒD],\} } |  |   d| |¡¡|  d| ¡qzd   |¡} | p¸d } |j rÌ|j d } 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ƒ}|jD]} | | ||¡�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)?NrZnoargrZarg0rXú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ærQz:Recompiler._generate_cpy_function_decl..r­zarg%dz return NULLz Py_BEGIN_ALLOW_THREADSz _cffi_restore_errno();cSsg|] }d|‘qS)rïrrÃrrrr4ñrQz { %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 )rYrrcÚ PrimitiveTyperÊ)rÆrrrÚneed_indirections  þz@Recompiler._generate_cpy_function_decl..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¨)rErYrr^rìÚ_generate_cpy_constant_declr“r#rXrerWrÍr7ÚabiròrZr‹rÙrTrÅrÕrßÚinsertZ void_type)rrOr rºÚnumargsÚargnameÚ argumentsZcall_argumentsrÞrkrÆÚ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_ctxrRrqr#rXZOP_DLOPEN_FUNCZOP_CPYTHON_BLTN_NZOP_CPYTHON_BLTN_OZOP_CPYTHON_BLTN_Vr‰rWr rh)rrOr 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])rYrrÛr_rÍrurÀ)rZ tp_structÚ field_nameZtp_fieldÚ actual_lengthZptr_struct_nameÚtp_itemrrrruQs  ÿ ÿ zRecompiler._field_typecCs,| |¡|jr(| ¡D]}| |¡qdSr )rprEÚanonymous_struct_fieldsÚ_struct_collecttype)rrOÚfldtyperrrr ]s  zRecompiler._struct_collecttypec CsB|jdurdS|j}d|f}|dƒ|d||fƒ|dƒ|dƒ|dƒ| |¡D]Æ\}}}} z‚| ¡sv|dkr”|dkr�|d |||fƒWqXt|tjƒrÄ|jdus´|jd krÄ|j}|d }q”|d |j d d|| d�|fƒWqXt �y} z|dt | ƒƒWYd} ~ qXd} ~ 00qX|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 */rz[0]z { %s = &p->%s; (void)tmp; }z*tmpzfield %r©rz /* %s */r®z(struct _cffi_align_%s { char x; %s y; };) rrr“rorËrYrrÛr_rÀrÍrrU) rrOrÔrçrºZ checkfuncnameÚfnameZftyper Úfqualr�rrrÚ _struct_decldsB  ÿ ÿÿ þ (zRecompiler._struct_declNc Cs¬|j|}d}g}t|tjƒr(| d¡|jdur@| d¡d}||jjjvr¼|dusd||jjjvr¼|jdurpn|j sŽt |  ¡ƒr„n | d¡|j rÊ|j dkr°t d||j fƒ‚| d¡n| d¡d }d  |¡pÖd }g}|du�rht| |¡ƒ} | D�]\} } } } | || | ¡} | | d |j| f¡t}| d k�rFt}d| }nL|du�sjt| tjƒ�rp| jdu�rpd}n"d|du�r†| d¡n|j| f}|du�s¦| d k�r¬d}n,|du�rÆd|j| f}nd| d¡| f}| t| ||| t||j| ƒƒ¡qøt|jdƒ}|jd |¡|du�r2d}d}d}n4|du�rNd|jf}d}nd|f}d|f}d}nd}d}d}|}|jd t|j|||||||ƒ¡|j  |¡dS)NZ _CFFI_F_UNIONZ_CFFI_F_OPAQUEZopaqueZ_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„)!rRrYrZ UnionTyperWrrrCrsrtÚpartialÚanyrZpackedr%r7rÁroruÚ_check_not_opaquer r(r)rÛr_rÍrrhr#r‰Úextendr,rŒrÖ)rrOrÔrçrèr-Zreason_for_not_expandingr.r2rnZfldnamer r r r'rÚoffsetr1Zalignr0rrrré†s¬     ÿ þ   ýÿ    ÿ    ÿþý ÿ ÿÿ      ÿÿzRecompiler._struct_ctxcCs:t|tjƒr|j}qt|tjƒr6|jdur6td|ƒ‚dS)Nz0%s is of an opaque type (not declared in cdef()))rYrrÛrÀrcrrrÜ)rrOÚlocationrrrrÜs  ÿzRecompiler._check_not_opaquecCs¾t|j ¡ƒ}|jdd„d�|D]–\}}||jvr"|jrHtd|fƒ‚|j d¡rv|jdd…  ¡rv|jdd…}n4|jdkrœ|j dkrœd}|  |d¡ntd |fƒ‚|  |d|¡q"dS) NcSs|dS)Nrr)Ztp_orderrrrrPérQz7Recompiler._add_missing_struct_unions..rJzDinternal inconsistency: %r is partial but was not seen at this pointú$rZ_IO_FILEÚFILEzinternal inconsistency: %r) rÁrarxrŽrŒrr%r Ú startswithÚisdigitZ forcenameråré)rr~rOÚorderrçrrrr�ãs"  þÿz%Recompiler._add_missing_struct_unionscCs| |¡dSr )r rárrrÚ _generate_cpy_struct_collecttypeúsz+Recompiler._generate_cpy_struct_collecttypecCs2| d¡}d|vr"|| dd¡fS|d|fSdS)Nr&r"rw)rÍrÎ)rrOrÔrrrÚ _struct_namesþs zRecompiler._struct_namescCs|j|g| |¡¢RŽdSr )rrrárrrÚ_generate_cpy_struct_declsz$Recompiler._generate_cpy_struct_declcCs|j|g| |¡¢RŽdSr )rérrárrrÚ_generate_cpy_struct_ctx sz#Recompiler._generate_cpy_struct_ctxcCs(t|tjƒr| ||¡n | |¡dSr )rYrrdÚ_generate_cpy_enum_collecttyper rárrrÚ#_generate_cpy_anonymous_collecttypes z.Recompiler._generate_cpy_anonymous_collecttypecCs.t|tjƒr| |¡n| ||d|¡dS©NZtypedef_)rYrrdÚ_generate_cpy_enum_declrrárrrÚ_generate_cpy_anonymous_decls  z'Recompiler._generate_cpy_anonymous_declcCs0t|tjƒr| ||¡n| ||d|¡dSr$)rYrrdÚ _enum_ctxrérárrrÚ_generate_cpy_anonymous_ctxs z&Recompiler._generate_cpy_anonymous_ctxÚconstcCs||f|jvrtd||fƒ‚|j ||f¡|j}d||f}|r¸|d|ƒ|dƒ|d|fƒ|d||fƒ|dur¦|dkr�d|f}|d |fƒ|d ƒ|d ƒ|d ƒn>|dusÄJ‚|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“rÍ)rÚis_intr rOÚcategoryrrºÚfuncnamerrrÚ_generate_cpy_const&s6 ÿ  ÿ    zRecompiler._generate_cpy_constcCs | ¡}|r|jr| |¡dSr )rËrErp©rrOr r*rrrÚ"_generate_cpy_constant_collecttypeDs z-Recompiler._generate_cpy_constant_collecttypecCs| ¡}| |||¡dSr )rËr-r.rrrrõIsz&Recompiler._generate_cpy_constant_declcCs^|js| ¡rttdƒ}n$|jr&t}nt}|j|}t||ƒ}|jd t |d||ƒ¡dS)Nr¦r‚ú_cffi_const_%s) rErËrhÚOP_CONSTANT_INTZOP_DLOPEN_CONSTZ OP_CONSTANTrRr‰rWr )rrOr rZ const_kindr-rrrrMs    ÿz%Recompiler._generate_cpy_constant_ctxcCs| |¡dSr )rprárrrr"]sz)Recompiler._generate_cpy_enum_collecttypecCs|jD]}| d|¡qdS)NT)Ú enumeratorsr-)rrOr Ú enumeratorrrrr%`s z"Recompiler._generate_cpy_enum_declc Csä|j|}ttdƒ}|jr"| ¡t|j|jƒD](\}}|jd  t |d|||d�¡q0|dur‚d|vr‚|js‚d|}d|}n4|  |j g¡} |j   | ¡}tt|j  | d¡ƒdkƒ}d  |j¡} |jd   t|j|||| ƒ¡dS) Nr¦r‚r0©rrrz ((%s)-1) <= 0rr5r…)rRrhÚOP_ENUMrEZcheck_not_partialÚzipr2Z enumvaluesr‰rWr Zbuild_baseinttyperCZsizeofÚintÚcastr7r8r ) rrOrÔr-rr3Z enumvaluerr:Zbasetpr;rrrr'ds(    ÿÿ    ÿzRecompiler._enum_ctxcCs| || ¡¡dSr )r'rµ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)NrTr4)r-)rrOr rrrrÚ_generate_cpy_macro_decl‚sz#Recompiler._generate_cpy_macro_declcCsT|dkr"|jrtd|fƒ‚d}n|}ttdƒ}|jd t|d|||d�¡dS)NrzGcannot use the syntax '...' in '#define %s ...' when using the ABI moder¦r‚r0r4)rErrhr1r‰rWr )rrOr rrrrrÚ_generate_cpy_macro_ctx‰sÿÿ   ÿÿz"Recompiler._generate_cpy_macro_ctxcCsFt|tjƒrB|j}|dkr$d|f}| |jd|¡}t ||¡}|S)Nrz_cffi_array_len(%s)r)rYrrÛr_ràrÀ)rrOZ global_namerrrrrràšs   zRecompiler._global_typecCs| | ||¡¡dSr )rpràrárrrÚ"_generate_cpy_variable_collecttype£sz-Recompiler._generate_cpy_variable_collecttypecCs„|j}| ||¡}t|tjƒr4|jdur4|j}d}nd}d|f}|d|j||jd�ƒ|dƒ|d||fƒ|dƒ|ƒdS) Nr&ú&z*_cffi_var_%s(void)ústatic r r¬z return %s(%s);r®) r“ràrYrrÛr_rÀrÍr{)rrOr 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àrRrEZ OP_GLOBAL_VARZOP_GLOBAL_VAR_Fr‰rWr rh)rrOr r-r'rrrÚ_generate_cpy_variable_ctx½s   ÿz%Recompiler._generate_cpy_variable_ctxcCst|tjƒsJ‚| |¡dSr )rYrr^rprá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Ú)rYrrór rNrrrÚmay_need_128_bitsês ÿz9Recompiler._extern_python_decl..may_need_128_bitsr>éz!sizeof(%s) > %d ? sizeof(%s) : %dz%s%sr¬z char a[%s];z char *p = a;za%dr>z *(%s)(p + %d) = %s;rz, _cffi_call_python(&_cffi_externpy__%s, p);z return *(%s)p;r®r)r“rYròrrZrÍrDrerXrWr7rörHr#rcr\r¹)rrOr Z tag_and_spacerºZsize_of_resultrÞrúrkrÆrýrûrürDZ size_of_arrrÚ_extern_python_declÑsb ÿ ÿ        þ ÿ   zRecompiler._extern_python_declcCs| ||d¡dS)Nr?©rFrárrrÚ _generate_cpy_extern_python_declsz+Recompiler._generate_cpy_extern_python_declcCs| ||d¡dS)NzCFFI_DLLEXPORT rGrárrrÚ#_generate_cpy_dllexport_python_decl sz.Recompiler._generate_cpy_dllexport_python_declcCs| ||d¡dS)Nr&rGrá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%rRrhZOP_EXTERN_PYTHONr‰rWr )rrOr r-rrrrÚ_generate_cpy_extern_python_ctxsÿ   ÿz*Recompiler._generate_cpy_extern_python_ctxcCsä|j}|dƒt|tƒs$| d¡}n | d¡z| d¡WntyVd|}Yn0| d¡D]|}|}tdƒtur‚tt |ƒ}nt |ƒdd…}|d |  ¡ƒd }|D]*}t |ƒd krÆ||ƒd }|d |f7}qª||ƒqbdS) 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“rYÚbytesÚencodeÚdecodeÚUnicodeDecodeErrorÚ splitlinesrÆÚmapÚordrLÚrstripr#)rÚsrºÚliner0Z printed_lineÚcrrrr²s,       z)Recompiler._print_string_literal_in_arraycCstttƒ|j|<dSr )rhÚ OP_PRIMITIVEZ PRIM_VOIDrV©rrOr±rrrÚ_emit_bytecode_VoidType=sz"Recompiler._emit_bytecode_VoidTypecCst|j}tt|ƒ|j|<dSr )ZPRIMITIVE_TO_INDEXr rhrYrV)rrOr±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 rhrYrV©rrOr±rVrrrÚ!_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 */ )r]r^rrrÚ_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 dur¨|j dkr˜|dO}ntd|j fƒ‚tt|ƒ|j|<dS)NrrCr<zabi=%r)rhZ OP_FUNCTIONrRròrVrXrYrrór\r(r7rìrör%ZOP_FUNCTION_END)rrOr±rjZ realindexr.rrrÚ_emit_bytecode_RawFunctionTypePs        z)Recompiler._emit_bytecode_RawFunctionTypecCstt|j|jƒ|j|<dSr )rhÚ OP_POINTERrRrêrVrZrrrÚ_emit_bytecode_PointerTypecsz%Recompiler._emit_bytecode_PointerTypecCs"| ¡}tt|j|ƒ|j|<dSr )rqrhrbrRrV)rrOr±ÚrawrrrÚ_emit_bytecode_FunctionPtrTypeisz)Recompiler._emit_bytecode_FunctionPtrTypecCs’|j|j}|jdur(tt|ƒ|j|<nf|jdkrNtdt|ƒ dd¡fƒ‚n@|j|ddksdJ‚tt |ƒ|j|<tdt|jƒƒ|j|d<dS)Nrzitype %s badly placed: the '...' array length can only be used on global arrays or on fields of structuresz/*...*/rrL) rRrÀr_rhZ OP_OPEN_ARRAYrVrrUrÎZOP_ARRAY)rrOr±Z item_indexrrrÚ_emit_bytecode_ArrayTypems   ÿÿÿz#Recompiler._emit_bytecode_ArrayTypecCs|j|}tt|ƒ|j|<dSr )rarhZOP_STRUCT_UNIONrV)rrOr±Z struct_indexrrrÚ_emit_bytecode_StructType{s z$Recompiler._emit_bytecode_StructTypecCs|j|}tt|ƒ|j|<dSr )rbrhr5rV)rrOr±Z enum_indexrrrÚ_emit_bytecode_EnumType€s z"Recompiler._emit_bytecode_EnumType)F)r&)N)Nr)N)N)Vrrrr¹rrIrmrorprSrŠr�r“r˜r¤r•r¿r”rÇrÕrÙrÐrßrârãrärårërírrrur rrérr�rZ_generate_cpy_union_collecttyperr Z_generate_cpy_union_declr!Z_generate_cpy_union_ctxr#r&r(r-r/rõrr"r%r'r9r:r;r<ràr=r@rArBZ*_generate_cpy_dllexport_python_collecttypeZ._generate_cpy_extern_python_plus_c_collecttyperFrHrIrJrKZ"_generate_cpy_dllexport_python_ctxZ&_generate_cpy_extern_python_plus_c_ctxr²r[r\r_r`rarcZ_emit_bytecode_ConstPointerTypeZ_emit_bytecode_NamedPointerTypererfrgZ_emit_bytecode_UnionTyperhrrrrrB~s² :  . 4-# # " V ÿ    þ6 þrB)rcseZdZ‡fdd„Z‡ZS)ÚNativeIOcs(t|tƒr| d¡}tt|ƒ |¡dS)NrL)rYZunicoderOÚsuperrir’)rrV©rgrrr’‰s  zNativeIO.write)rrrr’Ú __classcell__rrrkrriˆsric Cs@|rtd|fƒt|||dud�}| ¡| ¡tƒ}| ||¡| ¡}zVt|dƒ�*}| t |ƒd¡|krvt ‚Wdƒn1sŠ0Y|r tdƒWdSt �y:d|t   ¡f} t| dƒ�}|  |¡Wdƒn1sî0Yzt  | |¡Wn*t�y2t  |¡t  | |¡Yn0Yd S0dS) Nz generating %s)rEr™rz(already up-to-date)Fz%s.~%dÚwT)ÚprintrBrmr�rir˜ÚgetvalueršÚreadr#ÚIOErrorr›Úgetpidr’ÚrenameÚOSErrorÚunlink) rCrDr—Z target_fileÚverboseZ recompilerr–ÚoutputÚf1Ztmp_filerrrÚ_make_c_or_py_sourceŽs6ÿ  " ( ryFcCs|dus J‚t|||||ƒSr ©ry)rCrDr—Z target_c_filervrrrÚ make_c_sourceªs  ÿr{cCst||d||ƒSr rz)rCrDZtarget_py_filervrrrÚmake_py_source¯s ÿr|cCsl| d¡}z&t tjj|g|dd…¢RŽ¡WntyBYn0|d|7<tjj|g|¢RŽ|fS)Nr¥r¦)ryr›Úmakedirsrœr7rt)Z outputdirÚmodnameÚ extensionÚpartsrrrÚ_modname_to_file³s & r�cCs*t||ƒ}| |||f¡t|||ƒ|Sr )rfrWÚ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_filerrrrPÐrQz&_patch_for_embedding..Údarwin)Ú CCompilercsBd|jvr,t|jƒ|_|j d¡}d|j|<ˆ|g|¢Ri|¤ŽS)Nz-bundlez -dynamiclib)Z linker_sorÁr±)rrXÚkwdsrk©Zold_link_shared_objectrrÚmy_link_shared_objectÕs     z3_patch_for_embedding..my_link_shared_objectZlink_shared_object)ÚsysÚplatformZdistutils.msvc9compilerr‰r†Zdistutils.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©ÚtargetrrrPírQz#_patch_for_target..)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$| | ¡|du�rt|jdu} | rF| | ¡|durzt|||ƒ\}} |rl|g| } tj j | Ž}n|}| dur˜| r”d|} nd} t j ||fi| ¤Ž}t |||||d�}|�rjg}t ¡}z€| rÞt|ƒ| dkrðt|| ƒ|�r"|dk�rd}nd}td|tj  |¡fƒt |¡t  d||| ¡}Wt |¡t|ƒnt |¡t|ƒ0|S||fSn<|du�rŽt||d ƒ\}}t||||d�}|�r¨|Sd|fSdS) NrLz%s.*r)rvr¥zthe current directory isz setting the current directory toz%s %rz.py)rYrUrOZ_windows_unicodeZ_apply_windows_unicoder¯Z_apply_embedding_fixr�r›rœr7rZ get_extensionr{Úgetcwdr‘r–rnÚabspathÚchdirÚcompilerˆr|)rCrDr—ZtmpdirZcall_c_compilerZc_fileZsource_extensionZextradirZcompiler_verboser”ÚdebugrŒZ embeddingr€Z ext_c_fileÚextÚupdatedrƒÚcwdÚmsgZoutputfilenamerwrrrÚ recompileðsn      ÿ   ÿ   ÿ  ÿ    ÿr¡)F)F)r¥TNr—NrNN)!r›r�Úior&rrÚerrorrZ cffi_opcoderFr³rÏr�Ú version_infor°r rr,r8r@rBÚStringIOriÚBytesIOryr{r|r�r†rˆr‘r–r¡rrrrÚsP ÿ   þ