
    -Ph              	         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mZmZ ddlmZmZmZmZmZmZ d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 ddl m!Z! ddl"m"Z" d dl#Z#d dl$Z$d dl%Z%d dl&Z&d dl'Z'd dl(Z)d dl*Z*e)j+        rddlm,Z,m-Z-m.Z.m/Z/ ddl0m1Z1 ddl2m3Z3 e)j4        e)j5        e)j6        ej7                 e)j6        e8         e)j6        e9         e)j6        e:         e)j6        e;         e)j6        e<         f         e)j=        e,dge
e,         f         f         Z>e)j4        e:e)j=        ej?        e)j@        e/         e)j4        e:e/f         ge/f         f         ZA G d de          ZB G d d          ZCdS )    )annotations   )environmentmparsermesonlib   )InterpreterObjectMesonInterpreterObjectMutableInterpreterObjectObjectHolderIterableObjectContextManagerObjectHoldableTypes)BreakRequestContinueRequestInterpreterExceptionInvalidArgumentsInvalidCodeSubdirDoneRequest)mlog)
FeatureNew)Disableris_disabled)default_resolve_keyflattenresolve_second_level_holdersstringifyUserArguments)MesonOperator	_unholderN)InterpreterObjectTypeVar
SubProjectTYPE_kwargsTYPE_var)
AstVisitor)Interpreterr&   c                        e Zd Zd fdZ xZS )InvalidCodeOnVoidop_typestrreturnNonec                R    t                                          d|d           d S )NzCannot perform z operation on void statement.)super__init__)selfr)   	__class__s     j/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/mesonbuild/interpreterbase/interpreterbase.pyr/   zInvalidCodeOnVoid.__init__C   s-    S7SSSTTTTT    )r)   r*   r+   r,   )__name__
__module____qualname__r/   __classcell__)r1   s   @r2   r(   r(   A   sG        U U U U U U U U U Ur3   r(   c                     e Zd Zdwd	ZdxdydZdzdZd{dZd{dZd{dZd{dZ	d|d}dZ
d~d#Zdd&Z ed'd(          dd*            Zdd,Zdd/Zdd1Zdd3Zdd5Zdd7Zdd9Zdd;Zdd=Z ed>d?          ddA            Z edBdC          ddD            ZddFZddHZddJZddLZddNZddQZddWZ ddYZ!e"dfdd`Z#ddbZ$dddZ%dedfddjZ&ddkZ'ddnZ(d{doZ)ddsZ*dddvZ+dS )InterpreterBasesource_rootr*   subdir
subprojectr"   subproject_direnvenvironment.Environmentc                   || _         i | _        i | _        i | _        i | _        t          j                    | _        t                      | _	        || _
        || _        || _        || _        || _        |                                | _        i | _        d| _        d| _        t)          j        ddd          | _        d | _        d S )Nr   sentinel)r:   funcsbuiltin
holder_mapbound_holder_mapr   
OrderedSetbuild_def_filessetprocessed_buildfilesr;   root_subdirr<   r=   r   get_coredatacoredata	variablesargument_depthcurrent_linenor   BaseNodecurrent_nodetmp_meson_version)r0   r:   r;   r<   r=   r>   s         r2   r/   zInterpreterBase.__init__H   s    &#%
79)+/19A9L9N9N03!!$,((**9;  $,RZ@@
 37r3   Tstrictboolr+   r,   c                    d S N )r0   rT   s     r2   handle_meson_version_from_astz-InterpreterBase.handle_meson_version_from_astc   s    r3   fnameerrnamec                   	 t          |d          5 }|                                cd d d            S # 1 swxY w Y   d S # t          $ r4}t          j        dd|          }t          j        d| |          d }~ww xY w)Nutf-8encodingr   z'Build file failed to parse as unicode: )node)openreadUnicodeDecodeErrorr   rQ   r   	from_node)r0   rZ   r[   fer`   s         r2   read_buildfilezInterpreterBase.read_buildfileg   s    	beg...  !vvxx                                   ! 	b 	b 	b#Aq'22D'(URS(U(U\`aaaa	bs2   A 4A 8A 8A 
A?/A::A?c                   t           j                            | j        t          j                  }| j                            |           t           j                            | j        |          }t           j        	                    |          st          d|           |                     ||          }|                                rt          d          t          |t                    sJ 	 t!          j        ||                                          | _        |                                  d S # t           j        $ r5}||_        |j        r |j        | _        |                                  |d }~ww xY w)NzMissing Meson file in zBuilder file is empty.)ospathjoinr;   r   build_filenamerH   addr:   isfiler   rg   isspacer   
isinstancer*   r   ParserparseastrY   ParseExceptionfile)r0   rl   	mesonfilecodemes        r2   load_root_meson_filez$InterpreterBase.load_root_meson_fileo   sT   dk;3MNN  000GLL!1>BB	w~~i(( 	I"#GI#G#GHHH""9i88<<>> 	86777$$$$$$
	~dI66<<>>DH..00000% 	 	 	BGv 5 622444H	s   1A D3 3E70E22E7c                >    |                      | j        d           dS )z
        Parses project() and initializes languages, compilers etc. Do this
        early because we need this before we parse the rest of the AST.
        r   )endN)evaluate_codeblockrs   r0   s    r2   parse_projectzInterpreterBase.parse_project   s%    
 	a00000r3   c                H   dd} || j                   st          j        | j                                                  }|}|j        D ]}|dz                                  rt          |dz  d          5 }|                                }d d d            n# 1 swxY w Y   	 t          j
        |d	                                          }n# t          j        $ r Y w xY w ||          r|} n d
}||k    rt          d| d| d          t          d|           d S )Nrs   mparser.CodeBlockNoder+   objectc                    t          | t          j                  st          d          | j        st          d          | j        d         }t          |t          j                  o|j        j        dk    S )Nz5AST is of invalid type. Possibly a bug in the parser.zNo statements in code.r   project)rp   r   CodeBlockNoder   linesFunctionNode	func_namevalue)rs   firsts     r2   _is_projectz5InterpreterBase.sanity_check_ast.<locals>._is_project   sn    c7#899 [!"YZZZ9 <!":;;;IaLEeW%9::au?TXa?aar3   zmeson.buildr]   r^   emptyz+first statement must be a call to project()zNot the project root: z1

