o
    í@Ëa9  ã                   @   s4   d Z ddlmZ G dd„ deƒZG dd„ deƒZdS )zD StaticExpressions gathers constant expression that involve types.  é    )ÚNodeAnalysisc                       s$   e Zd Z‡ fdd„Zdd„ Z‡  ZS )ÚHasStaticExpressionc                    s   d| _ tt| ƒ ¡  d S ©NF)ÚresultÚsuperr   Ú__init__©Úself©Ú	__class__© úE/usr/lib/python3/dist-packages/pythran/analyses/static_expressions.pyr      s   zHasStaticExpression.__init__c                 C   s"   |   |¡ |  j|jdkO  _d S )NÚis_none)Zgeneric_visitr   Úattr©r	   Znoder   r   r   Úvisit_Attribute   s   
z#HasStaticExpression.visit_Attribute)Ú__name__Ú
__module__Ú__qualname__r   r   Ú__classcell__r   r   r
   r   r      s    r   c                       s˜   e Zd ZdZ‡ fdd„Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ ZeZeZeZeZeZeZeZeZ‡  ZS )ÚStaticExpressionszIdentify constant expressions.c                    s"   t ƒ | _t ƒ | _tt| ƒ ¡  d S ©N)Úsetr   Úconstant_expressionsr   r   r   r   r
   r   r   r      s   zStaticExpressions.__init__c                 C   s   | j  |¡ dS )NT)r   Úaddr   r   r   r   r      s   zStaticExpressions.addc                 C   s   dS r   r   )r	   Ú_r   r   r   Únot_add   s   zStaticExpressions.not_addc                 G   sL   t |ƒdks
J dƒ‚d}d}|D ]}|  |¡rd}q||| jv M }q|o%|S )Né   zat least two argumentsFT)ÚlenÚvisitr   )r	   ÚargsZstaticÚconstÚvaluer   r   r   Ú	match_all    s   
zStaticExpressions.match_allc                 C   s   | j |jŽ o
|  |¡S r   )r#   Úvaluesr   r   r   r   r   Úvisit_BoolOp+   ó   zStaticExpressions.visit_BoolOpc                 C   s   |   |j|j¡o|  |¡S r   )r#   ÚleftÚrightr   r   r   r   r   Úvisit_BinOp.   s   zStaticExpressions.visit_BinOpc                 C   ó   |   |j¡o
|  |¡S r   )r   Úoperandr   r   r   r   r   Úvisit_UnaryOp1   r&   zStaticExpressions.visit_UnaryOpc                 C   s   |   |j|j|j¡o|  |¡S r   )r#   ÚtestÚbodyÚorelser   r   r   r   r   Úvisit_IfExp4   s   ÿzStaticExpressions.visit_IfExpc                 C   s    | j |jg|j¢R Ž o|  |¡S r   )r#   r'   Úcomparatorsr   r   r   r   r   Úvisit_Compare8   s    zStaticExpressions.visit_Comparec                 C   r*   r   )r   Úfuncr   r   r   r   r   Ú
visit_Call;   r&   zStaticExpressions.visit_Callc                 C   s
   |j dv S )N)r   Ú
isinstance)r   r   r   r   r   r   >   s   
z!StaticExpressions.visit_Attributec                 C   s   | j  |¡ d S r   )r   r   r   r   r   r   Úvisit_ConstantA   s   z StaticExpressions.visit_Constant)r   r   r   Ú__doc__r   r   r   r#   r%   r)   r,   r0   r2   r4   r   r6   Zvisit_SubscriptZ
visit_NameZ
visit_DictZ
visit_ListZvisit_TupleZ	visit_SetZvisit_SliceZvisit_Indexr   r   r   r
   r   r      s,    r   N)r7   Zpythran.passmanagerr   r   r   r   r   r   r   Ú<module>   s    
