
    eH                       d dl mZ d dlZd dlZd dlZddlmZmZ ddlm	Z	 ddl
mZmZmZmZmZmZmZ ddlmZmZmZmZmZ ddlmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$ ejJ                  r&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.m/Z/m0Z0m1Z1  G d de      Z2 G d de      Z3 G d de      Z4 G d de      Z5 G d de      Z6 G d de      Z7d Z8d	Z9 ejt                  d      Z; ejt                  d      Z< G d de      Z=y)    )annotationsN   )mparsermesonlib)environment)MesonInterpreterObjectInterpreterBaseInvalidArgumentsBreakRequestContinueRequestDisablerdefault_resolve_key)StringHolderBooleanHolderIntegerHolderArrayHolder
DictHolder)ArgumentNodeArithmeticNode	ArrayNodeAssignmentNodeBaseNodeElementaryNode	EmptyNodeIdNode
MethodNodeNotNodePlusAssignmentNodeTernaryNodeTestCaseClauseNode   )
AstVisitor)Interpreter)TYPE_nkwargs	TYPE_nvar)AndNodeComparisonNodeForeachClauseNodeIfClauseNode	IndexNodeOrNode
UMinusNodec                      e Zd Zy)DontCareObjectN__name__
__module____qualname__     </usr/lib/python3/dist-packages/mesonbuild/ast/interpreter.pyr.   r.   J       r4   r.   c                      e Zd Zy)MockExecutableNr/   r3   r4   r5   r8   r8   M   r6   r4   r8   c                      e Zd Zy)MockStaticLibraryNr/   r3   r4   r5   r:   r:   P   r6   r4   r:   c                      e Zd Zy)MockSharedLibraryNr/   r3   r4   r5   r<   r<   S   r6   r4   r<   c                      e Zd Zy)MockCustomTargetNr/   r3   r4   r5   r>   r>   V   r6   r4   r>   c                      e Zd Zy)MockRunTargetNr/   r3   r4   r5   r@   r@   Y   r6   r4   r@   _T_Vc                       e Zd Zdd  fdZd!dZd"dZd#dZd$ fdZd%dZd&dZ	d'd	Z
d(d
Zd)dZd*dZd+dZd,dZd-dZd.dZd/dZedf	 	 	 	 	 	 	 d0dZd1dZd2dZd3dZd4dZd5dZd6dZd7dZd8dZd9d:dZd9d;dZd<d=dZd>dZ  xZ!S )?AstInterpreterNc                   t         |   |||       ||ng | _        t               | _        i | _        i | _        i | _        | j                  j                  i d| j                  d| j                  d| j                  d| j                  d| j                  d| j                  d| j                  d| j                  d	| j                  d
| j                  d| j                  d| j                  d| j                  d| j                  d| j                  d| j                  d| j                  i d| j                  d| j                  d| j                  d| j                  d| j                  d| j                  d| j                  d| j                  d| j                  d| j                  d| j                  d| j                  d| j                  d| j                  d | j                  d!| j                  d"| j                  i d#| j                  d$| j                  d%| j                  d&| j                  d'| j                  d(| j                  d)| j                  d*| j                  d+| j                  d,| j                  d-| j                  d.| j                  d/| j                  d0| j                  d1| j                  d2| j                  d3| j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  d4       y )5Nprojecttest	benchmarkinstall_headersinstall_maninstall_datainstall_subdirinstall_symlinkinstall_emptydirconfiguration_dataconfigure_filefind_programinclude_directoriesadd_global_argumentsadd_global_link_argumentsadd_project_argumentsadd_project_dependenciesadd_project_link_argumentsmessage	generatorerrorrun_commandassert
subproject
dependency
get_option
join_pathsr   importvcs_tagadd_languagesdeclare_dependencyfiles
executablestatic_libraryshared_librarylibrarybuild_targetcustom_target
run_targetsubdirset_variableget_variableunset_variableis_disableris_variabledisablerjarwarningshared_moduleoption)both_librariesadd_test_setupsubdir_donealias_targetsummaryrangestructured_sourcesdebug)super__init__visitorssetprocessed_buildfilesassignmentsassign_valsreverse_assignmentfuncsupdatefunc_do_nothingfunc_subdir)selfsource_rootrm   r]   r   	__class__s        r5   r   zAstInterpreter.__init__c   sa   fj9$,$8b03!24/19;

 ;9d&:&: ;!4#7#7;&(<(<; -d.B.B; )$*>*>	;
 *4+?+?; ,T-A-A; -d.B.B; .t/C/C; 01E1E; ,T-A-A; *4+?+?; 1$2F2F; 243G3G; 78L8L; 3D4H4H;  6t7K7K!;" 89M9M#;$ %d&:&:%;& '(<(<';( #D$8$8);* )$*>*>+;, $T%9%9-;. ()=)=/;0 ()=)=1;2 ()=)=3;4 ()=)=5;6 )$*>*>7;8 $T%9%99;: %d&:&:;;< +D,@,@=;> 01E1E?;@ #D$8$8A;B ()=)=C;D ,T-A-AE;F ,T-A-AG;H %d&:&:I;J *4+?+?K;L +D,@,@M;N ()=)=O;P $T%5%5Q;R *4+?+?S;T *4+?+?U;V ,T-A-AW;X )$*>*>Y;Z )$*>*>[;\ &t';';];^ !$"6"6_;` %d&:&:a;b +D,@,@c;d $T%9%9e;f .2-A-A-1-A-A*.*>*>+/+?+?&*&:&:$($8$8151E1E$($8$8u; ;	r4   c                
    ||fS Nr3   )r   argskwargss      r5   _unholder_argszAstInterpreter._unholder_args   s    V|r4   c                    |S r   r3   )r   ress     r5   
