Ë
    øÇ:jÎ…  ã                   ó>  — d Z ddlZddlZddlZddlmZ ddlmZmZmZ ddl	m
Z
mZmZ  e eeej                   «      «       e eeej"                  «      «      z   e eed«      «      z  Z ej&                  d«      Zdd	d
ddddœZi fd„Zd„ Zd„ Z G d„ de«      Z G d„ de«      Z G d„ de«      Z e«       Z G d„ de
eee«      Z G d„ de«      Z G d„ de
ee«      Z  G d„ de «      Z! G d „ d!e
ee«      Z" G d"„ d#e«      Z# G d$„ d%e «      Z$ G d&„ d'«      Z% G d(„ d)e «      Z& G d*„ d+e ee«      Z' G d,„ d-e'«      Z( G d.„ d/e)«      Z* G d0„ d1e*«      Z+ G d2„ d3e'«      Z, G d4„ d5e*«      Z- G d6„ d7e «      Z. G d8„ d9e.«      Z/ G d:„ d;e.«      Z0 G d<„ d=e «      Z1 G d>„ d?e«      Z2y)@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                 ó$  — t        | t        «      r| j                  «       } t        | t        t        f«      sJ ‚|s/t        d«      D ]!  }|t        v rt        |«      ||<   Œd|z  ||<   Œ# | D �cg c]  }||   ‘Œ	 }}dj                  |«      S c c}w )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       úg/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/llvmlite/ir/values.pyÚ_escape_stringr%      s’   € ô
 �$œÔØ�{‰{‹}ˆÜ�dœU¤IÐ.Ô/Ð/Ð/áÜ˜“*ò 	)ˆBØ”\Ñ!Ü˜r›7��R’à# b™=��R’ð		)ð #Ö
#˜ˆ4�‹8Ð
#€CÐ
#Ø�7‰7�3‹<Ðùò $s   Á.Bc                 ó   ‡ — ˆ fd„}|S )Nc                 óB   •— t        j                  | «      ˆfd„«       }|S )Nc                 ó8  •— | j                   |j                   k7  r&t        d| j                   ›d|j                   ›d�«      ‚dj                  ‰| j                   | j                  «       |j                   |j                  «       «      }t	        | j                   |«      S )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$   Úwrappedz%_binop.<locals>.wrap.<locals>.wrapped5   s~   ø€ à�x‰x˜3Ÿ8™8Ò#Ý Ø$'§H£H¨c¯h«hð"8ó 9ð 9ð +×1Ñ1°&Ø25·(±(¸C×<MÑ<MÓ<OØ25·(±(¸C×<MÑ<MÓ<OóQˆCô % S§X¡X¨sÓ3Ð3ó    ©Ú	functoolsÚwraps©Úfnr5   r4   s     €r$   Úwrapz_binop.<locals>.wrap4   s%   ø€ Ü	�‰˜Ó	ó	4ó 
ð	4ð ˆr6   © ©r4   r<   s   ` r$   Ú_binopr?   3   s   ø€ ôð €Kr6   c                 ó   ‡ — ˆ fd„}|S )Nc                 óF   •‡ — t        j                  ‰ «      ˆ ˆfd„«       }|S )Nc                 ó¨   •—  ‰| |«       || j                   k(  r| S dj                  ‰| j                   | j                  «       |«      }t        ||«      S )Nz{0} ({1} {2} to {3}))r,   r.   r/   r0   )ÚselfÚtypÚopr;   r4   s      €€r$   r5   z&_castop.<locals>.wrap.<locals>.wrappedF   sQ   ø€ áˆt�SŒMØ�d—i‘iÒØ�à'×.Ñ.¨v°t·y±yØ/3×/AÑ/AÓ/CÀSóJˆBä$ S¨"Ó-Ð-r6   r7   r:   s   ` €r$   r<   z_castop.<locals>.wrapE   s%   ù€ Ü	�‰˜Ó	ô	.ó 
ð	.ð ˆr6   r=   r>   s   ` r$   Ú_castoprF   D   s   ø€ ôð €Kr6   c                   óŽ  — e Zd ZdZ ed«      d„ «       Z ed«      d„ «       Z ed«      d„ «       Z ed«      d	„ «       Z ed
«      d„ «       Z	 ed«      d„ «       Z
 ed«      d„ «       Z ed«      d„ «       Z ed«      d„ «       Z ed«      d„ «       Z ed«      d„ «       Z ed«      d„ «       Z ed«      d„ «       Z ed«      d„ «       Z ed«      d„ «       Z ed «      d!„ «       Z ed"«      d#„ «       Z ed$«      d%„ «       Zd&„ Zd'„ Zd(„ Zd)„ Zd*„ Zd+„ Zd,„ Zd-„ Z ed.«      d/„ «       Z  ed0«      d1„ «       Z! ed2«      d3„ «       Z" ed4«      d5„ «       Z# ed6«      d7„ «       Z$ ed8«      d9„ «       Z% ed:«      d;„ «       Z& ed<«      d=„ «       Z' ed>«      d?„ «       Z( ed@«      dA„ «       Z) edB«      dC„ «       Z* edD«      dE„ «       Z+dF„ Z,yG)HÚ_ConstOpMixinzQ
    A mixin defining constant operations, for use in constant-like classes.
    Úshlc                  ó   — y)z<
        Left integer shift:
            lhs << rhs
        Nr=   ©rC   Úothers     r$   rI   z_ConstOpMixin.shl]   ó   � r6   Úlshrc                  ó   — y)zP
        Logical (unsigned) right integer shift:
            lhs >> rhs
        Nr=   rK   s     r$   rN   z_ConstOpMixin.lshrd   rM   r6   Úashrc                  ó   — y)zQ
        Arithmetic (signed) right integer shift:
            lhs >> rhs
        Nr=   rK   s     r$   rP   z_ConstOpMixin.ashrk   rM   r6   Úaddc                  ó   — y)z9
        Integer addition:
            lhs + rhs
        Nr=   rK   s     r$   rR   z_ConstOpMixin.addr   rM   r6   Úfaddc                  ó   — y)z@
        Floating-point addition:
            lhs + rhs
        Nr=   rK   s     r$   rT   z_ConstOpMixin.faddy   rM   r6   Úsubc                  ó   — y)z<
        Integer subtraction:
            lhs - rhs
        Nr=   rK   s     r$   rV   z_ConstOpMixin.sub€   rM   r6   Úfsubc                  ó   — y)zC
        Floating-point subtraction:
            lhs - rhs
        Nr=   rK   s     r$   rX   z_ConstOpMixin.fsub‡   rM   r6   Úmulc                  ó   — y)z?
        Integer multiplication:
            lhs * rhs
        Nr=   rK   s     r$   rZ   z_ConstOpMixin.mulŽ   rM   r6   Úfmulc                  ó   — y)zF
        Floating-point multiplication:
            lhs * rhs
        Nr=   rK   s     r$   r\   z_ConstOpMixin.fmul•   rM   r6   Úudivc                  ó   — y)zB
        Unsigned integer division:
            lhs / rhs
        Nr=   rK   s     r$   r^   z_ConstOpMixin.udivœ   rM   r6   Úsdivc                  ó   — y)z@
        Signed integer division:
            lhs / rhs
        Nr=   rK   s     r$   r`   z_ConstOpMixin.sdiv£   rM   r6   Úfdivc                  ó   — y)z@
        Floating-point division:
            lhs / rhs
        Nr=   rK   s     r$   rb   z_ConstOpMixin.fdivª   rM   r6   Úuremc                  ó   — y)zC
        Unsigned integer remainder:
            lhs % rhs
        Nr=   rK   s     r$   rd   z_ConstOpMixin.urem±   rM   r6   Úsremc                  ó   — y)zA
        Signed integer remainder:
            lhs % rhs
        Nr=   rK   s     r$   rf   z_ConstOpMixin.srem¸   rM   r6   Úfremc                  ó   — y)zA
        Floating-point remainder:
            lhs % rhs
        Nr=   rK   s     r$   rh   z_ConstOpMixin.frem¿   rM   r6   Úorc                  ó   — y)z;
        Bitwise integer OR:
            lhs | rhs
        Nr=   rK   s     r$   Úor_z_ConstOpMixin.or_Æ   rM   r6   Úandc                  ó   — y)z<
        Bitwise integer AND:
            lhs & rhs
        Nr=   rK   s     r$   Úand_z_ConstOpMixin.and_Í   rM   r6   Úxorc                  ó   — y)z<
        Bitwise integer XOR:
            lhs ^ rhs
        Nr=   rK   s     r$   rp   z_ConstOpMixin.xorÔ   rM   r6   c           	      óÀ  — |dz   }	 t         |   }|dk(  r|dv s||z   }| j                  |j                  k7  r&t        d| j                  ›d|j                  ›d�«      ‚d	j	                  ||| j                  | j                  «       |j                  |j                  «       «      }t        t        j                  d