Did you mean to run meson from the directory: "z"?zInvalid source tree: )rs   r   r+   r   )rs   pathlibPathr:   resolveparentsis_filera   rb   r   rq   rr   rt   r   )	r0   r   pfoundparentre   rw   rs   errors	            r2   sanity_check_astz InterpreterBase.sanity_check_ast   s   	b 	b 	b 	b {48$$ 	CT-..6688AE)  ]*3355 f}4wGGG (1 vvxx( ( ( ( ( ( ( ( ( ( ( ( ( ( (!%nT7;;AACC"1 ! ! ! ! #{3''  & AEzz!"~5"~"~uz"~"~"~!"A%"A"ABBB/	C 	Cs$   7BB	B	$'CCCc                b    	 |                      | j        d           d S # t          $ r Y d S w xY w)Nr   )start)r|   rs   r   r}   s    r2   runzInterpreterBase.run   sJ    	##DHA#66666  	 	 	DD	s     
..r   Nr`   r   r   intr{   T.Optional[int]c                P   |d S t          |t          j                  s)t          d          }|j        |_        |j        |_        ||j        ||         }d}|t          |          k     r||         }	 |                     |           n# t          $ rt}t          |dd           \| j        j        |_        | j        j        |_        t          j                            | j        | j        t"          j                  |_        |d }~ww xY w|dz  }|t          |          k     d S d S )Nz?Tried to execute a non-codeblock. Possibly a bug in the parser.r   linenor   )rp   r   r   r   r   colnor   lenevaluate_statement	ExceptiongetattrrR   ri   rj   rk   r:   r;   r   rl   ru   )r0   r`   r   r{   rf   
statementsicurs           r2   r|   z"InterpreterBase.evaluate_codeblock   s.   <F$ 566 	]^^A{AHjAGGZc	*
#j//!!Q-C	'',,,,   1h--5  $07AH"/5AGW\\$*:DKIcddAF FA #j//!!!!!!s   5B 
D	A/DD	r   mparser.BaseNodeT.Optional[InterpreterObject]c                	   || _         t          |t          j                  r|                     |          S t          |t          j                  r|                     |           n`t          |t          j                  r|                     |           n/t          |t          j	                  r| 
                    |          S t          |t          j                  rR|j        r1|j        r|                     |          S |                     |          S |                     |j                  S t          |t          j                  r|                     |j                  S t          |t          j                  r|                     |          S t          |t          j                  r|                     |j                  S t          |t          j                  r|                     |          S t          |t          j                  r|                     |          S t          |t          j                  r|                     |          S t          |t          j                  r|                     |j                  S t          |t          j                  r|                     |          S t          |t          j                   r| !                    |          S t          |t          j"                  r| #                    |          S t          |t          j$                  r| %                    |          S t          |t          j&                  r| '                    |          S t          |t          j(                  r| )                    |           n t          |t          j*                  r| +                    |          S t          |t          j,                  r| -                    |          S t          |t          j.                  rt_                      t          |t          j0                  rtc                      t          |t          j2                  r| 3                    |j4                  S t          |t          j5                  r| 6                    |          S to          d          d S )NzUnknown statement.)8rR   rp   r   r   function_callPlusAssignmentNodeevaluate_plusassignAssignmentNode
assignment
MethodNodemethod_call
StringNode
is_fstringis_multilineevaluate_multiline_fstringevaluate_fstring
_holderifyr   BooleanNodeIfClauseNodeevaluate_ifIdNodeget_variableComparisonNodeevaluate_comparison	ArrayNodeevaluate_arraystatementDictNodeevaluate_dictstatement
NumberNodeAndNodeevaluate_andstatementOrNodeevaluate_orstatementNotNodeevaluate_notstatement
UMinusNodeevaluate_uminusstatementArithmeticNodeevaluate_arithmeticstatementForeachClauseNodeevaluate_foreach	IndexNodeevaluate_indexingTernaryNodeevaluate_ternaryContinueNoder   	BreakNoder   ParenthesizedNoder   innerTestCaseClauseNodeevaluate_testcaser   )r0   r   s     r2   r   z"InterpreterBase.evaluate_statement   s(   c7/00 7	4%%c***W788 5	4$$S))))W344 3	4OOC    W/00 1	4##C(((W/00 /	4~ 2# 6::3???00555sy111W011 '	4??39---W122 %	4##C(((W^,, #	4$$SY///W344 !	4++C000W.// 	4//444W-.. 	4..s333W/00 	4??39---W_-- 	4--c222W^,, 	4,,S111W_-- 	4--c222W/00 	400555W344 	444S999W677 	4!!#&&&&W.// 	4))#...W011 	4((---W122 		4!###W.// 	4.. W677 	4**39555W788 	4))#...2333tr3   mparser.ArrayNoder	   c                    |                      |j                  \  }}t          |          dk    rt          d          |                     d |D                       S )Nr   z4Keyword arguments are invalid in array construction.c                ,    g | ]}t          |          S rX   r   .0xs     r2   
<listcomp>z;InterpreterBase.evaluate_arraystatement.<locals>.<listcomp>  s    @@@	!@@@r3   )reduce_argumentsargsr   r   r   )r0   r   	argumentskwargss       r2   r   z'InterpreterBase.evaluate_arraystatement
  s[    "33CH==Fv;;??TUUU@@i@@@AAAr3   dictz0.47.0mparser.DictNodec                     d	 fd}                      |j        |d          \  }}|rJ                      d |                                D                       S )
Nkeyr   r+   r*   c                $   t          | t          j                  st          j        ddj                                       |           }|t          d          t          |          }t          |t                    st          d          |S )Nz&Dictionary entry using non literal keyz0.53.0zKey cannot be void.zKey must be a string)
rp   r   r   r   
single_user<   r   r   r    r*   )r   
key_holderstr_keyr0   s      r2   resolve_keyz;InterpreterBase.evaluate_dictstatement.<locals>.resolve_key  s    c7#566 k%&NPXZ^Zijjj0055J!&'<===
++Ggs++ ?&'=>>>Nr3   zDuplicate dictionary key: {})key_resolverduplicate_key_errorc                4    i | ]\  }}|t          |          S rX   r   r   kvs      r2   
<dictcomp>z:InterpreterBase.evaluate_dictstatement.<locals>.<dictcomp>  s$    KKKDAq9Q<<KKKr3   )r   r   r+   r*   )r   r   r   items)r0   r   r   r   r   s   `    r2   r   z&InterpreterBase.evaluate_dictstatement  s    		 		 		 		 		 		 !11#(  kI1  J  J	6KKFLLNNKKKLLLr3   mparser.NotNodec                    |                      |j                  }|t          d          t          |t                    r|S |                     |                    t          j        d                     S )Nnot)	r   r   r(   rp   r   r   operator_callr   NOTr0   r   r   s      r2   r   z%InterpreterBase.evaluate_notstatement   sd    ##CI..9#E***a"" 	Hq}/@$GGHHHr3   mparser.IfClauseNodeT.Optional[Disabler]c           	        t          |t          j                  sJ |j        D ]]}d | _        |                     |j                  }|t          d          t          |t                    r|c S t          |t                    s-t          j        d| dt          |          j         d          |                    t          j        d           }t          |t"                    st%          d|d          |rt          j        | j                 }| j        r| j        t          j        | j        <   	 |                     |j                   |t          j        | j        <   n# |t          j        | j        <   w xY w d S _t          |j        t          j                  s|                     |j        j                   d S )NifzArgument to if (z") is not an InterpreterObject but .z
If clause z$ does not evaluate to true or false.)rp   r   r   ifsrS   r   	conditionr(   r   r	   r   MesonBugExceptiontyper4   r   r   BOOLrU   r   project_meson_versionsr<   r|   block	elseblock	EmptyNode)r0   r`   r   resultresprev_meson_versions         r2   r   zInterpreterBase.evaluate_if(  s   $ 455555 	 	A &*D",,Q[99F~'---&(++ f&788 H0  2GF  2G  2Gnrsynznz  oD  2G  2G  2G  H  H  H&&}'94@@Cc4(( _!"]v"]"]"]^^^ %-%DT_%U") ^GKG]H3DODZ++AG444GYH3DODDGYH3DODYYYYtt $.'*;<< 	:##DN$8999ts   6E%%E;mparser.TestCaseClauseNodec                    |                      |j                  }t          |t                    r|S t          |t                    st          d|d          |5  |                     |j                   d d d            n# 1 swxY w Y   d S )Nztestcase clause z( does not evaluate to a context manager.)r   r   rp   r   r   r   r|   r  )r0   r`   r  s      r2   r   z!InterpreterBase.evaluate_testcaseE  s    ((88fh'' 	M&"677 	eccccddd 	0 	0##DJ///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0ts   BB
Bmparser.ComparisonNodec           	        |                      |j                  }|t          j        d          t	          |t
                    r|S |                      |j                  }|t          j        d          t	          |t
                    r|S t          j        t          j	        t          j
        t          j        t          j        t          j        t          j        t          j        d|j                 }|t          j        t          j	        fv r||}}||_        |                     |                    |t)          |                              S )N5Cannot compare a void statement on the left-hand side6Cannot compare a void statement on the right-hand side)innotinz==z!=><z>=z<=)r   leftr   MesonExceptionrp   r   rightr   INNOT_INEQUALS
NOT_EQUALSGREATERLESSGREATER_EQUALSLESS_EQUALSctyperR   r   r   r    )r0   r`   val1val2operators        r2   r   z#InterpreterBase.evaluate_comparisonO  s#   &&ty11<)*abbbdH%% 	K&&tz22<)*bcccdH%% 	K  "")&*&#.+	
 	
 *	 (-*>???t$D t11(IdOOLLMMMr3   mparser.AndNodec                   |                      |j                  }|t          j        d          t	          |t
                    r|S |                    t          j        d           }|s| 	                    |          S |                      |j
                  }|t          j        d          t	          |t
                    r|S | 	                    |                    t          j        d                     S Nr  r  r   r  r   r  rp   r   r   r   r  r   r  r0   r   ll_boolrs        r2   r   z%InterpreterBase.evaluate_andstatementn  s    ##CH--9)*abbba"" 	H!3T:: 	+??6***##CI..9)*bccca"" 	Hq}/A4HHIIIr3   mparser.OrNodec                   |                      |j                  }|t          j        d          t	          |t
                    r|S |                    t          j        d           }|r| 	                    |          S |                      |j
                  }|t          j        d          t	          |t
                    r|S | 	                    |                    t          j        d                     S r%  r&  r'  s        r2   r   z$InterpreterBase.evaluate_orstatement~  s    ##CH--9)*abbba"" 	H!3T:: 	+??6***##CI..9)*bccca"" 	Hq}/A4HHIIIr3   mparser.UMinusNodec                    |                      |j                  }|t          d          t          |t                    r|S ||_        |                     |                    t          j	        d                     S )Nzunary minus)
r   r   r(   rp   r   rR   r   r   r   UMINUSr   s      r2   r   z(InterpreterBase.evaluate_uminusstatement  sk    ##CI..9#M222a"" 	Hq}/CTJJKKKr3   mparser.ArithmeticNodec                   |                      |j                  }t          |t                    r|S |                      |j                  }t          |t                    r|S ||t          |j                  t          j        t          j	        t          j
        t          j        t          j        d}||_        |                    ||j                 t          |                    }|                     |          S )N)rm   submuldivmod)r   r  rp   r   r  r(   	operationr   PLUSMINUSTIMESDIVMODrR   r   r    r   )r0   r   r(  r*  mappingr  s         r2   r   z,InterpreterBase.evaluate_arithmeticstatement  s    ##CH--a"" 	H##CI..a"" 	H9	#CM222 !% & & $ $/
 /
 oogcm4illCCs###r3   mparser.TernaryNodec                   t          |t          j                  sJ |                     |j                  }|t          j        d          t          |t                    r|S ||_        |	                    t          j        d           }|r|                     |j                  S |                     |j                  S )Nz>Cannot use a void statement as condition for ternary operator.)rp   r   r   r   r   r   r  r   rR   r   r   r  	trueblock
falseblock)r0   r`   r  result_bools       r2   r   z InterpreterBase.evaluate_ternary  s    $ 344444((88>)*jkkkfh'' 	M"**=+=tDD 	<**4>:::**4?;;;r3   zmultiline format stringsz0.63.0mparser.StringNodec                ,    |                      |          S rW   )r   )r0   r`   s     r2   r   z*InterpreterBase.evaluate_multiline_fstring  s    $$T***r3   zformat stringsz0.58.0c                p     d fd}t          j        d||j                  }                     |          S )NmatchT.Match[str]r+   r*   c                   t          |                     d                    }	 t          j        |                   }t	          |t
          t          f          r"t          j        ddj	        j
                   	 t          |j	                  S # t          $ r$}t          dt          |                     d }~ww xY w# t          $ r t          d| d          w xY w)Nr   zList or dictionary in f-stringz1.3.0)locationz
f-string: zIdentifier "z" does not name a variable.)r*   groupr    rN   rp   listr   r   r   r<   rR   r   r   KeyErrorr   )rE  varvalrf   r0   s       r2   replacez1InterpreterBase.evaluate_fstring.<locals>.replace  s   ekk!nn%%C	Ss 344cD$<00 B)*JGUYUdos  pA  B  B  B  BB1#tGGG' B B B*+@A+@+@AAAB S S S!"Q"Q"Q"QRRRSs*   AC >B 
CB<<CC C"z@([_a-zA-Z][_0-9a-zA-Z]*)@)rE  rF  r+   r*   )rer2  r   r   )r0   r`   rN  r  s   `   r2   r   z InterpreterBase.evaluate_fstring  sQ    	S 	S 	S 	S 	S 	S f2GTZHHs###r3   mparser.ForeachClauseNodec           	     8   t          |t          j                  sJ |                     |j                  }t          |t
                    st          d          |                                }t          |j	                  |pdk    r)t          d|pd d|
                                           |                                D ]R}|gt          |t                    rt          j        d| d          |                     |j	        d         j        |                     |                     nt          |t                    st          j        d| d|           t          |          |k    rt          j        d| d|           t%          |          D ]A}|                     |j	        |         j        |                     ||                              B	 |                     |j                   6# t*          $ r Y Ct,          $ r Y  d S w xY wd S )	Nz.Items of foreach loop do not support iteratingr   zForeach expects exactly z. variables for iterating over objects of type zIteration of z7 returned a tuple even though iter_tuple_size() is Noner   z9 did not return a tuple even though iter_tuple_size() is )rp   r   r   r   r   r   r   iter_tuple_sizer   varnamesdisplay_name	iter_selftupler   r   set_variabler   r   ranger|   r  r   r   )r0   r`   r   tsizer   js         r2   r   z InterpreterBase.evaluate_foreach  s   $ 9:::::''
