
    ~Tir                      d dl mZ d dlZd dlZd dl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 er,d dlmZmZmZ d 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'm(Z(  G d de      Z) G d de)      Z* G d de)      Z+ G d de)      Z, G d de)      Z- G d de-      Z. G d de.      Z/ G d de.      Z0 G d de.      Z1 G d  d!e.      Z2 G d" d#e.      Z3 G d$ d%e.      Z4 G d& d'e-      Z5 G d( d)e-      Z6 G d* d+e-      Z7 G d, d-e-      Z8 G d. d/e)      Z9 G d0 d1e9      Z: G d2 d3e9      Z; G d4 d5e9      Z< G d6 d7e9      Z= G d8 d9e9      Z> G d: d;e9      Z? G d< d=e-      Z@ G d> d?e-      ZA G d@ dAe-      ZB G dB dCe-      ZC G dD dEe-      ZD G dF dGe-      ZE G dH dIe-      ZF G dJ dKe-      ZG G dL dMe-      ZH G dN dOe-      ZI G dP dQe-      ZJ G dR dSe-      ZK G dT dUe-      ZL G dV dWe-      ZM G dX dYe)      ZN G dZ d[e-      ZO G d\ d]e-      ZP G d^ d_e-      ZQ G d` dae)      ZR G db dceR      ZS G dd deeR      ZT G df dgeR      ZU G dh die)      ZV G dj dke)      ZW G dl dme)      ZX G dn doeX      ZY G dp dqeX      ZZ G dr dseX      Z[ G dt dueX      Z\ G dv dwe)      Z] G dx dye)      Z^ G dz d{e)      Z_ G d| d}e)      Z` G d~ de)      Za G d de)      Zb G d de)      Zc G d de)      Zd G d ded      Ze G d ded      Zf G d ded      Zg G d ded      Zh G d ded      Zi G d ded      Zj G d ded      Zk G d de-      Zl G d de      Zm G d de)      Zn G d de)      Zo G d de)      Zp G d de)      Zq G d de)      Zr G d de)      Zs G d de)      Zt G d de)      Zu G d de)      Zv G d de)      Zw G d de)      Zx G d de)      Zy G d dey      Zz G d dey      Z{ G d dey      Z| G d dey      Z} G d de)      Z~ G d de)      Z G d de)      Z G d de)      Z G d de)      Z G d de)      Z G dĄ de)      Zy)    )annotationsN)TYPE_CHECKING)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)ASTBaseBaseASTBaseParenExprListNoOldIdError$UnsupportedMultiCharacterCharLiteralverify_description_mode)AnyClassVarLiteral)ElementTextElement)desc_signature)Symbol)BuildEnvironment)ASTAttributeListStringifyTransformc                      e Zd Zy)ASTBaseN__name__
__module____qualname__     J/home/agent/.local/lib/python3.12/site-packages/sphinx/domains/cpp/_ast.pyr!   r!   ,       r'   r!   c                      e Zd ZddZddZddZddZddZddZddZ	ddZ
	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd	Zedd
       Zy)ASTIdentifierc                    t        |t              rt        |      dk(  rt        t	        j
                  |      | _        |d   dk(  | _        y )Nr   @)
isinstancestrlenAssertionErrorsysinternnameis_anonymousselfr4   s     r(   __init__zASTIdentifier.__init__5   s<    $$D	Q  JJt$	 GsNr'   c                `    t        |t              st        S | j                  |j                  k(  S N)r.   r+   NotImplementedr4   r7   others     r(   __eq__zASTIdentifier.__eq__=   %    %/!!yyEJJ&&r'   c                ,    t        | j                        S r:   hashr4   r7   s    r(   __hash__zASTIdentifier.__hash__B       DIIr'   c                &     || j                         S r:   r4   r7   	transforms     r(   
_stringifyzASTIdentifier._stringifyE       ##r'   c                    | j                   S r:   r5   rC   s    r(   is_anonzASTIdentifier.is_anonH          r'   c                z   | j                   r|dk  rt        |dk(  r| j                  dk(  ry| j                  S | j                  dk(  ry| j                  d   dk(  ry	| j                   r*d
t        | j                        dz
  | j                  dd  fz  S t	        t        | j                              | j                  z   S )N      size_tsstdStr   ~D0zUt%d_%s)r5   r   r4   r0   r/   r7   versions     r(   get_idzASTIdentifier.get_idK   s    1a<yyH$yy 99YYq\S    C		NQ$6		!"#FFF3tyy>*TYY66r'   c                    | j                   S r:   rG   rC   s    r(   __str__zASTIdentifier.__str__`       yyr'   c                6    | j                   rdS | j                  S )N[anonymous])r5   r4   rC   s    r(   get_display_stringz ASTIdentifier.get_display_stringc   s     $ 1 1}@tyy@r'   c                    t        |       | j                  rt        j                  d      }n*t        j                  | j                  | j                        }|dk(  rK|| j                  z   |z   }t        j
                  ddd|d d       }	|j                         |	d<   |	|z  }	||	z  }y |d	k(  rt        j                         }
|
|z  }
||
z  }y |d
k(  r||z  }y |dk(  r|d   j                  d       ||z  }y |dk(  rvt        |      dk(  sJ t        |      dk(  sJ | j                  rJ d| j                  z   }t        j
                  ddd|d d       }	|j                         |	d<   |	|z  }	||	z  }y t        d|z        )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   r5   r   desc_sig_namer4   pending_xrefget_lookup_key	desc_nameappendr0   	Exception)r7   signodemodeenvprefixtemplateArgssymbolnodetarget_textpnode	name_nodes              r(   describe_signaturez ASTIdentifier.describe_signaturef   s    	 %))}=D))$))TYY?D: 499,|;K))$%E '-&;&;&=E"#TMEuG\! **,IIy G\!tOGW_O"";/tOGU]v;!###|$)))((((&2K))$%E '-&;&;&=E"#TMEuG:TABBr'   c                R    t        j                  dt        d       | j                  S )NzJ`ASTIdentifier.identifier` is deprecated, use `ASTIdentifier.name` instead   )
