o
    i;i                     @   sH   d dl Z d dlZd dlZddlmZ ddlmZ G dd deZdZ	dS )    N   )modelVerificationErrorc                   @   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   _/var/www/html/eduruby.in/lip-sync/lip-sync-env/lib/python3.10/site-packages/cffi/vengine_gen.py__init__   s   
zVGenericEngine.__init__c                 C   s   | d| j d S )Nr   )
setdefaultr   )r   kwdsr   r   r   patch_extension_kwds   s   z#VGenericEngine.patch_extension_kwdsc                 C   sT   |D ]%}|| }|d u rt j}|D ]}tj||}tj|r&|    S qqd S r   )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      d S r   r   r   r   r   r   collect_types%      zVGenericEngine.collect_types c                 C   s   | j |d  d S )N
)Z_fwrite)r   whatr   r   r   _prnt(      zVGenericEngine._prntc                 C   sd   | j }|t || jj | d tjdkr0tjdkrd}nd}| j }|d||f  d S d S )Ndeclwin32   ZPyInit_initzvoid %s%s(void) { }
)	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t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 r   )	_cffi_dirr   )
FFILibraryr   r   __dir__T   s   z7VGenericEngine.load_library.<locals>.FFILibrary.__dir__N)__name__
__module____qualname__Z_cffi_generic_moduler
   Z	_cffi_ffir6   r8   r   r7   moduler   r   r   r7   P   s
    r7   r"   Zloadedlibrary)r
   _backendr   r   r   curdirr	   Zmodulefilenameload_library_loadtypes
ModuleType)r   flagsbackendr   r?   r   r<   r   rB   A   s   zVGenericEngine.load_libraryc                 C   s$   dd | j jj D }|  |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   |   D ]?\}}|dd\}}zt| d||f }W n ty(   td| w z||| W q tyC } zt||  d }~ww d S )N r   z_generate_gen_%s_%sznot implemented in verify(): %r)rP   splitgetattrAttributeErrorr   	Exceptionr   attach_exception_info)r   	step_namenamerJ   kindrealnamemethoder   r   r   r/   c   s&   zVGenericEngine._generatec           
      K   sv   |   D ]4\}}|dd\}}t| d||f }z||||fi | W q ty8 }	 zt|	|  d }	~	ww d S )NrQ   r   z
_%s_gen_%s)rP   rR   rS   rU   r   rV   )
r   r=   rW   r   rX   rJ   rY   rZ   r[   r\   r   r   r   rC   r   s   zVGenericEngine._loadc                 C   r   r   r   r   rJ   rX   r   r   r   _generate_nothing|   r!   z VGenericEngine._generate_nothingc                 K   r   r   r   r   rJ   rX   r=   r   r   r   r   _loaded_noop   r!   zVGenericEngine._loaded_noopc                    s  t |tjsJ |jr| d|| d S | j}t|j}g }t|jD ]\}}d}t |tj	r1d}|
d||f  q#d|   fddt|j|D }	|j}
t |
tj	rb|	d|
d	  tj}
d
|	phd}	d| }| j
| |jr||jd }nd}d|||	f }d|  ||
|  |d t |jtj	rd}nt |jtjsd}nd}|d||d
|f  |d |  d S )NFr"   *z%sx%dzargument of %sc                    s    g | ]\}}| d |  qS )z %s)
get_c_name)rH   typeargcontextr   r   rK      s    z>VGenericEngine._generate_gen_function_decl.<locals>.<listcomp>r   z *rz, void
_cffi_f_%srQ   z	 %s%s(%s)zresult of %s{z*r = zreturn z  %s%s(%s);})
isinstancer   FunctionPtrTypeellipsis_generate_gen_constr&   lenargs	enumerateStructOrUnionappendzipresultinsertrb   	void_typer   r   abiZVoidType)r   rJ   rX   r2   Znumargsargnamesirc   ZindirectionZarglistZtpresultwrappernamerx   ZfuncdeclZresult_coder   re   r   _generate_gen_function_decl   sL   