33%00 	U"#STTT%%''t}%*1--"  $Oejq  $O  $Ox}  yK  yK  yM  yM  $O  $O  P  P  P"" 	 	A}a'' E"4  6DU  6D  6D  6D  E  E  E!!$-"2"8$//!:L:LMMMM!!U++ N"4  6MU  6M  6M  FK  6M  6M  N  N  Nq66U??"4  6MU  6M  6M  FK  6M  6M  N  N  Nu U UA%%dmA&6&<dooaPQd>S>STTTT''
3333"      !	 	s    G<<
H		HHmparser.PlusAssignmentNodec                   t          |t          j                  sJ |j        j        }|                     |j                  }|t          d          |                     |          }||_        | 	                    |
                    t          j        t          |                              }|                     ||           d S )Nzplus assign)rp   r   r   var_namer   r   r(   r   rR   r   r   r   r7  r    rW  )r0   r`   varnameadditionold_variable	new_values         r2   r   z#InterpreterBase.evaluate_plusassign  s    $ :;;;;;-%**4:66#M222 ((11$(!OOL$>$>}?QS\]eSfSf$g$ghh	'9-----r3   mparser.IndexNodec                   t          |t          j                  sJ |                     |j                  }|t          d          t          |t                    r|S |                     |j                  }|t          d          t          |          }||_
        |                     |                    t          j        |                    S )Nz#Tried to evaluate indexing on void.z#Cannot use void statement as index.)rp   r   r   r   iobjectr   r   indexr   r    rR   r   r   r   INDEX)r0   r`   rd  index_holderre  s        r2   r   z!InterpreterBase.evaluate_indexing  s    $ 122222))$,77?&'LMMMgx(( 	N..tz::"#HIII,''#w44]5H%PPQQQr3   mparser.FunctionNodec                
   |j         j        }|                     |j                  \  }}|                     ||          \  }}t          ||          r|dvrt                      S || j        v r| j        |         }|}t          |dd          st          |          }t          |dd          st          ||          \  }}|| _         ||||          }	|	|                     |	          nd S |                     |           d S )N>   is_disablerr   rW  unset_variablezno-args-flatteningFz!no-second-level-holder-flattening)r   r   r   r   _unholder_argsr   r   rC   r   r   r   rR   r   unknown_function_called)
