Warning: session_start(): Session cannot be started after headers have already been sent in /home/tvrreohg/public_html/manga.php on line 13
3 AøªjVüã@s0ddlZddlZddlZddlmZmZddlmZddlTdZ dZ dZ ej d kpdej d0kpdej d1kZGd d „d ƒZGdd„dƒZGdd„dƒZGdd„dƒZGdd„dƒZGdd„dƒZej d2krÌejZnGdd„dejƒZdd„Zd3dd„Zd4dd „Zd!d"„Zd#d$„Zd%d&„Zd'd(„Zd)d*„Zd5d.d/„Z dS)6éNé)Ú ffiplatformÚmodel)ÚVerificationError)Ú*i&i'i(Úwin32ééc@s&eZdZd dd„Zdd„Zdd„ZdS) Ú GlobalExprrcCs"||_||_||_||_||_dS)N)ÚnameÚaddressÚtype_opÚsizeÚ check_value)Úselfr r r rr©rú//tmp/pip-build-_d5lkt3n/cffi/cffi/recompiler.pyÚ__init__s zGlobalExpr.__init__cCsd|j|j|jjƒ|jfS)Nz' { "%s", (void *)%s, %s, (void *)%s },)r r r Ú as_c_exprr)rrrrrszGlobalExpr.as_c_exprcCsd|jjƒ|j|jfS)Nz b'%s%s',%d)r Úas_python_bytesr r)rrrrÚas_python_exprszGlobalExpr.as_python_exprN)rr)Ú__name__Ú __module__Ú __qualname__rrrrrrrr s r c@s,eZdZdd„Zdd„Zdd„Zdd„Zd S) Ú FieldExprcCs"||_||_||_||_||_dS)N)r Ú field_offsetÚ field_sizeÚfbitsizeÚ field_type_op)rr rrrrrrrrs zFieldExpr.__init__cCs>dt|jƒ}d|j|jfd||jfd||jjƒfS)Nú z { "%s", %s, z %s %s, z %s %s },)Úlenr rrrr)rÚspacesrrrr&szFieldExpr.as_c_exprcCst‚dS)N)ÚNotImplementedError)rrrrr,szFieldExpr.as_python_exprcCsD|jjtkrd}n|jjtkr*t|jƒ}nt‚d|jjƒ||jfS)NÚz b'%s%s%s') rÚopÚOP_NOOPÚ OP_BITFIELDÚformat_four_bytesrr"rr )rZ size_exprrrrÚas_field_python_expr/s    zFieldExpr.as_field_python_exprN)rrrrrrr(rrrrrsrc@s$eZdZdd„Zdd„Zdd„ZdS)ÚStructUnionExprc Cs4||_||_||_||_||_||_||_||_dS)N)r Ú type_indexÚflagsrÚ alignmentÚcommentÚfirst_field_indexÚc_fields) rr r*r+rr,r-r.r/rrrr;szStructUnionExpr.__init__cCsPd|j|j|jfd|j|jfd|jt|jƒf|jrFd|jnddS)Nz { "%s", %d, %s,z %s, %s, z%d, %d z /* %s */ r#z},) r r*r+rr,r.r r/r-)rrrrrFszStructUnionExpr.as_c_exprcCs>t|jtƒ}dd„|jDƒ}dt|jƒt|ƒ|jdj|ƒfS)NcSsg|] }|jƒ‘qSr)r()Ú.0Zc_fieldrrrú Osz2StructUnionExpr.as_python_expr..z(b'%s%s%s',%s)ú,)Úevalr+ZG_FLAGSr/r'r*r Újoin)rr+Z fields_exprrrrrMs  zStructUnionExpr.as_python_exprN)rrrrrrrrrrr):s r)c@s$eZdZdd„Zdd„Zdd„ZdS)ÚEnumExprcCs"||_||_||_||_||_dS)N)r r*rÚsignedÚallenums)rr r*rr6r7rrrrXs zEnumExpr.__init__cCsd|j|j|j|j|jfS)Nz1 { "%s", %d, _cffi_prim_int(%s, %s), "%s" },)r r*rr6r7)rrrrr_szEnumExpr.as_c_exprcCsNdtdtd td td td td tdti|j|j f}dt |j ƒt |ƒ|j |j fS)Nrrééézb'%s%s%s\x00%s')rr)rr)r8r)r8r)r9r)r9r)r:r)r:r)Z PRIM_UINT8Z PRIM_INT8Z PRIM_UINT16Z PRIM_INT16Z PRIM_UINT32Z PRIM_INT32Z PRIM_UINT64Z PRIM_INT64rr6r'r*r r7)rÚ prim_indexrrrrds  zEnumExpr.as_python_exprN)rrrrrrrrrrr5Wsr5c@s$eZdZdd„Zdd„Zdd„ZdS)Ú TypenameExprcCs||_||_dS)N)r r*)rr r*rrrrpszTypenameExpr.__init__cCsd|j|jfS)Nz { "%s", %d },)r r*)rrrrrtszTypenameExpr.as_c_exprcCsdt|jƒ|jfS)Nzb'%s%s')r'r*r )rrrrrwszTypenameExpr.as_python_exprN)rrrrrrrrrrr<osr<c@sˆeZdZdZd™dd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dddddgZ dd„Z dšdd„Z dd„Z dd„Zdd„Zdd „Zd!d"„Zd#d$„Zd%d&„Zd'd(„Zd)d*„Zd+d,„Zd-d.„Zd/d0„Zd1d2„Zd3d4„Zd5d6„Zd7d8„Zd9d:„Zd;d<„Zd=d>„Zd?d@„Z dAdB„Z!d›dDdE„Z"dFdG„Z#dHdI„Z$dJdK„Z%e%Z&dLdM„Z'dNdO„Z(e(Z)dPdQ„Z*e*Z+dRdS„Z,dTdU„Z-dVdW„Z.dœdYdZ„Z/d[d\„Z0d]d^„Z1d_d`„Z2dadb„Z3d�dcdd„Z4dedf„Z5dgdh„Z6didj„Z7dkdl„Z8dmdn„Z9dodp„Z:dqdr„Z;dsdt„Ze>Z?Z@dydz„ZAd{d|„ZBd}d~„ZCdd€„ZDd�d‚„ZEeEZFZGdƒd„„ZHd…d†„ZId‡dˆ„ZJd‰dŠ„ZKd‹dŒ„ZLd�dŽ„ZMd�d�„ZNeNZOeNZPd‘d’„ZQd“d”„ZRd•d–„ZSeSZTd—d˜„ZUdCS)žÚ RecompilerrFcCs||_||_||_t|_dS)N)ÚffiÚ module_nameÚtarget_is_pythonÚ VERSION_BASEÚ_version)rr>r?r@rrrr�szRecompiler.__init__cCst|j|ƒ|_dS)N)ÚmaxrB)rÚverrrrÚ needs_version‡szRecompiler.needs_versionc CsPi|_|jdƒt|jtd�}g|_x¨|D] }|jr*|j|dksFt‚t|jƒ|j|<|jj|ƒxZ|j D]P}t |t j t j t jt jt jfƒs�t‚|j|dkr®t|jƒ|j|<|jj|ƒqjW|jjdƒq*WxZ|D]R}|j oì|j|dkrÔt|jƒ|j|<|jj|ƒ|jrÔ|jdk rÔ|jjdƒqÔWd|jjƒk�s>t‚i|_i|_x@|D]8}t |t jƒ�rnd|j|<nt |t jƒ�rPd|j|<�qPWx.tt|jdd„d�ƒD]\}}||j|<�q¤Wx.tt|jdd„d�ƒD]\}}||j|<�qÔWx0|D](}t|d|jjƒ}|||j|ƒ�qòWx |jD]}t |tƒ�s&t‚�q&Wt|jƒ|_dS) NZ collecttype)ÚkeyZENDÚLENcSs|jS)N)r )ÚtprrrÚ´sz/Recompiler.collect_type_table..cSs|jS)N)r )rHrrrrI·sZ_emit_bytecode_)Ú _typesdictÚ _generateÚsortedÚstrÚ cffi_typesZis_raw_functionÚAssertionErrorr ÚappendÚargsÚ isinstancerÚVoidTypeÚBasePrimitiveTypeÚ PointerTypeÚStructOrUnionOrEnumÚFunctionPtrTypeZ is_array_typeÚlengthÚvaluesÚ_struct_unionsÚ_enumsÚ StructOrUnionÚEnumTypeÚ enumerateÚgetattrÚ __class__rÚCffiOpÚtuple)rZ all_declsrHÚtp1ÚiÚmethodr$rrrÚcollect_type_tableŠsZ            zRecompiler.collect_type_tablecCs|j }|j|ƒS)N)r@Ú enumfields)rrHZexpand_anonymous_struct_unionrrrÚ _enum_fieldsÄszRecompiler._enum_fieldscCsÜt|tjƒs2t|tƒr.x|D]}|j|ƒqWdS||jkrØd|j|<t|tjƒrb|j|jƒƒnvt|tjƒr¸|j dk rØ||j j j krØxP|j |ƒD] \}}}}|j|j|||ƒƒq’Wn x|jƒD]\}}|j|ƒqÂWdS)N)rRrZBaseTypeByIdentityrbÚ_do_collect_typerJrWÚas_raw_functionr\Úfldtypesr>Ú_parserÚ_included_declarationsrhÚ _field_typeZ _get_items)rrHÚxZname1rcÚ_rrrriÏs         zRecompiler._do_collect_typec Csº|jjjjƒ}x¦t|ƒD]š\}\}}|jddƒ\}}yt|d||fƒ}Wn tk rjtd|ƒ‚YnXy||_ |||ƒWqt k r°} zt j | |ƒ‚WYdd} ~ XqXqWdS)Nrrz_generate_cpy_%s_%sz"not implemented in recompile(): %r) r>rlZ _declarationsÚitemsrLÚsplitr_ÚAttributeErrorrÚ_current_qualsÚ ExceptionrZattach_exception_info) rÚ step_nameÚlstr rHÚqualsÚkindZrealnamereÚerrrrKâs zRecompiler._generateÚglobalÚfieldÚ struct_unionÚenumÚtypenamecCs:i|_x|jD]}g|j|<qWtƒ|_|jdƒ|jƒx>|jD]4}|j|}|dkrh|jdd„d�t|ƒ|j|<qBW|jd}x:|jj ƒD],\}}|t |ƒks¨t ‚||j |j ks�t ‚q�Wt |ƒt |jƒksÖt ‚|jd}x<|j j ƒD].\}}|t |ƒk�st ‚||j |j ksìt ‚qìWt |ƒt |j ƒk�s6t ‚dS)NÚctxr|cSs|jS)N)r )ÚentryrrrrIsz0Recompiler.collect_step_tables..)rFr}r~)Ú_lstsÚ ALL_STEPSÚsetÚ_seen_struct_unionsrKÚ_add_missing_struct_unionsÚsortrbrZrqr rOr r[)rrvrwrHrdrrrÚcollect_step_tables÷s*      zRecompiler.collect_step_tablesr#cCs|jj|dƒdS)NÚ )Ú_fÚwrite)rÚwhatrrrÚ_prntszRecompiler._prntcCs:|jr|dkst‚|j|ƒn|dk s*t‚|j||ƒdS)N)r@rOÚwrite_py_source_to_fÚwrite_c_source_to_f)rÚfÚpreamblerrrÚwrite_source_to_fs    zRecompiler.write_source_to_fcCs0ttjjtjjtƒ|ƒdƒ}|jƒ}|jƒ|S)NÚr)ÚopenÚosÚpathr4ÚdirnameÚ__file__Ú readlinesÚclose)rÚfilenameÚgÚlinesrrrÚ_rel_readlines!szRecompiler._rel_readlinesc Csš||_|j}|jjdk r |dƒts,|dƒ|jdƒ}|jdƒ}|jdƒ|||d…<|dj|ƒƒ|jj dƒdJ}|jjdk �r<|d |jfƒ|d ƒ|j |jjƒ|d ƒ|d ƒ|d |fƒ|dƒ|d|fƒ|dƒ|d|fƒ|dƒ|jdƒ}|jdƒ}|jdƒ|||d…<|dj|ƒƒ|j t ƒ|dƒ|ƒ||ƒ|ƒ|dƒ|ƒ|dƒt dd„|jjƒDƒƒ}xLt|jƒD]>\}}d} ||k�r¸d||jƒ} |d||jƒ| fƒ�q’W|j�sä|dƒ|dƒ|ƒtƒ|_|jdƒi} xn|jD]d} |j| } t| ƒ| | <| | dk�r|d | | fƒx| D]} || jƒƒ�qNW|dƒ|ƒ�qW|jj�r|d!ƒxr|jjD]f}y|jdd"…\}}Wn(tk �rÖtd#|j|fƒ‚YnX|dk�rêtd$ƒ‚|d%|fƒ�q”W|d&ƒ|dƒ|ƒ|d'ƒ|d(ƒx8|jD].} | | dk�rL|d)| ƒn |d*| ƒ�q,Wx.|jD]$} | d+k�rf|d,| | | fƒ�qfW|jj�r¢|d-ƒn|d.ƒ|d/t|jƒfƒd}|jdk�sÜ|jjdk �rä|dO}|d0|ƒ|dƒ|ƒ|d1ƒ|d2ƒ|dƒ|ƒ|d ƒ|d3ƒ|d4|fƒ|d5ƒ|d@�rd|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ƒ|dƒd|_dS)KNz#define _CFFI_USE_EMBEDDINGz#define _CFFI_NO_LIMITED_APIz_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_%sz#elsez*# define _CFFI_PYTHON_STARTUP_FUNC init%sz#endifz _embedding.hz#include "_cffi_errors.h" z_cffi_errors.hz>/************************************************************/zstatic void *_cffi_types[] = {cSsg|]\}}||f‘qSrr)r0rHrdrrrr1Wsz2Recompiler.write_c_source_to_f..z // z/* %2d */ %s,%sz 0z};Údeclrz.static const struct _cffi_%s_s _cffi_%ss[] = {z.static const char * const _cffi_includes[] = {r8zQffi 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 >= 3z 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éÿÿÿÿ) rŠr�r>Ú _embeddingÚUSE_LIMITED_APIržÚindexr4r?rrÚ_print_string_literal_in_arrayrEÚVERSION_EMBEDDEDÚdictrJrqr^rNÚ _get_c_namerr„Ú_seen_constantsrKrƒr‚r Ú_included_ffisÚ_assigned_sourcersrÚ _num_externpyrB)rr�r‘Úprntr�rdZbase_module_nameÚtypeindex2typer$r-Únumsrvrwr�Úffi_to_includeÚincluded_module_nameÚincluded_sourcer+rrrr�'s                          zRecompiler.write_c_source_to_fcsbt|tƒrd|fSt|ttfƒrZ‡fdd„|Dƒ}t|ƒdkrJ|jdƒddj|ƒfS|jƒS)Nzb'%s'csg|]}ˆj|ƒ‘qSr)Ú_to_py)r0Úitem)rrrr1Øsz%Recompiler._to_py..rr#z(%s)r2)rRrMÚlistrbr rPr4r)rroÚrepr)rrrµÔs    zRecompiler._to_pyc Cs¤||_|j}|dƒ|dƒt|jjp(fƒ}xzt|ƒD]n}|jj|}y|jdd…\}}Wn&tk r‚td|j|fƒ‚YnX|dk r”tdƒ‚|d||fƒq6W|ƒ|d|j fƒ|d|j fƒd|_ t |j ƒ|_ d d „|j Dƒ}|d |j d j|ƒƒfƒtd d „|jjƒDƒƒ} xH|jD]>} |j| } t| ƒdk�r*| dk�r*|d| |j | ƒfƒ�q*W|dk�r˜|ddjdd „t|ƒDƒƒfƒ|dƒdS)Nz# auto-generated filezimport _cffi_backendr8zQffi object %r includes %r, but the latter has not been prepared with set_source()zMnot 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|] }|jƒ‘qSr)r)r0r$rrrr1þsz3Recompiler.write_py_source_to_f..z _types = %s,r#cSsg|]\}}||f‘qSrr)r0rHrdrrrr1srr|z _%ss = %s,z _includes = (%s,),z, cSsg|] }d|‘qS)z_ffi%dr)r0rdrrrr1 sú))rŠr�r r>r¬Úranger­rsrr?rBrbrNrµr4r©rJrqrƒr‚) rr�r¯Z num_includesrdr²r³r´Z types_lstr°rvrwrrrrŽÞsB     zRecompiler.write_py_source_to_fcCs |j|S)N)rJ)rÚtyperrrÚ _gettypenumszRecompiler._gettypenumc Cspd}t|tjƒr’|jƒ r’|jƒr<|jdkrƒ|ƒdS)?NrZnoargrZarg0rQzargument of %sz x%dzx%dz, Úvoidrr#z%s_cffi_d_%s(%s)z static %sr¡zreturn z %s%s(%s);r¢z#ifndef PYPY_VERSIONzstatic PyObject *z(_cffi_f_%s(PyObject *self, PyObject *%s)z %s;z result = z result of %sz resultz PyObject *pyresult;z PyObject *arg%d;z1 if (!PyArg_UnpackTuple(args, "%s", %d, %d, %s))cSsg|] }d|‘qS)z&arg%dr)r0rdrrrr1æsz:Recompiler._generate_cpy_function_decl..z return NULL;zarg%dz return NULLz Py_BEGIN_ALLOW_THREADSz _cffi_restore_errno();cSsg|] }d|‘qS)zx%dr)r0rdrrrr1ñsz { %s%s(%s); }z _cffi_save_errno();z Py_END_ALLOW_THREADSz (void)self; /* unused */z (void)noarg; /* unused */z pyresult = %s;Úresultz result typez z return pyresult;z Py_INCREF(Py_None);z return Py_None;z#elsecSs t|tjƒpt|tjƒo|jƒS)N)rRrr\Ú PrimitiveTyperÀ)r»rrrÚneed_indirections  z@Recompiler._generate_cpy_function_decl..need_indirectionFrTz %sx%dz%sx%dz *resultz *result = z%s_cffi_f_%s(%s)z return result;z# define _cffi_f_%s _cffi_d_%sz#endif)r@rOrRrrWráÚ_generate_cpy_constant_declr�r rQr^rPrÃr4ÚabirärSr„rÐrLrºrÌrÕÚinsertZ void_type)rrHr r¯ÚnumargsZargnameÚ argumentsZcall_argumentsrÔrdr»Úrepr_argumentsrèÚname_and_argumentsZ result_codeÚargrÎrÏr Z result_declÚrngZfreelineræÚ differenceZ indirectionZ tp_resultrrrÚ_generate_cpy_function_decl™s                        z&Recompiler._generate_cpy_function_declcCs�|jr|j r|j||ƒdS|j|jƒ}t|jƒ}|jrBt}n |dkrPt}n|dkr^t }nt }|j dj t |d|t||ƒd|d�ƒdS)Nrrr{z _cffi_f_%sz _cffi_d_%s)r)rár@Ú_generate_cpy_constant_ctxrJrjr rQZOP_DLOPEN_FUNCZOP_CPYTHON_BLTN_NZOP_CPYTHON_BLTN_OZOP_CPYTHON_BLTN_Vr‚rPr ra)rrHr r*rêZ meth_kindrrrÚ_generate_cpy_function_ctx;s     z%Recompiler._generate_cpy_function_ctxcCsTt|tjƒrP|j}|dkr0|jdƒ}d||f}|j|d||jƒ}tj||ƒ}|S)Nz...rz_cffi_array_len(((%s)0)->%s)z%s[0])rRrrÑrXrÃrnr¶)rZ tp_structÚ field_nameZtp_fieldÚ actual_lengthZptr_struct_nameÚtp_itemrrrrnQs     zRecompiler._field_typecCs0|j|ƒ|jr,x|jƒD]}|j|ƒqWdS)N)rir@Úanonymous_struct_fieldsÚ_struct_collecttype)rrHÚfldtyperrrrø]s zRecompiler._struct_collecttypec CsF|jdkrdS|j}d|f}|dƒ|d||fƒ|dƒ|dƒ|dƒxÔ|j|ƒD]Æ\}}}} y„|jƒsx|dkr”|dkr’|d |||fƒwZx2t|tjƒrÆ|jdks¶|jd krÆ|j}|d }q–W|d |j d d|| d�|fƒWqZt k �r} z|dt | ƒƒWYdd} ~ XqZXqZW|dƒ|d||fƒ|ƒdS)Nz_cffi_checkfld_%sZ_CFFI_UNUSED_FNzstatic void %s(%s *p)r¡z8 /* only to generate compile-time warnings or errors */z (void)p;rr#z> (void)((p->%s) | 0); /* check that '%s.%s' is an integer */z...z[0]z { %s = &p->%s; (void)tmp; }z*tmpzfield %r)rxz /* %s */r¢z(struct _cffi_align_%s { char x; %s y; };) rkr�rhrÁrRrrÑrXr¶rÃrrM) rrHrËrÜr¯Z checkfuncnameÚfnameZftyperÚfqualrzrrrÚ _struct_declds8   &zRecompiler._struct_declNc Cs²|j|}d}g}t|tjƒr(|jdƒ|jdkr@|jdƒd}||jjjkr¼|dksd||jjjkr¼|jdkrpn|j sŽt |j ƒƒr„n |jdƒ|j rÊ|j dkr°t d||j fƒ‚|jdƒn|jdƒd }d j|ƒpÖd }g}|dk�rnt|j|ƒƒ} �x | D�]\} } } } |j|| | ƒ} |j| d |j| fƒt}| d k�rJt}d| }nL|dk�snt| tjƒ�rt| jdk�rtd}n"d|dk�rŠ|jdƒn|j| f}|dk�sª| d k�r°d}n,|dk �rÊd|j| f}nd|jdƒ| f}|jt| ||| t||j| ƒƒƒqüWt|jdƒ}|jdj|ƒ|dk�r8d}d}d}n4|dk �rTd|jf}d}nd|f}d|f}d}nd}d}d }|}|jdjt|j|||||||ƒƒ|jj |ƒdS)!NZ _CFFI_F_UNIONZ_CFFI_F_OPAQUEÚopaqueZ_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)-2r8Zunnamedzsizeof(*(%s)0)z-1 /* unknown alignment */z sizeof(%s)z"offsetof(struct _cffi_align_%s, y)r}éþÿÿÿr£r£)!rJrRrZ UnionTyperPrkr>rlrmÚpartialÚanyr÷Úpackedr"r4r·rhrnÚ_check_not_opaquer r%r&rÑrXrÃrrar r‚Úextendr)r…rÍ)rrHrËrÜrÝr*Zreason_for_not_expandingr+r/rgZfldnamerùrrûr$rÚoffsetr.Zalignr-rrrrÞ†s’                        zRecompiler._struct_ctxcCs>xt|tjƒr|j}qWt|tjƒr:|jdkr:td|ƒ‚dS)Nz0%s is of an opaque type (not declared in cdef()))rRrrÑr¶r\rkrÒ)rrHÚlocationrrrrÜs  zRecompiler._check_not_opaquecCsÂt|jjƒƒ}|jdd„d�xž|D]–\}}||jkr$|jrJtd|fƒ‚|jjdƒrx|jdd…j ƒrx|jdd…}n4|jdkrž|j dkržd}|j |dƒntd |fƒ‚|j |d|ƒq$WdS) NcSs|dS)Nrr)Ztp_orderrrrrIész7Recompiler._add_missing_struct_unions..)rFzDinternal inconsistency: %r is partial but was not seen at this pointú$rZ_IO_FILEÚFILEzinternal inconsistency: %r) r·rZrqr‡r…rr"r Ú startswithÚisdigitZ forcenamerÚrÞ)rrwrHÚorderrÜrrrr†ãs   z%Recompiler._add_missing_struct_unionscCs|j|ƒdS)N)rø)rrHr rrrÚ _generate_cpy_struct_collecttypeúsz+Recompiler._generate_cpy_struct_collecttypecCs2|jdƒ}d|kr"||jddƒfS|d|fSdS)Nr#rrp)rÃrÄ)rrHrËrrrÚ _struct_namesþs zRecompiler._struct_namescCs|j|f|j|ƒžŽdS)N)rür)rrHr rrrÚ_generate_cpy_struct_declsz$Recompiler._generate_cpy_struct_declcCs|j|f|j|ƒžŽdS)N)rÞr)rrHr rrrÚ_generate_cpy_struct_ctx sz#Recompiler._generate_cpy_struct_ctxcCs(t|tjƒr|j||ƒn |j|ƒdS)N)rRrr]Ú_generate_cpy_enum_collecttyperø)rrHr rrrÚ#_generate_cpy_anonymous_collecttypes z.Recompiler._generate_cpy_anonymous_collecttypecCs.t|tjƒr|j|ƒn|j||d|ƒdS)NÚtypedef_)rRrr]Ú_generate_cpy_enum_declrü)rrHr rrrÚ_generate_cpy_anonymous_decls  z'Recompiler._generate_cpy_anonymous_declcCs0t|tjƒr|j||ƒn|j||d|ƒdS)Nr)rRrr]Ú _enum_ctxrÞ)rrHr rrrÚ_generate_cpy_anonymous_ctxs z&Recompiler._generate_cpy_anonymous_ctxÚconstcCs||f|jkrtd||fƒ‚|jj||fƒ|j}d||f}|r¸|d|ƒ|dƒ|d|fƒ|d||fƒ|dk r¦|dkr�d|f}|d |fƒ|d ƒ|d ƒ|d ƒn>|dksÄt‚|d |ƒ|dƒ|d|jdƒ|fƒ|d ƒ|ƒdS)Nz duplicate declaration of %s '%s'z _cffi_%s_%sz$static int %s(unsigned long long *o)r¡z 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;r¢zstatic void %s(char *o)z *(%s)o = %s;r)r«rrÍr�rOrÃ)rÚis_intr rHÚcategoryrr¯ÚfuncnamerrrÚ_generate_cpy_const&s2       zRecompiler._generate_cpy_constcCs"|jƒ}| s|jr|j|ƒdS)N)rÁr@ri)rrHr rrrrÚ"_generate_cpy_constant_collecttypeDs z-Recompiler._generate_cpy_constant_collecttypecCs|jƒ}|j|||ƒdS)N)rÁr)rrHr rrrrrçIsz&Recompiler._generate_cpy_constant_declcCs`|j r|jƒrttdƒ}n$|jr(t}nt}|j|}t||ƒ}|jdjt |d||ƒƒdS)Nrr{z_cffi_const_%sr£) r@rÁraÚOP_CONSTANT_INTZOP_DLOPEN_CONSTZ OP_CONSTANTrJr‚rPr )rrHr r Z const_kindr*rrrròMs    z%Recompiler._generate_cpy_constant_ctxcCs|j|ƒdS)N)ri)rrHr rrrr]sz)Recompiler._generate_cpy_enum_collecttypecCs x|jD]}|jd|ƒqWdS)NT)Ú enumeratorsr)rrHr Ú enumeratorrrrr`s z"Recompiler._generate_cpy_enum_declc Csê|j|}ttd ƒ}|jr"|jƒx:t|j|jƒD](\}}|jdj t |d|||d�ƒq2W|dk rˆd|krˆ|j rˆd|}d|}n4|j |j gƒ} |j j | ƒ}tt|j j| d ƒƒdkƒ}d j|jƒ} |jd j t|j|||| ƒƒdS) Nrr{z_cffi_const_%s)rrz sizeof(%s)z ((%s)-1) <= 0rr2r~r£r£)rJraÚOP_ENUMr@Zcheck_not_partialÚziprZ enumvaluesr‚rPr Zbuild_baseinttyper>ÚsizeofÚintÚcastr4r5r ) rrHrËr*r r Z enumvaluerr6Zbasetpr7rrrrds"        zRecompiler._enum_ctxcCs|j||jƒƒdS)N)rrª)rrHr rrrÚ_generate_cpy_enum_ctxysz!Recompiler._generate_cpy_enum_ctxcCsdS)Nr)rrHr rrrÚ_generate_cpy_macro_collecttypesz*Recompiler._generate_cpy_macro_collecttypecCs&|dkrd}n|}|jd||d�dS)Nz...T)r)r)rrHr rrrrÚ_generate_cpy_macro_decl‚sz#Recompiler._generate_cpy_macro_declcCsT|dkr"|jrtd|fƒ‚d}n|}ttdƒ}|jdjt|d|||d�ƒdS)Nz...zGcannot use the syntax '...' in '#define %s ...' when using the ABI moderr{z_cffi_const_%s)rr£)r@rrarr‚rPr )rrHr rr rrrÚ_generate_cpy_macro_ctx‰s    z"Recompiler._generate_cpy_macro_ctxcCsFt|tjƒrB|j}|dkr$d|f}|j|jd|ƒ}tj||ƒ}|S)Nz...z_cffi_array_len(%s)z%s[0])rRrrÑrXrÖr¶)rrHZ global_namerõrörrrrÖšs   zRecompiler._global_typecCs|j|j||ƒƒdS)N)rirÖ)rrHr rrrÚ"_generate_cpy_variable_collecttype£sz-Recompiler._generate_cpy_variable_collecttypecCs„|j}|j||ƒ}t|tjƒr4|jdkr4|j}d}nd}d|f}|d|j||jd�ƒ|dƒ|d||fƒ|dƒ|ƒdS) Nr#ú&z*_cffi_var_%s(void)zstatic )rxr¡z return %s(%s);r¢) r�rÖrRrrÑrXr¶rÃrt)rrHr r¯Z ampersandr rrrÚ_generate_cpy_variable_decl¦s  z&Recompiler._generate_cpy_variable_declcCsL|j||ƒ}|j|}|jr"t}nt}|jdjt|d|t||ƒƒƒdS)Nr{z _cffi_var_%s) rÖrJr@Z OP_GLOBAL_VARZOP_GLOBAL_VAR_Fr‚rPr ra)rrHr r*r$rrrÚ_generate_cpy_variable_ctx½s   z%Recompiler._generate_cpy_variable_ctxcCst|tjƒst‚|j|ƒdS)N)rRrrWrOri)rrHr rrrÚ'_generate_cpy_extern_python_collecttypeÊsz2Recompiler._generate_cpy_extern_python_collecttypecCs|j}t|jtjƒrd}nd|}d|jjd|ƒf}|d|ƒ|d|j||fƒ|ƒg}d|}x0t|jƒD]"\}} | jd||ƒ} |j | ƒqtWd j |ƒ} | pªd } d || f} |j d krÊd | } dd„} t t |jƒddƒ}| |jƒrút |dƒ}t|jtjƒ�r*d|jjdƒ||jjdƒ|f}|d||jj| ƒfƒ|dƒ|d|ƒ|dƒxft|jƒD]X\}} d|} t| tjƒ�s’| | ƒ�r¤d| } tj| ƒ} |d| jdƒ|d| fƒ�qjW|d|ƒt|jtjƒ�sø|d|jjdƒfƒ|dƒ|ƒ|jd7_dS)Nrÿz result of %sz(int)sizeof(%s)r#z3static struct _cffi_externpy_s _cffi_externpy__%s =z { "%s.%s", %s, 0, 0 };zargument of %sz a%dz, rãz%s(%s)Ú __stdcallz_cffi_stdcall cSst|tjƒo|jdkS)Nz long double)rRrrår )rHrrrÚmay_need_128_bitsês z9Recompiler._extern_python_decl..may_need_128_bitsr:éz!sizeof(%s) > %d ? sizeof(%s) : %dz%s%sr¡z char a[%s];z char *p = a;za%dr+z *(%s)(p + %d) = %s;rz, _cffi_call_python(&_cffi_externpy__%s, p);z return *(%s)p;r¢r)r�rRrärrSrÃr?r^rQrPr4rèrCr r\rUr®)rrHr Z tag_and_spacer¯Zsize_of_resultrÔrërdr»rîrìrír0Z size_of_arrrÚ_extern_python_declÑsZ          " zRecompiler._extern_python_declcCs|j||dƒdS)Nzstatic )r2)rrHr rrrÚ _generate_cpy_extern_python_declsz+Recompiler._generate_cpy_extern_python_declcCs|j||dƒdS)NzCFFI_DLLEXPORT )r2)rrHr rrrÚ#_generate_cpy_dllexport_python_decl sz.Recompiler._generate_cpy_dllexport_python_declcCs|j||dƒdS)Nr#)r2)rrHr rrrÚ'_generate_cpy_extern_python_plus_c_decl sz2Recompiler._generate_cpy_extern_python_plus_c_declcCsR|jrtdƒ‚|jrtdƒ‚|j|}tt|ƒ}|jdjt |d|||ƒƒdS)Nz,cannot use 'extern "Python"' in the ABI modez$a vararg function is extern "Python"r{z&_cffi_externpy__%s) r@rrár"rJraZOP_EXTERN_PYTHONr‚rPr )rrHr r*r rrrÚ_generate_cpy_extern_python_ctxs   z*Recompiler._generate_cpy_extern_python_ctxc Csî|j}|dƒt|tƒs$|jdƒ}n |jdƒy|jdƒWntk rXd|}YnXxŽ|jdƒD]€}|}tdƒtkr†tt |ƒ}nt |ƒdd …}|d|j ƒƒd }x2|D]*}t |ƒd krÌ||ƒd }|d |f7}q°W||ƒqfWdS) Nz=// # NB. this is not a string because of a size limit in MSVCzutf-8Úasciis# -*- encoding: utf8 -*- Tz//rz// r#éLz%d,r£) r�rRÚbytesÚencodeÚdecodeÚUnicodeDecodeErrorÚ splitlinesr»ÚmapÚordr7Úrstripr )rÚsr¯Úliner-Z printed_lineÚcrrrr§s,       z)Recompiler._print_string_literal_in_arraycCstttƒ|j|<dS)N)raÚ OP_PRIMITIVEZ PRIM_VOIDrN)rrHr¦rrrÚ_emit_bytecode_VoidType=sz"Recompiler._emit_bytecode_VoidTypecCst|j}tt|ƒ|j|<dS)N)ZPRIMITIVE_TO_INDEXr rarDrN)rrHr¦r;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 rarDrN)rrHr¦rArrrÚ!_emit_bytecode_UnknownIntegerTypeDsz,Recompiler._emit_bytecode_UnknownIntegerTypecCs$d|j|jf}tt|ƒ|j|<dS)Nzd_cffi_prim_float(sizeof(%s) * (((%s)1) / 2) * 2 /* integer => 0, float => 1 */ ))r rarDrN)rrHr¦rArrrÚ_emit_bytecode_UnknownFloatTypeJsz*Recompiler._emit_bytecode_UnknownFloatTypecCsÀtt|j|jƒ|j|<|d7}xR|jD]H}|j|}||krht|tjƒrX|j ||ƒntt |ƒ|j|<|d7}q(Wt |j ƒ}|j dk r¬|j dkrœ|dO}ntd|j fƒ‚tt|ƒ|j|<dS)Nrr/r8zabi=%r)raZ OP_FUNCTIONrJrärNrQrRrrårFr%r$rárèr"ZOP_FUNCTION_END)rrHr¦rcZ realindexr+rrrÚ_emit_bytecode_RawFunctionTypePs        z)Recompiler._emit_bytecode_RawFunctionTypecCstt|j|jƒ|j|<dS)N)raÚ OP_POINTERrJrßrN)rrHr¦rrrÚ_emit_bytecode_PointerTypecsz%Recompiler._emit_bytecode_PointerTypecCs"|jƒ}tt|j|ƒ|j|<dS)N)rjrarJrJrN)rrHr¦ÚrawrrrÚ_emit_bytecode_FunctionPtrTypeisz)Recompiler._emit_bytecode_FunctionPtrTypecCs’|j|j}|jdkr(tt|ƒ|j|<nf|jdkrNtdt|ƒjddƒfƒ‚n@|j|ddksdt ‚tt |ƒ|j|<tdt|jƒƒ|j|d<dS)Nz...zitype %s badly placed: the '...' array length can only be used on global arrays or on fields of structuresz/*...*/rrG) rJr¶rXraZ OP_OPEN_ARRAYrNrrMrÄrOZOP_ARRAY)rrHr¦Z item_indexrrrÚ_emit_bytecode_ArrayTypems   z#Recompiler._emit_bytecode_ArrayTypecCs|j|}tt|ƒ|j|<dS)N)rZraZOP_STRUCT_UNIONrN)rrHr¦Z struct_indexrrrÚ_emit_bytecode_StructType{s z$Recompiler._emit_bytecode_StructTypecCs|j|}tt|ƒ|j|<dS)N)r[rar!rN)rrHr¦Z enum_indexrrrÚ_emit_bytecode_EnumType€s z"Recompiler._emit_bytecode_EnumType)F)r#)N)NrN)N)Vrrrr®rrErfrhrirKrƒrˆr�r’ržr�rµrŽr¼rÌrÐrÆrÕr×rØrÙrÚràrârñrórnrørürÞrr†r Z_generate_cpy_union_collecttyperrZ_generate_cpy_union_declrZ_generate_cpy_union_ctxrrrrrrçròrrrr&r'r(r)rÖr*r,r-r.Z*_generate_cpy_dllexport_python_collecttypeZ._generate_cpy_extern_python_plus_c_collecttyper2r3r4r5r6Z"_generate_cpy_dllexport_python_ctxZ&_generate_cpy_extern_python_plus_c_ctxr§rErFrGrHrIrKZ_emit_bytecode_ConstPointerTypeZ_emit_bytecode_NamedPointerTyperMrNrOZ_emit_bytecode_UnionTyperPrrrrr=~s¨ :  . 4-# # " V     6 r=cseZdZ‡fdd„Z‡ZS)ÚNativeIOcs(t|tƒr|jdƒ}tt|ƒj|ƒdS)Nr7)rRÚunicoder:ÚsuperrQr‹)rrA)r`rrr‹‰s  zNativeIO.write)rrrr‹Ú __classcell__rr)r`rrQˆsrQc Cs|rtd|fƒt|||dkd�}|jƒ|jƒtƒ}|j||ƒ|jƒ}y@t|dƒ� }|jt |ƒdƒ|krvt ‚WdQRX|rŒtdƒdSt k �rd|t j ƒf} t| dƒ�}|j |ƒWdQRXyt j| |ƒWn,tk �r t j|ƒt j| |ƒYnXd SXdS) Nz generating %s)r@r“rz(already up-to-date)Fz%s.~%dÚwT)Úprintr=rfrˆrQr’Úgetvaluer”Úreadr ÚIOErrorr•Úgetpidr‹ÚrenameÚOSErrorÚunlink) r>r?r‘Z target_fileÚverboseZ recompilerr�ÚoutputÚf1Ztmp_filerrrÚ_make_c_or_py_sourceŽs4     raFcCs|dk s t‚t|||||ƒS)N)rOra)r>r?r‘Z target_c_filer^rrrÚ make_c_sourceªs  rbcCst||d||ƒS)N)ra)r>r?Ztarget_py_filer^rrrÚmake_py_source¯s rcc Csj|jdƒ}y$tjtjj|f|dd…žŽƒWntk rBYnX|d|7<tjj|f|žŽ|fS)NrŸrr£r£)rrr•Úmakedirsr–r4r\)Z outputdirÚmodnameÚ extensionÚpartsrrrÚ_modname_to_file³s $rhcCs*t||ƒ}|j|||fƒt|||ƒ|S)N)r_rPÚsetattr)Ú patchlistÚclsr Znew_methÚoldrrrÚ _patch_methÁs  rmcCs(x"t|ƒD]\}}}t|||ƒq WdS)N)Úreversedri)rjrkr Zold_methrrrÚ_unpatch_methsÇsrocs\tjdkr(ddlm}t||ddd„ƒtjdkrXddlm}‡fd d „}t||d |ƒ‰dS) Nrr)Ú MSVCCompilerZ_remove_visual_c_refcSs|S)Nr)rZ manifest_filerrrrIÐsz&_patch_for_embedding..Údarwin)Ú CCompilercs<d|jkr,t|jƒ|_|jjdƒ}d|j|<ˆ|f|ž|ŽS)Nz-bundlez -dynamiclib)Ú linker_sor·r¦)rrQÚkwdsrd)Úold_link_shared_objectrrÚmy_link_shared_objectÕs     z3_patch_for_embedding..my_link_shared_objectÚlink_shared_object)ÚsysÚplatformZdistutils.msvc9compilerrprmÚdistutils.ccompilerrr)rjrprrrvr)rurÚ_patch_for_embeddingËs      r{cslddlm}ˆjdƒrRˆdd …‰tjdkr6ˆd7‰ntjdkrJˆd7‰nˆd 7‰t||d ‡fd d „ƒdS)Nr)Ú build_extz.*r8rz.dllrqz.dylibz.soZget_ext_filenamecsˆS)Nr)rZext_name)ÚtargetrrrIísz#_patch_for_target..r)Zdistutils.command.build_extr|Úendswithrxryrm)rjr}r|r)r}rÚ_patch_for_targetßs       rrŸTú.cc  Ksžt|tƒs|jdƒ}|jr$|j| ƒ|dk �r^|jdk } | rF|j| ƒ|dkrzt|||ƒ\}} |rl|g| } tj j | Ž}n|}| dkr˜| r”d|} nd} t j ||f| Ž}t |||||d�}|�rTg}tjƒ}zn| rÚt|ƒ| dkrìt|| ƒ|�r|dk�rd}nd}td|tj j|ƒfƒtj|ƒt jd||| ƒ}Wdtj|ƒt|ƒX|S||fSn<|dk�rxt||d ƒ\}}t||||d�}|�r’|Sd|fSdS) Nr7z%s.*r)r^rŸzthe current directory isz setting the current directory toz%s %rz.py)rRrMr:Z_windows_unicodeZ_apply_windows_unicoder¤Z_apply_embedding_fixrhr•r–r4rÚ get_extensionrbÚgetcwdr{rrVÚabspathÚchdirÚcompilerorc)r>r?r‘ZtmpdirZcall_c_compilerZc_fileZsource_extensionZextradirZcompiler_verboser}ÚdebugrtZ embeddingrgZ ext_c_fileÚextÚupdatedrjÚcwdÚmsgZoutputfilenamerprrrÚ recompileðsb                  r‹)rr)rr )r)F)F)rŸTNr€NrNN)!r•rxÚior#rrÚerrorrZ cffi_opcoderAr¨rÅryÚ version_infor¥r rr)r5r<r=ÚStringIOrQÚBytesIOrarbrcrhrmror{rr‹rrrrÚsL