z*VGenericEngine._generate_gen_function_declc                 C   sd  t |tjsJ |jr| d|||}ng }|}tdd |jD s)t |jtjrg }t	|jD ]\}	}
t |
tjrFt
|
}
||	|
f ||
 q0|j}t |tjry|jd u rctd| f t
|}|d| |dd|f tj}tt|||j}| j|}d| }|||}|D ]\}	}
| ||	|
|}qt||| t|j| d S )NFc                 s   s    | ]	}t |tjV  qd S r   )rk   r   rr   )rH   typr   r   r   	<genexpr>   s    z6VGenericEngine._loaded_gen_function.<locals>.<genexpr>z*'%s' is used as result type, but is opaquer   ru   rh   )rk   r   rl   rm   _load_constantanyrp   ru   rr   rq   PointerTypers   Zfldtypes	TypeError_get_c_namerv   rw   tupler
   _get_cached_btypeload_function_make_struct_wrappersetattrrc   r6   )r   rJ   rX   r=   r?   ZnewfunctionZindirectionsbase_tpZindirect_argsrz   r}   Zindirect_resultBFuncr{   r   r   r   _loaded_gen_function   sJ   




z#VGenericEngine._loaded_gen_functionc                    sP   | j j| j | dkr| j  fdd}n	 fdd}||_|S )Nru   c                     s"     }|g| R   |d S Nr   )new)rp   res)BTyper
   oldfuncr   r   newfunc   s   
z4VGenericEngine._make_struct_wrapper.<locals>.newfuncc                     s6   | d    |  f | d d   } |  S )Nr   )Znewp)rp   )r   rG   rz   r   r   r   r      s   .)r
   r@   r   Z_cffi_base_type)r   r   rz   rJ   r   r   r   )r   rG   r
   rz   r   r   r      s   z#VGenericEngine._make_struct_wrapperc                 C       ||j ksJ | |d| d S NstructrX   _generate_struct_or_union_declr]   r   r   r   _generate_gen_struct_decl      z(VGenericEngine._generate_gen_struct_declc                 C      |  |d|| d S r   _loading_struct_or_unionr   rJ   rX   r=   r   r   r   _loading_gen_struct   r'   z"VGenericEngine._loading_gen_structc                 K      |  | d S r   _loaded_struct_or_unionr_   r   r   r   _loaded_gen_struct      z!VGenericEngine._loaded_gen_structc                 C   r   Nunionr   r]   r   r   r   _generate_gen_union_decl   r   z'VGenericEngine._generate_gen_union_declc                 C   r   r   r   r   r   r   r   _loading_gen_union   r'   z!VGenericEngine._loading_gen_unionc                 K   r   r   r   r_   r   r   r   _loaded_gen_union  r   z VGenericEngine._loaded_gen_unionc                 C   s  |j d u rd S d||f }d||f }d||f  }| j}|d||f  |d |d |d | D ]G\}}	}
}t|	tjrF|	 sJ|
dkrQ|d	|  q6z|d
|	jdd| |d|f  W q6 t	y} } z|dt
|  W Y d }~q6d }~ww |d | j| |d|f  |d |d|  |d |d|  |d | D ]/\}}	}
}|
dkrq|d||f  t|	tjr|	jd u r|d|	   q|d||f  q|d |d |d |d |d|f  |d |  d S )Nz_cffi_check_%s_%s_cffi_layout_%s_%s%s %szstatic void %s(%s *p)ri   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 */rj   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&   
enumfieldsrk   r   PrimitiveTypeis_integer_typerb   r   strr   rs   	ArrayTypelengthr   )r   rJ   r3   rX   Zcheckfuncnamelayoutfuncnamecnamer2   fnameftypefbitsizefqualr\   r   r   r   r     s^   

z-VGenericEngine._generate_struct_or_union_declc                 C   s
  |j d u rd S d||f }| jdd }|||}g }d}		 ||	}
|
dk r)n
||
 |	d7 }	q t|tjrt|jrt|d }|d }|dd d }|dd d }|	  t
|t
|  krht
|j kskJ  J ||||f|_d S d||f  }||f| j|< d S )	Nr   zintptr_t(*)(intptr_t)r   Tr      r+   r   )r   r
   _typeof_lockedr   rs   rk   r   rr   partialZforce_flattenro   Zfixedlayoutr   r   )r   rJ   r3   rX   r=   r   r   functionlayoutnumxZ	totalsizeZtotalalignmentZfieldofsZ	fieldsizer   r   r   r   r   7  s.   


