
    d;                     p   d dl mZmZmZmZmZmZmZ d dlZd dl	m
Z
 d dlmZmZ  G d dej                  Z G d dej                  Z G d	 d
ej                  Z G d de
j                  Z G d de
j                  Z G d de
j                  Z G d de
j                  Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Ze
j         ee          ge
j        j        _         e
j        ge
j        j!        _         e
j"        e
j        j!        _#        e
j        ge
j        j$        _         ee
j        j$        _#        e
j        ege
j        j%        _         e
j        ge
j        j&        _         e
j'        e
j        j&        _#        e
j'        ge
j        j(        _         ee
j        j(        _#        e
j'        ge
j        j)        _         ee
j        j)        _#        e
j'        ge
j        j*        _         e
j'        e
j        j*        _#        e
j'        ge
j        j+        _         ee
j        j+        _#        e
j        ge
j        j,        _         ee
j        j,        _#        e
j        ege
j        j-        _         e
j        ge
j        j.        _         ee
j        j.        _#        e
j        ege
j        j/        _         e
j        ge
j        j0        _         ee
j        j0        _#        e
j        ege
j        j1        _         eege
j        j2        _         ee
j        j2        _#        e
j        ege
j        j3        _         e
j        ge
j        j4        _         ee
j        j4        _#        e
j        ge
j        j5        _         e
j6        e
j        j5        _#        e
j        ge
j        j7        _         e
j6        e
j        j7        _#        e
j        ge
j        j8        _         e
j6        e
j        j8        _#        e
j        ge
j        j9        _         e
j:        e
j        j9        _#        e
j        ge
j        j;        _         e
j:        e
j        j;        _#        e
j        ge
j        j<        _         e
j=        e
j        j<        _#        e
j        ge
j        j>        _         e
j?        e
j        j>        _#        e
j        ge
j        j@        _         e
jA        e
j        j@        _#        e
j        ge
j        jB        _         e
jC        e
j        jB        _#        e
j6        ge
j        jD        _         e
j:        ge
j        jE        _         e
j=        ge
j        jF        _         e
jA        ge
j        jG        _         e
jC        ge
j        jH        _         e
j6        ge
j        jI        _         ee
j        jI        _#        e
j:        ge
j        jJ        _         ee
j        jJ        _#        e
j=        ge
j        jK        _         e
j        e
j        jK        _#        e
j?        ge
j        jL        _         e
j        e
j        jL        _#        e
jA        ge
j        jM        _         e
j        e
j        jM        _#        e
jC        ge
j        jN        _         e
j        e
j        jN        _#        e
j        ge
j        jO        _         ee
j        jO        _#        dS )    )POINTERc_char_pc_intc_size_tc_uintc_boolc_void_pN)ffi)_decode_string_encode_stringc                   R    e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdZdZdZdZdZdS )Linkager                           	   
                     N)__name__
__module____qualname__externalavailable_externallylinkonce_anylinkonce_odrlinkonce_odr_autohideweak_anyweak_odr	appendinginternalprivate	dllimport	dllexportexternal_weakghostcommonlinker_privatelinker_private_weak     6lib/python3.11/site-packages/llvmlite/binding/value.pyr   r      sj         HLLHHIHGIIMEFNr4   r   c                       e Zd ZdZdZdZdS )
Visibilityr   r   r   N)r   r    r!   defaulthidden	protectedr3   r4   r5   r7   r7      s         GFIIIr4   r7   c                       e Zd ZdZdZdZdS )StorageClassr   r   r   N)r   r    r!   r8   r,   r-   r3   r4   r5   r<   r<   &   s         GIIIIr4   r<   c                   Z    e Zd ZdZed             Zed             Zed             Zd ZdS )TypeRefz$A weak reference to a LLVM type
    c                 d    t          j        t           j                            |                     S )z
        Get type name
        )r
   
ret_stringlibLLVMPY_GetTypeNameselfs    r5   namezTypeRef.name1   s$    
 ~cg88>>???r4   c                 @    t           j                            |           S )z=
        Returns true is the type is a pointer type.
        )r
   rA   LLVMPY_TypeIsPointerrC   s    r5   
