
    YhW                        d dl Z d dlZd dlZddlmZmZ ddlmZ ddl dZ	dZ
dZej                  d	k7  xs  ej                  d
k  xs ej                  dk\  Z G d d      Z G d d      Z G d d      Z G d d      Z G d d      Z G d d      Zej                  dk\  rej*                  Zn G d dej.                        Zd Zd Zd%dZd%dZd Zd  Zd! Zd" Zd# Z 	 	 	 	 d&d$Z!y)'    N   )ffiplatformmodel)VerificationError)*i&  i'  i(  win32)   r   )r	      c                        e Zd ZddZd Zd Zy)
GlobalExprc                 J    || _         || _        || _        || _        || _        y N)nameaddresstype_opsizecheck_value)selfr   r   r   r   r   s         `/var/www/django-portfolio.reubendavern.link/venv/lib/python3.12/site-packages/cffi/recompiler.py__init__zGlobalExpr.__init__   s&    		&    c           	          d| j                   d| j                  d| j                  j                         d| j                  d	S )N  { "z", (void *), z
, (void *) },)r   r   r   	as_c_exprr   r   s    r   r   zGlobalExpr.as_c_expr   s0    IIt||T\\%;%;%=tyyJ 	Jr   c                 j    d| j                   j                         | j                  | j                  fz  S )Nz
b'%s%s',%d)r   as_python_bytesr   r   r   s    r   as_python_exprzGlobalExpr.as_python_expr   s2    t||;;=tyy#//1 1 	1r   N)r   r   __name__
__module____qualname__r   r   r     r   r   r   r      s    'J1r   r   c                   $    e Zd Zd Zd Zd Zd Zy)	FieldExprc                 J    || _         || _        || _        || _        || _        y r   )r   field_offset
field_sizefbitsizefield_type_op)r   r   r)   r*   r+   r,   s         r   r   zFieldExpr.__init__   s'    	($ *r   c                     dt        | j                        z  }d| j                  d| j                  dd|d| j                  dz   d|d| j                  j                         dz   S )N r   ", z,
z     z   r   )lenr   r)   r*   r,   r   )r   spacess     r   r   zFieldExpr.as_c_expr&   sZ    s499~%%)YY0A0AB%+T__=>%+T-?-?-I-I-KLM 	Nr   c                     t         r   )NotImplementedErrorr   s    r   r    zFieldExpr.as_python_expr,   s    !!r   c                    | j                   j                  t        k(  rd}n9| j                   j                  t        k(  rt	        | j
                        }nt        d| j                   j                         || j                  dS )N b'')	r,   opOP_NOOPOP_BITFIELDformat_four_bytesr+   r3   r   r   )r   	size_exprs     r   as_field_python_exprzFieldExpr.as_field_python_expr/   sj      G+I""k1)$--8I%%"00@@B'"ii) 	)r   N)r"   r#   r$   r   r   r    r=   r%   r   r   r'   r'      s    +N"	)r   r'   c                       e Zd Zd Zd Zd Zy)StructUnionExprc	                 t    || _         || _        || _        || _        || _        || _        || _        || _        y r   )r   
type_indexflagsr   	alignmentcommentfirst_field_indexc_fields)	r   r   rA   rB   r   rC   rD   rE   rF   s	            r   r   zStructUnionExpr.__init__;   s;    	$
	"!2 r   c                     d| j                   | j                  | j                  fz  d| j                  d| j                  dz   d| j
                  t        | j                        fz  z   | j                  rd| j                  z  z   dz   S dz   dz   S )Nz  { "%s", %d, %s,z
    r   z%d, %d z	/* %s */ r5   z},)	r   rA   rB   r   rC   rE   r0   rF   rD   r   s    r   r   z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                    t        | j                  t              }| j                  D cg c]  }|j	                          }}dt        | j                        t        |      | j                  ddj                  |      dS c c}w )Nz(b'',,))	evalrB   G_FLAGSrF   r=   r;   rA   r   join)r   rB   c_fieldfields_exprs       r   r    zStructUnionExpr.as_python_exprM   st    TZZ)&*mm5" 335 5 5 doo.e$IIHH[!	# 	#5s   BNr!   r%   r   r   r?   r?   :   s    	!#r   r?   c                       e Zd Zd Zd Zd Zy)EnumExprc                 J    || _         || _        || _        || _        || _        y r   r   rA   r   signedallenums)r   r   rA   r   rU   rV   s         r   r   zEnumExpr.__init__X   s%    	$	 r   c                 z    d| j                   | j                  | j                  | j                  | j                  fz  S )Nz1  { "%s", %d, _cffi_prim_int(%s, %s),
    "%s" },rT   r   s    r   r   zEnumExpr.as_c_expr_   s9    !%DOO!%DKK!HH 	Ir   c           	         t         t        t        t        t        t
        t        t        d| j                  | j                  f   }dt        | j                        t        |      | j                  d| j                  dS )N))r   r   )r   r   )   r   )rY   r   )   r   )rZ   r   )   r   )r[   r   r6   z\x00r7   )
PRIM_UINT8	PRIM_INT8PRIM_UINT16
PRIM_INT16PRIM_UINT32
PRIM_INT32PRIM_UINT64
PRIM_INT64r   rU   r;   rA   r   rV   )r   
prim_indexs     r   r    zEnumExpr.as_python_exprd   sa    )***	
 ii$&
 &7t%G%6z%B%)YY? 	?r   Nr!   r%   r   r   rR   rR   W   s    !I
	?r   rR   c                       e Zd Zd Zd Zd Zy)TypenameExprc                      || _         || _        y r   r   rA   )r   r   rA   s      r   r   zTypenameExpr.__init__p   s    	$r   c                 8    d| j                   | j                  fz  S )Nz  { "%s", %d },rh   r   s    r   r   zTypenameExpr.as_c_exprt   s     DIIt#???r   c                 L    dt        | j                        | j                  dS )Nr6   r7   )r;   rA   r   r   s    r   r    zTypenameExpr.as_python_exprw   s    -doo>		JJr   Nr!   r%   r   r   rf   rf   o   s    %@Kr   rf   c                      e Zd ZdZdKdZd Zd Zd Zd Zd Z	g dZ
d	 ZdLd
Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!dMd!Z"d" Z#d# Z$d$ Z%e%Z&d% Z'd& Z(e(Z)d' Z*e*Z+d( Z,d) Z-d* Z.	 	 dNd+Z/d, Z0d- Z1d. Z2d/ Z3dMd0Z4d1 Z5d2 Z6d3 Z7d4 Z8d5 Z9d6 Z:d7 Z;d8 Z<d9 Z=d: Z>e>xZ?Z@d; ZAd< ZBd= ZCd> ZDd? ZEeExZFZGd@ ZHdA ZIdB ZJdC ZKdD ZLdE ZMdF ZNeNZOeNZPdG ZQdH ZRdI ZSeSZTdJ ZUy )O
Recompilerr   c                 D    || _         || _        || _        t        | _        y r   )ffimodule_nametarget_is_pythonVERSION_BASE_version)r   rn   ro   rp   s       r   r   zRecompiler.__init__   s     & 0$r   c                 :    t        | j                  |      | _        y r   )maxrr   )r   vers     r   needs_versionzRecompiler.needs_version   s    DMM3/r   c           
         i | _         | j                  d       t        | j                   t              }g | _        |D ]/  }|j
                  s| j                   |   J t        | j                        | j                   |<   | j                  j                  |       |j                  D ]  }t        |t        j                  t        j                  t        j                  t        j                  t        j                  f      sJ | j                   |   "t        | j                        | j                   |<   | j                  j                  |        | j                  j                  d       2 |D ]  }|j
                  r| j                   |    t        | j                        | j                   |<   | j                  j                  |       |j                   sj|j"                  w| j                  j                  d        d | j                   j%                         vsJ i | _        i | _        |D ]V  }t        |t        j*                        rd | j&                  |<   -t        |t        j,                        sHd | j(                  |<   X t/        t        | j&                  d             D ]  \  }}|| j&                  |<    t/        t        | j(                  d             D ]  \  }}|| j(                  |<    |D ];  }t1        | d|j2                  j4                  z         } ||| j                   |          = | j                  D ]  }t        |t6              rJ  t9        | j                        | _        y )NcollecttypekeyENDLENc                     | j                   S r   r   tps    r   <lambda>z/Recompiler.collect_type_table.<locals>.<lambda>   
    RWW r   c                     | j                   S r   r~   r   s    r   r   z/Recompiler.collect_type_table.<locals>.<lambda>   r   r   _emit_bytecode_)
_typesdict	_generatesortedstr
cffi_typesis_raw_functionr0   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methodr8   s          r   collect_type_tablezRecompiler.collect_type_table   s   }%4??4	  	.B!!r*222&)$//&:#&&r*77 0C%cENN,1,C,C,1,=,=,1,E,E,1,A,A	,C D D D
 s+3/24??/C,OO**3/0 &&u-	."  	2B%%$//"*=*E&)$//&:#&&r*##		(=OO**51	2 4??113333 ! 	'B"e112*.##B'B/"&B		'
 vd&9&9*< > ? 	(EAr&'D#	( vdkk*< > ? 	 EArDKKO	 
  	,BT#4r||7L7L#LMF2tr*+	,
 // 	*Bb&)))	*0r   c                 >    | j                    }|j                  |      S r   )rp   
enumfields)r   r   expand_anonymous_struct_unions      r   _enum_fieldszRecompiler._enum_fields   s#     -1,A,A(A%}}:;;r   c                    t        |t        j                        s)t        |t              r|D ]  }| j	                  |        y || j
                  vrd | j
                  |<   t        |t        j                        r | j	                  |j                                y t        |t        j                        rn|j                  a|| j                  j                  j                  vr>| j                  |      D ])  \  }}}}| j	                  | j                  |||             + y y y |j                         D ]  \  }}| j	                  |        y y r   )r   r   BaseTypeByIdentityr   _do_collect_typer   r   as_raw_functionr   fldtypesrn   _parser_included_declarationsr   _field_type
_get_items)r   r   xname1r   _s         r   r   zRecompiler._do_collect_type   s*   "e667"e$ -A))!,-T__$"&DOOB"e334%%b&8&8&:;B 3 34;;*$(("2"2"I"II,0,=,=b,A P(sAq--d.>.>r5#.NOP J +
 MMO -DAq))!,- %r   c                    | j                   j                  j                  j                         }t	        |      D ]A  \  }\  }}|j                  dd      \  }}	 t        | d|d|      }	 || _	         |||       C y # t        $ r t        d|z        w xY w# t        $ r}	t        j                  |	|        d }	~	ww xY w)Nr.   r   _generate_cpy_r   z"not implemented in recompile(): %r)rn   r   _declarationsitemsr   splitr   AttributeErrorr   _current_quals	Exceptionr   attach_exception_info)
r   	step_namelstr   r   qualskindrealnamer   es
             r   r   zRecompiler._generate   s    hh,,224!' 	D+2u!ZZQ/ND(A @I(K L
&+#r8$	
 " A'84?A AA  ++At4s$   A?,B?B	B?#B::B?)globalfieldstruct_unionenumtypenamec                 Z   i | _         | j                  D ]  }g | j                   |<    t               | _        | j	                  d       | j                          | j                  D ]A  }| j                   |   }|dk7  r|j                  d        t        |      | j                   |<   C | j                   d   }| j                  j                         D ]3  \  }}|t        |      k  sJ ||   j                  |j                  k(  r3J  t        |      t        | j                        k(  sJ | j                   d   }| j                  j                         D ]3  \  }}|t        |      k  sJ ||   j                  |j                  k(  r3J  t        |      t        | j                        k(  sJ y )Nctxr   c                     | j                   S r   r~   )entrys    r   r   z0Recompiler.collect_step_tables.<locals>.<lambda>  s
    5:: r   ry   r   r   )_lsts	ALL_STEPSset_seen_struct_unionsr   _add_missing_struct_unionssortr   r   r   r0   r   r   )r   r   r   r   r   s        r   collect_step_tableszRecompiler.collect_step_tables   s   
 	'I$&DJJy!	'#&5 u'') 	/I**Y'CG#56$)#JDJJy!		/ jj(((..0 	*EBs3x<<q6;;"'')))	* 3x3t223333jj [[&&( 	*EBs3x<<q6;;"'')))	* 3x3t{{++++r   c                 @    | j                   j                  |dz          y )N
)_fwrite)r   whats     r   _prntzRecompiler._prnt  s    dTk"r   c                 t    | j                   r|J | j                  |       y |J | j                  ||       y r   )rp   write_py_source_to_fwrite_c_source_to_f)r   fpreambles      r   write_source_to_fzRecompiler.write_source_to_f  sA      ###%%a('''$$Q1r   c                     t        t        j                  j                  t        j                  j	                  t
              |      d      }|j                         }|j                          |S )Nr)openospathrN   dirname__file__	readlinesclose)r   filenamegliness       r   _rel_readlineszRecompiler._rel_readlines!  sC    bggooh7BCH		r   c           	         || _         | j                  }| j                  j                   |d       t        s |d       | j                  d      }|j                  d      }| j                  d      |||dz     |dj                  |             | j                  j                  d      d	   }| j                  j                   |d
| j                  d        |d       | j                  | j                  j                          |d        |d        |d|        |d        |d|        |d        |d|        |d       | j                  d      }|j                  d      }| j                  d      |||dz     |dj                  |             | j                  t                |d        |         ||        |         |d        |         |d       t        | j                  j                         D cg c]	  \  }}||f c}}      }t!        | j"                        D ]=  \  }}	d}
||v rd||   j%                         z   }
 |d||	j'                         |
fz         ? | j"                  s |d        |d        |        t)               | _        | j-                  d       i }| j.                  D ]c  }| j0                  |   }t3        |      ||<   ||   dkD  s) |d |d!|d"       |D ]  } ||j'                                  |d        |        e | j                  j4                  rf |d#       | j                  j4                  D ].  }	 |j6                  d d$ \  }}|t;        d(       |d)|d*       0  |d+        |d        |         |d,        |d-       | j.                  D ]!  }||   dkD  r |d.|z          |d/|z         # | j.                  D ]  }|d0k7  s	 |d1||   |fz          | j                  j4                  r	 |d2       n |d3        |d4t3        | j"                        fz         d}| j<                  dkD  s| j                  j                  |dz  } |d5|z          |d        |         |d6        |d7        |d        |         |d        |d8        |d9|d:        |d;       |dz  r |d<        |d=        |d>        |d?| j>                  z          |d@        |dA        |dB        |d        |dC        |dD        |dE        |dF        |dG|dH        |dI        |dJ|dK        |dL        |dL        |d        |d8        |dM|dN        |d;        |dO| j                  | j>                  fz          |dC        |d        |d8        |dP|dN        |d;        |dQ| j                  | j>                  fz          |dC        |d        |         |d6        |dR        |d       d | _        y c c}}w # t8        $ r t;        d%| j                  d&|d'      w xY w)SNz#define _CFFI_USE_EMBEDDINGz#define _CFFI_NO_LIMITED_APIz_cffi_include.hz#include "parse_c_type.h"
zparse_c_type.hr   r5   .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[] = {rY   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   rn   
_embeddingUSE_LIMITED_APIr   indexrN   ro   r   _print_string_literal_in_arrayrv   VERSION_EMBEDDEDdictr   r   r   r   _get_c_namer   r   _seen_constantsr   r   r   r0   _included_ffis_assigned_sourcer   r   _num_externpyrr   )r   r   r   prntr   r   base_module_namer   typeindex2typer8   rD   numsr   r   r   ffi_to_includeincluded_module_nameincluded_sourcerB   s                      r   r   zRecompiler.write_c_source_to_f'  s   zz88*.//0 ##$56KK56**+;<a!RWWU^  ++11#6r:88*d6F6FHIDE//0C0CDL&' # $./ # $M # $N''7E9:A../?@E!AaCL /0 	MNXMN 	-.doo6K6K6MN7B2wNOt/ 	CEArGN" >!#4#@#@#BB"a%AAB		C
 KT
  #uv  		I**Y'C!#hDOI"y* +  ,E*+,T
		 88""AB"&(("9"9 :8&77; :(/ #*+34 4 "689: NJF 	NO 	:II"^i/0,y89		:
  	LIG#+tI	.JJK	L 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
&Y&Y7c                 (   t        |t              rd|dS t        |t        t        f      rR|D cg c]  }| j	                  |       }}t        |      dk(  r|j                  d       ddj                  |      dS |j                         S c c}w )Nr6   r7   r   r5   (rJ   rK   )	r   r   listr   _to_pyr0   r   rN   r    )r   r   itemreps       r   r  zRecompiler._to_py  sz    a>!a$'1234;;t$3C33x1}

2 XXc],,!!	 4s   Bc           
         || _         | j                  } |d        |d       t        | j                  j                  xs d      }t        |      D ]H  }| j                  j                  |   }	 |j                  d d \  }}|t        d       |d	||fz         J  |         |d
| j                  d        |d| j                  fz         d | _
        t        | j                        | _        | j                  D cg c]  }|j                          }	} |d| j                  dj                  |	            d       t!        | j"                  j%                         D 
cg c]	  \  }
}||
f c}}
      }| j&                  D ]D  }| j(                  |   }t        |      dkD  s!|dk7  s' |d|d| j                  |      d       F |dkD  r5 |ddj                  t        |      D cg c]  }d|z  	 c}      d        |d       y # t        $ r t        d| j                  d|d      w xY wc c}w c c}}
w c c}w )Nz# auto-generated filezimport _cffi_backendr%   rY   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('rI   z    _version = 0x%x,z    _types = r5   rJ   r   r   z    _zs = z    _includes = (r   z_ffi%dz,),rK   )r   r   r0   rn   r  ranger  r   r   ro   rr   r   r   r   r  rN   r  r   r   r   r   )r   r   r	  num_includesr   r  r  r  r8   	types_lstr   r  r   r   s                 r   r   zRecompiler.write_py_source_to_f  s3   zz 	$%#$ 488228b9|$ 	MA!XX44Q7N4"33BQ7 6$o *'45 5 /3G2KKL	M 	0@0@BC#t}}&667  048OODbR'')D	D4;;rwwy/A#BDEdoo6K6K6MN7B2wNO  	GI**Y'C3x!|	W 4DKK4DEF	G !		|1DEA8a<EFI J 	S	C " 4' .34 44" EN Fs   /H?H9$H>
-I&H6c                      | j                   |   S r   )r   )r   types     r   _gettypenumzRecompiler._gettypenum  s    t$$r   c           
      N   d}t        |t        j                        r|j                         s|j	                         r!|j
                  dk7  rd}d|j
                  z  }n|t        |t        j                        rd|j                  d      d}nL|j                  d      }d|d|j
                  j                  dd	      }|d
v r| j                  t               d}nt        |t        j                        r| j                  ||||       y t        |t        j                        st        |t        j                        r;| j                  d|| j                  |      |fz         | j                  d|z         y t        |t        j                         r+d|j                  d      z  }d| j                  |      z  }d}nt#        |      | j                  d|d|d||d       | j                  d|d|j                  d      d|d       | j                  d|z         y )Nr5   _Bool_cffi_to_c_intz, %sr  z)_cffi_to_c_doublez)_cffi_to_c_r.   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 == (rK   z && PyErr_Occurred()))r   r   r   is_complex_typeis_integer_typer   UnknownFloatType
get_c_namereplacerv   VERSION_CHAR16CHAR32r   "_convert_funcarg_to_c_ptr_or_arrayr   r   r  r   r3   )	r   r   fromvartovarerrcodeextraarg	convertercnameerrvalues	            r   _convert_funcarg_to_cz Recompiler._convert_funcarg_to_c  s   b%1122;M;M;O!!#7(:,	!BGG+B 6 67 8:}}R7HJ	b)383577??33LN	44&&';<HE--.33B497DU667U445 JJO 0 0 4g>? @JJy7*+E11202==3DDI)D,<,<R,@@HH &b))

	7HMN

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

9w&'r   c                     t        |t        j                        r4|j                  d       |j                  d       |j                  d       y y )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_variablesz!Recompiler._extra_local_variablesC  sD    b%++,MM/0MMIJMM J K -r   c                    | j                  d       | j                  d| j                  |      ||fz         | j                  d       | j                  d|d|j                  d      d       | j                  d| j                  |      ||fz         | j                  d	       | j                  d
|z         | j                  d       y )Nz1  datasize = _cffi_prepare_pointer_call_argument(z(      _cffi_type(%d), %s, (char **)&%s);z  if (datasize != 0) {z    z  = ((size_t)datasize) <= 640 ? (r5   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   r  r)  )r   r   r-  r.  r/  s        r   r,  z-Recompiler._convert_funcarg_to_c_ptr_or_arrayJ  s    

FG

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

+,

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

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

AB

;()

5r   c                    t        |t        j                        r|j                         r"|j                  dk7  rd|d|j                  dS t        |t        j
                        rd|dS |j                  dk7  rN|j                         s>|j                  j                  dd      }|d	v r| j                  t               d
|d|dS d|| j                  |      fz  S t        |t        j                  t        j                  f      rd|| j                  |      fz  S t        |t        j                        r3d|| j                  t        j                  |j                              fz  S t        |t        j                        rB|j                    t#        d|j%                         d|d      d|| j                  |      fz  S t        |t        j&                        rd|| j                  |      fz  S t)        |      )Nr  z_cffi_from_c_int(r   rK   z_cffi_from_c_double(long doubler.   r   r   _cffi_from_c_r  z/_cffi_from_c_deref((char *)&%s, _cffi_type(%d))z0_cffi_from_c_pointer((char *)%s, _cffi_type(%d))r7   z' is used as z, but is opaquez0_cffi_from_c_struct((char *)&%s, _cffi_type(%d)))r   r   r   r'  r   r(  r&  r*  rv   r+  r  r   r   	ArrayTyper  r   fldnames	TypeErrorr  r   r3   )r   r   varcontextr2  s        r   _convert_expr_from_czRecompiler._convert_expr_from_cX  s   b%112!!#7(:58"''BBB 6 674799M)"2D2D2FS144&&';<05s;;H))"-L/ / /U..0E0EFGET%%b)I+ + +EOO,ET%%e&7&7&@AIC C CE//0{{"NN$g!/ 0 0ET%%b)I+ + +ENN+DT%%b)H+ + + &b))r   c                 .    | j                  |d|d      S )Nz(*(z *)0))_global_typer   r   r   s      r   _typedef_typezRecompiler._typedef_type{  s      T%;<<r   c                 F    | j                  | j                  ||             y r   )r   rG  rF  s      r   !_generate_cpy_typedef_collecttypez,Recompiler._generate_cpy_typedef_collecttype~  s    d00T:;r   c                      y r   r%   rF  s      r   _generate_cpy_typedef_declz%Recompiler._generate_cpy_typedef_decl      r   c                 r    | j                   |   }| j                  d   j                  t        ||             y )Nr   )r   r   r   rf   )r   r   r   rA   s       r   _typedef_ctxzRecompiler._typedef_ctx  s.    __R(


:%%l4&DEr   c                 Z   | j                  ||      }| j                  ||       t        |dd       dk(  r| j                  ||j                  d        y t        |t        j                        r>| j                  |j                  |j                  j                  |j                  |       y y )Noriginunknown_type)
approxname)rR  	named_ptr)	rG  rN  r   _struct_ctxr   r   r   NamedPointerTypetotyperF  s      r   _generate_cpy_typedef_ctxz$Recompiler._generate_cpy_typedef_ctx  s    D)"d#2x&.8RT:E223RYY		277')  + 4r   c                     | j                  |j                                |j                  r| j                  s| j                  |       y y y r   )r   r   ellipsisrp   rF  s      r   "_generate_cpy_function_collecttypez-Recompiler._generate_cpy_function_collecttype  s=    b0023;;t44!!"%  5;r   c                    | j                   rJ t        |t        j                        sJ |j                  r| j                  ||       y | j                  }t        |j                        }|dk(  rd}n
|dk(  rd}nd}g }g }d|z  }t        |j                        D ]=  \  }	}
|j                  |
j                  d|	z  |             |j                  d|	z         ? d	j                  |      }|xs d
}|j                  r|j                  dz   }nd}|d|d|d} |d|j                  j                  |              |d       d	j                  |      }d}t        |j                  t        j                        rd} |d||d|d        |d        |d        |d        |d|d|d        |d       d|z  }t        |j                        D ]%  \  }	}
|
j                  d|	z  |      } |d|z         ' t!               }t!               }|j                  D ]  }
| j#                  |
||        t%        |      D ]  } |d|d        t        |j                  t        j                        s7d}d|z  }d|j                  j                  d|      z  } ||        |d       nd }d}t        |j                        dkD  rt'        t        |j                              }|D ]  }	 |d |	z           |         |d!|t        |      t        |      d	j                  |D 	cg c]  }	d"|	z  	 c}	      fz          |d#        |        t        |j                        D ]&  \  }	}
| j)                  |
d$|	z  d|	z  d%        |        (  |d&        |d'       t'        t        |j                              D 	cg c]  }	d|	z  	 }}	d	j                  |      } |d(||d|d)        |d*        |d+        |         |d,       |dk(  r |d-       |rA |d.| j+                  |j                  d/d0      z         |D ]  } |d|z            |d1       n"|D ]  } |d|z            |d2        |d3        |d        |d4       d5 }d6}g }g }d|z  }t        |j                        D ]Q  \  }	}
d} ||
      rd7}d8}|
j                  d9||	fz  |      }|j                  |       |j                  d:||	fz         S |j                  } ||      r?d|z  }|j                  d;|      }|j-                  d|       t        j.                  }d }d<}d8}|rd	j                  |      }|xs d
}|d|d|d} |d|j                  |              |d       |r ||       d	j                  |      } |d(||d|d)       |r |d=        |d       n |d>|d?|        |d@        |        y c c}	w c c}	w )ANr   noargr   arg0r   argument of %sz x%dzx%dr   voidr.   r5   _cffi_d_r  rK   static r   zreturn r$  r%  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                     t        | t        j                        xs, t        | t        j                        xr | j	                         S r   )r   r   r   PrimitiveTyper&  )r  s    r   need_indirectionz@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   )rp   r   r   r   rY  _generate_cpy_constant_declr   r0   r   r   r   r)  rN   abirf  r   r   r9  r   r  r4  rC  insert	void_type)r   r   r   r	  numargsargname	argumentscall_argumentsrB  r   r  repr_argumentsrk  name_and_argumentsresult_codeargr7  r8  r   result_declrngfreelineri  
differenceindirection	tp_results                             r   _generate_cpy_function_declz&Recompiler._generate_cpy_function_decl  s   (((("e33444;; ,,R6zzbgg,a<G\GG 	"T) ) 	-GAtT__VaZAB!!%!),	- 9-'1666&&3,CC36nMBII001CDFGS	>2bii0Kk4@AS	#$ !4IJS	"T) ) 	 GAt//&1*g6C3	  E	E	GG 	DD''iC	D9% 	$DD"#	$ "))U^^4%K$t+G!BII$8$8G$LLK()KKrww<!BGG%C /)A-./FDc#hC		5A8a<56H8 8 9 #$ ) 	GAt&&tWq[%!)'46F	
 	'('(-23rww<-@A%!)AA>2+t^DE$%%&)*a<./#**299hNO P% &TH_%&%&% &TH_%&()$%S	W	. 
	"T) ) 	>GAt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   +X Xc           
         |j                   r| j                  s| j                  ||       y | j                  |j	                            }t        |j                        }| j                  rt        }n|dk(  rt        }n|dk(  rt        }nt        }| j                  d   j                  t        |d|z  t        ||      d|z               y )Nr   r   r   z
_cffi_f_%sz
_cffi_d_%s)r   )rY  rp   _generate_cpy_constant_ctxr   r   r0   r   OP_DLOPEN_FUNCOP_CPYTHON_BLTN_NOP_CPYTHON_BLTN_OOP_CPYTHON_BLTN_Vr   r   r   r   )r   r   r   rA   rn  	meth_kinds         r   _generate_cpy_function_ctxz%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                     t        |t        j                        ra|j                  }|dk(  r|j	                  d      }d|d|d}| j                  |d|z  |j                        }t        j                  ||      }|S )N...r   z_cffi_array_len((()0)->rK   %s[0])r   r   r>  r   r)  r   r  )r   	tp_struct
field_nametp_fieldactual_lengthptr_struct_nametp_items          r   r   zRecompiler._field_typeQ  sr    h0$OOM%"+"6"6s";#Z!1&&y'J2F'/}}6Gw>Hr   c                     | j                  |       | j                  r'|j                         D ]  }| j                  |        y y r   )r   rp   anonymous_struct_fields_struct_collecttype)r   r   fldtypes      r   r  zRecompiler._struct_collecttype]  sD    b!  557 2((12 !r   c           
         |j                   y | j                  }d|} |d        |d|d|d        |d        |d        |d       | j                  |      D ]  \  }}}}		 |j                         s|d	k\  r|d
k7  r |d|d|d|d       6t	        |t
        j                        rc|j                  |j                  dk(  rH|j                  }|dz   }t	        |t
        j                        r|j                  8|j                  dk(  rH |d|j                  dd|z  |	      d|d         |d        |d|d|d        |        y # t        $ r}
 |dt        |
      z         Y d }
~
d }
~
ww xY w)N_cffi_checkfld__CFFI_UNUSED_FNzstatic void r  z *p)r   z8  /* only to generate compile-time warnings or errors */z
  (void)p;r   r5   z  (void)((p->z) | 0);  /* check that 'r   z' is an integer */r  z[0]re  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   r'  r   r   r>  r   r  r)  r   r   )r   r   r2  rR  r	  checkfuncnamefnameftyper+   fqualr   s              r   _struct_declzRecompiler._struct_decld  sq   ;;zz/9;u=>S	GH\-1->->r-B 	,)E5(E,((*h!m{05ueE F "%9!LL0ELLE4I!JJE!EME "%9!LL0ELLE4I $$VZ-=U$K 	,( 	S	:uMN	 % ,\CF*++,s+   (,EA,EE$E	E? E::E?Nc                    | j                   |   }d }g }t        |t        j                        r|j	                  d       |j
                  |j	                  d       d}|| j                  j                  j                  vr|"|| j                  j                  j                  vr|j
                  n7|j                  st        |j                               rn|j	                  d       |j                  rO|j                  dkD  rt        |d|j                  d      |j	                  d       n|j	                  d	       d
}dj                  |      xs d}g }|t        | j!                  |            }	|	D ]  \  }
}}}| j#                  ||
|      }| j%                  |d|j&                  d|
d       t(        }|dk\  rt*        }d|z  }nQ|&t        |t        j,                        r|j.                  d}n&d||j1                  d      n|j&                  d|
d}||dk\  rd}n.|d|j&                  d|
d}nd|j1                  d      d|
d}|j	                  t3        |
|||t5        || j                   |                       t7        | j8                  d         }| j8                  d   j;                  |       |d}d}d }n,|d!|j&                  d"}d#}nd$|d}d%|d&}d }nd}d'}d'}|}| j8                  d(   j	                  t=        |j&                  |||||||             | j>                  jA                  |       y ))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   r7   r   z%d /* bits */z
(size_t)-1z	sizeof(((r   r  rK   z((char *)&((z)4096)->z) - (char *)4096z	offsetof(r5   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   rn   r   r   partialanyr  packedr3   rN   r  r   r   _check_not_opaquer   r9   r:   r>  r   r)  r'   r   r0   r   extendr?   r   r6  )r   r   r2  rR  rS  rA   reason_for_not_expandingrB   rF   r   fldnamer  r+   r  r8   r   offsetrE   alignrD   s                       r   rT  zRecompiler._struct_ctx  s9   __R(
#' b%//*LL);;LL)*'/$dhh&&==="$(("2"2"I"II{{"s2#=#=#?@34yy99q=- RYY() )
 -.LL+,'1$&3#+d//34J5? E1(E**2w@&&w:<''7'KM q=$B*X5D]"7EOO<.'D /8.?c*09?!D =HM)F*!1F + 46==3DgNFgvtX$R)ABDE3E8 !$DJJw$7 8JJw&&x0}##(/8~~?D8E ) ,12DDNPEDE ".G

>"))BGGZeW-x9	: 	  $$R(r   c                     t        |t        j                        r'|j                  }t        |t        j                        r't        |t        j                        r|j
                  t        d|z        y y )Nz0%s is of an opaque type (not declared in cdef()))r   r   r>  r  r   r   r@  )r   r   locations      r   r  zRecompiler._check_not_opaque  sb    U__-B U__-b%--.2;;3FBXMO O 4G.r   c                    t        | j                  j                               }|j                  d        |D ]  \  }}|| j                  vs|j
                  rt        d|d      |j                  j                  d      r-|j                  dd  j                         r|j                  dd  }nA|j                  dk(  r$|j                  dk(  rd}| j                  |d       nt        d|      | j                  |d |        y )	Nc                     | d   S )Nr   r%   )tp_orders    r   r   z7Recompiler._add_missing_struct_unions.<locals>.<lambda>  s
    hqk r   ry   zinternal inconsistency: z* is partial but was not seen at this point$r   _IO_FILEFILE)r  r   r   r   r   r  r3   r   
startswithisdigit	forcenamerN  rT  )r   r   r   orderrR  s        r   r   z%Recompiler._add_missing_struct_unions  s    
 4&&,,./12 	7IB111::->@/C D D 77%%c*rwwqr{/B/B/D!#JWW
*r||v/E!'J%%b&1-/1/4 5 5  T:6	7r   c                 &    | j                  |       y r   )r  rF  s      r    _generate_cpy_struct_collecttypez+Recompiler._generate_cpy_struct_collecttype  s      $r   c                 b    |j                  d      }d|v r||j                  dd      fS |d|z   fS )Nr5   r.   r   )r)  r*  )r   r   r2  s      r   _struct_nameszRecompiler._struct_names  s<    b!%<%--S111#+%%r   c                 H     | j                   |g| j                  |        y r   )r  r  rF  s      r   _generate_cpy_struct_declz$Recompiler._generate_cpy_struct_decl  s"    "6t11"56r   c                 H     | j                   |g| j                  |        y r   )rT  r  rF  s      r   _generate_cpy_struct_ctxz#Recompiler._generate_cpy_struct_ctx	  s"    5d0045r   c                     t        |t        j                        r| j                  ||       y | j	                  |       y r   )r   r   r   _generate_cpy_enum_collecttyper  rF  s      r   #_generate_cpy_anonymous_collecttypez.Recompiler._generate_cpy_anonymous_collecttype  s.    b%..)//D9$$R(r   c                     t        |t        j                        r| j                  |       y | j	                  ||d|z          y Ntypedef_)r   r   r   _generate_cpy_enum_declr  rF  s      r   _generate_cpy_anonymous_declz'Recompiler._generate_cpy_anonymous_decl  s5    b%..)((,b$
T(9:r   c                     t        |t        j                        r| j                  ||       y | j	                  ||d|z          y r  )r   r   r   	_enum_ctxrT  rF  s      r   _generate_cpy_anonymous_ctxz&Recompiler._generate_cpy_anonymous_ctx  s5    b%..)NN2t$RzD'89r   c                    ||f| j                   v rt        d|d|d      | j                   j                  ||f       | j                  }d|d|}|r` |d|z          |d        |d|d	        |d
|d|d       ||dkD  rd|fz  } |d|d        |d        |d        |d       n=|J  |d|z          |d        |d|j	                  d      d|d        |d        |        y )Nzduplicate declaration of z 'r7   _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 = rc  )r  r   r6  r   r)  )r   is_intr   r   categoryr   r	  funcnames           r   _generate_cpy_constzRecompiler._generate_cpy_const&  s   dt333#6>EG G  (D!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                 d    |j                         }|r| j                  r| j                  |       y y r   )r'  rp   r   r   r   r   r  s       r   "_generate_cpy_constant_collecttypez-Recompiler._generate_cpy_constant_collecttypeD  s.    ##%..!!"% /r   c                 J    |j                         }| j                  |||       y r   )r'  r  r  s       r   rj  z&Recompiler._generate_cpy_constant_declI  s"    ##%  r2r   c                    | j                   s!|j                         rt        t        d      }n4| j                   rt        }nt
        }| j                  |   }t        ||      }| j                  d   j                  t        |d|z  |             y )Nr   r   _cffi_const_%s)
