a bZ$d?d@Z%eZ&d]dAdBZ'dCdDZ(dEdFZ)dGdHZ*dIdJZ+d^dLdMZ,d_dNdOZ-dPdQZ.dRdSZ/eZ0dTdUZ1dVdWZ2eZ3dXdYZ4d;S)`VGenericEnginegFcCs||_|j|_g|_i|_dSN)verifierffiexport_symbols_struct_pending_verification)selfr r7/tmp/pip-target-98j97qn4/lib/python/cffi/vengine_gen.py__init__szVGenericEngine.__init__cCs|d|jdS)Nr ) setdefaultr )r kwdsrrrpatch_extension_kwdssz#VGenericEngine.patch_extension_kwdscCsT|D]J}||}|durtj}|D]*}tj||}tj|r"|Sq"qdSr)syspathosjoinisfile)r module_namerZ so_suffixesZ so_suffixbasenamedirnamefilenamerrr find_modules zVGenericEngine.find_modulecCsdSrrr rrr collect_types%szVGenericEngine.collect_typescCs|j|ddS)N )_fwrite)r whatrrr_prnt(szVGenericEngine._prntcCs`|j}|t||jj|dtjdkr\tjdkr>d}nd}|j}|d||fdS)Ndeclwin32ZPyInit_initzvoid %s%s(void) { } ) r%cffimod_headerr preamble _generaterplatform version_infoZget_module_name)r prntprefixmodnamerrrwrite_source_to_f+s     z VGenericEngine.write_source_to_frcsjjj}tjtjjj}||| dGfdddt j d}j d|d|S)NZloadingcs&eZdZZjZgZfddZdS)z/VGenericEngine.load_library..FFILibrarycsjSr) _cffi_dirr) FFILibraryrr__dir__Tsz7VGenericEngine.load_library..FFILibrary.__dir__N)__name__ __module__ __qualname__Z_cffi_generic_moduler Z _cffi_ffir4r6rr5moduler rrr5Psr5r Zloadedlibrary) r _backendrrrcurdirr Zmodulefilename load_library_loadtypes ModuleType)r flagsbackendrr=rr:rr@As  zVGenericEngine.load_librarycCs$dd|jjjD}||S)NcSsg|]\}\}}||fqSrr).0keytpZqualrrr ^z4VGenericEngine._get_declarations..)r _parserZ _declarationsitemssort)r lstrrr_get_declarations]s  z VGenericEngine._get_declarationsc Cs|D]\}}|dd\}}zt|d||f}WntyTtd|Yn0z|||Wqty}zt||WYd}~qd}~00qdS)N rz_generate_gen_%s_%sznot implemented in verify(): %r)rOsplitgetattrAttributeErrorr Exceptionrattach_exception_info)r step_namenamerHkindrealnamemethoderrrr-cs    zVGenericEngine._generatec Ks|D]v\}}|dd\}}t|d||f}z||||fi|Wqty|} zt| |WYd} ~ qd} ~ 00qdS)NrPrz _%s_gen_%s)rOrQrRrTrrU) r r;rVrrWrHrXrYrZr[rrrrArs zVGenericEngine._loadcCsdSrrr rHrWrrr_generate_nothing|sz VGenericEngine._generate_nothingcKsdSrrr rHrWr;rrrr _loaded_noopszVGenericEngine._loaded_noopcst|tjsJ|jr(|d||dS|j}t|j}g}t|jD].\}}d}t|tj rbd}| d||fqFd|fddt |j|D} |j } t| tj r| d| d tj} d | pd } d |} |j | |jr|jd } nd} d| | | f} d||| | |dt|j tj r@d}nt|j tjsVd}nd}|d||d |f|d|dS)NFr *z%sx%dzargument of %scs g|]\}}|d|qS)z %s) get_c_name)rFtypeargcontextrrrIsz>VGenericEngine._generate_gen_function_decl..rz *rz, void _cffi_f_%srPz %s%s(%s)z result of %s{z*r = zreturn z %s%s(%s);}) isinstancerFunctionPtrTypeellipsis_generate_gen_constr%lenargs enumerate StructOrUnionappendzipresultinsertra void_typerr abiZVoidType)r rHrWr0ZnumargsargnamesirbZ indirectionZarglistZtpresult wrappernamerwZfuncdeclZ result_coderrdr_generate_gen_function_declsL       z*VGenericEngine._generate_gen_function_declcCsjt|tjsJ|jr*|d|||}n g}|}tdd|jDsVt|jtjr g}t |jD]6\} } t| tjrt | } | | | f| | qd|j} t| tjr| j durt d| ft | } |d| |dd| ftj} tt|| |j}|j|} d|} || | }|D]\} } ||| | |}q.t|||t|j |dS)NFcss|]}t|tjVqdSr)rjrrq)rFtyprrr rJz6VGenericEngine._loaded_gen_function..z*'%s' is used as result type, but is opaquerrtrg)rjrrkrl_load_constantanyrortrqrp PointerTyperrZfldtypes TypeError _get_c_namerurvtupler _get_cached_btype load_function_make_struct_wrappersetattrrbr4)r rHrWr;r=Z newfunctionZ indirectionsbase_tpZ indirect_argsryr|Zindirect_resultBFuncrzrrr_loaded_gen_functionsJ              z#VGenericEngine._loaded_gen_functioncsP|jj|j|dkr4|jfdd}nfdd}||_|S)Nrtcs"}|g|R|dSNr)new)rores)BTyper oldfuncrrnewfuncs z4VGenericEngine._make_struct_wrapper..newfunccs6|d|f|dd}|S)Nr)Znewp)ro)rrEryrrrrs.)r r>rZ_cffi_base_type)r rryrHrrr)rrEr ryrrrs z#VGenericEngine._make_struct_wrappercCs ||jksJ||d|dSNstructrW_generate_struct_or_union_declr\rrr_generate_gen_struct_declsz(VGenericEngine._generate_gen_struct_declcCs||d||dSr_loading_struct_or_unionr rHrWr;rrr_loading_gen_structsz"VGenericEngine._loading_gen_structcKs||dSr_loaded_struct_or_unionr^rrr_loaded_gen_structsz!VGenericEngine._loaded_gen_structcCs ||jksJ||d|dSNunionrr\rrr_generate_gen_union_declsz'VGenericEngine._generate_gen_union_declcCs||d||dSrrrrrr_loading_gen_unionsz!VGenericEngine._loading_gen_unioncKs||dSrrr^rrr_loaded_gen_unionsz VGenericEngine._loaded_gen_unionc Cs|jdurdSd||f}d||f}d||f}|j}|d||f|d|d|d|D]\}} } } t| tjr| s| dkr|d |qlz$|d | jd d || d |fWqlt y} z|dt | WYd} ~ qld} ~ 00ql|d|j ||d|f|d|d||d|d||d|D]h\}} } } | dkrrqX|d||ft| tj r| jdur|d| n|d||fqX|d|d|d|d|d|f|d|dS)Nz_cffi_check_%s_%s_cffi_layout_%s_%s%s %szstatic void %s(%s *p)rhz8 /* 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 */rizintptr_t %s(intptr_t i)z, struct _cffi_aligncheck { char x; %s y; };z static intptr_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 };z return nums[i];z3 /* the next line is not executed, but compiled */z %s(0);)fldnamesstripr% enumfieldsrjr PrimitiveTypeis_integer_typerarstrr rr ArrayTypelengthr) r rHr1rWZ checkfuncnamelayoutfuncnamecnamer0fnameftypefbitsizefqualr[rrrrs\     (    z-VGenericEngine._generate_struct_or_union_declcCs|jdurdSd||f}|jdd}|||}g}d} || } | dkrPqd|| | d7} q>t|tjr|jr|d} |d} |ddd} |ddd}| t | t |krt |jksnJ| || | f|_ nd||f }||f|j |<dS)Nrzintptr_t(*)(intptr_t)rrr)r)rr _typeof_lockedrrrrjrrqpartialZ force_flattenrnZ fixedlayoutrr )r rHr1rWr;rrfunctionlayoutnumxZ totalsizeZtotalalignmentZfieldofsZ fieldsizerrrrr7s*      (z'VGenericEngine._loading_struct_or_unionc Cs|jdurdS|j|||jvrdd}|j}||}|j|\}}||d||d||d||dd}|D]v\}} } } | dkrq||||||d|f||ddkr|| } |||d|| d |f|d7}q|t |ksJdS) NcSs||krtd|||fdS)Nz'%s (we have %d, but C compiler says %d)r)Z realvalueZ expectedvaluemsgrrrcheckZs z5VGenericEngine._loaded_struct_or_union..checkrzwrong total sizerzwrong total alignmentrzwrong offset for field %rzwrong size for field %r) rr rr popsizeofZalignofrZoffsetofrn) r rHrr ZBStructrrryrrrrZBFieldrrrrSs0      z&VGenericEngine._loaded_struct_or_unioncCs.t|tjr|||dn||d|dSNr )rjrEnumType_generate_gen_enum_declrr\rrr_generate_gen_anonymous_declus z+VGenericEngine._generate_gen_anonymous_declcCs2t|tjr||||dn||d||dSr)rjrr_loading_gen_enumrrrrr_loading_gen_anonymous{s z%VGenericEngine._loading_gen_anonymouscKs2t|tjr$|j|||fi|n ||dSr)rjrr_loaded_gen_enumrr^rrr_loaded_gen_anonymouss z$VGenericEngine._loaded_gen_anonymousNconstc CsF|j}d||f}|j||durl|s.J|dks:J|d||d||||d|dn|r|dks|J|d||d|d|f|d |f|dn|dusJ|dusJ|d krd }nd }d } |dkrt|tjrd } d }||d| |f||d|d||f|d|dS)Nz _cffi_%s_%srint %s(char *out_error)rh return 0;rizint %s(long long *out_value)z *out_value = (long long)(%s);z return (%s) <= 0;var&r zconst *z %s%s(void)z return (%s%s);)r%r rr_check_int_constant_valuerjrrqra) r is_intrWrHcategory check_valuer0funcnameZ ampersandextrarrrrms@           z"VGenericEngine._generate_gen_constcCs&t|tjo|}||||dSr)rjrrrrm)r rHrWrrrr_generate_gen_constant_declsz*VGenericEngine._generate_gen_constant_declcCsd|}|dur*|sJ||||}n|r|jdd}|jdd} || |} |j|} | | } t| d}|dkr| s|jdd} |dd|j| >7}nd|dusJd}t|tj rd |}|j| ||d} || |} | }t|tj r|d}|S) Nz_cffi_const_%sz long long*rzint(*)(long long*)z long longrz (*)(void)r`) _load_known_int_constantr rrrintrrjrrqra)r rrHrWr;rrvaluerrrpnegativeZ BLongLongZ fntypeextrarrrr~s2        zVGenericEngine._load_constantcCsDt|tjo|}|||||}t|||t|j|dSr) rjrrrr~rrbr4rr)r rHrWr;r=rrrrr_loaded_gen_constants z#VGenericEngine._loaded_gen_constantcCs|j}|dkr"|d|||fn|d|||f|d|d||d||d|d||d |d |dd |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) sprintf(buf, "%%ld", (long)(%s));z elsez2 sprintf(buf, "%%lu", (unsigned long)(%s));z: sprintf(out_error, "%s has the real value %s, not %s",z "%s", buf, "%d");dz return -1;z })r%)r rWrr0rrrrs&   z(VGenericEngine._check_int_constant_valuecCsr|jdd}|jdd}|||}|j|d}||dkrn|j|}tjdkrft|d}t|dS)Nzchar[]rz int(*)(char*)r(zutf-8) r rrrstringrr/rr)r r;rrrrrerrorrrrrs     z'VGenericEngine._load_known_int_constantcCs|dd}d||fS)N$Z___D_z _cffi_e_%s_%s)replace)r r1rWrrr_enum_funcnames zVGenericEngine._enum_funcnameenumcCs|jr"|jD]}|d|q dS|||}|j||j}|d||dt|j|jD]\}}| ||qb|d|d|dS)NTrrhrri) r enumeratorsrmrr rrr%rs enumvaluesr)r rHrWr1 enumeratorrr0 enumvaluerrrrs    z&VGenericEngine._generate_gen_enum_declcsLjr0fddjD}t|_d_n||}|dS)Ncsg|]}d|qS)T)r~)rFrr;r rHrrrIsz4VGenericEngine._loading_gen_enum..T)rrrrZpartial_resolvedrr)r rHrWr;r1rrrrrrs  z VGenericEngine._loading_gen_enumcCs8t|j|jD]$\}}t|||t|j|qdSr)rsrrrrbr4rr)r rHrWr;r=rrrrrrs zVGenericEngine._loaded_gen_enumcCs&|dkrd}n|}|jd||ddSNz...T)r)rm)r rHrWrrrr_generate_gen_macro_decl sz'VGenericEngine._generate_gen_macro_declcCsF|dkrd}n|}|jd||||d}t|||t|j|dSr)r~rrbr4rr)r rHrWr;r=rrrrr_loaded_gen_macro)s  z VGenericEngine._loaded_gen_macrocCst|tjrv|rZ|j}d|f}|j||d||d|d|f|dt|j}| d||nt|}|j d||dddS) N_cffi_sizeof_%szsize_t %s(void)rhz return sizeof(%s);riFr)r) rjrrlength_is_unknownr%r rrritemrm)r rHrWr0rtp_ptrrrr_generate_gen_variable_decl6s      z*VGenericEngine._generate_gen_variable_declcs\t|tjr|rd|f}|jdd}|||}|}|j|j} t ||j | \} } | dkr~t d||jf| | }t |j} |d| ||} |jdur|j|}|j|| } t||| t|j|dSd|}|j|d|d}|||}|fdd }fd d }tt||t||t|j|dS) Nrzsize_t(*)(void)rz/bad size: %r does not seem to be an array of %sFz _cffi_var_%sz *(*)(void)csdSrrr<ptrrrgettergsz3VGenericEngine._loaded_gen_variable..gettercs |d<dSrr)r=rrrrsetterisz3VGenericEngine._loaded_gen_variable..setter)rjrrrr rrrrdivmodrrZresolve_lengthrr~rcastrrbr4rrraproperty)r rHrWr;r=rrrsizeZ BItemTyperrestrrZBArrayrrrrr_loaded_gen_variableHs>           z#VGenericEngine._loaded_gen_variable)r )r)NrN)N)r)r)5r7r8r9Z _class_keyZ_gen_python_modulerrrrr%r3r@rOr-rAr]r_Z_generate_gen_typedef_declZ_loading_gen_typedefZ_loaded_gen_typedefr{Z_loading_gen_functionrrrrrrrrrrrrrrrmrZ_loading_gen_constantr~rrrrrrrrZ_loading_gen_macrorrZ_loading_gen_variablerrrrrr sh    -$1"  %      rad #include #include #include #include #include /* XXX for ssize_t on some platforms */ /* 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 ) rrrBr rrrobjectrr+rrrrs  g