Viewing File: /opt/alt/python38/lib64/python3.8/site-packages/cffi/__pycache__/recompiler.cpython-38.pyc

U

ل=^@sddlZddlZddlZddlmZmZddlmZddlTdZ	dZ
dZGd	d
d
ZGdddZ
Gd
ddZGdddZGdddZGdddZejdkrejZnGdddejZddZd.ddZd/ddZdd Zd!d"Zd#d$Zd%d&Zd'd(Zd0d,d-ZdS)1N)ffiplatformmodel)VerificationError)*i&i'i(c@s&eZdZd	ddZddZddZdS)

GlobalExprrcCs"||_||_||_||_||_dSN)nameaddresstype_opsizecheck_value)selfr	r
rrr
r/recompiler.py__init__s
zGlobalExpr.__init__cCsd|j|j|j|jfS)Nz'  { "%s", (void *)%s, %s, (void *)%s },)r	r
r	as_c_exprrrrrrrszGlobalExpr.as_c_exprcCsd|j|j|jfS)Nz
b'%s%s',%d)ras_python_bytesr	r
rrrras_python_exprszGlobalExpr.as_python_exprN)rr__name__
__module____qualname__rrrrrrrrs
rc@s,eZdZddZddZddZddZd	S)
	FieldExprcCs"||_||_||_||_||_dSr)r	field_offset
field_sizefbitsize
field_type_op)rr	rrrrrrrrs
zFieldExpr.__init__cCs>dt|j}d|j|jfd||jfd||jfS)N z  { "%s", %s,
z     %s   %s,
z     %s   %s },)lenr	rrrr)rZspacesrrrr#szFieldExpr.as_c_exprcCstdSr)NotImplementedErrorrrrrr)szFieldExpr.as_python_exprcCsD|jjtkrd}n|jjtkr*t|j}ntd|j||jfS)Nz	b'%s%s%s')	ropOP_NOOPOP_BITFIELDformat_four_bytesrr!rr	)rZ	size_exprrrras_field_python_expr,s
zFieldExpr.as_field_python_exprN)rrrrrrr'rrrrrsrc@s$eZdZddZddZddZdS)StructUnionExprc		Cs4||_||_||_||_||_||_||_||_dSr)r	
type_indexflagsr	alignmentcommentfirst_field_indexc_fields)	rr	r)r*rr+r,r-r.rrrr8szStructUnionExpr.__init__cCsPd|j|j|jfd|j|jfd|jt|jf|jrFd|jnddS)Nz  { "%s", %d, %s,z
    %s, %s, z%d, %d z	/* %s */ r"z},)	r	r)r*rr+r-r r.r,rrrrrCszStructUnionExpr.as_c_exprcCs>t|jt}dd|jD}dt|jt||jd|fS)NcSsg|]}|qSr)r').0Zc_fieldrrr
<listcomp>Lsz2StructUnionExpr.as_python_expr.<locals>.<listcomp>z(b'%s%s%s',%s),)evalr*ZG_FLAGSr.r&r)r	join)rr*Zfields_exprrrrrJszStructUnionExpr.as_python_exprNrrrrrr(7sr(c@s$eZdZddZddZddZdS)EnumExprcCs"||_||_||_||_||_dSrr	r)rsignedallenums)rr	r)rr6r7rrrrUs
zEnumExpr.__init__cCsd|j|j|j|j|jfS)Nz1  { "%s", %d, _cffi_prim_int(%s, %s),
    "%s" },r5rrrrr\szEnumExpr.as_c_exprc	Cs@ttttttttd|j|j	f}dt
|jt
||j|j
fS)N))rr)rr)r)r8r)r)r9r)r)r:rzb'%s%s%s\x00%s')Z
PRIM_UINT8Z	PRIM_INT8ZPRIM_UINT16Z
PRIM_INT16ZPRIM_UINT32Z
PRIM_INT32ZPRIM_UINT64Z
PRIM_INT64rr6r&r)r	r7)r
prim_indexrrrras 

