
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
U
    Ù„=^²T  ã                   @   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 '¡ Z(d4d5„ Z)d6d7„ Z*d8d9„ Z+d:d;„ Z,dS )>é    Né   )Úallocate_lock)Ú	CDefErrorÚVerificationErrorÚVerificationMissingé   é   c                 C   s@   | t @ rd| ¡  }| t@ r(d| ¡  }| t@ r<d| ¡  }|S )Nz const z
 volatile z __restrict )ÚQ_CONSTÚlstripÚ
Q_VOLATILEÚ
Q_RESTRICT)ÚqualsÚreplace_with© r   ú=/opt/alt/python38/lib64/python3.8/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 }| d¡dkst‚| ¡ }|rT| d¡r@d|kr@d| }n|d dkrTd| }t||ƒ}| d|¡}d	|kr†td
|  ¡ |f ƒ‚|S )Nú&r   Ú*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  dd¡S )Nr   r   )r   r   ©r!   r   r   r   r    /   s    zBaseTypeByIdentity._get_c_namec                 C   s   d|   ¡ 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   z|j |  }W n: tk
rH   |  ||¡}|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|   ¡ 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Únamer%   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)   r3   r4   r:   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|  ¡ | ¡ kS r*   )Ú	__class__r:   ©r!   Úotherr   r   r   Ú__eq__J   s    ÿzBaseType.__eq__c                 C   s
   | |k S r*   r   rB   r   r   r   Ú__ne__N   s    zBaseType.__ne__c                 C   s   t | jt|  ¡ ƒfƒS r*   )ÚhashrA   Útupler:   r%   r   r   r   Ú__hash__Q   s    zBaseType.__hash__N)r;   r<   r=   rD   rE   rH   r   r   r   r   r@   H   s   r@   c                   @   s    e Zd ZdZdd„ Zdd„ ZdS )ÚVoidTyper   c                 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/   r0   r   r   r   r-   [   s    zVoidType.build_backend_typeN©r;   r<   r=   r9   rJ   r-   r   r   r   r   rI   U   s   rI   c                   @   s   e Zd Zdd„ ZdS )ÚBasePrimitiveTypec                 C   s   dS r(   r   r%   r   r   r   Úis_complex_typeb   s    z!BasePrimitiveType.is_complex_typeN)r;   r<   r=   rP   r   r   r   r   rO   a   s   rO   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 )ÚPrimitiveType©r7   ÚcÚiÚfÚj)3ÚcharÚshortÚintÚlongz	long longzsigned charzunsigned charzunsigned shortúunsigned intúunsigned longzunsigned long longÚfloatZ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   r7   r   ©r!   r7   r   r   r   rJ       s    zPrimitiveType.__init__c                 C   s   | j | j dkS )NrS   ©r_   r7   r%   r   r   r   Úis_char_type¥   s    zPrimitiveType.is_char_typec                 C   s   | j | j dkS )NrT   ra   r%   r   r   r   r)   §   s    zPrimitiveType.is_integer_typec                 C   s   | j | j dkS )NrU   ra   r%   r   r   r   Úis_float_type©   s    zPrimitiveType.is_float_typec                 C   s   | j | j dkS )NrV   ra   r%   r   r   r   rP   «   s    zPrimitiveType.is_complex_typec                 C   s   t | |d| jƒS )NZnew_primitive_type)rL   r7   rM   r   r   r   r-   ®   s    z PrimitiveType.build_backend_typeN)r;   r<   r=   r9   r_   rJ   rb   r)   rc   rP   r-   r   r   r   r   rQ   f   sv   Ì7rQ   c                   @   s(   e Zd ZdZdd„ Zdd„ Zdd„ ZdS )	ÚUnknownIntegerTyperR   c                 C   s   || _ |d | _d S r^   ©r7   r   r`   r   r   r   rJ   µ   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©ÚNotImplementedErrorr7   rM   r   r   r   r-   ¼   s    ÿz%UnknownIntegerType.build_backend_typeN)r;   r<   r=   r9   rJ   r)   r-   r   r   r   r   rd   ²   s   rd   c                   @   s    e Zd ZdZdd„ Zdd„ ZdS )ÚUnknownFloatTyperR   c                 C   s   || _ |d | _d S r^   re   r`   r   r   r   rJ   Ã   s    zUnknownFloatType.__init__c                 C   s   t d| j ƒ‚d S )Nz2float type '%s' can only be used after compilationrf   rM   r   r   r   r-   Ç   s    ÿz#UnknownFloatType.build_backend_typeNrN   r   r   r   r   rh   À   s   rh   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| d¡ |p@dg}| jd |¡f }|d k	r||d d… | d |dd …  }| jj d|¡| _d S )	Nc                 S   s   g | ]}|  ¡ ‘qS r   r&   )r6   Úargr   r   r   r8   Õ   s     z-BaseFunctionType.__init__.<locals>.<listcomp>ú...Úvoidz, r   r   r   )	rj   r#   rk   rl   ÚappendÚ_base_patternÚjoinr   r   )r!   rj   r#   rk   rl   Zreprargsr   r   r   r   rJ   Ï   s    

 ÿzBaseFunctionType.__init__)N©r;   r<   r=   r9   rJ   r   r   r   r   ri   Ì   s   ri   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   rM   r   r   r   r-   ç   s    ÿz"RawFunctionType.build_backend_typec                 C   s   t | j| j| j| jƒS r*   )ÚFunctionPtrTyperj   r#   rk   rl   r%   r   r   r   Úas_function_pointerë   s    z#RawFunctionType.as_function_pointerN)r;   r<   r=   rq   r?   r-   rv   r   r   r   r   rt   à   s   rt   c                   @   s    e Zd ZdZdd„ Zdd„ ZdS )ru   z(*&)(%s)c                 C   s†   | j  ||¡}g }| jD ]}| | ||¡¡ qd}| jdkrh| jshz|jjf}W n tk
