
    e6{              	         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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(e'jR                  rddlm*Z*m+Z+m,Z,m-Z- ddl.m/Z/ e'j`                  e'jb                  e'jd                  ejf                     e'jd                  e4   e'jd                  e5   e'jd                  e6   e'jd                  e7   e'jd                  e8   f   e'jr                  e*dge
e*   f   f   Z:e'j`                  e6e'jr                  ejv                  e'jx                  e-   e'j`                  e6e-f   ge-f   f   Z= G d de      Z> G d d      Z?y)    )annotations   )environmentmparsermesonlib   )InterpreterObjectMesonInterpreterObjectMutableInterpreterObjectObjectHolderIterableObjectContextManagerObjectHoldableTypes)BreakRequestContinueRequestInterpreterExceptionInvalidArgumentsInvalidCodeSubdirDoneRequest)
FeatureNew)Disableris_disabled)default_resolve_keyflattenresolve_second_level_holdersstringifyUserArguments)MesonOperator)	_unholderN)InterpreterObjectTypeVar
SubProjectTYPE_kwargsTYPE_var)Interpreterr#   c                        e Zd Zd fdZ xZS )InvalidCodeOnVoidc                ,    t         |   d|d       y )NzCannot perform z operation on void statement.)super__init__)selfop_type	__class__s     L/usr/lib/python3/dist-packages/mesonbuild/interpreterbase/interpreterbase.pyr(   zInvalidCodeOnVoid.__init__L   s    ?7+5RST    )r*   strreturnNone)__name__
__module____qualname__r(   __classcell__)r+   s   @r,   r%   r%   J   s    U Ur-   r%   c                     e Zd Zd-dZd.d/dZd0dZd0dZd0dZd0dZd1d2dZ	d3d	Z
d4d
Z edd      d5d       Zd6dZd7dZd8dZd9dZd:dZd;dZd<dZd=dZd>dZ edd      d?d       Z edd      d@d       ZdAdZdBdZdCdZdDd ZdEd!ZdFd"Z	 	 	 	 	 	 dGd#ZdHd$Z e!df	 	 	 	 	 	 	 dId%Z"dJd&Z#dKd'Z$d(d)dLd*Z%dMd+Z&dNd,Z'y)OInterpreterBasec                    || _         i | _        i | _        i | _        i | _        || _        || _        || _        i | _        d| _	        d| _
        d | _        d | _        y )Nr   )source_rootfuncsbuiltin
holder_mapbound_holder_mapsubdirroot_subdir
subproject	variablesargument_depthcurrent_linenocurrent_nodetmp_meson_version)r)   r9   r>   r@   s       r,   r(   zInterpreterBase.__init__Q   sh    &#%
79)+/1!$9;  /3
 37r-   c                     y N )r)   stricts     r,   handle_meson_version_from_astz-InterpreterBase.handle_meson_version_from_astg   s    r-   c                   t         j                  j                  | j                  | j                  t
        j                        }t         j                  j                  |      st        d|       t        |d      5 }|j                         }d d d        j                         rt        d      t        |t              sJ 	 t        j                   ||      j#                         | _        | j'                          y # 1 sw Y   qxY w# t        j(                  $ r/}||_        |j$                  | _        | j'                          |d }~ww xY w)NzMissing Meson file in utf-8encodingzBuilder file is empty.)ospathjoinr9   r>   r   build_filenameisfiler   openreadisspacer   
isinstancer.   r   ParserparseastrJ   ParseExceptionfile)r)   	mesonfilemfcodemes        r,   load_root_meson_filez$InterpreterBase.load_root_meson_filek   s   GGLL!1!14;;@Z@Z[	ww~~i("%;I;#GHH)g. 	"779D	<<>677$$$$		~~dI6<<>DH..0	 	 %% 	BG vvDH..0H	s$   >C?9D ?DE*EEc                >    | j                  | j                  d       y)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_codeblockrZ   r)   s    r,   parse_projectzInterpreterBase.parse_project   s    
 	a0r-   c                &   dd} || j                         st        j                  | j                        j	                         }|}|j
                  D ]q  }|dz  j                         r[t        |dz  d      5 }|j                         }d d d        	 t        j                  d      j                         } ||      sm|} n n d}||k7  rt        d| d| d	      t        d