zEnumExpr.as_python_exprNrrrrrr4Tsr4c@s$eZdZddZddZddZdS)TypenameExprcCs||_||_dSrr	r))rr	r)rrrrmszTypenameExpr.__init__cCsd|j|jfS)Nz  { "%s", %d },r=rrrrrqszTypenameExpr.as_c_exprcCsdt|j|jfS)Nzb'%s%s')r&r)r	rrrrrtszTypenameExpr.as_python_exprNrrrrrr<lsr<c@seZdZdZdddZddZddZd	d
ZddZd
ddddgZ	ddZ
dddZddZddZ
ddZddZdd Zd!d"Zd#d$Zd%d&Zd'd(Zd)d*Zd+d,Zd-d.Zd/d0Zd1d2Zd3d4Zd5d6Zd7d8Zd9d:Zd;d<Zd=d>Zd?d@Z ddBdCZ!dDdEZ"dFdGZ#dHdIZ$e$Z%dJdKZ&dLdMZ'e'Z(dNdOZ)e)Z*dPdQZ+dRdSZ,dTdUZ-ddWdXZ.dYdZZ/d[d\Z0d]d^Z1d_d`Z2ddadbZ3dcddZ4dedfZ5dgdhZ6didjZ7dkdlZ8dmdnZ9dodpZ:dqdrZ;dsdtZ<dudvZ=e=Z>Z?dwdxZ@dydzZAd{d|ZBd}d~ZCddZDeDZEZFddZGddZHddZIddZJddZKddZLddZMeMZNeMZOddZPddZQddZReRZSddZTdAS)
RecompilerrFcCs||_||_||_t|_dSr)ffimodule_nametarget_is_pythonVERSION_BASE_version)rr?r@rArrrr~szRecompiler.__init__cCst|j||_dSr)maxrC)rZverrrr
needs_versionszRecompiler.needs_versionc	Cs.i|_|dt|jtd}g|_|D]}|jr(|j|dksDtt|j|j|<|j||j	D]P}t
|tjtj
tjtjtjfst|j|dkrt|j|j|<|j|qf|jdq(|D]P}|js|j|dkrt|j|j|<|j||jr|jdk	r|jdqd|jks0ti|_i|_|D]8}t
|tjr^d|j|<nt
|tjr@d|j|<q@tt|jdddD]\}}||j|<qtt|jdddD]\}}||j|<q|D](}t|d|jj}|||j|q|jD]}t
|tstqt|j|_dS)	NZcollecttypekeyZENDLENcSs|jSrr	tprrr<lambda>z/Recompiler.collect_type_table.<locals>.<lambda>cSs|jSrrIrJrrrrLrMZ_emit_bytecode_)
_typesdict	_generatesortedstr
cffi_typesZis_raw_functionAssertionErrorr appendargs
isinstancerVoidTypeBasePrimitiveTypePointerTypeStructOrUnionOrEnumFunctionPtrTypeZ
is_array_typelengthvalues_struct_unions_enums
StructOrUnionEnumType	enumerategetattr	__class__rCffiOptuple)rZ	all_declsrKtp1imethodr#rrrcollect_type_tables`



zRecompiler.collect_type_tablecCst|tjs.t|tr*|D]}||qdS||jkrd|j|<t|tjr^||nlt|tjr|j	dk	r||j
jjkr|
D] \}}}}|||||qn|D]\}}||qdSr)rVrZBaseTypeByIdentityrf_do_collect_typerNr[as_raw_functionr`fldtypesr?_parser_included_declarations
enumfields_field_typeZ
_get_items)rrKxZname1rg_rrrrks"



zRecompiler._do_collect_typec
Cs|jjj}t|D]\}\}}|dd\}}zt|d||f}Wn tk
rhtd|YnXz||_	|||Wqt
k
r}	zt|	|W5d}	~	XYqXqdS)Nrrz_generate_cpy_%s_%sz"not implemented in recompile(): %r)
r?rnZ
_declarationsitemsrPsplitrcAttributeErrorr_current_quals	ExceptionrZattach_exception_info)
r	step_namelstr	rKqualsZkindZrealnamerierrrrOs"
zRecompiler._generateglobalfieldstruct_unionenumtypenamecCs(i|_|jD]}g|j|<qt|_|d||jD]4}|j|}|dkrb|jdddt||j|<q<|jd}|j	D],\}}|t
|kst||j|jkstqt
|t
|jkst|jd}|j
	D],\}}|t
|kst||j|jkstqt
|t
|j
ks$tdS)NZctxr~cSs|jSrrI)entryrrrrLrMz0Recompiler.collect_step_tables.<locals>.<lambda>rFrr)_lsts	ALL_STEPSset_seen_struct_unionsrO_add_missing_struct_unionssortrfr^rtr rSr	r_)rryrzrKrhrrrcollect_step_tabless*





zRecompiler.collect_step_tablesr"cCs|j|ddS)N
)_fwrite)rZwhatrrr_prntszRecompiler._prntcCs:|jr|dkst||n|dk	s*t|||dSr)rArSwrite_py_source_to_fwrite_c_source_to_f)rfpreamblerrrwrite_source_to_fs
zRecompiler.write_source_to_fcCs0ttjtjt|d}|}||S)Nr)openospathr3dirname__file__	readlinesclose)rfilenameglinesrrr_rel_readlinesszRecompiler._rel_readlinesc	Csb||_|j}|jjdk	r |d|d}|d}|d|||d<|d||jdd}|jjdk	r0|d	|jf|d
|	|jj|d|d|d
|f|d|d|f|d|d|f|d|d}|d}|d|||d<|d||
t|d|||||d||dtdd|j
D}t|jD]>\}}d}	||krd||}	|d|||	fq|js|d|d|t|_|di}
|jD]`}|j|}t||
|<|
|dkr|d ||f|D]}
||
q:|d|q|jjr|d!|jjD]f}z|jdd"\}}Wn(tk
rtd#|j|fYnX|dkrtd$|d%|fqz|d&|d||d'|d(|jD].}|
|dkr.|d)|n|d*|q|jD]$}|d+krD|d,|
||fqD|jjr~|d-n|d.|d/t|jfd}|jr|dO}|d0||d||d1|d2|d||d|d3|d4|f|d5|jr,|d6|d7|d8|d9|j|d:|d;|d<|d|d=|d>|d?|d@|dA|f|dB|dC|f|dD|dD|d|d3|dE|f|d5|dF|j|jf|d=|d|d3|dG|f|d5|dH|j|jf|d=|d||d1|dI|dd|_dS)JNz#define _CFFI_USE_EMBEDDINGz_cffi_include.hz#include "parse_c_type.h"
zparse_c_type.hrr".z#define _CFFI_MODULE_NAME  "%s"z1static const char _CFFI_PYTHON_STARTUP_CODE[] = {z0 };z#ifdef PYPY_VERSIONz5# define _CFFI_PYTHON_STARTUP_FUNC  _cffi_pypyinit_%sz#elif PY_MAJOR_VERSION >= 3z-# define _CFFI_PYTHON_STARTUP_FUNC  PyInit_%s#elsez*# define _CFFI_PYTHON_STARTUP_FUNC  init%s#endifz_embedding.hz#include "_cffi_errors.h"
z_cffi_errors.hz>/************************************************************/zstatic void *_cffi_types[] = {cSsg|]\}}||fqSrrr/rKrhrrrr0Gsz2Recompiler.write_c_source_to_f.<locals>.<listcomp>z // z/* %2d */ %s,%sz  0z};declrz.static const struct _cffi_%s_s _cffi_%ss[] = {z.static const char * const _cffi_includes[] = {r8Qffi object %r includes %r, 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  "%s",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= */ZPyMODINIT_FUNCz"_cffi_pypyinit_%s(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_%s(void) { return NULL; }z#  elsez     init%s(void) { }z#  endifzPyInit_%s(void)z5  return _cffi_init("%s", 0x%x, &_cffi_type_context);zinit%s(void)z.  _cffi_init("%s", 0x%x, &_cffi_type_context);z#  pragma GCC visibility pop)rrr?
_embeddingrindexr3r@ru_print_string_literal_in_arrayrEVERSION_EMBEDDEDdictrNrtrbrR_get_c_namerr_seen_constantsrOrrr _included_ffis_assigned_sourcervr
_num_externpyrC)rrrprntrrhZbase_module_nametypeindex2typer#r,Znumsryrzrffi_to_includeincluded_module_nameincluded_sourcer*rrrrs6


















