
    eI              	         U d dl mZ d dlmZ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 e	j                  r d dlmZ ddlmZ  e	j&                  d	d
      Z ej*                  dej,                  ej.                  z        ZdvdZ G d de      Z G d de      Z e	j&                  deee      Z ed       G d de	j@                  e                Z! G d d      Z"e G d d
             Z# ed       G d de#             Z$ ed       G d de	j@                  e   e#             Z% G d  d!e%e         Z& G d" d#e%e         Z' ed       G d$ d%e%e                Z( G d& d'e%e         Z) ed       G d( d)e)             Z* G d* d+e*      Z+ ed       G d, d-e)             Z, G d. d/e,      Z- G d0 d1e%      Z. G d2 d3e%      Z/ G d4 d5e%e         Z0 ed       G d6 d7e#             Z1 ed       G d8 d9e#             Z2 ed       G d: d;e#             Z3 G d< d=e#      Z4 ed       G d> d?e#             Z5 G d@ dAe5      Z6 G dB dCe5      Z7 ed       G dD dEe5             Z8 ed       G dF dGe5             Z9 ed       G dH dIe#             Z: G dJ dKe:      Z; G dL dMe:      Z< ed       G dN dOe#             Z= ed       G dP dQe#             Z> ed       G dR dSe#             Z? ed       G dT dUe#             Z@ ed       G dV dWe#             ZA G dX dYeA      ZB ed       G dZ d[e#             ZC ed       G d\ d]e#             ZD ed       G d^ d_e#             ZE ed       G d` dae#             ZF ed       G db dce#             ZG ed       G dd dee#             ZH ed       G df dge#             ZIe	j                  redh   ZJdidjdkdldmdndodpdqZKdreLds<    G dt du      ZMy)w    )annotations)	dataclassfieldN   )MesonException)mlog)Literal)
AstVisitor	BaseNodeTBaseNode)bounda,  
    ( \\U[A-Fa-f0-9]{8}   # 8-digit hex escapes
    | \\u[A-Fa-f0-9]{4}   # 4-digit hex escapes
    | \\x[A-Fa-f0-9]{2}   # 2-digit hex escapes
    | \\[0-7]{1,3}        # Octal escapes
    | \\N\{[^}]+\}        # Unicode characters by name
    | \\[\\'abfnrtv]      # Single-character escapes
    )c                h    t        j                  | j                  d      j                         d      S )Nr   unicode_escape)codecsdecodegroupencode)matchs    4/usr/lib/python3/dist-packages/mesonbuild/mparser.pydecode_matchr   *   s%    ==Q..02BCC    c                  0     e Zd ZU dZded<   d fdZ xZS )ParseExceptionNzT.Optional[CodeBlockNode]astc                j    t         |   t        j                  |||             || _        || _        y N)super__init__r   	code_linelinenocolno)selftextliner    r!   	__class__s        r   r   zParseException.__init__1   s+    dE:;
r   )
r#   strr$   r&   r    intr!   r'   returnNone)__name__
__module____qualname__r   __annotations__r   __classcell__r%   s   @r   r   r   -   s    %)C	") r   r   c                  4    e Zd Z	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZy)BlockParseExceptionc                
   ||k(  rDt        j                  | dj                  ||dj                  d|z  d||z
  dz
  z                     n,t        j                  | d||dd|z  z  |||dd|z  z  fz         || _        || _        y )Nz{}
{}
{}z{}^{}^ _r   z0%s
%s
%s
For a block that started at %d,%d
%s
%sz%s^)r   r   formatr    r!   )r"   r#   r$   r    r!   
start_linestart_linenostart_colnos           r   r   zBlockParseException.__init__8   s     \! ##D,*=*=dD(//Z]`kZkmpty  }H  uH  KL  uL  nM  KN  +O  P ##D*aeikoqvz}  AF  {F  rG  IU  Wb  dn  pu  y|  J  yJ  pK  eL  +L  M
r   N)r#   r&   r$   r&   r    r'   r!   r'   r6   r&   r7   r'   r8   r'   r(   r)   )r*   r+   r,   r    r   r   r1   r1   7   sU      	
    " ! r   r1   TV_TokenTypesF)eqc                  \    e Zd ZU ded<   ded<   ded<   ded<   ded<   ded	<   d
ed<   ddZy)Tokenr&   tidfilenamer'   
line_startr    r!   T.Tuple[int, int]bytespanr:   valuec                    t        |t              r| j                  |k(  S t        |t              r| j                  |j                  k(  S t        S r   )
isinstancer&   r>   r=   NotImplemented)r"   others     r   __eq__zToken.__eq__d   s>    eS!88u$$u%88uyy((r   N)rG   objectr(   bool)r*   r+   r,   r-   rH   r9   r   r   r=   r=   Z   s,    	HMOKJr   r=   c                  $    e Zd ZddZddZddZy)Lexerc                   || _         h d| _        dh| _        dt        j                  v | _        | j
                  r| j                  j                  ddh       g dt        j                  d      fdt        j                  d	t        j                        fd
t        j                  d      fdt        j                  d      fdt        j                  d      fdt        j                  d      fdt        j                  d      fdt        j                  dt        j                        fdt        j                  d      fdt        j                  d      fdt        j                  d      fdt        j                  d      fdt        j                  d      fd t        j                  d!      fd"t        j                  d#      fd$t        j                  d%      fd&t        j                  d'      fd(t        j                  d)      fd*t        j                  d+      fd,t        j                  d-      fd.t        j                  d/      fd0t        j                  d1      fd2t        j                  d3      fd4t        j                  d5      fd6t        j                  d7      fd8t        j                  d9      fd:t        j                  d;      fd<t        j                  d=      fd>t        j                  d?      fd@t        j                  dA      fdBt        j                  dC      fdDt        j                  dE      fdFt        j                  dG      fdHt        j                  dI      f| _
        y )JN>   ifinorandnotelifelsetruebreakendiffalseforeachcontinue