|       y # 1 sw Y   fxY w# t        j                  $ r Y w xY w)Nc                   t        | t        j                        st        d      | j                  st        d      | j                  d   }t        |t        j
                        xr |j                  j                  dk(  S )Nz5AST is of invalid type. Possibly a bug in the parser.zNo statements in code.r   project)rW   r   CodeBlockNoder   linesFunctionNode	func_namevalue)rZ   firsts     r,   _is_projectz5InterpreterBase.sanity_check_ast.<locals>._is_project   sf    c7#8#89!"YZZ99!":;;IIaLEeW%9%9:au?T?TXa?aar-   zmeson.buildrL   rM   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: )rZ   mparser.CodeBlockNoder/   object)rZ   pathlibPathr9   resolveparentsis_filerT   rU   r   rX   rY   r[   r   )	r)   rp   pfoundparentfr_   rZ   errors	            r,   sanity_check_astz InterpreterBase.sanity_check_ast   s   	b 488$T--.668AE)) ]*335f}4wG (1 vvx(!%nnT7;AAC #3' &  BEz!$:5'Atuzt{{}"~!$9%"ABB/ %
( (
 #11 ! !s   8C.$C:.C7	:DDc                ^    	 | j                  | j                  d       y # t        $ r Y y w xY w)Nr   )start)rd   rZ   r   re   s    r,   runzInterpreterBase.run   s0    	##DHHA#6  		s     	,,Nc                   |y t        |t        j                        s/t        d      }|j                  |_        |j
                  |_        ||j                  || }d}|t        |      k  r=||   }	 |j                  | _        | j                  |       |dz  }|t        |      k  r<y y # t        $ r}t        |dd       ~| j                  j                  |_        | j                  j
                  |_        t        j                  j                  | j                   | j"                  t$        j&                        |_        |d }~ww xY w)Nz?Tried to execute a non-codeblock. Possibly a bug in the parser.r   linenor   )rW   r   rj   r   r   colnork   lenrC   evaluate_statement	ExceptiongetattrrD   rO   rP   rQ   r9   r>   r   rR   r\   )r)   noder   rc   e