rp   r'  r   OP_CONSTANT_INTOP_DLOPEN_CONSTOP_CONSTANTr   r   r   r   )r   r   r   r   
const_kindrA   s         r   r~  z%Recompiler._generate_cpy_constant_ctxM  sy    $$););)=_b1G$$,
(
,JZ4G

8##t-4g>	@r   c                 &    | j                  |       y r   )r   rF  s      r   r  z)Recompiler._generate_cpy_enum_collecttype]  s    b!r   c                 J    |j                   D ]  }| j                  d|        y )NT)enumeratorsr  )r   r   r   
enumerators       r   r  z"Recompiler._generate_cpy_enum_decl`  s%    .. 	7J$$T:6	7r   c           	         | j                   |   }t        t        d      }| j                  r|j	                          t        |j                  |j                        D ]3  \  }}| j                  d   j                  t        |d|z  ||             5 |d|vr| j                  sd|z  }d|z  }nh|j                  | j                  g       }	| j                  j                  |	      }t        t        | j                  j                  |	d            dk        }d	j!                  |j                        }
| j                  d
   j                  t#        |j$                  ||||
             y )Nr   r   r  r   r  z
sizeof(%s)z((%s)-1) <= 0r   rJ   r   )r   r   OP_ENUMrp   check_not_partialzipr  
enumvaluesr   r   r   build_baseinttypern   sizeofintcastrN   rR   r   )r   r   r2  rA   r   r  	enumvaluer   rU   basetprV   s              r   r  zRecompiler._enum_ctxd  s6   __R(
"%    "%(%G 	3!J	JJx '':'7*'Dg'023	3
 E!1$:O:O%'D$u,F))$((B7F88??6*DTXX]]6267!;<F88BNN+

6!!RWWj$A	Cr   c                 D    | j                  ||j                                y r   )r  r  rF  s      r   _generate_cpy_enum_ctxz!Recompiler._generate_cpy_enum_ctxy  s    r2>>+,r   c                      y r   r%   rF  s      r   _generate_cpy_macro_collecttypez*Recompiler._generate_cpy_macro_collecttype  rL  r   c                 @    |dk(  rd }n|}| j                  d||       y )Nr  Tr  )r  )r   r   r   r   s       r   _generate_cpy_macro_declz#Recompiler._generate_cpy_macro_decl  s(    ;KK  t Er   c                     |dk(  r| j                   rt        d|d      d }n|}t        t        d      }| j                  d   j                  t        |d|z  ||             y )Nr  z(cannot use the syntax '...' in '#define z ...' when using the ABI moder   r   r  r  )rp   r   r   r  r   r   r   )r   r   r   r   r   s        r   _generate_cpy_macro_ctxz"Recompiler._generate_cpy_macro_ctx  sm    ;$$',034 4 KK"-

