3
.W	h                 @   s@   d dl Z d dlZd dlZddlmZmZ G dd deZdZdS )    N   )modelffiplatformc               @   s  e Zd ZdZdZdd Zdd Zdd Zd	d
 ZdZddZ	dd Z
d[ddZdd Zdd Zdd Zdd Zdd ZeZeZeZdd ZeZdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Z d5d6 Z!d7d8 Z"d9d: Z#d\d=d>Z$d?d@ Z%eZ&d]dAdBZ'dCdD Z(dEdF Z)dGdH Z*dIdJ Z+d^dLdMZ,d_dNdOZ-dPdQ Z.dRdS Z/eZ0dTdU Z1dVdW Z2eZ3dXdY Z4d;S )`VGenericEnginegFc             C   s   || _ |j| _g | _i | _d S )N)verifierffiexport_symbols_struct_pending_verification)selfr    r   P/var/www/html/enquirykeeper_venv/lib/python3.6/site-packages/cffi/vengine_gen.py__init__   s    zVGenericEngine.__init__c             C   s   |j d| j d S )Nr	   )
setdefaultr	   )r   kwdsr   r   r   patch_extension_kwds   s    z#VGenericEngine.patch_extension_kwdsc             C   sT   xN|D ]F}|| }|d kr t j}x*|D ]"}tjj||}tjj|r&|S q&W qW d S )N)syspathosjoinisfile)r   module_namer   Zso_suffixesZ	so_suffixbasenamedirnamefilenamer   r   r   find_module   s    

zVGenericEngine.find_modulec             C   s   d S )Nr   )r   r   r   r   collect_types$   s    zVGenericEngine.collect_types c             C   s   | j j|d  d S )N
)Z_fwrite)r   whatr   r   r   _prnt'   s    zVGenericEngine._prntc             C   s`   | j }|t || jj | jd tjdkr\tjdkr>d}nd}| jj }|d||f  d S )Ndeclwin32   PyInit_initzvoid %s%s(void) { }
)r$   )	r!   cffimod_headerr   preamble	_generater   platformversion_infoZget_module_name)r   prntprefixmodnamer   r   r   write_source_to_f*   s    



z VGenericEngine.write_source_to_fr   c                sj   j j}tjjtjjj}|j||j	d G  fdddt
j  d}j	d|d |S )NZloadingc                   s&   e Zd ZZjZg Z fddZdS )z/VGenericEngine.load_library.<locals>.FFILibraryc                s    j S )N)	_cffi_dir)r   )
FFILibraryr   r   __dir__S   s    z7VGenericEngine.load_library.<locals>.FFILibrary.__dir__N)__name__
__module____qualname__Z_cffi_generic_moduler   Z	_cffi_ffir0   r2   r   )r1   moduler   r   r   r1   O   s   r1   r   Zloaded)library)r   _backendr   r   r   curdirr   Zmodulefilenameload_library_loadtypes
ModuleType)r   flagsbackendr   r7   r   )r1   r6   r   r   r:   @   s    zVGenericEngine.load_libraryc             C   s$   dd | j jjj D }|j  |S )Nc             S   s   g | ]\}\}}||fqS r   r   ).0keytpZqualr   r   r   
<listcomp>]   s    z4VGenericEngine._get_declarations.<locals>.<listcomp>)r   _parserZ_declarationsitemssort)r   lstr   r   r   _get_declarations\   s    z VGenericEngine._get_declarationsc             C   s   x| j  D ]\}}|jdd\}}yt| d||f }W n" tk
rZ   tjd| Y nX y||| W q
 tk
r } ztj||  W Y d d }~X q
X q
W d S )N r   z_generate_gen_%s_%sznot implemented in verify(): %r)	rH   splitgetattrAttributeErrorr   VerificationError	Exceptionr   attach_exception_info)r   	step_namenamerB   kindrealnamemethoder   r   r   r)   b   s    zVGenericEngine._generatec       
      K   s   x|| j  D ]p\}}|jdd\}}t| d||f }y||||f| W q
 tk
