
    <h                       S r SSKJr  SSKrSSKrSSKrSSKJr  \R                  (       aj  \R                  " S5      r\R                  S\R                  \   4   r\R                   \   r\R                   \R                  \\R                  \   4      r " S S\R&                  5      rSS	 jrSS
 jr\R.                   " S S5      5       r\R.                   " S S\5      5       r\R.                   " S S\5      5       r\R.                   " S S\5      5       r\R.                   " S S\5      5       r\R.                   " S S\5      5       r\R.                   " S S\5      5       rSS jrS S jr S!S jr!S"S jr"g)#a  Rust CFG parser.

Rust uses its `cfg()` format in cargo.
https://doc.rust-lang.org/reference/conditional-compilation.html

This may have the following functions:
 - all()
 - any()
 - not()

And additionally is made up of `identifier [ = str]`. Where the str is optional,
so you could have examples like:
```
[target.`cfg(unix)`.dependencies]
[target.'cfg(target_arch = "x86_64")'.dependencies]
[target.'cfg(all(target_arch = "x86_64", target_arch = "x86"))'.dependencies]
```
    )annotationsN   )MesonBugException_T	TokenTypec                  h   \ rS rSr\R
                  " 5       r\R
                  " 5       r\R
                  " 5       r\R
                  " 5       r	\R
                  " 5       r
\R
                  " 5       r\R
                  " 5       r\R
                  " 5       r\R
                  " 5       r\R
                  " 5       rSrg)r   &    N)__name__
