o
    uJAf                     @  sz   d dl mZ ddlmZmZmZmZmZmZm	Z	m
Z
mZ d dlZejr1ddlmZ ddlmZmZ G dd dee ZdS )	    )annotations   )	FeatureBrokenInvalidArgumentsMesonOperatorObjectHolder	KwargInfonoKwargs	noPosargstyped_operatortyped_kwargsN)Interpreter)TYPE_varTYPE_kwargsc                      s   e Zd Zd' fddZd(d
dZd) fddZeed*ddZeed*ddZ	e
dededdded+d!d"Zeejed,d#d$Zeejed,d%d&Z  ZS )-IntegerHolderobjintinterpreter'Interpreter'returnNonec                   s  t  ||  j j j jd  jtj	d  fddftj
t fddftjt fddftjt fddftjt fddftjt fddftjt fd	dftjt fd
dftjt fddftjt fddfi
  jtj jtj ji d S )N)Zis_evenZis_odd	to_stringc                   s    j  S Nheld_objectxself N/usr/lib/python3.10/site-packages/mesonbuild/interpreter/primitives/integer.py<lambda>   s    z(IntegerHolder.__init__.<locals>.<lambda>c                   s
    j |  S r   r   r   r   r   r    r!         
 c                   s
    j |  S r   r   r   r   r   r    r!      r"   c                   s
    j |  S r   r   r   r   r   r    r!      r"   c                   s
    j | kS r   r   r   r   r   r    r!   "   r"   c                   s
    j | kS r   r   r   r   r   r    r!   #   r"   c                   s
    j | kS r   r   r   r   r   r    r!   $   r"   c                   s
    j | k S r   r   r   r   r   r    r!   %   r"   c                   s
    j | kS r   r   r   r   r   r    r!   &   r"   c                   s
    j | kS r   r   r   r   r   r    r!   '   r"   )super__init__methodsupdateis_even_methodis_odd_methodto_string_methodtrivial_operatorsr   UMINUSPLUSr   MINUSTIMESEQUALS
NOT_EQUALSGREATERLESSGREATER_EQUALSLESS_EQUALS	operatorsDIVop_divMODop_mod)r   r   r   	__class__r   r    r$      s,   
zIntegerHolder.__init__strc                 C  s   dS )Nr   r   r   r   r   r    display_name0   s   zIntegerHolder.display_nameoperatorr   otherr   c                   s0   t |trtjdd| jd| jd t ||S )Nzint operations with non-intz1.2.0zKIt is not commutative and only worked because of leaky Python abstractions.)location)
isinstanceboolr   
single_use
subprojectcurrent_noder#   operator_call)r   r>   r?   r:   r   r    rF   3   s   
zIntegerHolder.operator_callargsT.List[TYPE_var]kwargsr   rB   c                 C  s   | j d dkS N   r   r   r   rG   rI   r   r   r    r'   :      zIntegerHolder.is_even_methodc                 C  s   | j d dkS rJ   r   rL   r   r   r    r(   ?   rM   zIntegerHolder.is_odd_methodr   fillr   z1.3.0)defaultsinceT.Dict[str, T.Any]c                 C  s   t | j|d S )NrN   )r<   r   zfillrL   r   r   r    r)   D   s   zIntegerHolder.to_string_methodc                 C  s   |dkrt d| j| S Nr   zTried to divide by 0r   r   r   r?   r   r   r    r7   L      
zIntegerHolder.op_divc                 C  s   |dkrt d| j| S rS   rT   rU   r   r   r    r9   R   rV   zIntegerHolder.op_mod)r   r   r   r   r   r   )r   r<   )r>   r   r?   r   r   r   )rG   rH   rI   r   r   rB   )rG   rH   rI   rQ   r   r<   )r?   r   r   r   )__name__
__module____qualname__r$   r=   rF   r	   r
   r'   r(   r   r   r   r)   r   r   r6   r7   r8   r9   __classcell__r   r   r:   r    r      s(    


r   )
__future__r   interpreterbaser   r   r   r   r   r	   r
   r   r   typingTTYPE_CHECKINGr   r   r   r   r   r   r   r   r   r    <module>   s   ,