3
.W#R                 @   s  d dl Z d dlZd dlZddl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 d9d/d0Z!d:d1d2Z"e Z#d3d4 Z$d5d6 Z%d7d8 Z&dS );    N   )allocate_lock      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   J/var/www/html/enquirykeeper_venv/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rdd
lm} |d| j	 |f |S )N&r   *z&[z(%s)r   z[( $)VerificationErrorz-cannot generate '%s' in %s: unknown type name)
c_name_with_markercountAssertionErrorstrip
startswithr   replaceffiplatformr   _get_c_name)selfr   contextr
   resultr   r   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   0   s    zBaseTypeByIdentity._get_c_namec             C   s   d| j  kS )Nr   )r   )r   r   r   r   
has_c_name3   s    zBaseTypeByIdentity.has_c_namec             C   s   dS )NFr   )r   r   r   r   is_integer_type6   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_btype9   s    z#BaseTypeByIdentity.get_cached_btypec             C   s   d| j  f S )Nz<%s>)r   )r   r   r   r   __repr__B   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>F   s    z1BaseTypeByIdentity._get_items.<locals>.<listcomp>)_attrs_)r   r   )r   r   
_get_itemsE   s    zBaseTypeByIdentity._get_itemsN)r   r   r   )F)__name__
__module____qualname__is_array_typeis_raw_functionr"   r   r#   r$   r-   r.   r4   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__r4   )r   otherr   r   r   __eq__K   s    zBaseType.__eq__c             C   s
   | |k S )Nr   )r   r<   r   r   r   __ne__O   s    zBaseType.__ne__c             C   s   t | jt| j fS )N)hashr;   tupler4   )r   r   r   r   __hash__R   s    zBaseType.__hash__N)r5   r6   r7   r=   r>   rA   r   r   r   r   r:   I   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__Y   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)r5   r6   r7   r3   rC   r'   r   r   r   r   rB   V   s   rB   c               @   s   e Zd ZdS )BasePrimitiveTypeN)r5   r6   r7   r   r   r   r   rE   b   s   rE   c            0   @   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/Zdd Zdd	 Zd
d Zdd Zdd Z	dS )PrimitiveTyper1   cif)/charshortintlongz	long longzsigned charzunsigned charzunsigned shortzunsigned intzunsigned longzunsigned long longfloatZdoublezlong doubleZ_BoolZwchar_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   r1   r   )r   r1   r   r   r   rC      s    zPrimitiveType.__init__c             C   s   | j | j dkS )NrG   )rO   r1   )r   r   r   r   is_char_type   s    zPrimitiveType.is_char_typec             C   s   | j | j dkS )NrH   )rO   r1   )r   r   r   r   r$      s    zPrimitiveType.is_integer_typec             C   s   | j | j dkS )NrI   )rO   r1   )r   r   r   r   is_float_type   s    zPrimitiveType.is_float_typec             C   s   t | |d| jS )NZnew_primitive_type)rD   r1   )r   r)   r*   r   r   r   r'      s    z PrimitiveType.build_backend_typeN)r1   )
r5   r6   r7   r3   rO   rC   rP   r$   rQ   r'   r   r   r   r   rF   f   sj   rF   c               @   s(   e Zd Zd	Zdd Zdd Zdd ZdS )
UnknownIntegerTyper1   c             C   s   || _ |d | _d S )Nr   )r1   r   )r   r1   r   r   r   rC      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)NotImplementedErrorr1   )r   r)   r*   r   r   r   r'      s    z%UnknownIntegerType.build_backend_typeN)r1   )r5   r6   r7   r3   rC   r$   r'   r   r   r   r   rR      s   rR   c               @   s    e Zd ZdZdd Zdd ZdS )UnknownFloatTyper1   c             C   s   || _ |d | _d S )Nr   )r1   r   )r   r1   r   r   r   rC      s    zUnknownFloatType.__init__c             C   s   t d| j d S )Nz2float type '%s' can only be used after compilation)rS   r1   )r   r)   r*   r   r   r   r'      s    z#UnknownFloatType.build_backend_typeN)r1   )r5   r6   r7   r3   rC   r'   r   r   r   r   rT      s   rT   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   )r0   argr   r   r   r2      s    z-BaseFunctionType.__init__.<locals>.<listcomp>z...voidz, r   r   r   )	rV   r!   rW   rX   append_base_patternjoinr   r   )r   rV   r!   rW   rX   Zreprargsr   r   r   r   rC      s    

 zBaseFunctionType.__init__)rV   r!   rW   rX   )N)r5   r6   r7   r3   rC   r   r   r   r   rU      s   rU   c               @   s$   e Zd ZdZdZdd Zdd ZdS )RawFunctionTypez(&)(%s)Tc             C   s    ddl m} |jd| f d S )Nr   )apizPcannot render the type %r: it is a function type, not a pointer-to-function type)r   r_   	CDefError)r   r)   r*   r_   r   r   r   r'      s    z"RawFunctionType.build_backend_typec             C   s   t | j| j| j| jS )N)FunctionPtrTyperV   r!   rW   rX   )r   r   r   r   as_function_pointer   s    z#RawFunctionType.as_function_pointerN)r5   r6   r7   r\   r9   r'   rb   r   r   r   r   r^      s   r^   c               @   s    e Zd ZdZdd Zdd ZdS )ra   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-   rV   r[   rX   rW   _backendZFFI_STDCALLAttributeErrorrD   r@   )r   r)   r*   r!   rV   tpZabi_argsr   r   r   r'      s    