stacklevel)warningswarnDeprecationWarningr4   rC   s    r(   rg   zASTIdentifier.identifier   s#    X	

 yyr'   N)r4   r/   returnNoner=   objectr   boolr   intrI   r   r   r/   r   r   rZ   r   r   r/   r   r/   r|   r   r}   r/   r~   r   r   r/   r   r/   r   r   r   r   )r#   r$   r%   r8   r>   rD   rJ   rN   r[   r]   ra   r   propertyrg   r&   r'   r(   r+   r+   4   s    +'
$!7*A6C6C 6C 	6C
 6C 6C 6C 
6Cp  r'   r+   c                  h    e Zd Z	 	 	 	 	 	 d	dZd
dZddZddZddZddZ	 	 	 	 	 	 	 	 	 	 	 	 ddZ	y)ASTNestedNameElementc                     || _         || _        y r:   	identOrOpr   )r7   r   r   s      r(   r8   zASTNestedNameElement.__init__   s    
 #(r'   c                    t        |t              st        S | j                  |j                  k(  xr | j                  |j                  k(  S r:   )r.   r   r;   r   r   r<   s     r(   r>   zASTNestedNameElement.__eq__   sA    %!56!!NNeoo- 8!!U%7%77	
r'   c                D    t        | j                  | j                  f      S r:   )rB   r   r   rC   s    r(   rD   zASTNestedNameElement.__hash__   s    T^^T%6%6788r'   c                     yNFr&   rC   s    r(   is_operatorz ASTNestedNameElement.is_operator       r'   c                    | j                   j                  |      }| j                  r|| j                  j                  |      z  }|S r:   )r   r[   r   r7   rZ   ress      r(   r[   zASTNestedNameElement.get_id   s?    nn##G,4$$++G44C
r'   c                l     || j                         }| j                  r| || j                        z  }|S r:   r   r7   rI   r   s      r(   rJ   zASTNestedNameElement._stringify   s3    '9T..//C
r'   c                    | j                   t        | j                         nd}| j                  j                  ||||||       | j                   | j                   j                  |d||       y y )Nre   rd   )r   r/   r   r   )r7   r|   r}   r~   r   r   t_argss          r(   r   z'ASTNestedNameElement.describe_signature   sh     ,0+<+<+HT&&'b))'4fffU(00*c6R )r'   N)r   zASTIdentifier | ASTOperatorr   zASTTemplateArgs | Noner   r   r   r   r   r   r   )r|   r   r}   r/   r~   r   r   r/   r   r   r   r   )
r#   r$   r%   r8   r>   rD   r   r[   rJ   r   r&   r'   r(   r   r      s    ).) -) 
	)
9SS S 	S
 S S 
Sr'   r   c                  |    e Zd Z	 	 	 	 	 	 	 	 d
dZddZddZedd       ZddZdddZ	ddZ
	 	 	 	 	 	 	 	 	 	 ddZy	)ASTNestedNamec                    t        |      dkD  sJ || _        || _        t        | j                        t        | j                        k(  sJ || _        y Nr   )r0   names	templatesrooted)r7   r   r   r   s       r(   r8   zASTNestedName.__init__   sH     5zA~~
"4::#dnn"5555r'   c                    t        |t              st        S | j                  |j                  k(  xr4 | j                  |j                  k(  xr | j
                  |j
                  k(  S r:   )r.   r   r;   r   r   r   r<   s     r(   r>   zASTNestedName.__eq__   sQ    %/!!JJ%++% ,%//1,u||+	
r'   c                Z    t        | j                  | j                  | j                  f      S r:   )rB   r   r   r   rC   s    r(   rD   zASTNestedName.__hash__   s     TZZ=>>r'   c                    | S r:   r&   rC   s    r(   r4   zASTNestedName.name   s    r'   c                r    d}| j                   D ]%  }|j                         r|j                  s!|dz  }' |S Nr   rR   )r   r   r   )r7   countns      r(   num_templateszASTNestedName.num_templates   s=     	A}}~~
		
 r'   c                   dk(  r@t        |       }|t        v r	t        |   S dj                  fd| j                  D              S g }t	        | j                        dkD  st	        |      dkD  r|j                  d       |j                  |       |j                  fd| j                  D               t	        | j                        dkD  st	        |      dkD  r|j                  d       dj                  |      S )	NrR   ::c              3  @   K   | ]  }|j                          y wr:   r[   .0r   rZ   s     r(   	<genexpr>z'ASTNestedName.get_id.<locals>.<genexpr>        Gq'!2 G   r   Nc              3  @   K   | ]  }|j                          y wr:   r   r   s     r(   r   z'ASTNestedName.get_id.<locals>.<genexpr>  s     9188G$9r   Ere   )r/   r   joinr   r0   rz   extend)r7   rZ   	modifiersttr   s    `   r(   r[   zASTNestedName.get_id   s    a<TB&&(,,yy GDJJ GGGtzz?Q#i.1"4JJsO

9

9djj99tzz?Q#i.1"4JJsOwws|r'   c                H   g }| j                   r|j                  d       t        t        | j                              D ]R  }| j                  |   }| j
                  |   r|j                  d ||      z          <|j                   ||             T dj                  |      S )Nre   z	template r   )r   rz   ranger0   r   r   r   )r7   rI   r   ir   s        r(   rJ   zASTNestedName._stringify  s    ;;JJrNs4::' 	)A

1A~~a 

;156

9Q<(	) yy~r'   c                   t        |       |dk(  r| j                  rd}t        |      t        t        | j                              D ]T  }|dk7  rd}t        |      | j                  |   }| j                  |   rd}t        |      |j                  |||d|       V y |dk(  rj| j                  rJ t        |              t        | j                        dk(  sJ | j                  d   rJ | j                  d   j                  |d|d|       y |d	v rTg }|d
k(  r:|J |j                  j                   |j                  j                  j                  }d}	d}
d}d}|d
k(  r| j                  d d n| j                  }|}|d
k(  rt        j                         }| j                  rK|dz  }|d
k(  r(t        |      dk(  r|t        j                  dd      z  }n|t        j                  dd      z  }t        t        |            D ]  }||   }| j                  |   }|s|t        j                  dd      z  }|dz  }|r0|t        j                   dd      z  }|t        j"                         z  }d}t        |      }|rH|j$                  r$|	t        |      k  r|
t        ||	         z  }
|	dz  }	|j                  |d||
|z   |       ||z  } |d
k(  rt        | j                        dkD  r|t        j                  dd      z  }||z  }| j                  d   r0|t        j                   dd      z  }|t        j"                         z  }| j                  d   j                  |||d|       y y t'        d|z        )Nrp   zCan this happen?r   r   templatere   rq   rR   >   markNamerd   ro   ro   TFrd   ru   )r   r   r1   r   Textr   r0   r   r   r   r/   declarationtemplatePrefixr   desc_addnamedesc_sig_punctuationdesc_sig_keyworddesc_sig_spacer   r{   )r7   r|   r}   r~   r   unreachabler   r   template_paramsi_template_paramstemplate_params_prefixr   firstr   destnner   txt_nnes                     r(   r   z ASTNestedName.describe_signature  s    	 %<{{0$[113tzz?+ E6"4K(55JJqM>>!$"4K(55 $$WdCVDE W_{{-CI-?tzz?a'''~~a(((JJqM,,WgsBO;;
 *,O|#)))%%44@&,&8&8&G&G&Q&QO !%'"FE'+|';DJJsOE
 D|#,,.{{$<'CJ!Ox<<T4HHGH99$EED3u:& "Ah>>!,H99$EEDdNFH55j*MMDH3355Dc('',=O@T,T.#+,=>3 . *Q.)**j#/E/NPV '!)"* |#tzz?Q&H99$EEDtOG>>"%x88ZPPGx6688G

211'4b&Q $ :TABBr'   N)r   zlist[ASTNestedNameElement]r   z
list[bool]r   r   r   r   r   r   r   r   )re   )rZ   r   r   r/   r   r/   r   
r|   r   r}   r/   r~   r   r   r   r   r   )r#   r$   r%   r8   r>   rD   r   r4   r   r[   rJ   r   r&   r'   r(   r   r      s    /<FPT	
?  "
UC"UC*-UC4DUCNTUC	UCr'   r   c                  0    e Zd ZddZ	 	 	 	 	 	 	 	 	 	 ddZy)ASTExpressionc                *    t        t        |             r:   NotImplementedErrorreprrY   s     r(   r[   zASTExpression.get_idw      !$t*--r'   c                *    t        t        |             r:   r   r7   r|   r}   r~   r   s        r(   r   z ASTExpression.describe_signaturez       "$t*--r'   Nr   r   r#   r$   r%   r[   r   r&   r'   r(   r   r   v  4    ..".*-.4D.NT.	.r'   r   c                      e Zd Zy)
ASTLiteralNr"   r&   r'   r(   r   r     r)   r'   r   c                  H    e Zd ZddZddZd	dZd
dZ	 	 	 	 	 	 	 	 	 	 ddZy)ASTPointerLiteralc                "    t        |t              S r:   )r.   r   r<   s     r(   r>   zASTPointerLiteral.__eq__  s    %!233r'   c                    t        d      S NnullptrrB   rC   s    r(   rD   zASTPointerLiteral.__hash__  s    Ir'   c                     yr   r&   rH   s     r(   rJ   zASTPointerLiteral._stringify  s    r'   c                     y)NLDnEr&   rY   s     r(   r[   zASTPointerLiteral.get_id      r'   c                6    |t        j                  dd      z  }y r   r   r   r   s        r(   r   z$ASTPointerLiteral.describe_signature  s     	8,,Y	BBr'   Nr   r   r   r   r   r#   r$   r%   r>   rD   rJ   r[   r   r&   r'   r(   r   r     sI    4C"C*-C4DCNTC	Cr'   r   c                  P    e Zd ZddZd	dZd
dZddZddZ	 	 	 	 	 	 	 	 	 	 ddZy)ASTBooleanLiteralc                    || _         y r:   valuer7   r  s     r(   r8   zASTBooleanLiteral.__init__  	    
r'   c                `    t        |t              st        S | j                  |j                  k(  S r:   )r.   r   r;   r  r<   s     r(   r>   zASTBooleanLiteral.__eq__  s&    %!23!!zzU[[((r'   c                ,    t        | j                        S r:   rB   r  rC   s    r(   rD   zASTBooleanLiteral.__hash__      DJJr'   c                    | j                   ryy)Ntruefalser  rH   s     r(   rJ   zASTBooleanLiteral._stringify  s    ::r'   c                    | j                   ryy)NL1EL0Er  rY   s     r(   r[   zASTBooleanLiteral.get_id  s    ::r'   c                Z    |t        j                  t        |       t        |             z  }y r:   )r   r   r/   r   s        r(   r   z$ASTBooleanLiteral.describe_signature  s#     	8,,SYD	BBr'   N)r  r   r   r   r   r   r   r   r   	r#   r$   r%   r8   r>   rD   rJ   r[   r   r&   r'   r(   r   r     sN    )
 C"C*-C4DCNTC	Cr'   r   c                  P    e Zd ZddZd	dZd
dZddZddZ	 	 	 	 	 	 	 	 	 	 ddZy)ASTNumberLiteralc                    || _         y r:   datar7   r  s     r(   r8   zASTNumberLiteral.__init__  	    	r'   c                `    t        |t              st        S | j                  |j                  k(  S r:   )r.   r  r;   r  r<   s     r(   r>   zASTNumberLiteral.__eq__  &    %!12!!yyEJJ&&r'   c                ,    t        | j                        S r:   rB   r  rC   s    r(   rD   zASTNumberLiteral.__hash__  rE   r'   c                    | j                   S r:   r  rH   s     r(   rJ   zASTNumberLiteral._stringify  r^   r'   c                @    d| j                   j                  dd      z  S )NzL%sE're   )r  replacerY   s     r(   r[   zASTNumberLiteral.get_id  s    		))#r222r'   c                ^    |t        j                  | j                  | j                        z  }y r:   )r   desc_sig_literal_numberr  r   s        r(   r   z#ASTNumberLiteral.describe_signature  #     	833DIItyyIIr'   Nr  r/   r   r   r   r   r   r   r   r  r&   r'   r(   r  r    sN    '
3J"J*-J4DJNTJ	Jr'   r  c                  P    e Zd ZddZd	dZd
dZddZddZ	 	 	 	 	 	 	 	 	 	 ddZy)ASTStringLiteralc                    || _         y r:   r  r  s     r(   r8   zASTStringLiteral.__init__  r  r'   c                `    t        |t              st        S | j                  |j                  k(  S r:   )r.   r&  r;   r  r<   s     r(   r>   zASTStringLiteral.__eq__  r  r'   c                ,    t        | j                        S r:   r  rC   s    r(   rD   zASTStringLiteral.__hash__  rE   r'   c                    | j                   S r:   r  rH   s     r(   rJ   zASTStringLiteral._stringify  r^   r'   c                8    dt        | j                        dz
  z  S )NzLA%d_KcEr   )r0   r  rY   s     r(   r[   zASTStringLiteral.get_id  s    S^a/00r'   c                ^    |t        j                  | j                  | j                        z  }y r:   )r   desc_sig_literal_stringr  r   s        r(   r   z#ASTStringLiteral.describe_signature  r#  r'   Nr$  r   r   r   r   r   r  r&   r'   r(   r&  r&    sN    '
1J"J*-J4DJNTJ	Jr'   r&  c                  P    e Zd ZddZd	dZd
dZddZddZ	 	 	 	 	 	 	 	 	 	 ddZy)ASTCharLiteralc                    || _         || _        |t        v sJ t        |   | _        |j	                         j                  d      }t        |      dk(  rt        |      | _        y t        |      )Nzunicode-escaperR   )
r   r  r   typeencodedecoder0   ordr  r   )r7   r   r  decodeds       r(   r8   zASTCharLiteral.__init__  sd    	----(0	++-&&'78w<1WDJ6w??r'   c                    t        |t              st        S | j                  |j                  k(  xr | j                  |j                  k(  S r:   )r.   r/  r;   r   r  r<   s     r(   r>   zASTCharLiteral.__eq__  s7    %0!!{{ell*HtzzU[[/HHr'   c                D    t        | j                  | j                  f      S r:   )rB   r   r  rC   s    r(   rD   zASTCharLiteral.__hash__  s    T[[$**-..r'   c                |    | j                   d| j                  z   dz   S | j                   dz   | j                  z   dz   S Nr  )r   r  rH   s     r(   rJ   zASTCharLiteral._stringify  s<    ;;?S((;;$tyy0366r'   c                F    | j                   t        | j                        z   S r:   )r1  r/   r  rY   s     r(   r[   zASTCharLiteral.get_id  s    yy3tzz?**r'   c                    | j                   -|t        j                  | j                   | j                         z  }d| j                  z   dz   }|t        j                  ||      z  }y r9  )r   r   r   r  desc_sig_literal_char)r7   r|   r}   r~   r   txts         r(   r   z!ASTCharLiteral.describe_signature	  sV     ;;"x00dkkJJGDIIo#811#s;;r'   N)r   r/   r  r/   r   r   r   r   r   r   r   r  r&   r'   r(   r/  r/    sJ    	@I
/7+<"<*-<4D<NT<	<r'   r/  c                  P    e Zd ZddZd	dZd
dZddZddZ	 	 	 	 	 	 	 	 	 	 ddZy)ASTUserDefinedLiteralc                     || _         || _        y r:   literalident)r7   rB  rC  s      r(   r8   zASTUserDefinedLiteral.__init__  s    
r'   c                    t        |t              st        S | j                  |j                  k(  xr | j                  |j                  k(  S r:   )r.   r?  r;   rB  rC  r<   s     r(   r>   zASTUserDefinedLiteral.__eq__  s8    %!67!!||u}},Ju{{1JJr'   c                D    t        | j                  | j                  f      S r:   )rB   rB  rC  rC   s    r(   rD   zASTUserDefinedLiteral.__hash__  s    T\\4::.//r'   c                L     || j                          || j                        z   S r:   rA  rH   s     r(   rJ   z ASTUserDefinedLiteral._stringify  s    &4::)>>>r'   c                x    d| j                   j                  |       d| j                  j                  |       dS )NclL_Zlir   )rC  r[   rB  rY   s     r(   r[   zASTUserDefinedLiteral.get_id"  s8    **734Adll6I6I'6R5SSTUUr'   c                    | j                   j                  ||||       | j                  j                  |d|dd|       y )Nrs   re   )rB  r   rC  r   s        r(   r   z(ASTUserDefinedLiteral.describe_signature&  s8     	''sFC

%%guc2r6Jr'   N)rB  r   rC  r+   r   r   r   r   r   r   r   r  r&   r'   r(   r?  r?    sP    K
0?VK"K*-K4DKNTK	Kr'   r?  c                  H    e Zd ZddZddZd	dZd
dZ	 	 	 	 	 	 	 	 	 	 ddZy)ASTThisLiteralc                "    t        |t              S r:   )r.   rK  r<   s     r(   r>   zASTThisLiteral.__eq__1  s    %00r'   c                    t        d      S Nthisr   rC   s    r(   rD   zASTThisLiteral.__hash__4  s    F|r'   c                     yrN  r&   rH   s     r(   rJ   zASTThisLiteral._stringify7  r   r'   c                     y)NfpTr&   rY   s     r(   r[   zASTThisLiteral.get_id:  r   r'   c                6    |t        j                  dd      z  }y rN  r   r   s        r(   r   z!ASTThisLiteral.describe_signature=  s     	8,,VV<<r'   Nr   r   r   r   r   r   r&   r'   r(   rK  rK  0  sC    1="=*-=4D=NT=	=r'   rK  c                  `    e Zd Z	 	 	 	 	 	 	 	 ddZd	dZd
dZddZddZ	 	 	 	 	 	 	 	 	 	 ddZy)ASTFoldExprc                :    ||J || _         || _        || _        y r:   leftExprop	rightExprr7   rX  rY  rZ  s       r(   r8   zASTFoldExpr.__init__D  s*     #y'<<< "r'   c                    t        |t              st        S | j                  |j                  k(  xr4 | j                  |j                  k(  xr | j
                  |j
                  k(  S r:   )r.   rU  r;   rX  rY  rZ  r<   s     r(   r>   zASTFoldExpr.__eq__L  sQ    %-!!MMU^^+ 2588#2%//1	
r'   c                Z    t        | j                  | j                  | j                  f      S r:   rB   rX  rY  rZ  rC   s    r(   rD   zASTFoldExpr.__hash__U       T]]DGGT^^<==r'   c                Z   dg}| j                   r/|j                   || j                         d| j                  df       |j                  d       | j                  r/|j                  d| j                  d || j                        f       |j                  d       dj                  |      S )N( ...)re   )rX  r   rY  rz   rZ  r   r   s      r(   rJ   zASTFoldExpr._stringifyX  s    e==JJ$--(	  	

5>>JJ$..)	  	

3wws|r'   c                   |dk\  sJ |dk(  rt        |       S g }| j                  |j                  d       n/| j                  |j                  d       n|j                  d       |j                  t        | j
                            | j                  r*|j                  | j                  j                  |             | j                  r*|j                  | j                  j                  |             dj                  |      S )NrQ   flfrfLre   )r/   rX  rz   rZ  r   rY  r[   r   r   s      r(   r[   zASTFoldExpr.get_idl  s    !||a<t9== JJt^^#JJt JJt

?477+,==JJt}}++G45>>JJt~~,,W56wws|r'   c                   |t        j                  dd      z  }| j                  ry| j                  j                  ||||       |t        j                         z  }|t        j
                  | j                  | j                        z  }|t        j                         z  }|t        j                  dd      z  }| j                  ry|t        j                         z  }|t        j
                  | j                  | j                        z  }|t        j                         z  }| j                  j                  ||||       |t        j                  dd      z  }y )Nra  rc  rd  )r   r   rX  r   r   desc_sig_operatorrY  rZ  r   s        r(   r   zASTFoldExpr.describe_signature  s    	800c::==MM,,WdCHx..00Gx11$''477CCGx..00G800>>>>x..00Gx11$''477CCGx..00GNN--gtS&I800c::r'   N)rX  ASTExpression | NonerY  r/   rZ  rk  r   r   r   r   r   r   r   r  r&   r'   r(   rU  rU  C  sh    #,#25#BV#	#
>(*;";*-;4D;NT;	;r'   rU  c                  P    e Zd ZddZd	dZd
dZddZddZ	 	 	 	 	 	 	 	 	 	 ddZy)ASTParenExprc                    || _         y r:   exprr7   rp  s     r(   r8   zASTParenExpr.__init__  r  r'   c                `    t        |t              st        S | j                  |j                  k(  S r:   )r.   rm  r;   rp  r<   s     r(   r>   zASTParenExpr.__eq__  s%    %.!!yyEJJ&&r'   c                ,    t        | j                        S r:   rB   rp  rC   s    r(   rD   zASTParenExpr.__hash__  rE   r'   c                2    d || j                         z   dz   S Nra  rd  ro  rH   s     r(   rJ   zASTParenExpr._stringify      Ytyy))C//r'   c                8    | j                   j                  |      S r:   rp  r[   rY   s     r(   r[   zASTParenExpr.get_id      yy((r'   c                    |t        j                  dd      z  }| j                  j                  ||||       |t        j                  dd      z  }y rv  r   r   rp  r   r   s        r(   r   zASTParenExpr.describe_signature  J     	800c::		$$WdC@800c::r'   Nrp  r   r   r   r   r   r   r   r   r  r&   r'   r(   rm  rm    sH    '
0);";*-;4D;NT;	;r'   rm  c                  P    e Zd ZddZd	dZd
dZddZddZ	 	 	 	 	 	 	 	 	 	 ddZy)ASTIdExpressionc                    || _         y r:   rG   r6   s     r(   r8   zASTIdExpression.__init__  s	    	r'   c                `    t        |t              st        S | j                  |j                  k(  S r:   )r.   r  r;   r4   r<   s     r(   r>   zASTIdExpression.__eq__  %    %1!!yyEJJ&&r'   c                ,    t        | j                        S r:   rA   rC   s    r(   rD   zASTIdExpression.__hash__  rE   r'   c                &     || j                         S r:   rG   rH   s     r(   rJ   zASTIdExpression._stringify  rK   r'   c                8    | j                   j                  |      S r:   r4   r[   rY   s     r(   r[   zASTIdExpression.get_id  rz  r'   c                @    | j                   j                  ||||       y r:   )r4   r   r   s        r(   r   z"ASTIdExpression.describe_signature       			$$WdC@r'   Nr4   r   r   r   r   r   r   r   r   r  r&   r'   r(   r  r    sN    '
$)A"A*-A4DANTA	Ar'   r  c                  0    e Zd ZddZ	 	 	 	 	 	 	 	 	 	 ddZy)ASTPostfixOpc                *    t        t        |             r:   r   r7   idPrefixrZ   s      r(   r[   zASTPostfixOp.get_id  r   r'   c                *    t        t        |             r:   r   r   s        r(   r   zASTPostfixOp.describe_signature  r   r'   Nr  r/   rZ   r   r   r/   r   r   r&   r'   r(   r  r    r   r'   r  c                  P    e Zd ZddZd	dZd
dZddZddZ	 	 	 	 	 	 	 	 	 	 ddZy)ASTPostfixArrayc                    || _         y r:   ro  rq  s     r(   r8   zASTPostfixArray.__init__  r  r'   c                `    t        |t              st        S | j                  |j                  k(  S r:   )r.   r  r;   rp  r<   s     r(   r>   zASTPostfixArray.__eq__  r  r'   c                ,    t        | j                        S r:   rt  rC   s    r(   rD   zASTPostfixArray.__hash__  rE   r'   c                2    d || j                         z   dz   S N[]ro  rH   s     r(   rJ   zASTPostfixArray._stringify  rw  r'   c                D    d|z   | j                   j                  |      z   S )Nixry  r  s      r(   r[   zASTPostfixArray.get_id       h!1!1'!:::r'   c                    |t        j                  dd      z  }| j                  j                  ||||       |t        j                  dd      z  }y r  r|  r   s        r(   r   z"ASTPostfixArray.describe_signature  r}  r'   Nr~  r   r   r   r  r   r  r&   r'   r(   r  r    sH    '
0;;";*-;4D;NT;	;r'   r  c                  P    e Zd ZddZd	dZd
dZddZddZ	 	 	 	 	 	 	 	 	 	 ddZy)ASTPostfixMemberc                    || _         y r:   rG   r6   s     r(   r8   zASTPostfixMember.__init__  r  r'   c                `    t        |t              st        S | j                  |j                  k(  S r:   )r.   r  r;   r4   r<   s     r(   r>   zASTPostfixMember.__eq__  r  r'   c                ,    t        | j                        S r:   rA   rC   s    r(   rD   zASTPostfixMember.__hash__  rE   r'   c                ,    d || j                         z   S )N.rG   rH   s     r(   rJ   zASTPostfixMember._stringify  s    Ytyy)))r'   c                D    d|z   | j                   j                  |      z   S )Ndtr  r  s      r(   r[   zASTPostfixMember.get_id  r  r'   c                r    |t        j                  dd      z  }| j                  j                  |d||       y )Nr  rp   )r   r   r4   r   r   s        r(   r   z#ASTPostfixMember.describe_signature   s3     	800c::		$$WlCHr'   Nr  r   r   r   r  r   r  r&   r'   r(   r  r    sN    '
*;I"I*-I4DINTI	Ir'   r  c                  P    e Zd ZddZd	dZd
dZddZddZ	 	 	 	 	 	 	 	 	 	 ddZy)ASTPostfixMemberOfPointerc                    || _         y r:   rG   r6   s     r(   r8   z"ASTPostfixMemberOfPointer.__init__  r  r'   c                `    t        |t              st        S | j                  |j                  k(  S r:   )r.   r  r;   r4   r<   s     r(   r>   z ASTPostfixMemberOfPointer.__eq__  s&    %!:;!!yyEJJ&&r'   c                ,    t        | j                        S r:   rA   rC   s    r(   rD   z"ASTPostfixMemberOfPointer.__hash__  rE   r'   c                ,    d || j                         z   S )N->rG   rH   s     r(   rJ   z$ASTPostfixMemberOfPointer._stringify  s    i		***r'   c                D    d|z   | j                   j                  |      z   S )Nptr  r  s      r(   r[   z ASTPostfixMemberOfPointer.get_id  r  r'   c                r    |t        j                  dd      z  }| j                  j                  |d||       y )Nr  rp   )r   rj  r4   r   r   s        r(   r   z,ASTPostfixMemberOfPointer.describe_signature  s3     	8--dD99		$$WlCHr'   Nr  r   r   r   r  r   r  r&   r'   r(   r  r    sN    '
+;I"I*-I4DINTI	Ir'   r  c                  H    e Zd ZddZddZd	dZd
dZ	 	 	 	 	 	 	 	 	 	 ddZy)ASTPostfixIncc                "    t        |t              S r:   )r.   r  r<   s     r(   r>   zASTPostfixInc.__eq__!      %//r'   c                    t        d      S Nz++r   rC   s    r(   rD   zASTPostfixInc.__hash__$      Dzr'   c                     yr  r&   rH   s     r(   rJ   zASTPostfixInc._stringify'      r'   c                    d|z   S )Nppr&   r  s      r(   r[   zASTPostfixInc.get_id*      hr'   c                6    |t        j                  dd      z  }y r  r   rj  r   s        r(   r   z ASTPostfixInc.describe_signature-       	8--dD99r'   Nr   r   r   r  r   r   r&   r'   r(   r  r     C    0:":*-:4D:NT:	:r'   r  c                  H    e Zd ZddZddZd	dZd
dZ	 	 	 	 	 	 	 	 	 	 ddZy)ASTPostfixDecc                "    t        |t              S r:   )r.   r  r<   s     r(   r>   zASTPostfixDec.__eq__4  r  r'   c                    t        d      S Nz--r   rC   s    r(   rD   zASTPostfixDec.__hash__7  r  r'   c                     yr  r&   rH   s     r(   rJ   zASTPostfixDec._stringify:  r  r'   c                    d|z   S )Nmmr&   r  s      r(   r[   zASTPostfixDec.get_id=  r  r'   c                6    |t        j                  dd      z  }y r  r  r   s        r(   r   z ASTPostfixDec.describe_signature@  r  r'   Nr   r   r   r  r   r   r&   r'   r(   r  r  3  r  r'   r  c                  P    e Zd ZddZd	dZd
dZddZddZ	 	 	 	 	 	 	 	 	 	 ddZy)ASTPostfixCallExprc                    || _         y r:   lst)r7   r  s     r(   r8   zASTPostfixCallExpr.__init__G  	    r'   c                `    t        |t              st        S | j                  |j                  k(  S r:   )r.   r  r;   r  r<   s     r(   r>   zASTPostfixCallExpr.__eq__J  s&    %!34!!xx599$$r'   c                ,    t        | j                        S r:   )rB   r  rC   s    r(   rD   zASTPostfixCallExpr.__hash__O      DHH~r'   c                &     || j                         S r:   r  rH   s     r(   rJ   zASTPostfixCallExpr._stringifyR  s    ""r'   c                l    dj                  d|gfd| j                  j                  D        d      S )Nre   clc              3  @   K   | ]  }|j                          y wr:   r   r   erZ   s     r(   r   z,ASTPostfixCallExpr.get_id.<locals>.<genexpr>Y  s     8Aahhw8r   r   )r   r  exprsr  s     `r(   r[   zASTPostfixCallExpr.get_idU  s@    ww
 98
 	
  	r'   c                @    | j                   j                  ||||       y r:   )r  r   r   s        r(   r   z%ASTPostfixCallExpr.describe_signature]  s     	##GT3?r'   N)r  $ASTParenExprList | ASTBracedInitListr   r   r   r   r   r  r   r  r&   r'   r(   r  r  F  sN    %
#@"@*-@4D@NT@	@r'   r  c                  P    e Zd ZddZd	dZd
dZddZddZ	 	 	 	 	 	 	 	 	 	 ddZy)ASTPostfixExprc                     || _         || _        y r:   )r   	postFixes)r7   r   r  s      r(   r8   zASTPostfixExpr.__init__d  s    "r'   c                    t        |t              st        S | j                  |j                  k(  xr | j                  |j                  k(  S r:   )r.   r  r;   r   r  r<   s     r(   r>   zASTPostfixExpr.__eq__h  s7    %0!!{{ell*Pt~~/PPr'   c                D    t        | j                  | j                  f      S r:   )rB   r   r  rC   s    r(   rD   zASTPostfixExpr.__hash__m  s    T[[$..122r'   c                r    dj                   | j                        gfd| j                  D              S )Nre   c              3  .   K   | ]  } |        y wr:   r&   )r   prI   s     r(   r   z,ASTPostfixExpr._stringify.<locals>.<genexpr>s  s     3qil3   )r   r   r  rH   s    `r(   rJ   zASTPostfixExpr._stringifyp  s6    wwdkk"
3DNN3
  	r'   c                    | j                   j                  |      }| j                  D ]  }|j                  ||      } |S r:   )r   r[   r  )r7   rZ   idr  s       r(   r[   zASTPostfixExpr.get_idv  s>    [[( 	'A"g&B	'	r'   c                    | j                   j                  ||||       | j                  D ]  }|j                  ||||        y r:   )r   r   r  )r7   r|   r}   r~   r   r  s         r(   r   z!ASTPostfixExpr.describe_signature|  sC     	&&wc6B 	=A  $V<	=r'   N)r   ASTTyper  zlist[ASTPostfixOp]r   r   r   r   r   r   r   r  r&   r'   r(   r  r  c  sI    #Q
3="=*-=4D=NT=	=r'   r  c                  P    e Zd ZddZd	dZd
dZddZddZ	 	 	 	 	 	 	 	 	 	 ddZy)ASTExplicitCastc                B    |t         v sJ || _        || _        || _        y r:   )r   casttyprp  )r7   r  r  rp  s       r(   r8   zASTExplicitCast.__init__  s&    ((((		r'   c                    t        |t              st        S | j                  |j                  k(  xr4 | j                  |j                  k(  xr | j
                  |j
                  k(  S r:   )r.   r  r;   r  r  rp  r<   s     r(   r>   zASTExplicitCast.__eq__  sQ    %1!!II# (EII%(		UZZ'	
r'   c                Z    t        | j                  | j                  | j                  f      S r:   )rB   r  r  rp  rC   s    r(   rD   zASTExplicitCast.__hash__  s     TYY$))455r'   c                    | j                   g}|j                  d || j                        d || j                        df       dj	                  |      S )N<z>(rd  re   )r  r   r  rp  r   r   s      r(   rJ   zASTExplicitCast._stringify  sO    yyk

dhhdii 
 	 wws|r'   c                    t         | j                     | j                  j                  |      z   | j                  j                  |      z   S r:   )r   r  r  r[   rp  rY   s     r(   r[   zASTExplicitCast.get_id  s?    dii(hhoog&'iiw'(	
r'   c                   |t        j                  | j                  | j                        z  }|t        j                  dd      z  }| j                  j                  ||||       |t        j                  dd      z  }|t        j                  dd      z  }| j                  j                  ||||       |t        j                  dd      z  }y )Nr  >ra  rd  )r   r   r  r   r  r   rp  r   s        r(   r   z"ASTExplicitCast.describe_signature  s     	8,,TYY		BB800c::##GT3?800c::800c::		$$WdC@800c::r'   N)r  r/   r  r  rp  r   r   r   r   r   r   r   r   r  r&   r'   r(   r  r    sH    
6	
	;"	;*-	;4D	;NT	;		;r'   r  c                  P    e Zd ZddZd	dZd
dZddZddZ	 	 	 	 	 	 	 	 	 	 ddZy)	ASTTypeIdc                     || _         || _        y r:   )
typeOrExprisType)r7   r  r  s      r(   r8   zASTTypeId.__init__  s    $r'   c                    t        |t              st        S | j                  |j                  k(  xr | j                  |j                  k(  S r:   )r.   r  r;   r  r  r<   s     r(   r>   zASTTypeId.__eq__  s9    %+!!%"2"22Rt{{ell7RRr'   c                D    t        | j                  | j                  f      S r:   )rB   r  r  rC   s    r(   rD   zASTTypeId.__hash__  s    T__dkk233r'   c                2    d || j                         z   dz   S )Nztypeid(rd  )r  rH   s     r(   rJ   zASTTypeId._stringify  s    9T__55;;r'   c                ^    | j                   rdnd}|| j                  j                  |      z   S )Ntite)r  r  r[   )r7   rZ   r   s      r(   r[   zASTTypeId.get_id  s)    $..w777r'   c                    |t        j                  dd      z  }|t        j                  dd      z  }| j                  j	                  ||||       |t        j                  dd      z  }y )Ntypeidra  rd  )r   r   r   r  r   r   s        r(   r   zASTTypeId.describe_signature  sa     	8,,Xx@@800c::**7D#vF800c::r'   N)r  zASTType | ASTExpressionr  r   r   r   r   r   r   r   r   r  r&   r'   r(   r  r    sI    S
4<8;";*-;4D;NT;	;r'   r  c                  P    e Zd ZddZd	dZd
dZddZddZ	 	 	 	 	 	 	 	 	 	 ddZy)ASTUnaryOpExprc                     || _         || _        y r:   rY  rp  )r7   rY  rp  s      r(   r8   zASTUnaryOpExpr.__init__  s    	r'   c                    t        |t              st        S | j                  |j                  k(  xr | j                  |j                  k(  S r:   )r.   r  r;   rY  rp  r<   s     r(   r>   zASTUnaryOpExpr.__eq__  s7    %0!!ww%((">tyyEJJ'>>r'   c                D    t        | j                  | j                  f      S r:   )rB   rY  rp  rC   s    r(   rD   zASTUnaryOpExpr.__hash__  s    TWWdii())r'   c                    | j                   d   dv r"| j                   dz    || j                        z   S | j                    || j                        z   S )Nr   cnrb  r  rH   s     r(   rJ   zASTUnaryOpExpr._stringify  sF    771:77S=9TYY#77777Ytyy111r'   c                `    t         | j                     | j                  j                  |      z   S r:   )r   rY  rp  r[   rY   s     r(   r[   zASTUnaryOpExpr.get_id  s%    $TWW-		0@0@0IIIr'   c                F   | j                   d   dv rE|t        j                  | j                   | j                         z  }|t        j                         z  }n-|t        j                  | j                   | j                         z  }| j
                  j                  ||||       y )Nr   r  )rY  r   r   r   rj  rp  r   r   s        r(   r   z!ASTUnaryOpExpr.describe_signature  s}     771:x00$''BBGx..00Gx11$''477CCG		$$WdC@r'   N)rY  r/   rp  r   r   r   r   r   r   r   r   r  r&   r'   r(   r  r    sO    ?
*2JA"A*-A4DANTA	Ar'   r  c                  P    e Zd ZddZd	dZd
dZddZddZ	 	 	 	 	 	 	 	 	 	 ddZy)ASTSizeofParamPackc                    || _         y r:   rg   r7   rg   s     r(   r8   zASTSizeofParamPack.__init__  	    $r'   c                `    t        |t              st        S | j                  |j                  k(  S r:   )r.   r  r;   rg   r<   s     r(   r>   zASTSizeofParamPack.__eq__  (    %!34!!%"2"222r'   c                ,    t        | j                        S r:   rB   rg   rC   s    r(   rD   zASTSizeofParamPack.__hash__       DOO$$r'   c                2    d || j                         z   dz   S )Nz
sizeof...(rd  r  rH   s     r(   rJ   zASTSizeofParamPack._stringify  s    i883>>r'   c                >    d| j                   j                  |      z   S )NsZ)rg   r[   rY   s     r(   r[   zASTSizeofParamPack.get_id  s    doo,,W555r'   c                   |t        j                  dd      z  }|t        j                  dd      z  }|t        j                  dd      z  }| j                  j	                  |d||dd       |t        j                  dd      z  }y )Nsizeofrc  ra  rd   re   )r   r   r   rd  )r   r   r   rg   r   r   s        r(   r   z%ASTSizeofParamPack.describe_signature	  s     	8,,Xx@@800>>800c::**ZVBR 	+ 	
 	800c::r'   Nrg   r+   r   r   r   r   r   r   r   r  r&   r'   r(   r  r    sH    %3
%?6	;"	;*-	;4D	;NT	;		;r'   r  c                  P    e Zd ZddZd	dZd
dZddZddZ	 	 	 	 	 	 	 	 	 	 ddZy)ASTSizeofTypec                    || _         y r:   r  r7   r  s     r(   r8   zASTSizeofType.__init__  r  r'   c                `    t        |t              st        S | j                  |j                  k(  S r:   )r.   r!  r;   r  r<   s     r(   r>   zASTSizeofType.__eq__  s%    %/!!xx599$$r'   c                ,    t        | j                        S r:   rB   r  rC   s    r(   rD   zASTSizeofType.__hash__  r  r'   c                2    d || j                         z   dz   S )Nzsizeof(rd  r#  rH   s     r(   rJ   zASTSizeofType._stringify!  s    9TXX..44r'   c                >    d| j                   j                  |      z   S )Nstr  r[   rY   s     r(   r[   zASTSizeofType.get_id$      dhhoog...r'   c                    |t        j                  dd      z  }|t        j                  dd      z  }| j                  j	                  ||||       |t        j                  dd      z  }y )Nr  ra  rd  r   r   r   r  r   r   s        r(   r   z ASTSizeofType.describe_signature'  sa     	8,,Xx@@800c::##GT3?800c::r'   Nr  r  r   r   r   r   r   r   r   r  r&   r'   r(   r!  r!    sH    %
5/;";*-;4D;NT;	;r'   r!  c                  P    e Zd ZddZd	dZd
dZddZddZ	 	 	 	 	 	 	 	 	 	 ddZy)ASTSizeofExprc                    || _         y r:   ro  rq  s     r(   r8   zASTSizeofExpr.__init__1  r  r'   c                `    t        |t              st        S | j                  |j                  k(  S r:   )r.   r1  r;   rp  r<   s     r(   r>   zASTSizeofExpr.__eq__4  r?   r'   c                ,    t        | j                        S r:   rt  rC   s    r(   rD   zASTSizeofExpr.__hash__9  rE   r'   c                ,    d || j                         z   S )Nzsizeof ro  rH   s     r(   rJ   zASTSizeofExpr._stringify<  s    9TYY///r'   c                >    d| j                   j                  |      z   S )Nszry  rY   s     r(   r[   zASTSizeofExpr.get_id?      dii&&w///r'   c                    |t        j                  dd      z  }|t        j                         z  }| j                  j	                  ||||       y )Nr  r   r   r   rp  r   r   s        r(   r   z ASTSizeofExpr.describe_signatureB  sF     	8,,Xx@@8**,,		$$WdC@r'   Nr~  r   r   r   r   r   r  r&   r'   r(   r1  r1  0  sN    '
00A"A*-A4DANTA	Ar'   r1  c                  P    e Zd ZddZd	dZd
dZddZddZ	 	 	 	 	 	 	 	 	 	 ddZy)ASTAlignofExprc                    || _         y r:   r#  r$  s     r(   r8   zASTAlignofExpr.__init__K  r  r'   c                `    t        |t              st        S | j                  |j                  k(  S r:   )r.   r<  r;   r  r<   s     r(   r>   zASTAlignofExpr.__eq__N  s%    %0!!xx599$$r'   c                ,    t        | j                        S r:   r'  rC   s    r(   rD   zASTAlignofExpr.__hash__S  r  r'   c                2    d || j                         z   dz   S )Nzalignof(rd  r#  rH   s     r(   rJ   zASTAlignofExpr._stringifyV  s    Idhh//#55r'   c                >    d| j                   j                  |      z   S )Natr+  rY   s     r(   r[   zASTAlignofExpr.get_idY  r,  r'   c                    |t        j                  dd      z  }|t        j                  dd      z  }| j                  j	                  ||||       |t        j                  dd      z  }y )Nalignofra  rd  r.  r   s        r(   r   z!ASTAlignofExpr.describe_signature\  sa     	8,,Y	BB800c::##GT3?800c::r'   Nr/  r   r   r   r   r   r  r&   r'   r(   r<  r<  J  sH    %
6/;";*-;4D;NT;	;r'   r<  c                  P    e Zd ZddZd	dZd
dZddZddZ	 	 	 	 	 	 	 	 	 	 ddZy)ASTNoexceptExprc                    || _         y r:   ro  rq  s     r(   r8   zASTNoexceptExpr.__init__f  r  r'   c                `    t        |t              st        S | j                  |j                  k(  S r:   )r.   rF  r;   rp  r<   s     r(   r>   zASTNoexceptExpr.__eq__i  r  r'   c                ,    t        | j                        S r:   rt  rC   s    r(   rD   zASTNoexceptExpr.__hash__n  rE   r'   c                2    d || j                         z   dz   S )N	noexcept(rd  ro  rH   s     r(   rJ   zASTNoexceptExpr._stringifyq      Ytyy11C77r'   c                >    d| j                   j                  |      z   S )Nnxry  rY   s     r(   r[   zASTNoexceptExpr.get_idt  r8  r'   c                    |t        j                  dd      z  }|t        j                  dd      z  }| j                  j	                  ||||       |t        j                  dd      z  }y )Nnoexceptra  rd  r   r   r   rp  r   r   s        r(   r   z"ASTNoexceptExpr.describe_signaturew  a     	8,,ZDD800c::		$$WdC@800c::r'   Nr~  r   r   r   r   r   r  r&   r'   r(   rF  rF  e  sH    '
80;";*-;4D;NT;	;r'   rF  c                  d    e Zd Z	 	 	 	 	 	 	 	 	 	 ddZd	dZd
dZddZddZ	 	 	 	 	 	 	 	 	 	 ddZy)
ASTNewExprc                <    || _         || _        || _        || _        y r:   )r   isNewTypeIdr  initList)r7   r   rV  r  rW  s        r(   r8   zASTNewExpr.__init__  s!     & r'   c                   t        |t              st        S | j                  |j                  k(  xrO | j                  |j                  k(  xr4 | j
                  |j
                  k(  xr | j                  |j                  k(  S r:   )r.   rT  r;   r   rV  r  rW  r<   s     r(   r>   zASTNewExpr.__eq__  sl    %,!!KK5<<' 0  E$5$550EII%0 /		
r'   c                p    t        | j                  | j                  | j                  | j                  f      S r:   )rB   r   rV  r  rW  rC   s    r(   rD   zASTNewExpr.__hash__  s(    T[[$"2"2DHHdmmLMMr'   c                F   g }| j                   r|j                  d       |j                  d       | j                  r"|j                   || j                               nt        | j
                  !|j                   || j
                               dj                  |      S )Nr   znew re   )r   rz   rV  r  r1   rW  r   r   s      r(   rJ   zASTNewExpr._stringify  sw    ;;JJt

6JJy*+  ==$JJy/0wws|r'   c                   dg}|j                  d| j                  j                  |      f       | j                  +|j	                  | j                  j                  |             n|j	                  d       dj                  |      S )Nnw_r   re   )r   r  r[   rW  rz   r   r   s      r(   r[   zASTNewExpr.get_id  se    f

C123==$JJt}}++G45JJsOwws|r'   c                f   | j                   r|t        j                  dd      z  }|t        j                  dd      z  }|t        j                         z  }| j
                  r| j                  j                  ||||       nt        | j                  | j                  j                  ||||       y y )Nr   new)
r   r   r   r   r   rV  r  r   r1   rW  r   s        r(   r   zASTNewExpr.describe_signature  s     ;;x44T4@@G8,,UE::8**,,HH''sFC  ==$MM,,WdCH %r'   N)
r   r   rV  r   r  r  rW  r  r   r   r   r   r   r   r   r  r&   r'   r(   rT  rT    s    
!
! 
! 	
!
 7
! 

!
N	I"I*-I4DINTI	Ir'   rT  c                  P    e Zd ZddZd	dZd
dZddZddZ	 	 	 	 	 	 	 	 	 	 ddZy)ASTDeleteExprc                .    || _         || _        || _        y r:   )r   arrayrp  )r7   r   rc  rp  s       r(   r8   zASTDeleteExpr.__init__  s    
	r'   c                    t        |t              st        S | j                  |j                  k(  xr4 | j                  |j                  k(  xr | j
                  |j
                  k(  S r:   )r.   ra  r;   r   rc  rp  r<   s     r(   r>   zASTDeleteExpr.__eq__  sQ    %/!!KK5<<' (

ekk)(		UZZ'	
r'   c                Z    t        | j                  | j                  | j                  f      S r:   )rB   r   rc  rp  rC   s    r(   rD   zASTDeleteExpr.__hash__  s     T[[$**dii899r'   c                    g }| j                   r|j                  d       |j                  d       | j                  r|j                  d       |j                   || j                               dj	                  |      S )Nr   zdelete z[] re   )r   rz   rc  rp  r   r   s      r(   rJ   zASTDeleteExpr._stringify  s\    ;;JJt

9::JJu

9TYY'(wws|r'   c                `    | j                   rd}nd}|| j                  j                  |      z   S )Ndadl)rc  rp  r[   r7   rZ   r  s      r(   r[   zASTDeleteExpr.get_id  s-    ::BBDII$$W---r'   c                b   | j                   r|t        j                  dd      z  }|t        j                  dd      z  }|t        j                         z  }| j
                  r0|t        j                  dd      z  }|t        j                         z  }| j                  j                  ||||       y )Nr   delete[])r   r   r   r   r   rc  rp  r   r   s        r(   r   z ASTDeleteExpr.describe_signature  s     ;;x44T4@@G8,,Xx@@8**,,::x44T4@@Gx..00G		$$WdC@r'   N)r   r   rc  r   rp  r   r   r   r   r   r   r   r   r  r&   r'   r(   ra  ra    sN    

:.
A"
A*-
A4D
ANT
A	
Ar'   ra  c                  P    e Zd ZddZd	dZd
dZddZddZ	 	 	 	 	 	 	 	 	 	 ddZy)ASTCastExprc                     || _         || _        y r:   )r  rp  )r7   r  rp  s      r(   r8   zASTCastExpr.__init__  s    	r'   c                    t        |t              st        S | j                  |j                  k(  xr | j                  |j                  k(  S r:   )r.   ro  r;   r  rp  r<   s     r(   r>   zASTCastExpr.__eq__  s7    %-!!xx599$@ejj)@@r'   c                D    t        | j                  | j                  f      S r:   )rB   r  rp  rC   s    r(   rD   zASTCastExpr.__hash__  s    TXXtyy)**r'   c                    dg}|j                   || j                        d || j                        f       dj                  |      S Nra  rd  re   )r   r  rp  r   r   s      r(   rJ   zASTCastExpr._stringify  sE    e

dhhdii 
 	
 wws|r'   c                v    d| j                   j                  |      z   | j                  j                  |      z   S )Ncv)r  r[   rp  rY   s     r(   r[   zASTCastExpr.get_id  s.    dhhoog..1A1A'1JJJr'   c                    |t        j                  dd      z  }| j                  j                  ||||       |t        j                  dd      z  }| j                  j                  ||||       y rv  )r   r   r  r   rp  r   s        r(   r   zASTCastExpr.describe_signature  sb     	800c::##GT3?800c::		$$WdC@r'   N)r  r  rp  r   r   r   r   r   r   r   r   r  r&   r'   r(   ro  ro    sP    A
+KA"A*-A4DANTA	Ar'   ro  c                  P    e Zd ZddZd	dZd
dZddZddZ	 	 	 	 	 	 	 	 	 	 ddZy)ASTBinOpExprc                x    t        |      dkD  sJ t        |      t        |      dz   k(  sJ || _        || _        y r   )r0   r  ops)r7   r  r{  s      r(   r8   zASTBinOpExpr.__init__  s:    5zA~~5zSX\)))
r'   c                    t        |t              st        S | j                  |j                  k(  xr | j                  |j                  k(  S r:   )r.   ry  r;   r  r{  r<   s     r(   r>   zASTBinOpExpr.__eq__   s7    %.!!zzU[[(BTXX-BBr'   c                D    t        | j                  | j                  f      S r:   )rB   r  r{  rC   s    r(   rD   zASTBinOpExpr.__hash__%  s    TZZ*++r'   c           
         || j                   d         g}t        dt        | j                               D ]:  }|j                  d| j                  |dz
     d || j                   |         f       < dj                  |      S )Nr   rR   rb  re   )r  r   r0   r   r{  r   )r7   rI   r   r   s       r(   rJ   zASTBinOpExpr._stringify(  s{    A'(q#djj/* 	AJJQ$**Q-(	 	 wws|r'   c                \   |dk\  sJ g }t        t        | j                              D ]E  }|j                  t        | j                  |      | j
                  |   j                  |      f       G |j                  | j
                  d   j                  |             dj                  |      S )Nr   r   re   )	r   r0   r{  r   r   r  r[   rz   r   )r7   rZ   r   r   s       r(   r[   zASTBinOpExpr.get_id3  s    !||s488}% 	VAJJ4djjm6J6J76STU	V

4::b>((12wws|r'   c                   | j                   d   j                  ||||       t        dt        | j                               D ]  }|t	        j
                         z  }| j                  |dz
     }t        |d         t        d      k\  r4t        |d         t        d      k  r|t	        j                  ||      z  }n|t	        j                  ||      z  }|t	        j
                         z  }| j                   |   j                  ||||        y )Nr   rR   az)
r  r   r   r0   r   r   r{  r4  r   rj  )r7   r|   r}   r~   r   r   rY  s          r(   r   zASTBinOpExpr.describe_signature;  s     	

1(($VDq#djj/* 	IAx..00G!a%B2a5zSX%#be*C*@844R<<855b"==x..00GJJqM,,WdCH	Ir'   N)r  list[ASTExpression]r{  	list[str]r   r   r   r   r   r   r   r  r&   r'   r(   ry  ry    sO    C
,	I"I*-I4DINTI	Ir'   ry  c                  `    e Zd Z	 	 	 	 	 	 	 	 ddZd	dZd
dZddZddZ	 	 	 	 	 	 	 	 	 	 ddZy)ASTConditionalExprc                .    || _         || _        || _        y r:   )ifExprthenExprelseExpr)r7   r  r  r  s       r(   r8   zASTConditionalExpr.__init__K  s       r'   c                    t        |t              st        S | j                  |j                  k(  xr4 | j                  |j                  k(  xr | j
                  |j
                  k(  S r:   )r.   r  r;   r  r  r  r<   s     r(   r>   zASTConditionalExpr.__eq__R  sR    %!34!!KK5<<' 0/0/	
r'   c                Z    t        | j                  | j                  | j                  f      S r:   )rB   r  r  r  rC   s    r(   rD   zASTConditionalExpr.__hash__[  s     T[[$--?@@r'   c           	         g }|j                   || j                        d || j                        d || j                        f       dj	                  |      S )Nz ?  : re   )r   r  r  r  r   r   s      r(   rJ   zASTConditionalExpr._stringify^  sR    

dkk"dmm$dmm$
 	 wws|r'   c                   |dk\  sJ g }|j                  t        d   | j                  j                  |      | j                  j                  |      | j
                  j                  |      f       dj                  |      S )Nr   ?re   )r   r   r  r[   r  r  r   r   s      r(   r[   zASTConditionalExpr.get_idi  sr    !||

C KKw'MM  )MM  )	
 	 wws|r'   c                   | j                   j                  ||||       |t        j                         z  }|t        j                  dd      z  }|t        j                         z  }| j
                  j                  ||||       |t        j                         z  }|t        j                  dd      z  }|t        j                         z  }| j                  j                  ||||       y )Nr  :)r  r   r   r   rj  r  r  r   s        r(   r   z%ASTConditionalExpr.describe_signaturet  s     	&&wc6B8**,,8--c3778**,,(($VD8**,,8--c3778**,,(($VDr'   N)r  r   r  r   r  r   r   r   r   r   r   r   r   r  r&   r'   r(   r  r  J  so    !#!/<!HU!	!
A		E"E*-E4DENTE	Er'   r  c                  \    e Zd Z	 	 	 	 	 	 ddZd	dZd
dZddZddZ	 	 	 	 	 	 	 	 	 	 ddZy)ASTBracedInitListc                     || _         || _        y r:   )r  trailingComma)r7   r  r  s      r(   r8   zASTBracedInitList.__init__  s     
*r'   c                    t        |t              st        S | j                  |j                  k(  xr | j                  |j                  k(  S r:   )r.   r  r;   r  r  r<   s     r(   r>   zASTBracedInitList.__eq__  s<    %!23!!zzU[[(VT-?-?5CVCV-VVr'   c                D    t        | j                  | j                  f      S r:   )rB   r  r  rC   s    r(   rD   zASTBracedInitList.__hash__      TZZ!3!3455r'   c                R    ddj                  fd| j                  D              z  S )Nzil%sEre   c              3  @   K   | ]  }|j                          y wr:   r   r  s     r(   r   z+ASTBracedInitList.get_id.<locals>.<genexpr>  r   r   r   r  rY   s    `r(   r[   zASTBracedInitList.get_id  !     GDJJ GGGGr'   c                |    dj                  fd| j                  D              }| j                  rdnd}d| | dS )N, c              3  .   K   | ]  } |        y wr:   r&   r   r  rI   s     r(   r   z/ASTBracedInitList._stringify.<locals>.<genexpr>  s     ;1)A,;r  ,re   {})r   r  r  )r7   rI   r  trailing_commas    `  r(   rJ   zASTBracedInitList._stringify  s>    		;

;; $ 2 2E7>*"--r'   c                   t        |       |t        j                  dd      z  }d}| j                  D ]K  }|s1|t        j                  dd      z  }|t        j                         z  }nd}|j                  ||||       M | j                  r|t        j                  dd      z  }|t        j                  dd      z  }y )Nr  Tr  Fr  )r   r   r   r  r   r   r  r7   r|   r}   r~   r   r   r  s          r(   r   z$ASTBracedInitList.describe_signature  s     	 %800c:: 	=A888cBB82244  $V<	= x44S#>>G800c::r'   N)r  'list[ASTExpression | ASTBracedInitList]r  r   r   r   r   r   r   r   r   	r#   r$   r%   r8   r>   rD   r[   rJ   r   r&   r'   r(   r  r    sb    +<+MQ+	+W
6H.
;";*-;4D;NT;	;r'   r  c                  `    e Zd Z	 	 	 	 	 	 	 	 ddZd	dZd
dZddZddZ	 	 	 	 	 	 	 	 	 	 ddZy)ASTAssignmentExprc                .    || _         || _        || _        y r:   rW  r[  s       r(   r8   zASTAssignmentExpr.__init__  s     !"r'   c                    t        |t              st        S | j                  |j                  k(  xr4 | j                  |j                  k(  xr | j
                  |j
                  k(  S r:   )r.   r  r;   rX  rY  rZ  r<   s     r(   r>   zASTAssignmentExpr.__eq__  sR    %!23!!MMU^^+ 2588#2%//1	
r'   c                Z    t        | j                  | j                  | j                  f      S r:   r^  rC   s    r(   rD   zASTAssignmentExpr.__hash__  r_  r'   c           	         g }|j                   || j                        d| j                  d || j                        f       dj	                  |      S Nrb  re   )r   rX  rY  rZ  r   r   s      r(   rJ   zASTAssignmentExpr._stringify  sM    

dmm$GGdnn%
 	 wws|r'   c                    g }|j                  t        | j                     | j                  j	                  |      | j
                  j	                  |      f       dj                  |      S Nre   )r   r   rY  rX  r[   rZ  r   r   s      r(   r[   zASTAssignmentExpr.get_id  sX    

DGG$MM  )NN!!'*
 	
 wws|r'   c                   | j                   j                  ||||       |t        j                         z  }t	        | j
                  d         t	        d      k\  rRt	        | j
                  d         t	        d      k  r.|t        j                  | j
                  | j
                        z  }n-|t        j                  | j
                  | j
                        z  }|t        j                         z  }| j                  j                  ||||       y )Nr   r  r  )	rX  r   r   r   r4  rY  r   rj  rZ  r   s        r(   r   z$ASTAssignmentExpr.describe_signature  s     	(($VD8**,,twwqz?c#h&3twwqz?c#h+Fx00$''BBGx11$''477CCG8**,,))'4fEr'   N)rX  r   rY  r/   rZ  !ASTExpression | ASTBracedInitListr   r   r   r   r   r   r   r  r&   r'   r(   r  r    st    ## # 5	#
 
#
>	
F"
F*-
F4D
FNT
F	
Fr'   r  c                  P    e Zd ZddZd	dZd
dZddZddZ	 	 	 	 	 	 	 	 	 	 ddZy)ASTCommaExprc                2    t        |      dkD  sJ || _        y r   )r0   r  r7   r  s     r(   r8   zASTCommaExpr.__init__  s    5zA~~
r'   c                `    t        |t              st        S | j                  |j                  k(  S r:   )r.   r  r;   r  r<   s     r(   r>   zASTCommaExpr.__eq__  s%    %.!!zzU[[((r'   c                ,    t        | j                        S r:   rB   r  rC   s    r(   rD   zASTCommaExpr.__hash__  r	  r'   c                L    dj                  fd| j                  D              S )Nr  c              3  .   K   | ]  } |        y wr:   r&   r  s     r(   r   z*ASTCommaExpr._stringify.<locals>.<genexpr>  s     :!1:r  r  rH   s    `r(   rJ   zASTCommaExpr._stringify  s    yy:tzz:::r'   c                >   t         d   }g }t        t        | j                        dz
        D ]1  }|j	                  || j                  |   j                  |      f       3 |j                  | j                  d   j                  |             dj                  |      S )Nr  rR   r   re   )r   r   r0   r  r   r[   rz   r   )r7   rZ   id_r   r   s        r(   r[   zASTCommaExpr.get_id  s    c"s4::*+ 	=AJJTZZ]11':;<	=

4::b>((12wws|r'   c                0   | j                   d   j                  ||||       t        dt        | j                               D ]S  }|t	        j
                  dd      z  }|t	        j                         z  }| j                   |   j                  ||||       U y )Nr   rR   r  )r  r   r   r0   r   r   r   )r7   r|   r}   r~   r   r   s         r(   r   zASTCommaExpr.describe_signature  s     	

1(($VDq#djj/* 	IAx44S#>>Gx..00GJJqM,,WdCH	Ir'   N)r  r  r   r   r   r   r   r   r   r  r&   r'   r(   r  r    sN    )
 ;I"I*-I4DINTI	Ir'   r  c                  P    e Zd ZddZd	dZd
dZddZddZ	 	 	 	 	 	 	 	 	 	 ddZy)ASTFallbackExprc                    || _         y r:   ro  rq  s     r(   r8   zASTFallbackExpr.__init__  r  r'   c                `    t        |t              st        S | j                  |j                  k(  S r:   )r.   r  r;   rp  r<   s     r(   r>   zASTFallbackExpr.__eq__
  r  r'   c                ,    t        | j                        S r:   rt  rC   s    r(   rD   zASTFallbackExpr.__hash__  rE   r'   c                    | j                   S r:   ro  rH   s     r(   rJ   zASTFallbackExpr._stringify  r^   r'   c                ,    t        | j                        S r:   )r/   rp  rY   s     r(   r[   zASTFallbackExpr.get_id  s    499~r'   c                ^    |t        j                  | j                  | j                        z  }y r:   )r   rB  rp  r   s        r(   r   z"ASTFallbackExpr.describe_signature  s!     	5==DII66r'   N)rp  r/   r   r   r   r   r   r   r   r  r&   r'   r(   r  r    sH    '
7"7*-74D7NT7	7r'   r  c                      e Zd ZU dZded<   ddZddZddZddZddZ		 	 	 	 	 	 	 	 	 	 dd	Z
	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd
Zy)ASTOperatorFzClassVar[Literal[False]]r5   c                *    t        t        |             r:   r   r<   s     r(   r>   zASTOperator.__eq__)  r   r'   c                *    t        t        |             r:   r   rC   s    r(   rD   zASTOperator.__hash__,  r   r'   c                    | j                   S r:   rM   rC   s    r(   rN   zASTOperator.is_anon/  rO   r'   c                     yNTr&   rC   s    r(   r   zASTOperator.is_operator2  r  r'   c                    t         r:   r   rY   s     r(   r[   zASTOperator.get_id5  s    !!r'   c                    t         )zARender the prefix into signode, and the last part into identnode.r  r7   r|   	identnoder~   r   s        r(   _describe_identifierz ASTOperator._describe_identifier8  s
     "!r'   c                   t        |       |dk(  r.t        j                         }| j                  ||||       ||z  }y |dk(  r|t	        |       z   |z   }t        j
                  ddd|d d       }	|j                         |	d<   t        j                         }
| j                  ||
||       |
j                         }|	t        j                  ||      z  }	||	z  }y t        j                         }| j                  ||||       ||z  }y )Nro   rd   re   rf   rg   rh   rn   )r   r   ry   r  r/   rw   rx   r   rB  astextr   )r7   r|   r}   r~   r   r   r   	main_namer   r   	containerr=  add_names                r(   r   zASTOperator.describe_signatureB  s    	 %< **,I%%iCHy GZ 3t9,|;K))$%E '-&;&;&=E"#
 I%%gy#vF""$CX''S11EuG,,.H%%h#vFxGr'   Nr   r   r   r   