8##t-4g#.0	1r   c                     t        |t        j                        rL|j                  }|dk(  rd|d}| j	                  |j
                  d|z        }t        j                  ||      }|S )Nr  z_cffi_array_len(rK   r  )r   r   r>  r   rE  r  )r   r   global_namer  r  s        r   rE  zRecompiler._global_type  sY    b%//*IIM%9D F'';1FGG-8B	r   c                 F    | j                  | j                  ||             y r   )r   rE  rF  s      r   "_generate_cpy_variable_collecttypez-Recompiler._generate_cpy_variable_collecttype  s    d//D9:r   c                 R   | j                   }| j                  ||      }t        |t        j                        r|j
                  |j                  }d}nd}d|d} |d|j                  || j                        z           |d        |d|d	|d
        |d        |        y )Nr5   &z*_cffi_var_r   ra  r  r   z	  return r  r%  r   )	r   rE  r   r   r>  r   r  r)  r   )r   r   r   r	  	ampersandr   s         r   _generate_cpy_variable_declz&Recompiler._generate_cpy_variable_decl  s    zzr4(b%//*ryy/@BII )-.Yt43F3FGGHS	9d34S	r   c           
          | j                  ||      }| j                  |   }| j                  rt        }nt        }| j
                  d   j                  t        |d|z  t        ||                   y )Nr   z_cffi_var_%s)	rE  r   rp   OP_GLOBAL_VAROP_GLOBAL_VAR_Fr   r   r   r   )r   r   r   rA   r8   s        r   _generate_cpy_variable_ctxz%Recompiler._generate_cpy_variable_ctx  se    r4(__R(
  B B

8##t^d2F2z4JK	Mr   c                 ^    t        |t        j                        sJ | j                  |       y r   )r   r   r   r   rF  s      r   '_generate_cpy_extern_python_collecttypez2Recompiler._generate_cpy_extern_python_collecttype  s&    "e33444b!r   c           	         | j                   }t        |j                  t        j                        rd}n%d|z  }d|j                  j                  d|      d} |d|z          |d| j                  d|d	|d
        |        g }d|z  }t        |j                        D ]+  \  }}	|	j                  d|z  |      }
