3
ãdeU  ã               @   sÖ  d dl Z d dlZddlmZ ddlmZmZmZ dZdZ	dZ
dd„ ZG d	d
„ d
eƒZG dd„ deƒZG dd„ deƒZeƒ ZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZeeƒZdd „ ZeeƒZG d!d"„ d"eƒZG d#d$„ d$eƒZeed%ƒdƒZG d&d'„ d'eƒZG d(d)„ d)eƒZ G d*d+„ d+e ƒZ!G d,d-„ d-e ƒZ"G d.d/„ d/eƒZ#d<d0d1„Z$d=d2d3„Z%eƒ Z&ej'ƒ Z(d4d5„ Z)d6d7„ Z*d8d9„ Z+d:d;„ Z,dS )>é    Né   )Úallocate_lock)Ú	CDefErrorÚVerificationErrorÚVerificationMissingé   é   c             C   s@   | t @ rd|jƒ  }| t@ r(d|jƒ  }| t@ r<d|jƒ  }|S )Nz const z
 volatile z __restrict )ÚQ_CONSTÚlstripÚ
Q_VOLATILEÚ
Q_RESTRICT)ÚqualsÚreplace_with© r   úA/var/www/agendate/envp3/lib/python3.6/site-packages/cffi/model.pyÚqualify   s    r   c               @   sP   e Zd ZdZdZddd„Zdd„ Zd	d
„ Zdd„ Zddd„Z	dd„ Z
dd„ ZdS )ÚBaseTypeByIdentityFÚ úa C filer   c             C   sŠ   | j }|jdƒdkst‚|jƒ }|rT|jdƒr@d|kr@d| }n|d dkrTd| }t||ƒ}|jd|ƒ}d	|kr†td
| jƒ |f ƒ‚|S )Nú&r   Ú*z&[z(%s)r   z[(ú ú$z-cannot generate '%s' in %s: unknown type name)	Úc_name_with_markerÚcountÚAssertionErrorÚstripÚ
startswithr   Úreplacer   Ú_get_c_name)Úselfr   Úcontextr   Úresultr   r   r   Ú
get_c_name   s    

zBaseTypeByIdentity.get_c_namec             C   s   | j jddƒS )Nr   r   )r   r   )r    r   r   r   r   /   s    zBaseTypeByIdentity._get_c_namec             C   s   d| j ƒ kS )Nr   )r   )r    r   r   r   Ú
has_c_name2   s    zBaseTypeByIdentity.has_c_namec             C   s   dS )NFr   )r    r   r   r   Úis_integer_type5   s    z"BaseTypeByIdentity.is_integer_typec             C   sN   y|j |  }W n: tk
rH   | j||ƒ}|j j| |ƒ}||ksDt‚Y nX |S )N)Ú_cached_btypesÚKeyErrorÚbuild_backend_typeÚ
setdefaultr   )r    ÚffiÚ
finishlistÚ	can_delayÚBTypeZBType2r   r   r   Úget_cached_btype8   s    z#BaseTypeByIdentity.get_cached_btypec             C   s   d| j ƒ f S )Nz<%s>)r   )r    r   r   r   Ú__repr__A   s    zBaseTypeByIdentity.__repr__c                s   ‡ fdd„ˆ j D ƒS )Nc                s   g | ]}|t ˆ |ƒf‘qS r   )Úgetattr)Ú.0Úname)r    r   r   ú
<listcomp>E   s    z1BaseTypeByIdentity._get_items.<locals>.<listcomp>)Ú_attrs_)r    r   )r    r   Ú
_get_itemsD   s    zBaseTypeByIdentity._get_itemsN)r   r   r   )F)Ú__name__Ú
__module__Ú__qualname__Úis_array_typeÚis_raw_functionr#   r   r$   r%   r.   r/   r5   r   r   r   r   r      s   

	r   c               @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚBaseTypec             C   s   | j |j ko| jƒ |jƒ kS )N)Ú	__class__r5   )r    Úotherr   r   r   Ú__eq__J   s    zBaseType.__eq__c             C   s
   | |k S )Nr   )r    r=   r   r   r   Ú__ne__N   s    zBaseType.__ne__c             C   s   t | jt| jƒ ƒfƒS )N)Úhashr<   Útupler5   )r    r   r   r   Ú__hash__Q   s    zBaseType.__hash__N)r6   r7   r8   r>   r?   rB   r   r   r   r   r;   H   s   r;   c               @   s    e Zd Zf Zdd„ Zdd„ ZdS )ÚVoidTypec             C   s
   d| _ d S )Nzvoid&)r   )r    r   r   r   Ú__init__X   s    zVoidType.__init__c             C   s   t | |dƒS )NZnew_void_type)Úglobal_cache)r    r*   r+   r   r   r   r(   [   s    zVoidType.build_backend_typeN)r6   r7   r8   r4   rD   r(   r   r   r   r   rC   U   s   rC   c               @   s   e Zd Zdd„ ZdS )ÚBasePrimitiveTypec             C   s   dS )NFr   )r    r   r   r   Úis_complex_typeb   s    z!BasePrimitiveType.is_complex_typeN)r6   r7   r8   rG   r   r   r   r   rF   a   s   rF   c            4   @   s¬   e Zd ZdZddddddddddddddddddddddddddddddddddddddddddddddddddddœ3Zdd„ Zd	d
