o
    ld܄                  	   @  s@  U d dl m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 ejr8d dlmZ ddlmZ ed	ejejB ZdgddZG dd de
ZG dd deZedeeeZeddG dd deje ZG dd dZ eddG dd dZ!G dd deje e!Z"G dd  d e"e Z#G d!d" d"e"e Z$G d#d$ d$e"e Z%G d%d& d&e"e Z&G d'd( d(e"e Z'G d)d* d*e'Z(G d+d, d,e"Z)G d-d. d.e"Z*G d/d0 d0e!Z+G d1d2 d2e!Z,G d3d4 d4e!Z-G d5d6 d6e!Z.G d7d8 d8e!Z/G d9d: d:e!Z0G d;d< d<e!Z1G d=d> d>e!Z2G d?d@ d@e!Z3G dAdB dBe!Z4G dCdD dDe!Z5G dEdF dFe!Z6G dGdH dHe!Z7G dIdJ dJe!Z8G dKdL dLe!Z9G dMdN dNe!Z:G dOdP dPe!Z;G dQdR dRe!Z<G dSdT dTe!Z=G dUdV dVe!Z>G dWdX dXe!Z?ejredY Z@dZd[d\d]d^d_d`dadbZAdceBdd< G dedf dfZCdS )h    )annotations)	dataclassN   )MesonException)mlog)Literal)
AstVisitora,  
    ( \\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
    )matchT.Match[str]returnstrc                 C  s   t | d dS )Nr   unicode_escape)codecsdecodegroupencode)r	    r   qhome/ych/rk3568/buildroot/output/rockchip_rk3568_recovery/host/lib/python3.10/site-packages/mesonbuild/mparser.pydecode_match(   s   r   c                      s,   e Zd ZU dZded< d fddZ  ZS )ParseExceptionNzT.Optional[CodeBlockNode]asttextr   linelinenointcolnor   Nonec                   s&   t  t||| || _|| _d S N)super__init__r   	code_liner   r   )selfr   r   r   r   	__class__r   r   r   /   s   
zParseException.__init__)
r   r   r   r   r   r   r   r   r   r   )__name__
__module____qualname__r   __annotations__r   __classcell__r   r   r"   r   r   +   s   
 r   c                   @  s   e Zd ZdddZdS )BlockParseExceptionr   r   r   r   r   r   
start_linestart_linenostart_colnor   r   c                 C  sv   ||krt | d||dd| d|| d   nt | d||dd|  |||dd|  f  || _|| _d S )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   r*   r+   r,   r   r   r   r   6   s
   0.	
zBlockParseException.__init__N)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)   5       r)   TV_TokenTypesF)eqc                   @  sP   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dZdS )Tokenr   tidfilenamer   
line_startr   r   zT.Tuple[int, int]bytespanr1   valueotherobjectr   boolc                 C  s.   t |tr
| j|kS t |tr| j|jkS tS r   )
isinstancer   r4   r3   NotImplemented)r!   r9   r   r   r   __eq__b   s
   


zToken.__eq__N)r9   r:   r   r;   )r$   r%   r&   r'   r>   r   r   r   r   r3   X   s   
 r3   c                   @  s*   e Zd ZdddZddd	ZdddZdS )Lexercoder   c                 C  s(  || _ h d| _dh| _dtjv | _| jr| jddh g dtdfdtd	tj	fd
tdfdtdfdtdfdtdfdtdfdtdtj	fdtdfdtdfdtdfdtdfdtdfd td!fd"td#fd$td%fd&td'fd(td)fd*td+fd,td-fd.td/fd0td1fd2td3fd4td5fd6td7fd8td9fd:td;fd<td=fd>td?fd@tdAfdBtdCfdDtdEfdFtdGfdHtdIf| _
d S )JN>   endifelsecontinuetruefalseforeach
endforeachinnotelifandorifbreakr   ZMESON_RUNNING_IN_PROJECT_TESTStestcaseendtestcaseignorez[ \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\\\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\?)r@   keywordsfuture_keywordsosenvironin_unit_testupdaterecompileMtoken_specification)r!   r@   r   r   r   r   j   s   
	
 !"#
