
    MhW                        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T dZ	dZ
dZej        d	k    pej        d
k     p
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!dS )+    N   )ffiplatformmodel)VerificationError)*i&  i'  i(  win32)   r   )r	      c                   "    e Zd ZddZd Zd ZdS )
GlobalExprr   c                 L    || _         || _        || _        || _        || _        d S N)nameaddresstype_opsizecheck_value)selfr   r   r   r   r   s         O/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/cffi/recompiler.py__init__zGlobalExpr.__init__   s,    		&    c           	      l    d| j         d| j        d| 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   s?     IIIt|||T\%;%;%=%=%=%=tyyyJ 	Jr   c                 T    d| 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   s.    t|;;==ty#/1 1 	1r   N)r   r   __name__
__module____qualname__r   r   r     r   r   r   r      sI        ' ' ' 'J J J1 1 1 1 1r   r   c                   &    e Zd Zd Zd Zd Zd ZdS )	FieldExprc                 L    || _         || _        || _        || _        || _        d S 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                                        dz   S )N r   ", z,
z     z   r   )lenr   r)   r*   r,   r   )r   spacess     r   r   zFieldExpr.as_c_expr&   sy    s49~~%%)YYY0A0A0ABB%+VVT___=> >%+VVT-?-I-I-K-K-K-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}n1| j         j        t          k    rt	          | j                  }nt          d| 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/   sp     G++II"k11)$-88II%%"0@@BBB'i"iii) 	)r   N)r"   r#   r$   r   r   r    r=   r%   r   r   r'   r'      sS        + + +N N N" " "	) 	) 	) 	) 	)r   r'   c                        e Zd Zd Zd Zd ZdS )StructUnionExprc	                 v    || _         || _        || _        || _        || _        || _        || _        || _        d S 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  n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    #ty$/4:&NNN&*iii@At5s4=7I7IJJK 26E;--2G 	 	r   c                     t          | j        t                    }d | j        D             }dt	          | j                  t	          |          | j        dd                    |          dS )Nc                 6    g | ]}|                                 S r%   )r=   ).0c_fields     r   
<listcomp>z2StructUnionExpr.as_python_expr.<locals>.<listcomp>O   s4     5 5 5" 3355 5 5 5r   z(b'',,))evalrB   G_FLAGSrF   r;   rA   r   join)r   rB   fields_exprs      r   r    zStructUnionExpr.as_python_exprM   s}    TZ))5 5&*m5 5 5 do...e$$$IIIHH[!!!!	# 	#r   Nr!   r%   r   r   r?   r?   :   sA        	! 	! 	!  # # # # #r   r?   c                        e Zd Zd Zd Zd ZdS )EnumExprc                 L    || _         || _        || _        || _        || _        d S r   r   rA   r   signedallenums)r   r   rA   r   rX   rY   s         r   r   zEnumExpr.__init__X   s)    	$	 r   c                 H    d| j         | j        | j        | j        | j        fz  S )Nz1  { "%s", %d, _cffi_prim_int(%s, %s),
    "%s" },rW   r   s    r   r   zEnumExpr.as_c_expr_   s/    !%DO!%DK!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   )r\   r   )   r   )r]   r   )   r   )r^   r   r6   z\x00r7   )
PRIM_UINT8	PRIM_INT8PRIM_UINT16
PRIM_INT16PRIM_UINT32
PRIM_INT32PRIM_UINT64
PRIM_INT64r   rX   r;   rA   r   rY   )r   
prim_indexs     r   r    zEnumExpr.as_python_exprd   sr    )***	 
 i$&

 &7t%G%G%G%6z%B%B%B%)YYY? 	?r   Nr!   r%   r   r   rU   rU   W   sD        ! ! !I I I
	? 	? 	? 	? 	?r   rU   c                        e Zd Zd Zd Zd ZdS )TypenameExprc                 "    || _         || _        d S r   r   rA   )r   r   rA   s      r   r   zTypenameExpr.__init__p   s    	$r   c                 $    d| j         | j        fz  S )Nz  { "%s", %d },rk   r   s    r   r   zTypenameExpr.as_c_exprt   s     DIt#???r   c                 @    dt          | j                  | j        dS )Nr6   r7   )r;   rA   r   r   s    r   r    zTypenameExpr.as_python_exprw   s"     -do>>>			JJr   Nr!   r%   r   r   ri   ri   o   sI        % % %@ @ @K K K K Kr   ri   c                      e Zd ZdZdNdZd Zd Zd Zd Zd Z	g d	Z
d
 ZdOd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!dPd#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.	 	 dQd.Z/d/ Z0d0 Z1d1 Z2d2 Z3dPd3Z4d4 Z5d5 Z6d6 Z7d7 Z8d8 Z9d9 Z:d: Z;d; Z<d< Z=d= Z>e>xZ?Z@d> ZAd? ZBd@ ZCdA ZDdB ZEeExZFZGdC ZHdD ZIdE ZJdF ZKdG ZLdH ZMdI ZNeNZOeNZPdJ ZQdK ZRdL ZSeSZTdM ZUd"S )R
Recompilerr   Fc                 H    || _         || _        || _        t          | _        d S r   )ffimodule_nametarget_is_pythonVERSION_BASE_version)r   rq   rr   rs   s       r   r   zRecompiler.__init__   s$    & 0$r   c                 :    t          | j        |          | _        d S r   )maxru   )r   vers     r   needs_versionzRecompiler.needs_version   s    DM3//r   c           
         i | _         |                     d           t          | j         t                    }g | _        |D ]}|j        r| j         |         J t          | 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                            d           |D ]t}|j        sk| j         |         ^t          | j                  | j         |<   | j                            |           |j        r!|j        | j                            d           ud | j                                         vsJ i | _        i | _        |D ]K}t          |t          j                  rd | j        |<   't          |t          j                  r
d | j        |<   Lt/          t          | j        d                     D ]\  }}|| j        |<   t/          t          | j        d                     D ]\  }}|| j        |<   |D ]6}t1          | d|j        j        z             } ||| j         |                    7| j        D ]}t          |t6                    sJ t9          | j                  | _        d S )NcollecttypekeyENDLENc                     | j         S r   r   tps    r   <lambda>z/Recompiler.collect_type_table.<locals>.<lambda>       RW 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   sS   }%%%4?444	  	. 	.B! .r*222&)$/&:&:#&&r***7 0 0C%cEN,1,C,1,=,1,E,1,A	,C D D D D D
 s+3/24?/C/C,O**3////&&u---  	2 	2B% 2$/"*=*E&)$/&:&:#&&r***# 2	(=O**51114?11333333 ! 	' 	'B"e122 '*.#B''B// '"&Bvd&9*<*< >  >  > ? ? 	( 	(EAr&'D##vdk*<*< >  >  > ? ? 	  	 EArDKOO  	, 	,BT#4r|7L#LMMFF2tr*++++ / 	* 	*Bb&))))))00r   c                 <    | j          }|                    |          S r   )rs   