_holderifyzAstInterpreter._holderify   s    
r4   c                     yNTr3   )r   noder   r   s       r5   r   zAstInterpreter.func_do_nothing       r4   c                z    t         |           | j                  D ]  }| j                  j	                  |        y r   )r   load_root_meson_filer   astaccept)r   ir   s     r5   r   z#AstInterpreter.load_root_meson_file   s1    $& 	AHHOOA	r4   c                h   | j                  |      }t        |      dk7  st        |d   t              s$t        j
                  j                  d| d       y | j                  }t        j                  j                  ||d         }t        j                  j                  | j                  |      }t        j                  j                  |t        j                        }t        j                  j                  | j                  |      }t        j                  j                  |      }	t        j                  j                  |	d      }
|
| j                  v r2t        j
                  j                  dj!                  |d                y | j                  j#                  |
       t        j                  j%                  |      s$t        j
                  j                  d| d       y t'        |d	
      5 }|j)                         }d d d        t        t              sJ 	 t+        j,                  ||      j/                         }|| _        | j6                  D ]  }|j9                  |        | j;                  |       || _        y # 1 sw Y   xY w# t0        j2                  $ r}||_        |d }~ww xY w)Nr!   r   zUnable to evaluate subdir(z!) in AstInterpreter --> Skipping
zmeson.buildz?Trying to enter {} which has already been visited --> Skipping
zUnable to find build file z --> Skipping
zutf-8)encoding)flatten_argslen
isinstancestrsysstderrwriterm   ospathjoinr   r   build_filenamerealpathr   formataddisfileopenreadr   Parserparser   MesonExceptionfiler   r   evaluate_codeblock)r   r   r   r   prev_subdirrm   absdirbuildfilenameabsnamesymlinkless_dir
build_filefcode	codeblockmer   s                   r5   r   zAstInterpreter.func_subdir   s     &t9>DGS!9JJ9$?abckkk473d..7V[-G-GH'',,t//?''**62WW\\/=A
222JJ_ffgklmgnop!!%%j1ww~~g&JJ9-XY'G, 	668D	$$$$	tW5;;=I
  	 AQ	 	*!	 	
 && 	BGH	s$   2J$J JJ1#	J,,J1c                     yr   r3   r   r   s     r5   method_callzAstInterpreter.method_call   r   r4   c                R    t        |t        j                        sJ |j                  S r   )r   r   FormatStringNodevaluer   s     r5   evaluate_fstringzAstInterpreter.evaluate_fstring   s"    $ 8 8999zzr4   c                >    | j                  |j                        d   S Nr   )reduce_argumentsr   r   curs     r5   evaluate_arraystatementz&AstInterpreter.evaluate_arraystatement   s    $$SXX.q11r4   c                p    | j                  |j                         | j                  |j                         yr   evaluate_statementleftrightr   s     r5   evaluate_arithmeticstatementz+AstInterpreter.evaluate_arithmeticstatement   s)    )		*r4   c                :    | j                  |j                         yr   r   r   r   s     r5   evaluate_uminusstatementz'AstInterpreter.evaluate_uminusstatement   s    		*r4   c                    t        |t              sJ | j                  |j                         | j                  |j                         | j                  |j
                         y r   )r   r   r   	condition	trueblock