z"FunctionPtrType.build_backend_typec             C   s   t | j| j| j| jS )N)r^   rV   r!   rW   rX   )r   r   r   r   as_raw_function   s    zFunctionPtrType.as_raw_functionN)r5   r6   r7   r\   r'   rf   r   r   r   r   ra      s   ra   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   )rh   r
   r   r8   r   r   r   )r   rh   r
   extrar   r   r   rC     s    
zPointerType.__init__c             C   s    | j j||dd}t| |d|S )NT)r+   new_pointer_type)rh   r-   rD   )r   r)   r*   ZBItemr   r   r   r'     s    zPointerType.build_backend_typeN)rh   r
   )r   )r5   r6   r7   r3   rC   r'   r   r   r   r   rg      s   
rg   c             C   s
   t | tS )N)rg   r   )rh   r   r   r   ConstPointerType  s    rk   c               @   s   e Zd ZdZdddZdS )	NamedPointerTyperh   r1   r   c             C   s"   t j| || || _|d | _d S )Nr   )rg   rC   r1   r   )r   rh   r1   r
   r   r   r   rC     s    zNamedPointerType.__init__N)rh   r1   )r   )r5   r6   r7   r3   rC   r   r   r   r   rl     s   rl   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jd|| _d S )Nz&[]z...z
&[/*...*/]z&[%s]r   )rn   ro   r   r   )r   rn   ro   Zbracketsr   r   r   rC   $  s    zArrayType.__init__c             C   s   t | j|S )N)rm   rn   )r   Z	newlengthr   r   r   resolve_length1  s    zArrayType.resolve_lengthc             C   sX   | j dkr&ddlm} |jd| f | jj|| t| jj||}t| |d|| j S )Nz...r   )r_   z)cannot render the type %r: unknown lengthZnew_array_type)ro   r   r_   r`   rn   r-   rg   rD   )r   r)   r*   r_   ZBPtrItemr   r   r   r'   4  s    

zArrayType.build_backend_typeN)rn   ro   )r5   r6   r7   r3   r8   rC   rp   r'   r   r   r   r   rm      s
   rm   rJ   c               @   s,   e Zd Zd	ZdZdd Zdd Zdd ZdS )
StructOrUnionOrEnumr1   Nc             C   s$   | j pd| j| jf }|d | _d S )Nz%s %sr   )	forcenamekindr1   r   )r   r1   r   r   r   build_c_name_with_markerD  s    z,StructOrUnionOrEnum.build_c_name_with_markerc             C   s   || _ | j  d S )N)rr   rt   )r   rr   r   r   r   force_the_nameH  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_nameL  s    z%StructOrUnionOrEnum.get_official_name)r1   )r5   r6   r7   r3   rr   rt   ru   rx   r   r   r   r   rq   @  s
   rq   c               @   sh   e Zd Zd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d Zdd ZdS )StructOrUnionNr   Fc             C   s*   || _ || _|| _|| _|| _| j  d S )N)r1   fldnamesfldtypes
fldbitsizefldqualsrt   )r   r1   rz   r{   r|   r}   r   r   r   rC   W  s    zStructOrUnion.__init__c             C   sD   | j d krdS x0t| j| j D ]\}}|dkrt|trdS qW dS )NFr   T)r{   ziprz   
isinstancery   )r   r1   typer   r   r   has_anonymous_struct_fields_  s    
z)StructOrUnion.has_anonymous_struct_fieldsc             c   s   | j }|d krdt| j }x^t| j| j| j|D ]F\}}}}|dkrjt|trjx&|j D ]
}|V  qZW q2||||fV  q2W d S )Nr   r   )r   )	r}   lenrz   r~   r{   r|   r   ry   
enumfields)r   r}   r1   r   bitsizer
   r!   r   r   r   r   g  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[   r@   rz   r{   r|   r}   )	r   namestypesZbitsizesr}   r1   r   r   r
   r   r   r   force_flattent  s    





zStructOrUnion.force_flattenc             C   s$   t j| |||}|s | j|| |S )N)rq   r-   finish_backend_type)r   r)   r*   r+   r,   r   r   r   r-     s
    
zStructOrUnion.get_cached_btypec                s  | 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
rd} jj||| dd| ntg }| j\}}}	}
x4tt| jD ] }|| }| j| }t|to|jdkrn|jj }t| j|\}}|dkr<| jd	| j| j| p4d
f  |j|}| jd | |f | j|d d   | _|j }t|tr|jd kr|dkstn8 j|}||kr| jd| j| j| pd
||f  |j| qW 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-   )r0   re   )r)   r*   r   r   r2     s   z5StructOrUnion.finish_backend_type.<locals>.<listcomp>r      z...zfield '%s.%s' has a bogus size?z{}z=field '%s.%s' is declared as %d bytes, but is really %d bytesrv   rv   )	completedrS   r1   r%   r{   fixedlayoutlistr~   rz   r|   packedrc   Zcomplete_struct_or_unionranger   r   rm   ro   rn   r-   divmodsizeof_verification_errorrp   r   r[   )r   r)   r*   r,   r{   lstZsflagsZfieldofsZ	fieldsizeZ	totalsizeZtotalalignmentrH   fsizeZftypeZ	BItemTypenlenZnrestZ
BFieldTypeZ	bitemsizer   )r)   r*   r   r     s`    