r0   r`   r   	h_posargsh_kwargsposargsr   func	func_argsr  s
             r2   r   zInterpreterBase.function_call
  s    N(	 $ 5 5di @ @H //	8DD&w'' 	I=~,~,~::
"":i(DI4!5u== -#G,,	4!DeLL T$@F$S$S!	6 $D$tY//C+.?4??3'''D((3334r3   mparser.MethodNodec                @   |j         }t          |t          j                  r&d|j         d}|                     |j                  }n!|j        j        }|                     |          }|j	        j        }| 
                    |j                  \  }}|                     ||          \  }}	t          ||	          rt                      S t          |t                    st!          | d          |dk    rlt          |t"                    r|                     |j                   n<t          |t                    s't!          d| dt)          |          j                   |x|_        | _        |                    |||	          }
|
|                     |
          nd S )Nz
variable ""z is not callable.extract_objectsz'Invalid operation "extract_objects" on 	 of type )source_objectrp   r   r   r   r   r1   r4   r   namer   r   rl  r   r   r	   r   r   validate_extractionheld_objectr  rR   r   r   )r0   r`   	invocableobject_display_nameobjmethod_nameh_argsro  r   r   r  s              r2   r   zInterpreterBase.method_call  s   &	i00 	5"Ay"A"A"A##IO44CC"+"5">)))44Cio!2249==,,VX>>vtV$$ 	::#011 	N"&9#L#L#LMMM+++#|,, E((9999X.. E&  (DQd  (D  (Dostwoxox  pB  (D  (D  E  E  E/334,ook488'*ts###D@r3   r  $T.Union[TYPE_var, InterpreterObject]c                   t          |t                    r| j                            t	          |          d           }| ||t          j        d|                     S | j                                        D ]6\  }}t          ||          r! ||t          j        d|                     c S 7t          j
        d| dt	          |          j         d          t          |t                    r-t          j
        d| dt	          |          j         d          t          |t                    r|S t          j
        d| dt	          |          j         d          )	Nr&   zObject rw  z9 is neither in self.holder_map nor self.bound_holder_map.zReturned object z is an object holder.zUnknown returned object z in the parameters.)rp   r   rE   getr  TcastrF   r   r   r   r4   r   r
   )r0   r  clstyps       r2   r   zInterpreterBase._holderify8  s   c=)) 	/%%d3ii66C s3}d ; ;<<< 17799 A ASc3'' A3sAF=$$?$?@@@@@A,  .Ss  .S  .ST#YYEW  .S  .S  .S  T  T  T\** 	,-w-w-wdSViiN`-w-w-wxxx344 	J()yC)y)yRVWZR[R[Rd)y)y)yzzzr3   r   T.List[InterpreterObject]r   T.Dict[str, InterpreterObject]&T.Tuple[T.List[TYPE_var], TYPE_kwargs]c                V    d |D             d |                                 D             fS )Nc                ,    g | ]}t          |          S rX   r   r   s     r2   r   z2InterpreterBase._unholder_args.<locals>.<listcomp>N  s    +++	!+++r3   c                4    i | ]\  }}|t          |          S rX   r   r   s      r2   r   z2InterpreterBase._unholder_args.<locals>.<dictcomp>N  s$    -Y-Y-Y$!Qa1-Y-Y-Yr3   )r   )r0   r   r   s      r2   rl  zInterpreterBase._unholder_argsK  s4     ,+d+++-Y-Y&,,..-Y-Y-YYYr3   r   c                (    t          d| d          )NzUnknown function "".)r   )r0   r   s     r2   rm  z'InterpreterBase.unknown_function_calledP  s    <y<<<===r3   mparser.ArgumentNoder   #T.Callable[[mparser.BaseNode], str]r   T.Optional[str]BT.Tuple[T.List[InterpreterObject], T.Dict[str, InterpreterObject]]c                    t          |t          j                  sJ |                                rt	          d           xj        dz  c_         fd|j        D             }t          d |D                       rt	          d          i }|j        	                                D ]\  }} ||          }t          |t          j
                  sJ                      |          }	|	t	          d| d          | _        |r&||v r"t	          |                    |                    |	||<    xj        dz  c_                             |          }