„ Zdd„ Zdd„ Zdd„ Z	dd„ Z
dS )ÚPrimitiveTyper2   ÚcÚiÚfÚj)3ÚcharÚshortÚintÚlongz	long longzsigned charzunsigned charzunsigned shortzunsigned intzunsigned longzunsigned long longÚfloatÚdoublezlong doublezfloat _Complexzdouble _ComplexZ_BoolZwchar_tZchar16_tZchar32_tZint8_tZuint8_tZint16_tZuint16_tZint32_tZuint32_tZint64_tZuint64_tZint_least8_tZuint_least8_tZint_least16_tZuint_least16_tZint_least32_tZuint_least32_tZint_least64_tZuint_least64_tZint_fast8_tZuint_fast8_tZint_fast16_tZuint_fast16_tZint_fast32_tZuint_fast32_tZint_fast64_tZuint_fast64_tZintptr_tZ	uintptr_tZintmax_tZ	uintmax_tZ	ptrdiff_tZsize_tZssize_tc             C   s"   || j kst‚|| _|d | _d S )Nr   )ÚALL_PRIMITIVE_TYPESr   r2   r   )r    r2   r   r   r   rD       s    zPrimitiveType.__init__c             C   s   | j | j dkS )NrI   )rS   r2   )r    r   r   r   Úis_char_type¥   s    zPrimitiveType.is_char_typec             C   s   | j | j dkS )NrJ   )rS   r2   )r    r   r   r   r%   §   s    zPrimitiveType.is_integer_typec             C   s   | j | j dkS )NrK   )rS   r2   )r    r   r   r   Úis_float_type©   s    zPrimitiveType.is_float_typec             C   s   | j | j dkS )NrL   )rS   r2   )r    r   r   r   rG   «   s    zPrimitiveType.is_complex_typec             C   s   t | |d| jƒS )NZnew_primitive_type)rE   r2   )r    r*   r+   r   r   r   r(   ®   s    z PrimitiveType.build_backend_typeN)r2   )r6   r7   r8   r4   rS   rD   rT   r%   rU   rG   r(   r   r   r   r   rH   f   st   rH   c               @   s(   e Zd Zd	Zdd„ Zdd„ Zdd„ ZdS )
ÚUnknownIntegerTyper2   c             C   s   || _ |d | _d S )Nr   )r2   r   )r    r2   r   r   r   rD   µ   s    zUnknownIntegerType.__init__c             C   s   dS )NTr   )r    r   r   r   r%   ¹   s    z"UnknownIntegerType.is_integer_typec             C   s   t d| j ƒ‚d S )Nz4integer type '%s' can only be used after compilation)ÚNotImplementedErrorr2   )r    r*   r+   r   r   r   r(   ¼   s    z%UnknownIntegerType.build_backend_typeN)r2   )r6   r7   r8   r4   rD   r%   r(   r   r   r   r   rV   ²   s   rV   c               @   s    e Zd ZdZdd„ Zdd„ ZdS )ÚUnknownFloatTyper2   c             C   s   || _ |d | _d S )Nr   )r2   r   )r    r2   r   r   r   rD   Ã   s    zUnknownFloatType.__init__c             C   s   t d| j ƒ‚d S )Nz2float type '%s' can only be used after compilation)rW   r2   )r    r*   r+   r   r   r   r(   Ç   s    z#UnknownFloatType.build_backend_typeN)r2   )r6   r7   r8   r4   rD   r(   r   r   r   r   rX   À   s   rX   c               @   s   e Zd ZdZd	dd„ZdS )
ÚBaseFunctionTypeÚargsr"   ÚellipsisÚabiNc             C   s’   || _ || _|| _|| _dd„ | j D ƒ}| jr8|jdƒ |p@dg}| jdj|ƒf }|d k	r||d d… | d |dd …  }| jjjd|ƒ| _d S )	Nc             S   s   g | ]}|j ƒ ‘qS r   )r   )r1   Úargr   r   r   r3   Õ   s    z-BaseFunctionType.__init__.<locals>.<listcomp>z...Úvoidz, r   r   r   )	rZ   r"   r[   r\   ÚappendÚ_base_patternÚjoinr   r   )r    rZ   r"   r[   r\   Zreprargsr   r   r   r   rD   Ï   s    

 zBaseFunctionType.__init__)rZ   r"   r[   r\   )N)r6   r7   r8   r4   rD   r   r   r   r   rY   Ì   s   rY   c               @   s$   e Zd ZdZdZdd„ Zdd„ ZdS )ÚRawFunctionTypez(&)(%s)Tc             C   s   t d| f ƒ‚d S )NzPcannot render the type %r: it is a function type, not a pointer-to-function type)r   )r    r*   r+   r   r   r   r(   ç   s    z"RawFunctionType.build_backend_typec             C   s   t | j| j| j| jƒS )N)ÚFunctionPtrTyperZ   r"   r[   r\   )r    r   r   r   Úas_function_pointerë   s    z#RawFunctionType.as_function_pointerN)r6   r7   r8   r`   r:   r(   rd   r   r   r   r   rb   à   s   rb   c               @   s    e Zd ZdZdd„ Zdd„ ZdS )rc   z(*&)(%s)c             C   sŠ   | j j||ƒ}g }x | jD ]}|j|j||ƒƒ qW f }| jdkrl| jsly|jjf}W n tk