statementsicurs           r,   rd   z"InterpreterBase.evaluate_codeblock   s   <$ 5 56]^A{{AHjjAGGZZc*
#j/!Q-C
&)jj#'', FA #j/!
  1h-5  $0077AH"//55AGWW\\$*:*:DKKIcIcdAFs   2"B* *	E3BE  Ec                0	   || _         t        |t        j                        r| j	                  |      S t        |t        j
                        r| j                  |       y t        |t        j                        r| j                  |       y t        |t        j                        r| j                  |      S t        |t        j                        rqt        |t        j                        r| j                  |      S t        |t        j                        r| j                  |      S | j!                  |j"                        S t        |t        j$                        r| j!                  |j"                        S t        |t        j&                        r| j)                  |      S t        |t        j*                        r| j-                  |j"                        S t        |t        j.                        r| j1                  |      S t        |t        j2                        r| j5                  |      S t        |t        j6                        r| j9                  |      S t        |t        j:                        r| j!                  |j"                        S t        |t        j<                        r| j?                  |      S t        |t        j@                        r| jC                  |      S t        |t        jD                        r| jG                  |      S t        |t        jH                        r| jK                  |      S t        |t        jL                        r| jO                  |      S t        |t        jP                        r| jS                  |       y t        |t        jT                        r| jW                  |      S t        |t        jX                        r| j[                  |      S t        |t        j\                        r
t_               t        |t        j`                        r
tc               t        |t        jd                        r| jg                  |jh                        S t        |t        jj                        r| jm                  |      S to        d      )NzUnknown statement.)8rD   rW   r   rl   function_callPlusAssignmentNodeevaluate_plusassignAssignmentNode
assignment
MethodNodemethod_callBaseStringNodeMultilineFormatStringNodeevaluate_multiline_fstringFormatStringNodeevaluate_fstring
_holderifyrn   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   z"InterpreterBase.evaluate_statement   ss   c7//0%%c**W778$$S)h g W334OOC d c W//0##C((W334#w@@A66s;;C!9!9:,,S11syy11W001??399--W112##C((W^^,$$SYY//W334++C00W..///44W--...s33W//0??399--W__---c22W^^,,,S11W__---c22W//00055W33444S99W667!!#&  W../))#..W001((--W112!##W../. W667**39955W778))#..233r-   c                    | j                  |j                        \  }}t        |      dkD  rt        d      | j	                  |D cg c]  }t        |       c}      S c c}w )Nr   z4Keyword arguments are invalid in array construction.)reduce_argumentsargsr   r   r   r   )r)   r   	argumentskwargsxs        r,   r   z'InterpreterBase.evaluate_arraystatement  sS    "33CHH=Fv;?TUUi@	!@AA@s   A dictz0.47.0c           
          d fd} j                  |j                  |d      \  }}|rJ  j                  |j                         D ci c]  \  }}|t	        |       c}}      S c c}}w )Nc                   t        | t        j                        s!t        j                  ddj
                         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)
rW   r   r   r   
single_user@   r   r   r   r.   )key
key_holderstr_keyr)   s      r,   resolve_keyz;InterpreterBase.evaluate_dictstatement.<locals>.resolve_key  su    c7#9#9:%%&NPXZ^ZiZij005J!&'<==
+Ggs+&'=>>Nr-   zDuplicate dictionary key: {})key_resolverduplicate_key_error)r   mparser.BaseNoder/   r.   )r   r   r   itemsr   )r)   r   r   r   r   kvs   `      r,   r   z&InterpreterBase.evaluate_dictstatement
  si    		 !11#((  kI1  J	6}FLLNKDAq9Q<KLLKs   A)
c                    | j                  |j                        }|t        d      t        |t              r|S | j                  |j                  t        j                  d             S )Nnot)	r   rn   r%   rW   r   r   operator_callr   NOTr)   r   r   s      r,   r   z%InterpreterBase.evaluate_notstatement  sU    ##CII.9#E**a"Hq}/@/@$GHHr-   c           	        t        |t        j                        sJ |j                  D ]P  }d | _        | j                  |j                        }|t        d      t        |t              r|c S t        |t              s/t        j                  d| dt        |      j                   d      |j                  t        j                   d       }t        |t"              st%        d|d      |st        j&                  | j(                     }| j                  r'| j                  t        j&                  | j(                  <   	 | j+                  |j,                         |t        j&                  | j(                  <    y  t        |j.                  t        j0                        s%| j+                  |j.                  j,                         y # |t        j&                  | j(                  <   w xY w)NifzArgument to if (z") is not an InterpreterObject but .z
If clause z$ does not evaluate to true or false.)rW   r   r   ifsrE   r   	conditionr%   r   r	   r   MesonBugExceptiontyper1   r   r   BOOLboolr   project_meson_versionsr@   rd   block	elseblock	EmptyNode)r)   r   r   resultresprev_meson_versions         r,   r   zInterpreterBase.evaluate_if"  s   $ 4 4555 	A &*D",,Q[[9F~'--&(+f&78003CF8Kmnrsynz  oD  oD  nE  EF  2G  H  H&&}'9'94@Cc4(!Jvj8\"]^^%-%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G&c                    | j                  |j                        }t        |t              r|S t        |t              st        d|d      |5  | j                  |j                         d d d        y # 1 sw Y   y xY w)Nztestcase clause z( does not evaluate to a context manager.)r   r   rW   r   r   r   rd   r   )r)   r   r   s      r,   r   z!InterpreterBase.evaluate_testcase?  sq    ((8fh'M&"67 0
:bcdd 	0##DJJ/	0	0s   A44A=c           	        | j                  |j                        }|t        j                  d      t	        |t
              r|S | j                  |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||}}||_        | j%                  |j'                  |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   MesonExceptionrW   r   rightr   INNOT_INEQUALS
