o
    í@ËaÅ  ã                   @   s„   d 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d„ Zdd„ Z	dd„ Z
dd„ ZdS )z¹
This module provides a way to pass information between passes as metadata.

* add attaches a metadata to a node
* get retrieves all metadata from a particular class attached to a node
é    )ÚASTc                       s0   e Zd ZdZ‡ fdd„Zdd„ Zdd„ Z‡  ZS )ÚMetadatazE Base class to add information on a node to improve code generation. c                    s    t ƒ | _d| _tt| ƒ ¡  dS )z' Initialize content of these metadata. )ÚdataN)Úlistr   Ú_fieldsÚsuperr   Ú__init__©Úself©Ú	__class__© ú2/usr/lib/python3/dist-packages/pythran/metadata.pyr      s   zMetadata.__init__c                 C   s
   t | jƒS )z4 Enable iteration over every metadata informations. )Úiterr   r	   r   r   r   Ú__iter__   s   
zMetadata.__iter__c                 C   s   | j  |¡ dS )z Add a metadata information. N)r   Úappend)r
   r   r   r   r   r      s   zMetadata.append)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   Ú__classcell__r   r   r   r   r      s
    r   c                   @   ó   e Zd ZdZdS )ÚLazyzC Metadata to mark variable which doesn't need to be evaluated now. N©r   r   r   r   r   r   r   r   r      ó    r   c                       s   e Zd Z‡ fdd„Z‡  ZS )ÚComprehensionc                    s$   t t| ƒ ¡  |r|d | _d S d S )Nr   )r   r   r   Útarget)r
   Úargsr   r   r   r   $   s   ÿzComprehension.__init__)r   r   r   r   r   r   r   r   r   r   #   s    r   c                   @   r   )ÚStaticReturnz0 Metadata to mark return with a constant value. Nr   r   r   r   r   r   *   r   r   c                   @   r   )ÚLocalz, Metadata to mark function as non exported. Nr   r   r   r   r   r   /   s    r   c                 C   s0   t | dƒstƒ | _|  jd7  _| j |¡ d S )NÚmetadata)r    )Úhasattrr   r    r   r   )Únoder   r   r   r   Úadd3   s   
r#   c                    s"   t | dƒr‡ fdd„| jD ƒS g S )Nr    c                    s   g | ]	}t |ˆ ƒr|‘qS r   ©Ú
isinstance©Ú.0Ús©Úclass_r   r   Ú
<listcomp><   s    zget.<locals>.<listcomp>)r!   r    ©r"   r*   r   r)   r   Úget:   s   
r-   c                    s\   t | dƒr*‡ fdd„| jD ƒ| j_| jjs,| `| jd dks J ‚| jd d… | _d S d S d S )Nr    c                    s   g | ]	}t |ˆ ƒs|‘qS r   r$   r&   r)   r   r   r+   C   s    
ÿzclear.<locals>.<listcomp>éÿÿÿÿ)r!   r    r   r   r,   r   r)   r   ÚclearA   s   
úr/   c                 C   s   t |dƒr|  |j¡ d S d S )Nr    )r!   Úvisitr    )r
   r"   r   r   r   r0   K   s   
ÿr0   N)r   Zgastr   r   r   r   r   r   r#   r-   r/   r0   r   r   r   r   Ú<module>   s    