endforeachr(   MESON_RUNNING_IN_PROJECT_TESTStestcaseendtestcase
whitespacez[ \t]+multiline_fstringzf'''(.|\n)*?'''fstringzf'([^'\\]|(\\.))*'idz[_a-zA-Z][_0-9a-zA-Z]*numberz30[bB][01]+|0[oO][0-7]+|0[xX][0-9a-fA-F]+|0|[1-9]\d*eol_contz\\[ \t]*(#.*)?\neolz\nmultiline_stringz'''(.|\n)*?'''commentz#.*lparenz\(rparenz\)lbracketz\[rbracketz\]lcurlz\{rcurlz\}dblquote"stringz'([^'\\]|(\\.))*'comma,
plusassignz\+=dotz\.plusz\+dash-starz\*percent%fslash/colon:equal==nequal!=assign=le<=lt<ge>=gt>questionmarkz\?)codekeywordsfuture_keywordsosenvironin_unit_testupdaterecompileMtoken_specification)r"   r   s     r   r   zLexer.__init__l   s   	4 !)z<

JMM  *m!<=$$
2::i01$$
 !"**-?"FG$$
 

#89:	$$

 2::678$$
 rzz"XYZ$$
 $789$$
 BJJu%&$$
  ,=rtt!DE$$
 

6*+$$
 rzz%()$$
 rzz%()$$
 E*+$$
 E*+$$
 bjj'($$
  bjj'(!$$
" D)*#$$
$ rzz"678%$$
& bjj&''$$
( 2::f-.)$$
* BJJu%&+$$
, RZZ&'-$$
. RZZ%&/$$
0 RZZ&'1$$
2 

4()3$$
4 rzz$'(5$$
6 bjj&'7$$
8 bjj'(9$$
: rzz%();$$
< rzz$'(=$$
> 2::e$%?$$
@ 2::d#$A$$
B 2::e$%C$$
D 2::d#$E$$
F RZZ./G$$
 r   c                T    | j                   || j                   j                  d|       S )N
)r   find)r"   r@   s     r   getlinezLexer.getline   s"    yyDIINN4$DEEr   c           
   #  D  K   d}d}d}d}d}d}d}|t        | j                        k  rud}	d}
| j                  D ]'  \  }}|j                  | j                  |      }|s&|}|}|j	                         |z
  }d}	|}|j                         }|}||f}|j                         }
|dk(  r|dz  }n|dk(  r|dz  }n|dk(  r|dz  }n|d	k(  r|dz  }n~|d
k(  r|dz  }nr|dk(  r|dz  }nf|dk(  rt        d| j                  |      ||      |dv ri|
j                  d      dk7  rHd}t        j                  t        j                  || j                  |      |      t        |||             |
|dk(  rdndd }
n|dv r\|
|dk(  rdndd }
|
j                  d      }t        |      dkD  r|t        |      dz
  z  }|j                         t        |d         z
  }nw|dk(  r
|dz  }|}d}nh|dk(  r|dz  }|}|dkD  s
|dkD  s|dkD  rMd}nJ|dk(  rE|
| j                  v r|
}n4|
| j                   v r&t        j                  d|
 dt        |||             t#        |||||||
        n |	st        d | j                  |      ||      |t        | j                        k  rty y w)!Nr   r   F Trh   ri   rj   rk   rl   rm   rn   z3Double quotes are not supported. Use single quotes.>   rp   ra   r   zNewline character in a string detected, use ''' (three single quotes) for multiline strings instead.
This will become a hard error in a future Meson release.locationra      >   rf   r`   r`         rd   r_   re   rb   zIdentifier 'zG' will become a reserved keyword in a future release. Please rename it.lexer)lenr   r   r   startendr   r   r   r   r   warningr   r   splitr   r   r=   )r"   r?   r@   r    loc	par_countbracket_count
curl_countcolmatchedrC   r>   regmocurlinecurline_start
span_startspan_endrB   msgliness                        r   lexz	Lexer.lex   s    
	
C		N"GE"66 8
cYYtyy#.$G$.M((*z1C"G!$J&&(C"H *H5HHHJEh!Q	!Q	
*%*
*%*"a
"a

*,-bdhdpdpq{d|  E  GJ  K  K 55 ::d+r1$^C !LLT\\*=UWZ)[fnouwz  }E  gF  G %3)+;a2 F II %32E+Ea1R P %D 1u:>"c%j1n4F)+Cb	N)BJ
*!%(
*!%(
$q=MA,=a".C DMM1"'C$(<(<< $|E7  CJ  .K6>vsH6U!WX}gsHV[\\q8r $Wdll:.FPSTT{ C		N"s   AJ  H<J J N)r   r&   )r@   r'   r(   r&   )r?   r&   r(   zT.Generator[Token, None, None])r*   r+   r,   r   r   r   r9   r   r   rL   rL   k   s    -
^FEUr   rL   c                      e Zd ZU ded<   ded<    ed      Zded<    ed      Zded<    ed      Zded	<    ed      Zd
ed<   	 d	 	 	 	 	 ddZ	ddZ
ddZy)r   r'   r    r!   Fhashr&   r?   
end_lineno	end_colnoT.Optional[WhitespaceNode]whitespacesNc                    || _         || _        || _        ||n|| _        ||n|| _        d | _        d| _        d| _        d| _        y )Nr   r   )	r    r!   r?   r   r   r   levelast_idcondition_level)r"   r    r!   r?   r   r   s         r   r   zBaseNode.__init__   sS    
 (2(>*F&/&; 
 r   c                    dj                  t        |       j                        }t        ||      r!t	        ||      }t        |      r	 ||        y y y )Nzvisit_{})r5   typer*   hasattrgetattrcallable)r"   visitorfnamefuncs       r   acceptzBaseNode.accept   sJ    !!$t*"5"567E"7E*D~T
  #r   c                t    | j                   t        |      | _         y | j                   j                  |       y r   )r   WhitespaceNodeappendr"   tokens     r   append_whitespaceszBaseNode.append_whitespaces  s/    #-e4D##E*r   )NN)r    r'   r!   r'   r?   r&   r   T.Optional[int]r   r   r(   r)   )r   z'AstVisitor'r(   r)   r   r=   r(   r)   )r*   r+   r,   r-   r   r?   r   r   r   r   r   r   r9   r   r   r   r      sw    KJu%Hc%'J'&Is&.3.?K+? SW!,!@O![_!+r   T)unsafe_hashc                  4     e Zd ZU ded<   d fdZddZ xZS )r   r&   rC   c                    t         |   |j                  |j                  |j                         d| _        | j                  |       y Nr   )r   r   r    r!   r?   rC   r   r"   r   r%   s     r   r   zWhitespaceNode.__init__  s3    u{{ENNC
