o
    @a                     @   sZ   d Z ddlmZ ddlmZ ddlZG dd dejZG dd deZ	G dd	 d	eZdS )
zC UsedDefChain build used-define chains analysis for each variable.     )ModuleAnalysisNc                       s$   e Zd Zdd Z fddZ  ZS )ExtendedDefUseChainsc                 C   s   d S N )selfnamenoder   r   @/usr/lib/python3/dist-packages/pythran/analyses/use_def_chain.pyunbound_identifier   s   z'ExtendedDefUseChains.unbound_identifierc                    s   t | | tt| |S r   )mdvisitsuperr   )r   r   	__class__r   r	   r      s   zExtendedDefUseChains.visit)__name__
__module____qualname__r
   r   __classcell__r   r   r   r	   r   	   s    r   c                       (   e Zd ZdZ fddZdd Z  ZS )UseDefChainsz=
    Build use-define chains analysis for each variable.
    c                    s   d | _ tt| t d S r   )resultr   r   __init__DefUseChainsr   r   r   r	   r      s   zUseDefChains.__init__c                 C   s   t | j}|j| _d S r   )benigetr   Zdef_use_chainsZchainsr   )r   r   Zudcr   r   r	   visit_Module   s   zUseDefChains.visit_Moduler   r   r   __doc__r   r   r   r   r   r   r	   r          r   c                       r   )r   zD
    Build define-use-define chains analysis for each variable.
    c                    s   d | _ tt|   d S r   )r   r   r   r   r   r   r   r	   r   *   s   zDefUseChains.__init__c                 C   s   t  }|| || _d S r   )r   r   r   )r   r   Zducr   r   r	   r   .   s   

zDefUseChains.visit_Moduler   r   r   r   r	   r   $   r   r   )
r   Zpythran.passmanagerr   Zpythran.metadataZmetadatar   r   r   r   r   r   r   r   r	   <module>   s    