o
    Ni                    @  s  d dl mZ d dlZd dlZd dlmZmZmZmZ d dl	m
Z
 d dlmZ d dlmZmZmZmZmZmZmZmZmZmZ d dlmZmZmZmZmZmZ erpd dlm Z m!Z! d d	l"m#Z# d d
l$m%Z% d dl&m'Z' d dlm(Z( G dd deZ)G dd de)Z*G dd de)Z+G dd de)Z,G dd de)Z-G dd de-Z.G dd de.Z/G dd de.Z0G dd de.Z1G dd  d e.Z2G d!d" d"e.Z3G d#d$ d$e.Z4G d%d& d&e-Z5G d'd( d(e-Z6G d)d* d*e-Z7G d+d, d,e-Z8G d-d. d.e)Z9G d/d0 d0e9Z:G d1d2 d2e9Z;G d3d4 d4e9Z<G d5d6 d6e9Z=G d7d8 d8e9Z>G d9d: d:e9Z?G d;d< d<e-Z@G d=d> d>e-ZAG d?d@ d@e-ZBG dAdB dBe-ZCG dCdD dDe-ZDG dEdF dFe-ZEG dGdH dHe-ZFG dIdJ dJe-ZGG dKdL dLe-ZHG dMdN dNe-ZIG dOdP dPe-ZJG dQdR dRe-ZKG dSdT dTe-ZLG dUdV dVe-ZMG dWdX dXe)ZNG dYdZ dZe-ZOG d[d\ d\e-ZPG d]d^ d^e-ZQG d_d` d`e)ZRG dadb dbeRZSG dcdd ddeRZTG dedf dfeRZUG dgdh dhe)ZVG didj dje)ZWG dkdl dle)ZXG dmdn dneXZYG dodp dpeXZZG dqdr dreXZ[G dsdt dteXZ\G dudv dve)Z]G dwdx dxe)Z^G dydz dze)Z_G d{d| d|e)Z`G d}d~ d~e)ZaG dd de)ZbG dd de)ZcG dd de)ZdG dd dedZeG dd dedZfG dd dedZgG dd dedZhG dd dedZiG dd dedZjG dd dedZkG dd de-ZlG dd deZmG dd de)ZnG dd de)ZoG dd de)ZpG dd de)ZqG dd de)ZrG dd de)ZsG dd de)ZtG dd de)ZuG dd de)ZvG dd de)ZwG dd de)ZxG dd de)ZyG dd deyZzG dd deyZ{G dd deyZ|G dd deyZ}G dd de)Z~G dd de)ZG dd de)ZG dd de)ZG dd de)ZG dd de)ZG ddĄ de)ZdS )    )annotationsN)TYPE_CHECKINGAnyClassVarLiteral)nodes)addnodes)
_id_char_from_prefix_id_explicit_cast_id_fundamental_v1_id_fundamental_v2_id_operator_unary_v2_id_operator_v1_id_operator_v2
_id_prefix_id_shorthands_v1_max_id)ASTAttributeListASTBaseBaseASTBaseParenExprListNoOldIdError$UnsupportedMultiCharacterCharLiteralverify_description_mode)ElementTextElement)desc_signature)Symbol)BuildEnvironment)StringifyTransformc                   @     e Zd ZdS )ASTBaseN__name__
__module____qualname__ r%   r%   K/home/ubuntu/.local/lib/python3.10/site-packages/sphinx/domains/cpp/_ast.pyr    (       r    c                   @  st   e Z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d0ddZ	d0ddZ
d1d%d&Zed0d'd(Zd)S )2ASTIdentifiernamestrreturnNonec                 C  s8   t |trt|dkrtt|| _|d dk| _d S )Nr   @)
isinstancer*   lenAssertionErrorsysinternr)   is_anonymousselfr)   r%   r%   r&   __init__0   s   zASTIdentifier.__init__otherobjectboolc                 C     t |tstS | j|jkS N)r.   r(   NotImplementedr)   r5   r7   r%   r%   r&   __eq__8      
zASTIdentifier.__eq__intc                 C  
   t | jS r;   hashr)   r5   r%   r%   r&   __hash__=      
zASTIdentifier.__hash__	transformr   c                 C  
   || j S r;   r)   r5   rG   r%   r%   r&   
_stringify@   rF   zASTIdentifier._stringifyc                 C     | j S r;   r3   rD   r%   r%   r&   is_anonC      zASTIdentifier.is_anonversionc                 C  s   | j r	|dk r	t|dkr| jdkrdS | jS | jdkrdS | jd dkr'd	S | j r:d
t| jd | jdd  f S tt| j| j S )N      size_tsstdStr   ~D0zUt%d_%s)r3   r   r)   r/   r*   r5   rP   r%   r%   r&   get_idF   s   

 zASTIdentifier.get_idc                 C  rL   r;   rI   rD   r%   r%   r&   __str__[   rO   zASTIdentifier.__str__c                 C  s   | j rdS | jS )N[anonymous])r3   r)   rD   r%   r%   r&   get_display_string^      z ASTIdentifier.get_display_stringsignoder   modeenvr   prefixtemplateArgssymbolr   c                 C  sP  t | | jrtjdd}nt| j| j}|dkr<|| j | }tjddd|d d d}	| |	d< |	|7 }	||	7 }d S |d	krNt }
|
|7 }
||
7 }d S |d
krX||7 }d S |dkri|d d ||7 }d S |dkrt	|dksuJ t	|dks}J | jrJ d| j }tjddd|d d d}	| |	d< |	|7 }	||	7 }d S t
d| )Nr\   )textmarkType cpp
identifier	refdomainreftype	reftargetmodname	classnamecpp:parent_key
lastIsName
noneIsNameparamclassesz	sig-paramudlr   
operator""Unknown description mode: %s)r   r3   r   desc_sig_namer)   pending_xrefget_lookup_key	desc_nameappendr/   	Exception)r5   r_   r`   ra   rb   rc   rd   node
targetTextpnodenameNoder%   r%   r&   describe_signaturea   sJ   

z ASTIdentifier.describe_signaturec                 C  s   t jdtdd | jS )NzJ`ASTIdentifier.identifier` is deprecated, use `ASTIdentifier.name` instead   )
stacklevel)warningswarnDeprecationWarningr)   rD   r%   r%   r&   ri      s
   zASTIdentifier.identifierN)r)   r*   r+   r,   r7   r8   r+   r9   r+   r@   rG   r   r+   r*   r+   r9   rP   r@   r+   r*   r+   r*   r_   r   r`   r*   ra   r   rb   r*   rc   r*   rd   r   r+   r,   )r"   r#   r$   r6   r>   rE   rK   rN   rZ   r[   r]   r   propertyri   r%   r%   r%   r&   r(   /   s    








)r(   c                   @  sR   e Z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%S )-ASTNestedNameElement	identOrOpASTIdentifier | ASTOperatorrc   ASTTemplateArgs | Noner+   r,   c                 C     || _ || _d S r;   r   rc   )r5   r   rc   r%   r%   r&   r6         
zASTNestedNameElement.__init__r7   r8   r9   c                 C  &   t |tstS | j|jko| j|jkS r;   )r.   r   r<   r   rc   r=   r%   r%   r&   r>         
zASTNestedNameElement.__eq__r@   c                 C     t | j| jfS r;   )rC   r   rc   rD   r%   r%   r&   rE      r^   zASTNestedNameElement.__hash__c                 C     dS NFr%   rD   r%   r%   r&   is_operator      z ASTNestedNameElement.is_operatorrP   r*   c                 C  s&   | j |}| jr|| j|7 }|S r;   )r   rZ   rc   r5   rP   resr%   r%   r&   rZ      s   zASTNestedNameElement.get_idrG   r   c                 C  "   || j }| jr||| j7 }|S r;   r   r5   rG   r   r%   r%   r&   rK         
zASTNestedNameElement._stringifyr_   r   r`   ra   r   rb   rd   r   c                 C  sR   | j d ur
t| j nd}| j|||||| | j d ur'| j |d|| d S d S )Nrg   rf   )rc   r*   r   r   )r5   r_   r`   ra   rb   rd   tArgsr%   r%   r&   r      s
   
z'ASTNestedNameElement.describe_signatureN)r   r   rc   r   r+   r,   r   r   r   r   r   )r_   r   r`   r*   ra   r   rb   r*   rd   r   r+   r,   )
r"   r#   r$   r6   r>   rE   r   rZ   rK   r   r%   r%   r%   r&   r      s    





r   c                   @  sb   e Zd Zd*d	d
Zd+ddZd,ddZed-ddZd,ddZd.d/ddZ	d0ddZ
d1d'd(Zd)S )2ASTNestedNamenameslist[ASTNestedNameElement]	templates
list[bool]rootedr9   r+   r,   c                 C  s>   t |dksJ || _|| _t | jt | jksJ || _d S Nr   )r/   r   r   r   )r5   r   r   r   r%   r%   r&   r6      s
   
zASTNestedName.__init__r7   r8   c                 C  2   t |tstS | j|jko| j|jko| j|jkS r;   )r.   r   r<   r   r   r   r=   r%   r%   r&   r>         


zASTNestedName.__eq__r@   c                 C     t | j| j| jfS r;   )rC   r   r   r   rD   r%   r%   r&   rE         zASTNestedName.__hash__c                 C  s   | S r;   r%   rD   r%   r%   r&   r)         zASTNestedName.namec                 C  s,   d}| j D ]}| rq|jr|d7 }q|S Nr   rR   )r   r   rc   )r5   countnr%   r%   r&   num_templates   s   
zASTNestedName.num_templatesrg   rP   	modifiersr*   c                   s    dkrt | }|tv rt| S d fdd| jD S g }t| jdks,t|dkr1|d || | fdd| jD  t| jdksPt|dkrU|d d	|S )
NrR   ::c                 3      | ]}|  V  qd S r;   rZ   .0r   rP   r%   r&   	<genexpr>       z'ASTNestedName.get_id.<locals>.<genexpr>r   Nc                 3  r   r;   r   r   r   r%   r&   r      r   Erg   )r*   r   joinr   r/   r|   extend)r5   rP   r   ttr   r%   r   r&   rZ      s   



zASTNestedName.get_idrG   r   c                 C  sh   g }| j r
|d tt| jD ]}| j| }| j| r'|d||  q||| qd|S )Nrg   z	template r   )r   r|   ranger/   r   r   r   )r5   rG   r   ir   r%   r%   r&   rK      s   



zASTNestedName._stringifyr_   r   r`   ra   r   rd   r   c                 C  s  t | |dkr@| jrd}t|tt| jD ]%}|dkr$d}t|| j| }| j| r4d}t||	|||d| qd S |d	krk| jrMJ t
| t| jd
ksVJ | jd r]J | jd 	|d	|d| d S |dv rgg }|dkr|d us|J |jjd ur|jjj}d}	d}
d}d}|dkr| jd d n| j}|}|dkrt }| jr|d7 }|dkrt|dkr|tdd7 }n|tdd7 }tt|D ]Z}|| }| j| }|s|tdd7 }|d7 }|r|tdd7 }|t 7 }d}t
|}|dkr%|jr|	t|k r|
t
||	 7 }
|	d
7 }	|	|d||
| | ||7 }q|dkret| jd
krC|tdd7 }||7 }| jd rW|tdd7 }|t 7 }| jd 	|||d| d S d S td| )Nrr   zCan this happen?r   r   z::blahtemplate rg   rs   rR   )rf   rq   markNamerq   TFrf   rw   )r   r   r0   r   Textr   r/   r   r   r   r*   declarationtemplatePrefixr   desc_addnamedesc_sig_punctuationdesc_sig_keyworddesc_sig_spacerc   r}   )r5   r_   r`   ra   rd   unreachabler   r   templateParamsiTemplateParamstemplateParamsPrefixrb   firstr   destnner   txt_nner%   r%   r&   r      s   








	z ASTNestedName.describe_signatureN)r   r   r   r   r   r9   r+   r,   r   r   r+   r   )rg   )rP   r@   r   r*   r+   r*   r   
r_   r   r`   r*   ra   r   rd   r   r+   r,   )r"   r#   r$   r6   r>   rE   r   r)   r   rZ   rK   r   r%   r%   r%   r&   r      s    


	
	
r   c                   @      e Zd ZdddZdddZdS )ASTExpressionrP   r@   r+   r*   c                 C     t t| r;   NotImplementedErrorreprrY   r%   r%   r&   rZ   P     zASTExpression.get_idr_   r   r`   ra   r   rd   r   r,   c                 C  r   r;   r   r5   r_   r`   ra   rd   r%   r%   r&   r   S     z ASTExpression.describe_signatureNr   r   r"   r#   r$   rZ   r   r%   r%   r%   r&   r   O      
r   c                   @  r   )
ASTLiteralNr!   r%   r%   r%   r&   r   [  r'   r   c                   @  >   e Zd ZdddZddd	ZdddZd ddZd!ddZdS )"ASTPointerLiteralr7   r8   r+   r9   c                 C  
   t |tS r;   )r.   r   r=   r%   r%   r&   r>   `  rF   zASTPointerLiteral.__eq__r@   c                 C     t dS NnullptrrC   rD   r%   r%   r&   rE   c     zASTPointerLiteral.__hash__rG   r   r*   c                 C  r   r   r%   rJ   r%   r%   r&   rK   f  r   zASTPointerLiteral._stringifyrP   c                 C  r   )NLDnEr%   rY   r%   r%   r&   rZ   i  r   zASTPointerLiteral.get_idr_   r   r`   ra   r   rd   r   r,   c                 C     |t dd7 }d S r   r   r   r   r%   r%   r&   r   l     z$ASTPointerLiteral.describe_signatureNr   r   r   r   r   r"   r#   r$   r>   rE   rK   rZ   r   r%   r%   r%   r&   r   _      



r   c                   @  sH   e Z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S )&ASTBooleanLiteralvaluer9   r+   r,   c                 C  
   || _ d S r;   r   r5   r   r%   r%   r&   r6   r  rF   zASTBooleanLiteral.__init__r7   r8   c                 C  r:   r;   )r.   r   r<   r   r=   r%   r%   r&   r>   u  r?   zASTBooleanLiteral.__eq__r@   c                 C  rA   r;   rC   r   rD   r%   r%   r&   rE   z  rF   zASTBooleanLiteral.__hash__rG   r   r*   c                 C     | j rdS dS )Ntruefalser   rJ   r%   r%   r&   rK   }     zASTBooleanLiteral._stringifyrP   c                 C  r   )NL1EL0Er   rY   r%   r%   r&   rZ     r   zASTBooleanLiteral.get_idr_   r   r`   ra   r   rd   r   c                 C  s   |t t| t| 7 }d S r;   )r   r   r*   r   r%   r%   r&   r     s   z$ASTBooleanLiteral.describe_signatureN)r   r9   r+   r,   r   r   r   r   r   	r"   r#   r$   r6   r>   rE   rK   rZ   r   r%   r%   r%   r&   r   q  s    




r   c                   @  H   e Z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S )&ASTNumberLiteraldatar*   r+   r,   c                 C  r   r;   r  r5   r  r%   r%   r&   r6     rF   zASTNumberLiteral.__init__r7   r8   r9   c                 C  r:   r;   )r.   r  r<   r  r=   r%   r%   r&   r>     r?   zASTNumberLiteral.__eq__r@   c                 C  rA   r;   rC   r  rD   r%   r%   r&   rE     rF   zASTNumberLiteral.__hash__rG   r   c                 C  rL   r;   r  rJ   r%   r%   r&   rK     rO   zASTNumberLiteral._stringifyrP   c                 C  s   d| j dd S )NzL%sE'rg   )r  replacerY   r%   r%   r&   rZ        zASTNumberLiteral.get_idr_   r   r`   ra   r   rd   r   c                 C     |t | j| j7 }d S r;   )r   desc_sig_literal_numberr  r   r%   r%   r&   r        z#ASTNumberLiteral.describe_signatureNr  r*   r+   r,   r   r   r   r   r   r   r%   r%   r%   r&   r        




