a `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 r6/usr/lib64/python3.9/site-packages/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 Z module_namerZ so_suffixesZ so_suffixbasenamedirnamefilenamerrr find_modules zVGenericEngine.find_modulecCsdSrrr rrr collect_types%szVGenericEngine.collect_typescCs|j|ddS)N )Z_fwrite)r Zwhatrrr_prnt(szVGenericEngine._prntcCs`|j}|t||jj|dtjdkr\tjdkr>d}nd}|j}|d||fdS)NZdeclwin32ZPyInit_initzvoid %s%s(void) { } ) r"cffimod_headerr Zpreamble _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_ffir/r1rr0moduler rrr0Psr0rZloadedlibrary) r _backendrrrcurdirr Zmodulefilename load_library_loadtypes ModuleType)r flagsbackendrr8rr5rr;As  zVGenericEngine.load_librarycCs$dd|jjjD}||S)NcSsg|]\}\}}||fqSrr).0keytpZqualrrr ^z4VGenericEngine._get_declarations..)r Z_parserZ _declarationsitemssort)r Zlstrrr_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)rHsplitgetattrAttributeErrorr Exceptionrattach_exception_info)r step_namenamerCkindrealnamemethoderrrr(cs    zVGenericEngine._generatec Ks|D]v\}}|dd\}}t|d||f}z||||fi|Wqty|} zt| |WYd} ~ qd} ~ 00qdS)NrIrz _%s_gen_%s)rHrJrKrMrrN) r r6rOrrPrCrQrRrSrTrrrr<rs zVGenericEngine._loadcCsdSrrr rCrPrrr_generate_nothing|sz VGenericEngine._generate_nothingcKsdSrrr rCrPr6rrrr _loaded_noopszVGenericEngine._loaded_noopcst|jr|d||dS|j}t|j}g}t|jD].\}}d}t|tjrRd}| d||fq6d|fddt |j|D} |j } t| tjr| d| d tj} d | pd } d |} |j | |jr|jd } nd} d| | | f} d||| | |dt|j tjr0d}nt|j tjsFd}nd}|d||d |f|d|dS)NFr*z%sx%dzargument of %scs g|]\}}|d|qS)z %s) get_c_name)rAtypeargcontextrrrDsz>VGenericEngine._generate_gen_function_decl..rz *rz, Zvoid _cffi_f_%srIz %s%s(%s)z result of %s{z*r = zreturn z %s%s(%s);})ellipsis_generate_gen_constr"lenargs enumerate isinstancer StructOrUnionappendzipresultinsertrZ void_typerr abiZVoidType)r rCrPr+ZnumargsZargnamesir[Z indirectionZarglistZtpresult wrappernamernZfuncdeclZ result_coderr]r_generate_gen_function_declsJ       z*VGenericEngine._generate_gen_function_declcCsX|jr|d|||}ng}|}tdd|jDsDt|jtjrg}t|jD]6\} } t| tjr~t | } | | | f| | qR|j} t| tjr| j durt d| ft | } |d| |dd| ftj} tt|| |j}|j|} d|} || | }|D]\} } ||| | |}qt|||t|j |dS)NFcss|]}t|tjVqdSr)rgrrh)rAtyprrr rEz6VGenericEngine._loaded_gen_function..z*'%s' is used as result type, but is opaquerrkr_)rb_load_constantanyrergrkrrhrf PointerTyperiZfldtypes TypeError _get_c_namerlrmZFunctionPtrTypetupler _get_cached_btype load_function_make_struct_wrappersetattrr[r/)r rCrPr6r8Z newfunctionZ indirectionsbase_tpZ indirect_argsrorrZindirect_resultBFuncrprrr_loaded_gen_functionsH              z#VGenericEngine._loaded_gen_functioncsP|jj|j|dkr4|jfdd}nfdd}||_|S)Nrkcs"}|g|R|dSNr)new)reres)BTyper oldfuncrrnewfuncs z4VGenericEngine._make_struct_wrapper..newfunccs6|d|f|dd}|S)Nr)Znewp)re)rr@rorrrrs.)r r9rzZ_cffi_base_type)r rrorCr~rr)rr@r rorrr|s z#VGenericEngine._make_struct_wrappercCs||d|dSNstruct_generate_struct_or_union_declrUrrr_generate_gen_struct_declsz(VGenericEngine._generate_gen_struct_declcCs||d||dSr_loading_struct_or_unionr rCrPr6rrr_loading_gen_structsz"VGenericEngine._loading_gen_structcKs||dSr_loaded_struct_or_unionrWrrr_loaded_gen_structsz!VGenericEngine._loaded_gen_structcCs||d|dSNunionrrUrrr_generate_gen_union_declsz'VGenericEngine._generate_gen_union_declcCs||d||dSrrrrrr_loading_gen_unionsz!VGenericEngine._loading_gen_unioncKs||dSrrrWrrr_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)r`z8 /* 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 */razintptr_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" enumfieldsrgr PrimitiveTypeis_integer_typerZrstrr ri ArrayTypelengthrx) r rCr,rPZ checkfuncnamelayoutfuncnamecnamer+fnameftypefbitsizefqualrTrrrrs\     (    z-VGenericEngine._generate_struct_or_union_declcCs|jdurdSd||f}|jdd}|||}g}d} || } | dkrPqd|| | d7} q>t|tjr|jr|d} |d} |ddd} |ddd}| | || | f|_ nd||f }||f|j |<dS)Nrzintptr_t(*)(intptr_t)rrr%r) rr _typeof_lockedr{rirgrrhpartialZ force_flattenZ fixedlayoutrr )r rCr,rPr6rrfunctionlayoutZnumxZ 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}qdS) 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 rzr popsizeofZalignofrZoffsetof) r rCrr ZBStructrrrorrrrZBFieldrrrrSs0      z&VGenericEngine._loaded_struct_or_unioncCs.t|tjr|||dn||d|dSNr)rgrEnumType_generate_gen_enum_declrrUrrr_generate_gen_anonymous_declus z+VGenericEngine._generate_gen_anonymous_declcCs2t|tjr||||dn||d||dSr)rgrr_loading_gen_enumrrrrr_loading_gen_anonymous{s z%VGenericEngine._loading_gen_anonymouscKs2t|tjr$|j|||fi|n ||dSr)rgrr_loaded_gen_enumrrWrrr_loaded_gen_anonymouss z$VGenericEngine._loaded_gen_anonymousNconstc Cs |j}d||f}|j||durX|d||d||||d|dn|r|d||d|d|f|d|f|dnj|d krd }nd }d } |d krt|tjrd } d }||d| |f||d|d||f|d|dS)Nz _cffi_%s_%sint %s(char *out_error)r` return 0;razint %s(long long *out_value)z *out_value = (long long)(%s);z return (%s) <= 0;var&rrzconst *z %s%s(void)z return (%s%s);)r"r ri_check_int_constant_valuergrrhrZ) r is_intrPrCcategory check_valuer+funcnameZ ampersandZextrarrrrcs6       z"VGenericEngine._generate_gen_constcCs&t|tjo|}||||dSr)rgrrrrc)r rCrPrrrr_generate_gen_constant_declsz*VGenericEngine._generate_gen_constant_declcCsd|}|dur"||||}n|r|jdd}|jdd} || |} |j|} | | } t| d}|dkr| s|jdd} |dd|j| >7}nVd}t|tj rd |}|j| ||d} || |} | }t|tj r|d}|S) Nz_cffi_const_%sz long long*rzint(*)(long long*)z long longrz (*)(void)rY) _load_known_int_constantr rr{rintrrgrrhrZ)r rrCrPr6rrvaluerrrpnegativeZ BLongLongZ fntypeextrarrrrts.        zVGenericEngine._load_constantcCsDt|tjo|}|||||}t|||t|j|dSr) rgrrrrtr}r[r/ri)r rCrPr6r8rrrrr_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 rPrr+rrrrs&   z(VGenericEngine._check_int_constant_valuecCsr|jdd}|jdd}|||}|j|d}||dkrn|j|}tjdkrft|d}t|dS)Nzchar[]rz int(*)(char*)r$zutf-8) r rr{rstringrr*rr)r r6rrrrrerrorrrrrs     z'VGenericEngine._load_known_int_constantcCs|dd}d||fS)N$Z___D_z _cffi_e_%s_%s)replace)r r,rPrrr_enum_funcnames zVGenericEngine._enum_funcnameenumcCs|jr"|jD]}|d|q dS|||}|j||j}|d||dt|j|jD]\}}| ||qb|d|d|dS)NTrr`rra) r enumeratorsrcrr rir"rj enumvaluesr)r rCrPr, enumeratorrr+ enumvaluerrrrs    z&VGenericEngine._generate_gen_enum_declcsLjr0fddjD}t|_d_n||}|dS)Ncsg|]}d|qS)T)rt)rArr6r rCrrrDsz4VGenericEngine._loading_gen_enum..T)rrryrZpartial_resolvedrr)r rCrPr6r,rrrrrrs  z VGenericEngine._loading_gen_enumcCs8t|j|jD]$\}}t|||t|j|qdSr)rjrrr}r[r/ri)r rCrPr6r8rrrrrrs zVGenericEngine._loaded_gen_enumcCs&|dkrd}n|}|jd||ddSNz...T)r)rc)r rCrPrrrr_generate_gen_macro_decl sz'VGenericEngine._generate_gen_macro_declcCsF|dkrd}n|}|jd||||d}t|||t|j|dSr)rtr}r[r/ri)r rCrPr6r8rrrrr_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)r`z return sizeof(%s);raFr)r) rgrrlength_is_unknownr"r rirvitemrc)r rCrPr+rtp_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)csdSrrr7Zptrrrgettergsz3VGenericEngine._loaded_gen_variable..gettercs |d<dSrr)r8rrrrsetterisz3VGenericEngine._loaded_gen_variable..setter)rgrrrr rr{rzrdivmodrrZresolve_lengthrvrtrcastr}r[r/rirZproperty)r rCrPr6r8rrrsizeZ BItemTyperrestrrZBArrayrrrrr_loaded_gen_variableHs>           z#VGenericEngine._loaded_gen_variable)r)r)NrN)N)r)r)5r2r3r4Z _class_keyZ_gen_python_modulerrrrr"r.r;rHr(r<rVrXZ_generate_gen_typedef_declZ_loading_gen_typedefZ_loaded_gen_typedefrqZ_loading_gen_functionrr|rrrrrrrrrrrrrcrZ_loading_gen_constantrtrrrrrrrrZ_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 ) rrr=rrrrobjectrr'rrrrs  g