U q`Z$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-nv4zd3e_/lib/python/cffi/vengine_gen.py__init__szVGenericEngine.__init__cCs|d|jdS)Nr ) setdefaultr )r kwdsrrrpatch_extension_kwdssz#VGenericEngine.patch_extension_kwdscCsT|D]J}||}|dkrtj}|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 ^s z4VGenericEngine._get_declarations..)r _parserZ _declarationsitemssort)r lstrrr_get_declarations]s  z VGenericEngine._get_declarationsc Cs|D]\}}|dd\}}zt|d||f}Wn tk rVtd|YnXz|||Wqtk r}zt||W5d}~XYqXqdS)N rz_generate_gen_%s_%sznot implemented in verify(): %r)rNsplitgetattrAttributeErrorr Exceptionrattach_exception_info)r step_namenamerHkindrealnamemethoderrrr-cs   zVGenericEngine._generatec Ks~|D]p\}}|dd\}}t|d||f}z||||f|Wqtk rv} zt| |W5d} ~ XYqXqdS)NrOrz _%s_gen_%s)rNrPrQrSrrT) r r;rUrrVrHrWrXrYrZrrrrArs zVGenericEngine._loadcCsdSrrr rHrVrrr_generate_nothing|sz VGenericEngine._generate_nothingcKsdSrrr rHrVr;rrrr _loaded_noopszVGenericEngine._loaded_noopcst|tjst|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_%srOz %s%s(%s)z result of %s{z*r = zreturn z %s%s(%s);}) isinstancerFunctionPtrTypeAssertionErrorellipsis_generate_gen_constr%lenargs enumerate StructOrUnionappendzipresultinsertr` void_typerr abiZVoidType)r rHrVr0ZnumargsargnamesiraZ indirectionZarglistZtpresult wrappernamerwZfuncdeclZ result_coderrcr_generate_gen_function_declsL       z*VGenericEngine._generate_gen_function_declcCsjt|tjst|jr*|d|||}n g}|}tdd|jDsVt|jtj r g}t |jD]6\} } t| tj rt | } | | | f| | qd|j} t| tj r| j dkrtd| ft | } |d| |dd| ftj} tt|| |j}|j|} d|} || | }|D]\} } ||| | |}q.t|||t|j |dS)NFcss|]}t|tjVqdSr)rirrq)rFtyprrr sz6VGenericEngine._loaded_gen_function..z*'%s' is used as result type, but is opaquerrtrf)rirrjrkrl_load_constantanyrortrqrp PointerTyperrZfldtypes TypeError _get_c_namerurvtupler _get_cached_btype load_function_make_struct_wrappersetattrrar4)r rHrVr;r=Z newfunctionZ indirectionsbase_tpZ indirect_argsryr|Zindirect_resultBFuncrzrrr_loaded_gen_functionsL              z#VGenericEngine._loaded_gen_functioncsP|jj|j|dkr4|jfdd}nfdd}||_|S)Nrtcs }|f||dSNr)new)rores)BTyper oldfuncrrnewfuncs z4VGenericEngine._make_struct_wrapper..newfunccs6|d|f|dd}|S)Nr)newp)ro)rrEryrrrrs.)r r>rZ_cffi_base_type)r rryrHrrr)rrEr ryrrrs z#VGenericEngine._make_struct_wrappercCs ||jkst||d|dSNstructrVrk_generate_struct_or_union_declr[rrr_generate_gen_struct_declsz(VGenericEngine._generate_gen_struct_declcCs||d||dSr_loading_struct_or_unionr rHrVr;rrr_loading_gen_structsz"VGenericEngine._loading_gen_structcKs||dSr_loaded_struct_or_unionr]rrr_loaded_gen_structsz!VGenericEngine._loaded_gen_structcCs ||jkst||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|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|j ||d|f|d|d||d|d||d|D]h\}} } } | dkrpqV|d||ft| tj r| jdkr|d| n|d||fqV|d|d|d|d|d|f|d|dS)Nz_cffi_check_%s_%s_cffi_layout_%s_%s%s %szstatic void %s(%s *p)rgz8 /* 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 */rhzintptr_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% enumfieldsrir PrimitiveTypeis_integer_typer`rstrr rr ArrayTypelengthr) r rHr1rVZ checkfuncnamelayoutfuncnamecnamer0fnameftypefbitsizefqualrZrrrrs\     $    z-VGenericEngine._generate_struct_or_union_declcCs|jdkrdSd||f}|jdd}|||}g}d} || } | dkrPqd|| | d7} q>t|tjr|jr|d} |d} |ddd} |ddd}| t | t |krt |jksnt | || | f|_ nd||f }||f|j|<dS)Nrzintptr_t(*)(intptr_t)rrr)r)rr _typeof_lockedrrrrirrqpartialZ force_flattenrnrkZ fixedlayoutrr )r rHr1rVr;rrfunctionlayoutnumxZ totalsizeZtotalalignmentZfieldofsZ fieldsizerrrrr7s,     (z'VGenericEngine._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 expectedvaluemsgrrrcheckZs z5VGenericEngine._loaded_struct_or_union..checkrzwrong total sizerzwrong total alignmentrzwrong offset for field %rzwrong size for field %r) rr rr popsizeofZalignofrZoffsetofrnrk) r rHrr ZBStructrrryrrrrZBFieldrrrrSs0      z&VGenericEngine._loaded_struct_or_unioncCs.t|tjr|||dn||d|dSNr )rirEnumType_generate_gen_enum_declrr[rrr_generate_gen_anonymous_declus z+VGenericEngine._generate_gen_anonymous_declcCs2t|tjr||||dn||d||dSr)rirr_loading_gen_enumrrrrr_loading_gen_anonymous{s z%VGenericEngine._loading_gen_anonymouscKs.t|tjr |j|||f|n ||dSr)rirr_loaded_gen_enumrr]rrr_loaded_gen_anonymouss z$VGenericEngine._loaded_gen_anonymousNconstc CsF|j}d||f}|j||dk rl|s.t|dks:t|d||d||||d|dn|r|dks|t|d||d|d|f|d |f|dn|dk st|dkst|d krd }nd }d } |dkrt|tjrd } d }||d| |f||d|d||f|d|dS)Nz _cffi_%s_%srint %s(char *out_error)rg return 0;rhzint %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 rrrk_check_int_constant_valuerirrqr`) r is_intrVrHcategory check_valuer0funcnameZ ampersandextrarrrrms@           z"VGenericEngine._generate_gen_constcCs&t|tjo|}||||dSr)rirrrrm)r rHrVrrrr_generate_gen_constant_declsz*VGenericEngine._generate_gen_constant_declcCsd|}|dk r*|st||||}n|r|jdd}|jdd} || |} |j|} | | } t| d}|dkr| s|jdd} |dd|j| >7}nd|dkstd}t|t j rd |}|j| ||d} || |} | }t|t j r|d}|S) Nz_cffi_const_%sz long long*rzint(*)(long long*)z long longrz (*)(void)r_) rk_load_known_int_constantr rrrintrrirrqr`)r rrHrVr;rrvaluerrrpnegativeZ BLongLongZ fntypeextrarrrr~s2        zVGenericEngine._load_constantcCsDt|tjo|}|||||}t|||t|j|dSr) rirrrr~rrar4rr)r rHrVr;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 rVrr0rrrrs.   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 r1rVrrr_enum_funcnames zVGenericEngine._enum_funcnameenumcCs|jr"|jD]}|d|q dS|||}|j||j}|d||dt|j|jD]\}}| ||qb|d|d|dS)NTrrgrrh) r enumeratorsrmrr rrr%rs enumvaluesr)r rHrVr1 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 rHrVr;r1rrrrrrs  z VGenericEngine._loading_gen_enumcCs8t|j|jD]$\}}t|||t|j|qdSr)rsrrrrar4rr)r rHrVr;r=rrrrrrs zVGenericEngine._loaded_gen_enumcCs&|dkrd}n|}|jd||ddSNz...T)r)rm)r rHrVrrrr_generate_gen_macro_decl sz'VGenericEngine._generate_gen_macro_declcCsF|dkrd}n|}|jd||||d}t|||t|j|dSr)r~rrar4rr)r rHrVr;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)rgz return sizeof(%s);rhFr)r) rirrlength_is_unknownr%r rrritemrm)r rHrVr0rtp_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| ||} |jdk r|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)rirrrr rrrrdivmodrrZresolve_lengthrr~rcastrrar4rrr`property)r rHrVr;r=rrrsizeZ BItemTyperrestrrZBArrayrrrrr_loaded_gen_variableHs>           z#VGenericEngine._loaded_gen_variable)r )r)NrN)N)r)r)5r7r8r9Z _class_keyZ_gen_python_modulerrrrr%r3r@rNr-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