«      |«      S # t        $ r t        d|›d|›�«      ‚w xY w)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)rC   ÚprefixÚsignÚcmpoprL   ÚinsrE   r3   s           r$   Ú_cmpz_ConstOpMixin._cmpÛ   sØ   € Ø�u‰nˆð	LÜ˜%‘ˆBð ˜#’ %¨<Ñ"7Ø˜‘ˆBà�9‰9˜Ÿ
™
Ò"ÝØ $§	£	¨5¯:«:ð7ó 8ð 8ð +×1Ñ1Ø�Ø�I‰I�t×)Ñ)Ó+Ø�J‰J˜×+Ñ+Ó-ó/ˆô
 !¤§¡¨qÓ!1°3Ó7Ð7øô ò 	LÝºuÁcÐJÓKÐKð	Lús   ‡	C ÃCc                 ó*   — | j                  dd||«      S )z…
        Signed integer comparison:
            lhs <cmpop> rhs

        where cmpop can be '==', '!=', '<', '<=', '>', '>='
        rt   Ús©r}   ©rC   r{   rL   s      r$   Úicmp_signedz_ConstOpMixin.icmp_signedð   ó   € ð �y‰y˜˜c 5¨%Ó0Ð0r6   c                 ó*   — | j                  dd||«      S )z”
        Unsigned integer (or pointer) comparison:
            lhs <cmpop> rhs

        where cmpop can be '==', '!=', '<', '<=', '>', '>='
        rt   Úur€   r�   s      r$   Úicmp_unsignedz_ConstOpMixin.icmp_unsignedù   rƒ   r6   c                 ó*   — | j                  dd||«      S )z›
        Floating-point ordered comparison:
            lhs <cmpop> rhs

        where cmpop can be '==', '!=', '<', '<=', '>', '>=', 'ord', 'uno'
        ÚfÚor€   r�   s      r$   Úfcmp_orderedz_ConstOpMixin.fcmp_ordered  rƒ   r6   c                 ó*   — | j                  dd||«      S )z�
        Floating-point unordered comparison:
            lhs <cmpop> rhs

        where cmpop can be '==', '!=', '<', '<=', '>', '>=', 'ord', 'uno'
        rˆ   r…   r€   r�   s      r$   Úfcmp_unorderedz_ConstOpMixin.fcmp_unordered  rƒ   r6   c                 ó  — t        | j                  t        j                  «      r8t	        j
                  | j                  d| j                  j                  z  «      }n t	        j
                  | j                  d«      }| j                  |«      S )z@
        Bitwise integer complement:
            ~value
        )éÿÿÿÿrŽ   )r   r,   r   Ú
VectorTyper   ÚConstantÚcountrp   )rC   r2   s     r$   Únot_z_ConstOpMixin.not_  s[   € ô
 �d—i‘i¤×!1Ñ!1Ô2Ü—/‘/ $§)¡)¨U°T·Y±Y·_±_Ñ-DÓE‰Cä—/‘/ $§)¡)¨RÓ0ˆCà�x‰x˜‹}Ðr6   c                 ód   — t        j                  | j                  d«      }|j                  | «      S )z6
        Integer negative:
            -value
        r   )r   r�   r,   rV   )rC   Úzeros     r$   Únegz_ConstOpMixin.neg$  s&   € ô
 �‰˜tŸy™y¨!Ó,ˆØ�x‰x˜‹~Ðr6   c                 ó‚   — dj                  | j                  | j                  «       «      }t        | j                  |«      S )z=
        Floating-point negative:
            -value
        zfneg ({0} {1}))r.   r,   r/   r0   )rC   r3   s     r$   Úfnegz_ConstOpMixin.fneg,  s4   € ð
 ×%Ñ% d§i¡i°×1CÑ1CÓ1EÓFˆÜ  §¡¨CÓ0Ð0r6   Útruncc                  ó   — y)z@
        Truncating integer downcast to a smaller type.
        Nr=   ©rC   rD   s     r$   r˜   z_ConstOpMixin.trunc8  rM   r6   Úzextc                  ó   — y)z@
        Zero-extending integer upcast to a larger type
        Nr=   rš   s     r$   r›   z_ConstOpMixin.zext>  rM   r6   Úsextc                  ó   — y)zA
        Sign-extending integer upcast to a larger type.
        Nr=   rš   s     r$   r�   z_ConstOpMixin.sextD  rM   r6   Úfptruncc                  ó   — y)zA
        Floating-point downcast to a less precise type.
        Nr=   rš   s     r$   rŸ   z_ConstOpMixin.fptruncJ  rM   r6   Úfpextc                  ó   — y)z?
        Floating-point upcast to a more precise type.
        Nr=   rš   s     r$   r¡   z_ConstOpMixin.fpextP  rM   r6   Úbitcastc                  ó   — y)z;
        Pointer cast to a different pointer type.
        Nr=   rš   s     r$   r£   z_ConstOpMixin.bitcastV  rM   r6   Úfptouic                  ó   — y)z=
        Convert floating-point to unsigned integer.
        Nr=   rš   s     r$   r¥   z_ConstOpMixin.fptoui\  rM   r6   Úuitofpc                  ó   — y)z=
        Convert unsigned integer to floating-point.
        Nr=   rš   s     r$   r§   z_ConstOpMixin.uitofpb  rM   r6   Úfptosic                  ó   — y)z;
        Convert floating-point to signed integer.
        Nr=   rš   s     r$   r©   z_ConstOpMixin.fptosih  rM   r6   Úsitofpc                  ó   — y)z;
        Convert signed integer to floating-point.
        Nr=   rš   s     r$   r«   z_ConstOpMixin.sitofpn  rM   r6   Úptrtointc                 óÔ   — t        | j                  t        j                  «      sd}t	        || j                  fz  «      ‚t        |t        j
                  «      st	        d|›d�«      ‚y)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Ú	TypeErrorrx   ©rC   rD   Úmsgs      r$   r­   z_ConstOpMixin.ptrtointt  s[   € ô
 ˜$Ÿ)™)¤U×%6Ñ%6Ô7ØFˆCÜ˜C 4§9¡9 ,Ñ.Ó/Ð/Ü˜#œuŸ}™}Ô-ÝÚ"ð%ó &ð &ð .r6   Úinttoptrc                 óÔ   — t        | j                  t        j                  «      sd}t	        || j                  fz  «      ‚t        |t        j
                  «      st	        d|›d�«      ‚y)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   rx   r±   r°   r²   s      r$   r´   z_ConstOpMixin.inttoptr€  s[   € ô
 ˜$Ÿ)™)¤U§]¡]Ô3ØKˆCÜ˜C 4§9¡9 ,Ñ.Ó/Ð/Ü˜#œu×0Ñ0Ô1ÝÚ"ð%ó &ð &ð 2r6   c                 ó$  — t        | j                  t        j                  «      st	        d| j                  ›d�«      ‚| j                  }|D ]  }|j                  |«      }Œ |D �cg c],  }dj                  |j                  |j                  «       «      ‘Œ. }}dj                  | j                  j                  | j                  | j                  «       dj                  |«      «      }t        |j                  | j                  «      |«      S c c}w )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)rC   ÚindicesÚouttypert   ÚidxÚ