|j                  |
       - dj                  |      }|xs d}|d|d}|j                  dk(  rd|z   }d }t        t        |j                        dz  d      } ||j                        rt        |d      }t        |j                  t        j                        r;d|j                  j                  d      ||j                  j                  d      |fz  } |||j                  j                  |              |d        |d|z          |d       t        |j                        D ]f  \  }}	d|z  }
t        |	t        j                        s ||	      rd|
z   }
t        j                  |	      }	 |d|	j                  d      |dz  |
fz         h  |d|z         t        |j                  t        j                        s% |d|j                  j                  d      d        |d         |        | xj                   d!z  c_        y )"Nr  rd  z(int)sizeof(r5   rK   z3static struct _cffi_externpy_s _cffi_externpy__%s =r   r   r/   z	, 0, 0 };r^  z a%dr   r_  r  	__stdcallz_cffi_stdcall c                 X    t        | t        j                        xr | j                  dk(  S )Nr<  )r   r   rh  r   r   s    r   may_need_128_bitsz9Recompiler._extern_python_decl.<locals>.may_need_128_bits  s(    r5#6#67 -GG},.r   r[      z!sizeof(%s) > %d ? sizeof(%s) : %dr   z  char a[%s];z  char *p = a;za%dr  z  *(%s)(p + %d) = %s;r   z,  _cffi_call_python(&_cffi_externpy__%s, p);z  return *(z)p;r   r   )r   r   rf  r   r   r)  ro   r   r   r   rN   rk  rt   r0   r   r   r  )r   r   r   tag_and_spacer	  size_of_resultrB  rp  r   r  ru  rr  rs  r
  	size_of_as                  r   _extern_python_declzRecompiler._extern_python_decl  s   zzbii0 N$t+G		$$R14NBTIJdN4 	5	"T) ) 	"GAt//&1*g6CS!	" 9-'16)-~>66[ !14F!F	. BGGQ*	RYY'Ir*Ibii!4!45;		$$R()		$$R()?5 5I 	}bii&:&:;M&NOPS	_y() ) 	MGAt!)C4!4!45%d+Ci((.(DOOC,@!A#s+KKL	M 	;dBC"))U^^4ryy';';C'@BCS	ar   c                 *    | j                  ||d       y )Nra  r  rF  s      r    _generate_cpy_extern_python_declz+Recompiler._generate_cpy_extern_python_decl  s      T95r   c                 *    | j                  ||d       y )NzCFFI_DLLEXPORT r  rF  s      r   #_generate_cpy_dllexport_python_declz.Recompiler._generate_cpy_dllexport_python_decl
  s      T+<=r   c                 *    | j                  ||d       y )Nr5   r  rF  s      r   '_generate_cpy_extern_python_plus_c_declz2Recompiler._generate_cpy_extern_python_plus_c_decl  s      T2.r   c                     | j                   rt        d      |j                  rt        d      | j                  |   }t        t        |      }| j                  d   j                  t        |d|z  ||             y )Nz,cannot use 'extern "Python"' in the ABI modez$a vararg function is extern "Python"r   z&_cffi_externpy__%s)