zLexer.__init__r6   r   r   c                 C  s   | j || j d| S )N
)r@   find)r!   r6   r   r   r   getline   s   zLexer.getliner5   T.Generator[Token, None, None]c              	   c  s   d}d}d}d}d}d}d}|t | jk r{d}	d }
| jD ]E\}}|| j|}|rd|}|}| | }d}	|}| }|}||f}| }|dv rP n|dkrY|d7 }n|dkrb|d8 }n|dkrk|d7 }n|d	krt|d8 }n|d
kr}|d7 }n|dkr|d8 }n|dkrtd| ||||dv r|	ddkrd}t
jt
|| ||t|||d ||dkrdndd }
tt|
}
n|dv r|dkr|dd }
d}n|dd }
|d}t |dkr|t |d 7 }| t |d  }n[|dkrt|dd}
nO|dkr|d7 }|} nP|dkr2|d7 }|}|dks/|dks/|dkr1 n4n%|dkrW|| jv r@|}n|| jv rUt
jd | d!t|||d |}
t|||||||
V   nq|	srtd"| ||||t | jk sd S d S )#Nr   r   FT>   rY   rQ   rZ   r[   r\   r]   r^   r_   r`   z3Double quotes are not supported. Use single quotes.>   rb   rS   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.locationrS      >   rR   rX   rX      rb      rU   )baserV   rW   rT   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    BaseNodeESCAPE_SEQUENCE_SINGLE_REsubr   splitr   r   r   r3   )r!   r5   r6   r   locZ	par_countZbracket_countZ
curl_countcolZmatchedr8   r4   regmocurlineZcurline_startZ
span_startZspan_endr7   Z
match_textmsglinesr   r   r   lex   s   





&





Gz	Lexer.lexN)r@   r   )r6   r   r   r   )r5   r   r   r   )r$   r%   r&   r   r   r   r   r   r   r   r?   i   s    

/r?   c                   @  sR   e Zd ZU ded< ded< ded< dZded< dZded	< dddZdddZdS )r   r   r   r   r   r5   NzT.Optional[int]
end_lineno	end_colnor   r   c                 C  s:   | j d u r	| j| _ | jd u r| j| _d| _d| _d| _d S )Nr    )r   r   r   r   levelZast_idZcondition_levelr!   r   r   r   __post_init__   s   


zBaseNode.__post_init__visitor'AstVisitor'c                 C  s@   d t| j}t||rt||}t|r||  d S d S d S )Nzvisit_{})r/   typer$   hasattrgetattrcallable)r!   r   fnamefuncr   r   r   accept  s   

zBaseNode.acceptr   r   )r   r   r   r   )r$   r%   r&   r'   r   r   r   r   r   r   r   r   r      s   
 