enumfields)r   r   expand_anonymous_struct_unions      r   _enum_fieldszRecompiler._enum_fields   s#     -1,A(A%}}:;;;r   c                    t          |t          j                  s1t          |t                    r|D ]}|                     |           d S || j        vrd | j        |<   t          |t          j                  r)|                     |                                           d S t          |t          j                  rg|j	        Z|| j
        j        j        vrI|                     |          D ]5\  }}}}|                     |                     |||                     2d S d S d S |                                D ]\  }}|                     |           d S d S r   )r   r   BaseTypeByIdentityr   _do_collect_typer   r   as_raw_functionr   fldtypesrq   _parser_included_declarationsr   _field_type
_get_items)r   r   xname1r   _s         r   r   zRecompiler._do_collect_type   s   "e677 	"e$$ - - -A))!,,,,FT_$$"&DOB"e344 	-%%b&8&8&:&:;;;;;B 344 -;*$("2"III,0,=,=b,A,A P P(sAq--d.>.>r5#.N.NOOOO +*IIP P MMOO - -DAq))!,,,, %$- -r   c                    | j         j        j                                        }t	          |          D ]\  }\  }}|                    dd          \  }}	 t          | d|d|          }n # t          $ r t          d|z            w xY w	 || _	         |||           n# t          $ r}	t          j        |	|            d }	~	ww xY wd S )Nr.   r   _generate_cpy_r   z"not implemented in recompile(): %r)rq   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   h,2244!' 	 	D+2u!ZZQ//ND(A @I	(K L L! A A A'84?A A AA&+#r8$$$$   +At444	 	s$   A,,B	B!!
C+CC)globalfieldstruct_unionenumtypenamec                 J   i | _         | j        D ]}g | j         |<   t                      | _        |                     d           |                                  | j        D ]C}| j         |         }|dk    r|                    d            t          |          | j         |<   D| j         d         }| j        	                                D ]2\  }}|t          |          k     sJ ||         j        |j        k    sJ 3t          |          t          | j                  k    sJ | j         d         }| j        	                                D ]2\  }}|t          |          k     sJ ||         j        |j        k    sJ 3t          |          t          | j                  k    sJ d S )Nctxr   c                     | j         S r   r   )entrys    r   r   z0Recompiler.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   r0   r   r   )r   r   r   r   r   s        r   collect_step_tableszRecompiler.collect_step_tables   s   
 	' 	'I$&DJy!!#&55 u''))) 	/ 	/I*Y'CG##55666$)#JJDJy!! j((..00 	* 	*EBs3xx<<<<q6;"')))))3xx3t2333333j [&&(( 	* 	*EBs3xx<<<<q6;"')))))3xx3t{++++++++r   r5   c                 @    | j                             |dz              d S )N
)_fwrite)r   whats     r   _prntzRecompiler._prnt  s     dTk"""""r   c                 ~    | j         r|J |                     |           d S |J |                     ||           d S r   )rs   write_py_source_to_fwrite_c_source_to_f)r   fpreambles      r   write_source_to_fzRecompiler.write_source_to_f  s[      	2###%%a((((('''$$Q11111r   c                     t          t          j                            t          j                            t
                    |          d          }|                                }|                                 |S )Nr)openospathrR   dirname__file__	readlinesclose)r   filenamegliness       r   _rel_readlineszRecompiler._rel_readlines!  sN    bgooh77BBCHH				r   c           	      x   || _         | j        }| j        j         |d           t          s |d           |                     d          }|                    d          }|                     d          |||dz   <    |d                    |                     | j        	                    d          d	         }| j        j         |d
| j        d            |d           | 
                    | j        j                    |d            |d            |d|            |d            |d|            |d            |d|            |d           |                     d          }|                    d          }|                     d          |||dz   <    |d                    |                     |                     t                      |d            |              ||            |              |d            |              |d           t          d | j                                        D                       }t!          | j                  D ]K\  }}d}	||v rd||                                         z   }	 |d||                                |	fz             L| j        s |d            |d            |             t)                      | _        |                     d           i }
| j        D ]v}| j        |         }t3          |          |
|<   |
|         d k    rI |d!|d"|d#           |D ]} ||                                             |d            |             w| j        j        r |d$           | j        j        D ]_}	 |j        d d%         \  }}n)# t8          $ r t;          d&| j        d'|d(          w xY w|t;          d)           |d*|d+           ` |d,            |d            |              |d-            |d.           | j        D ]+}|
|         d k    r |d/|z              |d0|z             ,| j        D ]}|d1k    r |d2|
|         |fz             | j        j        r |d3           n |d4            |d5t3          | j                  fz             d }| j        d k    s| j        j        |dz  } |d6|z              |d            |              |d7            |d8            |d            |              |d            |d9            |d:|d;            |d<           |dz  r! |d=            |d>            |d?            |d@| j        z              |dA            |dB            |dC            |d            |dD            |dE            |dF            |dG            |dH|dI            |dJ            |dK|dL            |dM            |dM            |d            |d9            |dN|dO            |d<            |dP| j        | j        fz              |dD            |d            |d9            |dQ|dO            |d<            |dR| j        | j        fz              |dD            |d            |              |d7            |dS            |d           d | _        d S )TNz#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[] = {c                     g | ]	\  }}||f
S r%   r%   rJ   r   r   s      r   rL   z2Recompiler.write_c_source_to_f.<locals>.<listcomp>W       NNN7B2wNNNr   z // z/* %2d */ %s,%sz  0z};declr   zstatic const struct _cffi_z	_s _cffi_zs[] = {z.static const char * const _cffi_includes[] = {r\   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   rq   
_embeddingUSE_LIMITED_APIr   indexrR   rr   r   _print_string_literal_in_arrayry   VERSION_EMBEDDEDdictr   r   r   r   _get_c_namer   r   _seen_constantsr   r   r   r0   _included_ffis_assigned_sourcer   r   _num_externpyru   )r   r   r   prntr   r   base_module_nametypeindex2typer8   rD   numsr   r   r   ffi_to_includeincluded_module_nameincluded_sourcerB   s                     r   r   zRecompiler.write_c_source_to_f'  s	   z8*D./// 	1D/000 ##$566KK566**+;<<a!eRWWU^^  +11#66r:8*DDd6F6F6FHIIIDDEEE//0CDDDDLLLD&'''DD  # $ $ $D.///DD  # $ $ $DMMMDD  # $ $ $DNNN''77E9::A../?@@E!AaC%LD   /000 	MNNNXMNNN 	-...NNdo6K6K6M6MNNNOOt// 	C 	CEArGN"" >!#4#@#@#B#BBD"a%AABBBB 	DKKKT


  #uuv  		 		I*Y'C!#hhDOI""IIyyy* + + +  , ,ED**++++T


 8" 	DABBB"&("9 : :8&7; :(//% 8 8 8++ !HHHnnn78 8 88
 #*+34 4 4 "6"6"689999DNNNDJJJDFFF 	NOOO 	: 	:II""^i/0000,y89999 	L 	LIG##+tI	.JJKKK8" 	/D$%%%%D-...%T_)=)=(??@@@!!TX%8%DQJE!E)***T


 	NOOOX"###5E5E5EGHHHS			19 	D8999D E F F FDMMM-=>>>.///()))   XS			 	 !!!"###*+++8H8H8HJKKKY(8(8(8:;;;ZZ*+++"2"2"24555S			DdmH- - 	. 	. 	.S			W///1222S			=dmA- - 	. 	. 	.S			X+,,,Xs   7O

&O0c                 8    t          |t                    rd|dS t          |t          t          f          rO fd|D             }t	          |          dk    r|                    d           dd                    |          dS |                                S )	Nr6   r7   c                 :    g | ]}                     |          S r%   )_to_py)rJ   itemr   s     r   rL   z%Recompiler._to_py.<locals>.<listcomp>  s%    3334;;t$$333r   r   r5   (rN   rO   )r   r   listr   r0   r   rR   r    )r   r   reps   `  r   r  zRecompiler._to_py  s    a 	" 	"aa>!a$'' 	-3333333C3xx1}}

2 XXc]]]],,!!!r   c           	      V   || _         | j        } |d            |d           t          | j        j        pd          }t          |          D ]r}| j        j        |         }	 |j        d d         \  }}n)# t          $ r t          d| j        d|d          w xY w|t          d           |d	||fz             s |              |d
| j	        d            |d| j
        fz             d | _
        t          | j                  | _        d | j        D             } |d|                     d                    |                    d           t          d | j                                        D                       }	| j        D ]M}
| j        |
         }t          |          dk    r+|
dk    r% |d|
d|                     |          d           N|dk    r9 |dd                    d t          |          D                       d            |d           d S )Nz# auto-generated filezimport _cffi_backendr%   r\   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('rM   z    _version = 0x%x,c                 6    g | ]}|                                 S r%   )r   )rJ   r8   s     r   rL   z3Recompiler.write_py_source_to_f.<locals>.<listcomp>  s$    DDDbR''))DDDr   z    _types = r5   rN   c                     g | ]	\  }}||f
S r%   r%   r   s      r   rL   z3Recompiler.write_py_source_to_f.<locals>.<listcomp>   r   r   r   r   z    _zs = z    _includes = (r   c                     g | ]}d |z  S )z_ffi%dr%   rJ   r   s     r   rL   z3Recompiler.write_py_source_to_f.<locals>.<listcomp>  s    EEEA8a<EEEr   z,),rO   )r   r   r0   rq   r  ranger  r   r   rr   ru   r   r   r  rR   r	  r   r   r   r   )r   r   r  num_includesr   r  r  r  	types_lstr  r   r   s               r   r   zRecompiler.write_py_source_to_f  s   z 	$%%%#$$$ 4828b99|$$ 	M 	MA!X4Q7N4"3BQB7 6$oo! 4 4 4'' ...34 4 44
 *'45 5 5 D/3G2KKLLLL0@0@0@BCCC#t}&66777  00DDDODDD	4;;rwwy/A/A#B#B#B#BDEEENNdo6K6K6M6MNNNOO  	G 	GI*Y'C3xx!||	W 4 4DKK4D4D4D4DEFFF !DD		EE|1D1DEEEFFFFI J J J 	S					s   $A77&Bc                     | j         |         S r   )r   )r   types     r   _gettypenumzRecompiler._gettypenum  s    t$$r   c           
         d}t          |t          j                  r|                                s|                                r|j        dk    rd}d|j        z  }nt          |t          j                  rd|                    d          d}nT|                    d          }d|d|j                            dd	          }|d
v r| 	                    t                     d}nt          |t          j                  r|                     ||||           d S t          |t          j                  st          |t          j                  rH|                     d||                     |          |fz             |                     d|z             d S t          |t          j                  r3d|                    d          z  }d|                     |          z  }d}nt#          |          |                     d|d|d||d           |                     d|d|                    d          d|d           |                     d|z             d S )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 == (rO   z && PyErr_Occurred()))r   r   r   is_complex_typeis_integer_typer   UnknownFloatType
get_c_namereplacery   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22 $	*2;M;M;O;O $	*!!## =7(:(:,	!BG+B 677 	= 	= 8:}}R7H7H7H7HJ		b))3855357??33L3L3LN	444&&';<<<HHE-.. 	*33B497D D DFU677 	*U455	* JJO 0 0 4 4g>? @ @ @JJy7*+++FE122 	*02==3D3DDI)D,<,<R,@,@@HHH &b)))


			77HHHMNNN


EE2==$$$$hhh0 	1 	1 	1

9w&'''''r   c                     t          |t          j                  rA|                    d           |                    d           |                    d           d S d S )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  su    b%+,, 	KMM/000MMIJJJMM J K K K K K	K 	Kr   c                    |                      d           |                      d|                     |          ||fz             |                      d           |                      d|d|                    d          d           |                      d|                     |          ||fz             |                      d	           |                      d
|z             |                      d           d S )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'  r4  )r   r   r8  r9  r:  s        r   r7  z-Recompiler._convert_funcarg_to_c_ptr_or_arrayJ  s   

FGGG

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

+,,,


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

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

ABBB

;()))

5r   c                 (   t          |t          j                  r|                                r|j        dk    rd|d|j        dS t          |t          j                  rd|dS |j        dk    rV|                                sB|j                            dd          }|d	v r|                     t                     d
|d|dS d|| 
                    |          fz  S t          |t          j        t          j        f          rd|| 
                    |          fz  S t          |t          j                  r1d|| 
                    t          j        |j                            fz  S t          |t          j                  rI|j        (t#          d|                                d|d          d|| 
                    |          fz  S t          |t          j                  rd|| 
                    |          fz  S t)          |          )Nr)  z_cffi_from_c_int(r   rO   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   r2  r   r3  r1  r5  ry   r6  r'  r   r   	ArrayTyper  r   fldnames	TypeErrorr
  r   r3   )r   r   varcontextr=  s        r   _convert_expr_from_czRecompiler._convert_expr_from_cX  sP   b%122 	*!!## /7(:(:(:58SS"'''BBB 677 	/ 	/47CC99M))"2D2D2F2F)S11444&&';<<<05sss;;H))"--L/ / /U.0EFGG 	*ET%%b))I+ + +EO,, 	*ET%%e&7&@&@AAIC C CE/00 
	*{"iNN$$$$ggg!/ 0 0 0ET%%b))I+ + +EN++ 	*DT%%b))H+ + + &b)))r   c                 6    |                      |d|d          S )Nz(*(z *)0))_global_typer   r   r   s      r   _typedef_typezRecompiler._typedef_type{  s!      TTT%;<<<r   c                 X    |                      |                     ||                     d S r   )r   rR  rQ  s      r   !_generate_cpy_typedef_collecttypez,Recompiler._generate_cpy_typedef_collecttype~  s,    d00T::;;;;;r   c                     d S r   r%   rQ  s      r   _generate_cpy_typedef_declz%Recompiler._generate_cpy_typedef_decl      r   c                 |    | j         |         }| j        d                             t          ||                     d S )Nr   )r   r   r   ri   )r   r   r   rA   s       r   _typedef_ctxzRecompiler._typedef_ctx  s9    _R(

:%%l4&D&DEEEEEr   c                 X   |                      ||          }|                     ||           t          |dd           dk    r|                     ||j        d            d S t          |t          j                  r/|                     |j        |j        j        |j        |           d S d S )Noriginunknown_type)
approxname)r]  	named_ptr)	rR  rY  r   _struct_ctxr   r   r   NamedPointerTypetotyperQ  s      r   _generate_cpy_typedef_ctxz$Recompiler._generate_cpy_typedef_ctx  s    D))"d###2x&&.88RT:::::E233 	+RY	27')  + + + + +	+ 	+r   c                     |                      |                                           |j        r| j        s|                      |           d S d S d S r   )r   r   ellipsisrs   rQ  s      r   "_generate_cpy_function_collecttypez-Recompiler._generate_cpy_function_collecttype  sd    b0022333; 	&t4 	&!!"%%%%%	& 	& 	& 	&r   c           
      ,   | j         rJ t          |t          j                  sJ |j        r|                     ||           d S | j        }t          |j                  }|dk    rd}n|dk    rd}nd}g }g }d|z  }t          |j                  D ]I\  }	}
|
                    |
                    d|	z  |                     |
                    d|	z             Jd	                    |          }|pd
}|j        r|j        dz   }nd}|d|d|d} |d|j                            |                      |d           d	                    |          }d}t          |j        t          j                  rd} |d||d|d            |d            |d            |d            |d|d|d            |d           d|z  }t          |j                  D ],\  }	}
|
                    d|	z  |          } |d|z             -t!                      }t!                      }|j        D ]}
|                     |
||           t%          |          D ]} |d|d           t          |j        t          j                  s<d}d|z  }d|j                            d|          z  } ||            |d           nd }d}t          |j                  dk    rt'          t          |j                            }|D ]}	 |d |	z              |              |d!|t          |          t          |          d	                    d" |D                       fz              |d#            |             t          |j                  D ]-\  }	}
|                     |
d$|	z  d|	z  d%            |             . |d&            |d'           d( t'          t          |j                            D             }d	                    |          } |d)||d|d*            |d+            |d,            |              |d-           |dk    r |d.           |rG |d/|                     |j        d0d1          z             |D ]} |d|z               |d2           n)|D ]} |d|z               |d3            |d4            |d            |d5           d6 }d7}g }g }d|z  }t          |j                  D ]`\  }	}
d} ||
          rd8}d9}|
                    d:||	fz  |          }|
                    |           |
                    d;||	fz             a|j        } ||          rCd|z  }|                    d<|          }|                    d|           t          j        }d }d=}d9}|rd	                    |          }|pd
}|d|d|d} |d|                    |                      |d           |r ||           d	                    |          } |d)||d|d*           |r |d>            |d           n |d?|d@|            |dA            |             d S )BNr   noargr   arg0r   argument of %sz x%dx%dr   voidr.   r5   _cffi_d_r  rO   static r   zreturn r/  r0  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))c                     g | ]}d |z  S )z&arg%dr%   r!  s     r   rL   z:Recompiler._generate_cpy_function_decl.<locals>.<listcomp>  s    555A8a<555r   r   zarg%dzreturn NULLz  Py_BEGIN_ALLOW_THREADSz  _cffi_restore_errno();c                     g | ]}d |z  S )rj  r%   r!  s     r   rL   z:Recompiler._generate_cpy_function_decl.<locals>.<listcomp>  s    AAA%!)AAAr     { 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                  p-t          | t          j                  o|                                 S r   )r   r   r   PrimitiveTyper1  )r&  s    r   need_indirectionz@Recompiler._generate_cpy_function_decl.<locals>.need_indirection  s@    tU%899 -e&9:: ,))++.r   Fr   Tz %sx%dz%sx%dz *resultz
*result = z  return result;z#  define _cffi_f_z	 _cffi_d_r   )rs   r   r   r   rd  _generate_cpy_constant_declr   r0   r   r   r   r4  rR   abirt  r   r   rD  r   r"  r?  rN  insert	void_type)r   r   r   r  numargsargname	argumentscall_argumentsrM  r   r&  repr_argumentsry  name_and_argumentsresult_codeargrB  rC  r   result_declrngfreelinerw  
differenceindirection	tp_results                             r   _generate_cpy_function_declz&Recompiler._generate_cpy_function_decl  sw   (((("e344444; 	 ,,R666Fzbg,,a<<GG\\GGG 	"T) )) 	- 	-GAtT__VaZAABBB!!%!),,,,9--'166 	&3,CCC3633nnnMBI001CDDDFGGGS			>22bi00 	Kkk444@AAAS			#$$$ !!!444IJJJS			"T) )) 	  	 GAt//&1*g66CD3EE	EE	G 	D 	DD''iCCCC9%% 	$ 	$DDDDDD"####")U^44 	%K$t+G!BI$8$8G$L$LLKDD())))KKrw<<!BG%%C / /)A-....DFFFDDc#hhC		5555566H8 8 9 9 9 D#$$$ )) 	 	GAt&&tWq[%!)'46 6 6DFFFF'((('(((AAU3rw<<-@-@AAA>22++ttt^^^DEEE$%%%%&&&)***a<<D./// 
	&D#**29hNNO P P P% & &TH_%%%%D%&&&&% & &TH_%%%%D()))D$%%%S			W	. 	. 	. 
	"T) )) 	> 	>GAtK%% "!!
//(k1-="=wGGCS!!!!!'[!,<"<====I	I&& 	$t+G&&z7;;CQ$$$IK&KJ 	C!YYy11N+5vN7:ssDDD7E~~"GDD	 4 45G H H HJKKKDIII "[!!!!YY~66NDDkk444HIII )'(((DIIIIDDdddDDABBBXr   c           
         |j         r| j        s|                     ||           d S | j        |                                         }t          |j                  }| j        rt          }n#|dk    rt          }n|dk    rt          }nt          }| j        d                             t          |d|z  t          ||          d|z                       d S )Nr   r   r   z
_cffi_f_%sz
_cffi_d_%s)r   )rd  rs   _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   r|  	meth_kinds         r   _generate_cpy_function_ctxz%Recompiler._generate_cpy_function_ctx;  s    ; 	t4 	++B555F_R%7%7%9%9:
bg,,  	*&II\\)II\\)II)I
8##t\D0i44(4/1 1 1	2 	2 	2 	2 	2r   c                     t          |t          j                  r_|j        }|dk    r|                    d          }d|d|d}|                     |d|z  |j                  }t          j        ||          }|S )N...r   z_cffi_array_len((()0)->rO   %s[0])r   r   rI  r   r4  r   r  )r   	tp_struct
field_nametp_fieldactual_lengthptr_struct_nametp_items          r   r   zRecompiler._field_typeQ  s    h00 	?$OM%%"+"6"6s";";#OOZZZ!1&&y'J2F'/}6 6Gw>>Hr   c                     |                      |           | j        r,|                                D ]}|                     |           d S d S r   )r   rs   anonymous_struct_fields_struct_collecttype)r   r   fldtypes      r   r  zRecompiler._struct_collecttype]  sg    b!!!  	25577 2 2((1111	2 	22 2r   c           
      $   |j         d S | j        }d|} |d            |d|d|d            |d            |d            |d           |                     |          D ]\  }}}}		 |                                s|d	k    r|d
k    r |d|d|d|d           >t	          |t
          j                  rJ|j        |j        dk    r8|j        }|dz   }t	          |t
          j                  r|j        -|j        dk    8 |d|	                    dd|z  |	          d|d           # t          $ r%}
 |dt          |
          z             Y d }
~
d }
~
ww xY w |d            |d|d|d            |             d S )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]rs  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   r2  r   r   rI  r   r  r4  r   r   )r   r   r=  r]  r  checkfuncnamefnameftyper+   fqualr   s              r   _struct_declzRecompiler._struct_decld  s;   ;Fz/9z;uuu=>>>S			GHHH\-1->->r-B-B 	, 	,)E5(E,((** h!mm{{05uuueeeE F F F "%99 *!L0ELE4I4I!JE!EME "%99 *!L0ELE4I4I $$VZ-=U$KKKKEE     % , , ,\CFF*++++++++,S			:::uuuMNNNs   15D7'BD77
E&E!!E&Nc                    | j         |         }d }g }t          |t          j                  r|                    d           |j        |                    d           d}|| j        j        j        vr||| j        j        j        vr|j        n>|j	        s!t          |                                          rn|                    d           |j        r:|j        dk    rt          |d|j        d          |                    d           n|                    d	           d
}d                    |          pd}g }|t          |                     |                    }	|	D ]\  }
}}}|                     ||
|          }|                     |d|j        d|
d           t(          }|dk    rt*          }d|z  }nK|!t          |t          j                  r
|j        d}n%d||                    d          n|j        d|
d}||dk    rd}n-|d|j        d|
d}nd|                    d          d|
d}|                    t3          |
|||t5          || j         |                                        t7          | j        d                   }| j        d                             |           |d}d}d }n'|d!|j        d"}d#}nd$|d}d%|d&}d }nd}d'}d'}|}| j        d(                             t=          |j        |||||||                     | j                             |           d S ))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  rO   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   rq   r   r   partialanyr  packedr3   rR   r  r   r   _check_not_opaquer   r9   r:   rI  r   r4  r'   r   r0   r   extendr?   r   rA  )r   r   r=  r]  r^  rA   reason_for_not_expandingrB   rF   r   fldnamer  r+   r  r8   r   offsetrE   alignrD   s                       r   r_  zRecompiler._struct_ctx  s   _R(
#' b%/** 	*LL)));LL)***'/$dh&==="$("2"III{" 5s2#=#=#?#?@@ 53444y /9q==- RYYY() ) )
 -...LL+,,,'1$&3#+d//3344J5? E E1(E**2w@@&&ww:<'''777'KM M M q==$B*X5DD]"7EO<< #.'DD /8.?c***09? ?!D =HMM)FF**!1FF + 46==3D3D3D3DgggNFgvtX$R)ABBD DE E E E !$DJw$7 8 8Jw&&x000}##((/8~~~?D8EE ) ,1552DDDNJJPEDE ".G
>"))BGZeW-x9 9	: 	: 	: 	 $$R(((((r   c                     t          |t          j                  r!|j        }t          |t          j                  !t          |t          j                  r|j        t          d|z            d S d S )Nz0%s is of an opaque type (not declared in cdef()))r   r   rI  r  r   r   rK  )r   r   locations      r   r  zRecompiler._check_not_opaque  s    U_-- 	B U_-- 	b%-.. 	O2;3FBXMO O O	O 	O3F3Fr   c                    t          | j                                                  }|                    d            |D ]\  }}|| j        vr|j        rt          d|d          |j                            d          r1|j        dd          	                                r|j        dd          }nA|j        dk    r$|j
        dk    rd}|                     |d           nt          d|          |                     |d |           d S )	Nc                     | d         S )Nr   r%   )tp_orders    r   r   z7Recompiler._add_missing_struct_unions.<locals>.<lambda>  s
    hqk r   r|   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	forcenamerY  r_  )r   r   r   orderr]  s        r   r   z%Recompiler._add_missing_struct_unions  sJ   
 4&,,..//11222 	7 	7IB111: D-->@bb/C D D D 7%%c** 5rwqrr{/B/B/D/D 5!#JJW
**r|v/E/E!'J%%b&1111--/1r/4 5 5 5  T:666	7 	7r   c                 0    |                      |           d S r   )r  rQ  s      r    _generate_cpy_struct_collecttypez+Recompiler._generate_cpy_struct_collecttype  s      $$$$$r   c                 r    |                     d          }d|v r||                    dd          fS |d|z   fS )Nr5   r.   r   )r4  r5  )r   r   r=  s      r   _struct_nameszRecompiler._struct_names  sD    b!!%<<%--S1111#+%%r   c                 H     | j         |g|                     |          R   d S r   )r  r  rQ  s      r   _generate_cpy_struct_declz$Recompiler._generate_cpy_struct_decl  s1    "6t11"55666666r   c                 H     | j         |g|                     |          R   d S r   )r_  r  rQ  s      r   _generate_cpy_struct_ctxz#Recompiler._generate_cpy_struct_ctx	  s1    5d0044555555r   c                     t          |t          j                  r|                     ||           d S |                     |           d S r   )r   r   r   _generate_cpy_enum_collecttyper  rQ  s      r   #_generate_cpy_anonymous_collecttypez.Recompiler._generate_cpy_anonymous_collecttype  sL    b%.)) 	)//D99999$$R(((((r   c                     t          |t          j                  r|                     |           d S |                     ||d|z              d S Ntypedef_)r   r   r   _generate_cpy_enum_declr  rQ  s      r   _generate_cpy_anonymous_declz'Recompiler._generate_cpy_anonymous_decl  sS    b%.)) 	;((,,,,,b$
T(9:::::r   c                     t          |t          j                  r|                     ||           d S |                     ||d|z              d S r  )r   r   r   	_enum_ctxr_  rQ  s      r   _generate_cpy_anonymous_ctxz&Recompiler._generate_cpy_anonymous_ctx  sS    b%.)) 	:NN2t$$$$$RzD'899999r   constc                 B   ||f| j         v rt          d|d|d          | j                             ||f           | j        }d|d|}|ry |d|z              |d            |d|d	            |d
|d|d           |&|dk    rd|fz  } |d|d            |d            |d            |d           nM|J  |d|z              |d            |d|                    d          d|d            |d            |             d S )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 = ro  )r  r   rA  r   r4  )r   is_intr   r   categoryr   r  funcnames           r   _generate_cpy_constzRecompiler._generate_cpy_const&  s   dt333##6>hhEG G G  (D!1222z$,HHdd3 	D7(BCCCDIIIDD4441222DD:>$$F G G G&??"';."8K[[[JKKK]###DDIIII&&&D*X5666DIIIDDR]]3%7%7%7%7>???DIIIr   c                 n    |                                 }|r| j        r|                     |           d S d S r   )r2  rs   r   r   r   r   r  s       r   "_generate_cpy_constant_collecttypez-Recompiler._generate_cpy_constant_collecttypeD  sI    ##%% 	&. 	&!!"%%%%%	& 	&r   c                 \    |                                 }|                     |||           d S r   )r2  r  r  s       r   rx  z&Recompiler._generate_cpy_constant_declI  s1    ##%%  r22222r   c                 2   | j         s*|                                rt          t          d          }n3| j         rt          }nt
          }| j        |         }t          ||          }| j        d                             t          |d|z  |                     d S )Nr   r   _cffi_const_%s)
rs   r2  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  s    $ 	5););)=)= 	5_b11GG$ ),

(
,JZ44G
8##t-4g>>	@ 	@ 	@ 	@ 	@r   c                 0    |                      |           d S r   )r   rQ  s      r   r  z)Recompiler._generate_cpy_enum_collecttype]  s    b!!!!!r   c                 F    |j         D ]}|                     d|           d S )NT)enumeratorsr  )r   r   r   
enumerators       r   r  z"Recompiler._generate_cpy_enum_decl`  s6    . 	7 	7J$$T:6666	7 	7r   c           	         | j         |         }t          t          d          }| j        r|                                 t          |j        |j                  D ]9\  }}| j        d         	                    t          |d|z  ||                     :|d|vr| j        sd|z  }d|z  }nn|                    | j        g           }	| j                            |	          }t          t          | j                            |	d                    dk               }d	                    |j                  }
| j        d
         	                    t#          |j        ||||
                     d S )Nr   r   r  r   r  z
sizeof(%s)z((%s)-1) <= 0r   rN   r   )r   r   OP_ENUMrs   check_not_partialzipr  
enumvaluesr   r   r   build_baseinttyperq   sizeofintcastrR   rU   r   )r   r   r=  rA   r   r  	enumvaluer   rX   basetprY   s              r   r  zRecompiler._enum_ctxd  s{   _R(
"%%  	#  """%(%G%G 	3 	3!J	Jx '':'7*'Dg'02 2 23 3 3 3 E!1!1$:O!1%'D$u,FF))$(B77F8??6**DTX]]626677!;<<F88BN++
6!!RWj$AA	C 	C 	C 	C 	Cr   c                 V    |                      ||                                           d S r   )r  r
  rQ  s      r   _generate_cpy_enum_ctxz!Recompiler._generate_cpy_enum_ctxy  s&    r2>>++,,,,,r   c                     d S r   r%   rQ  s      r   _generate_cpy_macro_collecttypez*Recompiler._generate_cpy_macro_collecttype  rW  r   c                 L    |dk    rd }n|}|                      d||           d S )Nr  Tr  )r  )r   r   r   r   s       r   _generate_cpy_macro_declz#Recompiler._generate_cpy_macro_decl  s8    ;;KKK  t EEEEEr   c                     |dk    r| j         rt          d|d          d }n|}t          t          d          }| j        d                             t          |d|z  ||                     d S )Nr  z(cannot use the syntax '...' in '#define z ...' when using the ABI moder   r   r  r  )rs   r   r   r  r   r   r   )r   r   r   r   r   s        r   _generate_cpy_macro_ctxz"Recompiler._generate_cpy_macro_ctx  s    ;;$ 4'',0DD34 4 4 KKK"--