falseblockr   s     r5   evaluate_ternaryzAstInterpreter.evaluate_ternary   sH    $,,,//0r4   c                   dd}| j                  |j                  |      \  }}|rJ | xj                  dz  c_        |j                         D ]'  \  }}t	        |t
              s| j                  |       ) | xj                  dz  c_        i S )Nc                P    t        | t        j                        r| j                  S y)N__AST_UNKNOWN__)r   r   BaseStringNoder   )r   s    r5   resolve_keyz:AstInterpreter.evaluate_dictstatement.<locals>.resolve_key   s    $ 6 67zz!$r4   )key_resolverr!   )r   zmparser.BaseNodereturnr   )r   r   argument_depthitemsr   r   r   )r   r   r   	argumentsr   keyr   s          r5   evaluate_dictstatementz%AstInterpreter.evaluate_dictstatement   s    	% !11$))+1V	6}q  ,,. 	-JC#x('',	- 	q 	r4   c                l   t        |t              sJ |j                  | j                  |j                  j                  <   |j                  j
                  r#|| j                  |j                  j
                  <   | j                  |j                        | j                  |j                  j                  <   y r   )	r   r   r   r   var_nameast_idr   r   r   r   s     r5   evaluate_plusassignz"AstInterpreter.evaluate_plusassign   s    $ 233304

,,-::9=D##DJJ$5$56040G0G

0S,,-r4   c                     yr   r3   r   s     r5   evaluate_indexingz AstInterpreter.evaluate_indexing      r4   c                     y r   r3   )r   	func_names     r5   unknown_function_calledz&AstInterpreter.unknown_function_called  s    r4   c                   t        |t              rgi }|j                  j                         D ]  \  }}|| ||      <    |j	                         rt        d      | j                  |j                        |fS | j                  |      i fS )Nz9All keyword arguments must be after positional arguments.)r   r   r   r   incorrect_orderr
   r   r   )r   r   r   duplicate_key_errorr   r   vals          r5   r   zAstInterpreter.reduce_arguments  s     dL)-/F KK--/ 0S,/|C()0##%&'bcc$$T^^4f<<$$T*B..r4   c                p    | j                  |j                         | j                  |j                         yNFr   r   s     r5   evaluate_comparisonz"AstInterpreter.evaluate_comparison  s)    		*

+r4   c                p    | j                  |j                         | j                  |j                         yr   r   r   s     r5   evaluate_andstatementz$AstInterpreter.evaluate_andstatement#  )    )		*r4   c                p    | j                  |j                         | j                  |j                         yr   r   r   s     r5   evaluate_orstatementz#AstInterpreter.evaluate_orstatement(  r   r4   c                :    | j                  |j                         yr   r   r   s     r5   evaluate_notstatementz$AstInterpreter.evaluate_notstatement-  s    		*r4   c                n    	 | j                  |j                         y # t        $ r Y y t        $ r Y y w xY wr   )r   blockr   r   r   s     r5   evaluate_foreachzAstInterpreter.evaluate_foreach1  s6    	##DJJ/ 	 		s    	444c                    |j                   D ]  }| j                  |j                          t        |j                  t
              s&| j                  |j                  j                         y y r   )ifsr   r  r   	elseblockr   )r   r   r   s      r5   evaluate_ifzAstInterpreter.evaluate_if9  sR     	-A##AGG,	-$..)4##DNN$8$89 5r4   c                     yr   r3   )r   varnames     r5   ro   zAstInterpreter.get_variable?  r   r4   c                l   t        |t              sJ |j                  | j                  |j                  j                  <   |j                  j
                  r#|| j                  |j                  j
                  <   | j                  |j                        | j                  |j                  j                  <   y r   )	r   r   r   r   r   r   r   r   r   r   s     r5   
assignmentzAstInterpreter.assignmentB  s    $///04

,,-::9=D##DJJ$5$56040G0G

0S,,-r4   c                B    dd fd|g }d }t        |t              sy |j                  sJ |j                  |v ry ||j                  gz  }t        |t              r
 |      }nt        |t              r|j
                  }nt        |t              r3 j                  |j
                  ||      }t        |t              r| }nt        |t              r&|j                  j                  j                         }nt        |t              r|j                  j                         }nWt        |t              r|j                  dk7  ry  j                  |j                   ||      } j                  |j"                  ||      }t        |t$              rt        |t$              r||z   }n։ j'                  |||       j'                  |||      z   }nt        |t(              r |j*                        } j'                  |j                  j                  ||      }i }	|j,                  j
                  }
	 t        |t$              r3t/        |t1        j2                  d             j5                  |
