§
    .@Ä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¦  «        Z2dS )@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                 óH  ‡— t          | t          ¦  «        r|                      ¦   «         } t          | t          t          f¦  «        sJ ‚‰s6t          d¦  «        D ]&}|t          v rt          |¦  «        ‰|<   Œd|z  ‰|<   Œ'ˆfd„| D ¦   «         }d                     |¦  «        S )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\%02xc                 ó    •— g | ]
}‰|         ‘ŒS © r   )Ú.0ÚchÚ_maps     €úCC:\Projects\Historical\venv\Lib\site-packages\llvmlite/ir/values.pyú
<listcomp>z"_escape_string.<locals>.<listcomp>/   s   ø€ Ð
#Ð
#Ð
#˜ˆ4�Œ8Ð
#Ð
#Ð
#ó    Ú )	Ú
isinstanceÚstrÚencodeÚbytesÚ	bytearrayÚrangeÚ_VALID_CHARSÚchrÚjoin)Útextr   r   Úbufs    `  r   Ú_escape_stringr*      s°   ø€ õ
 �$�ÑÔð Ø�{Š{‰}Œ}ˆÝ�d�U¥IÐ.Ñ/Ô/Ð/Ð/Ð/àð )Ý˜‘*”*ð 	)ð 	)ˆBØ•\Ð!Ð!Ý˜r™7œ7��R‘�à# b™=��R‘�à
#Ð
#Ð
#Ð
#˜dÐ
#Ñ
#Ô
#€CØ�7Š7�3‰<Œ<Ðr   c                 ó   ‡ — ˆ fd„}|S )Nc                 óF   •— t          j        | ¦  «        ˆfd„¦   «         }|S )Nc                 ó  •— | j         |j         k    r t          d| j         ›d|j         ›d�¦  «        ‚d                     ‰| 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˜3œ8Ò#Ð#Ý �jØ$'¤H H H¨c¬h¨h¨hð"8ñ 9ô 9ð 9ð +×1Ò1°&Ø25´(¸C×<MÒ<MÑ<OÔ<OØ25´(¸C×<MÒ<MÑ<OÔ<OñQô QˆCõ % S¤X¨sÑ3Ô3Ð3r   ©Ú	functoolsÚwraps©Úfnr:   r9   s     €r   Úwrapz_binop.<locals>.wrap4   s8   ø€ Ý	Œ˜Ñ	Ô	ð	4ð 	4ð 	4ð 	4ñ 
Ô	ð	4ð ˆr   r   ©r9   r@   s   ` r   Ú_binoprB   3   s#   ø€ ðð ð ð ð ð €Kr   c                 ó   ‡ — ˆ fd„}|S )Nc                 óJ   •‡ — t          j        ‰ ¦  «        ˆ ˆfd„¦   «         }|S )Nc                 ó´   •—  ‰| |¦  «         || j         k    r| S d                     ‰| j         |                      ¦   «         |¦  «        }t          ||¦  «        S )Nz{0} ({1} {2} to {3}))r1   r3   r4   r5   )ÚselfÚtypÚopr?   r9   s      €€r   r:   z&_castop.<locals>.wrap.<locals>.wrappedF   sb   ø€ àˆBˆt�S‰MŒMˆMØ�d”iÒÐØ�à'×.Ò.¨v°t´yØ/3×/AÒ/AÑ/CÔ/CÀSñJô JˆBå$ S¨"Ñ-Ô-Ð-r   r;   r>   s   ` €r   r@   z_castop.<locals>.wrapE   s>   øø€ Ý	Œ˜Ñ	Ô	ð	.ð 	.ð 	.ð 	.ð 	.ñ 
Ô	ð	.ð ˆr   r   rA   s   ` r   Ú_castoprI   D   s#   ø€ ðð ð ð ð ð €Kr   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,dGS )HÚ_ConstOpMixinzQ
    A mixin defining constant operations, for use in constant-like classes.
    Úshlc                 ó   — dS )z<
        Left integer shift:
            lhs << rhs
        Nr   ©rF   Úothers     r   rL   z_ConstOpMixin.shl]   ó   € € € r   Úlshrc                 ó   — dS )zP
        Logical (unsigned) right integer shift:
            lhs >> rhs
        Nr   rN   s     r   rQ   z_ConstOpMixin.lshrd   rP   r   Úashrc                 ó   — dS )zQ
        Arithmetic (signed) right integer shift:
            lhs >> rhs
        Nr   rN   s     r   rS   z_ConstOpMixin.ashrk   rP   r   Úaddc                 ó   — dS )z9
        Integer addition:
            lhs + rhs
        Nr   rN   s     r   rU   z_ConstOpMixin.addr   rP   r   Úfaddc                 ó   — dS )z@
        Floating-point addition:
            lhs + rhs
        Nr   rN   s     r   rW   z_ConstOpMixin.faddy   rP   r   Úsubc                 ó   — dS )z<
        Integer subtraction:
            lhs - rhs
        Nr   rN   s     r   rY   z_ConstOpMixin.sub€   rP   r   Úfsubc                 ó   — dS )zC
        Floating-point subtraction:
            lhs - rhs
        Nr   rN   s     r   r[   z_ConstOpMixin.fsub‡   rP   r   Úmulc                 ó   — dS )z?
        Integer multiplication:
            lhs * rhs
        Nr   rN   s     r   r]   z_ConstOpMixin.mulŽ   rP   r   Úfmulc                 ó   — dS )zF
        Floating-point multiplication:
            lhs * rhs
        Nr   rN   s     r   r_   z_ConstOpMixin.fmul•   rP   r   Úudivc                 ó   — dS )zB
        Unsigned integer division:
            lhs / rhs
        Nr   rN   s     r   ra   z_ConstOpMixin.udivœ   rP   r   Úsdivc                 ó   — dS )z@
        Signed integer division:
            lhs / rhs
        Nr   rN   s     r   rc   z_ConstOpMixin.sdiv£   rP   r   Úfdivc                 ó   — dS )z@
        Floating-point division:
            lhs / rhs
        Nr   rN   s     r   re   z_ConstOpMixin.fdivª   rP   r   Úuremc                 ó   — dS )zC
        Unsigned integer remainder:
            lhs % rhs
        Nr   rN   s     r   rg   z_ConstOpMixin.urem±   rP   r   Úsremc                 ó   — dS )zA
        Signed integer remainder:
            lhs % rhs
        Nr   rN   s     r   ri   z_ConstOpMixin.srem¸   rP   r   Úfremc                 ó   — dS )zA
        Floating-point remainder:
            lhs % rhs
        Nr   rN   s     r   rk   z_ConstOpMixin.frem¿   rP   r   Úorc                 ó   — dS )z;
        Bitwise integer OR:
            lhs | rhs
        Nr   rN   s     r   Úor_z_ConstOpMixin.or_Æ   rP   r   Úandc                 ó   — dS )z<
        Bitwise integer AND:
            lhs & rhs
        Nr   rN   s     r   Úand_z_ConstOpMixin.and_Í   rP   r   Úxorc                 ó   — dS )z<
        Bitwise integer XOR:
            lhs ^ rhs
        Nr   rN   s     r   rs   z_ConstOpMixin.xorÔ   rP   r   c           	      óÂ  — |dz   }	 t           |         }n## t          $ r t          d|›d|›�¦  «        ‚w xY w|dk    r|dv s||z   }| j        |j        k    r t          d| j        ›d|j        ›d�¦  «        ‚d	                     ||| j        |                      ¦   «         |j        |                     ¦   «         ¦  «        }t          t          j        d
¦  «        |¦  «        S )NÚcmpzinvalid comparison z for Úi)r   r   r.   r/   r0   z{0} {1} ({2} {3}, {4} {5})é   )	Ú_CMP_MAPÚKeyErrorr2   r1   r3   r4   r5   r   ÚIntType)rF   ÚprefixÚsignÚcmpoprO   ÚinsrH   r8   s           r   Ú_cmpz_ConstOpMixin._cmpÛ   s  € Ø�u‰nˆð	LÝ˜%”ˆBˆBøÝð 	Lð 	Lð 	LÝ�*¸u¸u¸uÀcÀcÐJÑKÔKÐKð	Løøøð ˜#’� %¨<Ð"7Ð"7Ø˜‘ˆBàŒ9˜œ
Ò"Ð"Ý�*Ø $¤	 	 	¨5¬:¨:¨:ð7ñ 8ô 8ð 8ð +×1Ò1Ø�ØŒI�t×)Ò)Ñ+Ô+ØŒJ˜×+Ò+Ñ-Ô-ñ/ô /ˆõ
 !¥¤¨qÑ!1Ô!1°3Ñ7Ô7Ð7s   ‡ • 5c                 ó2   — |                       dd||¦  «        S )z…
        Signed integer comparison:
            lhs <cmpop> rhs

        where cmpop can be '==', '!=', '<', '<=', '>', '>='
        rw   Ús©r€   ©rF   r~   rO   s      r   Úicmp_signedz_ConstOpMixin.icmp_signedð   ó   € ð �yŠy˜˜c 5¨%Ñ0Ô0Ð0r   c                 ó2   — |                       dd||¦  «        S )z”
        Unsigned integer (or pointer) comparison:
            lhs <cmpop> rhs

        where cmpop can be '==', '!=', '<', '<=', '>', '>='
        rw   Úurƒ   r„   s      r   Úicmp_unsignedz_ConstOpMixin.icmp_unsignedù   r†   r   c                 ó2   — |                       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†   r   c                 ó2   — |                       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†   r   c                 óî   — t          | j        t          j        ¦  «        r(t	          j        | j        d| j        j        z  ¦  «        }nt	          j        | j        d¦  «        }|                      |¦  «        S )z@
        Bitwise integer complement:
            ~value
        )éÿÿÿÿr‘   )r   r1   r   Ú
VectorTyper   ÚConstantÚcountrs   )rF   r7   s     r   Únot_z_ConstOpMixin.not_  s\   € õ
 �d”i¥Ô!1Ñ2Ô2ð 	1Ý”/ $¤)¨U°T´Y´_Ñ-DÑEÔEˆCˆCå”/ $¤)¨RÑ0Ô0ˆCà�xŠx˜‰}Œ}Ðr   c                 ó`   — t          j        | j        d¦  «        }|                     | ¦  «        S )z6
        Integer negative:
            -value
        r   )r   r“   r1   rY   )rF   Úzeros     r   Únegz_ConstOpMixin.neg$  s'   € õ
 Œ˜tœy¨!Ñ,Ô,ˆØ�xŠx˜‰~Œ~Ðr   c                 ó†   — d                      | j        |                      ¦   «         ¦  «        }t          | j        |¦  «        S )z=
        Floating-point negative:
            -value
        zfneg ({0} {1}))r3   r1   r4   r5   )rF   r8   s     r   Úfnegz_ConstOpMixin.fneg,  s9   € ð
 ×%Ò% d¤i°×1CÒ1CÑ1EÔ1EÑFÔFˆÝ  ¤¨CÑ0Ô0Ð0r   Útruncc                 ó   — dS )z@
        Truncating integer downcast to a smaller type.
        Nr   ©rF   rG   s     r   r›   z_ConstOpMixin.trunc8  rP   r   Úzextc                 ó   — dS )z@
        Zero-extending integer upcast to a larger type
        Nr   r�   s     r   rž   z_ConstOpMixin.zext>  rP   r   Úsextc                 ó   — dS )zA
        Sign-extending integer upcast to a larger type.
        Nr   r�   s     r   r    z_ConstOpMixin.sextD  rP   r   Úfptruncc                 ó   — dS )zA
        Floating-point downcast to a less precise type.
        Nr   r�   s     r   r¢   z_ConstOpMixin.fptruncJ  rP   r   Úfpextc                 ó   — dS )z?
        Floating-point upcast to a more precise type.
        Nr   r�   s     r   r¤   z_ConstOpMixin.fpextP  rP   r   Úbitcastc                 ó   — dS )z;
        Pointer cast to a different pointer type.
        Nr   r�   s     r   r¦   z_ConstOpMixin.bitcastV  rP   r   Úfptouic                 ó   — dS )z=
        Convert floating-point to unsigned integer.
        Nr   r�   s     r   r¨   z_ConstOpMixin.fptoui\  rP   r   Úuitofpc                 ó   — dS )z=
        Convert unsigned integer to floating-point.
        Nr   r�   s     r   rª   z_ConstOpMixin.uitofpb  rP   r   Úfptosic                 ó   — dS )z;
        Convert floating-point to signed integer.
        Nr   r�   s     r   r¬   z_ConstOpMixin.fptosih  rP   r   Úsitofpc                 ó   — dS )z;
        Convert signed integer to floating-point.
        Nr   r�   s     r   r®   z_ConstOpMixin.sitofpn  rP   r   Úptrtointc                 óÒ   — t          | j        t          j        ¦  «        sd}t	          || j        fz  ¦  «        ‚t          |t          j        ¦  «        st	          d|›d�¦  «        ‚dS )z*
        Cast pointer to integer.
        z2can only call ptrtoint() on pointer type, not '%s'z*can only ptrtoint() to integer type, not 'ú'N)r   r1   r   ÚPointerTypeÚ	TypeErrorr{   ©rF   rG   Úmsgs      r   r°   z_ConstOpMixin.ptrtointt  su   € õ
 ˜$œ)¥UÔ%6Ñ7Ô7ð 	0ØFˆCÝ˜C 4¤9 ,Ñ.Ñ/Ô/Ð/Ý˜#�uœ}Ñ-Ô-ð 	&Ý�)Ø"˜s˜sð%ñ &ô &ð &ð	&ð 	&r   Úinttoptrc                 óÒ   — t          | j        t          j        ¦  «        sd}t	          || j        fz  ¦  «        ‚t          |t          j        ¦  «        st	          d|›d�¦  «        ‚dS )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   r1   r   r{   r´   r³   rµ   s      r   r·   z_ConstOpMixin.inttoptr€  su   € õ
 ˜$œ)¥U¤]Ñ3Ô3ð 	0ØKˆCÝ˜C 4¤9 ,Ñ.Ñ/Ô/Ð/Ý˜#�uÔ0Ñ1Ô1ð 	&Ý�)Ø"˜s˜sð%ñ &ô &ð &ð	&ð 	&r   c                 ó²  — t          | j        t          j        ¦  «        st	          d| j        ›d�¦  «        ‚| j        }|D ]}|                     |¦  «        }Œd„ |D ¦   «         }d                     | j        j        | j        |                      ¦   «         d 	                    |¦  «        ¦  «        }t          |                     | j        ¦  «        |¦  «        S )z>
        Call getelementptr on this pointer constant.
        z/can only call gep() on pointer constants, not 'r²   c                 óh   — g | ]/}d                       |j        |                     ¦   «         ¦  «        ‘Œ0S )ú{0} {1}©r3   r1   r4   )r   Úidxs     r   r   z%_ConstOpMixin.gep.<locals>.<listcomp>˜  sF   € ð *ð *ð *Øð  ×&Ò& s¤x°×1BÒ1BÑ1DÔ1DÑEÔEð *ð *ð *r   z!getelementptr ({0}, {1} {2}, {3})r/   )r   r1   r   r³   r´   Úgepr3   Úpointeer4   r'   r5   Ú