NOT_EQUALSGREATERLESSGREATER_EQUALSLESS_EQUALSctyperD   r   r   r   )r)   r   val1val2operators        r,   r   z#InterpreterBase.evaluate_comparisonI  s!   &&tyy1<))*abbdH%K&&tzz2<))*bccdH%K  """))&&**&&##..++	
 **	 ((-*>*>??t$D t11(IdOLMMr-   c                   | j                  |j                        }|t        j                  d      t	        |t
              r|S |j                  t        j                  d       }|s| j                  |      S | j                  |j                        }|t        j                  d      t	        |t
              r|S | j                  |j                  t        j                  d             S Nr   r   r   r   r   r   rW   r   r   r   r   r   r   r)   r   ll_boolrs        r,   r   z%InterpreterBase.evaluate_andstatementh  s    ##CHH-9))*abba"H!3!3T:??6**##CII.9))*bcca"Hq}/A/A4HIIr-   c                   | j                  |j                        }|t        j                  d      t	        |t
              r|S |j                  t        j                  d       }|r| j                  |      S | j                  |j                        }|t        j                  d      t	        |t
              r|S | j                  |j                  t        j                  d             S r   r   r  s        r,   r   z$InterpreterBase.evaluate_orstatementx  s    ##CHH-9))*abba"H!3!3T:??6**##CII.9))*bcca"Hq}/A/A4HIIr-   c                    | j                  |j                        }|t        d      t        |t              r|S ||_        | j                  |j                  t        j                  d             S )Nzunary minus)
r   rn   r%   rW   r   rD   r   r   r   UMINUSr   s      r,   r   z(InterpreterBase.evaluate_uminusstatement  s\    ##CII.9#M22a"Hq}/C/CTJKKr-   c                   | j                  |j                        }t        |t              r|S | j                  |j                        }t        |t              r|S ||t        |j                        t        j                  t        j                  t        j                  t        j                  t        j                  d}||_        |j                  ||j                     t        |            }| j!                  |      S )N)addsubmuldivmod)r   r   rW   r   r   r%   	operationr   PLUSMINUSTIMESDIVMODrD   r   r   r   )r)   r   r  r  mappingr   s         r,   r   z,InterpreterBase.evaluate_arithmeticstatement  s    ##CHH-a"H##CII.a"H9	#CMM22 !%% && && $$ $$/
 oogcmm4ilCs##r-   c                   t        |t        j                        sJ | j                  |j                        }|t        j                  d      t        |t              r|S ||_        |j                  t        j                  d       }|r| j                  |j                        S | j                  |j                        S )Nz>Cannot use a void statement as condition for ternary operator.)rW   r   r   r   r   r   r   r   rD   r   r   r   	trueblock
falseblock)r)   r   r   result_bools       r,   r   z InterpreterBase.evaluate_ternary  s    $ 3 3444((8>))*jkkfh'M"**=+=+=tD**4>>::**4??;;r-   zmultiline format stringsz0.63.0c                $    | j                  |      S rG   )r   )r)   r   s     r,   r   z*InterpreterBase.evaluate_multiline_fstring  s    $$T**r-   zformat stringsz0.58.0c                t     d fd}t        j                  d||j                        } j                  |      S )Nc                   t        | j                  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   rA   rW   listr   r   r   r@   rD   r   r   KeyErrorr   )matchvarvalr   r)   s       r,   replacez1InterpreterBase.evaluate_fstring.<locals>.replace  s    ekk!n%C	Ss 34cD$<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B7 9B 	B4B//B44B7 7Cz@([_a-zA-Z][_0-9a-zA-Z]*)@)r   zT.Match[str]r/   r.   )rer
  rn   r   )r)   r   r#  r   s   `   r,   r   z InterpreterBase.evaluate_fstring  s1    	S ff2GTZZHs##r-   c           	        t        |t        j                        sJ | j                  |j                        }t        |t
              st        d      |j                         }t        |j                        |xs dk7  r#t        d|xs d d|j                                |j                         D ]"  }|bt        |t              rt        j                  d| d      | j                  |j                  d   j                   | j#                  |             nt        |t              st        j                  d| d|       t        |      |k7  rt        j                  d| d|       t%        |      D ]=  }| j                  |j                  |   j                   | j#                  ||                ? 	 | j'                  |j(                         % y # t*        $ r Y 3t,        $ r Y  y w xY w)	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 )rW   r   r   r   r   r   r   iter_tuple_sizer   varnamesdisplay_name	iter_selftupler   r   set_variablern   r   rangerd   r   r   r   )r)   r   r   tsizer   js         r,   r   z InterpreterBase.evaluate_foreach  s   $ 9 9:::''