Er   c                B    | xj                   |j                   z  c_         y r   )rC   r   s     r   r   zWhitespaceNode.append  s    

ekk!
r   r   
Token[str])r   r   r(   r)   )r*   r+   r,   r-   r   r   r.   r/   s   @r   r   r   
  s     J
"r   r   c                  H     e Zd ZU ded<    ed      Zded<   d fdZ xZS )	ElementaryNoder:   rC   Fr   rA   rB   c                    t         |   |j                  |j                  |j                         |j
                  | _        |j                  | _        y r   )r   r   r    r!   r?   rC   rB   r   s     r   r   zElementaryNode.__init__  s6    u{{ENNC[[
r   r   Token[TV_TokenTypes])r*   r+   r,   r-   r   rB   r   r.   r/   s   @r   r   r     s%     "'U"3H3' 'r   r   c                      e Zd Zy)BooleanNodeNr*   r+   r,   r9   r   r   r   r   "      r   r   c                      e Zd Zy)IdNodeNr   r9   r   r   r   r   %  r   r   r   c                  2    e Zd ZU  ed      Zded<   ddZy)
NumberNodeFr   r&   	raw_valuec                    t         j                  | |j                  |j                  |j                         |j
                  | _        t        |j
                  d      | _        |j                  | _        y )Nr   )base)	r   r   r    r!   r?   rC   r   r'   rB   r   s     r   r   zNumberNode.__init__-  sJ    $ekk5>>J1-
r   Nr   )r*   r+   r,   r   r   r-   r   r9   r   r   r   r   (  s     &Is&'r   r   c                      e Zd Zy)BaseStringNodeNr   r9   r   r   r   r   3  r   r   r   c                  @     e Zd ZU  ed      Zded<   dd fdZ xZS )
StringNodeFr   r&   r   c                    t         |   |       |r$t        j                  t        |j
                        n|j
                  | _        |j
                  | _        y r   )r   r   ESCAPE_SEQUENCE_SINGLE_REsubr   rC   r   )r"   r   escaper%   s      r   r   zStringNode.__init__;  s?    QW.22<M]b]h]h
r   )T)r   r   r   rJ   )r*   r+   r,   r   r   r-   r   r.   r/   s   @r   r   r   6  s     &Is&% %r   r   c                      e Zd Zy)FormatStringNodeNr   r9   r   r   r   r   @  r   r   r   c                        e Zd Zd fdZ xZS )MultilineStringNodec                F    t         |   |       |j                  | _        y r   )r   r   rC   r   s     r   r   zMultilineStringNode.__init__F  s    [[
r   r   )r*   r+   r,   r   r.   r/   s   @r   r   r   C  s    ! !r   r   c                      e Zd Zy)MultilineFormatStringNodeNr   r9   r   r   r   r   J  r   r   r   c                      e Zd Zy)ContinueNodeNr   r9   r   r   r   r   M  r   r   r   c                      e Zd Zy)	BreakNodeNr   r9   r   r   r  r  P  r   r   r  c                      e Zd Zy)
SymbolNodeNr   r9   r   r   r  r  S  r   r   r  c                       e Zd ZU  ed      Zded<    ed      Zded<    ed      Zded<    ed      Zded	<   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 xZS )ArgumentNodeFr   T.List[BaseNode]	argumentsT.List[SymbolNode]commascolumnszT.Dict[BaseNode, BaseNode]kwargsc                    t         |   |j                  |j                  |j                         g | _        g | _        g | _        i | _        d| _	        y )NF)
r   r   r    r!   r?   r  r	  r
  r  order_errorr   s     r   r   zArgumentNode.__init__^  sD    u{{ENNC r   c                    | j                         dkD  rd| _        t        |t              s|g| j                  z   | _        y y Nr   T
num_kwargsr  rE   	EmptyNoder  r"   	statements     r   prependzArgumentNode.prependf  s:    ??q #D)Y/'[4>>9DN 0r   c                    | j                         dkD  rd| _        t        |t              s| xj                  |gz  c_        y y r  r  r  s     r   r   zArgumentNode.appendl  s8    ??q #D)Y/NNyk)N 0r   c                    t        fd| j                  D              r:t        j                  dj                   d|        t        j                  d       || j                  <   y )Nc              3  t   K   | ]/  }t        |t              xr j                  |j                  k(   1 y wr   )rE   r   rC   ).0xnames     r   	<genexpr>z)ArgumentNode.set_kwarg.<locals>.<genexpr>s  s-     VQ
1f%?$***??Vs   58zKeyword argument "z" defined multiple times.r   z/This will be an error in future Meson releases.)anyr  r   r   rC   r"   r  rC   s    ` r   	set_kwargzArgumentNode.set_kwargr  sN    V$++VVLL-djj\9RS^bcLLJK!Dr   c                "    || j                   |<   y r   )r  r  s      r   set_kwarg_no_checkzArgumentNode.set_kwarg_no_checkx  s    !Dr   c                ,    t        | j                        S r   )r   r  r"   s    r   num_argszArgumentNode.num_args{  s    4>>""r   c                ,    t        | j                        S r   )r   r  r#  s    r   r  zArgumentNode.num_kwargs~  s    4;;r   c                    | j                   S r   )r  r#  s    r   incorrect_orderzArgumentNode.incorrect_order  s    r   c                "    | j                         S r   )r$  r#  s    r   __len__zArgumentNode.__len__      }}r   r   )r  r   r(   r)   )r  r   rC   r   r(   r)   )r  r   rC   r   r(   r)   )r(   r'   )r(   rJ   )r*   r+   r,   r   r  r-   r	  r
  r  r   r  r   r  r!  r$  r  r'  r)  r.   r/   s   @r   r  r  V  sr     #(U"3I3!&E!2F2"'U"3G3).E):F&:!:*""#  r   r  c                  @     e Zd ZU ded<   ded<   ded<   d fdZ xZS )	ArrayNoder  rj   r  argsrk   c                    t         |   |j                  |j                  |j                  |j                  |j                  dz          || _        || _        || _        y Nr   )r   r   )r   r   r    r!   r?   rj   r-  rk   )r"   rj   r-  rk   r%   s       r   r   zArrayNode.__init__  sS    (..$--T\TcTcowo}o}~o  	A 	 r   )rj   r  r-  r  rk   r  r*   r+   r,   r-   r   r.   r/   s   @r   r,  r,    s!     