r  c                   @  r   )&ASTStringLiteralr  r*   r+   r,   c                 C  r   r;   r  r  r%   r%   r&   r6     rF   zASTStringLiteral.__init__r7   r8   r9   c                 C  r:   r;   )r.   r  r<   r  r=   r%   r%   r&   r>     r?   zASTStringLiteral.__eq__r@   c                 C  rA   r;   r  rD   r%   r%   r&   rE     rF   zASTStringLiteral.__hash__rG   r   c                 C  rL   r;   r  rJ   r%   r%   r&   rK     rO   zASTStringLiteral._stringifyrP   c                 C  s   dt | jd  S )NzLA%d_KcEr   )r/   r  rY   r%   r%   r&   rZ     r  zASTStringLiteral.get_idr_   r   r`   ra   r   rd   r   c                 C  r	  r;   )r   desc_sig_literal_stringr  r   r%   r%   r&   r     r  z#ASTStringLiteral.describe_signatureNr  r   r   r   r   r   r   r%   r%   r%   r&   r    r  r  c                   @  sH   e Z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 S )'ASTCharLiteralrb   r*   r  r+   r,   c                 C  sR   || _ || _|tv sJ t| | _| d}t|dkr%t|| _d S t	|)Nzunicode-escaperR   )
rb   r  r	   typeencodedecoder/   ordr   r   )r5   rb   r  decodedr%   r%   r&   r6     s   
zASTCharLiteral.__init__r7   r8   r9   c                 C  r   r;   )r.   r  r<   rb   r   r=   r%   r%   r&   r>     
   

zASTCharLiteral.__eq__r@   c                 C  r   r;   )rC   rb   r   rD   r%   r%   r&   rE     r^   zASTCharLiteral.__hash__rG   r   c                 C  s,   | j d u rd| j d S | j d | j d S Nr  )rb   r  rJ   r%   r%   r&   rK     s   
zASTCharLiteral._stringifyrP   c                 C  s   | j t| j S r;   )r  r*   r   rY   r%   r%   r&   rZ        zASTCharLiteral.get_idr_   r   r`   ra   r   rd   r   c                 C  s@   | j d ur|t| j | j 7 }d| j d }|t||7 }d S r  )rb   r   r   r  desc_sig_literal_char)r5   r_   r`   ra   rd   txtr%   r%   r&   r     s   
z!ASTCharLiteral.describe_signatureN)rb   r*   r  r*   r+   r,   r   r   r   r   r   r   r%   r%   r%   r&   r    s    




r  c                   @  H   e Z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"S ))ASTUserDefinedLiteralliteralr   identr(   r+   r,   c                 C  r   r;   r  r  )r5   r  r  r%   r%   r&   r6        
zASTUserDefinedLiteral.__init__r7   r8   r9   c                 C  r   r;   )r.   r  r<   r  r  r=   r%   r%   r&   r>     r   zASTUserDefinedLiteral.__eq__r@   c                 C  r   r;   )rC   r  r  rD   r%   r%   r&   rE     r^   zASTUserDefinedLiteral.__hash__rG   r   r*   c                 C     || j || j S r;   r  rJ   r%   r%   r&   rK     r   z ASTUserDefinedLiteral._stringifyrP   c                 C  s"   d| j | d| j| dS )NclL_Zlir   )r  rZ   r  rY   r%   r%   r&   rZ     s   "zASTUserDefinedLiteral.get_idr_   r   r`   ra   r   rd   r   c                 C  s,   | j |||| | j|d|dd| d S )Nru   rg   )r  r   r  r   r%   r%   r&   r     s   z(ASTUserDefinedLiteral.describe_signatureN)r  r   r  r(   r+   r,   r   r   r   r   r   r   r%   r%   r%   r&   r        




r  c                   @  r   )"ASTThisLiteralr7   r8   r+   r9   c                 C  r   r;   )r.   r$  r=   r%   r%   r&   r>     rF   zASTThisLiteral.__eq__r@   c                 C  r   Nthisr   rD   r%   r%   r&   rE     r   zASTThisLiteral.__hash__rG   r   r*   c                 C  r   r%  r%   rJ   r%   r%   r&   rK   
  r   zASTThisLiteral._stringifyrP   c                 C  r   )NfpTr%   rY   r%   r%   r&   rZ     r   zASTThisLiteral.get_idr_   r   r`   ra   r   rd   r   r,   c                 C  r   r%  r   r   r%   r%   r&   r     r   z!ASTThisLiteral.describe_signatureNr   r   r   r   r   r   r%   r%   r%   r&   r$    r   r$  c                   @  sH   e Z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"S ))ASTFoldExprleftExprASTExpression | Noneopr*   	rightExprr+   r,   c                 C  s*   |d us
|d us
J || _ || _|| _d S r;   r)  r+  r,  r5   r)  r+  r,  r%   r%   r&   r6     s   
zASTFoldExpr.__init__r7   r8   r9   c                 C  r   r;   )r.   r(  r<   r)  r+  r,  r=   r%   r%   r&   r>     r   zASTFoldExpr.__eq__r@   c                 C  r   r;   rC   r)  r+  r,  rD   r%   r%   r&   rE   &  r   zASTFoldExpr.__hash__rG   r   c                 C  s   dg}| j r||| j  |d || j |d |d | jr>|d || j |d ||| j |d d|S )N(r   ...)rg   )r)  r|   r+  r,  r   r   r%   r%   r&   rK   )  s   






zASTFoldExpr._stringifyrP   c                 C  s   |dksJ |dkrt | S g }| jd u r|d n| jd u r&|d n|d |t| j  | jr?|| j| | jrK|| j| d|S )NrQ   flfrfLrg   )r*   r)  r|   r,  r   r+  rZ   r   r   r%   r%   r&   rZ   9  s   



zASTFoldExpr.get_idr_   r   r`   ra   r   rd   r   c                 C  s   |t dd7 }| jr*| j|||| |t  7 }|t | j| j7 }|t  7 }|t dd7 }| jrT|t  7 }|t | j| j7 }|t  7 }| j|||| |t dd7 }d S )Nr0  r1  r2  )r   r   r)  r   r   desc_sig_operatorr+  r,  r   r%   r%   r&   r   N  s   zASTFoldExpr.describe_signatureN)r)  r*  r+  r*   r,  r*  r+   r,   r   r   r   r   r   r   r%   r%   r%   r&   r(    s    


	

r(  c                   @  H   e Z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 S )'ASTParenExprexprr   r+   r,   c                 C  r   r;   r9  r5   r9  r%   r%   r&   r6   `  rF   zASTParenExpr.__init__r7   r8   r9   c                 C  r:   r;   )r.   r8  r<   r9  r=   r%   r%   r&   r>   c  r?   zASTParenExpr.__eq__r@   c                 C  rA   r;   rC   r9  rD   r%   r%   r&   rE   h  rF   zASTParenExpr.__hash__rG   r   r*   c                 C     d|| j  d S Nr0  r2  r:  rJ   r%   r%   r&   rK   k     zASTParenExpr._stringifyrP   c                 C     | j |S r;   r9  rZ   rY   r%   r%   r&   rZ   n  r   zASTParenExpr.get_idr_   r   r`   ra   r   rd   r   c                 C  6   |t dd7 }| j|||| |t dd7 }d S r>  r   r   r9  r   r   r%   r%   r&   r   q     zASTParenExpr.describe_signatureNr9  r   r+   r,   r   r   r   r   r   r   r%   r%   r%   r&   r8  _      




r8  c                   @  r7  )'ASTIdExpressionr)   r   r+   r,   c                 C  r   r;   rI   r4   r%   r%   r&   r6   y     
zASTIdExpression.__init__r7   r8   r9   c                 C  r:   r;   )r.   rG  r<   r)   r=   r%   r%   r&   r>   }  r?   zASTIdExpression.__eq__r@   c                 C  rA   r;   rB   rD   r%   r%   r&   rE     rF   zASTIdExpression.__hash__rG   r   r*   c                 C  rH   r;   rI   rJ   r%   r%   r&   rK     rF   zASTIdExpression._stringifyrP   c                 C  r@  r;   r)   rZ   rY   r%   r%   r&   rZ     r   zASTIdExpression.get_idr_   r   r`   ra   r   rd   r   c                 C     | j |||| d S r;   )r)   r   r   r%   r%   r&   r        z"ASTIdExpression.describe_signatureNr)   r   r+   r,   r   r   r   r   r   r   r%   r%   r%   r&   rG  x  s    




rG  c                   @  s    e Zd ZdddZdddZdS )ASTPostfixOpidPrefixr*   rP   r@   r+   c                 C  r   r;   r   r5   rN  rP   r%   r%   r&   rZ     r   zASTPostfixOp.get_idr_   r   r`   ra   r   rd   r   r,   c                 C  r   r;   r   r   r%   r%   r&   r     r   zASTPostfixOp.describe_signatureNrN  r*   rP   r@   r+   r*   r   r   r%   r%   r%   r&   rM    r   rM  c                   @  H   e Z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!S )(ASTPostfixArrayr9  r   r+   r,   c                 C  r   r;   r:  r;  r%   r%   r&   r6     rF   zASTPostfixArray.__init__r7   r8   r9   c                 C  r:   r;   )r.   rR  r<   r9  r=   r%   r%   r&   r>     r?   zASTPostfixArray.__eq__r@   c                 C  rA   r;   r<  rD   r%   r%   r&   rE     rF   zASTPostfixArray.__hash__rG   r   r*   c                 C  r=  N[]r:  rJ   r%   r%   r&   rK     r?  zASTPostfixArray._stringifyrN  rP   c                 C     d| | j | S )NixrA  rO  r%   r%   r&   rZ     r   zASTPostfixArray.get_idr_   r   r`   ra   r   rd   r   c                 C  rB  rS  rC  r   r%   r%   r&   r     rD  z"ASTPostfixArray.describe_signatureNrE  r   r   r   rP  r   r   r%   r%   r%   r&   rR    rF  rR  c                   @  rQ  )(ASTPostfixMemberr)   r   r+   r,   c                 C  r   r;   rI   r4   r%   r%   r&   r6     rF   zASTPostfixMember.__init__r7   r8   r9   c                 C  r:   r;   )r.   rX  r<   r)   r=   r%   r%   r&   r>     r?   zASTPostfixMember.__eq__r@   c                 C  rA   r;   rB   rD   r%   r%   r&   rE     rF   zASTPostfixMember.__hash__rG   r   r*   c                 C     d|| j  S )N.rI   rJ   r%   r%   r&   rK        zASTPostfixMember._stringifyrN  rP   c                 C  rV  )NdtrI  rO  r%   r%   r&   rZ     r   zASTPostfixMember.get_idr_   r   r`   ra   r   rd   r   c                 C  &   |t dd7 }| j|d|| d S )NrZ  rr   )r   r   r)   r   r   r%   r%   r&   r        z#ASTPostfixMember.describe_signatureNrL  r   r   r   rP  r   r   r%   r%   r%   r&   rX    rF  rX  c                   @  rQ  )(ASTPostfixMemberOfPointerr)   r   r+   r,   c                 C  r   r;   rI   r4   r%   r%   r&   r6     rF   z"ASTPostfixMemberOfPointer.__init__r7   r8   r9   c                 C  r:   r;   )r.   r_  r<   r)   r=   r%   r%   r&   r>     r?   z ASTPostfixMemberOfPointer.__eq__r@   c                 C  rA   r;   rB   rD   r%   r%   r&   rE     rF   z"ASTPostfixMemberOfPointer.__hash__rG   r   r*   c                 C  rY  )N->rI   rJ   r%   r%   r&   rK     r[  z$ASTPostfixMemberOfPointer._stringifyrN  rP   c                 C  rV  )NptrI  rO  r%   r%   r&   rZ     r   z ASTPostfixMemberOfPointer.get_idr_   r   r`   ra   r   rd   r   c                 C  r]  )Nr`  rr   )r   r6  r)   r   r   r%   r%   r&   r     r^  z,ASTPostfixMemberOfPointer.describe_signatureNrL  r   r   r   rP  r   r   r%   r%   r%   r&   r_    rF  r_  c                   @  >   e Zd ZdddZddd	Zd ddZd!ddZd"ddZdS )#ASTPostfixIncr7   r8   r+   r9   c                 C  r   r;   )r.   rc  r=   r%   r%   r&   r>     rF   zASTPostfixInc.__eq__r@   c                 C  r   Nz++r   rD   r%   r%   r&   rE     r   zASTPostfixInc.__hash__rG   r   r*   c                 C  r   rd  r%   rJ   r%   r%   r&   rK     r   zASTPostfixInc._stringifyrN  rP   c                 C     d| S )Nppr%   rO  r%   r%   r&   rZ     r   zASTPostfixInc.get_idr_   r   r`   ra   r   rd   r   r,   c                 C  r   rd  r   r6  r   r%   r%   r&   r     r   z ASTPostfixInc.describe_signatureNr   r   r   rP  r   r   r%   r%   r%   r&   rc    r   rc  c                   @  rb  )#ASTPostfixDecr7   r8   r+   r9   c                 C  r   r;   )r.   rh  r=   r%   r%   r&   r>     rF   zASTPostfixDec.__eq__r@   c                 C  r   Nz--r   rD   r%   r%   r&   rE     r   zASTPostfixDec.__hash__rG   r   r*   c                 C  r   ri  r%   rJ   r%   r%   r&   rK     r   zASTPostfixDec._stringifyrN  rP   c                 C  re  )Nmmr%   rO  r%   r%   r&   rZ     r   zASTPostfixDec.get_idr_   r   r`   ra   r   rd   r   r,   c                 C  r   ri  rg  r   r%   r%   r&   r     r   z ASTPostfixDec.describe_signatureNr   r   r   rP  r   r   r%   r%   r%   r&   rh    r   rh  c                   @  rQ  )(ASTPostfixCallExprlst$ASTParenExprList | ASTBracedInitListr+   r,   c                 C  r   r;   rl  )r5   rl  r%   r%   r&   r6   
  rF   zASTPostfixCallExpr.__init__r7   r8   r9   c                 C  r:   r;   )r.   rk  r<   rl  r=   r%   r%   r&   r>     r?   zASTPostfixCallExpr.__eq__r@   c                 C  rA   r;   )rC   rl  rD   r%   r%   r&   rE     rF   zASTPostfixCallExpr.__hash__rG   r   r*   c                 C  rH   r;   rn  rJ   r%   r%   r&   rK     rF   zASTPostfixCallExpr._stringifyrN  rP   c                   s(   d d|g fdd| jjD dS )Nrg   clc                 3  r   r;   r   r   er   r%   r&   r     r   z,ASTPostfixCallExpr.get_id.<locals>.<genexpr>r   )r   rl  exprsrO  r%   r   r&   rZ     s   zASTPostfixCallExpr.get_idr_   r   r`   ra   r   rd   r   c                 C  rJ  r;   )rl  r   r   r%   r%   r&   r      rK  z%ASTPostfixCallExpr.describe_signatureN)rl  rm  r+   r,   r   r   r   rP  r   r   r%   r%   r%   r&   rk  	  s    




rk  c                   @  r  ))ASTPostfixExprrb   ASTType	postFixeslist[ASTPostfixOp]r+   r,   c                 C  r   r;   )rb   ru  )r5   rb   ru  r%   r%   r&   r6   &  r   zASTPostfixExpr.__init__r7   r8   r9   c                 C  r   r;   )r.   rs  r<   rb   ru  r=   r%   r%   r&   r>   *  r   zASTPostfixExpr.__eq__r@   c                 C  r   r;   )rC   rb   ru  rD   r%   r%   r&   rE   /  r^   zASTPostfixExpr.__hash__rG   r   r*   c                   s&   d  | jg fdd| jD S )Nrg   c                 3      | ]} |V  qd S r;   r%   )r   prG   r%   r&   r   3      z,ASTPostfixExpr._stringify.<locals>.<genexpr>)r   rb   ru  rJ   r%   ry  r&   rK   2  s   &zASTPostfixExpr._stringifyrP   c                 C  s(   | j |}| jD ]}|||}q	|S r;   )rb   rZ   ru  )r5   rP   idrx  r%   r%   r&   rZ   5  s   
zASTPostfixExpr.get_idr_   r   r`   ra   r   rd   r   c                 C  s2   | j |||| | jD ]
}||||| qd S r;   )rb   r   ru  )r5   r_   r`   ra   rd   rx  r%   r%   r&   r   ;  s   
z!ASTPostfixExpr.describe_signatureN)rb   rt  ru  rv  r+   r,   r   r   r   r   r   r   r%   r%   r%   r&   rs  %  s    




rs  c                   @  H   e Z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#S )*ASTExplicitCastcastr*   typrt  r9  r   r+   r,   c                 C  s"   |t v sJ || _|| _|| _d S r;   )r
   r~  r  r9  )r5   r~  r  r9  r%   r%   r&   r6   C  s   
zASTExplicitCast.__init__r7   r8   r9   c                 C  r   r;   )r.   r}  r<   r~  r  r9  r=   r%   r%   r&   r>   I  s   
$zASTExplicitCast.__eq__r@   c                 C  r   r;   )rC   r~  r  r9  rD   r%   r%   r&   rE   N  r   zASTExplicitCast.__hash__rG   r   c                 C  sP   | j g}|d ||| j |d ||| j |d d|S )N<z>(r2  rg   )r~  r|   r  r9  r   r   r%   r%   r&   rK   Q  s   



zASTExplicitCast._stringifyrP   c                 C  s"   t | j | j| | j| S r;   )r
   r~  r  rZ   r9  rY   r%   r%   r&   rZ   Z  s
   

zASTExplicitCast.get_idr_   r   r`   ra   r   rd   r   c                 C  s|   |t | j| j7 }|t dd7 }| j|||| |t dd7 }|t dd7 }| j|||| |t dd7 }d S )Nr  >r0  r2  )r   r   r~  r   r  r   r9  r   r%   r%   r&   r   _  s   z"ASTExplicitCast.describe_signatureN)r~  r*   r  rt  r9  r   r+   r,   r   r   r   r   r   r   r%   r%   r%   r&   r}  B  s    




	r}  c                   @  sH   e Z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!S )(	ASTTypeId
typeOrExprASTType | ASTExpressionisTyper9   r+   r,   c                 C  r   r;   )r  r  )r5   r  r  r%   r%   r&   r6   k  r   zASTTypeId.__init__r7   r8   c                 C  r   r;   )r.   r  r<   r  r  r=   r%   r%   r&   r>   o  r   zASTTypeId.__eq__r@   c                 C  r   r;   )rC   r  r  rD   r%   r%   r&   rE   t  r^   zASTTypeId.__hash__rG   r   r*   c                 C  r=  )Nztypeid(r2  )r  rJ   r%   r%   r&   rK   w  r?  zASTTypeId._stringifyrP   c                 C  s   | j rdnd}|| j| S )Ntite)r  r  rZ   )r5   rP   rb   r%   r%   r&   rZ   z  s   zASTTypeId.get_idr_   r   r`   ra   r   rd   r   c                 C  F   |t dd7 }|t dd7 }| j|||| |t dd7 }d S )Ntypeidr0  r2  )r   r   r   r  r   r   r%   r%   r&   r   ~     zASTTypeId.describe_signatureN)r  r  r  r9   r+   r,   r   r   r   r   r   r   r%   r%   r%   r&   r  j  r#  r  c                   @  sH   e Z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!S )(ASTUnaryOpExprr+  r*   r9  r   r+   r,   c                 C  r   r;   r+  r9  )r5   r+  r9  r%   r%   r&   r6     r   zASTUnaryOpExpr.__init__r7   r8   r9   c                 C  r   r;   )r.   r  r<   r+  r9  r=   r%   r%   r&   r>     r   zASTUnaryOpExpr.__eq__r@   c                 C  r   r;   )rC   r+  r9  rD   r%   r%   r&   rE     r^   zASTUnaryOpExpr.__hash__rG   r   c                 C  s2   | j d dv r| j d || j S | j || j S )Nr   cnr   r  rJ   r%   r%   r&   rK     s   zASTUnaryOpExpr._stringifyrP   c                 C  s   t | j | j| S r;   )r   r+  r9  rZ   rY   r%   r%   r&   rZ     s   zASTUnaryOpExpr.get_idr_   r   r`   ra   r   rd   r   c                 C  sZ   | j d dv r|t| j | j 7 }|t 7 }n
|t| j | j 7 }| j|||| d S )Nr   r  )r+  r   r   r   r6  r9  r   r   r%   r%   r&   r     s
   z!ASTUnaryOpExpr.describe_signatureN)r+  r*   r9  r   r+   r,   r   r   r   r   r   r   r%   r%   r%   r&   r    s    




r  c                   @  r7  )'ASTSizeofParamPackri   r(   r+   r,   c                 C  r   r;   ri   r5   ri   r%   r%   r&   r6     rF   zASTSizeofParamPack.__init__r7   r8   r9   c                 C  r:   r;   )r.   r  r<   ri   r=   r%   r%   r&   r>     r?   zASTSizeofParamPack.__eq__r@   c                 C  rA   r;   rC   ri   rD   r%   r%   r&   rE     rF   zASTSizeofParamPack.__hash__rG   r   r*   c                 C  r=  )Nz
sizeof...(r2  r  rJ   r%   r%   r&   rK     r?  zASTSizeofParamPack._stringifyrP   c                 C     d| j | S )NsZ)ri   rZ   rY   r%   r%   r&   rZ     r^   zASTSizeofParamPack.get_idr_   r   r`   ra   r   rd   r   c                 C  s\   |t dd7 }|t dd7 }|t dd7 }| jj|d||ddd |t dd7 }d S )Nsizeofr1  r0  rf   rg   )rd   rb   rc   r2  )r   r   r   ri   r   r   r%   r%   r&   r     s   z%ASTSizeofParamPack.describe_signatureNri   r(   r+   r,   r   r   r   r   r   r   r%   r%   r%   r&   r    rF  r  c                   @  r7  )'ASTSizeofTyper  rt  r+   r,   c                 C  r   r;   r  r5   r  r%   r%   r&   r6     rF   zASTSizeofType.__init__r7   r8   r9   c                 C  r:   r;   )r.   r  r<   r  r=   r%   r%   r&   r>     r?   zASTSizeofType.__eq__r@   c                 C  rA   r;   rC   r  rD   r%   r%   r&   rE     rF   zASTSizeofType.__hash__rG   r   r*   c                 C  r=  )Nzsizeof(r2  r  rJ   r%   r%   r&   rK     r?  zASTSizeofType._stringifyrP   c                 C  r  )Nstr  rZ   rY   r%   r%   r&   rZ     r^   zASTSizeofType.get_idr_   r   r`   ra   r   rd   r   c                 C  r  )Nr  r0  r2  r   r   r   r  r   r   r%   r%   r&   r     r  z ASTSizeofType.describe_signatureNr  rt  r+   r,   r   r   r   r   r   r   r%   r%   r%   r&   r    rF  r  c                   @  r7  )'ASTSizeofExprr9  r   r+   r,   c                 C  r   r;   r:  r;  r%   r%   r&   r6     rF   zASTSizeofExpr.__init__r7   r8   r9   c                 C  r:   r;   )r.   r  r<   r9  r=   r%   r%   r&   r>     r?   zASTSizeofExpr.__eq__r@   c                 C  rA   r;   r<  rD   r%   r%   r&   rE     rF   zASTSizeofExpr.__hash__rG   r   r*   c                 C  rY  )Nzsizeof r:  rJ   r%   r%   r&   rK     r[  zASTSizeofExpr._stringifyrP   c                 C  r  )NszrA  rY   r%   r%   r&   rZ     r^   zASTSizeofExpr.get_idr_   r   r`   ra   r   rd   r   c                 C  2   |t dd7 }|t  7 }| j|||| d S )Nr  r   r   r   r9  r   r   r%   r%   r&   r        z ASTSizeofExpr.describe_signatureNrE  r   r   r   r   r   r   r%   r%   r%   r&   r    rF  r  c                   @  r7  )'ASTAlignofExprr  rt  r+   r,   c                 C  r   r;   r  r  r%   r%   r&   r6     rF   zASTAlignofExpr.__init__r7   r8   r9   c                 C  r:   r;   )r.   r  r<   r  r=   r%   r%   r&   r>     r?   zASTAlignofExpr.__eq__r@   c                 C  rA   r;   r  rD   r%   r%   r&   rE     rF   zASTAlignofExpr.__hash__rG   r   r*   c                 C  r=  )Nzalignof(r2  r  rJ   r%   r%   r&   rK     r?  zASTAlignofExpr._stringifyrP   c                 C  r  )Natr  rY   r%   r%   r&   rZ     r^   zASTAlignofExpr.get_idr_   r   r`   ra   r   rd   r   c                 C  r  )Nalignofr0  r2  r  r   r%   r%   r&   r   
  r  z!ASTAlignofExpr.describe_signatureNr  r   r   r   r   r   r   r%   r%   r%   r&   r    rF  r  c                   @  r7  )'ASTNoexceptExprr9  r   r+   r,   c                 C  r   r;   r:  r;  r%   r%   r&   r6     rF   zASTNoexceptExpr.__init__r7   r8   r9   c                 C  r:   r;   )r.   r  r<   r9  r=   r%   r%   r&   r>     r?   zASTNoexceptExpr.__eq__r@   c                 C  rA   r;   r<  rD   r%   r%   r&   rE     rF   zASTNoexceptExpr.__hash__rG   r   r*   c                 C  r=  )N	noexcept(r2  r:  rJ   r%   r%   r&   rK     r?  zASTNoexceptExpr._stringifyrP   c                 C  r  )NnxrA  rY   r%   r%   r&   rZ   !  r^   zASTNoexceptExpr.get_idr_   r   r`   ra   r   rd   r   c                 C  r  )Nnoexceptr0  r2  r   r   r   r9  r   r   r%   r%   r&   r   $  r  z"ASTNoexceptExpr.describe_signatureNrE  r   r   r   r   r   r   r%   r%   r%   r&   r    rF  r  c                   @  sH   e Z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$S )+
