
    ee                        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j6                  ddd      Z G d dee         Z ej6                  dej<                  dej>                  f         Z ejB                  e"e#e$ejJ                  ej>                     ejL                  e"ej>                  f   f   Z'ejB                  e'edf   Z(ejB                  e(ejR                  f   Z*ejL                  e"e(f   Z+ejL                  e"e*f   Z,ej<                  ejR                  ge"f   Z- ej\                  de"      Z/ G d d      Z0 G d de0      Z1 G d d      Z2ee#e$e"e3e4fZ5ejB                  e'ef   Z6 ej6                  de6      Z7 G d d e0ejp                  e7         Z9 G d! d"e#      Z: G d$ d%e1e      Z;y	)&    )annotations   )mparser   )InvalidCodeInvalidArguments)flattenresolve_second_level_holders)MesonOperator)HoldableObjectMesonBugExceptionN)ABCMeta)AbstractContextManager)Protocol)Interpreter__TTYPE_varT)boundcontravariantc                      e Zd ZddZy)OperatorCallc                     y N selfothers     H/usr/lib/python3/dist-packages/mesonbuild/interpreterbase/baseobjects.py__call__zOperatorCall.__call__$   s        N)r   r   returnz
'TYPE_var')__name__
__module____qualname__r   r   r    r   r   r   #   s    9r    r   TV_func.)r   MesonInterpreterObject
SubProjectc                  Z    e Zd Zddd
dZddZ	 	 	 	 	 	 	 	 ddZddZddZddZdd	Z	y)InterpreterObjectN
subprojectc                  i | _         i | _        i | _        d | _        |xs t	        d      | _        | j                  j                  t        j                  | j                  t        j                  | j                  i       y )N )methods	operatorstrivial_operatorscurrent_noder'   r+   updater   EQUALS	op_equals
NOT_EQUALSop_not_equals)r   r+   s     r   __init__zInterpreterObject.__init__3   sy      	 AC  	 04$6
2 	  $..$$d&8&8
 	r    c                ,    t        |       j                  S r   )typer"   r   s    r   display_namezInterpreterObject.display_nameL   s    Dz"""r    c           
        || j                   v rL| 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   r9   r"   )r   method_nameargskwargsmethods        r   method_callzInterpreterObject.method_callO   s     $,,&\\+.F6#7?t}6#FN;D&If$'',[MdV9UYZ^U_UhUhTiijkllr    c                2   || j                   v r| j                   |   }|d   D|Bt        d|j                   d| j                          d| dt	        |      j
                         |d   Rt        ||d         sCt        d|j                   d| j                          dt	        |      j
                   d	| d
	       |d   |      S || j                  v r | j                  |   |      S t        d|  d| j                          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.)