as_pointerÚ	addrspace)rF   ÚindicesÚouttyperw   Ú
strindicesrH   s         r   r¾   z_ConstOpMixin.gepŒ  sæ   € õ ˜$œ)¥UÔ%6Ñ7Ô7ð 	,Ý�)Ø#œy˜y˜yð+ñ ,ô ,ð ,ð ”)ˆØð 	%ð 	%ˆAØ—k’k !‘n”nˆGˆGð*ð *Ø!(ð*ñ *ô *ˆ
ð 1×7Ò7ØŒIÔ˜tœyØ×ÒÑ Ô  $§)¢)¨JÑ"7Ô"7ñ9ô 9ˆõ ! ×!3Ò!3°D´NÑ!CÔ!CÀRÑHÔHÐHr   N)-Ú__name__Ú
__module__Ú__qualname__Ú__doc__rB   rL   rQ   rS   rU   rW   rY   r[   r]   r_   ra   rc   re   rg   ri   rk   ro   rr   rs   r€   r…   r‰   r�   r�   r•   r˜   rš   rI   r›   rž   r    r¢   r¤   r¦   r¨   rª   r¬   r®   r°   r·   r¾   r   r   r   rK   rK   T   sâ  € € € € € ðð ð €VˆE�]„]ðð ñ „]ðð €VˆF�^„^ðð ñ „^ðð €VˆF�^„^ðð ñ „^ðð €VˆE�]„]ðð ñ „]ðð €VˆF�^„^ðð ñ „^ðð €VˆE�]„]ðð ñ „]ðð €VˆF�^„^ðð ñ „^ðð €VˆE�]„]ðð ñ „]ðð €VˆF�^„^ðð ñ „^ðð €VˆF�^„^ðð ñ „^ðð €VˆF�^„^ðð ñ „^ðð €VˆF�^„^ðð ñ „^ðð €VˆF�^„^ðð ñ „^ðð €VˆF�^„^ðð ñ „^ðð €VˆF�^„^ðð ñ „^ðð €VˆD�\„\ðð ñ „\ðð €VˆE�]„]ðð ñ „]ðð €VˆE�]„]ðð ñ „]ðð8ð 8ð 8ð*1ð 1ð 1ð1ð 1ð 1ð1ð 1ð 1ð1ð 1ð 1ð
ð 
ð 
ðð ð ð1ð 1ð 1ð €WˆWÑÔðð ñ Ôðð
 €WˆV�_„_ðð ñ „_ðð
 €WˆV�_„_ðð ñ „_ðð
 €WˆYÑÔðð ñ Ôðð
 €WˆWÑÔðð ñ Ôðð
 €WˆYÑÔðð ñ Ôðð
 €WˆXÑÔðð ñ Ôðð
 €WˆXÑÔðð ñ Ôðð
 €WˆXÑÔðð ñ Ôðð
 €WˆXÑÔðð ñ Ôðð
 €WˆZÑÔð	&ð 	&ñ Ôð	&ð €WˆZÑÔð	&ð 	&ñ Ôð	&ðIð Ið Ið Ið Ir   rK   c                   ó   — e Zd ZdZd„ ZdS )ÚValuez(
    The base class for all values.
    c                 ó2   — d| j         j        ›d| j        ›d�S )Nú<ir.z type='z' ...>)Ú	__class__rÅ   r1   ©rF   s    r   Ú__repr__zValue.__repr__¦  s    € € Ø*.¬.Ô*AÐ*AÐ*AÀ4Ä9À9À9ÐNÐNr   N)rÅ   rÆ   rÇ   rÈ   rÏ   r   r   r   rÊ   rÊ   ¡  s2   € € € € € ðð ðOð Oð Oð Oð Or   rÊ   c                   ó   — e Zd ZdZd„ ZdS )Ú