r   c                         e Zd Zd fddZ  ZS )ElementaryNodetokenToken[TV_TokenTypes]c                   s*   t  |j|j|j |j| _|j| _d S r   )r   r   r   r   r5   r8   r7   r!   r   r"   r   r   r     s   zElementaryNode.__init__r   r   r$   r%   r&   r   r(   r   r   r"   r   r         r   c                      r   )BooleanNoder   Token[bool]c                       t  | t| jtsJ d S r   )r   r   r<   r8   r;   r   r"   r   r   r        zBooleanNode.__init__)r   r   r   r   r   r"   r   r     r   r   c                      (   e Zd Zd	 fddZd
ddZ  ZS )IdNoder   
Token[str]c                   r   r   r   r   r<   r8   r   r   r"   r   r   r     r   zIdNode.__init__r   r   c                 C     d| j | j| jf S )NzId node: '%s' (%d, %d).r8   r   r   r   r   r   r   __str__     zIdNode.__str__r   r   r   r   r$   r%   r&   r   r   r(   r   r   r"   r   r         r   c                      r   )
NumberNoder   
Token[int]c                   r   r   )r   r   r<   r8   r   r   r"   r   r   r   !  r   zNumberNode.__init__)r   r   r   r   r   r"   r   r      r   r   c                      r   )
StringNoder   r   c                   r   r   r   r   r"   r   r   r   &  r   zStringNode.__init__r   r   c                 C  r   )NzString node: '%s' (%d, %d).r   r   r   r   r   r   *  r   zStringNode.__str__r   r   r   r   r   r"   r   r   %  r   r   c                      r   )FormatStringNoder   r   c                   r   r   r   r   r"   r   r   r   .  r   zFormatStringNode.__init__r   r   c                 C     d| j  d| j d| j dS )NzFormat string node: '' (, ).r   r   r   r   r   r   2     zFormatStringNode.__str__r   r   r   r   r   r"   r   r   -  r   r   c                   @  s   e Zd ZdddZdS )MultilineFormatStringNoder   r   c                 C  r   )NzMultiline Format string node: 'r   r   r   r   r   r   r   r   r   6  r   z!MultilineFormatStringNode.__str__Nr   )r$   r%   r&   r   r   r   r   r   r   5  r0   r   c                   @     e Zd ZdS )ContinueNodeNr$   r%   r&   r   r   r   r   r   9      r   c                   @  r   )	BreakNodeNr   r   r   r   r   r   <  r   r   c                      sn   e Zd Zd fddZdd	d
ZdddZd ddZd!ddZd"ddZd"ddZ	d#ddZ
d"ddZ  ZS )$ArgumentNoder   r   c                   s2   t  |j|j|j g | _g | _i | _d| _d S )NF)	r   r   r   r   r5   	argumentscommaskwargsorder_errorr   r"   r   r   r   @  s
   
zArgumentNode.__init__	statementr   r   r   c                 C  s2   |   dkr	d| _t|ts|g| j | _d S d S Nr   T
num_kwargsr   r<   	EmptyNoder   r!   r   r   r   r   prependG  s
   
zArgumentNode.prependc                 C  s4   |   dkr	d| _t|ts|  j|g7  _d S d S r   r   r   r   r   r   appendM  s
   
zArgumentNode.appendnamer   r8   c                   sH   t  fdd| jD rtjd j d| d td || j < d S )Nc                 3  s&    | ]}t |to j|jkV  qd S r   )r<   r   r8   ).0xr   r   r   	<genexpr>T  s   $ z)ArgumentNode.set_kwarg.<locals>.<genexpr>zKeyword argument "z" defined multiple times.r   z/This will be an error in future Meson releases.)anyr   r   r   r8   r!   r   r8   r   r   r   	set_kwargS  s   
zArgumentNode.set_kwargc                 C  s   || j |< d S r   )r   r   r   r   r   set_kwarg_no_checkY  s   zArgumentNode.set_kwarg_no_checkr   c                 C  
   t | jS r   )r   r   r   r   r   r   num_args\     
zArgumentNode.num_argsc                 C  r   r   )r   r   r   r   r   r   r   _  r   zArgumentNode.num_kwargsr;   c                 C  s   | j S r   )r   r   r   r   r   incorrect_orderb  s   zArgumentNode.incorrect_orderc                 C     |   S r   )r   r   r   r   r   __len__e     zArgumentNode.__len__r   )r   r   r   r   )r   r   r8   r   r   r   )r   r   r8   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   ?  s    






r   c                         e Zd Zd
 fdd	Z  ZS )	ArrayNodeargsr   r   r   r   r   r   c                   "   t  j|||j||d || _d S N)r   r   r   r   r5   r   r!   r   r   r   r   r   r"   r   r   r   i     