zRecompiler.write_c_source_to_fcsbt|trd|fSt|ttfrZfdd|D}t|dkrJ|ddd|fS|S)Nzb'%s'csg|]}|qSr)_to_py)r/itemrrrr0sz%Recompiler._to_py.<locals>.<listcomp>rr"z(%s)r1)rVrQlistrfr rTr3r)rrrZreprrrrs


zRecompiler._to_pyc	Cs||_|j}|d|dt|jjp(d}t|D]n}|jj|}z|jdd\}}Wn&tk
rtd|j|fYnX|dk	rtd|d||fq4||d|j	f|d	|j
fd|_
t|j|_d
d|jD}|d|
d
|ftdd|jD}	|jD]>}
|j|
}t|dkr$|
dkr$|d|
|
|fq$|dkr|ddddt|Df|ddS)Nz# auto-generated filezimport _cffi_backendrr8rzMnot implemented yet: ffi.include() of a C-based ffi inside a Python-based ffizfrom %s import ffi as _ffi%dzffi = _cffi_backend.FFI('%s',z    _version = 0x%x,cSsg|]}|qSr)r)r/r#rrrr0sz3Recompiler.write_py_source_to_f.<locals>.<listcomp>z    _types = %s,r"cSsg|]\}}||fqSrrrrrrr0srr~z    _%ss = %s,z    _includes = (%s,),, cSsg|]}d|qS)z_ffi%drr/rhrrrr0s))rrr r?rrangerrvrr@rCrfrRrr3rrNrtrr)rrrZnum_includesrhrrrZ	types_lstrryrzrrrrsP




zRecompiler.write_py_source_to_fcCs
|j|Sr)rN)rtyperrr_gettypenumszRecompiler._gettypenumc	Csnd}t|tjr|s|r:|jdkr:d}d|j}nPt|tjrXd|df}n2|d}d||jddf}|d	kr|	t
d
}nt|tjr|||||dSt|tj
st|tjr|d||||f|d|dSt|tjr$d
|d}d||}d}nt||d||||f|d||d|f|d|dS)Nr"_BoolZ_cffi_to_c_intz, %sz(%s)_cffi_to_c_doublez(%s)_cffi_to_c_%srrsZchar16_tZchar32_tz-1z6  if (_cffi_to_c((char *)&%s, _cffi_type(%d), %s) < 0)z    %s;z(%s)_cffi_to_c_pointerz, _cffi_type(%d)ZNULLz  %s = %s(%s%s);z'  if (%s == (%s)%s && PyErr_Occurred()))rVrrXis_complex_typeis_integer_typer	UnknownFloatType
get_c_namereplacerEVERSION_CHAR16CHAR32rY"_convert_funcarg_to_c_ptr_or_arrayrZrrr[r!)	rrKfromvartovarerrcodeZextraargZ	convertercnameZerrvaluerrr_convert_funcarg_to_csP


z Recompiler._convert_funcarg_to_ccCs.t|tjr*|d|d|ddS)NzPy_ssize_t datasizez-struct _cffi_freeme_s *large_args_free = NULLzIif (large_args_free != NULL) _cffi_free_array_arguments(large_args_free);)rVrrYadd)rrK	localvars	freelinesrrr_extra_local_variables3s

