
    #	hW                        S SK r S SKrS SKrSSKJrJr  SSKJr  SSK7  Sr	Sr
Sr\R                  S	:g  =(       d%    \R                  S
:  =(       d    \R                  S:  r " S S5      r " S S5      r " S S5      r " S S5      r " S S5      r " S S5      r\R                  S:  a  \R*                  rO " S S\R.                  5      rS rS rS%S jrS%S jrS rS  rS! rS" rS# r     S&S$ jr!g)'    N   )ffiplatformmodel)VerificationError)*i&  i'  i(  win32)   r   )r	      c                   *    \ rS rSrSS jrS rS rSrg)
GlobalExpr   c                 @    Xl         X l        X0l        X@l        XPl        g N)nameaddresstype_opsizecheck_value)selfr   r   r   r   r   s         A/var/www/html/env/lib/python3.13/site-packages/cffi/recompiler.py__init__GlobalExpr.__init__   s    		&    c           	          SU R                   < SU R                  < SU R                  R                  5       < SU R                  < S3	$ )N  { "z", (void *), z
, (void *) },)r   r   r   	as_c_exprr   r   s    r   r   GlobalExpr.as_c_expr   s0    IIt||T\\%;%;%=tyyJ 	Jr   c                 j    SU R                   R                  5       U R                  U R                  4-  $ )Nz
b'%s%s',%d)r   as_python_bytesr   r   r   s    r   as_python_exprGlobalExpr.as_python_expr   s2    t||;;=tyy#//1 1 	1r   )r   r   r   r   r   N)r   r   __name__
__module____qualname____firstlineno__r   r   r#   __static_attributes__ r   r   r   r      s    'J1r   r   c                   ,    \ rS rSrS rS rS rS rSrg)	FieldExpr   c                 @    Xl         X l        X0l        X@l        XPl        g r   )r   field_offset
field_sizefbitsizefield_type_op)r   r   r0   r1   r2   r3   s         r   r   FieldExpr.__init__   s    	($ *r   c                     S[        U R                  5      -  nSU R                  < SU R                  < S3SU< SU R                  < S3-   SU< SU R                  R                  5       < S3-   $ )N r   ", z,
z     z   r   )lenr   r0   r1   r3   r   )r   spacess     r   r   FieldExpr.as_c_expr&   sZ    s499~%%)YY0A0AB%+T__=>%+T-?-?-I-I-KLM 	Nr   c                     [         er   )NotImplementedErrorr   s    r   r#   FieldExpr.as_python_expr,   s    !!r   c                    U R                   R                  [        :X  a  SnO:U R                   R                  [        :X  a  [	        U R
                  5      nO[        eSU R                   R                  5       < U< U R                  < S3$ )N b'')	r3   opOP_NOOPOP_BITFIELDformat_four_bytesr2   r<   r"   r   )r   	size_exprs     r   as_field_python_exprFieldExpr.as_field_python_expr/   sj      G+I""k1)$--8I%%"00@@B'"ii) 	)r   )r2   r0   r1   r3   r   N)	r&   r'   r(   r)   r   r   r#   rG   r*   r+   r   r   r-   r-      s    +N"	)r   r-   c                   &    \ rS rSrS rS rS rSrg)StructUnionExpr:   c	                 d    Xl         X l        X0l        X@l        XPl        X`l        Xpl        Xl        g r   )r   
type_indexflagsr   	alignmentcommentfirst_field_indexc_fields)	r   r   rM   rN   r   rO   rP   rQ   rR   s	            r   r   StructUnionExpr.__init__;   s+    	$
	"!2 r   c                 .   SU R                   U R                  U R                  4-  SU R                  < SU R                  < S3-   SU R
                  [        U R                  5      4-  -   U R                  (       a  SU R                  -  -   S-   $ S-   S-   $ )Nz  { "%s", %d, %s,z
    r   z%d, %d z	/* %s */ r?   z},)	r   rM   rN   r   rO   rQ   r8   rR   rP   r   s    r   r   StructUnionExpr.as_c_exprF   s    #tyy$//4::&NN&*ii@At55s4==7IJJK 26;-G 	 	 DFG 	 	r   c                     [        U R                  [        5      nU R                   Vs/ s H  nUR	                  5       PM     nnS[        U R                  5      < [        U5      < U R                  < SSR                  U5      < S3$ s  snf )Nz(b'',,))	evalrN   G_FLAGSrR   rG   rE   rM   r   join)r   rN   c_fieldfields_exprs       r   r#   StructUnionExpr.as_python_exprM   sy    TZZ)&*mm5&37 335&3 	 5 doo.e$IIHH[!	# 	#5s   B)rO   rR   rP   rQ   rN   r   r   rM   Nr%   r+   r   r   rJ   rJ   :   s    	!#r   rJ   c                   &    \ rS rSrS rS rS rSrg)EnumExprW   c                 @    Xl         X l        X0l        X@l        XPl        g r   r   rM   r   signedallenums)r   r   rM   r   re   rf   s         r   r   EnumExpr.__init__X   s    	$	 r   c                 z    SU R                   U R                  U R                  U R                  U R                  4-  $ )Nz1  { "%s", %d, _cffi_prim_int(%s, %s),
    "%s" },rd   r   s    r   r   EnumExpr.as_c_expr_   s9    !%DOO!%DKK!HH 	Ir   c           	         [         [        [        [        [        [
        [        [        S.U R                  U R                  4   nS[        U R                  5      < [        U5      < U R                  < SU R                  < S3$ )N))r   r   )r   r   )   r   )rk   r   )   r   )rl   r   )   r   )rm   r   r@   z\x00rA   )
PRIM_UINT8	PRIM_INT8PRIM_UINT16
PRIM_INT16PRIM_UINT32
PRIM_INT32PRIM_UINT64
PRIM_INT64r   re   rE   rM   r   rf   )r   
prim_indexs     r   r#   EnumExpr.as_python_exprd   sa    )***	
 ii$&
 &7t%G%6z%B%)YY? 	?r   )rf   r   re   r   rM   Nr%   r+   r   r   ra   ra   W   s    !I
	?r   ra   c                   &    \ rS rSrS rS rS rSrg)TypenameExpro   c                     Xl         X l        g r   r   rM   )r   r   rM   s      r   r   TypenameExpr.__init__p   s    	$r   c                 8    SU R                   U R                  4-  $ )Nz  { "%s", %d },r|   r   s    r   r   TypenameExpr.as_c_exprt   s     DIIt#???r   c                 P    S[        U R                  5      < U R                  < S3$ )Nr@   rA   )rE   rM   r   r   s    r   r#   TypenameExpr.as_python_exprw   s    -doo>		JJr   r|   Nr%   r+   r   r   ry   ry   o   s    %@Kr   ry   c                   
   \ rS rSrSrSMS jrS rS rS rS r	S r
/ S	QrS
 rSNS jrS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS r S r!S  r"SOS" jr#S# r$S$ r%S% r&\&r'S& r(S' r)\)r*S( r+\+r,S) r-S* r.S+ r/  SPS, jr0S- r1S. r2S/ r3S0 r4SOS1 jr5S2 r6S3 r7S4 r8S5 r9S6 r:S7 r;S8 r<S9 r=S: r>S; r?\?=r@rAS< rBS= rCS> rDS? rES@ rF\F=rGrHSA rISB rJSC rKSD rLSE rMSF rNSG rO\OrP\OrQSH rRSI rSSJ rT\TrUSK rVSLrWg!)Q