rx }	 ztj|	|  W Y d d }	~	X q
X q
W d S )NrI   r   z
_%s_gen_%s)rH   rJ   rK   rN   r   rO   )
r   r6   rP   r   rQ   rB   rR   rS   rT   rU   r   r   r   r;   q   s    zVGenericEngine._loadc             C   s   d S )Nr   )r   rB   rQ   r   r   r   _generate_nothing{   s    z VGenericEngine._generate_nothingc             K   s   d S )Nr   )r   rB   rQ   r6   r   r   r   r   _loaded_noop~   s    zVGenericEngine._loaded_noopc                s  t |tjst|jr(| jd|| d S | j}t|j}g }x<t	|jD ].\}}d}t |tj
rdd}|jd||f  qHW d|   fddt|j|D }	|j}
t |
tj
r|	jd|
jd	  tj}
d
j|	pd}	d| }| jj| |jr|jd }nd}d|||	f }d|  ||
j|  |d t |jtj
rDd}nt |jtjsZd}nd}|d||d
j|f  |d |  d S )NFr   *z%sx%dzargument of %sc                s    g | ]\}}|j d |  qS )z %s)
get_c_name)r@   typearg)contextr   r   rC      s   z>VGenericEngine._generate_gen_function_decl.<locals>.<listcomp>r   z *rz, voidz
_cffi_f_%srI   z	 %s%s(%s)zresult of %s{z*r = zreturn z  %s%s(%s);})
isinstancer   FunctionPtrTypeAssertionErrorellipsis_generate_gen_constr!   lenargs	enumerateStructOrUnionappendzipresultinsertrY   	void_typer   r	   abiZVoidType)r   rB   rQ   r,   ZnumargsargnamesirZ   ZindirectionarglistZtpresultwrappernamern   ZfuncdeclZresult_coder   )r\   r   _generate_gen_function_decl   sJ    

z*VGenericEngine._generate_gen_function_declc             C   sr  t |tjst|jr*| jd|||}n(g }|}tdd |jD sVt |jtj	rg }xDt
|jD ]6\}	}
t |
tj	rtj|
}
|j|	|
f |j|
 qfW |j}t |tj	r|jd krtd|j f tj|}|jd| |jdd|f tj}tjt|||j}| jj|}d| }|j||}x"|D ]\}	}
| j||	|
|}q4W t||| t|jj| d S )NFc             s   s   | ]}t |tjV  qd S )N)r`   r   rh   )r@   typr   r   r   	<genexpr>   s    z6VGenericEngine._loaded_gen_function.<locals>.<genexpr>z*'%s' is used as result type, but is opaquer   rk   z
_cffi_f_%s)r`   r   ra   rb   rc   _load_constantanyrf   rk   rh   rg   PointerTyperi   Zfldtypes	TypeError_get_c_namerl   rm   tupler   _get_cached_btypeload_function_make_struct_wrappersetattrrZ   r0   )r   rB   rQ   r6   r7   ZnewfunctionZindirectionsbase_tpZindirect_argsrp   rt   Zindirect_resultBFuncrr   r   r   r   _loaded_gen_function   s@    





