o
    uJAf                     @  s   d dl mZ d dlZddlmZmZmZmZm	Z	m
Z
mZmZmZmZmZ ddlmZ ejr9ddlmZ ddlmZ G dd	 d	eeje  eZdS )
    )annotationsN   )ObjectHolderIterableObjectMesonOperatortyped_operatornoKwargs	noPosargsnoArgsFlatteningtyped_pos_args
FeatureNewTYPE_varInvalidArguments)PlusAssignmentNode)Interpreter)TYPE_kwargsc                      s   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ee	e
ded.ddZe	ed/ddZee	e
deegdd0d"d#Zeejed1d%d&Zeejed2d'd(Z  ZS )3ArrayHolderobjT.List[TYPE_var]interpreter'Interpreter'returnNonec                   s   t  ||  j j j jd  j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)containslengthgetc                   s
    j | kS Nheld_objectxself L/usr/lib/python3.10/site-packages/mesonbuild/interpreter/primitives/array.py<lambda>'      
 z&ArrayHolder.__init__.<locals>.<lambda>c                   s
    j | kS r   r   r   r!   r#   r$   r%   (   r&   c                   s
   |  j v S r   r   r   r!   r#   r$   r%   )   r&   c                   s
   |  j vS r   r   r   r!   r#   r$   r%   *   r&   )super__init__methodsupdatecontains_methodlength_method
get_methodtrivial_operatorsr   EQUALSlist
NOT_EQUALSINobjectNOT_IN	operatorsPLUSop_plusINDEXop_index)r"   r   r   	__class__r!   r$   r(      s    
zArrayHolder.__init__strc                 C  s   dS )Narrayr#   r!   r#   r#   r$   display_name3      zArrayHolder.display_namec                 C  s   d S r   r#   r!   r#   r#   r$   iter_tuple_size6   r?   zArrayHolder.iter_tuple_sizeT.Iterator[TYPE_var]c                 C  
   t | jS r   )iterr   r!   r#   r#   r$   	iter_self9      
zArrayHolder.iter_selfintc                 C  rB   r   lenr   r!   r#   r#   r$   size<   rE   zArrayHolder.sizezarray.containsargsT.Tuple[object]kwargsr   boolc                   s   d fdd| j S )Nelr   r   rM   c                   s<   | D ]}t |tr|}|r dS | d kr dS qdS )NTr   F)
isinstancer0   )rN   elementfoundrJ   check_containsr#   r$   rS   C   s   
z3ArrayHolder.contains_method.<locals>.check_contains)rN   r   r   rM   r   r"   rJ   rL   r#   rR   r$   r+   ?   s   
	zArrayHolder.contains_methodc                 C  rB   r   rG   rT   r#   r#   r$   r,   N   s   
zArrayHolder.length_methodz	array.get)optargs"T.Tuple[int, T.Optional[TYPE_var]]r   c                 C  s`   |d }|t | j k s|t | jkr+|d d u r'td| dt | j d|d S | j| S )Nr      zArray index z$ is out of bounds for array of size .)rH   r   r   )r"   rJ   rL   indexr#   r#   r$   r-   S   s   
zArrayHolder.get_methodotherc                 C  s>   t |tst | jtstjdd| jd| jd |g}| j| S )Nzlist.<plus>z0.60.0z&The right hand operand was not a list.)location)rO   r0   current_noder   r   
single_use
subprojectr   r"   rZ   r#   r#   r$   r7   ^   s   

zArrayHolder.op_plusc              	   C  s8   z| j | W S  ty   td| dt| j  dw )NzIndex z  out of bounds of array of size rX   )r   
IndexErrorr   rH   r_   r#   r#   r$   r9   g   s
   zArrayHolder.op_index)r   r   r   r   r   r   )r   r<   )r   r   )r   rA   )r   rF   )rJ   rK   rL   r   r   rM   )rJ   r   rL   r   r   rF   )rJ   rV   rL   r   r   r   )rZ   r   r   r   )rZ   rF   r   r   )__name__
__module____qualname__r(   r>   r@   rD   rI   r
   r   r   r3   r+   r	   r,   rF   r-   r   r   r6   r7   r8   r9   __classcell__r#   r#   r:   r$   r      s*    





r   )
__future__r   typingTinterpreterbaser   r   r   r   r   r	   r
   r   r   r   r   mparserr   TYPE_CHECKINGr   r   r   Listr   r#   r#   r#   r$   <module>   s   4 