o
    uJAfe                      @  s  d dl mZ ddlmZ ddlmZmZ ddlmZm	Z	 ddl
mZ ddlmZmZ d d	lZd d	lZd d
lmZ d dlmZ ejr_d dlmZ ddlmZ ejddddZG dd dee Zejdejdejf dZ ej!e"e#e$ej%ej ej&e"ejf f Z'ej!e'edf Z(ej!e(ej)f Z*ej&e"e(f Z+ej&e"e*f Z,ejej)ge"f Z-e.de"Z/G dd dZ0G dd de0Z1G dd dZ2ee#e$e"e3e4fZ5ej!e'ef Z6ejde6dZ7G dd  d e0ej8e7 Z9G d!d" d"ed#Z:G d$d% d%e1eZ;d	S )&    )annotations   )mparser   )InvalidCodeInvalidArguments)flattenresolve_second_level_holders)MesonOperator)HoldableObjectMesonBugExceptionN)ABCMeta)AbstractContextManager)Protocol)Interpreter__TTYPE_varT)boundcontravariantc                   @  s   e Zd ZdddZdS )	OperatorCallotherr   return
'TYPE_var'c                 C  s   d S N selfr   r   r   K/usr/lib/python3.10/site-packages/mesonbuild/interpreterbase/baseobjects.py__call__$   s    zOperatorCall.__call__N)r   r   r   r   )__name__
__module____qualname__r   r   r   r   r   r   #   s    r   TV_func.)r   MesonInterpreterObject
SubProjectc                   @  sX   e Zd Zddd"ddZd#d
dZd$ddZd%ddZd&ddZd'ddZd'd d!Z	dS )(InterpreterObjectN
subprojectr'   T.Optional['SubProject']r   Nonec                C  sF   i | _ i | _i | _d | _|ptd| _| jtj| j	tj
| ji d S )N )methods	operatorstrivial_operatorsZcurrent_noder$   r'   updater
   ZEQUALS	op_equalsZ
NOT_EQUALSop_not_equalsr   r'   r   r   r   __init__3   s   	
zInterpreterObject.__init__strc                 C  s
   t | jS r   )typer   r   r   r   r   display_nameL   s   
zInterpreterObject.display_namemethod_nameargsT.List[TYPE_var]kwargsTYPE_kwargsr   c                 C  sn   || j v r&| j | }t|ddst|}t|dds!t||\}}|||S td| d|  dt| j d)Nzno-args-flatteningFz!no-second-level-holder-flatteningzUnknown method "z" in object 	 of type .)r+   getattrr   r	   r   r4   r   )r   r7   r8   r:   methodr   r   r   method_callO   s   