||
fS )Nz9All keyword arguments must be after positional arguments.r   c                :    g | ]}                     |          S rX   )r   )r   argr0   s     r2   r   z4InterpreterBase.reduce_arguments.<locals>.<listcomp>`  s'    NNNt..s33NNNr3   c              3     K   | ]}|d u V  	d S rW   rX   r   s     r2   	<genexpr>z3InterpreterBase.reduce_arguments.<locals>.<genexpr>a  s&      ..QqDy......r3   z,At least one value in the arguments is void.zValue of key z	 is void.)rp   r   ArgumentNodeincorrect_orderr   rO   r   anyr   r   rQ   r   rR   formatexpand_default_kwargs)r0   r   r   r   reduced_pos
reduced_kwr   rM  reduced_keyreduced_valfinal_kws   `          r2   r   z InterpreterBase.reduce_argumentsS  s    $ 455555!! 	`"#^___q NNNNt~NNN..+..... 	S"#QRRR57
))++ 		2 		2HC&,s++Kc7#34444411#66K"&'M{'M'M'MNNN #D" P{j'@'@&':'A'A+'N'NOOO&1J{##q --j99H$$r3   *T.Dict[str, T.Optional[InterpreterObject]]c                V   d|vr|S t          |                    d                    }t          |t                    st	          d          d|v rt	          d          |                                D ]4\  }}||v rt	          d| d          |                     |          ||<   5|S )Nr   z%Value of "kwargs" must be dictionary.zWKwargs argument must not contain a "kwargs" entry. Points for thinking meta, though. :PzEntry "z<" defined both as a keyword argument and in a "kwarg" entry.)r    poprp   r   r   r   r   )r0   r   	to_expandr   r   s        r2   r  z%InterpreterBase.expand_default_kwargsr  s    6!!Mfjj2233	)T** 	P&'NOOOy  &  (A  B  B  BOO%% 	+ 	+DAqF{{*+tQ+t+t+tuuu**F1IIr3   mparser.AssignmentNodec                   t          |t          j                  sJ | j        dk    r!t	          t          j        d                    |j        j        }t          |t                    st	          d          | 
                    |j                  }t          |t                    rt          j        |          }|                     ||           d S )Nr   z                Tried to assign values inside an argument list.
                To specify a keyword argument, use : instead of =.
            z(Tried to assign value to a non-variable.)rp   r   r   rO   r   textwrapdedentr]  r   r*   r   r   copydeepcopyrW  )r0   r`   r]  r   s       r2   r   zInterpreterBase.assignment  s    $ 677777!##"8? 4 $ $    =&(C(( 	O"#MNNN''