r|   r   r  r   r~   r   r   r   r   r   r   )r#   r$   r%   r5   __annotations__r>   rD   rN   r   r[   r  r   r&   r'   r(   r  r  &  s    -2L*2..!""" " 	"
 " 
"% %  %  	% 
 %  %  %  
% r'   r  c                  P    e Zd ZddZd	dZd
dZddZddZ	 	 	 	 	 	 	 	 	 	 ddZy)ASTOperatorBuildInc                    || _         y r:   rY  )r7   rY  s     r(   r8   zASTOperatorBuildIn.__init__k  s	    r'   c                `    t        |t              st        S | j                  |j                  k(  S r:   )r.   r  r;   rY  r<   s     r(   r>   zASTOperatorBuildIn.__eq__n  s&    %!34!!ww%((""r'   c                ,    t        | j                        S r:   )rB   rY  rC   s    r(   rD   zASTOperatorBuildIn.__hash__s  s    DGG}r'   c                    |dk(  rt         }| j                  |vrt        t        }| j                  |vrt	        d| j                  z        || j                     S )NrR   zBInternal error: Built-in operator "%s" can not be mapped to an id.)r   rY  r   r   r{   )r7   rZ   idss      r(   r[   zASTOperatorBuildIn.get_idv  s_    a<!Cwwc!""!C77#&(,0  477|r'   c                |    | j                   dv s| j                   d   dv rd| j                   z   S d| j                   z   S )N>   r_  rl  new[]delete[]r   abcnox	operator operatorr  rH   s     r(   rJ   zASTOperatorBuildIn._stringify  s<    77<<
h@V((''r'   c                    |t        j                  dd      z  }| j                  dv s| j                  d   dv r|t        j                         z  }|t        j                  | j                  | j                        z  }y )Nr  >   r_  rl  r  r  r   r  )r   r   rY  r   rj  r  s        r(   r  z'ASTOperatorBuildIn._describe_identifier  si     	8,,ZDD77<<
h@Vx..00GX//AA	r'   N)rY  r/   r   r   r   r   r   r   r  	r#   r$   r%   r8   r>   rD   r[   rJ   r  r&   r'   r(   r  r  j  sV    #
(
B
B 
B 	
B
 
B 

Br'   r  c                  P    e Zd ZddZd	dZd
dZddZddZ	 	 	 	 	 	 	 	 	 	 ddZy)ASTOperatorLiteralc                    || _         y r:   r  r  s     r(   r8   zASTOperatorLiteral.__init__  r  r'   c                `    t        |t              st        S | j                  |j                  k(  S r:   )r.   r  r;   rg   r<   s     r(   r>   zASTOperatorLiteral.__eq__  r  r'   c                ,    t        | j                        S r:   r  rC   s    r(   rD   zASTOperatorLiteral.__hash__  r  r'   c                T    |dk(  rt         d| j                  j                  |      z   S )NrR   li)r   rg   r[   rY   s     r(   r[   zASTOperatorLiteral.get_id  s)    a<doo,,W555r'   c                ,    d || j                         z   S )Nrt   r  rH   s     r(   rJ   zASTOperatorLiteral._stringify  s    i888r'   c                    |t        j                  dd      z  }|t        j                  dd      z  }| j                  j	                  |d|dd|       y )Nr  z""rd   re   )r   r   r-  rg   r   r  s        r(   r  z'ASTOperatorLiteral._describe_identifier  sN     	8,,ZDD833D$??**9j#r2vVr'   Nr  r   r   r   r   r  r  r&   r'   r(   r  r    sV    %3
%6
9	W	W 	W 		W
 	W 
	Wr'   r  c                  X    e Zd Zd	dZd
dZddZddZddZddZ	 	 	 	 	 	 	 	 	 	 ddZ	y)ASTOperatorTypec                    || _         y r:   r1  )r7   r1  s     r(   r8   zASTOperatorType.__init__  r  r'   c                `    t        |t              st        S | j                  |j                  k(  S r:   )r.   r  r;   r1  r<   s     r(   r>   zASTOperatorType.__eq__  r  r'   c                ,    t        | j                        S r:   )rB   r1  rC   s    r(   rD   zASTOperatorType.__hash__  rE   r'   c                    |dk(  rd| j                   j                  |      z  S d| j                   j                  |      z   S )NrR   zcastto-%s-operatorrv  )r1  r[   rY   s     r(   r[   zASTOperatorType.get_id  s=    a<'$))*:*:7*CCC$))**7333r'   c                ,    d || j                          S )Nr  r  rH   s     r(   rJ   zASTOperatorType._stringify  s    9TYY/011r'   c                    t        |       S r:   )r/   rC   s    r(   get_name_no_templatez$ASTOperatorType.get_name_no_template  s    4yr'   c                    |t        j                  dd      z  }|t        j                         z  }| j                  j	                  |d||       y )Nr  rd   )r   r   r   r1  r   r  s        r(   r  z$ASTOperatorType._describe_identifier  sF     	8,,ZDD8**,,		$$Y
CHr'   N)r1  r  r   r   r   r   r   r   r   r  )
r#   r$   r%   r8   r>   rD   r[   rJ   r  r  r&   r'   r(   r  r    s[    '
42	I	I 	I 		I
 	I 
	Ir'   r  c                  P    e Zd ZddZd	dZd
dZddZddZ	 	 	 	 	 	 	 	 	 	 ddZy)ASTTemplateArgConstantc                    || _         y r:   r  r  s     r(   r8   zASTTemplateArgConstant.__init__  r  r'   c                `    t        |t              st        S | j                  |j                  k(  S r:   )r.   r  r;   r  r<   s     r(   r>   zASTTemplateArgConstant.__eq__  s&    %!78!!zzU[[((r'   c                ,    t        | j                        S r:   r  rC   s    r(   rD   zASTTemplateArgConstant.__hash__  r	  r'   c                &     || j                         S r:   r  rH   s     r(   rJ   z!ASTTemplateArgConstant._stringify  s    $$r'   c                    |dk(  rt        |       j                  dd      S |dk(  rdt        |       z   dz   S d| j                  j                  |      z   dz   S )NrR   rb  -r   Xr   )r/   r   r  r[   rY   s     r(   r[   zASTTemplateArgConstant.get_id  sY    a<t9$$S#..a<T?S((TZZ&&w//#55r'   c                V    t        |       | j                  j                  ||||       y r:   )r   r  r   r   s        r(   r   z)ASTTemplateArgConstant.describe_signature  s$     	 %

%%gtS&Ar'   N)r  r   r   r   r   r   r   r   r   r  r&   r'   r(   r  r    sN    )
 %6B"B*-B4DBNTB	Br'   r  c                  \    e Zd Z	 	 	 	 	 	 ddZd	dZd
dZddZddZ	 	 	 	 	 	 	 	 	 	 ddZy)ASTTemplateArgsc                (    |J || _         || _        y r:   )argspackExpansion)r7   r  r  s      r(   r8   zASTTemplateArgs.__init__  s     	*r'   c                    t        |t              st        S | j                  |j                  k(  xr | j                  |j                  k(  S r:   )r.   r  r;   r  r  r<   s     r(   r>   zASTTemplateArgs.__eq__   s;    %1!!yyEJJ&T4+=+=ATAT+TTr'   c                D    t        | j                  | j                  f      S r:   )rB   r  r  rC   s    r(   rD   zASTTemplateArgs.__hash__  s    TYY 2 2344r'   c                P   dk(  rIg }|j                  ddj                  fd| j                  D              df       dj                  |      S dg}t        | j                        dkD  r| j                  d d D ]"  }|j	                  |j                               $ | j                  r|j	                  d	       |j	                  | j                  d   j                               | j                  r|j	                  d
       |j	                  d
       dj                  |      S )NrR   r  r  c              3  @   K   | ]  }|j                          y wr:   r   r   r  rZ   s     r(   r   z)ASTTemplateArgs.get_id.<locals>.<genexpr>  s     >q'*>r   re   Ir   r   Jr   )r   r   r  r0   rz   r[   r  )r7   rZ   r   r  s    `  r(   r[   zASTTemplateArgs.get_id  s    a<CJJ>DII>> 
 773<etyy>AYYs^ .

188G,-.!!

3JJtyy}++G45!!