*z'VGenericEngine._loading_struct_or_unionc                 C   s  |j d u rd S | j| || jv rdd }| j}||}| j|\}}||d ||d ||d ||d d}| D ];\}}	}
}|
dkrMqB||| |||d|f  ||d  dkry||	}|||d  ||d	|f  |d7 }qB|t	|ksJ d S d S )
Nc                 S   s   | |krt d||| f d S )Nz'%s (we have %d, but C compiler says %d)r   )Z	realvalueZexpectedvaluemsgr   r   r   checkZ  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offsetofro   )r   rJ   r   r
   ZBStructr   r   rz   r   r   r   r   ZBFieldr   r   r   r   S  s4   




z&VGenericEngine._loaded_struct_or_unionc                 C   s0   t |tjr| ||d d S | |d| d S Nr"   )rk   r   EnumType_generate_gen_enum_declr   r]   r   r   r   _generate_gen_anonymous_declu  s   z+VGenericEngine._generate_gen_anonymous_declc                 C   s4   t |tjr| |||d d S | |d|| d S r   )rk   r   r   _loading_gen_enumr   r   r   r   r   _loading_gen_anonymous{  s   z%VGenericEngine._loading_gen_anonymousc                 K   s4   t |tjr| j|||fi | d S | | d S r   )rk   r   r   _loaded_gen_enumr   r_   r   r   r   _loaded_gen_anonymous  s   z$VGenericEngine._loaded_gen_anonymousNconstc           
      C   sB  | j }d||f }| j| |d ur6|sJ |dksJ |d|  |d | || |d |d nf|r[|dks>J |d|  |d |d|f  |d	|f  |d nA|d usaJ |d u sgJ |d
krnd}nd}d}	|dkrt|tjrd}	d}||d|	|f | |d |d||f  |d |  d S )Nz_cffi_%s_%sr   int %s(char *out_error)ri     return 0;rj   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   rs   _check_int_constant_valuerk   r   rr   rb   )
r   is_intrX   rJ   categorycheck_valuer2   funcnameZ	ampersandextrar   r   r   rn     s@   


