U
    ?h                     @   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   D/var/www/html/venv/lib/python3.8/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 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
   
