o
    uJAf}#                     @  s   d dl mZ d dlZd dlZd dlZ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mZmZ ejrCddlmZ ddlmZmZ G dd	 d	e	e ZG d
d deZG dd deZG dd deZG dd deZG dd deZG dd deZ dS )    )annotationsN   )version_compare)ObjectHolderMesonOperator
FeatureNewtyped_operatornoArgsFlatteningnoKwargs	noPosargstyped_pos_argsInvalidArgumentsFeatureBrokenstringifyUserArguments)Interpreter)TYPE_varTYPE_kwargsc                      s,  e Zd ZdW fddZdXd	d
ZeededYddZeededYddZ	eededYddZ
eeededdZddZeeeddd[d"d#Zeed$edd\d&d'Zeed(d)ed(eed]d+d,Zeed-egd.d^d0d1Zeed2egd.d_d3d4Zeed5d6ed5eegd.d`d8d9Zeedad;d<Zeedbd=d>Zeedbd?d@ZeedbdAdBZeedCedYdDdEZedcdHdIZedJdKeej edddLdMZ!eej"ededNdOZ#edPdQeej$edfdRdSZ%edTdQeej&edfdUdVZ'  Z(S )gStringHolderobjstrinterpreter'Interpreter'returnNonec                   s  t  ||  j j j j j j j	 j
 j j j j 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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!tj" j#tj$ j%i d S )
N)contains
startswithendswithformatjoinreplacesplit
splitlinesstripZ	substringto_intZto_lowerZto_upperZunderscorifyr   c                   s
    j |  S Nheld_objectxself M/usr/lib/python3.10/site-packages/mesonbuild/interpreter/primitives/string.py<lambda>6      
 z'StringHolder.__init__.<locals>.<lambda>c                   s
    j | kS r$   r%   r'   r)   r+   r,   r-   9   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contains_methodstartswith_methodendswith_methodformat_methodjoin_methodreplace_methodsplit_methodsplitlines_methodstrip_methodsubstring_methodto_int_methodto_lower_methodto_upper_methodunderscorify_methodversion_compare_methodtrivial_operatorsr   PLUSr   EQUALS
NOT_EQUALSGREATERLESSGREATER_EQUALSLESS_EQUALS	operatorsDIVop_divINDEXop_indexINop_inNOT_INop_notin)r*   r   r   	__class__r)   r,   r0       sB   
zStringHolder.__init__c                 C  s   dS )Nr   r+   r)   r+   r+   r,   display_nameI   s   zStringHolder.display_namezstr.containsargsT.Tuple[str]kwargsr   boolc                 C  s   | j |d dkS Nr   )r&   findr*   rV   rX   r+   r+   r,   r3   L   s   zStringHolder.contains_methodzstr.startswithc                 C     | j |d S rZ   )r&   r   r\   r+   r+   r,   r4   Q      zStringHolder.startswith_methodzstr.endswithc                 C  r]   rZ   )r&   r   r\   r+   r+   r,   r5   V   r^   zStringHolder.endswith_methodz
str.format)varargsT.Tuple[T.List[TYPE_var]]c                   s   g  |d D ]6}z  t|| j W q ty< } ztjdt| d| j| jd   t| W Y d }~qd }~ww d fd	d
}t	d|| j
S )Nr   zstr.format: z1.3.0locationmatchT.Match[str]r   r   c                   s2   t | d}|t krtd| d | S )N   zFormat placeholder @z@ out of range.)intgrouplenr   )rc   idxarg_stringsr+   r,   arg_replaceg   s   z/StringHolder.format_method.<locals>.arg_replacez@(\d+)@)rc   rd   r   r   )appendr   
subprojectr   r   
single_user   current_noderesubr&   )r*   rV   rX   argerl   r+   rj   r,   r6   [   s    zStringHolder.format_methodzstr.splitlinesz1.2.0T.List[TYPE_var]T.List[str]c                 C  
   | j  S r$   )r&   r!   r\   r+   r+   r,   r:   o   s   
zStringHolder.splitlines_methodzstr.joinT.Tuple[T.List[str]]c                 C  r]   rZ   )r&   r   r\   r+   r+   r,   r7   u   r^   zStringHolder.join_methodzstr.replacez0.58.0T.Tuple[str, str]c                 C  s   | j |d |d S Nr   re   )r&   r   r\   r+   r+   r,   r8   z   s   zStringHolder.replace_methodz	str.split)optargsT.Tuple[T.Optional[str]]c                 C  r]   rZ   )r&   r    r\   r+   r+   r,   r9      r^   zStringHolder.split_methodz	str.stripc                 C  s.   |d rt jdd| j| jd | j|d S )Nr   z$str.strip with a positional argumentz0.43.0ra   )r   ro   rn   rp   r&   r"   r\   r+   r+   r,   r;      s   zStringHolder.strip_methodzstr.substringz0.56.0)T.Tuple[T.Optional[int], T.Optional[int]]c                 C  sD   |d d ur
|d nd}|d d ur|d nt | j}| j|| S rz   )rh   r&   )r*   rV   rX   startendr+   r+   r,   r<      s   zStringHolder.substring_methodrf   c                 C  s.   zt | jW S  ty   td| jdw )NzString z cannot be converted to int)rf   r&   
ValueErrorr   r\   r+   r+   r,   r=      s
   zStringHolder.to_int_methodc                 C  rw   r$   )r&   lowerr\   r+   r+   r,   r>         