strindicesrE   s          r$   r¸   z_ConstOpMixin.gepŒ  sð   € ô ˜$Ÿ)™)¤U×%6Ñ%6Ô7ÝØ#Ÿy›yð+ó ,ð ,ð —)‘)ˆØò 	%ˆAØ—k‘k !“n‰Gð	%ð ")ö*Øð  ×&Ñ& s§x¡x°×1BÑ1BÓ1DÕEð *ˆ
ð *ð 1×7Ñ7Ø�I‰I×Ñ˜tŸy™yØ×ÑÓ  $§)¡)¨JÓ"7ó9ˆô ! ×!3Ñ!3°D·N±NÓ!CÀRÓHÐHùò*s   Á&1DN)-Ú__name__Ú
__module__Ú__qualname__Ú__doc__r?   rI   rN   rP   rR   rT   rV   rX   rZ   r\   r^   r`   rb   rd   rf   rh   rl   ro   rp   r}   r‚   r†   rŠ   rŒ   r’   r•   r—   rF   r˜   r›   r�   rŸ   r¡   r£   r¥   r§   r©   r«   r­   r´   r¸   r=   r6   r$   rH   rH   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r6   rH   c                   ó   — e Zd ZdZd„ Zy)ÚValuez(
    The base class for all values.
    c                 óP   — d| j                   j                  ›d| j                  ›d�S )Nú<ir.z type='z' ...>)Ú	__class__rÀ   r,   ©rC   s    r$   Ú__repr__zValue.__repr__¦  s   � Ø*.¯.©.×*AÓ*AÀ4Ç9Ã9ÐNÐNr6   N)rÀ   rÁ   rÂ   rÃ   rÊ   r=   r6   r$   rÅ   rÅ   ¡  s   „ ñóOr6   rÅ   c                   ó   — e Zd ZdZd„ Zy)Ú
_Undefinedz0
    'undef': a value for undefined values.
    c                 ó`   — 	 t         S # t        $ r t        j                  t        «      cY S w xY w©N)Ú	UndefinedÚ	NameErrorÚobjectÚ__new__rÌ   )Úclss    r$   rÒ   z_Undefined.__new__®  s+   € ð	.ÜÐøÜò 	.Ü—>‘>¤*Ó-Ò-ð	.ús   ‚ ˆ"-¬-N)rÀ   rÁ   rÂ   rÃ   rÒ   r=   r6   r$   rÌ   rÌ   ª  s   „ ñó.r6   rÌ   c                   ól   — e Zd ZdZd„ Zd„ Zd„ Zed„ «       Zedd„«       Z	e
d„ «       Zd„ Zd	„ Zd
„ Zd„ Zy)r�   z 
    A constant LLVM value.
    c                 ó²   — t        |t        j                  «      sJ ‚t        |t        j                  «      rJ ‚|| _        |j                  |«      }|| _        y rÎ   )r   r   ÚTypeÚVoidTyper,   Úwrap_constant_valueÚconstant©rC   rD   rÙ   s      r$   Ú__init__zConstant.__init__½  sH   € Ü˜#œuŸz™zÔ*Ð*Ð*Ü˜c¤5§>¡>Ô2Ð2Ð2ØˆŒ	Ø×*Ñ*¨8Ó4ˆØ ˆ�r6   c                 óV   — dj                  | j                  | j                  «       «      S ©Nr·   ©r.   r,   r/   rÉ   s    r$   Ú
_to_stringzConstant._to_stringÄ  ó"   € Ø×Ñ §	¡	¨4×+=Ñ+=Ó+?Ó@Ð@r6   c                 óD  — | j                   €| j                  j                  }|S | j                   t        u rd}|S t	        | j                   t
        «      r&dj                  t        | j                   «      «      }|S | j                  j                  | j                   «      }|S )NÚundefzc"{0}")	rÙ   r,   ÚnullrÏ   r   r   r.   r%   Úformat_constant©rC   Úvals     r$   Ú_get_referencezConstant._get_referenceÇ  s‡   € Ø�=‰=Ð Ø—)‘)—.‘.ˆCð ˆ
ð �]‰]œiÑ'ØˆCð ˆ
ô ˜Ÿ™¤yÔ1Ø—/‘/¤.°·±Ó"?Ó@ˆCð
 ˆ
ð —)‘)×+Ñ+¨D¯M©MÓ:ˆCàˆ
r6   c                 óô   — |D �cg c]  }|j                   ‘Œ }}t        |«      dk(  rt        d«      ‚|d   }|D ]  }||k7  sŒ	t        d«      ‚  | t	        j
                  |t        |«      «      |«      S c c}w )zO
        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ÚtyrL   s         r$   Úliteral_arrayzConstant.literal_arrayÖ  s‚   € ð
 "'Ö'˜2ˆr�w‹wÐ'ˆÐ'Üˆs‹8�qŠ=ÜÐ8Ó9Ð9Ø�‰VˆØò 	HˆEØ�U‹{ÜÐ FÓGÐGð	Hñ ”5—?‘? 2¤s¨5£zÓ2°EÓ:Ð:ùò (s   …A5c                 óx   — |D �cg c]  }|j                   ‘Œ }} | t        j                  ||«      |«      S c c}w )zS
        Construct a literal structure constant made of the given members.
        )r,   r   ÚLiteralStructType)rÓ   rë   Úpackedrì   rí   s        r$   Úliteral_structzConstant.literal_structä  s:   € ð
 "'Ö'˜2ˆr�w‹wÐ'ˆÐ'Ù”5×*Ñ*¨3°Ó7¸Ó?Ð?ùò (s   …7c                 óŒ   — t        | j                  t        j                  «      st	        d«      ‚| j                  j
                  S )Nz)Only pointer constant have address spaces)r   r,   r   r°   r±   r»   rÉ   s    r$   r»   zConstant.addrspaceì  s2   € ä˜$Ÿ)™)¤U×%6Ñ%6Ô7ÜÐGÓHÐHØ�y‰y×"Ñ"Ð"r6   c                 óR   — t        |t        «      rt        | «      t        |«      k(  S y©NF)r   r�   r   rK   s     r$   Ú__eq__zConstant.__eq__ò  s"   € Ü�eœXÔ&Ü�t“9¤ E£
Ñ*Ð*àr6   c                 ó&   — | j                  |«       S rÎ   ©r÷   rK   s     r$   Ú__ne__zConstant.__ne__ø  ó   € Ø—;‘;˜uÓ%Ð%Ð%r6   c                 ó*   — t        t        | «      «      S rÎ   )Úhashr   rÉ   s    r$   Ú__hash__zConstant.__hash__û  s   € Ü”C˜“I‹Ðr6   c                 ó<   — d| j                   ›d| j                  ›d�S )Nz<ir.Constant type='z' value=r   )r,   rÙ   rÉ   s    r$   rÊ   zConstant.__repr__þ  s   � Ø59·Y³YÀÇÃÐNÐNr6   N)F)rÀ   rÁ   rÂ   rÃ   rÛ   rß   rç   Úclassmethodrï   ró   Úpropertyr»   r÷   rú   rþ   rÊ   r=   r6   r$   r�   r�   ¸  sj   „ ñò!òAòð ñ;ó ð;ð ò@ó ð@ð ñ#ó ð#ò
ò&òóOr6   r�   c                   ó"   — e Zd ZdZd„ Zd„ Zd„ Zy)r0   zA
    A constant with an already formatted IR representation.
    c                 óV   — t        |t        «      sJ ‚t        j                  | ||«       y rÎ   )r   r   r�   rÛ   rÚ   s      r$   rÛ   zFormattedConstant.__init__  s$   € Ü˜(¤CÔ(Ð(Ð(Ü×Ñ˜$  XÕ.r6   c                 ó   — | j                   S rÎ   ©rÙ   rÉ   s    r$   rß   zFormattedConstant._to_string  ó   € Ø�}‰}Ðr6   c                 ó   — | j                   S rÎ   r  rÉ   s    r$   rç   z FormattedConstant._get_reference  r  r6   N)rÀ   rÁ   rÂ   rÃ   rÛ   rß   rç   r=   r6   r$   r0   r0     s   „ ñò/òór6   r0   c                   ód   — e Zd ZdZdZdZd„ Zd„ Zd„ Zd„ Z	d„ Z
 ee	e
«      Zd	„ Zd
„ Zed„ «       Zy)Ú
NamedValuez*
    The base class for named values.
    ú%Tc                 ó‚   — |€J ‚t        |t        j                  «      sJ ‚|| _        || _        | j                  |«       y rÎ   )r   r   rÖ   Úparentr,   Ú	_set_name)rC   r  r,   Únames       r$   rÛ   zNamedValue.__init__  s<   € ØÐ!Ð!Ð!Ü˜$¤§
¡
Ô+Ð+Ð+ØˆŒØˆŒ	Ø�‰�tÕr6   c                 ó
  — g }t        | j                  t        j                  «      s.|j	                  dj                  | j                  «       «      «       | j                  |«       dj                  |«      j                  «       S )Nz{0} = r   )
