o
    uJAfO                     @  sn   d dl mZ ddlmZmZmZmZmZmZ d dl	Z
e
jr+ddlmZ ddlmZmZ G dd dee ZdS )	    )annotations   )ObjectHolderMesonOperatortyped_pos_argsnoKwargs	noPosargsInvalidArgumentsN)Interpreter)TYPE_varTYPE_kwargsc                      sX   e Zd Zd fddZdd
dZeedddZeede	e	gddddZ
  ZS )BooleanHolderobjboolinterpreter'Interpreter'returnNonec                   s|   t  ||  j j jd  jtjd  fddftj	d  fddftj
t fddftjt fddfi d S )N)Zto_intZ	to_stringc                   s    j S Nheld_objectxself N/usr/lib/python3.10/site-packages/mesonbuild/interpreter/primitives/boolean.py<lambda>   s    z(BooleanHolder.__init__.<locals>.<lambda>c                   s    j  S r   r   r   r   r   r   r       s    c                   s
    j | kS r   r   r   r   r   r   r   !      
 c                   s
    j | kS r   r   r   r   r   r   r   "   r   )super__init__methodsupdateto_int_methodto_string_methodtrivial_operatorsr   BOOLNOTEQUALSr   
NOT_EQUALS)r   r   r   	__class__r   r   r       s   
zBooleanHolder.__init__strc                 C  s   dS )Nr   r   r   r   r   r   display_name%   s   zBooleanHolder.display_nameargsT.List[TYPE_var]kwargsr   intc                 C  s   | j rdS dS )N   r   r   )r   r.   r0   r   r   r   r#   (   s   zBooleanHolder.to_int_methodzbool.to_string)optargs)T.Tuple[T.Optional[str], T.Optional[str]]c                 C  sR   |d pd}|d pd}t dd |D r"tdd |D s"td| jr'|S |S )Nr   truer2   falsec                 s  s    | ]}|d uV  qd S r   r   ).0r   r   r   r   	<genexpr>2   s    z1BooleanHolder.to_string_method.<locals>.<genexpr>zbool.to_string() must have either no arguments or exactly two string arguments that signify what values to return for true and false.)anyallr	   r   )r   r.   r0   Ztrue_strZ	false_strr   r   r   r$   -   s
   $zBooleanHolder.to_string_method)r   r   r   r   r   r   )r   r,   )r.   r/   r0   r   r   r1   )r.   r4   r0   r   r   r,   )__name__
__module____qualname__r    r-   r   r   r#   r   r,   r$   __classcell__r   r   r*   r   r      s    
r   )
__future__r   interpreterbaser   r   r   r   r   r	   typingTTYPE_CHECKINGr   r
   r   r   r   r   r   r   r   r   <module>   s    
