
    -PhA                    ,   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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$        r*d	d
l%m&Z& ddlm'Z' ddl
m(Z(m)Z)m*Z* ddlm+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2  G d de          Z3 G d de          Z4 G d de          Z5 G d de          Z6 G d de          Z7 G d de          Z8d Z9d	Z: ej;        d          Z< ej;        d          Z= G d de          Z>dS )    )annotationsN   )mparsermesonlib)environment)MesonInterpreterObjectInterpreterBaseInvalidArgumentsBreakRequestContinueRequestDisablerdefault_resolve_key)StringHolderBooleanHolderIntegerHolderArrayHolder
DictHolder)ArgumentNodeArithmeticNode	ArrayNodeAssignmentNodeBaseNodeElementaryNode	EmptyNodeIdNode
MethodNodeNotNodePlusAssignmentNodeTernaryNode   )
AstVisitor)Interpreter)
SubProjectTYPE_nkwargsTYPE_var)AndNodeComparisonNodeForeachClauseNodeIfClauseNode	IndexNodeOrNodeTestCaseClauseNode
UMinusNodec                      e Zd ZdS )DontCareObjectN__name__
__module____qualname__     Z/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/mesonbuild/ast/interpreter.pyr/   r/   ?           Dr5   r/   c                      e Zd ZdS )MockExecutableNr0   r4   r5   r6   r9   r9   B   r7   r5   r9   c                      e Zd ZdS )MockStaticLibraryNr0   r4   r5   r6   r;   r;   E   r7   r5   r;   c                      e Zd ZdS )MockSharedLibraryNr0   r4   r5   r6   r=   r=   H   r7   r5   r=   c                      e Zd ZdS )MockCustomTargetNr0   r4   r5   r6   r?   r?   K   r7   r5   r?   c                      e Zd ZdS )MockRunTargetNr0   r4   r5   r6   rA   rA   N   r7   r5   rA   _T_Vc                      e Zd ZdYdZ fdZd[dZd\dZd]dZd^ fdZd_dZd`dZ	dad!Z
dbd%Zdcd(Zddd*Zded,Zdfd/Zdgd1Zdhd3Zdid5Zedfdjd<Zdkd>Zdld@ZdmdBZdndDZdodFZdpdHZdqdJZdrdLZdsdtdRZdsdudUZdvdXZ xZ S )wAstInterpreterNsource_rootstrsubdir
subprojectr#   subproject_direnvenvironment.EnvironmentvisitorsT.Optional[T.List[AstVisitor]]c                d   t                                          |||||           ||ng | _        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        d4           d S )5Nprojecttest	benchmarkinstall_headersinstall_maninstall_datainstall_subdirinstall_symlinkinstall_emptydirconfiguration_dataconfigure_filefind_programinclude_directoriesadd_global_argumentsadd_global_link_argumentsadd_project_argumentsadd_project_dependenciesadd_project_link_argumentsmessage	generatorerrorrun_commandassertrI   
dependency
get_option
join_pathsr   importvcs_tagadd_languagesdeclare_dependencyfiles
executablestatic_libraryshared_librarylibrarybuild_targetcustom_target
run_targetrH   set_variableget_variableunset_variableis_disableris_variabledisablerjarwarningshared_moduleoption)both_librariesadd_test_setupsubdir_donealias_targetsummaryrangestructured_sourcesdebug)
super__init__rM   assignmentsassign_valsreverse_assignmentfuncsupdatefunc_do_nothingfunc_subdir)selfrF   rH   rI   rJ   rK   rM   	__class__s          r6   r   zAstInterpreter.__init__Y   s   fj.#NNN$,$8b24/19;
 ;9d&: ;!4#7;&(<; -d.B; )$*>	;
 *4+?; ,T-A; -d.B; .t/C; 01E; ,T-A; *4+?; 1$2F; 243G; 78L; 3D4H;  6t7K!; ;" 89M#;$ %d&:%;& '(<';( #D$8);* )$*>+;, $T%9-;. ()=/;0 ()=1;2 ()=3;4 ()=5;6 )$*>7;8 $T%99;: %d&:;;< +D,@=;> 01E?;@ #D$8A;B ()=C; ; ;D ,T-AE;F ,T-AG;H %d&:I;J *4+?K;L +D,@M;N ()=O;P $T%5Q;R *4+?S;T *4+?U;V ,T-AW;X )$*>Y;Z )$*>[;\ &t';];^ !$"6_;` %d&:a;b +D,@c;d $T%9e; ;f .2-A-1-A*.*>+/+?&*&:$($8151E$($8u; ; ; ;	 ;	 ;	 ;	 ;	r5   argsrB   kwargsrC   returnT.Tuple[_T, _V]c                
    ||fS Nr4   )r   r   r   s      r6   _unholder_argszAstInterpreter._unholder_args   s    V|r5   resc                    |S r   r4   )r   r   s     r6   