_Undefinedz0
    'undef': a value for undefined values.
    c                 óp   — 	 t           S # t          $ r" t                               t          ¦  «        cY S w xY w©N)Ú	UndefinedÚ	NameErrorÚobjectÚ__new__rÑ   )Úclss    r   r×   z_Undefined.__new__®  s@   € ð	.ÝÐøÝð 	.ð 	.ð 	.Ý—>’>¥*Ñ-Ô-Ð-Ð-Ð-ð	.øøøs   ‚	 ‰)5´5N)rÅ   rÆ   rÇ   rÈ   r×   r   r   r   rÑ   rÑ   ª  s-   € € € € € ðð ð.ð .ð .ð .ð .r   rÑ   c                   ó€   — 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dS )r“   z 
    A constant LLVM value.
    c                 ó¼   — t          |t          j        ¦  «        sJ ‚t          |t          j        ¦  «        rJ ‚|| _        |                     |¦  «        }|| _        d S rÓ   )r   r   ÚTypeÚVoidTyper1   Úwrap_constant_valueÚconstant©rF   rG   rÞ   s      r   Ú__init__zConstant.__init__½  sW   € Ý˜#�uœzÑ*Ô*Ð*Ð*Ð*Ý˜c¥5¤>Ñ2Ô2Ð2Ð2Ð2ØˆŒ	Ø×*Ò*¨8Ñ4Ô4ˆØ ˆŒˆˆr   c                 ó\   — d                      | j        |                      ¦   «         ¦  «        S ©Nr»   r¼   rÎ   s    r   Ú
_to_stringzConstant._to_stringÄ  ó&   € Ø×Ò ¤	¨4×+=Ò+=Ñ+?Ô+?Ñ@Ô@Ð@r   c                 ó  — | j         €| j        j        }nr| j         t          u rd}nat	          | j         t
          ¦  «        r(d                     t          | j         ¦  «        ¦  «        }n| j                             | j         ¦  «        }|S )NÚundefzc"{0}")	rÞ   r1   ÚnullrÔ   r   r#   r3   r*   Úformat_constant©rF   Úvals     r   Ú_get_referencezConstant._get_referenceÇ  sx   € ØŒ=Ð Ø”)”.ˆCˆCàŒ]�iÐ'Ð'ØˆCˆCå˜œ¥yÑ1Ô1ð 	;Ø—/’/¥.°´Ñ"?Ô"?Ñ@Ô@ˆCˆCð ”)×+Ò+¨D¬MÑ:Ô:ˆCàˆ
r   c                 óú   — d„ |D ¦   «         }t          |¦  «        dk    rt          d¦  «        ‚|d         }|D ]}||k    rt          d¦  «        ‚Œ | t          j        |t          |¦  «        ¦  «        |¦  «        S )zO
        Construct a literal array constant made of the given members.
        c                 ó   — g | ]	}|j         ‘Œ
S r   ©r1   ©r   Úels     r   r   z*Constant.literal_array.<locals>.<listcomp>Û  ó   € Ð'Ð'Ð'˜2ˆrŒwÐ'Ð'Ð'r   r   zneed at least one elementz$all elements must have the same type)Úlenr2   r´   r   Ú	ArrayType)rØ   ÚelemsÚtysÚtyrO   s        r   Úliteral_arrayzConstant.literal_arrayÖ  s�   € ð
 (Ð' Ð'Ñ'Ô'ˆÝˆs‰8Œ8�qŠ=ˆ=ÝÐ8Ñ9Ô9Ð9Ø�ŒVˆØð 	Hð 	HˆEØ�UŠ{ˆ{ÝÐ FÑGÔGÐGð àˆs•5”? 2¥s¨5¡z¤zÑ2Ô2°EÑ:Ô:Ð:r   Fc                 óX   — d„ |D ¦   «         } | t          j        ||¦  «        |¦  «        S )zS
        Construct a literal structure constant made of the given members.
        c                 ó   — g | ]	}|j         ‘Œ
S r   rî   rï   s     r   r   z+Constant.literal_struct.<locals>.<listcomp>é  rñ   r   )r   ÚLiteralStructType)rØ   rô   Úpackedrõ   s       r   Úliteral_structzConstant.literal_structä  s6   € ð
 (Ð' Ð'Ñ'Ô'ˆØˆs•5Ô*¨3°Ñ7Ô7¸Ñ?Ô?Ð?r   c                 óv   — t          | j        t          j        ¦  «        st	          d¦  «        ‚| j        j        S )Nz)Only pointer constant have address spaces)r   r1   r   r³   r´   rÁ   rÎ   s    r   rÁ   zConstant.addrspaceì  s4   € å˜$œ)¥UÔ%6Ñ7Ô7ð 	IÝÐGÑHÔHÐHØŒyÔ"Ð"r   c                 óp   — t          |t          ¦  «        r t          | ¦  «        t          |¦  «        k    S dS ©NF)r   r“   r    rN   s     r   Ú__eq__zConstant.__eq__ò  s0   € Ý�e�XÑ&Ô&ð 	Ý�t‘9”9¥ E¡