ASTNewExprr   r9   isNewTypeIdr  rt  initListrm  r+   r,   c                 C     || _ || _|| _|| _d S r;   )r   r  r  r  )r5   r   r  r  r  r%   r%   r&   r6   -     
zASTNewExpr.__init__r7   r8   c                 C  >   t |tstS | j|jko| j|jko| j|jko| j|jkS r;   )r.   r  r<   r   r  r  r  r=   r%   r%   r&   r>   4     



zASTNewExpr.__eq__r@   c                 C     t | j| j| j| jfS r;   )rC   r   r  r  r  rD   r%   r%   r&   rE   >     zASTNewExpr.__hash__rG   r   r*   c                 C  s^   g }| j r
|d |d | jr||| j nt| jd ur*||| j d|S )Nr   znew rg   )r   r|   r  r  r0   r  r   r   r%   r%   r&   rK   A  s   



zASTNewExpr._stringifyrP   c                 C  sT   dg}| d | | j| | jd ur | | j| n| d d|S )Nnw_r   rg   )r|   r  rZ   r  r   r   r%   r%   r&   rZ   O  s   



zASTNewExpr.get_idr_   r   r`   ra   r   rd   r   c                 C  st   | j r|tdd7 }|tdd7 }|t 7 }| jr&| j|||| nt| j	d ur8| j	|||| d S d S )Nr   new)
r   r   r   r   r   r  r  r   r0   r  r   r%   r%   r&   r   [  s   
zASTNewExpr.describe_signatureN)
r   r9   r  r9   r  rt  r  rm  r+   r,   r   r   r   r   r   r   r%   r%   r%   r&   r  ,  s    





r  c                   @  sH   e Z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"S ))ASTDeleteExprr   r9   arrayr9  r   r+   r,   c                 C     || _ || _|| _d S r;   )r   r  r9  )r5   r   r  r9  r%   r%   r&   r6   k  s   
zASTDeleteExpr.__init__r7   r8   c                 C  r   r;   )r.   r  r<   r   r  r9  r=   r%   r%   r&   r>   p  r   zASTDeleteExpr.__eq__r@   c                 C  r   r;   )rC   r   r  r9  rD   r%   r%   r&   rE   y  r   zASTDeleteExpr.__hash__rG   r   r*   c                 C  sH   g }| j r
|d |d | jr|d ||| j d|S )Nr   zdelete z[] rg   )r   r|   r  r9  r   r   r%   r%   r&   rK   |  s   



zASTDeleteExpr._stringifyrP   c                 C  s    | j rd}nd}|| j| S )Ndadl)r  r9  rZ   r5   rP   r{  r%   r%   r&   rZ     s   zASTDeleteExpr.get_idr_   r   r`   ra   r   rd   r   c                 C  sj   | j r|tdd7 }|tdd7 }|t 7 }| jr*|tdd7 }|t 7 }| j|||| d S )Nr   delete[])r   r   r   r   r   r  r9  r   r   r%   r%   r&   r     s   z ASTDeleteExpr.describe_signatureN)r   r9   r  r9   r9  r   r+   r,   r   r   r   r   r   r   r%   r%   r%   r&   r  j  s    


	


r  c                   @  r  ))ASTCastExprr  rt  r9  r   r+   r,   c                 C  r   r;   )r  r9  )r5   r  r9  r%   r%   r&   r6     r   zASTCastExpr.__init__r7   r8   r9   c                 C  r   r;   )r.   r  r<   r  r9  r=   r%   r%   r&   r>     r  zASTCastExpr.__eq__r@   c                 C  r   r;   )rC   r  r9  rD   r%   r%   r&   rE     r^   zASTCastExpr.__hash__rG   r   r*   c                 C  :   dg}| || j | d | || j d|S Nr0  r2  rg   )r|   r  r9  r   r   r%   r%   r&   rK     
   

zASTCastExpr._stringifyrP   c                 C  s   d| j | | j| S )Ncv)r  rZ   r9  rY   r%   r%   r&   rZ     s   zASTCastExpr.get_idr_   r   r`   ra   r   rd   r   c                 C  sH   |t dd7 }| j|||| |t dd7 }| j|||| d S r>  )r   r   r  r   r9  r   r%   r%   r&   r     s   zASTCastExpr.describe_signatureN)r  rt  r9  r   r+   r,   r   r   r   r   r   r   r%   r%   r%   r&   r    s    




r  c                   @  r  ))ASTBinOpExprrr  list[ASTExpression]ops	list[str]r+   r,   c                 C  s8   t |dksJ t |t |d ksJ || _|| _d S r   )r/   rr  r  )r5   rr  r  r%   r%   r&   r6     s   
zASTBinOpExpr.__init__r7   r8   r9   c                 C  r   r;   )r.   r  r<   rr  r  r=   r%   r%   r&   r>     r  zASTBinOpExpr.__eq__r@   c                 C  r   r;   )rC   rr  r  rD   r%   r%   r&   rE     r^   zASTBinOpExpr.__hash__rG   r   r*   c                 C  st   g }| || jd  tdt| jD ] }| d | | j|d   | d | || j|  qd|S )Nr   rR   r   rg   )r|   rr  r   r/   r  r   )r5   rG   r   r   r%   r%   r&   rK     s   


zASTBinOpExpr._stringifyrP   c                 C  sn   |dksJ g }t t| jD ]}|t| j|   || j| | q|| jd | d|S )Nr   r   rg   )r   r/   r  r|   r   rr  rZ   r   )r5   rP   r   r   r%   r%   r&   rZ     s   
zASTBinOpExpr.get_idr_   r   r`   ra   r   rd   r   c                 C  s   | j d |||| tdt| j D ]E}|t 7 }| j|d  }t|d tdkr?t|d tdkr?|t||7 }n|t	||7 }|t 7 }| j | |||| qd S )Nr   rR   az)
rr  r   r   r/   r   r   r  r  r   r6  )r5   r_   r`   ra   rd   r   r+  r%   r%   r&   r     s   (zASTBinOpExpr.describe_signatureN)rr  r  r  r  r+   r,   r   r   r   r   r   r   r%   r%   r%   r&   r    s    





	r  c                   @  r  ))ASTConditionalExprifExprr   thenExprelseExprr+   r,   c                 C  r  r;   )r  r  r  )r5   r  r  r  r%   r%   r&   r6        
zASTConditionalExpr.__init__r7   r8   r9   c                 C  r   r;   )r.   r  r<   r  r  r  r=   r%   r%   r&   r>     r   zASTConditionalExpr.__eq__r@   c                 C  r   r;   )rC   r  r  r  rD   r%   r%   r&   rE     r   zASTConditionalExpr.__hash__rG   r   r*   c                 C  sR   g }| || j | d | || j | d | || j d|S )Nz ?  : rg   )r|   r  r  r  r   r   r%   r%   r&   rK     s   


zASTConditionalExpr._stringifyrP   c                 C  s^   |dksJ g }| td  | | j| | | j| | | j| d|S )Nr   ?rg   )r|   r   r  rZ   r  r  r   r   r%   r%   r&   rZ     s   
zASTConditionalExpr.get_idr_   r   r`   ra   r   rd   r   c                 C  s   | j |||| |t 7 }|tdd7 }|t 7 }| j|||| |t 7 }|tdd7 }|t 7 }| j|||| d S )Nr  :)r  r   r   r   r6  r  r  r   r%   r%   r&   r     s   z%ASTConditionalExpr.describe_signatureN)r  r   r  r   r  r   r+   r,   r   r   r   r   r   r   r%   r%   r%   r&   r    s    


	

		r  c                   @  H   e Z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!S )(ASTBracedInitListrr  'list[ASTExpression | ASTBracedInitList]trailingCommar9   r+   r,   c                 C  r   r;   )rr  r  )r5   rr  r  r%   r%   r&   r6   $  r   zASTBracedInitList.__init__r7   r8   c                 C  r   r;   )r.   r  r<   rr  r  r=   r%   r%   r&   r>   )  r   zASTBracedInitList.__eq__r@   c                 C  r   r;   )rC   rr  r  rD   r%   r%   r&   rE   .  r^   zASTBracedInitList.__hash__rP   r*   c                      dd  fdd| jD  S )Nzil%sErg   c                 3  r   r;   r   rp  r   r%   r&   r   2  r   z+ASTBracedInitList.get_id.<locals>.<genexpr>r   rr  rY   r%   r   r&   rZ   1     zASTBracedInitList.get_idrG   r   c                   s8   d  fdd| jD }| jrdnd}d| | dS )N, c                 3  rw  r;   r%   rp  ry  r%   r&   r   5  rz  z/ASTBracedInitList._stringify.<locals>.<genexpr>,rg   {})r   rr  r  )r5   rG   rr  r  r%   ry  r&   rK   4  s   zASTBracedInitList._stringifyr_   r   r`   ra   r   rd   r   c                 C  s   t | |tdd7 }d}| jD ]}|s$|tdd7 }|t 7 }nd}||||| q| jr:|tdd7 }|tdd7 }d S )Nr  Tr  Fr  )r   r   r   rr  r   r   r  r5   r_   r`   ra   rd   r   rq  r%   r%   r&   r   9  s   
z$ASTBracedInitList.describe_signatureN)rr  r  r  r9   r+   r,   r   r   r   r   r   	r"   r#   r$   r6   r>   rE   rZ   rK   r   r%   r%   r%   r&   r  #  s    




r  c                   @  r|  )*ASTAssignmentExprr)  r   r+  r*   r,  !ASTExpression | ASTBracedInitListr+   r,   c                 C  r  r;   r-  r.  r%   r%   r&   r6   K  r  zASTAssignmentExpr.__init__r7   r8   r9   c                 C  r   r;   )r.   r  r<   r)  r+  r,  r=   r%   r%   r&   r>   Q  r   zASTAssignmentExpr.__eq__r@   c                 C  r   r;   r/  rD   r%   r%   r&   rE   Z  r   zASTAssignmentExpr.__hash__rG   r   c                 C  sN   g }| || j | d | | j | d | || j d|S Nr   rg   )r|   r)  r+  r,  r   r   r%   r%   r&   rK   ]  s   


zASTAssignmentExpr._stringifyrP   c                 C  sB   g }| t| j  | | j| | | j| d|S Nrg   )r|   r   r+  r)  rZ   r,  r   r   r%   r%   r&   rZ   f  s
   
zASTAssignmentExpr.get_idr_   r   r`   ra   r   rd   r   c                 C  s   | j |||| |t 7 }t| jd tdkr0t| jd tdkr0|t| j| j7 }n
|t| j| j7 }|t 7 }| j|||| d S )Nr   r  r  )	r)  r   r   r   r  r+  r   r6  r,  r   r%   r%   r&   r   n  s   ,z$ASTAssignmentExpr.describe_signatureN)r)  r   r+  r*   r,  r  r+   r,   r   r   r   r   r   r   r%   r%   r%   r&   r  J  s    


	

	r  c                   @  r7  )'ASTCommaExprrr  r  r+   r,   c                 C  s   t |dksJ || _d S r   )r/   rr  r5   rr  r%   r%   r&   r6   {  s   
zASTCommaExpr.__init__r7   r8   r9   c                 C  r:   r;   )r.   r  r<   rr  r=   r%   r%   r&   r>     r?   zASTCommaExpr.__eq__r@   c                 C  rA   r;   rC   rr  rD   r%   r%   r&   rE     rF   zASTCommaExpr.__hash__rG   r   r*   c                      d  fdd| jD S )Nr  c                 3  rw  r;   r%   rp  ry  r%   r&   r     rz  z*ASTCommaExpr._stringify.<locals>.<genexpr>r  rJ   r%   ry  r&   rK        zASTCommaExpr._stringifyrP   c                 C  sd   t d }g }tt| jd D ]}|| || j| | q|| jd | d|S )Nr  rR   r   rg   )r   r   r/   rr  r|   rZ   r   )r5   rP   id_r   r   r%   r%   r&   rZ     s   

zASTCommaExpr.get_idr_   r   r`   ra   r   rd   r   c                 C  sb   | j d |||| tdt| j D ]}|tdd7 }|t 7 }| j | |||| qd S )Nr   rR   r  )rr  r   r   r/   r   r   r   )r5   r_   r`   ra   rd   r   r%   r%   r&   r     s   zASTCommaExpr.describe_signatureN)rr  r  r+   r,   r   r   r   r   r   r   r%   r%   r%   r&   r  z  s    




	r  c                   @  r   )&ASTFallbackExprr9  r*   r+   r,   c                 C  r   r;   r:  r;  r%   r%   r&   r6     rF   zASTFallbackExpr.__init__r7   r8   r9   c                 C  r:   r;   )r.   r  r<   r9  r=   r%   r%   r&   r>     r?   zASTFallbackExpr.__eq__r@   c                 C  rA   r;   r<  rD   r%   r%   r&   rE     rF   zASTFallbackExpr.__hash__rG   r   c                 C  rL   r;   r:  rJ   r%   r%   r&   rK     rO   zASTFallbackExpr._stringifyrP   c                 C  rA   r;   )r*   r9  rY   r%   r%   r&   rZ     rF   zASTFallbackExpr.get_idr_   r   r`   ra   r   rd   r   c                 C  r	  r;   )r   r  r9  r   r%   r%   r&   r     r  z"ASTFallbackExpr.describe_signatureN)r9  r*   r+   r,   r   r   r   r   r   r   r%   r%   r%   r&   r    rF  r  c                   @  s`   e Zd ZU dZded< 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$S )+ASTOperatorFzClassVar[Literal[False]]r3   r7   r8   r+   r9   c                 C  r   r;   r   r=   r%   r%   r&   r>     r   zASTOperator.__eq__r@   c                 C  r   r;   r   rD   r%   r%   r&   rE     r   zASTOperator.__hash__c                 C  rL   r;   rM   rD   r%   r%   r&   rN     rO   zASTOperator.is_anonc                 C  r   NTr%   rD   r%   r%   r&   r     r   zASTOperator.is_operatorrP   r*   c                 C     t r;   r   rY   r%   r%   r&   rZ     r   zASTOperator.get_idr_   r   	identnodera   r   rd   r   r,   c                 C  r  )zARender the prefix into signode, and the last part into identnode.r  r5   r_   r  ra   rd   r%   r%   r&   _describe_identifier  s   z ASTOperator._describe_identifierr`   rb   rc   c                 C  s   t | |dkrt }| |||| ||7 }d S |dkrU|t|  | }tjddd|d d d}	| |	d< t }