rf   Y nX t	| |dt
|ƒ|| jf|žŽ S )Nr   Z	__stdcallZnew_function_type)r#   r3   rj   rp   rl   rk   Ú_backendZFFI_STDCALLÚAttributeErrorrL   rG   )r!   r/   r0   r#   rj   ÚtpZabi_argsr   r   r   r-   ò   s$    

  ÿÿz"FunctionPtrType.build_backend_typec                 C   s   t | j| j| j| jƒS r*   )rt   rj   r#   rk   rl   r%   r   r   r   Úas_raw_function  s    zFunctionPtrType.as_raw_functionN)r;   r<   r=   rq   r-   rz   r   r   r   r   ru   ï   s   ru   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| ¡ f }|j d|¡| _d S )Nz *&r   r   )r|   r   r   r>   r
   r   r   )r!   r|   r   Úextrar   r   r   rJ     s    
zPointerType.__init__c                 C   s    | j j||dd�}t| |d|ƒS )NT)r1   Únew_pointer_type)r|   r3   rL   )r!   r/   r0   ZBItemr   r   r   r-     s    zPointerType.build_backend_typeN)r   rN   r   r   r   r   r{     s   
r{   c                 C   s
   t | tƒS r*   )r{   r	   )r|   r   r   r   ÚConstPointerType  s    r   c                   @   s   e Zd ZdZddd„ZdS )ÚNamedPointerType)r|   r7   r   c                 C   s"   t  | ||¡ || _|d | _d S r^   )r{   rJ   r7   r   )r!   r|   r7   r   r   r   r   rJ     s    zNamedPointerType.__init__N)r   rs   r   r   r   r   r€     s   r€   c                   @   s,   e Zd ZdZ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 d|¡| _d S )Nz&[]rn   z
