o
    ldFH                     @  s  d dl mZ d dlZd dlZd dlZddlmZmZ ddlm	Z	 ddl
mZmZmZmZmZmZ ddlmZmZmZmZ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!m"Z" ej#rd	d
l$m%Z% ddlm&Z& ddl
m'Z'm(Z( ddlm)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/ G dd deZ0G dd deZ1G dd deZ2G dd deZ3G dd deZ4G dd deZ5d Z6d	Z7e8dZ9e8dZ:G dd deZ;dS )    )annotationsN   )mparsermesonlib)environment)MesonInterpreterObjectInterpreterBaseInvalidArgumentsBreakRequestContinueRequestdefault_resolve_key)StringHolderBooleanHolderIntegerHolderArrayHolder
DictHolder)ArgumentNodeArithmeticNode	ArrayNodeAssignmentNodeBaseNodeElementaryNode	EmptyNodeIdNode
MethodNodeNotNodePlusAssignmentNodeTernaryNode   )
AstVisitor)Interpreter)TYPE_nkwargs	TYPE_nvar)AndNodeComparisonNodeForeachClauseNodeIfClauseNode	IndexNodeOrNode
UMinusNodec                   @     e Zd ZdS )DontCareObjectN__name__
__module____qualname__ r0   r0   yhome/ych/rk3568/buildroot/output/rockchip_rk3568_recovery/host/lib/python3.10/site-packages/mesonbuild/ast/interpreter.pyr+   H       r+   c                   @  r*   )MockExecutableNr,   r0   r0   r0   r1   r3   K   r2   r3   c                   @  r*   )MockStaticLibraryNr,   r0   r0   r0   r1   r4   N   r2   r4   c                   @  r*   )MockSharedLibraryNr,   r0   r0   r0   r1   r5   Q   r2   r5   c                   @  r*   )MockCustomTargetNr,   r0   r0   r0   r1   r6   T   r2   r6   c                   @  r*   )MockRunTargetNr,   r0   r0   r0   r1   r7   W   r2   r7   _T_Vc                      s>  e Zd Zdodp fdd	ZdqddZdrddZdsddZdt fddZdudd Zdvd!d"Z	dwd$d%Z
dxd)d*Zdyd-d.Zdzd0d1Zd{d3d4Zd|d7d8Zd}d:d;Zd~d=d>Zdd@dAZedfddHdIZddKdLZddNdOZddQdRZddTdUZddWdXZddZd[Zdd]d^Zdd`daZdddgdhZdddkdlZdddmdnZ  Z S )AstInterpreterNsource_rootstrsubdir
subprojectvisitorsT.Optional[T.List[AstVisitor]]c                   s  t  ||| |d ur|ng | _t | _i | _i | _i | _| j	i d| j
d| j
d| j
d| j
d| j
d| j
d| j
d| j
d	| j
d
| j
d| j
d| j
d| j
d| j
d| j
d| j
d| j
i d| j
d| j
d| j
d| j
d| j
d| j
d| j
d| j
d| j
d| j
d| j
d| j
d| j
d| j
d | j
d!| j
d"| j
i d#| j
d$| j
d%| j
d&| j
d'| j
d(| j
d)| jd*| j
d+| j
d,| j
d-| j
d.| j
d/| j
d0| j
d1| j
d2| j
d3| j
| j
| j
| j
| j
| j
| j
| j
| j
| j
| j
d4
 d S )5Nprojecttest	benchmarkinstall_headersZinstall_maninstall_dataZinstall_subdirZinstall_symlinkZinstall_emptydirZconfiguration_dataZconfigure_fileZfind_programZinclude_directoriesZadd_global_argumentsZadd_global_link_argumentsZadd_project_argumentsZadd_project_dependenciesZadd_project_link_argumentsmessage	generatorerrorrun_commandassertr>   Z
dependencyZ
get_optionZ
join_pathsr   importZvcs_tagZadd_languagesZdeclare_dependencyfiles
executableZstatic_libraryshared_libraryZlibraryZbuild_targetZcustom_targetZ
run_targetr=   Zset_variableget_variableZunset_variableZis_disablerZis_variableZdisablergettextZjarwarningZshared_module)
optionZboth_librariesZadd_test_setupZfind_libraryZsubdir_doneZalias_targetsummaryrangeZstructured_sourcesdebug)super__init__r?   setprocessed_buildfilesassignmentsassign_valsreverse_assignmentfuncsupdatefunc_do_nothingfunc_subdir)selfr;   r=   r>   r?   	__class__r0   r1   rW   a   s   	
 !"#$%&'()*+,-./0123zAstInterpreter.__init__argsr8   kwargsr9   returnT.Tuple[_T, _V]c                 C  s   ||fS Nr0   )ra   rd   re   r0   r0   r1   _unholder_args   s   zAstInterpreter._unholder_argsresc                 C  s   |S rh   r0   )ra   rj   r0   r0   r1   
_holderify      zAstInterpreter._holderifynoder   T.List[TYPE_nvar]T.Dict[str, TYPE_nvar]boolc                 C     dS NTr0   )ra   rm   rd   re   r0   r0   r1   r_      rl   zAstInterpreter.func_do_nothingNonec                   s&   t    | jD ]}| j| qd S rh   )rV   load_root_meson_filer?   astaccept)ra   irb   r0   r1   rt      s   

z#AstInterpreter.load_root_meson_filec              
   C  s  |  |}t|dkst|d tstjd| d d S | j}tj	
||d }tj	
| j|}tj	
|tj}tj	
| j|}tj	|}	tj	
|	d}
|
| jv ratjd|d  d S | j|
 tj	|sytjd| d d S t|d	d
}| }W d    n1 sw   Y  t|tsJ z
t|| }W n tjy } z||_|d }~ww || _| jD ]}|| q| | || _d S )Nr   r   zUnable to evaluate subdir(z!) in AstInterpreter --> Skipping
zmeson.buildz?Trying to enter {} which has already been visited --> Skipping
zUnable to find build file z --> Skipping
zutf-8)encoding)flatten_argslen
isinstancer<   sysstderrwriter=   ospathjoinr;   r   Zbuild_filenamerealpathrY   formataddisfileopenreadr   Parserparser   MesonExceptionfiler?   rv   evaluate_codeblock)ra   rm   rd   re   Zprev_subdirr=   ZabsdirZbuildfilenameZabsnameZsymlinkless_dirZ
build_filefcodeZ	codeblockmerw   r0   r0   r1   r`      sD   





