
    -Phq                       d 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m	Z	 ddlm
Z
 ddlmZ ej        r\ ej        d	          Zej        d
ej        e         f         Zej        e         Zej        ej        eej        e         f                  Z G d d
ej                  Zd3dZd4dZej         G d d                      Zej         G d de                      Zej         G d de                      Zej         G d de                      Z ej         G d de                      Z!ej         G d d e                      Z"ej         G d! d"e                      Z#d5d%Z$d6d&Z%ej&        d7d,            Z'e'j(        d8d-            Z)e'j(        d9d.            Z)e'j(        d:d/            Z)e'j(        d;d0            Z)e'j(        d<d1            Z)e'j(        d=d2            Z)dS )>a  Rust CFG parser.

Rust uses its `cfg()` format in cargo.

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   )builder   )mparser)MesonBugException_T	TokenTypec                     e Zd Z ej                    Z ej                    Z ej                    Z ej                    Z ej                    Z	 ej                    Z
 ej                    Z ej                    Z ej                    ZdS )r
   N)__name__
__module____qualname__enumautoLPARENRPARENSTRING
IDENTIFIERALLANYNOTCOMMAEQUAL     T/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/mesonbuild/cargo/cfg.pyr
   r
   (   s        TY[[FTY[[FTY[[FJ
$)++C
$)++C
$)++CDIKKEDIKKEEEr   rawstrreturn_LEX_STREAMc              #    K   g }d}| D ]K}|                                 s|dv s
|dk    r	|rd                    |          }|                                 |rt          j        |fV  nW|dk    rt          j        dfV  n@|dk    rt          j        dfV  n)|dk    rt          j        dfV  n|rt          j        |fV  |d	k    rt          j	        dfV  |d
k    rt          j
        dfV  |dk    rt          j        dfV  |dk    rt          j        dfV  |                                 r+|dk    r| }6|                    |           M|r%t          j        d                    |          fV  dS dS )ziLex a cfg() expression.

    :param raw: The raw cfg() expression
    :return: An iterable of tokens
    F>   (),=" anyNallnotr"   r#   r$   r%   )isspacejoinclearr
   r   r   r   r   r   r   r   r   r   append)r   buffer	is_stringsvals        r   lexerr3   5   s      FI ! !99;; 	!333SV''&//CLLNNN 	2 '----- }d+++++ }d+++++ }d+++++ 2 +S1111Cxx '....c '....c ----c ---- 88%IIMM! 6#RWWV__5555556 6r   iterT.Iterator[_T]'T.Iterator[T.Tuple[_T, T.Optional[_T]]]c              #     K   	 t          |           }n# t          $ r Y dS w xY w	 |}	 t          |           }n# t          $ r d}Y nw xY w||fV  |dS 0)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)r4   next_currents      r   	lookaheadr<   d   s      T

   
	JJEE 	 	 	EEE	 un=E
s    
""9 AAc                      e Zd ZdZdS )IRzBase IR node for Cargo CFG.N)r   r   r   __doc__r   r   r   r>   r>      s         &%%%r   r>   c                      e Zd ZU ded<   dS )Stringr   valueNr   r   r   __annotations__r   r   r   rA   rA                JJJJJr   rA   c                      e Zd ZU ded<   dS )
Identifierr   rB   NrC   r   r   r   rG   rG      rE   r   rG   c                  $    e Zd ZU ded<   ded<   dS )Equalr>   lhsrhsNrC   r   r   r   rI   rI      s$          GGGGGGGGr   rI   c                      e Zd ZU ded<   dS )Any
T.List[IR]argsNrC   r   r   r   rM   rM                 r   rM   c                      e Zd ZU ded<   dS )AllrN   rO   NrC   r   r   r   rR   rR      rP   r   rR   c                      e Zd ZU ded<   dS )Notr>   rB   NrC   r   r   r   rT   rT      s          IIIIIr   rT   ast_LEX_STREAM_AHc           	     8   t          |           \  \  }}}||\  }}nd\  }}|t          j        u r8|t          j        u r*t	          t          |          t          |                     S |t          j        u rt          |          S |t          j        u rt          |           S |t          j	        t          j
        hv r/|t          j
        u rt          nt          }|t          j        u sJ t          |            g }g }|t          j        urt          |           \  \  }}}|t          j        u rQ|                    t          t#          t%          |                                         |                                 n|                    ||f           |t          j        u|r<|                    t          t#          t%          |                                          ||          S |t          j        u rt          |            g }|t          j        ur:t          |           \  \  }}}|                    ||f           |t          j        u:t+          t          t#          t%          |                                        S t-          d|           )N)NNzUnhandled Cargo token: )r8   r
   r   r   rI   rG   _parser   rA   r   r   rR   rM   r   r   r   r.   r<   r4   r-   r   rT   r   )	rU   tokenrB   n_streamntoken_type_streamrO   s	            r   rX   rX      s^   #CyyNUEH	 	 	$$$Y_$$E**F3KK888	   e}}	c{{	...	--3)))))S			9+++ $S		NUEA	''F9T&\\#:#:;;<<<uen--- 9+++  	9KKyf6677888uT{{	S			9+++ $S		NUEAMM5%.))) 9+++ 6)DLL1122333