| ||
|| |
	 }|	t||7 }	||	7 }d S t
 }| |||| ||7 }d S )Nrq   rf   rg   rh   ri   rj   rp   )r   r   r{   r  r*   ry   rz   r   r  astextr   )r5   r_   r`   ra   rb   rc   rd   mainNamer   r   	containerr  addNamer%   r%   r&   r     s*   zASTOperator.describe_signatureNr   r   r   r   
r_   r   r  r   ra   r   rd   r   r+   r,   r   )r"   r#   r$   r3   __annotations__r>   rE   rN   r   rZ   r  r   r%   r%   r%   r&   r    s   
 





r  c                   @  sH   e Z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S )&ASTOperatorBuildInr+  r*   r+   r,   c                 C  r   r;   r+  )r5   r+  r%   r%   r&   r6     rF   zASTOperatorBuildIn.__init__r7   r8   r9   c                 C  r:   r;   )r.   r  r<   r+  r=   r%   r%   r&   r>     r?   zASTOperatorBuildIn.__eq__r@   c                 C  rA   r;   )rC   r+  rD   r%   r%   r&   rE     rF   zASTOperatorBuildIn.__hash__rP   c                 C  sB   |dkrt }| j|vrtnt}| j|vrtd| j || j S )NrR   zBInternal error: Built-in operator "%s" can not be mapped to an id.)r   r+  r   r   r}   )r5   rP   idsr%   r%   r&   rZ     s   


zASTOperatorBuildIn.get_idrG   r   c                 C  s,   | j dv s| j d dv rd| j  S d| j  S )Nr  znew[]r  zdelete[]r   abcnox	operator operatorr  rJ   r%   r%   r&   rK     s   

zASTOperatorBuildIn._stringifyr_   r   r  ra   r   rd   r   c                 C  sL   |t dd7 }| jdv s| jd dv r|t  7 }|t | j| j7 }d S )Nr  r  r   r  )r   r   r+  r   r6  r  r%   r%   r&   r    s   z'ASTOperatorBuildIn._describe_identifierN)r+  r*   r+   r,   r   r   r   r   r  	r"   r#   r$   r6   r>   rE   rZ   rK   r  r%   r%   r%   r&   r    s    




r  c                   @  H   e Z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 S )'ASTOperatorLiteralri   r(   r+   r,   c                 C  r   r;   r  r  r%   r%   r&   r6     rF   zASTOperatorLiteral.__init__r7   r8   r9   c                 C  r:   r;   )r.   r   r<   ri   r=   r%   r%   r&   r>     r?   zASTOperatorLiteral.__eq__r@   c                 C  rA   r;   r  rD   r%   r%   r&   rE     rF   zASTOperatorLiteral.__hash__rP   r*   c                 C  s   |dkrt d| j| S )NrR   li)r   ri   rZ   rY   r%   r%   r&   rZ   !  s   zASTOperatorLiteral.get_idrG   r   c                 C  rY  )Nrv   r  rJ   r%   r%   r&   rK   &  r[  zASTOperatorLiteral._stringifyr_   r   r  ra   r   rd   r   c                 C  s:   |t dd7 }|t dd7 }| j|d|dd| d S )Nr  z""rf   rg   )r   r   r  ri   r   r  r%   r%   r&   r  )  s   z'ASTOperatorLiteral._describe_identifierNr  r   r   r   r   r  r  r%   r%   r%   r&   r     s    




r   c                   @  sR   e Z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"S )*ASTOperatorTyper  rt  r+   r,   c                 C  r   r;   r  )r5   r  r%   r%   r&   r6   1  rF   zASTOperatorType.__init__r7   r8   r9   c                 C  r:   r;   )r.   r  r<   r  r=   r%   r%   r&   r>   4  r?   zASTOperatorType.__eq__r@   c                 C  rA   r;   )rC   r  rD   r%   r%   r&   rE   9  rF   zASTOperatorType.__hash__rP   r*   c                 C  s(   |dkrd| j | S d| j | S )NrR   zcastto-%s-operatorr  )r  rZ   rY   r%   r%   r&   rZ   <     zASTOperatorType.get_idrG   r   c                 C  s   d|| j  S )Nr  r  rJ   r%   r%   r&   rK   B  r^   zASTOperatorType._stringifyc                 C  s   t | S r;   )r*   rD   r%   r%   r&   get_name_no_templateE  r   z$ASTOperatorType.get_name_no_templater_   r   r  ra   r   rd   r   c                 C  s2   |t dd7 }|t  7 }| j|d|| d S )Nr  rf   )r   r   r   r  r   r  r%   r%   r&   r  H  r  z$ASTOperatorType._describe_identifierN)r  rt  r+   r,   r   r   r   r   r   r  )
r"   r#   r$   r6   r>   rE   rZ   rK   r  r  r%   r%   r%   r&   r  0  s    





r  c                   @  r7  )'ASTTemplateArgConstantr   r   r+   r,   c                 C  r   r;   r   r   r%   r%   r&   r6   P  rF   zASTTemplateArgConstant.__init__r7   r8   r9   c                 C  r:   r;   )r.   r  r<   r   r=   r%   r%   r&   r>   S  r?   zASTTemplateArgConstant.__eq__r@   c                 C  rA   r;   r   rD   r%   r%   r&   rE   X  rF   zASTTemplateArgConstant.__hash__rG   r   r*   c                 C  rH   r;   r   rJ   r%   r%   r&   rK   [  rF   z!ASTTemplateArgConstant._stringifyrP   c                 C  sD   |dkrt | ddS |dkrdt |  d S d| j| d S )NrR   r   -r   Xr   )r*   r  r   rZ   rY   r%   r%   r&   rZ   ^  s
   zASTTemplateArgConstant.get_idr_   r   r`   ra   r   rd   r   c                 C  s   t | | j|||| d S r;   )r   r   r   r   r%   r%   r&   r   e  s   z)ASTTemplateArgConstant.describe_signatureN)r   r   r+   r,   r   r   r   r   r   r   r%   r%   r%   r&   r  O  s    




r  c                   @  r  )(ASTTemplateArgsargs&list[ASTType | ASTTemplateArgConstant]packExpansionr9   r+   r,   c                 C     |d usJ || _ || _d S r;   )r
  r  )r5   r
  r  r%   r%   r&   r6   l     
zASTTemplateArgs.__init__r7   r8   c                 C  r   r;   )r.   r	  r<   r
  r  r=   r%   r%   r&   r>   r  r   zASTTemplateArgs.__eq__r@   c                 C  r   r;   )rC   r
  r  rD   r%   r%   r&   rE   w  r^   zASTTemplateArgs.__hash__rP   r*   c                   s    dkr%g }| d | d fdd| jD  | d d|S g }| d t| jdkr`| jd d	 D ]
}| |  q:| jrM| d
 | | jd	   | jr`| d | d d|S )NrR   r  rZ  c                 3  r   r;   r   r   r  r   r%   r&   r   ~  r   z)ASTTemplateArgs.get_id.<locals>.<genexpr>rg   Ir   r   Jr   )r|   r   r
  r/   rZ   r  )r5   rP   r   r  r%   r   r&   rZ   z  s$   
 






zASTTemplateArgs.get_idrG   r   c                   s4   d  fdd| jD }| jr|d7 }d| d S )Nr  c                 3  rw  r;   r%   r  ry  r%   r&   r     rz  z-ASTTemplateArgs._stringify.<locals>.<genexpr>r1  r  r  )r   r
  r  r   r%   ry  r&   rK     s   zASTTemplateArgs._stringifyr_   r   r`   ra   r   rd   r   c                 C  s   t | |tdd7 }d}| jD ]}|s#|tdd7 }|t 7 }d}|j|d||d q| jr:|tdd7 }|tdd7 }d S )	Nr  Tr  Frf   rd   r1  r  )r   r   r   r
  r   r   r  )r5   r_   r`   ra   rd   r   r  r%   r%   r&   r     s   
z"ASTTemplateArgs.describe_signatureN)r
  r  r  r9   r+   r,   r   r   r   r   r   r  r%   r%   r%   r&   r	  k  s    




r	  c                   @  r   )ASTTrailingTypeSpecrP   r@   r+   r*   c                 C  r   r;   r   rY   r%   r%   r&   rZ     r   zASTTrailingTypeSpec.get_idr_   r   r`   ra   r   rd   r   r,   c                 C  r   r;   r   r   r%   r%   r&   r     r   z&ASTTrailingTypeSpec.describe_signatureNr   r   r   r%   r%   r%   r&   r    r   r  c                   @  sH   e Z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!S )(ASTTrailingTypeSpecFundamentalr   r  
canonNamesr+   r,   c                 C  s<   t |dksJ t |t |ksJ ||f|| _|| _d S r   )r/   r   r  )r5   r   r  r%   r%   r&   r6     s   
z'ASTTrailingTypeSpecFundamental.__init__r7   r8   r9   c                 C  r   r;   )r.   r  r<   r   r  r=   r%   r%   r&   r>     r   z%ASTTrailingTypeSpecFundamental.__eq__r@   c                 C  r   r;   )rC   r   r  rD   r%   r%   r&   rE     r^   z'ASTTrailingTypeSpecFundamental.__hash__rG   r   r*   c                 C  s   d | jS )Nr   )r   r   rJ   r%   r%   r&   rK     r   z)ASTTrailingTypeSpecFundamental._stringifyrP   c                 C  sl   |dkr"g }| j D ]}|tv r|t|  q	|| q	d|S d| j }|tvr2td| t| S )NrR   r  r   zSemi-internal error: Fundamental type "%s" can not be mapped to an ID. Is it a true fundamental type? If not so, the parser should have rejected it.)r  r   r|   r   r   r}   )r5   rP   r   r  r  r%   r%   r&   rZ     s   

z%ASTTrailingTypeSpecFundamental.get_idr_   r   r`   ra   r   rd   r   c                 C  s:   d}| j D ]}|s|t 7 }nd}|t||7 }qd S )NTF)r   r   r   desc_sig_keyword_type)r5   r_   r`   ra   rd   r   r   r%   r%   r&   r     s   
z1ASTTrailingTypeSpecFundamental.describe_signatureN)r   r  r  r  r+   r,   r   r   r   r   r   r   r%   r%   r%   r&   r    s    




r  c                   @  r   )"ASTTrailingTypeSpecDecltypeAutor7   r8   r+   r9   c                 C  r   r;   )r.   r  r=   r%   r%   r&   r>     rF   z&ASTTrailingTypeSpecDecltypeAuto.__eq__r@   c                 C  r   Ndecltype(auto)r   rD   r%   r%   r&   rE     r   z(ASTTrailingTypeSpecDecltypeAuto.__hash__rG   r   r*   c                 C  r   r  r%   rJ   r%   r%   r&   rK     r   z*ASTTrailingTypeSpecDecltypeAuto._stringifyrP   c                 C  s   |dkrt dS )NrR   Dc)r   rY   r%   r%   r&   rZ        z&ASTTrailingTypeSpecDecltypeAuto.get_idr_   r   r`   ra   r   rd   r   r,   c                 C  sD   |t dd7 }|t dd7 }|t dd7 }|t dd7 }d S )Ndecltyper0  autor2  )r   r   r   r   r%   r%   r&   r     s   z2ASTTrailingTypeSpecDecltypeAuto.describe_signatureNr   r   r   r   r   r   r%   r%   r%   r&   r    s    



r  c                   @  r7  )'ASTTrailingTypeSpecDecltyper9  r   r+   r,   c                 C  r   r;   r:  r;  r%   r%   r&   r6     rF   z$ASTTrailingTypeSpecDecltype.__init__r7   r8   r9   c                 C  r:   r;   )r.   r  r<   r9  r=   r%   r%   r&   r>     r?   z"ASTTrailingTypeSpecDecltype.__eq__r@   c                 C  rA   r;   r<  rD   r%   r%   r&   rE     rF   z$ASTTrailingTypeSpecDecltype.__hash__rG   r   r*   c                 C  r=  )Nz	decltype(r2  r:  rJ   r%   r%   r&   rK     r?  z&ASTTrailingTypeSpecDecltype._stringifyrP   c                 C  s    |dkrt d| j| d S )NrR   DTr   )r   r9  rZ   rY   r%   r%   r&   rZ     s   z"ASTTrailingTypeSpecDecltype.get_idr_   r   r`   ra   r   rd   r   c                 C  r  )Nr  r0  r2  r  r   r%   r%   r&   r     r  z.ASTTrailingTypeSpecDecltype.describe_signatureNrE  r   r   r   r   r   r   r%   r%   r%   r&   r    s    




r  c                   @  sV   e Zd Zd&d	d
Zd'ddZd(ddZed)ddZd*ddZd+ddZ	d,d#d$Z
d%S )-ASTTrailingTypeSpecNamerb   r*   
nestedNamer   placeholderType
str | Noner+   r,   c                 C  r  r;   )rb   r!  r"  )r5   rb   r!  r"  r%   r%   r&   r6     r  z ASTTrailingTypeSpecName.__init__r7   r8   r9   c                 C  r   r;   )r.   r   r<   rb   r!  r"  r=   r%   r%   r&   r>     r   zASTTrailingTypeSpecName.__eq__r@   c                 C  r   r;   )rC   rb   r!  r"  rD   r%   r%   r&   rE   $  r   z ASTTrailingTypeSpecName.__hash__c                 C  rL   r;   r!  rD   r%   r%   r&   r)   '     zASTTrailingTypeSpecName.namerP   c                 C  r@  r;   )r!  rZ   rY   r%   r%   r&   rZ   +  r   zASTTrailingTypeSpecName.get_idrG   r   c                 C  sZ   g }| j r|| j  |d ||| j | jd ur(|d || j d|S r  )rb   r|   r!  r"  r   r   r%   r%   r&   rK   .  s   



z"ASTTrailingTypeSpecName._stringifyr_   r   r`   ra   r   rd   r   c                 C  s   | j r|t| j | j 7 }|t 7 }| jj||||d | jd urc|t 7 }| jdkr7|tdd7 }d S | jdkr^|tdd7 }|tdd7 }|tdd7 }|tdd7 }d S t| jd S )Nr  r  r  r  r0  r2  )	rb   r   r   r   r!  r   r"  r   r0   r   r%   r%   r&   r   9  s   



z*ASTTrailingTypeSpecName.describe_signatureN)rb   r*   r!  r   r"  r#  r+   r,   r   r   r   r   r   r   r"   r#   r$   r6   r>   rE   r   r)   rZ   rK   r   r%   r%   r%   r&   r     s    


	

r   c                   @  sP   e Zd Z	d&d'dd	Zd(ddZd)ddZ	d*d+ddZd,ddZd-d$d%ZdS ).ASTFunctionParameterFarg9ASTTypeWithInit | ASTTemplateParamConstrainedTypeWithInitellipsisr9   r+   r,   c                 C  r   r;   )r(  r*  )r5   r(  r*  r%   r%   r&   r6   M  r   zASTFunctionParameter.__init__r7   r8   c                 C  r   r;   )r.   r'  r<   r(  r*  r=   r%   r%   r&   r>   R  r   zASTFunctionParameter.__eq__r@   c                 C  r   r;   )rC   r(  r*  rD   r%   r%   r&   rE   W  r^   zASTFunctionParameter.__hash__NrP   
objectTyper#  rd   Symbol | Noner*   c                 C  s,   |r|j jj|ddS | jrdS | j|S )NFprefixedr  )parentr   rZ   r*  r(  r5   rP   r+  rd   r%   r%   r&   rZ   Z  s
   zASTFunctionParameter.get_idrG   r   c                 C  s   | j rdS || jS Nr1  )r*  r(  rJ   r%   r%   r&   rK   g  s   
zASTFunctionParameter._stringifyr_   r   r`   ra   r   r   c                 C  s:   t | | jr|tdd7 }d S | jj||||d d S )Nr1  r  )r   r*  r   r   r(  r   r   r%   r%   r&   r   m  s   z'ASTFunctionParameter.describe_signatureF)r(  r)  r*  r9   r+   r,   r   r   NNrP   r@   r+  r#  rd   r,  r+   r*   r   r   r  r%   r%   r%   r&   r'  L  s    


r'  c                   @  >   e Zd ZdddZdd
dZd ddZd!ddZd"ddZdS )#ASTNoexceptSpecr9  r*  r+   r,   c                 C  r   r;   r:  r;  r%   r%   r&   r6   w  rF   zASTNoexceptSpec.__init__r7   r8   r9   c                 C  r:   r;   )r.   r6  r<   r9  r=   r%   r%   r&   r>   z  r?   zASTNoexceptSpec.__eq__r@   c                 C  rA   r;   r<  rD   r%   r%   r&   rE     rF   zASTNoexceptSpec.__hash__rG   r   r*   c                 C     | j rd|| j  d S dS )Nr  r2  r  r:  rJ   r%   r%   r&   rK     s   zASTNoexceptSpec._stringifyr_   r   r`   ra   r   rd   r   c                 C  sP   |t dd7 }| jr&|t dd7 }| j|d|| |t dd7 }d S d S )Nr  r0  rf   r2  r   r   r9  r   r   r   r%   r%   r&   r     s   z"ASTNoexceptSpec.describe_signatureNr9  r*  r+   r,   r   r   r   r   r"   r#   r$   r6   r>   rE   rK   r   r%   r%   r%   r&   r6  v  s    



r6  c                   @  s`   e Zd Zd2ddZd3ddZd4ddZed5ddZd6d d!Zd6d"d#Z	d7d&d'Z
d8d/d0Zd1S )9ASTParametersQualifiersr
  list[ASTFunctionParameter]volatiler9   constrefQualr#  exceptionSpecr6  trailingReturnrt  overridefinalattrsr   initializerr+   r,   c                 C  s@   || _ || _|| _|| _|| _|| _|| _|| _|	| _|
| _	d S r;   )
r
  r=  r>  r?  r@  rA  rB  rC  rD  rE  )r5   r
  r=  r>  r?  r@  rA  rB  rC  rD  rE  r%   r%   r&   r6     s   
z ASTParametersQualifiers.__init__r7   r8   c                 C  s   t |tstS | j|jkoB| j|jkoB| j|jkoB| j|jkoB| j|jkoB| j|jkoB| j	|j	koB| j
|j
koB| j|jkoB| j|jkS r;   )r.   r;  r<   r
  r=  r>  r?  r@  rA  rB  rC  rD  rE  r=   r%   r%   r&   r>     s*   









	zASTParametersQualifiers.__eq__r@   c                 C  s0   t | j| j| j| j| j| j| j| j| j	| j
f
S r;   )rC   r
  r=  r>  r?  r@  rA  rB  rC  rD  rE  rD   r%   r%   r&   rE     s   z ASTParametersQualifiers.__hash__c                 C  rL   r;   )r
  rD   r%   r%   r&   function_params  r%  z'ASTParametersQualifiers.function_paramsrP   r*   c                 C  sl   g }| j r
|d | jr|dkr|d n|d | jdkr'|d n
| jdkr1|d d	|S )
NVrR   CKz&&O&Rrg   )r=  r|   r>  r?  r   r   r%   r%   r&   get_modifiers_id  s   





z(ASTParametersQualifiers.get_modifiers_idc                   sd    dkrt | jdkrdS dd fdd| jD  S t | jdkr%dS d fd	d| jD S )
NrR   r   rg   __rZ  c                 3  r   r;   r   r  r   r%   r&   r     r   z7ASTParametersQualifiers.get_param_id.<locals>.<genexpr>vc                 3  r   r;   r   r  r   r%   r&   r     r   )r/   r
  r   rY   r%   r   r&   get_param_id  s   z$ASTParametersQualifiers.get_param_idrG   r   c                 C  s2  g }| d d}| jD ]}|s| d d}| t| q| d | jr,| d | jr4| d | jrB| d | | j | jrR| d | || j | jrb| d	 | || j | jrj| d
 | j	rr| d t
| jdkr| d | || j | jr| d | | j d|S )Nr0  Tr  Fr2  z	 volatilez constr   z ->  finalz	 overrider    = rg   )r|   r
  r*   r=  r>  r?  r@  rA  rC  rB  r/   rD  rE  r   )r5   rG   r   r   r  r%   r%   r&   rK     sB   













z"ASTParametersQualifiers._stringifyr_   r   r`   ra   r   rd   r   c                 C  sl  t | d}|}|jrt|tjs|j}q|dd}	 |dkrHt }||d< | jD ]}tjdddd}	|j	|	d||d ||	7 }q+||7 }n3|t
d	d	7 }d}
| jD ]}|
sg|t
d
d
7 }|t 7 }d}
|j	|d||d qU|t
dd7 }ddd}| jr||d | jr||d | jr|t 7 }|t
| j| j7 }| jr|t 7 }| j	|||| | jr|t 7 }|tdd7 }|t 7 }| j	|||| | jr||d | jr||d t| jdkr|t 7 }| j	| | jr4|t 7 }|t
dd7 }|t 7 }| jdv sJ | jdkr(|tdd7 }d S |t| j| j7 }d S d S )NFmulti_line_parameter_listrq   rg   T)noemphrs   r  r0  r  rf   r2  r_   r   re   r*   r+   r,   c                 S  s    | t  7 } | t ||7 } d S r;   r   r   r   r_   re   r%   r%   r&   	_add_anno  s   z=ASTParametersQualifiers.describe_signature.<locals>._add_annor=  r>  r`  rC  rB  r   =)0r  defaultrY  r_   r   re   r*   r+   r,   )r   r/  r.   r   r   getdesc_parameterlistr
  desc_parameterr   r   r   r=  r>  r?  r@  rA  r6  rC  rB  r/   rD  rE  r
  r   )r5   r_   r`   ra   rd   rS  	test_node	paramlistr(  rs   r   rW  r%   r%   r&   r     st   








z*ASTParametersQualifiers.describe_signatureN)r
  r<  r=  r9   r>  r9   r?  r#  r@  r6  rA  rt  rB  r9   rC  r9   rD  r   rE  r#  r+   r,   r   r   r+   r<  r   r   r   )r"   r#   r$   r6   r>   rE   r   rF  rM  rP  rK   r   r%   r%   r%   r&   r;    s    





