
    <hr                    j   S SK Jr  S SKrS SKrS SKrS SKJr  S SKJ	r	  S SK
r
S SKJr  SSKJrJrJr  SSKJr  SS	KJrJrJrJrJrJrJrJrJrJrJr  SS
KJr  SSK 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+J,r,J-r-J.r.J/r/J0r0J1r1J2r2J3r3  \Rh                  (       a*  SSK5J6r6  SSK J7r7  SSKJ8r8J9r9J:r:  SSKJ;r;J<r<J=r=J>r>J?r?J@r@JArAJBrB  \R                  " S5      rD\R                  " S5      rES S jrF\	 " S S5      5       rG\	 " S S\5      5       rH\	 " S S\5      5       rIS!S jrJ " S S5      rK " S S\5      rLg)"    )annotationsN)defaultdict)	dataclass)Path   )mparsermesonlibmlog)environment)MesonInterpreterObjectInterpreterBaseInvalidArgumentsBreakRequestContinueRequestDisablerdefault_resolve_keyis_disabledUnknownValueUndefinedVariableInterpreterObject)flatten)StringHolderBooleanHolderIntegerHolderArrayHolder
DictHolder)ArgumentNodeArithmeticNode	ArrayNodeAssignmentNodeBaseNode	EmptyNodeIdNode
MethodNodeNotNodePlusAssignmentNodeTernaryNode
SymbolNodeTokenFunctionNode   )
AstVisitor)Interpreter)
SubProjectTYPE_var	TYPE_nvar)AndNodeComparisonNodeForeachClauseNodeIfClauseNode	IndexNodeOrNodeTestCaseClauseNode
UMinusNode_T_Vc                6    [        [        SSSSSSU 5      5      $ )N r   r   r   )r(   r)   )vals    {/mnt/mint/home/seanl/mnt/public/Repos/ladybird/Build/vcpkg/downloads/tools/meson-1.9.0-d1fcc2/mesonbuild/ast/interpreter.py_symbolr@   N   s    eBAq!VS9::    c                  >    \ rS rSr% S\S'   S\S'   S	S jrS
S jrSrg)IntrospectionFileR   strsubdirrelc                T    XR                   -  U R                  -  R                  5       $ N)rF   rG   resolve)selfroot_dirs     r?   to_abs_pathIntrospectionFile.to_abs_pathW   s!    ;;&1::<<rA   c                n    [        U R                  R                  U R                  U R                  45      $ rI   )hash	__class____name__rF   rG   rK   s    r?   __hash__IntrospectionFile.__hash__Z   s&    T^^,,dkk488DEErA    N)rL   r   returnr   )rW   int)rR   
__module____qualname____firstlineno____annotations__rM   rT   __static_attributes__rV   rA   r?   rC   rC   R   s    K	H=FrA   rC   c                  R    \ rS rSr% S\S'   S\S'   S\S'   S\S	'   S\S
'   S\S'   Srg)IntrospectionDependency^   T.Union[str, UnknownValue]namezT.Union[bool, UnknownValue]requiredz"T.Union[T.List[str], UnknownValue]versionboolhas_fallbackconditionalr*   noderV   NrR   rY   rZ   r[   r\   r]   rV   rA   r?   r_   r_   ^   s&    
$$))//
rA   r_   c                      \ rS rSr% S\S'   S\S'   S\S'   S\S'   S\S'   S\S'   S	\S
'   S	\S'   S\S'   S\S'   S\S'   S\S'   S\S'   Srg)IntrospectionBuildTargeth   rE   rb   machineidtypename
defined_inrF   re   build_by_default	installedzT.List[str]outputsT.List[BaseNode]source_nodesr!   extra_filesT.Dict[str, TYPE_var]kwargsr*   rh   rV   Nri   rV   rA   r?   rk   rk   h   sI    
ILGMOKO""!!
rA   rk   c                    [        U [        5      =(       a    U R                  R                  S;  =(       d    [        U [        5      $ )N>   filesget_variable)
isinstancer*   	func_namevaluer$   )srcs    r?   is_ignored_edger   x   sA    sL)bcmm.A.AIb.b  Cgqru  xB  hC  CrA   c                  R    \ rS rSr% S\S'   S\S'   SS jrSS jrSS jrSS jrS	r	g
)DataflowDAG{   zVT.DefaultDict[T.Union[BaseNode, UnknownValue], T.Set[T.Union[BaseNode, UnknownValue]]]src_to_tgtstgt_to_srcsc                T    [        [        5      U l        [        [        5      U l        g rI   )r   setr   r   rS   s    r?   __init__DataflowDAG.__init__   s    &s+&s+rA   c                |    U R                   U   R                  U5        U R                  U   R                  U5        g rI   )r   addr   )rK   sourcetargets      r?   add_edgeDataflowDAG.add_edge   s4     $$V, $$V,rA   c                   UR                  5       nUR                  5       nU(       a  [        5       nU(       a/  U H(  nUR                  S U R                  U    5       5        M*     O@U H:  n[	        U5      (       a  M  UR                  S U R
                  U    5       5        M<     UR                  U5        UnU(       a  M  U$ )Nc              3  J   #    U  H  n[        U5      (       a  M  Uv   M     g 7frI   )r   ).0r   s     r?   	<genexpr>(DataflowDAG.reachable.<locals>.<genexpr>   s     `.Cs?[^K_ss.Cs   #	#c              3  $   #    U  H  ov   M     g 7frI   rV   )r   tgts     r?   r   r      s     D.Css.Cs   )copyr   updater   r   r   )rK   srcsreverse	reachableactivenewr   r   s           r?   r   DataflowDAG.reachable   s    IIK	:=%C!CJJ`d.>.>s.C`` " "C&s++ JJDd.>.>s.CDD " S!F f rA   c                   ^ X/4/n/ nU(       al  UR                  5       u  nmXR:X  a  UR                  T5        [        U5      (       a  MB  UR                  U4S jU R                  U    5       5        U(       a  Ml  U$ )Nc              3  2   >#    U  H  oTU/-   4v   M     g 7frI   rV   )r   r   paths     r?   r   -DataflowDAG.find_all_paths.<locals>.<genexpr>   s     N8Mtse|,8Ms   )popappendr   extendr   )rK   r   r   queuepathscurr   s         @r?   find_all_pathsDataflowDAG.find_all_paths   so    u		IC}T"s##LLN8H8H8MNN e rA   )r   r   NrW   None)r   T.Union[BaseNode, UnknownValue]r   r   rW   r   )r   &T.Set[T.Union[BaseNode, UnknownValue]]r   re   rW   r   )r   r   r   r   rW   z/T.List[T.List[T.Union[BaseNode, UnknownValue]]])
rR   rY   rZ   r[   r\   r   r   r   r   r]   rV   rA   r?   r   r   {   s"    gggg,-&
rA   r   c                    ^  \ rS rSrS)S*U 4S jjjrS+S jrS,S jrS-S jrS.U 4S jjrS/S jr	S0S	 jr
S1S
 jrS2S jrS3S jrS4S jrS5S jrS6S jrS7S jrS8S jr\S4       S9S jjrS:S jrS;S jrS<S j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 SFS jr!S/S  jr"SAS! jr#S/S" jr$SGS# jr%SHSIS$ jjr&SJS% jr'SKU 4S& jjr(SLU 4S' jjr)S(r*U =r+$ )MAstInterpreter   Nc                  > [         TU ]  XX4U5        Ub  UO/ U l        / U l        [	        [
        5      U l        [	        [
        5      U l        [        5       U l	        0 U l
        SU l        U R                  R                  0 SU R                  _SU R                  _SU R                  _SU R                  _SU R                  _SU R                  _SU R                  _S	U R                  _S
U R                  _SU R                  _SU R                  _SU R                  _SU R                  _SU R                  _SU R                  _SU R                  _SU R                  _0 SU R                  _SU R                  _SU R                  _SU R                  _SU R                  _SU R                  _SU R                  _SU R                  _SU R                  _SU R                  _SU R                  _SU R                  _SU R                  _S U R                  _S!U R                  _S"U R                  _S#U R                  _E0 S$U R                  _S%U R                  _S&U R                  _S'U R                  _S(U R                  _S)U R                  _S*U R                   _S+U R"                  _S,U R$                  _S-U R&                  _S.U R                  _S/U R                  _S0U R                  _S1U R                  _S2U R                  _S3U R                  _S4U R                  _EU R                  U R                  U R                  U R                  U R                  U R                  U R                  U R                  S5.E5        g )6NF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_dependencyrz   
executablestatic_libraryshared_librarylibrarybuild_targetcustom_target
run_targetrF   set_variabler{   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)superr   visitorsnestingr   listcur_assignmentsall_assignment_nodesr   dataflow_dagfuncvalstaintedfuncsr   func_do_nothing
func_filesfunc_subdirfunc_set_variablefunc_get_variablefunc_unset_variable)rK   source_rootrF   r   subproject_direnvr   rQ   s          r?   r   AstInterpreter.__init__   s   j#N$,$8b$&r}  C  sDP[\`Pa! (M13

 ;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?;@ #DOOA;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+A+AS;T *4+A+AU;V ,T-E-EW;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; ;	rA   c                    X4$ rI   rV   )rK   argsrx   s      r?   _unholder_argsAstInterpreter._unholder_args   s
    |rA   c                    U$ rI   rV   )rK   ress     r?   
_holderifyAstInterpreter._holderify   s    
rA   c                    [        5       $ rI   )r   )rK   rh   r   rx   s       r?   r   AstInterpreter.func_do_nothing  s
    ~rA   c                ~   > [         TU ]  5         U R                   H  nU R                  R	                  U5        M      g rI   )r   load_root_meson_filer   astaccept)rK   irQ   s     r?   r	  #AstInterpreter.load_root_meson_file  s,    $&AHHOOA rA   c                j   U R                  U5      n[        U5      S:w  d  [        US   [        5      (       d$  [        R
                  R                  SU S35        g U R                  U R                  US   5      u  pEU(       d2  [        R
                  R                  SR                  US   5      5        g U R                  U R                  X@R                  5      (       dR  [        R                  R                  U[        R                   5      n[        R
                  R                  SU S35        g g )Nr+   r   zUnable to evaluate subdir(z!) in AstInterpreter --> Skipping
z?Trying to enter {} which has already been visited --> Skipping
zUnable to find build file z --> Skipping
)flatten_argslenr|   rE   sysstderrwrite_resolve_subdirr   format_evaluate_subdirr   osr   joinr   build_filename)rK   rh   r   rx   rF   is_newbuildfilenames          r?   r   AstInterpreter.func_subdir
  s      &t9>DGS!9!9JJ9$?abc--d.>.>QHJJ_ffgklmgnop$$T%5%5v}}MMGGLL1K1KLMJJ9-XY NrA   c                ~   [         R                  " X4R                  5       5       H$  n[        U[        5      (       d  M  [	        5       s  $    [        U[
        5      (       a3  [        U[        R                  " SU 5      5      R                  X#U5      nU$ [        U[        5      (       a3  [        U[        R                  " SU 5      5      R                  X#U5      nU$ [        U[        5      (       a3  [        U[        R                  " SU 5      5      R                  X#U5      nU$ [        U[        5      (       a3  [        U[        R                  " SU 5      5      R                  X#U5      nU$ [        U[         5      (       a3  [#        U[        R                  " SU 5      5      R                  X#U5      nU$ [	        5       $ )Nr-   )	itertoolschainvaluesr|   r   rE   r   Tcastmethod_callre   r   rX   r   r   r   dictr   )rK   objmethod_namer   rx   argresults          r?   inner_method_call AstInterpreter.inner_method_call  sd   ??49C#|,,#~% : c3!#qvvmT'BCOOP[cijF  T"""3}d(CDPPQ\djkF  S!!"3}d(CDPPQ\djkF  T"" aff]D&ABNN{bhiF
 	 T""QVVM4%@AMMkaghF   >!rA   c                <   UR                   nU R                  U5        U R                  U5      nUR                  R                  nU R                  UR                  5      u  pV[        XV5      (       a  [        5       nOU R                  X4XV5      nXpR                  U'   g rI   )source_objectevaluate_statementnode_to_runtime_valuerb   r~   reduce_argumentsr   r   r   r)  r   )rK   rh   	invocabler%  r&  r   rx   r  s           r?   r#  AstInterpreter.method_call,  s~    &&		*((3iioo..tyy9t$$*C((4HC!drA   c                    g rI   rV   rK   rh   s     r?   evaluate_fstringAstInterpreter.evaluate_fstring8  s    rA   c                `    UR                   R                   H  nU R                  U5        M     g rI   )r   	argumentsr-  )rK   r   r'  s      r?   evaluate_arraystatement&AstInterpreter.evaluate_arraystatement;  s$    88%%C##C( &rA   c                p    U R                  UR                  5        U R                  UR                  5        g rI   r-  leftrightrK   r   s     r?   evaluate_arithmeticstatement+AstInterpreter.evaluate_arithmeticstatement?  &    )		*rA   c                :    U R                  UR                  5        g rI   r-  r~   r>  s     r?   evaluate_uminusstatement'AstInterpreter.evaluate_uminusstatementC      		*rA   c                    [        U[        5      (       d   eU R                  UR                  5        U R                  UR                  5        U R                  UR
                  5        g rI   )r|   r'   r-  	condition	trueblock
falseblockr3  s     r?   evaluate_ternaryAstInterpreter.evaluate_ternaryF  sK    $,,,,//0rA   c                    UR                   R                  R                  5        H'  u  p#U R                  U5        U R                  U5        M)     g rI   )r   rx   itemsr-  )rK   rh   kvs       r?   evaluate_dictstatement%AstInterpreter.evaluate_dictstatementL  s=    II$$**,DA##A&##A& -rA   c                p    U R                  UR                  5        U R                  UR                  5        g rI   )r-  iobjectindexr3  s     r?   evaluate_indexing AstInterpreter.evaluate_indexingQ  s&    -

+rA   c                   UR                    H  nU R                  U5        M     UR                  R                  5        H  nU R                  U5        M     [	        U[
        5      (       al  0 nUR                  R                  5        H  u  pxXU" U5      '   M     UR                  5       (       a  [        S5      eU R                  UR                   5      U4$ U R                  U5      0 4$ )Nz9All keyword arguments must be after positional arguments.)
r7  r-  rx   r   r|   r   rN  incorrect_orderr   r  )	rK   r   key_resolverduplicate_key_errorr'  r~   rx   keyr>   s	            r?   r/  AstInterpreter.reduce_argumentsU  s     >>C##C( "[['')E##E* *dL))F KK--/,/|C() 0##%%&'bcc$$T^^4f<<$$T*B..rA   c                p    U R                  UR                  5        U R                  UR                  5        g rI   r;  r3  s     r?   evaluate_comparison"AstInterpreter.evaluate_comparisoni  s&    		*

+rA   c                p    U R                  UR                  5        U R                  UR                  5        g rI   r;  r>  s     r?   evaluate_andstatement$AstInterpreter.evaluate_andstatementm  rA  rA   c                p    U R                  UR                  5        U R                  UR                  5        g rI   r;  r>  s     r?   evaluate_orstatement#AstInterpreter.evaluate_orstatementq  rA  rA   c                :    U R                  UR                  5        g rI   rC  r>  s     r?   evaluate_notstatement$AstInterpreter.evaluate_notstatementu  rF  rA   c                   [        U[        R                  5      (       aB  UR                   Vs1 s H  o"R                  iM     snU R                  UR                  5      -  $ [        U[        R                  5      (       a?  [        5       nUR                   H#  nUR                  U R                  U5      5        M%     U$ [        U[        [        45      (       a<  [        UR                  R                  /5      U R                  UR                  5      -  $ [        U[        5      (       a
  [        5       $ [        U[        5      (       aI  [        5       nUR                   R"                   H#  nUR                  U R                  U5      5        M%     U$ [        U[        R$                  5      (       ay  [        5       nUR                   R&                  R)                  5        HE  u  pgUR                  U R                  U5      5        UR                  U R                  U5      5        MG     U$ [        U[*        5      (       a  [        5       nUR                   R"                   H#  nUR                  U R                  U5      5        M%     UR                   R&                  R-                  5        H#  nUR                  U R                  U5      5        M%     U$ [        U[.        5      (       a  U R                  UR0                  5      nUR                   R"                   H#  nUR                  U R                  U5      5        M%     UR                   R&                  R-                  5        H#  nUR                  U R                  U5      5        M%     U$ [        U[2        5      (       a7  U R                  UR4                  5      U R                  UR6                  5      -  $ [        U[        R8                  [        R:                  [        R<                  [        R>                  [        R@                  45      (       a
  [        5       $ [        U[        RB                  5      (       a  [        URD                  [F        5      (       a  [        5       nO%U R                  URD                  R                  5      nURH                   H#  nUR                  U R                  U5      5        M%     U$ [        U[        RJ                  5      (       a7  U R                  URL                  5      U R                  URN                  5      -  $ [        U[        RP                  5      (       a7  U R                  URR                  5      U R                  UR                  5      -  $ [        U[        RT                  [        RV                  [        RX                  45      (       a7  U R                  UR4                  5      U R                  UR6                  5      -  $ [        U[        RZ                  5      (       a  U R                  UR                  5      $ [        U[        R\                  5      (       aS  U R                  URR                  5      U R                  UR^                  5      -  U R                  UR`                  5      -  $ [        U[        Rb                  5      (       a  U R                  UR                  5      $ [        U[        Rd                  5      (       a  U R                  URf                  5      $ [h        Rj                  " S5      es  snf )NUnhandled node type)6r|   r   r3   varnamesr~   find_potential_writesblockCodeBlockNoder   linesr   r    r&   var_namer#   r   r   r7  DictNoderx   rN  r*   r   r$   r,  r   r<  r=  
NumberNode
StringNode	BreakNodeBooleanNodeContinueNoder4   	elseblockr"   ifsr5   rT  rU  IfNoderH  r2   r6   r1   r%   r'   rI  rJ  r8   ParenthesizedNodeinnerr	   MesonBugException)	rK   rh   elretliner'  rO  rP  r  s	            r?   rm  $AstInterpreter.find_potential_writesx  sT   dG5566'+}}5}HH}58R8RSWS]S]8^^^g3344%C



455d;< #J~/ABCC++,-0J0J4::0VVVf%%5Li((%Cyy**

455c:; +Jg..//%C		((..0

455a89

455a89 1 Jl++%Cyy**

455c:; +yy''..0

455c:; 1Jj)),,T-?-?@Cyy**

455c:; +yy''..0

455c:; 1Jn----dii84;U;UVZV`V`;aaaw1173E3EwGXGXZaZmZmov  pD  pD  E  F  F5Lg2233$..)44e001E1EFXX

455a89 Jg//00--dll;d>X>XY]YcYc>dddgnn----dnn=@Z@Z[_[e[e@fffw55w~~wWXX--dii84;U;UVZV`V`;aaagoo..--djj99g1122--dnn=@Z@Z[_[i[i@jjmq  nH  nH  IM  IX  IX  nY  Y  Yg0011--djj99g7788--djj99(()>??{ 6s   \;c                   U R                  U5      nU HC  nU R                  U   R                  U R                  R	                  5       [        5       45        ME      U R                  UR                  5        U HC  nU R                  U   R                  U R                  R	                  5       [        5       45        ME     g ! [         a     NV[         a     Naf = frI   )
rm  r   r   r   r   r   evaluate_codeblockrn  r   r   )rK   rh   assesasss       r?   evaluate_foreachAstInterpreter.evaluate_foreach  s    **40C  %,,dll.?.?.A<>-RS 	##DJJ/
 C  %,,dll.?.?.A<>-RS 	  	 		s   C 
C	CCc           	        U R                   R                  S5        UR                   H5  nU R                  UR                  5        U R                   S==   S-  ss'   M7     [        UR                  [        5      (       d%  U R                  UR                  R                  5        U R                   R                  5         U R                   GH  n/ nU R                  U5      n[        U[        5      (       d  UR                  U5        U R                  U    H:  u  pg[        U5      [        U R                   5      :  d  M)  UR                  U5        M<     U R                  U    VVs/ s H,  u  ph[        U5      [        U R                   5      ::  d  M)  Xh4PM.     snnU R                  U'   [        U5      S:  d*  [        U5      S:  d  GM  [        U[        5      (       d  GM  [        5       n	U H  n
U R                  R                  X5        M      U R                  U   R                  U R                   R!                  5       U	45        GM     g s  snnf )Nr   r+   )r   r   ry  r  rn  r|   rx  r"   r   r   get_cur_value_if_definedr   r  r   r   r   r   )rK   rh   r  rq  potential_valuesoldvalr   r~   rP  uvpvs              r?   evaluate_ifAstInterpreter.evaluate_if  s   AA##AGG,LL!  $..)44##DNN$8$89,,H!228<Ff&788 ''/"&"6"6x"@w<#dll"33$++E2 #A PTOcOcdlOm  .TOm|qtu|q}  BE  FJ  FR  FR  BS  rSlwlOm  .TD  *#$q(S1A-BQ-F:V\^oKpKp!^*B%%..r6 +$$X.55t||7H7H7JB6OP - .Ts   '(IIc                    / nU Hs  n[        U[        5      (       a'  UR                  [        U R                  U5      5        M?  [        U[
        5      (       a  UR                  [        5       5        Mo  [        e   U$ rI   )r|   rE   r   rC   rF   r   	TypeError)rK   rh   r   rx   r  r'  s         r?   r   AstInterpreter.func_files  s]    @BC#s##

,T[[#>?C..

<>*  
rA   c                d   US;   a
  [        5       $ [        5       n[        U R                  U   5       HI  u  p4[	        U R
                  5      [	        U5      :  d  M)  U R
                  S [	        U5       U:X  d  MG  Un  O   [        U[        5      (       a  U R                  (       a
  [        5       $ U$ )N>   mesonhost_machinebuild_machinetarget_machine)r   r   reversedr   r  r   r|   r   )rK   rq  r  r   r~   s        r?   r  'AstInterpreter.get_cur_value_if_defined  s    SS>!BSBU&t';';H'EFNG4<< CL0T\\-3w<5PT[5[ G c,--$,,>!
rA   c           
        U R                  U5      n[        U[        5      (       a  [        R                  " [        U R                  R                  5      [        [        R                  " 5       5      5      n[        R                  " U SU R                  R                   SU R                  R                   SU S35        [        5       $ U$ )N:z8 will always crash if executed, since a variable named `z` is not defined)r  r|   r   r
   get_relative_pathr   current_nodefilenamer  getcwdr   linenocolnor   )rK   rq  r  r   s       r?   get_cur_valueAstInterpreter.get_cur_value  s    ++H5c,--))$t/@/@/I/I*JDQSQZQZQ\L]^DLLD64#4#4#;#;"<Ad>O>O>U>U=V  WO  PX  OY  Yi  j  k
  >!
rA   c           
        [        U[        R                  [        R                  [        R                  45      (       a  UR
                  $ [        U[        R                  5      (       a'  UR                  (       a
  [        5       $ UR
                  $ [        U[        5      (       a!  U Vs/ s H  o R                  U5      PM     sn$ [        U[        5      (       a5  UR                  R                   Vs/ s H  o R                  U5      PM     sn$ [        U[        R                  5      (       aX  UR                  R                  R                  5        VVs0 s H&  u  p4U R                  U5      U R                  U5      _M(     snn$ [        U[         5      (       ad  [#        U R$                  R&                  U   5      S:X  d   e[)        [+        U R$                  R&                  U   5      5      nU R                  U5      $ [        U[,        [.        45      (       a=  U R0                  U   n[        U[2        [4        45      (       a  U$ U R                  U5      $ [        U[6        5      (       Gah  U R                  UR8                  5      nU R                  UR:                  5      n[        U[        5      (       a  [        U[        5      (       a  Xx/-   $ [        U[        5      (       a  [        U[        5      (       a  U/U-   $ [        U[        5      (       d  [        U[        5      (       a
  [        5       $ UR<                  S:X  a  [        U[2        5      (       aD  [        U[2        5      (       a/  UR?                  5       n	UR                  5        H	  u  p4XIU'   M     U	$ [        U[        5      (       a  [        U[        5      (       d  U/nXx-   $ Xx-   $ UR<                  S:X  a  Xx-
  $ UR<                  S:X  a  Xx-  $ UR<                  S:X  a  [        U[@        5      (       a  [        U[@        5      (       a  Xx-  $ [        U[4        5      (       aD  [        U[4        5      (       a/  [B        RD                  RG                  Xx5      RI                  SS5      $ GOUR<                  S:X  a.  [        U[@        5      (       a  [        U[@        5      (       a  Xx-  $ GOy[        U[        [J        [L        [N        [4        [P        [@        45      (       a  U$ [        U[        RR                  5      (       an  U R                  URT                  5      n
U R                  URV                  5      n[        U
[        5      (       d  [        U[        5      (       a
  [        5       $ X   $ [        U[        RX                  5      (       a  U R                  UR8                  5      nU R                  UR:                  5      n[        U[        5      (       d  [        U[        5      (       a
  [        5       $ URZ                  S	:X  a  Xx:H  $ URZ                  S
:X  a  Xx:g  $ URZ                  S:X  a  Xx;   $ URZ                  S:X  a  Xx;  $ GO[        U[        R\                  5      (       a|  U R                  UR^                  5      n[        U[        5      (       a
  [        5       $ USL a  U R                  UR`                  5      $ USL a  U R                  URb                  5      $ GO@[        U[        Rd                  5      (       au  U R                  UR8                  5      nU R                  UR:                  5      n[        U[        5      (       d  [        U[        5      (       a
  [        5       $ U=(       d    U$ [        U[        Rf                  5      (       au  U R                  UR8                  5      nU R                  UR:                  5      n[        U[        5      (       d  [        U[        5      (       a
  [        5       $ U=(       a    U$ [        U[        Rh                  5      (       aQ  U R                  UR
                  5      n[        U[        5      (       a  U$ [        U[@        [j        45      (       a  U* $ O[        U[        Rl                  5      (       aO  U R                  UR
                  5      n[        U[        5      (       a  U$ [        U[P        5      (       a  U(       + $ O:[        U[        Rn                  5      (       a  U R                  URp                  5      $ [r        Rt                  " S5      es  snf s  snf s  snnf )Nr+   r   submuldiv\/modz==z!=innotinTFrk  );r|   r   rt  rv  rs  r~   
is_fstringr   r   r.  r   r   r7  rr  rx   rN  r#   r  r   r   nextiterr$   r*   r   r$  rE   r   r<  r=  	operationr   rX   r  r   r  replacerk   rC   r_   re   r5   rT  rU  r2   ctyper'   rH  rI  rJ  r6   r1   r8   floatr%   r{  r|  r	   r}  )rK   rh   xrO  rP  r>   funcvalr<  r=  r  rT  rU  conds                r?   r.  $AstInterpreter.node_to_runtime_value  s   dW//1D1DgFXFXYZZ::g0011#~%zz!d##;?@4a..q14@@i((;?99;N;NO;Na..q1;NOOg..//]a]f]f]m]m]s]s]uv]uUYUVD..q143M3Ma3PP]uvvf%%t((44T:;q@@@tD--99$?@AC--c22z<899mmD)G'D#;//11'::n----dii8D..tzz:E$%%*UL*I*Ig~%%&&:dL+I+Iv~%$--E<1P1P#~%~~&dD))j.E.E))+C %!"A !.JdD))%eT22!&<'|#5(|#5(|#5(dC((Zs-C-C=(c**z%/E/E77<<4<<T3GG5(dC((Zs-C-C<'|-EGXZqsvx|  B  C  D  DKg//0000>G..tzz:E'<00Jul4S4S#~%>!g4455--dii8D..tzz:E$--E<1P1P#~%zzT!}$t#}$t#}$w&(( 'g1122--dnn=D$--#~%t|11$..AAu}11$//BB gnn----dii8D..tzz:E$--E<1P1P#~%=5 goo..--dii8D..tzz:E$--E<1P1P#~%>E!g0011,,TZZ8C#|,,
#U|,,t -goo..,,TZZ8C#|,,
#t$$w %g7788--djj99(()>??M AOvs   *e&4e+-e0c                x   [        U[        5      (       d   eU R                  UR                  5        U R                  UR
                  R                     R                  U R                  R                  5       UR                  45        U R                  UR
                  R                     R                  U5        g rI   )
r|   r    r-  r~   r   rq  r   r   r   r   r3  s     r?   
assignmentAstInterpreter.assignment  s    $////

+T]]00188$,,:K:K:Mtzz9Z[!!$--"5"56==dCrA   c                   [        U[        5      (       d   eU R                  UR                  5        U R	                  UR
                  R                  5      n[        U[        5      (       a  [        5       nO*[        R                  " SU[        S5      UR                  S9nU R                  UR
                  R                     R                  U R                  R                  5       U45        U R                  UR
                  R                     R                  U5        U R                  R!                  X#5        U R                  R!                  UR                  U5        g )Nr   +)r  r<  operatorr=  )r|   r&   r-  r~   r  rq  r   r   r   r@   r   r   r   r   r   r   r   )rK   rh   lhsnewvals       r?   evaluate_plusassign"AstInterpreter.evaluate_plusassign  s    $ 23333

+  !4!45c<((!^F++e#PWX[P\dhdndnoFT]]00188$,,:K:K:Mv9VW!!$--"5"56==dC""3/""4::v6rA   c                ^   [        U[        5      (       d   e[        UR                  R                  5      (       a  [        S5      e[        UR                  R                  5      S:w  a  [        S5      eUS   nUR                  R                  S   n[        U[        5      (       a  U R                  U5        SU l
        g [        U[        5      (       d   e[        [        [        SSSSSSU5      5      U[        S	5      S
9n[        [!        U5      5      Ul        U R                  U5        g )Nz)set_variable accepts no keyword argumentsr   z6set_variable requires exactly two positional argumentsr   r+   Tr<   r=   =)rq  r~   r  )r|   r*   re   r   rx   r   r  r7  r   r-  r   rE   r    r#   r)   r@   rn   ast_id)rK   rh   r   rx   rq  r~   equivs          r?   r    AstInterpreter.func_set_variable  s    $----		  !!"#NOOtyy""#q("#[\\7		##A&h--##E*DL(C((((uRQ1fh/W(X`epwx{p|}2e9~&rA   c                   [        U[        5      (       d   eUS   n[        U[        5      (       a  [        5       nO([        U[        5      (       d   eU R	                  U5      nU R
                  R                  XQ5        U$ )Nr   )r|   r*   r   rE   r  r   r   )rK   rh   r   rx   rq  r>   s         r?   r    AstInterpreter.func_get_variable  sn    $----7h--3?>Ch,,,,$$X.C""3-
rA   c                   [        U[        5      (       d   e[        UR                  R                  5      (       a  [        S5      e[        UR                  R                  5      S:w  a  [        S5      eUS   n[        U[        5      (       d   eU R                  U   R                  U R                  R                  5       U45        g )Nz+unset_variable accepts no keyword argumentsr+   z8unset_variable requires exactly one positional argumentsr   )r|   r*   re   r   rx   r   r  r7  rE   r   r   r   r   )rK   rh   r   rx   rq  s        r?   r   "AstInterpreter.func_unset_variable  s    $----		  !!"#PQQtyy""#q("#]^^7(C((((X&--t||/@/@/BD.IJrA   c                   ^^ SUU4S jjn[        U Vs/ s H  oPR                  U5      PM     sn5      nU Vs/ s H
  ot" U5      PM     sn$ s  snf s  snf )Nc                B  > [        U [        5      (       a>  [        R                  R	                  [        R                  R                  TTU 5      5      $ [        U [        5      (       a  [        U R                  T5      5      $ [        U [        5      (       a  U $ [        erI   )
r|   rE   r  r   normpathr  rC   rM   r   r  )r   	root_pathrF   s    r?   
src_to_abs;AstInterpreter.nodes_to_pretty_filelist.<locals>.src_to_abs  so    #s##ww''Y(LMMC!2333??9566C..
rA   )r   z-T.Union[str, IntrospectionFile, UnknownValue]rW   ra   )r   r.  )rK   r  rF   nodesr  snrtvalsr  s    ``     r?   nodes_to_pretty_filelist'AstInterpreter.nodes_to_pretty_filelist  sV    	  	  !(RW(XRWB)C)CB)GRW(X Y'-.v!
1v.. )Y.s
   AAc           
     f   [        U[        5      (       a  UnOU/n/ nU H  n[        U[        5      (       a4  U R                  U5      nUb  [        U[        5      (       d  U/nXF-  nMJ  ML  [        U[        [
        [        [        [        [        45      (       d  U(       a  XE/-  nM  [        e   U$ rI   )r|   r   r!   r.  rE   re   rX   r  r   rC   NotImplementedError)rK   args_rawinclude_unknown_argsr   flattened_argsr  resolveds          r?   r  AstInterpreter.flatten_args  s    h%%D:D+- A!X&&55a8'%h55$,:".N ( AT3|EVWXX\p#%))  rA   c                (    [        U R                  S9$ )N)r   )r   r   r3  s     r?   evaluate_testcase AstInterpreter.evaluate_testcase  s    4??33rA   c                  > [        US5      (       a  UR                  R                   H  nU R                  R	                  X!5        M      UR                  R
                  R                  5        H   u  p4U R                  R	                  XA5        M"     S Hd  n[        X5      (       d  M  [        [        X5      [        R                  5      (       d   eU R                  R	                  [        X5      U5        Mf     [        U[        R                  5      (       a6  U R                  R	                  U R                  UR                  5      U5        g [        TU ]=  U5      $ )Nr   )r,  r<  r=  rN  rT  rU  rH  )hasattrr   r7  r   r   rx   rN  r|   getattrr   r!   r#   r  r~   r   r-  )rK   r   r'  rO  rP  attrrQ   s         r?   r-  !AstInterpreter.evaluate_statement  s   3xx))!!**34 *--/!!**12 0`Ds!!!'#"4g6F6FGGGG!!**73+=sC a c7>>**&&t'9'9#))'DcJ7-c22rA   c                H   > [         TU ]  U5      nUb  X R                  U'   U$ rI   )r   function_callr   )rK   rh   r  rQ   s      r?   r  AstInterpreter.function_call  s(    g#D)?"%MM$
rA   )r   r   r   r   r   r   r   rI   )r   rE   rF   rE   r   r.   r   rE   r   zenvironment.Environmentr   zT.Optional[T.List[AstVisitor]])r   T.Anyrx   r  rW   zT.Tuple[T.Any, T.Any])r  r  rW   r  )rh   r!   r   T.List[TYPE_var]rx   rw   rW   r   r   )rh   r!   r   r  rx   rw   rW   r   )
r%  r!   r&  rE   r   r  rx   rw   rW   r  )rh   zmparser.MethodNoderW   r   )rh   zmparser.StringNoderW   r   )r   zmparser.ArrayNoderW   r   )r   r   rW   r   )r   r8   rW   r   )rh   r'   rW   r   )rh   zmparser.DictNoderW   r   )rh   r5   rW   r   )r   zmparser.ArgumentNoderZ  z#T.Callable[[mparser.BaseNode], str]r[  zT.Optional[str]rW   zT.Tuple[T.List[T.Any], T.Any])rh   r2   rW   r   )r   r1   rW   r   )r   r6   rW   r   )r   r%   rW   r   )rh   r!   rW   z
T.Set[str])rh   r3   rW   r   )rh   r4   rW   r   )rh   r!   r   r  rx   rw   rW   r  )rq  rE   rW   z2T.Union[BaseNode, UnknownValue, UndefinedVariable])rq  rE   rW   r   )rh   z)T.Union[UnknownValue, BaseNode, TYPE_var]rW   r  )rh   r    rW   r   )rh   r&   rW   r   )r  r   rF   rE   r  rt   rW   z"T.List[T.Union[str, UnknownValue]])F)r  z)T.Union[TYPE_nvar, T.Sequence[TYPE_nvar]]r  re   rW   r  )rh   r7   rW   zDisabler | None)r   zmparser.BaseNoderW   zT.Optional[InterpreterObject])rh   zmparser.FunctionNoderW   r  ),rR   rY   rZ   r[   r   r   r  r   r	  r   r)  r#  r4  r8  r?  rD  rK  rQ  rV  r   r/  r_  rb  re  rh  rm  r  r  r   r  r  r.  r  r  r   r   r   r  r  r  r-  r  r]   __classcell__)rQ   s   @r?   r   r      s   O Ob
Z&
")++1'
, EX7;	/*/ B/ &5	/
 //(,+++?@BTQ.	

Ro@bD7'"	K/.43  rA   r   )r>   rE   rW   r(   )r   r   rW   re   )M
__future__r   r  r  typingr!  collectionsr   dataclassesr   r  pathlibr   r<   r   r	   r
   r   interpreterbaser   r   r   r   r   r   r   r   r   r   r   interpreterbase.helpersr   interpreterr   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   TYPE_CHECKINGvisitorr,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   TypeVarr9   r:   r@   rC   r_   rk   r   r   r   rV   rA   r?   <module>r     s   # 	 
  # !   & &     .    " ??#)AA	 	 	 YYt_YYt_; F F F 4   5  C- -^[	_ [	rA   