zArrayNode.__init__
r   r   r   r   r   r   r   r   r   r   r   r   r   r"   r   r   h  r   r   c                      r   )DictNoder   r   r   r   r   r   r   c                   r   r   r   r  r"   r   r   r   n  r  zDictNode.__init__r  r   r   r   r"   r   r  m  r   r  c                         e Zd Zd fddZ  ZS )	r   r   r   r   r5   r   c                   s   t  ||| d | _d S r   )r   r   r8   )r!   r   r   r5   r"   r   r   r   s  s   
zEmptyNode.__init__)r   r   r   r   r5   r   r   r   r   r"   r   r   r  r   r   c                         e Zd Zd fddZ  ZS )OrNodeleftr   rightc                   &   t  |j|j|j || _|| _d S r   r   r   r   r   r5   r  r	  r!   r  r	  r"   r   r   r   x     
zOrNode.__init__r  r   r	  r   r   r   r   r"   r   r  w  r   r  c                      r  )AndNoder  r   r	  c                   r
  r   r  r  r"   r   r   r   ~  r  zAndNode.__init__r  r   r   r   r"   r   r  }  r   r  c                      r  )	ComparisonNodectypeCOMPARISONSr  r   r	  c                   ,   t  |j|j|j || _|| _|| _d S r   )r   r   r   r   r5   r  r	  r  )r!   r  r  r	  r"   r   r   r        
zComparisonNode.__init__)r  r  r  r   r	  r   r   r   r   r"   r   r    r   r  c                      r  )	ArithmeticNode	operationr   r  r   r	  c                   r  r   )r   r   r   r   r5   r  r	  r  )r!   r  r  r	  r"   r   r   r     r  zArithmeticNode.__init__)r  r   r  r   r	  r   r   r   r   r"   r   r    r   r  c                         e Zd Zd fddZ  ZS )NotNoder   r   r8   r   c                       t  |j|j|j || _d S r   r   r   r   r   r5   r8   )r!   r   r8   r"   r   r   r        
zNotNode.__init__)r   r   r8   r   r   r   r   r"   r   r    r   r  c                      r   )CodeBlockNoder   r   c                   s    t  |j|j|j g | _d S r   )r   r   r   r   r5   r   r   r"   r   r   r     r  zCodeBlockNode.__init__r   r   r   r   r"   r   r    r   r  c                      r  )	IndexNodeiobjectr   indexc                   r
  r   )r   r   r   r   r5   r  r  )r!   r  r  r"   r   r   r     r  zIndexNode.__init__)r  r   r  r   r   r   r   r"   r   r    r   r  c                         e Zd Zd fddZ  ZS )
MethodNoder5   r   r   r   r   source_objectr   r   r   r   c                   s6   t  ||| || _|| _t| jtsJ || _d S r   )r   r   r"  r   r<   r   r   )r!   r5   r   r   r"  r   r   r"   r   r   r     s
   
zMethodNode.__init__)r5   r   r   r   r   r   r"  r   r   r   r   r   r   r   r   r"   r   r!    r   r!  c                      r   )FunctionNoder5   r   r   r   r   r   r   	func_namer   r   c                   s4   t  j|||||d || _t|tsJ || _d S r   )r   r   r$  r<   r   r   )r!   r5   r   r   r   r   r$  r   r"   r   r   r     s   
zFunctionNode.__init__)r5   r   r   r   r   r   r   r   r   r   r$  r   r   r   r   r   r   r"   r   r#    r   r#  c                         e Zd Zd fd	d
Z  ZS )AssignmentNoder5   r   r   r   r   var_namer8   r   c                   .   t  ||| || _t|tsJ || _d S r   r   r   r'  r<   r   r8   r!   r5   r   r   r'  r8   r"   r   r   r        
zAssignmentNode.__init__
r5   r   r   r   r   r   r'  r   r8   r   r   r   r   r"   r   r&    r   r&  c                      r%  )PlusAssignmentNoder5   r   r   r   r   r'  r8   r   c                   r(  r   r)  r*  r"   r   r   r     r+  zPlusAssignmentNode.__init__r,  r   r   r   r"   r   r-    r   r-  c                      r%  )ForeachClauseNoder   r3   varnamesT.List[str]itemsr   blockr  c                   s,   t  |j|j|j || _|| _|| _d S r   )r   r   r   r   r5   r/  r1  r2  )r!   r   r/  r1  r2  r"   r   r   r     r  zForeachClauseNode.__init__)r   r3   r/  r0  r1  r   r2  r  r   r   r   r"   r   r.    r   r.  c                      r  )	IfNodelinenoder   	conditionr2  r  c                   s&   t  |j|j|j || _|| _d S r   r   r   r   r   r5   r5  r2  )r!   r4  r5  r2  r"   r   r   r     r  zIfNode.__init__)r4  r   r5  r   r2  r  r   r   r   r"   r   r3    r   r3  c                      r   )IfClauseNoder4  r   c                   s&   t  |j|j|j g | _d | _d S r   )r   r   r   r   r5   ifs	elseblock)r!   r4  r"   r   r   r     r  zIfClauseNode.__init__)r4  r   r   r   r   r"   r   r7    r   r7  c                      r  )TestCaseClauseNoder5  r   r2  r  c                   r
  r   r6  r!   r5  r2  r"   r   r   r     r  zTestCaseClauseNode.__init__)r5  r   r2  r  r   r   r   r"   r   r:    r   r:  c                      r  )