r   r,   r   r×   Úappendr.   r/   Údescrr   Úrstrip©rC   r#   s     r$   rß   zNamedValue._to_string   sY   € ØˆÜ˜$Ÿ)™)¤U§^¡^Ô4Ø�J‰J�x—‘ t×'9Ñ'9Ó';Ó<Ô=Ø�
‰
�3ŒØ�w‰w�s‹|×"Ñ"Ó$Ð$r6   c                 ó   — t         ‚rÎ   )ÚNotImplementedErrorr  s     r$   r  zNamedValue.descr'  s   € Ü!Ð!r6   c                 ó   — | j                   S rÎ   )Ú_namerÉ   s    r$   Ú	_get_namezNamedValue._get_name*  s   € Ø�z‰zÐr6   c                 ót   — | j                   j                  j                  || j                  ¬«      }|| _        y )N)Údeduplicate)r  ÚscopeÚregisterÚdeduplicate_namer  ©rC   r  s     r$   r  zNamedValue._set_name-  s4   € Ø�{‰{× Ñ ×)Ñ)¨$Ø6:×6KÑ6Kð *ó Mˆàˆ�
r6   c                 ó¦   — | j                   }d|v sd|v r"|j                  dd«      j                  dd«      }dj                  | j                  |«      S )Nú\ú"ú\5cú\22z{0}"{1}")r  Úreplacer.   Úname_prefixr  s     r$   rç   zNamedValue._get_reference4  sN   € Ø�y‰yˆà�4‰<˜3 $™;Ø—<‘<  fÓ-×5Ñ5°c¸6ÓBˆDØ× Ñ  ×!1Ñ!1°4Ó8Ð8r6   c                 ój   — d| j                   j                  ›d| j                  ›d| j                  ›d�S )NrÇ   ú z
 of type 'z'>©rÈ   rÀ   r  r,   rÉ   s    r$   rÊ   zNamedValue.__repr__;  s%   � à�N‰N×#Ó# T§Y£Y°·	³	ð;ð 	;r6   c                 óú   — | j                   }t        |t        j                  «      r| j                   j                  }t        |t        j
                  «      r|S t        dj                  | j                   «      «      ‚)NzNot a function: {0})r,   r   r   r°   r¹   ÚFunctionTyper±   r.   )rC   rî   s     r$   Úfunction_typezNamedValue.function_type?  sZ   € à�Y‰YˆÜ�bœ%×+Ñ+Ô,Ø—‘×"Ñ"ˆBÜ�bœ%×,Ñ,Ô-ØˆIäÐ1×8Ñ8¸¿¹ÓCÓDÐDr6   N)rÀ   rÁ   rÂ   rÃ   r%  r  rÛ   rß   r  r  r  r  r  rç   rÊ   r+  r=   r6   r$   r	  r	    s[   „ ñð €KØÐòò%ò"òòñ
 �I˜yÓ)€Dò9ò;ð ñEó ñEr6   r	  c                   óD   ‡ — e Zd ZdZˆ fd„Zd„ Zd„ ZeZd„ Zd„ Z	d„ Z
ˆ xZS )ÚMetaDataStringz[
    A metadata string, i.e. a constant string used as a value in a metadata
    node.
    c                 ód   •— t         t        | �  |t        j                  «       d¬«       || _        y )Nr   ©r  )Úsuperr-  rÛ   r   ÚMetaDataTypeÚstring)rC   r  r2  rÈ   s      €r$   rÛ   zMetaDataString.__init__P  s1   ø€ ÜŒn˜dÑ,¨VÜ-2×-?Ñ-?Ó-AØ24ð 	-ô 	6ð ˆ�r6   c                 ó.   — || j                  «       dfz  }y )Nú
)r/   r  s     r$   r  zMetaDataString.descrV  s   € Ø�×"Ñ"Ó$ dÐ+Ñ+‰r6   c                 óJ   — dj                  t        | j                  «      «      S )Nz!"{0}")r.   r%   r2  rÉ   s    r$   rç   zMetaDataString._get_referenceY  s   € Ø�‰œ~¨d¯k©kÓ:Ó;Ð;r6   c                 óV   — t        |t        «      r| j                  |j                  k(  S yrö   )r   r-  r2  rK   s     r$   r÷   zMetaDataString.__eq__^  s"   € Ü�eœ^Ô,Ø—;‘; %§,¡,Ñ.Ð.àr6   c                 ó&   — | j                  |«       S rÎ   rù   rK   s     r$   rú   zMetaDataString.__ne__d  rû   r6   c                 ó,   — t        | j                  «      S rÎ   )rý   r2  rÉ   s    r$   rþ   zMetaDataString.__hash__g  s   € Ü�D—K‘KÓ Ð r6   )rÀ   rÁ   rÂ   rÃ   rÛ   r  rç   rß   r÷   rú   rþ   Ú__classcell__©rÈ   s   @r$   r-  r-  J  s-   ø„ ñô
ò,ò<ð  €Jòò&ö!r6   r-  c                   ó    — e Zd ZdZd„ Zd„ ZeZy)ÚMetaDataArgumentzÊ
    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                 ó´   — t        |t        «      sJ ‚t        |j                  t        j                  «      rJ ‚t        j                  «       | _        || _        y rÎ   )r   rÅ   r,   r   r1  Úwrapped_value©rC   Úvalues     r$   rÛ   zMetaDataArgument.__init__t  sD   € Ü˜%¤Ô'Ð'Ð'Ü˜eŸj™j¬%×*<Ñ*<Ô=Ð=Ð=Ü×&Ñ&Ó(ˆŒ	Ø"ˆÕr6   c                 ó~   — dj                  | j                  j                  | j                  j                  «       «      S rÝ   )r.   r>  r,   r/   rÉ   s    r$   rç   zMetaDataArgument._get_referencez  s7   € à×Ñ × 2Ñ 2× 7Ñ 7Ø $× 2Ñ 2× @Ñ @Ó BóDð 	Dr6   N)rÀ   rÁ   rÂ   rÃ   rÛ   rç   rß   r=   r6   r$   r<  r<  k  s   „ ñò#òDð
  �Jr6   r<  c                   ó   — e Zd ZdZd„ Zd„ Zy)ÚNamedMetaDatazk
    A named metadata node.

    Do not instantiate directly, use Module.add_named_metadata() instead.
    c                 ó    — || _         g | _        y rÎ   )r  Úoperands)rC   r  s     r$   rÛ   zNamedMetaData.__init__‰  s   € ØˆŒØˆ�r6   c                 ó:   — | j                   j                  |«       y rÎ   )rE  r  )rC   Úmds     r$   rR   zNamedMetaData.add�  s   € Ø�‰×Ñ˜RÕ r6   N)rÀ   rÁ   rÂ   rÃ   rÛ   rR   r=   r6   r$   rC  rC  ‚  s   „ ñòó!r6   rC  c                   óD   ‡ — e Zd ZdZdZˆ fd„Zd„ Zd„ Zd„ Zd„ Z	d„ Z
ˆ xZS )	ÚMDValuezš
    A metadata node's value, consisting of a sequence of elements ("operands").

    Do not instantiate directly, use Module.add_metadata() instead.
    ú!c                 ó¬   •— t         t        | �  |t        j                  «       |¬«       t        |«      | _        |j                  j                  | «       y ©Nr/  )	r0  rI  rÛ   r   r1  ÚtuplerE  Úmetadatar  )rC   r  r   r  rÈ   s       €r$   rÛ   zMDValue.__init__™  sG   ø€ ÜŒg�tÑ% fÜ&+×&8Ñ&8Ó&:Ø+/ð 	&ô 	1ô ˜f›ˆŒØ�‰×Ñ˜tÕ$r6   c                 óÎ  — g }| j                   D ]­  }t        |j                  t        j                  «      rNt        |t
        «      r|j                  €|j                  d«       ŒU|j                  |j                  «       «       Œu|j                  dj                  |j                  |j                  «       «      «       Œ¯ dj                  |«      }|dj                  |«      dfz  }y )Nrã   r·   r*   z
!{{ {0} }}r4  )rE  r   r,   r   r1  r�   rÙ   r  r/   r.   r   )rC   r#   rE  rE   s       r$   r  zMDValue.descr   s´   € ØˆØ—-‘-ò 	OˆBÜ˜"Ÿ'™'¤5×#5Ñ#5Ô6Ü˜b¤(Ô+°·±Ð0CØ—O‘O FÕ+à—O‘O B×$4Ñ$4Ó$6Õ7à—‘ 	× 0Ñ 0°·±¸"×:JÑ:JÓ:LÓ MÕNð	Oð —9‘9˜XÓ&ˆØ�×#Ñ# HÓ-¨tÐ4Ñ4‰r6   c                 óF   — | j                   t        | j                  «      z   S rÎ   ©r%  r   r  rÉ   s    r$   rç   zMDValue._get_reference­  ó   € Ø×Ñ¤# d§i¡i£.Ñ0Ð0r6   c                 óV   — t        |t        «      r| j                  |j                  k(  S yrö   )r   rI  rE  rK   s     r$   r÷   zMDValue.__eq__°  s"   € Ü�eœWÔ%Ø—=‘= E§N¡NÑ2Ð2àr6   c                 ó&   — | j                  |«       S rÎ   rù   rK   s     r$   rú   zMDValue.__ne__¶  rû   r6   c                 ó,   — t        | j                  «      S rÎ   )rý   rE  rÉ   s    r$   rþ   zMDValue.__hash__¹  s   € Ü�D—M‘MÓ"Ð"r6   ©rÀ   rÁ   rÂ   rÃ   r%  rÛ   r  rç   r÷   rú   rþ   r9  r:  s   @r$   rI  rI  ‘  s-   ø„ ñð
 €Kô%ò5ò1òò&ö#r6   rI  c                   ó   — e Zd ZdZd„ Zy)ÚDITokenz§
    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                 ó   — || _         y rÎ   )r@  r?  s     r$   rÛ   zDIToken.__init__Å  s	   € Øˆ�
r6   N)rÀ   rÁ   rÂ   rÃ   rÛ   r=   r6   r$   rX  rX  ½  s   „ ñór6   rX  c                   óD   ‡ — e Zd ZdZdZˆ fd„Zd„ Zd„ Zd„ Zd„ Z	d„ Z
ˆ xZS )	ÚDIValuezŒ
    A debug information descriptor, containing key-value pairs.

    Do not instantiate directly, use Module.add_debug_info() instead.
    rJ  c                 óÈ   •— t         t        | �  |t        j                  «       |¬«       || _        || _        t        |«      | _        |j                  j                  | «       y rL  )r0  r[  rÛ   r   r1  Úis_distinctÚkindrM  rE  rN  r  )rC   r  r]  r^  rE  r  rÈ   s         €r$   rÛ   zDIValue.__init__Ñ  sV   ø€ ÜŒg�tÑ% fÜ&+×&8Ñ&8Ó&:Ø+/ð 	&ô 	1ð 'ˆÔØˆŒ	Ü˜h›ˆŒØ�‰×Ñ˜tÕ$r6   c                 ób  — | j                   r|dz  }g }| j                  D ]è  \  }}|€d}n½|du rd}n¶|du rd}n¯t        |t        «      r|j                  }n’t        |t
        «      rdj                  t        |«      «      }ngt        |t        «      rt        |«      }nKt        |t        «      rt        |«      }n/t        |t        «      r|j                  «       }nt        d|›�«      ‚|j                  d	j                  ||«      «       Œê d
j                  |«      }|d| j                  d|dfz  }y )N)z	distinct rã   TÚtrueFÚfalsez"{}"z%invalid operand type for debug info: z{0}: {1}r*   rJ  ú(z)
)r]  rE  r   rX  r@  r   r.   r%   Úintr�   r	  r/   r±   r  r   r^  )rC   r#   rE  Úkeyr@  Ústrvalues         r$   r  zDIValue.descrÚ  s  € Ø×ÒØ�>Ñ!ˆCØˆØŸ-™-ò 	>‰JˆC�Øˆ}Ø!‘Ø˜$‘Ø!‘Ø˜%‘Ø"‘Ü˜E¤7Ô+Ø Ÿ;™;‘Ü˜E¤3Ô'Ø!Ÿ=™=¬¸Ó)>Ó?‘Ü˜E¤3Ô'Ü˜u›:‘Ü˜E¤8Ô,ô ˜u›:‘Ü˜E¤:Ô.Ø ×.Ñ.Ó0‘åÙ#(ð!+ó ,ð ,à�O‰O˜J×-Ñ-¨c°8Ó<Õ=ð-	>ð. —9‘9˜XÓ&ˆØ��T—Y‘Y  X¨uÐ5Ñ5‰r6   c                 óF   — | j                   t        | j                  «      z   S rÎ   rQ  rÉ   s    r$   rç   zDIValue._get_referenceø  rR  r6   c                 óÂ   — t        |t        «      rO| j                  |j                  k(  xr4 | j                  |j                  k(  xr | j                  |j                  k(  S yrö   )r   r[  r]  r^  rE  rK   s     r$   r÷   zDIValue.__eq__û  sT   € Ü�eœWÔ%Ø×#Ñ# u×'8Ñ'8Ñ8ò 0Ø—	‘	˜UŸZ™ZÑ'ò0à—‘ §¡Ñ/ð0ð r6   c                 ó&   — | j                  |«       S rÎ   rù   rK   s     r$   rú   zDIValue.__ne__  rû   r6   c                 óZ   — t        | j                  | j                  | j                  f«      S rÎ   )rý   r]  r^  rE  rÉ   s    r$   rþ   zDIValue.__hash__  s"   € Ü�T×%Ñ% t§y¡y°$·-±-Ð@ÓAÐAr6   rV  r:  s   @r$   r[  r[  É  s.   ø„ ñð
 €Kô%ò6ò<1òò&öBr6   r[  c                   ó*   ‡ — e Zd ZdZdZdZˆ fd„Zˆ xZS )ÚGlobalValuez
    A global value.
    ú@Fc                 ód   •— t        t        | �
  |i |¤Ž d| _        d| _        d| _        i | _        y ©Nr   )r0  rk  rÛ   ÚlinkageÚstorage_classÚsectionrN  )rC   ÚargsÚkwargsrÈ   s      €r$   rÛ   zGlobalValue.__init__  s4   ø€ ÜŒk˜4Ñ)¨4Ð:°6Ò:ØˆŒØˆÔØˆŒØˆ�r6   )rÀ   rÁ   rÂ   rÃ   r%  r  rÛ   r9  r:  s   @r$   rk  rk  
  s   ø„ ñð €KØÐ÷ð r6   rk  c                   ó*   ‡ — e Zd ZdZdˆ fd„	Zd„ Zˆ xZS )ÚGlobalVariablez
    A global variable.
    c                 ó  •— t        |t        j                  «      sJ ‚t        t        | �  ||j                  |«      |¬«       || _        d | _        d| _	        d| _
        || _        d | _        | j                  j                  | «       y )Nr/  F)r   r   rÖ   r0  ru  rÛ   rº   Ú
value_typeÚinitializerÚunnamed_addrÚglobal_constantr»   Úalignr  Ú
add_global)rC   ÚmodulerD   r  r»   rÈ   s        €r$   rÛ   zGlobalVariable.__init__  sz   ø€ Ü˜#œuŸz™zÔ*Ð*Ð*ÜŒn˜dÑ,¨V°S·^±^ÀIÓ5NØ26ð 	-ô 	8àˆŒØˆÔØ!ˆÔØ$ˆÔØ"ˆŒØˆŒ
Ø�‰×Ñ˜tÕ$r6   c                 ó¬  — | j                   rd}nd}| j                  s| j                  €dnd}n| j                  }|r|j                  |dz   «       | j                  r|j                  | j                  dz   «       | j
                  r|j                  d«       | j                  dk7  r*|j                  dj                  | j                  «      «       |j                  d	j                  || j                  ¬