z#VGenericEngine._loaded_gen_functionc                sP   | j j| j j| dkr4| j  fdd}n fdd}||_|S )Nrk   c                 s    j  }|f|   |d S )Nr   )new)rf   res)BTyper   oldfuncr   r   newfunc   s    
z4VGenericEngine._make_struct_wrapper.<locals>.newfuncc                 s6   | d  j  |  f | d d   } |  S )Nr   )Znewp)rf   )r   r?   rp   r   r   r   r      s    .)r   r8   r|   Z_cffi_base_type)r   r   rp   rB   r   r   r   )r   r?   r   rp   r   r   r~      s    z#VGenericEngine._make_struct_wrapperc             C   s    ||j kst| j|d| d S )Nstruct)rQ   rb   _generate_struct_or_union_decl)r   rB   rQ   r   r   r   _generate_gen_struct_decl   s    z(VGenericEngine._generate_gen_struct_declc             C   s   | j |d|| d S )Nr   )_loading_struct_or_union)r   rB   rQ   r6   r   r   r   _loading_gen_struct   s    z"VGenericEngine._loading_gen_structc             K   s   | j | d S )N)_loaded_struct_or_union)r   rB   rQ   r6   r   r   r   r   _loaded_gen_struct   s    z!VGenericEngine._loaded_gen_structc             C   s    ||j kst| j|d| d S )Nunion)rQ   rb   r   )r   rB   rQ   r   r   r   _generate_gen_union_decl   s    z'VGenericEngine._generate_gen_union_declc             C   s   | j |d|| d S )Nr   )r   )r   rB   rQ   r6   r   r   r   _loading_gen_union   s    z!VGenericEngine._loading_gen_unionc             K   s   | j | d S )N)r   )r   rB   rQ   r6   r   r   r   r   _loaded_gen_union  s    z VGenericEngine._loaded_gen_unionc             C   s
  |j d krd S d||f }d||f }d||f j }| j}|d||f  |d |d |d x|j D ]\}}	}
}t|	tjr|	j s|
dkr|d	|  qny$|d
|	jdd| |d|f  W qn t	j
k
r } z|dt|  W Y d d }~X qnX qnW |d | jj| |d|f  |d |d|  |d |d|  |d xt|j D ]h\}}	}
}|
dkrxq^|d||f  t|	tjr|	jd kr|d|	j   n|d||f  q^W |d |d |d |d |d|f  |d |  d S )Nz_cffi_check_%s_%sz_cffi_layout_%s_%sz%s %szstatic void %s(%s *p)r^   z8  /* only to generate compile-time warnings or errors */z
  (void)p;r   z  (void)((p->%s) << 1);z  { %s = &p->%s; (void)tmp; }z*tmpzfield %r)Zqualsz
  /* %s */r_   zintptr_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);)fldnamesstripr!   
enumfieldsr`   r   PrimitiveTypeis_integer_typerY   r   rM   strr	   ri   	ArrayTypelengthrz   )r   rB   r-   rQ   Zcheckfuncnamelayoutfuncnamecnamer,   fnameftypefbitsizefqualrU   r   r   r   r     sT    
&
z-VGenericEngine._generate_struct_or_union_declc             C   s
  |j d krd S d||f }| jjdd }|j||}g }d}	x(||	}
|
dk rRP |j|
 |	d7 }	q@W t|tjr|jr|d }|d }|dd d }|dd d }|j	  t
|t
|  kot
|j kn  st||||f|_nd||f j }||f| j|< d S )Nz_cffi_layout_%s_%szintptr_t(*)(intptr_t)r   r      r$   z%s %s)r   r   _typeof_lockedr}   ri   r`   r   rh   partialZforce_flattenre   rb   Zfixedlayoutr   r
   )r   rB   r-   rQ   r6   r   r   functionlayoutnumxZ	totalsizeZtotalalignmentZfieldofsZ	fieldsizer   r   r   r   r   6  s.    
 
*z'VGenericEngine._loading_struct_or_unionc             C   s  |j d krd S | jj| || jkrdd }| j}|j|}| jj|\}}||d |j|d ||d |j|d d}x|j D ]v\}}	}
}|
dkrq||| |j||d|f  ||d  dkr|j|	}|||d  |j|d	|f  |d7 }qW |t	|kst
d S )
Nc             S   s    | |krt jd||| f d S )Nz'%s (we have %d, but C compiler says %d))r   rM   )Z	realvalueZexpectedvaluemsgr   r   r   checkY  s    z5VGenericEngine._loaded_struct_or_union.<locals>.checkr   zwrong total sizer   zwrong total alignmentr   zwrong offset for field %rzwrong size for field %r)r   r   r|   r
   popsizeofZalignofr   Zoffsetofre   rb   )r   rB   r   r   ZBStructr   r   rp   r   r   r   r   ZBFieldr   r   r   r   R  s,    