UMinusNodecurrent_locationr3   r8   r   c                   r  r   r  )r!   r=  r8   r"   r   r   r     r  zUMinusNode.__init__)r=  r3   r8   r   r   r   r   r"   r   r<    r   r<  c                      r  )TernaryNoder5  r   	trueblock
falseblockc                   s,   t  |j|j|j || _|| _|| _d S r   )r   r   r   r   r5   r5  r?  r@  )r!   r5  r?  r@  r"   r   r   r     r  zTernaryNode.__init__)r5  r   r?  r   r@  r   r   r   r   r"   r   r>    r   r>  )rr   rt   rz   rx   r|   r~   rH   notinrr   rt   rz   rx   r~   r|   rH   rA  )rq   rs   ry   rw   r}   r{   rH   znot inzT.Mapping[str, COMPARISONS]comparison_mapc                   @  sB  e Zd ZdVddZdWdd	ZdXd
dZdYddZdZddZdYddZd[ddZ	d\ddZ
d]ddZd]d d!Zd]d"d#Zd]d$d%Zd]d&d'Zd]d(d)Zd]d*d+Zd]d,d-Zd]d.d/Zd]d0d1Zd]d2d3Zd]d4d5Zd^d7d8Zd^d9d:Zd_d=d>Zd`d@dAZdadCdDZdbdFdGZdcdIdJZdddLdMZdedOdPZd]dQdRZ d\dSdTZ!dUS )fParserr@   r   r5   c                 C  s@   t || _| j|| _tddddddd | _|   d| _d S )Neofr   r   r   r   F)r?   r   r   streamr3   currentgetsym
in_ternary)r!   r@   r5   r   r   r   r     s
   

zParser.__init__r   r   c                 C  sb   z	t | j| _W d S  ty0   tdd| jj| jj| jj| jjd  | jjd  dd | _Y d S w )NrD  r   r   r   rE  )	nextrF  rG  StopIterationr3   r6   r   r   r7   r   r   r   r   rH    s
   @zParser.getsymc                 C  s   | j | jjS r   )r   r   rG  r6   r   r   r   r   r     s   zParser.getlinesr;   c                 C  s   | j j|kr|   dS dS )NTFrG  r4   rH  r!   rL  r   r   r   r     s   zParser.accepttidsT.Tuple[str, ...]c                 C  s    | j j}||v r|   |S dS )Nr   rM  )r!   rO  r4   r   r   r   
accept_any  s
   zParser.accept_anyc                 C  s:   |  |rdS td| d| jj d|  | jj| jjNTz
Expecting z got .)r   r   rG  r4   r   r   r   rN  r   r   r   expect  s   
,zParser.expectblock_startr3   c                 C  sN   |  |rdS td| d| jj d|  | jj| jj| j|j|j|jrR  )	r   r)   rG  r4   r   r   r   r   r6   )r!   rL  rU  r   r   r   block_expect#  s   
@zParser.block_expectr  c              
   C  s:   |   }z| d W |S  ty } z||_ d }~ww )NrD  )	codeblockrT  r   r   )r!   r2  er   r   r   parse(  s   zParser.parser   c                 C  r   r   )e1r   r   r   r   r   1  r   zParser.statementc                 C  s  |   }| dr1|  }t|tstd|  |j|jt|j	t