rp   r   rY  r3   r   r   OP_EXTERN_PYTHONr   r   r   )r   r   r   rA   r   s        r   _generate_cpy_extern_python_ctxz*Recompiler._generate_cpy_extern_python_ctx  sw      #@B B;;%&NOO__R(
):6

8##t2T97DI	Kr   c                    | j                   } |d       t        |t              s|j                  d      }n|j	                  d       	 |j	                  d       |j                  d      D ]  }|}t        d      t        u rt        t        |      }nt        |      dd } |d	|z   j                                d
}|D ]#  }t        |      dk\  r
 ||       d
}|d|fz  z  }%  ||        y # t
        $ r d|z   }Y w xY w)Nz=// # NB. this is not a string because of a size limit in MSVCzutf-8asciis   # -*- encoding: utf8 -*-
Tz//r   r   z// r5   L   z%d,)r   r   bytesencodedecodeUnicodeDecodeError
splitlinesr  mapordr  rstripr0   )r   sr	  linerD   printed_linecs          r   r  z)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   	C. .C?>C?c                 F    t        t        t              | j                  |<   y r   )r   OP_PRIMITIVE	PRIM_VOIDr   r   r   r   s      r   _emit_bytecode_VoidTypez"Recompiler._emit_bytecode_VoidType=  s    !'i!@r   c                 d    t         |j                     }t        t        |      | j                  |<   y r   )PRIMITIVE_TO_INDEXr   r   r*  r   )r   r   r   rd   s       r   _emit_bytecode_PrimitiveTypez'Recompiler._emit_bytecode_PrimitiveType@  s%    '0
!'j!Ar   c                     d|j                   d|j                   d|j                   d}t        t        |      | j                  |<   y )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_UnknownIntegerTypez,Recompiler._emit_bytecode_UnknownIntegerTypeD  s5     $&77BGGRWW> "(a!8r   c                 x    d|j                   d|j                   d}t        t        |      | j                  |<   y )Nz_cffi_prim_float(sizeof(z) *
           (((z6)1) / 2) * 2 /* integer => 0, float => 1 */
         )r2  r3  s       r   _emit_bytecode_UnknownFloatTypez*Recompiler._emit_bytecode_UnknownFloatTypeJ  s/      WWbgg/ "(a!8r   c                 4   t        t        | j                  |j                           | j                  |<   |dz  }|j
                  D ]e  }| j                  |   }||k7  rJt        |t        j                        r| j                  ||       nt        t        |      | j                  |<   |dz  }g t        |j                        }|j                  -|j                  dk(  r|dz  }nt        d|j                        t        t        |      | j                  |<   y )Nr   r  rY   zabi=)r   OP_FUNCTIONr   rf  r   r   r   r   rh  r0  r9   r  rY  rk  r3   OP_FUNCTION_END)r   r   r   r   	realindexrB   s         r   _emit_bytecode_RawFunctionTypez)Recompiler._emit_bytecode_RawFunctionTypeP  s    !'T__RYY5O!P