«      «       | j                  �| j                  j                  | j                  k7  r/t        d| j                  j                  ›d| j                  ›�«      ‚|j                  d| j                  j                  «       z   «       n9|dvr5|j                  d| j                  t        «      j                  «       z   «       | j                  r|j                  d| j                  ›d�«       | j                  �|j                  d| j                  fz  «       | j                  r!|j                  | j!                  d¬«      «       |j                  d«       y )NrÙ   ÚglobalÚexternalr   r'  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 "r!  z
, align %dT)Úleading_commar4  )rz  ro  rx  r  rp  ry  r»   r.   rw  r,   r±   r/   rÏ   rq  r{  rN  Ú_stringify_metadata)rC   r#   r^  ro  s       r$   r  zGlobalVariable.descr*  sË  € Ø×ÒØ‰DàˆDà�|Š|à$(×$4Ñ$4Ð$<‘jÀ"‰Gà—l‘lˆGáØ�J‰J�w ‘}Ô%Ø×ÒØ�J‰J�t×)Ñ)¨CÑ/Ô0Ø×ÒØ�J‰J�Ô'Ø�>‰>˜QÒØ�J‰JÐ*×1Ñ1°$·.±.ÓAÔBà�
‰
�?×*Ñ*°¸4¿?¹?Ð*ÓKÔLà×ÑÐ'Ø×Ñ×$Ñ$¨¯©Ò7Ýà#'×#3Ñ#3×#8Ó#8¸$¿/º/ð!Kó Lð Lð �J‰J�s˜T×-Ñ-×;Ñ;Ó=Ñ=Õ>ØÐ7Ñ7à�J‰J�s˜TŸ_™_¬YÓ7×EÑEÓGÑGÔHà�<Š<Ø�JŠJ¨T¯\«\Ð;Ô<à�:‰:Ð!Ø�J‰J�| t§z¡z mÑ3Ô4à�=Š=Ø�J‰J�t×/Ñ/¸dÐ/ÓCÔDà�
‰
�4Õr6   )r   )rÀ   rÁ   rÂ   rÃ   rÛ   r  r9  r:  s   @r$   ru  ru    s   ø„ ñõ
%ö*r6   ru  c                   ó>   ‡ — e Zd ZdZdZdˆ fd„	Zd„ Zˆ fd„Zd„ Zˆ xZ	S )ÚAttributeSetzxA set of string attribute.
    Only accept items listed in *_known*.

    Properties:
    * Iterate in sorted order
    r=   c                 óx   •— t         ‰| �  «        t        |t        «      r|g}|D ]  }| j	                  |«       Œ y rÎ   )r0  rÛ   r   r   rR   )rC   rr  r  rÈ   s      €r$   rÛ   zAttributeSet.__init__`  s9   ø€ Ü‰ÑÔÜ�dœCÔ Ø�6ˆDØò 	ˆDØ�H‰H�T�Nñ	r6   c                 ó   — |S rÎ   r=   )rC   r  rD   s      r$   Ú_expandzAttributeSet._expandg  s   € Øˆr6   c                 ó|   •— || j                   vrt        dj                  || «      «      ‚t        t        | �  |«      S )Nzunknown attr {!r} for {})Ú_knownr-   r.   r0  r…  rR   ©rC   r  rÈ   s     €r$   rR   zAttributeSet.addj  s:   ø€ Ø�t—{‘{Ñ"ÜÐ7×>Ñ>¸tÀTÓJÓKÐKÜ”\ 4Ñ,¨TÓ2Ð2r6   c                 ó^   — t        | «      D �cg c]  }| j                  ||«      ‘Œ c}S c c}w rÎ   )Úsortedrˆ  )rC   rD   rt   s      r$   Ú_to_listzAttributeSet._to_listo  s%   € Ü.4°T«lÖ;¨�—‘˜Q Õ$Ò;Ð;ùÒ;s   Ž*©r=   )
rÀ   rÁ   rÂ   rÃ   rŠ  rÛ   rˆ  rR   rŽ  r9  r:  s   @r$   r…  r…  W  s#   ø„ ñð €Fõòô3ö
<r6   r…  c                   ó°   ‡ — e Zd Z eg d¢«      Zd	ˆ fd„	Zˆ fd„Zed„ «       Zej                  d„ «       Zed„ «       Z
e
j                  d„ «       Z
ˆ fd„Zˆ xZS )
ÚFunctionAttributes) Ú
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   •— d| _         d | _        t        t        | �  |«       y ©Nr   )Ú_alignstackÚ_personalityr0  r‘  rÛ   ©rC   rr  rÈ   s     €r$   rÛ   zFunctionAttributes.__init__~  s#   ø€ ØˆÔØ ˆÔÜÔ  $Ñ0°Õ6r6   c                 ó^   •— |dk(  rd| v s	|dk(  rd| v rt        d«      ‚t        ‰| �	  |«       y )Nr“  r   z$Can't have alwaysinline and noinline)r-   r0  rR   r‹  s     €r$   rR   zFunctionAttributes.addƒ  s9   ø€ Ø�^Ò#¨
°dÑ(:Ø˜Ò#¨¸$Ñ(>ÜÐCÓDÐDä‰‰�DÕr6   c                 ó   — | j                   S rÎ   ©r´  rÉ   s    r$   Ú
alignstackzFunctionAttributes.alignstackŠ  s   € à×ÑÐr6   c                 ó    — |dk\  sJ ‚|| _         y r³  r¹  rå   s     r$   rº  zFunctionAttributes.alignstackŽ  s   € à�aŠxˆˆxØˆÕr6   c                 ó   — | j                   S rÎ   )rµ  rÉ   s    r$   ÚpersonalityzFunctionAttributes.personality“  s   € à× Ñ Ð r6   c                 ó:   — |�t        |t        «      sJ ‚|| _        y rÎ   )r   rk  rµ  rå   s     r$   r½  zFunctionAttributes.personality—  s   € àˆ{œj¨¬kÔ:Ð:Ð:ØˆÕr6   c                 óF  •— t         ‰| �  |«      }| j                  r*|j                  dj	                  | j                  «      «       | j
                  rN|j                  dj	                  | j
                  j                  | j
                  j                  «       ¬«      «       |S )Nzalignstack({0:d})zpersonality {persty} {persfn})ÚperstyÚpersfn)r0  rŽ  rº  r  r.   r½  r,   r/   )rC   Úret_typeÚattrsrÈ   s      €r$   rŽ  zFunctionAttributes._to_listœ  s†   ø€ Ü‘Ñ  Ó*ˆØ�?Š?Ø�L‰LÐ,×3Ñ3°D·O±OÓDÔEØ×ÒØ�L‰LÐ8×?Ñ?Ø×'Ñ'×,Ñ,Ø×'Ñ'×5Ñ5Ó7ð @ó 9ô :ð ˆr6   r�  )rÀ   rÁ   rÂ   Ú	frozensetrŠ  rÛ   rR   r  rº  Úsetterr½  rŽ  r9  r:  s   @r$   r‘  r‘  s  s‚   ø„ Ùò *ó +€Fõ7ô
ð ñ ó ð ð ×Ññó ðð ñ!ó ð!ð ×Ññ ó ð ÷ð r6   r‘  c                   óŠ   ‡ — e Zd ZdZˆ fd„Zed„ «       Zed„ «       Zed„ «       Zdd„Z	dd„Z
d„ Zd	„ Zd
„ Zd„ Zed„ «       Zˆ xZS )ÚFunctionz�Represent a LLVM Function but does uses a Module as parent.
    Global Values are stored as a set of dependencies (attribute `depends`).
    c           	      óÚ  •— t        |t        j                  «      sJ ‚t        t        | �  ||j                  «       |¬«       || _        t        j                  «       | _
        g | _        t        «       | _        t        |j                  D �cg c]  }t!        | |«      ‘Œ c}«      | _        t#        | |j$                  «      | _        | j(                  j+                  | «       d| _        y c c}w )Nr/  r   )r   r   rÖ   r0  rÇ  rÛ   rº   Úftyper   Ú	NameScoper  Úblocksr‘  Ú
attributesrM  rr  ÚArgumentÚReturnValueÚreturn_typeÚreturn_valuer  r|  Úcalling_convention)rC   r}  rÉ  r  ÚtrÈ   s        €r$   rÛ   zFunction.__init__¬  s¿   ø€ Ü˜%¤§¡Ô,Ð,Ð,ÜŒh˜Ñ& v¨u×/?Ñ/?Ó/AÈÐ&ÔMØˆŒ
Ü×%Ñ%Ó'ˆŒ
ØˆŒÜ,Ó.ˆŒÜØ$)§J¡Jö0Ø ô $ D¨!Õ,ò 0ó 1ˆŒ	ä'¨¨e×.?Ñ.?Ó@ˆÔØ�‰×Ñ˜tÔ$Ø"$ˆÕùò	0s   ÂC(c                 ó   — | j                   S rÎ   ©r  rÉ   s    r$   r}  zFunction.module¹  ó   € à�{‰{Ðr6   c                 ó    — | j                   d   S r³  ©rË  rÉ   s    r$   Úentry_basic_blockzFunction.entry_basic_block½  s   € à�{‰{˜1‰~Ðr6   c                 ó   — | j                   S rÎ   r×  rÉ   s    r$   Úbasic_blockszFunction.basic_blocksÁ  rÕ  r6   c                 óV   — t        | |¬«      }| j                  j                  |«       |S )N©r  r  )ÚBlockrË  r  )rC   r  Úblks      r$   Úappend_basic_blockzFunction.append_basic_blockÅ  s%   € Ü˜4 dÔ+ˆØ�‰×Ñ˜3ÔØˆ
r6   c                 óX   — t        | |¬«      }| j                  j                  ||«       |S )zInsert block before
        rÜ  )rÝ  rË  Úinsert)rC   Úbeforer  rÞ  s       r$   Úinsert_basic_blockzFunction.insert_basic_blockÊ  s)   € ô ˜4 dÔ+ˆØ�‰×Ñ˜6 3Ô'Øˆ
r6   c           	      ó,  — | j                   rdnd}| j                  }dj                  d„ | j                  D «       «      }| j	                  «       }| j
                  rAddj                  | j
                  j                  | j                  j                  «      «      z   nd}t        | j                  «      r| j                  j                  rdnd}n| j                  j                  rdnd}| j                  }| j                  }	dj                  d	„ |||	|fD «       «      }
| j                  «       }|rd
j                  |«      nd}| j                  rdj                  | j                  «      nd}d}|j                  |
||||||¬«      }|j!                  |«       y)zB
        Describe the prototype ("head") of the function.
        ÚdefineÚdeclarer*   c              3   ó2   K  — | ]  }t        |«      –— Œ y ­wrÎ   ©r   )Ú.0Úas     r$   ú	<genexpr>z+Function.descr_prototype.<locals>.<genexpr>×  s   è ø€ Ò3 Aœ˜QŸÑ3ùs   ‚r'  r   z, ...z...c              3   ó8   K  — | ]  }|sŒt        |«      –— Œ y ­wrÎ   rè  )ré  Úxs     r$   rë  z+Function.descr_prototype.<locals>.<genexpr>á  s   è ø€ ÒL QÊ!œ#˜aŸ&ÑLùs   ‚Šz {}z section "{}"z:{prefix} {name}({args}{vararg}){attrs}{section}{metadata}
)ry   r  rr  ÚvarargrÃ  rq  rN  N)rË  rÐ  r   rr  r/   rÌ  rŽ  rÉ  rÏ  ÚanyÚvar_argro  rÑ  rƒ  r.   rq  r  )rC   r#   ÚstateÚretrr  r  rÃ  rî  ro  Úcconvry   rN  rq  Úpt_strÚ	prototypes                  r$   Údescr_prototypezFunction.descr_prototypeÑ  sX  € ð !ŸKšK‘¨YˆØ×ÑˆØ�y‰yÑ3¨¯©Ô3Ó3ˆØ×!Ñ!Ó#ˆà(,¯ªð �c—h‘h˜tŸ™×7Ñ7Ø�J‰J×"Ñ"ó $ó %ò %Ø=?ð 	äˆt�y‰yŒ>Ø $§
¡
× 2Ò 2‘W¸‰Fà"Ÿj™j×0Ò0‘U°bˆFØ—,‘,ˆØ×'Ñ'ˆØ—‘ÑL¨5°'¸5À#Ð*FÔLÓLˆØ×+Ñ+Ó-ˆÙ-5�5—<‘< Ô)¸2ˆØ:>¿,º,�/×(Ñ(¨¯©Ô6ÈBˆØNˆØ—M‘M¨°dÀØ)/°uÀgØ+3ð "ó 5ˆ	ð 	�
‰
�9Õr6   c                 óH   — | j                   D ]  }|j                  |«       Œ y)z7
        Describe of the body of the function.
        N)rË  r  )rC   r#   rÞ  s      r$   Ú
descr_bodyzFunction.descr_bodyë  s"   € ð —;‘;ò 	ˆCØ�I‰I�c�Nñ	r6   c                 ó¦   — | j                  |«       | j                  r4|j                  d«       | j                  |«       |j                  d«       y y )Nz{
z}
)rö  rË  r  rø  r  s     r$   r  zFunction.descrò  s@   € Ø×Ñ˜SÔ!Ø�;Š;Ø�J‰J�uÔØ�O‰O˜CÔ Ø�J‰J�uÕð r6   c                 óJ   — g }| j                  |«       dj                  |«      S rn  )r  r   r  s     r$   Ú__str__zFunction.__str__ù  s    € ØˆØ�
‰
�3ŒØ�w‰w�s‹|Ðr6   c                 ó2   — t        | j                  «      dk(  S r³  )ré   rË  rÉ   s    r$   Úis_declarationzFunction.is_declarationþ  s   € ä�4—;‘;Ó 1Ñ$Ð$r6   ©r   )rÀ   rÁ   rÂ   rÃ   rÛ   r  r}  rØ  rÚ  rß  rã  rö  rø  r  rû  rý  r9  r:  s   @r$   rÇ  rÇ  §  s{   ø„ ñô%ð ñó ðð ñó ðð ñó ðóó
òò4òòð
 ñ%ó ô%r6   rÇ  c                   óN  ‡ — e Zd Z ei 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ˆ fd„	Zd„ Zed„ «       Zej                  d„ «       Zed„ «       Z
e
j                  d„ «       Z
ed„ «       Zej                  d„ «       Zˆ fd„Zˆ xZS )ÚArgumentAttributesÚbyrefTÚbyvalÚelementtypeÚimmargFÚinallocaÚinregÚnestÚnoaliasÚ	nocaptureÚnofreeÚnonnullÚnoundefÚpreallocatedÚreturnedÚsignextÚsretÚ
swiftasync)Ú
swifterrorÚ	swiftselfÚzeroextc                 óV   •— d| _         d| _        d| _        t        t        | �  |«       y r³  )Ú_alignÚ_dereferenceableÚ_dereferenceable_or_nullr0  r   rÛ   r¶  s     €r$   rÛ   zArgumentAttributes.__init__  s*   ø€ ØˆŒØ !ˆÔØ()ˆÔ%ÜÔ  $Ñ0°Õ6r6   c                 ód   — | j                   j                  |«      }|r|› d|j                  › d�S |S )Nrb  r+   )rŠ  Úgetr¹   )rC   r  rD   Úrequires_types       r$   rˆ  zArgumentAttributes._expand%  s3   € ØŸ™Ÿ™¨Ó-ˆÙØ�V˜1˜SŸ[™[˜M¨Ð+Ð+àˆKr6   c                 ó   — | j                   S rÎ   )r  rÉ   s    r$   r{  zArgumentAttributes.align,  rÕ  r6   c                 ó@   — t        |t        «      r|dk\  sJ ‚|| _        y r³  )r   rc  r  rå   s     r$   r{  zArgumentAttributes.align0  s   € ä˜#œsÔ#¨¨qªÐ0Ð0Øˆ�r6   c                 ó   — | j                   S rÎ   )r  rÉ   s    r$   Údereferenceablez"ArgumentAttributes.dereferenceable5  s   € à×$Ñ$Ð$r6   c                 ó@   — t        |t        «      r|dk\  sJ ‚|| _        y r³  )r   rc  r  rå   s     r$   r  z"ArgumentAttributes.dereferenceable9  s    € ä˜#œsÔ#¨¨qªÐ0Ð0Ø #ˆÕr6   c                 ó   — | j                   S rÎ   )r  rÉ   s    r$   Údereferenceable_or_nullz*ArgumentAttributes.dereferenceable_or_null>  s   € à×,Ñ,Ð,r6   c                 ó@   — t        |t        «      r|dk\  sJ ‚|| _        y r³  )r   rc  r  rå   s     r$   r"  z*ArgumentAttributes.dereferenceable_or_nullB  s    € ä˜#œsÔ#¨¨qªÐ0Ð0Ø(+ˆÕ%r6   c                 ón  •— t         ‰| �  |«      }| j                  r*|j                  dj	                  | j                  «      «       | j
                  r*|j                  dj	                  | j
                  «      «       | j                  r,d}|j                  |j	                  | j                  «      «       |S )Nzalign {0:d}zdereferenceable({0:d})zdereferenceable_or_null({0:d}))r0  rŽ  r{  r  r.   r  r"  )rC   rD   rÃ  ÚdrefrÈ   s       €r$   rŽ  zArgumentAttributes._to_listG  s‰   ø€ Ü‘Ñ  Ó%ˆØ�:Š:Ø�L‰L˜×-Ñ-¨d¯j©jÓ9Ô:Ø×ÒØ�L‰LÐ1×8Ñ8¸×9MÑ9MÓNÔOØ×'Ò'Ø3ˆDØ�L‰L˜Ÿ™ T×%AÑ%AÓBÔCØˆr6   r�  )rÀ   rÁ   rÂ   r   rŠ  rÛ   rˆ  r  r{  rÅ  r  r"  rŽ  r9  r:  s   @r$   r   r     sŒ  ø„ ñ ð ð 	�ðð 	�ð	ð
 	�tðð 	�%ðð 	�Dðð 	�ðð 	�ðð 	�5ðð 	�Uðð 	�%ðð 	�5ðð 	�5ðð 	˜ðð  	�Eð!ð" 	�5ð#ð$ 	�ð%ð& 	�eð'ð( ØØò-ó €Fõ27òð ñó ðð ‡\�\ñó ðð ñ%ó ð%ð ×Ññ$ó ð$ð ñ-ó ð-ð ×#Ñ#ñ,ó $ð,÷	ð 	r6   r   c                   ó,   ‡ — e Zd Zdˆ fd„	Zd„ Zd„ Zˆ xZS )Ú_BaseArgumentc                 ó–   •— t        |t        j                  «      sJ ‚t        t        | �  |||¬«       || _        t        «       | _        y rL  )	r   r   rÖ   r0  r'  rÛ   r  r   rÌ  )rC   r  rD   r  rÈ   s       €r$   rÛ   z_BaseArgument.__init__T  s>   ø€ Ü˜#œuŸz™zÔ*Ð*Ð*ÜŒm˜TÑ+¨F°C¸dÐ+ÔCØˆŒÜ,Ó.ˆ�r6   c                 ój   — d| j                   j                  ›d| j                  ›d| j                  ›d�S )NrÇ   r'  z	 of type r   r(  rÉ   s    r$   rÊ   z_BaseArgument.__repr__Z  s&   � Ø*.¯.©.×*AÓ*AÀ4Ç9Ã9Ø*.¯)«)ð5ð 	5r6   c                 ó:   — | j                   j                  |«       y rÎ   )rÌ  rR   )rC   Úattrs     r$   Úadd_attributez_BaseArgument.add_attribute^  s   € Ø�‰×Ñ˜DÕ!r6   rþ  )rÀ   rÁ   rÂ   rÛ   rÊ   r,  r9  r:  s   @r$   r'  r'  S  s   ø„ õ/ò5ö"r6   r'  c                   ó   — e Zd ZdZd„ Zy)rÍ  z3
    The specification of a function argument.
    c                 ó  — | j                   j                  | j                  «      }|r:dj                  | j                  dj	                  |«      | j                  «       «      S dj                  | j                  | j                  «       «      S )Nz{0} {1} {2}r'  r·   )rÌ  rŽ  r,   r.   r   r/   ©rC   rÃ  s     r$   rû  zArgument.__str__g  sn   € Ø—‘×(Ñ(¨¯©Ó3ˆÙØ ×'Ñ'¨¯	©	°3·8±8¸E³?Ø(,×(:Ñ(:Ó(<ó>ð >ð ×#Ñ# D§I¡I¨t×/AÑ/AÓ/CÓDÐDr6   N©rÀ   rÁ   rÂ   rÃ   rû  r=   r6   r$   rÍ  rÍ  b  s   „ ñóEr6   rÍ  c                   ó   — e Zd ZdZd„ Zy)rÎ  z9
    The specification of a function's return value.
    c                 óÐ   — | j                   j                  | j                  «      }|r+dj                  dj	                  |«      | j                  «      S t        | j                  «      S )Nr·   r'  )rÌ  rŽ  r,   r.   r   r   r/  s     r$   rû  zReturnValue.__str__u  sJ   € Ø—‘×(Ñ(¨¯©Ó3ˆÙØ×#Ñ# C§H¡H¨U£O°T·Y±YÓ?Ð?ä�t—y‘y“>Ð!r6   Nr0  r=   r6   r$   rÎ  rÎ  p  s   „ ñó"r6   rÎ  c                   óf   ‡ — e Zd ZdZd	ˆ fd„	Zed„ «       Zed„ «       Zed„ «       Zd„ Z	d„ Z
d„ Zˆ xZS )
rÝ  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                 ó”   •— t         t        | �  |t        j                  «       |¬«       |j
                  | _        g | _        d | _        y rL  )r0  rÝ  rÛ   r   Ú	LabelTyper  ÚinstructionsÚ
terminator)rC   r  r  rÈ   s      €r$   rÛ   zBlock.__init__†  s:   ø€ ÜŒe�TÑ# F¬E¯O©OÓ,=ÀDÐ#ÔIØ—\‘\ˆŒ
ØˆÔØˆ�r6   c                 ó   — | j                   d uS rÎ   )r7  rÉ   s    r$   Úis_terminatedzBlock.is_terminatedŒ  s   € à�‰ dÐ*Ð*r6   c                 ó   — | j                   S rÎ   rÔ  rÉ   s    r$   ÚfunctionzBlock.function�  rÕ  r6   c                 ó.   — | j                   j                  S rÎ   )r  r}  rÉ   s    r$   r}  zBlock.module”  s   € à�{‰{×!Ñ!Ð!r6   c                 óÂ   — |j                  dj                  | j                  «       «      «       || j                  D �cg c]  }dj                  |«      ‘Œ c}z  }y c c}w )Nz{0}:
z  {0}
)r  r.   Ú_format_namer6  )rC   r#   Úinstrs      r$   r  zBlock.descr˜  sI   € Ø�
‰
�8—?‘? 4×#4Ñ#4Ó#6Ó7Ô8Ø°T×5FÑ5FÖG¨E�	× Ñ  Õ'ÒGÑG‰ùÒGs   ¾Ac                 ól  — |j                   |j                   k7  rt        d«      ‚| j                  j                  |«      }| j                  j	                  |«       | j                  j                  ||«       | j                  j                  D ]%  }|j                  D ]  }|j                  ||«       Œ Œ' y)zReplace an instructionz$new instruction has a different typeN)	r,   r±   r6  ÚindexÚremoverá  r  rÚ  Úreplace_usage)rC   ÚoldÚnewÚposÚbbr?  s         r$   r$  zBlock.replaceœ  sš   € à�8‰8�s—x‘xÒÜÐBÓCÐCØ×Ñ×%Ñ% cÓ*ˆØ×Ñ× Ñ  Ô%Ø×Ñ× Ñ   cÔ*à—+‘+×*Ñ*ò 	.ˆBØŸ™ò .�Ø×#Ñ# C¨Õ-ñ.ñ	.r6   c                 ó®   — | j                   }t        j                  |«      s3|j                  dd«      j                  dd«      }dj	                  |«      }|S )Nr   r"  r!  r#  z"{0}")r  Ú_SIMPLE_IDENTIFIER_REÚmatchr$  r.   r  s     r$   r>  zBlock._format_name¨  sK   € ð �y‰yˆÜ$×*Ñ*¨4Ô0Ø—<‘<  fÓ-×5Ñ5°c¸6ÓBˆDØ—>‘> $Ó'ˆDØˆr6   rþ  )rÀ   rÁ   rÂ   rÃ   rÛ   r  r9  r;  r}  r  r$  r>  r9  r:  s   @r$   rÝ  rÝ  }  sY   ø„ ñõð ñ+ó ð+ð ñó ðð ñ"ó ð"òHò
.ör6   rÝ  c                   ó"   — e Zd ZdZd„ Zd„ Zd„ Zy)ÚBlockAddressz'
    The address of a basic block.
    c                 ó¸   — t        |t        «      sJ ‚t        |t        «      sJ ‚t        j                  d«      j                  «       | _        || _        || _        y )Né   )	r   rÇ  rÝ  r   rx   rº   r,   r;  Úbasic_block)rC   r;  rO  s      r$   rÛ   zBlockAddress.__init__¸  sJ   € Ü˜(¤HÔ-Ð-Ð-Ü˜+¤uÔ-Ð-Ð-Ü—M‘M !Ó$×/Ñ/Ó1ˆŒ	Ø ˆŒØ&ˆÕr6   c                 óV   — dj                  | j                  | j                  «       «      S rÝ   rÞ   rÉ   s    r$   rû  zBlockAddress.__str__¿  rà   r6   c                 ó†   — dj                  | j                  j                  «       | j                  j                  «       «      S )Nzblockaddress({0}, {1}))r.   r;  r/   rO  rÉ   s    r$   r/   zBlockAddress.get_referenceÂ  s7   € Ø'×.Ñ.Ø�M‰M×'Ñ'Ó)Ø×Ñ×*Ñ*Ó,ó.ð 	.r6   N)rÀ   rÁ   rÂ   rÃ   rÛ   rû  r/   r=   r6   r$   rL  rL  ³  s   „ ñò'òAó.r6   rL  )3rÃ   r8   r2  Úrer   r   Úllvmlite.irr   r   Úllvmlite.ir._utilsr   r   r	   rÄ  ÚmapÚordÚascii_lettersÚdigitsr   ÚcompilerI  rv   r%   r?   rF   rÑ   rH   rÅ   rÌ   rÏ   r�   r0   r	  r-  r<  rC  rI  rX  r[  rk  ru  Úsetr…  r‘  rÇ  r   r'  rÍ  rÎ  rÝ  rL  r=   r6   r$   ú<module>r[     s  ðñó
 Û Û 	Ý "ç -Ñ -÷.ñ .ñ ™#˜c 6×#7Ñ#7Ó8Ó9Ù™#˜c 6§=¡=Ó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�Ð5°uô 5Eôp!�Zô !ôB �{Ð$;¸Uô  ô.!�Fô !ô)#ˆjô )#÷X	ñ 	ô>Bˆjô >BôB�*˜m¨\ô ô;�[ô ;ô|<�3ô <ô81˜ô 1ôhY%ˆ{ô Y%ôxM˜ô Mô`"�Jô "ôEˆ}ô Eô
"�-ô 
"ô3ˆJô 3ôl.�5õ .r6   