z!Recompiler._extra_local_variablescCs|d|d||||f|d|d||df|d||||f|d|d||d	dS)
Nz1  datasize = _cffi_prepare_pointer_call_argument(z(      _cffi_type(%d), %s, (char **)&%s);z  if (datasize != 0) {zI    %s = ((size_t)datasize) <= 640 ? (%s)alloca((size_t)datasize) : NULL;r"zF    if (_cffi_convert_array_argument(_cffi_type(%d), %s, (char **)&%s,z,            datasize, &large_args_free) < 0)z	      %s;z  })rrr)rrKrrrrrrr:s$


z-Recompiler._convert_funcarg_to_c_ptr_or_arraycCsJt|tjr|r,|jdkr,d||jfSt|tjrBd|fS|jdkr|s|jdd}|dkrt|t	d||fSd	||
|fSnt|tjtjfrd
||
|fSt|tj
rd
||
t|jfSt|tjr|jdkrtd||fd||
|fSt|tjr>d	||
|fSt|dS)
Nrz_cffi_from_c_int(%s, %s)z_cffi_from_c_double(%s)long doublerrsrz_cffi_from_c_%s(%s)z/_cffi_from_c_deref((char *)&%s, _cffi_type(%d))z0_cffi_from_c_pointer((char *)%s, _cffi_type(%d))z!'%s' is used as %s, but is opaquez0_cffi_from_c_struct((char *)&%s, _cffi_type(%d)))rVrrXrr	rrrrErrrYr[	ArrayTyperr`Zfldnames	TypeErrorrrar!)rrKvarcontextrrrr_convert_expr_from_cHsP

zRecompiler._convert_expr_from_ccCs||d|fS)Nz
(*(%s *)0))_global_typerrKr	rrr
_typedef_typekszRecompiler._typedef_typecCs||||dSr)rkrrrrr!_generate_cpy_typedef_collecttypensz,Recompiler._generate_cpy_typedef_collecttypecCsdSrrrrrr_generate_cpy_typedef_declqsz%Recompiler._generate_cpy_typedef_declcCs$|j|}|jdt||dS)Nr)rNrrTr<)rrKr	r)rrr_typedef_ctxts
zRecompiler._typedef_ctxcCsf|||}|||t|dddkr<|j||jddn&t|tjrb|j|j|jj|j|ddS)NoriginZunknown_type)
approxname)r	named_ptr)	rrrc_struct_ctxr	rVrZNamedPointerTypetotyperrrr_generate_cpy_typedef_ctxxsz$Recompiler._generate_cpy_typedef_ctxcCs(|||jr$|js$||dSr)rkrlellipsisrArrrr"_generate_cpy_function_collecttypesz-Recompiler._generate_cpy_function_collecttypec	Cs |jr
tt|tjst|jr0|||dS|j}t|j	}|dkrNd}n|dkr\d}nd}g}g}d|}t
|j	D],\}	}
||
d|	||d|	qzd	
|}|pd
}|jr|jd}nd}d
|||f}
|d|j|
f|dd	
|}d}t|jtjrd}|d|||f|d|d|d|d||f|dd|}t
|j	D]&\}	}
|
d|	|}|d|qrt}t}|j	D]}
||
||qt|D]}|d|fqt|jtjs d}d|}d|jd|}|||dnd}d}t|j	dkrtt|j	}|D]}	|d|	qJ||d|t|t|d	
dd|Df|d|t
|j	D](\}	}
||
d |	d|	d!|q|d"|d#d$dtt|j	D}d	
|}|d%|||f|d&|d'||d(|dkrF|d)|r|d*||jd+d,|D]}|d-|qh|d.n(|D]}|d-|q|d/|d0|d|d1d2d3}d4}g}g}d|}t
|j	D]P\}	}
d}||
rd5}d6}|
d7||	f|}|||d8||	fq|j}||rxd|}|d9|}|d|tj}d}d:}d6}|rd	
|}|pd
}d;|||f}
|d||
f|d|r||d	
|}|d%|||f|r|d<|dn|d=||f|d>|dS)?NrZnoargrZarg0rUargument of %sz x%dx%drvoidrr"z%s_cffi_d_%s(%s)z	static %srzreturn z  %s%s(%s);rz#ifndef PYPY_VERSIONzstatic PyObject *z(_cffi_f_%s(PyObject *self, PyObject *%s)z  %s;z	result = result of %sz resultz  PyObject *pyresult;z  PyObject *arg%d;z1  if (!PyArg_UnpackTuple(args, "%s", %d, %d, %s))cSsg|]}d|qS)z&arg%drrrrrr0sz:Recompiler._generate_cpy_function_decl.<locals>.<listcomp>rzarg%dzreturn NULLz  Py_BEGIN_ALLOW_THREADSz  _cffi_restore_errno();cSsg|]}d|qS)rrrrrrr0sz  { %s%s(%s); }z  _cffi_save_errno();z  Py_END_ALLOW_THREADSz  (void)self; /* unused */z  (void)noarg; /* unused */z  pyresult = %s;resultzresult typez  z  return pyresult;z  Py_INCREF(Py_None);z  return Py_None;rcSs t|tjpt|tjo|Sr)rVrr`
PrimitiveTyper)rrrrneed_indirectionsz@Recompiler._generate_cpy_function_decl.<locals>.need_indirectionFrTz %sx%dz%sx%dz *resultz
*result = z%s_cffi_f_%s(%s)z  return result;z#  define _cffi_f_%s _cffi_d_%sr)rArSrVrr[r_generate_cpy_constant_declrr rUrbrTrr3abirrWrrrPrrrinsertZ	void_type)rrKr	rnumargsargname	argumentsZcall_argumentsrrhrrepr_argumentsrname_and_argumentsZresult_codeargrrrZresult_declrngZfreeliner
differenceZindirectionZ	tp_resultrrr_generate_cpy_function_decls
