z"VGenericEngine._generate_gen_constc                 C   s&   t |tjo	| }| ||| d S r   )rk   r   r   r   rn   )r   rJ   rX   r   r   r   r   _generate_gen_constant_decl  s   z*VGenericEngine._generate_gen_constant_declc                 C   s  d| }|d ur|sJ |  || |}|S |rZ| jdd }| jdd }	||	|}
| j|}|
|}t|d }|dk rX|sX| jdd }|dd| j| > 7 }|S |d u s`J d}t|tj	rld	| }| j|
||d }	||	|}
|
 }t|tj	r|d }|S )
Nz_cffi_const_%sz
long long*r   zint(*)(long long*)z	long longr      z	(*)(void)ra   )_load_known_int_constantr
   r   r   r   intr   rk   r   rr   rb   )r   r   rJ   rX   r=   r   r   valuer   r   r   pnegativeZ	BLongLongZfntypeextrar   r   r   r     s6   zVGenericEngine._load_constantc                 C   sD   t |tjo	| }| ||||}t||| t|j| d S r   )	rk   r   r   r   r   r   rc   r6   rs   )r   rJ   rX   r=   r?   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   rX   r   r2   r   r   r   r     s&   
z(VGenericEngine._check_int_constant_valuec                 C   sr   | j dd }| j dd }|||}| j |d}||dk r7| j |}tjdkr3t|d}t|d S )Nzchar[]r   zint(*)(char*)   r*   zutf-8)	r
   r   r   r   stringr   r1   r   r   )r   r=   r   r   r   r   r   errorr   r   r   r     s   

z'VGenericEngine._load_known_int_constantc                 C   s   | dd}d||f S )N$Z___D_z_cffi_e_%s_%s)replace)r   r3   rX   r   r   r   _enum_funcname  s   zVGenericEngine._enum_funcnameenumc                 C   s   |j r|jD ]}| d| qd S | ||}| j| | j}|d|  |d t|j|jD ]
\}}| 	|| q1|d |d |  d S )NTr   ri   r   rj   )
r   enumeratorsrn   r   r   rs   r&   rt   
enumvaluesr   )r   rJ   rX   r3   
enumeratorr   r2   	enumvaluer   r   r   r     s   

z&VGenericEngine._generate_gen_enum_declc                    sN   j r fddjD }t|_d_d S ||} | d S )Nc                    s   g | ]
} d | qS )T)r   )rH   r   r=   r   rJ   r   r   rK     s    z4VGenericEngine._loading_gen_enum.<locals>.<listcomp>T)r   r   r   r   Zpartial_resolvedr   r   )r   rJ   rX   r=   r3   r   r   r   r   r   r     s   

z VGenericEngine._loading_gen_enumc                 C   s8   t |j|jD ]\}}t||| t|j| qd S r   )rt   r   r   r   rc   r6   rs   )r   rJ   rX   r=   r?   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   )rn   )r   rJ   rX   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| d S r   )r   r   rc   r6   rs   )r   rJ   rX   r=   r?   r   r   r   r   r   _loaded_gen_macro)  s   z VGenericEngine._loaded_gen_macroc                 C   s   t |tjr<| r-| j}d|f }| j| |d|  |d |d|f  |d t|j}| 	d|| d S t|}| j	d||dd d S )	N_cffi_sizeof_%szsize_t %s(void)ri   z  return sizeof(%s);rj   Fr   )r   )
rk   r   r   length_is_unknownr&   r   rs   r   itemrn   )r   rJ   rX   r2   r   tp_ptrr   r   r   _generate_gen_variable_decl6  s   

z*VGenericEngine._generate_gen_variable_declc                    s\  t |tjrt| rDd|f }| jdd }|||}| }| j|j}	t	|| j
|	\}
}|dkr?td||jf ||
}t|j}| d|||}|jd urd| j|}| j||}t||| t|j| d S d| }| j|d|d }|||}|   fdd	} fd
d}tt||t|| t|j| d S )Nr   z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 r   r   r>   Zptrr   r   getterg  s   z3VGenericEngine._loaded_gen_variable.<locals>.getterc                    s   | d< d S r   r   )r?   r   r   r   r   setteri  s   z3VGenericEngine._loaded_gen_variable.<locals>.setter)rk   r   r   r   r
   r   r   r   r   divmodr   r   Zresolve_lengthr   r   r   castr   rc   r6   rs   rb   property)r   rJ   rX   r=   r?   r   r   r   sizeZ	BItemTyper   restr   r   ZBArrayr   r   r   r   r   _loaded_gen_variableH  s>   


z#VGenericEngine._loaded_gen_variable)r"   )r   )Nr   Nr   )r   )5r9   r:   r;   Z
_class_keyZ_gen_python_moduler   r   r   r    r&   r5   rB   rP   r/   rC   r^   r`   Z_generate_gen_typedef_declZ_loading_gen_typedefZ_loaded_gen_typedefr|   Z_loading_gen_functionr   r   r   r   r   r   r   r   r   r   r   r   r   r   rn   r   Z_loading_gen_constantr   r   r   r   r   r   r   r   r   Z_loading_gen_macror   r   Z_loading_gen_variabler   r   r   r   r   r      sj    



-$1"	
%
	


r   ac  
#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
   and cffi/_cffi_include.h */
#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 */
#  ifndef __cplusplus
    typedef unsigned char _Bool;
#  endif
# endif
# define _cffi_float_complex_t   _Fcomplex    /* include <complex.h> for it */
# define _cffi_double_complex_t  _Dcomplex    /* include <complex.h> for it */
#else
# include <stdint.h>
# if (defined (__SVR4) && defined (__sun)) || defined(_AIX) || defined(__hpux)
#  include <alloca.h>
# endif
# define _cffi_float_complex_t   float _Complex
# define _cffi_double_complex_t  double _Complex
#endif
)
r   r   rD   r"   r   r   r   objectr   r-   r   r   r   r   <module>   s       g