r0   r   valuer;   r9   r"   
isinstancer   r/   r   )r   operatorr   ops       r   operator_callzInterpreterObject.operator_call^   s   t---''1B!u}!2'*>x~~>NeTXTeTeTgShh  AF  @G  GP  QU  V[  Q\  Qe  Qe  Pf  )g  h  h!u E2a5)A&x~~.>nTM^M^M`La  bC  DH  IN  DO  DX  DX  CY  Y[  \a  [b  bc  (d  e  e2a5<t~~%+4>>(+E22GD643D3D3F2GG^_g_m_m^nnyz{{r    c                    t        t        j                  d| j                          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dedentr;   r9   r"   )r   r   opt_types      r   _throw_comp_exceptionz'InterpreterObject._throw_comp_exceptionk   sW    x>>B>O>O>Q=RRTUYZ_U`UiUiTjjrs{r| } 
  	r    c                \    t        |       t        |      ur| j                  |d       | |k(  S Nz==r9   rP   r   s     r   r4   zInterpreterObject.op_equalss   s.     :T%[(&&ud3u}r    c                \    t        |       t        |      ur| j                  |d       | |k7  S Nz!=rS   r   s     r   r6   zInterpreterObject.op_not_equals{   s,    :T%[(&&ud3u}r    )r+   zT.Optional['SubProject']r!   Noner!   str)r@   rX   rA   zT.List[TYPE_var]rB   TYPE_kwargsr!   r   )rI   r   r   r   r!   r   )r   r   rO   rX   r!   z
T.NoReturnr   r   r!   bool)
r"   r#   r$   r7   r;   rD   rK   rP   r4   r6   r   r    r   r)   r)   2   sT    AE 2#m m 'm $	m
 m
|r    r)   c                      e Zd ZdZy)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&      s    Yr    c                      e Zd ZdZy)MutableInterpreterObjectz0 Dummy class to mark the object type as mutable Nr]   r   r    r   r`   r`      s    :r    r`   InterpreterObjectTypeVarc                  @     e Zd Zd fdZddZddZddZddZ xZS )	ObjectHolderc                   t         |   |j                         t        j                  s5t        |t              s%J dt        |      j                   dt         d       || _	        || _
        | j                  j                  | _        y )Nr*   z.This is a bug: Trying to hold object of type `z` that is not in ``)superr7   r+   TTYPE_CHECKINGrH   HoldableTypesr9   r"   held_objectinterpreterenvironmentenv)r   objrk   	__class__s      r   r7   zObjectHolder.__init__   s    K$:$:; c=1  [5cdhildmdvdvcw  xJ  KX  JY  YZ  4[  [1&##//r    c                @    t        | j                        j                  S r   )r9   rj   r"   r:   s    r   r;   zObjectHolder.display_name   s    D$$%...r    c                    t        | j                        t        |      ur| j                  |d       | j                  |k(  S rR   r9   rj   rP   r   s     r   r4   zObjectHolder.op_equals   s:      !e4&&ud35((r    c                    t        | j                        t        |      ur| j                  |d       | j                  |k7  S rU   rr   r   s     r   r6   zObjectHolder.op_not_equals   s:      !e4&&ud35((r    c                    dt        |       j                   dt        | j                        j                   d| j                  dS )Nz<[z	] holds [z]: >)r9   r"   rj   r:   s    r   __repr__zObjectHolder.__repr__   sD    DJ''(	$t7G7G2H2Q2Q1RRUVZVfVfUiijkkr    )rn   ra   rk   z'Interpreter'r!   rV   rW   rZ   )	r"   r#   r$   r7   r;   r4   r6   rv   __classcell__ro   s   @r   rc   rc      s    	0/))
lr    rc   c                  (    e Zd ZdZddZddZddZy)	IterableObjectzFBase class for all objects that can be iterated over in a foreach loopc                F    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   ro   r"   r:   s    r   iter_tuple_sizezIterableObject.iter_tuple_size   s     "Ft~~G^G^F_ `aar    c                F    t        d| j                  j                         )Nziter not implemented for r|   r:   s    r   	iter_selfzIterableObject.iter_self        ";DNN<S<S;T UVVr    c                F    t        d| j                  j                         )Nzsize not implemented for r|   r:   s    r   sizezIterableObject.size   r   r    N)r!   zT.Optional[int])r!   z5T.Iterator[T.Union[TYPE_var, T.Tuple[TYPE_var, ...]]])r!   int)r"   r#   r$   r^   r}   r   r   r   r    r   rz   rz      s    PbWWr    rz   )	metaclassc                        e Zd Zd fdZ xZS )ContextManagerObjectc                &    t         |   |       y )Nr*   )rf   r7   )r   r+   ro   s     r   r7   zContextManagerObject.__init__   s    J/r    )r+   z'SubProject'r!   rV   )r"   r#   r$   r7   rw   rx   s   @r   r   r      s    0 0r    r   )<
__future__r   r-   r   
exceptionsr   r   helpersr	   r
   rI   r   mesonlibr   r   rM   typingrg   abcr   
contextlibr   rh   typing_extensionsr   rk   r   TypeVarr   r   CallableAnyr%   UnionrX   r   r[   ListDictTYPE_elementaryr   BaseNode	TYPE_nvarrY   TYPE_nkwargsTYPE_key_resolverNewTyper'   r)   r&   r`   listdictri   TYPE_HoldableTypesra   Genericrc   rz   r   r   r    r   <module>r      s   #  5 : # 8    -??* *
!))E4
@C:x} : !))IQZZQUU
%;
<''#sD!&&-QUU
9KKL77?N4LLMGGHg.../	ffS(]#vvc9n%JJ 0 01367 QYY|S)
L L\Z. Z; ;  dCt<WW_n<= $199%?GYZ l$aii0H&I l>Ww W013I 0r    