o
    í@ËaÛ  ã                   @   s,   d Z ddlmZ ddlZG dd„ deƒZdS )zC Gathers variables that have value modification in the given node. é    )ÚNodeAnalysisNc                       s0   e Zd ZdZ‡ fdd„Zdd„ Zdd„ Z‡  ZS )Ú
IsAssignedz±
    Gather variable that change in given node.

    It doesn't check constness as it is use for integer so we don't care about
    arguments effects as it is use by value.
    c                    s   t ƒ | _tt| ƒ ¡  dS )z Basic initialiser. N)ÚlistÚresultÚsuperr   Ú__init__)Úself©Ú	__class__© ú>/usr/lib/python3/dist-packages/pythran/analyses/is_assigned.pyr      s   zIsAssigned.__init__c                 C   s"   t |jtjƒr| j |¡ dS dS )z! Stored variable have new value. N)Ú
isinstanceÚctxÚastÚStorer   Úappend©r   Znoder   r   r   Ú
visit_Name   s   ÿzIsAssigned.visit_Namec                    s,   t |jtjƒr‡ ‡fdd„‰ ˆ |ƒ d S d S )Nc                    sD   t | tjƒrˆj | ¡ d S t | tjƒr| jD ]}ˆ |ƒ qd S d S )N)r   r   ÚNamer   r   ZTupleÚelts)ÚnÚelt©Úrecr   r   r   r      s   

þz#IsAssigned.visit_Tuple.<locals>.rec)r   r   r   r   r   r   r   r   Úvisit_Tuple   s   øzIsAssigned.visit_Tuple)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   Ú__classcell__r   r   r	   r   r      s
    r   )r   Zpythran.passmanagerr   Zgastr   r   r   r   r   r   Ú<module>   s    