#r;  c                   @  s>   e Zd ZdddZdd
dZdddZd ddZd!ddZdS )"ASTExplicitSpecr9  r*  r+   r,   c                 C  r   r;   r:  r;  r%   r%   r&   r6   >  rF   zASTExplicitSpec.__init__r7   r8   r9   c                 C  r:   r;   )r.   rb  r<   r9  r=   r%   r%   r&   r>   A  r?   zASTExplicitSpec.__eq__r@   c                 C  rA   r;   r<  rD   r%   r%   r&   rE   F  rF   zASTExplicitSpec.__hash__rG   r   r*   c                 C  s>   dg}| j d ur|d ||| j  |d d|S )Nexplicitr0  r2  rg   )r9  r|   r   r   r%   r%   r&   rK   I  s   



zASTExplicitSpec._stringifyr_   r   ra   r   rd   r   c                 C  sT   |t dd7 }| jd ur(|t dd7 }| j|d|| |t dd7 }d S d S )Nrc  r0  rf   r2  r8  )r5   r_   ra   rd   r%   r%   r&   r   Q  s   
z"ASTExplicitSpec.describe_signatureNr9  r   r   r   r_   r   ra   r   rd   r   r+   r,   r:  r%   r%   r%   r&   rb  =  s    



rb  c                   @  sH   e Zd Zd+ddZd,ddZd-ddZd.ddZd/d d!Zd0d(d)Zd*S )1ASTDeclSpecsSimplestorager*   threadLocalr9   inlinevirtualexplicitSpecASTExplicitSpec | None	consteval	constexpr	constinitr=  r>  friendrD  r   r+   r,   c                 C  sL   || _ || _|| _|| _|| _|| _|| _|| _|	| _|
| _	|| _
|| _d S r;   )rf  rg  rh  ri  rj  rl  rm  rn  r=  r>  ro  rD  )r5   rf  rg  rh  ri  rj  rl  rm  rn  r=  r>  ro  rD  r%   r%   r&   r6   [  s   
zASTDeclSpecsSimple.__init__r7   r8   c                 C  s   t |tstS | j|jkoN| j|jkoN| j|jkoN| j|jkoN| j|jkoN| j|jkoN| j	|j	koN| j
|j
koN| j|jkoN| j|jkoN| j|jkoN| j|jkS r;   )r.   re  r<   rf  rg  rh  ri  rj  rl  rm  rn  r=  r>  ro  rD  r=   r%   r%   r&   r>   m  s2   









	


zASTDeclSpecsSimple.__eq__r@   c                 C  s8   t | j| j| j| j| j| j| j| j| j	| j
| j| jfS r;   )rC   rf  rg  rh  ri  rj  rl  rm  rn  r=  r>  ro  rD  rD   r%   r%   r&   rE     s   zASTDeclSpecsSimple.__hash__c                 C  s   |s| S t | jp
|j| jp|j| jp|j| jp|j| jp|j| jp#|j| jp(|j| jp-|j| j	p2|j	| j
p7|j
| jp<|j| j|j S r;   )re  rf  rg  rh  ri  rj  rl  rm  rn  r=  r>  ro  rD  r=   r%   r%   r&   	mergeWith  s   










zASTDeclSpecsSimple.mergeWithrG   r   c                 C  s   g }t | jdkr||| j | jr|| j | jr"|d | jr*|d | jr2|d | jr:|d | jrE||| j | j	rM|d | j
rU|d | jr]|d | jre|d	 | jrm|d
 d|S )Nr   thread_localrh  ro  ri  rl  rm  rn  r=  r>  r   )r/   rD  r|   rf  rg  rh  ro  ri  rj  rl  rm  rn  r=  r>  r   r   r%   r%   r&   rK     s4   









zASTDeclSpecsSimple._stringifyr_   r   ra   r   rd   r   c                   s   | j | t| j dk d fdd	}| jr||| j | jr%||d
 | jr-||d | jr5||d | jr=||d | jrR rH|t	
 7 }| j||| d | jrZ||d | jrb||d | jrj||d | jrr||d | jr|||d d S d S )Nr   r_   r   re   r*   r+   r9   c                   s$    r| t  7 } | t ||7 } dS r  rU  rV  addSpacer%   r&   _add  s   z3ASTDeclSpecsSimple.describe_signature.<locals>._addrq  rh  ro  ri  Trl  rm  rn  r=  r>  )r_   r   re   r*   r+   r9   )rD  r   r/   rf  rg  rh  ro  ri  rj  r   r   rl  rm  rn  r=  r>  )r5   r_   ra   rd   rt  r%   rr  r&   r     s:   







z%ASTDeclSpecsSimple.describe_signatureN)rf  r*   rg  r9   rh  r9   ri  r9   rj  rk  rl  r9   rm  r9   rn  r9   r=  r9   r>  r9   ro  r9   rD  r   r+   r,   r   r   )r7   re  r+   re  r   rd  )	r"   r#   r$   r6   r>   rE   rp  rK   r   r%   r%   r%   r&   re  Z  s    




re  c                   @  sH   e Z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$S )+ASTDeclSpecsouterr*   	leftSpecsre  
rightSpecstrailingr  r+   r,   c                 C  s,   || _ || _|| _| j| j| _|| _d S r;   )rv  rw  rx  rp  allSpecstrailingTypeSpec)r5   rv  rw  rx  ry  r%   r%   r&   r6     s
   
zASTDeclSpecs.__init__r7   r8   r9   c                 C  r  r;   )r.   ru  r<   rv  rw  rx  r{  r=   r%   r%   r&   r>     r  zASTDeclSpecs.__eq__r@   c                 C  r  r;   )rC   rv  rw  rx  r{  rD   r%   r%   r&   rE     s   zASTDeclSpecs.__hash__rP   c                 C  s   |dkr&g }| | j| | jjr| d | jjr!| d d|S g }| jjr1| d | jjr:| d | jd urH| | j| d|S )NrR   rG  rH  rg   rI  )r|   r{  rZ   rz  r=  r>  r   r   r%   r%   r&   rZ     s    






zASTDeclSpecs.get_idrG   r   c                 C  s   g }|| j }t|dkr|| | jrCt|dkr |d ||| j t| j}t|dkrCt|dkr>|d || d|S Nr   r   rg   )rw  r/   r|   r{  r*   rx  r   )r5   rG   r   lrr%   r%   r&   rK   	  s   






zASTDeclSpecs._stringifyr_   r   r`   ra   r   rd   r   c                 C  s   t | t|}| j||| t||k}| jrP|r!|t 7 }t|}| jj||||d t||k}tt| jdkrR|rF|t 7 }| j||| d S d S d S )Nr  r   )	r   r/   rw  r   r{  r   r   r*   rx  )r5   r_   r`   ra   rd   numChildrenrs  r%   r%   r&   r   !	  s$   zASTDeclSpecs.describe_signatureN)
rv  r*   rw  re  rx  re  ry  r  r+   r,   r   r   r   r   r   r  r%   r%   r%   r&   ru    s    





ru  c                   @  r7  )'ASTArraysizer   r+   r,   c                 C  r   r;   r  )r5   r  r%   r%   r&   r6   :	  rF   zASTArray.__init__r7   r8   r9   c                 C  r:   r;   )r.   r  r<   r  r=   r%   r%   r&   r>   =	  r?   zASTArray.__eq__r@   c                 C  rA   r;   )rC   r  rD   r%   r%   r&   rE   B	  rF   zASTArray.__hash__rG   r   r*   c                 C  r7  )NrT  rU  r  r  rJ   r%   r%   r&   rK   E	  s   zASTArray._stringifyrP   c                 C  sN   |dkrdS |dkr| j rdt| j  d S dS | j r%d| j | d S dS )NrR   Ar   r  A_)r  r*   rZ   rY   r%   r%   r&   rZ   K	  s   zASTArray.get_idr_   r   r`   ra   r   rd   r   c                 C  sD   t | |tdd7 }| jr| j|d|| |tdd7 }d S )NrT  rf   rU  )r   r   r   r  r   r   r%   r%   r&   r   X	  s
   zASTArray.describe_signatureN)r  r   r+   r,   r   r   r   r   r   r   r%   r%   r%   r&   r  9	  s    




r  c                   @  s   e Zd Zed+ddZejd,ddZed-d	d
Zed.ddZed/ddZd-ddZ	d0ddZ
d0ddZd0ddZd1ddZd-dd Zd2d(d)Zd*S )3ASTDeclaratorr+   r   c                 C  r   r;   r   rD   r%   r%   r&   r)   b	  r   zASTDeclarator.namer)   r,   c                 C  r   r;   r   r4   r%   r%   r&   r)   f	  r   r9   c                 C  r   r;   r   rD   r%   r%   r&   isPackj	  r   zASTDeclarator.isPackr<  c                 C  r   r;   r   rD   r%   r%   r&   rF  n	  r   zASTDeclarator.function_paramsrt  c                 C  r   r;   r   rD   r%   r%   r&   rA  r	  r   zASTDeclarator.trailingReturnc                 C  r   r;   r   rD   r%   r%   r&   require_space_after_declSpecsv	  r   z+ASTDeclarator.require_space_after_declSpecsrP   r@   r*   c                 C  r   r;   r   rY   r%   r%   r&   rM  y	  r   zASTDeclarator.get_modifiers_idc                 C  r   r;   r   rY   r%   r%   r&   rP  |	  r   zASTDeclarator.get_param_idc                 C  r   r;   r   rY   r%   r%   r&   get_ptr_suffix_id	  r   zASTDeclarator.get_ptr_suffix_idreturnTypeIdc                 C  r   r;   r   r5   rP   r  r%   r%   r&   get_type_id	  r   zASTDeclarator.get_type_idc                 C  r   r;   r   rD   r%   r%   r&   is_function_type	  r   zASTDeclarator.is_function_typer_   r   r`   ra   r   rd   r   c                 C  r   r;   r   r   r%   r%   r&   r   	  r   z ASTDeclarator.describe_signatureNr   rL  r   ra  r+   rt  r   rP   r@   r  r*   r+   r*   r   )r"   r#   r$   r   r)   setterr  rF  rA  r  rM  rP  r  r  r  r   r%   r%   r%   r&   r  a	  s$    





r  c                   @  s   e Zd Zd<d	d
Zd=ddZd>ddZed?ddZejd@ddZedAddZ	edBddZ
edCddZdDd!d"ZdDd#d$ZdDd%d&ZdEd(d)ZdAd*d+ZdAd,d-ZdFd0d1ZdGd9d:Zd;S )HASTDeclaratorNameParamQualdeclIdr   arrayOpslist[ASTArray]	paramQualr;  r+   r,   c                 C  r  r;   )r  r  r  )r5   r  r  r  r%   r%   r&   r6   	  s   
z#ASTDeclaratorNameParamQual.__init__r7   r8   r9   c                 C  r   r;   )r.   r  r<   r  r  r  r=   r%   r%   r&   r>   	  r   z!ASTDeclaratorNameParamQual.__eq__r@   c                 C  r   r;   )rC   r  r  r  rD   r%   r%   r&   rE   	  r   z#ASTDeclaratorNameParamQual.__hash__c                 C  rL   r;   r  rD   r%   r%   r&   r)   	  r%  zASTDeclaratorNameParamQual.namer)   c                 C  r   r;   r  r4   r%   r%   r&   r)   	  rH  c                 C  r   r   r%   rD   r%   r%   r&   r  	  r   z!ASTDeclaratorNameParamQual.isPackr<  c                 C     | j jS r;   )r  rF  rD   r%   r%   r&   rF  	     z*ASTDeclaratorNameParamQual.function_paramsrt  c                 C  r  r;   )r  rA  rD   r%   r%   r&   rA  	  r  z)ASTDeclaratorNameParamQual.trailingReturnrP   r*   c                 C  s   | j r	| j |S td|  )Nz,This should only be called on a function: %s)r  rM  r}   rY   r%   r%   r&   rM  	  s   z+ASTDeclaratorNameParamQual.get_modifiers_idc                 C  s   | j r	| j |S dS r  )r  rP  rY   r%   r%   r&   rP  	  s   z'ASTDeclaratorNameParamQual.get_param_idc                   r  )Nrg   c                 3  r   r;   r   r  r   r%   r&   r   	  r   z?ASTDeclaratorNameParamQual.get_ptr_suffix_id.<locals>.<genexpr>)r   r  rY   r%   r   r&   r  	  r  z,ASTDeclaratorNameParamQual.get_ptr_suffix_idr  c                 C  sz   |dksJ g }| | | | jr3| | | | d | | | | | | d n| | d|S )Nr   Fr   rg   )r|   r  r  rM  rP  r   r5   rP   r  r   r%   r%   r&   r  	  s   



z&ASTDeclaratorNameParamQual.get_type_idc                 C  
   | j d uS r;   r  rD   r%   r%   r&   r  	  rF   z8ASTDeclaratorNameParamQual.require_space_after_declSpecsc                 C  r  r;   )r  rD   r%   r%   r&   r  	  rF   z+ASTDeclaratorNameParamQual.is_function_typerG   r   c                   sT   g }| j r| | j  | fdd| jD  | jr%| | j d|S )Nc                 3  rw  r;   r%   )r   r+  ry  r%   r&   r   	  rz  z8ASTDeclaratorNameParamQual._stringify.<locals>.<genexpr>rg   )r  r|   r   r  r  r   r   r%   ry  r&   rK   	  s   
z%ASTDeclaratorNameParamQual._stringifyr_   r   r`   ra   r   rd   r   c                 C  s\   t | | jr| j|||| | jD ]
}||||| q| jr,| j|||| d S d S r;   )r   r  r   r  r  )r5   r_   r`   ra   rd   r+  r%   r%   r&   r   	  s   
z-ASTDeclaratorNameParamQual.describe_signatureN)r  r   r  r  r  r;  r+   r,   r   r   r   rL  r   ra  r  r   r  r   r   )r"   r#   r$   r6   r>   rE   r   r)   r  r  rF  rA  rM  rP  r  r  r  r  rK   r   r%   r%   r%   r&   r  	  s,    


	






	r  c                   @  s   e Zd Zd-ddZd.ddZd/ddZed0ddZejd1ddZd2ddZ	d2ddZ
d3ddZd3ddZd4d!d"Zd5d*d+Zd,S )6ASTDeclaratorNameBitFieldr  r   r  r   r+   r,   c                 C  r   r;   )r  r  )r5   r  r  r%   r%   r&   r6   	  r   z"ASTDeclaratorNameBitField.__init__r7   r8   r9   c                 C  r   r;   )r.   r  r<   r  r  r=   r%   r%   r&   r>   	  r   z ASTDeclaratorNameBitField.__eq__r@   c                 C  r   r;   )rC   r  r  rD   r%   r%   r&   rE   	  r^   z"ASTDeclaratorNameBitField.__hash__c                 C  rL   r;   r  rD   r%   r%   r&   r)   	  r%  zASTDeclaratorNameBitField.namer)   c                 C  r   r;   r  r4   r%   r%   r&   r)   
  rH  rP   r*   c                 C  r   r  r%   rY   r%   r%   r&   rP  
  r   z&ASTDeclaratorNameBitField.get_param_idc                 C  r   r  r%   rY   r%   r%   r&   r  
  r   z+ASTDeclaratorNameBitField.get_ptr_suffix_idc                 C  r  r;   r  rD   r%   r%   r&   r  
  rF   z7ASTDeclaratorNameBitField.require_space_after_declSpecsc                 C  r   r   r%   rD   r%   r%   r&   r  
  r   z*ASTDeclaratorNameBitField.is_function_typerG   r   c                 C  s>   g }| j r||| j  |d ||| j d|S )Nr  rg   )r  r|   r  r   r   r%   r%   r&   rK   
  s   

z$ASTDeclaratorNameBitField._stringifyr_   r   r`   ra   r   rd   r   c                 C  s^   t | | jr| j|||| |t 7 }|tdd7 }|t 7 }| j|||| d S )Nr  )r   r  r   r   r   r   r  r   r%   r%   r&   r   
  s   z,ASTDeclaratorNameBitField.describe_signatureN)r  r   r  r   r+   r,   r   r   r   rL  r   r   r   r   )r"   r#   r$   r6   r>   rE   r   r)   r  rP  r  r  r  rK   r   r%   r%   r%   r&   r  	  s    







r  c                   @  s   e Zd Zd=d
dZd>ddZd?ddZed@ddZejdAddZedBddZ	edCddZ
edDddZdBd d!ZdEd%d&ZdFd(d)ZdFd*d+ZdFd,d-ZdGd/d0ZdBd1d2ZdHd:d;Zd<S )IASTDeclaratorPtrnextr  r=  r9   r>  rD  r   r+   r,   c                 C  s$   |sJ || _ || _|| _|| _d S r;   )r  r=  r>  rD  )r5   r  r=  r>  rD  r%   r%   r&   r6   '
  s
   
zASTDeclaratorPtr.__init__r7   r8   c                 C  r  r;   )r.   r  r<   r  r=  r>  rD  r=   r%   r%   r&   r>   /
  r  zASTDeclaratorPtr.__eq__r@   c                 C  r  r;   )rC   r  r=  r>  rD  rD   r%   r%   r&   rE   9
  r  zASTDeclaratorPtr.__hash__r   c                 C  r  r;   r  r)   rD   r%   r%   r&   r)   <
  r  zASTDeclaratorPtr.namer)   c                 C     || j _d S r;   r  r4   r%   r%   r&   r)   @
  r   c                 C  r  r;   r  r  rD   r%   r%   r&   r  D
  r  zASTDeclaratorPtr.isPackr<  c                 C  r  r;   r  rF  rD   r%   r%   r&   rF  H
  r  z ASTDeclaratorPtr.function_paramsrt  c                 C  r  r;   r  rA  rD   r%   r%   r&   rA  L
  r  zASTDeclaratorPtr.trailingReturnc                 C  
   | j  S r;   r  r  rD   r%   r%   r&   r  P
  rF   z.ASTDeclaratorPtr.require_space_after_declSpecsrG   r   r*   c                 C  s   dg}| || j t| jdkr| js| jr| d | jr%| d | jr5| jr0| d | d | jsB| jsBt| jdkrL| j rL| d | || j d|S )N*r   r   r=  r>  rg   )r|   rD  r/   r=  r>  r  r  r   r   r%   r%   r&   rK   S
  s   






zASTDeclaratorPtr._stringifyrP   c                 C  r@  r;   r  rM  rY   r%   r%   r&   rM  d
  r   z!ASTDeclaratorPtr.get_modifiers_idc                 C  r@  r;   r  rP  rY   r%   r%   r&   rP  g
  r   zASTDeclaratorPtr.get_param_idc                 C  s   |dkr%dg}| j r|d | jr|d || j| d|S | j|g}|d | j r9|d | jrA|d d|S )NrR   PrG  rH  rg   )r=  r|   r>  r  r  r   r   r%   r%   r&   r  j
  s   






z"ASTDeclaratorPtr.get_ptr_suffix_idr  c                 C  sF   dg}| j r|d | jr|d || | jj|d|dS )Nr  rG  rH  rg   r  )r=  r|   r>  r  r  r   r  r%   r%   r&   r  |
  s   


zASTDeclaratorPtr.get_type_idc                 C  r  r;   r  r  rD   r%   r%   r&   r  
  rF   z!ASTDeclaratorPtr.is_function_typer_   r   r`   ra   r   rd   r   c                 C  s   t | |tdd7 }| j| t| jdkr%| js| jr%|t 7 }dd	d
}| jr2||d | jrC| jr>|t 7 }||d | jsP| jsPt| jdkr[| j	
 r[|t 7 }| j	|||| d S )Nr  r   r_   r   re   r*   r+   r,   c                 S     | t ||7 } d S r;   r   rV  r%   r%   r&   rW  
  r   z6ASTDeclaratorPtr.describe_signature.<locals>._add_annor=  r>  r[  )r   r   r   rD  r   r/   r=  r>  r   r  r  r5   r_   r`   ra   rd   rW  r%   r%   r&   r   
  s    