Recompiler~   r   c                 >    Xl         X l        X0l        [        U l        g r   )ffimodule_nametarget_is_pythonVERSION_BASE_version)r   r   r   r   s       r   r   Recompiler.__init__   s    & 0$r   c                 :    [        U R                  U5      U l        g r   )maxr   )r   vers     r   needs_versionRecompiler.needs_version   s    DMM3/r   c           
      Z   0 U l         U R                  S5        [        U R                   [        S9n/ U l        U GH?  nUR
                  (       d  M  U R                   U   b   e[        U R                  5      U R                   U'   U R                  R                  U5        UR                   H  n[        U[        R                  [        R                  [        R                  [        R                  [        R                  45      (       d   eU R                   U   c"  [        U R                  5      U R                   U'   U R                  R                  U5        M     U R                  R                  S5        GMB     U H  nUR
                  (       a  M  U R                   U   b  M(  [        U R                  5      U R                   U'   U R                  R                  U5        UR                   (       d  Mx  UR"                  c  M  U R                  R                  S5        M     S U R                   R%                  5       ;  d   e0 U l        0 U l        U Hc  n[        U[        R*                  5      (       a  S U R&                  U'   M3  [        U[        R,                  5      (       d  MT  S U R(                  U'   Me     [/        [        U R&                  S S95       H  u  pBX@R&                  U'   M     [/        [        U R(                  S S95       H  u  pBX@R(                  U'   M     U H;  n[1        U SUR2                  R4                  -   5      nU" X R                   U   5        M=     U R                   H  n[        U[6        5      (       a  M   e   [9        U R                  5      U l        g )NcollecttypekeyENDLENc                     U R                   $ r   r   tps    r   <lambda>/Recompiler.collect_type_table.<locals>.<lambda>       RWWr   c                     U R                   $ r   r   r   s    r   r   r      r   r   _emit_bytecode_)
_typesdict	_generatesortedstr
cffi_typesis_raw_functionr8   appendargs
isinstancer   VoidTypeBasePrimitiveTypePointerTypeStructOrUnionOrEnumFunctionPtrTypeis_array_typelengthvalues_struct_unions_enumsStructOrUnionEnumType	enumerategetattr	__class__r&   CffiOptuple)r   	all_declsr   tp1imethodrB   s          r   collect_type_tableRecompiler.collect_type_table   s   }%4??4	 B!!!r*222&)$//&:#&&r*77C%cENN,1,C,C,1,=,=,1,E,E,1,A,A	,C D D D D
 s+3/24??/C,OO**3/ # &&u- " B%%%$//"*=*E&)$//&:#&&r*###		(=OO**51  4??113333 !B"e1122*.##B'B//"&B	 
 vd&9&9*< > ?EA&'#? vdkk*< > ?EAKKO?
 BT#4r||7L7L#LMF2r*+ 
 //Bb&)))) "0r   c                 F    U R                   (       + nUR                  U5      $ r   )r   
enumfields)r   r   expand_anonymous_struct_unions      r   _enum_fieldsRecompiler._enum_fields   s#     -1,A,A(A%}}:;;r   c                    [        U[        R                  5      (       d0  [        U[        5      (       a  U H  nU R	                  U5        M     g XR
                  ;  Ga  S U R
                  U'   [        U[        R                  5      (       a   U R	                  UR                  5       5        g [        U[        R                  5      (       ap  UR                  bb  XR                  R                  R                  ;  a>  U R                  U5       H(  u  p4  nU R	                  U R                  XU5      5        M*     g g g UR                  5        H  u  pRU R	                  U5        M     g g r   )r   r   BaseTypeByIdentityr   _do_collect_typer   r   as_raw_functionr   fldtypesr   _parser_included_declarationsr   _field_type
_get_items)r   r   xname1r   _s         r   r   Recompiler._do_collect_type   s   "e6677"e$$A))!, __$"&DOOB"e3344%%b&8&8&:;B 3 344;;*(("2"2"I"II,0,=,=b,A(Aq--d.>.>r#.NO -B J +
 MMODA))!, , %r   c                    U R                   R                  R                  R                  5       n[	        U5       H@  u  nu  pEUR                  SS5      u  pg [        U SU< SU< 35      n XPl	        U" XG5        MB     g ! [         a    [        SU-  5      ef = f! [         a  n	[        R                  " X5        e S n	A	ff = f)Nr6   r   _generate_cpy_r   z"not implemented in recompile(): %r)r   r   _declarationsitemsr   splitr   AttributeErrorr   _current_quals	Exceptionr   attach_exception_info)
r   	step_namelstr   r   qualskindrealnamer   es
             r   r   Recompiler._generate   s    hh,,224!'D+2!ZZQ/NDA @I(K L
&+#r$ "-
 " A'84?A AA  ++A4s$   A?,B?B
C%B<<C)globalfieldstruct_unionenumtypenamec                 j   0 U l         U R                   H  n/ U R                   U'   M     [        5       U l        U R	                  S5        U R                  5         U R                   H@  nU R                   U   nUS:w  a  UR                  S S9  [        U5      U R                   U'   MB     U R                   S   nU R                  R                  5        H4  u  p4U[        U5      :  d   eX$   R                  UR                  :X  a  M4   e   [        U5      [        U R                  5      :X  d   eU R                   S   nU R                  R                  5        H4  u  p4U[        U5      :  d   eX$   R                  UR                  :X  a  M4   e   [        U5      [        U R                  5      :X  d   eg )Nctxr   c                     U R                   $ r   r   )entrys    r   r   0Recompiler.collect_step_tables.<locals>.<lambda>  s    5::r   r   r   r   )_lsts	ALL_STEPSset_seen_struct_unionsr   _add_missing_struct_unionssortr   r   r   r8   r   r   )r   r   r   r   r   s        r   collect_step_tablesRecompiler.collect_step_tables   sj   
I$&DJJy! (#&5 u'')I**Y'CG#56$)#JDJJy!	 ( jj(((..0EBs3x<<6;;"''))) 1 3x3t223333jj [[&&(EBs3x<<6;;"''))) ) 3x3t{{++++r   c                 @    U R                   R                  US-   5        g )N
)_fwrite)r   whats     r   _prntRecompiler._prnt  s    dTk"r   c                     U R                   (       a  Ub   eU R                  U5        g Uc   eU R                  X5        g r   )r   write_py_source_to_fwrite_c_source_to_f)r   fpreambles      r   write_source_to_fRecompiler.write_source_to_f  s?      ###%%a('''$$Q1r   c                     [        [        R                  R                  [        R                  R	                  [
        5      U5      S5      nUR                  5       nUR                  5         U$ )Nr)openospathr\   dirname__file__	readlinesclose)r   filenamegliness       r   _rel_readlinesRecompiler._rel_readlines!  sC    bggooh7BCH		r   c           	      b   Xl         U R                  nU R                  R                  b  U" S5        [        (       d  U" S5        U R                  S5      nUR                  S5      nU R                  S5      XEUS-   & U" SR                  U5      5        U R                  R                  S5      S	   nU R                  R                  b  U" S
U R                  < S35        U" S5        U R                  U R                  R                  5        U" S5        U" S5        U" SU< 35        U" S5        U" SU< 35        U" S5        U" SU< 35        U" S5        U R                  S5      nUR                  S5      nU R                  S5      XEUS-   & U" SR                  U5      5        U R                  [        5        U" S5        U" 5         U" U5        U" 5         U" S5        U" 5         U" S5        [        U R                  R                  5        VVs/ s H  u  puXW4PM
     snn5      n[!        U R"                  5       H<  u  pYSn
XX;   a  SX   R%                  5       -   n
U" SXYR'                  5       U
4-  5        M>     U R"                  (       d  U" S5        U" S5        U" 5         [)        5       U l        U R-                  S5        0 nU R.                   Hh  nU R0                  U   n[3        U5      X'   X   S:  d  M)  U" S U< S!U< S"35        U H  nU" UR'                  5       5        M     U" S5        U" 5         Mj     U R                  R4                  (       aj  U" S#5        U R                  R4                   H1  n UR6                  S S$ u  nnUc  [;        S(5      eU" S)U< S*35        M3     U" S+5        U" S5        U" 5         U" S,5        U" S-5        U R.                   H#  nX   S:  a  U" S.U-  5        M  U" S/U-  5        M%     U R.                   H  nUS0:w  d  M  U" S1X   U4-  5        M     U R                  R4                  (       a	  U" S25        OU" S35        U" S4[3        U R"                  5      4-  5        SnU R<                  S:  d  U R                  R                  b  US-  nU" S5U-  5        U" S5        U" 5         U" S65        U" S75        U" S5        U" 5         U" S5        U" S85        U" S9U< S:35        U" S;5        US-  (       a  U" S<5        U" S=5        U" S>5        U" S?U R>                  -  5        U" S@5        U" SA5        U" SB5        U" S5        U" SC5        U" SD5        U" SE5        U" SF5        U" SGU< SH35        U" SI5        U" SJU< SK35        U" SL5        U" SL5        U" S5        U" S85        U" SMU< SN35        U" S;5        U" SOU R                  U R>                  4-  5        U" SC5        U" S5        U" S85        U" SPU< SN35        U" S;5        U" SQU R                  U R>                  4-  5        U" SC5        U" S5        U" 5         U" S65        U" SR5        U" S5        S U l        g s  snnf ! [8         a    [;        S%U R                  < S&U< S'35      ef = f)SNz#define _CFFI_USE_EMBEDDINGz#define _CFFI_NO_LIMITED_APIz_cffi_include.hz#include "parse_c_type.h"
zparse_c_type.hr   r?   .z#define _CFFI_MODULE_NAME  ""z1static const char _CFFI_PYTHON_STARTUP_CODE[] = {z0 };z#ifdef PYPY_VERSIONz3# define _CFFI_PYTHON_STARTUP_FUNC  _cffi_pypyinit_z#elif PY_MAJOR_VERSION >= 3z+# define _CFFI_PYTHON_STARTUP_FUNC  PyInit_#elsez(# define _CFFI_PYTHON_STARTUP_FUNC  init#endifz_embedding.hz#include "_cffi_errors.h"
z_cffi_errors.hz>/************************************************************/zstatic void *_cffi_types[] = {z // z/* %2d */ %s,%sz  0z};declr   zstatic const struct _cffi_z	_s _cffi_zs[] = {z.static const char * const _cffi_includes[] = {rk   ffi object 
 includes 8, but the latter has not been prepared with set_source()zMnot implemented yet: ffi.include() of a Python-based ffi inside a C-based ffiz  "z",z  NULLz?static const struct _cffi_type_context_s _cffi_type_context = {z  _cffi_types,z  _cffi_%ss,z  NULL,  /* no %ss */r   z  %d,  /* num_%ss */z  _cffi_includes,z  NULL,  /* no includes */z  %d,  /* num_types */z  %d,  /* flags */z#ifdef __GNUC__z?#  pragma GCC visibility push(default)  /* for -fvisibility= */PyMODINIT_FUNC_cffi_pypyinit_z(const void *p[]){z%    if (((intptr_t)p[0]) >= 0x0A03) {zQ        _cffi_call_python_org = (void(*)(struct _cffi_externpy_s *, char *))p[1];z    }z    p[0] = (const void *)0x%x;z    p[1] = &_cffi_type_context;z#if PY_MAJOR_VERSION >= 3    return NULL;}z#  ifdef _MSC_VERz     PyMODINIT_FUNCz#  if PY_MAJOR_VERSION >= 3z     PyInit_z(void) { return NULL; }z#  elsez	     initz
(void) { }z#  endifPyInit_(void)z5  return _cffi_init("%s", 0x%x, &_cffi_type_context);initz.  _cffi_init("%s", 0x%x, &_cffi_type_context);z#  pragma GCC visibility pop) r   r   r   
_embeddingUSE_LIMITED_APIr  indexr\   r   r   _print_string_literal_in_arrayr   VERSION_EMBEDDEDdictr   r   r   r   _get_c_namer   r   _seen_constantsr   r   r   r8   _included_ffis_assigned_sourcer   r   _num_externpyr   )r   r   r   prntr  r   base_module_namer   typeindex2typerB   rP   numsr   r   r   ffi_to_includeincluded_module_nameincluded_sourcerN   s                      r   r   Recompiler.write_c_source_to_f'  sS   zz88*.//0 ##$56KK56**+;<!RWWU^  ++11#6r:88*d6F6FHIDE//0C0CDL&' # $./ # $M # $N''7E9:A../?@EAaCL /0 	MNXMN 	-.doo6K6K6MN6M7Bw6MNOt/EAG" >#4#@#@#BB"a%AAB	 0
 KT
  #uv I**Y'C!#hDO"y* + E*+ !T
 ( 88""AB"&(("9"98&77; :(/ #*+34 4 "689 #: NJF 	NOI"^i/0,y89	 (
 IG#+t	.JJK ( 88""$%-.%T__)=(??@!TXX%8%8%DQJE!E)*T
 	NOX"#5EGHS	1989 E FM-=>./() XS	 	 !"#*+8HJKY(8:;ZZ*+"245S	DdmmH- - 	.S	W/12S	=dmmA- - 	.S	X+,Xw OH & 8+ !HHn78 88s   Y?
?Z)Z.c                 F   [        U[        5      (       a  SU< S3$ [        U[        [        45      (       aV  U Vs/ s H  o R	                  U5      PM     nn[        U5      S:X  a  UR                  S5        SSR                  U5      < S3$ UR                  5       $ s  snf )Nr@   rA   r   r?   (rX   rY   )	r   r   listr   _to_pyr8   r   r\   r#   )r   r   itemreps       r   r8  Recompiler._to_py  s    a>!a$''123;;t$C33x1}

2 XXc],,!!	 4s   Bc           
         Xl         U R                  nU" S5        U" S5        [        U R                  R                  =(       d    S5      n[        U5       HH  nU R                  R                  U   n UR                  S S u  pgUb  [        S5      eU" S	Xd4-  5        MJ     U" 5         U" S
U R                  < S35        U" SU R                  4-  5        S U l
        [        U R                  5      U l        U R                   Vs/ s H  oR                  5       PM     n	nU" SU R                  SR                  U	5      5      < S35        [!        U R"                  R%                  5        V
Vs/ s H  u  pXJ4PM
     snn
5      nU R&                   HK  nU R(                  U   n[        U5      S:  d  M#  US:w  d  M+  U" SU< SU R                  U5      < S35        MM     US:  a9  U" SSR                  [        U5       Vs/ s H  nSU-  PM
     sn5      < S35        U" S5        g ! [         a    [        SU R                  < SU< S35      ef = fs  snf s  snn
f s  snf )Nz# auto-generated filezimport _cffi_backendr+   rk   r  r  r  zMnot implemented yet: ffi.include() of a C-based ffi inside a Python-based ffizfrom %s import ffi as _ffi%dzffi = _cffi_backend.FFI('rW   z    _version = 0x%x,z    _types = r?   rX   r   r   z    _zs = z    _includes = (r   z_ffi%dz,),rY   )r   r   r8   r   r*  ranger+  r   r   r   r   r   r   r"   r8  r\   r'  r   r   r   r   )r   r   r-  num_includesr   r1  r2  r3  rB   	types_lstr   r/  r   r   s                 r   r   Recompiler.write_py_source_to_f  s&   zz 	$%#$ 488228b9|$A!XX44Q7N4"33BQ7 6$ *'45 5 /3G2KKL % 	0@0@BC#t}}&667  048OODOb'')O	D4;;rwwy/A#BDEdoo6K6K6MN6M7Bw6MNO I**Y'C3x!|	W 4DKK4DEF ( !		|1DE1DA8a<1DEFI J 	S	C " 4' .34 44" EN Fs   3H'I-I
 I')Ic                      U R                   U   $ r   )r   )r   types     r   _gettypenumRecompiler._gettypenum  s    t$$r   c           
         Sn[        U[        R                  5      (       a  UR                  5       (       d  UR	                  5       (       a"  UR
                  S:w  a  SnSUR
                  -  nO[        U[        R                  5      (       a  SUR                  S5      < S3nOPUR                  S5      nSU< SUR
                  R                  SS	5      < 3nUS
;   a  U R                  [        5        SnO[        U[        R                  5      (       a  U R                  XX45        g [        U[        R                  5      (       d  [        U[        R                  5      (       a:  U R                  SX0R                  U5      U4-  5        U R                  SU-  5        g [        U[        R                   5      (       a+  SUR                  S5      -  nSU R                  U5      -  nSnO[#        U5      eU R                  SU< SU< SU< U< S35        U R                  SU< SUR                  S5      < SU< S35        U R                  SU-  5        g )Nr?   _Bool_cffi_to_c_intz, %sr6  z)_cffi_to_c_doublez)_cffi_to_c_r6   r   char16_tchar32_tz-1z6  if (_cffi_to_c((char *)&%s, _cffi_type(%d), %s) < 0)z    %s;z(%s)_cffi_to_c_pointerz, _cffi_type(%d)NULL  z = );z  if (z == (rY   z && PyErr_Occurred()))r   r   r   is_complex_typeis_integer_typer   UnknownFloatType
get_c_namereplacer   VERSION_CHAR16CHAR32r   "_convert_funcarg_to_c_ptr_or_arrayr   r   rC  r   r<   )	r   r   fromvartovarerrcodeextraarg	convertercnameerrvalues	            r   _convert_funcarg_to_c Recompiler._convert_funcarg_to_c  s   b%11222;M;M;O;O!!##7(:,	!BGG+B 6 677 8:}}R7HJ	b)383577??33LN	44&&';<HE--..33B49DU6677U4455 JJO 0 0 4g>? @JJy7*+E112202==3DDI)D,<,<R,@@HH &b))

	7HMN

2==$h0 	1

9w&'r   c                     [        U[        R                  5      (       a4  UR                  S5        UR                  S5        UR                  S5        g g )NzPy_ssize_t datasizez-struct _cffi_freeme_s *large_args_free = NULLzIif (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);)r   r   r   add)r   r   	localvars	freeliness       r   _extra_local_variables!Recompiler._extra_local_variablesC  sG    b%++,,MM/0MMIJMM J K -r   c                    U R                  S5        U R                  SU R                  U5      X#4-  5        U R                  S5        U R                  SU< SUR                  S5      < S35        U R                  SU R                  U5      X#4-  5        U R                  S	5        U R                  S
U-  5        U R                  S5        g )Nz1  datasize = _cffi_prepare_pointer_call_argument(z(      _cffi_type(%d), %s, (char **)&%s);z  if (datasize != 0) {z    z  = ((size_t)datasize) <= 640 ? (r?   z!)alloca((size_t)datasize) : NULL;zF    if (_cffi_convert_array_argument(_cffi_type(%d), %s, (char **)&%s,z,            datasize, &large_args_free) < 0)z	      %s;z  })r   rC  rQ  )r   r   rU  rV  rW  s        r   rT  -Recompiler._convert_funcarg_to_c_ptr_or_arrayJ  s    

FG

=R 'A2 2 	3

+,

2==$& 	' 	

 #&*&6&6r&:G%KL 	M

AB

;()

5r   c                 h   [        U[        R                  5      (       a  UR                  5       (       a%  UR                  S:w  a  SU< SUR                  < S3$ [        U[        R
                  5      (       a  SU< S3$ UR                  S:w  aW  UR                  5       (       dB  UR                  R                  SS5      nUS	;   a  U R                  [        5        S
U< SU< S3$ SX R                  U5      4-  $ [        U[        R                  [        R                  45      (       a  SX R                  U5      4-  $ [        U[        R                  5      (       a3  SX R                  [        R                  " UR                  5      5      4-  $ [        U[        R                  5      (       aD  UR                   c"  [#        SUR%                  5       < SU< S35      eSX R                  U5      4-  $ [        U[        R&                  5      (       a  SX R                  U5      4-  $ [)        U5      e)NrF  z_cffi_from_c_int(r   rY   z_cffi_from_c_double(long doubler6   r   rH  _cffi_from_c_r6  z/_cffi_from_c_deref((char *)&%s, _cffi_type(%d))z0_cffi_from_c_pointer((char *)%s, _cffi_type(%d))rA   z' is used as z, but is opaquez0_cffi_from_c_struct((char *)&%s, _cffi_type(%d)))r   r   r   rO  r   rP  rN  rR  r   rS  rC  r   r   	ArrayTyper9  r   fldnames	TypeErrorr(  r   r<   )r   r   varcontextrZ  s        r   _convert_expr_from_cRecompiler._convert_expr_from_cX  s   b%1122!!##7(:58"''BBB 6 6774799M)"2D2D2F2FS144&&';<05s;;H))"-L/ / /U..0E0EFGGE%%b)I+ + +EOO,,E%%e&7&7&@AIC C CE//00{{"NN$g!/ 0 0E%%b)I+ + +ENN++D%%b)H+ + + &b))r   c                 0    U R                  USU< S35      $ )Nz(*(z *)0))_global_typer   r   r   s      r   _typedef_typeRecompiler._typedef_type{  s      T%;<<r   c                 D    U R                  U R                  X5      5        g r   )r   rs  rr  s      r   !_generate_cpy_typedef_collecttype,Recompiler._generate_cpy_typedef_collecttype~  s    d00:;r   c                     g r   r+   rr  s      r   _generate_cpy_typedef_decl%Recompiler._generate_cpy_typedef_decl      r   c                 p    U R                   U   nU R                  S   R                  [        X#5      5        g )Nr   )r   r   r   ry   )r   r   r   rM   s       r   _typedef_ctxRecompiler._typedef_ctx  s,    __R(


:%%l4&DEr   c                 T   U R                  X5      nU R                  X5        [        USS 5      S:X  a  U R                  XR                  S S9  g [        U[        R                  5      (       a;  U R                  UR                  UR                  R                  UR                  US9  g g )Noriginunknown_type)
approxname)r  	named_ptr)	rs  r}  r   _struct_ctxr   r   r   NamedPointerTypetotyperr  s      r   _generate_cpy_typedef_ctx$Recompiler._generate_cpy_typedef_ctx  s    )"#2x&.8RT:E2233RYY		277')  + 4r   c                     U R                  UR                  5       5        UR                  (       a$  U R                  (       d  U R                  U5        g g g r   )r   r   ellipsisr   rr  s      r   "_generate_cpy_function_collecttype-Recompiler._generate_cpy_function_collecttype  s=    b0023;;t44!!"%  5;r   c                    U R                   (       a   e[        U[        R                  5      (       d   eUR                  (       a  U R                  X5        g U R                  n[        UR                  5      nUS:X  a  SnOUS:X  a  SnOSn/ n/ nSU-  n[        UR                  5       H=  u  pUR                  U
R                  SU	-  U5      5        UR                  SU	-  5        M?     S	R                  U5      nU=(       d    S
nUR                  (       a  UR                  S-   nOSnU< SU< SU< S3nU" SUR                  R                  U5      < 35        U" S5        S	R                  U5      nSn[        UR                  [        R                  5      (       a  SnU" SU< U< SU< S35        U" S5        U" S5        U" S5        U" SU< SU< S35        U" S5        SU-  n[        UR                  5       H%  u  pU
R                  SU	-  U5      nU" SU-  5        M'     [!        5       n[!        5       nUR                   H  n
U R#                  U
UU5        M     [%        U5       H  nU" SU< S35        M     [        UR                  [        R                  5      (       d7  SnSU-  nSUR                  R                  SU5      -  nU" U5        U" S5        OS nSn[        UR                  5      S:  a  ['        [        UR                  5      5      nU H  n	U" S U	-  5        M     U" 5         U" S!U[        U5      [        U5      S	R                  U V	s/ s H  n	S"U	-  PM
     sn	5      4-  5        U" S#5        U" 5         [        UR                  5       H&  u  pU R)                  U
S$U	-  SU	-  S%5        U" 5         M(     U" S&5        U" S'5        ['        [        UR                  5      5       V	s/ s H  n	SU	-  PM
     nn	S	R                  U5      nU" S(U< U< SU< S)35        U" S*5        U" S+5        U" 5         U" S,5        US:X  a  U" S-5        U(       aC  U" S.U R+                  UR                  S/S05      -  5        U H  nU" SU-   5        M     U" S15        O$U H  nU" SU-   5        M     U" S25        U" S35        U" S5        U" S45        S5 nS6n/ n/ nSU-  n[        UR                  5       HV  u  pSnU" U
5      (       a  S7nS8nU
R                  S9UU	4-  U5      nUR                  U5        UR                  S:UU	4-  5        MX     UR                  nU" U5      (       a?  SU-  nUR                  S;U5      nUR-                  SU5        [        R.                  nS nS<nS8nU(       a  S	R                  U5      nU=(       d    S
nU< SU< SU< S3nU" SUR                  U5      < 35        U" S5        U(       a  U" U5        S	R                  U5      nU" S(U< U< SU< S)35        U(       a  U" S=5        U" S5        OU" S>U< S?U< 35        U" S@5        U" 5         g s  sn	f s  sn	f )ANr   noargr   arg0r   argument of %sz x%dzx%dr   voidr6   r?   _cffi_d_r6  rY   static r  zreturn rL  rM  r  z#ifndef PYPY_VERSIONzstatic PyObject *_cffi_f_z(PyObject *self, PyObject *z  %s;;z	result = result of %sz resultz  PyObject *pyresult;z  PyObject *arg%d;z1  if (!PyArg_UnpackTuple(args, "%s", %d, %d, %s))z&arg%dr  zarg%dzreturn NULLz  Py_BEGIN_ALLOW_THREADSz  _cffi_restore_errno();  { z); }z  _cffi_save_errno();z  Py_END_ALLOW_THREADSz  (void)self; /* unused */z  (void)noarg; /* unused */z  pyresult = %s;resultzresult typez  return pyresult;z  Py_INCREF(Py_None);z  return Py_None;r  c                     [        U [        R                  5      =(       d1    [        U [        R                  5      =(       a    U R	                  5       $ r   )r   r   r   PrimitiveTyperN  )rB  s    r   need_indirection@Recompiler._generate_cpy_function_decl.<locals>.need_indirection  s=    tU%8%89 -e&9&9: ,))+.r   Fr   Tz %sx%dz%sx%dz *resultz
*result = z  return result;z#  define _cffi_f_z	 _cffi_d_r  )r   r   r   r   r  _generate_cpy_constant_declr   r8   r   r   r   rQ  r\   abir  r   r   rb  r   r=  r\  rn  insert	void_type)r   r   r   r-  numargsargname	argumentscall_argumentsrm  r   rB  repr_argumentsr  name_and_argumentsresult_codeargr`  ra  r  result_declrngfreeliner  
differenceindirection	tp_results                             r   _generate_cpy_function_decl&Recompiler._generate_cpy_function_decl  s   (((("e334444;; ,,R6zzbgg,a<G\GG 	"T) )GAT__VaZAB!!%!), * 9-'1666&&3,CC36nMBII001CDFGS	>2bii00Kk4@AS	#$ !4IJS	"T) )GA//&1*g6C3 * E	E	GGD''iC 9%DD"# & "))U^^44%K$t+G!BII$8$8G$LLK()KKrww<!BGG%C)A-. FDc#hC		5A8a<56H8 8 9 #$ )GA&&tWq[%!)'46F *
 	'('(-23rww<-@A-@%!)-@A>2+t^DE$%%&)*a<./#**299hNO P%TH_% &%&%TH_% &()$%S	W	. 
	"T) )GAK%%!!
//(k1-="=wGCS!!!'[!,<"<= * II	I&&$t+G&&z7;CQ$IK&KJ!YYy1N+5vN7:D7E"G	 4 45G HJKI[!!YY~6Nk4HI'(IdDABXg 6 Bs   "Y3=Y8c           
         UR                   (       a#  U R                  (       d  U R                  X5        g U R                  UR	                  5          n[        UR                  5      nU R                  (       a  [        nO US:X  a  [        nOUS:X  a  [        nO[        nU R                  S   R                  [        USU-  [        XS5      SU-  S95        g )Nr   r   r   z
_cffi_f_%sz
_cffi_d_%s)r   )r  r   _generate_cpy_constant_ctxr   r   r8   r   OP_DLOPEN_FUNCOP_CPYTHON_BLTN_NOP_CPYTHON_BLTN_OOP_CPYTHON_BLTN_Vr   r   r   r   )r   r   r   rM   r  	meth_kinds         r   _generate_cpy_function_ctx%Recompiler._generate_cpy_function_ctx;  s    ;;t44++B5__R%7%7%9:
bgg,  &I\)I\)I)I

8##t\D0i4(4/1	2r   c                    [        U[        R                  5      (       ad  UR                  nUS:X  a  UR	                  S5      nSU< SU< S3nU R                  USU-  UR                  5      n[        R                  " Xd5      nU$ )N...r   z_cffi_array_len((()0)->rY   %s[0])r   r   ri  r   rQ  r   r9  )r   	tp_struct
field_nametp_fieldactual_lengthptr_struct_nametp_items          r   r   Recompiler._field_typeQ  ss    h00$OOM%"+"6"6s";#Z!1&&y'J2F'/}}6Gw>Hr   c                     U R                  U5        U R                  (       a)  UR                  5        H  nU R                  U5        M     g g r   )r   r   anonymous_struct_fields_struct_collecttype)r   r   fldtypes      r   r  Recompiler._struct_collecttype]  s?    b!  557((1 8 !r   c           
      H   UR                   c  g U R                  nSU< 3nU" S5        U" SU< SU< S35        U" S5        U" S5        U" S5        U R                  U5       H  u  pgp UR                  5       (       d  US	:  a  US
:w  a  U" SU< SU< SU< S35        M?  [	        U[
        R                  5      (       an  UR                  b  UR                  S:X  aQ  UR                  nUS-   n[	        U[
        R                  5      (       a!  UR                  c  M?  UR                  S:X  a  MQ  U" SUR                  SSU-  U	S9< SU< S35        M     U" S5        U" SU< SU< S35        U" 5         g ! [         a   n
U" S[        U
5      -  5         S n
A
GM9  S n
A
ff = f)N_cffi_checkfld__CFFI_UNUSED_FNzstatic void r6  z *p)r  z8  /* only to generate compile-time warnings or errors */z
  (void)p;r   r?   z  (void)((p->z) | 0);  /* check that 'r  z' is an integer */r  z[0]r  z*tmpzfield %rr   z = &p->z; (void)tmp; }z
  /* %s */r  zstruct _cffi_align_z { char x; z y; };)r   r   r   rO  r   r   ri  r   r9  rQ  r   r   )r   r   rZ  r  r-  checkfuncnamefnameftyper2   fqualr   s              r   _struct_declRecompiler._struct_decld  sr   ;;zz/9;u=>S	GH\-1->->r-B)E(,((**h!m{05ueE F "%99!LL0ELLE4I!JJE!EME "%99!LL0ELLE4I $$VZ-=U$K  .C( 	S	:uMN	 % ,\CF*++,s+   *6E7"A9E7E7/#E77
F!FF!Nc                    U R                   U   nS n/ n[        U[        R                  5      (       a  UR	                  S5        UR
                  c  UR	                  S5        SnXR                  R                  R                  ;  a  Ub#  X@R                  R                  R                  ;  a  UR
                  c  OAUR                  (       d  [        UR                  5       5      (       a  OUR	                  S5        UR                  (       a>  UR                  S:  a  [        U< SUR                  < S35      eUR	                  S5        OUR	                  S	5        S
nSR                  U5      =(       d    Sn/ nUGc  [        U R!                  U5      5      n	U	 GH#  u  ppU R#                  XU5      nU R%                  USUR&                  < SU
< S35        [(        nUS:  a  [*        nSU-  nO[Ub,  [        U[        R,                  5      (       a  UR.                  c  SnO)SUc  UR1                  S5      OUR&                  < SU
< S3nUb  US:  a  SnO3Ub  SUR&                  < SU
< S3nOSUR1                  S5      < SU
< S3nUR	                  [3        U
UX[5        XR                   U   5      5      5        GM&     [7        U R8                  S   5      nU R8                  S   R;                  U5        Uc  SnSnS nO0Ub  S!UR&                  < S"3nS#nOS$U< S3nS%U< S&3nS nOSnS'nS'nUnU R8                  S(   R	                  [=        UR&                  XWUUUUU5      5        U R>                  RA                  U5        g ))N_CFFI_F_UNION_CFFI_F_OPAQUEopaque_CFFI_F_CHECK_FIELDSr   z is declared with 'pack=zi'; only 0 or 1 are supported in API mode (try to use "...;", which does not require a 'pack' declaration)_CFFI_F_PACKED_CFFI_F_EXTERNALexternal|0zfield 'r  rA   r   z%d /* bits */z
(size_t)-1z	sizeof(((r   r  rY   z((char *)&((z)4096)->z) - (char *)4096z	offsetof(r?   r   r   z
(size_t)-2unnamedz	sizeof(*(z)0)z-1 /* unknown alignment */zsizeof(zoffsetof(struct _cffi_align_z, y)r  r   )!r   r   r   	UnionTyper   r   r   r   r   partialanyr  packedr<   r\   r7  r   r   _check_not_opaquer   rC   rD   ri  r   rQ  r-   r   r8   r   extendrJ   r   r_  )r   r   rZ  r  r  rM   reason_for_not_expandingrN   rR   r   fldnamer  r2   r  rB   r   offsetrQ   alignrP   s                       r   r  Recompiler._struct_ctx  s-   __R(
#' b%//**LL);;LL)*'/$hh&&==="(("2"2"I"II{{"s2#=#=#?@@34yy99q=- RYY() )
 -.LL+,'1$&3#+d//34J5?1(**2@&&w:<''7'KM q=$B*X5D]"7EOO<<.'D /8.?c*09?!D =HM)F*!1F + 46==3DgNFgvt$R)ABDE3 6@8 !$DJJw$7 8JJw&&x0}##(/8~~?D8E ) ,12DDNPEDE ".G

>"))BGGZeW-x9	: 	  $$R(r   c                    [        U[        R                  5      (       a-  UR                  n[        U[        R                  5      (       a  M-  [        U[        R                  5      (       a  UR
                  c  [        SU-  5      eg g )Nz0%s is of an opaque type (not declared in cdef()))r   r   ri  r9  r   r   rk  )r   r   locations      r   r  Recompiler._check_not_opaque  sk    U__--B U__--b%--..2;;3FBXMO O 4G.r   c                 6   [        U R                  R                  5       5      nUR                  S S9  U H  u  p#X R                  ;  d  M  UR
                  (       a  [        SU< S35      eUR                  R                  S5      (       a2  UR                  SS  R                  5       (       a  UR                  SS  nODUR                  S:X  a%  UR                  S:X  a  SnU R                  US5        O[        SU< 35      eU R                  US U5        M     g )	Nc                     U S   $ )Nr   r+   )tp_orders    r   r   7Recompiler._add_missing_struct_unions.<locals>.<lambda>  s    hqkr   r   zinternal inconsistency: z* is partial but was not seen at this point$r   _IO_FILEFILE)r7  r   r   r   r   r  r<   r   
startswithisdigit	forcenamer}  r  )r   r   r   orderr  s        r   r   %Recompiler._add_missing_struct_unions  s    
 4&&,,./12IB111::->@/C D D 77%%c**rwwqr{/B/B/D/D!#JWW
*r||v/E!'J%%b&1-/1/4 5 5  T:6 r   c                 &    U R                  U5        g r   )r  rr  s      r    _generate_cpy_struct_collecttype+Recompiler._generate_cpy_struct_collecttype  s      $r   c                 d    UR                  S5      nSU;   a  X"R                  SS5      4$ USU-   4$ )Nr?   r6   r   )rQ  rR  )r   r   rZ  s      r   _struct_namesRecompiler._struct_names  s:    b!%<--S111#+%%r   c                 H    U R                   " U/U R                  U5      Q76   g r   )r  r  rr  s      r   _generate_cpy_struct_decl$Recompiler._generate_cpy_struct_decl  s     "6t11"56r   c                 H    U R                   " U/U R                  U5      Q76   g r   )r  r  rr  s      r   _generate_cpy_struct_ctx#Recompiler._generate_cpy_struct_ctx	  s     5d0045r   c                     [        U[        R                  5      (       a  U R                  X5        g U R	                  U5        g r   )r   r   r   _generate_cpy_enum_collecttyper  rr  s      r   #_generate_cpy_anonymous_collecttype.Recompiler._generate_cpy_anonymous_collecttype  s/    b%..))//9$$R(r   c                     [        U[        R                  5      (       a  U R                  U5        g U R	                  XSU-   5        g Ntypedef_)r   r   r   _generate_cpy_enum_declr  rr  s      r   _generate_cpy_anonymous_decl'Recompiler._generate_cpy_anonymous_decl  s6    b%..))((,b
T(9:r   c                     [        U[        R                  5      (       a  U R                  X5        g U R	                  XSU-   5        g r  )r   r   r   	_enum_ctxr  rr  s      r   _generate_cpy_anonymous_ctx&Recompiler._generate_cpy_anonymous_ctx  s4    b%..))NN2$RzD'89r   c                    XB4U R                   ;   a  [        SU< SU< S35      eU R                   R                  XB45        U R                  nSU< SU< 3nU(       af  U" SU-  5        U" S5        U" SU< S	35        U" S
U< SU< S35        Ub!  US:  a  SU4-  nU" SU< S35        U" S5        U" S5        U" S5        O@Ub   eU" SU-  5        U" S5        U" SUR	                  S5      < SU< S35        U" S5        U" 5         g )Nzduplicate declaration of z 'rA   _cffi_r   z$static int %s(unsigned long long *o)r  z  int n = (z) <= 0;z  *o = (unsigned long long)((z) | 0);  /* check that z is an integer */r   z%dUz  if (!_cffi_check_int(*o, n, z))z    n |= 2;z  return n;r  zstatic void %s(char *o)z  *(r   z)o = r  )r)  r   r_  r   rQ  )r   is_intr   r   categoryr   r-  funcnames           r   _generate_cpy_constRecompiler._generate_cpy_const&  s	   t333#6>EG G  (!12zz$,d37(BCI412:>F G&?"';."8K[JK]#I&&&*X56IR]]3%7>?Ir   c                 x    UR                  5       nU(       a  U R                  (       a  U R                  U5        g g r   )rO  r   r   r   r   r   r  s       r   "_generate_cpy_constant_collecttype-Recompiler._generate_cpy_constant_collecttypeD  s.    ##%..!!"% /r   c                 H    UR                  5       nU R                  X2U5        g r   )rO  r  r  s       r   r  &Recompiler._generate_cpy_constant_declI  s     ##%  r2r   c                 :   U R                   (       d&  UR                  5       (       a  [        [        S5      nO8U R                   (       a  [        nO[
        nU R                  U   n[        XE5      nU R                  S   R                  [        USU-  U5      5        g )Nr  r   _cffi_const_%s)
r   rO  r   OP_CONSTANT_INTOP_DLOPEN_CONSTOP_CONSTANTr   r   r   r   )r   r   r   r   
const_kindrM   s         r   r  %Recompiler._generate_cpy_constant_ctxM  sz    $$););)=)=_b1G$$,
(
,JZ4G

8##t-4g>	@r   c                 &    U R                  U5        g r   )r   rr  s      r   r  )Recompiler._generate_cpy_enum_collecttype]  s    b!r   c                 N    UR                    H  nU R                  SU5        M     g )NT)enumeratorsr  )r   r   r   
enumerators       r   r  "Recompiler._generate_cpy_enum_decl`  s     ..J$$T:6 )r   c           
         U R                   U   n[        [        S5      nU R                  (       a  UR	                  5         [        UR                  UR                  5       H0  u  pVU R                  S   R                  [        USU-  UUS95        M2     Ub"  SU;  a  U R                  (       d  SU-  nSU-  nOhUR                  U R                  / 5      n	U R                  R                  U	5      n[        [        U R                  R                  U	S5      5      S:  5      nS	R!                  UR                  5      n
U R                  S
   R                  [#        UR$                  X7X5      5        g )Nr  r   r"  r   r  z
sizeof(%s)z((%s)-1) <= 0r   rX   r   )r   r   OP_ENUMr   check_not_partialzipr+  
enumvaluesr   r   r   build_baseinttyper   sizeofintcastr\   ra   r   )r   r   rZ  rM   r   r,  	enumvaluer   re   basetprf   s              r   r  Recompiler._enum_ctxd  s,   __R(
"%    "%(%G!JJJx '':'7*'Dg'023 &H
 E!1$:O:O%'D$u,F))$((B7F88??6*DTXX]]6267!;<F88BNN+

6!!RWWjA	Cr   c                 B    U R                  XR                  5       5        g r   )r  r(  rr  s      r   _generate_cpy_enum_ctx!Recompiler._generate_cpy_enum_ctxy  s    r>>+,r   c                     g r   r+   rr  s      r   _generate_cpy_macro_collecttype*Recompiler._generate_cpy_macro_collecttype  r{  r   c                 :    US:X  a  S nOUnU R                  SX#S9  g )Nr  Tr/  )r  )r   r   r   r   s       r   _generate_cpy_macro_decl#Recompiler._generate_cpy_macro_decl  s&    ;KK  t Er   c           	          US:X  a$  U R                   (       a  [        SU< S35      eS nOUn[        [        S5      nU R                  S   R                  [        USU-  UUS95        g )Nr  z(cannot use the syntax '...' in '#define z ...' when using the ABI moder  r   r"  r/  )r   r   r   r#  r   r   r   )r   r   r   r   r   s        r   _generate_cpy_macro_ctx"Recompiler._generate_cpy_macro_ctx  sm    ;$$',034 4 KK"-

8##t-4g#.0	1r   c                     [        U[        R                  5      (       aN  UR                  nUS:X  a  SU< S3nU R	                  UR
                  SU-  5      n[        R                  " XC5      nU$ )Nr  z_cffi_array_len(rY   r  )r   r   ri  r   rq  r9  )r   r   global_namer  r  s        r   rq  Recompiler._global_type  sZ    b%//**IIM%9D F'';1FGG8B	r   c                 D    U R                  U R                  X5      5        g r   )r   rq  rr  s      r   "_generate_cpy_variable_collecttype-Recompiler._generate_cpy_variable_collecttype  s    d//9:r   c                 Z   U R                   nU R                  X5      n[        U[        R                  5      (       a  UR
                  c  UR                  nSnOSnSU< S3nU" SUR                  XPR                  S9-   5        U" S5        U" SU< S	U< S
35        U" S5        U" 5         g )Nr?   &z*_cffi_var_r   r  r  r  z	  return r6  rM  r  )	r   rq  r   r   ri  r   r9  rQ  r   )r   r   r   r-  	ampersandr  s         r   _generate_cpy_variable_decl&Recompiler._generate_cpy_variable_decl  s    zzr(b%//**ryy/@BII )-.Yt3F3FGGHS	9d34S	r   c           
          U R                  X5      nU R                  U   nU R                  (       a  [        nO[        nU R
                  S   R                  [        USU-  [        XC5      5      5        g )Nr   z_cffi_var_%s)	rq  r   r   OP_GLOBAL_VAROP_GLOBAL_VAR_Fr   r   r   r   )r   r   r   rM   rB   s        r   _generate_cpy_variable_ctx%Recompiler._generate_cpy_variable_ctx  sa    r(__R(
  B B

8##t^d2F24JK	Mr   c                 h    [        U[        R                  5      (       d   eU R                  U5        g r   )r   r   r   r   rr  s      r   '_generate_cpy_extern_python_collecttype2Recompiler._generate_cpy_extern_python_collecttype  s)    "e334444b!r   c           	         U R                   n[        UR                  [        R                  5      (       a  SnO&SU-  nSUR                  R                  SU5      < S3nU" SU-  5        U" SU R                  < SU< S	U< S
35        U" 5         / nSU-  n[        UR                  5       H+  u  pU	R                  SU-  U5      n
UR                  U
5        M-     SR                  U5      nU=(       d    SnU< SU< S3nUR                  S:X  a  SU-   nS n[        [        UR                  5      S-  S5      nU" UR                  5      (       a  [        US5      n[        UR                  [        R                  5      (       a;  SUR                  R                  S5      UUR                  R                  S5      U4-  nU" U< UR                  R                  U5      < 35        U" S5        U" SU-  5        U" S5        [        UR                  5       Hq  u  pSU-  n
[        U	[        R                  5      (       d  U" U	5      (       a  SU
-   n
[        R                  " U	5      n	U" SU	R                  S5      US-  U
4-  5        Ms     U" SU-  5        [        UR                  [        R                  5      (       d&  U" SUR                  R                  S5      < S35        U" S 5        U" 5         U =R                   S!-  sl        g )"Nr  r  z(int)sizeof(r?   rY   z3static struct _cffi_externpy_s _cffi_externpy__%s =r   r  r7   z	, 0, 0 };r  z a%dr   r  r6  	__stdcallz_cffi_stdcall c                 b    [        U [        R                  5      =(       a    U R                  S:H  $ )Nrg  )r   r   r  r   r   s    r   may_need_128_bits9Recompiler._extern_python_decl.<locals>.may_need_128_bits  s(    r5#6#67 -GG},.r   rm      z!sizeof(%s) > %d ? sizeof(%s) : %dr  z  char a[%s];z  char *p = a;za%drN  z  *(%s)(p + %d) = %s;r   z,  _cffi_call_python(&_cffi_externpy__%s, p);z  return *(z)p;r  r   )r   r   r  r   r   rQ  r   r   r   r   r\   r  r   r8   r   r   r,  )r   r   r   tag_and_spacer-  size_of_resultrm  r  r   rB  r  r  r  r]  	size_of_as                  r   _extern_python_declRecompiler._extern_python_decl  s   zzbii00 N$t+G		$$R14NBTIJdN4 	5	"T) )GA//&1*g6CS! * 9-'16)-~>66[ !14F!F	. BGGQ*	RYY''Ir*Ibii!4!455;		$$R()		$$R()?5 5I 	}bii&:&:;M&NOPS	_y() )GA!)C4!4!455%d++Ci((.(DOOC,@!A#s+KKL * 	;dBC"))U^^44ryy';';C'@BCS	ar   c                 (    U R                  XS5        g )Nr  rc  rr  s      r    _generate_cpy_extern_python_decl+Recompiler._generate_cpy_extern_python_decl  s      95r   c                 (    U R                  XS5        g )NzCFFI_DLLEXPORT rf  rr  s      r   #_generate_cpy_dllexport_python_decl.Recompiler._generate_cpy_dllexport_python_decl
  s      +<=r   c                 (    U R                  XS5        g )Nr?   rf  rr  s      r   '_generate_cpy_extern_python_plus_c_decl2Recompiler._generate_cpy_extern_python_plus_c_decl  s      2.r   c                 
   U R                   (       a  [        S5      eUR                  (       a  [        S5      eU R                  U   n[        [        U5      nU R                  S   R                  [        USU-  XB5      5        g )Nz,cannot use 'extern "Python"' in the ABI modez$a vararg function is extern "Python"r   z&_cffi_externpy__%s)
r   r   r  r<   r   r   OP_EXTERN_PYTHONr   r   r   )r   r   r   rM   r   s        r   _generate_cpy_extern_python_ctx*Recompiler._generate_cpy_extern_python_ctx  su      #@B B;;%&NOO__R(
):6

8##t2T97I	Kr   c                    U R                   nU" S5        [        U[        5      (       d  UR                  S5      nOUR	                  S5         UR	                  S5        UR                  S5       H  nUn[        S5      [        L a  [        [        U5      nO[        U5      SS nU" S	U-   R                  5       5        S
nU H%  n[        U5      S:  a
  U" U5        S
nUSU4-  -  nM'     U" U5        M     g ! [
         a    SU-   n Nf = f)Nz=// # NB. this is not a string because of a size limit in MSVCzutf-8asciis   # -*- encoding: utf8 -*-
Tz//r   r  z// r?   L   z%d,)r   r   bytesencodedecodeUnicodeDecodeError
splitlinesrB  mapordrt  rstripr8   )r   sr-  linerP   printed_linecs          r   r%  )Recompiler._print_string_literal_in_array  s   zzLM!U##!AHHW	2HHW LL&DGDzU"3~  .2.%'/))+,L|$*&#%L,	 
  ' " 	2-1A	2s   C9 9D
Dc                 F    [        [        [        5      U R                  U'   g r   )r   OP_PRIMITIVE	PRIM_VOIDr   r   r   r$  s      r   _emit_bytecode_VoidType"Recompiler._emit_bytecode_VoidType=  s    !'i!@r   c                 d    [         UR                     n[        [        U5      U R                  U'   g r   )PRIMITIVE_TO_INDEXr   r   r  r   )r   r   r$  rv   s       r   _emit_bytecode_PrimitiveType'Recompiler._emit_bytecode_PrimitiveType@  s%    '0
!'j!Ar   c                     SUR                   < SUR                   < SUR                   < S3n[        [        U5      U R                  U'   g )Nz_cffi_prim_int(sizeof(z), (
           ((z)-1) | 0 /* check that z' is an integer type */
         ) <= 0)r   r   r  r   r   r   r$  r~  s       r   !_emit_bytecode_UnknownIntegerType,Recompiler._emit_bytecode_UnknownIntegerTypeD  s5     $&77BGGRWW> "(a!8r   c                 |    SUR                   < SUR                   < S3n[        [        U5      U R                  U'   g )Nz_cffi_prim_float(sizeof(z) *
           (((z6)1) / 2) * 2 /* integer => 0, float => 1 */
         )r  r  s       r   _emit_bytecode_UnknownFloatType*Recompiler._emit_bytecode_UnknownFloatTypeJ  s/      WWbgg/ "(a!8r   c                 F   [        [        U R                  UR                     5      U R                  U'   US-  nUR
                   Hj  nU R                  U   nX$:w  aN  [        U[        R                  5      (       a  U R                  X25        O[        [        U5      U R                  U'   US-  nMl     [        UR                  5      nUR                  b/  UR                  S:X  a  US-  nO[        SUR                  < 35      e[        [        U5      U R                  U'   g )Nr   r[  rk   zabi=)r   OP_FUNCTIONr   r  r   r   r   r   r  r  rC   r6  r  r  r<   OP_FUNCTION_END)r   r   r$  r   	realindexrN   s         r   _emit_bytecode_RawFunctionType)Recompiler._emit_bytecode_RawFunctionTypeP  s    !'T__RYY5O!P
77C,I!c5#6#67755cA-3GY-GDOOE*QJE  BKK 66vv$
)bff*>??!'!?r   c                 l    [        [        U R                  UR                     5      U R                  U'   g r   )r   
OP_POINTERr   r  r   r  s      r   _emit_bytecode_PointerType%Recompiler._emit_bytecode_PointerTypec  s$    !'
DOOBII4N!Or   c                 x    UR                  5       n[        [        U R                  U   5      U R                  U'   g r   )r   r   r  r   r   )r   r   r$  raws       r   _emit_bytecode_FunctionPtrType)Recompiler._emit_bytecode_FunctionPtrTypei  s.      "!'
DOOC4H!Ir   c                    U R                   UR                     nUR                  c  [        [        U5      U R
                  U'   g UR                  S:X  a)  [        S[        U5      R                  SS5      < S35      eU R
                  US-      S:X  d   e[        [        U5      U R
                  U'   [        S [        UR                  5      5      U R
                  US-   '   g )Nr  ztype z/*...*/zb badly placed: the '...' array length can only be used on global arrays or on fields of structuresr   r   )
r   r9  r   r   OP_OPEN_ARRAYr   r   r   rR  OP_ARRAY)r   r   r$  
item_indexs       r   _emit_bytecode_ArrayType#Recompiler._emit_bytecode_ArrayTypem  s    __RWW-
99%+M:%FDOOE"YY%# GOOIu589 9
 ??519-666%+Hj%ADOOE")/c"))n)EDOOEAI&r   c                 \    U R                   U   n[        [        U5      U R                  U'   g r   )r   r   OP_STRUCT_UNIONr   )r   r   r$  struct_indexs       r   _emit_bytecode_StructType$Recompiler._emit_bytecode_StructType{  s'    **2.!'!Fr   c                 \    U R                   U   n[        [        U5      U R                  U'   g r   )r   r   r0  r   )r   r   r$  
enum_indexs       r   _emit_bytecode_EnumType"Recompiler._emit_bytecode_EnumType  s$    [[_
!'!<r   )r   r   r   r   r)  r   r   r   r   r   r   r   r   F)r?   r   )NconstN)Xr&   r'   r(   r)   r,  r   r   r   r   r   r   r   r   r   r   r  r   r8  r   rC  r\  rb  rT  rn  rs  rv  ry  r}  r  r  r  r  r   r  r  r  r  r   r  _generate_cpy_union_collecttyper  r  _generate_cpy_union_declr  _generate_cpy_union_ctxr  r  r  r  r  r  r  r  r  r  r<  r?  rB  rE  rq  rK  rP  rU  rX  *_generate_cpy_dllexport_python_collecttype._generate_cpy_extern_python_plus_c_collecttyperc  rg  rj  rm  rq  "_generate_cpy_dllexport_python_ctx&_generate_cpy_extern_python_plus_c_ctxr%  r  r  r  r  r  r  _emit_bytecode_ConstPointerType_emit_bytecode_NamedPointerTyper  r  r  _emit_bytecode_UnionTyper  r*   r+   r   r   r   r   ~   s   M%081t	<-&& HI,>#2kZ"0h%+(ZK*F=<F+&
`D2,
2 DT)lO7.%&F#&7866);: CJ(,<&
3@ "7C*-F1";.M"
 ...44 l6>/	K &&&,<AB99@&P 'A#&@#JFG  9=r   r   )r	   c                   (   ^  \ rS rSrU 4S jrSrU =r$ )NativeIOi  c                 x   > [        U[        5      (       a  UR                  S5      n[        [        U ]  U5        g )Nrt  )r   unicoderw  superr  r   )r   r~  r   s     r   r   NativeIO.write  s-    !W%%HHW%(D'*r   r+   )r&   r'   r(   r)   r   r*   __classcell__)r   s   @r   r  r    s    	+ 	+r   r  c                     [        U S5      $ )Nr   )hasattr)	maybefiles    r   _is_file_liker    s    9g&&r   c                 P   U(       a  [        SU< 35        [        XUS L S9nUR                  5         UR                  5         [	        U5      (       a  UR                  X25        g[        5       nUR                  Xb5        UR                  5       n [        US5       nUR                  [        U5      S-   5      U:w  a  [        e S S S 5        U(       a  [        S5        g! , (       d  f       N!= f! [         a    SU[        R                  " 5       4-  n	[        U	S	5       nUR                  U5        S S S 5        O! , (       d  f       O= f [        R                  " X5        O<! [          a/    [        R"                  " U5        [        R                  " X5         Of = f gf = f)
Nzgenerating )r   Tr  r   z(already up-to-date)Fz%s.~%dw)printr   r   r   r  r   r  getvaluer  readr8   IOErrorr  getpidr   renameOSErrorunlink)
r   r   r   target_fileverbose
recompilerr   outputf1tmp_files
             r   _make_c_or_py_sourcer    sR   ./C.6$.>AJ!!#""$[!!$$[;
A  -ZZ\F+s#rwws6{Q'61 2 $ () $#  	{BIIK88(C BHHV !  	-IIh, 	-IIk"IIh,	- 	sf   C2 (C!C2 !
C/+C2 20F%"D=4	F%=
E	F%E&%F%&6FF%FF%$F%c                 &    Uc   e[        XX#U5      $ r   r  )r   r   r   target_c_filer  s        r   make_c_sourcer    s"    ( ') )r   c                     [        XS UU5      $ r   r  )r   r   target_py_filer  s       r   make_py_sourcer    s    $ ') )r   c                    UR                  S5      n [        R                  " [        R                  R                  " U /US S Q76 5        US==   U-  ss'   [        R                  R                  " U /UQ76 U4$ ! [
         a     N<f = f)Nr  r  )r   r  makedirsr  r\   r  )	outputdirmodname	extensionpartss       r   _modname_to_filer    sz    MM#E
BGGLL8U3BZ89 
"II77<<	*E*E11  s   8A; ;
BBc                 Z    [        X5      nU R                  XU45        [        XU5        U$ r   )r   r   setattr)	patchlistclsr   new_metholds        r   _patch_methr    s.    
#
Cc%&Cx Jr   c                 F    [        U 5       H  u  pn[        XU5        M     g r   )reversedr  )r  r  r   old_meths       r   _unpatch_methsr    s     '	288$  3r   c                    ^ [         R                  S:X  a  SSKJn  Ub  [	        XSS 5        [         R                  S:X  a  SSKJn  U4S jn[	        XS	U5      mg g )
Nr   r   )MSVCCompiler_remove_visual_c_refc                     U$ r   r+   )r   manifest_files     r   r   &_patch_for_embedding.<locals>.<lambda>  s    Mr   darwin)	CCompilerc                    > SU R                   ;   aD  [        U R                   5      U l         U R                   R                  S5      nSU R                   U'   T" U /UQ70 UD6$ )Nz-bundlez-dynamiclib)	linker_sor7  r$  )r   r   kwdsr   old_link_shared_objects       r   my_link_shared_object3_patch_for_embedding.<locals>.my_link_shared_object  sV    DNN*!%dnn!5NN((3$1q!)$>>>>r   link_shared_object)sysplatformcffi._shimmed_dist_utilsr  r  r  )r  r  r  r  r  s       @r   _patch_for_embeddingr    s\    
||w 	:#	1GAC ||x6	? "-Y-A-B"D  r   c                    ^ SSK Jn  TR                  S5      (       a>  TS S m[        R                  S:X  a  TS-  mO[        R                  S:X  a  TS-  mOTS	-  m[        XS
U4S j5        g )Nr   )	build_extz.*r  r   z.dllr  z.dylibz.soget_ext_filenamec                    > T$ r   r+   )r   ext_nametargets     r   r   #_patch_for_target.<locals>.<lambda>  s    vr   )r  r  endswithr  r  r  )r  r  r  s    ` r   _patch_for_targetr    sg    2 t<<7"fF\\X%hFeOF	&8-/r   c                 t   [        U[        5      (       d  UR                  S5      nU R                  (       a  U R	                  U5        UGb  U(       a  [        U5      (       a  [        S5      eU R                  S LnU(       a  U R                  U5        Uc9  [        X1U5      u  p^U(       a  U/U-   n[        R                  R                  " U6 nOUnU	c  U(       a  SU-  n	OSn	U(       a  [        R                  " X40 UD6nOS n[        XX%US9nU(       a  / n[        R                   " 5       n U(       a  [#        U5        U	S:w  a  [%        UU	5        U(       a:  US:X  a  SnOSn['        U< S	[        R                  R)                  U5      < 35        [        R*                  " U5        [        R,                  " SUX5      n[        R*                  " U5        [/        U5        U$ UU4$ Uc  [        X1S
5      u  nn[1        XUUS9nU(       a  U$ S U4$ ! [        R*                  " U5        [/        U5        f = f)Nrt  zGWriting to file-like objects is not supported with call_c_compiler=Truez%s.*r   )r  r  zthe current directory isz setting the current directory tor6   z.py)r   r   rw  _windows_unicode_apply_windows_unicoder  rk  r"  _apply_embedding_fixr  r  r  r\   r   get_extensionr  getcwdr  r  r  abspathchdircompiler  r  )r   r   r   tmpdircall_c_compilerc_filesource_extensionextradircompiler_verboser  debuguses_ffiplatformr  	embeddingr  
ext_c_fileextupdatedr  cwdmsgoutputfilenamer   s                          r   	recompiler'    s    k3''!((1
""4(}V44 8 9 9^^4/	$$T*>,V-=?MF!
U*u-JJ>+-++JLtLCC((8:I))+C*(3S=%i8#}8@S"''//&*ABC !,!4!4S#5E"N y)!!<>(eDIFA 6)9;M=  y)s   0BH #H7r  )	r  TNz.cNr   NNT)"r  r  ior?   r   r   errorr   cffi_opcoder   r&  rS  r  version_infor#  r   r-   rJ   ra   ry   r   StringIOr  BytesIOr  r  r  r  r  r  r  r  r  r'  r+   r   r   <module>r.     s	       $   <<7* .c.>.>.G .##v- 1 1 ) )8# #:? ?0	K 	KD= D=N( t{{H+2:: +'>)
)2%D./" GK;?59#C!r   