=e==
>
>>r   c                X    t          t          |                     }t          |          S )zParse the tokenized list into Meson AST.

    :param ast: An iterable of Tokens
    :return: An mparser Node to be used as a conditional
    )r<   r4   rX   )rU   ast_is     r   parsera      s#     &d3ii00E%==r   irT.Anybuildbuilder.Buildermparser.BaseNodec                    t           N)NotImplementedErrorrb   rd   s     r   ir_to_mesonrk      s    
r   c                6    |                     | j                  S rh   )stringrB   rj   s     r   r\   r\      s    <<!!!r   c                   |                     d          }| j        dk    r|                    d|          S | j        dv r|                    d|          S | j        dk    r|                    d|          S t          d| j                   )	Nhost_machinetarget_arch
cpu_family>   	target_ostarget_familysystemtarget_endianendianzUnhandled Cargo identifier: )
identifierrB   methodr   )rb   rd   ro   s      r   r\   r\      s    ##N33L	x=  ||L,777	3	3	3||Hl333	_	$	$||Hl333
E28EE
F
FFr   c                z    |                     t          | j        |          t          | j        |                    S rh   )equalrk   rJ   rK   rj   s     r   r\   r\      s.    ;;{26511;rvu3M3MNNNr   c                R    |                     t          | j        |                    S rh   )not_rk   rB   rj   s     r   r\   r\      s     ::k"(E22333r   c                6   t          t          | j                            }t          |          }|                    t          t          |          |          t          ||                    }|D ]&}|                    t          ||          |          }'|S rh   )r4   reversedrO   r8   or_rk   rb   rd   rO   lastcuras         r   r\   r\     s    !!""D::D
))KT

E22Ke4L4L
M
MC 4 4iiAu--s33Jr   c                6   t          t          | j                            }t          |          }|                    t          t          |          |          t          ||                    }|D ]&}|                    t          ||          |          }'|S rh   )r4   r~   rO   r8   and_rk   r   s         r   r\   r\     s    !!""D::D
**[dU33[u5M5M
N
NC 5 5jjQ..44Jr   )r   r   r   r    )r4   r5   r   r6   )rU   rV   r   r>   )rU   r    r   r>   )rb   rc   rd   re   r   rf   )rb   rA   rd   re   r   rf   )rb   rG   rd   re   r   rf   )rb   rI   rd   re   r   rf   )rb   rT   rd   re   r   rf   )rb   rM   rd   re   r   rf   )rb   rR   rd   re   r   rf   )*r?   
__future__r   dataclassesr   	functoolstypingTr'   r   r   mesonlibr   TYPE_CHECKINGTypeVarr	   TupleOptionalr   
_LEX_TOKENIterabler    IteratorrV   Enumr
   r3   r<   	dataclassr>   rA   rG   rI   rM   rR   rT   rX   ra   singledispatchrk   registerr\   r   r   r   <module>r      s   $ # " " " " "                          ( ( ( ( ( (? M	4Bajo56J*Z(KZ
AJz4J(J KLN
 
 
 
 
	 
 
 
,6 ,6 ,6 ,6^   8 & & & & & & & &
     R   
        
     B        "   
     "   
     "   
)? )? )? )?X        " " " " G G G G O O O O 4 4 4 4          r   