z&Recompiler._generate_cpy_function_declcCs|jr|js|||dS|j|}t|j}|jr@t}n |dkrNt}n|dkr\t	}nt
}|jdt
|d|t||d|ddS)Nrrr}z
_cffi_f_%sz
_cffi_d_%s)r)rrA_generate_cpy_constant_ctxrNrlr rUZOP_DLOPEN_FUNCZOP_CPYTHON_BLTN_NZOP_CPYTHON_BLTN_OZOP_CPYTHON_BLTN_VrrTrre)rrKr	r)rZ	meth_kindrrr_generate_cpy_function_ctx+s$


z%Recompiler._generate_cpy_function_ctxcCsTt|tjrP|j}|dkr0|d}d||f}||d||j}t||}|S)N...rz_cffi_array_len(((%s)0)->%s)%s[0])rVrrr\rrqr)rZ	tp_structZ
field_nameZtp_field
actual_lengthZptr_struct_nametp_itemrrrrqAs
zRecompiler._field_typecCs,|||jr(|D]}||qdSr)rkrAanonymous_struct_fields_struct_collecttype)rrKfldtyperrrrMs
zRecompiler._struct_collecttypecCs>|jdkrdS|j}d|f}|d|d||f|d|d|d|D]\}}}}	z|st|dkr|dkr|d	|||fWqVt|tjr|jdks|jd
kr|j}|d}q|d|j	d
d||	d|fWqVt
k
r}
z|dt|
W5d}
~
XYqVXqV|d|d||f|dS)Nz_cffi_checkfld_%sZ_CFFI_UNUSED_FNzstatic void %s(%s *p)rz8  /* only to generate compile-time warnings or errors */z
  (void)p;rr"z>  (void)((p->%s) | 0);  /* check that '%s.%s' is an integer */rz[0]z  { %s = &p->%s; (void)tmp; }z*tmpzfield %rr{z
  /* %s */rz(struct _cffi_align_%s { char x; %s y; };)rmrrprrVrrr\rrrrQ)rrKrrrZ
checkfuncnameZfnameZftyperfqualr|rrr_struct_declTsB


$zRecompiler._struct_declNcCs|j|}d}g}t|tjr(|d|jdkr@|dd}||jjjkr|dksd||jjjkr|jdkrpn|j	st
|rn
|d|jr|jdkrt
d||jf|dn|dd	}d
|pd}g}|dkrr|j}	t||	}
|
D]\}}}
}||||}||d|j|ft}|
d
krNt}d|
}nL|dksrt|tjrx|jdkrxd}n"d|dkr|dn|j|f}|dks|
d
krd}n,|dk	rd|j|f}nd|d|f}|t||||
t||j|qt|jd}|jd||dkr<d}d}d}n4|dk	rXd|jf}d}nd|f}d|f}d}nd}d}d}|}|jdt|j||||||||j !|dS)NZ
_CFFI_F_UNIONZ_CFFI_F_OPAQUEZopaqueZ_CFFI_F_CHECK_FIELDSrz%r is declared with 'pack=%r'; only 0 or 1 are supported in API mode (try to use "...;", which does not require a 'pack' declaration)Z_CFFI_F_PACKEDZ_CFFI_F_EXTERNALZexternal|0z
field '%s.%s'rz
%d /* bits */z
(size_t)-1zsizeof(((%s)0)->%s)rz"((char *)&((%s)0)->%s) - (char *)0zoffsetof(%s, %s)r"r~z
(size_t)-2Zunnamedzsizeof(*(%s)0)z-1 /* unknown alignment */
sizeof(%s)z"offsetof(struct _cffi_align_%s, y)rr)"rNrVrZ	UnionTyperTrmr?rnropartialanyrZpackedr!r3rArrprq_check_not_opaquer	r$r%rr\rrrer rextendr(rr)rrKrrrr)Zreason_for_not_expandingr*r.Zexpand_anonymous_struct_unionrpZfldnamerrrr#roffsetr-Zalignr,rrrrvs



