33e566 	)M%((E(E*****r3   F)	holderifyr^  variabler  c               n   |t          d          |r|                     |          }nAt          |t                    s,t	          j        d| dt          |          j                   t          |t                    st          d          || j	        v rt          d| d          || j
        |<   d S )Nz Can not assign void to variable.zDset_variable in InterpreterBase called with a non InterpreterObject rw  z0First argument to set_variable must be a string.z&Tried to overwrite internal variable "ru  )r   r   rp   r	   r   r   r  r4   r*   rD   rN   )r0   r^  r  r  s       r2   rW  zInterpreterBase.set_variable  s   @AAA 	fx00HH h(9:: f0  2e  yA  2e  2e  LP  QY  LZ  LZ  Lc  2e  2e  f  f  f'3'' 	RPQQQdl""QwQQQRRR"*wr3   c                    || j         v r| j         |         S || j        v r| j        |         S t          d| d          )NzUnknown variable "r  )rD   rN   r   )r0   r^  s     r2   r   zInterpreterBase.get_variable  sP    dl""<((dn$$>'**:w:::;;;r3   buildtargetmesonlib.HoldableObjectc                     t          d          )NzJvalidate_extraction is not implemented in this context (please file a bug))r   )r0   r  s     r2   rz  z#InterpreterBase.validate_extraction  s    "#opppr3   c                b   ddl m} t          j                            | j        | j        d          }t          j                            | j        | j        d          }t          j                            |          rt          j                            |          rIt          j                            ||          rt          j
        d           n3t          j        d          t          j        dd| j        d	           n|}t          j                            |          rt!          |d
          5 }|t#          j        |                                                                          f| j        j        | j        <   d d d            n# 1 swxY w Y   |                    | j        j        j        | j                  }|                    |           | j        j                            |j        | j                   | j                            |           d S d | j        j        | j        <   d S )Nr   )optinterpreterzmeson.optionszmeson_options.txtz`Not warning about meson.options with version minimum < 1.1 because meson_options.txt also existszJmeson.options and meson_options.txt both exist, but are not the same file.zmeson.options filez1.1zUse meson_options.txt insteadrb) r  ri   rj   rk   r:   r;   existssamefiler   debugr   r  r   r   r<   ra   hashlibsha1rb   	hexdigestrM   options_filesOptionInterpreterr   optstoreprocessupdate_project_optionsoptionsrH   rm   )r0   r  option_fileold_option_filere   ois         r2   _load_option_filez!InterpreterBase._load_option_file  s>   %%%%%%
 gll4#3T[/RR',,t'7FYZZ7>>+&& 		*w~~o.. u7##KAA @J   B  C  C  C  C"12~%&:E4?Tstttt)K7>>+&& 
	@k4(( qA ALW\Z[Z`Z`ZbZbMcMcMmMmMoMo?p+DO<q q q q q q q q q q q q q q q  11$2B2K2TVZVeffBJJ{###M"99"*doVVV $$[11111;?DM'888s   2AFFFrootdir
new_subdirT.Tuple[str, bool]c                t   t           j                            | j        |          }t           j                            ||          }t           j                            |          }t           j                            |t
          j                  }|| j        v r|dfS | j                            |           |dfS NFT)	ri   rj   rk   r;   realpathr   rl   rJ   rm   )r0   r  r  r;   absdirsymlinkless_dir