¤
Ò*Ð*à�5r   c                 ó.   — |                       |¦  «         S rÓ   ©r   rN   s     r   Ú__ne__zConstant.__ne__ø  ó   € Ø—;’;˜uÑ%Ô%Ð%Ð%r   c                 ó:   — t          t          | ¦  «        ¦  «        S rÓ   )Úhashr    rÎ   s    r   Ú__hash__zConstant.__hash__û  s   € Ý•C˜‘I”I‰ŒÐr   c                 ó(   — d| j         ›d| j        ›d�S )Nz<ir.Constant type='z' value=r   )r1   rÞ   rÎ   s    r   rÏ   zConstant.__repr__þ  s   € € Ø59´Y°Y°YÀÄÀÀÐNÐNr   N)F)rÅ   rÆ   rÇ   rÈ   rà   rã   rë   Úclassmethodr÷   rü   ÚpropertyrÁ   r   r  r  rÏ   r   r   r   r“   r“   ¸  sé   € € € € € ðð ð!ð !ð !ðAð Að Aðð ð ð ð;ð ;ñ „[ð;ð ð@ð @ð @ñ „[ð@ð ð#ð #ñ „Xð#ð
ð ð ð&ð &ð &ðð ð ðOð Oð Oð Oð Or   r“   c                   ó$   — e Zd ZdZd„ Zd„ Zd„ ZdS )r5   zA
    A constant with an already formatted IR representation.
    c                 ól   — t          |t          ¦  «        sJ ‚t                               | ||¦  «         d S rÓ   )r   r    r“   rà   rß   s      r   rà   zFormattedConstant.__init__  s6   € Ý˜(¥CÑ(Ô(Ð(Ð(Ð(Ý×Ò˜$  XÑ.Ô.Ð.Ð.Ð.r   c                 ó   — | j         S rÓ   ©rÞ   rÎ   s    r   rã   zFormattedConstant._to_string  ó
   € ØŒ}Ðr   c                 ó   — | j         S rÓ   r  rÎ   s    r   rë   z FormattedConstant._get_reference  r  r   N)rÅ   rÆ   rÇ   rÈ   rà   rã   rë   r   r   r   r5   r5     sK   € € € € € ðð ð/ð /ð /ðð ð ðð ð ð ð r   r5   c                   ór   — 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dS )Ú
NamedValuez*
    The base class for named values.
    ú%Tc                 óŒ   — |€J ‚t          |t          j        ¦  «        sJ ‚|| _        || _        |                      |¦  «         d S rÓ   )r   r   rÛ   Úparentr1   Ú	_set_name)rF   r  r1   Únames       r   rà   zNamedValue.__init__  sL   € ØÐ!Ð!Ð!Ý˜$¥¤
Ñ+Ô+Ð+Ð+Ð+ØˆŒØˆŒ	Ø�Š�tÑÔÐÐÐr   c                 ó0  — g }t          | j        t          j        ¦  «        s:|                     d                     |                      ¦   «         ¦  «        ¦  «         |                      |¦  «         d                     |¦  «         	                    ¦   «         S )Nz{0} = r   )
r   r1   r   rÜ   Úappendr3   r4   Údescrr'   Úrstrip©rF   r)   s     r   rã   zNamedValue._to_string   sr   € ØˆÝ˜$œ)¥U¤^Ñ4Ô4ð 	>Ø�JŠJ�x—’ t×'9Ò'9Ñ';Ô';Ñ<Ô<Ñ=Ô=Ð=Ø�
Š
�3‰ŒˆØ�wŠw�s‰|Œ|×"Ò"Ñ$Ô$Ð$r   c                 ó   — t           ‚rÓ   )ÚNotImplementedErrorr  s     r   r  zNamedValue.descr'  s   € Ý!Ð!r   c                 ó   — | j         S rÓ   )Ú_namerÎ   s    r   Ú	_get_namezNamedValue._get_name*  s
   € ØŒzÐr   c                 ó`   — | j         j                             || j        ¬¦  «        }|| _        d S )N)Údeduplicate)r  ÚscopeÚregisterÚdeduplicate_namer   ©rF   r  s     r   r  zNamedValue._set_name-  s6   € ØŒ{Ô ×)Ò)¨$Ø6:Ô6Kð *ñ Mô MˆàˆŒ
ˆ
ˆ
r   c                 óª   — | j         }d|v sd|v r*|                     dd¦  «                             dd¦  «        }d                     | j        |¦  «        S )Nú\ú"ú\5cú\22z{0}"{1}")r  Úreplacer3   Úname_prefixr'  s     r   rë   zNamedValue._get_reference4  sV   € ØŒyˆà�4ˆ<ˆ<˜3 $˜;˜;Ø—<’<  fÑ-Ô-×5Ò5°c¸6ÑBÔBˆDØ× Ò  Ô!1°4Ñ8Ô8Ð8r   c                 óB   — d| j         j        ›d| j        ›d| j        ›d�S )NrÌ   ú z
 of type 'z'>©rÍ   rÅ   r  r1   rÎ   s    r   rÏ   zNamedValue.__repr__;  s,   € € àŒNÔ#Ð#Ð# T¤Y Y Y°´	°	°	ð;ð 	;r   c                 óâ   — | j         }t          |t          j        ¦  «        r| j         j        }t          |t          j        ¦  «        r|S t          d                     | j         ¦  «        ¦  «        ‚)NzNot a function: {0})r1   r   r   r³   r¿   ÚFunctionTyper´   r3   )rF   rö   s     r   Úfunction_typezNamedValue.function_type?  sb   € àŒYˆÝ�b�%Ô+Ñ,Ô,ð 	#Ø”Ô"ˆBÝ�b�%Ô,Ñ-Ô-ð 	EØˆIåÐ1×8Ò8¸¼ÑCÔCÑDÔDÐDr   N)rÅ   rÆ   rÇ   rÈ   r.  r&  rà   rã   r  r!  r  r
  r  rë   rÏ   r4  r   r   r   r  r    sÇ   € € € € € ðð ð €KØÐðð ð ð%ð %ð %ð"ð "ð "ðð ð ðð ð ð
 ˆ8�I˜yÑ)Ô)€Dð9ð 9ð 9ð;ð ;ð ;ð ðEð Eñ „XðEð Eð Er   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                 óŽ   •— t          t          | ¦  «                             |t          j        ¦   «         d¬¦  «         || _        d S )Nr   ©r  )Úsuperr6  rà   r   ÚMetaDataTypeÚstring)rF   r  r;  rÍ   s      €r   rà   zMetaDataString.__init__P  sH   ø€ Ý�n˜dÑ#Ô#×,Ò,¨VÝ-2Ô-?Ñ-AÔ-AØ24ð 	-ñ 	6ô 	6ð 	6ð ˆŒˆˆr   c                 ó8   — ||                       ¦   «         dfz  }d S )Nú
)r4   r  s     r   r  zMetaDataString.descrV  s!   € Ø�×"Ò"Ñ$Ô$ dÐ+Ñ+ˆˆˆr   c                 óP   — d                      t          | j        ¦  «        ¦  «        S )Nz!"{0}")r3   r*   r;  rÎ   s    r   rë   zMetaDataString._get_referenceY  s   € Ø�Š�~¨d¬kÑ:Ô:Ñ;Ô;Ð;r   c                 óP   — t          |t          ¦  «        r| j        |j        k    S dS rÿ   )r   r6  r;  rN   s     r   r   zMetaDataString.__eq__^  s(   € Ý�e�^Ñ,Ô,ð 	Ø”; %¤,Ò.Ð.à�5r   c                 ó.   — |                       |¦  «         S rÓ   r  rN   s     r   r  zMetaDataString.__ne__d  r  r   c                 ó*   — t          | j        ¦  «        S rÓ   )r  r;  rÎ   s    r   r  zMetaDataString.__hash__g  s   € Ý�D”KÑ Ô Ð r   )rÅ   rÆ   rÇ   rÈ   rà   r  rë   rã   r   r  r  Ú__classcell__©rÍ   s   @r   r6  r6  J  s”   ø€ € € € € ðð ð
ð ð ð ð ð,ð ,ð ,ð<ð <ð <ð  €Jðð ð ð&ð &ð &ð!ð !ð !ð !ð !ð !ð !r   r6  c                   ó"   — e Zd ZdZd„ Zd„ ZeZdS )Ú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        ¦   «         | _        || _        d S rÓ   )r   rÊ   r1   r   r:  Úwrapped_value©rF   Úvalues     r   rà   zMetaDataArgument.__init__t  sQ   € Ý˜%¥Ñ'Ô'Ð'Ð'Ð'Ý˜eœj­%Ô*<Ñ=Ô=Ð=Ð=Ð=ÝÔ&Ñ(Ô(ˆŒ	Ø"ˆÔÐÐr   c                 óp   — d                      | j        j        | j                             ¦   «         ¦  «        S râ   )r3   rG  r1   r4   rÎ   s    r   rë   zMetaDataArgument._get_referencez  s7   € à×Ò Ô 2Ô 7Ø $Ô 2× @Ò @Ñ BÔ BñDô Dð 	Dr   N)rÅ   rÆ   rÇ   rÈ   rà   rë   rã   r   r   r   rE  rE  k  s@   € € € € € ðð ð#ð #ð #ðDð Dð Dð
  €J€J€Jr   rE  c                   ó   — e Zd ZdZd„ Zd„ ZdS )ÚNamedMetaDatazk
    A named metadata node.

    Do not instantiate directly, use Module.add_named_metadata() instead.
    c                 ó"   — || _         g | _        d S rÓ   )r  Úoperands)rF   r  s     r   rà   zNamedMetaData.__init__‰  s   € ØˆŒØˆŒˆˆr   c                 ó:   — | j                              |¦  «         d S rÓ   )rN  r  )rF   Úmds     r   rU   zNamedMetaData.add�  s   € ØŒ×Ò˜RÑ Ô Ð Ð Ð r   N)rÅ   rÆ   rÇ   rÈ   rà   rU   r   r   r   rL  rL  ‚  s<   € € € € € ðð ðð ð ð!ð !ð !ð !ð !r   rL  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                             | ¦  «         d S ©Nr8  )	r9  rR  rà   r   r:  ÚtuplerN  Úmetadatar  )rF   r  r   r  rÍ   s       €r   rà   zMDValue.__init__™  sf   ø€ Ý�g�tÑÔ×%Ò% fÝ&+Ô&8Ñ&:Ô&:Ø+/ð 	&ñ 	1ô 	1ð 	1õ ˜f™œˆŒØŒ×Ò˜tÑ$Ô$Ð$Ð$Ð$r   c                 óî  — g }| j         D ]»}t          |j        t          j        ¦  «        rZt          |t
          ¦  «        r|j        €|                     d¦  «         ŒS|                     |                     ¦   «         ¦  «         Œ{|                     d 	                    |j        |                     ¦   «         ¦  «        ¦  «         Œ¼d 
                    |¦  «        }|d 	                    |¦  «        dfz  }d S )Nrç   r»   r/   z
!{{ {0} }}r=  )rN  r   r1   r   r:  r“   rÞ   r  r4   r3   r'   )rF   r)   rN  rH   s       r   r  zMDValue.descr   sæ   € ØˆØ”-ð 	Oð 	OˆBÝ˜"œ'¥5Ô#5Ñ6Ô6ð OÝ˜b¥(Ñ+Ô+ð 8°´Ð0CØ—O’O FÑ+Ô+Ð+Ð+à—O’O B×$4Ò$4Ñ$6Ô$6Ñ7Ô7Ð7Ð7à—’ 	× 0Ò 0°´¸"×:JÒ:JÑ:LÔ:LÑ MÔ MÑNÔNÐNÐNØ—9’9˜XÑ&Ô&ˆØ�×#Ò# HÑ-Ô-¨tÐ4Ñ4ˆˆˆr   c                 ó:   — | j         t          | j        ¦  «        z   S rÓ   ©r.  r    r  rÎ   s    r   rë   zMDValue._get_reference­  ó   € ØÔ¥# d¤i¡.¤.Ñ0Ð0r   c                 óP   — t          |t          ¦  «        r| j        |j        k    S dS rÿ   )r   rR  rN  rN   s     r   r   zMDValue.__eq__°  s(   € Ý�e�WÑ%Ô%ð 	Ø”= E¤NÒ2Ð2à�5r   c                 ó.   — |                       |¦  «         S rÓ   r  rN   s     r   r  zMDValue.__ne__¶  r  r   c                 ó*   — t          | j        ¦  «        S rÓ   )r  rN  rÎ   s    r   r  zMDValue.__hash__¹  s   € Ý�D”MÑ"Ô"Ð"r   ©rÅ   rÆ   rÇ   rÈ   r.  rà   r  rë   r   r  r  rB  rC  s   @r   rR  rR  ‘  s”   ø€ € € € € ðð ð
 €Kð%ð %ð %ð %ð %ð5ð 5ð 5ð1ð 1ð 1ðð ð ð&ð &ð &ð#ð #ð #ð #ð #ð #ð #r   rR  c                   ó   — e Zd ZdZd„ ZdS )Ú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                 ó   — || _         d S rÓ   )rI  rH  s     r   rà   zDIToken.__init__Å  s   € ØˆŒ
ˆ
ˆ
r   N)rÅ   rÆ   rÇ   rÈ   rà   r   r   r   ra  ra  ½  s-   € € € € € ðð ðð ð ð ð r   ra  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.
    rS  c                 óø   •— t          t          | ¦  «                             |t          j        ¦   «         |¬¦  «         || _        || _        t          |¦  «        | _        |j	         
                    | ¦  «         d S rU  )r9  rd  rà   r   r:  Úis_distinctÚkindrV  rN  rW  r  )rF   r  rf  rg  rN  r  rÍ   s         €r   rà   zDIValue.__init__Ñ  su   ø€ Ý�g�tÑÔ×%Ò% fÝ&+Ô&8Ñ&:Ô&:Ø+/ð 	&ñ 	1ô 	1ð 	1ð 'ˆÔØˆŒ	Ý˜h™œˆŒØŒ×Ò˜tÑ$Ô$Ð$Ð$Ð$r   c                 ó¶  — | 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                     t          |¦  «        ¦  «        }n†t          |t          ¦  «        rt          |¦  «        }nat          |t          ¦  «        rt          |¦  «        }n<t          |t          ¦  «        r|                     ¦   «         }nt          d|›�¦  «        ‚|                     d	                     ||¦  «        ¦  «         �Œd
                     |¦  «        }|d| j        d|dfz  }d S )N)z	distinct rç   TÚtrueFÚfalsez"{}"z%invalid operand type for debug info: z{0}: {1}r/   rS  ú(z)
)rf  rN  r   ra  rI  r    r3   r*   Úintr“   r  r4   r´   r  r'   rg  )rF   r)   rN  ÚkeyrI  Ústrvalues         r   r  zDIValue.descrÚ  sy  € ØÔð 	"Ø�>Ñ!ˆCØˆØœ-ð 	>ñ 	>‰JˆC�Øˆ}Ø!��Ø˜$��Ø!��Ø˜%��Ø"��Ý˜E¥7Ñ+Ô+ð ,Ø œ;��Ý˜E¥3Ñ'Ô'ð ,Ø!Ÿ=š=­¸Ñ)>Ô)>Ñ?Ô?��Ý˜E¥3Ñ'Ô'ð 
,Ý˜u™:œ:��Ý˜E¥8Ñ,Ô,ð ,õ ˜u™:œ:��Ý˜E¥:Ñ.Ô.ð ,Ø ×.Ò.Ñ0Ô0��å�iØ#( 5ð!+ñ ,ô ,ð ,à�OŠO˜J×-Ò-¨c°8Ñ<Ô<Ñ=Ô=Ð=Ñ=Ø—9’9˜XÑ&Ô&ˆØ��T”Y  X¨uÐ5Ñ5ˆˆˆr   c                 ó:   — | j         t          | j        ¦  «        z   S rÓ   rZ  rÎ   s    r   rë   zDIValue._get_referenceø  r[  r   c                 ó�   — t          |t          ¦  «        r0| j        |j        k    o| j        |j        k    o| j        |j        k    S dS rÿ   )r   rd  rf  rg  rN  rN   s     r   r   zDIValue.__eq__û  sP   € Ý�e�WÑ%Ô%ð 	ØÔ# uÔ'8Ò8ð 0Ø”	˜UœZÒ'ð0à” ¤Ò/ð0ð �5r   c                 ó.   — |                       |¦  «         S rÓ   r  rN   s     r   r  zDIValue.__ne__  r  r   c                 óD   — t          | j        | j        | j        f¦  «        S rÓ   )r  rf  rg  rN  rÎ   s    r   r  zDIValue.__hash__  s   € Ý�TÔ% t¤y°$´-Ð@ÑAÔAÐAr   r_  rC  s   @r   rd  rd  É  s›   ø€ € € € € ðð ð
 €Kð%ð %ð %ð %ð %ð6ð 6ð 6ð<1ð 1ð 1ðð ð ð&ð &ð &ðBð Bð Bð Bð Bð Bð Br   rd  c                   ó*   ‡ — e Zd ZdZdZdZˆ fd„Zˆ xZS )ÚGlobalValuez
    A global value.
    ú@Fc                 ó€   •—  t          t          | ¦  «        j        |i |¤Ž d| _        d| _        d| _        i | _        d S ©Nr   )r9  rt  rà   ÚlinkageÚstorage_classÚsectionrW  )rF   ÚargsÚkwargsrÍ   s      €r   rà   zGlobalValue.__init__  sF   ø€ Ø)��k˜4Ñ Ô Ô)¨4Ð:°6Ð:Ð:Ð:ØˆŒØˆÔØˆŒØˆŒˆˆr   )rÅ   rÆ   rÇ   rÈ   r.  r&  rà   rB  rC  s   @r   rt  rt  
  sO   ø€ € € € € ðð ð €KØÐðð ð ð ð ð ð ð ð r   rt  c                   ó*   ‡ — e Zd ZdZdˆ fd„	Zd„ Zˆ xZS )ÚGlobalVariablez
    A global variable.
    r   c                 óD  •— t          |t          j        ¦  «        sJ ‚t          t          | ¦  «                             ||                     |¦  «        |¬¦  «         || _        d | _        d| _	        d| _
        || _        d | _        | j                             | ¦  «         d S )Nr8  F)r   r   rÛ   r9  r~  rà   rÀ   Ú
value_typeÚinitializerÚunnamed_addrÚglobal_constantrÁ   Úalignr  Ú
add_global)rF   ÚmodulerG   r  rÁ   rÍ   s        €r   rà   zGlobalVariable.__init__  sž   ø€ Ý˜#�uœzÑ*Ô*Ð*Ð*Ð*Ý�n˜dÑ#Ô#×,Ò,¨V°S·^²^ÀIÑ5NÔ5NØ26ð 	-ñ 	8ô 	8ð 	8àˆŒØˆÔØ!ˆÔØ$ˆÔØ"ˆŒØˆŒ
ØŒ×Ò˜tÑ$Ô$Ð$Ð$Ð$r   c                 ó^  — | j         rd}nd}| j        s| j        €dnd}n| j        }|r|                     |dz   ¦  «         | j        r|                     | j        dz   ¦  «         | j        r|                     d¦  «         | j        dk    r-|                     d                     | j        ¦  «        ¦  «         |                     d	                     || j        ¬
¦  «        ¦  «         | j        �i| j        j	        | j        k    r$t          d| j        j	        ›d| j        ›�¦  «        ‚|                     d| j                             ¦   «         z   ¦  «         nF|dvrB|                     d|                      t          ¦  «                             ¦   «         z   ¦  «         | j        r|                     d| j        ›d�¦  «         | j        �|                     d| j        fz  ¦  «         | j        r)|                     |                      d¬¦  «        ¦  «         |                     d¦  «         d S )NrÞ   ÚglobalÚexternalr   r0  zunnamed_addr r   zaddrspace({0:d}) z{kind} {type})rg  r1   zgot initializer of type z for global value type )r‰  Úextern_weakz, section "r*  z
, align %dT)Úleading_commar=  )rƒ  rx  r�  r  ry  r‚  rÁ   r3   r€  r1   r´   r4   rÔ   rz  r„  rW  Ú_stringify_metadata)rF   r)   rg  rx  s       r   r  zGlobalVariable.descr*  s8  € ØÔð 	ØˆDˆDàˆDàŒ|ð 	#à$(Ô$4Ð$<�j�jÀ"ˆGˆGà”lˆGàð 	&Ø�JŠJ�w ‘}Ñ%Ô%Ð%ØÔð 	1Ø�JŠJ�tÔ)¨CÑ/Ñ0Ô0Ð0ØÔð 	(Ø�JŠJ�Ñ'Ô'Ð'ØŒ>˜QÒÐØ�JŠJÐ*×1Ò1°$´.ÑAÔAÑBÔBÐBà�
Š
�?×*Ò*°¸4¼?Ð*ÑKÔKÑLÔLÐLàÔÐ'ØÔÔ$¨¬Ò7Ð7Ý�ià#'Ô#3Ô#8Ð#8Ð#8¸$¼/¸/ð!Kñ Lô Lð Lð �JŠJ�s˜TÔ-×;Ò;Ñ=Ô=Ñ=Ñ>Ô>Ð>Ð>ØÐ7Ð7Ð7à�JŠJ�s˜TŸ_š_­YÑ7Ô7×EÒEÑGÔGÑGÑHÔHÐHàŒ<ð 	=Ø�JŠJˆJ¨T¬\¨\¨\Ð;Ñ<Ô<Ð<àŒ:Ð!Ø�JŠJ�| t¤z mÑ3Ñ4Ô4Ð4àŒ=ð 	EØ�JŠJ�t×/Ò/¸dÐ/ÑCÔCÑDÔDÐDà�
Š
�4ÑÔÐÐÐr   )r   )rÅ   rÆ   rÇ   rÈ   rà   r  rB  rC  s   @r   r~  r~    sV   ø€ € € € € ðð ð
%ð 
%ð 
%ð 
%ð 
%ð 
%ð*ð *ð *ð *ð *ð *ð *r   r~  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                 ó¬   •— t          ¦   «                              ¦   «          t          |t          ¦  «        r|g}|D ]}|                      |¦  «         Œd S rÓ   )r9  rà   r   r    rU   )rF   r{  r  rÍ   s      €r   rà   zAttributeSet.__init__`  s\   ø€ Ý‰Œ×ÒÑÔÐÝ�d�CÑ Ô ð 	Ø�6ˆDØð 	ð 	ˆDØ�HŠH�T‰NŒNˆNˆNð	ð 	r   c                 ó   — |S rÓ   r   )rF   r  rG   s      r   Ú_expandzAttributeSet._expandg  s   € Øˆr   c                 ó¬   •— || j         vr#t          d                     || ¦  «        ¦  «        ‚t          t          | ¦  «                             |¦  «        S )Nzunknown attr {!r} for {})Ú_knownr2   r3   r9  rŽ  rU   ©rF   r  rÍ   s     €r   rU   zAttributeSet.addj  sM   ø€ Ø�t”{Ð"Ð"ÝÐ7×>Ò>¸tÀTÑJÔJÑKÔKÐKÝ•\ 4Ñ(Ô(×,Ò,¨TÑ2Ô2Ð2r   c                 ó>   ‡ ‡— ˆ ˆfd„t          ‰ ¦  «        D ¦   «         S )Nc                 ó<   •— g | ]}‰                      |‰¦  «        ‘ŒS r   )r‘  )r   rw   rF   rG   s     €€r   r   z)AttributeSet._to_list.<locals>.<listcomp>p  s'   ø€ Ð;Ð;Ð;¨�—’˜Q Ñ$Ô$Ð;Ð;Ð;r   )Úsortedr�   s   ``r   Ú_to_listzAttributeSet._to_listo  s'   øø€ Ø;Ð;Ð;Ð;Ð;­f°T©l¬lÐ;Ñ;Ô;Ð;r   ©r   )
rÅ   rÆ   rÇ   rÈ   r“  rà   r‘  rU   r˜  rB  rC  s   @r   rŽ  rŽ  W  s…   ø€ € € € € ðð ð €Fðð ð ð ð ð ðð ð ð3ð 3ð 3ð 3ð 3ð
<ð <ð <ð <ð <ð <ð <r   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Úuwtabler   c                 ót   •— d| _         d | _        t          t          | ¦  «                             |¦  «         d S ©Nr   )Ú_alignstackÚ_personalityr9  r›  rà   ©rF   r{  rÍ   s     €r   rà   zFunctionAttributes.__init__~  s8   ø€ ØˆÔØ ˆÔÝÕ  $Ñ'Ô'×0Ò0°Ñ6Ô6Ð6Ð6Ð6r   c                 ó�   •— |dk    rd| v s
|dk    rd| v rt          d¦  «        ‚t          ¦   «                              |¦  «         d S )Nr�  rª  z$Can't have alwaysinline and noinline)r2   r9  rU   r”  s     €r   rU   zFunctionAttributes.addƒ  sX   ø€ Ø�^Ò#Ð#¨
°dÐ(:Ð(:Ø˜Ò#Ð#¨¸$Ð(>Ð(>ÝÐCÑDÔDÐDå‰Œ�Š�DÑÔÐÐÐr   c                 ó   — | j         S rÓ   ©r¾  rÎ   s    r   Ú
alignstackzFunctionAttributes.alignstackŠ  s   € àÔÐr   c                 ó$   — |dk    sJ ‚|| _         d S r½  rÃ  ré   s     r   rÄ  zFunctionAttributes.alignstackŽ  s   € à�aŠxˆxˆxˆxØˆÔÐÐr   c                 ó   — | j         S rÓ   )r¿  rÎ   s    r   ÚpersonalityzFunctionAttributes.personality“  s   € àÔ Ð r   c                 óF   — |�t          |t          ¦  «        sJ ‚|| _        d S rÓ   )r   rt  r¿  ré   s     r   rÇ  zFunctionAttributes.personality—  s(   € àˆ{�j¨­kÑ:Ô:ˆ{ˆ{Ð:ØˆÔÐÐr   c                 óV  •— t          ¦   «                              |¦  «        }| j        r-|                     d                     | j        ¦  «        ¦  «         | j        rK|                     d                     | j        j        | j                             ¦   «         ¬¦  «        ¦  «         |S )Nzalignstack({0:d})zpersonality {persty} {persfn})ÚperstyÚpersfn)r9  r˜  rÄ  r  r3   rÇ  r1   r4   )rF   Úret_typeÚattrsrÍ   s      €r   r˜  zFunctionAttributes._to_listœ  s¤   ø€ Ý‘”× Ò  Ñ*Ô*ˆØŒ?ð 	FØ�LŠLÐ,×3Ò3°D´OÑDÔDÑEÔEÐEØÔð 	:Ø�LŠLÐ8×?Ò?ØÔ'Ô,ØÔ'×5Ò5Ñ7Ô7ð @ñ 9ô 9ñ :ô :ð :ð ˆr   r™  )rÅ   rÆ   rÇ   Ú	frozensetr“  rà   rU   r
  rÄ  ÚsetterrÇ  r˜  rB  rC  s   @r   r›  r›  s  s  ø€ € € € € ØˆYð *ð *ð *ñ +ô +€Fð7ð 7ð 7ð 7ð 7ð 7ð