3

3wws|r'   c                ~    dj                  fd| j                  D              }| j                  r|dz  }d|z   dz   S )Nr  c              3  .   K   | ]  } |        y wr:   r&   r   r  rI   s     r(   r   z-ASTTemplateArgs._stringify.<locals>.<genexpr>  s     8	!8r  rc  r  r  )r   r  r  r   s    ` r(   rJ   zASTTemplateArgs._stringify  s;    ii8dii885LCSy3r'   c                   t        |       |t        j                  dd      z  }d}| j                  D ]K  }|s0|t        j                  dd      z  }|t        j                         z  }d}|j                  |d||       M | j                  r|t        j                  dd      z  }|t        j                  dd      z  }y )	Nr  Tr  Frd   r   rc  r  )r   r   r   r  r   r   r  )r7   r|   r}   r~   r   r   r  s          r(   r   z"ASTTemplateArgs.describe_signature$  s     	 %800c:: 	JA888cBB82244E  *c& I	J x44UEBBG800c::r'   N)r  z&list[ASTType | ASTTemplateArgConstant]r  r   r   r   r   r   r   r   r   r  r&   r'   r(   r  r    sa    +:+KO+	+U
5,;";*-;4D;NT;	;r'   r  c                  0    e Zd ZddZ	 	 	 	 	 	 	 	 	 	 ddZy)ASTTrailingTypeSpecc                *    t        t        |             r:   r   rY   s     r(   r[   zASTTrailingTypeSpec.get_id:  r   r'   c                *    t        t        |             r:   r   r   s        r(   r   z&ASTTrailingTypeSpec.describe_signature=  r   r'   Nr   r   r   r&   r'   r(   r  r  9  r   r'   r  c                  P    e Zd ZddZd	dZd
dZddZddZ	 	 	 	 	 	 	 	 	 	 ddZy)ASTTrailingTypeSpecFundamentalc                    t        |      dk7  sJ t        |      t        |      k(  s	J ||f       || _        || _        y r   )r0   r   
canonNames)r7   r   r#  s      r(   r8   z'ASTTrailingTypeSpecFundamental.__init__D  s@    5zQ5zS_,Auj.AA,
$r'   c                    t        |t              st        S | j                  |j                  k(  xr | j                  |j                  k(  S r:   )r.   r!  r;   r   r#  r<   s     r(   r>   z%ASTTrailingTypeSpecFundamental.__eq__K  s:    %!?@!!zzU[[(PT__@P@P-PPr'   c                D    t        | j                  | j                  f      S r:   )rB   r   r#  rC   s    r(   rD   z'ASTTrailingTypeSpecFundamental.__hash__P  s    TZZ122r'   c                8    dj                  | j                        S )Nrb  )r   r   rH   s     r(   rJ   z)ASTTrailingTypeSpecFundamental._stringifyS  s    xx

##r'   c                ,   |dk(  rVg }| j                   D ]4  }|t        v r|j                  t        |          $|j                  |       6 dj                  |      S dj                  | j                         }|t        vrt        d|z        t        |   S )NrR   r  rb  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	   rz   r   r
   r{   )r7   rZ   r   r  r=  s        r(   r[   z%ASTTrailingTypeSpecFundamental.get_idV  s    a<C__ "**JJ1!45JJqM	"
 88C= hht'((2478 
 "#&&r'   c                    d}| j                   D ]7  }|s|t        j                         z  }nd}|t        j                  ||      z  }9 y )NTF)r   r   r   desc_sig_keyword_type)r7   r|   r}   r~   r   r   r   s          r(   r   z1ASTTrailingTypeSpecFundamental.describe_signaturei  sN      	<A82244x55a;;G	<r'   N)r   r  r#  r  r   r   r   r   r   r   r   r  r&   r'   r(   r!  r!  C  sI    %Q
3$'&	<"	<*-	<4D	<NT	<		<r'   r!  c                  H    e Zd ZddZddZd	dZd
dZ	 	 	 	 	 	 	 	 	 	 ddZy)ASTTrailingTypeSpecDecltypeAutoc                "    t        |t              S r:   )r.   r+  r<   s     r(   r>   z&ASTTrailingTypeSpecDecltypeAuto.__eq__v  s    %!@AAr'   c                    t        d      S Ndecltype(auto)r   rC   s    r(   rD   z(ASTTrailingTypeSpecDecltypeAuto.__hash__y  s    $%%r'   c                     yr.  r&   rH   s     r(   rJ   z*ASTTrailingTypeSpecDecltypeAuto._stringify|  s    r'   c                    |dk(  rt         y)NrR   Dc)r   rY   s     r(   r[   z&ASTTrailingTypeSpecDecltypeAuto.get_id  s    a<r'   c                    |t        j                  dd      z  }|t        j                  dd      z  }|t        j                  dd      z  }|t        j                  dd      z  }y )Ndecltypera  autord  )r   r   r   r   s        r(   r   z2ASTTrailingTypeSpecDecltypeAuto.describe_signature  s`     	8,,ZDD800c::8,,VV<<800c::r'   Nr   r   r   r   r   r   r&   r'   r(   r+  r+  u  sD    B& 
;";*-;4D;NT;	;r'   r+  c                  P    e Zd ZddZd	dZd
dZddZddZ	 	 	 	 	 	 	 	 	 	 ddZy)ASTTrailingTypeSpecDecltypec                    || _         y r:   ro  rq  s     r(   r8   z$ASTTrailingTypeSpecDecltype.__init__  r  r'   c                `    t        |t              st        S | j                  |j                  k(  S r:   )r.   r7  r;   rp  r<   s     r(   r>   z"ASTTrailingTypeSpecDecltype.__eq__  s&    %!<=!!yyEJJ&&r'   c                ,    t        | j                        S r:   rt  rC   s    r(   rD   z$ASTTrailingTypeSpecDecltype.__hash__  rE   r'   c                2    d || j                         z   dz   S )Nz	decltype(rd  ro  rH   s     r(   rJ   z&ASTTrailingTypeSpecDecltype._stringify  rL  r'   c                Z    |dk(  rt         d| j                  j                  |      z   dz   S )NrR   DTr   )r   rp  r[   rY   s     r(   r[   z"ASTTrailingTypeSpecDecltype.get_id  s.    a<dii&&w//#55r'   c                    |t        j                  dd      z  }|t        j                  dd      z  }| j                  j	                  ||||       |t        j                  dd      z  }y )Nr4  ra  rd  rQ  r   s        r(   r   z.ASTTrailingTypeSpecDecltype.describe_signature  rR  r'   Nr~  r   r   r   r   r   r  r&   r'   r(   r7  r7    sH    '
86
;";*-;4D;NT;	;r'   r7  c                  r    e Zd Z	 	 	 	 	 	 	 	 d	dZd
dZddZedd       ZddZddZ		 	 	 	 	 	 	 	 	 	 ddZ
y)ASTTrailingTypeSpecNamec                .    || _         || _        || _        y r:   )r   
nestedNameplaceholderType)r7   r   rB  rC  s       r(   r8   z ASTTrailingTypeSpecName.__init__  s     $.r'   c                    t        |t              st        S | j                  |j                  k(  xr4 | j                  |j                  k(  xr | j
                  |j
                  k(  S r:   )r.   r@  r;   r   rB  rC  r<   s     r(   r>   zASTTrailingTypeSpecName.__eq__  sX    %!89!!KK5<<' >5#3#33>$$(=(==	
r'   c                Z    t        | j                  | j                  | j                  f      S r:   )rB   r   rB  rC  rC   s    r(   rD   z ASTTrailingTypeSpecName.__hash__  s"    T[[$//43G3GHIIr'   c                    | j                   S r:   rB  rC   s    r(   r4   zASTTrailingTypeSpecName.name      r'   c                8    | j                   j                  |      S r:   )rB  r[   rY   s     r(   r[   zASTTrailingTypeSpecName.get_id  s    %%g..r'   c                   g }| j                   r|j                  | j                   df       |j                   || j                               | j                  |j                  d| j                  f       dj                  |      S r  )r   r   rz   rB  rC  r   r   s      r(   rJ   z"ASTTrailingTypeSpecName._stringify  si    ;;JJS)*

9T__-.+JJT1123wws|r'   c                   | j                   rD|t        j                  | j                   | j                         z  }|t        j                         z  }| j                  j                  ||||       | j                  |t        j                         z  }| j                  dk(  r|t        j                  dd      z  }y | j                  dk(  re|t        j                  dd      z  }|t        j                  dd      z  }|t        j                  dd      z  }|t        j                  dd      z  }y t        | j                        y )Nr  r5  r/  r4  ra  rd  )	r   r   r   r   rB  r   rC  r   r1   r   s        r(   r   z*ASTTrailingTypeSpecName.describe_signature  s    ;;x00dkkJJGx..00G**7D#f*M+x..00G##v-844VVDD%%)99844ZLL888cBB844VVDD888cBB$T%9%9:: ,r'   N)r   r/   rB  r   rC  
str | Noner   r   r   r   r   r   r   r   r#   r$   r%   r8   r>   rD   r   r4   r[   rJ   r   r&   r'   r(   r@  r@    s}    //'4/GQ/	/
J  /;";*-;4D;NT;	;r'   r@  c                  p    e Zd Z	 d	 	 	 	 	 d	dZd
dZddZ	 d	 	 	 	 	 	 	 ddZddZ	 	 	 	 	 	 	 	 	 	 ddZy)ASTFunctionParameterc                     || _         || _        y r:   )argellipsis)r7   rQ  rR  s      r(   r8   zASTFunctionParameter.__init__  s    
  r'   c                    t        |t              st        S | j                  |j                  k(  xr | j                  |j                  k(  S r:   )r.   rO  r;   rQ  rR  r<   s     r(   r>   zASTFunctionParameter.__eq__  s8    %!56!!xx599$H%..)HHr'   c                D    t        | j                  | j                  f      S r:   )rB   rQ  rR  rC   s    r(   rD   zASTFunctionParameter.__hash__  s    TXXt}}-..r'   Nc                    |r'|j                   j                  j                  |d      S | j                  ry| j                  j                  |      S )NFprefixedr  )parentr   r[   rR  rQ  r7   rZ   
objectTyper   s       r(   r[   zASTFunctionParameter.get_id  sD     ==,,33Ge3LL==88??7++r'   c                @    | j                   ry || j                        S Nrc  )rR  rQ  rH   s     r(   rJ   zASTFunctionParameter._stringify   s    ==TXX&&r'   c                    t        |       | j                  r|t        j                  dd      z  }y | j                  j                  ||||       y )Nrc  r  )r   rR  r   r   rQ  r   r   s        r(   r   z'ASTFunctionParameter.describe_signature  sE     	 %==x44UEBBGHH''s6'Jr'   F)rQ  9ASTTypeWithInit | ASTTemplateParamConstrainedTypeWithInitrR  r   r   r   r   r   NNrZ   r   rZ  rL  r   zSymbol | Noner   r/   r   r   r  r&   r'   r(   rO  rO    s     !F! ! 
	!I
/ TX,,(2,CP,	,'K"K*-K4DKNTK	Kr'   rO  c                  H    e Zd ZddZddZd	dZd
dZ	 	 	 	 	 	 	 	 	 	 ddZy)ASTNoexceptSpecc                    || _         y r:   ro  rq  s     r(   r8   zASTNoexceptSpec.__init__  r  r'   c                `    t        |t              st        S | j                  |j                  k(  S r:   )r.   rc  r;   rp  r<   s     r(   r>   zASTNoexceptSpec.__eq__  r  r'   c                ,    t        | j                        S r:   rt  rC   s    r(   rD   zASTNoexceptSpec.__hash__  rE   r'   c                L    | j                   rd || j                         z   dz   S y)NrK  rd  rP  ro  rH   s     r(   rJ   zASTNoexceptSpec._stringify  s%    99499!55;;r'   c                    |t        j                  dd      z  }| j                  rQ|t        j                  dd      z  }| j                  j	                  |d||       |t        j                  dd      z  }y y )NrP  ra  rd   rd  r   r   rp  r   r   r   s        r(   r   z"ASTNoexceptSpec.describe_signature!  sm     	8,,ZDD99x44S#>>GII((*c6Jx44S#>>G r'   Nrp  rk  r   r   r   r   r   r   r#   r$   r%   r8   r>   rD   rJ   r   r&   r'   r(   rc  rc    sC    '

?"?*-?4D?NT?	?r'   rc  c                      e Zd Z	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d
dZddZddZedd       ZddZddZ	ddZ
	 	 	 	 	 	 	 	 	 	 ddZy	)ASTParametersQualifiersc                    || _         || _        || _        || _        || _        || _        || _        || _        |	| _        |
| _	        y r:   )
r  volatileconstrefQualexceptionSpectrailingReturnoverridefinalattrsinitializer)r7   r  ro  rp  rq  rr  rs  rt  ru  rv  rw  s              r(   r8   z ASTParametersQualifiers.__init__,  sM     	 
*, 

&r'   c                F   t        |t              st        S | j                  |j                  k(  xr | j                  |j                  k(  xr | j
                  |j
                  k(  xr | j                  |j                  k(  xr | j                  |j                  k(  xr | j                  |j                  k(  xrj | j                  |j                  k(  xrO | j                  |j                  k(  xr4 | j                  |j                  k(  xr | j                  |j                  k(  S r:   )r.   rm  r;   r  ro  rp  rq  rr  rs  rt  ru  rv  rw  r<   s     r(   r>   zASTParametersQualifiers.__eq__D  s    %!89!!II# 	6/	6

ekk)	6 -	6 ""e&9&99		6
 ##u';';;	6 /	6 

ekk)	6 

ekk)	6   E$5$55	
r'   c                    t        | j                  | j                  | j                  | j                  | j
                  | j                  | j                  | j                  | j                  | j                  f
      S r:   )rB   r  ro  rp  rq  rr  rs  rt  ru  rv  rw  rC   s    r(   rD   z ASTParametersQualifiers.__hash__T  s`    IIMMJJLLMMJJJJ
  	r'   c                    | j                   S r:   )r  rC   s    r(   function_paramsz'ASTParametersQualifiers.function_paramsb  s    yyr'   c                L   g }| j                   r|j                  d       | j                  r(|dk(  r|j                  d       n|j                  d       | j                  dk(  r|j                  d       n | j                  dk(  r|j                  d       d	j	                  |      S )
NVrR   CKz&&O&Rre   )ro  rz   rp  rq  r   r   s      r(   get_modifiers_idz(ASTParametersQualifiers.get_modifiers_idf  sy    ==JJsO::!|

3

3<<4JJsO\\S JJsOwws|r'   c                   dk(  r@t        | j                        dk(  ryddj                  fd| j                  D              z   S t        | j                        dk(  rydj                  fd| j                  D              S )	NrR   r   re   __r  c              3  @   K   | ]  }|j                          y wr:   r   r  s     r(   r   z7ASTParametersQualifiers.get_param_id.<locals>.<genexpr>z  s     &LQqxx'8&Lr   vc              3  @   K   | ]  }|j                          y wr:   r   r  s     r(   r   z7ASTParametersQualifiers.get_param_id.<locals>.<genexpr>~  s     @188G,@r   )r0   r  r   rY   s    `r(   get_param_idz$ASTParametersQualifiers.get_param_idu  sg    a<499~"chh&L$))&LLLLtyy>Q77@dii@@@r'   c                   dg}d}| j                   D ]1  }|s|j                  d       d}|j                  t        |             3 |j                  d       | j                  r|j                  d       | j                  r|j                  d       | j
                  r|j                  d| j
                  f       | j                  r#|j                  d || j                        f       | j                  r#|j                  d	 || j                        f       | j                  r|j                  d
       | j                  r|j                  d       t        | j                        dk7  r#|j                  d || j                        f       | j                  r|j                  d| j                  f       dj                  |      S )Nra  Tr  Frd  z	 volatilez constrb  z ->  finalz	 overrider    = re   )r  rz   r/   ro  rp  rq  r   rr  rs  ru  rt  r0   rv  rw  r   )r7   rI   r   r   r  s        r(   rJ   z"ASTParametersQualifiers._stringify  s\   e 	A

4 EJJs1v		
 	

3==JJ{#::JJx <<JJT\\*+JJYt'9'9:;<JJ	$*=*= >?@::JJx ==JJ{#tzz?aJJYtzz234JJt//01wws|r'   c                T   t        |       d}|}|j                  r:t        |t        j                        s|j                  }3|j                  dd      }	 |dk(  rbt        j                         }||d<   | j                  D ]4  }t        j                  ddd      }	|j                  |	d||       ||	z  }6 ||z  }n|t        j                  d	d	      z  }d}
| j                  D ]K  }|
s0|t        j                  d
d
      z  }|t        j                         z  }d}
|j                  |d||       M |t        j                  dd      z  }dd}| j                  r	 ||d       | j                  r	 ||d       | j                  rD|t        j                         z  }|t        j                  | j                  | j                        z  }| j                  r5|t        j                         z  }| j                  j                  ||||       | j                   re|t        j                         z  }|t        j"                  dd      z  }|t        j                         z  }| j                   j                  ||||       | j$                  r	 ||d       | j&                  r	 ||d       t)        | j*                        dk7  r2|t        j                         z  }| j*                  j                  |       | j,                  r|t        j                         z  }|t        j                  dd      z  }|t        j                         z  }| j,                  dv sJ | j,                  dk(  r|t        j.                  dd      z  }y |t        j0                  | j,                  | j,                        z  }y y )NFmulti_line_parameter_listro   re   T)noemphrq   r  ra  r  rd   rd  c                d    | t        j                         z  } | t        j                  ||      z  } y r:   r   r   r   r|   rc   s     r(   	_add_annoz=ASTParametersQualifiers.describe_signature.<locals>._add_anno  s,    x..00Gx00t<<Gr'   ro  rp  r  ru  rt  r   =>   0rl  defaultr  r|   r   rc   r/   r   r   )r   rX  r.   r   r   getdesc_parameterlistr  desc_parameterr   r   r   ro  rp  rq  rr  rs  rj  ru  rt  r0   rv  rw  r"  r   )r7   r|   r}   r~   r   r  	test_node	paramlistrQ  rq   r   r  s               r(   r   z*ASTParametersQualifiers.describe_signature  sX    	 %$)!$	i)@)@A%,,	(1+U)%  < 335I5NI12yy # //BtD&&ugs6&JU"	# y Gx44S#>>GEyy Px<<S#FFGx6688G&&w
C&OP x44S#>>G	= ==gz*::gw'<<x..00Gx44T\\4<<PPGx..00G11'4fMx..00Gx11$==Gx..00G227D#vN::gw'==gz*tzz?ax..00GJJ))'2x..00Gx44S#>>Gx..00G##'AAAA3&8;;CEE844T5E5EtGWGWXX r'   N)r  list[ASTFunctionParameter]ro  r   rp  r   rq  rL  rr  rc  rs  r  rt  r   ru  r   rv  r   rw  rL  r   r   r   r   r   r  r   r   r   )r#   r$   r%   r8   r>   rD   r   r{  r  r  rJ   r   r&   r'   r(   rm  rm  +  s    '(' ' 	'
 ' ''  ' ' '  '  ' 
'0
   	A:EY"EY*-EY4DEYNTEY	EYr'   rm  c                  D    e Zd ZddZddZd	dZd
