
    sh                     @   S r SSKrSSKrSSKrSSKJr  SSKJrJrJr  SSK	J
r
JrJr  \" \" \\R                   5      5      \" \" \\R"                  5      5      -  \" \" \S5      5      -  r\R&                  " S5      rSS	S
SSSS.r0 4S jrS rS r " S S\5      r " S S\5      r " S S\5      r\" 5       r " S S\
\\\5      r " S S\5      r " S S\
\\5      r  " S S\ 5      r! " S  S!\
\\5      r" " S" S#\5      r# " S$ S%\ 5      r$ " S& S'5      r% " S( S)\ 5      r& " S* S+\ \\5      r' " S, S-\'5      r( " S. S/\)5      r* " S0 S1\*5      r+ " S2 S3\'5      r, " S4 S5\*5      r- " S6 S7\ 5      r. " S8 S9\.5      r/ " S: S;\.5      r0 " S< S=\ 5      r1 " S> S?\5      r2g)@z_
Classes that are LLVM values: Value, Constant...
Instructions are in the instructions module.
    N)MappingProxyType)valuestypes_utils)_StrCaching_StringReferenceCaching_HasMetadataz !#$%&'()*+,-./:;<=>?@[]^_`{|}~z[-a-zA-Z$._][-a-zA-Z$._0-9]*$gtlteqnegele)><==!=z>=z<=c                 L   [        U [        5      (       a  U R                  5       n [        U [        [        45      (       d   eU(       d2  [        S5       H#  nU[        ;   a  [        U5      X'   M  SU-  X'   M%     U  Vs/ s H  o!U   PM	     nnSR                  U5      $ s  snf )z
Escape the given bytestring for safe use as a LLVM array constant.
Any unicode string input is first encoded with utf8 into bytes.
   z\%02x )	
isinstancestrencodebytes	bytearrayrange_VALID_CHARSchrjoin)text_mapchbufs       f/Users/tiagomarins/Projetos/claudeai/copy_bank/venv/lib/python3.13/site-packages/llvmlite/ir/values.py_escape_stringr%      s    
 ${{}dUI.////*B\!r7#b=	  #
#d8dC
#773< $s    B!c                    ^  U 4S jnU$ )Nc                 F   > [         R                  " U 5      U4S j5       nU$ )Nc                 >  > U R                   UR                   :w  a(  [        SU R                   < SUR                   < S35      eSR                  TU R                   U R                  5       UR                   UR                  5       5      n[	        U R                   U5      $ )N%Operands must be the same type, got (, )z{0} ({1} {2}, {3} {4}))type
ValueErrorformatget_referenceFormattedConstant)lhsrhsfmtopnames      r$   wrapped%_binop.<locals>.wrap.<locals>.wrapped5   s~    xx388# $'HHchh"8 9 9 +11&25((C<M<M<O25((C<M<M<OQC %SXXs33    	functoolswrapsfnr5   r4   s     r$   wrap_binop.<locals>.wrap4   s%    			4 
	4 r7    r4   r=   s   ` r$   _binoprA   3   s     Kr7   c                    ^  U 4S jnU$ )Nc                 J   >^  [         R                  " T 5      U U4S j5       nU$ )Nc                    > T" X5        XR                   :X  a  U $ SR                  TU R                   U R                  5       U5      n[        X5      $ )Nz{0} ({1} {2} to {3}))r,   r.   r/   r0   )selftypopr<   r4   s      r$   r5   &_castop.<locals>.wrap.<locals>.wrappedF   sK    tMii'..vtyy/3/A/A/CSJB$S--r7   r8   r;   s   ` r$   r=   _castop.<locals>.wrapE   s%    			. 
	. r7   r?   r@   s   ` r$   _castoprJ   D   s     Kr7   c                      \ rS rSrSr\" S5      S 5       r\" S5      S 5       r\" S5      S 5       r\" S	5      S
 5       r	\" S5      S 5       r
\" S5      S 5       r\" S5      S 5       r\" S5      S 5       r\" S5      S 5       r\" S5      S 5       r\" S5      S 5       r\" S5      S 5       r\" S5      S 5       r\" S5      S 5       r\" S5      S  5       r\" S!5      S" 5       r\" S#5      S$ 5       r\" S%5      S& 5       rS' rS( rS) rS* rS+ rS, rS- rS. r\ " S/5      S0 5       r!\ " S15      S2 5       r"\ " S35      S4 5       r#\ " S55      S6 5       r$\ " S75      S8 5       r%\ " S95      S: 5       r&\ " S;5      S< 5       r'\ " S=5      S> 5       r(\ " S?5      S@ 5       r)\ " SA5      SB 5       r*\ " SC5      SD 5       r+\ " SE5      SF 5       r,SG r-SHr.gI)J_ConstOpMixinT   zI
A mixin defining constant operations, for use in constant-like classes.
shlc                     g)z$
Left integer shift:
    lhs << rhs
Nr?   rE   others     r$   rN   _ConstOpMixin.shl]       r7   lshrc                     g)z8
Logical (unsigned) right integer shift:
    lhs >> rhs
Nr?   rP   s     r$   rT   _ConstOpMixin.lshrd   rS   r7   ashrc                     g)z9
Arithmetic (signed) right integer shift:
    lhs >> rhs
Nr?   rP   s     r$   rW   _ConstOpMixin.ashrk   rS   r7   addc                     g)z!
Integer addition:
    lhs + rhs
Nr?   rP   s     r$   rZ   _ConstOpMixin.addr   rS   r7   faddc                     g)z(
Floating-point addition:
    lhs + rhs
Nr?   rP   s     r$   r]   _ConstOpMixin.faddy   rS   r7   subc                     g)z$
Integer subtraction:
    lhs - rhs
Nr?   rP   s     r$   r`   _ConstOpMixin.sub   rS   r7   fsubc                     g)z+
Floating-point subtraction:
    lhs - rhs
Nr?   rP   s     r$   rc   _ConstOpMixin.fsub   rS   r7   mulc                     g)z'
Integer multiplication:
    lhs * rhs
Nr?   rP   s     r$   rf   _ConstOpMixin.mul   rS   r7   fmulc                     g)z.
Floating-point multiplication:
    lhs * rhs