s%J t|j|j|j|j	|S | dr^|  }t|tsJtd|  |j|jt|j	t
sRJ t|j|j|j|j	|S | dr| jrqtd|  |j|jd| _|  }| d |  }d	| _t|||S |S )
Nre   z$Plusassignment target must be an id.ru   z Assignment target must be an id.r   z)Nested ternary operators are not allowed.Tro   F)e2r   rZ  r<   r   r   r   r   r   r8   r   r-  r5   r&  rI  rT  r>  )r!   r  r8   r?  r@  r   r   r   rZ  4  s6   





z	Parser.e1c                 C  N   |   }| dr%t|trtd|  |j|jt||   }| ds	|S )NrL   zInvalid or clause.)	e3r   r<   r   r   r   r   r   r  r!   r  r   r   r   r[  O     


z	Parser.e2c                 C  r\  )NrK   zInvalid and clause.)	e4r   r<   r   r   r   r   r   r  r^  r   r   r   r]  X  r_  z	Parser.e3c                 C  s`   |   }t D ]\}}| |rt|||     S q| dr.| dr.td||   S |S )NrI   rH   rA  )e5rB  r1  r   r  )r!   r  nodenameZoperator_typer   r   r   r`  a  s   
z	Parser.e4c                 C  r   r   )e5addsubr   r   r   r   ra  j  r   z	Parser.e5c                 C  sH   ddd}|   }	 | t| }|r t|| ||   }n	 |S q
)Naddr   )rg   rh   )e5muldivrQ  tuplekeysr  r!   Zop_mapr  opr   r   r   rc  m  s   zParser.e5addsubc                 C  sJ   dddd}|   }	 | t| }|r!t|| ||   }n	 |S q)NmodmulZdiv)rk   rj   rm   )e6rQ  rf  rg  r  rh  r   r   r   re  {  s   zParser.e5muldivc                 C  s<   |  drt| j|  S |  drt| j|  S |  S )NrI   rh   )r   r  rG  e7r<  r   r   r   r   rl    s
   

z	Parser.e6c                 C  s   |   }| j}| dr@|  }| d| t|ts&td|  |j	|j
t|jts.J t|j|j	|j
| jj	| jj
|j|}d}|r`d}| drRd}| |}| dr^d}| |}|sD|S )NrZ   r[   z)Function call must be applied to plain idTFrf   r\   )e8rG  r   r   rV  r<   r   r   r   r   r   r8   r   r#  r5   method_call
index_call)r!   r  rU  r   Zgo_againr   r   r   rm    s,   

$



z	Parser.e7c                 C  s   | j }| dr|  }| d| |S | dr1|  }| d| t||j|j| j j| j jS | drN|  }| d| t	||j|j| j j| j jS | 
 S )NrZ   r[   r\   r]   r^   r_   )rG  r   r   rV  r   r   r   r   
key_valuesr  e9)r!   rU  rX  r   rq  r   r   r   rn    s   


z	Parser.e8c                 C  s   | j }| drd|_t|S | drd|_t|S | dr$t|S | dr-t|S | dr6t|S | dr?t|S | d	rHt|S t	| j j
| j j| j jS )
NrD   TrE   FrT   rU   rb   rS   rR   )rG  r   r8   r   r   r   r   r   r   r   r   r   r5   )r!   tr   r   r   rr    s$   






z	Parser.e9r   c                 C  s   |   }t| j}t|ts@| dr,|||    | j}| ds%|S |j| nt	d| 
 |j|j|   }t|tr|S )Nro   rc   z4Only key:value pairs are valid in dict construction.)r   r   rG  r<   r   r   r   r   r   r   r   r   r   r!   rL  aZ	potentialr   r   r   rq    s   




zParser.key_valuesc                 C  s   |   }t| j}t|ts`| j}| dr"|j| || n5| drPt|ts7t	d| 
 |j|j|||    | j}| dsI|S |j| n|| |S |   }t|tr|S )Nrc   ro   z*Dictionary key must be a plain identifier.)r   r   rG  r<   r   r   r   r   r   r   r   r   r   r   rt  r   r   r   r     s,   