rj   Y nX t	| |dt
|ƒ|| jf|žŽ S )NZ	__stdcallZnew_function_type)r"   r.   rZ   r_   r\   r[   Ú_backendZFFI_STDCALLÚAttributeErrorrE   rA   )r    r*   r+   r"   rZ   ÚtpZabi_argsr   r   r   r(   ò   s    
z"FunctionPtrType.build_backend_typec             C   s   t | j| j| j| jƒS )N)rb   rZ   r"   r[   r\   )r    r   r   r   Úas_raw_function  s    zFunctionPtrType.as_raw_functionN)r6   r7   r8   r`   r(   rh   r   r   r   r   rc   ï   s   rc   c               @   s"   e Zd Zd	Zd
dd„Zdd„ ZdS )ÚPointerTypeÚtotyper   r   c             C   s>   || _ || _t|dƒ}|jr*d|jƒ f }|jjd|ƒ| _d S )Nz *&z(%s)r   )rj   r   r   r9   r
   r   r   )r    rj   r   Úextrar   r   r   rD     s    
zPointerType.__init__c             C   s    | j j||dd�}t| |d|ƒS )NT)r,   Únew_pointer_type)rj   r.   rE   )r    r*   r+   ZBItemr   r   r   r(     s    zPointerType.build_backend_typeN)rj   r   )r   )r6   r7   r8   r4   rD   r(   r   r   r   r   ri     s   
ri   c             C   s
   t | tƒS )N)ri   r	   )rj   r   r   r   ÚConstPointerType  s    rm   c               @   s   e Zd ZdZddd„ZdS )	ÚNamedPointerTyperj   r2   r   c             C   s"   t j| ||ƒ || _|d | _d S )Nr   )ri   rD   r2   r   )r    rj   r2   r   r   r   r   rD     s    zNamedPointerType.__init__N)rj   r2   )r   )r6   r7   r8   r4   rD   r   r   r   r   rn     s   rn   c               @   s4   e Zd ZdZdZdd„ Zdd„ Zdd	„ Zd
d„ ZdS )Ú	ArrayTypeÚitemÚlengthTc             C   sF   || _ || _|d krd}n|dkr(d}nd| }| j jjd|ƒ| _d S )Nz&[]z...z
&[/*...*/]z&[%s]r   )rp   rq   r   r   )r    rp   rq   Zbracketsr   r   r   rD   )  s    zArrayType.__init__c             C   s   t | jtƒS )N)Ú
isinstancerq   Ústr)r    r   r   r   Úlength_is_unknown6  s    zArrayType.length_is_unknownc             C   s   t | j|ƒS )N)ro   rp   )r    Z	newlengthr   r   r   Úresolve_length9  s    zArrayType.resolve_lengthc             C   sH   | j ƒ rtd| f ƒ‚| jj||ƒ t| jƒj||ƒ}t| |d|| jƒS )Nz)cannot render the type %r: unknown lengthZnew_array_type)rt   r   rp   r.   ri   rE   rq   )r    r*   r+   ZBPtrItemr   r   r   r(   <  s    
zArrayType.build_backend_typeN)rp   rq   )	r6   r7   r8   r4   r9   rD   rt   ru   r(   r   r   r   r   ro   %  s   ro   rM   c               @   s,   e Zd Zd	ZdZdd„ Zdd„ Zdd„ ZdS )
ÚStructOrUnionOrEnumr2   Nc             C   s$   | j pd| j| jf }|d | _d S )Nz%s %sr   )Ú	forcenameÚkindr2   r   )r    r2   r   r   r   Úbuild_c_name_with_markerK  s    z,StructOrUnionOrEnum.build_c_name_with_markerc             C   s   || _ | jƒ  d S )N)rw   ry   )r    rw   r   r   r   Úforce_the_nameO  s    z"StructOrUnionOrEnum.force_the_namec             C   s   | j jdƒst‚| j d d… S )Nr   r   éÿÿÿÿ)r   Úendswithr   )r    r   r   r   Úget_official_nameS  s    z%StructOrUnionOrEnum.get_official_name)r2   )r6   r7   r8   r4   rw   ry   rz   r}   r   r   r   r   rv   G  s
   rv   c               @   sj   e Zd ZdZdZdZdZddd„Zdd„ Zdd	d
„Z	dd„ Z
ddd„Zdd„ Zdd„ Zdd„ Zdd„ ZdS )ÚStructOrUnionNr   Fc             C   s*   || _ || _|| _|| _|| _| jƒ  d S )N)r2   ÚfldnamesÚfldtypesÚ
fldbitsizeÚfldqualsry   )r    r2   r   r€   r�   r‚   r   r   r   rD   ^  s    zStructOrUnion.__init__c             c   sB   | j d k	r>x2t| j| j ƒD ] \}}|dkrt|tƒr|V  qW d S )Nr   )r€   Úzipr   rr   r~   )r    r2   Útyper   r   r   Úanonymous_struct_fieldsf  s    
z%StructOrUnion.anonymous_struct_fieldsTc             c   s„   | j }|d krdt| jƒ }xbt| j| j| j|ƒD ]J\}}}}|dkrnt|tƒrn|rnx&|jƒ D ]
}|V  q^W q2||||fV  q2W d S )Nr   r   )r   )	r‚   Úlenr   rƒ   r€   r�   rr   r~   Ú
enumfields)r    Zexpand_anonymous_struct_unionr‚   r2   r„   Úbitsizer   r"   r   r   r   r‡   l  s    zStructOrUnion.enumfieldsc       	      C   s~   g }g }g }g }x@| j ƒ D ]4\}}}}|j|ƒ |j|ƒ |j|ƒ |j|ƒ qW t|ƒ| _t|ƒ| _t|ƒ| _t|ƒ| _d S )N)r‡   r_   rA   r   r€   r�   r‚   )	r    ÚnamesÚtypesZbitsizesr‚   r2   r„   rˆ   r   r   r   r   Úforce_flattenz  s    





zStructOrUnion.force_flattenc             C   s$   t j| |||ƒ}|s | j||ƒ |S )N)rv   r.   Úfinish_backend_type)r    r*   r+   r,   r-   r   r   r   r.   Œ  s
    
zStructOrUnion.get_cached_btypec                s6  | j r$| j dkr td| jf ƒ‚d S ˆ j|  }d| _ | jd krB�nê| jd kr¸‡ ‡fdd„| jD ƒ}tt| j|| j	ƒƒ}f }| j
rš| j
dkr�d}n
d| j
f}ˆ jj||| ddf|žŽ  �ntg }| j\}}}	}
�x4tt| jƒƒD �] }|| }| j| }t|tƒ�rˆ|jƒ �rˆ|jjˆ ˆƒ}t|ˆ j|ƒƒ\}}|dk�rV| jd| j| j| �pNd	f ƒ |j|ƒ}| jd |… |f | j|d d …  | _|jˆ ˆƒ}t|tƒ�r¼|jd k�r¼|dk�sôt‚n8ˆ j|ƒ}||k�rô| jd
| j| j| �pèd	||f ƒ |j|ƒ qÜW tt| j|| j	|ƒƒ}ˆ jj||| |	|
ƒ d| _ d S )Nr   z(recursive structure declaration for '%s'r   c                s   g | ]}|j ˆ ˆƒ‘qS r   )r.   )r1   rg   )r*   r+   r   r   r3   ¡  s   z5StructOrUnion.finish_backend_type.<locals>.<listcomp>é   r   zfield '%s.%s' has a bogus size?z{}z=field '%s.%s' is declared as %d bytes, but is really %d bytes)r�   r{   r{   )Ú	completedrW   r2   r&   r€   ÚfixedlayoutÚlistrƒ   r   r�   Úpackedre   Zcomplete_struct_or_unionÚranger†   rr   ro   rt   rp   r.   ÚdivmodÚsizeofÚ_verification_errorru   rq   r   r_   )r    r*   r+   r-   r€   ÚlstÚextra_flagsZfieldofsZ	fieldsizeZ	totalsizeZtotalalignmentrJ   ÚfsizeZftypeZ	BItemTypeÚnlenZnrestZ
BFieldTypeZ	bitemsizer   )r*   r+   r   rŒ   “  sd    











z!StructOrUnion.finish_backend_typec             C   s   t |ƒ‚d S )N)r   )r    Úmsgr   r   r   r•   Ò  s    z!StructOrUnion._verification_errorc             C   s    | j r| jd krt| jƒ ƒ‚d S )N)Úpartialr�   r   r   )r    r   r   r   Úcheck_not_partialÕ  s    zStructOrUnion.check_not_partialc             C   s.   | j ƒ  |j| ƒ t| |d| j | jƒ | d�S )Nznew_%s_type)Úkey)rœ   r_   rE   rx   r}   )r    r*   r+   r   r   r   r(   Ù  s    
z StructOrUnion.build_backend_type)N)T)F)r6   r7   r8   r�   rŽ   r›   r‘   rD   r…   r‡   r‹   r.   rŒ   r•   rœ   r(   r   r   r   r   r~   X  s   


?r~   c               @   s   e Zd ZdZdS )Ú
StructTypeÚstructN)r6   r7   r8   rx   r   r   r   r   rž   á  s   rž   c               @   s   e Zd ZdZdS )Ú	UnionTypeÚunionN)r6   r7   r8   rx   r   r   r   r   r    å  s   r    c               @   sB   e Zd ZdZdZdZddd„Zdd„ Zdd	„ Zd
d„ Z	dd„ Z
dS )ÚEnumTypeÚenumFNc             C   s$   || _ || _|| _|| _| jƒ  d S )N)r2   ÚenumeratorsÚ
enumvaluesÚbaseinttypery   )r    r2   r¤   r¥   r¦   r   r   r   rD   î  s
    zEnumType.__init__c             C   s4   t j| |ƒ | jd kr0| jƒ }d|jddƒ | _d S )Nr   r   Ú_)rv   rz   rw   r}   r   )r    rw   r2   r   r   r   rz   õ  s    
zEnumType.force_the_namec             C   s   | j r| j rt| jƒ ƒ‚d S )N)r›   Úpartial_resolvedr   r   )r    r   r   r   rœ   û  s    zEnumType.check_not_partialc          
   C   s4   | j ƒ  | j||ƒ}t| |d| jƒ | j| j|| d�S )NZnew_enum_type)r�   )rœ   Úbuild_baseinttyperE   r}   r¤   r¥   )r    r*   r+   Z
base_btyper   r   r   r(   ÿ  s    zEnumType.build_backend_typec             C   sH  | j d k	r| j j||ƒS | jr4t| jƒ}t| jƒ}nDdd l}ytjƒ  W n tk
r\   Y nX |j	d| j
ƒ  ƒ d }}|dk r–d}tdƒ}tdƒ}nd}tdƒ}tdƒ}|j||ƒ}	|j||ƒ}
|j|	ƒ}|j|
ƒ}|d
d| d > koü|dd| | > k �r|	S |dd| d > k�r4|dd| | > k �r4|
S td	| j
ƒ  ƒ‚d S )Nr   zU%r has no values explicitly defined; guessing that it is equivalent to 'unsigned int'r   rO   rP   zunsigned intzunsigned longr�   z=%s values don't all fit into either 'long' or 'unsigned long'r{   r{   )r¦   r.   r¥   ÚminÚmaxÚwarningsÚ__warningregistry__ÚclearÚ	NameErrorÚwarnr   rH   r”   r   )r    r*   r+   Zsmallest_valueZlargest_valuer¬   ÚsignZ
candidate1Z
candidate2Zbtype1Zbtype2Zsize1Zsize2r   r   r   r©     s@    




zEnumType.build_baseinttype)N)r6   r7   r8   rx   r›   r¨   rD   rz   rœ   r(   r©   r   r   r   r   r¢   é  s   
r¢   c             C   s2   |d krd|  }t |d d d ƒ}|j| ƒ d|_|S )Nz$%sÚunknown_type)rž   rz   Úorigin)r2   Ú
structnamerg   r   r   r   r²   0  s    
r²   c             C   s(   |d krd|  }t |d d d ƒ}t|| ƒS )Nz$$%s)rž   rn   )r2   r´   rg   r   r   r   Úunknown_ptr_type8  s    rµ   c          
   C   sF   t | tjƒrtS t�( tt| ƒdƒs2tjƒ t| ƒ_	t| ƒj	S Q R X d S )NÚ__typecache)
rr   rŠ   Ú
ModuleTypeÚ_typecache_cffi_backendÚglobal_lockÚhasattrr„   ÚweakrefÚWeakValueDictionaryr¶   )Úbackendr   r   r   Úget_typecacheB  s    r¾   c       
       O   sÀ   |j d||fƒ}| st‚y
|j| S  tk
r8   Y nX yt|j|ƒ|Ž }W n4 tk
r‚ } ztd|| |f ƒ‚W Y d d }~X nX |j}t�( |j|ƒ}	|	d kr®|||< |S |	S W d Q R X d S )Nr�   z
%s: %r: %s)	Úpopr   Z
_typecacher'   r0   re   rW   r¹   Úget)
Zsrctyper*   ÚfuncnamerZ   Úkwdsr�   ÚresÚeÚcacheZres1r   r   r   rE   M  s"    

$
rE   c             C   s   t d| d|ƒS )Nú?rl   )rE   )r*   r-   r   r   r   Úpointer_cached  s    rÇ   c             C   s@   | j r<t| j d ƒtkr<d|| j d f f| j dd …  | _ d S )Nr   z%s: %sr   )rZ   r„   rs   )rÄ   r2   r   r   r   Úattach_exception_infog  s    rÈ   )N)N)-rŠ   r»   Úlockr   Úerrorr   r   r   r	   r   r   r   Úobjectr   r;   rC   Z	void_typerF   rH   rV   rX   rY   rb   rc   ri   Z
voidp_typerm   Zconst_voidp_typern   ro   Zchar_array_typerv   r~   rž   r    r¢   r²   rµ   r¹   r¼   r¸   r¾   rE   rÇ   rÈ   r   r   r   r   Ú<module>   sN   /	L	 
G