z#ASTDeclaratorPtr.describe_signatureN)
r  r  r=  r9   r>  r9   rD  r   r+   r,   r   r   r   rL  r   ra  r  r   r   r  r   r"   r#   r$   r6   r>   rE   r   r)   r  r  rF  rA  r  rK   rM  rP  r  r  r  r   r%   r%   r%   r&   r  &
  s,    











r  c                   @  s   e Zd Zd;ddZd<ddZd=ddZed>ddZejd?ddZed@ddZ	edAddZ
edBddZd@ddZdCd#d$ZdDd&d'ZdDd(d)ZdDd*d+ZdEd-d.Zd@d/d0ZdFd8d9Zd:S )GASTDeclaratorRefr  r  rD  r   r+   r,   c                 C     |sJ || _ || _d S r;   )r  rD  )r5   r  rD  r%   r%   r&   r6   
     
zASTDeclaratorRef.__init__r7   r8   r9   c                 C  r   r;   )r.   r  r<   r  rD  r=   r%   r%   r&   r>   
  r   zASTDeclaratorRef.__eq__r@   c                 C  r   r;   )rC   r  rD  rD   r%   r%   r&   rE   
  r^   zASTDeclaratorRef.__hash__r   c                 C  r  r;   r  rD   r%   r%   r&   r)   
  r  zASTDeclaratorRef.namer)   c                 C  r  r;   r  r4   r%   r%   r&   r)   
  r   c                 C  r  r;   r  rD   r%   r%   r&   r  
  r  zASTDeclaratorRef.isPackr<  c                 C  r  r;   r  rD   r%   r%   r&   rF  
  r  z ASTDeclaratorRef.function_paramsrt  c                 C  r  r;   r  rD   r%   r%   r&   rA  
  r  zASTDeclaratorRef.trailingReturnc                 C  r  r;   r  rD   r%   r%   r&   r  
  rF   z.ASTDeclaratorRef.require_space_after_declSpecsrG   r   r*   c                 C  sR   dg}| || j t| jdkr| j r| d | || j d|S )NrK  r   r   rg   )r|   rD  r/   r  r  r   r   r%   r%   r&   rK   
  s   

zASTDeclaratorRef._stringifyrP   c                 C  r@  r;   r  rY   r%   r%   r&   rM  
  r   z!ASTDeclaratorRef.get_modifiers_idc                 C  r@  r;   r  rY   r%   r%   r&   rP  
  r   zASTDeclaratorRef.get_param_idc                 C  (   |dkrd| j | S | j |d S )NrR   rL  r  r  rY   r%   r%   r&   r  
  r  z"ASTDeclaratorRef.get_ptr_suffix_idr  c                 C      |dksJ | j j|d| dS )Nr   rL  r  r  r  r  r%   r%   r&   r  
     zASTDeclaratorRef.get_type_idc                 C  r  r;   r  rD   r%   r%   r&   r  
  rF   z!ASTDeclaratorRef.is_function_typer_   r   r`   ra   r   rd   r   c                 C  s^   t | |tdd7 }| j| t| jdkr$| j r$|t 7 }| j|||| d S )NrK  r   )	r   r   r   rD  r   r/   r  r  r   r   r%   r%   r&   r   
  s   z#ASTDeclaratorRef.describe_signatureN)r  r  rD  r   r+   r,   r   r   r   rL  r   ra  r  r   r   r  r   r  r%   r%   r%   r&   r  
  s,    









r  c                   @  s   e Zd Zd9ddZd:d
dZd;ddZed<ddZejd=ddZed>ddZ	ed?ddZ
ed@ddZd@ddZdAd!d"ZdBd$d%ZdBd&d'ZdBd(d)ZdCd+d,Zd@d-d.ZdDd6d7Zd8S )EASTDeclaratorParamPackr  r  r+   r,   c                 C     |sJ || _ d S r;   )r  )r5   r  r%   r%   r&   r6   
     
zASTDeclaratorParamPack.__init__r7   r8   r9   c                 C  r:   r;   )r.   r  r<   r  r=   r%   r%   r&   r>   
  r?   zASTDeclaratorParamPack.__eq__r@   c                 C  rA   r;   )rC   r  rD   r%   r%   r&   rE   
  rF   zASTDeclaratorParamPack.__hash__r   c                 C  r  r;   r  rD   r%   r%   r&   r)   
  r  zASTDeclaratorParamPack.namer)   c                 C  r  r;   r  r4   r%   r%   r&   r)   
  r   r<  c                 C  r  r;   r  rD   r%   r%   r&   rF  
  r  z&ASTDeclaratorParamPack.function_paramsrt  c                 C  r  r;   r  rD   r%   r%   r&   rA    r  z%ASTDeclaratorParamPack.trailingReturnc                 C  r   r  r%   rD   r%   r%   r&   r    r   zASTDeclaratorParamPack.isPackc                 C  r   r   r%   rD   r%   r%   r&   r    r   z4ASTDeclaratorParamPack.require_space_after_declSpecsrG   r   r*   c                 C  s"   || j }| j jrd| }d| S )Nr   r1  r  r   r%   r%   r&   rK     s   
z!ASTDeclaratorParamPack._stringifyrP   c                 C  r@  r;   r  rY   r%   r%   r&   rM    r   z'ASTDeclaratorParamPack.get_modifiers_idc                 C  r@  r;   r  rY   r%   r%   r&   rP    r   z#ASTDeclaratorParamPack.get_param_idc                 C  r  )NrR   Dpr  rY   r%   r%   r&   r    r  z(ASTDeclaratorParamPack.get_ptr_suffix_idr  c                 C  r  )Nr   r  r  r  r  r%   r%   r&   r     r  z"ASTDeclaratorParamPack.get_type_idc                 C  r  r;   r  rD   r%   r%   r&   r  %  rF   z'ASTDeclaratorParamPack.is_function_typer_   r   r`   ra   r   rd   r   c                 C  sB   t | |tdd7 }| jjr|t 7 }| j|||| d S r1  )r   r   r   r  r)   r   r   r   r%   r%   r&   r   (  s
   z)ASTDeclaratorParamPack.describe_signatureN)r  r  r+   r,   r   r   r   rL  ra  r  r   r   r   r  r   )r"   r#   r$   r6   r>   rE   r   r)   r  rF  rA  r  r  rK   rM  rP  r  r  r  r   r%   r%   r%   r&   r  
  s,    









r  c                   @  s   e Zd Zd<d
dZd=ddZd>ddZed?ddZejd@ddZedAddZ	edBddZ
edCddZdAdd ZdDd$d%ZdEd'd(ZdEd)d*ZdEd+d,ZdFd.d/ZdAd0d1ZdGd9d:Zd;S )HASTDeclaratorMemPtr	classNamer   r>  r9   r=  r  r  r+   r,   c                 C  s,   |sJ |sJ || _ || _|| _|| _d S r;   )r  r>  r=  r  )r5   r  r>  r=  r  r%   r%   r&   r6   2  s   
zASTDeclaratorMemPtr.__init__r7   r8   c                 C  r  r;   )r.   r  r<   r  r>  r=  r  r=   r%   r%   r&   r>   ;  r  zASTDeclaratorMemPtr.__eq__r@   c                 C  r  r;   )rC   r  r>  r=  r  rD   r%   r%   r&   rE   E  r  zASTDeclaratorMemPtr.__hash__c                 C  r  r;   r  rD   r%   r%   r&   r)   H  r  zASTDeclaratorMemPtr.namer)   c                 C  r  r;   r  r4   r%   r%   r&   r)   L  r   c                 C  r  r;   r  rD   r%   r%   r&   r  P  r  zASTDeclaratorMemPtr.isPackr<  c                 C  r  r;   r  rD   r%   r%   r&   rF  T  r  z#ASTDeclaratorMemPtr.function_paramsrt  c                 C  r  r;   r  rD   r%   r%   r&   rA  X  r  z"ASTDeclaratorMemPtr.trailingReturnc                 C  r   r  r%   rD   r%   r%   r&   r  \  r   z1ASTDeclaratorMemPtr.require_space_after_declSpecsrG   r   r*   c                 C  s|   g }| || j | d | jr| d | jr'| jr"| d | d | j r1| d | || j d|S )Nz::*r=  r   r>  rg   )r|   r  r=  r>  r  r  r   r   r%   r%   r&   rK   _  s   






zASTDeclaratorMemPtr._stringifyrP   c                 C     |dkrt | j|S NrR   )r   r  rM  rY   r%   r%   r&   rM  n     z$ASTDeclaratorMemPtr.get_modifiers_idc                 C  r  r  )r   r  rP  rY   r%   r%   r&   rP  s  r  z ASTDeclaratorMemPtr.get_param_idc                 C  s   |dkrt tr  )r   r   r  r  rY   r%   r%   r&   r  x  r  z%ASTDeclaratorMemPtr.get_ptr_suffix_idr  c                 C  sZ   |dksJ d}| j r|d7 }| jr|d7 }|d7 }|| j|7 }||7 }| j||S )Nr   rg   rG  rI  M)r=  r>  r  rZ   r  r  )r5   rP   r  nextReturnTypeIdr%   r%   r&   r  ~  s   zASTDeclaratorMemPtr.get_type_idc                 C  r  r;   r  rD   r%   r%   r&   r    rF   z$ASTDeclaratorMemPtr.is_function_typer_   r   r`   ra   r   rd   r   c                 C  s   t | | j|d|| |tdd7 }|tdd7 }dd
d}| jr*||d | jr;| jr6|t 7 }||d | j	 rF|t 7 }| j|||| d S )Nrf   r   r  r_   r   re   r*   r+   r,   c                 S  r  r;   r   rV  r%   r%   r&   rW    r   z9ASTDeclaratorMemPtr.describe_signature.<locals>._add_annor=  r>  r[  )
r   r  r   r   r   r=  r>  r   r  r  r  r%   r%   r&   r     s   



z&ASTDeclaratorMemPtr.describe_signatureN)
r  r   r>  r9   r=  r9   r  r  r+   r,   r   r   r   rL  r   ra  r  r   r   r  r   r  r%   r%   r%   r&   r  1  s,    

	








r  c                   @  s   e Zd Zd:ddZd;ddZd<ddZed=ddZejd>ddZed?ddZ	ed@ddZ
edAddZd?ddZdBd"d#ZdCd%d&ZdCd'd(ZdCd)d*ZdDd,d-Zd?d.d/ZdEd7d8Zd9S )FASTDeclaratorPareninnerr  r  r+   r,   c                 C      |sJ |sJ || _ || _d S r;   )r  r  )r5   r  r  r%   r%   r&   r6        
zASTDeclaratorParen.__init__r7   r8   r9   c                 C  r   r;   )r.   r  r<   r  r  r=   r%   r%   r&   r>     r   zASTDeclaratorParen.__eq__r@   c                 C  r   r;   )rC   r  r  rD   r%   r%   r&   rE     r^   zASTDeclaratorParen.__hash__r   c                 C  r  r;   r  r)   rD   r%   r%   r&   r)     r  zASTDeclaratorParen.namer)   c                 C  r  r;   r  r4   r%   r%   r&   r)     r   c                 C  s   | j jp| jjS r;   )r  r  r  rD   r%   r%   r&   r    r  zASTDeclaratorParen.isPackr<  c                 C  r  r;   )r  rF  rD   r%   r%   r&   rF    r  z"ASTDeclaratorParen.function_paramsrt  c                 C  r  r;   )r  rA  rD   r%   r%   r&   rA    r  z!ASTDeclaratorParen.trailingReturnc                 C  r   r  r%   rD   r%   r%   r&   r    r   z0ASTDeclaratorParen.require_space_after_declSpecsrG   r   r*   c                 C  r  r  )r|   r  r  r   r   r%   r%   r&   rK     r  zASTDeclaratorParen._stringifyrP   c                 C  r@  r;   )r  rM  rY   r%   r%   r&   rM    r   z#ASTDeclaratorParen.get_modifiers_idc                 C  r@  r;   )r  rP  rY   r%   r%   r&   rP    r   zASTDeclaratorParen.get_param_idc                 C  s$   |dkrt | j|| j| S r  )r   r  r  r  rY   r%   r%   r&   r    s
   

z$ASTDeclaratorParen.get_ptr_suffix_idr  c                 C  s*   |dksJ | j ||}| jj||dS )Nr   r  )r  r  r  )r5   rP   r  nextIdr%   r%   r&   r    s   zASTDeclaratorParen.get_type_idc                 C  r  r;   )r  r  rD   r%   r%   r&   r    rF   z#ASTDeclaratorParen.is_function_typer_   r   r`   ra   r   rd   r   c                 C  sP   t | |tdd7 }| j|||| |tdd7 }| j|d|| d S )Nr0  r2  rr   )r   r   r   r  r   r  r   r%   r%   r&   r     s
   z%ASTDeclaratorParen.describe_signatureN)r  r  r  r  r+   r,   r   r   r   rL  r   ra  r  r   r   r  r   r  r%   r%   r%   r&   r    s,    









r  c                   @  r7  )'ASTPackExpansionExprr9  r  r+   r,   c                 C  r   r;   r:  r;  r%   r%   r&   r6     rF   zASTPackExpansionExpr.__init__r7   r8   r9   c                 C  r:   r;   )r.   r  r<   r9  r=   r%   r%   r&   r>     r?   zASTPackExpansionExpr.__eq__r@   c                 C  rA   r;   r<  rD   r%   r%   r&   rE     rF   zASTPackExpansionExpr.__hash__rG   r   r*   c                 C  s   || j d S r1  r:  rJ   r%   r%   r&   rK     r[  zASTPackExpansionExpr._stringifyrP   c                 C  s   | j |}d| S )NsprA  r  r%   r%   r&   rZ     s   zASTPackExpansionExpr.get_idr_   r   r`   ra   r   rd   r   c                 C  s&   | j |||| |tdd7 }d S r1  )r9  r   r   r   r   r%   r%   r&   r     s   z'ASTPackExpansionExpr.describe_signatureN)r9  r  r+   r,   r   r   r   r   r   r   r%   r%   r%   r&   r    r  r  c                   @  r  )'ASTParenExprListrr  r  r+   r,   c                 C  r   r;   )rr  r  r%   r%   r&   r6     rF   zASTParenExprList.__init__r7   r8   r9   c                 C  r:   r;   )r.   r  r<   rr  r=   r%   r%   r&   r>     r?   zASTParenExprList.__eq__r@   c                 C  rA   r;   r  rD   r%   r%   r&   rE     rF   zASTParenExprList.__hash__rP   r*   c                   r  )Nzpi%sErg   c                 3  r   r;   r   rp  r   r%   r&   r     r   z*ASTParenExprList.get_id.<locals>.<genexpr>r  rY   r%   r   r&   rZ     r  zASTParenExprList.get_idrG   r   c                   s"    fdd| j D }dd| S )Nc                   s   g | ]} |qS r%   r%   rp  ry  r%   r&   
<listcomp>  s    z/ASTParenExprList._stringify.<locals>.<listcomp>z(%s)r  )rr  r   )r5   rG   rr  r%   ry  r&   rK     s   zASTParenExprList._stringifyr_   r   r`   ra   r   rd   r   c                 C  sr   t | |tdd7 }d}| jD ]}|s$|tdd7 }|t 7 }nd}||||| q|tdd7 }d S )Nr0  Tr  Fr2  )r   r   r   rr  r   r   r  r%   r%   r&   r     s   
z#ASTParenExprList.describe_signatureN)rr  r  r+   r,   r   r   r   r   r   r  r%   r%   r%   r&   r    r  r  c                   @  sB   e Zd Z	d d!dd	Zd"ddZd#ddZd$ddZd%ddZdS )&ASTInitializerTr   r  	hasAssignr9   r+   r,   c                 C  r   r;   r   r  )r5   r   r  r%   r%   r&   r6   /  r   zASTInitializer.__init__r7   r8   c                 C  r   r;   )r.   r  r<   r   r  r=   r%   r%   r&   r>   4  r   zASTInitializer.__eq__r@   c                 C  r   r;   )rC   r   r  rD   r%   r%   r&   rE   9  r^   zASTInitializer.__hash__rG   r   r*   c                 C  s   || j }| jrd| S |S NrR  r  )r5   rG   valr%   r%   r&   rK   <  s   
zASTInitializer._stringifyr_   r   r`   ra   r   rd   r   c                 C  sL   t | | jr|t 7 }|tdd7 }|t 7 }| j|d|| d S )NrX  rf   )r   r  r   r   r   r   r   r   r%   r%   r&   r   C  s   z!ASTInitializer.describe_signatureNT)r   r  r  r9   r+   r,   r   r   r   r   r:  r%   r%   r%   r&   r  .  s    


r  c                   @  s   e Zd Zd4ddZd5ddZd6ddZed7ddZejd8ddZed9ddZ	ed:ddZ
ed;ddZ		d<d=d$d%Zd>d(d)Zd?d*d+Zd@d2d3ZdS )Art  	declSpecsru  declr  r+   r,   c                 C  r  r;   )r  r  )r5   r  r  r%   r%   r&   r6   N  r  zASTType.__init__r7   r8   r9   c                 C  r   r;   )r.   rt  r<   r  r  r=   r%   r%   r&   r>   T  r   zASTType.__eq__r@   c                 C  r   r;   )rC   r  r  rD   r%   r%   r&   rE   Y  r^   zASTType.__hash__r   c                 C  r  r;   r  r)   rD   r%   r%   r&   r)   \  r  zASTType.namer)   c                 C  r  r;   r  r4   r%   r%   r&   r)   `  r   c                 C  r  r;   )r  r  rD   r%   r%   r&   r  d  r  zASTType.isPackr<  c                 C  r  r;   )r  rF  rD   r%   r%   r&   rF  h  r  zASTType.function_paramsc                 C  r  r;   )r  rA  rD   r%   r%   r&   rA  l  r  zASTType.trailingReturnNrP   r+  r#  rd   r,  r*   c           	      C  s  |dkrvg }|rO|dkr<| | | | | j| | | j| | jjjs6| jj	r;| jj	jr;| d n5|dkrK| | | n&t
|| j rVt| | j| | | j| | | j| d|S g }|r|dkr| j|}| | || |dkr|jj}|d ur| j|}| jr| j|}n| j|}| | | | | | j| n%|dkr| | | nt
|| j|}| j||}| | d|S )NrR   functionCEr  rg      )r|   get_full_nested_namerZ   r  rP  rM  r  rw  rm  rx  r0   r  r   r  r   r   r   rA  r  )	r5   rP   r+  rd   r   r   templtypeIdr  r%   r%   r&   rZ   p  sZ   







zASTType.get_idrG   r   c                 C  sR   g }|| j }|| | j rt|dkr|d ||| j d|S r|  )r  r|   r  r  r/   r   )r5   rG   r   r  r%   r%   r&   rK     s   



zASTType._stringifyc                 C  s   | j jrdS dS )Ntypedefr  )r  r{  rD   r%   r%   r&   get_type_declaration_prefix  s   z#ASTType.get_type_declaration_prefixr_   r   r`   ra   r   r   c                 C  sd   t | | j|d|| | j r!tt| jdkr!|t 7 }|dkr'd}| j|||| d S )Nrf   r   rr   )	r   r  r   r  r  r/   r*   r   r   r   r%   r%   r&   r     s   
zASTType.describe_signature)r  ru  r  r  r+   r,   r   r   r   rL  r   ra  r  r3  r4  r   r   r   )r"   r#   r$   r6   r>   rE   r   r)   r  r  rF  rA  rZ   rK   r  r   r%   r%   r%   r&   rt  M  s(    



6
	rt  c                   @  sh   e Zd Zd*ddZd+ddZd,ddZed-ddZed.ddZ	d/d0ddZ	d1d d!Z