z!StructOrUnion.finish_backend_typec             C   s   ddl m} ||d S )Nr   )r   )r   r   )r   msgr   r   r   r   r     s    z!StructOrUnion._verification_errorc             C   s.   | j r*| jd kr*ddlm} |j| j d S )Nr   )r   )partialr   r   r   VerificationMissingr   )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[   rD   rs   rx   )r   r)   r*   r   r   r   r'     s    
z StructOrUnion.build_backend_type)N)F)r5   r6   r7   r   r   r   r   rC   r   r   r   r-   r   r   r   r'   r   r   r   r   ry   Q  s   

<ry   c               @   s   e Zd ZdZdS )
StructTypestructN)r5   r6   r7   rs   r   r   r   r   r     s   r   c               @   s   e Zd ZdZdS )	UnionTypeunionN)r5   r6   r7   rs   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)r1   enumerators
enumvaluesbaseinttypert   )r   r1   r   r   r   r   r   r   rC     s
    zEnumType.__init__c             C   s4   t j| | | jd kr0| j }d|jdd | _d S )Nr   r   _)rq   ru   rr   rx   r   )r   rr   r1   r   r   r   ru     s    
zEnumType.force_the_namec             C   s,   | j r(| j r(ddlm} |j| j d S )Nr   )r   )r   partial_resolvedr   r   r   r   )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_baseinttyperD   rx   r   r   )r   r)   r*   Z
base_btyper   r   r   r'     s    zEnumType.build_backend_typec             C   s"  | j d k	r| j j||S ddlm} | jr@t| j}t| j}n|jd| j  |dk rpd}t	d}t	d}nd}t	d}t	d}|j||}	|j||}
|j
|	}|j
|
}|dd	| d > kr|dd	| | > k r|	S |dd	| d > kr|dd	| | > k r|
S |jd
| j  d S )Nr   )r_   zw%r has no values explicitly defined: refusing to guess which integer type it is meant to be (unsigned/signed, int/long)r   rL   rM   zunsigned intzunsigned longr   z=%s values don't all fit into either 'long' or 'unsigned long'rv   rv   )r   r-   r   r_   r   minmaxr`   r   rF   r   )r   r)   r*   r_   Zsmallest_valueZlargest_valuesignZ
candidate1Z
candidate2Zbtype1Zbtype2Zsize1Zsize2r   r   r   r     s6    




zEnumType.build_baseinttype)N)r5   r6   r7   rs   r   r   rC   ru   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   ru   origin)r1   
structnamere   r   r   r   r   #  s    
r   c             C   s(   |d krd|  }t |d d d }t|| S )Nz$$%s)r   rl   )r1   r   re   r   r   r   unknown_ptr_type+  s    r   c       
       O   s  |j d||f}| sty|jj| S  tk
r:   Y n@ tk
rx   t|jtjrdt	j
 |j_nt	j
 t|j_Y nX yt|j|| }W n4 tk
r } ztd|| |f W Y d d }~X nX |jj}t( |j|}	|	d kr|||< |S |	S W d Q R X d S )Nr   z
%s: %r: %s)popr   rc   Z__typecacher&   rd   r   r   
ModuleTypeweakrefWeakValueDictionaryr   r/   rS   global_lockget)
Zsrctyper)   funcnamerV   kwdsr   resecacheZres1r   r   r   rD   4  s*    
$
rD   c             C   s   t d| d|S )N?rj   )rD   )r)   r,   r   r   r   pointer_cacheS  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   )rV   r   str)r   r1   r   r   r   attach_exception_infoV  s    r   )N)N)'r   sysr   lockr   r   r	   r   r   objectr   r:   rB   Z	void_typerE   rF   rR   rT   rU   r^   ra   rg   Z
voidp_typerk   Zconst_voidp_typerl   rm   Zchar_array_typerq   ry   r   r   r   r   r   r   rD   r   r   r   r   r   r   <module>   sH   0	F	 
A