! !r   r,  c                  @     e Zd ZU ded<   ded<   ded<   d fdZ xZS )DictNoder  rl   r  r-  rm   c                    t         |   |j                  |j                  |j                  |j                  |j                  dz          || _        || _        || _        y r/  )r   r   r    r!   r?   rl   r-  rm   )r"   rl   r-  rm   r%   s       r   r   zDictNode.__init__  sM    u{{DMMellfkfqfqrsfst
	
r   )rl   r  r-  r  rm   r  r0  r/   s   @r   r2  r2    s!     
 r   r2  c                      e Zd Zy)r  Nr   r9   r   r   r  r    r   r   r  c                  @     e Zd ZU ded<   ded<   ded<   d fdZ xZS )BinaryOperatorNoder   leftr  operatorrightc                    t         |   |j                  |j                  |j                         || _        || _        || _        y r   )r   r   r    r!   r?   r7  r8  r9  )r"   r7  r8  r9  r%   s       r   r   zBinaryOperatorNode.__init__  s5    djj$--@	 
r   )r7  r   r8  r  r9  r   r0  r/   s   @r   r6  r6    s     NO r   r6  c                      e Zd Zy)OrNodeNr   r9   r   r   r<  r<    r   r   r<  c                      e Zd Zy)AndNodeNr   r9   r   r   r>  r>    r   r   r>  c                  ,     e Zd ZU ded<   d fdZ xZS )ComparisonNodeCOMPARISONSctypec                6    t         |   |||       || _        y r   )r   r   rB  )r"   rB  r7  r8  r9  r%   s        r   r   zComparisonNode.__init__  s    x/
r   )rB  rA  r7  r   r8  r  r9  r   r0  r/   s   @r   r@  r@    s      r   r@  c                  ,     e Zd ZU ded<   d fdZ xZS )ArithmeticNoder&   	operationc                6    t         |   |||       || _        y r   )r   r   rF  )r"   rF  r7  r8  r9  r%   s        r   r   zArithmeticNode.__init__  s    x/"r   )rF  r&   r7  r   r8  r  r9  r   r0  r/   s   @r   rE  rE    s     N# #r   rE  c                  6     e Zd ZU ded<   ded<   d fdZ xZS )UnaryOperatorNoder  r8  r   rC   c                    t         |   |j                  |j                  |j                         || _        || _        y r   )r   r   r    r!   r?   r8  rC   )r"   r   r8  rC   r%   s       r   r   zUnaryOperatorNode.__init__  s.    u{{ENNC 
r   )r   r   r8  r  rC   r   r0  r/   s   @r   rI  rI    s     O r   rI  c                      e Zd Zy)NotNodeNr   r9   r   r   rL  rL    r   r   rL  c                      e Zd Zy)
UMinusNodeNr   r9   r   r   rN  rN    r   r   rN  c                  b     e Zd ZU  ed      Zded<    ed      Zded<   d	 fdZd
dZ xZ	S )CodeBlockNodeFr   r   pre_whitespacesr  r   c                    t         |   |j                  |j                  |j                         d | _        g | _        y r   )r   r   r    r!   r?   rQ  r   r   s     r   r   zCodeBlockNode.__init__  s/    u{{ENNC#
r   c                    | j                   r| j                   d   j                  |       y | j                  t        |      | _        y | j                  j	                  |       y )Nr   )r   r   rQ  r   r   r   s     r   r   z CodeBlockNode.append_whitespaces  sL    ::JJrN--e4!!)#1%#8D   ''.r   r   r   )
r*   r+   r,   r   rQ  r-   r   r   r   r.   r/   s   @r   rP  rP    s/     38U2CO/C#/E/
/r   rP  c                  J     e Zd ZU ded<   ded<   ded<   ded<   d fdZ xZS )		IndexNoder   iobjectr  rj   indexrk   c                    t         |   |j                  |j                  |j                         || _        || _        || _        || _        y r   )	r   r   r    r!   r?   rV  rj   rW  rk   )r"   rV  rj   rW  rk   r%   s        r   r   zIndexNode.__init__  s>    8H8HI 
 r   )rV  r   rj   r  rW  r   rk   r  r0  r/   s   @r   rU  rU    s&     O! !r   rU  c                  ^     e Zd ZU ded<   ded<   ded<   ded<   ded	<   ded
<   d fdZ xZS )
MethodNoder   source_objectr  rt   r   r  lparr  r-  rparc                    t         |   |j                  |j                  |j                  |j                  |j                  dz          || _        || _        || _        || _        || _	        || _
        y r/  )r   r   r    r!   r?   r[  rt   r  r\  r-  r]  )r"   r[  rt   r  r\  r-  r]  r%   s          r   r   zMethodNode.__init__  sc    djj$--DKKcgcmcmnocop*				r   )r[  r   rt   r  r  r   r\  r  r-  r  r]  r  r0  r/   s   @r   rZ  rZ    s1     	O
L


 r   rZ  c                  J     e Zd ZU ded<   ded<   ded<   ded<   d	 fdZ xZS )