zStringHolder.to_lower_methodc                 C  rw   r$   )r&   upperr\   r+   r+   r,   r?      r   zStringHolder.to_upper_methodc                 C  s   t dd| jS )Nz[^a-zA-Z0-9]_)rq   rr   r&   r\   r+   r+   r,   r@      r^   z StringHolder.underscorify_methodstr.version_comparec                 C  s   t | j|d S rZ   )r   r&   r\   r+   r+   r,   rA      r^   z#StringHolder.version_compare_methodthisotherc                 C  s   t j| |ddS )N\/)ospathr   r   )r   r   r+   r+   r,   _op_div   s   zStringHolder._op_divz/ with string argumentsz0.49.0c                 C  s   |  | j|S r$   )r   r&   r*   r   r+   r+   r,   rL      s   zStringHolder.op_divc              	   C  s8   z| j | W S  ty   td| dt| j  dw )NzIndex z! out of bounds of string of size .)r&   
IndexErrorr   rh   r   r+   r+   r,   rN      s
   zStringHolder.op_indexz"in" string operatorz1.0.0c                 C  s
   || j v S r$   r%   r   r+   r+   r,   rP      r   zStringHolder.op_inz"not in" string operatorc                 C  s
   || j vS r$   r%   r   r+   r+   r,   rR      r   zStringHolder.op_notin)r   r   r   r   r   r   )r   r   rV   rW   rX   r   r   rY   )rV   r`   rX   r   r   r   )rV   ru   rX   r   r   rv   )rV   rx   rX   r   r   r   )rV   ry   rX   r   r   r   )rV   r|   rX   r   r   rv   )rV   r|   rX   r   r   r   )rV   r}   rX   r   r   r   )rV   ru   rX   r   r   rf   )rV   ru   rX   r   r   r   )r   r   r   r   r   r   )r   r   r   r   )r   rf   r   r   )r   r   r   rY   ))__name__
__module____qualname__r0   rU   r
   r   r   r3   r4   r5   r	   objectr6   r   r   r:   r7   r8   r9   r;   rf   r<   r=   r>   r?   r@   rA   staticmethodr   r   r   rK   rL   rM   rN   rO   rP   rQ   rR   __classcell__r+   r+   rS   r,   r      s    
)






r   c                   @     e Zd ZdS )MesonVersionStringNr   r   r   r+   r+   r+   r,   r          r   c                   @  s$   e Zd Zeededdd	Zd
S )MesonVersionStringHolderr   rV   rW   rX   r   r   rY   c                 C  s   |d | j _t| j|d S rZ   )r   tmp_meson_versionr   r&   r\   r+   r+   r,   rA      s   z/MesonVersionStringHolder.version_compare_methodNr   )r   r   r   r
   r   r   rA   r+   r+   r+   r,   r      s    r   c                   @  r   )DependencyVariableStringNr   r+   r+   r+   r,   r      r   r   c                      s   e Zd Zd fddZ  ZS )DependencyVariableStringHolderr   r   r   &T.Union[str, DependencyVariableString]c                   s    t  |}d|v r|S t|S )Nz..)r/   rL   r   )r*   r   retrS   r+   r,   rL      s   z%DependencyVariableStringHolder.op_div)r   r   r   r   )r   r   r   rL   r   r+   r+   rS   r,   r      s    r   c                   @  s*   e Zd ZU ded< dddZdd
dZdS )OptionStringr   optnamevaluenamer   'OptionString'c                 C  s   t | |}||_|S r$   )r   __new__r   )clsr   r   r   r+   r+   r,   r      s   zOptionString.__new__ry   c                 C  s   t | | jfS r$   )r   r   r)   r+   r+   r,   __getnewargs__   s   zOptionString.__getnewargs__N)r   r   r   r   r   r   )r   ry   )r   r   r   __annotations__r   r   r+   r+   r+   r,   r      s   
 
r   c                      s(   e Zd ZU ded< d	 fddZ  ZS )
OptionStringHolderr   r&   r   r   r   T.Union[str, OptionString]c                   s&   t  |}| | jj|}t||S r$   )r/   rL   r   r&   r   r   )r*   r   r   r   rS   r+   r,   rL      s   
zOptionStringHolder.op_div)r   r   r   r   )r   r   r   r   rL   r   r+   r+   rS   r,   r      s   
 r   )!
__future__r   rq   r   typingTmesonlibr   interpreterbaser   r   r   r   r	   r
   r   r   r   r   r   TYPE_CHECKINGr   r   r   r   r   r   r   r   r   r   r   r   r+   r+   r+   r,   <module>   s"   4 -