d2d(d)ZdS )3'ASTTemplateParamConstrainedTypeWithInitr  rt  initr+   r,   c                 C  r  r;   r  r  r5   r  r  r%   r%   r&   r6     r  z0ASTTemplateParamConstrainedTypeWithInit.__init__r7   r8   r9   c                 C  r   r;   )r.   r  r<   r  r  r=   r%   r%   r&   r>     r   z.ASTTemplateParamConstrainedTypeWithInit.__eq__r@   c                 C  r   r;   rC   r  r  rD   r%   r%   r&   rE     r^   z0ASTTemplateParamConstrainedTypeWithInit.__hash__r   c                 C  r  r;   r  r)   rD   r%   r%   r&   r)     r  z,ASTTemplateParamConstrainedTypeWithInit.namec                 C  r  r;   r  r  rD   r%   r%   r&   r    r  z.ASTTemplateParamConstrainedTypeWithInit.isPackNrP   r+  r#  rd   r,  r*   c                 C  .   |dksJ |r|j jj|ddS | j|S Nr   Fr-  )r/  r   rZ   r  r0  r%   r%   r&   rZ        z.ASTTemplateParamConstrainedTypeWithInit.get_idrG   r   c                 C  s*   || j }| jr|d7 }||| j7 }|S r  r  r   r%   r%   r&   rK     s
   
z2ASTTemplateParamConstrainedTypeWithInit._stringifyr_   r   r`   ra   r   r   c                 C  sZ   | j |||| | jr+|t 7 }|tdd7 }|t 7 }| j|||| d S d S )NrX  )r  r   r  r   r   r   r   r%   r%   r&   r     s   z:ASTTemplateParamConstrainedTypeWithInit.describe_signature)r  rt  r  rt  r+   r,   r   r   r   r   r3  r4  r   r   r"   r#   r$   r6   r>   rE   r   r)   r  rZ   rK   r   r%   r%   r%   r&   r    s    



r  c                   @  sj   e Zd Zd+ddZd,ddZd-ddZed.ddZed/ddZ		d0d1ddZ	d2d!d"Z
d3d)d*ZdS )4ASTTypeWithInitr  rt  r  r  r+   r,   c                 C  r   r;   r  r  r%   r%   r&   r6     r   zASTTypeWithInit.__init__r7   r8   r9   c                 C  r   r;   )r.   r  r<   r  r  r=   r%   r%   r&   r>     r   zASTTypeWithInit.__eq__r@   c                 C  r   r;   r  rD   r%   r%   r&   rE     r^   zASTTypeWithInit.__hash__r   c                 C  r  r;   r  rD   r%   r%   r&   r)     r  zASTTypeWithInit.namec                 C  r  r;   r  rD   r%   r%   r&   r    r  zASTTypeWithInit.isPackNrP   r+  r#  rd   r,  r*   c                 C  sJ   |dkr| j ||S |dkr| |d | j | S | |S )NmemberrR   rN  )r  rZ   r  r0  r%   r%   r&   rZ   
  s   
zASTTypeWithInit.get_idrG   r   c                 C  s4   g }| || j | jr| || j d|S r  )r|   r  r  r   r   r%   r%   r&   rK     s
   
zASTTypeWithInit._stringifyr_   r   r`   ra   r   r   c                 C  s:   t | | j|||| | jr| j|||| d S d S r;   )r   r  r   r  r   r%   r%   r&   r     s
   z"ASTTypeWithInit.describe_signature)r  rt  r  r  r+   r,   r   r   r   r   r3  r4  r   r   r  r%   r%   r%   r&   r    s    



	r  c                   @  sX   e Zd Zd(ddZd)ddZd*ddZ		d+d,ddZd-ddZd.ddZd/d&d'Z	dS )0ASTTypeUsingr)   r   r  ASTType | Noner+   r,   c                 C  r   r;   )r)   r  )r5   r)   r  r%   r%   r&   r6   #  r   zASTTypeUsing.__init__r7   r8   r9   c                 C  r   r;   )r.   r  r<   r)   r  r=   r%   r%   r&   r>   '  r   zASTTypeUsing.__eq__r@   c                 C  r   r;   )rC   r)   r  rD   r%   r%   r&   rE   ,  r^   zASTTypeUsing.__hash__NrP   r+  r#  rd   r,  r*   c                 C     |dkrt | |S r  r   r  rZ   r0  r%   r%   r&   rZ   /     zASTTypeUsing.get_idrG   r   c                 C  s>   g }| || j | jr| d | || j d|S )NrR  rg   )r|   r)   r  r   r   r%   r%   r&   rK   5  s   

zASTTypeUsing._stringifyc                 C  r   )Nusingr%   rD   r%   r%   r&   r  =  r   z(ASTTypeUsing.get_type_declaration_prefixr_   r   r`   ra   r   r   c                 C  sf   t | | jj||||d | jr1|t 7 }|tdd7 }|t 7 }| jj|d||d d S d S )Nr  rX  rf   )r   r)   r   r  r   r   r   r   r%   r%   r&   r   @  s   zASTTypeUsing.describe_signature)r)   r   r  r  r+   r,   r   r   r3  r4  r   r   r   )
r"   r#   r$   r6   r>   rE   rZ   rK   r  r   r%   r%   r%   r&   r  "  s    




r  c                   @  s\   e Zd Zd(ddZd)ddZd*ddZed+ddZ		d,d-ddZd.ddZ	d/d&d'Z
dS )0
ASTConceptr!  r   rE  r  r+   r,   c                 C  r   r;   r!  rE  )r5   r!  rE  r%   r%   r&   r6   O  r   zASTConcept.__init__r7   r8   r9   c                 C  r   r;   )r.   r  r<   r!  rE  r=   r%   r%   r&   r>   S  r   zASTConcept.__eq__r@   c                 C  r   r;   )rC   r!  rE  rD   r%   r%   r&   rE   X  r^   zASTConcept.__hash__c                 C  rL   r;   r$  rD   r%   r%   r&   r)   [  r%  zASTConcept.nameNrP   r+  r#  rd   r,  r*   c                 C  r  r  r  r0  r%   r%   r&   rZ   _  r  zASTConcept.get_idrG   r   c                 C  r   r;   r  r   r%   r%   r&   rK   e  r   zASTConcept._stringifyr_   r   r`   ra   r   r   c                 C  s2   | j |||| | jr| j|||| d S d S r;   )r!  r   rE  r   r%   r%   r&   r   k  s   zASTConcept.describe_signature)r!  r   rE  r  r+   r,   r   r   r   r3  r4  r   r   r&  r%   r%   r%   r&   r  N  s    



r  c                   @  s>   e Zd Zd!d
dZd"ddZd#ddZd$ddZd%ddZd S )&ASTBaseClassr)   r   
visibilityr*   ri  r9   packr+   r,   c                 C  r  r;   )r)   r  ri  r  )r5   r)   r  ri  r  r%   r%   r&   r6   s  r  zASTBaseClass.__init__r7   r8   c                 C  r  r;   )r.   r  r<   r)   r  ri  r  r=   r%   r%   r&   r>   z  r  zASTBaseClass.__eq__r@   c                 C  r  r;   )rC   r)   r  ri  r  rD   r%   r%   r&   rE     r  zASTBaseClass.__hash__rG   r   c                 C  s^   g }| j d ur|| j  |d | jr|d ||| j | jr*|d d|S )Nr   zvirtual r1  rg   )r  r|   ri  r)   r  r   r   r%   r%   r&   rK     s   




zASTBaseClass._stringifyr_   r   r`   ra   r   rd   r   c                 C  s   t | | jd ur|t| j| j7 }|t 7 }| jr*|tdd7 }|t 7 }| jj|d||d | jrA|t	dd7 }d S d S )Nri  rf   r  r1  )
r   r  r   r   r   ri  r)   r   r  r   r   r%   r%   r&   r     s   

zASTBaseClass.describe_signatureN)
r)   r   r  r*   ri  r9   r  r9   r+   r,   r   r   r   r   r:  r%   r%   r%   r&   r  r  s    




r  c                   @  sH   e Z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&S )-ASTClassr)   r   rC  r9   baseslist[ASTBaseClass]rD  r   r+   r,   c                 C  r  r;   )r)   rC  r  rD  )r5   r)   rC  r  rD  r%   r%   r&   r6     r  zASTClass.__init__r7   r8   c                 C  r  r;   )r.   r  r<   r)   rC  r  rD  r=   r%   r%   r&   r>     r  zASTClass.__eq__r@   c                 C  r  r;   )rC   r)   rC  r  rD  rD   r%   r%   r&   rE     r  zASTClass.__hash__rP   r+  r*   rd   r   c                 C  s   |  |S r;   )r  rZ   r0  r%   r%   r&   rZ     r[  zASTClass.get_idrG   r   c                 C  s   g }| || j t| jdkr| d | || j | jr&| d t| jdkrJ| d d}| jD ]}|s@| d d}| || q7d|S )	Nr   r   rQ  r  Tr  Frg   )r|   rD  r/   r)   rC  r  r   )r5   rG   r   r   br%   r%   r&   rK     s    





zASTClass._stringifyr_   r   r`   ra   r   c                 C  s   t | | j| t| jdkr|t 7 }| jj||||d | jr2|t 7 }|tdd7 }t| j	dkrt|t 7 }|t
dd7 }|t 7 }| j	D ]}|j||||d |t
dd7 }|t 7 }qP|  |  d S d S )Nr   r  rC  r  r  )r   rD  r   r/   r   r   r)   rC  r   r  r   pop)r5   r_   r`   ra   rd   r  r%   r%   r&   r     s&   
zASTClass.describe_signatureN)
r)   r   rC  r9   r  r  rD  r   r+   r,   r   r   rP   r@   r+  r*   rd   r   r+   r*   r   r   r  r%   r%   r%   r&   r    s    





r  c                   @  sH   e Z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#S )*ASTUnionr)   r   rD  r   r+   r,   c                 C  r   r;   )r)   rD  )r5   r)   rD  r%   r%   r&   r6     r   zASTUnion.__init__r7   r8   r9   c                 C  r   r;   )r.   r  r<   r)   rD  r=   r%   r%   r&   r>     r   zASTUnion.__eq__r@   c                 C  r   r;   )rC   r)   rD  rD   r%   r%   r&   rE     r^   zASTUnion.__hash__rP   r+  r*   rd   r   c                 C  r  r  r  r0  r%   r%   r&   rZ        zASTUnion.get_idrG   r   c                 C  sF   g }| || j t| jdkr| d | || j d|S r|  )r|   rD  r/   r)   r   r   r%   r%   r&   rK     s   

zASTUnion._stringifyr_   r   r`   ra   r   c                 C  sF   t | | j| t| jdkr|t 7 }| jj||||d d S )Nr   r  )r   rD  r   r/   r   r   r)   r   r%   r%   r&   r     s
   zASTUnion.describe_signatureN)r)   r   rD  r   r+   r,   r   r   r  r   r   r  r%   r%   r%   r&   r    s    




r  c                   @  sH   e Z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&S )-ASTEnumr)   r   scopedr*   underlyingTypert  rD  r   r+   r,   c                 C  r  r;   )r)   r  r  rD  )r5   r)   r  r  rD  r%   r%   r&   r6     r  zASTEnum.__init__r7   r8   r9   c                 C  r  r;   )r.   r  r<   r)   r  r  rD  r=   r%   r%   r&   r>     r  zASTEnum.__eq__r@   c                 C  r  r;   )rC   r)   r  r  rD  rD   r%   r%   r&   rE     r  zASTEnum.__hash__rP   r+  rd   r   c                 C  r  r  r  r0  r%   r%   r&   rZ     r  zASTEnum.get_idrG   r   c                 C  s   g }| j r|| j  |d ||| j t| jdkr$|d ||| j | jr<|d ||| j d|S )Nr   r   r  rg   )r  r|   rD  r/   r)   r  r   r   r%   r%   r&   rK     s   



zASTEnum._stringifyr_   r   r`   ra   r   c                 C  s   t | | j| t| jdkr|t 7 }| jj||||d | jrD|t 7 }|tdd7 }|t 7 }| jj|d||d d S d S )Nr   r  r  rr   )	r   rD  r   r/   r   r   r)   r  r   r   r%   r%   r&   r   -  s   

zASTEnum.describe_signatureN)
r)   r   r  r*   r  rt  rD  r   r+   r,   r   r   r  r   r   r  r%   r%   r%   r&   r    s    





r  c                   @  sH   e Z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%S ),ASTEnumeratorr)   r   r  ASTInitializer | NonerD  r   r+   r,   c                 C  r  r;   )r)   r  rD  )r5   r)   r  rD  r%   r%   r&   r6   >  r  zASTEnumerator.__init__r7   r8   r9   c                 C  r   r;   )r.   r  r<   r)   r  rD  r=   r%   r%   r&   r>   D  r   zASTEnumerator.__eq__r@   c                 C  r   r;   )rC   r)   r  rD  rD   r%   r%   r&   rE   M  r   zASTEnumerator.__hash__rP   r+  r*   rd   r   c                 C  r  r  r  r0  r%   r%   r&   rZ   P  r  zASTEnumerator.get_idrG   r   c                 C  s\   g }| || j t| jdkr| d | || j | jr)| || j d|S r|  )r|   r)   r/   rD  r  r   r   r%   r%   r&   rK   U  s   

zASTEnumerator._stringifyr_   r   r`   ra   r   c                 C  s`   t | | j|||| t| jdkr |t 7 }| j| | jr.| j|d|| d S d S )Nr   rf   )r   r)   r   r/   rD  r   r   r  r   r%   r%   r&   r   _  s   z ASTEnumerator.describe_signatureN)r)   r   r  r   rD  r   r+   r,   r   r   r  r   r   r  r%   r%   r%   r&   r  =  s    


	


r  c                   @  sF   e Zd ZdddZddd	ZdddZedddZedddZdS ) ASTTemplateParamr+   r(   c                 C  r   r;   r   rD   r%   r%   r&   get_identifierr  r   zASTTemplateParam.get_identifierrP   r@   r*   c                 C  r   r;   r   rY   r%   r%   r&   rZ   u  r   zASTTemplateParam.get_id
parentNoder   r`   ra   r   rd   r   r,   c                 C  r   r;   r   )r5   r  r`   ra   rd   r%   r%   r&   r   x  r   z#ASTTemplateParam.describe_signaturer9   c                 C  r   r;   r   rD   r%   r%   r&   r  |  r   zASTTemplateParam.isPackr   c                 C  r   r;   r   rD   r%   r%   r&   r)     r   zASTTemplateParam.nameNr+   r(   r   )
r  r   r`   r*   ra   r   rd   r   r+   r,   r   r   )	r"   r#   r$   r  rZ   r   r   r  r)   r%   r%   r%   r&   r  q  s    


r  c                   @  sR   e Z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&S ). ASTTemplateKeyParamPackIdDefaultkeyr*   ri   r(   parameterPackr9   rZ  rt  r+   r,   c                 C  s4   |sJ |r|d u sJ || _ || _|| _|| _d S r;   )r  ri   r  rZ  )r5   r  ri   r  rZ  r%   r%   r&   r6     s   
z)ASTTemplateKeyParamPackIdDefault.__init__r7   r8   c                 C  r  r;   )r.   r  r<   r  ri   r  rZ  r=   r%   r%   r&   r>     r  z'ASTTemplateKeyParamPackIdDefault.__eq__r@   c                 C  r  r;   )rC   r  ri   r  rZ  rD   r%   r%   r&   rE     r  z)ASTTemplateKeyParamPackIdDefault.__hash__c                 C  rL   r;   r  rD   r%   r%   r&   r    rO   z/ASTTemplateKeyParamPackIdDefault.get_identifierrP   c                 C  s6   |dksJ g }| j r|d n|d d|S )Nr   r  rY  rg   )r  r|   r   r   r%   r%   r&   rZ     s   

z'ASTTemplateKeyParamPackIdDefault.get_idrG   r   c                 C  sx   | j g}| jr| jr|d |d | jr'| js|d ||| j | jr7|d ||| j d|S )Nr   r1  rR  rg   )r  r  ri   r|   rZ  r   r   r%   r%   r&   rK     s   




z+ASTTemplateKeyParamPackIdDefault._stringifyr_   r   r`   ra   r   rd   r   c                 C  s   |t | j| j7 }| jr| jr|t  7 }|t dd7 }| jr5| js*|t  7 }| j|||dd| | jrW|t  7 }|t dd7 }|t  7 }| j|d|| d S d S )Nr1  rg   rX  rf   )	r   r   r  r  ri   r   r   r   rZ  r   r%   r%   r&   r     s   z3ASTTemplateKeyParamPackIdDefault.describe_signatureN)
r  r*   ri   r(   r  r9   rZ  rt  r+   r,   r   r   r  r   r   r   )
r"   r#   r$   r6   r>   rE   r  rZ   rK   r   r%   r%   r%   r&   r    s    








r  c                   @  sr   e Zd Zd,ddZd-d
dZd.ddZed/ddZed0ddZd1ddZ		d2d3ddZ
d4d"d#Zd5d*d+ZdS )6ASTTemplateParamTyper  r  r+   r,   c                 C  r  r;   r  r  r%   r%   r&   r6     r  zASTTemplateParamType.__init__r7   r8   r9   c                 C  r:   r;   )r.   r  r<   r  r=   r%   r%   r&   r>     r?   zASTTemplateParamType.__eq__r@   c                 C  rA   r;   r  rD   r%   r%   r&   rE     rF   zASTTemplateParamType.__hash__r   c                 C      |   }tt|d gdgddS NF)r   r  r   r   r5   r{  r%   r%   r&   r)        zASTTemplateParamType.namec                 C  r  r;   r  r  rD   r%   r%   r&   r    r  zASTTemplateParamType.isPackr(   c                 C  r  r;   r  r  rD   r%   r%   r&   r    rF   z#ASTTemplateParamType.get_identifierNrP   r+  r#  rd   r,  r*   c                 C  r  r  )r/  r   rZ   r  r0  r%   r%   r&   rZ     r  zASTTemplateParamType.get_idrG   r   c                 C  rH   r;   r  rJ   r%   r%   r&   rK     rF   zASTTemplateParamType._stringifyr_   r   r`   ra   r   r   c                 C  rJ  r;   )r  r   r   r%   r%   r&   r     rK  z'ASTTemplateParamType.describe_signature)r  r  r+   r,   r   r   r   r   r  r3  r4  r   r   r"   r#   r$   r6   r>   rE   r   r)   r  r  rZ   rK   r   r%   r%   r%   r&   r    s    




r  c                   @  sr   e Zd Zd.ddZd/ddZd0ddZed1ddZed2ddZd3ddZ		d4d5d d!Z
d6d$d%Zd7d,d-ZdS )8ASTTemplateParamTemplateTypenestedParamsASTTemplateParamsr  r  r+   r,   c                 C  r  r;   r  r  )r5   r  r  r%   r%   r&   r6     s   
z%ASTTemplateParamTemplateType.__init__r7   r8   r9   c                 C  r   r;   )r.   r  r<   r  r  r=   r%   r%   r&   r>     r  z#ASTTemplateParamTemplateType.__eq__r@   c                 C  r   r;   )rC   r  r  rD   r%   r%   r&   rE     r^   z%ASTTemplateParamTemplateType.__hash__r   c                 C  r	  r
  r  r  r%   r%   r&   r)   
  r  z!ASTTemplateParamTemplateType.namec                 C  r  r;   r  rD   r%   r%   r&   r    r  z#ASTTemplateParamTemplateType.isPackr(   c                 C  r  r;   r  rD   r%   r%   r&   r    rF   z+ASTTemplateParamTemplateType.get_identifierNrP   r+  r#  rd   r,  r*   c                 C  s:   |dksJ |r|j jj|d dS | j|| j| S )Nr   r-  )r/  r   rZ   r  r  r0  r%   r%   r&   rZ     s   z#ASTTemplateParamTemplateType.get_idrG   r   c                 C  r!  r;   r  rJ   r%   r%   r&   rK   !  r   z'ASTTemplateParamTemplateType._stringifyr_   r   r`   ra   r   r   c                 C  s4   | j |d|| |t 7 }| j|||| d S )Nrr   )r  r   r   r   r  r   r%   r%   r&   r   $  s   z/ASTTemplateParamTemplateType.describe_signature)r  r  r  r  r+   r,   r   r   r   r   r  r3  r4  r   r   r  r%   r%   r%   r&   r    s    