__module____qualname____firstlineno__enumautoLPARENRPARENSTRING
IDENTIFIERALLANYNOTCOMMAEQUALCFG__static_attributes__r
       u/mnt/mint/home/seanl/mnt/public/Repos/ladybird/Build/vcpkg/downloads/tools/meson-1.9.0-d1fcc2/mesonbuild/cargo/cfg.pyr   r   &   sp    YY[FYY[FYY[FJ
))+C
))+C
))+CIIKEIIKE
))+Cr   c              #     #    SnSn[        U 5       GHV  u  p4UR                  5       (       d  US;   d  M#  XU nUS-   nUS:X  a  U(       a  [        R                  U4v   SnMQ  US:X  a  [        R                  S4v   OlUS:X  a  [        R
                  S4v   OQUS	:X  a  [        R                  S4v   O6US
:X  a  [        R                  S4v   OU(       a  [        R                  U4v   US:X  a  [        R                  S4v   M  US:X  a  [        R                  S4v   GM  US:X  a  [        R                  S4v   GM.  US:X  a  [        R                  S4v   GMK  US:X  d  GMT  SnGMY     XS nU(       a  [        R                  U4v   gg7f)z]Lex a cfg() expression.

:param raw: The raw cfg() expression
:return: An iterable of tokens
r   F>   "(),=   r   anyNallnotcfgr    r!   r"   r#   T)	enumerateisspacer   r   r   r   r   r   r   r   r   r   r   )rawstart	is_stringisvals         r   lexerr1   4   s`     EI#99;;!88A,CEECxI ''--!	 }}d++ }}d++ }}d++ }}d++ ++S11Cx ''..c ''..c --c --c 	9 : f+C
##S)) s   /FD,F&(Fc              #     #     [        U 5      n Un [        U 5      nX!4v   Uc  gM  ! [         a     gf = f! [         a    Sn N)f = f7f)zGet the current value of the iterable, and the next if possible.

:param iter: The iterable to look into
:yield: A tuple of the current value, and, if possible, the next
:return: nothing
N)nextStopIteration)iternext_currents      r   	lookaheadr8   _   sj     T

 	JE n= 	    	E	s@   A) A9 A
6A6AAAAAc                      \ rS rSrSrSrg)IR{   zBase IR node for Cargo CFG.r
   N)r   r   r   r   __doc__r   r
   r   r   r:   r:   {   s     &r   r:   c                       \ rS rSr% S\S'   Srg)String   strvaluer
   Nr   r   r   r   __annotations__r   r
   r   r   r>   r>      	     Jr   r>   c                       \ rS rSr% S\S'   Srg)
Identifier   r@   rA   r
   NrB   r
   r   r   rF   rF      rD   r   rF   c                  *    \ rS rSr% S\S'   S\S'   Srg)Equal   rF   lhsr>   rhsr
   NrB   r
   r   r   rI   rI      s     
O	Kr   rI   c                       \ rS rSr% S\S'   Srg)Any   
T.List[IR]argsr
   NrB   r
   r   r   rN   rN      
     r   rN   c                       \ rS rSr% S\S'   Srg)All   rP   rQ   r
   NrB   r
   r   r   rT   rT      rR   r   rT   c                       \ rS rSr% S\S'   Srg)Not   r:   rA   r
   NrB   r
   r   r   rW   rW      s	     Ir   rW   c                   [        U 5      u  u  pnUb  Uu  pEOSu  pEU[        R                  L as  U(       d   e[        U5      nU[        R                  L aJ  [        U 5        [        U 5      u  u  pnU[        R
                  L d   eUc   e[        U[        U5      5      $ U$ U[        R                  [        R                  1;   a  U[        R                  L a  [        O[        n/ n[        U 5      u  u  pnU[        R                  L d   eU(       a  US   [        R                  :X  a  U" U5      $  UR                  [        U 5      5        [        U 5      u  u  pnU[        R                  L a  OU[        R                   L d   eMU  U" U5      $ U[        R"                  [        R$                  1;   a{  U[        R"                  L n	[        U 5      u  u  pnU[        R                  L d   e[        U 5      n
[        U 5      u  u  pnU[        R                  L d   eU	(       a  ['        U
5      $ U
$ [)        SU SU 35      e)N)NNr   zUnhandled Cargo token: )r3   r   r   rF   r   r   rI   r>   r   r   rT   rN   r   r   append_parser   r   r   rW   r   )asttokenrA   n_streamntoken_id_type_rQ   is_notargs              r   r\   r\      s   #CyNUH	 		$$$uY__$I $S	NUAI,,,,,$$$fUm,,
	9==)--0	0	-3#'9 	(((((y'7'77;KKs$ $S	NUA	(((IOO+++  T{	9==)--0	0)--' I	(((((Sk I	(((((!s3x*s*"8q HIIr   c                .    [        U 5      n[        U5      $ )zParse the tokenized list into Meson AST.

:param ast: An iterable of Tokens
:return: An mparser Node to be used as a conditional
)r8   r\   )r]   ast_is     r   parserh      s     &cNE%=r   c                :  ^ [        U [        5      (       a  U R                  T;   $ [        U [        5      (       a<  TR	                  U R
                  R                  5      U R                  R                  :H  $ [        U [        5      (       a  [        U R                  T5      (       + $ [        U [        5      (       a  [        U4S jU R                   5       5      $ [        U [        5      (       a  [        U4S jU R                   5       5      $ [        SU  35      e)Nc              3  <   >#    U  H  n[        UT5      v   M     g 7fN	_eval_cfg.0r.   cfgss     r   	<genexpr>_eval_cfg.<locals>.<genexpr>        7w!9Q%%w   c              3  <   >#    U  H  n[        UT5      v   M     g 7frk   rl   rn   s     r   rq   rr      rs   rt   zUnhandled Cargo cfg IR: )
isinstancerF   rA   rI   getrK   rL   rW   rm   rN   r%   rQ   rT   r&   r   )irrp   s    `r   rm   rm      s    "j!!xx4	B		xx%55	B		RXXt,,,	B		7rww777	B		7rww777":2$ ?@@r   c                >    [        [        [        U 5      5      U5      $ rk   )rm   rh   r1   )r+   rp   s     r   eval_cfgrz      s    U5:&--r   )r+   r@   return_LEX_STREAM)r5   zT.Iterator[_T]r{   z'T.Iterator[T.Tuple[_T, T.Optional[_T]]])r]   _LEX_STREAM_AHr{   r:   )r]   r|   r{   r:   )rx   r:   rp   T.Dict[str, str]r{   bool)r+   r@   rp   r~   r{   r   )#r<   
__future__r   dataclassesr   typingTmesonlibr   TYPE_CHECKINGTypeVarr   TupleOptionalr@   
_LEX_TOKENIteratorr|   r}   Enumr   r1   r8   	dataclassr:   r>   rF   rI   rN   rT   rW   r\   rh   rm   rz   r
   r   r   <module>r      s  & #    )??	
4Bajjo56J**Z(KZZ
AJJz4J(J KLN		 (*V8 & & &
 R  
   
 B   "  
 "  
 "  
(JVA.r   