FunctionNoder   	func_namer  r\  r  r-  r]  c                    t         |   |j                  |j                  |j                  |j
                  |j                  dz          || _        || _        || _	        || _
        y r/  )r   r   r    r!   r?   r   r   ra  r\  r-  r]  )r"   ra  r\  r-  r]  r%   s        r   r   zFunctionNode.__init__  sn    ))9??I<N<N[_[j[jvz  wE  wE  FG  wG  	H"			r   )ra  r   r\  r  r-  r  r]  r  r0  r/   s   @r   r`  r`    s'     


 r   r`  c                  @     e Zd ZU ded<   ded<   ded<   d fdZ xZS )	AssignmentNoder   var_namer  r8  r   rC   c                    t         |   |j                  |j                  |j                         || _        || _        || _        y r   )r   r   r    r!   r?   re  r8  rC   )r"   re  r8  rC   r%   s       r   r   zAssignmentNode.__init__&  s7    (..(:K:KL  
r   )re  r   r8  r  rC   r   r0  r/   s   @r   rd  rd    s      O r   rd  c                      e Zd Zy)PlusAssignmentNodeNr   r9   r   r   rh  rh  ,  r   r   rh  c                       e Zd ZU  ed      Zded<    ed      Zded<    ed      Zded<    ed      Zded	<   d
ed<   ded<    ed      Z	ded<   d fdZ
 xZS )ForeachClauseNodeFr   r  foreach_T.List[IdNode]varnamesr  r	  columnr   itemsrP  blockr[   c                    t         |   |j                  |j                  |j                         || _        || _        || _        || _        || _	        || _
        || _        y r   )r   r   r    r!   r?   rk  rm  r	  rn  ro  rp  r[   )	r"   rk  rm  r	  rn  ro  rp  r[   r%   s	           r   r   zForeachClauseNode.__init__:  sS    (..(:K:KL  

$r   )rk  r  rm  rl  r	  r  rn  r  ro  r   rp  rP  r[   r  )r*   r+   r,   r   rk  r-   rm  r	  rn  r[   r   r.   r/   s   @r   rj  rj  /  sf     !e,Hj,$%0Hn0!&E!2F2E*FJ*O".J
.% %r   rj  c                  @     e Zd ZU ded<   ded<   ded<   d fdZ xZS )	IfNoder  if_r   	conditionrP  rp  c                    t         |   |j                  |j                  |j                         || _        || _        || _        y r   )r   r   r    r!   r?   rt  ru  rp  )r"   linenodeif_noderu  rp  r%   s        r   r   zIfNode.__init__L  s7    (..(:K:KL"
r   )rw  r   rx  r  ru  r   rp  rP  r0  r/   s   @r   rs  rs  E  s      
O r   rs  c                  6     e Zd ZU ded<   ded<   d fdZ xZS )ElseNoder  else_rP  rp  c                    t         |   |j                  |j                  |j                         || _        || _        y r   )r   r   r    r!   r?   r{  rp  )r"   r{  rp  r%   s      r   r   zElseNode.__init__X  s.    u{{ENNC

r   )r{  r  rp  rP  r0  r/   s   @r   rz  rz  R  s      r   rz  c                  R     e Zd ZU  ed      Zded<   ded<   ded<   d
 fd	Z xZS )IfClauseNodeFr   zT.List[IfNode]ifszT.Union[EmptyNode, ElseNode]	elseblockr  rW   c                    t         |   |j                  |j                  |j                         g | _        t        |j                  |j                  |j                        | _        d | _        y r   )	r   r   r    r!   r?   r  r  r  rW   )r"   rw  r%   s     r   r   zIfClauseNode.__init__d  sN    (..(:K:KL"8??HNNHDUDUV
r   )rw  r   )r*   r+   r,   r   r  r-   r   r.   r/   s   @r   r~  r~  ]  s*      U+C+++ r   r~  c                  J     e Zd ZU ded<   ded<   ded<   ded<   d	 fdZ xZS )
TestCaseClauseNoder  r]   r   ru  rP  rp  r^   c                    t         |   |j                  |j                  |j                         || _        || _        || _        || _        y r   )	r   r   r    r!   r?   r]   ru  rp  r^   )r"   r]   ru  rp  r^   r%   s        r   r   zTestCaseClauseNode.__init__r  sA    ))9??I<N<NO "
&r   )r]   r  ru  r   rp  rP  r^   r  r0  r/   s   @r   r  r  j  s'     ' 'r   r  c                  T     e Zd ZU ded<   ded<   ded<   ded<   ded<   d	 fdZ xZS )
TernaryNoder   ru  r  r   	trueblockrn  
falseblockc                    t         |   |j                  |j                  |j                         || _        || _        || _        || _        || _	        y r   )
r   r   r    r!   r?   ru  r   r  rn  r  )r"   ru  r   r  rn  r  r%   s         r   r   zTernaryNode.__init__  sH    ))9??I<N<NO"("$r   )
ru  r   r   r  r  r   rn  r  r  r   r0  r/   s   @r   r  r  y  s-     % %r   r  c                  d     e Zd ZU  ed      Zded<   ded<    ed      Zded<   d	 fdZ xZS )
ParenthesizedNodeFr   r  r\  r   innerr]  c                    t         |   |j                  |j                  |j                  |j                  |j                  dz          || _        || _        || _        y r/  )r   r   r    r!   r?   r\  r  r]  )r"   r\  r  r]  r%   s       r   r   zParenthesizedNode.__init__  sM    djj%..T[[dhdndnopdpq	
	r   )r\  r  r  r   r]  r  )	r*   r+   r,   r   r\  r-   r]  r   r.   r/   s   @r   r  r    s2     %(D*(O%(D*( r   r  )r   r   r   r   r   r   rO   notinr   r   r   r   r   r   rO   r  )r   r   r   r   r   r   rO   znot inzT.Mapping[str, COMPARISONS]comparison_mapc                     e Z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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d+dZd,dZd-dZd.dZd/dZd0dZd1dZd2dZ d*dZ!d)d Z"y!)3Parserc           	         t        |      | _        | j                  j                  |      | _        t	        ddddddd       | _        | j
                  | _        g | _        | j                          d| _	        y )Neofr   r   r   r   F)
rL   r   r   streamr=   currentprevious
current_wsgetsym
in_ternary)r"   r   r?   s      r   r   zParser.__init__  s[    4[
jjnnX.#E2q!QE)+r   c                h     ||i |}| j                   D ]  }|j                  |        g | _         |S r   )r  r   )r"   	node_typer-  r  nodews_tokens         r   create_nodezParser.create_node  s>    $)&) 	.H##H-	.r   c           
        | j                   | _        	 t        | j                        | _         | j                   j                  dv rs| j
                  j                  | j                          | j                   j                  dk(  ry t        | j                        | _         | j                   j                  dv rry y # t        $ r t        dd| j                   j                  | j                   j                  | j                   j                  | j                   j                  d   z   | j                   j                  d   z
  dd       | _         Y y w xY w)N>   re   rg   r_   re   r  r   r   r   r  )r  r  nextr  r>   r  r   StopIterationr=   r@   r    r!   rB   r#  s    r   r  zParser.getsym  sC   
	r,DL,,""&FF&&t||4<<##u,#DKK0	 ,,""&FF  	r DLL,C,CT\\EXEXZ^ZfZfZlZloso{o{  pE  pE  FG  pH  [H  KO  KW  KW  K`  K`  ab  Kc  [c  ek  mq  rDL	rs   A0B9 2B9 9BE
Ec                `    | j                   j                  | j                  j                        S r   )r   r   r  r@   r#  s    r   r   zParser.getline  s!    zz!!$,,"9"9::r   c                X    | j                   j                  |k(  r| j                          yy)NTFr  r>   r  r"   ss     r   r   zParser.accept  s#    <<q KKMr   c                \    | j                   j                  }||v r| j                          |S yr   r  )r"   tidsr>   s      r   
accept_anyzParser.accept_any  s)    ll$;KKMJr   c                    | j                  |      ryt        d| d| j                  j                   d| j	                         | j                  j
                  | j                  j                        NTz