is_pointerzTypeRef.is_pointer8   s    
 w++D111r4   c                     | j         s"t          d                    |                     t          t          j                            |                     S )zh
        Returns the pointed-to type. When the type is not a pointer,
        raises exception.
        zType {} is not a pointer)rH   
ValueErrorformatr>   r
   rA   LLVMPY_GetElementTyperC   s    r5   element_typezTypeRef.element_type?   sJ      	F7>>tDDEEEsw44T::;;;r4   c                 d    t          j        t           j                            |                     S N)r
   r@   rA   LLVMPY_PrintTyperC   s    r5   __str__zTypeRef.__str__I   s"    ~cg66t<<===r4   N)	r   r    r!   __doc__propertyrE   rH   rM   rQ   r3   r4   r5   r>   r>   .   s         @ @ X@ 2 2 X2 < < X<> > > > >r4   r>   c                      e Zd ZdZd Zd Zed             Zed             Zed             Z	ed             Z
ed             Zed	             Zed
             Zed             Zed             Zed             Zed             Zej        d             Zed             Zej        d             Zed             Zej        d             Zed             Zej        d             Zd Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             ZdS ) ValueRefz&A weak reference to a LLVM value.
    c                 b    || _         || _        t          j                            | |           d S rO   )_kind_parentsr
   	ObjectRef__init__)rD   ptrkindparentss       r5   rZ   zValueRef.__init__Q   s.    
tS)))))r4   c                     t          j                    5 }t           j                            | |           t	          |          cd d d            S # 1 swxY w Y   d S rO   )r
   OutputStringrA   LLVMPY_PrintValueToStringstr)rD   outstrs     r5   rQ   zValueRef.__str__V   s     	6G--dF;;;v;;	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   /AAAc                 6    | j                             d          S )zV
        The module this function or global variable value was obtained from.
        modulerX   getrC   s    r5   rd   zValueRef.module[   s    
 }  ***r4   c                 6    | j                             d          S )zT
        The function this argument or basic block value was obtained from.
        functionre   rC   s    r5   rh   zValueRef.functionb   s    
 }  ,,,r4   c                 6    | j                             d          S )zE
        The block this instruction value was obtained from.
        blockre   rC   s    r5   rj   zValueRef.blocki   s    
 }  )))r4   c                 6    | j                             d          S )zG
        The instruction this operand value was obtained from.
        instructionre   rC   s    r5   rl   zValueRef.instructionp   s    
 }  ///r4   c                     | j         dk    S )NglobalrW   rC   s    r5   	is_globalzValueRef.is_globalw   s    zX%%r4   c                     | j         dk    S )Nrh   ro   rC   s    r5   is_functionzValueRef.is_function{       zZ''r4   c                     | j         dk    S )Nrj   ro   rC   s    r5   is_blockzValueRef.is_block   s    zW$$r4   c                     | j         dk    S )Nargumentro   rC   s    r5   is_argumentzValueRef.is_argument   rs   r4   c                     | j         dk    S )Nrl   ro   rC   s    r5   is_instructionzValueRef.is_instruction   s    z]**r4   c                     | j         dk    S )Noperandro   rC   s    r5   