Nr?   rP   s     r$   ri   _ConstOpMixin.fmul   rS   r7   udivc                     g)z*
Unsigned integer division:
    lhs / rhs
Nr?   rP   s     r$   rl   _ConstOpMixin.udiv   rS   r7   sdivc                     g)z(
Signed integer division:
    lhs / rhs
Nr?   rP   s     r$   ro   _ConstOpMixin.sdiv   rS   r7   fdivc                     g)z(
Floating-point division:
    lhs / rhs
Nr?   rP   s     r$   rr   _ConstOpMixin.fdiv   rS   r7   uremc                     g)z+
Unsigned integer remainder:
    lhs % rhs
Nr?   rP   s     r$   ru   _ConstOpMixin.urem   rS   r7   sremc                     g)z)
Signed integer remainder:
    lhs % rhs
Nr?   rP   s     r$   rx   _ConstOpMixin.srem   rS   r7   fremc                     g)z)
Floating-point remainder:
    lhs % rhs
Nr?   rP   s     r$   r{   _ConstOpMixin.frem   rS   r7   orc                     g)z#
Bitwise integer OR:
    lhs | rhs
Nr?   rP   s     r$   or__ConstOpMixin.or_   rS   r7   andc                     g)z$
Bitwise integer AND:
    lhs & rhs
Nr?   rP   s     r$   and__ConstOpMixin.and_   rS   r7   xorc                     g)z$
Bitwise integer XOR:
    lhs ^ rhs
Nr?   rP   s     r$   r   _ConstOpMixin.xor   rS   r7   c           	         US-   n [         U   nUS:X  a  US;   d  X&-   nU R                  UR                  :w  a(  [        SU R                  < SUR                  < S35      eS	R	                  XVU R                  U R                  5       UR                  UR                  5       5      n[        [        R                  " S
5      U5      $ ! [         a    [        SU< SU< 35      ef = f)Ncmpzinvalid comparison z for i)r   r   r)   r*   r+   z{0} {1} ({2} {3}, {4} {5})   )	_CMP_MAPKeyErrorr-   r,   r.   r/   r0   r   IntType)rE   prefixsigncmpoprQ   insrG   r3   s           r$   _cmp_ConstOpMixin._cmp   s    un	L%B #%<"7B99

" $		5::7 8 8 +11IIt))+JJ++-/
 !q!1377  	LucJKK	Ls   	C C%c                 (    U R                  SSX5      $ )ze
Signed integer comparison:
    lhs <cmpop> rhs

where cmpop can be '==', '!=', '<', '<=', '>', '>='
r   sr   rE   r   rQ   s      r$   icmp_signed_ConstOpMixin.icmp_signed        yyc500r7   c                 (    U R                  SSX5      $ )zt
Unsigned integer (or pointer) comparison:
    lhs <cmpop> rhs

where cmpop can be '==', '!=', '<', '<=', '>', '>='
r   ur   r   s      r$   icmp_unsigned_ConstOpMixin.icmp_unsigned   r   r7   c                 (    U R                  SSX5      $ )z{
Floating-point ordered comparison:
    lhs <cmpop> rhs

where cmpop can be '==', '!=', '<', '<=', '>', '>=', 'ord', 'uno'
for   r   s      r$   fcmp_ordered_ConstOpMixin.fcmp_ordered  r   r7   c                 (    U R                  SSX5      $ )z}
Floating-point unordered comparison:
    lhs <cmpop> rhs

where cmpop can be '==', '!=', '<', '<=', '>', '>=', 'ord', 'uno'
r   r   r   r   s      r$   fcmp_unordered_ConstOpMixin.fcmp_unordered  r   r7   c                 *   [        U R                  [        R                  5      (       a9  [        R
                  " U R                  SU R                  R                  -  5      nO![        R
                  " U R                  S5      nU R                  U5      $ )z(
Bitwise integer complement:
    ~value
)r   )r   r,   r   
VectorTyper   Constantcountr   )rE   r2   s     r$   not__ConstOpMixin.not_  s^    
 dii!1!122//$))UTYY__-DEC//$))R0Cxx}r7   c                 f    [         R                  " U R                  S5      nUR                  U 5      $ )z
Integer negative:
    -value
r   )r   r   r,   r`   )rE   zeros     r$   neg_ConstOpMixin.neg$  s&    
 tyy!,xx~r7   c                     SR                  U R                  U R                  5       5      n[        U R                  U5      $ )z%
Floating-point negative:
    -value
zfneg ({0} {1}))r.   r,   r/   r0   )rE   r3   s     r$   fneg_ConstOpMixin.fneg,  s4    
 %%dii1C1C1EF C00r7   truncc                     g)z0
Truncating integer downcast to a smaller type.
Nr?   rE   rF   s     r$   r   _ConstOpMixin.trunc8  rS   r7   zextc                     g)z0
Zero-extending integer upcast to a larger type
Nr?   r   s     r$   r   _ConstOpMixin.zext>  rS   r7   sextc                     g)z1
Sign-extending integer upcast to a larger type.
Nr?   r   s     r$   r   _ConstOpMixin.sextD  rS   r7   fptruncc                     g)z1
Floating-point downcast to a less precise type.
Nr?   r   s     r$   r   _ConstOpMixin.fptruncJ  rS   r7   fpextc                     g)z/
Floating-point upcast to a more precise type.
Nr?   r   s     r$   r   _ConstOpMixin.fpextP  rS   r7   bitcastc                     g)z+
Pointer cast to a different pointer type.
Nr?   r   s     r$   r   _ConstOpMixin.bitcastV  rS   r7   fptouic                     g)z-
Convert floating-point to unsigned integer.
Nr?   r   s     r$   r   _ConstOpMixin.fptoui\  rS   r7   uitofpc                     g)z-
Convert unsigned integer to floating-point.
Nr?   r   s     r$   r   _ConstOpMixin.uitofpb  rS   r7   fptosic                     g)z+
Convert floating-point to signed integer.
Nr?   r   s     r$   r   _ConstOpMixin.fptosih  rS   r7   sitofpc                     g)z+
Convert signed integer to floating-point.
Nr?   r   s     r$   r   _ConstOpMixin.sitofpn  rS   r7   ptrtointc                     [        U R                  [        R                  5      (       d  Sn[	        X R                  4-  5      e[        U[        R
                  5      (       d  [	        SU< S35      eg)z
Cast pointer to integer.
z2can only call ptrtoint() on pointer type, not '%s'z*can only ptrtoint() to integer type, not ''N)r   r,   r   PointerType	TypeErrorr   rE   rF   msgs      r$   r   _ConstOpMixin.ptrtointt  s_    
 $))U%6%677FCC99,.//#u}}--"% & & .r7   inttoptrc                     [        U R                  [        R                  5      (       d  Sn[	        X R                  4-  5      e[        U[        R
                  5      (       d  [	        SU< S35      eg)z
Cast integer to pointer.
z7can only call inttoptr() on integer constants, not '%s'z*can only inttoptr() to pointer type, not 'r   N)r   r,   r   r   r   r   r   s      r$   r   _ConstOpMixin.inttoptr  s_    
 $))U]]33KCC99,.//#u0011"% & & 2r7   c                 :   [        U R                  [        R                  5      (       d  [	        SU R                  < S35      eU R                  nU H  nUR                  U5      nM     U Vs/ s H-  nSR                  UR                  UR                  5       5      PM/     nnSR                  U R                  R                  U R                  U R                  5       SR                  U5      5      n[        UR                  U R                  5      U5      $ s  snf )z.
Call getelementptr on this pointer constant.
z/can only call gep() on pointer constants, not 'r   {0} {1}z!getelementptr ({0}, {1} {2}, {3})r*   )r   r,   r   r   r   gepr.   r/   pointeer   r0   
as_pointer	addrspace)rE   indicesouttyper   idx
strindicesrG   s          r$   r   _ConstOpMixin.gep  s     $))U%6%677#yy+ , , ))Akk!nG  ")*!(#  &&sxx1B1B1DE!( 	 * 177IItyy $))J"79 !!3!3DNN!CRHH*s   .4Dr?   N)/__name__
__module____qualname____firstlineno____doc__rA   rN   rT   rW   rZ   r]   r`   rc   rf   ri   rl   ro   rr   ru   rx   r{   r   r   r   r   r   r   r   r   r   r   r   rJ   r   r   r   r   r   r   r   r   r   r   r   r   r   __static_attributes__r?   r7   r$   rL   rL   T   s    E]  F^  F^  E]  F^  E]  F^  E]  F^  F^  F^  F^  F^  F^  F^  D\  E]  E] 8*1111
1 W 
 V_ 
 V_ 
 Y 
 W 
 Y 
 X 
 X 
 X 
 X 
 Z	& 	& Z	& 	&Ir7   rL   c                       \ rS rSrSrS rSrg)Valuei  z 
