ó
C]c           @@ sÖ  d  Z  d d l m Z m Z d d l Z d d l m Z d d l m Z m Z d d l m	 Z	 m
 Z
 m Z e e e e j ƒ ƒ e e e e j ƒ ƒ Be e e d	 ƒ ƒ BZ i  d
 „ Z d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ e ƒ  Z d e	 e
 e e f d „  ƒ  YZ d e f d „  ƒ  YZ d e	 e
 e f d „  ƒ  YZ d e f d „  ƒ  YZ d e	 e
 e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d d9 d  „  ƒ  YZ d! e f d" „  ƒ  YZ  d# e e f d$ „  ƒ  YZ! d% e! f d& „  ƒ  YZ" d' e# f d( „  ƒ  YZ$ d) e$ f d* „  ƒ  YZ% d+ e! e f d, „  ƒ  YZ& d- e$ f d. „  ƒ  YZ' d/ e f d0 „  ƒ  YZ( d1 e( f d2 „  ƒ  YZ) d3 e( f d4 „  ƒ  YZ* d5 e f d6 „  ƒ  YZ+ d7 e f d8 „  ƒ  YZ, d S(:   s_   
Classes that are LLVM values: Value, Constant...
Instructions are in the instructions module.
i    (   t   print_functiont   absolute_importNi   (   t   sixi   (   t   typest   _utils(   t   _StrCachingt   _StringReferenceCachingt   _HasMetadatas    !#$%&'()*+,-./:;<=>?@[]^_`{|}~c         C@ sÓ   t  |  t ƒ r! |  j d ƒ }  n  t  |  t t f ƒ s< t ‚ | s© xd t d ƒ D]S } | t k rt t | ƒ | | <n d | | | <t	 j
 rO | | | t | ƒ <qO qO Wn  g  |  D] } | | ^ q° } d j | ƒ S(   sL   
    Escape the given bytestring for safe use as a LLVM array constant.
    t   asciii   s   \%02xt    (   t
   isinstancet   strt   encodet   bytest	   bytearrayt   AssertionErrort   ranget   _VALID_CHARSt   chrR   t   PY2t   join(   t   textt   _mapt   cht   buf(    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyt   _escape_string   s    	t   _ConstOpMixinc           B@ s)   e  Z d  Z d „  Z d „  Z d „  Z RS(   sQ   
    A mixin defining constant operations, for use in constant-like classes.
    c         C@ s>   | |  j  k r |  Sd j |  j  |  j ƒ  | ƒ } t | | ƒ S(   sB   
        Bitcast this pointer constant to the given type.
        s   bitcast ({0} {1} to {2})(   t   typet   formatt   get_referencet   FormattedConstant(   t   selft   typt   op(    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyt   bitcast.   s
    	c         C@ s   t  |  j t j ƒ s. t d |  j f ƒ ‚ n  t  | t j ƒ sV t d | f ƒ ‚ n  d j |  j |  j ƒ  | ƒ } t | | ƒ S(   sG   
        Cast this integer constant to the given pointer type.
        s7   can only call inttoptr() on integer constants, not '%s's-   can only inttoptr() to pointer type, not '%s's   inttoptr ({0} {1} to {2})(	   R
   R   R   t   IntTypet	   TypeErrort   PointerTypeR   R   R   (   R   R    R!   (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyt   inttoptr8   s    		c         C@ sÎ   t  |  j t j ƒ s. t d |  j f ƒ ‚ n  |  j } x | D] } | j | ƒ } q> Wg  | D]! } d j | j | j ƒ  ƒ ^ q^ } d j |  j j |  j |  j ƒ  d j	 | ƒ ƒ } t
 | j |  j ƒ | ƒ S(   s>   
        Call getelementptr on this pointer constant.
        s2   can only call gep() on pointer constants, not '%s's   {0} {1}s!   getelementptr ({0}, {1} {2}, {3})s   , (   R
   R   R   R%   R$   t   gepR   R   t   pointeeR   R   t
   as_pointert	   addrspace(   R   t   indicest   outtypet   it   idxt
   strindicesR!   (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyR'   H   s    	+(   t   __name__t
   __module__t   __doc__R"   R&   R'   (    (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyR   )   s   	
	t   Valuec           B@ s   e  Z d  Z d „  Z RS(   s(   
    The base class for all values.
    c         C@ s   d |  j  j |  j f S(   Ns   <ir.%s type='%s' ...>(   t	   __class__R0   R   (   R   (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyt   __repr__b   s    (   R0   R1   R2   R5   (    (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyR3   ]   s   t
   _Undefinedc           B@ s   e  Z d  Z d „  Z RS(   s0   
    'undef': a value for undefined values.
    c         C@ s*   y t  SWn t k
 r% t j t ƒ SXd  S(   N(   t	   Undefinedt	   NameErrort   objectt   __new__R6   (   t   cls(    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyR:   j   s    (   R0   R1   R2   R:   (    (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyR6   f   s   t   Constantc           B@ sz   e  Z d  Z d „  Z d „  Z d „  Z e d „  ƒ Z e d „  ƒ Z e	 d „  ƒ Z
 d „  Z d „  Z d	 „  Z d
 „  Z RS(   s    
    A constant LLVM value.
    c         C@ sV   t  | t j ƒ s t ‚ t  | t j ƒ s1 t ‚ | |  _ | j | ƒ } | |  _ d  S(   N(   R
   R   t   TypeR   t   VoidTypeR   t   wrap_constant_valuet   constant(   R   R    R@   (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyt   __init__y   s
    	c         C@ s   d j  |  j |  j ƒ  ƒ S(   Ns   {0} {1}(   R   R   R   (   R   (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyt
   _to_string€   s    c         C@ s|   |  j  d  k r |  j j } nZ |  j  t k r6 d } nB t |  j  t ƒ rc d j t |  j  ƒ ƒ } n |  j j	 |  j  ƒ } | S(   Nt   undefs   c"{0}"(
   R@   t   NoneR   t   nullR7   R
   R   R   R   t   format_constant(   R   t   val(    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyt   _get_referenceƒ   s    	c         C@ s’   g  | D] } | j  ^ q } t | ƒ d k r= t d ƒ ‚ n  | d } x) | D]! } | | k rN t d ƒ ‚ qN qN W|  t j | t | ƒ ƒ | ƒ S(   sO   
        Construct a literal array constant made of the given members.
        i    s   need at least one elements$   all elements must have the same type(   R   t   lent
   ValueErrorR$   R   t	   ArrayType(   R;   t   elemst   elt   tyst   tyt   other(    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyt   literal_array’   s    
c         C@ s2   g  | D] } | j  ^ q } |  t j | ƒ | ƒ S(   sS   
        Construct a literal structure constant made of the given members.
        (   R   R   t   LiteralStructType(   R;   RL   RM   RN   (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyt   literal_struct    s    c         C@ s.   t  |  j t j ƒ s$ t d ƒ ‚ n  |  j j S(   Ns)   Only pointer constant have address spaces(   R
   R   R   R%   R$   R*   (   R   (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyR*   ¨   s    c         C@ s-   t  | t ƒ r% t |  ƒ t | ƒ k St Sd  S(   N(   R
   R<   R   t   False(   R   RP   (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyt   __eq__®   s    c         C@ s   |  j  | ƒ S(   N(   RU   (   R   RP   (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyt   __ne__´   s    c         C@ s   t  t |  ƒ ƒ S(   N(   t   hashR   (   R   (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyt   __hash__·   s    c         C@ s   d |  j  |  j f S(   Ns    <ir.Constant type='%s' value=%r>(   R   R@   (   R   (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyR5   º   s    (   R0   R1   R2   RA   RB   RH   t   classmethodRQ   RS   t   propertyR*   RU   RV   RX   R5   (    (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyR<   t   s   						R   c           B@ s)   e  Z d  Z d „  Z d „  Z d „  Z RS(   sA   
    A constant with an already formatted IR representation.
    c         C@ s,   t  | t ƒ s t ‚ t j |  | | ƒ d  S(   N(   R
   R   R   R<   RA   (   R   R    R@   (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyRA   Ã   s    c         C@ s   |  j  S(   N(   R@   (   R   (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyRB   Ç   s    c         C@ s   |  j  S(   N(   R@   (   R   (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyRH   Ê   s    (   R0   R1   R2   RA   RB   RH   (    (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyR   ¾   s   		t
   NamedValuec           B@ sw   e  Z d  Z d Z e Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 e e	 e
 ƒ Z d „  Z d „  Z e d	 „  ƒ Z RS(
   s*   
    The base class for named values.
    t   %c         C@ sM   | d  k	 s t ‚ t | t j ƒ s* t ‚ | |  _ | |  _ |  j | ƒ d  S(   N(   RD   R   R
   R   R=   t   parentR   t	   _set_name(   R   R]   R   t   name(    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyRA   Õ   s
    		c         C@ sZ   g  } |  j  t j ƒ  k r: | j d j |  j ƒ  ƒ ƒ n  |  j | ƒ d j | ƒ j ƒ  S(   Ns   {0} = R	   (	   R   R   R>   t   appendR   R   t   descrR   t   rstrip(   R   R   (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyRB   Ü   s
    c         C@ s
   t  ‚ d  S(   N(   t   NotImplementedError(   R   R   (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyRa   ã   s    c         C@ s   |  j  S(   N(   t   _name(   R   (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyt	   _get_nameæ   s    c         C@ s+   |  j  j j | d |  j ƒ} | |  _ d  S(   Nt   deduplicate(   R]   t   scopet   registert   deduplicate_nameRd   (   R   R_   (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyR^   é   s    c         C@ sU   |  j  } d | k s! d | k rB | j d d ƒ j d d ƒ } n  d j |  j | ƒ S(   Ns   \t   "s   \5cs   \22s   {0}"{1}"(   R_   t   replaceR   t   name_prefix(   R   R_   (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyRH   ï   s    	!c         C@ s   d |  j  j |  j |  j f S(   Ns   <ir.%s %r of type '%s'>(   R4   R0   R_   R   (   R   (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyR5   ö   s    c         C@ s\   |  j  } t | t j ƒ r* |  j  j } n  t | t j ƒ r@ | St d j |  j  ƒ ƒ ‚ d  S(   Ns   Not a function: {0}(   R   R
   R   R%   R(   t   FunctionTypeR$   R   (   R   RO   (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyt   function_typeú   s    	(   R0   R1   R2   Rl   t   TrueRi   RA   RB   Ra   Re   R^   RZ   R_   RH   R5   Rn   (    (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyR[   Î   s   							t   MetaDataStringc           B@ sJ   e  Z d  Z d „  Z d „  Z d „  Z e Z d „  Z d „  Z d „  Z	 RS(   s[   
    A metadata string, i.e. a constant string used as a value in a metadata
    node.
    c         C@ s2   t  t |  ƒ j | t j ƒ  d d ƒ| |  _ d  S(   NR_   R	   (   t   superRp   RA   R   t   MetaDataTypet   string(   R   R]   Rs   (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyRA     s    c         C@ s   | |  j  ƒ  d f 7} d  S(   Ns   
(   R   (   R   R   (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyRa     s    c         C@ s   d j  t |  j ƒ ƒ S(   Ns   !"{0}"(   R   R   Rs   (   R   (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyRH     s    c         C@ s'   t  | t ƒ r |  j | j k St Sd  S(   N(   R
   Rp   Rs   RT   (   R   RP   (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyRU     s    c         C@ s   |  j  | ƒ S(   N(   RU   (   R   RP   (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyRV     s    c         C@ s   t  |  j ƒ S(   N(   RW   Rs   (   R   (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyRX   "  s    (
   R0   R1   R2   RA   Ra   RH   RB   RU   RV   RX   (    (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyRp     s   					t   MetaDataArgumentc           B@ s&   e  Z d  Z d „  Z d „  Z e Z RS(   sÊ   
    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         C@ sM   t  | t ƒ s t ‚ t  | j t j ƒ s1 t ‚ t j ƒ  |  _ | |  _ d  S(   N(   R
   R3   R   R   R   Rr   t   wrapped_value(   R   t   value(    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyRA   /  s    c         C@ s   d j  |  j j |  j j ƒ  ƒ S(   Ns   {0} {1}(   R   Ru   R   R   (   R   (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyRH   5  s    (   R0   R1   R2   RA   RH   RB   (    (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyRt   &  s   		t   NamedMetaDatac           B@ s    e  Z d  Z d „  Z d „  Z RS(   sk   
    A named metadata node.

    Do not instantiate directly, use Module.add_named_metadata() instead.
    c         C@ s   | |  _  g  |  _ d  S(   N(   R]   t   operands(   R   R]   (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyRA   D  s    	c         C@ s   |  j  j | ƒ d  S(   N(   Rx   R`   (   R   t   md(    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyt   addH  s    (   R0   R1   R2   RA   Rz   (    (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyRw   =  s   	t   MDValuec           B@ sJ   e  Z d  Z d Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 RS(   sš   
    A metadata node's value, consisting of a sequence of elements ("operands").

    Do not instantiate directly, use Module.add_metadata() instead.
    t   !c         C@ sH   t  t |  ƒ j | t j ƒ  d | ƒt | ƒ |  _ | j j |  ƒ d  S(   NR_   (	   Rq   R{   RA   R   Rr   t   tupleRx   t   metadataR`   (   R   R]   t   valuesR_   (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyRA   T  s
    c         C@ sÁ   g  } xŒ |  j  D] } t | j t j ƒ ro t | t ƒ rY | j d  k rY | j d ƒ q‘ | j | j	 ƒ  ƒ q | j d j
 | j | j	 ƒ  ƒ ƒ q Wd j | ƒ } | d j
 | ƒ d f 7} d  S(   NRE   s   {0} {1}s   , s
   !{{ {0} }}s   
(   Rx   R
   R   R   Rr   R<   R@   RD   R`   R   R   R   (   R   R   Rx   R!   (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyRa   [  s    &c         C@ s   |  j  t |  j ƒ S(   N(   Rl   R   R_   (   R   (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyRH   h  s    c         C@ s'   t  | t ƒ r |  j | j k St Sd  S(   N(   R
   R{   Rx   RT   (   R   RP   (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyRU   k  s    c         C@ s   |  j  | ƒ S(   N(   RU   (   R   RP   (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyRV   q  s    c         C@ s   t  |  j ƒ S(   N(   RW   Rx   (   R   (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyRX   t  s    (
   R0   R1   R2   Rl   RA   Ra   RH   RU   RV   RX   (    (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyR{   L  s   					t   DITokenc           B@ s   e  Z d  Z d „  Z RS(   s§   
    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         C@ s   | |  _  d  S(   N(   Rv   (   R   Rv   (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyRA     s    (   R0   R1   R2   RA   (    (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyR€   x  s   t   DIValuec           B@ sJ   e  Z d  Z d Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 RS(   sŒ   
    A debug information descriptor, containing key-value pairs.

    Do not instantiate directly, use Module.add_debug_info() instead.
    R|   c         C@ sZ   t  t |  ƒ j | t j ƒ  d | ƒ| |  _ | |  _ t | ƒ |  _ | j	 j
 |  ƒ d  S(   NR_   (   Rq   R   RA   R   Rr   t   is_distinctt   kindR}   Rx   R~   R`   (   R   R]   R‚   Rƒ   Rx   R_   (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyRA   ‹  s    		c         C@ sQ  |  j  r | d 7} n  g  } x|  j D]ø \ } } | d  k rG d } n¾ | t k r\ d } n© | t k rq d } n” t | t ƒ rŒ | j } ny t | t ƒ r³ d j	 t
 | ƒ ƒ } nR t | t j ƒ rÔ t | ƒ } n1 t | t ƒ rò | j ƒ  } n t d | f ƒ ‚ | j d j	 | | ƒ ƒ q& Wd j | ƒ } | d	 |  j d
 | d f 7} d  S(   Ns	   distinct RE   t   truet   falses   "{}"s'   invalid operand type for debug info: %rs   {0}: {1}s   , R|   t   (s   )
(   s	   distinct (   R‚   Rx   RD   Ro   RT   R
   R€   Rv   R   R   R   R   t   integer_typesR[   R   R$   R`   R   Rƒ   (   R   R   Rx   t   keyRv   t   strvalue(    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyRa   ”  s.    				c         C@ s   |  j  t |  j ƒ S(   N(   Rl   R   R_   (   R   (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyRH   ®  s    c         C@ sK   t  | t ƒ rC |  j | j k oB |  j | j k oB |  j | j k St Sd  S(   N(   R
   R   R‚   Rƒ   Rx   RT   (   R   RP   (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyRU   ±  s
    c         C@ s   |  j  | ƒ S(   N(   RU   (   R   RP   (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyRV   ¹  s    c         C@ s   t  |  j |  j |  j f ƒ S(   N(   RW   R‚   Rƒ   Rx   (   R   (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyRX   ¼  s    (
   R0   R1   R2   Rl   RA   Ra   RH   RU   RV   RX   (    (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyR   ƒ  s   						t   GlobalValuec           B@ s#   e  Z d  Z d Z e Z d „  Z RS(   s   
    A global value.
    t   @c         O@ s/   t  t |  ƒ j | | Ž  d |  _ d |  _ d  S(   NR	   (   Rq   RŠ   RA   t   linkaget   storage_class(   R   t   argst   kwargs(    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyRA   Ç  s    	(   R0   R1   R2   Rl   RT   Ri   RA   (    (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyRŠ   À  s   t   GlobalVariablec           B@ s#   e  Z d  Z d d „ Z d „  Z RS(   s   
    A global variable.
    i    c         C@ sŠ   t  | t j ƒ s t ‚ t t |  ƒ j | | j | ƒ d | ƒ| |  _ d  |  _
 t |  _ t |  _ | |  _ d  |  _ |  j j |  ƒ d  S(   NR_   (   R
   R   R=   R   Rq   R   RA   R)   t
   value_typeRD   t   initializerRT   t   unnamed_addrt   global_constantR*   t   alignR]   t
   add_global(   R   t   moduleR    R_   R*   (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyRA   Ò  s    !						c         C@ s´  |  j  r d } n d } |  j s? |  j d  k r6 d n d } n	 |  j } | rb | j | d ƒ n  |  j r‚ | j |  j d ƒ n  |  j r› | j d ƒ n  |  j d k rÆ | j d j |  j ƒ ƒ n  | j d	 j d
 | d |  j	 ƒ ƒ |  j d  k	 rK|  j j
 |  j	 k r.t d |  j j
 |  j	 f ƒ ‚ n  | j d |  j j ƒ  ƒ n/ | d k rz| j d |  j	 t ƒ j ƒ  ƒ n  |  j d  k	 r£| j d |  j f ƒ n  | j d ƒ d  S(   NR@   t   globalt   externalR	   t    s   unnamed_addr i    s   addrspace({0:d}) s   {kind} {type}Rƒ   R   s3   got initializer of type %s for global value type %st   extern_weaks
   , align %ds   
(   R™   R›   (   R”   RŒ   R’   RD   R`   R   R“   R*   R   R‘   R   R$   R   R7   R•   (   R   R   Rƒ   RŒ   (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyRa   Þ  s2    						"#(   R0   R1   R2   RA   Ra   (    (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyR   Í  s   t   AttributeSetc           B@ s2   e  Z d  Z d Z d d „ Z d „  Z d „  Z RS(   sx   A set of string attribute.
    Only accept items listed in *_known*.

    Properties:
    * Iterate in sorted order
    c         C@ s=   t  | t ƒ r | g } n  x | D] } |  j | ƒ q" Wd  S(   N(   R
   R   Rz   (   R   RŽ   R_   (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyRA     s    c         C@ s@   | |  j  k r* t d j | |  ƒ ƒ ‚ n  t t |  ƒ j | ƒ S(   Ns   unknown attr {!r} for {}(   t   _knownRJ   R   Rq   Rœ   Rz   (   R   R_   (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyRz     s    c         C@ s   t  t t t |  ƒ j ƒ  ƒ ƒ S(   N(   t   itert   sortedRq   Rœ   t   __iter__(   R   (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyR      s    (    (    (   R0   R1   R2   R   RA   Rz   R    (    (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyRœ     s
   	t   FunctionAttributesc            B@ sÈ   e  Z e 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 g ƒ Z d% d „ Z e d  „  ƒ Z e j d! „  ƒ Z e d" „  ƒ Z e j d# „  ƒ Z d$ „  Z	 RS(&   t
   argmemonlyt   alwaysinlinet   builtint   coldt   inaccessiblememonlyt   inaccessiblemem_or_argmemonlyt
   inlinehintt	   jumptablet   minsizet   nakedt	   nobuiltint   noduplicatet   noimplicitfloatt   noinlinet   nonlazybindt	   norecurset	   noredzonet   noreturnt   nounwindt   optnonet   optsizet   readnonet   readonlyt   returns_twicet   sanitize_addresst   sanitize_memoryt   sanitize_threadt   sspt   sspregt	   sspstrongt   uwtablec         C@ s,   d |  _  d  |  _ t t |  ƒ j | ƒ d  S(   Ni    (   t   _alignstackRD   t   _personalityRq   R¡   RA   (   R   RŽ   (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyRA   )  s    		c         C@ s   |  j  S(   N(   RÁ   (   R   (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyt
   alignstack.  s    c         C@ s   | d k s t  ‚ | |  _ d  S(   Ni    (   R   RÁ   (   R   RG   (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyRÃ   2  s    c         C@ s   |  j  S(   N(   RÂ   (   R   (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyt   personality7  s    c         C@ s.   | d  k s! t | t ƒ s! t ‚ | |  _ d  S(   N(   RD   R
   RŠ   R   RÂ   (   R   RG   (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyRÄ   ;  s    !c         C@ sx   t  |  ƒ } |  j r1 | j d j |  j ƒ ƒ n  |  j rk | j d j d |  j j d |  j j ƒ  ƒ ƒ n  d j | ƒ S(   Ns   alignstack({0:d})s   personality {persty} {persfn}t   perstyt   persfnRš   (   t   listRÃ   R`   R   RÄ   R   R   R   (   R   t   attrs(    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyR5   @  s    		(    (
   R0   R1   t	   frozensetR   RA   RZ   RÃ   t   setterRÄ   R5   (    (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyR¡     s   		t   Functionc           B@ s   e  Z d  Z 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 RS(   s   Represent a LLVM Function but does uses a Module as parent.
    Global Values are stored as a set of dependencies (attribute `depends`).
    c         C@ sÓ   t  | t j ƒ s t ‚ t t |  ƒ j | | j ƒ  d | ƒ| |  _ t	 j
 ƒ  |  _ g  |  _ t ƒ  |  _ t g  | j D] } t |  | ƒ ^ qw ƒ |  _ t |  | j ƒ |  _ |  j j |  ƒ d |  _ i  |  _ d  S(   NR_   R	   (   R
   R   R=   R   Rq   RË   RA   R)   t   ftypeR   t	   NameScopeRg   t   blocksR¡   t
   attributesR}   RŽ   t   Argumentt   ReturnValuet   return_typet   return_valueR]   R–   t   calling_conventionR~   (   R   R—   RÌ   R_   t   t(    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyRA   O  s    %		(	c         C@ s   |  j  S(   N(   R]   (   R   (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyR—   ]  s    c         C@ s   |  j  d S(   Ni    (   RÎ   (   R   (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyt   entry_basic_blocka  s    c         C@ s   |  j  S(   N(   RÎ   (   R   (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyt   basic_blockse  s    R	   c         C@ s)   t  d |  d | ƒ } |  j j | ƒ | S(   NR]   R_   (   t   BlockRÎ   R`   (   R   R_   t   blk(    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyt   append_basic_blocki  s    c         C@ s,   t  d |  d | ƒ } |  j j | | ƒ | S(   s   Insert block before
        R]   R_   (   RØ   RÎ   t   insert(   R   t   beforeR_   RÙ   (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyt   insert_basic_blockn  s    c         C@ s  |  j  r d n d } |  j } d j d „  |  j Dƒ ƒ } |  j ƒ  } |  j } t |  j ƒ ry |  j j rp d n d } n |  j j r‹ d n d } |  j	 } |  j
 }	 d j d	 „  | | |	 | g Dƒ ƒ }
 |  j ƒ  } d
 j d |
 d | d | d | d | d | ƒ } | j | ƒ d S(   sB   
        Describe the prototype ("head") of the function.
        t   definet   declares   , c         s@ s   |  ] } t  | ƒ Vq d  S(   N(   R   (   t   .0t   a(    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pys	   <genexpr>{  s    s   , ...R	   s   ...Rš   c         s@ s!   |  ] } | r t  | ƒ Vq d  S(   N(   R   (   Rà   t   x(    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pys	   <genexpr>„  s    s2   {prefix} {name}({args}{vararg}) {attrs}{metadata}
t   prefixR_   RŽ   t   varargRÈ   R~   N(   RÎ   RÓ   R   RŽ   R   RÏ   t   anyRÌ   t   var_argRŒ   RÔ   t   _stringify_metadataR   R`   (   R   R   t   statet   retRŽ   R_   RÈ   Rä   RŒ   t   cconvRã   R~   t	   prototype(    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyt   descr_prototypeu  s     				%	c         C@ s%   x |  j  D] } | j | ƒ q
 Wd S(   s7   
        Describe of the body of the function.
        N(   RÎ   Ra   (   R   R   RÙ   (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyt
   descr_body‹  s    c         C@ sD   |  j  | ƒ |  j r@ | j d ƒ |  j | ƒ | j d ƒ n  d  S(   Ns   {
s   }
(   Rì   RÎ   R`   Rí   (   R   R   (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyRa   ’  s
    	c         C@ s    g  } |  j  | ƒ d j | ƒ S(   NR	   (   Ra   R   (   R   R   (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyt   __str__™  s    c         C@ s   t  |  j ƒ d k S(   Ni    (   RI   RÎ   (   R   (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyt   is_declarationž  s    (   R0   R1   R2   RA   RZ   R—   RÖ   R×   RÚ   RÝ   Rì   Rí   Ra   Rî   Rï   (    (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyRË   K  s   					t   ArgumentAttributesc           B@ s­   e  Z e d  d d d d d d d d d	 d
 g ƒ Z d d „ Z e d „  ƒ Z e j d „  ƒ Z e d „  ƒ Z e j d „  ƒ Z e d „  ƒ Z	 e	 j d „  ƒ Z	 d „  Z
 RS(   t   byvalt   inallocat   inregt   nestt   noaliast	   nocapturet   nonnullt   returnedt   signextt   srett   zeroextc         C@ s5   d |  _  d |  _ d |  _ t t |  ƒ j | ƒ d  S(   Ni    (   t   _alignt   _dereferenceablet   _dereferenceable_or_nullRq   Rð   RA   (   R   RŽ   (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyRA   ¨  s    			c         C@ s   |  j  S(   N(   Rü   (   R   (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyR•   ®  s    c         C@ s1   t  | t j ƒ r | d k s$ t ‚ | |  _ d  S(   Ni    (   R
   R   R‡   R   Rü   (   R   RG   (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyR•   ²  s    $c         C@ s   |  j  S(   N(   Rý   (   R   (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyt   dereferenceable·  s    c         C@ s1   t  | t j ƒ r | d k s$ t ‚ | |  _ d  S(   Ni    (   R
   R   R‡   R   Rý   (   R   RG   (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyRÿ   »  s    $c         C@ s   |  j  S(   N(   Rþ   (   R   (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyt   dereferenceable_or_nullÀ  s    c         C@ s1   t  | t j ƒ r | d k s$ t ‚ | |  _ d  S(   Ni    (   R
   R   R‡   R   Rþ   (   R   RG   (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyR   Ä  s    $c         C@ s   t  |  ƒ } |  j r1 | j d j |  j ƒ ƒ n  |  j rV | j d j |  j ƒ ƒ n  |  j r{ | j d j |  j ƒ ƒ n  | S(   Ns   align {0:d}s   dereferenceable({0:d})s   dereferenceable_or_null({0:d})(   RŸ   R•   R`   R   Rÿ   R   (   R   RÈ   (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyt   _to_listÉ  s    			(    (   R0   R1   RÉ   R   RA   RZ   R•   RÊ   Rÿ   R   R  (    (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyRð   £  s   t   _BaseArgumentc           B@ s&   e  Z d  d „ Z d „  Z d „  Z RS(   R	   c         C@ sP   t  | t j ƒ s t ‚ t t |  ƒ j | | d | ƒ| |  _ t ƒ  |  _	 d  S(   NR_   (
   R
   R   R=   R   Rq   R  RA   R]   Rð   RÏ   (   R   R]   R    R_   (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyRA   Õ  s    	c         C@ s   d |  j  j |  j |  j f S(   Ns   <ir.%s %r of type %s>(   R4   R0   R_   R   (   R   (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyR5   Û  s    c         C@ s   |  j  j | ƒ d  S(   N(   RÏ   Rz   (   R   t   attr(    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyt   add_attributeÞ  s    (   R0   R1   RA   R5   R  (    (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyR  Ô  s   	RÐ   c           B@ s   e  Z d  Z d „  Z RS(   s3   
    The specification of a function argument.
    c         C@ sW   |  j  j ƒ  } | r: d j |  j d j | ƒ |  j ƒ  ƒ Sd j |  j |  j ƒ  ƒ Sd  S(   Ns   {0} {1} {2}Rš   s   {0} {1}(   RÏ   R  R   R   R   R   (   R   RÈ   (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyRî   ç  s
    (   R0   R1   R2   Rî   (    (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyRÐ   â  s   RÑ   c           B@ s   e  Z d  Z d „  Z RS(   s9   
    The specification of a function's return value.
    c         C@ sB   |  j  j ƒ  } | r1 d j d j | ƒ |  j ƒ St |  j ƒ Sd  S(   Ns   {0} {1}Rš   (   RÏ   R  R   R   R   R   (   R   RÈ   (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyRî   õ  s    (   R0   R1   R2   Rî   (    (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyRÑ   ð  s   RØ   c           B@ sY   e  Z d  Z d d „ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z d „  Z d „  Z	 RS(   s   
    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         C@ sG   t  t |  ƒ j | t j ƒ  d | ƒ| j |  _ g  |  _ d  |  _ d  S(   NR_   (	   Rq   RØ   RA   R   t	   LabelTypeRg   t   instructionsRD   t
   terminator(   R   R]   R_   (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyRA     s    %	c         C@ s   |  j  d  k	 S(   N(   R  RD   (   R   (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyt   is_terminated  s    c         C@ s   |  j  S(   N(   R]   (   R   (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyt   function  s    c         C@ s
   |  j  j S(   N(   R]   R—   (   R   (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyR—     s    c         C@ sF   | j  d j |  j ƒ ƒ | g  |  j D] } d j | ƒ ^ q& 7} d  S(   Ns   {0}:
s     {0}
(   R`   R   R_   R  (   R   R   t   instr(    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyRa     s    c         C@ s•   | j  | j  k r! t d ƒ ‚ n  |  j j | ƒ } |  j j | ƒ |  j j | | ƒ x8 |  j j D]* } x! | j D] } | j | | ƒ qs Wqc Wd S(   s   Replace an instructions$   new instruction has a different typeN(	   R   R$   R  t   indext   removeRÛ   R]   R×   t   replace_usage(   R   t   oldt   newt   post   bbR
  (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyRk     s    (
   R0   R1   R2   RA   RZ   R  R	  R—   Ra   Rk   (    (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyRØ   ý  s   	t   BlockAddressc           B@ s)   e  Z d  Z d „  Z d „  Z d „  Z RS(   s'   
    The address of a basic block.
    c         C@ sX   t  | t ƒ s t ‚ t  | t ƒ s* t ‚ t j d ƒ j ƒ  |  _ | |  _ | |  _	 d  S(   Ni   (
   R
   RË   R   RØ   R   R#   R)   R   R	  t   basic_block(   R   R	  R  (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyRA   /  s
    	c         C@ s   d j  |  j |  j ƒ  ƒ S(   Ns   {0} {1}(   R   R   R   (   R   (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyRî   6  s    c         C@ s"   d j  |  j j ƒ  |  j j ƒ  ƒ S(   Ns   blockaddress({0}, {1})(   R   R	  R   R  (   R   (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyR   9  s    (   R0   R1   R2   RA   Rî   R   (    (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyR  *  s   		(    (-   R2   t
   __future__R    R   Rs   R	   R   R   R   R   R   R   RÉ   t   mapt   ordt   ascii_letterst   digitsR   R   R9   R   R3   R6   R7   R<   R   R[   Rp   Rt   Rw   R{   R€   R   RŠ   R   t   setRœ   R¡   RË   Rð   R  RÐ   RÑ   RØ   R  (    (    (    s1   lib/python2.7/site-packages/llvmlite/ir/values.pyt   <module>   s@   +4		J7!,=8-X1-