_holderifyzAstInterpreter._holderify   s    
r5   noder   T.List[TYPE_var]T.Dict[str, TYPE_var]boolc                    dS NTr4   )r   r   r   r   s       r6   r   zAstInterpreter.func_do_nothing       tr5   Nonec                    t                                                       | j        D ]}| j                            |           d S r   )r   load_root_meson_filerM   astaccept)r   ir   s     r6   r   z#AstInterpreter.load_root_meson_file   sK    $$&&& 	 	AHOOA	 	r5   c                v   |                      |          }t          |          dk    st          |d         t                    s%t          j                            d| d           d S |                     | j        |d                   \  }}|s:t          j                            d	                    |d                              d S | 
                    | j        || j                  sOt          j                            |t          j                  }t          j                            d| d           d S d S )Nr    r   zUnable to evaluate subdir(z!) in AstInterpreter --> Skipping
z?Trying to enter {} which has already been visited --> Skipping
zUnable to find build file z --> Skipping
)flatten_argslen
isinstancerG   sysstderrwrite_resolve_subdirrF   format_evaluate_subdirrM   ospathjoinr   build_filename)r   r   r   r   rH   is_newbuildfilenames          r6   r   zAstInterpreter.func_subdir   s"     &&t99>>DGS!9!9>Jb$bbbcccF--d.>QHH 	J_ffgklmgnoopppF$$T%5vt}MM 	ZGLL1KLLMJX-XXXYYYYY	Z 	Zr5   c                    dS r   r4   r   r   s     r6   method_callzAstInterpreter.method_call   r   r5   mparser.StringNodec                H    t          |t          j                  sJ |j        S r   r   r   
StringNodevaluer   s     r6   evaluate_fstringzAstInterpreter.evaluate_fstring   s#    $ 233333zr5   curmparser.ArrayNoder%   c                B    |                      |j                  d         S Nr   )reduce_argumentsr   r   r   s     r6   evaluate_arraystatementz&AstInterpreter.evaluate_arraystatement   s    $$SX..q11r5   r   intc                n    |                      |j                   |                      |j                   dS r   evaluate_statementleftrightr   s     r6   evaluate_arithmeticstatementz+AstInterpreter.evaluate_arithmeticstatement   s3    )))	***qr5   r-   c                :    |                      |j                   dS r   r   r   r   s     r6   evaluate_uminusstatementz'AstInterpreter.evaluate_uminusstatement   s    	***qr5   r   c                    t          |t                    sJ |                     |j                   |                     |j                   |                     |j                   d S r   )r   r   r   	condition	trueblock
falseblockr   s     r6   evaluate_ternaryzAstInterpreter.evaluate_ternary   s`    $,,,,,//////00000r5   mparser.DictNoder$   c                   dd}|                      |j        |          \  }}|rJ | xj        dz  c_        |                                D ]/\  }}t	          |t
                    r|                     |           0| xj        dz  c_        i S )	Nr   mparser.BaseNoder   rG   c                H    t          | t          j                  r| j        S dS )N__AST_UNKNOWN__r   )r   s    r6   resolve_keyz:AstInterpreter.evaluate_dictstatement.<locals>.resolve_key   s%    $ 233 "z!$$r5   )key_resolverr    )r   r   r   rG   )r   r   argument_depthitemsr   r   r   )r   r   r   	argumentsr   keyr   s          r6   evaluate_dictstatementz%AstInterpreter.evaluate_dictstatement   s    	% 	% 	% 	% !11$)+1VV	6q  ,,.. 	- 	-JC#x(( -'',,,q 	r5   r   c                    t          |t                    sJ |j        | j        |j        j        <   |j        j        r|| j        |j        j        <   |                     |j                  | j        |j        j        <   d S r   )	r   r   r   r   var_nameast_idr   r   r   r   s     r6   evaluate_plusassignz"AstInterpreter.evaluate_plusassign   st    $ 23333304
,-: 	>9=D#DJ$56040G0G
0S0S,---r5   r*   c                    dS r   r4   r   s     r6   evaluate_indexingz AstInterpreter.evaluate_indexing       qr5   	func_namec                    d S r   r4   )r   r   s     r6   unknown_function_calledz&AstInterpreter.unknown_function_called   s    r5   mparser.ArgumentNoder   #T.Callable[[mparser.BaseNode], str]duplicate_key_errorT.Optional[str]'T.Tuple[T.List[TYPE_var], TYPE_nkwargs]c                6   t          |t                    rni }|j                                        D ]\  }}|| ||          <   |                                rt          d          |                     |j                  |fS |                     |          i fS )Nz9All keyword arguments must be after positional arguments.)r   r   r   r   incorrect_orderr
   r   r   )r   r   r   r   r   r   vals          r6   r   zAstInterpreter.reduce_arguments   s     dL)) 	/,.F K--// 0 0S,/||C(())##%% d&'bccc$$T^44f<<$$T**B..r5   r'   c                n    |                      |j                   |                      |j                   dS NFr   r   s     r6   evaluate_comparisonz"AstInterpreter.evaluate_comparison   s3    	***
+++ur5   r&   c                n    |                      |j                   |                      |j                   dS r   r   r   s     r6   evaluate_andstatementz$AstInterpreter.evaluate_andstatement  3    )))	***ur5   r+   c                n    |                      |j                   |                      |j                   dS r   r   r   s     r6   evaluate_orstatementz#AstInterpreter.evaluate_orstatement  r   r5   r   c                :    |                      |j                   dS r   r   r   s     r6   evaluate_notstatementz$AstInterpreter.evaluate_notstatement  s    	***ur5   r(   c                v    	 |                      |j                   d S # t          $ r Y d S t          $ r Y d S w xY wr   )evaluate_codeblockblockr   r   r   s     r6   evaluate_foreachzAstInterpreter.evaluate_foreach  s^    	##DJ///// 	 	 	DD 	 	 	DD	s    
8	88r)   c                    |j         D ]}|                     |j                   t          |j        t
                    s!|                     |j        j                   d S d S r   )ifsr  r  r   	elseblockr   )r   r   r   s      r6   evaluate_ifzAstInterpreter.evaluate_if  si     	- 	-A##AG,,,,$.)44 	:##DN$899999	: 	:r5   varnamec                    dS r   r4   )r   r	  s     r6   rw   zAstInterpreter.get_variable  r   r5   r   c                    t          |t                    sJ |j        | j        |j        j        <   |j        j        r|| j        |j        j        <   |                     |j                  | j        |j        j        <   d S r   )	r   r   r   r   r   r   r   r   r   r   s     r6   
assignmentzAstInterpreter.assignment"  ss    $/////04
,-: 	>9=D#DJ$56040G0G
0S0S,---r5   Finclude_unknown_argsid_loop_detectT.Optional[T.List[str]]T.Optional[T.Any]c                	    d
d fd|g }d }t          |t                    sd S |j        sJ |j        |v rd S ||j        gz  }t          |t                    r |          }n}t          |t                    r	|j        }n_t          |t                    r6                     |j        ||          }t          |t                    r| }nt          |t                    r |j
        j                                        }nt          |t                    r|j                                        }nt          |t                    r|j        dk    rd S                      |j        ||          }                     |j        ||          }t          |t$                    rt          |t$                    r||z   }n$                     |||                               |||          z   }nt          |t(                    r |j                  }                     |j
        j        ||          }i }	|j        j        }
	 t          |t$                    r:t/          |t1          j        d	                                         |
||	          }n7t          |t                    r9t7          |t1          j        d	                                         |
||	          }nt          |t8                    r9t;          |t1          j        d	                                         |
||	          }nt          |t<                    r9t?          |t1          j        d	                                         |
||	          }nMt          |t@                    r8tC          |t1          j        d	                                         |
||	          }n# tD          j#        $ r Y d S w xY wt          |t                    r                     |||          }nmt          |t<                    rXg }|D ]Q}t          |t                    r4                     |||          }||                     |||          z  }K||gz  }R|}|S )Nnr   loop_detectr  r   T.Anyc                (   |g }t          | t                    r[t          | j        t                    sJ | j        |v s| j        j        vrg S  j        | j                 || j        gz             S t          | t
                    r| j        S | S )N)r  )r   r   r   rG   r   r   )r  r  quick_resolver   s     r6   r  z2AstInterpreter.resolve_node.<locals>.quick_resolve*  s    " !V$$ !!'3/////7k))QWD<L-L-LI$}T%5ag%>k]^]d\eNeffffA~.. wr5   addr"   r   )r  r   r  r  r   r  )$r   r   r   r   r   r   r   resolve_noder   r   r   r   copyr   r   	operationr   r   rG   r   r   source_objectnamer   Tcastr   r   r   r   listr   dictr   r   MesonException)r   r   r  r  resultlrsrcmargsmkwargsmethod_namenew_resr   resolvedr  s   `             @r6   r  zAstInterpreter.resolve_node)  s   	 	 	 	 	 	 	 	 !N$)) 	4{;.((44;-' dF## ,	"]4((FFn-- )	ZFFg&& &	&&tz3GXXF&$'' $#i(( !	Y(--//FFl++ 	^((**FFn-- 	~&&t!!$)-A>RRA!!$*.BNSSA!S!! QjC&8&8 QQ**1.BNSSVZVgVghik  BP  WQ  WQ  Qj)) 	- 233C%%di&9;OQ_``E-/G)/Kc3'' 	s)#qvmT/J/JKKWWXcejlsttFFT** s*3}d0K0KLLXXYdfkmtuuFFS)) s*3}d0K0KLLXXYdfkmtuuFFT** s(af]D.I.IJJVVWbdikrssFFT** s'QVM4-H-HIIUUVachjqrrF*   tt fh'' 	&&v/C^TTFF%% 		(*G # #a** ##004H.YYH+4#4#4X?SUc#d#ddsNGGFs   	FO O#"O#args_raw'T.Union[TYPE_var, T.Sequence[TYPE_var]]c                B   t          |t                    r|}n|g}g }|D ]~}t          |t                    r7|                     |||          }|t          |t                    s|g}||z  }Nt          |t          t
          t          t          f          s|r||gz  }|S r   )r   r  r   r  rG   r   r   float)r   r+  r  r  r   flattened_argsr   r*  s           r6   r   zAstInterpreter.flatten_args  s    h%% 	DD:D+-  	& 	&A!X&& &,,Q0DnUU'%h55 .$,:"h.NAT3677 &;O &1#%r5   r,   Disabler | Nonec                ,    t          | j                  S )N)rI   )r   rI   r   s     r6   evaluate_testcasez AstInterpreter.evaluate_testcase  s    4?3333r5   r   )rF   rG   rH   rG   rI   r#   rJ   rG   rK   rL   rM   rN   )r   rB   r   rC   r   r   )r   rB   r   rB   )r   r   r   r   r   r   r   r   )r   r   )r   r   r   r   r   r   r   r   )r   r   r   r   )r   r   r   rG   )r   r   r   r%   )r   r   r   r   )r   r-   r   r   )r   r   r   r   )r   r   r   r$   )r   r   r   r   )r   r*   r   r   )r   rG   r   r   )r   r   r   r   r   r   r   r   )r   r'   r   r   )r   r&   r   r   )r   r+   r   r   )r   r   r   r   )r   r(   r   r   )r   r)   r   r   )r	  rG   r   r   )r   r   r   r   )FN)r   r   r  r   r  r  r   r  )r+  r,  r  r   r  r  r   r   )r   r,   r   r0  )!r1   r2   r3   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  rw   r  r  r   r2  __classcell__)r   s   @r6   rE   rE   X   s       A A A A A A AF              
Z Z Z Z      2 2 2 2   
   1 1 1 1   T T T T       EX7;	/ / / / /    
   
   
      : : : :   T T T TW W W W Wr    *4 4 4 4 4 4 4 4r5   rE   )?
__future__r   r   r   typingr   r   r   r   interpreterbaser   r	   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,   r-   r/   r9   r;   r=   r?   rA   
ADD_SOURCEREMOVE_SOURCETypeVarrB   rC   rE   r4   r5   r6   <module>r>     s   # " " " " " 				 



                                                                                    ? ######))))))DDDDDDDDDD	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 		 	 	 	 	+ 	 	 		 	 	 	 	+ 	 	 		 	 	 	 	. 	 	 		 	 	 	 	. 	 	 		 	 	 	 	- 	 	 		 	 	 	 	* 	 	 	 
QYt__QYt__@4 @4 @4 @4 @4_ @4 @4 @4 @4 @4r5   