
    <h              	      &   S SK Jr  SSKJrJrJr  SSKJrJrJ	r	J
r
JrJrJr  SSKJrJrJrJrJrJr  SSKJr  SSKJr  SS	KJrJr  SS
KJrJrJrJr  SSK J!r!  SSK"J"r"  S SK#r#S SK$r$S SK%r%S SK&r&S SK'r'S SK(r)S SK*r*\)RV                  (       a  SSKJ,r,J-r-J.r.J/r/  SSK0J1r1  SSK2J3r3  \)Rh                  \)Rj                  \)Rl                  \Rn                     \)Rl                  \8   \)Rl                  \9   \)Rl                  \:   \)Rl                  \;   \)Rl                  \<   4   \)Rz                  \,S/\
\,   4   4   r>\)Rh                  \:\)Rz                  \R~                  \)R                  \/   \)Rh                  \:\/4   /\/4   4   rA " S S\5      rB " S S5      rCg)    )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                  ,   ^  \ rS rSrSU 4S jjrSrU =r$ )InvalidCodeOnVoidA   c                .   > [         TU ]  SU< S35        g )NzCannot perform z operation on void statement.)super__init__)selfop_type	__class__s     ڋ/mnt/mint/home/seanl/mnt/public/Repos/ladybird/Build/vcpkg/downloads/tools/meson-1.9.0-d1fcc2/mesonbuild/interpreterbase/interpreterbase.pyr+   InvalidCodeOnVoid.__init__C   s    ?7+5RST     )r-   strreturnNone)__name__
__module____qualname____firstlineno__r+   __static_attributes____classcell__)r.   s   @r/   r'   r'   A   s    U Ur1   r'   c                     \ rS rSrS3S jrS4S5S jjrS6S jrS7S jrS7S jrS7S jr	S7S jr
S8S9S
 jjrS:S jrS;S jr\" SS5      S<S j5       rS=S jrS>S jrS?S jrS@S jrSAS jrSBS jrSCS jrSDS jrSES jr\" SS5      SFS j5       r\" SS5      SFS j5       rSGS jrSHS  jrSIS! jrSJS" jrSKS# jrSLS$ jr       SMS% jr!SNS& jr"\#S	4       SOS' jjr$SPS( jr%SQS) jr&S*S+.SRS, jjr'SSS- jr(STS. jr)S7S/ jr*SUS0 jr+SVSWS1 jjr,S2r-g	)XInterpreterBaseG   c                r   Xl         0 U l        0 U l        0 U l        0 U l        [
        R                  " 5       U l        [        5       U l	        X l
        X l        X0l        X@l        XPl        UR                  5       U l        0 U l        SU l        SU l        [(        R*                  " SSS5      U l        S U l        g )Nr   sentinel)source_rootfuncsbuiltin
holder_mapbound_holder_mapr   
OrderedSetbuild_def_filessetprocessed_buildfilessubdirroot_subdir
subprojectsubproject_dirr   get_coredatacoredata	variablesargument_depthcurrent_linenor   BaseNodecurrent_nodetmp_meson_version)r,   rB   rK   rM   rN   envs         r/   r+   InterpreterBase.__init__H   s    &#%
79)+/19A9L9L9N03!!$,((*9;  $,,RZ@
 37r1   c                    g Nr2   )r,   stricts     r/   handle_meson_version_from_ast-InterpreterBase.handle_meson_version_from_astc   s    r1   c                     [        USS9 nUR                  5       sS S S 5        $ ! , (       d  f       g = f! [         a5  n[        R                  " SSU5      n[
        R                  " SU 3US9eS nAff = f)Nutf-8encodingr   z'Build file failed to parse as unicode: )node)openreadUnicodeDecodeErrorr   rT   r   	from_node)r,   fnameerrnameferb   s         r/   read_buildfileInterpreterBase.read_buildfileg   sl    	beg.!vvx /..! 	b##Aq'2D''*QRSQT(U\`aa	bs)   
7 &	7 
47 7 
A60A11A6c                   [         R                  R                  U R                  [        R
                  5      nU R                  R                  U5        [         R                  R                  U R                  U5      n[         R                  R                  U5      (       d  [        SU 35      eU R                  X"5      nUR                  5       (       a  [        S5      e[        U[        5      (       d   e [         R"                  " X25      R%                  5       U l        U R)                  5         g ! [         R*                   a?  nX$l        UR&                  (       a!  UR&                  U l        U R)                  5         UeS nAff = f)NzMissing Meson file in zBuilder file is empty.)ospathjoinrK   r   build_filenamerH   addrB   isfiler   rk   isspacer   
isinstancer3   r   Parserparseastr\   ParseExceptionfile)r,   rq   	mesonfilecodemes        r/   load_root_meson_file$InterpreterBase.load_root_meson_fileo   s   dkk;3M3MN  0GGLL!1!1>B	ww~~i(("%;I;#GHH""98<<>>677$$$$$
	~~d6<<>DH..0%% 	Gvv 66224H	s   99D3 3F:FFc                8    U R                  U R                  SS9  g)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_codeblockrx   r,   s    r/   parse_projectInterpreterBase.parse_project   s    
 	a0r1   c                V   SS jnU" U R                   5      (       d  [        R                  " U R                  5      R	                  5       nUnUR
                   Hz  nUS-  R                  5       (       a_  [        US-  SS9 nUR                  5       nS S S 5         [        R                  " WS5      R                  5       nU" U5      (       a  Un  OMz    O   SnX2:w  a  [        SU SU S	35      e[        S
U 35      eg ! , (       d  f       Ns= f! [        R                   a     M  f = f)Nc                    [        U [        R                  5      (       d  [        S5      eU R                  (       d  [        S5      eU R                  S   n[        U[        R
                  5      =(       a    UR                  R                  S:H  $ )Nz5AST is of invalid type. Possibly a bug in the parser.zNo statements in code.r   project)ru   r   CodeBlockNoder   linesFunctionNode	func_namevalue)rx   firsts     r/   _is_project5InterpreterBase.sanity_check_ast.<locals>._is_project   si    c7#8#899!"YZZ99!":;;IIaLEeW%9%9:au?T?TXa?aar1   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: )rx   mparser.CodeBlockNoder4   object)rx   pathlibPathrB   resolveparentsis_filerc   rd   r   rv   rw   ry   r   )	r,   r   pfoundparentri   r|   rx   errors	            r/   sanity_check_ast InterpreterBase.sanity_check_ast   s#   	b 488$$T--.668AE))]*3355f}4wG1 vvx H!%nnT7;AAC #3'' & (  $  BEz!$:5'Atuzt{{}"~!$9%"ABB/ %
 HG
 #11 ! !s   C?%D?
D	D('D(c                Z     U R                  U R                  SS9  g ! [         a     g f = f)Nr   )start)r   rx   r   r   s    r/   runInterpreterBase.run   s0    	##DHHA#6  		s    
**Nc                   Uc  g [        U[        R                  5      (       d/  [        S5      nUR                  Ul        UR
                  Ul        UeUR                  X# nSnU[        U5      :  a-  XV   n U R                  U5        US-  nU[        U5      :  a  M,  g g ! [         a  n[        USS 5      c~  U R                  R                  Ul        U R                  R
                  Ul        [        R                  R                  U R                  U R                   ["        R$                  5      Ul        UeS nAff = f)Nz?Tried to execute a non-codeblock. Possibly a bug in the parser.r   linenor   )ru   r   r   r   r   colnor   lenevaluate_statement	ExceptiongetattrrU   rn   ro   rp   rB   rK   r   rq   rz   )r,   rb   r   r   rj   
statementsicurs           r/   r   "InterpreterBase.evaluate_codeblock   s   <$ 5 566]^A{{AHjjAGGZZ*
#j/!-C	'', FA #j/!  1h-5  $0077AH"//55AGWW\\$*:*:DKKIcIcdAFs   7B   
D=*BD88D=c                	   Xl         [        U[        R                  5      (       a  U R	                  U5      $ [        U[        R
                  5      (       a  U R                  U5        g [        U[        R                  5      (       a  U R                  U5        g [        U[        R                  5      (       a  U R                  U5      $ [        U[        R                  5      (       a_  UR                  (       a3  UR                  (       a  U R                  U5      $ U R                  U5      $ U R!                  UR"                  5      $ [        U[        R$                  5      (       a  U R!                  UR"                  5      $ [        U[        R&                  5      (       a  U R)                  U5      $ [        U[        R*                  5      (       a  U R-                  UR"                  5      $ [        U[        R.                  5      (       a  U R1                  U5      $ [        U[        R2                  5      (       a  U R5                  U5      $ [        U[        R6                  5      (       a  U R9                  U5      $ [        U[        R:                  5      (       a  U R!                  UR"                  5      $ [        U[        R<                  5      (       a  U R?                  U5      $ [        U[        R@                  5      (       a  U RC                  U5      $ [        U[        RD                  5      (       a  U RG                  U5      $ [        U[        RH                  5      (       a  U RK                  U5      $ [        U[        RL                  5      (       a  U RO                  U5      $ [        U[        RP                  5      (       a  U RS                  U5        g [        U[        RT                  5      (       a  U RW                  U5      $ [        U[        RX                  5      (       a  U R[                  U5      $ [        U[        R\                  5      (       a
  [_        5       e[        U[        R`                  5      (       a
  [c        5       e[        U[        Rd                  5      (       a  U Rg                  URh                  5      $ [        U[        Rj                  5      (       a  U Rm                  U5      $ [o        S5      e)NzUnknown statement.)8rU   ru   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   )r,   r   s     r/   r   "InterpreterBase.evaluate_statement   s   c7//00%%c**W7788$$S)j i W3344OOC f e W//00##C((W//00~~##::3??0055syy11W0011??399--W1122##C((W^^,,$$SYY//W3344++C00W..////44W--....s33W//00??399--W__----c22W^^,,,,S11W__----c22W//000055W334444S99W6677!!#&  W..//))#..W0011((--W1122!##W..//. W6677**39955W7788))#..233r1   c                    U R                  UR                  5      u  p#[        U5      S:  a  [        S5      eU R	                  U Vs/ s H  n[        U5      PM     sn5      $ s  snf )Nr   z4Keyword arguments are invalid in array construction.)reduce_argumentsargsr   r   r   r   )r,   r   	argumentskwargsxs        r/   r   'InterpreterBase.evaluate_arraystatement
  sU    "33CHH=v;?TUUi@i	!i@AA@s   A#dictz0.47.0c           
        ^  SU 4S jjnT R                  UR                  USS9u  p4U(       a   eT R                  UR                  5        VVs0 s H  u  pVU[	        U5      _M     snn5      $ s  snnf )Nc                  > [        U [        R                  5      (       d"  [        R                  " SSTR
                  5        TR                  U 5      nUc  [        S5      e[        U5      n[        U[        5      (       d  [        S5      eU$ )Nz&Dictionary entry using non literal keyz0.53.0zKey cannot be void.zKey must be a string)
ru   r   r   r   
single_userM   r   r   r   r3   )key
key_holderstr_keyr,   s      r/   resolve_key;InterpreterBase.evaluate_dictstatement.<locals>.resolve_key  s{    c7#5#566%%&NPXZ^ZiZij005J!&'<==
+Ggs++&'=>>Nr1   zDuplicate dictionary key: {})key_resolverduplicate_key_error)r   mparser.BaseNoder4   r3   )r   r   r   itemsr   )r,   r   r   r   r   kvs   `      r/   r   &InterpreterBase.evaluate_dictstatement  si    		 !11#((  kI1  J	}FLLNKNDA9Q<NKLLKs   A.
c                    U R                  UR                  5      nUc  [        S5      e[        U[        5      (       a  U$ U R                  UR                  [        R                  S 5      5      $ )Nnot)	r   r   r'   ru   r   r   operator_callr   NOTr,   r   r   s      r/   r   %InterpreterBase.evaluate_notstatement   sX    ##CII.9#E**a""Hq}/@/@$GHHr1   c           	     "   [        U[        R                  5      (       d   eUR                   GHm  nS U l        U R                  UR                  5      nUc  [        S5      e[        U[        5      (       a  Us  $ [        U[        5      (       d0  [        R                  " SU S[        U5      R                   S35      eUR                  [        R                   S 5      n[        U["        5      (       d  [%        SU< S35      eU(       d  M  [        R&                  U R(                     nU R                  (       a'  U R                  [        R&                  U R(                  '    U R+                  UR,                  5        U[        R&                  U R(                  '     g    [        UR.                  [        R0                  5      (       d%  U R+                  UR.                  R,                  5        g ! U[        R&                  U R(                  '   f = f)NifzArgument to if (z") is not an InterpreterObject but .z
If clause z$ does not evaluate to true or false.)ru   r   r   ifsrV   r   	conditionr'   r   r	   r   MesonBugExceptiontyper6   r   r   BOOLboolr   project_meson_versionsrM   r   block	elseblock	EmptyNode)r,   rb   r   resultresprev_meson_versions         r/   r   InterpreterBase.evaluate_if(  s   $ 4 45555A &*D",,Q[[9F~'--&(++f&788003CF8Kmnrsynz  oD  oD  nE  EF  2G  H  H&&}'9'94@Cc4((!Jvj8\"]^^s%-%D%DT__%U"))GKG]G]H33DOODZ++AGG4GYH33DOOD- . $..'*;*;<<##DNN$8$89	 HZH33DOODs   $G//Hc                    U R                  UR                  5      n[        U[        5      (       a  U$ [        U[        5      (       d  [        SU< S35      eU   U R                  UR                  5        S S S 5        g ! , (       d  f       g = f)Nztestcase clause z( does not evaluate to a context manager.)r   r   ru   r   r   r   r   r  )r,   rb   r	  s      r/   r   !InterpreterBase.evaluate_testcaseE  st    ((8fh''M&"677 0
:bcdd##DJJ/  Vs   A??
Bc           	        U R                  UR                  5      nUc  [        R                  " S5      e[	        U[
        5      (       a  U$ U R                  UR                  5      nUc  [        R                  " S5      e[	        U[
        5      (       a  U$ [        R                  [        R                  [        R                  [        R                  [        R                  [        R                  [        R                  [        R                  S.UR                      nU[        R                  [        R                  4;   a  X2p2Xl        U R%                  UR'                  U[)        U5      5      5      $ )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   MesonExceptionru   r   rightr   INNOT_INEQUALS
NOT_EQUALSGREATERLESSGREATER_EQUALSLESS_EQUALSctyperU   r   r   r   )r,   rb   val1val2operators        r/   r   #InterpreterBase.evaluate_comparisonO  s!   &&tyy1<))*abbdH%%K&&tzz2<))*bccdH%%K  """))&&**&&##..++	
 **	 ((-*>*>??$ t11(IdOLMMr1   c                   U R                  UR                  5      nUc  [        R                  " S5      e[	        U[
        5      (       a  U$ UR                  [        R                  S 5      nU(       d  U R                  U5      $ U R                  UR                  5      nUc  [        R                  " S5      e[	        U[
        5      (       a  U$ U R                  UR                  [        R                  S 5      5      $ Nr  r  r   r  r   r  ru   r   r   r   r  r   r  r,   r   ll_boolrs        r/   r   %InterpreterBase.evaluate_andstatementn  s    ##CHH-9))*abba""H!3!3T:??6**##CII.9))*bcca""Hq}/A/A4HIIr1   c                   U R                  UR                  5      nUc  [        R                  " S5      e[	        U[
        5      (       a  U$ UR                  [        R                  S 5      nU(       a  U R                  U5      $ U R                  UR                  5      nUc  [        R                  " S5      e[	        U[
        5      (       a  U$ U R                  UR                  [        R                  S 5      5      $ r'  r(  r)  s        r/   r   $InterpreterBase.evaluate_orstatement~  s    ##CHH-9))*abba""H!3!3T:??6**##CII.9))*bcca""Hq}/A/A4HIIr1   c                    U R                  UR                  5      nUc  [        S5      e[        U[        5      (       a  U$ Xl        U R                  UR                  [        R                  S 5      5      $ )Nzunary minus)
r   r   r'   ru   r   rU   r   r   r   UMINUSr   s      r/   r   (InterpreterBase.evaluate_uminusstatement  s]    ##CII.9#M22a""Hq}/C/CTJKKr1   c                   U R                  UR                  5      n[        U[        5      (       a  U$ U R                  UR                  5      n[        U[        5      (       a  U$ Ub  Uc  [        UR                  5      e[        R                  [        R                  [        R                  [        R                  [        R                  S.nXl        UR                  XAR                     [        U5      5      nU R!                  U5      $ )N)rr   submuldivmod)r   r  ru   r   r  r'   	operationr   PLUSMINUSTIMESDIVMODrU   r   r   r   )r,   r   r*  r,  mappingr
  s         r/   r   ,InterpreterBase.evaluate_arithmeticstatement  s    ##CHH-a""H##CII.a""H9	#CMM22 !%% && && $$ $$/
 oogmm4ilCs##r1   c                   [        U[        R                  5      (       d   eU R                  UR                  5      nUc  [
        R                  " S5      e[        U[        5      (       a  U$ Xl        UR                  [        R                  S 5      nU(       a  U R                  UR                  5      $ U R                  UR                  5      $ )Nz>Cannot use a void statement as condition for ternary operator.)ru   r   r   r   r   r   r  r   rU   r   r   r  	trueblock
falseblock)r,   rb   r	  result_bools       r/   r    InterpreterBase.evaluate_ternary  s    $ 3 34444((8>))*jkkfh''M"**=+=+=tD**4>>::**4??;;r1   zmultiline format stringsz0.63.0c                $    U R                  U5      $ rZ   )r   )r,   rb   s     r/   r   *InterpreterBase.evaluate_multiline_fstring  s    $$T**r1   zformat stringsz0.58.0c                x   ^  SU 4S jjn[         R                  " SX!R                  5      nT R                  U5      $ )Nc                  > [        U R                  S5      5      n [        TR                  U   5      n[	        U[
        [        45      (       a+  [        R                  " SSTR                  TR                  S9   [        UTR                  5      $ ! [         a  n[        S[        U5       35      eS nAff = f! [         a    [        SU S35      ef = f)Nr   zList or dictionary in f-stringz1.3.0)locationz
f-string: zIdentifier "z" does not name a variable.)r3   groupr   rQ   ru   listr   r   r   rM   rU   r   r   KeyErrorr   )matchvarvalrj   r,   s       r/   replace1InterpreterBase.evaluate_fstring.<locals>.replace  s    ekk!n%C	Ss 34cD$<00))*JGUYUdUdos  pA  pA  BB1#tGG' B*ZAx+@AAB S!L5P"QRRSs*   AB; <B 
B8B33B88B; ;Cz@([_a-zA-Z][_0-9a-zA-Z]*)@)rM  zT.Match[str]r4   r3   )rer4  r   r   )r,   rb   rP  r
  s   `   r/   r    InterpreterBase.evaluate_fstring  s/    	S ff2GZZHs##r1   c           	     <   [        U[        R                  5      (       d   eU R                  UR                  5      n[        U[
        5      (       d  [        S5      eUR                  5       n[        UR                  5      U=(       d    S:w  a(  [        SU=(       d    S SUR                  5        35      eUR                  5        GH3  nUch  [        U[        5      (       a  [        R                  " SU S35      eU R                  UR                  S   R                   U R#                  U5      5        O[        U[        5      (       d  [        R                  " SU SU 35      e[        U5      U:w  a  [        R                  " SU SU 35      e[%        U5       H=  nU R                  UR                  U   R                   U R#                  XE   5      5        M?      U R'                  UR(                  5        GM6     g ! [*         a     GMG  [,         a       g f = f)	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 )ru   r   r   r   r   r   r   iter_tuple_sizer   varnamesdisplay_name	iter_selftupler   r  set_variabler   r   ranger   r  r   r   )r,   rb   r   tsizer   js         r/   r    InterpreterBase.evaluate_foreach  s   $ 9 9::::''

3%00"#STT%%'t}}%*1-"%=ejq\Iwx}  yK  yK  yM  xN  $O  P  P"A}a''"44}UG  LC  6D  E  E!!$--"2"8"8$//!:LM!!U++"44}UG  LE  FK  EL  6M  N  Nq6U?"44}UG  LE  FK  EL  6M  N  NuA%%dmmA&6&<&<dooad>ST &''

3 # #  s   H  
H	HHc                   [        U[        R                  5      (       d   eUR                  R                  nU R                  UR                  5      nUc  [        S5      eU R                  U5      nXl        U R                  UR                  [        R                  [        U5      5      5      nU R                  X%5        g )Nzplus assign)ru   r   r   var_namer   r   r'   r   rU   r   r   r   r9  r   rZ  )r,   rb   varnameadditionold_variable	new_values         r/   r   #InterpreterBase.evaluate_plusassign  s    $ : :;;;;--%%**4::6#M22 ((1$(!OOL$>$>}?Q?QS\]eSf$gh	'-r1   c                   [        U[        R                  5      (       d   eU R                  UR                  5      nUc  [        S5      e[        U[        5      (       a  U$ U R                  UR                  5      nUc  [        S5      e[        U5      nXl
        U R                  UR                  [        R                  U5      5      $ )Nz#Tried to evaluate indexing on void.z#Cannot use void statement as index.)ru   r   r   r   iobjectr   r   indexr   r   rU   r   r   r   INDEX)r,   rb   rg  index_holderrh  s        r/   r   !InterpreterBase.evaluate_indexing  s    $ 1 12222))$,,7?&'LMMgx((N..tzz:"#HII,'#w44]5H5H%PQQr1   c                   UR                   R                  nU R                  UR                  5      u  p4U R	                  X45      u  pV[        XV5      (       a  US;  a
  [        5       $ X R                  ;   ar  U R                  U   nUn[        USS5      (       d  [        U5      n[        USS5      (       d  [        X5      u  pXl        U" XU5      n	U	b  U R                  U	5      $ S $ U R                  U5        g )N>   is_disablerr   rZ  unset_variablezno-args-flatteningFz!no-second-level-holder-flattening)r   r   r   r   _unholder_argsr   r   rC   r   r   r   rU   r   unknown_function_called)
r,   rb   r   	h_posargsh_kwargsposargsr   func	func_argsr
  s
             r/   r   InterpreterBase.function_call
  s    NN((	 $ 5 5dii @ //	Dw''I=~,~:

"::i(DI4!5u==#G,	4!DeLL$@$S!	 $t/C+.?4??3'DD((3r1   c                P   UR                   n[        U[        R                  5      (       a,  SUR                   S3nU R                  UR                  5      nO'UR                  R                  nU R                  U5      nUR                  R                  nU R                  UR                  5      u  pgU R                  Xg5      u  p[        X5      (       a
  [        5       $ [        U[        5      (       d  [!        U S35      eUS:X  aj  [        U["        5      (       a  U R%                  UR&                  5        O9[        U[        5      (       d$  [!        SU S[)        U5      R                   35      eU=Ul        U l        UR-                  XXU	5      n
U
b  U R/                  U
5      $ S $ )Nz
variable ""z is not callable.extract_objectsz'Invalid operation "extract_objects" on 	 of type )source_objectru   r   r   r   r   r.   r6   r   namer   r   ro  r   r   r	   r   r   validate_extractionheld_objectr  rU   r   r   )r,   rb   	invocableobject_display_nameobjmethod_nameh_argsrr  r   r   r
  s              r/   r   InterpreterBase.method_call  s   &&	i00$.y.?q"A##IOO4C"+"5"5">">)))4Ciioo!22499=,,V>t$$:#011"&9%::K#LMM++#|,,((9X..&)PQdPeenostwox  pB  pB  oC  (D  E  E/334,ook8'*ts#@D@r1   c                   [        U[        5      (       a  U R                  R                  [	        U5      S 5      nUb  U" U[
        R                  " SU 5      5      $ U R                  R                  5        H5  u  p2[        X5      (       d  M  U" U[
        R                  " SU 5      5      s  $    [        R                  " SU S[	        U5      R                   S35      e[        U[        5      (       a0  [        R                  " SU S[	        U5      R                   S35      e[        U[        5      (       a  U$ [        R                  " SU S[	        U5      R                   S35      e)	Nr%   zObject rz  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.)ru   r   rE   getr  TcastrF   r   r   r  r6   r   r
   )r,   r
  clstyps       r/   r   InterpreterBase._holderify8  s?   c=))//%%d3i6C 3}d ;<< 11779c''sAFF=$$?@@ : ,,wse9T#YEWEWDX  YR  .S  T  T\**,,/?uIdSViN`N`Maav-wxx344J((+CC5	RVWZR[RdRdQeex)yzzr1   c           	         U Vs/ s H  n[        U5      PM     snUR                  5        VVs0 s H  u  pEU[        U5      _M     snn4$ s  snf s  snnf rZ   )r   r   )r,   r   r   r   r   r   s         r/   ro  InterpreterBase._unholder_argsK  sG     '++d	!d+&,,.-Y.$!a1o.-YYY+-Ys
   AAc                     [        SU S35      e)NzUnknown function "".)r   )r,   r   s     r/   rp  'InterpreterBase.unknown_function_calledP  s    .yk<==r1   c                   [        U[        R                  5      (       d   eUR                  5       (       a  [	        S5      eU =R
                  S-  sl        UR                   Vs/ s H  o@R                  U5      PM     nn[        S U 5       5      (       a  [	        S5      e0 nUR                  R                  5        H  u  pxU" U5      n	[        U[        R                  5      (       d   eU R                  U5      n
U
c  [	        SU	 S35      eXpl        U(       a  X;   a  [	        UR                  U	5      5      eXU	'   M     U =R
                  S-  sl        U R                  U5      nX[4$ s  snf )Nz9All keyword arguments must be after positional arguments.r   c              3  (   #    U  H  oS L v   M
     g 7frZ   r2   ).0r   s     r/   	<genexpr>3InterpreterBase.reduce_arguments.<locals>.<genexpr>a  s     .+QDy+s   z,At least one value in the arguments is void.zValue of key z	 is void.)ru   r   ArgumentNodeincorrect_orderr   rR   r   r   anyr   r   rT   rU   formatexpand_default_kwargs)r,   r   r   r   argreduced_pos
reduced_kwr   rO  reduced_keyreduced_valfinal_kws               r/   r    InterpreterBase.reduce_argumentsS  sQ    $ 4 45555!!"#^__q ?C~~N~..s3~N.+..."#QRR57
))+HC&s+Kc7#3#3444411#6K"&{m9'MNN #"{'@&':'A'A+'NOO&1{# , 	q --j9$$! Os   %E-c                ,   SU;  a  U$ [        UR                  S5      5      n[        U[        5      (       d  [	        S5      eSU;   a  [	        S5      eUR                  5        H,  u  p4X1;   a  [	        SU S35      eU R                  U5      X'   M.     U$ )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   popru   r   r   r   r   )r,   r   	to_expandr   r   s        r/   r  %InterpreterBase.expand_default_kwargsr  s    6!Mfjj23	)T**&'NOOy &  (A  B  BOO%DA{*WQC7s+tuu*FI & r1   c                   [        U[        R                  5      (       d   eU R                  S:w  a  [	        [
        R                  " S5      5      eUR                  R                  n[        U[        5      (       d  [	        S5      eU R                  UR                  5      n[        U[        5      (       a  [        R                  " U5      nU R                  X#5        g )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.)ru   r   r   rR   r   textwrapdedentr`  r   r3   r   r   copydeepcopyrZ  )r,   rb   r`  r   s       r/   r   InterpreterBase.assignment  s    $ 6 67777!#"8?? 4 $   ==&&(C(("#MNN''

3e566MM%(E(*r1   F)	holderifyc               r   Uc  [        S5      eU(       a  U R                  U5      nOD[        U[        5      (       d/  [        R
                  " SU S[        U5      R                   35      e[        U[        5      (       d  [        S5      eXR                  ;   a  [        SU S35      eX R                  U'   g )Nz Can not assign void to variable.zDset_variable in InterpreterBase called with a non InterpreterObject rz  z0First argument to set_variable must be a string.z&Tried to overwrite internal variable "rx  )r   r   ru   r	   r   r  r  r6   r3   rD   rQ   )r,   ra  variabler  s       r/   rZ  InterpreterBase.set_variable  s    @AAx0H h(9::003w  yA  xB  BK  LP  QY  LZ  Lc  Lc  Kd  2e  f  f'3''PQQll" FwiqQRR"*wr1   c                    XR                   ;   a  U R                   U   $ XR                  ;   a  U R                  U   $ [        SU S35      e)NzUnknown variable "r  )rD   rQ   r   )r,   ra  s     r/   r   InterpreterBase.get_variable  sI    ll"<<((nn$>>'**.wir:;;r1   c                    [        S5      e)NzJvalidate_extraction is not implemented in this context (please file a bug))r   )r,   buildtargets     r/   r}  #InterpreterBase.validate_extraction  s    "#oppr1   c                *   SSK Jn  [        R                  R	                  U R
                  U R                  S5      n[        R                  R	                  U R
                  U R                  S5      n[        R                  R                  U5      (       a  [        R                  R                  U5      (       aQ  [        R                  R                  X#5      (       a  [        R                  " S5        O<[        R                  " S5      e[        R                  " SSU R                  S	5        OUn[        R                  R                  U5      (       Ga  [!        US
5       nU["        R$                  " UR'                  5       5      R)                  5       4U R*                  R,                  U R                  '   S S S 5        UR/                  U R0                  R*                  R2                  U R                  5      nUR5                  U5        U R*                  R2                  R7                  UR8                  U R                  5        U R:                  R=                  U5        g S U R*                  R,                  U R                  '   g ! , (       d  f       N= f)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  rn   ro   rp   rB   rK   existssamefiler   debugr   r  r   r   rM   rc   hashlibsha1rd   	hexdigestrP   options_filesOptionInterpreterr   optstoreprocessupdate_project_optionsoptionsrH   rr   )r,   r  option_fileold_option_fileri   ois         r/   _load_option_file!InterpreterBase._load_option_file  s   %
 ggll4#3#3T[[/R'',,t'7'7FYZ77>>+&&ww~~o..77##KAAJJ   B  C"112~%%&:E4??Tst)K77>>+&&k4(A ALW\\Z[Z`Z`ZbMcMmMmMo?p++DOO< )  11$2B2B2K2K2T2TVZVeVefBJJ{#MM""99"**dooV  $$[1;?DMM''8 )(s   !AJ
Jc                   [         R                  R                  U R                  U5      n[         R                  R                  X5      n[         R                  R	                  U5      n[         R                  R                  U[
        R                  5      nX`R                  ;   a  US4$ U R                  R                  U5        US4$ NFT)	rn   ro   rp   rK   realpathr   rq   rJ   rr   )r,   rootdir
new_subdirrK   absdirsymlinkless_dir
build_files          r/   _resolve_subdirInterpreterBase._resolve_subdir  s    dkk:6g.''**62WW\\/;3M3MN
2225= !!%%j1t|r1   c                   [         R                  R                  U[        R                  5      nU R
                  R                  U5        [         R                  R                  X5      n[         R                  R                  U5      (       d  gU R                  XT5      n [        R                  " Xe5      R                  5       n U R                  n	X l        U(       a  U H  n
UR!                  U
5        M     U R#                  U5        W	U l        g! [        R                   a  nXXl        UeS nAff = f! [$         a     N8f = f! W	U l        f = fr  )rn   ro   rp   r   rq   rH   rr   rs   rk   r   rv   rw   r   r  rz   rK   acceptr   r   )r,   r  rK   visitorsbuildfilenameabsnamer|   	codeblockr}   prev_subdirvisitors              r/   _evaluate_subdir InterpreterBase._evaluate_subdir  s   V[-G-GH  /'',,w6ww~~g&&""7:	t5;;=I
	&++K K'G$$W-  (##I. &DK && 	GH	 ! 		 &DKs=    $D AD5 D2%D--D25
E?E EE 	E)rR   rx   rF   rH   rD   rP   rS   rU   r   rC   rE   rJ   rL   rB   rK   rM   rN   rV   rQ   )
rB   r3   rK   r3   rM   r!   rN   r3   rW   zenvironment.Environment)T)r[   r  r4   r5   )rg   r3   rh   r3   r4   r3   )r4   r5   )r   N)rb   r   r   intr   zT.Optional[int]r4   r5   )r   r   r4   T.Optional[InterpreterObject])r   zmparser.ArrayNoder4   r	   )r   zmparser.DictNoder4   r	   )r   zmparser.NotNoder4   r	   )rb   zmparser.IfClauseNoder4   T.Optional[Disabler])rb   zmparser.TestCaseClauseNoder4   r  )rb   zmparser.ComparisonNoder4   r	   )r   zmparser.AndNoder4   r	   )r   zmparser.OrNoder4   r	   )r   zmparser.UMinusNoder4   r	   )r   zmparser.ArithmeticNoder4   r	   )rb   zmparser.TernaryNoder4   r  )rb   zmparser.StringNoder4   r	   )rb   zmparser.ForeachClauseNoder4   r5   )rb   zmparser.PlusAssignmentNoder4   r5   )rb   zmparser.IndexNoder4   r	   )rb   zmparser.FunctionNoder4   r  )rb   zmparser.MethodNoder4   r  )r
  $T.Union[TYPE_var, InterpreterObject]r4   r	   )r   zT.List[InterpreterObject]r   zT.Dict[str, InterpreterObject]r4   z&T.Tuple[T.List[TYPE_var], TYPE_kwargs])r   r3   r4   r5   )r   zmparser.ArgumentNoder   z#T.Callable[[mparser.BaseNode], str]r   zT.Optional[str]r4   zBT.Tuple[T.List[InterpreterObject], T.Dict[str, InterpreterObject]])r   *T.Dict[str, T.Optional[InterpreterObject]]r4   r  )rb   zmparser.AssignmentNoder4   r5   )ra  r3   r  r  r  r  r4   r5   )ra  r3   r4   r	   )r  zmesonlib.HoldableObjectr4   r5   )r  r3   r  r3   r4   zT.Tuple[str, bool]rZ   )r  r3   rK   r3   r  z"T.Optional[T.Iterable[AstVisitor]]r4   r  ).r6   r7   r8   r9   r+   r\   rk   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   ro  rp  r   r   r  r   rZ  r   r}  r  r  r  r:   r2   r1   r/   r=   r=   G   ss   76b,1 CD0:xB !M "MI:N>J J L$*< *H5+ 6+  (+$ ,$":.R(A4{&Z6Z=ZBhZ
> EX7;	%*% B% &5	%
%>+  ot +<q@> r1   r=   )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   rn   r  r  rR  r   typingr  r  TYPE_CHECKINGr    r!   r"   r#   rx   r$   interpreterr%   DictUnionTypeHoldableObjectr  r  r3   rK  r   CallableHolderMapTyperT   ListFunctionTyper'   r=   r2   r1   r/   <module>r     sW   # - -	 	 	   " + g g #   % % %  ??XX )FF	FF8**+FF3KFF4LFF3KFF4LFF4L	
 	


,m<lKc>dde		fM 66	

G$$affX&6sH}8MNPXXY	ZLU Ud
 d
r1   