build_files          r2   _resolve_subdirzInterpreterBase._resolve_subdir  s    dk:66gv..'**622W\\/;3MNN
2225= !%%j111t|r3   visitors"T.Optional[T.Iterable[AstVisitor]]c                   t           j                            |t          j                  }| j                            |           t           j                            ||          }t           j                            |          sdS |                     ||          }	 t          j
        ||                                          }n # t          j        $ r}||_        |d }~ww xY w	 | j        }	|| _        |r|D ]}
|                    |
           |                     |           n# t$          $ r Y nw xY w|	| _        n# |	| _        w xY wdS r  )ri   rj   rk   r   rl   rH   rm   rn   rg   r   rq   rr   r   r  ru   r;   acceptr|   r   )r0   r  r;   r  buildfilenameabsnamerw   	codeblockrx   prev_subdirvisitors              r2   _evaluate_subdirz InterpreterBase._evaluate_subdir  sc   V[-GHH  ///',,w66w~~g&& 	5""7M::	tW55;;==II& 	 	 	BGH	
	&+K DK .' . .G$$W----##I....  	 	 	D	 &DKK+DK%%%%tsB   'C C"	CC"&?D& %D> &
D30D> 2D33D> >	E)
r:   r*   r;   r*   r<   r"   r=   r*   r>   r?   )T)rT   rU   r+   r,   )rZ   r*   r[   r*   r+   r*   )r+   r,   )r   N)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+   r	   )r   r#  r+   r	   )r   r+  r+   r	   )r   r-  r+   r	   )r   r0  r+   r	   )r`   r=  r+   r   )r`   rB  r+   r	   )r`   rP  r+   r,   )r`   r[  r+   r,   )r`   rb  r+   r	   )r`   rh  r+   r   )r`   rs  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  r  r  rU   r+   r,   )r^  r*   r+   r	   )r  r  r+   r,   )r  r*   r  r*   r+   r  rW   )r  r*   r;   r*   r  r  r+   rU   ),r4   r5   r6   r/   rY   rg   ry   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   rl  rm  r   r   r  r   rW  r   rz  r  r  r  rX   r3   r2   r9   r9   G   s       7 7 7 76    b b b b   ,1 1 1 1 C  C  C  CD       0: : : :xB B B B Z!!M M M "!MI I I I   :   N N N N>J J J J J J J J L L L L$ $ $ $*< < < < Z*H55+ + + 65+ Z (++$ $ $ ,+$"   :. . . .R R R R   (A A A A4{ { { {&Z Z Z Z
> > > > EX7;	% % % % %>   + + + +  ot + + + + + +< < < <q q q q@ @ @ @>         r3   r9   )D
__future__r   r  r   r   r   baseobjectsr	   r
   r   r   r   r   r   
exceptionsr   r   r   r   r   r   r   
decoratorsr   disablerr   r   helpersr   r   r   r   r"  r   r    ri   r  r  rO  r   typingr  r  TYPE_CHECKINGr!   r"   r#   r$   rs   r%   interpreterr&   DictUnionTypeHoldableObjectr   rU   r*   rJ  r   CallableHolderMapTyperQ   ListFunctionTyper(   r9   rX   r3   r2   <module>r     s3   # " " " " " - - - - - - - - - -	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	                      " " " " " " + + + + + + + + g g g g g g g g g g g g # # # # # #             % % % % % % % % % % % % % % % % % % % %     ? XXXXXXXXXXXX      ))))))F	F8*+F3KF4LF3KF4LF4L	
 	

,m<lKc>dde		fM 6	
G$afX&6sH}8MNPXXY	ZLU U U U U U U Ud
 d
 d
 d
 d
 d
 d
 d
 d
 d
r3   