3%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 UA%%dmmA&6&<&<dooaPQd>STU''

3	 #  s   :G	G1%G10G1c                |   t        |t        j                        sJ |j                  j                  }| j                  |j                        }|t        d      | j                  |      }||_        | j                  |j                  t        j                  t        |                  }| j                  ||       y )Nzplus assign)rW   r   r   var_namern   r   r%   r   rD   r   r   r   r  r   r+  )r)   r   varnameadditionold_variable	new_values         r,   r   z#InterpreterBase.evaluate_plusassign  s    $ : :;;;--%%**4::6#M22 ((1$(!OOL$>$>}?Q?QS\]eSf$gh	'9-r-   c                   t        |t        j                        sJ | j                  |j                        }|t        d      t        |t              r|S | j                  |j                        }|t        d      t        |      }||_
        | j                  |j                  t        j                  |            S )Nz#Tried to evaluate indexing on void.z#Cannot use void statement as index.)rW   r   r   r   iobjectr   r   indexr   r   rD   r   r   r   INDEX)r)   r   r6  index_holderr7  s        r,   r   z!InterpreterBase.evaluate_indexing  s    $ 1 1222))$,,7?&'LMMgx(N..tzz:"#HII,'#w44]5H5H%PQQr-   c                   |j                   j                  }| j                  |j                        \  }}| j	                  ||      \  }}t        ||      r|dvr