dZ	 	 	 	 	 	 	 	 ddZy)ASTExplicitSpecc                    || _         y r:   ro  rq  s     r(   r8   zASTExplicitSpec.__init__  r  r'   c                `    t        |t              st        S | j                  |j                  k(  S r:   )r.   r  r;   rp  r<   s     r(   r>   zASTExplicitSpec.__eq__  r  r'   c                ,    t        | j                        S r:   rt  rC   s    r(   rD   zASTExplicitSpec.__hash__  rE   r'   c                    dg}| j                   $|j                  d || j                         df       dj                  |      S )Nexplicitra  rd  re   )rp  r   r   r   s      r(   rJ   zASTExplicitSpec._stringify  s=    l99 JJYtyy1378wws|r'   c                    |t        j                  dd      z  }| j                  Q|t        j                  dd      z  }| j                  j	                  |d||       |t        j                  dd      z  }y y )Nr  ra  rd   rd  ri  )r7   r|   r~   r   s       r(   r   z"ASTExplicitSpec.describe_signature  sp     	8,,ZDD99 x44S#>>GII((*c6Jx44S#>>G !r'   Nrj  r   r   r   r|   r   r~   r   r   r   r   r   rk  r&   r'   r(   r  r    s;    '
?"?)9?CI?	?r'   r  c                      e Zd Z	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZd	dZd
dZddZddZ	 	 	 	 	 	 	 	 ddZy)ASTDeclSpecsSimplec                    || _         || _        || _        || _        || _        || _        || _        || _        |	| _        |
| _	        || _
        || _        y r:   )storagethreadLocalinlinevirtualexplicitSpec	consteval	constexpr	constinitro  rp  friendrv  )r7   r  r  r  r  r  r  r  r  ro  rp  r  rv  s                r(   r8   zASTDeclSpecsSimple.__init__	  sZ     &(""" 

r'   c                   t        |t              st        S | j                  |j                  k(  xr( | j                  |j                  k(  xr | j
                  |j
                  k(  xr | j                  |j                  k(  xr | j                  |j                  k(  xr | j                  |j                  k(  xr | j                  |j                  k(  xr | j                  |j                  k(  xrj | j                  |j                  k(  xrO | j                  |j                  k(  xr4 | j                  |j                  k(  xr | j                  |j                  k(  S r:   )r.   r  r;   r  r  r  r  r  r  r  r  ro  rp  r  rv  r<   s     r(   r>   zASTDeclSpecsSimple.__eq__	  s)   %!34!!LLEMM) *  E$5$55*u||+* -* !!U%7%77	*
 %//1* %//1* %//1* /* 

ekk)* u||+* 

ekk)	
r'   c                    t        | j                  | j                  | j                  | j                  | j
                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  f      S r:   )rB   r  r  r  r  r  r  r  r  ro  rp  r  rv  rC   s    r(   rD   zASTDeclSpecsSimple.__hash__0	  sl    LLKKLLNNNNNNMMJJKKJJ
  	r'   c                t   |s| S t        | j                  xs |j                  | j                  xs |j                  | j                  xs |j                  | j                  xs |j                  | j
                  xs |j
                  | j                  xs |j                  | j                  xs |j                  | j                  xs |j                  | j                  xs |j                  | j                  xs |j                  | j                  xs |j                  | j                  |j                  z         S r:   )r  r  r  r  r  r  r  r  r  ro  rp  r  rv  r<   s     r(   	mergeWithzASTDeclSpecsSimple.mergeWith@	  s    K!LL)EMM1 1 1KK'5<<LL)EMM3!3!3NN-eooNN-eooNN-eooMM+U^^JJ%%++KK'5<<JJ$
 	
r'   c                L   g }t        | j                        dk7  r!|j                   || j                               | j                  r|j                  | j                         | j                  r|j                  d       | j
                  r|j                  d       | j                  r|j                  d       | j                  r|j                  d       | j                  r!|j                   || j                               | j                  r|j                  d       | j                  r|j                  d       | j                  r|j                  d       | j                  r|j                  d	       | j                  r|j                  d
       dj                  |      S )Nr   thread_localr  r  r  r  r  r  ro  rp  rb  )r0   rv  rz   r  r  r  r  r  r  r  r  r  ro  rp  r   r   s      r(   rJ   zASTDeclSpecsSimple._stringifyR	  s   tzz?aJJy,-<<JJt||$JJ~&;;JJx ;;JJx <<JJy!JJy!2!234>>JJ{#>>JJ{#>>JJ{#==JJz"::JJwxx}r'   c                   | j                   j                  |       t        | j                         dk7  dfd}| j                  r ||| j                        | j                  r	 ||d      | j
                  r	 ||d      | j                  r	 ||d      | j                  r	 ||d      | j                  r8r|t        j                         z  }| j                  j                  |||       d| j                  r	 ||d      | j                  r	 ||d	      | j                  r	 ||d
      | j                  r	 ||d      | j                  r
 ||d      y y )Nr   c                j    r| t        j                         z  } | t        j                  ||      z  } yr  r  )r|   rc   	add_spaces     r(   _addz3ASTDeclSpecsSimple.describe_signature.<locals>._addt	  s3    82244x00t<<Gr'   r  r  r  r  Tr  r  r  ro  rp  )r|   r   rc   r/   r   r   )rv  r   r0   r  r  r  r  r  r  r   r   r  r  r  ro  rp  )r7   r|   r~   r   r  r  s        @r(   r   z%ASTDeclSpecsSimple.describe_signaturen	  s5    	

%%g.

Oq(		 <<Wdll3IWn5I;;Wh/I;;Wh/I<<Wi0I8224400#vFI>>Wk2I>>Wk2I>>Wk2I==Wj1I::Wg.I r'   N)r  r/   r  r   r  r   r  r   r  zASTExplicitSpec | Noner  r   r  r   r  r   ro  r   rp  r   r  r   rv  r   r   r   r   r   )r=   r  r   r  r   r  )	r#   r$   r%   r8   r>   rD   r  rJ   r   r&   r'   r(   r  r  	  s      	
  -         
8
$ 
$8$/"$/)9$/CI$/	$/r'   r  c                  d    e Zd Z	 	 	 	 	 	 	 	 	 	 ddZd	dZd
dZddZddZ	 	 	 	 	 	 	 	 	 	 ddZy)ASTDeclSpecsc                    || _         || _        || _        | j                  j                  | j                        | _        || _        y r:   )outer	leftSpecs
rightSpecsr  allSpecstrailingTypeSpec)r7   r  r  r  trailings        r(   r8   zASTDeclSpecs.__init__	  s;     
"$00A (r'   c                   t        |t              st        S | j                  |j                  k(  xrO | j                  |j                  k(  xr4 | j
                  |j
                  k(  xr | j                  |j                  k(  S r:   )r.   r  r;   r  r  r  r  r<   s     r(   r>   zASTDeclSpecs.__eq__	  sq    %.!!JJ%++% @%//1@5#3#33@ %%)?)??		
r'   c                p    t        | j                  | j                  | j                  | j                  f      S r:   )rB   r  r  r  r  rC   s    r(   rD   zASTDeclSpecs.__hash__	  s2    JJNNOO!!	
  	r'   c                0   |dk(  r{| j                   j                  |      g}| j                  j                  r|j	                  d       | j                  j
                  r|j	                  d       dj                  |      S g }| j                  j                  r|j	                  d       | j                  j
                  r|j	                  d       | j                   *|j	                  | j                   j                  |             dj                  |      S )NrR   r}  r~  re   r  )r  r[   r  ro  rz   rp  r   r   s      r(   r[   zASTDeclSpecs.get_id	  s    a<((//89C}}%%

3}}""

3773<==!!JJsO==JJsO  ,JJt,,33G<=wws|r'   c                   g } || j                         }t        |      dkD  r|j                  |       | j                  rt        |      dkD  r|j                  d       |j                   || j                               t	        | j
                        }t        |      dkD  r0t        |      dkD  r|j                  d       |j                  |       dj                  |      S Nr   rb  re   )r  r0   rz   r  r/   r  r   )r7   rI   r   lrs        r(   rJ   zASTDeclSpecs._stringify	  s    dnn%q6A:JJqM  3x!|

3JJy!6!678DOO$A1vzs8a<JJsO

1wws|r'   c                   t        |       t        |      }| j                  j                  |||       t        |      |k7  }| j                  r|r|t        j                         z  }t        |      }| j                  j                  ||||       t        |      |k7  }t        t        | j                              dkD  r7|r|t        j                         z  }| j                  j                  |||       y y y )Nr  r   )	r   r0   r  r   r  r   r   r/   r  )r7   r|   r}   r~   r   num_childrenr  s          r(   r   zASTDeclSpecs.describe_signature	  s     	 %7|))'3?LL0	  82244w<L!!44WdCPV4WG4I3t'(1,x6688G227CH - !r'   N)
r  r/   r  r  r  r  r  r  r   r   r   r   r   r   r   r  r&   r'   r(   r  r  	  s~    )) &) '	)
 &) 
)
" I"I*-I4DINTI	Ir'   r  c                  P    e Zd ZddZd	dZd
dZddZddZ	 	 	 	 	 	 	 	 	 	 ddZy)ASTArrayc                    || _         y r:   size)r7   r  s     r(   r8   zASTArray.__init__	  r  r'   c                `    t        |t              st        S | j                  |j                  k(  S r:   )r.   r  r;   r  r<   s     r(   r>   zASTArray.__eq__	  s%    %*!!yyEJJ&&r'   c                ,    t        | j                        S r:   )rB   r  rC   s    r(   rD   zASTArray.__hash__	  rE   r'   c                L    | j                   rd || j                         z   dz   S y)Nr  r  rm  r  rH   s     r(   rJ   zASTArray._stringify	  s%    99499--33r'   c                    |dk(  ry|dk(  r(| j                   rdt        | j                         z   dz   S y| j                   r!d| j                   j                  |      z   dz   S y)NrR   Ar   r]  A_)r  r/   r[   rY   s     r(   r[   zASTArray.get_id
  s^    a<a<yyS^+c1199))'22S88r'   c                    t        |       |t        j                  dd      z  }| j                  r| j                  j	                  |d||       |t        j                  dd      z  }y )Nr  rd   r  )r   r   r   r  r   r   s        r(   r   zASTArray.describe_signature
  sY     	 %800c::99II((*c6J800c::r'   N)r  r   r   r   r   r   r   r   r   r  r&   r'   r(   r  r  	  sH    '
;";*-;4D;NT;	;r'   r  c                      e Zd Zedd       Zej
                  dd       Zedd       Zedd       Zedd       ZddZ	ddZ
ddZdd	Zdd
ZddZ	 	 	 	 	 	 	 	 	 	 ddZy)ASTDeclaratorc                *    t        t        |             r:   r   rC   s    r(   r4   zASTDeclarator.name
      !$t*--r'   c                *    t        t        |             r:   r   r6   s     r(   r4   zASTDeclarator.name
  r  r'   c                *    t        t        |             r:   r   rC   s    r(   isPackzASTDeclarator.isPack#
  r  r'   c                *    t        t        |             r:   r   rC   s    r(   r{  zASTDeclarator.function_params'
  r  r'   c                *    t        t        |             r:   r   rC   s    r(   rs  zASTDeclarator.trailingReturn+
  r  r'   c                *    t        t        |             r:   r   rC   s    r(   require_space_after_declSpecsz+ASTDeclarator.require_space_after_declSpecs/
  r   r'   c                *    t        t        |             r:   r   rY   s     r(   r  zASTDeclarator.get_modifiers_id2
  r   r'   c                *    t        t        |             r:   r   rY   s     r(   r  zASTDeclarator.get_param_id5
  r   r'   c                *    t        t        |             r:   r   rY   s     r(   get_ptr_suffix_idzASTDeclarator.get_ptr_suffix_id8
  r   r'   c                *    t        t        |             r:   r   r7   rZ   returnTypeIds      r(   get_type_idzASTDeclarator.get_type_id;
  r   r'   c                *    t        t        |             r:   r   rC   s    r(   is_function_typezASTDeclarator.is_function_type>
  r   r'   c                *    t        t        |             r:   r   r   s        r(   r   z ASTDeclarator.describe_signatureA
  r   r'   Nr   r  r   r  r   r  r   rZ   r   r  r/   r   r/   r   )r#   r$   r%   r   r4   setterr  r{  rs  r  r  r  r  r  r  r   r&   r'   r(   r  r  
  s    . . 
[[. . . . . . . ........".*-.4D.NT.	.r'   r  c                      e Zd Z	 	 	 	 	 	 	 	 ddZddZddZedd       Zej                  dd       Zedd       Z	edd       Z
edd       Zdd	Zdd
ZddZddZddZddZddZ	 	 	 	 	 	 	 	 	 	 ddZy)ASTDeclaratorNameParamQualc                .    || _         || _        || _        y r:   )declIdarrayOps	paramQual)r7   r  r  r  s       r(   r8   z#ASTDeclaratorNameParamQual.__init__H
  s      "r'   c                    t        |t              st        S | j                  |j                  k(  xr4 | j                  |j                  k(  xr | j
                  |j
                  k(  S r:   )r.   r  r;   r  r  r  r<   s     r(   r>   z!ASTDeclaratorNameParamQual.__eq__R
  sR    %!;<!!KK5<<' 2/2%//1	
r'   c                Z    t        | j                  | j                  | j                  f      S r:   )rB   r  r  r  rC   s    r(   rD   z#ASTDeclaratorNameParamQual.__hash__[
  s     T[[$--@AAr'   c                    | j                   S r:   r  rC   s    r(   r4   zASTDeclaratorNameParamQual.name^
      {{r'   c                    || _         y r:   r  r6   s     r(   r4   zASTDeclaratorNameParamQual.nameb
  	    r'   c                     yr   r&   rC   s    r(   r  z!ASTDeclaratorNameParamQual.isPackf
  s    r'   c                .    | j                   j                  S r:   )r  r{  rC   s    r(   r{  z*ASTDeclaratorNameParamQual.function_paramsj
  s    ~~---r'   c                .    | j                   j                  S r:   )r  rs  rC   s    r(   rs  z)ASTDeclaratorNameParamQual.trailingReturnn
  s    ~~,,,r'   c                l    | j                   r| j                   j                  |      S t        d| z        )Nz,This should only be called on a function: %s)r  r  r{   rY   s     r(   r  z+ASTDeclaratorNameParamQual.get_modifiers_ids
  s/    >>>>227;;FMNNr'   c                R    | j                   r| j                   j                  |      S yr  )r  r  rY   s     r(   r  z'ASTDeclaratorNameParamQual.get_param_idy
  s!    >>>>..w77r'   c                L    dj                  fd| j                  D              S )Nre   c              3  @   K   | ]  }|j                          y wr:   r   r  s     r(   r   z?ASTDeclaratorNameParamQual.get_ptr_suffix_id.<locals>.<genexpr>
  s     @Qqxx(@r   )r   r  rY   s    `r(   r  z,ASTDeclaratorNameParamQual.get_ptr_suffix_id
  s    ww@$--@@@r'   c                    |dk\  sJ | j                  |      g}| j                  r5|j                  | j                  |      d|| j	                  |      df       n|j                  |       dj                  |      S )Nr   Fr   re   )r  r  r   r  r  rz   r   r7   rZ   r  r   s       r(   r  z&ASTDeclaratorNameParamQual.get_type_id
  sz    !||%%g./>>JJ%%g.!!'*  JJ|$wws|r'   c                    | j                   d uS r:   r  rC   s    r(   r  z8ASTDeclaratorNameParamQual.require_space_after_declSpecs
      {{$&&r'   c                    | j                   d uS r:   )r  rC   s    r(   r  z+ASTDeclaratorNameParamQual.is_function_type
  s    ~~T))r'   c                &   g }| j                   r!|j                   | j                                |j                  fd| j                  D               | j                  r!|j                   | j                               dj                  |      S )Nc              3  .   K   | ]  } |        y wr:   r&   )r   rY  rI   s     r(   r   z8ASTDeclaratorNameParamQual._stringify.<locals>.<genexpr>
  s     9R9R=9r  re   )r  rz   r   r  r  r   r   s    ` r(   rJ   z%ASTDeclaratorNameParamQual._stringify
  sd    ;;JJy-.

94==99>>JJy01wws|r'   c                   t        |       | j                  r| j                  j                  ||||       | j                  D ]  }|j                  ||||        | j                  r| j                  j                  ||||       y y r:   )r   r  r   r  r  )r7   r|   r}   r~   r   rY  s         r(   r   z-ASTDeclaratorNameParamQual.describe_signature
  sv     	 %;;KK**7D#vF-- 	>B!!'4f=	>>>NN--gtS&I r'   N)r  r   r  zlist[ASTArray]r  rm  r   r   r   r   r   r  r   r  r  r   r  r   r   )r#   r$   r%   r8   r>   rD   r   r4   r  r  r{  rs  r  r  r  r  r  r  rJ   r   r&   r'   r(   r  r  G
  s    ## !# +	#
 
#
B   
[[    . . - -OA$'*	J"	J*-	J4D	JNT	J		Jr'   r  c                      e Zd ZddZddZddZedd       Zej                  dd       ZddZ	ddZ
ddZdd	Zdd
Z	 	 	 	 	 	 	 	 	 	 ddZy)ASTDeclaratorNameBitFieldc                     || _         || _        y r:   )r  r  )r7   r  r  s      r(   r8   z"ASTDeclaratorNameBitField.__init__
  s    	r'   c                    t        |t              st        S | j                  |j                  k(  xr | j                  |j                  k(  S r:   )r.   r  r;   r  r  r<   s     r(   r>   z ASTDeclaratorNameBitField.__eq__
  s8    %!:;!!{{ell*FtyyEJJ/FFr'   c                D    t        | j                  | j                  f      S r:   )rB   r  r  rC   s    r(   rD   z"ASTDeclaratorNameBitField.__hash__
  s    T[[$)),--r'   c                    | j                   S r:   r  rC   s    r(   r4   zASTDeclaratorNameBitField.name
  r  r'   c                    || _         y r:   r  r6   s     r(   r4   zASTDeclaratorNameBitField.name
  r  r'   c                     yr  r&   rY   s     r(   r  z&ASTDeclaratorNameBitField.get_param_id
      r'   c                     yr  r&   rY   s     r(   r  z+ASTDeclaratorNameBitField.get_ptr_suffix_id
  r  r'   c                    | j                   d uS r:   r  rC   s    r(   r  z7ASTDeclaratorNameBitField.require_space_after_declSpecs
  r  r'   c                     yr   r&   rC   s    r(   r  z*ASTDeclaratorNameBitField.is_function_type
  r   r'   c                    g }| j                   r!|j                   || j                                |j                  d || j                        f       dj	                  |      S )Nr  re   )r  rz   r   r  r   r   s      r(   rJ   z$ASTDeclaratorNameBitField._stringify
  sK    ;;JJy-.

E9TYY/01wws|r'   c                8   t        |       | j                  r| j                  j                  ||||       |t        j                         z  }|t        j
                  dd      z  }|t        j                         z  }| j                  j                  ||||       y )Nr  )r   r  r   r   r   r   r  r   s        r(   r   z,ASTDeclaratorNameBitField.describe_signature
  s     	 %;;KK**7D#vF8**,,800c::8**,,		$$WdC@r'   N)r  r   r  r   r   r   r   r   r   r  r   r   r   r   )r#   r$   r%   r8   r>   rD   r   r4   r  r  r  r  r  rJ   r   r&   r'   r(   r  r  
  s    G
.   
[[ 
'	A"	A*-	A4D	ANT	A		Ar'   r  c                      e Zd Z	 	 	 	 	 	 	 	 	 	 ddZddZddZedd       Zej                  dd       Zedd       Z	edd       Z
edd       Zdd	Zdd
ZddZddZddZddZddZ	 	 	 	 	 	 	 	 	 	 ddZy)ASTDeclaratorPtrc                D    |sJ || _         || _        || _        || _        y r:   )nextro  rp  rv  )r7   r#  ro  rp  rv  s        r(   r8   zASTDeclaratorPtr.__init__
  s'     t	 

r'   c                   t        |t              st        S | j                  |j                  k(  xrO | j                  |j                  k(  xr4 | j
                  |j
                  k(  xr | j                  |j                  k(  S r:   )r.   r!  r;   r#  ro  rp  rv  r<   s     r(   r>   zASTDeclaratorPtr.__eq__
  si    %!12!!II# */*

ekk)* 

ekk)		
r'   c                p    t        | j                  | j                  | j                  | j                  f      S r:   )rB   r#  ro  rp  rv  rC   s    r(   rD   zASTDeclaratorPtr.__hash__
  s&    TYYtzz4::FGGr'   c                .    | j                   j                  S r:   r#  r4   rC   s    r(   r4   zASTDeclaratorPtr.name
      yy~~r'   c                &    || j                   _        y r:   r'  r6   s     r(   r4   zASTDeclaratorPtr.name       		r'   c                .    | j                   j                  S r:   r#  r  rC   s    r(   r  zASTDeclaratorPtr.isPack      yyr'   c                .    | j                   j                  S r:   r#  r{  rC   s    r(   r{  z ASTDeclaratorPtr.function_params      yy(((r'   c                .    | j                   j                  S r:   r#  rs  rC   s    r(   rs  zASTDeclaratorPtr.trailingReturn      yy'''r'   c                6    | j                   j                         S r:   r#  r  rC   s    r(   r  z.ASTDeclaratorPtr.require_space_after_declSpecs      yy6688r'   c                t   d || j                         g}t        | j                         dk7  r)| j                  s| j                  r|j	                  d       | j                  r|j	                  d       | j                  r.| j                  r|j	                  d       |j	                  d       | j                  s$| j                  st        | j                         dkD  r+| j
                  j                         r|j	                  d       |j	                   || j
                               dj                  |      S )N*r   rb  ro  rp  re   )rv  r0   ro  rp  rz   r#  r  r   r   s      r(   rJ   zASTDeclaratorPtr._stringify  s    Idjj)*tzz?aT]]djjJJsO==JJz"::}}

3JJw::#djj/A*=yy668

3

9TYY'(wws|r'   c                8    | j                   j                  |      S r:   r#  r  rY   s     r(   r  z!ASTDeclaratorPtr.get_modifiers_id#      yy))'22r'   c                8    | j                   j                  |      S r:   r#  r  rY   s     r(   r  zASTDeclaratorPtr.get_param_id&      yy%%g..r'   c                   |dk(  rxdg}| j                   r|j                  d       | j                  r|j                  d       |j                  | j                  j	                  |             dj                  |      S | j                  j	                  |      dg}| j                   r|j                  d       | j                  r|j                  d       dj                  |      S )NrR   Pr}  r~  re   )ro  rz   rp  r#  r  r   r   s      r(   r  z"ASTDeclaratorPtr.get_ptr_suffix_id)  s    a<%C}}

3zz

3JJtyy227;<773<yy**73S9==JJsO::JJsOwws|r'   c                    dg}| j                   r|j                  d       | j                  r|j                  d       |j                  |       | j                  j	                  |dj                  |            S )Nr@  r}  r~  re   r  )ro  rz   rp  r#  r  r   r  s       r(   r  zASTDeclaratorPtr.get_type_id:  s[    e==JJsO::JJsO

< yy$$W2773<$HHr'   c                6    | j                   j                         S r:   r#  r  rC   s    r(   r  z!ASTDeclaratorPtr.is_function_typeD      yy))++r'   c                   t        |       |t        j                  dd      z  }| j                  j	                  |       t        | j                        dk7  r/| j                  s| j                  r|t        j                         z  }dd}| j                  r	 ||d       | j                  r,| j                  r|t        j                         z  } ||d       | j                  s$| j                  st        | j                        dkD  r1| j                  j                         r|t        j                         z  }| j                  j	                  ||||       y )Nr8  r   c                6    | t        j                  ||      z  } y r:   r   r  s     r(   r  z6ASTDeclaratorPtr.describe_signature.<locals>._add_annoP      x00t<<Gr'   ro  rp  r  )r   r   r   rv  r   r0   ro  rp  r   r#  r  r7   r|   r}   r~   r   r  s         r(   r   z#ASTDeclaratorPtr.describe_signatureG  s     	 %800c::

%%g.tzz?aT]]djjx..00G	= ==gz*::}}82244gw'::#djj/A*=yy66882244		$$WdC@r'   N)
r#  r  ro  r   rp  r   rv  r   r   r   r   r   r   r  r   r  r  r   r   r  r   r#   r$   r%   r8   r>   rD   r   r4   r  r  r{  rs  r  rJ   r  r  r  r  r  r   r&   r'   r(   r!  r!  
  s    !-1:>GW	
H   
[[      ) ) ( (9 3/"I,A"A*-A4DANTA	Ar'   r!  c                      e Zd ZddZddZddZedd       Zej                  dd       Zedd       Z	edd       Z
edd       Zdd	Zdd
ZddZddZddZddZddZ	 	 	 	 	 	 	 	 	 	 ddZy)ASTDeclaratorRefc                (    |sJ || _         || _        y r:   )r#  rv  )r7   r#  rv  s      r(   r8   zASTDeclaratorRef.__init__`  s    t	
r'   c                    t        |t              st        S | j                  |j                  k(  xr | j                  |j                  k(  S r:   )r.   rL  r;   r#  rv  r<   s     r(   r>   zASTDeclaratorRef.__eq__e  s8    %!12!!yyEJJ&D4::+DDr'   c                D    t        | j                  | j                  f      S r:   )rB   r#  rv  rC   s    r(   rD   zASTDeclaratorRef.__hash__j      TYY

+,,r'   c                .    | j                   j                  S r:   r'  rC   s    r(   r4   zASTDeclaratorRef.namem  r(  r'   c                &    || j                   _        y r:   r'  r6   s     r(   r4   zASTDeclaratorRef.nameq  r*  r'   c                .    | j                   j                  S r:   r,  rC   s    r(   r  zASTDeclaratorRef.isPacku  r-  r'   c                .    | j                   j                  S r:   r/  rC   s    r(   r{  z ASTDeclaratorRef.function_paramsy  r0  r'   c                .    | j                   j                  S r:   r2  rC   s    r(   rs  zASTDeclaratorRef.trailingReturn}  r3  r'   c                6    | j                   j                         S r:   r5  rC   s    r(   r  z.ASTDeclaratorRef.require_space_after_declSpecs  r6  r'   c                   d || j                         g}t        | j                         dk7  r+| j                  j                         r|j	                  d       |j	                   || j                               dj                  |      S )Nr  r   rb  re   )rv  r0   r#  r  rz   r   r   s      r(   rJ   zASTDeclaratorRef._stringify  sb    Idjj)*tzz?aDII$K$K$MJJsO

9TYY'(wws|r'   c                8    | j                   j                  |      S r:   r:  rY   s     r(   r  z!ASTDeclaratorRef.get_modifiers_id  r;  r'   c                8    | j                   j                  |      S r:   r=  rY   s     r(   r  zASTDeclaratorRef.get_param_id  r>  r'   c                    |dk(  rd| j                   j                  |      z   S | j                   j                  |      dz   S )NrR   r  r#  r  rY   s     r(   r  z"ASTDeclaratorRef.get_ptr_suffix_id  s=    a<44W===99..w7#==r'   c                P    |dk\  sJ | j                   j                  |d|z         S )Nr   r  rB  r#  r  r  s      r(   r  zASTDeclaratorRef.get_type_id  s-    !||yy$$W3;M$NNr'   c                6    | j                   j                         S r:   rD  rC   s    r(   r  z!ASTDeclaratorRef.is_function_type  rE  r'   c                P   t        |       |t        j                  dd      z  }| j                  j	                  |       t        | j                        dkD  r1| j                  j                         r|t        j                         z  }| j                  j	                  ||||       y )Nr  r   )	r   r   r   rv  r   r0   r#  r  r   r   s        r(   r   z#ASTDeclaratorRef.describe_signature  s     	 %800c::

%%g.tzz?Q499#J#J#Lx..00G		$$WdC@r'   N)r#  r  rv  r   r   r   r   r   r   r  r   r  r  r   r   r  r   rJ  r&   r'   r(   rL  rL  _  s    
E
-   
[[      ) ) ( (93/>O
,A"A*-A4DANTA	Ar'   rL  c                      e Zd ZddZddZddZedd       Zej                  dd       Zedd       Z	edd       Z
edd       Zdd	Zdd
ZddZddZddZddZddZ	 	 	 	 	 	 	 	 	 	 ddZy)ASTDeclaratorParamPackc                    |sJ || _         y r:   )r#  )r7   r#  s     r(   r8   zASTDeclaratorParamPack.__init__      t	r'   c                `    t        |t              st        S | j                  |j                  k(  S r:   )r.   ra  r;   r#  r<   s     r(   r>   zASTDeclaratorParamPack.__eq__  s&    %!78!!yyEJJ&&r'   c                ,    t        | j                        S r:   )rB   r#  rC   s    r(   rD   zASTDeclaratorParamPack.__hash__  rE   r'   c                .    | j                   j                  S r:   r'  rC   s    r(   r4   zASTDeclaratorParamPack.name  r(  r'   c                &    || j                   _        y r:   r'  r6   s     r(   r4   zASTDeclaratorParamPack.name  r*  r'   c                .    | j                   j                  S r:   r/  rC   s    r(   r{  z&ASTDeclaratorParamPack.function_params  r0  r'   c                .    | j                   j                  S r:   r2  rC   s    r(   rs  z%ASTDeclaratorParamPack.trailingReturn  r3  r'   c                     yr  r&   rC   s    r(   r  zASTDeclaratorParamPack.isPack  s    r'   c                     yr   r&   rC   s    r(   r  z4ASTDeclaratorParamPack.require_space_after_declSpecs  r   r'   c                f     || j                         }| j                   j                  rd|z   }d|z   S )Nrb  rc  r'  r   s      r(   rJ   z!ASTDeclaratorParamPack._stringify  s.    		"99>>)Cs{r'   c                8    | j                   j                  |      S r:   r:  rY   s     r(   r  z'ASTDeclaratorParamPack.get_modifiers_id  r;  r'   c                8    | j                   j                  |      S r:   r=  rY   s     r(   r  z#ASTDeclaratorParamPack.get_param_id  r>  r'   c                    |dk(  rd| j                   j                  |      z   S | j                   j                  |      dz   S )NrR   Dpr[  rY   s     r(   r  z(ASTDeclaratorParamPack.get_ptr_suffix_id  s=    a<$))55g>>>99..w7$>>r'   c                P    |dk\  sJ | j                   j                  |d|z         S )Nr   rp  rB  r]  r  s      r(   r  z"ASTDeclaratorParamPack.get_type_id  s-    !||yy$$W4,;N$OOr'   c                6    | j                   j                         S r:   rD  rC   s    r(   r  z'ASTDeclaratorParamPack.is_function_type  rE  r'   c                    t        |       |t        j                  dd      z  }| j                  j                  r|t        j
                         z  }| j                  j                  ||||       y r\  )r   r   r   r#  r4   r   r   r   s        r(   r   z)ASTDeclaratorParamPack.describe_signature  sY     	 %800>>99>>x..00G		$$WdC@r'   N)r#  r  r   r   r   r   r   r  r  r  r   r   r   r  r   )r#   r$   r%   r8   r>   rD   r   r4   r  r{  rs  r  r  rJ   r  r  r  r  r  r   r&   r'   r(   ra  ra    s    '
   
[[  ) ) ( (  3/?P
,A"A*-A4DANTA	Ar'   ra  c                      e Zd Z	 	 	 	 	 	 	 	 	 	 ddZddZddZedd       Zej                  dd       Zedd       Z	edd       Z
edd       Zdd	Zdd
ZddZddZddZddZddZ	 	 	 	 	 	 	 	 	 	 ddZy)ASTDeclaratorMemPtrc                L    |sJ |sJ || _         || _        || _        || _        y r:   )	classNamerp  ro  r#  )r7   rw  rp  ro  r#  s        r(   r8   zASTDeclaratorMemPtr.__init__  s/     yt"
 	r'   c                   t        |t              st        S | j                  |j                  k(  xrO | j                  |j                  k(  xr4 | j
                  |j
                  k(  xr | j                  |j                  k(  S r:   )r.   ru  r;   rw  rp  ro  r#  r<   s     r(   r>   zASTDeclaratorMemPtr.__eq__  si    %!45!!NNeoo- (

ekk)(/( 		UZZ'		
r'   c                p    t        | j                  | j                  | j                  | j                  f      S r:   )rB   rw  rp  ro  r#  rC   s    r(   rD   zASTDeclaratorMemPtr.__hash__  s&    T^^TZZ		JKKr'   c                .    | j                   j                  S r:   r'  rC   s    r(   r4   zASTDeclaratorMemPtr.name
  r(  r'   c                &    || j                   _        y r:   r'  r6   s     r(   r4   zASTDeclaratorMemPtr.name  r*  r'   c                .    | j                   j                  S r:   r,  rC   s    r(   r  zASTDeclaratorMemPtr.isPack  r-  r'   c                .    | j                   j                  S r:   r/  rC   s    r(   r{  z#ASTDeclaratorMemPtr.function_params  r0  r'   c                .    | j                   j                  S r:   r2  rC   s    r(   rs  z"ASTDeclaratorMemPtr.trailingReturn  r3  r'   c                     yr  r&   rC   s    r(   r  z1ASTDeclaratorMemPtr.require_space_after_declSpecs  r  r'   c                   g }|j                   || j                        df       | j                  r|j                  d       | j                  r.| j                  r|j                  d       |j                  d       | j
                  j                         r|j                  d       |j                   || j
                               dj                  |      S )Nz::*ro  rb  rp  re   )r   rw  ro  rz   rp  r#  r  r   r   s      r(   rJ   zASTDeclaratorMemPtr._stringify!  s    

Idnn-u56==JJz"::}}

3JJw99224JJsO

9TYY'(wws|r'   c                N    |dk(  rt         | j                  j                  |      S NrR   )r   r#  r  rY   s     r(   r  z$ASTDeclaratorMemPtr.get_modifiers_id/  s$    a<yy))'22r'   c                N    |dk(  rt         | j                  j                  |      S r  )r   r#  r  rY   s     r(   r  z ASTDeclaratorMemPtr.get_param_id4  s$    a<yy%%g..r'   c                $    |dk(  rt         t        r  )r   r   r#  r  rY   s     r(   r  z%ASTDeclaratorMemPtr.get_ptr_suffix_id9  s    a<!!r'   c                    |dk\  sJ d}| j                   r|dz  }| j                  r|dz  }|dz  }|| j                  j                  |      z  }||z  }| j                  j                  ||      S )Nr   re   r}  r  M)ro  rp  rw  r[   r#  r  )r7   rZ   r  next_return_type_ids       r(   r  zASTDeclaratorMemPtr.get_type_id?  s    !|| ==3&::3&s"t~~44W==|+yy$$W.ABBr'   c                6    | j                   j                         S r:   rD  rC   s    r(   r  z$ASTDeclaratorMemPtr.is_function_typeL  rE  r'   c                   t        |       | j                  j                  |d||       |t        j                  dd      z  }|t        j                  dd      z  }dd}| j
                  r	 ||d       | j                  r,| j
                  r|t        j                         z  } ||d       | j                  j                         r|t        j                         z  }| j                  j                  ||||       y )Nrd   r   r8  c                6    | t        j                  ||      z  } y r:   r   r  s     r(   r  z9ASTDeclaratorMemPtr.describe_signature.<locals>._add_annoW  rH  r'   ro  rp  r  )
r   rw  r   r   r   ro  rp  r   r#  r  rI  s         r(   r   z&ASTDeclaratorMemPtr.describe_signatureO  s     	 %))':sFK800t<<800c::	= ==gz*::}}82244gw'99224x..00G		$$WdC@r'   N)
rw  r   rp  r   ro  r   r#  r  r   r   r   r   r   r  r   r  r  r   r   r  r   rJ  r&   r'   r(   ru  ru    s    &/3?CKX	
L   
[[      ) ) ( (3
/
;C,A"A*-A4DANTA	Ar'   ru  c                      e Zd ZddZddZddZedd       Zej                  dd       Zedd       Z	edd       Z
edd       Zdd	Zdd
ZddZddZddZddZddZ	 	 	 	 	 	 	 	 	 	 ddZy)ASTDeclaratorParenc                0    |sJ |sJ || _         || _        y r:   )innerr#  )r7   r  r#  s      r(   r8   zASTDeclaratorParen.__init__f  s    ut
	r'   c                    t        |t              st        S | j                  |j                  k(  xr | j                  |j                  k(  S r:   )r.   r  r;   r  r#  r<   s     r(   r>   zASTDeclaratorParen.__eq__m  s8    %!34!!zzU[[(DTYY%**-DDr'   c                D    t        | j                  | j                  f      S r:   )rB   r  r#  rC   s    r(   rD   zASTDeclaratorParen.__hash__r  s    TZZ+,,r'   c                .    | j                   j                  S r:   r  r4   rC   s    r(   r4   zASTDeclaratorParen.nameu  s    zzr'   c                &    || j                   _        y r:   r  r6   s     r(   r4   zASTDeclaratorParen.namey  s    

r'   c                ^    | j                   j                  xs | j                  j                  S r:   )r  r  r#  rC   s    r(   r  zASTDeclaratorParen.isPack}  s!    zz  4DII$4$44r'   c                .    | j                   j                  S r:   )r  r{  rC   s    r(   r{  z"ASTDeclaratorParen.function_params  s    zz)))r'   c                .    | j                   j                  S r:   )r  rs  rC   s    r(   rs  z!ASTDeclaratorParen.trailingReturn  s    zz(((r'   c                     yr  r&   rC   s    r(   r  z0ASTDeclaratorParen.require_space_after_declSpecs  r  r'   c                    dg}|j                   || j                        d || j                        f       dj                  |      S rt  )r   r  r#  r   r   s      r(   rJ   zASTDeclaratorParen._stringify  sE    e

djj!dii 
 	
 wws|r'   c                8    | j                   j                  |      S r:   )r  r  rY   s     r(   r  z#ASTDeclaratorParen.get_modifiers_id  s    zz**733r'   c                8    | j                   j                  |      S r:   )r  r  rY   s     r(   r  zASTDeclaratorParen.get_param_id  s    zz&&w//r'   c                    |dk(  rt         | j                  j                  |      }| j                  j                  |      }||z   S r  )r   r#  r  r  )r7   rZ   ptr_suffix_id_nextptr_suffix_id_inners       r(   r  z$ASTDeclaratorParen.get_ptr_suffix_id  sG    a< #jj::7C!YY88A"%777r'   c                    |dk\  sJ | j                   j                  ||      }| j                  j                  ||      S )Nr   rB  )r#  r  r  )r7   rZ   r  next_ids       r(   r  zASTDeclaratorParen.get_type_id  s>    !||))''>zz%%gG%DDr'   c                6    | j                   j                         S r:   )r  r  rC   s    r(   r  z#ASTDeclaratorParen.is_function_type  s    zz**,,r'   c                    t        |       |t        j                  dd      z  }| j                  j	                  ||||       |t        j                  dd      z  }| j
                  j	                  |d||       y )Nra  rd  rp   )r   r   r   r  r   r#  r   s        r(   r   z%ASTDeclaratorParen.describe_signature  sj     	 %800c::

%%gtS&A800c::		$$WlCHr'   N)r  r  r#  r  r   r   r   r   r   r  r   r  r  r   r   r  r   rJ  r&   r'   r(   r  r  e  s    E
-   
[[  5 5 * * ) )408E-I"I*-I4DINTI	Ir'   r  c                  P    e Zd ZddZd	dZd
dZddZddZ	 	 	 	 	 	 	 	 	 	 ddZy)ASTPackExpansionExprc                    || _         y r:   ro  rq  s     r(   r8   zASTPackExpansionExpr.__init__  r  r'   c                `    t        |t              st        S | j                  |j                  k(  S r:   )r.   r  r;   rp  r<   s     r(   r>   zASTPackExpansionExpr.__eq__  &    %!56!!yyEJJ&&r'   c                ,    t        | j                        S r:   rt  rC   s    r(   rD   zASTPackExpansionExpr.__hash__  rE   r'   c                ,     || j                         dz   S r\  ro  rH   s     r(   rJ   zASTPackExpansionExpr._stringify  s    #e++r'   c                B    | j                   j                  |      }d|z   S )Nspry  rj  s      r(   r[   zASTPackExpansionExpr.get_id  s     YYg&byr'   c                r    | j                   j                  ||||       |t        j                  dd      z  }y r\  )rp  r   r   r   r   s        r(   r   z'ASTPackExpansionExpr.describe_signature  s3     			$$WdC@800>>r'   N)rp  r  r   r   r   r   r   r   r   r  r&   r'   r(   r  r    sH    '
,?"?*-?4D?NT?	?r'   r  c                  P    e Zd ZddZd	dZd
dZddZddZ	 	 	 	 	 	 	 	 	 	 ddZy)ASTParenExprListc                    || _         y r:   )r  r  s     r(   r8   zASTParenExprList.__init__  r  r'   c                `    t        |t              st        S | j                  |j                  k(  S r:   )r.   r  r;   r  r<   s     r(   r>   zASTParenExprList.__eq__  s&    %!12!!zzU[[((r'   c                ,    t        | j                        S r:   r  rC   s    r(   rD   zASTParenExprList.__hash__  r	  r'   c                R    ddj                  fd| j                  D              z  S )Nzpi%sEre   c              3  @   K   | ]  }|j                          y wr:   r   r  s     r(   r   z*ASTParenExprList.get_id.<locals>.<genexpr>  r   r   r  rY   s    `r(   r[   zASTParenExprList.get_id  r  r'   c                r    | j                   D cg c]
  } ||       }}ddj                  |      z  S c c}w )Nz(%s)r  )r  r   )r7   rI   r  r  s       r(   rJ   zASTParenExprList._stringify  s6    '+zz2!122		%((( 3s   4c                6   t        |       |t        j                  dd      z  }d}| j                  D ]K  }|s1|t        j                  dd      z  }|t        j                         z  }nd}|j                  ||||       M |t        j                  dd      z  }y )Nra  Tr  Frd  )r   r   r   r  r   r   r  s          r(   r   z#ASTParenExprList.describe_signature  s     	 %800c:: 	=A888cBB82244  $V<	= 	800c::r'   N)r  r  r   r   r   r   r   r   r   r  r&   r'   r(   r  r    sI    )
 H);";*-;4D;NT;	;r'   r  c                  V    e Zd Z	 d	 	 	 	 	 ddZd	dZd
dZddZ	 	 	 	 	 	 	 	 	 	 ddZy)ASTInitializerc                     || _         || _        y r:   r  	hasAssign)r7   r  r  s      r(   r8   zASTInitializer.__init__  s     
"r'   c                    t        |t              st        S | j                  |j                  k(  xr | j                  |j                  k(  S r:   )r.   r  r;   r  r  r<   s     r(   r>   zASTInitializer.__eq__   s7    %0!!zzU[[(NT^^u-NNr'   c                D    t        | j                  | j                  f      S r:   )rB   r  r  rC   s    r(   rD   zASTInitializer.__hash__  s    TZZ011r'   c                L     || j                         }| j                  rd|z   S |S Nr  r  )r7   rI   vals      r(   rJ   zASTInitializer._stringify  s&    

#>>3;Jr'   c                    t        |       | j                  rG|t        j                         z  }|t        j                  dd      z  }|t        j                         z  }| j
                  j                  |d||       y )Nr  rd   )r   r  r   r   r   r  r   r   s        r(   r   z!ASTInitializer.describe_signature  sh     	 %>>x..00Gx44S#>>Gx..00G

%%gz3Gr'   NT)r  r  r  r   r   r   r   r   r   r   rk  r&   r'   r(   r  r    se    JN#6#CG#	#O
2H"H*-H4DHNTH	Hr'   r  c                      e Zd ZddZddZddZedd       Zej                  dd       Zedd       Z	edd       Z
edd       Z	 d	 	 	 	 	 	 	 dd
ZddZddZ	 	 	 	 	 	 	 	 	 	 ddZy	)r  c                0    |sJ |sJ || _         || _        y r:   )	declSpecsdecl)r7   r  r  s      r(   r8   zASTType.__init__  s    yt"	r'   c                    t        |t              st        S | j                  |j                  k(  xr | j                  |j                  k(  S r:   )r.   r  r;   r  r  r<   s     r(   r>   zASTType.__eq__!  s7    %)!!~~0LTYY%**5LLr'   c                D    t        | j                  | j                  f      S r:   )rB   r  r  rC   s    r(   rD   zASTType.__hash__&  s    T^^TYY/00r'   c                .    | j                   j                  S r:   r  r4   rC   s    r(   r4   zASTType.name)  r(  r'   c                &    || j                   _        y r:   r  r6   s     r(   r4   zASTType.name-  r*  r'   c                .    | j                   j                  S r:   )r  r  rC   s    r(   r  zASTType.isPack1  r-  r'   c                .    | j                   j                  S r:   )r  r{  rC   s    r(   r{  zASTType.function_params5  r0  r'   c                .    | j                   j                  S r:   )r  rs  rC   s    r(   rs  zASTType.trailingReturn9  r3  r'   Nc                   |dk(  rg }|r|dk(  r|j                  |j                         j                  |      | j                  j	                  |      | j                  j                  |      f       | j                  j                  j                  s6| j                  j                  r| j                  j                  j                  r|j                  d       n|dk(  r/|j                  |j                         j                  |             nt        |      | j                  j                         rt        |j                  | j                  j                  |      | j                  j                  |      | j                  j	                  |      f       dj                  |      S g }|rW|dk(  r| j                  j                  |      }|j                  |j                         j                  ||             |dk\  r|j                   j"                  }|| j                  j                  |      }| j$                  r| j$                  j                  |      }n| j                  j                  |      }|j                  |       |j                  |       |j                  | j                  j	                  |             n|dk(  r/|j                  |j                         j                  |             nSt        |      | j                  j                  |      }| j                  j'                  ||      }|j                  |       dj                  |      S )NrR   functionCEr1  re      )r   get_full_nested_namer[   r  r  r  r  r  r  r  rz   r1   r  r   r  r   r   r   rs  r  )	r7   rZ   rZ  r   r   r   templtype_idreturn_type_ids	            r(   r[   zASTType.get_id=  s    a<C+JJ335<<WE		..w7		227;  
 ~~//9911 NN55??

4(6)JJv::<CCGLM(4499--/&&

NN))'2II//8II**73 
 773<Z' II66w?	

6668??STa<"..==E("&))"="=g"F..-1-@-@-G-G-PN-1^^-B-B7-KN

7+

>2

49911':;v%

6668??HI$Z00 "^^227;Nii++G^DGJJwwws|r'   c                "   g } || j                         }|j                  |       | j                  j                         rt	        |      dkD  r|j                  d       |j                   || j                               dj                  |      S r  )r  rz   r  r  r0   r   )r7   rI   r   
decl_specss       r(   rJ   zASTType._stringifyy  sj    t~~.


:99224Z19LJJsO

9TYY'(wws|r'   c                2    | j                   j                  ryy)Ntypedefr1  )r  r  rC   s    r(   get_type_declaration_prefixz#ASTType.get_type_declaration_prefix  s    >>**r'   c                D   t        |       | j                  j                  |d||       | j                  j	                         r8t        t        | j                              dkD  r|t        j                         z  }|dk(  rd}| j                  j                  ||||       y )Nrd   r   rp   )	r   r  r   r  r  r0   r/   r   r   r   s        r(   r   zASTType.describe_signature  s     	 %))':sFK99224S=P9QTU9Ux..00G :D		$$WdC@r'   )r  r  r  r  r   r   r   r   r   r  r   r  r  r`  ra  r   r   r   )r#   r$   r%   r8   r>   rD   r   r4   r  r  r{  rs  r[   rJ   r  r   r&   r'   r(   r  r    s    M
1   
[[      ) ) ( ( TX::(2:CP:	:xA"A*-A4DANTA	Ar'   r  c                      e Zd Zd
dZddZddZedd       Zedd       Z	 d	 	 	 	 	 	 	 ddZ	ddZ
	 	 	 	 	 	 	 	 	 	 dd	Zy)'ASTTemplateParamConstrainedTypeWithInitc                (    |sJ || _         || _        y r:   r1  initr7   r1  r  s      r(   r8   z0ASTTemplateParamConstrainedTypeWithInit.__init__  s    t		r'   c                    t        |t              st        S | j                  |j                  k(  xr | j                  |j                  k(  S r:   )r.   r  r;   r1  r  r<   s     r(   r>   z.ASTTemplateParamConstrainedTypeWithInit.__eq__  s8    %!HI!!yyEJJ&B499

+BBr'   c                D    t        | j                  | j                  f      S r:   rB   r1  r  rC   s    r(   rD   z0ASTTemplateParamConstrainedTypeWithInit.__hash__      TYY		*++r'   c                .    | j                   j                  S r:   r1  r4   rC   s    r(   r4   z,ASTTemplateParamConstrainedTypeWithInit.name  r(  r'   c                .    | j                   j                  S r:   r1  r  rC   s    r(   r  z.ASTTemplateParamConstrainedTypeWithInit.isPack  r-  r'   Nc                    |dk\  sJ |r'|j                   j                  j                  |d      S | j                  j                  |      S Nr   FrV  )rX  r   r[   r1  rY  s       r(   r[   z.ASTTemplateParamConstrainedTypeWithInit.get_id  H     !||==,,33Ge3LL99##G,,r'   c                v     || j                         }| j                  r|dz  }| || j                        z  }|S r  r  r   s      r(   rJ   z2ASTTemplateParamConstrainedTypeWithInit._stringify  s8    		"995LC9TYY''C
r'   c                $   | j                   j                  ||||       | j                  rf|t        j                         z  }|t        j
                  dd      z  }|t        j                         z  }| j                  j                  ||||       y y )Nr  )r1  r   r  r   r   r   r   s        r(   r   z:ASTTemplateParamConstrainedTypeWithInit.describe_signature  s}     			$$WdC@99x..00Gx44S#>>Gx..00GII(($VD	 r'   )r1  r  r  r  r   r   r   r   r   r   r`  ra  r   r   r#   r$   r%   r8   r>   rD   r   r4   r  r[   rJ   r   r&   r'   r(   r  r    s    
C
,       TX	-	-(2	-CP	-		-E"E*-E4DENTE	Er'   r  c                      e Zd Zd
dZddZddZedd       Zedd       Z	 d	 	 	 	 	 	 	 ddZ	ddZ
	 	 	 	 	 	 	 	 	 	 dd	Zy)ASTTypeWithInitc                     || _         || _        y r:   r  r  s      r(   r8   zASTTypeWithInit.__init__      		r'   c                    t        |t              st        S | j                  |j                  k(  xr | j                  |j                  k(  S r:   )r.   r  r;   r1  r  r<   s     r(   r>   zASTTypeWithInit.__eq__  s7    %1!!yyEJJ&B499

+BBr'   c                D    t        | j                  | j                  f      S r:   r  rC   s    r(   rD   zASTTypeWithInit.__hash__  r  r'   c                .    | j                   j                  S r:   r  rC   s    r(   r4   zASTTypeWithInit.name  r(  r'   c                .    | j                   j                  S r:   r  rC   s    r(   r  zASTTypeWithInit.isPack  r-  r'   Nc                   |dk7  r| j                   j                  ||      S |dk(  r>|j                         j                  |      dz   | j                   j                  |      z   S |j                         j                  |      S )NmemberrR   r  )r1  r[   r  rY  s       r(   r[   zASTTypeWithInit.get_id  s     !99##GZ88a<++-44W=))""7+,
 **,33G<<r'   c                     || j                         g}| j                  r!|j                   || j                               dj                  |      S r  )r1  r  rz   r   r   s      r(   rJ   zASTTypeWithInit._stringify  s=    #$99JJy+,wws|r'   c                    t        |       | j                  j                  ||||       | j                  r| j                  j                  ||||       y y r:   )r   r1  r   r  r   s        r(   r   z"ASTTypeWithInit.describe_signature  sH     	 %		$$WdC@99II(($VD r'   )r1  r  r  r  r   r   r   r   r   r   r`  ra  r   r   r  r&   r'   r(   r  r    s    C
,       TX==(2=CP=	=E"E*-E4DENTE	Er'   r  c                  j    e Zd Zd	dZd
dZddZ	 d	 	 	 	 	 	 	 ddZddZddZ	 	 	 	 	 	 	 	 	 	 ddZ	y)ASTTypeUsingc                     || _         || _        y r:   )r4   r1  )r7   r4   r1  s      r(   r8   zASTTypeUsing.__init__  r  r'   c                    t        |t              st        S | j                  |j                  k(  xr | j                  |j                  k(  S r:   )r.   r  r;   r4   r1  r<   s     r(   r>   zASTTypeUsing.__eq__  s7    %.!!yyEJJ&B499

+BBr'   c                D    t        | j                  | j                  f      S r:   )rB   r4   r1  rC   s    r(   rD   zASTTypeUsing.__hash__  r  r'   Nc                V    |dk(  rt         |j                         j                  |      S r  r   r  r[   rY  s       r(   r[   zASTTypeUsing.get_id  +     a<**,33G<<r'   c                     || j                         g}| j                  r#|j                  d || j                        f       dj                  |      S )Nr  re   )r4   r1  r   r   r   s      r(   rJ   zASTTypeUsing._stringify  sB    #$99JJy345wws|r'   c                     y)Nusingr&   rC   s    r(   r  z(ASTTypeUsing.get_type_declaration_prefix  s    r'   c                >   t        |       | j                  j                  ||||       | j                  rg|t	        j
                         z  }|t	        j                  dd      z  }|t	        j
                         z  }| j                  j                  |d||       y y )Nr  r  rd   )r   r4   r   r1  r   r   r   r   s        r(   r   zASTTypeUsing.describe_signature  s     	 %		$$WdC$G99x..00Gx44S#>>Gx..00GII((*c&(Q	 r'   )r4   r   r1  zASTType | Noner   r   r   r   r`  ra  r   r   r   )
r#   r$   r%   r8   r>   rD   r[   rJ   r  r   r&   r'   r(   r  r    s{    C
, TX==(2=CP=	=	R"	R*-	R4D	RNT	R		Rr'   r  c                  t    e Zd Zd	dZd
dZddZedd       Z	 d	 	 	 	 	 	 	 ddZddZ		 	 	 	 	 	 	 	 	 	 ddZ
y)
ASTConceptc                     || _         || _        y r:   rB  rw  )r7   rB  rw  s      r(   r8   zASTConcept.__init__(  s    $&r'   c                    t        |t              st        S | j                  |j                  k(  xr | j                  |j                  k(  S r:   )r.   r  r;   rB  rw  r<   s     r(   r>   zASTConcept.__eq__,  sB    %,!!OOu/// 6  E$5$55	
r'   c                D    t        | j                  | j                  f      S r:   )rB   rB  rw  rC   s    r(   rD   zASTConcept.__hash__4  s    T__d&6&6788r'   c                    | j                   S r:   rG  rC   s    r(   r4   zASTConcept.name7  rH  r'   Nc                V    |dk(  rt         |j                         j                  |      S r  r  rY  s       r(   r[   zASTConcept.get_id;  r  r'   c                l     || j                         }| j                  r| || j                        z  }|S r:   r
  r   s      r(   rJ   zASTConcept._stringifyB  s3    (9T--..C
r'   c                    | j                   j                  ||||       | j                  r| j                  j                  ||||       y y r:   )rB  r   rw  r   s        r(   r   zASTConcept.describe_signatureH  sD     	**7D#vF//sFK r'   )rB  r   rw  r  r   r   r   r   r   r`  ra  r   r   rM  r&   r'   r(   r  r  '  s    '
9   TX==(2=CP=	=L"L*-L4DLNTL	Lr'   r  c                  \    e Zd Z	 	 	 	 	 	 	 	 	 	 ddZddZd	dZd
dZ	 	 	 	 	 	 	 	 	 	 ddZy)ASTBaseClassc                <    || _         || _        || _        || _        y r:   )r4   
visibilityr  pack)r7   r4   r  r  r  s        r(   r8   zASTBaseClass.__init__Q  s      	$	r'   c                   t        |t              st        S | j                  |j                  k(  xrO | j                  |j                  k(  xr4 | j
                  |j
                  k(  xr | j                  |j                  k(  S r:   )r.   r  r;   r4   r  r  r  r<   s     r(   r>   zASTBaseClass.__eq__Y  sj    %.!!II# (5#3#33(-( 		UZZ'		
r'   c                p    t        | j                  | j                  | j                  | j                  f      S r:   )rB   r4   r  r  r  rC   s    r(   rD   zASTBaseClass.__hash__c  s&    TYYtyyIJJr'   c                0   g }| j                   |j                  | j                   df       | j                  r|j                  d       |j                   || j                               | j
                  r|j                  d       dj                  |      S )Nrb  zvirtual rc  re   )r  r   r  rz   r4   r  r   r   s      r(   rJ   zASTBaseClass._stringifyf  so    ??&JJ-.<<JJz"

9TYY'(99JJuwws|r'   c                   t        |       | j                  D|t        j                  | j                  | j                        z  }|t        j                         z  }| j
                  r0|t        j                  dd      z  }|t        j                         z  }| j                  j                  |d||       | j                  r|t        j                  dd      z  }y y )Nr  rd   r  rc  )
r   r  r   r   r   r  r4   r   r  r   r   s        r(   r   zASTBaseClass.describe_signatureq  s     	 %??&x00$//RRGx..00G<<x00IFFGx..00G		$$Wj#f$M99x44UEBBG r'   N)
r4   r   r  r/   r  r   r  r   r   r   r   r   r   r   rk  r&   r'   r(   r  r  P  sr    !/2=AIM	
K	C"C*-C4DCNTC	Cr'   r  c                  d    e Zd Z	 	 	 	 	 	 	 	 	 	 ddZd	dZd
dZddZddZ	 	 	 	 	 	 	 	 	 	 ddZy)ASTClassc                <    || _         || _        || _        || _        y r:   )r4   ru  basesrv  )r7   r4   ru  r  rv  s        r(   r8   zASTClass.__init__  s      	


r'   c                   t        |t              st        S | j                  |j                  k(  xrO | j                  |j                  k(  xr4 | j
                  |j
                  k(  xr | j                  |j                  k(  S r:   )r.   r  r;   r4   ru  r  rv  r<   s     r(   r>   zASTClass.__eq__  sh    %*!!II# *

ekk)*

ekk)* 

ekk)		
r'   c                p    t        | j                  | j                  | j                  | j                  f      S r:   )rB   r4   ru  r  rv  rC   s    r(   rD   zASTClass.__hash__  s&    TYY

DJJ

CDDr'   c                @    |j                         j                  |      S r:   )r  r[   rY  s       r(   r[   zASTClass.get_id  s    **,33G<<r'   c                    || j                         g}t        | j                         dk7  r|j                  d       |j                   || j                               | j                  r|j                  d       t        | j
                        dkD  rP|j                  d       d}| j
                  D ].  }|s|j                  d       d}|j                   ||             0 dj                  |      S )	Nr   rb  r  r  Tr  Fre   )rv  r0   rz   r4   ru  r  r   )r7   rI   r   r   bs        r(   rJ   zASTClass._stringify  s    $%tzz?aJJsO

9TYY'(::JJx tzz?QJJuEZZ )JJt$

9Q<(	)
 wws|r'   c                   t        |       | j                  j                  |       t        | j                        dk7  r|t	        j
                         z  }| j                  j                  ||||       | j                  r0|t	        j
                         z  }|t	        j                  dd      z  }t        | j                        dkD  r|t	        j
                         z  }|t	        j                  dd      z  }|t	        j
                         z  }| j                  D ]G  }|j                  ||||       |t	        j                  dd      z  }|t	        j
                         z  }I |j                          |j                          y y )Nr   r  ru  r  r  )r   rv  r   r0   r   r   r4   ru  r   r  r   pop)r7   r|   r}   r~   r   r"  s         r(   r   zASTClass.describe_signature  sG    	 %

%%g.tzz?ax..00G		$$WdC$G::x..00Gx00'BBGtzz?Qx..00Gx44S#>>Gx..00GZZ 5$$WdC$G888cBB822445 KKMKKM r'   N)
r4   r   ru  r   r  zlist[ASTBaseClass]rv  r   r   r   r   r   rZ   r   rZ  r/   r   r   r   r/   r   r   r  r&   r'   r(   r  r    sy    

 
 "	

  
 


E=""*-4DNT	r'   r  c                  P    e Zd ZddZd	dZd
dZddZddZ	 	 	 	 	 	 	 	 	 	 ddZy)ASTUnionc                     || _         || _        y r:   )r4   rv  )r7   r4   rv  s      r(   r8   zASTUnion.__init__  s    	
r'   c                    t        |t              st        S | j                  |j                  k(  xr | j                  |j                  k(  S r:   )r.   r'  r;   r4   rv  r<   s     r(   r>   zASTUnion.__eq__  s7    %*!!yyEJJ&D4::+DDr'   c                D    t        | j                  | j                  f      S r:   )rB   r4   rv  rC   s    r(   rD   zASTUnion.__hash__  rP  r'   c                V    |dk(  rt         |j                         j                  |      S r  r  rY  s       r(   r[   zASTUnion.get_id  )    a<**,33G<<r'   c                     || j                         g}t        | j                         dk7  r|j                  d       |j                   || j                               dj	                  |      S r  )rv  r0   rz   r4   r   r   s      r(   rJ   zASTUnion._stringify  sQ    $%tzz?aJJsO

9TYY'(wws|r'   c                    t        |       | j                  j                  |       t        | j                        dk7  r|t	        j
                         z  }| j                  j                  ||||       y )Nr   r  )r   rv  r   r0   r   r   r4   r   s        r(   r   zASTUnion.describe_signature  s\     	 %

%%g.tzz?ax..00G		$$WdC$Gr'   N)r4   r   rv  r   r   r   r   r   r%  r   r   r  r&   r'   r(   r'  r'    sO    E
-=
H"H*-H4DHNTH	Hr'   r'  c                  d    e Zd Z	 	 	 	 	 	 	 	 	 	 ddZd	dZd
dZddZddZ	 	 	 	 	 	 	 	 	 	 ddZy)ASTEnumc                <    || _         || _        || _        || _        y r:   )r4   scopedunderlyingTyperv  )r7   r4   r2  r3  rv  s        r(   r8   zASTEnum.__init__  s!     	,
r'   c                   t        |t              st        S | j                  |j                  k(  xrO | j                  |j                  k(  xr4 | j
                  |j
                  k(  xr | j                  |j                  k(  S r:   )r.   r0  r;   r4   r2  r3  rv  r<   s     r(   r>   zASTEnum.__eq__  sl    %)!!II# *u||+*##u';';;* 

ekk)		
r'   c                p    t        | j                  | j                  | j                  | j                  f      S r:   )rB   r4   r2  r3  rv  rC   s    r(   rD   zASTEnum.__hash__  s(    TYYT-@-@$**MNNr'   c                V    |dk(  rt         |j                         j                  |      S r  r  rY  s       r(   r[   zASTEnum.get_id  r,  r'   c                   g }| j                   r|j                  | j                   df       |j                   || j                               t	        | j                        dk7  r|j                  d       |j                   || j
                               | j                  r#|j                  d || j                        f       dj                  |      S )Nrb  r   r  re   )r2  r   rz   rv  r0   r4   r3  r   r   s      r(   rJ   zASTEnum._stringify  s    ;;JJS)*

9TZZ()tzz?aJJsO

9TYY'(JJy)<)<=>?wws|r'   c                   t        |       | j                  j                  |       t        | j                        dk7  r|t	        j
                         z  }| j                  j                  ||||       | j                  rg|t	        j
                         z  }|t	        j                  dd      z  }|t	        j
                         z  }| j                  j                  |d||       y y )Nr   r  r  rp   )	r   rv  r   r0   r   r   r4   r3  r   r   s        r(   r   zASTEnum.describe_signature  s     	 %

%%g.tzz?ax..00G		$$WdC$Gx..00Gx44S#>>Gx..00G22s6 3 	 r'   N)
r4   r   r2  r/   r3  r  rv  r   r   r   r   r   r%  r   r   r  r&   r'   r(   r0  r0    sy    

 
  	

  
 


O=

"*-4DNT	r'   r0  c                  `    e Zd Z	 	 	 	 	 	 	 	 ddZd	dZd
dZddZddZ	 	 	 	 	 	 	 	 	 	 ddZy)ASTEnumeratorc                .    || _         || _        || _        y r:   )r4   r  rv  )r7   r4   r  rv  s       r(   r8   zASTEnumerator.__init__&  s     		
r'   c                    t        |t              st        S | j                  |j                  k(  xr4 | j                  |j                  k(  xr | j
                  |j
                  k(  S r:   )r.   r:  r;   r4   r  rv  r<   s     r(   r>   zASTEnumerator.__eq__-  sQ    %/!!II# *		UZZ'*

ekk)	
r'   c                Z    t        | j                  | j                  | j                  f      S r:   )rB   r4   r  rv  rC   s    r(   rD   zASTEnumerator.__hash__6  s     TYY		4::677r'   c                V    |dk(  rt         |j                         j                  |      S r  r  rY  s       r(   r[   zASTEnumerator.get_id9  r,  r'   c                    || j                         g}t        | j                        dk7  r#|j                  d || j                        f       | j                  r!|j                   || j                               dj                  |      S r  )r4   r0   rv  r   r  rz   r   r   s      r(   rJ   zASTEnumerator._stringify>  sg    #$tzz?aJJYtzz23499JJy+,wws|r'   c                @   t        |       | j                  j                  ||||       t        | j                        dk7  r2|t        j                         z  }| j                  j                  |       | j                  r| j                  j                  |d||       y y )Nr   rd   )r   r4   r   r0   rv  r   r   r  r   s        r(   r   z ASTEnumerator.describe_signatureF  s}     	 %		$$WdC@tzz?ax..00GJJ))'299II((*c6J r'   N)r4   r   r  zASTInitializer | Nonerv  r   r   r   r   r   r%  r   r   r  r&   r'   r(   r:  r:  %  sn    !)>GW	
8=
	K"	K*-	K4D	KNT	K		Kr'   r:  c                  \    e Zd ZddZddZ	 	 	 	 	 	 	 	 	 	 d	dZed
d       Zedd       Zy)ASTTemplateParamc                *    t        t        |             r:   r   rC   s    r(   get_identifierzASTTemplateParam.get_identifier[  r   r'   c                *    t        t        |             r:   r   rY   s     r(   r[   zASTTemplateParam.get_id^  r   r'   c                *    t        t        |             r:   r   )r7   
parentNoder}   r~   r   s        r(   r   z#ASTTemplateParam.describe_signaturea  r   r'   c                *    t        t        |             r:   r   rC   s    r(   r  zASTTemplateParam.isPackf  r  r'   c                *    t        t        |             r:   r   rC   s    r(   r4   zASTTemplateParam.namej  r  r'   Nr   r+   r   )
rG  r   r}   r/   r~   r   r   r   r   r   r   r   )	r#   r$   r%   rD  r[   r   r   r  r4   r&   r'   r(   rB  rB  Z  sa    ...%.-0.7G.QW.	.
 . . . .r'   rB  c                  l    e Zd Z	 	 	 	 	 	 	 	 	 	 d	dZd
dZddZddZddZddZ	 	 	 	 	 	 	 	 	 	 ddZ	y) ASTTemplateKeyParamPackIdDefaultc                P    |sJ |r|J || _         || _        || _        || _        y r:   )keyrg   parameterPackr  )r7   rN  rg   rO  r  s        r(   r8   z)ASTTemplateKeyParamPackIdDefault.__init__p  s5     
s?"?$*r'   c                   t        |t              st        S | j                  |j                  k(  xrO | j                  |j                  k(  xr4 | j
                  |j
                  k(  xr | j                  |j                  k(  S r:   )r.   rL  r;   rN  rg   rO  r  r<   s     r(   r>   z'ASTTemplateKeyParamPackIdDefault.__eq__{  so    %!AB!!HH		! .5#3#33.""e&9&99. -		
r'   c                p    t        | j                  | j                  | j                  | j                  f      S r:   )rB   rN  rg   rO  r  rC   s    r(   rD   z)ASTTemplateKeyParamPackIdDefault.__hash__  s(    TXXt0B0BDLLQRRr'   c                    | j                   S r:   r  rC   s    r(   rD  z/ASTTemplateKeyParamPackIdDefault.get_identifier      r'   c                    |dk\  sJ g }| j                   r|j                  d       n|j                  d       dj                  |      S )Nr   rp  r  re   )rO  rz   r   r   s      r(   r[   z'ASTTemplateKeyParamPackIdDefault.get_id  sA    !||JJtJJsOwws|r'   c                   | j                   g}| j                  r.| j                  r|j                  d       |j                  d       | j                  r>| j                  s|j                  d       |j                   || j                               | j                  r#|j                  d || j                        f       dj                  |      S )Nrb  rc  r  re   )rN  rO  rg   rz   r  r   r   r   s      r(   rJ   z+ASTTemplateKeyParamPackIdDefault._stringify  s    xxj

3JJu??%%

3JJy12<<JJy678wws|r'   c                p   |t        j                  | j                  | j                        z  }| j                  r<| j                  r|t        j
                         z  }|t        j                  dd      z  }| j                  rC| j                  s|t        j
                         z  }| j                  j                  |||dd|       | j                  rf|t        j
                         z  }|t        j                  dd      z  }|t        j
                         z  }| j                  j                  |d||       y y )Nrc  re   r  rd   )	r   r   rN  rO  rg   r   r   r   r  r   s        r(   r   z3ASTTemplateKeyParamPackIdDefault.describe_signature  s     	8,,TXXtxx@@82244x44UEBBG??%%82244OO..wc2r6R<<x..00Gx44S#>>Gx..00GLL++GZfM	 r'   N)
rN  r/   rg   r+   rO  r   r  r  r   r   r   r   rJ  r   r   r   )
r#   r$   r%   r8   r>   rD   rD  r[   rJ   r   r&   r'   r(   rL  rL  o  s|    		$1	BF	QX			
SN"N*-N4DNNTN	Nr'   rL  c                      e Zd ZddZddZddZedd       Zedd       ZddZ		 d	 	 	 	 	 	 	 ddZ
dd	Z	 	 	 	 	 	 	 	 	 	 dd
Zy)ASTTemplateParamTypec                    |sJ || _         y r:   r  r  s     r(   r8   zASTTemplateParamType.__init__  rc  r'   c                `    t        |t              st        S | j                  |j                  k(  S r:   )r.   rX  r;   r  r<   s     r(   r>   zASTTemplateParamType.__eq__  r  r'   c                ,    t        | j                        S r:   r  rC   s    r(   rD   zASTTemplateParamType.__hash__  rE   r'   c                V    | j                         }t        t        |d       gdgd      S NF)r   rD  r   r   r7   r  s     r(   r4   zASTTemplateParamType.name  ,      "22t<=wuUUr'   c                .    | j                   j                  S r:   r  rO  rC   s    r(   r  zASTTemplateParamType.isPack      yy&&&r'   c                6    | j                   j                         S r:   r  rD  rC   s    r(   rD  z#ASTTemplateParamType.get_identifier      yy''))r'   Nc                    |dk\  sJ |r'|j                   j                  j                  |d      S | j                  j                  |      S r  )rX  r   r[   r  rY  s       r(   r[   zASTTemplateParamType.get_id  r  r'   c                &     || j                         S r:   r  rH   s     r(   rJ   zASTTemplateParamType._stringify  rK   r'   c                @    | j                   j                  ||||       y r:   )r  r   r   s        r(   r   z'ASTTemplateParamType.describe_signature  r  r'   )r  rL  r   r   r   r   r   r   rJ  r`  ra  r   r   r#   r$   r%   r8   r>   rD   r   r4   r  rD  r[   rJ   r   r&   r'   r(   rX  rX    s    '
 V V ' '* TX	-	-(2	-CP	-		-$A"A*-A4DANTA	Ar'   rX  c                      e Zd Z	 	 	 	 	 	 ddZddZddZedd       Zedd       ZddZ		 d	 	 	 	 	 	 	 ddZ
dd	Z	 	 	 	 	 	 	 	 	 	 dd
Zy)ASTTemplateParamTemplateTypec                0    |sJ |sJ || _         || _        y r:   nestedParamsr  )r7   ro  r  s      r(   r8   z%ASTTemplateParamTemplateType.__init__  s"     |t(	r'   c                    t        |t              st        S | j                  |j                  k(  xr | j                  |j                  k(  S r:   )r.   rl  r;   ro  r  r<   s     r(   r>   z#ASTTemplateParamTemplateType.__eq__  s<    %!=>!!  E$6$66R499

;RRr'   c                D    t        | j                  | j                  f      S r:   )rB   ro  r  rC   s    r(   rD   z%ASTTemplateParamTemplateType.__hash__  s    T&&		233r'   c                V    | j                         }t        t        |d       gdgd      S r]  r^  r_  s     r(   r4   z!ASTTemplateParamTemplateType.name  r`  r'   c                .    | j                   j                  S r:   rb  rC   s    r(   r  z#ASTTemplateParamTemplateType.isPack  rc  r'   c                6    | j                   j                         S r:   re  rC   s    r(   rD  z+ASTTemplateParamTemplateType.get_identifier  rf  r'   Nc                    |dk\  sJ |r'|j                   j                  j                  |d       S | j                  j                  |      | j                  j                  |      z   S )Nr   rV  )rX  r   r[   ro  r  rY  s       r(   r[   z#ASTTemplateParamTemplateType.get_id   s^     !||==,,33Gd3KK$$++G4tyy7G7G7PPPr'   c                L     || j                          || j                        z   S r:   rn  rH   s     r(   rJ   z'ASTTemplateParamTemplateType._stringify  s!    **+i		.BBBr'   c                    | j                   j                  |d||       |t        j                         z  }| j                  j                  ||||       y )Nrp   )ro  r   r   r   r  r   s        r(   r   z/ASTTemplateParamTemplateType.describe_signature  sI     	,,WlCP8**,,		$$WdC@r'   )ro  ASTTemplateParamsr  rL  r   r   r   r   r   r   rJ  r`  ra  r   r   rj  r&   r'   r(   rl  rl    s    -5U	S
4 V V ' '* TX	Q	Q(2	QCP	Q		QCA"A*-A4DANTA	Ar'   rl  c                      e Zd Z	 d	 	 	 	 	 ddZddZddZedd       Zedd       ZddZ		 d	 	 	 	 	 	 	 ddZ
dd	Z	 	 	 	 	 	 	 	 	 	 dd
Zy)ASTTemplateParamNonTypec                (    |sJ || _         || _        y r:   rq   rO  )r7   rq   rO  s      r(   r8   z ASTTemplateParamNonType.__init__  s    
 u
*r'   c                    t        |t              st        S | j                  |j                  k(  xr | j                  |j                  k(  S r:   )r.   rz  r;   rq   rO  r<   s     r(   r>   zASTTemplateParamNonType.__eq__   s<    %!89!!zzU[[(VT-?-?5CVCV-VVr'   c                D    t        | j                  | j                  f      S r:   )rB   rq   rO  rC   s    r(   rD   z ASTTemplateParamNonType.__hash__%  r  r'   c                V    | j                         }t        t        |d       gdgd      S r]  r^  r_  s     r(   r4   zASTTemplateParamNonType.name(  r`  r'   c                J    | j                   j                  xs | j                  S r:   )rq   r  rO  rC   s    r(   r  zASTTemplateParamNonType.isPack-  s    zz  6D$6$66r'   c                .   | 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 y )NrR   r   )rq   r4   r0   r   r   r   r.   r+   )r7   r4   r   s      r(   rD  z&ASTTemplateParamNonType.get_identifier1  s    zztzz?a'''::a=****zz!}1111**Q-))Cc=111Jr'   Nc                    |dk\  sJ |r'|j                   j                  j                  |d       S d}| j                  r|dz  }|| j                  j                  |      z   S )Nr   rV  r]  rp  )rX  r   r[   rO  rq   )r7   rZ   rZ  r   r   s        r(   r[   zASTTemplateParamNonType.get_id=  sd     !||==,,33Gd3KKC!!t**7333r'   c                L     || j                         }| j                  r|dz  }|S r\  r|  r   s      r(   rJ   z"ASTTemplateParamNonType._stringifyK  s'    

#5LC
r'   c                    | j                   j                  ||||       | j                  r|t        j                  dd      z  }y y r\  )rq   r   rO  r   r   r   s        r(   r   z*ASTTemplateParamNonType.describe_signatureQ  sA     	

%%gtS&Ax44UEBBG r'   r^  )rq   r_  rO  r   r   r   r   r   r   r   rJ  r`  ra  r   r   rj  r&   r'   r(   rz  rz    s     $+H+ + 
	+W
6 V V 7 7
 TX44(24CP4	4C"C*-C4DCNTC	Cr'   rz  c                  ~    e Zd Z	 	 	 	 	 	 d	dZd
dZddZdddZddZ	 	 	 	 	 	 	 	 	 	 ddZ	 	 	 	 	 	 	 	 	 	 	 	 ddZ	y)rx  c                (    |J || _         || _        y r:   )paramsrequiresClause)r7   r  r  s      r(   r8   zASTTemplateParams.__init__Z  s     !!!,r'   c                    t        |t              st        S | j                  |j                  k(  xr | j                  |j                  k(  S r:   )r.   rx  r;   r  r  r<   s     r(   r>   zASTTemplateParams.__eq__a  s>    %!23!!KK5<<'WD,?,?5CWCW,W	
r'   c                D    t        | j                  | j                  f      S r:   )rB   r  r  rC   s    r(   rD   zASTTemplateParams.__hash__h  s    T[[$"5"5677r'   c                .   dk\  sJ dg}|j                  fd| j                  D               |j                  d       |sC| j                  r7|j                  d| j                  j                  j                        dg       dj                  |      S )Nr   r  c              3  @   K   | ]  }|j                          y wr:   r   r   rq   rZ   s     r(   r   z+ASTTemplateParams.get_id.<locals>.<genexpr>n  s     BU5<<(Br   r   IQre   )r   r  rz   r  rp  r[   r   )r7   rZ   excludeRequiresr   s    `  r(   r[   zASTTemplateParams.get_idk  sz    !||e

BdkkBB

34#6#6JJd1166==gFLMwws|r'   c                    g }|j                  ddj                  fd| j                  D              df       | j                  #|j                   | j                        df       dj                  |      S )Nz	template<r  c              3  .   K   | ]  } |        y wr:   r&   r  s     r(   r   z/ASTTemplateParams._stringify.<locals>.<genexpr>x  s     8qil8r  z> rb  re   )r   r   r  r  r   s    ` r(   rJ   zASTTemplateParams._stringifyt  sm    

II8DKK88
 	
 *JJ	$"5"56<=wws|r'   c                   |t        j                  dd      z  }|t        j                  dd      z  }d}| j                  D ]J  }|s0|t        j                  dd      z  }|t        j                         z  }d}|j                  ||||       L |t        j                  dd      z  }| j                  6|t        j                         z  }| j                  j                  ||||       y y )Nr   r  Tr  Fr  )r   r   r   r  r   r   r  )r7   r|   r}   r~   r   r   rq   s          r(   r   z$ASTTemplateParams.describe_signature  s     	8,,ZDD800c::[[ 	AE888cBB82244E$$WdC@	A 	800c::*x..00G227D#vN +r'   c                *   d
d} ||      }|t        j                  dd      z  }|t        j                  dd      z  }d}| j                  D ]T  }	|s0|t        j                  dd      z  }|t        j                         z  }d}|r ||      }|	j                  ||||       V |r
|s ||      }|t        j                  dd      z  }| j                  r?t        j                         }
d|
_        ||
z  }| j                  j                  |
d	||       y y )Nc                F    t        j                         }| |z  } d|_        |S )NtemplateParams)r   desc_signature_linesphinx_line_type)parent_noder|   s     r(   	make_linezEASTTemplateParams.describe_signature_as_introducer.<locals>.make_line  s'    224G7"K'7G$Nr'   r   r  Tr  Fr  r  rd   )r  r   r   zaddnodes.desc_signature_line)	r   r   r   r  r   r   r  r  r  )r7   rG  r}   r~   r   lineSpecr  	line_noder   rq   req_nodes              r(    describe_signature_as_introducerz2ASTTemplateParams.describe_signature_as_introducer  s   	 j)	X..z:FF	X223<<	[[ 	CEX::3DD	X4466	E%j1	$$Yc6B	C E!*-IX223<<	335H(8H%("J228ZfU	 r'   N)r  zlist[ASTTemplateParam]r  ASTRequiresClause | Noner   r   r   r   r^  )rZ   r   r  r   r   r/   r   r   rG  r   r}   r/   r~   r   r   r   r  r   r   r   )
r#   r$   r%   r8   r>   rD   r[   rJ   r   r  r&   r'   r(   rx  rx  Y  s    -,->V-	-
8	O"O*-O4DONTO	O"!V"!V !V 	!V
 !V !V 
!Vr'   rx  c                      e Zd ZddZddZddZedd       Zedd       ZddZ		 d	 	 	 	 	 	 	 ddZ
dd	Zdd
Z	 	 	 	 	 	 	 	 	 	 ddZy) ASTTemplateIntroductionParameterc                     || _         || _        y r:   )rg   rO  )r7   rg   rO  s      r(   r8   z)ASTTemplateIntroductionParameter.__init__  s    $*r'   c                    t        |t              st        S | j                  |j                  k(  xr | j                  |j                  k(  S r:   )r.   r  r;   rg   rO  r<   s     r(   r>   z'ASTTemplateIntroductionParameter.__eq__  sC    %!AB!!OOu/// :""e&9&99	
r'   c                D    t        | j                  | j                  f      S r:   )rB   rg   rO  rC   s    r(   rD   z)ASTTemplateIntroductionParameter.__hash__  s    T__d&8&89::r'   c                V    | j                         }t        t        |d       gdgd      S r]  r^  r_  s     r(   r4   z%ASTTemplateIntroductionParameter.name  r`  r'   c                    | j                   S r:   )rO  rC   s    r(   r  z'ASTTemplateIntroductionParameter.isPack  s    !!!r'   c                    | j                   S r:   r  rC   s    r(   rD  z/ASTTemplateIntroductionParameter.get_identifier  rS  r'   Nc                ~    |dk\  sJ |r'|j                   j                  j                  |d       S | j                  ryy)Nr   rV  rp  r  )rX  r   r[   rO  rY  s       r(   r[   z'ASTTemplateIntroductionParameter.get_id  sB     !||==,,33Gd3KK!!r'   c                l    |dk\  sJ | j                   j                  |      }| j                  rd|z   S |S )Nr   r  )rg   r[   rO  r   s      r(   get_id_as_argz.ASTTemplateIntroductionParameter.get_id_as_arg  s:    !||oo$$W-#:Jr'   c                    g }| j                   r|j                  d       |j                   || j                               dj                  |      S Nrc  re   )rO  rz   rg   r   r   s      r(   rJ   z+ASTTemplateIntroductionParameter._stringify  s?    JJu

9T__-.wws|r'   c                    | j                   r|t        j                  dd      z  }| j                  j	                  |||dd|       y r  )rO  r   r   rg   r   r   s        r(   r   z3ASTTemplateIntroductionParameter.describe_signature  s@     x44UEBBG**7D#r2vNr'   )rg   r+   rO  r   r   r   r   r   r   r   rJ  r`  ra  r   r   r   )r#   r$   r%   r8   r>   rD   r   r4   r  rD  r[   r  rJ   r   r&   r'   r(   r  r    s    +
; V V " " TX(2CP	O"O*-O4DONTO	Or'   r  c                  `    e Zd Z	 	 	 	 	 	 ddZd	dZd
dZddZddZ	 	 	 	 	 	 	 	 	 	 	 	 ddZy)ASTTemplateIntroductionc                @    t        |      dkD  sJ || _        || _        y r   )r0   conceptr  )r7   r  r  s      r(   r8   z ASTTemplateIntroduction.__init__  s"     6{Qr'   c                    t        |t              st        S | j                  |j                  k(  xr | j                  |j                  k(  S r:   )r.   r  r;   r  r  r<   s     r(   r>   zASTTemplateIntroduction.__eq__  s8    %!89!!||u}},L1LLr'   c                D    t        | j                  | j                  f      S r:   )rB   r  r  rC   s    r(   rD   z ASTTemplateIntroduction.__hash__  s    T\\4;;/00r'   c                    dk\  sJ dj                  dgfd| j                  D        dd| j                  j                        dfd| j                  D        dd      S )Nr   re   r  c              3  @   K   | ]  }|j                          y wr:   r   r  s     r(   r   z1ASTTemplateIntroduction.get_id.<locals>.<genexpr>  s     =ell7#=r   r   r	  c              3  @   K   | ]  }|j                          y wr:   )r  r  s     r(   r   z1ASTTemplateIntroduction.get_id.<locals>.<genexpr>  s     Due!!'*Dr   )r   r  r  r[   rY   s    `r(   r[   zASTTemplateIntroduction.get_id
  s    !||ww
 >=
 	
 
 LL(
 
 ED
 
 
  	r'   c                    g }|j                   | j                        ddj                  fd| j                  D              df       dj                  |      S )Nr  r  c              3  .   K   | ]  } |        y wr:   r&   )r   rq   rI   s     r(   r   z5ASTTemplateIntroduction._stringify.<locals>.<genexpr>  s     @5i&@r  z} re   )r   r  r   r  r   s    ` r(   rJ   z"ASTTemplateIntroduction._stringify  sQ    

dll#II@DKK@@	
 	 wws|r'   c                   t        j                         }||z  }d|_        | j                  j	                  |d||       |t        j
                  dd      z  }d}| j                  D ]J  }|s0|t        j
                  dd      z  }|t        j                         z  }d}|j	                  ||||       L |t        j
                  dd      z  }y )NtemplateIntroductionrd   r  Tr  Fr  )r   r  r  r  r   r   r  r   )	r7   rG  r}   r~   r   r  r|   r   rq   s	            r(   r  z8ASTTemplateIntroduction.describe_signature_as_introducer$  s     ..0g
#9 ''S&I800c::[[ 	AE888cBB82244E$$WdC@	A 	800c::r'   N)r  r   r  z&list[ASTTemplateIntroductionParameter]r   r   r   r   r   r   r  )	r#   r$   r%   r8   r>   rD   r[   rJ   r  r&   r'   r(   r  r    ss    $.T	M
1 ;"; ; 	;
 ; ; 
;r'   r  c                  d    e Zd Z	 	 	 	 d	dZd
dZddZddZddZddZ	 	 	 	 	 	 	 	 	 	 	 	 ddZ	y)ASTTemplateDeclarationPrefixc                    || _         y r:   )r   )r7   r   s     r(   r8   z%ASTTemplateDeclarationPrefix.__init__@  s     #r'   c                `    t        |t              st        S | j                  |j                  k(  S r:   )r.   r  r;   r   r<   s     r(   r>   z#ASTTemplateDeclarationPrefix.__eq__F  s&    %!=>!!~~00r'   c                ,    t        | j                        S r:   )rB   r   rC   s    r(   rD   z%ASTTemplateDeclarationPrefix.__hash__K  s    DNN##r'   c                t    | j                   y | j                   d   }t        |t              sy |j                  S )Nr   )r   r.   rx  r  )r7   	last_lists     r(   get_requires_clause_in_lastz8ASTTemplateDeclarationPrefix.get_requires_clause_in_lastN  s7    >>!NN2&	)%67'''r'   c                L   |dk\  sJ g }t        | j                        dz
  }t        | j                        D ][  \  }}t        |t              r&|j                  |j                  |||k(               <|j                  |j                  |             ] dj                  |      S )Nr   rR   )r  re   )r0   r   	enumerater.   rx  rz   r[   r   )r7   rZ   r   
last_indexr   ts         r(   %get_id_except_requires_clause_in_lastzBASTTemplateDeclarationPrefix.get_id_except_requires_clause_in_lastV  s    !||(1,
dnn- 	.DAq!./

188Ga:o8OP

188G,-		.
 wws|r'   c                L    dj                  t        || j                              S r  )r   mapr   rH   s     r(   rJ   z'ASTTemplateDeclarationPrefix._stringifyb  s    wws9dnn566r'   c                    t        |       | j                  J | j                  D ]  }|j                  |d|||        y )Nro   )r   r   r  )r7   r|   r}   r~   r   r  r  s          r(   r   z/ASTTemplateDeclarationPrefix.describe_signaturee  sH     	 %~~))) 	A..sFH	r'   N)r   z8list[ASTTemplateParams | ASTTemplateIntroduction] | Noner   r   r   r   )r   r  r   r   )r|   r   r}   r/   r~   r   r   r   r  r   r   r   )
r#   r$   r%   r8   r>   rD   r  r  rJ   r   r&   r'   r(   r  r  ?  so    #Q#	#1
$(
7  	
   
r'   r  c                  H    e Zd ZddZddZd	dZd
dZ	 	 	 	 	 	 	 	 	 	 ddZy)ASTRequiresClausec                    || _         y r:   ro  rq  s     r(   r8   zASTRequiresClause.__init__v  r  r'   c                `    t        |t              st        S | j                  |j                  k(  S r:   )r.   r  r;   rp  r<   s     r(   r>   zASTRequiresClause.__eq__y  s&    %!23!!yyEJJ&&r'   c                ,    t        | j                        S r:   rt  rC   s    r(   rD   zASTRequiresClause.__hash__~  rE   r'   c                ,    d || j                         z   S )Nz	requires ro  rH   s     r(   rJ   zASTRequiresClause._stringify  s    Ytyy111r'   c                    |t        j                  dd      z  }|t        j                         z  }| j                  j	                  ||||       y )Nrequiresr:  r   s        r(   r   z$ASTRequiresClause.describe_signature  sF     	8,,ZDD8**,,		$$WdC@r'   Nr~  r   r   r   )
r|   znodes.TextElementr}   r/   r~   r   r   r   r   r   rk  r&   r'   r(   r  r  u  sQ    '
2	A"	A 	A 		A
 	A 
	Ar'   r  c                      e Zd Z	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZddZddZddZedd       Zedd       Z	dddZ
dd	Zdd
Z	 	 	 	 	 	 	 	 	 	 ddZy)ASTDeclarationNc                    || _         || _        || _        || _        || _        || _        || _        d | _        d | _        d | _	        y r:   )
rZ  directiveTyper  r   r   trailingRequiresClause	semicolonr   enumeratorScopedSymbol_newest_id_cache)r7   rZ  r  r  r   r   r  r  s           r(   r8   zASTDeclaration.__init__  sR     %*$,&&<#"%)59# -1r'   c                   t        |t              st        S | j                  |j                  k(  xr | j                  |j                  k(  xr | j
                  |j
                  k(  xr | j                  |j                  k(  xr | j                  |j                  k(  xrj | j                  |j                  k(  xrO | j                  |j                  k(  xr4 | j                  |j                  k(  xr | j                  |j                  k(  S r:   )r.   r  r;   rZ  r  r  r   r   r  r  r   r  r<   s     r(   r>   zASTDeclaration.__eq__  s    %0!!OOu/// L""e&9&99L5#3#33L ##u';';;L   E$5$55	L
 ++u/K/KKL %//1L u||+L ++u/K/KK
	
r'   c                    t        | j                  | j                  | j                  | j                  | j
                  | j                  | j                  | j                  | j                  f	      S r:   )
rB   rZ  r  r  r   r   r  r  r   r  rC   s    r(   rD   zASTDeclaration.__hash__  s]    OOOO''NNKK''

 
 
	r'   c           	     D   | j                   r| j                   j                         nd }| j                  r| j                  j                         nd }t        | j                  | j
                  | j                  || j                  j                         || j                        S r:   )	r   cloner  r  rZ  r  r  r   r  )r7   template_prefix_clonetrailing_requires_clasue_clones      r(   r  zASTDeclaration.clone  s    +/+>+>D%%'D 	 483N3ND''--/TX 	' OOOO!""$*NN
 	
r'   c                .    | j                   j                  S r:   )r   r4   rC   s    r(   r4   zASTDeclaration.name  s    $$$r'   c                N    | j                   dk7  ry | j                  j                  S )Nr  )rZ  r   r{  rC   s    r(   r{  zASTDeclaration.function_params  s#    ??j(///r'   c                   |dk(  r| j                   s| j                  rt        | j                  dk(  r1| j                  r%| j                  j
                  j                  |      S | j
                  j                  || j                  | j                        S | j                  dk(  r2| j                  r&| j                  j
                  j                  ||      S |rt        |   g}ng }| j                   E|j                  | j                   j                  |             | j                   j                         }nd }|s| j                  r|dk  rt        |j                  d       |r| j                  r|j                  d       |r*|j                  |j                  j                  |             | j                  r4|j                  | j                  j                  j                  |             |j                  d       |j                  | j
                  j                  || j                  | j                               dj                  |      S )NrR   
enumeratorr  r  aar   re   )r   r  r   rZ  r  r   r[   r   r   rz   r  r  rp  r   )r7   rZ   rW  r   requires_clause_in_lasts        r(   r[   zASTDeclaration.get_id  s   a<""d&A&A"",.43N3N22>>EEgNN##**7DOOT[[QQ??l*t/J/J..::AA'8TTg&'CC *JJ##II'R '+&9&9&U&U&W#&*#"d&A&A{""JJt&4+F+F

4 &

277>>wGH**

466;;BB7KLJJsO

4##**7DOOT[[QRwws|r'   c                h    | j                   | j                  t        d      | _         | j                   S r  )r  r[   r   rC   s    r(   get_newest_idzASTDeclaration.get_newest_id  s-      ($(KK$>D!$$$r'   c                   g }| j                   r,| j                   dk7  r|j                  | j                   df       | j                  r!|j                   || j                               |j                   || j                               | j
                  r#|j                  d || j
                        f       | j                  r|j                  d       dj                  |      S )Npublicrb  ;re   )r  r   r   rz   r   r  r  r   r   s      r(   rJ   zASTDeclaration._stringify  s    ??t(:JJ-.JJy!4!456

9T--./&&JJYt'B'BCDE>>JJsOwws|r'   c           	     l   t        |       | j                  sJ d|d<   t        j                         }d|_        | j                  j
                   |d<   | j                  r9| j                  j                  |||| j                  |j                  d             ||z  }| j                  rS| j                  dk7  rD|t        j                  | j                  | j                        z  }|t        j                         z  }| j                  dk(  rL| j                  j                         }|t        j                  ||      z  }|t        j                         z  }n+| j                  d	k(  r2|t        j                  d	d	      z  }|t        j                         z  }n| j                  d
v rn| j                  dk(  rV| j                  dv sJ |t        j                  | j                  | j                        z  }|t        j                         z  }nu| j                  dk(  r2|t        j                  dd      z  }|t        j                         z  }n4| j                  dk(  r|t        j                  dd      z  }|t        j                         z  }| j                  dk(  r1|t        j                  dd      z  }|t        j                         z  }n| j                  dk(  r1|t        j                  dd      z  }|t        j                         z  }nu| j                  dk(  sfJ | j                         | j                  dk(  r1|t        j                  dd      z  }|t        j                         z  }nt!        | j                        | j                  j                  |||| j                         |}| j"                  rVt        j                         }d|_        |j%                  |       |}| j"                  j                  |d|| j                         | j&                  r|t        j(                  dd      z  }y y )NTis_multiline
declaratoradd_permalinkztparam-line-spec)r   r  r  r1  r  >   r  r  class>   r  structunionenumz
enum-classzenum-structr  r  r  rd   r  )r   r   r   r  r  isRedeclarationr   r   r  r  r   r   rZ  r   r  r  r1   r  rz   r  r   )	r7   r|   r}   r~   optionsmain_decl_noder   last_decl_nodetrailing_req_nodes	            r(   r   z!ASTDeclaration.describe_signature'  s    	 %{{{ #'!557*6'.2kk.I.I*I'22{{ %78 3  	>!??t(:h77 N h5577N??f$%%AACFh77GGNh5577N__	)h77	9MMNh5577N__ 66__'%%)<<<<h77""D$6$6 N h5577N__'h77IINh5577N__&h77GGNh5577N!!\1(";";GW"MM("9"9";;##}4(";";Hh"OO("9"9";;))V3GT5G5GG3__,h77lSSNh5577N 11++ND#t{{S'&& ( < < >1I.NN,-.N''::!:sDKK >>h;;CEEN r'   )NNNNNF)rZ  r/   r  rL  r  rL  r   z#ASTTemplateDeclarationPrefix | Noner   r   r  r  r  r   r   r   r   r   )r   r  r   r  r  )rZ   r   rW  r   r   r/   r   r   )
r|   r   r}   r/   r~   r   r  zdict[str, bool]r   r   )r#   r$   r%   r8   r>   rD   r  r   r4   r{  r[   r  rJ   r   r&   r'   r(   r  r    s     %)!%>B;?11 "1 	1
 <1 1 !91 1 
14

" % % 0 0
-^%
LFLF LF 	LF
 !LF 
LFr'   r  c                  8    e Zd Z	 	 	 	 	 	 ddZddZddZd	dZy)
ASTNamespacec                     || _         || _        y r:   )rB  r   )r7   rB  r   s      r(   r8   zASTNamespace.__init__w  s     %,r'   c                    t        |t              st        S | j                  |j                  k(  xr | j                  |j                  k(  S r:   )r.   r  r;   rB  r   r<   s     r(   r>   zASTNamespace.__eq__}  sB    %.!!OOu/// <##u';';;	
r'   c                D    t        | j                  | j                  f      S r:   )rB   rB  r   rC   s    r(   rD   zASTNamespace.__hash__  s    T__d&9&9:;;r'   c                    g }| j                   r!|j                   || j                                |j                   || j                               dj                  |      S r  )r   rz   rB  r   r   s      r(   rJ   zASTNamespace._stringify  sJ    JJy!4!456

9T__-.wws|r'   N)rB  r   r   r  r   r   r   r   r   )r#   r$   r%   r8   r>   rD   rJ   r&   r'   r(   r  r  v  s.    -'-9U-	-
<r'   r  )
__future__r   r2   r   typingr   docutilsr   sphinxr   sphinx.domains.cpp._idsr   r   r	   r
   r   r   r   r   r   r   sphinx.util.cfamilyr   r   r   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?  rK  rU  rm  r  r  r  r  r  r  r  r  r  r  r  r  r  r!  r1  r<  rF  rT  ra  ro  ry  r  r  r  r  r  r  r  r  r  r  r  r  r!  r+  r7  r@  rO  rc  rm  r  r  r  r  r  r  r  r!  rL  ra  ru  r  r  r  r  r  r  r  r  r  r  r  r'  r0  r:  rB  rL  rX  rl  rz  rx  r  r  r  r  r  r  r&   r'   r(   <module>r	     sn   " 
         --3.13	k 	qG qh.S7 .SbUCG UCz.G .	 	C
 C&C
 C<Jz J2Jz J2$<Z $<NKJ K<=] =&M;- M;`;= ;4Am A:.7 .;l ;4I| I2I I2:L :&:L :&@ @:=] =B.;m .;b; ;BA] AB; ;<;M ;6AM A4;] ;6;m ;6@I @IF-AM -AhA- AD.I= .Ib5E 5Ep&; &;R6F 6FrI= ID7m 7@A ' A H*B *BZW W@!Ik !IHBW B::;g :;B.' ./<%8 /<d;&9 ;0;"5 ;:5;1 5;p+K7 +K\?g ?6wYg wYt?g ?8Q/ Q/hUI7 UIx&;w &;R*.G *.ZeJ eJP3A 3AlwA} wAtHA} HAVEA] EAPpA- pAfPI PIn?= ?4 ;+  ;FHW HByAg yAx0Eg 0Ef.Eg .Eb&R7 &RZ&L &LR-C7 -C`Bw BJ Hw  HF:g :z*KG *Kj.w .*DN'7 DNN*A+ *AZ0A#3 0Af@C. @CFXV XV~?Ow ?OD?;g ?;J37 3lA A>_FW _FD7 r'   