U q`8@s@ddlZddlZddlmZddlmZGdddeZdZdS)N)modelVerificationErrorc@seZdZdZdZddZddZddZd d Zdnd d Z ddZ ddZ ddZ doddZ ddZddZddZddZdd Zd!d"Zd#d$Zd%d&Zd'd(ZeZeZeZeZeZd)d*Zd+d,Zd-d.ZeZd/d0Z eZ!d1d2Z"d3d4Z#d5d6Z$d7d8Z%eZ&d9d:Z'd;d<Z(d=d>Z)d?d@Z*dAdBZ+dCdDZ,dEdFZ-dGdHZ.eZ/dIdJZ0dKdLZ1dMdNZ2dOdPZ3dpdSdTZ4dUdVZ5dWdXZ6eZ7eZ8eZ9dqdYdZZ:d[d\Z;drd^d_Zd`daZ?dbdcZ@dddeZAeZBeZCeZDeZEdfdgZFdhdiZGeZHeZIdjdkZJdldmZKdS)sVCPythonEnginexTcCs||_|j|_i|_i|_dSN)verifierffi_struct_pending_verification_types_of_builtin_functions)selfr r7/tmp/pip-target-nv4zd3e_/lib/python/cffi/vengine_cpy.py__init__ szVCPythonEngine.__init__cCsdSrr)r kwdsrrrpatch_extension_kwdssz#VCPythonEngine.patch_extension_kwdscCsRzt||\}}}Wntk r,YdSX|dk r>||d|krNdS|SNr)imp find_module ImportErrorclose)r module_namepathZ so_suffixesffilenamedescrrrrrs zVCPythonEngine.find_modulecCsi|_|ddS)NZ collecttype) _typesdict _generater rrr collect_types$szVCPythonEngine.collect_typescCs|j|ddS)N )_fwrite)r whatrrr_prnt(szVCPythonEngine._prntcCs |j|Sr)r)r typerrr _gettypenum+szVCPythonEngine._gettypenumcCs8t|tjr|jdkr4||jkr4t|j}||j|<dS)N long double) isinstancer PrimitiveTypenamerlen)r tpnumrrr_do_collect_type/s  zVCPythonEngine._do_collect_typecCs|ddg|_|j}|t|||jj||d|||d|d|d|d|d||j}|jd}|d ||d |d |d ||d |d|d|d|d||d|d||d|d|d|d|d|d|f|d|d|d|d|d||d||d|d||d|d|d||d|d |d!|f|d |d"|d||d#dS)$Nz ((void)lib,0)declz&static PyMethodDef _cffi_methods[] = {methodz3 {"_cffi_setup", _cffi_setup, METH_VARARGS, NULL},z) {NULL, NULL, 0, NULL} /* Sentinel */z};Fz#if PY_MAJOR_VERSION >= 3z.static struct PyModuleDef _cffi_module_def = {z PyModuleDef_HEAD_INIT,z "%s",z NULL,z -1,z _cffi_methods,z NULL, NULL, NULL, NULLZPyMODINIT_FUNCzPyInit_%s(void){z PyObject *lib;z+ lib = PyModule_Create(&_cffi_module_def);z if (lib == NULL) return NULL;z# if (%s < 0 || _cffi_init() < 0) {z Py_DECREF(lib); }z return lib;}z#elsez init%s(void)z+ lib = Py_InitModule("%s", _cffi_methods);z return;z! if (%s < 0 || _cffi_init() < 0)z return;z#endif) r _chained_list_constantsr&cffimod_headerr preambler_generate_setup_customget_module_name)r prntmodname constantsrrrwrite_source_to_f6st          z VCPythonEngine.write_source_to_fNc svtzttdrt}zvz6ttdr<|dk rsz/VCPythonEngine.load_library..csg|] }|qSrrrBi) revmappingrrrEscs&eZdZZjZgZfddZdS)z/VCPythonEngine.load_library..FFILibrarycsjt|jSr) _cffi_dirlist__dict__r) FFILibraryrr__dir__sz7VCPythonEngine.load_library..FFILibrary.__dir__N)__name__ __module__ __qualname__Z_cffi_python_moduler Z _cffi_ffirIrMr)rLmoduler rrrLsrLrz0reimporting %r might overwrite older definitionsZloadedlibrary)r acquire_lock release_lockhasattrsysr@rAZ load_dynamicr r;Zmodulefilenamerr_loaddictritemsranger-rJmapr _get_cached_btypeobjectZ _cffi_setupwarningswarnZ_cffi_original_ffir Z_cffi_types_of_builtin_funcs)r flagsZprevious_flagseerrorlstrSr_r)rLrQrHr r load_librarysB      zVCPythonEngine.load_librarycCs$dd|jjjD}||S)NcSsg|]\}\}}||fqSrr)rBrCr.ZqualrrrrEs z4VCPythonEngine._get_declarations..)r _parserZ _declarationsrZsort)r rdrrr_get_declarationss  z VCPythonEngine._get_declarationsc Cs|D]\}}|dd\}}zt|d||f}Wn tk rVtd|YnXz|||Wqtk r}zt||W5d}~XYqXqdS)N rz_generate_cpy_%s_%sznot implemented in verify(): %r)rhsplitgetattrAttributeErrorr Exceptionrattach_exception_info)r step_namer,r.kindrealnamer2rbrrrrs   zVCPythonEngine._generatec Ks~|D]p\}}|dd\}}t|d||f}z||||f|Wqtk rv} zt| |W5d} ~ XYqXqdS)Nrirz _%s_cpy_%s)rhrjrkrmrrn) r rQrorr,r.rprqr2rbrrrrXs zVCPythonEngine._loadcCsdSrrr r.r,rrr_generate_nothingsz VCPythonEngine._generate_nothingcKsdSrrr r.r,rQrrrr _loaded_noopszVCPythonEngine._loaded_noopcCs*d}t|tjrT|r2|jdkr2d}d|j}nd|d|jddf}d}nt|tjrt|||||dSt|tj tj fr| d || ||f| d |dSt|tj rd |d}d | |}d }nt|| d||||f| d||d|f| d |dS)Nr!_BoolZ_cffi_to_c_intz, %sz(%s)_cffi_to_c_%sri_z-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()))r*rr+is_integer_typer, get_c_namereplace PointerType"_convert_funcarg_to_c_ptr_or_array StructOrUnionEnumTyper&r(FunctionPtrTypeNotImplementedError)r r.fromvartovarerrcodeZextraarg converterZerrvaluerrr_convert_funcarg_to_csB      z$VCPythonEngine._convert_funcarg_to_ccCs.t|tjr*|d|d|ddS)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)r r. localvars freelinesrrr_extra_local_variabless   z%VCPythonEngine._extra_local_variablescCs~|d|d||||f|d|d|f|d||||f|d|d||ddS) Nz1 datasize = _cffi_prepare_pointer_call_argument(z( _cffi_type(%d), %s, (char **)&%s);z if (datasize != 0) {zE %s = ((size_t)datasize) <= 640 ? alloca((size_t)datasize) : NULL;zF if (_cffi_convert_array_argument(_cffi_type(%d), %s, (char **)&%s,z, datasize, &large_args_free) < 0)z %s;r5)r&r()r r.rrrrrrr|s    z1VCPythonEngine._convert_funcarg_to_c_ptr_or_arraycCst|tjr`|r,|jdkr,d||jfS|jdkrLd|jdd|fSd|||fSnt|tjtjfrd|||fSt|tj rd||t|j fSt|tj r|j dkrt d ||fd |||fSt|tjrd|||fSt|dS) Nrvz_cffi_from_c_int(%s, %s)r)z_cffi_from_c_%s(%s)rirwz/_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+rxr,rzr(r{r ArrayTypeitemr}fldnames TypeError _get_c_namer~r)r r.varcontextrrr_convert_expr_from_c*sF     z#VCPythonEngine._convert_expr_from_ccCsHt|tjst|jr"||n"|jD]}||q(||jdSr)r*rrAssertionErrorellipsisr0argsresult)r r.r,r'rrr"_generate_cpy_function_collecttypeQs    z1VCPythonEngine._generate_cpy_function_collecttypec Cst|tjst|jr(|d||dS|j}t|j}|dkrFd}n|dkrTd}nd}|d|d||f|d d |}t |jD] \}}|d | d ||qt } t } |jD]}| || | qt | D]} |d | fqt|jtjs*d } d|}|d |j d||dnd} t|jdkrtt|j} | D]}|d|qP||dd||ddd| Df|d|t |jD](\}}||d|d|d|q|d|d|d| |dddtt|jDf|d |d!||d"|dkr>|d#| r~|d$||jd%d&| D]}|d'|q`|d(n(| D]}|d'|q|d)|d*|d+|dS),NFrZnoargrZarg0rstatic PyObject *z(_cffi_f_%s(PyObject *self, PyObject *%s)r3zargument of %s %s;z x%dz result = z result of %sz resultz PyObject *pyresult;r!z PyObject *arg%d;z+ if (!PyArg_ParseTuple(args, "%s:%s", %s))Oz, cSsg|] }d|qS)z&arg%drrFrrrrEsz>VCPythonEngine._generate_cpy_function_decl..r4zarg%dx%dz return NULLz Py_BEGIN_ALLOW_THREADSz _cffi_restore_errno();z { %s%s(%s); }cSsg|] }d|qS)rrrFrrrrEsz _cffi_save_errno();z Py_END_ALLOW_THREADS (void)self; /* unused */ (void)noarg; /* unused */z pyresult = %s;rz result typez z return pyresult;z Py_INCREF(Py_None);z return Py_None;r6)r*rrrr_generate_cpy_constr&r-r enumeraterysetrsortedrZVoidTyper[joinrr)r r.r,r<numargsargnamerrGr'rrr1Z result_coderngZfreelinerrr_generate_cpy_function_decl\s       z*VCPythonEngine._generate_cpy_function_declcCsL|jr dSt|j}|dkr"d}n|dkr0d}nd}|d|||fdS)NrZ METH_NOARGSrZMETH_OZ METH_VARARGSz {"%s", _cffi_f_%s, %s, NULL},)rr-rr&)r r.r,rmethrrr_generate_cpy_function_methods z,VCPythonEngine._generate_cpy_function_methodcCs.|jr dSt||}t|||||j|<dSr)rrksetattrr )r r.r,rQrSfuncrrr_loaded_cpy_functions   z#VCPythonEngine._loaded_cpy_functioncCs ||jkst||d|dSNstructr,r_generate_struct_or_union_declrrrrr_generate_cpy_struct_declsz(VCPythonEngine._generate_cpy_struct_declcCs||d|dSr _generate_struct_or_union_methodrrrrr_generate_cpy_struct_methodsz*VCPythonEngine._generate_cpy_struct_methodcCs||d||dSr_loading_struct_or_unionr r.r,rQrrr_loading_cpy_structsz"VCPythonEngine._loading_cpy_structcKs||dSr_loaded_struct_or_unionrtrrr_loaded_cpy_structsz!VCPythonEngine._loaded_cpy_structcCs ||jkst||d|dSNunionrrrrrr_generate_cpy_union_declsz'VCPythonEngine._generate_cpy_union_declcCs||d|dSrrrrrrr_generate_cpy_union_methodsz)VCPythonEngine._generate_cpy_union_methodcCs||d||dSrrrrrr_loading_cpy_unionsz!VCPythonEngine._loading_cpy_unioncKs||dSrrrtrrr_loaded_cpy_unionsz VCPythonEngine._loaded_cpy_unionc Cs |jdkrdSd||f}d||f}d||f}|j}|d||f|d|d|d|D]\}} } } t| tjr| s| dkr|d |qlz$|d | jd d || d |fWqlt k r} z|dt | W5d} ~ XYqlXql|d|d|d|f|d|d||d|d||d|D]h\}} } } | dkrlqR|d||ft| tj r| j dkr|d| n|d||fqR|d|d|d|d|d|d|d|f|d|dS) Nz_cffi_check_%s_%s_cffi_layout_%s_%s%s %szstatic void %s(%s *p)r3z8 /* only to generate compile-time warnings or errors */z (void)p;rz (void)((p->%s) << 1);z { %s = &p->%s; (void)tmp; }z*tmpzfield %r)Zqualsz /* %s */r6rz#%s(PyObject *self, PyObject *noarg)z, struct _cffi_aligncheck { char x; %s y; };z static Py_ssize_t nums[] = {z sizeof(%s),z) offsetof(struct _cffi_aligncheck, y),z offsetof(%s, %s),z 0, /* %s */z sizeof(((%s *)0)->%s),z -1z };rrz' return _cffi_get_struct_layout(nums);z3 /* the next line is not executed, but compiled */z %s(0);)rstripr& enumfieldsr*rr+rxryrstrrlengthr) r r.prefixr,Z checkfuncnamelayoutfuncnamecnamer<fnameftypefbitsizefqualrbrrrrs`     $   z-VCPythonEngine._generate_struct_or_union_declcCs0|jdkrdSd||f}|d||fdS)Nrz {"%s", %s, METH_NOARGS, NULL},)rr&)r r.rr,rrrrr s   z/VCPythonEngine._generate_struct_or_union_methodc Cs|jdkrdSd||f}t||}|}t|tjr|jr|d}|d} |ddd} |ddd} |t| t| krt|jksnt| | || f|_ nd||f } || f|j |<dS)Nrrrr) rrkr*rr}partialZ force_flattenr-rZ fixedlayoutrr ) r r.rr,rQrfunctionlayoutZ totalsizeZtotalalignmentZfieldofsZ fieldsizerrrrrs   (z'VCPythonEngine._loading_struct_or_unionc Cs|jdkrdS|j|||jkrdd}|j}||}|j|\}}||d||d||d||dd}|D]v\}} } } | dkrq||||||d|f||ddkr|| } |||d|| d |f|d7}q|t |kst dS) NcSs||krtd|||fdS)Nz'%s (we have %d, but C compiler says %d)r)Z realvalueZ expectedvaluemsgrrrcheck0s z5VCPythonEngine._loaded_struct_or_union..checkrzwrong total sizerzwrong total alignmentrzwrong offset for field %rzwrong size for field %r) rr r]r popsizeofZalignofrZoffsetofr-r) r r.rr ZBStructrrrGrrrrZBFieldrrrr)s0      z&VCPythonEngine._loaded_struct_or_unioncCs.t|tjr|||dn||d|dSNr!)r*rr~_generate_cpy_enum_declrrrrrr_generate_cpy_anonymous_declMs z+VCPythonEngine._generate_cpy_anonymous_declcCst|tjs||d|dSr)r*rr~rrrrrr_generate_cpy_anonymous_methodSs z-VCPythonEngine._generate_cpy_anonymous_methodcCs0t|tjr||||n||d||dSr)r*rr~_loading_cpy_enumrrrrr_loading_cpy_anonymousWs z%VCPythonEngine._loading_cpy_anonymouscKs.t|tjr |j|||f|n ||dSr)r*rr~_loaded_cpy_enumrrtrrr_loaded_cpy_anonymous]s z$VCPythonEngine._loaded_cpy_anonymousconstFc Cst|j} d||f} | d| | d| d| d|sT| d|pD|d|n |dks`t|dk rt||||s|d krd |} n|} | d | f| d ||d df|stn | d|| d| d|r| d| d| d|f| d| d| d| d| d|| d| d| d| d|j|| d|j|<| d| dS)Nz _cffi_%s_%sstatic int %s(PyObject *lib)r3z PyObject *o;z int res;rz irr&z i = (%s);z o = %s;rGz variable typez! o = _cffi_from_c_int_const(%s);z if (o == NULL) return -1;z {z PyObject *o1 = o;z8 o = Py_BuildValue("On", o1, (Py_ssize_t)sizeof(%s));z Py_DECREF(o1);z if (o == NULL)z return -1;r5z- res = PyObject_SetAttrString(lib, "%s", o);z Py_DECREF(o);z if (res < 0) return %s;(lib)r6)r&ryr_check_int_constant_valuerr7) r is_intr,r.categoryvartpdelayedsize_too check_valuer<funcnameZrealexprrrrrfsR          z"VCPythonEngine._generate_cpy_constcCs&t|tjo|}|s"||dSr)r*rr+rxr0r r.r,rrrr"_generate_cpy_constant_collecttypesz1VCPythonEngine._generate_cpy_constant_collecttypecCs&t|tjo|}||||dSr)r*rr+rxrrrrr_generate_cpy_constant_declsz*VCPythonEngine._generate_cpy_constant_declcCs|j}|dkr"|d|||fn|d|||f|d|d||d||d|d||d |d |d |||f|d |d dS)Nrz& if ((%s) > 0 || (long)(%s) != %dL) {z1 if ((%s) <= 0 || (unsigned long)(%s) != %dUL) {z char buf[64];z if ((%s) <= 0)z. snprintf(buf, 63, "%%ld", (long)(%s));z elsez7 snprintf(buf, 63, "%%lu", (unsigned long)(%s));z) PyErr_Format(_cffi_VerificationError,z6 "%s%s has the real value %s, not %s",z( "%s", "%s", buf, "%d");rr5)r&)r r,rDZ err_prefixr<rrrrs8   z(VCPythonEngine._check_int_constant_valuecCs|dd}d||fS)N$Z___D_z _cffi_e_%s_%s)rz)r rr,rrr_enum_funcnames zVCPythonEngine._enum_funcnameenumcCs|jr&|jD]}|jd|ddq dS|||}|j}|d||dt|j|jD]\}}|||d|qZ|d|jd|d|jd<|d |dS) NTF)rrr3z enum %s: rrr6) r enumeratorsrrr&zip enumvaluesrr7)r r.r,r enumeratorrr< enumvaluerrrrs    z&VCPythonEngine._generate_cpy_enum_declcs.|jr*fdd|jD}t||_d|_dS)Ncsg|]}t|qSr)rk)rBrrQrrrEsz4VCPythonEngine._loading_cpy_enum..T)rrtuplerZpartial_resolved)r r.r,rQrrrrrs   z VCPythonEngine._loading_cpy_enumcCs(t|j|jD]\}}t|||qdSr)rrrr)r r.r,rQrSrrrrrrszVCPythonEngine._loaded_cpy_enumcCs&|dkrd}n|}|jd||ddS)Nz...T)r)r)r r.r,rrrr_generate_cpy_macro_declsz'VCPythonEngine._generate_cpy_macro_declcCs2t|tjrt|j}n t|}||dSr)r*rrr{rr0r r.r,Ztp_ptrrrr"_generate_cpy_variable_collecttypes  z1VCPythonEngine._generate_cpy_variable_collecttypecCsRt|tjr2t|j}|jd||||dnt|}|jd||dddS)NF)rrr)r)r*rrr{rrlength_is_unknownrrrr_generate_cpy_variable_decls    z*VCPythonEngine._generate_cpy_variable_declc st||}t|tjr|r|t|ts,t|\}}|j|j }t ||j |\}} | dkrrt d||j f| |}|jdk r|j|} |j| |}t|||dS|t||fdd} fdd} tt||t| | t|j|dS)Nrz/bad size: %r does not seem to be an array of %scsdSrrrRptrrrgettersz3VCPythonEngine._loaded_cpy_variable..gettercs |d<dSrr)rSrDrrrsetter sz3VCPythonEngine._loaded_cpy_variable..setter)rkr*rrrrrr r]rdivmodrrZresolve_lengthrcastrdelattrr'propertyrIappend) r r.r,rQrSrDsizeZ BItemTyperrestZBArrayrrrrr_loaded_cpy_variables2         z#VCPythonEngine._loaded_cpy_variablecCs4|j}|d|d|d|jd|ddS)Nz,static int _cffi_setup_custom(PyObject *lib)r3rTr6)r&r7)r r<rrrr:'s z%VCPythonEngine._generate_setup_custom)r!)N)NrNTFN)r!)r)LrNrOrPZ _class_keyZ_gen_python_modulerrrr r&r(r0r?rerhrrXrsrurrr|rZ!_generate_cpy_typedef_collecttypeZ_generate_cpy_typedef_declZ_generate_cpy_typedef_methodZ_loading_cpy_typedefZ_loaded_cpy_typedefrrrZ_loading_cpy_functionrZ _generate_cpy_struct_collecttyperrrrZ_generate_cpy_union_collecttyperrrrrrrrZ#_generate_cpy_anonymous_collecttyperrrrrrrZ_generate_cpy_constant_methodZ_loading_cpy_constantZ_loaded_cpy_constantrrrZ_generate_cpy_enum_collecttypeZ_generate_cpy_enum_methodrrrZ_generate_cpy_macro_collecttypeZ_generate_cpy_macro_methodZ_loading_cpy_macroZ_loaded_cpy_macrorrZ_generate_cpy_variable_methodZ_loading_cpy_variabler r:rrrrr s [ : $  P  3"  0   "ra( #include #include /* this block of #ifs should be kept exactly identical between c/_cffi_backend.c, cffi/vengine_cpy.py, cffi/vengine_gen.py and cffi/_cffi_include.h */ #if defined(_MSC_VER) # include /* for alloca() */ # if _MSC_VER < 1600 /* MSVC < 2010 */ typedef __int8 int8_t; typedef __int16 int16_t; typedef __int32 int32_t; typedef __int64 int64_t; typedef unsigned __int8 uint8_t; typedef unsigned __int16 uint16_t; typedef unsigned __int32 uint32_t; typedef unsigned __int64 uint64_t; typedef __int8 int_least8_t; typedef __int16 int_least16_t; typedef __int32 int_least32_t; typedef __int64 int_least64_t; typedef unsigned __int8 uint_least8_t; typedef unsigned __int16 uint_least16_t; typedef unsigned __int32 uint_least32_t; typedef unsigned __int64 uint_least64_t; typedef __int8 int_fast8_t; typedef __int16 int_fast16_t; typedef __int32 int_fast32_t; typedef __int64 int_fast64_t; typedef unsigned __int8 uint_fast8_t; typedef unsigned __int16 uint_fast16_t; typedef unsigned __int32 uint_fast32_t; typedef unsigned __int64 uint_fast64_t; typedef __int64 intmax_t; typedef unsigned __int64 uintmax_t; # else # include # endif # if _MSC_VER < 1800 /* MSVC < 2013 */ # ifndef __cplusplus typedef unsigned char _Bool; # endif # endif #else # include # if (defined (__SVR4) && defined (__sun)) || defined(_AIX) || defined(__hpux) # include # endif #endif #if PY_MAJOR_VERSION < 3 # undef PyCapsule_CheckExact # undef PyCapsule_GetPointer # define PyCapsule_CheckExact(capsule) (PyCObject_Check(capsule)) # define PyCapsule_GetPointer(capsule, name) \ (PyCObject_AsVoidPtr(capsule)) #endif #if PY_MAJOR_VERSION >= 3 # define PyInt_FromLong PyLong_FromLong #endif #define _cffi_from_c_double PyFloat_FromDouble #define _cffi_from_c_float PyFloat_FromDouble #define _cffi_from_c_long PyInt_FromLong #define _cffi_from_c_ulong PyLong_FromUnsignedLong #define _cffi_from_c_longlong PyLong_FromLongLong #define _cffi_from_c_ulonglong PyLong_FromUnsignedLongLong #define _cffi_from_c__Bool PyBool_FromLong #define _cffi_to_c_double PyFloat_AsDouble #define _cffi_to_c_float PyFloat_AsDouble #define _cffi_from_c_int_const(x) \ (((x) > 0) ? \ ((unsigned long long)(x) <= (unsigned long long)LONG_MAX) ? \ PyInt_FromLong((long)(x)) : \ PyLong_FromUnsignedLongLong((unsigned long long)(x)) : \ ((long long)(x) >= (long long)LONG_MIN) ? \ PyInt_FromLong((long)(x)) : \ PyLong_FromLongLong((long long)(x))) #define _cffi_from_c_int(x, type) \ (((type)-1) > 0 ? /* unsigned */ \ (sizeof(type) < sizeof(long) ? \ PyInt_FromLong((long)x) : \ sizeof(type) == sizeof(long) ? \ PyLong_FromUnsignedLong((unsigned long)x) : \ PyLong_FromUnsignedLongLong((unsigned long long)x)) : \ (sizeof(type) <= sizeof(long) ? \ PyInt_FromLong((long)x) : \ PyLong_FromLongLong((long long)x))) #define _cffi_to_c_int(o, type) \ ((type)( \ sizeof(type) == 1 ? (((type)-1) > 0 ? (type)_cffi_to_c_u8(o) \ : (type)_cffi_to_c_i8(o)) : \ sizeof(type) == 2 ? (((type)-1) > 0 ? (type)_cffi_to_c_u16(o) \ : (type)_cffi_to_c_i16(o)) : \ sizeof(type) == 4 ? (((type)-1) > 0 ? (type)_cffi_to_c_u32(o) \ : (type)_cffi_to_c_i32(o)) : \ sizeof(type) == 8 ? (((type)-1) > 0 ? (type)_cffi_to_c_u64(o) \ : (type)_cffi_to_c_i64(o)) : \ (Py_FatalError("unsupported size for type " #type), (type)0))) #define _cffi_to_c_i8 \ ((int(*)(PyObject *))_cffi_exports[1]) #define _cffi_to_c_u8 \ ((int(*)(PyObject *))_cffi_exports[2]) #define _cffi_to_c_i16 \ ((int(*)(PyObject *))_cffi_exports[3]) #define _cffi_to_c_u16 \ ((int(*)(PyObject *))_cffi_exports[4]) #define _cffi_to_c_i32 \ ((int(*)(PyObject *))_cffi_exports[5]) #define _cffi_to_c_u32 \ ((unsigned int(*)(PyObject *))_cffi_exports[6]) #define _cffi_to_c_i64 \ ((long long(*)(PyObject *))_cffi_exports[7]) #define _cffi_to_c_u64 \ ((unsigned long long(*)(PyObject *))_cffi_exports[8]) #define _cffi_to_c_char \ ((int(*)(PyObject *))_cffi_exports[9]) #define _cffi_from_c_pointer \ ((PyObject *(*)(char *, CTypeDescrObject *))_cffi_exports[10]) #define _cffi_to_c_pointer \ ((char *(*)(PyObject *, CTypeDescrObject *))_cffi_exports[11]) #define _cffi_get_struct_layout \ ((PyObject *(*)(Py_ssize_t[]))_cffi_exports[12]) #define _cffi_restore_errno \ ((void(*)(void))_cffi_exports[13]) #define _cffi_save_errno \ ((void(*)(void))_cffi_exports[14]) #define _cffi_from_c_char \ ((PyObject *(*)(char))_cffi_exports[15]) #define _cffi_from_c_deref \ ((PyObject *(*)(char *, CTypeDescrObject *))_cffi_exports[16]) #define _cffi_to_c \ ((int(*)(char *, CTypeDescrObject *, PyObject *))_cffi_exports[17]) #define _cffi_from_c_struct \ ((PyObject *(*)(char *, CTypeDescrObject *))_cffi_exports[18]) #define _cffi_to_c_wchar_t \ ((wchar_t(*)(PyObject *))_cffi_exports[19]) #define _cffi_from_c_wchar_t \ ((PyObject *(*)(wchar_t))_cffi_exports[20]) #define _cffi_to_c_long_double \ ((long double(*)(PyObject *))_cffi_exports[21]) #define _cffi_to_c__Bool \ ((_Bool(*)(PyObject *))_cffi_exports[22]) #define _cffi_prepare_pointer_call_argument \ ((Py_ssize_t(*)(CTypeDescrObject *, PyObject *, char **))_cffi_exports[23]) #define _cffi_convert_array_from_object \ ((int(*)(char *, CTypeDescrObject *, PyObject *))_cffi_exports[24]) #define _CFFI_NUM_EXPORTS 25 typedef struct _ctypedescr CTypeDescrObject; static void *_cffi_exports[_CFFI_NUM_EXPORTS]; static PyObject *_cffi_types, *_cffi_VerificationError; static int _cffi_setup_custom(PyObject *lib); /* forward */ static PyObject *_cffi_setup(PyObject *self, PyObject *args) { PyObject *library; int was_alive = (_cffi_types != NULL); (void)self; /* unused */ if (!PyArg_ParseTuple(args, "OOO", &_cffi_types, &_cffi_VerificationError, &library)) return NULL; Py_INCREF(_cffi_types); Py_INCREF(_cffi_VerificationError); if (_cffi_setup_custom(library) < 0) return NULL; return PyBool_FromLong(was_alive); } union _cffi_union_alignment_u { unsigned char m_char; unsigned short m_short; unsigned int m_int; unsigned long m_long; unsigned long long m_longlong; float m_float; double m_double; long double m_longdouble; }; struct _cffi_freeme_s { struct _cffi_freeme_s *next; union _cffi_union_alignment_u alignment; }; #ifdef __GNUC__ __attribute__((unused)) #endif static int _cffi_convert_array_argument(CTypeDescrObject *ctptr, PyObject *arg, char **output_data, Py_ssize_t datasize, struct _cffi_freeme_s **freeme) { char *p; if (datasize < 0) return -1; p = *output_data; if (p == NULL) { struct _cffi_freeme_s *fp = (struct _cffi_freeme_s *)PyObject_Malloc( offsetof(struct _cffi_freeme_s, alignment) + (size_t)datasize); if (fp == NULL) return -1; fp->next = *freeme; *freeme = fp; p = *output_data = (char *)&fp->alignment; } memset((void *)p, 0, (size_t)datasize); return _cffi_convert_array_from_object(p, ctptr, arg); } #ifdef __GNUC__ __attribute__((unused)) #endif static void _cffi_free_array_arguments(struct _cffi_freeme_s *freeme) { do { void *p = (void *)freeme; freeme = freeme->next; PyObject_Free(p); } while (freeme != NULL); } static int _cffi_init(void) { PyObject *module, *c_api_object = NULL; module = PyImport_ImportModule("_cffi_backend"); if (module == NULL) goto failure; c_api_object = PyObject_GetAttrString(module, "_C_API"); if (c_api_object == NULL) goto failure; if (!PyCapsule_CheckExact(c_api_object)) { PyErr_SetNone(PyExc_ImportError); goto failure; } memcpy(_cffi_exports, PyCapsule_GetPointer(c_api_object, "cffi"), _CFFI_NUM_EXPORTS * sizeof(void *)); Py_DECREF(module); Py_DECREF(c_api_object); return 0; failure: Py_XDECREF(module); Py_XDECREF(c_api_object); return -1; } #define _cffi_type(num) ((CTypeDescrObject *)PyList_GET_ITEM(_cffi_types, num)) /**********/ ) rWrr!rrcrr^rr8rrrrs  +