ð ð ð ð ð ð ð  ñ „Xð ð Ôðð ñ Ôðð ð!ð !ñ „Xð!ð Ôð ð  ñ Ôð ðð ð ð ð ð ð ð ð r   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          ‰ ¦  «                             ||                     ¦   «         |¬¦  «         |‰ _        t          j	        ¦   «         ‰ _
        g ‰ _        t          ¦   «         ‰ _        t          ˆ fd„|j        D ¦   «         ¦  «        ‰ _        t!          ‰ |j        ¦  «        ‰ _        ‰ j                             ‰ ¦  «         d‰ _        d S )Nr8  c                 ó0   •— g | ]}t          ‰|¦  «        ‘ŒS r   )ÚArgument)r   ÚtrF   s     €r   r   z%Function.__init__.<locals>.<listcomp>³  s3   ø€ ð 0ð 0ð 0Ø õ $ D¨!Ñ,Ô,ð 0ð 0ð 0r   r   )r   r   rÛ   r9  rÑ  rà   rÀ   Úftyper   Ú	NameScoper$  Úblocksr›  Ú
attributesrV  r{  ÚReturnValueÚreturn_typeÚreturn_valuer  r…  Úcalling_convention)rF   r†  rÖ  r  rÍ   s   `   €r   rà   zFunction.__init__¬  sê   øø€ Ý˜%¥¤Ñ,Ô,Ð,Ð,Ð,Ý�h˜ÑÔ×&Ò& v¨u×/?Ò/?Ñ/AÔ/AÈÐ&ÑMÔMÐMØˆŒ
ÝÔ%Ñ'Ô'ˆŒ
ØˆŒÝ,Ñ.Ô.ˆŒÝð 0ð 0ð 0ð 0Ø$)¤Jð0ñ 0ô 0ñ 1ô 1ˆŒ	å'¨¨eÔ.?Ñ@Ô@ˆÔØŒ×Ò˜tÑ$Ô$Ð$Ø"$ˆÔÐÐr   c                 ó   — | j         S rÓ   ©r  rÎ   s    r   r†  zFunction.module¹  ó
   € àŒ{Ðr   c                 ó   — | j         d         S r½  ©rØ  rÎ   s    r   Úentry_basic_blockzFunction.entry_basic_block½  s   € àŒ{˜1Œ~Ðr   c                 ó   — | j         S rÓ   râ  rÎ   s    r   Úbasic_blockszFunction.basic_blocksÁ  rà  r   r   c                 ó\   — t          | |¬¦  «        }| j                             |¦  «         |S )N©r  r  )ÚBlockrØ  r  )rF   r  Úblks      r   Úappend_basic_blockzFunction.append_basic_blockÅ  s/   € Ý˜4 dÐ+Ñ+Ô+ˆØŒ×Ò˜3ÑÔÐØˆ
r   c                 ó^   — t          | |¬¦  «        }| j                             ||¦  «         |S )zInsert block before
        rç  )rè  rØ  Úinsert)rF   Úbeforer  ré  s       r   Úinsert_basic_blockzFunction.insert_basic_blockÊ  s3   € õ ˜4 dÐ+Ñ+Ô+ˆØŒ×Ò˜6 3Ñ'Ô'Ð'Øˆ
r   c           	      óò  — | j         rdnd}| j        }d                     d„ | j        D ¦   «         ¦  «        }|                      ¦   «         }| j        r:dd                     | 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                     d	„ |||	|fD ¦   «         ¦  «        }
|                      ¦   «         }|rd
                     |¦  «        nd}| j        rd                     | j        ¦  «        nd}d}|                     |
||||||¬¦  «        }|                     |¦  «         dS )zB
        Describe the prototype ("head") of the function.
        ÚdefineÚdeclarer/   c              3   ó4   K  — | ]}t          |¦  «        V — Œd S rÓ   ©r    )r   Úas     r   ú	<genexpr>z+Function.descr_prototype.<locals>.<genexpr>×  s(   è è € Ð3Ð3 A�˜Q™œÐ3Ð3Ð3Ð3Ð3Ð3r   r0  r   z, ...z...c              3   ó8   K  — | ]}|¯t          |¦  «        V — Œd S rÓ   ró  )r   Úxs     r   rõ  z+Function.descr_prototype.<locals>.<genexpr>á  s-   è è € ÐLÐL QÈ!ÐL�#˜a™&œ&ÐLÐLÐLÐLÐLÐLr   z {}z section "{}"z:{prefix} {name}({args}{vararg}){attrs}{section}{metadata}
)r|   r  r{  ÚvarargrÍ  rz  rW  N)rØ  rÜ  r'   r{  r4   rÙ  r˜  rÖ  rÛ  ÚanyÚvar_argrx  rÝ  rŒ  r3   rz  r  )rF   r)   ÚstateÚretr{  r  rÍ  rø  rx  Úcconvr|   rW  rz  Úpt_strÚ	prototypes                  r   Údescr_prototypezFunction.descr_prototypeÑ  sž  € ð !œKÐ6��¨YˆØÔˆØ�yŠyÐ3Ð3¨¬Ð3Ñ3Ô3Ñ3Ô3ˆØ×!Ò!Ñ#Ô#ˆà(,¬ð@��c—h’h˜tœ×7Ò7ØŒJÔ"ñ $ô  $ñ %ô %ñ %ð %Ø=?ð 	åˆtŒy‰>Œ>ð 	9Ø $¤
Ô 2Ð:�W�W¸ˆFˆFà"œjÔ0Ð8�U�U°bˆFØ”,ˆØÔ'ˆØ—’ÐLÐL¨5°'¸5À#Ð*FÐLÑLÔLÑLÔLˆØ×+Ò+Ñ-Ô-ˆØ-5Ð=�5—<’< Ñ)Ô)Ð)¸2ˆØ:>¼,ÐN�/×(Ò(¨¬Ñ6Ô6Ð6ÈBˆØNˆØ—M’M¨°dÀØ)/°uÀgØ+3ð "ñ 5ô 5ˆ	ð 	�
Š
�9ÑÔÐÐÐr   c                 óD   — | j         D ]}|                     |¦  «         ŒdS )z7
        Describe of the body of the function.
        N)rØ  r  )rF   r)   ré  s      r   Ú
descr_bodyzFunction.descr_bodyë  s0   € ð ”;ð 	ð 	ˆCØ�IŠI�c‰NŒNˆNˆNð	ð 	r   c                 óÀ   — |                       |¦  «         | j        rA|                     d¦  «         |                      |¦  «         |                     d¦  «         d S d S )Nz{
z}
)r   rØ  r  r  r  s     r   r  zFunction.descrò  sf   € Ø×Ò˜SÑ!Ô!Ð!ØŒ;ð 	Ø�JŠJ�uÑÔÐØ�OŠO˜CÑ Ô Ð Ø�JŠJ�uÑÔÐÐÐð	ð 	r   c                 óZ   — g }|                       |¦  «         d                     |¦  «        S rw  )r  r'   r  s     r   Ú__str__zFunction.__str__ù  s&   € ØˆØ�
Š
�3‰ŒˆØ�wŠw�s‰|Œ|Ðr   c                 ó2   — t          | j        ¦  «        dk    S r½  )rò   rØ  rÎ   s    r   Úis_declarationzFunction.is_declarationþ  s   € å�4”;ÑÔ 1Ò$Ð$r   ©r   )rÅ   rÆ   rÇ   rÈ   rà   r
  r†  rã  rå  rê  rî  r   r  r  r  r  rB  rC  s   @r   rÑ  rÑ  §  s  ø€ € € € € ðð ð%ð %ð %ð %ð %ð ðð ñ „Xðð ðð ñ „Xðð ðð ñ „Xððð ð ð ð
ð ð ð ðð ð ð4ð ð ðð ð ðð ð ð
 ð%ð %ñ „Xð%ð %ð %ð %ð %r   rÑ  c                   óZ  ‡ — 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Úbyvalzcaptures(none)FÚelementtypeÚimmargÚinallocaÚinregÚnestÚnoaliasÚnofreeÚnonnullÚnoundefÚpreallocatedÚreturnedÚsignextÚsretÚ
swiftasync)Ú
swifterrorÚ	swiftselfÚzeroextr   c                 ó‚   •— d| _         d| _        d| _        t          t          | ¦  «                             |¦  «         d S r½  )Ú_alignÚ_dereferenceableÚ_dereferenceable_or_nullr9  r
  rà   rÀ  s     €r   rà   zArgumentAttributes.__init__  s?   ø€ ØˆŒØ !ˆÔØ()ˆÔ%ÝÕ  $Ñ'Ô'×0Ò0°Ñ6Ô6Ð6Ð6Ð6r   c                 óX   — | j                              |¦  «        }|r|› d|j        › d�S |S )Nrk  r0   )r“  Úgetr¿   )rF   r  rG   Úrequires_types       r   r‘  zArgumentAttributes._expand%  s;   € ØœŸš¨Ñ-Ô-ˆØð 	ØÐ+Ð+˜Sœ[Ð+Ð+Ð+Ð+àˆKr   c                 ó   — | j         S rÓ   )r  rÎ   s    r   r„  zArgumentAttributes.align,  rà  r   c                 óN   — t          |t          ¦  «        r|dk    sJ ‚|| _        d S r½  )r   rl  r  ré   s     r   r„  zArgumentAttributes.align0  s*   € å˜#�sÑ#Ô#Ð0¨¨qª¨¨Ð0ØˆŒˆˆr   c                 ó   — | j         S rÓ   )r   rÎ   s    r   Údereferenceablez"ArgumentAttributes.dereferenceable5  s   € àÔ$Ð$r   c                 óN   — t          |t          ¦  «        r|dk    sJ ‚|| _        d S r½  )r   rl  r   ré   s     r   r(  z"ArgumentAttributes.dereferenceable9  s-   € å˜#�sÑ#Ô#Ð0¨¨qª¨¨Ð0Ø #ˆÔÐÐr   c                 ó   — | j         S rÓ   )r!  rÎ   s    r   Údereferenceable_or_nullz*ArgumentAttributes.dereferenceable_or_null>  s   € àÔ,Ð,r   c                 óN   — t          |t          ¦  «        r|dk    sJ ‚|| _        d S r½  )r   rl  r!  ré   s     r   r+  z*ArgumentAttributes.dereferenceable_or_nullB  s-   € å˜#�sÑ#Ô#Ð0¨¨qª¨¨Ð0Ø(+ˆÔ%Ð%Ð%r   c                 ó†  •— t          ¦   «                              |¦  «        }| j        r-|                     d                     | j        ¦  «        ¦  «         | j        r-|                     d                     | j        ¦  «        ¦  «         | j        r/d}|                     |                     | j        ¦  «        ¦  «         |S )Nzalign {0:d}zdereferenceable({0:d})zdereferenceable_or_null({0:d}))r9  r˜  r„  r  r3   r(  r+  )rF   rG   rÍ  ÚdrefrÍ   s       €r   r˜  zArgumentAttributes._to_listG  s­   ø€ Ý‘”× Ò  Ñ%Ô%ˆØŒ:ð 	;Ø�LŠL˜×-Ò-¨d¬jÑ9Ô9Ñ:Ô:Ð:ØÔð 	PØ�LŠLÐ1×8Ò8¸Ô9MÑNÔNÑOÔOÐOØÔ'ð 	DØ3ˆDØ�LŠL˜Ÿš TÔ%AÑBÔBÑCÔCÐCØˆr   r™  )rÅ   rÆ   rÇ   r   r“  rà   r‘  r
  r„  rÏ  r(  r+  r˜  rB  rC  s   @r   r
  r
    s  ø€ € € € € ð Ðð ð 	�ðð 	�ð	ð
 	˜%ðð 	�tðð 	�%ðð 	�Dðð 	�ðð 	�ðð 	�5ðð 	�%ðð 	�5ðð 	�5ðð 	˜ðð  	�Eð!ð" 	�5ð#ð$ 	�ð%ð& 	�eð'ð( ØØð-ð ð ñ ô €Fð27ð 7ð 7ð 7ð 7ð 7ðð ð ð ðð ñ „Xðð „\ðð ñ „\ðð ð%ð %ñ „Xð%ð Ôð$ð $ñ Ôð$ð ð-ð -ñ „Xð-ð Ô#ð,ð ,ñ $Ô#ð,ð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	r   r
  c                   ó,   ‡ — e Zd Zdˆ fd„	Zd„ Zd„ Zˆ xZS )Ú_BaseArgumentr   c                 óÊ   •— t          |t          j        ¦  «        sJ ‚t          t          | ¦  «                             |||¬¦  «         || _        t          ¦   «         | _        d S rU  )	r   r   rÛ   r9  r0  rà   r  r
  rÙ  )rF   r  rG   r  rÍ   s       €r   rà   z_BaseArgument.__init__T  sX   ø€ Ý˜#�uœzÑ*Ô*Ð*Ð*Ð*Ý�m˜TÑ"Ô"×+Ò+¨F°C¸dÐ+ÑCÔCÐCØˆŒÝ,Ñ.Ô.ˆŒˆˆr   c                 óB   — d| j         j        ›d| j        ›d| j        ›d�S )NrÌ   r0  z	 of type r   r1  rÎ   s    r   rÏ   z_BaseArgument.__repr__Z  s-   € € Ø*.¬.Ô*AÐ*AÐ*AÀ4Ä9À9À9Ø*.¬)¨)¨)ð5ð 	5r   c                 ó:   — | j                              |¦  «         d S rÓ   )rÙ  rU   )rF   Úattrs     r   Úadd_attributez_BaseArgument.add_attribute^  s   € ØŒ×Ò˜DÑ!Ô!Ð!Ð!Ð!r   r  )rÅ   rÆ   rÇ   rà   rÏ   r5  rB  rC  s   @r   r0  r0  S  s[   ø€ € € € € ð/ð /ð /ð /ð /ð /ð5ð 5ð 5ð"ð "ð "ð "ð "ð "ð "r   r0  c                   ó   — e Zd ZdZd„ ZdS )rÔ  z3
    The specification of a function argument.
    c                 ó   — | j                              | j        ¦  «        }|rAd                     | j        d                     |¦  «        |                      ¦   «         ¦  «        S d                     | j        |                      ¦   «         ¦  «        S )Nz{0} {1} {2}r0  r»   )rÙ  r˜  r1   r3   r'   r4   ©rF   rÍ  s     r   r  zArgument.__str__g  s   € Ø”×(Ò(¨¬Ñ3Ô3ˆØð 	EØ ×'Ò'¨¬	°3·8²8¸E±?´?Ø(,×(:Ò(:Ñ(<Ô(<ñ>ô >ð >ð ×#Ò# D¤I¨t×/AÒ/AÑ/CÔ/CÑDÔDÐDr   N©rÅ   rÆ   rÇ   rÈ   r  r   r   r   rÔ  rÔ  b  s2   € € € € € ðð ðEð Eð Eð Eð Er   rÔ  c                   ó   — e Zd ZdZd„ ZdS )rÚ  z9
    The specification of a function's return value.
    c                 óÈ   — | j                              | j        ¦  «        }|r.d                     d                     |¦  «        | j        ¦  «        S t          | j        ¦  «        S )Nr»   r0  )rÙ  r˜  r1   r3   r'   r    r8  s     r   r  zReturnValue.__str__u  sQ   € Ø”×(Ò(¨¬Ñ3Ô3ˆØð 	"Ø×#Ò# C§H¢H¨U¡O¤O°T´YÑ?Ô?Ð?å�t”y‘>”>Ð!r   Nr9  r   r   r   rÚ  rÚ  p  s-   € € € € € ðð ð"ð "ð "ð "ð "r   rÚ  c                   óx   ‡ — 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.
    r   c                 ó´   •— t          t          | ¦  «                             |t          j        ¦   «         |¬¦  «         |j        | _        g | _        d | _        d S rU  )r9  rè  rà   r   Ú	LabelTyper$  ÚinstructionsÚ
terminator)rF   r  r  rÍ   s      €r   rà   zBlock.__init__†  sL   ø€ Ý�e�TÑÔ×#Ò# F­E¬OÑ,=Ô,=ÀDÐ#ÑIÔIÐIØ”\ˆŒ
ØˆÔØˆŒˆˆr   c                 ó   — | j         d uS rÓ   )r@  rÎ   s    r   Úis_terminatedzBlock.is_terminatedŒ  s   € àŒ dÐ*Ð*r   c                 ó   — | j         S rÓ   rß  rÎ   s    r   ÚfunctionzBlock.function�  rà  r   c                 ó   — | j         j        S rÓ   )r  r†  rÎ   s    r   r†  zBlock.module”  s   € àŒ{Ô!Ð!r   c                 ó¢   — |                      d                     |                      ¦   «         ¦  «        ¦  «         |d„ | j        D ¦   «         z  }d S )Nz{0}:
c                 ó8   — g | ]}d                       |¦  «        ‘ŒS )z  {0}
)r3   )r   Úinstrs     r   r   zBlock.descr.<locals>.<listcomp>š  s&   € ÐGÐGÐG¨E�	× Ò  Ñ'Ô'ÐGÐGÐGr   )r  r3   Ú_format_namer?  r  s     r   r  zBlock.descr˜  sL   € Ø�
Š
�8—?’? 4×#4Ò#4Ñ#6Ô#6Ñ7Ô7Ñ8Ô8Ð8ØÐGÐG°TÔ5FÐGÑGÔGÑGˆˆˆr   c                 ó@  — |j         |j         k    rt          d¦  «        ‚| j                             |¦  «        }| j                             |¦  «         | j                             ||¦  «         | j        j        D ]"}|j        D ]}|                     ||¦  «         ŒŒ#dS )zReplace an instructionz$new instruction has a different typeN)	r1   r´   r?  ÚindexÚremoverì  r  rå  Úreplace_usage)rF   ÚoldÚnewÚposÚbbrH  s         r   r-  zBlock.replaceœ  s³   € àŒ8�s”xÒÐÝÐBÑCÔCÐCØÔ×%Ò% cÑ*Ô*ˆØÔ× Ò  Ñ%Ô%Ð%ØÔ× Ò   cÑ*Ô*Ð*à”+Ô*ð 	.ð 	.ˆBØœð .ð .�Ø×#Ò# C¨Ñ-Ô-Ð-Ð-ð.ð	.ð 	.r   c                 óÆ   — | j         }t                               |¦  «        s?|                     dd¦  «                             dd¦  «        }d                     |¦  «        }|S )Nr)  r+  r*  r,  z"{0}")r  Ú_SIMPLE_IDENTIFIER_REÚmatchr-  r3   r'  s     r   rI  zBlock._format_name¨  sZ   € ð ŒyˆÝ$×*Ò*¨4Ñ0Ô0ð 	(Ø—<’<  fÑ-Ô-×5Ò5°c¸6ÑBÔBˆDØ—>’> $Ñ'Ô'ˆDØˆr   r  )rÅ   rÆ   rÇ   rÈ   rà   r
  rB  rD  r†  r  r-  rI  rB  rC  s   @r   rè  rè  }  sÈ   ø€ € € € € ðð ðð ð ð ð ð ð ð+ð +ñ „Xð+ð ðð ñ „Xðð ð"ð "ñ „Xð"ðHð Hð Hð
.ð 
.ð 
.ðð ð ð ð ð ð r   rè  c                   ó$   — e Zd ZdZd„ Zd„ Zd„ ZdS )ÚBlockAddressz'
    The address of a basic block.
    c                 óÔ   — t          |t          ¦  «        sJ ‚t          |t          ¦  «        sJ ‚t          j        d¦  «                             ¦   «         | _        || _        || _        d S )Né   )	r   rÑ  rè  r   r{   rÀ   r1   rD  Úbasic_block)rF   rD  rY  s      r   rà   zBlockAddress.__init__¸  s`   € Ý˜(¥HÑ-Ô-Ð-Ð-Ð-Ý˜+¥uÑ-Ô-Ð-Ð-Ð-Ý”M !Ñ$Ô$×/Ò/Ñ1Ô1ˆŒ	Ø ˆŒØ&ˆÔÐÐr   c                 ó\   — d                      | j        |                      ¦   «         ¦  «        S râ   r¼   rÎ   s    r   r  zBlockAddress.__str__¿  rä   r   c                 óŠ   — d                      | j                             ¦   «         | j                             ¦   «         ¦  «        S )Nzblockaddress({0}, {1}))r3   rD  r4   rY  rÎ   s    r   r4   zBlockAddress.get_referenceÂ  s=   € Ø'×.Ò.ØŒM×'Ò'Ñ)Ô)ØÔ×*Ò*Ñ,Ô,ñ.ô .ð 	.r   N)rÅ   rÆ   rÇ   rÈ   rà   r  r4   r   r   r   rV  rV  ³  sN   € € € € € ðð ð'ð 'ð 'ðAð Að Að.ð .ð .ð .ð .r   rV  )3rÈ   r<   r;  Úrer   r   Úllvmlite.irr   r   Úllvmlite.ir._utilsr   r   r	   rÎ  ÚmapÚordÚascii_lettersÚdigitsr%   ÚcompilerS  ry   r*   rB   rI   rÖ   rK   rÊ   rÑ   rÔ   r“   r5   r  r6  rE  rL  rR  ra  rd  rt  r~  ÚsetrŽ  r›  rÑ  r
  r0  rÔ  rÚ  rè  rV  r   r   r   ú<module>re     s¨  ððð ð
 Ð Ð Ð Ø €€€Ø 	€	€	€	Ø "Ð "Ð "Ð "Ð "Ð "à -Ð -Ð -Ð -Ð -Ð -Ð -Ð -Ð -Ð -ð.ð .ð .ð .ð .ð .ð .ð .ð .ð .ð �	˜#˜#˜c 6Ô#7Ñ8Ô8Ñ9Ô9Ø�	˜#˜#˜c 6¤=Ñ1Ô1Ñ2Ô2ñ3à�	˜#˜#˜cÐ#EÑFÔFÑGÔGñH€ð #˜œ