8##t-4g#.0 0 0	1 	1 	1 	1 	1r   c                     t          |t          j                  rF|j        }|dk    rd|d}|                     |j        d|z            }t          j        ||          }|S )Nr  z_cffi_array_len(rO   r  )r   r   rI  r   rP  r  )r   r   global_namer  r  s        r   rP  zRecompiler._global_type  si    b%/** 	9IM%%%9D F'';1FGGG-88B	r   c                 X    |                      |                     ||                     d S r   )r   rP  rQ  s      r   "_generate_cpy_variable_collecttypez-Recompiler._generate_cpy_variable_collecttype  s,    d//D99:::::r   c                 Z   | j         }|                     ||          }t          |t          j                  r|j        
|j        }d}nd}d|d} |d|                    || j                  z               |d            |d|d	|d
            |d            |             d S )Nr5   &z*_cffi_var_r  rm  r  r   z	  return r  r0  r   )	r   rP  r   r   rI  r   r  r4  r   )r   r   r   r  	ampersandr   s         r   _generate_cpy_variable_declz&Recompiler._generate_cpy_variable_decl  s    zr4((b%/** 	ry/@BIII )-.Yt43FGGGHHHS			999ddd3444S			r   c           
          |                      ||          }| j        |         }| j        rt          }nt          }| j        d                             t          |d|z  t          ||                               d S )Nr   z_cffi_var_%s)	rP  r   rs   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  s    r4((_R(
  	!BB B
8##t^d2F2z4J4JKK	M 	M 	M 	M 	Mr   c                 h    t          |t          j                  sJ |                     |           d S r   )r   r   r   r   rQ  s      r   '_generate_cpy_extern_python_collecttypez2Recompiler._generate_cpy_extern_python_collecttype  s5    "e344444b!!!!!r   c           	         | j         }t          |j        t          j                  rd}n$d|z  }d|j                            d|          d} |d|z              |d| j        d|d	|d
            |             g }d|z  }t          |j                  D ]3\  }}	|	                    d|z  |          }
|	                    |
           4d
                    |          }|pd}|d|d}|j        dk    rd|z   }d }t          t          |j                  dz  d          } ||j                  rt          |d          }t          |j        t          j                  r9d|j                            d          ||j                            d          |fz  } |||j                            |                      |d            |d|z              |d           t          |j                  D ]o\  }}	d|z  }
t          |	t          j                  s ||	          rd|
z   }
t          j        |	          }	 |d|	                    d          |dz  |
fz             p |d|z             t          |j        t          j                  s' |d|j                            d          d            |d             |             | xj        d!z  c_        d S )"Nr  rp  z(int)sizeof(r5   rO   z3static struct _cffi_externpy_s _cffi_externpy__%s =r   r   r/   z	, 0, 0 };ri  z a%dr   rk  r  	__stdcallz_cffi_stdcall c                 L    t          | t          j                  o
| j        dk    S )NrG  )r   r   rv  r   r   s    r   may_need_128_bitsz9Recompiler._extern_python_decl.<locals>.may_need_128_bits  s&    r5#677 -G},.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   rt  r   r   r4  rr   r   r   r   rR   ry  rw   r0   r   r   r  )r   r   r   tag_and_spacer  size_of_resultrM  r~  r   r&  r  r  r  r  	size_of_as                  r   _extern_python_declzRecompiler._extern_python_decl  sl   zbi00 	4 NN$t+GG	$$R11114NBTIJJJdddNNN4 	5 	5 	5	"T) )) 	" 	"GAt//&1*g66CS!!!!9--'16)-~~~>6[  !14F!F	. 	. 	. BGQ**	RY'' 	+Ir**Ibi!455 	5;	$$R(()	$$R(()?5 5I 	}}bi&:&:;M&N&N&NOPPPS			_y())) )) 	M 	MGAt!)C4!455 /%%d++/Ci(..D(DOOC,@,@!A#s+KKLLLL;dBCCC")U^44 	DDDry';';C'@'@'@'@BCCCS			ar   c                 4    |                      ||d           d S )Nrm  r  rQ  s      r    _generate_cpy_extern_python_declz+Recompiler._generate_cpy_extern_python_decl  s       T955555r   c                 4    |                      ||d           d S )NzCFFI_DLLEXPORT r   rQ  s      r   #_generate_cpy_dllexport_python_declz.Recompiler._generate_cpy_dllexport_python_decl
  s!      T+<=====r   c                 4    |                      ||d           d S )Nr5   r   rQ  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                             t          |d|z  ||                     d S )Nz,cannot use 'extern "Python"' in the ABI modez$a vararg function is extern "Python"r   z&_cffi_externpy__%s)
rs   r   rd  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  s      	B#@B B B; 	P%&NOOO_R(
):66
8##t2T97DII	K 	K 	K 	K 	Kr   c                 r   | j         } |d           t          |t                    s|                    d          }n|                    d           	 |                    d           n# t
          $ r d|z   }Y nw xY w|                    d          D ]}|}t          d          t          u rt          t          |          }nt          |          dd         } |d	|z                                              d
}|D ]+}t          |          dk    r ||           d
}|d|fz  z  }, ||           d S )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  su   zLMMM!U## 	!!AAHHW	2HHW! 	2 	2 	2-1AAA	2LL&& 	 	DGDzzU""3~~  ..2.D%'/))++,,,L - -|$$**D&&&#%L,D	 	s   A* *A<;A<c                 J    t          t          t                    | j        |<   d S 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        |<   d S r   )PRIMITIVE_TO_INDEXr   r   r9  r   )r   r   r  rg   s       r   _emit_bytecode_PrimitiveTypez'Recompiler._emit_bytecode_PrimitiveType@  s*    '0
!'j!A!Ar   c                 v    d|j         d|j         d|j         d}t          t          |          | j        |<   d S )Nz_cffi_prim_int(sizeof(z), (
           ((z)-1) | 0 /* check that z' is an integer type */
         ) <= 0)r   r   r9  r   r   r   r  r4  s       r   !_emit_bytecode_UnknownIntegerTypez,Recompiler._emit_bytecode_UnknownIntegerTypeD  sD      $&777BGGGRWWW> "(a!8!8r   c                 f    d|j         d|j         d}t          t          |          | j        |<   d S )Nz_cffi_prim_float(sizeof(z) *
           (((z6)1) / 2) * 2 /* integer => 0, float => 1 */
         )rA  rB  s       r   _emit_bytecode_UnknownFloatTypez*Recompiler._emit_bytecode_UnknownFloatTypeJ  s<       WWWbggg/ "(a!8!8r   c                 
   t          t          | j        |j                           | j        |<   |dz  }|j        D ]h}| j        |         }||k    rNt          |t          j                  r| 	                    ||           nt          t          |          | j        |<   |dz  }it          |j                  }|j        (|j        dk    r|dz  }nt          d|j                  t          t          |          | j        |<   d S )Nr   r  r\   zabi=)r   OP_FUNCTIONr   rt  r   r   r   r   rv  r?  r9   r  rd  ry  r3   OP_FUNCTION_END)r   r   r  r   	realindexrB   s         r   _emit_bytecode_RawFunctionTypez)Recompiler._emit_bytecode_RawFunctionTypeP  s   !'T_RY5O!P!P