z&VGenericEngine._loaded_struct_or_unionc             C   s.   t |tjr| j||d n| j|d| d S )Nr   )r`   r   EnumType_generate_gen_enum_declr   )r   rB   rQ   r   r   r   _generate_gen_anonymous_declt  s    z+VGenericEngine._generate_gen_anonymous_declc             C   s2   t |tjr| j|||d n| j|d|| d S )Nr   )r`   r   r   _loading_gen_enumr   )r   rB   rQ   r6   r   r   r   _loading_gen_anonymousz  s    z%VGenericEngine._loading_gen_anonymousc             K   s.   t |tjr | j|||f| n
| j| d S )N)r`   r   r   _loaded_gen_enumr   )r   rB   rQ   r6   r   r   r   r   _loaded_gen_anonymous  s    z$VGenericEngine._loaded_gen_anonymousNconstc       
      C   sD  | j }d||f }| jj| |d k	rl|s.t|dks:t|d|  |d | j|| |d |d n|r|dks|t|d|  |d |d|f  |d	|f  |d n|d k	st|d kst|d
krd}nd}d}	|dkot|tjrd}	d}||jd|	|f | |d |d||f  |d |  d S )Nz_cffi_%s_%sr   zint %s(char *out_error)r^   z  return 0;r_   zint %s(long long *out_value)z  *out_value = (long long)(%s);z  return (%s) <= 0;var&r   zconst *z %s%s(void)z  return (%s%s);)	r!   r	   ri   rb   _check_int_constant_valuer`   r   rh   rY   )
r   is_intrQ   rB   categorycheck_valuer,   funcnameZ	ampersandextrar   r   r   rd     s@    

z"VGenericEngine._generate_gen_constc             C   s&   t |tjo|j }| j||| d S )N)r`   r   r   r   rd   )r   rB   rQ   r   r   r   r   _generate_gen_constant_decl  s    z*VGenericEngine._generate_gen_constant_declc             C   s  d| }|d k	r*|st | j|| |}n|r| jjdd }| jjdd }	|j|	|}
| jj|}|
|}t|d }|dk r| r| jjdd }|dd| jj| > 7 }nd|d kst d}t|t	j
rd	| }| jj|j||d }	|j|	|}
|
 }t|t	j
r|d }|S )
Nz_cffi_const_%sz
long long*r   zint(*)(long long*)z	long longr      z	(*)(void)rX   )rb   _load_known_int_constantr   r   r}   r   intr   r`   r   rh   rY   )r   r   rB   rQ   r6   r   r   valuer   r   r   pnegativeZ	BLongLongZfntypeextrar   r   r   rv     s2    zVGenericEngine._load_constantc             C   sD   t |tjo|j }| j||||}t||| t|jj| d S )N)	r`   r   r   r   rv   r   rZ   r0   ri   )r   rB   rQ   r6   r7   r   r   r   r   r   _loaded_gen_constant  s    z#VGenericEngine._loaded_gen_constantc             C   s   | j }|dkr"|d|||f  n|d|||f  |d |d|  |d|  |d |d|  |d	 |d
|d d |f  |d |d d S )Nr   z&  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");d   z    return -1;z  })r!   )r   rQ   r   r,   r   r   r   r     s     z(VGenericEngine._check_int_constant_valuec             C   st   | j jdd }| j jdd }|j||}| j j|d}||dk rp| j j|}tjdkrft|d}tj	|d S )Nzchar[]r   zint(*)(char*)   r$   zutf-8)r$   )
r   r   r}   r   stringr   r+   r   r   rM   )r   r6   r   r   r   r   r   errorr   r   r   r     s    

z'VGenericEngine._load_known_int_constantc             C   s   |j dd}d||f S )N$Z___D_z_cffi_e_%s_%s)replace)r   r-   rQ   r   r   r   _enum_funcname  s    zVGenericEngine._enum_funcnameenumc             C   s   |j r&x|jD ]}| jd| qW d S | j||}| jj| | j}|d|  |d x&t|j|jD ]\}}| j	|| qhW |d |d |  d S )NTzint %s(char *out_error)r^   z  return 0;r_   )
r   enumeratorsrd   r   r	   ri   r!   rj   
enumvaluesr   )r   rB   rQ   r-   
enumeratorr   r,   	enumvaluer   r   r   r     s    z&VGenericEngine._generate_gen_enum_declc                sL   j r0 fddjD }t|_d_nj||}j | d S )Nc                s   g | ]}j d | qS )T)rv   )r@   r   )r6   r   rB   r   r   rC     s   z4VGenericEngine._loading_gen_enum.<locals>.<listcomp>T)r   r   r{   r   Zpartial_resolvedr   r   )r   rB   rQ   r6   r-   r   r   r   )r6   r   rB   r   r     s    