zAstInterpreter.func_subdirc                 C  rq   rr   r0   ra   rm   r0   r0   r1   method_call   rl   zAstInterpreter.method_callmparser.FormatStringNodec                 C  s   t |tjsJ |jS rh   )r{   r   ZFormatStringNodevaluer   r0   r0   r1   evaluate_fstring   s   zAstInterpreter.evaluate_fstringcurmparser.ArrayNoder"   c                 C  s   |  |jd S Nr   )reduce_argumentsrd   ra   r   r0   r0   r1   evaluate_arraystatement   s   z&AstInterpreter.evaluate_arraystatementr   intc                 C     |  |j |  |j dS r   evaluate_statementleftrightr   r0   r0   r1   evaluate_arithmeticstatement      z+AstInterpreter.evaluate_arithmeticstatementr)   c                 C     |  |j dS r   r   r   r   r0   r0   r1   evaluate_uminusstatement      z'AstInterpreter.evaluate_uminusstatementr   c                 C  s6   t |tsJ | |j | |j | |j d S rh   )r{   r   r   	conditionZ	trueblockZ
falseblockr   r0   r0   r1   evaluate_ternary   s   zAstInterpreter.evaluate_ternarymparser.DictNoder!   c                 C  sl   d	dd}| j |j|d\}}|rJ |  jd7  _| D ]\}}t|tr,| | q|  jd8  _i S )
Nrm   mparser.BaseNoderf   r<   c                 S  s   t | tjr	| jS dS )NZ__AST_UNKNOWN__)r{   r   Z
StringNoder   )rm   r0   r0   r1   resolve_key   s   z:AstInterpreter.evaluate_dictstatement.<locals>.resolve_key)key_resolverr   )rm   r   rf   r<   )r   rd   Zargument_depthitemsr{   r   r   )ra   rm   r   	argumentsre   keyr   r0   r0   r1   evaluate_dictstatement   s   


z%AstInterpreter.evaluate_dictstatementr   c                 C  J   t |tsJ |j| j|j< |jjr|| j|jj< | |j| j|j< d S rh   )	r{   r   r   rZ   var_nameast_idr\   r   r[   r   r0   r0   r1   evaluate_plusassign   s
   z"AstInterpreter.evaluate_plusassignr'   c                 C  rq   r   r0   r   r0   r0   r1   evaluate_indexing  rl   z AstInterpreter.evaluate_indexing	func_namec                 C  s   d S rh   r0   )ra   r   r0   r0   r1   unknown_function_called  rl   z&AstInterpreter.unknown_function_calledmparser.ArgumentNoder   #T.Callable[[mparser.BaseNode], str]duplicate_key_errorT.Optional[str](T.Tuple[T.List[TYPE_nvar], TYPE_nkwargs]c                 C  s\   t |tr'i }|j D ]
\}}||||< q| rtd| |j|fS | |i fS )Nz9All keyword arguments must be after positional arguments.)r{   r   re   r   Zincorrect_orderr	   ry   r   )ra   rd   r   r   re   r   valr0   r0   r1   r     s   
zAstInterpreter.reduce_argumentsr$   c                 C  r   NFr   r   r0   r0   r1   evaluate_comparison  r   z"AstInterpreter.evaluate_comparisonr#   c                 C  r   r   r   r   r0   r0   r1   evaluate_andstatement#  r   z$AstInterpreter.evaluate_andstatementr(   c                 C  r   r   r   r   r0   r0   r1   evaluate_orstatement(  r   z#AstInterpreter.evaluate_orstatementr   c                 C  r   r   r   r   r0   r0   r1   evaluate_notstatement-  r   z$AstInterpreter.evaluate_notstatementr%   c                 C  s:   z	|  |j W d S  ty   Y d S  ty   Y d S w rh   )r   blockr   r
   r   r0   r0   r1   evaluate_foreach1  s   zAstInterpreter.evaluate_foreachr&   c                 C  s8   |j D ]}| |j qt|jts| |j d S d S rh   )ifsr   r   r{   Z	elseblockr   )ra   rm   rw   r0   r0   r1   evaluate_if9  s
   