Ð#CÑDÔDÐ ð 
Ø	Ø
Ø
Ø
Ø
ðð €ð !ð ð ð ð ð(ð ð ð"ð ð ð JIð JIð JIð JIð JI�Fñ JIô JIð JIðZ
Oð Oð Oð Oð OˆFñ Oô Oð Oð.ð .ð .ð .ð .�ñ .ô .ð .ð ˆJ‰LŒL€	ðGOð GOð GOð GOð GOˆ{Ð3°]ÀEñ GOô GOð GOðTð ð ð ð ˜ñ ô ð ð 5Eð 5Eð 5Eð 5Eð 5E�Ð5°uñ 5Eô 5Eð 5Eðp!ð !ð !ð !ð !�Zñ !ô !ð !ðB ð  ð  ð  ð  �{Ð$;¸Uñ  ô  ð  ð.!ð !ð !ð !ð !�Fñ !ô !ð !ð)#ð )#ð )#ð )#ð )#ˆjñ )#ô )#ð )#ðX	ð 	ð 	ð 	ð 	ñ 	ô 	ð 	ð>Bð >Bð >Bð >Bð >Bˆjñ >Bô >Bð >BðBð ð ð ð �*˜m¨\ñ ô ð ð;ð ;ð ;ð ;ð ;�[ñ ;ô ;ð ;ð|<ð <ð <ð <ð <�3ñ <ô <ð <ð81ð 1ð 1ð 1ð 1˜ñ 1ô 1ð 1ðhY%ð Y%ð Y%ð Y%ð Y%ˆ{ñ Y%ô Y%ð Y%ðxMð Mð Mð Mð M˜ñ Mô Mð Mð`"ð "ð "ð "ð "�Jñ "ô "ð "ðEð Eð Eð Eð Eˆ}ñ Eô Eð Eð
"ð 
"ð 
"ð 
"ð 
"�-ñ 
"ô 
"ð 
"ð3ð 3ð 3ð 3ð 3ˆJñ 3ô 3ð 3ðl.ð .ð .ð .ð .�5ñ .ô .ð .ð .ð .r   