Expecting z got .)r   r   r  r>   r   r    r!   r  s     r   expectzParser.expect  s[    ;;q>z!E$,,2B2B1C1Et||~W[WcWcWjWjlplxlxl~l~r   c           	     X   | j                  |      ryt        d| d| j                  j                   d| j	                         | j                  j
                  | j                  j                  | j                  j	                  |j                        |j
                  |j                        r  )	r   r1   r  r>   r   r    r!   r   r@   )r"   r  block_starts      r   block_expectzParser.block_expect  s    ;;q>!Jqct||7G7G6H"JDLLN\`\h\h\o\oquq}q}  rD  rD  FJ  FP  FP  FX  FX  Yd  Yo  Yo  Fp  r}  rD  rD  FQ  FW  FW  X  	Xr   c                |    | j                         }	 | j                  d       |S # t        $ r}||_         d }~ww xY w)Nr  )	codeblockr  r   r   )r"   rp  es      r   parsezParser.parse  sB     	KK   	AE	s   % 	;6;c                "    | j                         S r   )e1r#  s    r   r  zParser.statement  s    wwyr   c                   | j                         }| j                  d      r| j                  t        | j                        }| j                         }t        |t              s0t        d| j                         |j                  |j                        t        |j                  t              sJ | j                  t        |||      S | j                  d      r| j                  t        | j                        }| j                         }t        |t              s0t        d| j                         |j                  |j                        t        |j                  t              sJ | j                  t        |||      S | j                  d      r| j                   r0t        d| j                         |j                  |j                        | j                  t        | j                        }d| _        | j                         }| j#                  d       | j                  t        | j                        }| j                         }d	| _        | j                  t$        |||||      S |S )
Nrs   z$Plusassignment target must be an id.r   z Assignment target must be an id.r   z)Nested ternary operators are not allowed.Tr}   F)e2r   r  r  r  r  rE   r   r   r   r    r!   rC   r&   rh  rd  r  r  r  )r"   r7  r8  rC   qm_noder  column_noder  s           r   r  z	Parser.e1  s   wwy;;|$''
DMMBHGGIEdF+$%KT\\^]a]h]hjnjtjtuudjj#...##$6hNN[["''
DMMBHGGIEdF+$%G%)\\^T[[$**N Ndjj#...##ND(EJJ[[($%P%)\\^T[[$**N N &&z4==AG"DO	IKK **:t}}EKJ#DO##Kw	;Xbccr   c                x   | j                         }| j                  d      r| j                  t        | j                        }t        |t              r0t        d| j                         |j                  |j                        | j                  t        ||| j                               }| j                  d      r|S )NrP   zInvalid or clause.)e3r   r  r  r  rE   r  r   r   r    r!   r<  r"   r7  r8  s      r   r  z	Parser.e2  s    wwykk$''
DMMBH$	*$%9%)\\^T[[$**N N##FD(DGGIFD kk$ r   c                x   | j                         }| j                  d      r| j                  t        | j                        }t        |t              r0t        d| j                         |j                  |j                        | j                  t        ||| j                               }| j                  d      r|S )NrQ   zInvalid and clause.)e4r   r  r  r  rE   r  r   r   r    r!   r>  r  s      r   r  z	Parser.e3&  s    wwykk% ''
DMMBH$	*$%:%)\\^T[[$**N N##GT8TWWYGD kk%  r   c           	        | j                         }t        j                         D ]_  \  }}| j                  |      s| j	                  t
        | j                        }| j	                  t        |||| j                               c S  | j                  d      r:| j                  j                         }| j                  }| j                  d      r| j                  }| j                  t        |      d  | _        t        |j                  |j                  |j                        }|D ]  }	|j                  |	        |j                   d   |j                   d   f|_        |xj"                  |j$                  j"                  |j"                  z   z  c_        | j	                  t
        |      }| j	                  t        d||| j                               S |S )NrR   rO   r   r   r  )e5r  ro  r   r  r  r  r@  r  copyr   r  r    r!   r?   r   rB   rC   r   )
r"   r7  nodenameoperator_typer8  ws	not_tokenin_token	temp_nodews
             r   r  z	Parser.e40  s   wwy'5';';'= 	b#Hm{{8$++JF''tXW[W^W^W`aa	b ;;u%%'BI{{4 =="&//#b'(";%hoox~~xGXGXY	 4A0034 '0&8&8&;X=N=Nq=Q%R	"9#8#8#>#>#OO++J	B''xQUQXQXQZ[[r   c                "    | j                         S r   )e5addsubr#  s    r   r  z	Parser.e5F  r*  r   c                    ddd}| j                         }	 | j                  t        |j                                     }|rK| j	                  t
        | j                        }| j	                  t        ||   ||| j                               }n	 |S y)Naddr   )ru   rv   )e5muldivr  tuplekeysr  r  r  rE  r"   op_mapr7  opr8  s        r   r  zParser.e5addsubI  s    
 }}v{{}!56B++JF''r
D(TXTaTaTcd r   c                "   dddd}| j                         }	 | j                  t        |j                                     }|rK| j	                  t
        | j                        }| j	                  t        ||   ||| j                               }n	 |S y)Nmodmuldiv)ry   rx   r{   )e6r  r  r  r  r  r  rE  r  s        r   r  zParser.e5muldivX  s    

 wwyv{{}!56B++JF''r
D(TXT[T[T]^ r   c                   | j                  d      rP| j                  t        | j                        }| j                  t        | j
                  || j                               S | j                  d      rP| j                  t        | j                        }| j                  t        | j
                  || j                               S | j                         S )NrR   rv   )r   r  r  r  rL  r  e7rN  )r"   r8  s     r   r  z	Parser.e6h  s    ;;u''