||	      }nt        |t              r2t7        |t1        j2                  d             j5                  |
||	      }nt        |t8              r2t;        |t1        j2                  d             j5                  |
||	      }nt        |t<              r2t?        |t1        j2                  d             j5                  |
||	      }nAt        |t@              r1tC        |t1        j2                  d             j5                  |
||	      }t        |t              r j                  |||      }|S t        |t<              rNg }|D ]E  }t        |t              r- j                  |||      }|)| j'                  |||      z  }@||gz  }G |}|S # tD        jF                  $ r Y y w xY w)Nc                N   |g }t        | t              rst        | j                  t              sJ | j                  |v s| j                  j                  vrg S  j                  | j                     || j                  gz         S t        | t
              r| j                  S | S )N)loop_detect)r   r   r   r   r   r   )nr  quick_resolver   s     r5   r  z2AstInterpreter.resolve_node.<locals>.quick_resolveJ  s    " !V$!!''3///77k)QWWD<L<L-LI$T%5%5agg%>k]^]d]d\eNeffA~.wwr4   r   r#   r   )r  r   r  T.Optional[T.List[str]]r   zT.Any)$r   r   r   r   r   r   r   resolve_nodeboolr   r   r   copyr   r   	operationr   r   r   r   r   source_objectnamer   Tcastr   r   intr   listr   dictr   r   r   )r   r   include_unknown_argsid_loop_detectresultlrsrcmargsmkwargsmethod_namenew_resr   resolvedr  s   `             @r5   r  zAstInterpreter.resolve_nodeI  s   	 !N$){{{;;.(4;;-' dF#"4(Fn-ZZFg&&&tzz3GXF&$'#i(YY((--/Fl+^^((*Fn-~~&!!$))-A>RA!!$**.BNSA!S!jC&8Q**1.BNSVZVgVghik  BP  WQ  Qj) 2 23C%%dii&9&9;OQ_`E.0G))//Kc3')#qvvmT/JKWWXcejlstFT**3}d0KLXXYdfkmtuFS)*3}d0KLXXYdfkmtuFT*(aff]D.IJVVWbdikrsFT*'QVVM4-HIUUVachjqrF
 fh'&&v/C^TF  %)+G #a*#004H.YH+4#4#4X?SUc#ddsNG# F# ** s   9E
P PPc                   t        |t              r|}n|g}g }|D ]j  }t        |t              r/| j                  |||      }|)t        |t              s|g}||z  }Bt        |t        t
        t        t        f      s|se||gz  }l |S r   )r   r  r   r  r   r  r  float)r   args_rawr  r  r   flattened_argsr   r'  s           r5   r   zAstInterpreter.flatten_args  s    h%D:D,.  	&A!X&,,Q0DnU'%h5$,:"h.NAT367;O1#%	& r4   c                    i }|j                         D ]X  \  }}t        |t              r| j                  ||      }|+|||<   1t        |t        t
        t        t        f      s|sT|||<   Z |S r   )r   r   r   r  r   r  r  r)  )r   r   r  flattened_kwargsr   r   r'  s          r5   flatten_kwargszAstInterpreter.flatten_kwargs  sx     	,HC#x(,,S2FG',4$S)C#tS%!89=Q(+ %	,  r4   c                .    t        | j                        S )N)r]   )r   r]   r   s     r5   evaluate_testcasez AstInterpreter.evaluate_testcase  s    4??33r4   r   )r   r   rm   r   r]   r   r   zT.Optional[T.List[AstVisitor]])r   rA   r   rB   r   zT.Tuple[_T, _V])r   rA   r   rA   )r   r   r   T.List[TYPE_nvar]r   T.Dict[str, TYPE_nvar]r   r  )r   None)r   r   r   r1  r   r2  r   r3  )r   r   r   r  )r   zmparser.FormatStringNoder   r   )r   zmparser.ArrayNoder   r%   )r   r   r   r  )r   r,   r   r  )r   r   r   r3  )r   zmparser.DictNoder   r$   )r   r   r   r3  )r   r*   r   r  )r   r   r   r3  )r   zmparser.ArgumentNoder   z#T.Callable[[mparser.BaseNode], str]r   zT.Optional[str]r   z(T.Tuple[T.List[TYPE_nvar], TYPE_nkwargs])r   r'   r   r  )r   r&   r   r  )r   r+   r   r  )r   r   r   r  )r   r(   r   r3  )r   r)   r   r3  )r	  r   r   r  )r   r   r   r3  )FN)r   r   r  r  r  r  r   zT.Optional[T.Any])r*  z)T.Union[TYPE_nvar, T.Sequence[TYPE_nvar]]r  r  r  r  r   r1  )F)r   r2  r  r  r   r2  )r   r    r   zDisabler | None)"r0   r1   r2   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   r  r  r   r.  r0  __classcell__)r   s   @r5   rD   rD   b   s    BH
""H2
1T EX7;	/*/ B/ &5	/
 :/ 


:TWr*	 4r4   rD   )>
__future__r   r   r   typingr   r   r   r   interpreterbaser   r	   r
   r   r   r   r   interpreterr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    TYPE_CHECKINGvisitorr"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r.   r8   r:   r<   r>   r@   
ADD_SOURCEREMOVE_SOURCETypeVarrA   rB   rD   r3   r4   r5   <module>r?     s   " # 	 
            ??#)9  	+ 		+ 		. 		. 		- 		* 	 
QYYt_QYYt_a4_ a4r4   