&[/*...*/]z&[%s]r   )r‚   rƒ   r   r   )r!   r‚   rƒ   Zbracketsr   r   r   rJ   )  s    ÿzArrayType.__init__c                 C   s   t | j|ƒS r*   )r�   r‚   )r!   Z	newlengthr   r   r   Úresolve_length6  s    zArrayType.resolve_lengthc                 C   sJ   | j dkrtd| f ƒ‚| j ||¡ t| jƒ ||¡}t| |d|| j ƒS )Nrn   z)cannot render the type %r: unknown lengthZnew_array_type)rƒ   r   r‚   r3   r{   rL   )r!   r/   r0   ZBPtrItemr   r   r   r-   9  s    
ÿzArrayType.build_backend_typeN)r;   r<   r=   r9   r>   rJ   r„   r-   r   r   r   r   r�   %  s
   r�   rW   c                   @   s,   e Zd ZdZdZdd„ Zdd„ Zdd„ ZdS )	ÚStructOrUnionOrEnumrR   Nc                 C   s$   | j pd| j| jf }|d | _d S )Nz%s %sr   )Ú	forcenameÚkindr7   r   r`   r   r   r   Úbuild_c_name_with_markerH  s    z,StructOrUnionOrEnum.build_c_name_with_markerc                 C   s   || _ |  ¡  d S r*   )r†   rˆ   )r!   r†   r   r   r   Úforce_the_nameL  s    z"StructOrUnionOrEnum.force_the_namec                 C   s   | j  d¡st‚| j d d… S )Nr   éÿÿÿÿ)r   Úendswithr   r%   r   r   r   Úget_official_nameP  s    z%StructOrUnionOrEnum.get_official_name)r;   r<   r=   r9   r†   rˆ   r‰   rŒ   r   r   r   r   r…   D  s
   r…   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*   || _ || _|| _|| _|| _|  ¡  d S r*   )r7   ÚfldnamesÚfldtypesÚ
fldbitsizeÚfldqualsrˆ   )r!   r7   rŽ   r�   r�   r‘   r   r   r   rJ   [  s    zStructOrUnion.__init__c                 c   s>   | j d k	r:t| j| j ƒD ] \}}|dkrt|tƒr|V  qd S )Nr   )r�   ÚziprŽ   Ú
isinstancer�   )r!   r7   Útyper   r   r   Úanonymous_struct_fieldsc  s    
z%StructOrUnion.anonymous_struct_fieldsTc                 c   s|   | j }|d krdt| jƒ }t| j| j| j|ƒD ]F\}}}}|dkrht|tƒrh|rh| ¡ D ]
}|V  qZq0||||fV  q0d S )N)r   r   )	r‘   ÚlenrŽ   r’   r�   r�   r“   r�   Ú
enumfields)r!   Zexpand_anonymous_struct_unionr‘   r7   r”   Úbitsizer   r#   r   r   r   r—   i  s    
 ÿÿ
zStructOrUnion.enumfieldsc           	      C   sz   g }g }g }g }|   ¡ D ]4\}}}}| |¡ | |¡ | |¡ | |¡ qt|ƒ| _t|ƒ| _t|ƒ| _t|ƒ| _d S r*   )r—   rp   rG   rŽ   r�   r�   r‘   )	r!   ÚnamesÚtypesZbitsizesr‘   r7   r”   r˜   r   r   r   r   Úforce_flattenw  s    





zStructOrUnion.force_flattenc                 C   s$   t  | |||¡}|s |  ||¡ |S r*   )r…   r3   Úfinish_backend_type)r!   r/   r0   r1   r2   r   r   r   r3   ‰  s    
ÿzStructOrUnion.get_cached_btypec                    s2  | 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	ƒƒ}d}| j
rš| j
dkr�d}n
d| j
f}ˆ jj||| d	d	f|žŽ  �npg }| j\}}}	}
tt| jƒƒD �]"}|| }| j| }t|tƒ�r†|jd
k�r†|j ˆ ˆ¡}t|ˆ  |¡ƒ\}}|dk�rT|  d| j| j| �pLdf ¡ | |¡}| jd |… |f | j|d d …  | _| ˆ ˆ¡}t|tƒ�rº|jd k�rº|dk�sòt‚n8ˆ  |¡}||k�rò|  d| j| j| �pæd||f ¡ | |¡ qØtt| j|| j	|ƒƒ}ˆ j ||| |	|
¡ d| _ d S )Nr   z(recursive structure declaration for '%s'r   c                    s   g | ]}|  ˆ ˆ¡‘qS r   )r3   )r6   ry   ©r/   r0   r   r   r8   ž  s   ÿz5StructOrUnion.finish_backend_type.<locals>.<listcomp>r   )é   r   rŠ   rn   zfield '%s.%s' has a bogus size?z{}z=field '%s.%s' is declared as %d bytes, but is really %d bytes)Ú	completedrg   r7   r+   r�   ÚfixedlayoutÚlistr’   rŽ   r�   Úpackedrw   Zcomplete_struct_or_unionÚranger–   r“   r�   rƒ   r‚   r3   ÚdivmodÚsizeofÚ_verification_errorr„   r   rp   )r!   r/   r0   r2   r�   ÚlstÚextra_flagsZfieldofsZ	fieldsizeZ	totalsizeZtotalalignmentrT   ÚfsizeZftypeZ	BItemTypeZnlenZnrestZ
BFieldTypeZ	bitemsizer   r�   r   rœ   �  s„    
ÿ


ÿ

 ÿÿ


 ÿÿ
ÿ

 þÿÿ ÿz!StructOrUnion.finish_backend_typec                 C   s   t |ƒ‚d S r*   )r   )r!   Úmsgr   r   r   r¦   Ï  s    z!StructOrUnion._verification_errorc                 C   s    | j r| jd krt|  ¡ ƒ‚d S r*   )Úpartialr    r   r    r%   r   r   r   Úcheck_not_partialÒ  s    zStructOrUnion.check_not_partialc                 C   s.   |   ¡  | | ¡ t| |d| j |  ¡ | d�S )Nznew_%s_type©Úkey)r¬   rp   rL   r‡   rŒ   rM   r   r   r   r-   Ö  s    
 ÿz StructOrUnion.build_backend_type)N)T)F)r;   r<   r=   r    rŸ   r«   r¢   rJ   r•   r—   r›   r3   rœ   r¦   r¬   r-   r   r   r   r   r�   U  s   


?r�   c                   @   s   e Zd ZdZdS )Ú
StructTypeÚstructN©r;   r<   r=   r‡   r   r   r   r   r¯   Þ  s   r¯   c                   @   s   e Zd ZdZdS )Ú	UnionTypeÚunionNr±   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$   || _ || _|| _|| _|  ¡  d S r*   )r7   ÚenumeratorsÚ
enumvaluesÚbaseinttyperˆ   )r!   r7   r¶   r·   r¸   r   r   r   rJ   ë  s
    zEnumType.__init__c                 C   s4   t  | |¡ | jd kr0|  ¡ }d| dd¡ | _d S )Nr   r   Ú_)r…   r‰   r†   rŒ   r   )r!   r†   r7   r   r   r   r‰   ò  s    
zEnumType.force_the_namec                 C   s   | j r| jst|  ¡ ƒ‚d S r*   )r«   Úpartial_resolvedr   r    r%   r   r   r   r¬   ø  s    zEnumType.check_not_partialc              
   C   s4   |   ¡  |  ||¡}t| |d|  ¡ | j| j|| d�S )NZnew_enum_typer­   )r¬   Úbuild_baseinttyperL   rŒ   r¶   r·   )r!   r/   r0   Z
base_btyper   r   r   r-   ü  s      ýzEnumType.build_backend_typec                 C   sJ  | j d k	r| j  ||¡S | jr4t| jƒ}t| jƒ}nDdd l}zt ¡  W n tk
r\   Y nX | 	d|  
¡  ¡ d }}|dk r–d}tdƒ}tdƒ}nd}tdƒ}tdƒ}| ||¡}	| ||¡}
| |	¡}| |
¡}|dd	| d > k�r|dd	| | > k �r|	S |dd	| d > k�r6|dd	| | > k �r6|
S td
|  
¡  ƒ‚d S )Nr   zU%r has no values explicitly defined; guessing that it is equivalent to 'unsigned int'r   rY   rZ   r[   r\   rŠ   rž   z=%s values don't all fit into either 'long' or 'unsigned long')r¸   r3   r·   ÚminÚmaxÚwarningsZ__warningregistry__ÚclearÚ	NameErrorÚwarnr    rQ   r¥   r   )r!   r/   r0   Zsmallest_valueZlargest_valuer¾   ÚsignZ
candidate1Z
candidate2Zbtype1Zbtype2Zsize1Zsize2r   r   r   r»     sH    

þ


ÿÿÿzEnumType.build_baseinttype)N)r;   r<   r=   r‡   r«   rº   rJ   r‰   r¬   r-   r»   r   r   r   r   r´   æ  s   
r´   c                 C   s2   |d krd|  }t |d d d ƒ}| | ¡ d|_|S )Nz$%sÚunknown_type)r¯   r‰   Úorigin©r7   Z
structnamery   r   r   r   rÃ   -  s    
rÃ   c                 C   s(   |d krd|  }t |d d d ƒ}t|| ƒS )Nz$$%s)r¯   r€   rÅ   r   r   r   Úunknown_ptr_type5  s    rÆ   c              
   C   sR   t | tjƒrtS t�4 tt| ƒdƒs2t ¡ t| ƒ_	t| ƒj	W  5 Q R £ S Q R X d S )NÚ__typecache)
r“   rš   Ú
ModuleTypeÚ_typecache_cffi_backendÚglobal_lockÚhasattrr”   ÚweakrefÚWeakValueDictionaryrÇ   )Zbackendr   r   r   Úget_typecache?  s    rÎ   c           
   
   O   sØ   |  d||f¡}|rt‚z|j| W S  tk
r8   Y nX zt|j|ƒ|Ž }W n4 tk
r‚ } ztd|| |f ƒ‚W 5 d }~X Y nX |j}t�@ | |¡}	|	d krº|||< |W  5 Q R £ S |	W  5 Q R £ S W 5 Q R X d S )Nr®   z
%s: %r: %s)	Úpopr   Z
_typecacher,   r5   rw   rg   rÊ   Úget)
Zsrctyper/   Úfuncnamerj   Úkwdsr®   ÚresÚeÚcacheZres1r   r   r   rL   J  s"    $
rL   c                 C   s   t d| d|ƒS )Nú?r~   rK   )r/   r2   r   r   r   Úpointer_cachea  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   )rj   r”   Ústr)rÔ   r7   r   r   r   Úattach_exception_infod  s    rÙ   )N)N)-rš   rÌ   Úlockr   Úerrorr   r   r   r	   r   r   r   Úobjectr   r@   rI   Z	void_typerO   rQ   rd   rh   ri   rt   ru   r{   Z
voidp_typer   Zconst_voidp_typer€   r�   Zchar_array_typer…   r�   r¯   r²   r´   rÃ   rÆ   rÊ   rÍ   rÉ   rÎ   rL   r×   rÙ   r   r   r   r   Ú<module>   sN   /	L	 
G