DMMBH##GT\\8TWWYOO;;v''
DMMBH##Jh	RRwwyr   c                   | j                         }| j                  }| j                  d      r| j                  t        |      }| j                         }| j                  d|       | j                  t        | j                        }t        |t              s0t        d| j                         |j                  |j                        t        |j                  t              sJ | j                  t         ||||      }d}|rMd}| j                  d      rd}| j#                  |      }| j                  d      rd}| j%                  |      }|rM|S )Nrh   ri   z)Function call must be applied to plain idTFrt   rj   )e8r  r   r  r  r-  r  r  rE   r   r   r   r    r!   rC   r&   r`  method_call
index_call)r"   r7  r  r\  r-  r]  go_agains          r   r  z	Parser.e7q  s   wwyll;;x ##J<D99;Dh4##J>DdF+$%P%)\\^T[[$**N Ndjj#...##L$dDIDH{{5!''-{{:&t,  r   c                *   | j                   }| j                  d      re| j                  t        |      }| j	                         }| j                  d|       | j                  t        | j                        }t        |||      S | j                  d      rp| j                  t        |      }| j                         }| j                  d|       | j                  t        | j                        }| j                  t        |||      S | j                  d      rp| j                  t        |      }| j                         }	| j                  d|       | j                  t        | j                        }
| j                  t        ||	|
      S | j                         S )Nrh   ri   rj   rk   rl   rm   )r  r   r  r  r  r  r  r  r-  r,  
key_valuesr2  e9)r"   r  r\  r  r]  rj   r-  rk   rl   r  rm   s              r   r  z	Parser.e8  sC   ll;;x ##J<D Ah4##J>D$T1d33[[$''
K@H99;Dj+6''
DMMBH##IxxHH[[!$$Z=E*Jg{3$$Z?E##HeZGG779r   c                8   | j                   }| j                  d      rd|_        | j                  t        |      S | j                  d      rd|_        | j                  t        |      S | j                  d      r| j                  t
        |      S | j                  d      r| j                  t        |      S | j                  d      r| j                  t        |      S | j                  d      r| j                  t        |      S | j                  d	      r| j                  t        |      S | j                  d
      r| j                  t        |      S t        | j                   j                  | j                   j                  | j                   j                        S )NrU   TrX   Frb   rc   rp   ra   rf   r`   )r  r   rC   r  r   r   r   r   r   r   r   r  r    r!   r?   )r"   ts     r   r  z	Parser.e9  sC   LL;;vAG##K33;;wAG##K33;;t##FA..;;x ##J22;;x ##J22;;y!##$4a88;;)*##$7;;;;*+##$=qAA,,dll.@.@$,,BWBWXXr   c                   | j                         }| j                  t        | j                        }t	        |t
              s	| j                  d      r|j                  j                  | j                  t        | j                               |j                  || j                                | j                  d      s|S |j                  j                  | j                  t        | j                               n0t        d| j                         |j                  |j                         | j                         }t	        |t
              s	|S )Nr}   rq   z4Only key:value pairs are valid in dict construction.)r  r  r  r  rE   r  r   r
  r   r  r  r!  r	  r   r   r    r!   r"   r  as      r   r  zParser.key_values  s    NN\4<<8Q	*{{7#		  !1!1*dmm!LM$$Q(89{{7+H 0 0T]] KL$%[%)\\^QXXqwwH H A Q	* r   c                   | j                         }| j                  t        | j                        }t	        |t
              s| j                  d      rL|j                  j                  | j                  t        | j                               |j                  |       n
| j                  d      r|j                  j                  | j                  t        | j                               t	        |t              s0t        d| j                         |j                  |j                         |j#                  || j                                | j                  d      s|S |j                  j                  | j                  t        | j                               n|j                  |       |S | j                         }t	        |t
              s|S )Nrq   r}   z*Dictionary key must be a plain identifier.)r  r  r  r  rE   r  r   r	  r   r  r  r
  r   r   r   r    r!   r  r  s      r   r-  zParser.args  s<   NN\4<<8Q	*{{7# 0 0T]] KLW%		  !1!1*dmm!LM!!V,()U)-177L LAt~~/0{{7+H 0 0T]] KL A! Q	*" r   c           	     D   | j                  t        | j                        }| j                         }t	        |t
              st	        |t              r@t	        |t              r0t        d| j                         |j                  |j                        t        d| j                         | j                  j                  | j                  j                        t	        |j                  t              sJ | j                  d       | j                  t        | j                        }| j                         }| j                  t        | j                        }| j                  d       | j                  t         ||||||      }| j#                  d      r| j%                  |      S |S )Nz$meson does not support float numberszMethod name must be plain idrh   ri   rt   )r  r  r  r  rE   r   r   r   r   r    r!   r  rC   r&   r  r-  rZ  r   r  )r"   r[  rt   
methodnamer\  r-  r]  methods           r   r  zParser.method_call  sD   z4==9WWY
*f--4JPZ9[$%K%)\\^]5I5I=K^K^` ` !?!%1D1DdllFXFXZ Z***C000H
DMM:yy{
DLL9H!!*mS*dTXZ^_;;u##F++r   c                    | j                  t        | j                        }| j                         }| j	                  d       | j                  t        | j                        }| j                  t
        ||||      S )Nrk   )r  r  r  r  r  rU  )r"   r[  rj   index_statementrk   s        r   r  zParser.index_call  s`    ##J>..*J##J>	=(OU]^^r   c           
     \   | j                  t        | j                        }| j                  d       t	        | j                  j
                  t              sJ | j                  t        | j                        g}g }| j                  d      r|j                  | j                  t        | j                               | j                  d       t	        | j                  j
                  t              sJ |j                  | j                  t        | j                               | j                  d       | j                  t        | j                        }| j                         }| j                         }| j                  t        | j                        }| j                  t        |||||||      S )Nrb   rq   r}   )r  r  r  r  rE   rC   r&   r   r   r   r  r  r  rj  )r"   rk  rm  r	  rn  ro  rp  r[   s           r   foreachblockzParser.foreachblock  s;   ##J>D$----s333$$VT]];<;;wMM$**:t}}EFKKdmm113777OOD,,VT]]CDG!!*dmm<  %%j$,,?
 18XvvW\^ceoppr   c           	        | j                  t        | j                        }| j                         }| j                  t        |      }| j                  d       | j                         }|j                  j                  | j                  t        ||||             | j                  |       | j                         |_        | j                  t        | j                        |_        |S Nre   )r  r  r  r  r~  r  r  r  r   rs  elseifblockr  r  rW   )r"   rx  ru  clauserp  s        r   ifblockzParser.ifblock  s    "":t}}=NN$	!!,	:E 

