B
    Ꮚ\                 @   sp   d dl mZmZ 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 )    )print_functionabsolute_import)defaultdictc               @   s   e Zd ZdS )DuplicatedNameErrorN)__name__
__module____qualname__ r	   r	   1lib/python3.7/site-packages/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 )N)deduplicater   r   r   add)r   r   r   r	   r	   r
   register   s    
zNameScope.registerc             C   s<   |}x2|  |r6| j| d }|| j|< d||}qW |S )N   z{0}.{1})r   r   format)r   r   basenameZidentr	   r	   r
   r      s    
zNameScope.deduplicatec             C   s   t | | dS )N)parent)type)r   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"   y| ` W n tk
r   Y nX d S )N)_StrCaching__cached_strAttributeError)r   r	   r	   r
   _clear_string_cache(   s    z_StrCaching._clear_string_cachec             C   s.   y| j S  tk
r(   |   }| _ |S X d S )N)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   s.   y| j S  tk
r(   |   }| _ |S X d S )N)Z&_StringReferenceCaching__cached_refstrr    Z_get_reference)r   r"   r	   r	   r
   get_reference8   s
    z%_StringReferenceCaching.get_referenceN)r   r   r   r%   r	   r	   r	   r
   r$   6   s   r$   c               @   s   e Zd Zdd ZdddZdS )_HasMetadatac             C   s   || j |< dS )z[
        Attach unnamed metadata *node* to the metadata slot *name* of this value.
        N)metadata)r   r   Znoder	   r	   r
   set_metadataB   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>M   s   z4_HasMetadata._stringify_metadata.<locals>.<listcomp>z, )r'   appenditemsjoin)r   Zleading_commaZbufr	   r	   r
   _stringify_metadataH   s    

z _HasMetadata._stringify_metadataN)F)r   r   r   r(   r0   r	   r	   r	   r
   r&   @   s   r&   N)Z
__future__r   r   collectionsr   	NameErrorr   objectr   r   r$   r&   r	   r	   r	   r
   <module>   s   