The base class for all values.
c                 T    SU R                   R                  < SU R                  < S3$ )N<ir.z type='z' ...>)	__class__r   r,   rE   s    r$   __repr__Value.__repr__  s    *...*A*A499NNr7   r?   N)r   r   r   r   r   r   r   r?   r7   r$   r   r     s    Or7   r   c                       \ rS rSrSrS rSrg)
_Undefinedi  z(
'undef': a value for undefined values.
c                 b     [         $ ! [         a    [        R                  [        5      s $ f = fN)	Undefined	NameErrorobject__new__r   )clss    r$   r  _Undefined.__new__  s+    	. 	.>>*--	.s    #..r?   N)r   r   r   r   r   r  r   r?   r7   r$   r   r     s    .r7   r   c                   v    \ rS rSrSrS rS rS r\S 5       r	\SS j5       r
\S 5       rS	 rS
 rS rS rSrg)r   i  z
A constant LLVM value.
c                     [        U[        R                  5      (       d   e[        U[        R                  5      (       a   eXl        UR                  U5      nX l        g r   )r   r   TypeVoidTyper,   wrap_constant_valueconstantrE   rF   r	  s      r$   __init__Constant.__init__  sJ    #uzz****c5>>2222	**84 r7   c                 V    SR                  U R                  U R                  5       5      $ Nr   r.   r,   r/   r   s    r$   
_to_stringConstant._to_string  "    		4+=+=+?@@r7   c                 R   U R                   c  U R                  R                  nU$ U R                   [        L a  SnU$ [	        U R                   [
        5      (       a&  SR                  [        U R                   5      5      nU$ U R                  R                  U R                   5      nU$ )Nundefzc"{0}")	r	  r,   nullr   r   r   r.   r%   format_constantrE   vals     r$   _get_referenceConstant._get_reference  s    == ))..C 
 ]]i'C 
 y11//."?@C
 
 ))++DMM:C
r7   c                     U Vs/ s H  o"R                   PM     nn[        U5      S:X  a  [        S5      eUS   nU H  nXE:w  d  M
  [        S5      e   U " [        R
                  " U[        U5      5      U5      $ s  snf )z?
Construct a literal array constant made of the given members.
r   zneed at least one elementz$all elements must have the same type)r,   lenr-   r   r   	ArrayType)r  elemseltystyrQ   s         r$   literal_arrayConstant.literal_array  sx    
 "''2ww's8q=899VE{ FGG  5??2s5z2E:: (s   A;c                 |    U Vs/ s H  o3R                   PM     nnU " [        R                  " XB5      U5      $ s  snf )zC
Construct a literal structure constant made of the given members.
)r,   r   LiteralStructType)r  r  packedr  r   s        r$   literal_structConstant.literal_struct  s7    
 "''2ww'5**37?? (s   9c                     [        U R                  [        R                  5      (       d  [	        S5      eU R                  R
                  $ )Nz)Only pointer constant have address spaces)r   r,   r   r   r   r   r   s    r$   r   Constant.addrspace  s5    $))U%6%677GHHyy"""r7   c                 \    [        U[        5      (       a  [        U 5      [        U5      :H  $ gNF)r   r   r   rP   s     r$   __eq__Constant.__eq__  s%    eX&&t9E
**r7   c                 .    U R                  U5      (       + $ r   r-  rP   s     r$   __ne__Constant.__ne__      ;;u%%%r7   c                 *    [        [        U 5      5      $ r   )hashr   r   s    r$   __hash__Constant.__hash__  s    CIr7   c                 @    SU R                   < SU R                  < S3$ )Nz<ir.Constant type='z' value=r   )r,   r	  r   s    r$   r   Constant.__repr__  s    59YYNNr7   )r	  r,   N)F)r   r   r   r   r   r  r  r  classmethodr"  r'  propertyr   r-  r1  r6  r   r   r?   r7   r$   r   r     sj    !A ; ; @ @ # #
&Or7   r   c                   *    \ rS rSrSrS rS rS rSrg)r0   i  z9
A constant with an already formatted IR representation.
c                 ^    [        U[        5      (       d   e[        R                  XU5        g r   )r   r   r   r  r
  s      r$   r  FormattedConstant.__init__  s%    (C(((($X.r7   c                     U R                   $ r   r	  r   s    r$   r  FormattedConstant._to_string      }}r7   c                     U R                   $ r   r@  r   s    r$   r   FormattedConstant._get_reference  rB  r7   r?   N)	r   r   r   r   r   r  r  r  r   r?   r7   r$   r0   r0     s    /r7   r0   c                   l    \ rS rSrSrSrSrS rS rS r	S r
S	 r\" \
\5      rS
 rS r\S 5       rSrg)
NamedValuei  z"
The base class for named values.
%Tc                     Uc   e[        U[        R                  5      (       d   eXl        X l        U R                  U5        g r   )r   r   r  parentr,   	_set_name)rE   rI  r,   names       r$   r  NamedValue.__init__  s;    !!!$

++++	tr7   c                    / n[        U R                  [        R                  5      (       d.  UR	                  SR                  U R                  5       5      5        U R                  U5        SR                  U5      R                  5       $ )Nz{0} = r   )
r   r,   r   r  appendr.   r/   descrr   rstriprE   r#   s     r$   r  NamedValue._to_string   s\    $))U^^44JJxt'9'9';<=

3wws|""$$r7   c                     [         er   )NotImplementedErrorrQ  s     r$   rO  NamedValue.descr'  s    !!r7   c                     U R                   $ r   )_namer   s    r$   	_get_nameNamedValue._get_name*  s    zzr7   c                 l    U R                   R                  R                  UU R                  S9nXl        g )N)deduplicate)rI  scoperegisterdeduplicate_namerW  rE   rK  s     r$   rJ  NamedValue._set_name-  s2    {{  ))$6:6K6K * M
r7   c                     U R                   nSU;   d  SU;   a"  UR                  SS5      R                  SS5      nSR                  U R                  U5      $ )N\"\5c\22z{0}"{1}")rK  replacer.   name_prefixr_  s     r$   r  NamedValue._get_reference4  sN    yy4<3$;<<f-55c6BD  !1!1488r7   c                 p    SU R                   R                  < SU R                  < SU R                  < S3$ )Nr    z
 of type 'z'>r   r   rK  r,   r   s    r$   r   NamedValue.__repr__;  s%    NN##TYY		; 	;r7   c                    U R                   n[        U[        R                  5      (       a  U R                   R                  n[        U[        R
                  5      (       a  U$ [        SR                  U R                   5      5      e)NzNot a function: {0})r,   r   r   r   r   FunctionTyper   r.   )rE   r!  s     r$   function_typeNamedValue.function_type?  s`    YYb%++,,""Bb%,,--I188CDDr7   )rW  rI  r,   N)r   r   r   r   r   rg  r^  r  r  rO  rX  rJ  r;  rK  r  r   ro  r   r?   r7   r$   rF  rF    s[     K%"
 Iy)D9; E Er7   rF  c                   N   ^  \ rS rSrSrU 4S jrS rS r\rS r	S r
S rS	rU =r$ )
MetaDataStringiJ  zO
A metadata string, i.e. a constant string used as a value in a metadata
node.
c                 ^   > [         [        U ]  U[        R                  " 5       SS9  X l        g )Nr   rK  )superrr  r  r   MetaDataTypestring)rE   rI  rw  r   s      r$   r  MetaDataString.__init__P  s/    nd,V-2-?-?-A24 	- 	6 r7   c                 ,    XR                  5       S4-  ng )N
)r/   rQ  s     r$   rO  MetaDataString.descrV  s    ""$d++r7   c                 J    SR                  [        U R                  5      5      $ )Nz!"{0}")r.   r%   rw  r   s    r$   r  MetaDataString._get_referenceY  s    ~dkk:;;r7   c                 `    [        U[        5      (       a  U R                  UR                  :H  $ gr,  )r   rr  rw  rP   s     r$   r-  MetaDataString.__eq__^  s%    e^,,;;%,,..r7   c                 .    U R                  U5      (       + $ r   r0  rP   s     r$   r1  MetaDataString.__ne__d  r3  r7   c                 ,    [        U R                  5      $ r   )r5  rw  r   s    r$   r6  MetaDataString.__hash__g  s    DKK  r7   )rw  )r   r   r   r   r   r  rO  r  r  r-  r1  r6  r   __classcell__r   s   @r$   rr  rr  J  s2    
,<  J&! !r7   rr  c                   (    \ rS rSrSrS rS r\rSrg)MetaDataArgumentik  z
An argument value to a function taking metadata arguments.
This can wrap any other kind of LLVM value.

Do not instantiate directly, Builder.call() will create these
automatically.
c                     [        U[        5      (       d   e[        UR                  [        R                  5      (       a   e[        R                  " 5       U l        Xl        g r   )r   r   r,   r   rv  wrapped_valuerE   values     r$   r  MetaDataArgument.__init__t  sH    %''''ejj%*<*<====&&(	"r7   c                 ~    SR                  U R                  R                  U R                  R                  5       5      $ r  )r.   r  r,   r/   r   s    r$   r  MetaDataArgument._get_referencez  s7     2 2 7 7 $ 2 2 @ @ BD 	Dr7   )r,   r  N)	r   r   r   r   r   r  r  r  r   r?   r7   r$   r  r  k  s    #D
  Jr7   r  c                   $    \ rS rSrSrS rS rSrg)NamedMetaDatai  z_
A named metadata node.

Do not instantiate directly, use Module.add_named_metadata() instead.
c                     Xl         / U l        g r   )rI  operands)rE   rI  s     r$   r  NamedMetaData.__init__  s    r7   c                 :    U R                   R                  U5        g r   )r  rN  )rE   mds     r$   rZ   NamedMetaData.add  s    R r7   )r  rI  N)r   r   r   r   r   r  rZ   r   r?   r7   r$   r  r    s    !r7   r  c                   N   ^  \ rS rSrSrSrU 4S jrS rS rS r	S r
S	 rS
rU =r$ )MDValuei  z
A metadata node's value, consisting of a sequence of elements ("operands").

Do not instantiate directly, use Module.add_metadata() instead.
!c                    > [         [        U ]  U[        R                  " 5       US9  [        U5      U l        UR                  R                  U 5        g Nrt  )	ru  r  r  r   rv  tupler  metadatarN  )rE   rI  r   rK  r   s       r$   r  MDValue.__init__  sG    gt%f&+&8&8&:+/ 	& 	1 ft$r7   c                    / nU R                    H  n[        UR                  [        R                  5      (       aV  [        U[
        5      (       a   UR                  c  UR                  S5        Ma  UR                  UR                  5       5        M  UR                  SR                  UR                  UR                  5       5      5        M     SR                  U5      nUSR                  U5      S4-  ng )Nr  r   r*   z
!{{ {0} }}rz  )r  r   r,   r   rv  r   r	  rN  r/   r.   r   )rE   r#   r  rG   s       r$   rO  MDValue.descr  s    --B"''5#5#566b(++0COOF+OOB$4$4$67	 0 0":J:J:L MN   99X&##H-t44r7   c                 F    U R                   [        U R                  5      -   $ r   rg  r   rK  r   s    r$   r  MDValue._get_reference      #dii.00r7   c                 `    [        U[        5      (       a  U R                  UR                  :H  $ gr,  )r   r  r  rP   s     r$   r-  MDValue.__eq__  s%    eW%%==ENN22r7   c                 .    U R                  U5      (       + $ r   r0  rP   s     r$   r1  MDValue.__ne__  r3  r7   c                 ,    [        U R                  5      $ r   )r5  r  r   s    r$   r6  MDValue.__hash__  s    DMM""r7   )r  r   r   r   r   r   rg  r  rO  r  r-  r1  r6  r   r  r  s   @r$   r  r    s2    
 K%51&# #r7   r  c                       \ rS rSrSrS rSrg)DITokeni  z
A debug information enumeration value that should appear bare in
the emitted metadata.

Use this to wrap known constants, e.g. the DW_* enumerations.
c                     Xl         g r   r  r  s     r$   r  DIToken.__init__  s    
r7   r  N)r   r   r   r   r   r  r   r?   r7   r$   r  r    s    r7   r  c                   N   ^  \ rS rSrSrSrU 4S jrS rS rS r	S r
S	 rS
rU =r$ )DIValuei  z
A debug information descriptor, containing key-value pairs.

Do not instantiate directly, use Module.add_debug_info() instead.
r  c                    > [         [        U ]  U[        R                  " 5       US9  X l        X0l        [        U5      U l        UR                  R                  U 5        g r  )ru  r  r  r   rv  is_distinctkindr  r  r  rN  )rE   rI  r  r  r  rK  r   s         r$   r  DIValue.__init__  sR    gt%f&+&8&8&:+/ 	& 	1 '	ht$r7   c                 d   U R                   (       a  US-  n/ nU R                   H  u  p4Uc  SnOUSL a  SnOUSL a  SnO[        U[        5      (       a  UR                  nO[        U[
        5      (       a  SR                  [        U5      5      nOV[        U[        5      (       a  [        U5      nO5[        U[        5      (       a  UR                  5       nO[        SU< 35      eUR                  S	R                  X55      5        M     S
R                  U5      nUSU R                  SUS4-  ng )N)z	distinct r  TtrueFfalsez"{}"z%invalid operand type for debug info: z{0}: {1}r*   r  (z)
)r  r  r   r  r  r   r.   r%   intrF  r/   r   rN  r   r  )rE   r#   r  keyr  strvalues         r$   rO  DIValue.descr  s   >!C--JC}!$!%"E7++ ;;E3''!==)>?E3''u:E:.. ..0#(!+ , ,OOJ--c<=% (& 99X&TYYXu55r7   c                 F    U R                   [        U R                  5      -   $ r   r  r   s    r$   r  DIValue._get_reference  r  r7   c                     [        U[        5      (       aY  U R                  UR                  :H  =(       a9    U R                  UR                  :H  =(       a    U R                  UR                  :H  $ gr,  )r   r  r  r  r  rP   s     r$   r-  DIValue.__eq__  sW    eW%%##u'8'88 0		UZZ'0/0 r7   c                 .    U R                  U5      (       + $ r   r0  rP   s     r$   r1  DIValue.__ne__  r3  r7   c                 Z    [        U R                  U R                  U R                  45      $ r   )r5  r  r  r  r   s    r$   r6  DIValue.__hash__  s"    T%%tyy$--@AAr7   )r  r  r  r  r  s   @r$   r  r    s4    
 K%641&B Br7   r  c                   4   ^  \ rS rSrSrSrSrU 4S jrSrU =r	$ )GlobalValuei  z
A global value.
@Fc                 f   > [         [        U ]
  " U0 UD6  SU l        SU l        SU l        0 U l        g Nr   )ru  r  r  linkagestorage_classsectionr  )rE   argskwargsr   s      r$   r  GlobalValue.__init__  s4    k4)4:6:r7   )r  r  r  r  )
r   r   r   r   r   rg  r^  r  r   r  r  s   @r$   r  r    s     K r7   r  c                   6   ^  \ rS rSrSrSU 4S jjrS rSrU =r$ )GlobalVariablei  z
A global variable.
c                   > [        U[        R                  5      (       d   e[        [        U ]  XR                  U5      US9  X l        S U l        SU l	        SU l
        X@l        S U l        U R                  R                  U 5        g )Nrt  F)r   r   r  ru  r  r  r   
value_typeinitializerunnamed_addrglobal_constantr   alignrI  
add_global)rE   modulerF   rK  r   r   s        r$   r  GlobalVariable.__init__  sw    #uzz****nd,V^^I5N26 	- 	8!$"
t$r7   c                    U R                   (       a  SnOSnU R                  (       d  U R                  c  SOSnOU R                  nU(       a  UR                  US-   5        U R                  (       a  UR                  U R                  S-   5        U R
                  (       a  UR                  S5        U R                  S:w  a*  UR                  SR                  U R                  5      5        UR                  S	R                  X R                  S
95        U R                  b  U R                  R                  U R                  :w  a1  [        SU R                  R                  < SU R                  < 35      eUR                  SU R                  R                  5       -   5        O;US;  a5  UR                  SU R                  [        5      R                  5       -   5        U R                  (       a   UR                  SU R                  < S35        U R                  b  UR                  SU R                  4-  5        U R                  (       a  UR                  U R!                  SS95        UR                  S5        g )Nr	  globalexternalr   rj  zunnamed_addr r   zaddrspace({0:d}) z{kind} {type})r  r,   zgot initializer of type z for global value type )r  extern_weakz, section "rc  z
, align %dT)leading_commarz  )r  r  r  rN  r  r  r   r.   r  r,   r   r/   r   r  r  r  _stringify_metadata)rE   r#   r  r  s       r$   rO  GlobalVariable.descr&  s   DD||$($4$4$<j"GllGJJw}%JJt))C/0JJ'>>QJJ*11$..AB

?**??*KL'$$7#'#3#3#8#8$//!K L L JJsT--;;==>77JJsT__Y7EEGGH<<JJT\\;<::!JJ|tzzm34==JJt//d/CD

4r7   )r   r  r  r  r  r  )r   )	r   r   r   r   r   r  rO  r   r  r  s   @r$   r  r    s    
%* *r7   r  c                   L   ^  \ rS rSrSrSrSU 4S jjrS rU 4S jrS r	Sr
U =r$ )	AttributeSetiS  zhA set of string attribute.
Only accept items listed in *_known*.

Properties:
* Iterate in sorted order
r?   c                    > [         TU ]  5         [        U[        5      (       a  U/nU H  nU R	                  U5        M     g r   )ru  r  r   r   rZ   )rE   r  rK  r   s      r$   r  AttributeSet.__init__\  s7    dC  6DDHHTN r7   c                     U$ r   r?   )rE   rK  rF   s      r$   _expandAttributeSet._expandc  s    r7   c                 |   > XR                   ;  a  [        SR                  X5      5      e[        [        U ]  U5      $ )Nzunknown attr {!r} for {})_knownr-   r.   ru  r  rZ   rE   rK  r   s     r$   rZ   AttributeSet.addf  s6    {{"7>>tJKK\4,T22r7   c                 `    [        U 5       Vs/ s H  o R                  X!5      PM     sn$ s  snf r   )sortedr  )rE   rF   r   s      r$   _to_listAttributeSet._to_listk  s%    .4Tl;lQ$l;;;s   +r?   )r   r   r   r   r   r  r  r  rZ   r  r   r  r  s   @r$   r  r  S  s(     F3
< <r7   r  c                      ^  \ rS rSr\" / SQ5      rSU 4S jjrU 4S jr\S 5       r	\	R                  S 5       r	\S 5       r\R                  S 5       rU 4S	 jrS
rU =r$ )FunctionAttributesio  ) 
argmemonlyalwaysinlinebuiltincold
convergentinaccessiblememonlyinaccessiblemem_or_argmemonly
inlinehint	jumptableminsizenaked	nobuiltinnoduplicatenoimplicitfloatnoinlinenonlazybind	norecurse	noredzonenoreturnnounwindoptnoneoptsizereadnonereadonlyreturns_twicesanitize_addresssanitize_memorysanitize_threadsspsspreg	sspstronguwtablec                 H   > SU l         S U l        [        [        U ]  U5        g Nr   )_alignstack_personalityru  r  r  rE   r  r   s     r$   r  FunctionAttributes.__init__z  s#      $06r7   c                 j   > US:X  a  SU ;   d  US:X  a  SU ;   a  [        S5      e[        TU ]	  U5        g )Nr  r  z$Can't have alwaysinline and noinline)r-   ru  rZ   r  s     r$   rZ   FunctionAttributes.add  s9    ^#
d(:#$(>CDDDr7   c                     U R                   $ r   r  r   s    r$   
alignstackFunctionAttributes.alignstack  s    r7   c                      US:  d   eXl         g r  r  r  s     r$   r   r!    s    axxr7   c                     U R                   $ r   )r  r   s    r$   personalityFunctionAttributes.personality  s       r7   c                 D    Ub  [        U[        5      (       d   eXl        g r   )r   r  r  r  s     r$   r$  r%    s    {jk::::r7   c                 T  > [         TU ]  U5      nU R                  (       a*  UR                  SR	                  U R                  5      5        U R
                  (       aK  UR                  SR	                  U R
                  R                  U R
                  R                  5       S95        U$ )Nzalignstack({0:d})zpersonality {persty} {persfn})perstypersfn)ru  r  r   rN  r.   r$  r,   r/   )rE   ret_typeattrsr   s      r$   r  FunctionAttributes._to_list  s     *??LL,33DOODELL8??'',,''557 @ 9 : r7   )r  r  r  )r   r   r   r   	frozensetr  r  rZ   r;  r   setterr$  r  r   r  r  s   @r$   r  r  o  s     * +F7
       ! !     r7   r  c                      ^  \ rS rSrSrU 4S jr\S 5       r\S 5       r\S 5       r	SS jr
SS jrS	 rS
 rS rS r\S 5       rSrU =r$ )Functioni  zRepresent a LLVM Function but does uses a Module as parent.
Global Values are stored as a set of dependencies (attribute `depends`).
c           	        > [        U[        R                  5      (       d   e[        [        U ]  XR                  5       US9  X l        [        R                  " 5       U l
        / U l        [        5       U l        [        UR                   Vs/ s H  n[!        X5      PM     sn5      U l        [#        XR$                  5      U l        U R(                  R+                  U 5        SU l        g s  snf )Nrt  r   )r   r   r  ru  r0  r  r   ftyper   	NameScoper\  blocksr  
attributesr  r  ArgumentReturnValuereturn_typereturn_valuerI  r  calling_convention)rE   r  r2  rK  tr   s        r$   r  Function.__init__  s    %,,,,h&v/?/?/A&M
%%'
,.$)JJ0$.q $D,$.0 1	'.?.?@t$"$	0s   C*c                     U R                   $ r   rI  r   s    r$   r  Function.module      {{r7   c                      U R                   S   $ r  r4  r   s    r$   entry_basic_blockFunction.entry_basic_block  s    {{1~r7   c                     U R                   $ r   rB  r   s    r$   basic_blocksFunction.basic_blocks  r@  r7   c                 N    [        XS9nU R                  R                  U5        U$ )NrI  rK  )Blockr4  rN  )rE   rK  blks      r$   append_basic_blockFunction.append_basic_block  s#    4+3
r7   c                 N    [        XS9nU R                  R                  X5        U$ )zInsert block before
        rI  )rJ  r4  insert)rE   beforerK  rK  s       r$   insert_basic_blockFunction.insert_basic_block  s%     4+6'
r7   c           
      d   U R                   (       a  SOSnU R                  nSR                  S U R                   5       5      nU R	                  5       nU R
                  (       aA  SSR                  U R
                  R                  U R                  R                  5      5      -   OSn[        U R                  5      (       a   U R                  R                  (       a  SOSnOU R                  R                  (       a  SOSnU R                  nU R                  n	SR                  S	 X(X4 5       5      n
U R                  5       nU(       a  S
R                  U5      OSnU R                  (       a  SR                  U R                  5      OSnSnUR                  XUXvUUS9nUR!                  U5        g)z2
Describe the prototype ("head") of the function.
definedeclarer*   c              3   8   #    U  H  n[        U5      v   M     g 7fr   r   ).0as     r$   	<genexpr>+Function.descr_prototype.<locals>.<genexpr>  s     3AQs   rj  r   z, ...z...c              3   H   #    U  H  o(       d  M  [        U5      v   M     g 7fr   rW  )rX  xs     r$   rZ  r[    s     L*FQ!&#a&&*Fs   
""z {}z section "{}"z:{prefix} {name}({args}{vararg}){attrs}{section}{metadata}
)r   rK  r  varargr+  r  r  N)r4  r9  r   r  r/   r5  r  r2  r8  anyvar_argr  r:  r  r.   r  rN  )rE   r#   stateretr  rK  r+  r^  r  cconvr   r  r  pt_str	prototypes                  r$   descr_prototypeFunction.descr_prototype  sR    !KKYyy333!!#(, chht77JJ"" $ % %=? 	tyy>> $

 2 2WF"jj00UbF,,''L55*FLL++--55<<)2:>,,/((6BNMM)/g+3 " 5	 	

9r7   c                 L    U R                    H  nUR                  U5        M     g)z'
Describe of the body of the function.
N)r4  rO  )rE   r#   rK  s      r$   
descr_bodyFunction.descr_body  s     ;;CIIcN r7   c                     U R                  U5        U R                  (       a4  UR                  S5        U R                  U5        UR                  S5        g g )Nz{
z}
)rf  r4  rN  ri  rQ  s     r$   rO  Function.descr  s@    S!;;JJuOOC JJu r7   c                 J    / nU R                  U5        SR                  U5      $ r  )rO  r   rQ  s     r$   __str__Function.__str__  s     

3wws|r7   c                 2    [        U R                  5      S:H  $ r  )r  r4  r   s    r$   is_declarationFunction.is_declaration  s    4;;1$$r7   )r  r5  r4  r:  r2  r9  r\  r   )r   r   r   r   r   r  r;  r  rC  rF  rL  rQ  rf  ri  rO  rn  rq  r   r  r  s   @r$   r0  r0    s{    %      
4
 % %r7   r0  c                   \  ^  \ rS rSr\" 0 SS_SS_SS_SS_SS_S	S_S
S_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SSSS.E5      rS U 4S jjrS r\S 5       r	\	R                  S 5       r	\S 5       r\R                  S 5       r\S 5       r\R                  S 5       rU 4S jrSrU =r$ )!ArgumentAttributesi  byrefTbyvalelementtypeimmargFinallocainregnestnoalias	nocapturenofreenonnullnoundefpreallocatedreturnedsignextsret
swiftasync)
swifterror	swiftselfzeroextc                 V   > SU l         SU l        SU l        [        [        U ]  U5        g r  )_align_dereferenceable_dereferenceable_or_nullru  ru  r  r  s     r$   r  ArgumentAttributes.__init__  s*     !()% $06r7   c                 n    U R                   R                  U5      nU(       a  U SUR                   S3$ U$ )Nr  r+   )r  getr   )rE   rK  rF   requires_types       r$   r  ArgumentAttributes._expand!  s3    -V1S[[M++Kr7   c                     U R                   $ r   )r  r   s    r$   r  ArgumentAttributes.align(  r@  r7   c                 J    [        U[        5      (       a  US:  d   eXl        g r  )r   r  r  r  s     r$   r  r  ,  s     #s##q00r7   c                     U R                   $ r   )r  r   s    r$   dereferenceable"ArgumentAttributes.dereferenceable1  s    $$$r7   c                 J    [        U[        5      (       a  US:  d   eXl        g r  )r   r  r  r  s     r$   r  r  5  s!    #s##q00 #r7   c                     U R                   $ r   )r  r   s    r$   dereferenceable_or_null*ArgumentAttributes.dereferenceable_or_null:  s    ,,,r7   c                 J    [        U[        5      (       a  US:  d   eXl        g r  )r   r  r  r  s     r$   r  r  >  s!    #s##q00(+%r7   c                   > [         TU ]  U5      nU R                  (       a*  UR                  SR	                  U R                  5      5        U R
                  (       a*  UR                  SR	                  U R
                  5      5        U R                  (       a,  SnUR                  UR	                  U R                  5      5        U$ )Nzalign {0:d}zdereferenceable({0:d})zdereferenceable_or_null({0:d}))ru  r  r  rN  r.   r  r  )rE   rF   r+  drefr   s       r$   r  ArgumentAttributes._to_listC  s     %::LL--djj9:LL1889M9MNO''3DLLT%A%ABCr7   )r  r  r  r  )r   r   r   r   r   r  r  r  r;  r  r.  r  r  r  r   r  r  s   @r$   ru  ru    s      	 		
 	t 	% 	D 	 	 	5 	U 	% 	5 	5 	  	E!" 	5#$ 	%& 	e'( - F27   \\  % % $ $ - - ##, $,	 	r7   ru  c                   8   ^  \ rS rSrSU 4S jjrS rS rSrU =r$ )_BaseArgumentiO  c                    > [        U[        R                  5      (       d   e[        [        U ]  XUS9  Xl        [        5       U l        g r  )	r   r   r  ru  r  r  rI  ru  r5  )rE   rI  rF   rK  r   s       r$   r  _BaseArgument.__init__P  s=    #uzz****mT+Fd+C,.r7   c                 p    SU R                   R                  < SU R                  < SU R                  < S3$ )Nr   rj  z	 of type r   rk  r   s    r$   r   _BaseArgument.__repr__V  s&    *...*A*A499*.))5 	5r7   c                 :    U R                   R                  U5        g r   )r5  rZ   )rE   attrs     r$   add_attribute_BaseArgument.add_attributeZ  s    D!r7   )r5  rI  rs  )	r   r   r   r   r  r   r  r   r  r  s   @r$   r  r  O  s    /5" "r7   r  c                       \ rS rSrSrS rSrg)r6  i^  z+
The specification of a function argument.
c                 "   U R                   R                  U R                  5      nU(       a:  SR                  U R                  SR	                  U5      U R                  5       5      $ SR                  U R                  U R                  5       5      $ )Nz{0} {1} {2}rj  r   )r5  r  r,   r.   r   r/   rE   r+  s     r$   rn  Argument.__str__c  sn    ((3 ''		388E?(,(:(:(<> > ##DIIt/A/A/CDDr7   r?   Nr   r   r   r   r   rn  r   r?   r7   r$   r6  r6  ^  s    Er7   r6  c                       \ rS rSrSrS rSrg)r7  il  z1
The specification of a function's return value.
c                     U R                   R                  U R                  5      nU(       a+  SR                  SR	                  U5      U R                  5      $ [        U R                  5      $ )Nr   rj  )r5  r  r,   r.   r   r   r  s     r$   rn  ReturnValue.__str__q  sJ    ((3##CHHUOTYY??tyy>!r7   r?   Nr  r?   r7   r$   r7  r7  l  s    "r7   r7  c                   r   ^  \ rS rSrSrSU 4S jjr\S 5       r\S 5       r\S 5       r	S r
S rS	 rS
rU =r$ )rJ  iy  a  
A LLVM IR basic block. A basic block is a sequence of
instructions whose execution always goes from start to end.  That
is, a control flow instruction (branch) can only appear as the
last instruction, and incoming branches can only jump to the first
instruction.
c                    > [         [        U ]  U[        R                  " 5       US9  UR
                  U l        / U l        S U l        g r  )ru  rJ  r  r   	LabelTyper\  instructions
terminator)rE   rI  rK  r   s      r$   r  Block.__init__  s:    eT#FEOO,=D#I\\
r7   c                     U R                   S L$ r   )r  r   s    r$   is_terminatedBlock.is_terminated  s    d**r7   c                     U R                   $ r   r>  r   s    r$   functionBlock.function  r@  r7   c                 .    U R                   R                  $ r   )rI  r  r   s    r$   r  Block.module  s    {{!!!r7   c                     UR                  SR                  U R                  5       5      5        XR                   Vs/ s H  nSR                  U5      PM     sn-  ng s  snf )Nz{0}:
z  {0}
)rN  r.   _format_namer  )rE   r#   instrs      r$   rO  Block.descr  sM    

8??4#4#4#6785F5FG5FE	  '5FGGGs   Ac                 r   UR                   UR                   :w  a  [        S5      eU R                  R                  U5      nU R                  R	                  U5        U R                  R                  X25        U R                  R                   H'  nUR                   H  nUR                  X5        M     M)     g)zReplace an instructionz$new instruction has a different typeN)	r,   r   r  indexremoverO  rI  rF  replace_usage)rE   oldnewposbbr  s         r$   rf  Block.replace  s    88sxxBCC%%c*  %  *++**B##C- ) +r7   c                     U R                   n[        R                  U5      (       d3  UR                  SS5      R                  SS5      nSR	                  U5      nU$ )Nrb  rd  rc  re  z"{0}")rK  _SIMPLE_IDENTIFIER_REmatchrf  r.   r_  s     r$   r  Block._format_name  sN     yy$**400<<f-55c6BD>>$'Dr7   )r  r\  r  rs  )r   r   r   r   r   r  r;  r  r  r  rO  rf  r  r   r  r  s   @r$   rJ  rJ  y  s^     + +   " "H
. r7   rJ  c                   *    \ rS rSrSrS rS rS rSrg)BlockAddressi  z
The address of a basic block.
c                     [        U[        5      (       d   e[        U[        5      (       d   e[        R                  " S5      R                  5       U l        Xl        X l        g )N   )	r   r0  rJ  r   r   r   r,   r  basic_block)rE   r  r  s      r$   r  BlockAddress.__init__  sL    (H----+u----MM!$//1	 &r7   c                 V    SR                  U R                  U R                  5       5      $ r  r  r   s    r$   rn  BlockAddress.__str__  r  r7   c                     SR                  U R                  R                  5       U R                  R                  5       5      $ )Nzblockaddress({0}, {1}))r.   r  r/   r  r   s    r$   r/   BlockAddress.get_reference  s7    '..MM'')**,. 	.r7   )r  r  r,   N)	r   r   r   r   r   r  rn  r/   r   r?   r7   r$   r  r    s    'A.r7   r  )3r   r9   rw  rer   r   llvmlite.irr   r   llvmlite.ir._utilsr   r   r	   r-  mapordascii_lettersdigitsr   compiler  r   r%   rA   rJ   r   rL   r   r   r   r   r0   rF  rr  r  r  r  r  r  r  r  setr  r  r0  ru  r  r6  r7  rJ  r  r?   r7   r$   <module>r     s  
   	 " - -. . #c6#7#789#c6==123#c#EFGH 

#CD  
	



 ! (" JIF JIZ
OF O. . L	GO{3]E GOT  5E5u 5Ep!Z !B {$;U  .!F !)#j )#X	 	:Bj :Bz*m\ ;[ ;|<3 <81 1hY%{ Y%xM M`"J "E} E
"- 
"3J 3l.5 .r7   