B ل=^4h@sHddlZddlZddlZddlmZddlmZGdddeZdZ dS)N)model)VerificationErrorc@seZdZdZdZddZddZddZd d ZdZd d Z ddZ d[ddZ ddZ ddZ ddZddZddZeZeZeZddZeZdd Zd!d"Zd#d$Zd%d&Zd'd(Zd)d*Zd+d,Zd-d.Zd/d0Zd1d2Zd3d4Z d5d6Z!d7d8Z"d9d:Z#d\d=d>Z$d?d@Z%eZ&d]dAdBZ'dCdDZ(dEdFZ)dGdHZ*dIdJZ+d^dLdMZ,d_dNdOZ-dPdQZ.dRdSZ/eZ0dTdUZ1dVdWZ2eZ3dXdYZ4d;S)`VGenericEnginegFcCs||_|j|_g|_i|_dS)N)verifierffiexport_symbols_struct_pending_verification)selfrr C/opt/alt/python37/lib64/python3.7/site-packages/cffi/vengine_gen.py__init__szVGenericEngine.__init__cCs|d|jdS)Nr ) setdefaultr )r kwdsr r r patch_extension_kwdssz#VGenericEngine.patch_extension_kwdscCsTxN|D]F}||}|dkr tj}x*|D]"}tj||}tj|r&|Sq&WqWdS)N)syspathosjoinisfile)r Z module_namerZ so_suffixesZ so_suffixbasenamedirnamefilenamer r r find_modules   zVGenericEngine.find_modulecCsdS)Nr )r r r r collect_types%szVGenericEngine.collect_typescCs|j|ddS)N )Z_fwrite)r Zwhatr r r _prnt(szVGenericEngine._prntcCs`|j}|t||jj|dtjdkr\tjdkr>d}nd}|j}|d||fdS)NZdeclZwin32)ZPyInit_Zinitzvoid %s%s(void) { } ) rcffimod_headerrZpreamble _generaterplatform version_infoZget_module_name)r prntprefixmodnamer r r write_source_to_f+s     z VGenericEngine.write_source_to_frcsjjj}tjtjjj}||| dGfdddt j d}j d|d|S)NZloadingcs&eZdZZjZgZfddZdS)z/VGenericEngine.load_library..FFILibrarycsjS)N) _cffi_dir)r ) FFILibraryr r __dir__Tsz7VGenericEngine.load_library..FFILibrary.__dir__N)__name__ __module__ __qualname__Z_cffi_generic_modulerZ _cffi_ffir)r+r )r*moduler r r r*Psr*rZloaded)library) r_backendrrrcurdirrZmodulefilename load_library_loadtypes ModuleType)r flagsbackendrr0r )r*r/r r r3As  zVGenericEngine.load_librarycCs$dd|jjjD}||S)NcSsg|]\}\}}||fqSr r ).0keytpZqualr r r ^sz4VGenericEngine._get_declarations..)rZ_parserZ _declarationsitemssort)r Zlstr r r _get_declarations]sz VGenericEngine._get_declarationsc Csx|D]\}}|dd\}}yt|d||f}Wn tk rXtd|YnXy|||Wq tk r}zt||Wdd}~XYq Xq WdS)N rz_generate_gen_%s_%sznot implemented in verify(): %r)r?splitgetattrAttributeErrorr Exceptionrattach_exception_info)r step_namenamer;kindrealnamemethoder r r r"cs zVGenericEngine._generatec Ksx||D]p\}}|dd\}}t|d||f}y||||f|Wq tk rx} zt| |Wdd} ~ XYq Xq WdS)Nr@rz _%s_gen_%s)r?rArBrDrrE) r r/rFrrGr;rHrIrJrKr r r r4rs zVGenericEngine._loadcCsdS)Nr )r r;rGr r r _generate_nothing|sz VGenericEngine._generate_nothingcKsdS)Nr )r r;rGr/rr r r _loaded_noopszVGenericEngine._loaded_noopcst|tjst|jr(|d||dS|j}t|j}g}xVGenericEngine._generate_gen_function_decl..rz *rz, Zvoidz _cffi_f_%sr@z %s%s(%s)z result of %s{z*r = zreturn z %s%s(%s);}) isinstancerFunctionPtrTypeAssertionErrorellipsis_generate_gen_constrlenargs enumerate StructOrUnionappendzipresultinsertrO void_typerr abiZVoidType)r r;rGr%ZnumargsZargnamesirPZ indirectionZarglistZtpresult wrappernamercZfuncdeclZ result_coder )rRr _generate_gen_function_declsJ      z*VGenericEngine._generate_gen_function_declcCsrt|tjst|jr*|d|||}n(g}|}tdd|jDsVt|jtj rg}xDt |jD]6\} } t| tj rt | } | | | f| | qfW|j} t| tj r| j dkrtd| ft | } |d| |dd| ftj} tt|| |j}|j|} d|} || | }x"|D]\} } ||| | |}q4Wt|||t|j |dS)NFcss|]}t|tjVqdS)N)rUrr])r9typr r r sz6VGenericEngine._loaded_gen_function..z*'%s' is used as result type, but is opaquerr`z _cffi_f_%s)rUrrVrWrX_load_constantanyr[r`r]r\ PointerTyper^Zfldtypes TypeError _get_c_namerarbtupler_get_cached_btype load_function_make_struct_wrappersetattrrPr))r r;rGr/r0Z newfunctionZ indirectionsbase_tpZ indirect_argsrdrgZindirect_resultBFuncrer r r _loaded_gen_functions@             z#VGenericEngine._loaded_gen_functioncsP|jj|j|dkr4|jfdd}nfdd}||_|S)Nr`cs }|f||dS)Nr)new)r[Zres)BTyperoldfuncr r newfuncs z4VGenericEngine._make_struct_wrapper..newfunccs6|d|f|dd}|S)Nr)Znewp)r[)rwr8rdrxr r rys.)rr1roZ_cffi_base_type)r rxrdr;rsryr )rwr8rrdrxr rqs z#VGenericEngine._make_struct_wrappercCs ||jkst||d|dS)Nstruct)rGrW_generate_struct_or_union_decl)r r;rGr r r _generate_gen_struct_declsz(VGenericEngine._generate_gen_struct_declcCs||d||dS)Nrz)_loading_struct_or_union)r r;rGr/r r r _loading_gen_structsz"VGenericEngine._loading_gen_structcKs||dS)N)_loaded_struct_or_union)r r;rGr/rr r r _loaded_gen_structsz!VGenericEngine._loaded_gen_structcCs ||jkst||d|dS)Nunion)rGrWr{)r r;rGr r r _generate_gen_union_declsz'VGenericEngine._generate_gen_union_declcCs||d||dS)Nr)r})r r;rGr/r r r _loading_gen_unionsz!VGenericEngine._loading_gen_unioncKs||dS)N)r)r r;rGr/rr r r _loaded_gen_unionsz VGenericEngine._loaded_gen_unionc Cs|jdkrdSd||f}d||f}d||f}|j}|d||f|d|d|dx|D]\}} } } t| tjr| s| dkr|d |qny$|d | jd d || d |fWqnt k r} z|dt | Wdd} ~ XYqnXqnW|d|j ||d|f|d|d||d|d||dxt|D]h\}} } } | dkrvq\|d||ft| tj r| jdkr|d| n|d||fq\W|d|d|d|d|d|f|d|dS)Nz_cffi_check_%s_%sz_cffi_layout_%s_%sz%s %szstatic void %s(%s *p)rSz8 /* 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 */rTzintptr_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 enumfieldsrUr PrimitiveTypeis_integer_typerOrstrr r^ ArrayTypelengthrm) r r;r&rGZ checkfuncnamelayoutfuncnamecnamer%fnameftypefbitsizefqualrKr r r r{sT    &    z-VGenericEngine._generate_struct_or_union_declcCs|jdkrdSd||f}|jdd}|||}g}d} x(|| } | dkrRP|| | d7} q@Wt|tjr|jr|d} |d} |ddd} |ddd}| t | t |krt |jksnt | || | f|_ nd||f }||f|j|<dS)Nz_cffi_layout_%s_%szintptr_t(*)(intptr_t)rrr z%s %s)rr_typeof_lockedrpr^rUrr]partialZ force_flattenrZrWZ fixedlayoutrr )r r;r&rGr/rrtfunctionlayoutZnumxZ totalsizeZtotalalignmentZfieldofsZ fieldsizerr r r r}7s.     (z'VGenericEngine._loading_struct_or_unionc Cs|jdkrdS|j|||jkrdd}|j}||}|j|\}}||d||d||d||dd}x|D]v\}} } } | dkrq||||||d|f||ddkr|| } |||d|| d |f|d7}qW|t |kst dS) NcSs||krtd|||fdS)Nz'%s (we have %d, but C compiler says %d))r)Z realvalueZ expectedvaluemsgr r r checkZsz5VGenericEngine._loaded_struct_or_union..checkrzwrong total sizerzwrong total alignmentrzwrong offset for field %rzwrong size for field %r) rrror popsizeofZalignofrZoffsetofrZrW) r r;rrZBStructrrrdrrrrZBFieldr r r rSs,        z&VGenericEngine._loaded_struct_or_unioncCs.t|tjr|||dn||d|dS)Nr)rUrEnumType_generate_gen_enum_declr{)r r;rGr r r _generate_gen_anonymous_declus z+VGenericEngine._generate_gen_anonymous_declcCs2t|tjr||||dn||d||dS)Nr)rUrr_loading_gen_enumr})r r;rGr/r r r _loading_gen_anonymous{s z%VGenericEngine._loading_gen_anonymouscKs.t|tjr |j|||f|n ||dS)N)rUrr_loaded_gen_enumr)r r;rGr/rr r r _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_%srzint %s(char *out_error)rSz return 0;rTzint %s(long long *out_value)z *out_value = (long long)(%s);z return (%s) <= 0;var&rzconst *z %s%s(void)z return (%s%s);) rr r^rW_check_int_constant_valuerUrr]rO) r is_intrGr;category check_valuer%funcnameZ ampersandZextrar r r rYs@           z"VGenericEngine._generate_gen_constcCs&t|tjo|}||||dS)N)rUrrrrY)r r;rGrr r r _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)rN) rW_load_known_int_constantrrrprvintrrUrr]rO)r rr;rGr/rrvaluerwrtrpnegativeZ BLongLongZ fntypeextrar r r ris2        zVGenericEngine._load_constantcCsDt|tjo|}|||||}t|||t|j|dS)N) rUrrrrirrrPr)r^)r r;rGr/r0rrr r r _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 rGrr%r r r rs   z(VGenericEngine._check_int_constant_valuecCsr|jdd}|jdd}|||}|j|d}||dkrn|j|}tjdkrft|d}t|dS)Nzchar[]rz int(*)(char*))r zutf-8) rrrprvstringrr$rr)r r/rrwrtrrerrorr r r rs     z'VGenericEngine._load_known_int_constantcCs|dd}d||fS)N$Z___D_z _cffi_e_%s_%s)replace)r r&rGr r r _enum_funcnames zVGenericEngine._enum_funcnameenumcCs|jr&x|jD]}|d|qWdS|||}|j||j}|d||dx&t|j|jD]\}}| ||qhW|d|d|dS)NTzint %s(char *out_error)rSz return 0;rT) r enumeratorsrYrr r^rr_ enumvaluesr)r r;rGr& enumeratorrr% enumvaluer r r rs    z&VGenericEngine._generate_gen_enum_declcsLjr0fddjD}t|_d_n||}|dS)Ncsg|]}d|qS)T)ri)r9r)r/r r;r r r<sz4VGenericEngine._loading_gen_enum..T)rrrnrZpartial_resolvedrr)r r;rGr/r&rrr )r/r r;r rs   z VGenericEngine._loading_gen_enumcCs<x6t|j|jD]$\}}t|||t|j|qWdS)N)r_rrrrrPr)r^)r r;rGr/r0rrr r r rs zVGenericEngine._loaded_gen_enumcCs&|dkrd}n|}|jd||ddS)Nz...T)r)rY)r r;rGrr r r _generate_gen_macro_decl sz'VGenericEngine._generate_gen_macro_declcCsF|dkrd}n|}|jd||||d}t|||t|j|dS)Nz...T)r)rirrrPr)r^)r r;rGr/r0rrr r r _loaded_gen_macro)s  z VGenericEngine._loaded_gen_macrocCst|tjrx|jdkr\|j}d|f}|j||d||d|d|f|dt|j}| d||nt|}|j d||dd dS) Nz...z_cffi_sizeof_%szsize_t %s(void)rSz return sizeof(%s);rTFr)r) rUrrrrr r^rkitemrY)r r;rGr%rtp_ptrr r r _generate_gen_variable_decl6s       z*VGenericEngine._generate_gen_variable_declcs^t|tjr|jdkrd|f}|jdd}|||}|}|j|j} t ||j | \} } | dkrt d||jf| | }t |j} |d| ||} |jdk r|j|}|j|| } t||| t|j|dSd|}|j|d|d}|||}|fd d }fd d }tt||t||t|j|dS) Nz...z_cffi_sizeof_%szsize_t(*)(void)rz/bad size: %r does not seem to be an array of %sFz _cffi_var_%sz *(*)(void)csdS)Nrr )r0)ptrr r gettergsz3VGenericEngine._loaded_gen_variable..gettercs |d<dS)Nrr )r0r)rr r setterisz3VGenericEngine._loaded_gen_variable..setter)rUrrrrrrprordivmodrrZresolve_lengthrkricastrrrPr)r^rOproperty)r r;rGr/r0rrtrsizeZ BItemTyperrestrrZBArrayrrr )rr _loaded_gen_variableHs:            z#VGenericEngine._loaded_gen_variable)r)r)NrN)N)r)r)5r,r-r.Z _class_keyZ_gen_python_modulerrrrrr(r3r?r"r4rLrMZ_generate_gen_typedef_declZ_loading_gen_typedefZ_loaded_gen_typedefrfZ_loading_gen_functionrurqr|r~rrrrr{r}rrrrrYrZ_loading_gen_constantrirrrrrrrrZ_loading_gen_macrorrZ_loading_gen_variablerr r r r r sf    -$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 ) rrr5rrrrobjectrr!r r r r s