"zInterpreterObject.method_calloperatorr
   r   c              
   C  s   || j v rT| j | }|d d u r*|d ur*td|j d|   d| dt|j |d d urNt||d sNtd|j d|   dt|j d	| d
	|d |S || jv r`| j| |S t	d|  d|   d|j d)Nr   zThe unary operator `z` of z was passed the object r<   zThe `z` operator of z! does not accept objects of type z ()r   zObject z does not support the `z` operator.)
r-   r   valuer6   r4   r   
isinstancer   r,   r   )r   rA   r   opr   r   r   operator_call^   s   

,.
"zInterpreterObject.operator_callopt_type
T.NoReturnc              
   C  s,   t td|   dt|j d| d)Nz>
                Trying to compare values of different types (z, z) using zv.
                This was deprecated and undefined behavior previously and is as of 0.60.0 a hard error.
            )r   textwrapdedentr6   r4   r   )r   r   rG   r   r   r   _throw_comp_exceptionk   s   z'InterpreterObject._throw_comp_exceptionboolc                 C  s$   t | t |ur| |d | |kS Nz==r4   rK   r   r   r   r   r/   s   s   zInterpreterObject.op_equalsc                 C  s$   t | t |ur| |d | |kS Nz!=rN   r   r   r   r   r0   {   s   zInterpreterObject.op_not_equals)r'   r(   r   r)   r   r3   )r7   r3   r8   r9   r:   r;   r   r   )rA   r
   r   r   r   r   )r   r   rG   r3   r   rH   r   r   r   rL   )
r   r    r!   r2   r6   r@   rF   rK   r/   r0   r   r   r   r   r%   2   s    




r%   c                   @     e Zd ZdZdS )r#   zO All non-elementary objects and non-object-holders should be derived from this Nr   r    r!   __doc__r   r   r   r   r#          c                   @  rR   )MutableInterpreterObjectz0 Dummy class to mark the object type as mutable NrS   r   r   r   r   rV      rU   rV   InterpreterObjectTypeVarc                      sF   e Zd Zd fddZdd
dZdddZdddZdddZ  ZS )ObjectHolderobjrW   interpreter'Interpreter'r   r)   c                   sV   t  j|jd tjst|tsJ dt|j dt d|| _	|| _
| j
j| _d S )Nr&   z.This is a bug: Trying to hold object of type `z` that is not in ``)superr2   r'   TTYPE_CHECKINGrD   HoldableTypesr4   r   held_objectrZ   environmentenv)r   rY   rZ   	__class__r   r   r2      s   &zObjectHolder.__init__r3   c                 C  s   t | jjS r   )r4   ra   r   r5   r   r   r   r6      s   zObjectHolder.display_namer   r   rL   c                 C  s(   t | jt |ur| |d | j|kS rM   r4   ra   rK   r   r   r   r   r/      s   
zObjectHolder.op_equalsc                 C  s(   t | jt |ur| |d | j|kS rO   rf   r   r   r   r   r0      s   
zObjectHolder.op_not_equalsc                 C  s(   dt | j dt | jj d| jdS )Nz<[z	] holds [z]: >)r4   r   ra   r5   r   r   r   __repr__   s   (zObjectHolder.__repr__)rY   rW   rZ   r[   r   r)   rP   rQ   )	r   r    r!   r2   r6   r/   r0   rh   __classcell__r   r   rd   r   rX      s    


rX   c                   @  s.   e Zd ZdZdddZdddZdd
dZdS )IterableObjectzFBase class for all objects that can be iterated over in a foreach loopr   T.Optional[int]c                 C     t d| jj )zaReturn the size of the tuple for each iteration. Returns None if only a single value is returned.z$iter_tuple_size not implemented for r   re   r   r5   r   r   r   iter_tuple_size   s   zIterableObject.iter_tuple_size5T.Iterator[T.Union[TYPE_var, T.Tuple[TYPE_var, ...]]]c                 C  rl   )Nziter not implemented for rm   r5   r   r   r   	iter_self      zIterableObject.iter_selfintc                 C  rl   )Nzsize not implemented for rm   r5   r   r   r   size   rq   zIterableObject.sizeN)r   rk   )r   ro   )r   rr   )r   r    r!   rT   rn   rp   rs   r   r   r   r   rj      s
    

rj   )	metaclassc                      s   e Zd Zd fddZ  ZS )ContextManagerObjectr'   'SubProject'r   r)   c                   s   t  j|d d S )Nr&   )r]   r2   r1   rd   r   r   r2      rq   zContextManagerObject.__init__)r'   rv   r   r)   )r   r    r!   r2   ri   r   r   rd   r   ru      s    ru   )<
__future__r   r*   r   
exceptionsr   r   helpersr   r	   rA   r
   mesonlibr   r   rI   typingr^   abcr   
contextlibr   r_   typing_extensionsr   rZ   r   TypeVarr   r   CallableAnyr"   Unionr3   rr   rL   ListDictTYPE_elementaryr   BaseNode	TYPE_nvarr;   TYPE_nkwargsTYPE_key_resolverNewTyper$   r%   r#   rV   listdictr`   TYPE_HoldableTypesrW   GenericrX   rj   ru   r   r   r   r   <module>   s@   (N