o
    uJAf                     @  s   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
Zd dlZejr1ddlmZmZmZ d!ddZd"ddZd#ddZd$d%dd ZdS )&    )annotations   )mesonlibmparser   )InterpreterExceptionInvalidArguments)
UserOptionN)TYPE_varTYPE_kwargs
SubProjectargs'T.Union['TYPE_var', T.List['TYPE_var']]returnT.List['TYPE_var']c                 C  s   t | tjrt | jtsJ | jgS t | tjjs| gS g }| D ]"}t |tr0t	|}|| }q t |tjr=|
|j q |
| q |S )N)
isinstancer   BaseStringNodevaluestrcollectionsabcSequencelistflattenappend)r   resultarest r   G/usr/lib/python3.10/site-packages/mesonbuild/interpreterbase/helpers.pyr      s   

r   kwargs'TYPE_kwargs'*T.Tuple[T.List['TYPE_var'], 'TYPE_kwargs']c                   s6   d
 fdd  fdd| D  fdd	|  D fS )Narg
'TYPE_var'r   c                   sT   t | tr fdd| D S t | tr fdd|  D S t | tjr(|  S | S )Nc                      g | ]} |qS r   r   .0xresolverr   r   
<listcomp>/       zBresolve_second_level_holders.<locals>.resolver.<locals>.<listcomp>c                      i | ]	\}}| |qS r   r   r'   kvr)   r   r   
<dictcomp>1       zBresolve_second_level_holders.<locals>.resolver.<locals>.<dictcomp>)r   r   dictitemsr   SecondLevelHolderget_default_object)r#   r)   r   r   r*   -   s   

z.resolve_second_level_holders.<locals>.resolverc                   r%   r   r   r&   r)   r   r   r+   5   r,   z0resolve_second_level_holders.<locals>.<listcomp>c                   r-   r   r   r.   r)   r   r   r1   5   r2   z0resolve_second_level_holders.<locals>.<dictcomp>)r#   r$   r   r$   )r4   )r   r    r   r)   r   resolve_second_level_holders,   s   (r7   keymparser.BaseNoder   c                 C  s   t | tjs
td| jS )NzInvalid kwargs format.)r   r   IdNoder   r   )r8   r   r   r   default_resolve_key7   s   r;   Fr
   
subprojectr   quoteboolc                   s   t | tr|rd|  dS | S t | tr| rdS dS t | tr#t| S t | tr6dd fdd| D  S t | trM fdd|  D }d	d| S t | trfd
dl	m
} |dd  t|   S td)N'truefalsez[%s]z, c                   s   g | ]}t | d qS )T)stringifyUserArgumentsr&   r<   r   r   r+   D   s    z*stringifyUserArguments.<locals>.<listcomp>c              	     s,   g | ]\}}d  t| dt| dqS )z{} : {}T)formatrB   r.   rC   r   r   r+   F   s
    
z{%s}r   )
FeatureNewzUser option in string formatz1.3.0zSValue other than strings, integers, bools, options, dictionaries and lists thereof.)r   r   r>   intr   joinr3   r4   r	   
decoratorsrE   
single_userB   printable_valuer   )r   r<   r=   lrE   r   rC   r   rB   <   s$   






rB   )r   r   r   r   )r   r   r    r!   r   r"   )r8   r9   r   r   )F)r   r
   r<   r   r=   r>   r   r   )
__future__r    r   r   
exceptionsr   r   coredatar	   collections.abcr   typingTTYPE_CHECKINGbaseobjectsr
   r   r   r   r7   r;   rB   r   r   r   r   <module>   s   


