o
    ÕtBhà  ã                   @  s¦   U d Z ddlmZ ddlmZ ddlmZ ddlmZm	Z	m
Z
mZmZmZmZmZ ddlmZ eeef ZeefZded< d dd„Zd!dd„Zd"dd„Zd#dd„ZdS )$zRConstant folding of IR values.

For example, 3 + 5 can be constant folded into 8.
é    )Úannotations)ÚUnion)ÚFinal)Ú
ExpressionÚIntExprÚ
MemberExprÚNameExprÚOpExprÚStrExprÚ	UnaryExprÚVar)Ú	IRBuilderr   ÚCONST_TYPESÚbuilderr   Úexprr   ÚreturnúConstantValue | Nonec           
      C  s6  t |tƒr|jS t |tƒr|jS t |tƒr,|j}t |tƒr*|jr*|j}t |t	ƒr*|S dS t |t
ƒrN|  |¡}|durL|\}}}|jrL|j}t |t	ƒrL|S dS t |tƒrƒt| |jƒ}t| |jƒ}	t |tƒrpt |	tƒrpt|j||	ƒS t |tƒrt |	tƒrt|j||	ƒS dS t |tƒr™t| |jƒ}t |tƒr™t|j|ƒS dS )zeReturn the constant value of an expression for supported operations.

    Return None otherwise.
    N)Ú
isinstancer   Úvaluer
   r   Únoder   Úis_finalÚfinal_valuer   r   Úget_final_refr	   Úconstant_fold_exprÚleftÚrightÚintÚconstant_fold_binary_int_opÚopÚstrÚconstant_fold_binary_str_opr   r   Úconstant_fold_unary_int_op)
r   r   r   r   ÚfinalÚfnÚ	final_varÚnativer   r   © r&   úr/var/www/html/riverr-enterprise-integrations-main/venv/lib/python3.10/site-packages/mypyc/irbuild/constant_fold.pyr      sB   




í



õ
ü
r   r   r   r   r   r   ú
int | Nonec                 C  sì   | dkr|| S | dkr|| S | dkr|| S | dkr&|dkr$|| S d S | dkr4|dkr2|| S d S | dkr<||@ S | dkrD||B S | d	krL||A S | d
krZ|dkrX||> S d S | dkrh|dkrf||? S d S | dkrt|dkrt|| S d S )Nú+ú-Ú*z//r   ú%ú&ú|ú^z<<z>>z**r&   ©r   r   r   r&   r&   r'   r   8   s@   îñúýr   r   c                 C  s,   | dkr| S | dkr| S | dkr|S d S )Nr*   ú~r)   r&   )r   r   r&   r&   r'   r!   W   s   r!   ú
str | Nonec                 C  s   | dkr|| S d S )Nr)   r&   r0   r&   r&   r'   r    a   s   r    N)r   r   r   r   r   r   )r   r   r   r   r   r   r   r(   )r   r   r   r   r   r(   )r   r   r   r   r   r   r   r2   )Ú__doc__Ú
__future__r   Útypingr   Útyping_extensionsr   Ú
mypy.nodesr   r   r   r   r	   r
   r   r   Úmypyc.irbuild.builderr   r   r   ÚConstantValuer   Ú__annotations__r   r   r!   r    r&   r&   r&   r'   Ú<module>   s    (

%

