U
    +‰dÑ  ã                   @   s`   d dl mZ G dd„ deƒZG dd„ deƒZG dd„ deƒZG dd	„ d	eƒZG d
d„ deƒZdS )é    )Údefaultdictc                   @   s   e Zd ZdS )ÚDuplicatedNameErrorN)Ú__name__Ú
__module__Ú__qualname__© r   r   ú6/tmp/pip-unpacked-wheel-stw2luzp/llvmlite/ir/_utils.pyr      s   r   c                   @   s6   e Zd Zdd„ Zdd„ Zddd„Zdd	„ Zd
d„ ZdS )Ú	NameScopec                 C   s   t dgƒ| _ttƒ| _d S )NÚ )ÚsetÚ_usesetr   ÚintÚ_basenamemap©Úselfr   r   r   Ú__init__	   s    zNameScope.__init__c                 C   s
   || j kS ©N)r   )r   Únamer   r   r   Úis_used   s    zNameScope.is_usedFc                 C   s2   |r|   |¡}n|  |¡r"t|ƒ‚| j |¡ |S r   )Údeduplicater   r   r   Úadd)r   r   r   r   r   r   Úregister   s    
zNameScope.registerc                 C   s8   |}|   |¡r4| j| d }|| j|< d ||¡}q|S )Né   z{0}.{1})r   r   Úformat)r   r   ÚbasenameÚidentr   r   r   r      s    

zNameScope.deduplicatec                 C   s   t | ƒ| dS )N)Úparent)Útyper   r   r   r   Ú	get_child    s    zNameScope.get_childN)F)r   r   r   r   r   r   r   r   r   r   r   r   r	      s
   
r	   c                   @   s   e Zd Zdd„ Zdd„ ZdS )Ú_StrCachingc                 C   s"   z| ` W n tk
r   Y nX d S r   )Ú_StrCaching__cached_strÚAttributeErrorr   r   r   r   Ú_clear_string_cache&   s    z_StrCaching._clear_string_cachec                 C   s4   z| j W S  tk
r.   |  ¡  }| _ | Y S X d S r   )r    r!   Z
_to_string©r   Úsr   r   r   Ú__str__,   s
    z_StrCaching.__str__N)r   r   r   r"   r%   r   r   r   r   r   $   s   r   c                   @   s   e Zd Zdd„ ZdS )Ú_StringReferenceCachingc                 C   s4   z| j W S  tk
r.   |  ¡  }| _ | Y S X d S r   )Z&_StringReferenceCaching__cached_refstrr!   Z_get_referencer#   r   r   r   Úget_reference6   s
    z%_StringReferenceCaching.get_referenceN)r   r   r   r'   r   r   r   r   r&   4   s   r&   c                   @   s   e Zd Zdd„ Zddd„ZdS )Ú_HasMetadatac                 C   s   || j |< dS )zc
        Attach unnamed metadata *node* to the metadata slot *name* of this
        value.
        N)Úmetadata)r   r   Únoder   r   r   Úset_metadata@   s    z_HasMetadata.set_metadataFc                 C   sB   | j r:g }|r| d¡ |dd„ | j  ¡ D ƒ7 }d |¡S dS d S )Nr
   c                 S   s    g | ]\}}d   || ¡ ¡‘qS )z!{0} {1})r   r'   )Ú.0ÚkÚvr   r   r   Ú
<listcomp>L   s   ÿz4_HasMetadata._stringify_metadata.<locals>.<listcomp>z, )r)   ÚappendÚitemsÚjoin)r   Zleading_commaÚbufr   r   r   Ú_stringify_metadataG   s    
ÿ
z _HasMetadata._stringify_metadataN)F)r   r   r   r+   r4   r   r   r   r   r(   >   s   r(   N)	Úcollectionsr   Ú	NameErrorr   Úobjectr	   r   r&   r(   r   r   r   r   Ú<module>   s
   