$**667IuUV >>+''
DLLAr   c           	     R   | j                  d      r| j                  t        | j                        }| j	                         }| j                  d       | j                         }|j                  j                  | j                  t        ||||             | j                  d      ry y )NrS   re   )
r   r  r  r  r  r  r  r  r   rs  )r"   r  elif_r  bs        r   r  zParser.elseifblock  s{    kk&!$$Z?E AKK AJJd..vq%AFG kk&!r   c                P   | j                  d      rM| j                  t        | j                        }| j	                  d       | j                         }t        ||      S t        | j                  j                  | j                  j                  | j                  j                        S )NrT   re   )r   r  r  r  r  r  rz  r  r  r    r!   r?   )r"   r{  rp  s      r   r  zParser.elseblock!  sv    ;;v$$Z?EKKNN$EE5)),,dll.@.@$,,BWBWXXr   c                    | j                  t        | j                        }| j                         }| j	                  d       | j                         }t        | j                        }| j                  t        ||||      S r  )r  r  r  r  r  r  r  r  )r"   r]   ru  rp  r^   s        r   testcaseblockzParser.testcaseblock)  se    ##J>NN$	E  . 2HiP[\\r   c                   | j                   }| j                   dk(  rIt        | j                   j                  | j                   j                  | j                   j                        S | j                  d      r$| j                         }| j                  d|       |S | j                  d      r$| j                         }| j                  d|       |S | j                  d      r | j                  t        | j                         S | j                  d      r | j                  t        | j                         S | j                  j                  r5| j                  d      r$| j                         }| j                  d	|       |S | j                         S )
Nre   rN   rW   rY   r[   rZ   rV   r]   r^   )r  r  r    r!   r?   r   r  r  r  r  r   r  r   r   r  r  )r"   r  r  forblockrp  s        r   r$   zParser.line1  s-   ll<<5 T\\00$,,2D2DdllF[F[\\;;tllnGg{3N;;y!((*HlK8O;;z"##L$,,??;;w##It||<<::""t{{:'>&&(Em[9L~~r   c                   | j                  t        | j                        }d}	 |rx| j                  D ]  }|j	                  |        g | _        | j                         }t        |t              s|j                  j                  |       | j                  d      }|rx| j                  D ]  }|j	                  |        g | _        |S # t        $ r}||_         d }~ww xY w)NTre   )r  rP  r  r  r   r$   rE   r  r   r   r   r   r   )r"   rp  condr  r   r  s         r   r  zParser.codeblockG  s      =	 $ 7H,,X67"$))+!'95KK&&w/{{5) "  	/H$$X.	/  	AE	s   A9C	 		CCCN)r   r&   r?   r&   )r  zT.Type[BaseNodeT]r-  T.Anyr  r   r(   r   )r(   r)   )r(   r&   )r  r&   r(   rJ   )r  zT.Tuple[str, ...]r(   r&   )r  r&   r  r=   r(   rJ   )r(   rP  )r(   r   )r(   r  )r[  r   r(   rZ  )r[  r   r(   rU  )r(   rj  )r(   r~  )r  r~  r(   r)   )r(   zT.Union[ElseNode, EmptyNode])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  r  r  r-  r  r  r  r  r  r  r  r$   r  r9   r   r   r  r    s     r;@
X
@, 0.Y,".(_q(
HY] ,r   r  )r   zT.Match[str]r(   r&   )N
__future__r   dataclassesr   r   r   r   r   typingTmesonlibr   r   r   TYPE_CHECKINGtyping_extensionsr	   r   r
   TypeVarr   r   UNICODEVERBOSEr   r   r   r1   r'   r&   rJ   r:   Genericr=   rL   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r,  r2  r  r6  r<  r>  r@  rE  rI  rL  rN  rP  rU  rZ  r`  rd  rh  rj  rs  rz  r~  r  r  r  rA  r  r-   r  r9   r   r   <module>r     s   # ( 	  	  $ ??)		+Z8I 'BJJ (	 **rzz
!# D^ . B 		/3T:
eAIIm$   xU xUt !+ !+ !+H t
"X 
" 
" t'QYY}-x ' '	.& 		^C  	 t'$ ' '	^C( 	 t% % %	z 	 t!. ! !	 3 		> 		 		$ 	 t.8 . .` t
! 
! 
! t
x 
 
	 	 t
 
 
	 		  	 t'   t#' # # t  	 		" 	 t/H / /$ t! ! ! t  $ t8   t
X 
 
	 	 t% % %* t
X 
 
 tx   t
8 
 
 t' ' ' t%( % %" t
 
 
 ??IJK 




	/+ 	4k kr   