77 	C,I	!c5#6#6755c5A-3GY-GDOOE*QJE	 BKK 66vv$
)bff*>??!'!?r   c                 l    t        t        | j                  |j                           | j                  |<   y r   )r   
OP_POINTERr   rV  r   r,  s      r   _emit_bytecode_PointerTypez%Recompiler._emit_bytecode_PointerTypec  s$    !'
DOOBII4N!Or   c                 x    |j                         }t        t        | j                  |         | j                  |<   y r   )r   r   r=  r   r   )r   r   r   raws       r   _emit_bytecode_FunctionPtrTypez)Recompiler._emit_bytecode_FunctionPtrTypei  s.      "!'
DOOC4H!Ir   c                    | j                   |j                     }|j                  t        t        |      | j
                  |<   y |j                  dk(  r(t        dt        |      j                  dd      d      | j
                  |dz      dk(  sJ t        t        |      | j
                  |<   t        d t        |j                              | j
                  |dz   <   y )Nr  ztype z/*...*/zb badly placed: the '...' array length can only be used on global arrays or on fields of structuresr   r|   )
r   r  r   r   OP_OPEN_ARRAYr   r   r   r*  OP_ARRAY)r   r   r   
item_indexs       r   _emit_bytecode_ArrayTypez#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                 \    | j                   |   }t        t        |      | j                  |<   y r   )r   r   OP_STRUCT_UNIONr   )r   r   r   struct_indexs       r   _emit_bytecode_StructTypez$Recompiler._emit_bytecode_StructType{  s'    **2.!'!Fr   c                 \    | j                   |   }t        t        |      | j                  |<   y r   )r   r   r  r   )r   r   r   
enum_indexs       r   _emit_bytecode_EnumTypez"Recompiler._emit_bytecode_EnumType  s$    [[_
!'!<r   F)r5   r   )NconstN)Vr"   r#   r$   r  r   rv   r   r   r   r   r   r   r   r   r   r   r  r   r  r4  r9  r,  rC  rG  rI  rK  rN  rW  rZ  r|  r  r   r  r  rT  r  r   r  _generate_cpy_union_collecttyper  r  _generate_cpy_union_declr  _generate_cpy_union_ctxr  r  r  r  r  rj  r~  r  r  r  r  r  r  r  rE  r  r   r  r  *_generate_cpy_dllexport_python_collecttype._generate_cpy_extern_python_plus_c_collecttyper  r  r  r  r  "_generate_cpy_dllexport_python_ctx&_generate_cpy_extern_python_plus_c_ctxr  r-  r0  r4  r6  r;  r>  _emit_bytecode_ConstPointerType_emit_bytecode_NamedPointerTyperA  rF  rJ  _emit_bytecode_UnionTyperM  r%   r   r   rl   rl   ~   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   rl   )r	   c                        e Zd Z fdZ xZS )NativeIOc                 n    t        |t              r|j                  d      }t        t        |   |       y )Nr  )r   unicoder  superr[  r   )r   r%  r   s     r   r   zNativeIO.write  s*    !W%HHW%(D'*r   )r"   r#   r$   r   __classcell__)r   s   @r   r[  r[    s    	+ 	+r   r[  c                     t        | d      S )Nr   )hasattr)	maybefiles    r   _is_file_likerc    s    9g&&r   c                    |rt        d|       t        | ||d u       }|j                          |j                          t	        |      r|j                  ||       yt               }|j                  ||       |j                         }	 t        |d      5 }|j                  t        |      dz         |k7  rt        	 d d d        |rt        d       y# 1 sw Y   xY w# t        $ r d|t        j                         fz  }	t        |	d	      5 }|j                  |       d d d        n# 1 sw Y   nxY w	 t        j                  |	|       Y y# t         $ r/ t        j"                  |       t        j                  |	|       Y Y yw xY ww xY w)
Nzgenerating )rp   Tr   r   z(already up-to-date)Fz%s.~%dw)printrl   r   r   rc  r   r[  getvaluer   readr0   IOErrorr   getpidr   renameOSErrorunlink)
rn   ro   r   target_fileverbose
recompilerr   outputf1tmp_files
             r   _make_c_or_py_sourcert    sn   ./C.6$.>AJ!!#""$[!$$[(;