z VGenericEngine._loading_gen_enumc             C   s<   x6t |j|jD ]$\}}t||| t|jj| qW d S )N)rj   r   r   r   rZ   r0   ri   )r   rB   rQ   r6   r7   r   r   r   r   r   r     s    zVGenericEngine._loaded_gen_enumc             C   s&   |dkrd }n|}| j d||d d S )Nz...T)r   )rd   )r   rB   rQ   r   r   r   r   _generate_gen_macro_decl  s    z'VGenericEngine._generate_gen_macro_declc             C   sF   |dkrd }n|}| j d||||d}t||| t|jj| d S )Nz...T)r   )rv   r   rZ   r0   ri   )r   rB   rQ   r6   r7   r   r   r   r   r   _loaded_gen_macro(  s    z VGenericEngine._loaded_gen_macroc             C   s   t |tjrx|jdkr\| j}d|f }| jj| |d|  |d |d|f  |d tj|j}| j	d|| ntj|}| j	d||dd	 d S )
Nz...z_cffi_sizeof_%szsize_t %s(void)r^   z  return sizeof(%s);r_   Fr   )r   )
r`   r   r   r   r!   r	   ri   rx   itemrd   )r   rB   rQ   r,   r   tp_ptrr   r   r   _generate_gen_variable_decl5  s    


z*VGenericEngine._generate_gen_variable_declc                s`  t |tjr|jdkrd|f }| jjdd }|j||}| }| jj|j}	t	|| jj
|	\}
}|dkrtjd||jf |j|
}tj|j}| jd|||}|jd k	r| jj|}| jj||}t||| t|jj| d S d| }| jj|jd|d }|j||}|   fd	d
} fdd}tt||t|| t|jj| d S )Nz...z_cffi_sizeof_%szsize_t(*)(void)r   z/bad size: %r does not seem to be an array of %sFz_cffi_var_%sz
*(*)(void)c                s    d S )Nr   r   )r7   )ptrr   r   getterf  s    z3VGenericEngine._loaded_gen_variable.<locals>.getterc                s   | d< d S )Nr   r   )r7   r   )r   r   r   setterh  s    z3VGenericEngine._loaded_gen_variable.<locals>.setter)r`   r   r   r   r   r   r}   r|   r   divmodr   r   rM   Zresolve_lengthrx   rv   castr   rZ   r0   ri   rY   property)r   rB   rQ   r6   r7   r   r   r   sizeZ	BItemTyper   restr   r   ZBArrayr   r   r   )r   r   _loaded_gen_variableG  s:    



z#VGenericEngine._loaded_gen_variable)r   )r   )Nr   N)N)r   )r   )5r3   r4   r5   Z
_class_keyZ_gen_python_moduler   r   r   r   r!   r/   r:   rH   r)   r;   rV   rW   Z_generate_gen_typedef_declZ_loading_gen_typedefZ_loaded_gen_typedefrs   Z_loading_gen_functionr   r~   r   r   r   r   r   r   r   r   r   r   r   r   rd   r   Z_loading_gen_constantrv   r   r   r   r   r   r   r   r   Z_loading_gen_macror   r   Z_loading_gen_variabler   r   r   r   r   r   
   sf   



-$1"	 
$
	


r   a  
#include <stdio.h>
#include <stddef.h>
#include <stdarg.h>
#include <errno.h>
#include <sys/types.h>   /* 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 */
#if defined(_MSC_VER)
# include <malloc.h>   /* 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 <stdint.h>
# endif
# if _MSC_VER < 1800   /* MSVC < 2013 */
   typedef unsigned char _Bool;
# endif
#else
# include <stdint.h>
# if (defined (__SVR4) && defined (__sun)) || defined(_AIX)
#  include <alloca.h>
# endif
#endif
)	r   r   r<   r   r   r   objectr   r'   r   r   r   r   <module>   s        