zAstInterpreter.evaluate_ifvarnamec                 C  rq   r   r0   )ra   r   r0   r0   r1   rO   ?  rl   zAstInterpreter.get_variabler   c                 C  r   rh   )	r{   r   r   rZ   r   r   r\   r   r[   r   r0   r0   r1   
assignmentB  s
   zAstInterpreter.assignmentFinclude_unknown_argsid_loop_detectT.Optional[T.List[str]]T.Optional[T.Any]c                   s  dd fdd |d u rg }d }t |tsd S |jsJ |j|v r$d S ||jg7 }t |tr4 |}nt |tr=|j}nt |trS|j||}t |trR| }nt |t	r_|j
j }nt |trj|j }nt |tr|jd	krvd S  |j} |j}t |trt |tr|| }n|||||| }nt |tr- |j}|j
j||}i }	zlt |trt|td
|j||	}nUt |trt|td
|j||	}n@t |trt|td
|j||	}n+t |tr
t|td
|j||	}nt |t rt!|td
|j||	}W n t"j#y,   Y d S w t |tr<|||}|S t |trng }
|D ]%}t |tre|||}|d urc|
|||7 }
qF|
|g7 }
qF|
}|S )Nnr   loop_detectr   rf   T.Anyc                   sp   |d u rg }t | tr.t | jtsJ | j|v s| jjvr g S  j| j || jg dS t | tr6| jS | S )N)r   )r{   r   r   r<   rZ   r   )r   r   quick_resolvera   r0   r1   r   J  s   

z2AstInterpreter.resolve_node.<locals>.quick_resolver   r    rh   )r   r   r   r   rf   r   )$r{   r   r   r   r   r   r   resolve_noderp   r   rd   r   copyr   r   Z	operationr   r   r<   ry   r   Zsource_objectr   Tcastr   namer   r   r   listr   dictr   r   r   )ra   rm   r   r   resultlrsrcZmargsZmkwargsZnew_resrw   resolvedr0   r   r1   r   I  s   
















 
 
  
zAstInterpreter.resolve_nodeargs_raw)T.Union[TYPE_nvar, T.Sequence[TYPE_nvar]]c                 C  s   t |tr|}n|g}g }|D ]/}t |tr.| |||}|d ur-t |ts)|g}||7 }qt |ttttfs9|r>||g7 }q|S rh   )r{   r   r   r   r<   rp   r   float)ra   r   r   r   rd   Zflattened_argsrw   r   r0   r0   r1   ry     s    



zAstInterpreter.flatten_argsc                 C  s`   i }|  D ]'\}}t|tr| ||}|d ur|||< qt|ttttfs)|r-|||< q|S rh   )r   r{   r   r   r<   rp   r   r   )ra   re   r   Zflattened_kwargsr   r   r   r0   r0   r1   flatten_kwargs  s   
zAstInterpreter.flatten_kwargsrh   )r;   r<   r=   r<   r>   r<   r?   r@   )rd   r8   re   r9   rf   rg   )rj   r8   rf   r8   )rm   r   rd   rn   re   ro   rf   rp   )rf   rs   )rm   r   rd   rn   re   ro   rf   rs   )rm   r   rf   rp   )rm   r   rf   r<   )r   r   rf   r"   )r   r   rf   r   )r   r)   rf   r   )rm   r   rf   rs   )rm   r   rf   r!   )rm   r   rf   rs   )rm   r'   rf   r   )r   r<   rf   rs   )rd   r   r   r   r   r   rf   r   )rm   r$   rf   rp   )r   r#   rf   rp   )r   r(   rf   rp   )r   r   rf   rp   )rm   r%   rf   rs   )rm   r&   rf   rs   )r   r<   rf   r   )rm   r   rf   rs   )FN)rm   r   r   rp   r   r   rf   r   )r   r   r   rp   r   r   rf   rn   )F)re   ro   r   rp   rf   ro   )!r-   r.   r/   rW   ri   rk   r_   rt   r`   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rO   r   r   ry   r   __classcell__r0   r0   rb   r1   r:   `   s>    
F



$
















Xr:   )<
__future__r   r   r|   typingr    r   r   r   Zinterpreterbaser   r   r	   r
   r   r   interpreterr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   TYPE_CHECKINGvisitorr   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r+   r3   r4   r5   r6   r7   Z
ADD_SOURCEZREMOVE_SOURCETypeVarr8   r9   r:   r0   r0   r0   r1   <module>   s2    	8$