A  H-ZZ\F+s# 	rwws6{Q'61 2	 ()	 	  	{BIIK88(C  	BHHV	 	 		-IIh,   	-IIk"IIh,	-	sZ   C" 'C C" CC" ".FD+"	F+D4	0F8E4FFFFc                 (    |J t        | ||||      S r   rt  )rn   ro   r   target_c_filero  s        r   make_c_sourcerx    s&    [(M ') )r   c                      t        | |d ||      S r   rv  )rn   ro   target_py_filero  s       r   make_py_sourcer{    s    [$ ') )r   c                    |j                  d      }	 t        j                  t        j                  j                  | g|d d         |dxx   |z  cc<   t        j                  j                  | g| |fS # t
        $ r Y :w xY w)Nr   r   )r   r   makedirsr   rN   rl  )	outputdirmodname	extensionpartss       r   _modname_to_filer    sz    MM#E
BGGLL8U3BZ89 
"II77<<	*E*E11  s   6A8 8	BBc                 `    t        ||      }| j                  |||f       t        |||       |S r   )r   r   setattr)	patchlistclsr   new_metholds        r   _patch_methr    s4    
#t
Cc4%&Cx Jr   c                 F    t        |       D ]  \  }}}t        |||        y r   )reversedr  )r  r  r   old_meths       r   _unpatch_methsr    s)    '	2 %T8T8$%r   c                     t         j                  dk(  rddlm} |t	        | |dd        t         j                  dk(  rddlm} fd}t	        | |d	|      y y )
Nr   r   )MSVCCompiler_remove_visual_c_refc                     |S r   r%   )r   manifest_files     r   r   z&_patch_for_embedding.<locals>.<lambda>  s    M r   darwin)	CCompilerc                     d| j                   v rDt        | j                         | _         | j                   j                  d      }d| j                   |<    | g|i |S )Nz-bundlez-dynamiclib)	linker_sor  r   )r   r   kwdsr   old_link_shared_objects       r   my_link_shared_objectz3_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                     ddl m} j                  d      r<d d t        j                  dk(  rdz  nt        j                  dk(  rdz  nd	z  t        | |d
fd       y )Nr   )	build_extz.*r  r   z.dllr  z.dylibz.soget_ext_filenamec                     S r   r%   )r   ext_nametargets     r   r   z#_patch_for_target.<locals>.<lambda>  s    v r   )r  r  endswithr  r  r  )r  r  r  s    ` r   _patch_for_targetr    sf    2 t<<7"fF\\X%hFeOF	9&8-/r   c                    t        |t              s|j                  d      }| j                  r| j	                  |       |m|rt        |      rt        d      | j                  d u}|r| j                  |       |5t        |||      \  }}|r|g|z   }t        j                  j                  | }n|}|	
|rd|z  }	nd}	|rt        j                  ||fi |}nd }t        | ||||      }|rg }t        j                          }	 |rt#        |       |	dk7  rt%        ||	       |r7|dk(  rd}nd}t'        |d	t        j                  j)                  |             t        j*                  |       t        j,                  d|||
      }t        j*                  |       t/        |       |S ||fS |t        ||d
      \  }}t1        | |||      }|r|S d |fS # t        j*                  |       t/        |       w xY w)Nr  zGWriting to file-like objects is not supported with call_c_compiler=Truez%s.*r   )ro  r   zthe current directory isz setting the current directory tor.   z.py)r   r   r  _windows_unicode_apply_windows_unicoderc  r@  r   _apply_embedding_fixr  r   r   rN   r   get_extensionrx  getcwdr  r  rf  abspathchdircompiler  r{  )rn   ro   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 8 9 9^^4/	$$T*>,V[-=?MFE!
U*u-JJ>+-++JLtLCC[(F(8:I))+C*(3S=%i8#}8@S"''//&*ABC !,!4!4S#5Eu"N y)!!<>(eDIFA k6)9;M=  y)s   BG "G:rN  )	r   TNz.cNr   NNT)"r   r  ior5   r   r   errorr   cffi_opcoderq   r  r+  r  version_infor   r   r'   r?   rR   rf   rl   StringIOr[  BytesIOrc  rt  rx  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   