7 	 	C,I	!!c5#677 H55c5AAAA-3GY-G-GDOE*QJEEBK  6v$$
))bff*>???!'!?!?r   c                 `    t          t          | j        |j                           | j        |<   d S r   )r   
OP_POINTERr   ra  r   r;  s      r   _emit_bytecode_PointerTypez%Recompiler._emit_bytecode_PointerTypec  s'    !'
DOBI4N!O!Or   c                 ~    |                                 }t          t          | j        |                   | j        |<   d S r   )r   r   rL  r   r   )r   r   r  raws       r   _emit_bytecode_FunctionPtrTypez)Recompiler._emit_bytecode_FunctionPtrTypei  s6      ""!'
DOC4H!I!Ir   c                    | j         |j                 }|j        t          t          |          | j        |<   d S |j        dk    r4t          dt          |                              dd          d          | j        |dz            dk    sJ t          t          |          | j        |<   t          d t          |j                            | j        |dz   <   d S )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   r5  OP_ARRAY)r   r   r  
item_indexs       r   _emit_bytecode_ArrayTypez#Recompiler._emit_bytecode_ArrayTypem  s    _RW-
9%+M:%F%FDOE"""Y%## GGOOIu555589 9 9
 ?519-6666%+Hj%A%ADOE")/c")nn)E)EDOEAI&&&r   c                 Z    | j         |         }t          t          |          | j        |<   d S r   )r   r   OP_STRUCT_UNIONr   )r   r   r  struct_indexs       r   _emit_bytecode_StructTypez$Recompiler._emit_bytecode_StructType{  s+    *2.!'!F!Fr   c                 Z    | j         |         }t          t          |          | j        |<   d S r   )r   r   r  r   )r   r   r  
enum_indexs       r   _emit_bytecode_EnumTypez"Recompiler._emit_bytecode_EnumType  s)    [_
!'!<!<r   F)r5   r   )Nr  N)Vr"   r#   r$   r  r   ry   r   r   r   r   r   r   r   r   r   r   r  r   r'  r?  rD  r7  rN  rR  rT  rV  rY  rb  re  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  rx  r  r  r  r  r  r  r  r  rP  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<  r?  rC  rE  rJ  rM  _emit_bytecode_ConstPointerType_emit_bytecode_NamedPointerTyperP  rU  rY  _emit_bytecode_UnionTyper\  r%   r   r   ro   ro   ~   s       M% % % %0 0 081 81 81t	< 	< 	<- - -&  & HGGI, , ,># # # #2 2 2  k k kZ" " "0 0 0h% % %+( +( +(ZK K K  * * *F= = =< < <  F F F+ + +& & &
` ` `D2 2 2,
 
 
2 2 2     DT) T) T) T)lO O O7 7 7.% % %&F#& & &7 7 786 6 66) ) ); ; ;: : : CJ(,   <& & &
3 3 3@ @ @ " " "7 7 7 7C C C*- - -  F F F1 1 1"  ; ; ;  .M M M" " "
 ...44  4  4 l6 6 6> > >/ / /	K 	K 	K &&&,  <A A AB B B9 9 99 9 9@ @ @&P P P 'A#&@#J J JF F FG G G  9= = = = =r   ro   )r	   c                        e Zd Z fdZ xZS )NativeIOc                     t          |t                    r|                    d          }t          t          |                               |           d S )Nr*  )r   unicoder-  superri  r   )r   r4  r   s     r   r   zNativeIO.write  sJ    !W%% &HHW%%(D!!''*****r   )r"   r#   r$   r   __classcell__)r   s   @r   ri  ri    s8        	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+r   ri  c                 "    t          | d          S )Nr   )hasattr)	maybefiles    r   _is_file_likerq    s    9g&&&r   c                    |rt          d|           t          | ||d u           }|                                 |                                 t	          |          r|                    ||           dS t                      }|                    ||           |                                }	 t          |d          5 }|	                    t          |          dz             |k    rt          	 d d d            n# 1 swxY w Y   |rt          d           dS # t          $ r d|t          j                    fz  }	t          |	d	          5 }|                    |           d d d            n# 1 swxY w Y   	 t          j        |	|           n9# t           $ r, t          j        |           t          j        |	|           Y nw xY wY dS w xY w)
Nzgenerating )rs   Tr   r   z(already up-to-date)Fz%s.~%dw)printro   r   r   rq  r   ri  getvaluer   readr0   IOErrorr   getpidr   renameOSErrorunlink)
rq   rr   r   target_fileverbose
recompilerr   outputf1tmp_files
             r   _make_c_or_py_sourcer    sw    0.///C.6$.>A A AJ!!###""$$$[!! $$[(;;;t

A  H---ZZ\\F+s## 	rwws6{{Q''611 2	 	 	 	 	 	 	 	 	 	 	 	 	 	 	  	*()))u 	 	 	{BIKK88(C   	BHHV	 	 	 	 	 	 	 	 	 	 	 	 	 	 		-Ih,,,, 	- 	- 	-Ik"""Ih,,,,,	- tt	s~   1D 1C?3D ?DD DD 2GE1%G1E5	5G8E5	9G=FG3G	GG		GGFc                 0    |J t          | ||||          S r   r  )rq   rr   r   target_c_filer}  s        r   make_c_sourcer    s+    [(M ') ) )r   c                 (    t          | |d ||          S r   r  )rq   rr   target_py_filer}  s       r   make_py_sourcer    s    [$ ') ) )r   c                    |                     d          }	 t          j        t          j        j        | g|d d         R             n# t
          $ r Y nw xY w|dxx         |z  cc<   t          j        j        | g|R  |fS )Nr   r   )r   r   makedirsr   rR   rz  )	outputdirmodname	extensionpartss       r   _modname_to_filer    s    MM#E