zRecompiler._struct_ctxcCs:t|tjr|j}qt|tjr6|jdkr6td|dS)Nz0%s is of an opaque type (not declared in cdef()))rVrrrr`rmr)rrKlocationrrrrszRecompiler._check_not_opaquecCst|j}|jddd|D]\}}||jkr"|jrHtd|f|jdrv|jdd	rv|jdd}n4|jdkr|j
dkrd}||dntd	|f||d|q"dS)
NcSs|dS)Nrr)Ztp_orderrrrrLrMz7Recompiler._add_missing_struct_unions.<locals>.<lambda>rFzDinternal inconsistency: %r is partial but was not seen at this point$rZ_IO_FILEFILEzinternal inconsistency: %r)
rr^rtrrr
r!r	
startswithisdigitZ	forcenamerr)rrzrKorderrrrrrs"
z%Recompiler._add_missing_struct_unionscCs||dSr)rrrrr _generate_cpy_struct_collecttypesz+Recompiler._generate_cpy_struct_collecttypecCs2|d}d|kr"||ddfS|d|fSdS)Nr"rrs)rr)rrKrrrr
_struct_namess
zRecompiler._struct_namescCs|j|f||dSr)rrrrrr_generate_cpy_struct_declsz$Recompiler._generate_cpy_struct_declcCs|j|f||dSr)rrrrrr_generate_cpy_struct_ctxsz#Recompiler._generate_cpy_struct_ctxcCs(t|tjr|||n
||dSr)rVrra_generate_cpy_enum_collecttyperrrrr#_generate_cpy_anonymous_collecttypesz.Recompiler._generate_cpy_anonymous_collecttypecCs.t|tjr||n|||d|dSNZtypedef_)rVrra_generate_cpy_enum_declrrrrr_generate_cpy_anonymous_declsz'Recompiler._generate_cpy_anonymous_declcCs0t|tjr|||n|||d|dSr)rVrra	_enum_ctxrrrrr_generate_cpy_anonymous_ctxsz&Recompiler._generate_cpy_anonymous_ctxconstcCs||f|jkrtd||f|j||f|j}d||f}|r|d||d|d|f|d||f|dk	r|dkrd|f}|d	|f|d
|d|dn>|dkst|d
||d|d|d|f|d|dS)Nz duplicate declaration of %s '%s'z_cffi_%s_%sz$static int %s(unsigned long long *o)rz  int n = (%s) <= 0;zI  *o = (unsigned long long)((%s) | 0);  /* check that %s is an integer */rz%dUz"  if (!_cffi_check_int(*o, n, %s))z    n |= 2;z  return n;rzstatic void %s(char *o)z  *(%s)o = %s;r)rrrrrSr)ris_intr	rKcategoryr
rfuncnamerrr_generate_cpy_consts6


zRecompiler._generate_cpy_constcCs |}|r|jr||dSr)rrArkrrKr	r!rrr"_generate_cpy_constant_collecttype5s
z-Recompiler._generate_cpy_constant_collecttypecCs|}||||dSr)rr$r%rrrr:sz&Recompiler._generate_cpy_constant_declcCs^|js|rttd}n$|jr&t}nt}|j|}t||}|jdt	|d||dS)Nrr}_cffi_const_%s)
rArreOP_CONSTANT_INTZOP_DLOPEN_CONSTZOP_CONSTANTrNrrTr)rrKr	rZ
const_kindr)rrrr>s


z%Recompiler._generate_cpy_constant_ctxcCs||dSr)rkrrrrrNsz)Recompiler._generate_cpy_enum_collecttypecCs|jD]}|d|qdS)NT)enumeratorsr$)rrKr	
enumeratorrrrrQs
z"Recompiler._generate_cpy_enum_declc	Cs|j|}ttd}|jr"|t|j|jD](\}}|jd	t
|d|||dq0|dk	rd|kr|jsd|}d|}n4||jg}	|j
|	}tt|j|	ddk}d	|j}
|jd
	t|j||||
dS)Nrr}r'r
rr	z
((%s)-1) <= 0rr1r)rNreOP_ENUMrAZcheck_not_partialzipr)Z
enumvaluesrrTrZbuild_baseinttyper?Zsizeofintcastr3r4r	)rrKrr)rr*Z	enumvaluerr6Zbasetpr7rrrrUs(




zRecompiler._enum_ctxcCs|||dSr)rrrrrr_generate_cpy_enum_ctxjsz!Recompiler._generate_cpy_enum_ctxcCsdSrrrrrr_generate_cpy_macro_collecttypepsz*Recompiler._generate_cpy_macro_collecttypecCs&|dkrd}n|}|jd||ddS)NrTr+)r$)rrKr	r
rrr_generate_cpy_macro_declssz#Recompiler._generate_cpy_macro_declcCsT|dkr"|jrtd|fd}n|}ttd}|jdt|d|||ddS)NrzGcannot use the syntax '...' in '#define %s ...' when using the ABI moderr}r'r+)rArrer(rrTr)rrKr	r
rrrr_generate_cpy_macro_ctxzs

z"Recompiler._generate_cpy_macro_ctxcCsFt|tjrB|j}|dkr$d|f}||jd|}t||}|S)Nrz_cffi_array_len(%s)r)rVrrr\rr)rrKZglobal_namerrrrrrs
zRecompiler._global_typecCs||||dSr)rkrrrrr"_generate_cpy_variable_collecttypesz-Recompiler._generate_cpy_variable_collecttypecCs|j}|||}t|tjr4|jdkr4|j}d}nd}d|f}|d|j||jd|d|d||f|d|dS)	Nr"&z*_cffi_var_%s(void)static rrz  return %s(%s);r)	rrrVrrr\rrrw)rrKr	rZ	ampersandrrrr_generate_cpy_variable_decls	
z&Recompiler._generate_cpy_variable_declcCsL|||}|j|}|jr"t}nt}|jdt|d|t||dS)Nr}z_cffi_var_%s)	rrNrAZ
OP_GLOBAL_VARZOP_GLOBAL_VAR_FrrTrre)rrKr	r)r#rrr_generate_cpy_variable_ctxs

z%Recompiler._generate_cpy_variable_ctxcCst|tjst||dSr)rVrr[rSrkrrrr'_generate_cpy_extern_python_collecttypesz2Recompiler._generate_cpy_extern_python_collecttypecCs|j}t|jtjrd}nd|}d|jd|f}|d||d|j||f|g}d|}t|jD]"\}}	|	d||}
|	|
qrd	
|}|pd
}d||f}|jdkrd
|}dd}
tt
|jdd}|
|jrt|d}t|jtjr&d|jd||jd|f}|d||j|f|d|d||dt|jD]X\}}	d|}
t|	tjs|
|	rd|
}
t|	}	|d|	d|d|
fqd|d|t|jtjs|d|jdf|d||jd7_dS)Nrrz(int)sizeof(%s)r"z3static struct _cffi_externpy_s _cffi_externpy__%s =z  { "%s.%s", %s, 0, 0 };rz a%drrz%s(%s)	__stdcallz_cffi_stdcall cSst|tjo|jdkS)Nr)rVrrr	rJrrrmay_need_128_bitssz9Recompiler._extern_python_decl.<locals>.may_need_128_bitsr:z!sizeof(%s) > %d ? sizeof(%s) : %dz%s%srz
  char a[%s];z  char *p = a;za%dr5z  *(%s)(p + %d) = %s;rz,  _cffi_call_python(&_cffi_externpy__%s, p);z  return *(%s)p;rr)rrVrrrWrr@rbrUrTr3rrDr r`rYr)rrKr	Z