t               S || j                  v rk| j                  |   }|}t        |dd      st        |      }t        |dd      st        ||      \  }}|| _         ||||      }	|	| j                  |	      S d S | j                  |       y )N>   is_disablerr   r+  unset_variablezno-args-flatteningFz!no-second-level-holder-flattening)rm   rn   r   r   _unholder_argsr   r   r:   r   r   r   rD   r   unknown_function_called)
r)   r   rm   	h_posargsh_kwargsposargsr   func	func_argsr   s
             r,   r   zInterpreterBase.function_call  s    NN((	 $ 5 5dii @H //	8D&w'I=~,~:

"::i(DI4!5u=#G,	4!DeL$@F$S!	6 $DtY/C+.?4??3'DD((3r-   c                $   |j                   }t        |t        j                        r,d|j                   d}| j                  |j                        }n'|j                  j                  }| j                  |      }|j                  j                  }| j                  |j                        \  }}| j                  ||      \  }}	t        ||	      r
t               S t        |t              st!        | d      |dk(  r`t        |t"              r| j%                  |j&                         n4t        |t              s$t!        d| dt)        |      j                         |x|_        | _        |j-                  |||	      }
|
| j/                  |
      S d S )Nz
variable ""z is not callable.extract_objectsz'Invalid operation "extract_objects" on 	 of type )source_objectrW   r   r   rn   r   r+   r1   r   namer   r   r=  r   r   r	   r   r   validate_extractionheld_objectr   rD   r   r   )r)   r   	invocableobject_display_nameobjmethod_nameh_argsr@  r   r   r   s              r,   r   zInterpreterBase.method_call  s{   &&	i0$.y.?q"A##IOO4C"+"5"5">">)))4Ciioo!22499=,,VX>vtV$:#01"&9%::K#LMM++#|,((9X.&)PQdPeenostwox  pB  pB  oC  (D  E  E/334,ook48'*ts#@D@r-   c                   t        |t              r| j                  j                  t	        |      d       }| ||t        j                  d|             S | j                  j                         D ]0  \  }}t        ||      s ||t        j                  d|             c S  t        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 rG  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.)rW   r   r<   getr   Tcastr=   r   r   r   r1   r   r
   )r)   r   clstyps       r,   r   zInterpreterBase._holderify2  s>   c=)//%%d3i6C 3}d ;<< 11779 ASc3'sAFF=$$?@@A ,,wse9T#YEWEWDX  YR  .S  T  T\*,,/?uIdSViN`N`Maav-wxx34J((+CC5	RVWZR[RdRdQeex)yzzr-   c           	         |D cg c]  }t        |       c}|j                         D ci c]  \  }}|t        |       c}}fS c c}w c c}}w rG   )r   r   )r)   r   r   r   r   r   s         r,   r=  zInterpreterBase._unholder_argsE  sA     '++	!+&,,.-Y$!Qa1o-YYY+-Ys
   AAc                     t        d| d      )NzUnknown function "".)r   )r)   rm   s     r,   r>  z'InterpreterBase.unknown_function_calledJ  s    .yk<==r-   c                   t        |t        j                        sJ |j                         rt	        d      | xj
                  dz  c_        |j                  D cg c]  }| j                  |       }}t        d |D              rt	        d      i }|j                  j                         D ]w  \  }} ||      }	t        |t        j                        sJ | j                  |      }
|
t	        d|	 d      || _        |r|	|v rt	        |j                  |	            |
||	<   y | xj
                  dz  c_        | j                  |      }||fS c c}w )Nz9All keyword arguments must be after positional arguments.r   c              3  $   K   | ]  }|d u  
 y wrG   rH   ).0r   s     r,   	<genexpr>z3InterpreterBase.reduce_arguments.<locals>.<genexpr>[  s     .QqDy.s   z,At least one value in the arguments is void.zValue of key z	 is void.)rW   r   ArgumentNodeincorrect_orderr   rB   r   r   anyr   r   BaseNoderD   formatexpand_default_kwargs)r)   r   r   r   argreduced_pos
reduced_kwr   r"  reduced_keyreduced_valfinal_kws               r,   r   z InterpreterBase.reduce_argumentsM  sU    $ 4 4555!"#^__q ?C~~Nt..s3NN.+.."#QRR57
))+ 		2HC&s+Kc7#3#344411#6K"&{m9'MNN #D"{j'@&':'A'A+'NOO&1J{#		2 	q --j9H$$! Os   Ec                   d|vr|S t        |j                  d            }t        |t              st	        d      d|v rt	        d      |j                         D ],  \  }}||v rt	        d| d      | j                  |      ||<   . |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   poprW   r   r   r   r   )r)   r   	to_expandr   r   s        r,   rc  z%InterpreterBase.expand_default_kwargsl  s    6!Mfjj23	)T*&'NOOy &  (A  B  BOO% 	+DAqF{*WQC7s+tuu*F1I	+ r-   c                   t        |t        j                        sJ | j                  dk7  rt	        t        j                  d            |j                  j                  }t        |t              st	        d      | j                  |j                        }t        |t              rt        j                  |      }| j                  ||       y )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.)rW   r   r   rB   r   textwrapdedentr0  rn   r.   r   r   copydeepcopyr+  )r)   r   r0  rn   s       r,   r   zInterpreterBase.assignmentz  s    $ 6 6777!#"8?? 4 $   ==&&(C("#MNN''

3e56MM%(E(E*r-   F)	holderifyc                  |t        d      |r| j                  |      }n>t        |t              s.t	        j
                  d| dt        |      j                         t        |t              st        d      t        j                  d|      t        d|z         || j                  v rt        d| d      || j                  |<   y )	Nz Can not assign void to variable.zDset_variable in InterpreterBase called with a non InterpreterObject rG  z0First argument to set_variable must be a string.z[_a-zA-Z][_0-9a-zA-Z]*$zInvalid variable name: z&Tried to overwrite internal variable "rE  )r   r   rW   r	   r   r   r   r1   r.   r$  r   r;   rA   )r)   r1  variablerr  s       r,   r+  z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88-w7?7'ABBdll" FwiqQRR"*wr-   c                    || j                   v r| j                   |   S || j                  v r| j                  |   S t        d| d      )NzUnknown variable "rY  )r;   rA   r   )r)   r1  s     r,   r   zInterpreterBase.get_variable  sM    dll"<<((dnn$>>'**.wir:;;r-   c                    t        d      )NzJvalidate_extraction is not implemented in this context (please file a bug))r   )r)   buildtargets     r,   rJ  z#InterpreterBase.validate_extraction  s    "#oppr-   )r9   r.   r>   r.   r@   z'SubProject')T)rI   r   r/   r0   )r/   r0   )r   N)r   rr   r   intrc   zT.Optional[int]r/   r0   )r   r   r/   T.Optional[InterpreterObject])r   zmparser.ArrayNoder/   r	   )r   zmparser.DictNoder/   r	   )r   zmparser.NotNoder/   r	   )r   zmparser.IfClauseNoder/   T.Optional[Disabler])r   zmparser.TestCaseClauseNoder/   rz  )r   zmparser.ComparisonNoder/   r	   )r   zmparser.AndNoder/   r	   )r   zmparser.OrNoder/   r	   )r   zmparser.UMinusNoder/   r	   )r   zmparser.ArithmeticNoder/   r	   )r   zmparser.TernaryNoder/   ry  )r   z!mparser.MultilineFormatStringNoder/   r	   )r   zDT.Union[mparser.FormatStringNode, mparser.MultilineFormatStringNode]r/   r	   )r   zmparser.ForeachClauseNoder/   r0   )r   zmparser.PlusAssignmentNoder/   r0   )r   zmparser.IndexNoder/   r	   )r   zmparser.FunctionNoder/   ry  )r   zmparser.MethodNoder/   ry  )r   $T.Union[TYPE_var, InterpreterObject]r/   r	   )r   zT.List[InterpreterObject]r   zT.Dict[str, InterpreterObject]r/   z&T.Tuple[T.List[TYPE_var], TYPE_kwargs])rm   r.   r/   r0   )r   zmparser.ArgumentNoder   z#T.Callable[[mparser.BaseNode], str]r   zT.Optional[str]r/   zBT.Tuple[T.List[InterpreterObject], T.Dict[str, InterpreterObject]])r   *T.Dict[str, T.Optional[InterpreterObject]]r/   r|  )r   zmparser.AssignmentNoder/   r0   )r1  r.   rt  r{  rr  r   r/   r0   )r1  r.   r/   r	   )rw  zmesonlib.HoldableObjectr/   r0   )(r1   r2   r3   r(   rJ   ra   rf   r~   r   rd   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   rc  r   r+  r   rJ  rH   r-   r,   r6   r6   P   sX   7,(1 CD29v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r-   r6   )@
__future__r    r   r   r   baseobjectsr	   r
   r   r   r   r   r   
exceptionsr   r   r   r   r   r   
decoratorsr   disablerr   r   helpersr   r   r   r   r   r   r   rO   rp  r$  rt   typingrS  rn  TYPE_CHECKINGr   r    r!   r"   interpreterr#   DictUnionTypeHoldableObjectrx  r   r.   r  r   CallableHolderMapTypera  ListFunctionTyper%   r6   rH   r-   r,   <module>r     sP  " # - -	 	 	  # + 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S	q S	qr-   