r  c                   @  sl   e Zd Z	d,d-dd	Zd.ddZed/ddZed0ddZd1ddZ	d2d3ddZ	d4d"d#Z
d5d*d+ZdS )6ASTTemplateParamNonTypeFrs   r)  r  r9   r+   r,   c                 C  r  r;   rs   r  )r5   rs   r  r%   r%   r&   r6   ,  s   
z ASTTemplateParamNonType.__init__r7   r8   c                 C  r   r;   )r.   r  r<   rs   r  r=   r%   r%   r&   r>   3  r  zASTTemplateParamNonType.__eq__r   c                 C  r	  r
  r  r  r%   r%   r&   r)   ;  r  zASTTemplateParamNonType.namec                 C  s   | j jp| jS r;   )rs   r  r  rD   r%   r%   r&   r  @  s   zASTTemplateParamNonType.isPackr(   c                 C  s`   | j j}|r.t|jdksJ |jd jsJ |jd jrJ |jd j}t|ts,J |S d S )NrR   r   )rs   r)   r/   r   r   rc   r.   r(   )r5   r)   r   r%   r%   r&   r  D  s   z&ASTTemplateParamNonType.get_identifierNrP   r@   r+  r#  rd   r,  r*   c                 C  sD   |dksJ |r|j jj|d dS d}| jr|d7 }|| j| S )Nr   r-  r  r  )r/  r   rZ   r  rs   )r5   rP   r+  rd   r   r%   r%   r&   rZ   P  s   zASTTemplateParamNonType.get_idrG   r   c                 C  s   || j }| jr|d7 }|S r1  r  r   r%   r%   r&   rK   ^  s   
z"ASTTemplateParamNonType._stringifyr_   r   r`   ra   r   r   c                 C  s0   | j |||| | jr|tdd7 }d S d S r1  )rs   r   r  r   r   r   r%   r%   r&   r   d  s   z*ASTTemplateParamNonType.describe_signaturer2  )rs   r)  r  r9   r+   r,   r   r   r   r  r3  r4  r   r   )r"   r#   r$   r6   r>   r   r)   r  r  rZ   rK   r   r%   r%   r%   r&   r  +  s    


r  c                   @  sT   e Zd Zd*ddZd+ddZd,ddZd-d.ddZd/ddZd0d"d#Zd1d'd(Z	d)S )2r  paramslist[ASTTemplateParam]requiresClauseASTRequiresClause | Noner+   r,   c                 C  r  r;   )r  r  )r5   r  r  r%   r%   r&   r6   l  r  zASTTemplateParams.__init__r7   r8   r9   c                 C  r   r;   )r.   r  r<   r  r  r=   r%   r%   r&   r>   r  r   zASTTemplateParams.__eq__r@   c                 C  r   r;   )rC   r  r  rD   r%   r%   r&   rE   w  r^   zASTTemplateParams.__hash__FrP   excludeRequiresr*   c                   sl    dksJ g }| d | fdd| jD  | d |s1| jr1|d| jj dg d|S )Nr   r  c                 3  r   r;   r   r   rs   r   r%   r&   r   ~  r   z+ASTTemplateParams.get_id.<locals>.<genexpr>r   IQrg   )r|   r   r  r  r9  rZ   r   )r5   rP   r  r   r%   r   r&   rZ   z  s   



zASTTemplateParams.get_idrG   r   c                   sf   g }| d | d fdd| jD  | d | jd ur.|  | j | d d|S )Nz	template<r  c                 3  rw  r;   r%   r  ry  r%   r&   r     rz  z/ASTTemplateParams._stringify.<locals>.<genexpr>z> r   rg   )r|   r   r  r  r   r%   ry  r&   rK     s   
 



zASTTemplateParams._stringifyr_   r   r`   ra   r   rd   r   c                 C  s   |t dd7 }|t dd7 }d}| jD ]}|s'|t dd7 }|t  7 }d}||||| q|t dd7 }| jd urP|t  7 }| j|||| d S d S )Nr   r  Tr  Fr  )r   r   r   r  r   r   r  )r5   r_   r`   ra   rd   r   rs   r%   r%   r&   r     s   

z$ASTTemplateParams.describe_signaturer  r   lineSpecc                 C  s   ddd}||}|t dd7 }|t dd7 }d	}| jD ]"}	|s0|t d
d
7 }|t  7 }d}|r8||}|	|||| q|rI|sI||}|t dd7 }| jrjt  }
d|
_||
7 }| j|
d|| d S d S )Nr  r   r+   addnodes.desc_signature_linec                 S  s   t  }| |7 } d|_|S )Nr   )r   desc_signature_linesphinx_line_type)r  r_   r%   r%   r&   makeLine  s   zDASTTemplateParams.describe_signature_as_introducer.<locals>.makeLiner   r  Tr  Fr  r  rf   )r  r   r+   r  )	r   r   r   r  r   r   r  r   r!  )r5   r  r`   ra   rd   r  r"  lineNoder   rs   reqNoder%   r%   r&    describe_signature_as_introducer  s,   

z2ASTTemplateParams.describe_signature_as_introducerN)r  r  r  r  r+   r,   r   r   r2  )rP   r@   r  r9   r+   r*   r   r   r  r   r`   r*   ra   r   rd   r   r  r9   r+   r,   )
r"   r#   r$   r6   r>   rE   rZ   rK   r   r%  r%   r%   r%   r&   r  k  s    






r  c                   @  s|   e Zd Zd.ddZd/ddZd0ddZed1ddZed2ddZd3ddZ		d4d5ddZ
d6d d!Zd7d$d%Zd8d,d-ZdS )9 ASTTemplateIntroductionParameterri   r(   r  r9   r+   r,   c                 C  r   r;   )ri   r  )r5   ri   r  r%   r%   r&   r6     r   z)ASTTemplateIntroductionParameter.__init__r7   r8   c                 C  r   r;   )r.   r'  r<   ri   r  r=   r%   r%   r&   r>     r  z'ASTTemplateIntroductionParameter.__eq__r@   c                 C  r   r;   )rC   ri   r  rD   r%   r%   r&   rE     r^   z)ASTTemplateIntroductionParameter.__hash__r   c                 C  r	  r
  r  r  r%   r%   r&   r)     r  z%ASTTemplateIntroductionParameter.namec                 C  rL   r;   )r  rD   r%   r%   r&   r    r%  z'ASTTemplateIntroductionParameter.isPackc                 C  rL   r;   r  rD   r%   r%   r&   r    rO   z/ASTTemplateIntroductionParameter.get_identifierNrP   r+  r#  rd   r,  r*   c                 C  s0   |dksJ |r|j jj|d dS | jrdS dS )Nr   r-  r  rY  )r/  r   rZ   r  r0  r%   r%   r&   rZ     s   z'ASTTemplateIntroductionParameter.get_idc                 C  s*   |dksJ | j |}| jrd| S |S )Nr   r  )ri   rZ   r  r   r%   r%   r&   get_id_as_arg  s
   z.ASTTemplateIntroductionParameter.get_id_as_argrG   r   c                 C  s.   g }| j r
|d ||| j d|S Nr1  rg   )r  r|   ri   r   r   r%   r%   r&   rK     s
   

z+ASTTemplateIntroductionParameter._stringifyr_   r   r`   ra   r   r   c                 C  s0   | j r|tdd7 }| j|||dd| d S r)  )r  r   r   ri   r   r   r%   r%   r&   r     s   z3ASTTemplateIntroductionParameter.describe_signature)ri   r(   r  r9   r+   r,   r   r   r   r   r  r3  r4  r   r   r   )r"   r#   r$   r6   r>   rE   r   r)   r  r  rZ   r(  rK   r   r%   r%   r%   r&   r'    s    





	r'  c                   @  sH   e Z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#S )*ASTTemplateIntroductionconceptr   r  &list[ASTTemplateIntroductionParameter]r+   r,   c                 C  s    t |dksJ || _|| _d S r   )r/   r+  r  )r5   r+  r  r%   r%   r&   r6     s   
z ASTTemplateIntroduction.__init__r7   r8   r9   c                 C  r   r;   )r.   r*  r<   r+  r  r=   r%   r%   r&   r>     r   zASTTemplateIntroduction.__eq__r@   c                 C  r   r;   )rC   r+  r  rD   r%   r%   r&   rE     r^   z ASTTemplateIntroduction.__hash__rP   r*   c                   s`    dksJ d dg fdd| jD dd| j d fdd| jD ddS )	Nr   rg   r  c                 3  r   r;   r   r  r   r%   r&   r     r   z1ASTTemplateIntroduction.get_id.<locals>.<genexpr>r   r  c                 3  r   r;   )r(  r  r   r%   r&   r     r   )r   r  r+  rZ   rY   r%   r   r&   rZ     s(   
	
zASTTemplateIntroduction.get_idrG   r   c                   sR   g }|  | j | d | d fdd| jD  | d d|S )Nr  r  c                 3  rw  r;   r%   r  ry  r%   r&   r   #  rz  z5ASTTemplateIntroduction._stringify.<locals>.<genexpr>z} rg   )r|   r+  r   r  r   r%   ry  r&   rK     s   
 

z"ASTTemplateIntroduction._stringifyr  r   r`   ra   r   rd   r   r  c           	      C  s   t  }||7 }d|_| j|d|| |t dd7 }d}| jD ]}|s3|t dd7 }|t  7 }d}||||| q!|t dd7 }d S )NtemplateIntroductionrf   r  Tr  Fr  )r   r   r!  r+  r   r   r  r   )	r5   r  r`   ra   rd   r  r_   r   rs   r%   r%   r&   r%  '  s   
z8ASTTemplateIntroduction.describe_signature_as_introducerN)r+  r   r  r,  r+   r,   r   r   r   r   r&  )	r"   r#   r$   r6   r>   rE   rZ   rK   r%  r%   r%   r%   r&   r*     s    




r*  c                   @  sR   e Z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$S ),ASTTemplateDeclarationPrefixr   8list[ASTTemplateParams | ASTTemplateIntroduction] | Noner+   r,   c                 C  r   r;   )r   )r5   r   r%   r%   r&   r6   =  s   
z%ASTTemplateDeclarationPrefix.__init__r7   r8   r9   c                 C  r:   r;   )r.   r.  r<   r   r=   r%   r%   r&   r>   B  r?   z#ASTTemplateDeclarationPrefix.__eq__r@   c                 C  rA   r;   )rC   r   rD   r%   r%   r&   rE   G  rF   z%ASTTemplateDeclarationPrefix.__hash__r  c                 C  s,   | j d u rd S | j d }t|tsd S |jS )Nr   )r   r.   r  r  )r5   lastListr%   r%   r&   get_requires_clause_in_lastJ  s   


z8ASTTemplateDeclarationPrefix.get_requires_clause_in_lastrP   r*   c                 C  sp   |dksJ g }t | jd }t| jD ]\}}t|tr*||j|||kd q||| qd|S )Nr   rR   )r  rg   )r/   r   	enumerater.   r  r|   rZ   r   )r5   rP   r   	lastIndexr   tr%   r%   r&   %get_id_except_requires_clause_in_lastR  s   

zBASTTemplateDeclarationPrefix.get_id_except_requires_clause_in_lastrG   r   c                 C  s   d t|| jS r  )r   mapr   rJ   r%   r%   r&   rK   ^  r?  z'ASTTemplateDeclarationPrefix._stringifyr_   r   r`   ra   r   rd   r   r  c                 C  s*   t | | jD ]}||d||| qd S )Nrq   )r   r   r%  )r5   r_   r`   ra   rd   r  r4  r%   r%   r&   r   a  s   
z/ASTTemplateDeclarationPrefix.describe_signatureN)r   r/  r+   r,   r   r   )r+   r  r   r   )r_   r   r`   r*   ra   r   rd   r   r  r9   r+   r,   )
r"   r#   r$   r6   r>   rE   r1  r5  rK   r   r%   r%   r%   r&   r.  <  s    





r.  c                   @  r5  )#ASTRequiresClauser9  r   r+   r,   c                 C  r   r;   r:  r;  r%   r%   r&   r6   i  rF   zASTRequiresClause.__init__r7   r8   r9   c                 C  r:   r;   )r.   r7  r<   r9  r=   r%   r%   r&   r>   l  r?   zASTRequiresClause.__eq__r@   c                 C  rA   r;   r<  rD   r%   r%   r&   rE   q  rF   zASTRequiresClause.__hash__rG   r   r*   c                 C  rY  )Nz	requires r:  rJ   r%   r%   r&   rK   t  r[  zASTRequiresClause._stringifyr_   nodes.TextElementr`   ra   r   rd   r   c                 C  r  )Nrequiresr  r   r%   r%   r&   r   w  r  z$ASTRequiresClause.describe_signatureNrE  r   r   r   )
r_   r8  r`   r*   ra   r   rd   r   r+   r,   r:  r%   r%   r%   r&   r7  h  s    



r7  c                   @  s~   e Zd Z						d5d6ddZd7ddZd8ddZed9ddZed:ddZd;d<d$d%Z	d=d&d'Z
d>d*d+Zd?d3d4ZdS )@ASTDeclarationNFr+  r*   directiveTyper#  r  r   #ASTTemplateDeclarationPrefix | Noner   r   trailingRequiresClauser  	semicolonr9   r+   r,   c                 C  s@   || _ || _|| _|| _|| _|| _|| _d | _d | _d | _	d S r;   )
r+  r;  r  r   r   r=  r>  rd   enumeratorScopedSymbol_newest_id_cache)r5   r+  r;  r  r   r   r=  r>  r%   r%   r&   r6     s   
zASTDeclaration.__init__r7   r8   c                 C  sz   t |tstS | j|jko<| j|jko<| j|jko<| j|jko<| j|jko<| j|jko<| j	|j	ko<| j
|j
ko<| j|jkS r;   )r.   r:  r<   r+  r;  r  r   r   r=  r>  rd   r?  r=   r%   r%   r&   r>     s&   








zASTDeclaration.__eq__c                 C  sJ   | j r| j  nd }| jr| j nd }t| j| j| j|| j || jS r;   )	r   cloner=  r:  r+  r;  r  r   r>  )r5   templatePrefixClonetrailingRequiresClasueCloner%   r%   r&   rA    s   
zASTDeclaration.cloner   c                 C  r  r;   )r   r)   rD   r%   r%   r&   r)     r  zASTDeclaration.namer<  c                 C  s   | j dkrd S | jjS )Nr  )r+  r   rF  rD   r%   r%   r&   rF    s   
zASTDeclaration.function_paramsTrP   r@   r.  c                 C  s<  |dkr%| j s
| jrt| jdkr| jr| jj|S | j|| j| jS | jdkr5| jr5| jj||S |r=t| g}ng }| j d urS|	| j 
| | j  }nd }|sZ| jr|dk r`t|	d |ro| jro|	d |rz|	|j| | jr|	| jj| |	d |	| j|| j| j d|S )NrR   
enumeratorr  r  aar   rg   )r   r=  r   r+  r?  r   rZ   rd   r   r|   r5  r1  r9  r   )r5   rP   r.  r   requiresClauseInLastr%   r%   r&   rZ     s8   






zASTDeclaration.get_idc                 C  s   | j d u r| td| _ | j S r  )r@  rZ   r   rD   r%   r%   r&   get_newest_id  s   
zASTDeclaration.get_newest_idrG   r   c                 C  s   g }| j r| j dkr|| j  |d | jr ||| j ||| j | jr8|d ||| j | jr@|d d|S )Npublicr   ;rg   )r  r|   r   r   r=  r>  r   r   r%   r%   r&   rK     s   



zASTDeclaration._stringifyr_   r   r`   ra   r   optionsdict[str, bool]c           	      C  s  t | | js	J d|d< t }d|_| jj |d< | jr-| jj|||| j|dd ||7 }| j	rI| j	dkrI|t
| j	| j	7 }|t 7 }| jdkrb| j }|t
||7 }|t 7 }n| jd	krv|t
d	d	7 }|t 7 }n| jd
v r|n| jdkr| jdv sJ |t
| j| j7 }|t 7 }nt| jdkr|t
dd7 }|t 7 }n`| jdkr|t
dd7 }|t 7 }| jdkr|t
dd7 }|t 7 }n9| jdkr|t
dd7 }|t 7 }n%| jdksJ | jn| jdkr|t
dd7 }|t 7 }nt| j| j|||| j |}| jr5t }d|_|| |}| j|d|| j | jrC|tdd7 }d S d S )NTis_multiline
declaratoradd_permalinkztparam-line-spec)rd   r  rH  r  r+  >   r  r  class)rO  structunionenumz
enum-classzenum-structrP  rD  r=  rf   rI  )r   rd   r   r   r!  isRedeclarationr   r   r\  r  r   r   r+  r   r  r;  r0   r=  r|   r>  r   )	r5   r_   r`   ra   rJ  mainDeclNoderb   lastDeclNodetrailingReqNoder%   r%   r&   r     st   












z!ASTDeclaration.describe_signature)NNNNNF)r+  r*   r;  r#  r  r#  r   r<  r   r   r=  r  r>  r9   r+   r,   r   )r+   r:  r   ra  r  )rP   r@   r.  r9   r+   r*   r   r   )
r_   r   r`   r*   ra   r   rJ  rK  r+   r,   )r"   r#   r$   r6   r>   rA  r   r)   rF  rZ   rG  rK   r   r%   r%   r%   r&   r:    s$    

	
-
r:  c                   @  s*   e Zd ZdddZdddZdddZdS )ASTNamespacer!  r   r   r.  r+   r,   c                 C  r   r;   )r!  r   )r5   r!  r   r%   r%   r&   r6   =  r   zASTNamespace.__init__r7   r8   r9   c                 C  r   r;   )r.   rW  r<   r!  r   r=   r%   r%   r&   r>   B  r  zASTNamespace.__eq__rG   r   r*   c                 C  s4   g }| j r||| j  ||| j d|S r  )r   r|   r!  r   r   r%   r%   r&   rK   J  s
   
zASTNamespace._stringifyN)r!  r   r   r.  r+   r,   r   r   )r"   r#   r$   r6   r>   rK   r%   r%   r%   r&   rW  <  s    

rW  )
__future__r   r1   r   typingr   r   r   r   docutilsr   sphinxr   sphinx.domains.cpp._idsr	   r
   r   r   r   r   r   r   r   r   sphinx.util.cfamilyr   r   r   r   r   r   docutils.nodesr   r   sphinx.addnodesr   sphinx.domains.cpp._symbolr   sphinx.environmentr   r   r    r(   r   r   r   r   r   r   r  r  r  r  r$  r(  r8  rG  rM  rR  rX  r_  rc  rh  rk  rs  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'  r6  r;  rb  re  ru  r  r  r  r  r  r  r  r  r  r  r  r  rt  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r'  r*  r.  r7  r:  rW  r%   r%   r%   r&   <module>   s    0 	d% )J	( >2"32'0"5&=	08* . X(,c6yKGqQ"v2-,$0@#84F,4@TA<, <