zParser.argsr"  r!  c                 C  s   |   }t|tstd|  | jj| jjt|jt	sJ | 
d |  }| 
d t|j|j|j||j|}| drC| |S |S )NzMethod name must be plain idrZ   r[   rf   )rr  r<   r   r   r   rG  r   r   r8   r   rT  r   r!  r5   r   ro  )r!   r"  Z
methodnamer   methodr   r   r   ro    s   




zParser.method_callr  c                 C  s   |   }| d t||S )Nr]   )r   rT  r  )r!   r"  Zindex_statementr   r   r   rp    s   

zParser.index_callr.  c                 C  s   | j }| d t|jtsJ |}|jg}| dr1| j }| d t|jts+J ||j | d |  }|  }t	||||S )NrT   rc   ro   )
rG  rT  r<   r8   r   r   r   r   rW  r.  )r!   rs  Zvarnamer/  r1  r2  r   r   r   foreachblock  s   



zParser.foreachblockr7  c                 C  sN   |   }t|}| d |  }|jt||| | | |  |_|S NrW   )	r   r7  rT  rW  r8  r   r3  elseifblockr9  )r!   r5  clauser2  r   r   r   ifblock  s   


zParser.ifblockrz  c                 C  sJ   |  dr#|  }| d |  }|jt||| |  dsd S d S )NrJ   rW   )r   r   rT  rW  r8  r   r3  )r!   rz  rL  br   r   r   ry  $  s   

zParser.elseifblock!T.Union[CodeBlockNode, EmptyNode]c                 C  s4   |  dr| d |  S t| jj| jj| jjS )NrB   rW   )r   rT  rW  r   rG  r   r   r5   r   r   r   r   r9  +  s   

zParser.elseblockr:  c                 C  s$   |   }| d |  }t||S rx  )r   rT  rW  r:  r;  r   r   r   testcaseblock1  s   

zParser.testcaseblockc                 C  s   | j }| j dkrt| j j| j j| j jS | dr%|  }| d| |S | dr6|  }| d| |S | dr@t	| j S | drJt
| j S | jjr_| dr_|  }| d	| |S |  S )
NrW   rM   rA   rF   rG   rC   rN   rO   rP   )rG  r   r   r   r5   r   r{  rV  rw  r   r   r   r   r~  r   )r!   rU  r{  Zforblockr2  r   r   r   r   7  s(   






zParser.linec              
   C  sl   t | j}d}z|r#|  }t|ts|j| | d}|s
W |S W |S  ty5 } z||_	 d }~ww )NTrW   )
r  rG  r   r<   r   r   r   r   r   r   )r!   r2  condr   rX  r   r   r   rW  M  s"   


zParser.codeblockN)r@   r   r5   r   r   r   )rL  r   r   r;   )rO  rP  r   r   )rL  r   rU  r3   r   r;   )r   r  )r   r   )r   r   )r"  r   r   r!  )r"  r   r   r  )r   r.  )r   r7  )rz  r7  r   r   )r   r}  )r   r:  )"r$   r%   r&   r   rH  r   r   rQ  rT  rV  rY  r   rZ  r[  r]  r`  ra  rc  re  rl  rm  rn  rr  rq  r   ro  rp  rw  r{  ry  r9  r~  r   rW  r   r   r   r   rC     s@    








	


	
	
	
















rC  )r	   r
   r   r   )D
__future__r   dataclassesr   r   r   r   typingTZmesonlibr   r   r   TYPE_CHECKINGtyping_extensionsr   r   r   r   UNICODEVERBOSEr   r   r   r)   TypeVarr   r   r;   r1   Genericr3   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.  r3  r7  r:  r<  r>  r  rB  r'   rC  r   r   r   r   <module>   s   

	
! )