tag_and_spacerZsize_of_resultrrrhrrrrr;Z	size_of_arrr_extern_python_declsj






 zRecompiler._extern_python_declcCs|||ddS)Nr6r=rrrr _generate_cpy_extern_python_declsz+Recompiler._generate_cpy_extern_python_declcCs|||ddS)NzCFFI_DLLEXPORT r>rrrr#_generate_cpy_dllexport_python_declsz.Recompiler._generate_cpy_dllexport_python_declcCs|||ddS)Nr"r>rrrr'_generate_cpy_extern_python_plus_c_declsz2Recompiler._generate_cpy_extern_python_plus_c_declcCsR|jrtd|jrtd|j|}tt|}|jdt	|d|||dS)Nz,cannot use 'extern "Python"' in the ABI modez$a vararg function is extern "Python"r}z&_cffi_externpy__%s)
rArrr!rNreZOP_EXTERN_PYTHONrrTr)rrKr	r)rrrr_generate_cpy_extern_python_ctxs


z*Recompiler._generate_cpy_extern_python_ctxcCsr|j}|d|dD]T}|d|d}|D].}t|dkrP||d}|dt|f7}q4||qdS)Nz=// # NB. this is not a string because of a size limit in MSVCTz// r"Lz%d,)r
splitlinesrstripr ord)rsrlineZprinted_linecrrrrsz)Recompiler._print_string_literal_in_arraycCsttt|j|<dSr)reOP_PRIMITIVEZ	PRIM_VOIDrRrrKrrrr_emit_bytecode_VoidType sz"Recompiler._emit_bytecode_VoidTypecCst|j}tt||j|<dSr)ZPRIMITIVE_TO_INDEXr	rerJrR)rrKrr;rrr_emit_bytecode_PrimitiveType#s
z'Recompiler._emit_bytecode_PrimitiveTypecCs(d|j|j|jf}tt||j|<dS)Nzl_cffi_prim_int(sizeof(%s), (
           ((%s)-1) | 0 /* check that %s is an integer type */
         ) <= 0)r	rerJrRrrKrrGrrr!_emit_bytecode_UnknownIntegerType'sz,Recompiler._emit_bytecode_UnknownIntegerTypecCs$d|j|jf}tt||j|<dS)Nzd_cffi_prim_float(sizeof(%s) *
           (((%s)1) / 2) * 2 /* integer => 0, float => 1 */
         )rNrOrrr_emit_bytecode_UnknownFloatType-s
z*Recompiler._emit_bytecode_UnknownFloatTypecCstt|j|j|j|<|d7}|jD]H}|j|}||krft|tjrV|	||ntt
||j|<|d7}q&t|j}|j
dk	r|j
dkr|dO}ntd|j
ftt||j|<dS)Nrr:r8zabi=%r)reZOP_FUNCTIONrNrrRrUrVrrrMr$r.rrr!ZOP_FUNCTION_END)rrKrrgZ	realindexr*rrr_emit_bytecode_RawFunctionType3s






z)Recompiler._emit_bytecode_RawFunctionTypecCstt|j|j|j|<dSr)re
OP_POINTERrNrrRrKrrr_emit_bytecode_PointerTypeFsz%Recompiler._emit_bytecode_PointerTypecCs"|}tt|j||j|<dSr)rlrerSrNrR)rrKrrawrrr_emit_bytecode_FunctionPtrTypeLsz)Recompiler._emit_bytecode_FunctionPtrTypecCs|j|j}|jdkr(tt||j|<nf|jdkrNtdt|ddfn@|j|ddksdt	tt
||j|<tdt|j|j|d<dS)Nrzitype %s badly placed: the '...' array length can only be used on global arrays or on fields of structuresz/*...*/rrH)rNrr\reZ
OP_OPEN_ARRAYrRrrQrrSZOP_ARRAY)rrKrZ
item_indexrrr_emit_bytecode_ArrayTypePs