is_operandzValueRef.is_operand   s    zY&&r4   c                 Z    t          t          j                            |                     S rO   )r   r
   rA   LLVMPY_GetValueNamerC   s    r5   rE   zValueRef.name   s     cg99$??@@@r4   c                 `    t           j                            | t          |                     d S rO   )r
   rA   LLVMPY_SetValueNamer   )rD   vals     r5   rE   zValueRef.name   s(    ##D.*=*=>>>>>r4   c                 Z    t          t          j                            |                     S rO   )r   r
   rA   LLVMPY_GetLinkagerC   s    r5   linkagezValueRef.linkage   s     sw0066777r4   c                     t          |t                    st          |         }t          j                            | |           d S rO   )
isinstancer   r
   rA   LLVMPY_SetLinkagerD   values     r5   r   zValueRef.linkage   s;    %)) 	#ENE!!$.....r4   c                 Z    t          t          j                            |                     S rO   )r7   r
   rA   LLVMPY_GetVisibilityrC   s    r5   
visibilityzValueRef.visibility   s     #'66t<<===r4   c                     t          |t                    st          |         }t          j                            | |           d S rO   )r   r7   r
   rA   LLVMPY_SetVisibilityr   s     r5   r   zValueRef.visibility   s<    %,, 	&u%E$$T511111r4   c                 Z    t          t          j                            |                     S rO   )r<   r
   rA   LLVMPY_GetDLLStorageClassrC   s    r5   storage_classzValueRef.storage_class   s     CG==dCCDDDr4   c                     t          |t                    st          |         }t          j                            | |           d S rO   )r   r<   r
   rA   LLVMPY_SetDLLStorageClassr   s     r5   r   zValueRef.storage_class   s<    %.. 	( 'E))$66666r4   c                 d   | j         st          d| j                  t          |          }t          j                            t          |          t          |                    }|dk    r"t          d	                    |                    t          j        
                    | |           dS )z{Only works on function value

        Parameters
        -----------
        attr : str
            attribute name
        expected function value, got r   zno such attribute {!r}N)rr   rJ   rW   ra   r
   rA   "LLVMPY_GetEnumAttributeKindForNamer   lenrK   LLVMPY_AddFunctionAttr)rD   attrattrnameattrvals       r5   add_function_attributezValueRef.add_function_attribute   s      	P*$**NOOOt99'<<8$$c(mm5 5a<<5<<XFFGGG&&tW55555r4   c                 Z    t          t          j                            |                     S )z)
        This value's LLVM type.
        )r>   r
   rA   LLVMPY_TypeOfrC   s    r5   typezValueRef.type   s"     sw,,T22333r4   c                     | j         s| j        st          d| j                  t          j                            |           S )zb
        Whether this value (presumably global) is defined in the current
        module.
        z'expected global or function value, got )rp   rr   rJ   rW   r
   rA   LLVMPY_IsDeclarationrC   s    r5   is_declarationzValueRef.is_declaration   sN      	.$"2 	.* $

- . . .w++D111r4   c                 \   t          d          }| j        r/t          j                            |           }t          |          }n| j        rt| j        dk    r/t          j                            |           }t          |          }n| j        dk    r.t          j        	                    |           }t          |          }nk| j
        r/t          j                            |           }t          |          }n5| j        r.t          j                            |           }t          |          }|S )z
        Return an iterator over this value's attributes.
        The iterator will yield a string for each attribute.
        r3   callinvoke)iterrr   r
   rA   LLVMPY_FunctionAttributesIter_AttributeListIteratorrz   opcodeLLVMPY_CallInstAttributesIterLLVMPY_InvokeInstAttributesIterrp   LLVMPY_GlobalAttributesIter_AttributeSetIteratorrx   LLVMPY_ArgumentAttributesIter)rD   itrits      r5   
attributeszValueRef.attributes   s
    2hh 	,66t<<B(,,CC  	,{f$$W::4@@,R00((W<<TBB,R00^ 	,44T::B'++CC 	,66t<<B'++C
r4   c                     | j         st          d| j                  t          j                            |           }| j                                        }|                    |            t          ||          S )z|
        Return an iterator over this function's blocks.
        The iterator will yield a ValueRef for each block.
        r   rh   )
rr   rJ   rW   r
   rA   LLVMPY_FunctionBlocksIterrX   copyupdate_BlocksIteratorrD   r   r]   s      r5   blockszValueRef.blocks   ss      	P*$**NOOOW..t44-$$&&%%%r7+++r4   c                     | j         st          d| j                  t          j                            |           }| j                                        }|                    |            t          ||          S )z
        Return an iterator over this function's arguments.
        The iterator will yield a ValueRef for each argument.
        r   r   )
rr   rJ   rW   r
   rA   LLVMPY_FunctionArgumentsIterrX   r   r   _ArgumentsIteratorr   s      r5   	argumentszValueRef.arguments   ss      	P*$**NOOOW11$77-$$&&%%%!"g...r4   c                     | j         st          d| j                  t          j                            |           }| j                                        }|                    |            t          ||          S )z
        Return an iterator over this block's instructions.
        The iterator will yield a ValueRef for each instruction.
        zexpected block value, got )rj   )
ru   rJ   rW   r
   rA   LLVMPY_BlockInstructionsIterrX   r   r   _InstructionsIteratorr   s      r5   instructionszValueRef.instructions  sr     } 	M*tzzKLLLW11$77-$$&&T"""$R111r4   c                     | j         st          d| j                  t          j                            |           }| j                                        }|                    |            t          ||          S )z
        Return an iterator over this instruction's operands.
        The iterator will yield a ValueRef for each operand.
         expected instruction value, got )rl   )
rz   rJ   rW   r
   rA   LLVMPY_InstructionOperandsIterrX   r   r   _OperandsIteratorr   s      r5   operandszValueRef.operands  s{     " 	.* $

- . . .W33D99-$$&&4((( W---r4   c                     | j         st          d| j                  t          j        t          j                            |                     S )Nr   )rz   rJ   rW   r
   r@   rA   LLVMPY_GetOpcodeNamerC   s    r5   r   zValueRef.opcode'  sM    " 	.* $

- . . .~cg::4@@AAAr4   N)r   r    r!   rR   rZ   rQ   rS   rd   rh   rj   rl   rp   rr   ru   rx   rz   r}   rE   setterr   r   r   r   r   r   r   r   r   r   r   r   r3   r4   r5   rU   rU   M   s         * * *
  
 + + X+ - - X- * * X* 0 0 X0 & & X& ( ( X( % % X% ( ( X( + + X+ ' ' X' A A XA 
[? ? [? 8 8 X8 ^/ / ^/
 > > X> 2 2 2
 E E XE 7 7 7
6 6 6" 4 4 X4 2 2 X2   X0 
, 
, X
, 
/ 
/ X
/ 
2 
2 X
2 . . X. B B XB B Br4   rU   c                   (    e Zd ZdZd Zd ZeZd ZdS )_ValueIteratorNc                     t           j                            | |           || _        | j        $t          t          |           j        d          d S )Nz must specify kind attribute)r
   rY   rZ   rX   r\   NotImplementedErrorr   r   )rD   r[   r]   s      r5   rZ   z_ValueIterator.__init__4  s]    tS)))9%)-d)<)<)<'? @ @ @ r4   c                 r    |                                  }|rt          || j        | j                  S t          rO   )_nextrU   r\   rX   StopIterationrD   vps     r5   __next__z_ValueIterator.__next__<  s3    ZZ\\ 	 B	4=999r4   c                     | S rO   r3   rC   s    r5   __iter__z_ValueIterator.__iter__E      r4   )r   r    r!   r\   rZ   r   nextr   r3   r4   r5   r   r   /  sP        D@ @ @      D    r4   r   c                       e Zd Zd ZeZd ZdS )_AttributeIteratorc                 @    |                                  }|r|S t          rO   )r   r   r   s     r5   r   z_AttributeIterator.__next__K  s"    ZZ\\ 	 Ir4   c                     | S rO   r3   rC   s    r5   r   z_AttributeIterator.__iter__T  r   r4   N)r   r    r!   r   r   r   r3   r4   r5   r   r   I  s9              D    r4   r   c                       e Zd Zd Zd ZdS )r   c                 :    | j                             |            d S rO   )_capiLLVMPY_DisposeAttributeListIterrC   s    r5   _disposez_AttributeListIterator._disposeZ  s    
22488888r4   c                 d    t          j        t           j                            |                     S rO   )r
   	ret_bytesrA   LLVMPY_AttributeListIterNextrC   s    r5   r   z_AttributeListIterator._next]  s"    }SWAA$GGHHHr4   Nr   r    r!   r   r   r3   r4   r5   r   r   X  s7        9 9 9I I I I Ir4   r   c                       e Zd Zd Zd ZdS )r   c                 :    | j                             |            d S rO   )r   LLVMPY_DisposeAttributeSetIterrC   s    r5   r   z_AttributeSetIterator._disposec      
11$77777r4   c                 d    t          j        t           j                            |                     S rO   )r
   r   rA   LLVMPY_AttributeSetIterNextrC   s    r5   r   z_AttributeSetIterator._nextf  s"    }SW@@FFGGGr4   Nr   r3   r4   r5   r   r   a  s7        8 8 8H H H H Hr4   r   c                       e Zd ZdZd Zd ZdS )r   rj   c                 :    | j                             |            d S rO   )r   LLVMPY_DisposeBlocksIterrC   s    r5   r   z_BlocksIterator._disposen  s    
++D11111r4   c                 @    t           j                            |           S rO   )r
   rA   LLVMPY_BlocksIterNextrC   s    r5   r   z_BlocksIterator._nextq  s    w,,T222r4   Nr   r    r!   r\   r   r   r3   r4   r5   r   r   j  s7        D2 2 23 3 3 3 3r4   r   c                       e Zd ZdZd Zd ZdS )r   rw   c                 :    | j                             |            d S rO   )r   LLVMPY_DisposeArgumentsIterrC   s    r5   r   z_ArgumentsIterator._disposey  s    
..t44444r4   c                 @    t           j                            |           S rO   )r
   rA   LLVMPY_ArgumentsIterNextrC   s    r5   r   z_ArgumentsIterator._next|  s    w//555r4   Nr   r3   r4   r5   r   r   u  s7        D5 5 56 6 6 6 6r4   r   c                       e Zd ZdZd Zd ZdS )r   rl   c                 :    | j                             |            d S rO   )r   LLVMPY_DisposeInstructionsIterrC   s    r5   r   z_InstructionsIterator._dispose  r   r4   c                 @    t           j                            |           S rO   )r
   rA   LLVMPY_InstructionsIterNextrC   s    r5   r   z_InstructionsIterator._next  s    w224888r4   Nr   r3   r4   r5   r   r     s7        D8 8 89 9 9 9 9r4   r   c                       e Zd ZdZd Zd ZdS )r   r|   c                 :    | j                             |            d S rO   )r   LLVMPY_DisposeOperandsIterrC   s    r5   r   z_OperandsIterator._dispose  s    
--d33333r4   c                 @    t           j                            |           S rO   )r
   rA   LLVMPY_OperandsIterNextrC   s    r5   r   z_OperandsIterator._next  s    w..t444r4   Nr   r3   r4   r5   r   r     s7        D4 4 45 5 5 5 5r4   r   )Pctypesr   r   r   r   r   r   r	   enumllvmlite.bindingr
   llvmlite.binding.commonr   r   IntEnumr   r7   r<   rY   r>   rU   r   r   r   r   r   r   r   r   LLVMValueRefrA   r`   argtypesLLVMPY_GetGlobalParentLLVMModuleRefrestyper   r   r   LLVMTypeRefrP   rG   rL   rB   r   r   r   r   r   r   r   r   r   r   LLVMAttributeListIteratorr   r   r   LLVMAttributeSetIteratorr   r   LLVMBlocksIteratorr   LLVMArgumentsIteratorr   LLVMInstructionsIteratorr   LLVMOperandsIteratorr   r   r   r   r   r   r   r   r   r   r   r   r3   r4   r5   <module>r     sh   O O O O O O O O O O O O O O O O O O              B B B B B B B B    dl   ,           4<   > > > > >cm > > >>_B _B _B _B _Bs} _B _B _BD    S]   4       I I I I I/ I I IH H H H H. H H H3 3 3 3 3n 3 3 36 6 6 6 6 6 6 69 9 9 9 9N 9 9 95 5 5 5 5 5 5 5 GH. ! *
 ,/+;*<  '),):  &(+(8'9  $&.  #(+(8('C  $"%"2!3   #   &)_$5  !#+   ),(9  %'-  $*-/):  &(+  % (+&7  #%-  "&)&6%7  "$)  !&)&6%>  "),)9(:  %',  $),)95(A  %.1.>-? ! *,1 ! ).1.>-F ! *7?6J * 35; * 2+.+;V*D  '),)9(:  %',  $252B1C % .030M % -252B1C % .030M % -474D3E ' 0252O ' /030@/A # ,.1.J # +252B1C % .030L % -.1.>-? ! *,/,B ! )141A0B $ -/2/H $ ,141A0B $ -/2/K $ ,363C2D & /141I & . !4# ' 0 473O2P & /-0-C,D   )363O2P & //2/G.H " +141N0O $ -/7 $ ,030L/M # ,.6 # +*-*@)A  &(+(8  %-0-F,G   )+.+;   (030L/M # ,.1.> # +,/,D+E  (*-*:  '),)9(:  %'/  $ $ $r4   