BGL8U3B3Z8889999   	"IIIIII7<	*E***E11s   1A	 	
AAc                 x    t          ||          }|                     |||f           t          |||           |S r   )r   r   setattr)	patchlistclsr   new_metholds        r   _patch_methr    sC    
#t

Cc4%&&&Cx   Jr   c                 T    t          |           D ]\  }}}t          |||           d S r   )reversedr  )r  r  r   old_meths       r   _unpatch_methsr    s?    '	2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	|          d S d S )
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 r=t          | j                   | _         | j                             d          }d| j         |<    | g|R 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  sc    DN**!%dn!5!5N((3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 	:99999#	<1GAAC C C |x666666	? 	? 	? 	? 	? "-Y	-A-B"D "D  r   c                     ddl m}                     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           d S )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    s    222222 t <7""fFF\X%%hFFeOF	9&8----/ / / / /r   r   T.cc                 B   t          |t                    s|                    d          }| j        r|                     |           ||rt          |          rt          d          | j        d u}|r|                     |           |0t          |||          \  }}|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k    rt%          ||	           |r<|dk    rd}nd}t'          |d	t          j                            |                     t          j        |           t          j        d|||
          }t          j        |           t/          |           n(# t          j        |           t/          |           w xY w|S ||fS |t          ||d
          \  }}t1          | |||          }|r|S d |fS )Nr*  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 tor.   z.py)r   r   r-  _windows_unicode_apply_windows_unicoderq  rK  r  _apply_embedding_fixr  r   r   rR   r   get_extensionr  getcwdr  r  rt  abspathchdircompiler  r  )rq   rr   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'' 2!((11
 )""4((( 	9}V44 	9 8 9 9 9^4/	 	+$$T***>,V[-=? ?MFE +!
U*u-JJJ> +- 	+JLLtLLCCC[(F(8: : : 	 I)++C* 4(333S==%i888# D}}8@SSS"'//&*A*A*ABCCC   !,!4S#5Eu"N "N y)))) y))))!!<>(eDDIFA k6)9; ; ; 	!M= s   BG %G'r]  )	r   TNr  Nr   NNT)"r   r  ior5   r   r   errorr   cffi_opcodert   r  r6  r  version_infor  r   r'   r?   rU   ri   ro   StringIOri  BytesIOrq  r  r  r  r  r  r  r  r  r  r%   r   r   <module>r     s                               $ $ $ $ $ $      <7* .c.>.G .#v- 1 1 1 1 1 1 1 1 ) ) ) ) ) ) ) )8# # # # # # # #:? ? ? ? ? ? ? ?0	K 	K 	K 	K 	K 	K 	K 	KD= D= D= D= D= D= D= D=N( t{HH+ + + + +2: + + +' ' '  >) ) ) )
) ) ) )2 2 2  % % %D D D./ / /" GK;?59#C! C! C! C! C! C!r   