z#Recompiler._emit_bytecode_ArrayTypecCs|j|}tt||j|<dSr)r^reZOP_STRUCT_UNIONrR)rrKrZstruct_indexrrr_emit_bytecode_StructType^s
z$Recompiler._emit_bytecode_StructTypecCs|j|}tt||j|<dSr)r_rer,rR)rrKrZ
enum_indexrrr_emit_bytecode_EnumTypecs
z"Recompiler._emit_bytecode_EnumType)F)r")N)Nr N)N)UrrrrrrErjrkrOrrrrrrrrrrrrrrrrrrrrrrqrrrrrrZ_generate_cpy_union_collecttyperrZ_generate_cpy_union_declrZ_generate_cpy_union_ctxrrrr$r&rrrrrr0r1r2r3rr4r7r8r9Z*_generate_cpy_dllexport_python_collecttypeZ._generate_cpy_extern_python_plus_c_collecttyper=r?r@rArBZ"_generate_cpy_dllexport_python_ctxZ&_generate_cpy_extern_python_plus_c_ctxrrLrMrPrQrRrTZ_emit_bytecode_ConstPointerTypeZ_emit_bytecode_NamedPointerTyperVrWrXZ_emit_bytecode_UnionTyperYrrrrr>{s
:
,
4-##"
W	

	
6
r>)cseZdZfddZZS)NativeIOcs(t|tr|d}tt||dS)Nascii)rVZunicodeencodesuperr[r)rrGrdrrrls

zNativeIO.write)rrrr
__classcell__rrr_rr[ksr[c
Cs|rtd|ft|||dkd}||t}||||}zBt|d }|t	|d|krvt
W5QRX|rtdWdSt
k
rd|tf}	t|	d}|
|W5QRXzt|	|Wn,tk
rt|t|	|YnXYd	SXdS)
Nz
generating %s)rArrz(already up-to-date)Fz%s.~%dwT)printr>rjrr[rgetvaluerreadr IOErrorrgetpidrrenameOSErrorunlink)
r?r@rZtarget_fileverboseZ
recompilerroutputf1Ztmp_filerrr_make_c_or_py_sourceqs6
rmFcCs|dk	stt|||||Sr)rSrm)r?r@rZ
target_c_filerjrrr
make_c_sources
rncCst||d||Sr)rm)r?r@Ztarget_py_filerjrrrmake_py_sources
rocCsj|d}z$ttjj|f|ddWntk
rBYnX|d|7<tjj|f||fS)Nrr)rurmakedirsrr3rh)Z	outputdirmodname	extensionpartsrrr_modname_to_files
$rtcCs*t||}||||ft||||Sr)rcrTsetattr)	patchlistclsr	Znew_metholdrrr_patch_meths
rycCs$t|D]\}}}t|||qdSr)reversedru)rvrwr	Zold_methrrr_unpatch_methssr{cs\tjdkr(ddlm}t||dddtjdkrXddlm}fd	d
}t||d|dS)Nwin32r)MSVCCompilerZ_remove_visual_c_refcSs|Srr)rZ
manifest_filerrrrLrMz&_patch_for_embedding.<locals>.<lambda>darwin)	CCompilercs<d|jkr,t|j|_|jd}d|j|<|f||S)Nz-bundlez-dynamiclib)Z	linker_sorr)rrUkwdsrhZold_link_shared_objectrrmy_link_shared_objects


z3_patch_for_embedding.<locals>.my_link_shared_objectZlink_shared_object)sysplatformZdistutils.msvc9compilerr}ryZdistutils.ccompilerr)rvr}rrrrr_patch_for_embeddings

rcslddlm}drRddtjdkr6d7ntjdkrJd7nd	7t||d
fdddS)
Nr)	build_extz.*rr|z.dllr~z.dylibz.soZget_ext_filenamecsSrr)rZext_nametargetrrrLrMz#_patch_for_target.<locals>.<lambda>)Zdistutils.command.build_extrendswithrrry)rvrrrrr_patch_for_targets





rrT.cc	Kst|ts|d}|jr$|||dk	r^|jdk	}|rF|||dkrzt|||\}}
|rl|g|
}
tj	j
|
}n|}|	dkr|rd|}	nd}	tj||f|}t
|||||d}|rTg}t}zn|rt||	dkrt||	|r|dkrd}nd}td|tj	|ft|td|||
}W5t|t|X|S||fSn<|dkrxt||d	\}}t||||d}|r|Sd|fSdS)
Nr\z%s.*r)rjrzthe current directory isz setting the current directory toz%s %rz.py)rVrQr]Z_windows_unicodeZ_apply_windows_unicoderZ_apply_embedding_fixrtrrr3rZ
get_extensionrngetcwdchdirr{rrrbabspathcompilero)r?r@rZtmpdirZcall_c_compilerZc_fileZsource_extensionZextradirZcompiler_verboserdebugrZ	embeddingrsZ
ext_c_fileZextupdatedrvcwdmsgZoutputfilenamersrrr	recompilesl















r)F)F)rTNrNrNN)rrior"rrerrorrZcffi_opcoderBrrrrr(r4r<r>version_infoStringIOr[BytesIOrmrnrortryr{rrrrrrr<module>sPv



Back to Directory File Manager