
    Fer                      U d Z ddlmZ ddlZddlmZmZmZmZ ddl	m
Z
 ddlmZ ddlmZ ddlmZ dd	lmZmZ dd
lmZ ddl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$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5 ddl6m7Z7m8Z8 ddl9m:Z: ddl;m<Z< er4ddl=m>Z>m?Z? ddl@mAZAmBZBmCZCmDZD ddlEmFZFmGZG ddlHmIZI ddlJmKZK ddlLmMZM ddlNmOZO  e!j                  eQ      ZR ed      ZS	  ej                  dej                        ZV ej                  dej                        ZX ej                  d      ZY ej                  dej                        ZZ ej                  d ej                        Z[g d!Z\ ej                  d"ej                        Z]d#Z^g d$Z_d%d%d&d'd'd(d)d)d*d+d,
Z`d-d.d/d0d1d2d3Zai d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUi dVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzd{d|d}d~ddZbi dd1dd+dd%dddddddddddddddddddddddddd'dd'i dd'dddddd)dd)dd)dd)dd2dd2ddddddddddddddddi ddddddddddddddddddddddddddddddddǓddɓddiZci d4d̓d6d͓d8dΓd:dϓd<dГddГd>dғd@dӓdBdԓdDdՓdFd֓dHdדddדdJdٓddٓdLdۓddۓi dNdݓdPdޓdRdߓdTddVddXddZdddd\dddd^dddd`ddbdddddfddhdi djddddlddnddpddrddd-dtddddvddddddddddddd ddddddddZdd	d
ddddddddАd
Zed%d%ddddZfdegd<   ddgdvdgdJdgdLdgdHdgg dg dd`dbgd>d@gg dddggZhg dZig dZjdddddZk G d del      Zm G d d e$      Zn G d! d"en      Zo G d# d$en      Zp G d% d&en      Zq G d' d(en      Zr G d) d*er      Zs G d+ d,es      Zt G d- d.es      Zu G d/ d0es      Zv G d1 d2es      Zw G d3 d4es      Zx G d5 d6es      Zy G d7 d8er      Zz G d9 d:er      Z{ G d; d<er      Z| G d= d>er      Z} G d? d@en      Z~ G dA dBe~      Z G dC dDe~      Z G dE dFe~      Z G dG dHe~      Z G dI dJe~      Z G dK dLe~      Z G dM dNer      Z G dO dPer      Z G dQ dRer      Z G dS dTer      Z G dU dVer      Z G dW dXer      Z G dY dZer      Z G d[ d\er      Z G d] d^er      Z G d_ d`er      Z G da dber      Z G dc dder      Z G de dfer      Z G dg dher      Z G di djen      Z G dk dler      Z G dm dner      Z G do dper      Z G dq dren      Z G ds dte      Z G du dve      Z G dw dxe      Z G dy dzen      Z G d{ d|en      Z G d} d~en      Z G d de      Z G d de      Z G d de      Z G d de      Z G d den      Z G d den      Z G d den      Z G d den      Z G d den      Z G d den      Z G d den      Z G d den      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      Z G d der      Z G d de%      Z G d den      Z G d den      Z G d den      Z G d den      Z G d den      Z G d den      Z G d den      Z G d den      Z G d den      Z G d den      Z G d den      Z G d den      Z G d de      Z G dÄ de      Z G dń de      Z G dǄ de      Z G dɄ den      Z G d˄ den      Z G d̈́ den      Z G dτ den      Z G dф den      Z G dӄ den      Z G dՄ den      Z G dׄ dث      Z G dل dګ      Z	 	 	 	 ddۄZ G d܄ dݫ      Z G dބ de&      ZΐddZ G d dee         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Ы      Z G d deЫ      Z G d de:      Z G d de:      Z G d de:      Z G d de
j                        Z G d de      Z G d de      Z G d d e      Z G d de      Z G d de      ZddZy(	  zThe C++ language domain.    )annotationsN)TYPE_CHECKINGAnyCallableTypeVar)nodes)
directives)addnodes)ObjectDescription)DomainObjType)NoUri)___)
SphinxRoleXRefRole)SphinxTransform)ReferencesResolver)logging)ASTAttributeListASTBaseBaseASTBaseParenExprList
BaseParserDefinitionErrorNoOldIdErrorStringifyTransform$UnsupportedMultiCharacterCharLiteralanon_identifier_rebinary_literal_rechar_literal_refloat_literal_refloat_literal_suffix_rehex_literal_reidentifier_reinteger_literal_reintegers_literal_suffix_reoctal_literal_reverify_description_mode)FieldGroupedField)SphinxDirective)make_refnode)	GeneratorIterator)ElementNodeTextElementsystem_message)desc_signaturepending_xref)Sphinx)Builder)BuildEnvironment)
OptionSpecTzJ
    [a-zA-Z_][a-zA-Z0-9_]*\b   # note, no word boundary in the beginning
z>[LuU8]?('([^'\\]*(?:\\.[^'\\]*)*)'|"([^"\\]*(?:\\.[^"\\]*)*)")z\b(public|private|protected)\bz
        \[\s*\]
    |   \(\s*\)
    |   \+\+ | --
    |   ->\*? | \,
    |   (<<|>>)=? | && | \|\|
    |   <=>
    |   [!<>=/*%+|&^~-]=?
    |   (\b(and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|xor|xor_eq)\b)
zt
        ->\*    |    \.\*    |    \,
    |   (<<|>>)=?    |    &&    |    \|\|
    |   !=
    |   [<>=/*%+|&^~-]=?
)Yalignasalignofandand_eqasmautobitandbitorboolbreakcasecatchcharchar8_tchar16_tchar32_tclasscomplconceptconst	consteval	constexpr	constinit
const_castcontinuedecltypedefaultdeletedodoubledynamic_castelseenumexplicitexportexternfalsefloatforfriendgotoifinlineintlongmutable	namespacenewnoexceptnotnot_eqnullptroperatororor_eqprivate	protectedpublicregisterreinterpret_castrequiresreturnshortsignedsizeofstaticstatic_assertstatic_caststructswitchtemplatethisthread_localthrowtruetrytypedeftypeidtypenameunionunsignedusingvirtualvoidvolatilewchar_twhilexorxor_eqa  
    \b(
    auto|void|bool
    |signed|unsigned
    |short|long
    |char|wchar_t|char(8|16|32)_t
    |int
    |__int(64|128)  # extension
    |float|double
    |__float80|_Float64x|__float128|_Float128  # extension
    |_Complex|_Imaginary  # extension
    )\b
   )N _CPPv2_CPPv3_CPPv4cCiUlLb)
rF   signed charunsigned charre   
signed intunsigned intrf   signed longunsigned longrB   ssosisiosvm)zstd::stringzstd::ostreamzstd::istreamzstd::iostreamzstd::vectorzstd::mapri   znew-operatornew[]znew-array-operatorrU   zdelete-operatordelete[]zdelete-array-operator~zinv-operator+zadd-operator-zsub-operator*zmul-operator/zdiv-operator%zmod-operator&zand-operator|zor-operator^zxor-operator=zassign-operator+=zadd-assign-operator-=zsub-assign-operator*=zmul-assign-operator/=zdiv-assign-operator%=zmod-assign-operator&=zand-assign-operator|=zor-assign-operator^=zxor-assign-operatorz<<zlshift-operatorz>>zrshift-operator<<=zlshift-assign-operator>>=zrshift-assign-operator==zeq-operator!=zneq-operator<zlt-operator>zgt-operator<=zlte-operator>=zgte-operator!znot-operator&&zsand-operatorzsor-operatorzinc-operatorzdec-operatorzcomma-operatorzpointer-by-pointer-operatorzpointer-operatorzcall-operatorzsubscript-operator)||++--,->*->()[]r   rB   rF   r   ar   hr   wrI   DirH   DsrG   Durx   sz	short intzsigned shortzsigned short intzunsigned shorttzunsigned short intre   ry   r   r   jr   rf   zlong intr   zsigned long intr   zunsigned long intz	long longxzlong long intzsigned long longzsigned long long int__int64zunsigned long longyzunsigned long long int__int128nzsigned __int128zunsigned __int128or_   frW   dzlong doublee	__float80	_Float64x
__float128g	_Float128z_Complex floatCfz_Complex doubleCdz_Complex long doubleCez_Imaginary floatz_Imaginary doublez_Imaginary long doubler?   Dadecltype(auto)Dczstd::nullptr_tDnnwnadldacorK   plmimldvrmanr@   ro   rA   eor   aSpLmImLdVrMaNr=   oRrp   eOr   lsrslSrSeqnerl   ltgtlege<=>ntrk   aar<   r   oor   ppr   mmr   cmr   pmptclixdsqu)r   r   r   .*?pp_mm_deadpsng)
r   r   r   r   r   r   r   rk   r   rK   )Nu8ur   r   zdict[str | None, str]_id_char_from_prefix)r   r   rl   )r  r   r   r   r   )r   r   r   r  )r   r   r   r   r   r   r   r   r   r=   r   r   r   rp   dcscccrc)rX   r}   rQ   ru   c                      e Zd ZddZddZy)_DuplicateSymbolErrorc                0    |sJ |sJ || _         || _        y N)symboldeclaration)selfr.  r/  s      4/usr/lib/python3/dist-packages/sphinx/domains/cpp.py__init__z_DuplicateSymbolError.__init__S  s     v{&    c                >    d| j                   j                  d      z  S )Nz'Internal C++ duplicate symbol error:
%sr   )r.  dumpr0  s    r1  __str__z_DuplicateSymbolError.__str__Y  s    9DKK<L<LQ<OOOr3  N)r.  Symbolr/  ASTDeclarationrw   Nonerw   str)__name__
__module____qualname__r2  r7   r3  r1  r+  r+  R  s    'Pr3  r+  c                      e Zd Zy)ASTBaseNr=  r>  r?  r@  r3  r1  rB  rB  ]      r3  rB  c                  T    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)ASTIdentifierc                :    |J t        |      dk7  sJ || _        y Nr   )len
identifierr0  rJ  s     r1  r2  zASTIdentifier.__init__e  s'    %%%:!###$r3  c                &     || j                         S r-  rJ  r0  	transforms     r1  
_stringifyzASTIdentifier._stringifyj  s    ))r3  c                &    | j                   d   dk(  S )Nr   @rM  r6  s    r1  is_anonzASTIdentifier.is_anonm  s    q!S((r3  c                   | 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_tr   stdStr   r   D0zUt%d_%s)rS  r   rJ  rI  r<  r0  versions     r1  get_idzASTIdentifier.get_idp  s    <<>gka<(*&??e#__Q3&||~ C$81$<dooab>Q#RRR3t/04??BBr3  c                    | j                   S r-  rM  r6  s    r1  r7  zASTIdentifier.__str__      r3  c                >    | j                         rdS | j                  S )N[anonymous])rS  rJ  r6  s    r1  get_display_stringz ASTIdentifier.get_display_string  s     $}CDOOCr3  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(  rzt        |      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        )Nra  )textmarkTyper   cpprJ  	refdomainreftype	reftargetmodname	classnamecpp:parent_key
lastIsName
noneIsNameparamclassesz	sig-paramudlr   
operator""Unknown description mode: %s)r(   rS  r
   desc_sig_namerJ  r4   get_lookup_key	desc_nameappendrI  	Exception)r0  signodemodeenvprefixtemplateArgsr.  node
targetTextpnodenameNodes              r1  describe_signaturez ASTIdentifier.describe_signature  s   %<<>))}=D))$//4??KD:$//1L@J))"2>4>48:E '-&;&;&=E"#TMEuG\!))+HHxG\!tOGW_O"";/tOGU]v;!###|$)))||~%%%7J))"2>4>48:E '-&;&;&=E"#TMEuG:TABBr3  N)rJ  r<  rw   r:  rO  r   rw   r<  rw   rB   r\  re   rw   r<  r;  rz  r1   r{  r<  r|  r7   r}  r<  r~  r<  r.  r8  rw   r:  )
r=  r>  r?  r2  rP  rS  r]  r7  rb  r  r@  r3  r1  rF  rF  d  sL    %
*)C*D'C#&'C69'CCI'CNR'Cr3  rF  c                  L    e Zd Z	 	 	 	 ddZddZd	dZd
dZ	 	 	 	 	 	 	 	 ddZy)ASTNestedNameElementc                     || _         || _        y r-  	identOrOpr~  )r0  r  r~  s      r1  r2  zASTNestedNameElement.__init__  s    "(r3  c                     yNFr@  r6  s    r1  is_operatorz ASTNestedNameElement.is_operator      r3  c                    | j                   j                  |      }| j                  r|| j                  j                  |      z  }|S r-  )r  r]  r~  r0  r\  ress      r1  r]  zASTNestedNameElement.get_id  s?    nn##G,4$$++G44C
r3  c                l     || j                         }| j                  r| || j                        z  }|S r-  r  r0  rO  r  s      r1  rP  zASTNestedNameElement._stringify  s3    '9T..//C
r3  c                    | j                   t        | j                         nd}| j                  j                  ||||||       | j                   | j                   j                  |d||       y y )Nr   re  )r~  r<  r  r  )r0  rz  r{  r|  r}  r.  tArgss          r1  r  z'ASTNestedNameElement.describe_signature  sf    *.*;*;*GD%%&R))'4feVT(00*c6R )r3  N)r  ASTIdentifier | ASTOperatorr~  ASTTemplateArgsrw   r:  r  r  r  )rz  r1   r{  r<  r|  r7   r}  r<  r.  r8  rw   r:  )r=  r>  r?  r2  r  r]  rP  r  r@  r3  r1  r  r    sP    ).)37)
S 0S:=SGMSRVSr3  r  c                  `    e Z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 rH  )rI  names	templatesrooted)r0  r  r  r  s       r1  r2  zASTNestedName.__init__  sF    5zA~~
"4::#dnn"5555r3  c                    | S r-  r@  r6  s    r1  namezASTNestedName.name  s    r3  c                r    d}| j                   D ]%  }|j                         r|j                  s!|dz  }' |S Nr   rV  )r  r  r~  )r0  countr   s      r1  num_templateszASTNestedName.num_templates  s=     	A}}~~
		
 r3  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                  D ]"  }|j                  |j                               $ t	        | j                        dkD  st	        |      dkD  r|j                  d       dj                  |      S )NrV  ::c              3  @   K   | ]  }|j                          y wr-  r]  ).0r   r\  s     r1  	<genexpr>z'ASTNestedName.get_id.<locals>.<genexpr>        Gq'!2 G   r   NEr   )r<  _id_shorthands_v1joinr  rI  rx  r]  )r0  r\  	modifiersttr  r   s    `    r1  r]  zASTNestedName.get_id  s    a<TB&&(,,yy GDJJ GGGtzz?Q#i.1"4JJsO

9 	*AJJqxx()	*tzz?Q#i.1"4JJsOwws|r3  c                H   g }| j                   r|j                  d       t        t        | j                              D ]R  }| j                  |   }| j
                  |   r|j                  d ||      z          <|j                   ||             T dj                  |      S )Nr   z	template r  )r  rx  rangerI  r  r  r  )r0  rO  r  r   r   s        r1  rP  zASTNestedName._stringify  s    ;;JJrNs4::' 	)A

1A~~a 

;156

9Q<(	) yy~r3  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 rWg }|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        |      }|dk7  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        )Nro  zCan this happen?r  r   r   r   rp  rV  )re  rn  markNamern  TFre  rt  )r(   r  AssertionErrorr   Textr  rI  r  r  r  r<  r/  templatePrefixr
   desc_addnamedesc_sig_punctuationdesc_sig_keyworddesc_sig_spacer~  ry  )r0  rz  r{  r|  r.  unreachabler   r   templateParamsiTemplateParamstemplateParamsPrefixr}  firstr  destnner   txt_nnes                     r1  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;;
 )+N|#)))%%44@%+%7%7%F%F%P%PNO#% 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(b=''Oc.>Q,Q,N?4S0TT,'1,**4+.0Dv0MvW'!#"$ |#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Br3  N)r  zlist[ASTNestedNameElement]r  z
list[bool]r  rB   rw   r:  rw   r  )rw   re   )r   )r\  re   r  r<  rw   r<  r  
rz  r1   r{  r<  r|  r7   r.  r8  rw   r:  )
r=  r>  r?  r2  propertyr  r  r]  rP  r  r@  r3  r1  r  r    sg    &049=  $
QC 0QC:@QCEIQCr3  r  c                  (    e Zd ZddZ	 	 	 	 	 	 ddZy)ASTExpressionc                *    t        t        |             r-  NotImplementedErrorreprr[  s     r1  r]  zASTExpression.get_id_      !$t*--r3  c                *    t        t        |             r-  r  r0  rz  r{  r|  r.  s        r1  r  z ASTExpression.describe_signatureb      !$t*--r3  Nr  r  r=  r>  r?  r]  r  r@  r3  r1  r  r  ^  $    .. 0.:@.EI.r3  r  c                      e Zd Zy)
ASTLiteralNrC  r@  r3  r1  r  r  j  rD  r3  r  c                  0    e Zd ZddZddZ	 	 	 	 	 	 ddZy)ASTPointerLiteralc                     yNrm   r@  rN  s     r1  rP  zASTPointerLiteral._stringifyo  s    r3  c                     y)NLDnEr@  r[  s     r1  r]  zASTPointerLiteral.get_idr      r3  c                6    |t        j                  dd      z  }y r  r
   r  r  s        r1  r  z$ASTPointerLiteral.describe_signatureu  s    8,,Y	BBr3  Nr  r  r  r=  r>  r?  rP  r]  r  r@  r3  r1  r  r  n  s-    C 0C:@CEICr3  r  c                  8    e Zd ZddZddZddZ	 	 	 	 	 	 d	dZy)
ASTBooleanLiteralc                    || _         y r-  valuer0  r  s     r1  r2  zASTBooleanLiteral.__init__{  	    
r3  c                    | j                   ryy)Nr   r^   r  rN  s     r1  rP  zASTBooleanLiteral._stringify~  s    ::r3  c                    | j                   ryy)NL1EL0Er  r[  s     r1  r]  zASTBooleanLiteral.get_id  s    ::r3  c                Z    |t        j                  t        |       t        |             z  }y r-  )r
   r  r<  r  s        r1  r  z$ASTBooleanLiteral.describe_signature  s!    8,,SYD	BBr3  N)r  rB   rw   r:  r  r  r  r=  r>  r?  r2  rP  r]  r  r@  r3  r1  r  r  z  s2    C 0C:@CEICr3  r  c                  8    e Zd ZddZddZddZ	 	 	 	 	 	 d	dZy)
ASTNumberLiteralc                    || _         y r-  datar0  r  s     r1  r2  zASTNumberLiteral.__init__  	    	r3  c                    | j                   S r-  r  rN  s     r1  rP  zASTNumberLiteral._stringify      yyr3  c                @    d| j                   j                  dd      z  S )NzL%sE'r   )r  replacer[  s     r1  r]  zASTNumberLiteral.get_id  s    		))#r222r3  c                ^    |t        j                  | j                  | j                        z  }y r-  )r
   desc_sig_literal_numberr  r  s        r1  r  z#ASTNumberLiteral.describe_signature  !    833DIItyyIIr3  Nr  r<  rw   r:  r  r  r  r  r@  r3  r1  r  r    s2    3J 0J:@JEIJr3  r  c                  8    e Zd ZddZddZddZ	 	 	 	 	 	 d	dZy)
ASTStringLiteralc                    || _         y r-  r  r  s     r1  r2  zASTStringLiteral.__init__  r  r3  c                    | j                   S r-  r  rN  s     r1  rP  zASTStringLiteral._stringify  r  r3  c                8    dt        | j                        dz
  z  S )NzLA%d_KcE   )rI  r  r[  s     r1  r]  zASTStringLiteral.get_id  s    S^a/00r3  c                ^    |t        j                  | j                  | j                        z  }y r-  )r
   desc_sig_literal_stringr  r  s        r1  r  z#ASTStringLiteral.describe_signature  r  r3  Nr  r  r  r  r  r@  r3  r1  r  r    s2    1J 0J:@JEIJr3  r  c                  8    e Z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-escaperV  )
r}  r  r%  typeencodedecoderI  ordr  r   )r0  r}  r  decodeds       r1  r2  zASTCharLiteral.__init__  sd    	----(0	++-&&'78w<1WDJ6w??r3  c                |    | j                   d| j                  z   dz   S | j                   dz   | j                  z   dz   S Nr  )r}  r  rN  s     r1  rP  zASTCharLiteral._stringify  s<    ;;?S((;;$tyy0366r3  c                F    | j                   t        | j                        z   S r-  )r  r<  r  r[  s     r1  r]  zASTCharLiteral.get_id  s    yy3tzz?**r3  c                    | j                   -|t        j                  | j                   | j                         z  }d| j                  z   dz   }|t        j                  ||      z  }y r  )r}  r
   r  r  desc_sig_literal_char)r0  rz  r{  r|  r.  txts         r1  r  z!ASTCharLiteral.describe_signature  sT    ;;"x00dkkJJGDIIo#811#s;;r3  N)r}  r<  r  r<  rw   r:  r  r  r  r  r@  r3  r1  r	  r	    s/    	@7+< 0<:@<EI<r3  r	  c                  8    e Zd ZddZddZddZ	 	 	 	 	 	 d	dZy)
ASTUserDefinedLiteralc                     || _         || _        y r-  literalident)r0  r  r  s      r1  r2  zASTUserDefinedLiteral.__init__  s    
r3  c                L     || j                          || j                        z   S r-  r  rN  s     r1  rP  z ASTUserDefinedLiteral._stringify  s    &4::)>>>r3  c                x    d| j                   j                  |       d| j                  j                  |       dS )NclL_Zlir  )r  r]  r  r[  s     r1  r]  zASTUserDefinedLiteral.get_id  s8    **734Adll6I6I'6R5SSTUUr3  c                    | j                   j                  ||||       | j                  j                  |d|dd|       y )Nrr  r   )r  r  r  r  s        r1  r  z(ASTUserDefinedLiteral.describe_signature  s6    ''sFC

%%guc2r6Jr3  N)r  r  r  rF  r  r  r  r  r@  r3  r1  r  r    s3    ?VK 0K:@KEIKr3  r  c                  0    e Zd ZddZddZ	 	 	 	 	 	 ddZy)ASTThisLiteralc                     yNr   r@  rN  s     r1  rP  zASTThisLiteral._stringify  r  r3  c                     y)NfpTr@  r[  s     r1  r]  zASTThisLiteral.get_id  r  r3  c                6    |t        j                  dd      z  }y r#  r  r  s        r1  r  z!ASTThisLiteral.describe_signature  s    8,,VV<<r3  Nr  r  r  r  r@  r3  r1  r!  r!    s)    = 0=:@=EI=r3  r!  c                  D    e Zd Z	 	 	 	 	 	 ddZddZddZ	 	 	 	 	 	 d	dZy)
ASTFoldExprc                :    ||J || _         || _        || _        y r-  leftExprop	rightExprr0  r+  r,  r-  s       r1  r2  zASTFoldExpr.__init__  s(    #y'<<< "r3  c                   dg}| j                   r^|j                   || j                                |j                  d       |j                  | j                         |j                  d       |j                  d       | j                  r^|j                  d       |j                  | j                         |j                  d       |j                   || j                               |j                  d       dj	                  |      S )N( ...)r   )r+  rx  r,  r-  r  r  s      r1  rP  zASTFoldExpr._stringify  s    e==JJy/0JJsOJJtwwJJsO

5>>JJsOJJtwwJJsOJJy01

3wws|r3  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 )NrU  flfrfLr   )r<  r+  rx  r-  _id_operator_v2r,  r]  r  r  s      r1  r]  zASTFoldExpr.get_id  s    !||a<t9== JJt^^#JJt JJt

?477+,==JJt}}++G45>>JJt~~,,W56wws|r3  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 )Nr0  r2  r3  )r
   r  r+  r  r  desc_sig_operatorr,  r-  r  s        r1  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::r3  N)r+  r  r,  r<  r-  r  rw   r:  r  r  r  r  r@  r3  r1  r(  r(    sF    ##%2#7;# *; 0;:@;EI;r3  r(  c                  8    e Zd ZddZddZddZ	 	 	 	 	 	 d	dZy)
ASTParenExprc                    || _         y r-  exprr0  r?  s     r1  r2  zASTParenExpr.__init__,  r  r3  c                2    d || j                         z   dz   S Nr0  r3  r>  rN  s     r1  rP  zASTParenExpr._stringify/      Ytyy))C//r3  c                8    | j                   j                  |      S r-  r?  r]  r[  s     r1  r]  zASTParenExpr.get_id2      yy((r3  c                    |t        j                  dd      z  }| j                  j                  ||||       |t        j                  dd      z  }y rB  r
   r  r?  r  r  s        r1  r  zASTParenExpr.describe_signature5  H    800c::		$$WdC@800c::r3  Nr?  r  r  r  r  r  r@  r3  r1  r<  r<  +  s.    0); 0;:@;EI;r3  r<  c                  8    e Zd ZddZddZddZ	 	 	 	 	 	 d	dZy)
ASTIdExpressionc                    || _         y r-  r  r0  r  s     r1  r2  zASTIdExpression.__init__=  s	    	r3  c                &     || j                         S r-  rN  rN  s     r1  rP  zASTIdExpression._stringifyA      ##r3  c                8    | j                   j                  |      S r-  r  r]  r[  s     r1  r]  zASTIdExpression.get_idD  rF  r3  c                @    | j                   j                  ||||       y r-  )r  r  r  s        r1  r  z"ASTIdExpression.describe_signatureG      		$$WdC@r3  Nr  r  r  r  r  r  r@  r3  r1  rL  rL  <  s2    $)A 0A:@AEIAr3  rL  c                  (    e Zd ZddZ	 	 	 	 	 	 ddZy)ASTPostfixOpc                *    t        t        |             r-  r  r0  idPrefixr\  s      r1  r]  zASTPostfixOp.get_idP  r  r3  c                *    t        t        |             r-  r  r  s        r1  r  zASTPostfixOp.describe_signatureS  r  r3  Nr[  r<  r\  re   rw   r<  r  r  r@  r3  r1  rX  rX  O  r  r3  rX  c                  8    e Zd ZddZddZddZ	 	 	 	 	 	 d	dZy)
ASTPostfixArrayc                    || _         y r-  r>  r@  s     r1  r2  zASTPostfixArray.__init__Y  r  r3  c                2    d || j                         z   dz   S N[]r>  rN  s     r1  rP  zASTPostfixArray._stringify\  rC  r3  c                D    d|z   | j                   j                  |      z   S )Nr  rE  rZ  s      r1  r]  zASTPostfixArray.get_id_       h!1!1'!:::r3  c                    |t        j                  dd      z  }| j                  j                  ||||       |t        j                  dd      z  }y rb  rH  r  s        r1  r  z"ASTPostfixArray.describe_signatureb  rI  r3  NrJ  r  r]  r  r  r@  r3  r1  r_  r_  X  s.    0;; 0;:@;EI;r3  r_  c                  8    e Zd ZddZddZddZ	 	 	 	 	 	 d	dZy)
ASTPostfixMemberc                    || _         y r-  rN  rO  s     r1  r2  zASTPostfixMember.__init__j  r  r3  c                ,    d || j                         z   S )N.rN  rN  s     r1  rP  zASTPostfixMember._stringifym  s    Ytyy)))r3  c                D    d|z   | j                   j                  |      z   S )NdtrS  rZ  s      r1  r]  zASTPostfixMember.get_idp  rf  r3  c                r    |t        j                  dd      z  }| j                  j                  |d||       y )Nrl  ro  )r
   r  r  r  r  s        r1  r  z#ASTPostfixMember.describe_signatures  s1    800c::		$$WlCHr3  NrV  r  r]  r  r  r@  r3  r1  ri  ri  i  s2    *;I 0I:@IEIIr3  ri  c                  8    e Zd ZddZddZddZ	 	 	 	 	 	 d	dZy)
ASTPostfixMemberOfPointerc                    || _         y r-  rN  rO  s     r1  r2  z"ASTPostfixMemberOfPointer.__init__z  r  r3  c                ,    d || j                         z   S )Nr   rN  rN  s     r1  rP  z$ASTPostfixMemberOfPointer._stringify}  s    i		***r3  c                D    d|z   | j                   j                  |      z   S )Nr  rS  rZ  s      r1  r]  z ASTPostfixMemberOfPointer.get_id  rf  r3  c                r    |t        j                  dd      z  }| j                  j                  |d||       y )Nr   ro  )r
   r:  r  r  r  s        r1  r  z,ASTPostfixMemberOfPointer.describe_signature  s1    8--dD99		$$WlCHr3  NrV  r  r]  r  r  r@  r3  r1  rq  rq  y  s2    +;I 0I:@IEIIr3  rq  c                  0    e Zd ZddZddZ	 	 	 	 	 	 ddZy)ASTPostfixIncc                     yNr   r@  rN  s     r1  rP  zASTPostfixInc._stringify      r3  c                    d|z   S )Nr  r@  rZ  s      r1  r]  zASTPostfixInc.get_id      hr3  c                6    |t        j                  dd      z  }y ry  r
   r:  r  s        r1  r  z ASTPostfixInc.describe_signature      8--dD99r3  Nr  r]  r  r  r@  r3  r1  rw  rw    )    : 0::@:EI:r3  rw  c                  0    e Zd ZddZddZ	 	 	 	 	 	 ddZy)ASTPostfixDecc                     yNr   r@  rN  s     r1  rP  zASTPostfixDec._stringify  rz  r3  c                    d|z   S )Nr  r@  rZ  s      r1  r]  zASTPostfixDec.get_id  r|  r3  c                6    |t        j                  dd      z  }y r  r~  r  s        r1  r  z ASTPostfixDec.describe_signature  r  r3  Nr  r]  r  r  r@  r3  r1  r  r    r  r3  r  c                  8    e Zd ZddZddZddZ	 	 	 	 	 	 d	dZy)
ASTPostfixCallExprc                    || _         y r-  lst)r0  r  s     r1  r2  zASTPostfixCallExpr.__init__  	    r3  c                &     || j                         S r-  r  rN  s     r1  rP  zASTPostfixCallExpr._stringify  s    ""r3  c                    d|g}| j                   j                  D ]"  }|j                  |j                  |             $ |j                  d       dj	                  |      S )Nr  r  r   )r  exprsrx  r]  r  )r0  r[  r\  r  r   s        r1  r]  zASTPostfixCallExpr.get_id  sQ    X 	*AJJqxx()	*

3wws|r3  c                @    | j                   j                  ||||       y r-  )r  r  r  s        r1  r  z%ASTPostfixCallExpr.describe_signature  s    ##GT3?r3  N)r  $ASTParenExprList | ASTBracedInitListrw   r:  r  r]  r  r  r@  r3  r1  r  r    s2    #@ 0@:@@EI@r3  r  c                  8    e Zd ZddZddZddZ	 	 	 	 	 	 d	dZy)
ASTPostfixExprc                     || _         || _        y r-  )r}  	postFixes)r0  r}  r  s      r1  r2  zASTPostfixExpr.__init__  s    "r3  c                     || j                         g}| j                  D ]  }|j                   ||              dj                  |      S Nr   )r}  r  rx  r  )r0  rO  r  ps       r1  rP  zASTPostfixExpr._stringify  sD    %& 	%AJJy|$	%wws|r3  c                    | j                   j                  |      }| j                  D ]  }|j                  ||      } |S r-  )r}  r]  r  )r0  r\  idr  s       r1  r]  zASTPostfixExpr.get_id  s>    [[( 	'A"g&B	'	r3  c                    | j                   j                  ||||       | j                  D ]  }|j                  ||||        y r-  )r}  r  r  )r0  rz  r{  r|  r.  r  s         r1  r  z!ASTPostfixExpr.describe_signature  sA    &&wc6B 	=A  $V<	=r3  N)r}  ASTTyper  zlist[ASTPostfixOp]r  r  r  r  r@  r3  r1  r  r    s.    #= 0=:@=EI=r3  r  c                  8    e Zd ZddZddZddZ	 	 	 	 	 	 d	dZy)
ASTExplicitCastc                B    |t         v sJ || _        || _        || _        y r-  )_id_explicit_castcasttypr?  )r0  r  r  r?  s       r1  r2  zASTExplicitCast.__init__  s&    ((((		r3  c                (   | j                   g}|j                  d       |j                   || j                               |j                  d       |j                   || j                               |j                  d       dj	                  |      S )Nr   z>(r3  r   )r  rx  r  r?  r  r  s      r1  rP  zASTExplicitCast._stringify  sg    yyk

3

9TXX&'

4

9TYY'(

3wws|r3  c                    t         | j                     | j                  j                  |      z   | j                  j                  |      z   S r-  )r  r  r  r]  r?  r[  s     r1  r]  zASTExplicitCast.get_id  s?    !$)),()		  )* 	+r3  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   r   r0  r3  )r
   r  r  r  r  r  r?  r  s        r1  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::r3  N)r  r<  r  r  r?  r  r  r  r  r  r@  r3  r1  r  r    s.    +
; 0;:@;EI;r3  r  c                  8    e Zd ZddZddZddZ	 	 	 	 	 	 d	dZy)
	ASTTypeIdc                     || _         || _        y r-  )
typeOrExprisType)r0  r  r  s      r1  r2  zASTTypeId.__init__  s    $r3  c                2    d || j                         z   dz   S )Nztypeid(r3  )r  rN  s     r1  rP  zASTTypeId._stringify  s    9T__55;;r3  c                ^    | j                   rdnd}|| j                  j                  |      z   S )Ntite)r  r  r]  )r0  r\  r}  s      r1  r]  zASTTypeId.get_id  s)    $..w777r3  c                    |t        j                  dd      z  }|t        j                  dd      z  }| j                  j	                  ||||       |t        j                  dd      z  }y )Nr   r0  r3  )r
   r  r  r  r  r  s        r1  r  zASTTypeId.describe_signature  s_    8,,Xx@@800c::**7D#vF800c::r3  N)r  zASTType | ASTExpressionr  rB   r  r  r  r  r@  r3  r1  r  r    s.    <8; 0;:@;EI;r3  r  c                  8    e Zd ZddZddZddZ	 	 	 	 	 	 d	dZy)
ASTUnaryOpExprc                     || _         || _        y r-  r,  r?  )r0  r,  r?  s      r1  r2  zASTUnaryOpExpr.__init__  s    	r3  c                    | j                   d   dv r"| j                   dz    || j                        z   S | j                    || j                        z   S )Nr   cnr1  r  rN  s     r1  rP  zASTUnaryOpExpr._stringify  sF    771:77S=9TYY#77777Ytyy111r3  c                `    t         | j                     | j                  j                  |      z   S r-  )_id_operator_unary_v2r,  r?  r]  r[  s     r1  r]  zASTUnaryOpExpr.get_id  s%    $TWW-		0@0@0IIIr3  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  )r,  r
   r  r  r:  r?  r  r  s        r1  r  z!ASTUnaryOpExpr.describe_signature  s{    771:x00$''BBGx..00Gx11$''477CCG		$$WdC@r3  N)r,  r<  r?  r  r  r  r  r  r@  r3  r1  r  r    s3    2JA 0A:@AEIAr3  r  c                  8    e Zd ZddZddZddZ	 	 	 	 	 	 d	dZy)
ASTSizeofParamPackc                    || _         y r-  rM  rK  s     r1  r2  zASTSizeofParamPack.__init__  	    $r3  c                2    d || j                         z   dz   S )Nz
sizeof...(r3  rM  rN  s     r1  rP  zASTSizeofParamPack._stringify  s    i883>>r3  c                >    d| j                   j                  |      z   S )NsZ)rJ  r]  r[  s     r1  r]  zASTSizeofParamPack.get_id"  s    doo,,W555r3  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 )Nrz   r2  r0  re  r   )r.  r}  r~  r3  )r
   r  r  rJ  r  r  s        r1  r  z%ASTSizeofParamPack.describe_signature%  s    8,,Xx@@800>>800c::**7J28RT 	+ 	V800c::r3  N)rJ  rF  r  r  r  r  r@  r3  r1  r  r    s.    %?6; 0;:@;EI;r3  r  c                  8    e Zd ZddZddZddZ	 	 	 	 	 	 d	dZy)
ASTSizeofTypec                    || _         y r-  r  r0  r  s     r1  r2  zASTSizeofType.__init__0  r  r3  c                2    d || j                         z   dz   S )Nzsizeof(r3  r  rN  s     r1  rP  zASTSizeofType._stringify3  s    9TXX..44r3  c                >    d| j                   j                  |      z   S )Nstr  r]  r[  s     r1  r]  zASTSizeofType.get_id6      dhhoog...r3  c                    |t        j                  dd      z  }|t        j                  dd      z  }| j                  j	                  ||||       |t        j                  dd      z  }y )Nrz   r0  r3  r
   r  r  r  r  r  s        r1  r  z ASTSizeofType.describe_signature9  s_    8,,Xx@@800c::##GT3?800c::r3  Nr  r  r  r  r  r  r@  r3  r1  r  r  /  s.    5/; 0;:@;EI;r3  r  c                  8    e Zd ZddZddZddZ	 	 	 	 	 	 d	dZy)
ASTSizeofExprc                    || _         y r-  r>  r@  s     r1  r2  zASTSizeofExpr.__init__B  r  r3  c                ,    d || j                         z   S )Nzsizeof r>  rN  s     r1  rP  zASTSizeofExpr._stringifyE  s    9TYY///r3  c                >    d| j                   j                  |      z   S )NszrE  r[  s     r1  r]  zASTSizeofExpr.get_idH      dii&&w///r3  c                    |t        j                  dd      z  }|t        j                         z  }| j                  j	                  ||||       y )Nrz   r
   r  r  r?  r  r  s        r1  r  z ASTSizeofExpr.describe_signatureK  sD    8,,Xx@@8**,,		$$WdC@r3  NrJ  r  r  r  r  r@  r3  r1  r  r  A  s2    00A 0A:@AEIAr3  r  c                  8    e Zd ZddZddZddZ	 	 	 	 	 	 d	dZy)
ASTAlignofExprc                    || _         y r-  r  r  s     r1  r2  zASTAlignofExpr.__init__S  r  r3  c                2    d || j                         z   dz   S )Nzalignof(r3  r  rN  s     r1  rP  zASTAlignofExpr._stringifyV  s    Idhh//#55r3  c                >    d| j                   j                  |      z   S )Natr  r[  s     r1  r]  zASTAlignofExpr.get_idY  r  r3  c                    |t        j                  dd      z  }|t        j                  dd      z  }| j                  j	                  ||||       |t        j                  dd      z  }y )Nr;   r0  r3  r  r  s        r1  r  z!ASTAlignofExpr.describe_signature\  s_    8,,Y	BB800c::##GT3?800c::r3  Nr  r  r  r  r  r@  r3  r1  r  r  R  s.    6/; 0;:@;EI;r3  r  c                  8    e Zd ZddZddZddZ	 	 	 	 	 	 d	dZy)
ASTNoexceptExprc                    || _         y r-  r>  r@  s     r1  r2  zASTNoexceptExpr.__init__e  r  r3  c                2    d || j                         z   dz   S )N	noexcept(r3  r>  rN  s     r1  rP  zASTNoexceptExpr._stringifyh      Ytyy11C77r3  c                >    d| j                   j                  |      z   S )NnxrE  r[  s     r1  r]  zASTNoexceptExpr.get_idk  r  r3  c                    |t        j                  dd      z  }|t        j                  dd      z  }| j                  j	                  ||||       |t        j                  dd      z  }y )Nrj   r0  r3  r
   r  r  r?  r  r  s        r1  r  z"ASTNoexceptExpr.describe_signaturen  _    8,,ZDD800c::		$$WdC@800c::r3  NrJ  r  r  r  r  r@  r3  r1  r  r  d  s.    80; 0;:@;EI;r3  r  c                  @    e Zd Z	 	 	 	 ddZddZddZ	 	 	 	 	 	 d	dZy)

ASTNewExprc                <    || _         || _        || _        || _        y r-  )r  isNewTypeIdr  initList)r0  r  r  r  r  s        r1  r2  zASTNewExpr.__init__w  s    & r3  c                F   g }| j                   r|j                  d       |j                  d       | j                  r"|j                   || j                               nt        | j
                  !|j                   || j
                               dj                  |      S )Nr  znew r   )r  rx  r  r  r  r  r  r  s      r1  rP  zASTNewExpr._stringify~  sw    ;;JJt

6JJy*+  ==$JJy/0wws|r3  c                0   dg}|j                  d       |j                  | j                  j                  |             | j                  +|j                  | j                  j                  |             n|j                  d       dj	                  |      S )Nr   r   r  r   )rx  r  r]  r  r  r  s      r1  r]  zASTNewExpr.get_id  sk    f

3

488??7+,==$JJt}}++G45JJsOwws|r3  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  ri   )
r  r
   r  r  r  r  r  r  r  r  r  s        r1  r  zASTNewExpr.describe_signature  s    ;;x44T4@@G8,,UE::8**,,HH''sFC  ==$MM,,WdCH %r3  N)
r  rB   r  rB   r  r  r  r  rw   r:  r  r  r  r  r@  r3  r1  r  r  v  sB    !?!DH!
I 0I:@IEIIr3  r  c                  8    e Zd ZddZddZddZ	 	 	 	 	 	 d	dZy)
ASTDeleteExprc                .    || _         || _        || _        y r-  )r  arrayr?  )r0  r  r  r?  s       r1  r2  zASTDeleteExpr.__init__  s    
	r3  c                    g }| j                   r|j                  d       |j                  d       | j                  r|j                  d       |j                   || j                               dj	                  |      S )Nr  zdelete z[] r   )r  rx  r  r?  r  r  s      r1  rP  zASTDeleteExpr._stringify  s\    ;;JJt

9::JJu

9TYY'(wws|r3  c                `    | j                   rd}nd}|| j                  j                  |      z   S )Nr   r   )r  r?  r]  r0  r\  r  s      r1  r]  zASTDeleteExpr.get_id  s-    ::BBDII$$W---r3  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  rU   r   )r  r
   r  r  r  r  r?  r  r  s        r1  r  z ASTDeleteExpr.describe_signature  s    ;;x44T4@@G8,,Xx@@8**,,::x44T4@@Gx..00G		$$WdC@r3  N)r  rB   r  rB   r?  r  r  r  r  r  r@  r3  r1  r  r    s2    
.	A 0	A:@	AEI	Ar3  r  c                  8    e Zd ZddZddZddZ	 	 	 	 	 	 d	dZy)
ASTCastExprc                     || _         || _        y r-  )r  r?  )r0  r  r?  s      r1  r2  zASTCastExpr.__init__  s    	r3  c                    dg}|j                   || j                               |j                  d       |j                   || j                               dj                  |      S Nr0  r3  r   )rx  r  r?  r  r  s      r1  rP  zASTCastExpr._stringify  sL    e

9TXX&'

3

9TYY'(wws|r3  c                v    d| j                   j                  |      z   | j                  j                  |      z   S )Ncv)r  r]  r?  r[  s     r1  r]  zASTCastExpr.get_id  s.    dhhoog..1A1A'1JJJr3  c                    |t        j                  dd      z  }| j                  j                  ||||       |t        j                  dd      z  }| j                  j                  ||||       y rB  )r
   r  r  r  r?  r  s        r1  r  zASTCastExpr.describe_signature  s`    800c::##GT3?800c::		$$WdC@r3  N)r  r  r?  r  r  r  r  r  r@  r3  r1  r  r    s3    KA 0A:@AEIAr3  r  c                  8    e Z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  )rI  r  ops)r0  r  r  s      r1  r2  zASTBinOpExpr.__init__  s:    5zA~~5zSX\)))
r3  c                   g }|j                   || j                  d                t        dt        | j                              D ]i  }|j                  d       |j                  | j                  |dz
            |j                  d       |j                   || j                  |                k dj                  |      S )Nr   rV  r1  r   )rx  r  r  rI  r  r  )r0  rO  r  r   s       r1  rP  zASTBinOpExpr._stringify  s    

9TZZ]+,q#djj/* 	1AJJsOJJtxxA'JJsOJJyA/0		1
 wws|r3  c                z   |dk\  sJ g }t        t        | j                              D ]T  }|j                  t        | j                  |             |j                  | j
                  |   j                  |             V |j                  | j
                  d   j                  |             dj                  |      S )Nr  r  r   )r  rI  r  rx  r8  r  r]  r  )r0  r\  r  r   s       r1  r]  zASTBinOpExpr.get_id  s    !||s488}% 	6AJJtxx{34JJtzz!}++G45	6 	

4::b>((12wws|r3  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   rV  r   z)
r  r  r  rI  r
   r  r  r  r  r:  )r0  rz  r{  r|  r.  r   r,  s          r1  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r3  N)r  list[ASTExpression]r  	list[str]r  r  r  r  r@  r3  r1  r  r    s2    I 0I:@IEIIr3  r  c                  <    e Zd Z	 	 ddZddZddZ	 	 	 	 	 	 d	dZy)
ASTConditionalExprc                .    || _         || _        || _        y r-  )ifExprthenExprelseExpr)r0  r  r  r  s       r1  r2  zASTConditionalExpr.__init__  s      r3  c                2   g }|j                   || j                               |j                  d       |j                   || j                               |j                  d       |j                   || j                               dj	                  |      S )Nz ?  : r   )rx  r  r  r  r  r  s      r1  rP  zASTConditionalExpr._stringify  sl    

9T[[)*

5

9T]]+,

5

9T]]+,wws|r3  c                b   |dk\  sJ g }|j                  t        d          |j                  | j                  j                  |             |j                  | j                  j                  |             |j                  | j
                  j                  |             dj                  |      S )Nr  r  r   )rx  r8  r  r]  r  r  r  r  s      r1  r]  zASTConditionalExpr.get_id  s    !||

?3'(

4;;%%g./

4==''01

4==''01wws|r3  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  r:  r  r  r  s        r1  r  z%ASTConditionalExpr.describe_signature%  s    &&wc6B8**,,8--c3778**,,(($VD8**,,8--c3778**,,(($VDr3  N)r  r  r  r  r  r  r  r  r  r  r@  r3  r1  r  r    s:    !(!
E 0
E:@
EEI
Er3  r  c                  @    e Zd Z	 	 	 	 ddZddZddZ	 	 	 	 	 	 d	dZy)
ASTBracedInitListc                     || _         || _        y r-  )r  trailingCommar0  r  r  s      r1  r2  zASTBracedInitList.__init__3  s    
*r3  c                R    ddj                  fd| j                  D              z  S )Nzil%sEr   c              3  @   K   | ]  }|j                          y wr-  r  r  r   r\  s     r1  r  z+ASTBracedInitList.get_id.<locals>.<genexpr>9  r  r  r  r  r[  s    `r1  r]  zASTBracedInitList.get_id8  !     GDJJ GGGGr3  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   rO  s     r1  r  z/ASTBracedInitList._stringify.<locals>.<genexpr><  s     ;1)A,;   r   r   {})r  r  r  )r0  rO  r  r  s    `  r1  rP  zASTBracedInitList._stringify;  s=    		;

;;#11rE7=/,,r3  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  r0  rz  r{  r|  r.  r  r   s          r1  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::r3  N)r  'list[ASTExpression | ASTBracedInitList]r  rB   rw   r:  r  r  r  r=  r>  r?  r2  r]  rP  r  r@  r3  r1  r  r  2  s?    + $+)-+
H-
; 0;:@;EI;r3  r  c                  <    e Zd Z	 	 ddZddZddZ	 	 	 	 	 	 d	dZy)
ASTAssignmentExprc                .    || _         || _        || _        y r-  r*  r.  s       r1  r2  zASTAssignmentExpr.__init__R  s     "r3  c                &   g }|j                   || j                               |j                  d       |j                  | j                         |j                  d       |j                   || j                               dj	                  |      S Nr1  r   )rx  r+  r,  r-  r  r  s      r1  rP  zASTAssignmentExpr._stringifyX  se    

9T]]+,

3

477

3

9T^^,-wws|r3  c                   g }|j                  t        | j                            |j                  | j                  j	                  |             |j                  | j
                  j	                  |             dj                  |      S r  )rx  r8  r,  r+  r]  r-  r  r  s      r1  r]  zASTAssignmentExpr.get_ida  s`    

?477+,

4==''01

4>>((12wws|r3  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  )	r+  r  r
   r  r  r,  r  r:  r-  r  s        r1  r  z$ASTAssignmentExpr.describe_signaturei  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Er3  N)r+  r  r,  r<  r-  !ASTExpression | ASTBracedInitListr  r  r  r  r@  r3  r1  r,  r,  Q  s:    #=#	F 0	F:@	FEI	Fr3  r,  c                  8    e Zd ZddZddZddZ	 	 	 	 	 	 d	dZy)
ASTCommaExprc                2    t        |      dkD  sJ || _        y rH  )rI  r  r0  r  s     r1  r2  zASTCommaExpr.__init__v  s    5zA~~
r3  c                L    dj                  fd| j                  D              S )Nr!  c              3  .   K   | ]  } |        y wr-  r@  r#  s     r1  r  z*ASTCommaExpr._stringify.<locals>.<genexpr>{  s     :!1:r$  r  rN  s    `r1  rP  zASTCommaExpr._stringifyz  s    yy:tzz:::r3  c                \   t         d   }g }t        t        | j                        dz
        D ]@  }|j	                  |       |j	                  | j                  |   j                  |             B |j	                  | j                  d   j                  |             dj                  |      S )Nr   rV  r  r   )r8  r  rI  r  rx  r]  r  )r0  r\  id_r  r   s        r1  r]  zASTCommaExpr.get_id}  s    c"s4::*+ 	6AJJsOJJtzz!}++G45	6 	

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

1(($VDq#djj/* 	IAx44S#>>Gx..00GJJqM,,WdCH	Ir3  N)r  r	  r  r  r  r  r@  r3  r1  r4  r4  u  s2    ;I 0I:@IEIIr3  r4  c                  8    e Zd ZddZddZddZ	 	 	 	 	 	 d	dZy)
ASTFallbackExprc                    || _         y r-  r>  r@  s     r1  r2  zASTFallbackExpr.__init__  r  r3  c                    | j                   S r-  r>  rN  s     r1  rP  zASTFallbackExpr._stringify  r  r3  c                ,    t        | j                        S r-  )r<  r?  r[  s     r1  r]  zASTFallbackExpr.get_id  s    499~r3  c                ^    |t        j                  | j                  | j                        z  }y r-  )r   r  r?  r  s        r1  r  z"ASTFallbackExpr.describe_signature  s    5==DII66r3  N)r?  r<  r  r  r  r  r@  r3  r1  r=  r=    s.    7 07:@7EI7r3  r=  c                  T    e Zd ZddZddZddZ	 	 	 	 	 	 d	dZ	 	 	 	 	 	 	 	 	 	 d
dZy)ASTOperatorc                     yr  r@  r6  s    r1  rS  zASTOperator.is_anon  r  r3  c                     yNTr@  r6  s    r1  r  zASTOperator.is_operator  rz  r3  c                    t         r-  r  r[  s     r1  r]  zASTOperator.get_id  s    !!r3  c                    t         )zARender the prefix into signode, and the last part into identnode.rH  r0  rz  	identnoder|  r.  s        r1  _describe_identifierz ASTOperator._describe_identifier  s
     "!r3  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 )Nrn  re  r   rf  rJ  rg  rm  )r(   r
   rw  rL  r<  r4   rv  r   r  astextr  )r0  rz  r{  r|  r}  r~  r.  mainNamer  r  	containerr  addNames                r1  r  zASTOperator.describe_signature  s    	 %<))+H%%h#vFxGZ#d)+l:J))"2>4>48:E '-&;&;&=E"#
 I%%gy#vF""$CX''S11EuG++-G%%gwVDwGr3  Nr  r  
rz  r1   rK  r1   r|  r7   r.  r8  rw   r:  r  )r=  r>  r?  rS  r  r]  rL  r  r@  r3  r1  rC  rC    s[    """2"<B"GK"
 0:=MP#).2r3  rC  c                  8    e Zd ZddZddZddZ	 	 	 	 	 	 d	dZy)
ASTOperatorBuildInc                    || _         y r-  r,  )r0  r,  s     r1  r2  zASTOperatorBuildIn.__init__  s	    r3  c                    |dk(  rt         }| j                  |vrt        t        }| j                  |vrt	        d| j                  z        || j                     S )NrV  zBInternal error: Built-in operator "%s" can not be mapped to an id.)_id_operator_v1r,  r   r8  ry  )r0  r\  idss      r1  r]  zASTOperatorBuildIn.get_id  s]    a<!Cwwc!""!C77# 248GG< = =477|r3  c                |    | j                   dv s| j                   d   dv rd| j                   z   S d| j                   z   S )Nri   r   rU   r   r   abcnox	operator rn   rV  rN  s     r1  rP  zASTOperatorBuildIn._stringify  s<    77<<
h@V((''r3  c                    |t        j                  dd      z  }| j                  dv s| j                  d   dv r|t        j                         z  }|t        j                  | j                  | j                        z  }y )Nrn   r[  r   r\  )r
   r  r,  r  r:  rJ  s        r1  rL  z'ASTOperatorBuildIn._describe_identifier  sg    8,,ZDD77<<
h@Vx..00GX//AA	r3  N)r,  r<  rw   r:  r  r  rR  r=  r>  r?  r2  r]  rP  rL  r@  r3  r1  rT  rT    s2    
(B"2B<BBGKBr3  rT  c                  8    e Zd ZddZddZddZ	 	 	 	 	 	 d	dZy)
ASTOperatorLiteralc                    || _         y r-  rM  rK  s     r1  r2  zASTOperatorLiteral.__init__  r  r3  c                T    |dk(  rt         d| j                  j                  |      z   S )NrV  li)r   rJ  r]  r[  s     r1  r]  zASTOperatorLiteral.get_id  s)    a<doo,,W555r3  c                ,    d || j                         z   S )Nrs  rM  rN  s     r1  rP  zASTOperatorLiteral._stringify  s    i888r3  c                    |t        j                  dd      z  }|t        j                  dd      z  }| j                  j	                  |d|dd|       y )Nrn   ""re  r   )r
   r  r  rJ  r  rJ  s        r1  rL  z'ASTOperatorLiteral._describe_identifier  sL    8,,ZDD833D$??**9j#r2vVr3  N)rJ  rF  rw   r:  r  r  rR  r_  r@  r3  r1  ra  ra    s2    %6
9W"2W<BWGKWr3  ra  c                  @    e Zd ZddZddZd	dZd
dZ	 	 	 	 	 	 ddZy)ASTOperatorTypec                    || _         y r-  )r  )r0  r  s     r1  r2  zASTOperatorType.__init__  r  r3  c                    |dk(  rd| j                   j                  |      z  S d| j                   j                  |      z   S )NrV  zcastto-%s-operatorr  )r  r]  r[  s     r1  r]  zASTOperatorType.get_id  s=    a<'$))*:*:7*CCC$))**7333r3  c                H    dj                  d || j                        g      S )Nr   r]  )r  r  rN  s     r1  rP  zASTOperatorType._stringify  s    wwYtyy%9:;;r3  c                    t        |       S r-  r<  r6  s    r1  get_name_no_templatez$ASTOperatorType.get_name_no_template  s    4yr3  c                    |t        j                  dd      z  }|t        j                         z  }| j                  j	                  |d||       y )Nrn   re  )r
   r  r  r  r  rJ  s        r1  rL  z$ASTOperatorType._describe_identifier  sD    8,,ZDD8**,,		$$Y
CHr3  N)r  r  rw   r:  r  r  r;  rR  )r=  r>  r?  r2  r]  rP  ro  rL  r@  r3  r1  ri  ri    s7    4<I"2I<BIGKIr3  ri  c                  8    e Zd ZddZddZddZ	 	 	 	 	 	 d	dZy)
ASTTemplateArgConstantc                    || _         y r-  r  r  s     r1  r2  zASTTemplateArgConstant.__init__  r  r3  c                &     || j                         S r-  r  rN  s     r1  rP  z!ASTTemplateArgConstant._stringify  s    $$r3  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 )NrV  r1  r   r  Xr  )r<  r  r  r]  r[  s     r1  r]  zASTTemplateArgConstant.get_id!  sY    a<t9$$S#..a<T?S((TZZ&&w//#55r3  c                V    t        |       | j                  j                  ||||       y r-  )r(   r  r  r  s        r1  r  z)ASTTemplateArgConstant.describe_signature(  s"    %

%%gtS&Ar3  N)r  r  rw   r:  r  r  r  r  r@  r3  r1  rr  rr    s2    %6B 0B:@BEIBr3  rr  c                  @    e Zd Z	 	 	 	 ddZddZddZ	 	 	 	 	 	 d	dZy)
r  c                (    |J || _         || _        y r-  )argspackExpansion)r0  rz  r{  s      r1  r2  zASTTemplateArgs.__init__/  s    	*r3  c                   dk(  rhg }|j                  d       |j                  dj                  fd| j                  D                     |j                  d       dj                  |      S g }|j                  d       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 )NrV  r  rl  c              3  @   K   | ]  }|j                          y wr-  r  r  r   r\  s     r1  r  z)ASTTemplateArgs.get_id.<locals>.<genexpr>9  s     Ea 1Er  r   Ir   r  Jr  )rx  r  rz  rI  r]  r{  )r0  r\  r  r   s    `  r1  r]  zASTTemplateArgs.get_id5  s    a<CJJsOJJsxxE499EEFJJsO773<

3tyy>AYYs^ .

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

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

3

3wws|r3  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   rO  s     r1  r  z-ASTTemplateArgs._stringify.<locals>.<genexpr>K  s     8	!8r$  r2  r   r   )r  rz  r{  r  s    ` r1  rP  zASTTemplateArgs._stringifyJ  s;    ii8dii885LCSy3r3  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   Fre  r.  r2  r   )r(   r
   r  rz  r  r  r{  )r0  rz  r{  r|  r.  r  r   s          r1  r  z"ASTTemplateArgs.describe_signatureP  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::r3  N)rz  z&list[ASTType | ASTTemplateArgConstant]r{  rB   rw   r:  r  r  r  r*  r@  r3  r1  r  r  .  s>    + $+)-+*; 0;:@;EI;r3  r  c                  (    e Zd ZddZ	 	 	 	 	 	 ddZy)ASTTrailingTypeSpecc                *    t        t        |             r-  r  r[  s     r1  r]  zASTTrailingTypeSpec.get_idd  r  r3  c                *    t        t        |             r-  r  r  s        r1  r  z&ASTTrailingTypeSpec.describe_signatureg  r  r3  Nr  r  r  r@  r3  r1  r  r  c  r  r3  r  c                  8    e Z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 rH  )rI  r  
canonNames)r0  r  r  s      r1  r2  z'ASTTrailingTypeSpecFundamental.__init__m  s@    5zQ5zS_,Auj.AA,
$r3  c                8    dj                  | j                        S )Nr1  )r  r  rN  s     r1  rP  z)ASTTrailingTypeSpecFundamental._stringifyt  s    xx

##r3  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 )NrV  r   r1  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  _id_fundamental_v1rx  r  _id_fundamental_v2ry  )r0  r\  r  r   r  s        r1  r]  z%ASTTrailingTypeSpecFundamental.get_idw  s    a<C__ "**JJ1!45JJqM	"
 88C= hht'((24789 9 "#&&r3  c                    d}| j                   D ]7  }|s|t        j                         z  }nd}|t        j                  ||      z  }9 y )NTF)r  r
   r  desc_sig_keyword_type)r0  rz  r{  r|  r.  r  r   s          r1  r  z1ASTTrailingTypeSpecFundamental.describe_signature  sL     	<A82244x55a;;G	<r3  N)r  r
  r  r
  rw   r:  r  r  r  r  r@  r3  r1  r  r  l  s.    %$'$< 0<:@<EI<r3  r  c                  0    e Zd ZddZddZ	 	 	 	 	 	 ddZy)ASTTrailingTypeSpecDecltypeAutoc                     y)Nr   r@  rN  s     r1  rP  z*ASTTrailingTypeSpecDecltypeAuto._stringify  s    r3  c                    |dk(  rt         y)NrV  r   )r   r[  s     r1  r]  z&ASTTrailingTypeSpecDecltypeAuto.get_id  s    a<r3  c                    |t        j                  dd      z  }|t        j                  dd      z  }|t        j                  dd      z  }|t        j                  dd      z  }y )NrS   r0  r?   r3  )r
   r  r  r  s        r1  r  z2ASTTrailingTypeSpecDecltypeAuto.describe_signature  s^    8,,ZDD800c::8,,VV<<800c::r3  Nr  r  r  r  r@  r3  r1  r  r    s)     
; 0;:@;EI;r3  r  c                  8    e Zd ZddZddZddZ	 	 	 	 	 	 d	dZy)
ASTTrailingTypeSpecDecltypec                    || _         y r-  r>  r@  s     r1  r2  z$ASTTrailingTypeSpecDecltype.__init__  r  r3  c                2    d || j                         z   dz   S )Nz	decltype(r3  r>  rN  s     r1  rP  z&ASTTrailingTypeSpecDecltype._stringify  r  r3  c                Z    |dk(  rt         d| j                  j                  |      z   dz   S )NrV  DTr  )r   r?  r]  r[  s     r1  r]  z"ASTTrailingTypeSpecDecltype.get_id  s.    a<dii&&w//#55r3  c                    |t        j                  dd      z  }|t        j                  dd      z  }| j                  j	                  ||||       |t        j                  dd      z  }y )NrS   r0  r3  r  r  s        r1  r  z.ASTTrailingTypeSpecDecltype.describe_signature  r  r3  NrJ  r  r  r  r  r@  r3  r1  r  r    s.    86
; 0;:@;EI;r3  r  c                  R    e Z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)r0  r}  r  r  s       r1  r2  z ASTTrailingTypeSpecName.__init__  s    $.r3  c                    | j                   S r-  r  r6  s    r1  r  zASTTrailingTypeSpecName.name      r3  c                8    | j                   j                  |      S r-  )r  r]  r[  s     r1  r]  zASTTrailingTypeSpecName.get_id  s    %%g..r3  c                J   g }| j                   r,|j                  | j                          |j                  d       |j                   || j                               | j                  ,|j                  d       |j                  | j                         dj	                  |      S r/  )r}  rx  r  r  r  r  s      r1  rP  z"ASTTrailingTypeSpecName._stringify  su    ;;JJt{{#JJsO

9T__-.+JJsOJJt++,wws|r3  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  r?   r   rS   r0  r3  )	r}  r
   r  r  r  r  r  r  r  r  s        r1  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:: ,r3  N)r}  r<  r  r  r  
str | Nonerw   r:  r  r  r  r  	r=  r>  r?  r2  r  r  r]  rP  r  r@  r3  r1  r  r    sR    /",/15/  /	; 0;:@;EI;r3  r  c                  T    e Zd Z	 d	 	 	 ddZ	 d	 	 	 	 	 	 	 d	dZd
dZ	 	 	 	 	 	 ddZy)ASTFunctionParameterc                     || _         || _        y r-  )argellipsis)r0  r  r  s      r1  r2  zASTFunctionParameter.__init__  s     r3  Nc                    |r'|j                   j                  j                  |d      S | j                  ry| j                  j                  |      S )NFprefixedr  )parentr/  r]  r  r  r0  r\  
objectTyper.  s       r1  r]  zASTFunctionParameter.get_id  sD     ==,,33Ge3LL==88??7++r3  c                @    | j                   ry || j                        S Nr2  )r  r  rN  s     r1  rP  zASTFunctionParameter._stringify  s    ==TXX&&r3  c                    t        |       | j                  r|t        j                  dd      z  }y | j                  j                  ||||       y )Nr2  r  )r(   r  r
   r  r  r  r  s        r1  r  z'ASTFunctionParameter.describe_signature  sC    %==x44UEBBGHH''s6'Jr3  F)r  9ASTTypeWithInit | ASTTemplateParamConstrainedTypeWithInitr  rB   rw   r:  NNr\  re   r  r  r.  Symbol | Nonerw   r<  r  r  r*  r@  r3  r1  r  r    sl    "'!!,0! TX,,(2,CP,	,'K 0K:@KEIKr3  r  c                  0    e Zd ZddZddZ	 	 	 	 	 	 ddZy)ASTNoexceptSpecc                    || _         y r-  r>  r@  s     r1  r2  zASTNoexceptSpec.__init__  r  r3  c                L    | j                   rd || j                         z   dz   S y)Nr  r3  rj   r>  rN  s     r1  rP  zASTNoexceptSpec._stringify  s%    99499!55;;r3  c                    |t        j                  dd      z  }| j                  rQ|t        j                  dd      z  }| j                  j	                  |d||       |t        j                  dd      z  }y y )Nrj   r0  re  r3  r
   r  r?  r  r  r  s        r1  r  z"ASTNoexceptSpec.describe_signature  sk    8,,ZDD99x44S#>>GII((*c6Jx44S#>>G r3  N)r?  ASTExpression | Noner  r  r=  r>  r?  r2  rP  r  r@  r3  r1  r  r    s)    
? 0?:@?EI?r3  r  c                  r    e Z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-  )
rz  r   rM   refQualexceptionSpectrailingReturnoverridefinalattrsinitializer)r0  rz  r   rM   r  r  r  r  r  r  r  s              r1  r2  z ASTParametersQualifiers.__init__  sM    
 	 
*, 

&r3  c                    | j                   S r-  rz  r6  s    r1  function_paramsz'ASTParametersQualifiers.function_params*  s    yyr3  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VrV  r   Kr   Or   Rr   )r   rx  rM   r  r  r  s      r1  get_modifiers_idz(ASTParametersQualifiers.get_modifiers_id.  sy    ==JJsO::!|

3

3<<4JJsO\\S JJsOwws|r3  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 )	NrV  r   r   r   rl  c              3  @   K   | ]  }|j                          y wr-  r  r~  s     r1  r  z7ASTParametersQualifiers.get_param_id.<locals>.<genexpr>B  s     &LQqxx'8&Lr  r   c              3  @   K   | ]  }|j                          y wr-  r  r~  s     r1  r  z7ASTParametersQualifiers.get_param_id.<locals>.<genexpr>F  s     @188G,@r  )rI  rz  r  r[  s    `r1  get_param_idz$ASTParametersQualifiers.get_param_id=  sg    a<499~"chh&L$))&LLLLtyy>Q77@dii@@@r3  c                D   g }|j                  d       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                  | j
                         | j                  r2|j                  d       |j                   || j                               | j                  r2|j                  d	       |j                   || j                               | j                  r|j                  d
       | j                  r|j                  d       t        | j                        dk7  r2|j                  d       |j                   || j                               | j                  r,|j                  d       |j                  | j                         dj                  |      S )Nr0  Tr!  Fr3  z	 volatilez constr1  z ->  finalz	 overrider    = r   )rx  rz  r<  r   rM   r  r  r  r  r  rI  r  r  r  )r0  rO  r  r  r   s        r1  rP  z"ASTParametersQualifiers._stringifyH  s   

3 	A

4 EJJs1v		
 	

3==JJ{#::JJx <<JJsOJJt||$JJsOJJy!3!345JJvJJy!4!456::JJx ==JJ{#tzz?aJJsOJJy,-JJuJJt''(wws|r3  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_listrn  r   T)noemphrp  r  r0  r   re  r3  c                d    | t        j                         z  } | t        j                  ||      z  } y r-  r
   r  r  rz  rd  s     r1  	_add_annoz=ASTParametersQualifiers.describe_signature.<locals>._add_anno  s,    x..00Gx00t<<Gr3  r   rM   r   r  r  r   r   0rU   rT   r  rz  r1   rd  r<  rw   r:  )r(   r  
isinstancer
   r3   getdesc_parameterlistrz  desc_parameterr  r  r  r   rM   r  r  r  r:  r  r  rI  r  r  r  r  )r0  rz  r{  r|  r.  r  	test_node	paramlistr  rp  r  r  s               r1  r  z*ASTParametersQualifiers.describe_signaturek  sS   %$)!$	i)@)@A%,,	(16QSX(Y% < 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 r3  N)rz  list[ASTFunctionParameter]r   rB   rM   rB   r  r  r  r  r  r  r  rB   r  rB   r  r   r  r  rw   r:  rw   r  r  r  r  )
r=  r>  r?  r2  r  r  r  r  rP  r  r@  r3  r1  r  r    s    '$'5D'!('  ' )-' 6F' )	' .2	'   	A!FBY 0BY:@BYEIBYr3  r  c                  0    e Zd ZddZddZ	 	 	 	 	 	 ddZy)ASTExplicitSpecc                    || _         y r-  r>  r@  s     r1  r2  zASTExplicitSpec.__init__  r  r3  c                    dg}| j                   C|j                  d       |j                   || j                                |j                  d       dj                  |      S )Nr[   r0  r3  r   )r?  rx  r  r  s      r1  rP  zASTExplicitSpec._stringify  sL    l99 JJsOJJy+,JJsOwws|r3  c                    |t        j                  dd      z  }| j                  Q|t        j                  dd      z  }| j                  j	                  |d||       |t        j                  dd      z  }y y )Nr[   r0  re  r3  r  )r0  rz  r|  r.  s       r1  r  z"ASTExplicitSpec.describe_signature  sn    8,,ZDD99 x44S#>>GII((*c6Jx44S#>>G !r3  N)r?  r  rw   r:  r  rz  r1   r|  r7   r.  r8  rw   r:  r  r@  r3  r1  r  r    s)    ? 0?:@?EI?r3  r  c                  \    e Zd Z	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZddZddZ	 	 	 	 	 	 d	dZy)
ASTDeclSpecsSimplec                    || _         || _        || _        || _        || _        || _        || _        || _        |	| _        |
| _	        || _
        || _        y r-  )storagethreadLocalrd   r   explicitSpecrN   rO   rP   r   rM   ra   r  )r0  r  r  rd   r   r  rN   rO   rP   r   rM   ra   r  s                r1  r2  zASTDeclSpecsSimple.__init__  sZ    
 &(""" 

r3  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  rd   r   r  rN   rO   rP   r   rM   ra   r  )r0  others     r1  	mergeWithzASTDeclSpecsSimple.mergeWith  s    K!$,,"?%--"&"2"2"Ge6G6G"&++"="&,,"?%--"&"3"3"Iu7I7I"&.."CEOO"&.."CEOO"&.."CEOO"&--"A5>>"&**";"&++"="&**u{{":< 	<r3  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   r   rd   ra   r   rN   rO   rP   r   rM   r1  )rI  r  rx  r  r  rd   ra   r   r  rN   rO   rP   r   rM   r  r  s      r1  rP  zASTDeclSpecsSimple._stringify  s   tzz?aJJy,-<<JJt||$JJ~&;;JJx ;;JJx <<JJy!JJy!2!234>>JJ{#>>JJ{#>>JJ{#==JJz"::JJwxx}r3  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rF  r  )rz  rd  addSpaces     r1  _addz3ASTDeclSpecsSimple.describe_signature.<locals>._add		  s3    82244x00t<<Gr3  r   rd   ra   r   TrN   rO   rP   r   rM   )rz  r1   rd  r<  rw   rB   )r  r  rI  r  r  rd   ra   r   r  r
   r  rN   rO   rP   r   rM   )r0  rz  r|  r.  r  r  s        @r1  r  z%ASTDeclSpecsSimple.describe_signature	  s3   

%%g.tzz?a'	 <<GT\\2HG^4H;;GX.H;;GX.H<<GY/H8224400#vFH>>G[1H>>G[1H>>G[1H==GZ0H::GW-H r3  N)r  r<  r  rB   rd   rB   r   rB   r  zASTExplicitSpec | NonerN   rB   rO   rB   rP   rB   r   rB   rM   rB   ra   rB   r  r   rw   r:  )r  r  rw   r  r  r  )r=  r>  r?  r2  r  rP  r  r@  r3  r1  r  r    s    5 -1>B   )- 7; )	 .2	$< 8#. 0#.:@#.EI#.r3  r  c                  H    e Z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)r0  r  r  r  trailings        r1  r2  zASTDeclSpecs.__init__+	  s;    
 
"$00A (r3  c                P   |dk(  rg }|j                  | j                  j                  |             | 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 )NrV  r  r   r   r  )rx  r  r]  r  r   rM   r  r  s      r1  r]  zASTDeclSpecs.get_id6	  s    a<CJJt,,33G<=}}%%

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

3773<==!!JJsO==JJsO  ,JJt,,33G<=wws|r3  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   r1  r   )r  rI  rx  r  r<  r  r  )r0  rO  r  r   rs        r1  rP  zASTDeclSpecs._stringifyH	  s    dnn%q6A:JJqM  3x!|

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

1wws|r3  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(   rI  r  r  r  r
   r  r<  r  )r0  rz  r{  r|  r.  numChildrenr  s          r1  r  zASTDeclSpecs.describe_signatureX	  s    %'l))'3?w<;.  82244g,K!!44WdC<B 5 D7|{2H3t'(1,x6688G227CH - !r3  N)
r  r<  r  r  r  r  r  r  rw   r:  r  r  r  r*  r@  r3  r1  r	  r	  *	  sR    	).	)<N	).	)37	)$ I 0I:@IEIIr3  r	  c                  8    e Zd ZddZddZddZ	 	 	 	 	 	 d	dZy)
ASTArrayc                    || _         y r-  size)r0  r  s     r1  r2  zASTArray.__init__q	  r  r3  c                L    | j                   rd || j                         z   dz   S y)Nrc  rd  r   r  rN  s     r1  rP  zASTArray._stringifyt	  s%    99499--33r3  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)NrV  Ar  r   A_)r  r<  r]  r[  s     r1  r]  zASTArray.get_idz	  s^    a<a<yyS^+c1199))'22S88r3  c                    t        |       |t        j                  dd      z  }| j                  r| j                  j	                  |d||       |t        j                  dd      z  }y )Nrc  re  rd  )r(   r
   r  r  r  r  s        r1  r  zASTArray.describe_signature	  sW    %800c::99II((*c6J800c::r3  N)r  r  r  r  r  r  r@  r3  r1  r  r  p	  s.    ; 0;:@;EI;r3  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  r6  s    r1  r  zASTDeclarator.name	  r  r3  c                *    t        t        |             r-  r  rO  s     r1  r  zASTDeclarator.name	  r  r3  c                *    t        t        |             r-  r  r6  s    r1  isPackzASTDeclarator.isPack	  r  r3  c                *    t        t        |             r-  r  r6  s    r1  r  zASTDeclarator.function_params	  r  r3  c                *    t        t        |             r-  r  r6  s    r1  r  zASTDeclarator.trailingReturn	  r  r3  c                *    t        t        |             r-  r  r6  s    r1  require_space_after_declSpecsz+ASTDeclarator.require_space_after_declSpecs	  r  r3  c                *    t        t        |             r-  r  r[  s     r1  r  zASTDeclarator.get_modifiers_id	  r  r3  c                *    t        t        |             r-  r  r[  s     r1  r  zASTDeclarator.get_param_id	  r  r3  c                *    t        t        |             r-  r  r[  s     r1  get_ptr_suffix_idzASTDeclarator.get_ptr_suffix_id	  r  r3  c                *    t        t        |             r-  r  r0  r\  returnTypeIds      r1  get_type_idzASTDeclarator.get_type_id	  r  r3  c                *    t        t        |             r-  r  r6  s    r1  is_function_typezASTDeclarator.is_function_type	  r  r3  c                *    t        t        |             r-  r  r  s        r1  r  z ASTDeclarator.describe_signature	  r  r3  Nr  r  r  rw   r:  r  r  rw   r  r  r\  re   r1  r<  rw   r<  r  )r=  r>  r?  r  r  setterr&  r  r  r*  r  r  r.  r2  r4  r  r@  r3  r1  r"  r"  	  s    . . 
[[. . . . . . . ........ 0.:@.EI.r3  r"  c                      e Z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)r0  r>  r?  r@  s       r1  r2  z#ASTDeclaratorNameParamQual.__init__	  s      "r3  c                    | j                   S r-  r>  r6  s    r1  r  zASTDeclaratorNameParamQual.name	      {{r3  c                    || _         y r-  rB  rO  s     r1  r  zASTDeclaratorNameParamQual.name	  	    r3  c                     yr  r@  r6  s    r1  r&  z!ASTDeclaratorNameParamQual.isPack	      r3  c                .    | j                   j                  S r-  )r@  r  r6  s    r1  r  z*ASTDeclaratorNameParamQual.function_params	  s    ~~---r3  c                .    | j                   j                  S r-  )r@  r  r6  s    r1  r  z)ASTDeclaratorNameParamQual.trailingReturn	  s    ~~,,,r3  c                l    | j                   r| j                   j                  |      S t        d| z        )Nz,This should only be called on a function: %s)r@  r  ry  r[  s     r1  r  z+ASTDeclaratorNameParamQual.get_modifiers_id	  s/    >>>>227;;FMNNr3  c                R    | j                   r| j                   j                  |      S yr  )r@  r  r[  s     r1  r  z'ASTDeclaratorNameParamQual.get_param_id	  s!    >>>>..w77r3  c                L    dj                  fd| j                  D              S )Nr   c              3  @   K   | ]  }|j                          y wr-  r  r~  s     r1  r  z?ASTDeclaratorNameParamQual.get_ptr_suffix_id.<locals>.<genexpr>	  s     @Qqxx(@r  )r  r?  r[  s    `r1  r.  z,ASTDeclaratorNameParamQual.get_ptr_suffix_id	  s    ww@$--@@@r3  c                   |dk\  sJ g }|j                  | j                  |             | j                  rt|j                  | j                  |             |j                  d       |j                  |       |j                  | j	                  |             |j                  d       n|j                  |       dj                  |      S )Nr  Fr  r   )rx  r.  r@  r  r  r  r0  r\  r1  r  s       r1  r2  z&ASTDeclaratorNameParamQual.get_type_id	  s    !||

4))'23>>JJt,,W56JJsOJJ|$JJt((12JJsOJJ|$wws|r3  c                    | j                   d uS r-  rB  r6  s    r1  r*  z8ASTDeclaratorNameParamQual.require_space_after_declSpecs	      {{$&&r3  c                    | j                   d uS r-  )r@  r6  s    r1  r4  z+ASTDeclaratorNameParamQual.is_function_type	  s    ~~T))r3  c                ,   g }| j                   r!|j                   || j                                | j                  D ]  }|j                   ||              | j                  r!|j                   || j                               dj	                  |      S r  )r>  rx  r?  r@  r  )r0  rO  r  r,  s       r1  rP  z%ASTDeclaratorNameParamQual._stringify	  sp    ;;JJy-.-- 	&BJJy}%	&>>JJy01wws|r3  c                   t        |       | j                  r| j                  j                  ||||       | j                  D ]  }|j                  ||||        | j                  r| j                  j                  ||||       y y r-  )r(   r>  r  r?  r@  )r0  rz  r{  r|  r.  r,  s         r1  r  z-ASTDeclaratorNameParamQual.describe_signature	
  st    %;;KK**7D#vF-- 	>B!!'4f=	>>>NN--gtS&I r3  N)r>  r  r?  zlist[ASTArray]r@  r  rw   r:  r  r6  r  r  r7  r  r8  r  r  )r=  r>  r?  r2  r  r  r9  r&  r  r  r  r  r.  r2  r*  r4  rP  r  r@  r3  r1  r;  r;  	  s    #)#3#8<#   
[[    . . - -OA"'*J 0J:@JEIJr3  r;  c                      e Z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  )r0  r>  r  s      r1  r2  z"ASTDeclaratorNameBitField.__init__
  s    	r3  c                    | j                   S r-  rB  r6  s    r1  r  zASTDeclaratorNameBitField.name
  rC  r3  c                    || _         y r-  rB  rO  s     r1  r  zASTDeclaratorNameBitField.name
  rE  r3  c                     yr  r@  r[  s     r1  r  z&ASTDeclaratorNameBitField.get_param_id!
      r3  c                     yr  r@  r[  s     r1  r.  z+ASTDeclaratorNameBitField.get_ptr_suffix_id$
  r]  r3  c                    | j                   d uS r-  rB  r6  s    r1  r*  z7ASTDeclaratorNameBitField.require_space_after_declSpecs)
  rR  r3  c                     yr  r@  r6  s    r1  r4  z*ASTDeclaratorNameBitField.is_function_type,
  r  r3  c                    g }| j                   r!|j                   || j                                |j                  d       |j                   || j                               dj                  |      S )Nr  r   )r>  rx  r  r  r  s      r1  rP  z$ASTDeclaratorNameBitField._stringify/
  sR    ;;JJy-.

5

9TYY'(wws|r3  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        r1  r  z,ASTDeclaratorNameBitField.describe_signature7
  s~    %;;KK**7D#vF8**,,800c::8**,,		$$WdC@r3  N)r>  r  r  r  r  r6  r  r  r  r  )r=  r>  r?  r2  r  r  r9  r  r.  r*  r4  rP  r  r@  r3  r1  rW  rW  
  sm       
[[ 
'A 0A:@AEIAr3  rW  c                      e Z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-  nextr   rM   r  )r0  rg  r   rM   r  s        r1  r2  zASTDeclaratorPtr.__init__C
  s%    t	 

r3  c                .    | j                   j                  S r-  rg  r  r6  s    r1  r  zASTDeclaratorPtr.nameK
      yy~~r3  c                &    || j                   _        y r-  ri  rO  s     r1  r  zASTDeclaratorPtr.nameO
      		r3  c                .    | j                   j                  S r-  rg  r&  r6  s    r1  r&  zASTDeclaratorPtr.isPackS
      yyr3  c                .    | j                   j                  S r-  rg  r  r6  s    r1  r  z ASTDeclaratorPtr.function_paramsW
      yy(((r3  c                .    | j                   j                  S r-  rg  r  r6  s    r1  r  zASTDeclaratorPtr.trailingReturn[
      yy'''r3  c                6    | j                   j                         S r-  rg  r*  r6  s    r1  r*  z.ASTDeclaratorPtr.require_space_after_declSpecs_
      yy6688r3  c                   dg}|j                   || j                               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 )Nr   r   r1  r   rM   r   )rx  r  rI  r   rM   rg  r*  r  r  s      r1  rP  zASTDeclaratorPtr._stringifyb
  s    e

9TZZ()tzz?aT]]djjJJsO==JJz"::}}

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

3

9TYY'(wws|r3  c                8    | j                   j                  |      S r-  rg  r  r[  s     r1  r  z!ASTDeclaratorPtr.get_modifiers_ids
      yy))'22r3  c                8    | j                   j                  |      S r-  rg  r  r[  s     r1  r  zASTDeclaratorPtr.get_param_idv
      yy%%g..r3  c                   |dk(  rxdg}| j                   r|j                  d       | j                  r|j                  d       |j                  | j                  j	                  |             dj                  |      S | j                  j	                  |      g}|j                  d       | j                   r|j                  d       | j                  r|j                  d       dj                  |      S )NrV  Pr  r   r   )r   rx  rM   rg  r.  r  r  s      r1  r.  z"ASTDeclaratorPtr.get_ptr_suffix_idy
  s    a<%C}}

3zz

3JJtyy227;<773<yy**734

3==JJsO::JJsOwws|r3  c                    dg}| j                   r|j                  d       | j                  r|j                  d       |j                  |       | j                  j	                  |dj                  |            S )Nr  r  r   r   r1  )r   rx  rM   rg  r2  r  rP  s       r1  r2  zASTDeclaratorPtr.get_type_id
  s[    e==JJsO::JJsO

< yy$$W2773<$HHr3  c                6    | j                   j                         S r-  rg  r4  r6  s    r1  r4  z!ASTDeclaratorPtr.is_function_type
      yy))++r3  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 )Nr   r   c                6    | t        j                  ||      z  } y r-  r  r  s     r1  r  z6ASTDeclaratorPtr.describe_signature.<locals>._add_anno
      x00t<<Gr3  r   rM   r  )r(   r
   r  r  r  rI  r   rM   r  rg  r*  r0  rz  r{  r|  r.  r  s         r1  r  z#ASTDeclaratorPtr.describe_signature
  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@r3  N)
rg  r"  r   rB   rM   rB   r  r   rw   r:  r  r6  r  r  r7  r  r  r8  r  r=  r>  r?  r2  r  r  r9  r&  r  r  r*  rP  r  r  r.  r2  r4  r  r@  r3  r1  rd  rd  B
  s    (-1   
[[      ) ) ( (9"3/$I,A 0A:@AEIAr3  rd  c                      e Z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-  rg  r  )r0  rg  r  s      r1  r2  zASTDeclaratorRef.__init__
  s    t	
r3  c                .    | j                   j                  S r-  ri  r6  s    r1  r  zASTDeclaratorRef.name
  rj  r3  c                &    || j                   _        y r-  ri  rO  s     r1  r  zASTDeclaratorRef.name
  rl  r3  c                .    | j                   j                  S r-  rn  r6  s    r1  r&  zASTDeclaratorRef.isPack
  ro  r3  c                .    | j                   j                  S r-  rq  r6  s    r1  r  z ASTDeclaratorRef.function_params
  rr  r3  c                .    | j                   j                  S r-  rt  r6  s    r1  r  zASTDeclaratorRef.trailingReturn
  ru  r3  c                6    | j                   j                         S r-  rw  r6  s    r1  r*  z.ASTDeclaratorRef.require_space_after_declSpecs
  rx  r3  c                4   dg}|j                   || j                               t        | j                        dk7  r+| j                  j	                         r|j                  d       |j                   || j                               dj                  |      S )Nr   r   r1  r   )rx  r  rI  rg  r*  r  r  s      r1  rP  zASTDeclaratorRef._stringify
  sk    e

9TZZ()tzz?aDII$K$K$MJJsO

9TYY'(wws|r3  c                8    | j                   j                  |      S r-  r{  r[  s     r1  r  z!ASTDeclaratorRef.get_modifiers_id
  r|  r3  c                8    | j                   j                  |      S r-  r~  r[  s     r1  r  zASTDeclaratorRef.get_param_id
  r  r3  c                    |dk(  rd| j                   j                  |      z   S | j                   j                  |      dz   S )NrV  r  rg  r.  r[  s     r1  r.  z"ASTDeclaratorRef.get_ptr_suffix_id
  s=    a<44W===99..w7#==r3  c                P    |dk\  sJ | j                   j                  |d|z         S )Nr  r  r  rg  r2  r0  s      r1  r2  zASTDeclaratorRef.get_type_id
  s-    !||yy$$W3;M$NNr3  c                6    | j                   j                         S r-  r  r6  s    r1  r4  z!ASTDeclaratorRef.is_function_type
  r  r3  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  r  r  rI  rg  r*  r  r  s        r1  r  z#ASTDeclaratorRef.describe_signature
  s}    %800c::

%%g.tzz?Q499#J#J#Lx..00G		$$WdC@r3  N)rg  r"  r  r   rw   r:  r  r6  r  r  r7  r  r  r8  r  r  r@  r3  r1  r  r  
  s    
   
[[      ) ) ( (93/>O
,A 0A:@AEIAr3  r  c                      e Z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-  rg  )r0  rg  s     r1  r2  zASTDeclaratorParamPack.__init__
      t	r3  c                .    | j                   j                  S r-  ri  r6  s    r1  r  zASTDeclaratorParamPack.name
  rj  r3  c                &    || j                   _        y r-  ri  rO  s     r1  r  zASTDeclaratorParamPack.name
  rl  r3  c                .    | j                   j                  S r-  rq  r6  s    r1  r  z&ASTDeclaratorParamPack.function_params
  rr  r3  c                .    | j                   j                  S r-  rt  r6  s    r1  r  z%ASTDeclaratorParamPack.trailingReturn  ru  r3  c                     yrF  r@  r6  s    r1  r&  zASTDeclaratorParamPack.isPack  s    r3  c                     yr  r@  r6  s    r1  r*  z4ASTDeclaratorParamPack.require_space_after_declSpecs
  r  r3  c                f     || j                         }| j                   j                  rd|z   }d|z   S )Nr1  r2  ri  r  s      r1  rP  z!ASTDeclaratorParamPack._stringify  s.    		"99>>)Cs{r3  c                8    | j                   j                  |      S r-  r{  r[  s     r1  r  z'ASTDeclaratorParamPack.get_modifiers_id  r|  r3  c                8    | j                   j                  |      S r-  r~  r[  s     r1  r  z#ASTDeclaratorParamPack.get_param_id  r  r3  c                    |dk(  rd| j                   j                  |      z   S | j                   j                  |      dz   S )NrV  Dpr  r[  s     r1  r.  z(ASTDeclaratorParamPack.get_ptr_suffix_id  s=    a<$))55g>>>99..w7$>>r3  c                P    |dk\  sJ | j                   j                  |d|z         S )Nr  r  r  r  r0  s      r1  r2  z"ASTDeclaratorParamPack.get_type_id  s-    !||yy$$W4,;N$OOr3  c                6    | j                   j                         S r-  r  r6  s    r1  r4  z'ASTDeclaratorParamPack.is_function_type$  r  r3  c                    t        |       |t        j                  dd      z  }| j                  j                  r|t        j
                         z  }| j                  j                  ||||       y r  )r(   r
   r  rg  r  r  r  r  s        r1  r  z)ASTDeclaratorParamPack.describe_signature'  sW    %800>>99>>x..00G		$$WdC@r3  N)rg  r"  rw   r:  r  r6  r  r7  r  r  r  r8  r  )r=  r>  r?  r2  r  r  r9  r  r  r&  r*  rP  r  r  r.  r2  r4  r  r@  r3  r1  r  r  
  s       
[[  ) ) ( (  3/?P
,A 0A:@AEIAr3  r  c                      e Zd Z	 	 	 	 	 	 	 	 ddZedd       Zej                  dd       Ze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-  )	classNamerM   r   rg  )r0  r  rM   r   rg  s        r1  r2  zASTDeclaratorMemPtr.__init__1  s-    yt"
 	r3  c                .    | j                   j                  S r-  ri  r6  s    r1  r  zASTDeclaratorMemPtr.name:  rj  r3  c                &    || j                   _        y r-  ri  rO  s     r1  r  zASTDeclaratorMemPtr.name>  rl  r3  c                .    | j                   j                  S r-  rn  r6  s    r1  r&  zASTDeclaratorMemPtr.isPackB  ro  r3  c                .    | j                   j                  S r-  rq  r6  s    r1  r  z#ASTDeclaratorMemPtr.function_paramsF  rr  r3  c                .    | j                   j                  S r-  rt  r6  s    r1  r  z"ASTDeclaratorMemPtr.trailingReturnJ  ru  r3  c                     yrF  r@  r6  s    r1  r*  z1ASTDeclaratorMemPtr.require_space_after_declSpecsN  rz  r3  c                   g }|j                   || j                               |j                  d       | j                  r|j                  d       | j                  r.| j                  r|j                  d       |j                  d       | j                  j                         r|j                  d       |j                   || j                               dj                  |      S )Nz::*r   r1  rM   r   )rx  r  r   rM   rg  r*  r  r  s      r1  rP  zASTDeclaratorMemPtr._stringifyQ  s    

9T^^,-

5==JJz"::}}

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

9TYY'(wws|r3  c                N    |dk(  rt         | j                  j                  |      S NrV  )r   rg  r  r[  s     r1  r  z$ASTDeclaratorMemPtr.get_modifiers_id`  s$    a<yy))'22r3  c                N    |dk(  rt         | j                  j                  |      S r  )r   rg  r  r[  s     r1  r  z ASTDeclaratorMemPtr.get_param_ide  s$    a<yy%%g..r3  c                $    |dk(  rt         t        r  )r   r  rg  r.  r[  s     r1  r.  z%ASTDeclaratorMemPtr.get_ptr_suffix_idj  s    a<!!r3  c                    |dk\  sJ d}| j                   r|dz  }| j                  r|dz  }|dz  }|| j                  j                  |      z  }||z  }| j                  j                  ||      S )Nr  r   r  r  M)r   rM   r  r]  rg  r2  )r0  r\  r1  nextReturnTypeIds       r1  r2  zASTDeclaratorMemPtr.get_type_idp  s    !||==#::#CDNN11'::L(yy$$W.>??r3  c                6    | j                   j                         S r-  r  r6  s    r1  r4  z$ASTDeclaratorMemPtr.is_function_type}  r  r3  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 )Nre  r  r   c                6    | t        j                  ||      z  } y r-  r  r  s     r1  r  z9ASTDeclaratorMemPtr.describe_signature.<locals>._add_anno  r  r3  r   rM   r  )
r(   r  r  r
   r  r   rM   r  rg  r*  r  s         r1  r  z&ASTDeclaratorMemPtr.describe_signature  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@r3  N)
r  r  rM   rB   r   rB   rg  r"  rw   r:  r  r6  r  r7  r  r  r  r8  r  r  r@  r3  r1  r  r  0  s    (,4AFJ   
[[      ) ) ( (3
/
;@,A 0A:@AEIAr3  r  c                      e Zd ZddZedd       Zej                  dd       Ze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-  innerrg  )r0  r  rg  s      r1  r2  zASTDeclaratorParen.__init__  s    ut
	r3  c                .    | j                   j                  S r-  r  r  r6  s    r1  r  zASTDeclaratorParen.name  s    zzr3  c                &    || j                   _        y r-  r  rO  s     r1  r  zASTDeclaratorParen.name  s    

r3  c                ^    | j                   j                  xs | j                  j                  S r-  )r  r&  rg  r6  s    r1  r&  zASTDeclaratorParen.isPack  s!    zz  4DII$4$44r3  c                .    | j                   j                  S r-  )r  r  r6  s    r1  r  z"ASTDeclaratorParen.function_params  s    zz)))r3  c                .    | j                   j                  S r-  )r  r  r6  s    r1  r  z!ASTDeclaratorParen.trailingReturn  s    zz(((r3  c                     yrF  r@  r6  s    r1  r*  z0ASTDeclaratorParen.require_space_after_declSpecs  rz  r3  c                    dg}|j                   || j                               |j                  d       |j                   || j                               dj                  |      S r  )rx  r  rg  r  r  s      r1  rP  zASTDeclaratorParen._stringify  sL    e

9TZZ()

3

9TYY'(wws|r3  c                8    | j                   j                  |      S r-  )r  r  r[  s     r1  r  z#ASTDeclaratorParen.get_modifiers_id  s    zz**733r3  c                8    | j                   j                  |      S r-  )r  r  r[  s     r1  r  zASTDeclaratorParen.get_param_id  s    zz&&w//r3  c                    |dk(  rt         | j                  j                  |      | j                  j                  |      z   S r  )r   rg  r.  r  r[  s     r1  r.  z$ASTDeclaratorParen.get_ptr_suffix_id  s?    a< zz++G4II''01 	1r3  c                    |dk\  sJ | j                   j                  ||      }| j                  j                  ||      S )Nr  r  )rg  r2  r  )r0  r\  r1  nextIds       r1  r2  zASTDeclaratorParen.get_type_id  s>    !||&&w=zz%%gF%CCr3  c                6    | j                   j                         S r-  )r  r4  r6  s    r1  r4  z#ASTDeclaratorParen.is_function_type  s    zz**,,r3  c                    t        |       |t        j                  dd      z  }| j                  j	                  ||||       |t        j                  dd      z  }| j
                  j	                  |d||       y )Nr0  r3  ro  )r(   r
   r  r  r  rg  r  s        r1  r  z%ASTDeclaratorParen.describe_signature  sh    %800c::

%%gtS&A800c::		$$WlCHr3  N)r  r"  rg  r"  rw   r:  r  r6  r  r7  r  r  r  r8  r  r  r@  r3  r1  r  r    s       
[[  5 5 * * ) )401D-I 0I:@IEIIr3  r  c                  8    e Zd ZddZddZddZ	 	 	 	 	 	 d	dZy)
ASTPackExpansionExprc                    || _         y r-  r>  r@  s     r1  r2  zASTPackExpansionExpr.__init__  r  r3  c                ,     || j                         dz   S r  r>  rN  s     r1  rP  zASTPackExpansionExpr._stringify  s    #e++r3  c                B    | j                   j                  |      }d|z   S )NsprE  r  s      r1  r]  zASTPackExpansionExpr.get_id  s     YYg&byr3  c                r    | j                   j                  ||||       |t        j                  dd      z  }y r  )r?  r  r
   r  r  s        r1  r  z'ASTPackExpansionExpr.describe_signature  s1    		$$WdC@800>>r3  N)r?  r2  r  r  r  r  r@  r3  r1  r  r    s.    ,? 0?:@?EI?r3  r  c                  8    e Zd ZddZddZddZ	 	 	 	 	 	 d	dZy)
ASTParenExprListc                    || _         y r-  )r  r6  s     r1  r2  zASTParenExprList.__init__  r  r3  c                R    ddj                  fd| j                  D              z  S )Nzpi%sEr   c              3  @   K   | ]  }|j                          y wr-  r  r  s     r1  r  z*ASTParenExprList.get_id.<locals>.<genexpr>  r  r  r  r[  s    `r1  r]  zASTParenExprList.get_id  r  r3  c                r    | j                   D cg c]
  } ||       }}ddj                  |      z  S c c}w )Nz(%s)r!  )r  r  )r0  rO  r   r  s       r1  rP  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 )Nr0  Tr   Fr3  )r(   r
   r  r  r  r  r(  s          r1  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::r3  N)r  r)  rw   r:  r  r  r  r*  r@  r3  r1  r  r    s/    H); 0;:@;EI;r3  r  c                  :    e Zd Z	 d	 	 	 ddZddZ	 	 	 	 	 	 ddZy)	ASTInitializerc                     || _         || _        y r-  r  	hasAssign)r0  r  r  s      r1  r2  zASTInitializer.__init__	  s    
"r3  c                L     || j                         }| j                  rd|z   S |S Nr  r  )r0  rO  vals      r1  rP  zASTInitializer._stringify  s&    

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

%%gz3Gr3  NT)r  r2  r  rB   rw   r:  r  r  r  r@  r3  r1  r  r    s@    #'# #,0#
H 0H:@HEIHr3  r  c                      e Z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)r0  r  r  s      r1  r2  zASTType.__init__   s    yt"	r3  c                .    | j                   j                  S r-  r  r  r6  s    r1  r  zASTType.name&  rj  r3  c                &    || j                   _        y r-  r  rO  s     r1  r  zASTType.name*  rl  r3  c                .    | j                   j                  S r-  )r  r&  r6  s    r1  r&  zASTType.isPack.  ro  r3  c                .    | j                   j                  S r-  )r  r  r6  s    r1  r  zASTType.function_params2  rr  r3  c                .    | j                   j                  S r-  )r  r  r6  s    r1  r  zASTType.trailingReturn6  ru  r3  Nc                >   |dk(  rg }|r/|dk(  r|j                  |j                         j                  |             |j                  | j                  j	                  |             |j                  | j                  j                  |             | j                  j                  j                  s7| 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                  | j                  j	                  |             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 )NrV  functionCEr  r   r   )rx  get_full_nested_namer]  r  r  r  r  r  rO   r  r  r4  r   r.  r  r/  r  r  r2  )	r0  r\  r  r.  r  r  templtypeIdr1  s	            r1  r]  zASTType.get_id:  s   a<C+JJv::<CCGLMJJtyy55g>?JJtyy99'BC00::!^^66!^^66@@

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

4>>009:

49966w?@

49911':;773<Z' II66w?	

6668??STa<"..==E(!%!<!<W!E..+/+>+>+E+Eg+NL+/>>+@+@+IL

6*

<0

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

6668??HI$Z00  >>009LYY**7LAFJJvwws|r3  c                "   g } || j                         }|j                  |       | j                  j                         rt	        |      dkD  r|j                  d       |j                   || j                               dj                  |      S r  )r  rx  r  r*  rI  r  )r0  rO  r  r  s       r1  rP  zASTType._stringifyp  sj    dnn-	

999224Y!9KJJsO

9TYY'(wws|r3  c                2    | j                   j                  ryy)Nr   r  )r  r  r6  s    r1  get_type_declaration_prefixz#ASTType.get_type_declaration_prefixy  s    >>**r3  c                D   t        |       | j                  j                  |d||       | j                  j	                         r8t        t        | j                              dkD  r|t        j                         z  }|dk(  rd}| j                  j                  ||||       y )Nre  r   ro  )	r(   r  r  r  r*  rI  r<  r
   r  r  s        r1  r  zASTType.describe_signature  s    %))':sFKII335C'(1,x..00G :D		$$WdC@r3  )r  r	  r  r"  rw   r:  r  r6  r  r  r7  r  r  r  r;  r  )r=  r>  r?  r2  r  r  r9  r&  r  r  r]  rP  r  r  r@  r3  r1  r  r    s       
[[      ) ) ( ( =A'+4$4034lA 0A:@AEIAr3  r  c                  n    e Z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-  r  initr0  r  r  s      r1  r2  z0ASTTemplateParamConstrainedTypeWithInit.__init__  s    t		r3  c                .    | j                   j                  S r-  r  r  r6  s    r1  r  z,ASTTemplateParamConstrainedTypeWithInit.name  rj  r3  c                .    | j                   j                  S r-  r  r&  r6  s    r1  r&  z.ASTTemplateParamConstrainedTypeWithInit.isPack  ro  r3  Nc                    |dk\  sJ |r'|j                   j                  j                  |d      S | j                  j                  |      S Nr  Fr  )r  r/  r]  r  r  s       r1  r]  z.ASTTemplateParamConstrainedTypeWithInit.get_id  H     !||==,,33Ge3LL99##G,,r3  c                v     || j                         }| j                  r|dz  }| || j                        z  }|S r  r
  r  s      r1  rP  z2ASTTemplateParamConstrainedTypeWithInit._stringify  s8    		"995LC9TYY''C
r3  c                $   | j                   j                  ||||       | j                  rf|t        j                         z  }|t        j
                  dd      z  }|t        j                         z  }| j                  j                  ||||       y y )Nr   )r  r  r  r
   r  r  r  s        r1  r  z:ASTTemplateParamConstrainedTypeWithInit.describe_signature  s{    		$$WdC@99x..00Gx44S#>>Gx..00GII(($VD	 r3  )r  r  r  r  rw   r:  r  r  r  r  r  r  
r=  r>  r?  r2  r  r  r&  r]  rP  r  r@  r3  r1  r  r    s    
       TX	-	-(2	-CP	-		-E 0E:@EEIEr3  r  c                  h    e Z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      r1  r2  zASTTypeWithInit.__init__      		r3  c                .    | j                   j                  S r-  r  r6  s    r1  r  zASTTypeWithInit.name  rj  r3  c                .    | j                   j                  S r-  r  r6  s    r1  r&  zASTTypeWithInit.isPack  ro  r3  Nc                   |dk7  r| j                   j                  ||      S |dk(  r>|j                         j                  |      dz   | j                   j                  |      z   S |j                         j                  |      S )NmemberrV  r   )r  r]  r   r  s       r1  r]  zASTTypeWithInit.get_id  sz    !99##GZ88a<//188ADHII$$W-. /**,33G<<r3  c                    g }|j                   || j                               | j                  r!|j                   || j                               dj                  |      S r  )rx  r  r  r  r  s      r1  rP  zASTTypeWithInit._stringify  sF    

9TYY'(99JJy+,wws|r3  c                    t        |       | j                  j                  ||||       | j                  r| j                  j                  ||||       y y r-  )r(   r  r  r  r  s        r1  r  z"ASTTypeWithInit.describe_signature  sF    %		$$WdC@99II(($VD r3  )r  r  r  r  rw   r:  r  r  r  r  r  r  r  r@  r3  r1  r  r    ss           =A'+=$=03=E 0E:@EEIEr3  r  c                  L    e Zd ZddZ	 	 d	 	 	 d	dZd
dZddZ	 	 	 	 	 	 ddZy)ASTTypeUsingc                     || _         || _        y r-  )r  r  r0  r  r  s      r1  r2  zASTTypeUsing.__init__  r  r3  Nc                V    |dk(  rt         |j                         j                  |      S r  r   r   r]  r  s       r1  r]  zASTTypeUsing.get_id  )    a<**,33G<<r3  c                    g }|j                   || j                               | j                  r2|j                  d       |j                   || j                               dj                  |      S )Nr  r   )rx  r  r  r  r  s      r1  rP  zASTTypeUsing._stringify  sR    

9TYY'(99JJuJJy+,wws|r3  c                     y)Nr   r@  r6  s    r1  r  z(ASTTypeUsing.get_type_declaration_prefix  s    r3  c                >   t        |       | j                  j                  ||||       | j                  rg|t	        j
                         z  }|t	        j                  dd      z  }|t	        j
                         z  }| j                  j                  |d||       y y )Nr  r   re  )r(   r  r  r  r
   r  r  r  s        r1  r  zASTTypeUsing.describe_signature  s    %		$$WdC$G99x..00Gx44S#>>Gx..00GII((*c&(Q	 r3  )r  r  r  r  rw   r:  r  r  r  r;  r  )r=  r>  r?  r2  r]  rP  r  r  r@  r3  r1  r"  r"    sP     =A'+=$=03=R 0R:@REIRr3  r"  c                  V    e Zd ZddZedd       Z	 	 d		 	 	 d
dZddZ	 	 	 	 	 	 ddZy)
ASTConceptc                     || _         || _        y r-  r  r  r0  r  r  s      r1  r2  zASTConcept.__init__  s    $&r3  c                    | j                   S r-  r  r6  s    r1  r  zASTConcept.name  r  r3  Nc                V    |dk(  rt         |j                         j                  |      S r  r&  r  s       r1  r]  zASTConcept.get_id	  r'  r3  c                l     || j                         }| j                  r| || j                        z  }|S r-  r.  r  s      r1  rP  zASTConcept._stringify  s3    (9T--..C
r3  c                    | j                   j                  ||||       | j                  r| j                  j                  ||||       y y r-  )r  r  r  r  s        r1  r  zASTConcept.describe_signature  sB    **7D#vF//sFK r3  )r  r  r  r  rw   r:  r  r  r  r  r  r  r@  r3  r1  r,  r,     s_    '   =A'+=$=03=L 0L:@LEILr3  r,  c                  <    e Zd Z	 	 	 	 	 	 ddZddZ	 	 	 	 	 	 ddZy)ASTBaseClassc                <    || _         || _        || _        || _        y r-  )r  
visibilityr   pack)r0  r  r7  r   r8  s        r1  r2  zASTBaseClass.__init__  s    	$	r3  c                N   g }| j                   ,|j                  | j                          |j                  d       | j                  r|j                  d       |j                   || j                               | j                  r|j                  d       dj                  |      S )Nr1  zvirtual r2  r   )r7  rx  r   r  r8  r  r  s      r1  rP  zASTBaseClass._stringify$  su    ??&JJt'JJsO<<JJz"

9TYY'(99JJuwws|r3  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   re  r  r2  )
r(   r7  r
   r  r  r   r  r  r8  r  r  s        r1  r  zASTBaseClass.describe_signature0  s    %??&x0015B BGx..00G<<x00IFFGx..00G		$$Wj#f$M99x44UEBBG r3  N)
r  r  r7  r<  r   rB   r8  rB   rw   r:  r  r  r  r@  r3  r1  r5  r5    sE    &*/3
C 0C:@CEICr3  r5  c                  @    e Zd Z	 	 	 	 ddZddZddZ	 	 	 	 	 	 d	dZy)
ASTClassc                <    || _         || _        || _        || _        y r-  )r  r  basesr  )r0  r  r  r>  r  s        r1  r2  zASTClass.__init__@  s    	


r3  c                @    |j                         j                  |      S r-  )r   r]  r  s       r1  r]  zASTClass.get_idG  s    **,33G<<r3  c                   g }|j                   || j                               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   r1  r  r  Tr!  Fr   )rx  r  rI  r  r  r>  r  )r0  rO  r  r  r   s        r1  rP  zASTClass._stringifyJ  s    

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

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

9Q<(	)
 wws|r3  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  r  r  r   )r(   r  r  rI  r
   r  r  r  r  r>  r  pop)r0  rz  r{  r|  r.  r   s         r1  r  zASTClass.describe_signature\  sE   %

%%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 r3  N)
r  r  r  rB   r>  zlist[ASTBaseClass]r  r   rw   r:  r\  re   r  r<  r.  r8  rw   r<  r  r  r*  r@  r3  r1  r<  r<  ?  s>    (-1=$ 0:@EIr3  r<  c                  8    e Zd ZddZddZddZ	 	 	 	 	 	 d	dZy)
ASTUnionc                     || _         || _        y r-  )r  r  )r0  r  r  s      r1  r2  zASTUnion.__init__s  s    	
r3  c                V    |dk(  rt         |j                         j                  |      S r  r&  r  s       r1  r]  zASTUnion.get_idw  )    a<**,33G<<r3  c                    g }|j                   || j                               t        | j                        dk7  r|j                  d       |j                   || j                               dj	                  |      S r  )rx  r  rI  r  r  r  s      r1  rP  zASTUnion._stringify|  sZ    

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

9TYY'(wws|r3  c                    t        |       | j                  j                  |       t        | j                        dk7  r|t	        j
                         z  }| j                  j                  ||||       y )Nr   r  )r(   r  r  rI  r
   r  r  r  s        r1  r  zASTUnion.describe_signature  sZ    %

%%g.tzz?ax..00G		$$WdC$Gr3  N)r  r  r  r   rw   r:  rC  r  r  r*  r@  r3  r1  rE  rE  r  s2    =
H 0H:@HEIHr3  rE  c                  @    e Zd Z	 	 	 	 ddZddZddZ	 	 	 	 	 	 d	dZy)
ASTEnumc                <    || _         || _        || _        || _        y r-  )r  scopedunderlyingTyper  )r0  r  rN  rO  r  s        r1  r2  zASTEnum.__init__  s    	,
r3  c                V    |dk(  rt         |j                         j                  |      S r  r&  r  s       r1  r]  zASTEnum.get_id  rH  r3  c                   g }| j                   r,|j                  | j                          |j                  d       |j                   || j                               t        | j                        dk7  r|j                  d       |j                   || j                               | j
                  r2|j                  d       |j                   || j
                               dj                  |      S )Nr1  r   r  r   )rN  rx  r  rI  r  rO  r  r  s      r1  rP  zASTEnum._stringify  s    ;;JJt{{#JJsO

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

9TYY'(JJuJJy!4!456wws|r3  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  ro  )	r(   r  r  rI  r
   r  r  rO  r  r  s        r1  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27L36v 3 G	 r3  N)
r  r  rN  r<  rO  r  r  r   rw   r:  rC  r  r  r*  r@  r3  r1  rL  rL    sB    (-1=
G 0G:@GEIGr3  rL  c                  @    e Zd Z	 	 	 	 ddZddZddZ	 	 	 	 	 	 d	dZy)
ASTEnumeratorc                .    || _         || _        || _        y r-  )r  r  r  )r0  r  r  r  s       r1  r2  zASTEnumerator.__init__  s    		
r3  c                V    |dk(  rt         |j                         j                  |      S r  r&  r  s       r1  r]  zASTEnumerator.get_id  rH  r3  c                X   g }|j                   || j                               t        | j                        dk7  r2|j                  d       |j                   || j                               | j                  r!|j                   || j                               dj                  |      S r  )rx  r  rI  r  r  r  r  s      r1  rP  zASTEnumerator._stringify  sv    

9TYY'(tzz?aJJsOJJy,-99JJy+,wws|r3  c                @   t        |       | j                  j                  ||||       t        | j                        dk7  r2|t        j                         z  }| j                  j                  |       | j                  r| j                  j                  |d||       y y )Nr   re  )r(   r  r  rI  r  r
   r  r  r  s        r1  r  z ASTEnumerator.describe_signature  s{    %		$$WdC@tzz?ax..00GJJ))'299II((*c6J r3  N)r  r  r  zASTInitializer | Noner  r   rw   r:  rC  r  r  r*  r@  r3  r1  rT  rT    sB    (-1=
K 0K:@KEIKr3  rT  c                  T    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  r6  s    r1  get_identifierzASTTemplateParam.get_identifier  r  r3  c                *    t        t        |             r-  r  r[  s     r1  r]  zASTTemplateParam.get_id  r  r3  c                *    t        t        |             r-  r  )r0  
parentNoder{  r|  r.  s        r1  r  z#ASTTemplateParam.describe_signature  r  r3  c                *    t        t        |             r-  r  r6  s    r1  r&  zASTTemplateParam.isPack  r  r3  c                *    t        t        |             r-  r  r6  s    r1  r  zASTTemplateParam.name  r  r3  Nrw   rF  r  )
r_  r1   r{  r<  r|  r7   r.  r8  rw   r:  r  r  )	r=  r>  r?  r\  r]  r  r  r&  r  r@  r3  r1  rZ  rZ    sQ    ... 0.:@.EI. . . . .r3  rZ  c                  L    e Z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-  )keyrJ  parameterPackrT   )r0  rf  rJ  rg  rT   s        r1  r2  z)ASTTemplateKeyParamPackIdDefault.__init__  s3    
s?"?$*r3  c                    | j                   S r-  rM  r6  s    r1  r\  z/ASTTemplateKeyParamPackIdDefault.get_identifier  r_  r3  c                    |dk\  sJ g }| j                   r|j                  d       n|j                  d       dj                  |      S )Nr  r  r  r   )rg  rx  r  r  s      r1  r]  z'ASTTemplateKeyParamPackIdDefault.get_id  sA    !||JJtJJsOwws|r3  c                   | j                   g}| j                  r.| j                  r|j                  d       |j                  d       | j                  r>| j                  s|j                  d       |j                   || j                               | j                  r2|j                  d       |j                   || j                               dj                  |      S )Nr1  r2  r  r   )rf  rg  rJ  rx  rT   r  r  s      r1  rP  z+ASTTemplateKeyParamPackIdDefault._stringify  s    xxj

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

3JJy12<<JJuJJy./wws|r3  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 )Nr2  r   r   re  )	r
   r  rf  rg  rJ  r  r  r  rT   r  s        r1  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	 r3  N)
rf  r<  rJ  rF  rg  rB   rT   r  rw   r:  rb  r  r  r  )r=  r>  r?  r2  r\  r]  rP  r  r@  r3  r1  rd  rd    sO     $/6;?N 0N:@NEINr3  rd  c                  v    e Z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     r1  r2  zASTTemplateParamType.__init__.  r  r3  c                V    | j                         }t        t        |d       gdgd      S NFr  r\  r  r  r0  r  s     r1  r  zASTTemplateParamType.name2  ,      "22t<=wuUUr3  c                .    | j                   j                  S r-  r  rg  r6  s    r1  r&  zASTTemplateParamType.isPack7      yy&&&r3  c                6    | j                   j                         S r-  r  r\  r6  s    r1  r\  z#ASTTemplateParamType.get_identifier;      yy''))r3  Nc                    |dk\  sJ |r'|j                   j                  j                  |d      S | j                  j                  |      S r  )r  r/  r]  r  r  s       r1  r]  zASTTemplateParamType.get_id>  r  r3  c                &     || j                         S r-  r  rN  s     r1  rP  zASTTemplateParamType._stringifyI  rQ  r3  c                @    | j                   j                  ||||       y r-  )r  r  r  s        r1  r  z'ASTTemplateParamType.describe_signatureL  rU  r3  )r  rd  rw   r:  r  r  rb  r  r  r  r  r=  r>  r?  r2  r  r  r&  r\  r]  rP  r  r@  r3  r1  rm  rm  -  s     V V ' '* TX	-	-(2	-CP	-		-$A 0A:@AEIAr3  rm  c                  ~    e Z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  )r0  r  r  s      r1  r2  z%ASTTemplateParamTemplateType.__init__R  s     |t(	r3  c                V    | j                         }t        t        |d       gdgd      S rp  rr  rs  s     r1  r  z!ASTTemplateParamTemplateType.nameY  rt  r3  c                .    | j                   j                  S r-  rv  r6  s    r1  r&  z#ASTTemplateParamTemplateType.isPack^  rw  r3  c                6    | j                   j                         S r-  ry  r6  s    r1  r\  z+ASTTemplateParamTemplateType.get_identifierb  rz  r3  Nc                    |dk\  sJ |r'|j                   j                  j                  |d       S | j                  j                  |      | j                  j                  |      z   S )Nr  r  )r  r/  r]  r  r  r  s       r1  r]  z#ASTTemplateParamTemplateType.get_ide  s^     !||==,,33Gd3KK$$++G4tyy7G7G7PPPr3  c                L     || j                          || j                        z   S r-  r  rN  s     r1  rP  z'ASTTemplateParamTemplateType._stringifyp  s!    **+i		.BBBr3  c                    | j                   j                  |d||       |t        j                         z  }| j                  j                  ||||       y )Nro  )r  r  r
   r  r  r  s        r1  r  z/ASTTemplateParamTemplateType.describe_signatures  sG    ,,WlCP8**,,		$$WdC@r3  )r  ASTTemplateParamsr  rd  rw   r:  r  r  rb  r  r  r  r  r~  r@  r3  r1  r  r  Q  s    7<@ V V ' '* TX	Q	Q(2	QCP	Q		QCA 0A:@AEIAr3  r  c                      e Zd Z	 d		 	 	 	 	 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-  rp  rg  )r0  rp  rg  s      r1  r2  z ASTTemplateParamNonType.__init__{  s     u
*r3  c                V    | j                         }t        t        |d       gdgd      S rp  rr  rs  s     r1  r  zASTTemplateParamNonType.name  rt  r3  c                J    | j                   j                  xs | j                  S r-  )rp  r&  rg  r6  s    r1  r&  zASTTemplateParamNonType.isPack  s    zz  6D$6$66r3  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 )NrV  r   )rp  r  rI  r  r  r~  r  rF  )r0  r  r  s      r1  r\  z&ASTTemplateParamNonType.get_identifier  s    zztzz?a'''::a=****zz!}1111**Q-))Cc=111Jr3  Nc                    |dk\  sJ |r'|j                   j                  j                  |d       S d}| j                  r|dz  }|| j                  j                  |      z   S )Nr  r  r   r  )r  r/  r]  rg  rp  )r0  r\  r  r.  r  s        r1  r]  zASTTemplateParamNonType.get_id  sd     !||==,,33Gd3KKC!!t**7333r3  c                L     || j                         }| j                  r|dz  }|S r  r  r  s      r1  rP  z"ASTTemplateParamNonType._stringify  s'    

#5LC
r3  c                    | j                   j                  ||||       | j                  r|t        j                  dd      z  }y y r  )rp  r  rg  r
   r  r  s        r1  r  z*ASTTemplateParamNonType.describe_signature  s?    

%%gtS&Ax44UEBBG r3  r  )rp  r  rg  rB   rw   r:  r  r  rb  r  r  r  r  r~  r@  r3  r1  r  r  z  s     (-+Q+ $+15+ V V 7 7
 TX44(24CP4	4C 0C:@CEICr3  r  c                  b    e Zd Z	 	 	 	 ddZdd	dZd
dZ	 	 	 	 	 	 ddZ	 	 	 	 	 	 	 	 	 	 	 	 ddZy)r  c                (    |J || _         || _        y r-  )paramsrequiresClause)r0  r  r  s      r1  r2  zASTTemplateParams.__init__  s    !!!,r3  c                   |dk\  sJ g }|j                  d       | j                  D ]"  }|j                  |j                  |             $ |j                  d       |sb| j                  rV|j                  d       |j                  | j                  j                  j                  |             |j                  d       dj                  |      S )Nr  r  r  IQr   )rx  r  r]  r  r?  r  )r0  r\  excludeRequiresr  rp  s        r1  r]  zASTTemplateParams.get_id  s    !||

3[[ 	.EJJu||G,-	.

34#6#6JJtJJt**//66w?@JJsOwws|r3  c                P   g }|j                  d       |j                  dj                  fd| j                  D                     |j                  d       | j                  2|j                   | j                               |j                  d       dj                  |      S )Nz	template<r!  c              3  .   K   | ]  } |        y wr-  r@  r  s     r1  r  z/ASTTemplateParams._stringify.<locals>.<genexpr>  s     ?aYq\?r$  z> r1  r   )rx  r  r  r  r  s    ` r1  rP  zASTTemplateParams._stringify  s{    

;

499?4;;??@

4*JJy!4!456JJsOwws|r3  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  )r0  rz  r{  r|  r.  r  rp  s          r1  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 +r3  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 )Nr  )r
   desc_signature_linesphinx_line_type)r_  rz  s     r1  makeLinezDASTTemplateParams.describe_signature_as_introducer.<locals>.makeLine  s'    224G'!J'7G$Nr3  r   r   Tr   Fr   r  re  )r_  r3   rw   zaddnodes.desc_signature_line)	r
   r  r  r  r  r  r  r  r  )r0  r_  r{  r|  r.  lineSpecr  lineNoder  rp  reqNodes              r1   describe_signature_as_introducerz2ASTTemplateParams.describe_signature_as_introducer  s   	
 J'H--j*EEH11#s;;[[ 	BEH99#sCCH3355E#J/$$XtS&A	B E
+HH11#s;;224G'7G$'!J227JVT	 r3  N)r  zlist[ASTTemplateParam]r  ASTRequiresClause | Nonerw   r:  r  )r\  re   r  rB   rw   r<  r  r  r_  r3   r{  r<  r|  r7   r.  r8  r  rB   rw   r:  )r=  r>  r?  r2  r]  rP  r  r  r@  r3  r1  r  r    s~    -!9->B-O 0O:@OEIO U,U47U>NUU&*U/3Ur3  r  c                  ~    e Z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-  )rJ  rg  )r0  rJ  rg  s      r1  r2  z)ASTTemplateIntroductionParameter.__init__  s    $*r3  c                V    | j                         }t        t        |d       gdgd      S rp  rr  rs  s     r1  r  z%ASTTemplateIntroductionParameter.name  rt  r3  c                    | j                   S r-  )rg  r6  s    r1  r&  z'ASTTemplateIntroductionParameter.isPack  s    !!!r3  c                    | j                   S r-  rM  r6  s    r1  r\  z/ASTTemplateIntroductionParameter.get_identifier  r_  r3  Nc                ~    |dk\  sJ |r'|j                   j                  j                  |d       S | j                  ryy)Nr  r  r  r  )r  r/  r]  rg  r  s       r1  r]  z'ASTTemplateIntroductionParameter.get_id  sB     !||==,,33Gd3KK!!r3  c                l    |dk\  sJ | j                   j                  |      }| j                  rd|z   S |S )Nr  r  )rJ  r]  rg  r  s      r1  get_id_as_argz.ASTTemplateIntroductionParameter.get_id_as_arg   s:    !||oo$$W-#:Jr3  c                    g }| j                   r|j                  d       |j                   || j                               dj                  |      S Nr2  r   )rg  rx  rJ  r  r  s      r1  rP  z+ASTTemplateIntroductionParameter._stringify)  s?    JJu

9T__-.wws|r3  c                    | j                   r|t        j                  dd      z  }| j                  j	                  |||dd|       y r  )rg  r
   r  rJ  r  r  s        r1  r  z3ASTTemplateIntroductionParameter.describe_signature0  s>    x44UEBBG**7D#r2vNr3  )rJ  rF  rg  rB   rw   r:  r  r  rb  r  r  r  r  r  )r=  r>  r?  r2  r  r  r&  r\  r]  r  rP  r  r@  r3  r1  r  r    s    + V V " " TX(2CP	O 0O:@OEIOr3  r  c                  L    e Zd Z	 	 	 	 ddZddZddZ	 	 	 	 	 	 	 	 	 	 	 	 d	dZy)
ASTTemplateIntroductionc                @    t        |      dkD  sJ || _        || _        y rH  )rI  rL   r  )r0  rL   r  s      r1  r2  z ASTTemplateIntroduction.__init__8  s     6{Qr3  c                   |dk\  sJ g }|j                  d       | j                  D ]"  }|j                  |j                  |             $ |j                  d       |j                  d       |j                  | j                  j                  |             |j                  d       | j                  D ]"  }|j                  |j	                  |             $ |j                  d       |j                  d       dj                  |      S )Nr  r  r  rv  r   )rx  r  r]  rL   r  r  )r0  r\  r  rp  s       r1  r]  zASTTemplateIntroduction.get_id>  s    !||

3[[ 	.EJJu||G,-	.

3

3

4<<&&w/0

3[[ 	5EJJu**734	5

3

3wws|r3  c                   g }|j                   | j                               |j                  d       |j                  dj                  fd| j                  D                     |j                  d       dj                  |      S )Nr%  r!  c              3  .   K   | ]  } |        y wr-  r@  )r  rp  rO  s     r1  r  z5ASTTemplateIntroduction._stringify.<locals>.<genexpr>T  s     G%Yu-Gr$  } r   )rx  rL   r  r  r  s    ` r1  rP  z"ASTTemplateIntroduction._stringifyP  sa    

9T\\*+

3

499G4;;GGH

4wws|r3  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templateIntroductionre  r%  Tr   Fr&  )r
   r  r  rL   r  r  r  r  )	r0  r_  r{  r|  r.  r  rz  r  rp  s	            r1  r  z8ASTTemplateIntroduction.describe_signature_as_introducerX  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::r3  N)rL   r  r  z&list[ASTTemplateIntroductionParameter]rw   r:  r  r  r  )r=  r>  r?  r2  r]  rP  r  r@  r3  r1  r  r  7  sV    ?DH$;,;47;!;+1;=A;FJ;r3  r  c                  L    e Zd Z	 	 	 	 ddZddZd	dZd
dZ	 	 	 	 	 	 	 	 ddZy)ASTTemplateDeclarationPrefixc                    || _         y r-  )r  )r0  r  s     r1  r2  z%ASTTemplateDeclarationPrefix.__init__n  s     #r3  c                t    | j                   y | j                   d   }t        |t              sy |j                  S )Nr  )r  r  r  r  )r0  lastLists     r1  get_requires_clause_in_lastz8ASTTemplateDeclarationPrefix.get_requires_clause_in_lasts  s7    >>!>>"%($56&&&r3  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  rV  )r  r   )rI  r  	enumerater  r  rx  r]  r  )r0  r\  r  	lastIndexr   r   s         r1  %get_id_except_requires_clause_in_lastzBASTTemplateDeclarationPrefix.get_id_except_requires_clause_in_last{  s    !||'!+	dnn- 	.DAq!./

188Ga9n8NO

188G,-		.
 wws|r3  c                x    g }| j                   D ]  }|j                   ||              dj                  |      S r  )r  rx  r  )r0  rO  r  r   s       r1  rP  z'ASTTemplateDeclarationPrefix._stringify  s8     	%AJJy|$	%wws|r3  c                f    t        |       | j                  D ]  }|j                  |d|||        y Nrn  )r(   r  r  )r0  rz  r{  r|  r.  r  r   s          r1  r  z/ASTTemplateDeclarationPrefix.describe_signature  s6    % 	]A..wc6S[\	]r3  N)r  z1list[ASTTemplateParams | ASTTemplateIntroduction]rw   r:  rw   r  r  r  )rz  r3   r{  r<  r|  r7   r.  r8  r  rB   rw   r:  )r=  r>  r?  r2  r  r  rP  r  r@  r3  r1  r  r  m  sP    #M#RV#
'
] 0]:@]LP]UY]r3  r  c                  0    e Zd ZddZddZ	 	 	 	 	 	 ddZy)ASTRequiresClausec                    || _         y r-  r>  r@  s     r1  r2  zASTRequiresClause.__init__  r  r3  c                ,    d || j                         z   S )Nz	requires r>  rN  s     r1  rP  zASTRequiresClause._stringify  s    Ytyy111r3  c                    |t        j                  dd      z  }|t        j                         z  }| j                  j	                  ||||       y )Nrv   r  r  s        r1  r  z$ASTRequiresClause.describe_signature  sD    8,,ZDD8**,,		$$WdC@r3  N)r?  r  rw   r:  r  )
rz  znodes.TextElementr{  r<  r|  r7   r.  r8  rw   r:  r  r@  r3  r1  r  r    s-    2A 0A:@AEIAr3  r  c                      e Zd Z	 	 	 	 	 	 d
	 	 	 	 	 	 	 	 	 	 	 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)r9  Nc                    || _         || _        || _        || _        || _        || _        || _        d | _        d | _        y r-  )	r  directiveTyper7  r  r/  trailingRequiresClause	semicolonr.  enumeratorScopedSymbol)r0  r  r  r7  r  r/  r  r  s           r1  r2  zASTDeclaration.__init__  sH     %*$,&&<#"".2#r3  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  r9  r  r  r7  r/  r  )r0  templatePrefixClonetrailingRequiresClasueClones      r1  r  zASTDeclaration.clone  s    =A=P=Pd11779VZ** '+&A&A&G&G&I04 	$doot/A/A4??1"..4468S"nn. 	.r3  c                .    | j                   j                  S r-  )r/  r  r6  s    r1  r  zASTDeclaration.name  s    $$$r3  c                N    | j                   dk7  ry | j                  j                  S )Nr  )r  r/  r  r6  s    r1  r  zASTDeclaration.function_params  s#    ??j(///r3  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 )NrV  
enumeratorr   r  r  r  r   )r  r  r   r  r  r/  r]  r.  
_id_prefixrx  r  r  r?  r  )r0  r\  r  r  requiresClauseInLasts        r1  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 *JJt**PPQXYZ#'#6#6#R#R#T #' 4#>#>{""JJt#(C(C

4 #

/44;;GDE**

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

4##**7DOOT[[QRwws|r3  c                .    | j                  t        d      S rF  )r]  _max_idr6  s    r1  get_newest_idzASTDeclaration.get_newest_id  s    {{7D))r3  c                   g }| j                   r;| j                   dk7  r,|j                  | j                          |j                  d       | j                  r!|j                   || j                               |j                   || j                               | j                  r2|j                  d       |j                   || j                               | j
                  r|j                  d       dj                  |      S )Nrs   r1  ;r   )r7  rx  r  r/  r  r  r  r  s      r1  rP  zASTDeclaration._stringify  s    ??t(:JJt'JJsOJJy!4!456

9T--./&&JJsOJJy!<!<=>>>JJsOwws|r3  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_permalinktparam-line-spec)r.  r  rs   r  rL   >   r  r  rJ   rJ   r~   r   rZ   
enum-classenum-structr~   r  r  re  r  )r(   r.  r
   r  r  isRedeclarationr  r  r  r7  r  r  r  r/  r  r  r  r  rx  r  r  )	r0  rz  r{  r|  optionsmainDeclNoder}  lastDeclNodetrailingReqNodes	            r1  r  z!ASTDeclaration.describe_signature
  s   %{{{ #'335(4%,0KK,G,G(G_%227D#:>++<CKKHZ<[ 3 ] 	<??t(:H55dootWWLH3355L??f$%%AACFH55ffEELH3355L__	)H55iKKLH3355L__ 66__'%%)<<<<H55d6H6H$J\J\]]LH3355L__'H55gwGGLH3355L__&H55ffEELH3355L!!\1 9 9'7 KK 7 7 99##}4 9 9(H MM 7 7 99))V3GT5G5GG3__,H55lLQQLH3355L 11++L$T[[Q#&&&::<O/GO,NN?+*L''::S$++?>>H99#sCCL r3  )NNNNNF)r  r<  r  r  r7  r  r  #ASTTemplateDeclarationPrefix | Noner/  r   r  r  r  rB   rw   r:  )rw   r9  r  r  r  )r\  re   r  rB   rw   r<  r;  r  )
rz  r3   r{  r<  r|  r7   r  dictrw   r:  )r=  r>  r?  r2  r  r  r  r  r]  r  rP  r  r@  r3  r1  r9  r9    s    DH*.GK$(DH#(3'3!D3 "3 *B	3
 !3
 .23$. % % 0 0
+Z*>D 0>D;?>DDH>Dr3  r9  c                  $    e Zd Z	 	 	 	 ddZddZy)ASTNamespacec                     || _         || _        y r-  )r  r  )r0  r  r  s      r1  r2  zASTNamespace.__init__L  s    $,r3  c                    g }| j                   r!|j                   || j                                |j                   || j                               dj                  |      S r  )r  rx  r  r  r  s      r1  rP  zASTNamespace._stringifyQ  sJ    JJy!4!456

9T__-.wws|r3  N)r  r  r  r  rw   r:  r  )r=  r>  r?  r2  rP  r@  r3  r1  r  r  K  s    -!=-BF-
r3  r  c                  $    e Zd Z	 	 	 	 	 	 	 	 ddZy)SymbolLookupResultc                J    || _         || _        || _        || _        || _        y r-  )symbolsparentSymbolr  r  r~  )r0  r  r  r  r  r~  s         r1  r2  zSymbolLookupResult.__init__Z  s*     (",(r3  N)r  Iterator[Symbol]r  r8  r  r  r  r   r~  r  rw   r:  r=  r>  r?  r2  r@  r3  r1  r  r  Y  s'    )7)IL).)37)r3  r  c                      e Zd Z	 	 ddZy)	LookupKeyc                    || _         y r-  r  r  s     r1  r2  zLookupKey.__init__e  s     	r3  N)r  zSlist[tuple[ASTNestedNameElement, ASTTemplateParams | ASTTemplateIntroduction, str]]rw   r:  r   r@  r3  r1  r  r  d  s    26r3  r  c                   t        | j                        t        |j                        k7  ryt        | j                        dk(  ryt        t        | j                              D ]r  }| j                  |   }|j                  |   }t	        |j
                        }t	        |      }|j                  d      }|j                  |k7  r y|r|d d n|}||k7  sr y y)NTr   r2  F)rI  r  rz  r  r<  r  endswithr&  )	r  r~  r   rp  r  	paramNameargTxtisArgPackExpansionargNames	            r1  _is_specializationr  k  s    
 >  !S):):%;;
>  !Q&3~,,-. %%a("

O	S#__U3<<--!3&"+ r3  c                      e Zd ZdZdZdZdZd Zd Ze	dd       Z
d dZd! fdZ	 	 	 	 	 	 	 	 	 	 	 	 	 	 d"d	Zd#d
Zd 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	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d+dZ	 	 	 	 	 	 	 	 d,dZ	 	 	 	 d-dZ	 d.	 	 	 d/dZ	 	 	 	 	 	 d0dZ	 	 	 	 	 	 	 	 d1dZd2dZ	 	 	 	 	 	 	 	 	 	 	 	 d3dZ 	 	 	 	 	 	 d4dZ!d5dZ"d5dZ# xZ$S )6r8  r   z  Fc                    t         r-  )r  r6  s    r1  __copy__zSymbol.__copy__  s    r3  c           	     H    | j                   rt        t        d d d d d d d       S r-  )r  r  r8  )r0  memos     r1  __deepcopy__zSymbol.__deepcopy__  s&    ;;  dD$dD$??r3  c                     t         j                  t        j                  t        j                  z  d       t        j                  |   y )Nr   end)loggerdebugr8  debug_indent_stringdebug_indentr  s    r1  debug_printzSymbol.debug_print  s/    V//&2E2EE2Ndr3  c                    | j                   sG| j                  rJ | j                  rJ | j                  rJ | j                  rJ | j
                  rJ y | j                  r| j
                  sJ y y r-  )r  r  r  r~  r/  docnamer6  s    r1  _assert_invariantszSymbol._assert_invariants  sl    {{~~%%****((((''''||##|||#|  r3  c                :    |dk(  rt         t        | 	  ||      S )Nchildren)r  super__setattr__)r0  rf  r  	__class__s      r1  r   zSymbol.__setattr__  s#    *  w"3..r3  c                   || _         d | _        d | _        || _        |t	        ||      sd }|| _        || _        || _        || _        || _	        d| _
        | j                          g | _        g | _        | j                   r%| j                   j                  j                  |        | j                  r| | j                  _        | j!                          y r  )r  siblingAbovesiblingBelowr  r  r  r~  r/  r  liner  r  	_children_anonChildrenrx  r.  !_add_template_and_function_params)r0  r  r  r  r~  r/  r  r%  s           r1  r2  zSymbol.__init__  s    
 +/+/" $&~|DL,(&	$! (*+-;;KK!!((.&*D# 	..0r3  c                   | j                          | j                  J | j                  J | j                  J |J |J |J || _        | | j                  _        || _        || _        | j                          | j                          y r-  )r  r/  r  r%  r.  r(  )r0  r/  r  r%  s       r1  _fill_emptyzSymbol._fill_empty  s    !'''||###yy   &&&"""&"&	!..0r3  c                   t         j                  r.t         xj                  dz  c_        t         j                  d       | j                  r| j                  j
                  D ]  }|j                         s| j                  rt        d|      }nd }t        |j                         d       }t        |gdgd      }| j                  |g || j                  | j                          | j                  | j                  j                  | j                  j                  D ]  }|j                  |j                  j                   }|)t        d|      }|j"                  rJ t%        |j&                        dk(  sJ | j                  |g || j                  | j                          t         j                  rt         xj                  dz  c_        y y )NrV  z"_add_template_and_function_params:templateParam)r  r/  Frq  functionParam)r8  debug_lookupr  r  r  r  r\  r/  r9  r  r  _add_symbolsr  r%  r  r  r  r  rI  r  )r0  tpr  r  nnfps         r1  r(  z(Symbol._add_template_and_function_params  s   1$CD
 ))00 
I((*##)_RTUDD*2+<+<+>E"C55'%@!!"b$diiH
I 'D,<,<,L,L,X&&66 
I66>VV[[:%bQ99$}288})))!!"b$diiH
I 1$ r3  c                    | j                   y | | j                   j                  v sJ | j                   j                  j                  |        d | _         y r-  )r  r&  remover6  s    r1  r4  zSymbol.remove  sF    ;;t{{,,,,,$$T*r3  c                   g }| j                   D ]  }|j                  |       |j                  r|j                  |k(  rqd |_        d |_        d |_        |j
                  |j                  |j
                  _        |j                  |j
                  |j                  _        d |_        d |_        |j                  |        || _         y r-  )r&  	clear_docr/  r  r%  r#  r$  rx  )r0  r  newChildrensChilds       r1  r6  zSymbol.clear_doc  s    $&nn 	'FW%!!fnn&?%)"!%"&&27=7J7JF''4&&27=7J7JF''4&*#&*#v&	' %r3  c              #  j   K   |  | j                   D ]  }|j                         E d {     y 7 wr-  )r&  get_all_symbols)r0  r8  s     r1  r:  zSymbol.get_all_symbols  s3     
nn 	0F--///	0/s   '313c              #     K   | j                   D ]5  }| |j                  j                         s"|j                  E d {    7 y 7 wr-  )r&  r  rS  children_recurse_anon)r0  r   s     r1  r<  zSymbol.children_recurse_anon"  sE      	/AG;;&&(....	/
 /s   >A
 AA
c                   g }| }|j                   r*|j                  |       |j                   }|j                   r*|j                          g }|D ]  }t        |j                  |j
                        }|j                  7|j                  ||j                  |j                  j                         f       f|j                  ||j                  d f        t        |      S r-  )
r  rx  reverser  r  r~  r/  r  r  r  )r0  r  r   rf  r  s        r1  rv  zSymbol.get_lookup_key+  s    
 hhNN1A hh 	 	:A&q{{ANNCC}}(

C!1!11==3N3N3PQR

C!1!1489	: ~r3  c                H   g }| }|j                   r*|j                  |       |j                   }|j                   r*|j                          g }g }|D ]B  }|j                  t        |j                  |j
                               |j                  d       D t        ||d      S rp  )r  rx  r>  r  r  r~  r  )r0  r  r   r  r  s        r1  r   zSymbol.get_full_nested_name?  s    hhNN1A hh 		 	$ALL-akk1>>JKU#	$ UIe<<r3  c           
         t         j                  rt         j                  d       | j                  |||||||d      }	 t	        |      S # t
        $ r Y y w xY w)Nz_find_first_named_symbol ->F)searchInSiblings)r8  r.  r  _find_named_symbolsrg  StopIteration)	r0  r  r  r~  templateShorthand	matchSelfrecurseInAnoncorrectPrimaryTemplateArgsr  s	            r1  _find_first_named_symbolzSymbol._find_first_named_symbolM  se    
 <=&&y.,'8)]'A8= ' ?	9 		s    
A 	AAc	              #  L   K   t         j                  rCt         xj                  dz  c_        t         j                  d       t         xj                  dz  c_        t         j                  d       t        j                   j                  t         j                  dz         d       t         j                  d       t         j                  d       t         j                  d       t         j                  d	       t         j                  d
       t         j                  d       t         j                  d|       t         j                  d|       |rt              sd dfd}	d fd}
 |
       D ]  }t         j                  rLt         j                  d       t        j                  |j                  t         j                  dz         d        |	|      sht         j                  rGt         xj                  dz  c_        t         j                  d       t         xj                  dz  c_        | t         j                  st         xj                  dz  c_         t         j                  rt         xj                  dz  c_        y y w)NrV  z_find_named_symbols:self:r   r  zidentOrOp:                  ztemplateParams:             ztemplateArgs:               ztemplateShorthand:          zmatchSelf:                  zrecurseInAnon:              zcorrectPrimaryTemplateAargs:zsearchInSiblings:           c                $   | j                   k7  ry| j                  d u d u k7  rysyr"t        | j                        t              k7  ry| j                  d u d u k7  ry| j                  r"t        | j                        t              k7  ryy)NFT)r  r  r<  r~  )r   r  r~  r  rD  s    r1  matchesz+Symbol._find_named_symbols.<locals>.matchesy  s    {{i'  D(n.DE!- ( q''(C,?? $&LD,@A~~q~~&#l*;; r3  c               3     K   } t         j                  rLt         j                  d       t        j	                  | j                  t         j                  dz         d       	 r|  r| j                  E d {    n| j                  E d {    | j                  y | j                  } t         j                  rLt         j                  d       t        j	                  | j                  t         j                  dz         d       7 7 |w)Nzsearching in self:rV  r   r  zsearching in sibling:)
r8  r.  r  r  r  	to_stringr  r<  r&  r#  )r   rE  rF  r0  s    r1  
candidatesz.Symbol._find_named_symbols.<locals>.candidates  s     A""""#78Q[[)<)<q)@ArJG  6666 {{**>>)NN&&&&'>?LLV-@-@1-D!E2LN  7*s%   A7D:D
;DDA;DD
candidate:rL  rU  r  )r   r8  rw   rB   rw   zGenerator[Symbol, None, None])r8  r.  r  r  r  r  rN  r  )r0  r  r  r~  rD  rE  rF  rG  rA  rL  rO  r   s   ```````     r1  rB  zSymbol._find_named_symbols]  s    
 1$561$w'LL(;(;a(?@bLI=yI=~N=|L=?PQ=yI=}M=?YZ=?OP%)l.F *.,G#'L	 	,	O(  	-A""""<0Q[[)<)<q)@ArJqz&&''1,'&&y1''1,'&&''1,'	- 1$ s   G(J$2A+J$AJ$c           
     	   t         j                  rot         xj                  dz  c_        t         j                  d       t         xj                  dz  c_        t         j                  d       t        j                  | j                  t         j                  dz         d       t         j                  d|       t         j                  ddj                  d	 |D                     t         j                  d
|       t         j                  d|       t         j                  d|       t         j                  d|       t         j                  d|       t         j                  d|	       t         j                  d|
       |r=|j                         t        |      k(  sB|j                         dz   t        |      k(  s#J t        |      |j                         dz   k  sJ |j                  }| }|j                  r%|j                  r|j                  }|j                  r||d   }|j                         s|j                  r~|j                  |j                  |||
      rFt        |      dk(  r7|dk(  r2|r0|j                  r$|j                  j                  |j                  k(  rnn|j                  }|j                  r~t         j                  rLt         j                  d       t        j                  |j                  t         j                  dz         d       d}|d d D ]  }|j                  }|j                   }|r |r|t        |      k  sJ ||   }|dz  }n d }n|r|t        |      k  r||   }|dz  }nd }|j#                  |||||||	      }|8 |||||      }|+t         j                  rt         xj                  dz  c_         y d}|} t         j                  rLt         j                  d       t        j                  |j                  t         j                  dz         d       |d   }|j                  }|j                   }|t        |      k  r|dz   t        |      k(  sJ ||   }n|t        |      k(  sJ d }|j%                  ||||||d|
      }t         j                  r$t'        |      }t         xj                  dz  c_        t)        |||||      S )NrV  z_symbol_lookup:rJ  r   r  znestedName:        ztemplateDecls:     r   c              3  2   K   | ]  }t        |        y wr-  rn  r  r   s     r1  r  z(Symbol._symbol_lookup.<locals>.<genexpr>  s     >]!s1v>]   zstrictTemplateParamArgLists:zancestorLookupType:ztemplateShorthand: zmatchSelf:         zrecurseInAnon:     zcorrectPrimaryTemplateArgs: zsearchInSiblings:  r   rE  rF  rA  rJ   zstarting point:r  rD  rE  rF  rG  r  Fzhandle last name from:)rD  rE  rF  rG  rA  )r8  r.  r  r  r  r  rN  r  r  rI  r  r  r  r  find_identifierr  r~  rH  rB  listr  )r0  r  templateDeclsonMissingQualifiedSymbolstrictTemplateParamArgListsancestorLookupTyperD  rE  rF  rG  rA  r  r  	firstNameiTemplateDeclr  r  r~  r  r.  r  s                        r1  _symbol_lookupzSymbol._symbol_lookup  s    1$011$w'LL(;(;a(?@bLI4jA4chh>]}>]6]^=?Z[46HI46GH4i@4mD=?YZ46FG& ,,.#m2DD,,.2c-6HHJ I }%)A)A)Ca)GGGG   %%+22 %%)aI((*"))#33I4G4G>GBOEU 4 W  J!O0Bg0MR[ , 3 3 , 3 3 = =ATAT T !#/#6#6L #)) 01LL//0C0Ca0GHbLQ #2J &	"DI,,L*(3}+====%2=%AN!Q&M%)N  MC4F$F%2=%AN!Q&M%)N!::"3#++E ; GF ~1,	2@,P>**++q0+ I!LM&	"P 78LL//0C0Ca0GHbLQ RyNN	((3}-- 1$M(::::*=9N C$6666!N22~|/9'E-	 3 /
 7mG1$!'<"+^\K 	Kr3  c                   t         j                  rt         xj                  dz  c_        t         j                  d       t         xj                  dz  c_        t         j                  ddj	                  d |D                     t         j                  d|       t         j                  d       t         j                  d d	        	 	 	 	 	 	 	 	 d&d
}| j                  |||dd ddddd
      J t        j                        }t        |      dk(  rMt         j                  rt         j                  d       t         xj                  dz  c_        t         j                  dj                         t         j                  dj                         t         j                  dj                         t         j                  d       t         j                  d d	        t         xj                  dz  c_        t        j                  j                  j                  j                        }t         j                  rt         xj                  dz  c_        |S t         j                  rft         j                  d       t         xj                  dz  c_        t         j                  dt        |             t         xj                  dz  c_        sCt         j                  r.t         j                  d       t         xj                  dz  c_        |d   S g }	g }
g }|D ]O  }|j                  |	j                  |       !|j                  r|j                  |       ?|
j                  |       Q t         j                  r]t         j                  dt        |	             t         j                  dt        |
             t         j                  dt        |             d'fd}t        |
      dk(  rd }n |       }d(fd}j                   dk7  rt        |
      dk  sJ  ||
d   |       j#                         }t         j                  rt         j                  d |       |
D ]s  }|j                  j                   dk7  r	 |||       |j                  j#                         }t         j                  rt         j                  d!|       ||k(  sk |||       u t        |	      dk(  rvt         j                  r[t         j                  d"       |t         j                  d#       nt         j                  d$       t         xj                  dz  c_        ||S  |       S t         j                  r1t         j                  d%|d u       t         xj                  dz  c_        ||j%                          |	d   }|j'                         |S ))NrV  z_add_symbols:ztdecls:r   c              3  2   K   | ]  }t        |        y wr-  rn  rT  s     r1  r  z&Symbol._add_symbols.<locals>.<genexpr>B  s     2Qa3q62QrU  z
nn:       z
decl:     z
location: r  c           	        t         j                  rt         xj                  dz  c_        t         j                  d       t         xj                  dz  c_        t         j                  d|       t         j                  d|       t         j                  d|       t         xj                  dz  c_        t        | |||d d d       S )NrV  z'_add_symbols, onMissingQualifiedSymbol:templateParams:identOrOp:     ztemplateARgs:  r  r  r  r  r~  r/  r  r%  )r8  r.  r  r  r  r  r  r~  s       r1  r[  z5Symbol._add_symbols.<locals>.onMissingQualifiedSymbolG  s     ""##q(#""#LM##q(#""#4nE""#4i@""#4lC##q(#)7'3"&T3 3r3  TFr\  r]  rD  rE  rF  rG  rA  r   z _add_symbols, result, no symbol:rd  re  ztemplateArgs:  zdeclaration:   zlocation:      rf  r  z_add_symbols, result, symbols:znumber symbols:zno declarationz
#noDecl:  z
#withDecl:z
#dupDecl: c            	        t         j                  rt         j                  d       t        j                  j                  j
                  j                        } t         j                  rt         j                  d       | S )Nz begin: creating candidate symbolrf  z end:   creating candidate symbol)r8  r.  r  r  r  r  r~  )r.  r/  r  r%  lookupResults    r1  makeCandSymbolz+Symbol._add_symbols.<locals>.makeCandSymbol  so    """"#EF<#<#<&2&<&<+7+F+F)5)B)B(3$+$8F """"#EFMr3  c                
   t         j                  r`t         xj                  dz  c_        t         j                  d       t         xj                  dz  c_        t         xj                  dz  c_        d|_        t        |       )NrV  redeclarationr  T)r8  r.  r  r  r  r+  )r.  
candSymbolr/  s     r1  handleDuplicateDeclarationz7Symbol._add_symbols.<locals>.handleDuplicateDeclaration  sd    &&''1,'&&7''1,'''1,'
 .2
*+FK@@r3  r  zcandId:zoldId: zno match, no emptyz$result is already created candSymbolzresult is makeCandSymbol()zAno match, but fill an empty declaration, candSybmol is not None?:
r  r8  r  r  r  r   r~  r  rw   r  )rw   r8  )r.  r8  rn  r8  rw   r:  )r8  r.  r  r  r  r`  rY  r  rI  r  r  r~  r  r/  rx  r  r  r  r4  r*  )r0  r  rZ  r/  r  r%  r[  r  r.  noDeclwithDecldupDeclr   rk  rn  ro  candIdoldIdrj  s      ```            @r1  r/  zSymbol._add_symbols9  s   
 1$/1$y#((2Q=2Q*QR|Z8|[9G9AdV<=	30K	358	3HW	3 +8	3" **:}+CGK>B=B5:9>FJ<A + C '''|++,w<1""""#EF##q(#""#4l6Q6QR""#4l6L6LM""#4l6O6OP""#4kB""_WIQtf#EF##q(#<#<#<&2&<&<+7+F+F)5)B)B(3$+$8F ""##q(#M?@1$0#g,?1$""""#34##q(# 1: 	#A}}$a ""q!"	# |S[9|S];|S\:	 	 x=AJ')JA %%38})))*8A;
C !..0F""""9f5" 
C %%00J>.vzB**88:&&&&y%8U?.vzB
C v;!""""#78)&&'MN&&'CD##q(#%!!%''""""Wd* ##q(#%!!# AYF {GT:Mr3  c                
   t         j                  r.t         xj                  dz  c_        t         j                  d       |J d }t         j                  rt         xj                  dz  c_        |j                  D ]  }t         j                  rLt         j                  d|j                  t         j                               t         xj                  dz  c_        |j                  rH || |       t         j                  r.t         j                  d       t         xj                  dz  c_        | j                  |j                  |j                  |j                  ddddd      }t        |      }t         j                  rt         j                  dt        |             |D cg c]  }|j                  r| }	}t         j                  rt         j                  d	t        |	             t        |	      d
k(  r4 || |       t         j                  rt         xj                  dz  c_        d }
|j                  +t         j                  rt         j                  d       |	d
   }
n|j                  j                         }t         j                  rt         j                  d|       |	D ]  }|j                  (t         j                  rt         j                  d       |}
7|j                  j                         }t         j                  rt         j                  d|       ||k(  s}|}
 n t         j                  rt         xj                  dz  c_        |
 || |       |j                  r|j                  |v r|
j                  s3|
j!                  |j                  |j                  |j"                         n\|
j                  |j                  k7  rt%        |
j                        }t'        d      }||
j                  |
j"                  |
j                  j(                  |fz  }t*        j-                  ||j                  |j"                  f       n|j                  j.                  |
j                  j.                  k(  rF|j                  j.                  dv r.|
j0                  j                  |j0                  j                  k(  rnQd}|d|
j                  d      z   z  }|d|j                  d      z   z  }t*        j-                  ||j                         |
j3                  |||        t         j                  rt         xj                  dz  c_        y y c c}w )NrV  zmerge_with:c                h    | j                   j                  |       | |_        |j                          y r-  )r&  rx  r  r  )r0  
otherChilds     r1  unconditionalAddz+Symbol.merge_with.<locals>.unconditionalAdd  s(    NN!!*- $J))+r3  zotherChild:
r  F)r  r  r~  rD  rE  rF  rG  rA  zraw candidate symbols:z non-duplicate candidate symbols:r   zno declaration in other childz
queryId:  zempty candidaterP  RDuplicate C++ declaration, also defined at %s:%s.
Declaration is '.. cpp:%s:: %s'.locationr,  r-  z1Internal C++ domain error during symbol merging.
z
ourChild:
z
otherChild:
r  )r8  r.  r  r  r&  rN  r  rB  r  r  r~  rY  rI  r/  r  r  r*  r%  r<  r   r  r  warningr  r  
merge_with)r0  r  docnamesr|  ry  rx  candiateIterrO  r   r  ourChildqueryIdr.  rt  r  msgs                   r1  r  zSymbol.merge_with  sv   1$}-   	, 1$// X	;J""""?J4H4HI\I\4]^##q(#)) z2&&&&'89''1,'33$..)88'44"'5#!& 4 (L l+J""""#;S_M",FQA4E4EqFGF""""#Es7|T7|q  z2&&''1,'H%%-&&&&'FG"1:$00>>@&&&&|W=% F))1!.."../@A $* #//==?F****<@(#) ""##q(# z2%%**<*<*H++(()?)?)3););Z__N%%););;x334D @ AC!1!18==!)!5!5!C!CT!K KCNN3*2D2Djoo1VNW"..99$00;;<&22==>?$OO77:;L;L;X;XX  S}x/A/A!/DDD0:3G3G3JJJsZ5G5GH
Hc:qX	;r 1$ I Gs   $U6Uc                "   t         j                  r.t         xj                  dz  c_        t         j                  d       |r|j                  }ng }| j                  ||d d d       }t         j                  rt         xj                  dz  c_        |S )NrV  z	add_name:)r/  r  r%  )r8  r.  r  r  r  r/  )r0  r  r  rZ  r  s        r1  add_namezSymbol.add_name\  s}    1${+*44MM
M,0$T   K1$
r3  c                x   t         j                  r.t         xj                  dz  c_        t         j                  d       |J |J |J |j                  }|j
                  r|j
                  j                  }ng }| j                  |||||      }t         j                  rt         xj                  dz  c_        |S )NrV  zadd_declaration:)r8  r.  r  r  r  r  r  r/  )r0  r/  r  r%  r  rZ  r  s          r1  add_declarationzSymbol.add_declarationk  s    1$12&&&""" %%
%%'66@@MM
M;QUV1$
r3  c                   t         j                  rt         xj                  dz  c_        t         j                  d       t         xj                  dz  c_        t         j                  d|       t         j                  d|       t         j                  d|       t         j                  d|       t        j                  | j                  t         j                  dz         d       t         xj                  d	z  c_        | }|t         j                  r~t         xj                  d	z  c_        t         j                  d
       t        j                  |j                  t         j                  dz         d       t         xj                  d	z  c_        |r|j                  |k(  r|S |r|j                  n|j                  }|D ]  }|j                  |k(  s|c S  |s	 y |j                  }|y )NrV  zfind_identifier:zidentOrOp:       zmatchSelf:       zrecurseInAnon:   zsearchInSiblings:r   r  r  ztrying:)r8  r.  r  r  r  r  rN  r  r<  r&  r#  )r0  r  rE  rF  rA  currentr  r   s           r1  rX  zSymbol.find_identifier}  s    1$121$2I>2I>2MB24DELL(;(;a(?@bLI1$!""##q(#""9-W..v/B/BQ/FGRP##q(#W..);8Ew447K\K\H ;;)+H $ **G ! r3  c           
        t         j                  rGt         xj                  dz  c_        t         j                  d       t         xj                  dz  c_        | }|j                  D ]K  \  }}}|Dd }|j
                  D ]0  }|j                  |j                  j                         |k(  s.|} n |}n0|j                  }|j                  }	|j                  |||	dddd      }t         j                  rt         j                  d|       t         j                  d|       t         j                  d|       |8t        j                  |j                  t         j                  dz         d	       nt         j                  d
       |#t         j                  rt         xj                  dz  c_         y  t         j                  rt         xj                  dz  c_        |S )NrV  zdirect_lookup:FrW  zname:          rd  zid:            r   r  z	not foundr  )r8  r.  r  r  r  r&  r/  r  r  r~  rH  r  r  rN  )
r0  rf  r   r  r  r:  r  candr  r~  s
             r1  direct_lookupzSymbol.direct_lookup  s   1$/01$), 	%D.#KK D''/ ''5573>"  NN	#00..y/=|AF9>=BJO / Q """"#4d;""#4nE""#4c:=LLV-@-@1-D!E2LN&&{3y&&''1,'=	> 1$r3  c                .   t         j                  r-t         xj                  dz  c_        t         j                  d       t         xj                  dz  c_        t         j                  d       t        j                  | j                  t         j                  dz         d       t         j                  d|       t         j                  d|       t         j                  d|       t         j                  d	|       t         j                  d
|       t         j                  d|       t         j                  d|        G d dt              	 	 	 	 	 	 	 	 dfd}	 | j                  |||d||||d|
      }	|	*t         j                  rt         xj                  dz  c_        yt        |	j                        }
t        |
      dk7  r-t         j                  rt         xj                  dz  c_        |
d fS |	j                  j                  $|	j                  j                  j                  dk(  ry|	j                  j                  |	j                   d d |||d      }t         j                  rt         xj                  dz  c_        ||gd fS y# $ r Y yw xY w)NrV  z
find_name:rJ  r   r  znestedName:       ztemplateDecls:    ztyp:              ztemplateShorthand:zmatchSelf:        zrecurseInAnon:    zsearchInSiblings: c                      e Zd Zy)8Symbol.find_name.<locals>.QualifiedSymbolIsTemplateParamNrC  r@  r3  r1  QualifiedSymbolIsTemplateParamr    s    r3  r  c                T    | j                   | j                   j                  dk(  ry )Nr,  )r/  r  )r  r  r  r~  r  s       r1  r[  z2Symbol.find_name.<locals>.onMissingQualifiedSymbol  s.     ''3++66/I88r3  Frh  )NtemplateParamInQualifiedr  r  r   r,  rW  rp  )r8  r.  r  r  r  r  rN  ry  r`  rY  r  rI  r  r/  r  rH  r  )r0  r  rZ  r  rD  rE  rF  rA  r[  rj  r  r.  r  s               @r1  	find_namezSymbol.find_name  sf    1$|,1$w'LL(;(;a(?@bLI3Z@3]C3S935FG3Y?3]C35EF	Y 		0K	58	 4C	 HU		4..z=/GKPBEAR9B=JJO@P / RL ""##q(#<''(s8q=""##q(#9$$00<((44???R7 **CC""D$/9'E D K 1$8T>!; . 	43	4s   J JJc                   t         j                  r.t         xj                  dz  c_        t         j                  d       |j                  }|j
                  r|j
                  j                  }ng }	 	 	 	 	 	 	 	 d
d}| j                  |||d||||dd
      }	t         j                  rt         xj                  dz  c_        |	y t        |	j                        }
t        |
      dk(  ry t        |	j                  |	j                  |	j                  |	j                  |dd	      }|j                         }|
D ]B  }|j                   |j                   j                         }||k(  s0|j#                          |c S  |j#                          y )NrV  zfind_declaration:c                     y r-  r@  rg  s       r1  r[  z9Symbol.find_declaration.<locals>.onMissingQualifiedSymbol  s     r3  Frh  r   fakeDocnameForQuery*   rf  rp  )r8  r.  r  r  r  r  r  r`  rY  r  rI  r  r  r  r~  r  r/  r4  )r0  r/  r  rD  rE  rF  r  rZ  r[  rj  r  querySymbolr  r.  rt  s                  r1  find_declarationzSymbol.find_declaration  s    1$23 %%
%%'66@@MM	0K	58	 4C	 HU	 **:}+CGL>A=N5>9FFK<A + C 1$|++,w<1L$=$='3'='=,8,G,G*6*C*C)4%:"$& ++- 	F!!)''557F ""$	 	r3  c                    t         j                  |z  g}| j                  s|j                  d       nq| j                  rW|j                  t        | j                               |j                  d       |j                  t         j                  |z         | j                  r%|j                  t        | j                               n$|j                  t        | j                               | j                  r$|j                  t        | j                               | j                  r}|j                  d       | j                  r|j                  d       |j                  d| j                  j                  z   dz          |j                  t        | j                               | j                  r=|j                  d       |j                  | j                         |j                  d       |j                  d       d	j                  |      S )
Nr  
z: z!!duplicate!! r%  r  z	(r3  r   )r8  r  r  rx  r  r<  r  r/  r~  r  r  r  r  )r0  indentr  s      r1  rN  zSymbol.to_stringH  sj   ))F23{{JJt""

3t2234

4 

655>?~~

3t~~./

3t//01  

3t0012

4 ''JJ/0

3!1!1!<!<<tCD

3t//01<<JJuJJt||$JJsO

4wws|r3  c                    | j                  |      g}| j                  D ]%  }|j                  |j                  |dz                ' dj	                  |      S )NrV  r   )rN  r&  rx  r5  r  )r0  r  r  r   s       r1  r5  zSymbol.dumpd  sM    ~~f%& 	+AJJqvvfqj)*	+wws|r3  )rz  r   rw   r:  rw   r:  )rf  r<  r  r   rw   r:  )r  r  r  z"ASTIdentifier | ASTOperator | Noner  z2ASTTemplateParams | ASTTemplateIntroduction | Noner~  r   r/  zASTDeclaration | Noner  r  r%  z
int | Nonerw   r:  )r/  r9  r  r<  r%  re   rw   r:  r  r<  rw   r:  )rw   zIterator[Any]rQ  )rw   r  r  )r  r  r  r   r~  r  rD  rB   rE  rB   rF  rB   rG  rB   rw   r8  )r  r  r  r   r~  r  rD  rB   rE  rB   rF  rB   rG  rB   rA  rB   rw   r  )r  r  rZ  	list[Any]r[  zTCallable[[Symbol, ASTIdentifier | ASTOperator, Any, ASTTemplateArgs], Symbol | None]r\  rB   r]  r<  rD  rB   rE  rB   rF  rB   rG  rB   rA  rB   rw   r  )r  r  rZ  r  r/  r9  r  r<  r%  re   rw   r8  )r  r8  r  r
  r|  r7   rw   r:  r-  )r  r  r  r  rw   r8  )r/  r9  r  r<  r%  re   rw   r8  )
r  r  rE  rB   rF  rB   rA  rB   rw   r8  )rf  r  rw   r8  )r  r  rZ  r  r  r<  rD  rB   rE  rB   rF  rB   rA  rB   rw   ztuple[list[Symbol], str])r/  r9  r  r<  rD  rB   rE  rB   rF  rB   rw   r8  )r  re   rw   r<  )%r=  r>  r?  r  r  r.  debug_show_treer  r  staticmethodr  r  r   r2  r*  r(  r4  r6  r:  r  r<  rv  r   rH  rB  r`  r/  r  r  r  rX  r  r  r  rN  r5  __classcell__r!  s   @r1  r8  r8    s   LLO@  
$/
&1>&1!S&1  #&1 2G&1 %	&1 -7	&1 <@	&1P1 "%H%"0
 / /(=14DS48EI 15 SW '-	 S%,/S%?NS%/3S%@DS% ,0S% NRS% /3	S% 8H	S%jEK!EK !EK#
	EK &*EK @CEK  EK -1EK EK :>EK EK 
EKNv"0v;>vFIvNTvpi%(i%-1i%X HL!DPV!$,/4:$#'8<PT#>'RKK/3K@DK!%K9=KBZKZ4$(49=4BH4l8r3  r8  c                     e Zd Zed4d       Zed        Zed        Zd4dZd5dZd6dZ	d6dZ
	 	 d7dZd8d	Zd9d
Zd:dZ	 	 d;dZd<dZd6dZd6dZd=dZ	 	 	 	 d>dZd=dZd=dZd6dZ	 d?	 	 	 	 	 d@dZdAdZdBdZdCdDdZdEdZdFdZdGdZdHdZd?dIdZ 	 	 	 	 	 	 	 	 dJdZ!	 d?	 	 	 dKdZ"dL	 dMd!Z#dNdOd"Z$	 	 	 	 	 	 dPd#Z%dQd$Z&dRd%Z'dSd&Z(dTd'Z)dUd(Z*dVd)Z+dWd*Z,dXd+Z-dYd,Z.dZd-Z/	 	 d[d.Z0	 dC	 	 	 	 	 	 	 d\d/Z1d]d0Z2d^d1Z3d_d2Z4d`d3Z5y )aDefinitionParserc                     y)NC++r@  r6  s    r1  languagezDefinitionParser.languagel  rG  r3  c                .    | j                   j                  S r-  )configcpp_id_attributesr6  s    r1  id_attributeszDefinitionParser.id_attributesp  s    {{,,,r3  c                .    | j                   j                  S r-  )r  cpp_paren_attributesr6  s    r1  paren_attributesz!DefinitionParser.paren_attributest  s    {{///r3  c                z   | j                   dk7  ry | j                  }| xj                  dz  c_        d}	 | j                  r| j                  d       n;| j                   dk(  r|s| xj                  dz  c_        n*| j                   dk(  rd}nd}| xj                  dz  c_        o| j                  || j                   S )N"rV  FTz$Unexpected end during inside string.\)current_charposeoffail
definition)r0  startPosescapes      r1  _parse_stringzDefinitionParser._parse_stringx  s    #88Axx		@A""c)&A""d*HHMH  x11r3  c                    d fd} j                           j                  d      r
t               S  j                  d      rt        d      S  j                  d      rt        d      S  j                  } j                  t              rC j                  t              }t         j                  | j                         }|r|S  ||      S t        t        t        t        fD ]Z  } j                  |      s j                  t              }t         j                  | j                         }|r|c S  ||      c S   j                         }| |t!        |            S  j                  t"              rK j$                  j'                  d      } j$                  j'                  d      }		 t)        ||	      }
 |
      S y # t*        $ r} j-                  d	|z         Y d }~+d }~wt.        $ r  j-                  d
       Y Jw xY w)Nc                t    j                  t              s| S t        j                        }t	        | |      S r-  )matchudl_identifier_rerF  matched_textr  )r  r  r0  s     r1  _udlz-DefinitionParser._parse_literal.<locals>._udl  s4    ::/0 "$"3"34E(%88r3  rm   r   Tr^   FrV  r  z8Can not handle character literal. Internal error was: %szJCan not handle character literal resulting in multiple decoded characters.)r  r  rw   r  )skip_ws	skip_wordr  r  r  r  r!   r"   r  r  r   r#   r%   r'   r&   r  r  r    
last_matchgroupr	  UnicodeDecodeErrorr  r   )r0  r  r  	hasSuffixfloatLitregexintLitstringr}  r  charLitr   s   `           r1  _parse_literalzDefinitionParser._parse_literal  s   	9 	>>)$$&&>>&!$T**>>'"$U++hh::&'

#:;I'DHH(EFHH~%'(*:< 	(Ezz%  JJ'AB	)$//#dhh*GH!M<'	( ##%(011 ::o&__**1-F??((+DH(6 =  & Z		TWXXYY7 H		 G HHs   1G 	HG((HHc                f   | j                   dk7  ry | xj                  dz  c_        | j                          | j                  d      rq| j	                  t
              s| j                  d       | j                  }| j                         }| j                  d      s| j                  d       t        d ||      S | j                  }	 | j                          | j                         }| j                          | j	                  t
              s| j                  d       | j                  }| j                          | j                  d      s| j                  d       | j                  d      rt        ||d       S | j	                  t
              s| j                  d       || j                  k7  r"| j                  d|d| j                  d       | j                         }| j                          | j                  d      s| j                  d       t        |||      S # t        $ r}|| _        	 | j                         }| j                          | j                  d      s| j                  d	       n*# t        $ r}| j                  |d
f|dfgd      |d }~ww xY wt        |      cY d }~S d }~ww xY w)Nr0  rV  r2  z6Expected fold operator after '...' in fold expression.r3  z'Expected ')' in end of fold expression.z@Expected fold operator after left expression in fold expression.z6Expected '...' after fold operator in fold expression.z0Expected ')' in end of parenthesized expression.zIf fold expressionzIf parenthesized expressionz5Error in fold expression or parenthesized expression.z=Expected fold operator or ')' after '...' in fold expression.z)Operators are different in binary fold: 'z' and ''.z+Expected ')' to end binary fold expression.)r  r  r  skip_string_and_wsr  _fold_operator_rer  r  _parse_cast_expressionskip_stringr(  r   _parse_expression_make_multi_errorr<  )r0  r,  r-  r  r+  eFoldr  eExprs           r1  _parse_fold_or_paren_expressionz0DefinitionParser._parse_fold_or_paren_expression  sZ    #A""5)::/0		RS""B335I##C(		CDtR33hh	%LLN224HLLN::/0		\]""BLLN**51		RS  C xT22zz+,IIUV"""IIT..0 1//1	$IICD8R335  	%DH	W,,.'',IIPQ" W,,019:. KL RWWW
  $$	%sD   BH 	J0&J+.AI10J+1	J:JJJ+%J0+J0c                   | j                          | j                         }||S | j                          | j                  d      r
t               S | j	                         }||S | j                         }|t        |      S y r#  )r  r  r  r!  r  _parse_nested_namerL  )r0  r  r1  s      r1  _parse_primary_expressionz*DefinitionParser._parse_primary_expression  s|     	!002?J>>&!!##224?J$$&>"2&&r3  c                T   | j                          | j                  |      sy| j                  |      rg dfS g }d}	 | j                          | j                         }| j                          | j                  d      r|j	                  t        |             n|j	                  |       | j                          | j                  |      r	 ||fS | j                  d      s| j                  d| d| d       | j                  |k(  r!|d	k(  r| xj                  d
z  c_        d}	 ||fS )Nr  FTr2  r   z	Error in z, expected ',' or 'r  r&  rV  )	r  r  r  _parse_initializer_clauserx  r  r  r  r  )r0  r  opencloser  r  r?  s          r1  _parse_initializer_listz(DefinitionParser._parse_initializer_list  s    	&&t,E"u99;LLN113DLLN&1$78T"LLN& m## **3/		IdV+>ugRHI  E)eslA $m### r3  c                J    | j                  ddd      \  }}|y t        |      S )Nzparenthesized expression-listr0  r3  )r  r  r  s      r1  _parse_paren_expression_listz-DefinitionParser._parse_paren_expression_list:  s5      $;;<[<? F}=&&r3  c                N    | j                         }||S | j                  d      S NF
inTemplate)_parse_braced_init_list_parse_assignment_expression)r0  bracedInitLists     r1  r  z*DefinitionParser._parse_initializer_clauseG  s0    557%!!00E0BBr3  c                L    | j                  ddd      \  }}|y t        ||      S )Nzbraced-init-listr%  r&  )r  r  r  s      r1  r  z(DefinitionParser._parse_braced_init_listM  s5      $;;<NPSUXY}= 66r3  c                J    | j                         }||S | j                         S r-  )r  r  )r0  parens     r1  *_parse_expression_list_or_braced_init_listz;DefinitionParser._parse_expression_list_or_braced_init_listU  s,     113L++--r3  c                
    d }d } j                          d }t        D ]  } j                  |      s|} n |d} j                  d      s j	                  d|z          j                  d      } j                           j                  d      s j	                  d|z          j                  d      s j	                  d|z         d+ fd	} j                  d
g|      } j                           j                  d
      s j	                  d|z         t        |||      }n j                  d      rrd} j                  d      s j	                  d        j                  }	  j                  d      }t        |d      } j                  d
      s j	                  d       n j                  }	  j                         }d}g }	  j                          |dv r j                  d       r] j!                         } j                           j                  d!      s j	                  d"       |j                  t#        |              j                  d#      rz j                  d$      r xj                  d%z  c_	        nS j                  d&      r xj                  d'z  c_	        n, j%                         }|j                  t'        |              j                  d(      rS j                  d$      r xj                  d'z  c_	        n, j%                         }|j                  t)        |             s j                  d)      r|j                  t+                       j                  d*      r|j                  t-                      ˉ j/                         }||j                  t1        |             	 t3        ||      S # t        $ r}	| _	        	 d+ fd} j                  d
g|      }t        |d      } j                  d
      s j	                  d       nZ# t        $ rN}
| _	        d}|dz  }g }|j                  |	df       |j                  |
df        j                  ||      |
d }
~
ww xY wY d }	~	d }	~	ww xY w# t        $ r}| _	        	  j                  dd      }d} j                           j                  dk7  r  j                  dk7  r j	                  d       nZ# t        $ rN}| _	        d}|dz  }g }|j                  |df       |j                  |df        j                  ||      |d }~ww xY wY d }~d }~ww xY w),Nr  r   zExpected '<' after '%s'.Fr   z Expected '>' after type in '%s'.r0  zExpected '(' in '%s'.c                 $     j                         S r-  r  r6  s   r1  parserz:DefinitionParser._parse_postfix_expression.<locals>.parser  s    --//r3  r3  zExpected ')' to end '%s'.r   zExpected '(' after 'typeid'.T)r  z%Expected ')' to end 'typeid' of type.c                 $     j                         S r-  r  r6  s   r1  r  z:DefinitionParser._parse_postfix_expression.<locals>.parser  s    #5577r3  z+Expected ')' to end 'typeid' of expression.zError in 'typeid(...)'.z Expected type or expression.If typeIf expressionr?  operatorCasttypeOperatorCastr%  z3Expecting '(' or '{' after type in cast expression.zError in postfix expression,z% expected primary expression or type.zIf primary expression)r?  r  r   rc  rd  z*Expected ']' in end of postfix expression.rl  r   r  z..rU  r   r   r   rw   r  )r  r  skip_word_and_wsr  r  _parse_typer  _parse_expression_fallbackr  r  r  r   rx  r  r  r  r  r_  r  ri  rq  rw  r  r  r  r  )r0  
prefixTyper}  r  r   r  r  r?  r  eTyper  headererrorseOutereInnerr  r  r  s   `                 r1  _parse_postfix_expressionz*DefinitionParser._parse_postfix_expression]  s   , 
" 	A$$Q'	 J##C(		4t;<""5)CLLN**3/		<tCD##C(		1D89022C5&ADLLN##C(		5<=$T35F""8,!J**3/		89((CL&&u-"3t4'',IIEF( ((CM779#
2 )+	LLN77**3/113DLLN++C0		"NO$$_T%:;##C('',A))$/A#668!(()9$)?@ ##D)'',A#668!(()B4)HI ##D)$$]_5##D)$$]_5AACC  !3C!89fi00q # LL8::C5&ID&tE:F++C0		"OP& L"DH6F==FFMM5)"45MM5/":;00@eKLL. # MM "--e^DF!3J
 LLN((C/D4E4E4L		"WX& M"DH;FEEFFMM6+B"CDMM69"5600@fLMMs}   *A O 8R 	RR#AP,+R,	R5A	Q>>RRR	UU%AS98U9	UA	UUUUc                $   | j                          t        D ]L  }|d   dv r| j                  |      }n| j                  |      }|s0| j	                         }t        ||      c S  | j                  d      r&| j                  d      r| j                  d      s| j                  d       | j                  t              s| j                  d       t        | j                        }| j                          | j                  d      s| j                  d	       t        |      S | j                  d      rO| j                  d
      }| j                          | j                  d      s| j                  d       t        |      S | j!                         }t#        |      S | j                  d      rq| j                  d      s| j                  d       | j                  d
      }| j                          | j                  d      s| j                  d       t%        |      S | j                  d      ro| j                  d      s| j                  d       | j'                         }| j                          | j                  d      s| j                  d       t)        |      S | j*                  }| j                  d      }| j                          | j                  d      s|| _        nd}| j                  d      r| j                  d       |r&| j-                  d       }	| j/                  d
d      }
n| j                  d       | j1                         }t3        ||t5        	
      |      S | j*                  }| j                  d      }| j                          | j                  d      s|| _        | j9                         S | j                  d      }|r"| j                  d      s| j                  d       | j	                         }t7        |||      S )Nr   r  rz   r2  r0  z Expecting '(' after 'sizeof...'.z%Expecting identifier for 'sizeof...'.r3  z!Expecting ')' to end 'sizeof...'.FnamedzExpecting ')' to end 'sizeof'.r;   zExpecting '(' after 'alignof'.zExpecting ')' to end 'alignof'.rj   zExpecting '(' after 'noexcept'. Expecting ')' to end 'noexcept'.r  ri   TzYSorry, neither new-placement nor parenthesised type-id in new-epression is supported yet.r  r  	paramModezASorry, parenthesised type-id in new expression not yet supported.rU   rc  rd  z(Expected ']' in array delete-expression.)r  _expression_unary_opsr  r  r  r  r  r  r  r  r$   rF  r  r  r  r  _parse_unary_expressionr  r  r  r  r  _parse_decl_specs_parse_declaratorr  r  r  r  r  )r0  r,  r  r?  r  r  r  r  r  r  r  r  r  s                r1  r  z(DefinitionParser._parse_unary_expression  s    	' 	0B!u}nnR(&&r*224%b$//	0   *&&u-..s3II@Azz-0IIEF%d&7&78'',IIAB)%00&&s+&&U&3'',II>?$S))//1D &&  +**3/		:;"""/CLLN##C(		;<!#&&  ,**3/		;<))+DLLN##C(		<="4((hh!!$'$$U+DH K&&s+ 		 ? @  222>	--EU-K		]^AACCfk79d3KSQQhh!!$'$$X.DH --// ++C0ET44S9		DE..0D 55r3  c                   | j                   }| j                          | j                  d      rP	 | j                  d      }| j                  d      s| j	                  d       | j                         }t        ||      S | j                         S # t        $ rn}|| _         	 | j                         cY d }~S # t        $ r@}g }|j                  |df       |j                  |df       | j                  |d      |d }~ww xY wd }~ww xY w)Nr0  Fr3  z Expected ')' in cast expression.zIf type cast expressionzIf unary expressionzError in cast expression.)r  r  r  r  r  r  r  r   r  rx  r  )r0  r  r  r?  exCastexUnaryerrss          r1  r  z'DefinitionParser._parse_cast_expressionQ  s   hhC [&&u-'',II@A224"3-- //11 # 	[[7799& [DKK)B CDKK*? @A001LNSZ[	[		[s<   AB 	DD B4.D4	C==;C88C==D  Dc                2    	 	 	 	 	 	 dfd | d|      S )Nc                \    dz   t        t              k(  rd fd}nd
 fd}g }g }|j                   ||             	  j                          |r j                  dk(  rn j
                  }d}t           D ]  }|d   d	v r j                  |      s j                  |      s.|d
k(  r& j                  d
k(  r xj
                  dz  c_         n1	  ||      }	|j                  |	       |j                  |       d} n |snt        ||      S # t        $ r
 | _        Y w xY w)NrV  c                $    j                         S r-  )r  r  r0  s    r1  r  zYDefinitionParser._parse_logical_or_expression.<locals>._parse_bin_op_expr.<locals>.parserx  s    6688r3  c                      dz   |       S )NrV  r  r@  )r  _parse_bin_op_expropIdr0  s    r1  r  zYDefinitionParser._parse_logical_or_expression.<locals>._parse_bin_op_expr.<locals>.parser{  s    -dD1HTTr3  r  Tr   Fr   r\  r   r  rB   rw   r  )
rI  _expression_bin_opsrx  r  r  r  r  r  r   r  )r0  r  r  r  r  r  r  oneMorer,  r?  r  s   ``        r1  r  zIDefinitionParser._parse_logical_or_expression.<locals>._parse_bin_op_expru  s.   ax32339UECLL:67$"3"3s":hh-d3 'B!u(#~~b1$#//3$SyT%6%6#%=A'%<T*

2"&#'( 7 8  s++	 + '#&'s   -DD+*D+r   r  )r0  r  r  re   r  rB   rw   r  r@  )r0  r  r  s     @r1  _parse_logical_or_expressionz-DefinitionParser._parse_logical_or_expressioni  s2    '	,%('	,6:'	,?L'	,P "$jAAr3  c                   | j                          | j                  d      sy | j                         }| j                          | j                  d      s| j                  d       | j	                  |      }t        |||      S )Nr  r  z=Expected ":" after then-expression in conditional expression.)r  r  r  r  r  r  )r0  
orExprHeadr  r  r  s        r1  "_parse_conditional_expression_tailz3DefinitionParser._parse_conditional_expression_tail  so    
 	$))+$IIUV44Z@!*hAAr3  c                    | j                  |      }| j                  ||      }||S t        D ]K  }|d   dv r| j                  |      s| j	                  |      s.| j                         }t        |||      c S  |S )Nr  r   anox)r  r  _expression_assignment_opsr  r  r  r,  )r0  r  r+  condExprr,  r-  s         r1  r  z-DefinitionParser._parse_assignment_expression  s     44
4K::8ZPO, 	>B!u~~b)''+668I$Xr9==	> r3  c                V    | j                  |      }| j                  ||      }||S |S Nr  )r  r  )r0  r  orExprr#  s       r1  _parse_constant_expressionz+DefinitionParser._parse_constant_expression  s9     22j2I::6:NOr3  c                    | j                  d      g}	 | j                          | j                  d      sn"|j                  | j                  d             Dt	        |      dk(  r|d   S t        |      S )NFr  r   rV  r   )r  r  r  rx  rI  r4  r6  s     r1  r  z"DefinitionParser._parse_expression  sw     22e2DELLN##C(LL::e:LM	 
 u:?8O&&r3  c                n   | j                   }	  |       S # t        $ r4}|r| j                  s | j                  d|z         || _         Y d }~nd }~ww xY w|J | j	                          | j                   }| j                  t              r| j                  }nddddd}g }	| j                  st        |	      dk(  r| j                  |v rn| j                  |v r|	j                  || j                            n0t        |	      dkD  r"| j                  |	d   k(  r|	j                          | xj                   d	z  c_         | j                  st        |      dkD  r | j                  r| j                  d
|z         | j                  || j                    j                         }t!        |j                               S )NzBParsing of expression failed. Using fallback parser. Error was:
%sr3  r&  rd  r   )r0  r%  rc  r   r   r  rV  z0Could not find end of expression starting at %d.)r  r   allowFallbackExpressionParsingwarnr  r  
_string_rer  r  rI  r  rx  rB  r  r  stripr=  )
r0  r  r  allowprevPosr   r  r  bracketsr  s
             r1  r  z+DefinitionParser._parse_expression_fallback  s    ((		8O 	  C CII (*+, -DHH	 88::j!%%E !s3?H!#GhhLA%$*;*;s*B$$0NN8D,=,=#>?\A%$*;*;wr{*JKKMA hh 3x!|		L$% &OOHTXX6<<>Eu{{}--s    	A*AAc                   | j                          | j                  t              rt        | j                        S dD ]~  }| j                  |      s| j                          | j                  d      r=| j                          | j                  d      s| j                  d|z   dz          |dz  }t        |      c S  | j                  d      rV| j                          | j                  t              s| j                  d       t        | j                        }t        |      S | j                  d	d
      }t        |      S )N)ri   rU   rc  rd  zExpected "]" after  "operator z["r   rg  z%Expected user-defined literal suffix.Fr  r  r  )r  r  _operator_rerT  r  r  r  r  r$   rF  ra  r  ri  )r0  r,  rJ  r  s       r1  _parse_operatorz DefinitionParser._parse_operator  s    ::l#%d&7&788 " 		*B>>"%LLN$'',II>CdJKd
%b))		* D!LLN::m,		AB&t'8'89J%j11 e>Bt$$r3  c                j   | j                          | j                  d      sy | j                  d      rt        g d      S g }g }d}	 | j                  }d}d}	 | j                  d      }| j                          | j                  d      r'd}d}| j                  d      sK| j                  d       n9| j                  d      rd}n%| j                  d      rd}n| j                  d	       |j                  |       |r|rJ n|rJ t        ||      S # t        $ r}|j                  |d
f       || _        	 | j                  d      }	| j                          | j                  d      r'd}d}| j                  d      sK| j                  d       n9| j                  d      rd}n%| j                  d      rd}n| j                  d	       |j                  t        |	             n@# t        $ r4}|| _        |j                  |df       d}
| j                  ||
      |d }~ww xY wY d }~1d }~ww xY w)Nr   r   Fr  r2  Tz3Expected ">" after "..." in template argument list.r   z6Expected "...>", ">" or "," in template argument list.zIf type argumentr  zIf non-type argumentz(Error in parsing template argument list.)r  r  r  r  r  r  r  rx  r   r'  rr  r  )r0  
prevErrorsr~  r{  r  parsedComma	parsedEndr  r   r  r  s              r1  _parse_template_argument_listz.DefinitionParser._parse_template_argument_list1  s;    	&&s+C "2u--
?A((CKI%L''e'4**51$(M $I++C0		"WX%%c* $I%%c*"&KIIVW##D)0 &&$$$[ \ |];;7 # L!!1&8"9:L ;;t;LELLN..u5(,$(	#//4 II&[\))#.$(	))#.&*		"Z[ ''(>u(EF& L"DH%%q*@&ABGF00VD!K	L G#Ls>   B$D 
H2H-9B-G'&H-'	H$0/HH$$H--H2c                   g }g }| j                          d}| j                  d      rd}	 | j                          t        |      dkD  r| j                  d      }nd}|j	                  |       d }| j                  d      r| j                         }nz| j                  t              s2|rt        |      dkD  r|j                          n| j                  d       | j                  }|t        v r| j                  d|z         t        |      }| j                  }	 | j                         }	|j	                  t#        ||	             | j                          | j                  d      s|r| j                  d	       nPt%        |||      S # t        $ r.}
|| _        d }	| j                   j	                  |
       Y d }
~
d }
~
ww xY w)
NFr  Tr   r   rn   z#Expected identifier in nested name.z3Expected identifier in nested name, got keyword: %sz.Expected '::' in pointer to member (function).)r  r  rI  r  rx  r4  r  r$   rB  r  r  	_keywordsrF  r  r9  r   otherErrorsr  r  )r0  memberPointerr  r  r  r   r  rJ  r  r~  exs              r1  r  z#DefinitionParser._parse_nested_nameq  s   ,. "	D!FLLN5zA~00< X&59I$$Z0 002	zz-0$Ua!IICD!..
*II 02<= >)*5	 ((C,#AAC
 LL-iFGLLN##D) IINOK L UIv66 # ,#  ''++,s   F 	F?$F::F?c                ,   d }d }g }d }g }| j                          | j                  t              r.| j                  }|j	                  |       |dv r|| j                  d| d| d       |}n|dv r|| j                  d| d| d       |}n|dk(  r;t        |      dk7  r| j                  d| d|d    d       |j	                  |       nh|dk(  rCt        |      dk7  r#|d   dk7  r| j                  d| d|d    d       |j	                  |       n |d	v r|| j                  d| d| d       |}| j                          | j                  t              r.t        |      dk(  ry |d
v rl|| j                  d| d| d       || j                  d| d| d       t        |      dk7  r	| j                  d| ddj                  |       d       n|dk(  rR|| j                  d| d| d       t        |      dk7  r| j                  d| ddj                  |       d       n|dk(  r|| j                  d| d| d       ng|dv rR|| j                  d| d| d       t        |      dk7  r:| j                  d| ddj                  |       d       n|dk(  rP|| j                  d| d| d       t        |      dk7  r| j                  d| ddj                  |       d       n|dk(  r|| j                  d| d| d       t        |      dkD  r'| j                  d| ddj                  |       d       t        |      dk(  rZ|d   dk7  rR| j                  d| ddj                  |       d       n*||&| j                  d| d       nd| }t        |      g }||j	                  |       ||j	                  |       |j                  |       ||j	                  |       t        ||      S )N)r?   r   rB   rF   r   rG   rH   rI   re   r   r   r_   rW   r   r   r   r   zCan not have both z and rl  )ry   r   rx   r   rf   )
_Imaginary_Complex)r?   r   rB   r   rG   rH   rI   r   r   r   r   r1  rF   re   )r   r   r_   rW   rV  zCan not have z without a floating point type.zUnhandled type )r  r  _simple_type_specifiers_rer  rx  r  rI  r  r  extendr  )	r0  modifier
signednesswidthr  r  r   r  r  s	            r1  _parse_simple_type_specifiersz.DefinitionParser._parse_simple_type_specifiers  sm   #!%
jj34!!ALLO J J
 ?II 21#U3%qAB,,)II 21#U:,aHI
gu:?II 21#U58*AFGQfu:?uQx6'9II 21#U58*AFGQ00'II 21#U8*AFGLLN7 jj348 u:? H H #		.se5
!DE%		.se5AFG5zQ		.se5%8IKLF]#		.se5
!DE5zQ		.se5%8IKLE\#		.se5
!DE++#		.se5
!DE5zQ		.se5%8IKLG^%		.se5AFG5zQ		.se5%8IKLH_%		.se5AFG5zA~		.se5%8IKL5zQ58v#5		.se5%8IKL[#		M(3RST#C5)C %% "
h'!j)% ?c"-eZ@@r3  c                   | j                          | j                         }||S | j                          | j                  d      r| j                  d      s| j	                  d       | j                  d      r,| j                  d      s| j	                  d       t               S | j                         }| j                          | j                  d      s| j	                  d       t        |      S d }| j                          dD ]  }| j                  |      s|} n | j                         }| j                          d }| j                  d      rd}ny| j                  d      rh| j                  d      s| j	                  d	       | j                  d      s| j	                  d
       | j                  d      s| j	                  d       d}t        |||      S )NrS   r0  zExpected '(' after 'decltype'.r?   r3  z#Expected ')' after 'decltype(auto'.z%Expected ')' after 'decltype(<expr>'.)rJ   r~   rZ   r   r   z<Expected '(' after 'decltype' in placeholder type specifier.z@Expected 'auto' after 'decltype(' in placeholder type specifier.zAExpected ')' after 'decltype(auto' in placeholder type specifier.r   )r  rG  r  r  r  r  r  r  r  r  r  r  )r0  r  r?  r}  kr  r  s          r1  _parse_trailing_type_specz*DefinitionParser._parse_trailing_type_spec  s    	002?J 	  ,**3/		:;$$V,'',IICD688))+DLLN##C(		AB.t44 A 	A$$Q'	 ,,.
>>&!$O"":.**3/		XY((0		\]**3/		]^.O&vz?KKr3  c                   |dk(  ry | j                          | j                  d      s|dk(  r| j                  d       ny g }| j                          | j                  d      s	 | j                          | j                  d      rN|j                  t	        d d             | j                          | j                  d      s| j                  d       n| j                  d d	
      }|j                  t	        |             | j                          | j                  d      r| j                  d      rn | j                  d| j                   d       | j                          | j                  d      }| j                  d      }|s| j                  d      }d }| j                  d      rd}|s| j                  d      rd}d }| j                          | j                  d      rk| j                  d      rO| j                  d      }| j                          | j                  d      s| j                  d       t        |      }nt        d       }| j                          | j                  d      r| j                  d      }	nd }	| j                          | j                  d      }
| j                  d      }|
s| j                  d      }
| j                         }| j                          d }|dk(  rd| j                  d      rS| j                          d}|D ]  }| j                  |      s|} n |s#| j                  ddj                  |      z         t        ||||||	|
|||
      S )Nri   r0  r  z+Expecting "(" in parameters-and-qualifiers.r3  r2  Tz6Expected ")" after "..." in parameters-and-qualifiers.singler  r  r   z8Expecting "," or ")" in parameters-and-qualifiers, got "z".rM   r   r   r   rj   Fr  r   r  r  r  r   r  z'Expected "%s" in initializer-specifier.z" or ")r  r  r  rx  r  _parse_type_with_initr  r  r  r'  r  r  _parse_attribute_listr  r  )r0  r	  rz  r  rM   r   r  r  r?  r  r  r  r  r  validr   s                   r1   _parse_parameters_and_qualifiersz1DefinitionParser._parse_parameters_and_qualifiers*  s*   $J&		GH$##E*KK 4T4 @ALLN++C0		 #? @ 00t80L056##C(##C(		 ""&"3"3!4B8 9) . 	%%g.((4))'2ED!G4++C0GJ'&&s+66u='',II@A / 5 / 5D!!--E-:N!N((4%%g.,,H **,
"t'7'7'<LLN.E ((+"#K 		=mmE*+, '(E7M>eUK1 	1r3  c                l   d}d}d}d}d}d}d}	d}
d}d}d}g }	 | j                          |s|r| j                  d      }|r)|s|r| j                  d      }|rA|sY|dv r(| j                  d      rd}[| j                  d      rd}o|dk(  r| j                  d      rd}| j                  d	      rd	}|s|d
v r| j                  d      }|r|	s|dv r| j                  d      }	|	r|dk(  r-|
s| j                  d      }
|
r|s| j                  d      }|r|dk(  r|s| j                  d      }|r|s| j                  d      }|r5|s| j                  d      }|rL|s| j                  d      }|rwd}| j                  d      rW| j	                  d      }|s| j                  d       | j                          | j                  d      s| j                  d       t        |      }| j                         }|r|j                  |       	 t        |||||||	|
|||t        |            S )zJust parse the simple ones.NrM   r   )r  r  r{   r]   r  rg   rt   )r  r  rd   rO   rP   r   r  rN   ra   r   r[   r0  Fr  z=Expected constant expression after '(' in explicit specifier.r3  z'Expected ')' to end explicit specifier.)r  r  r  r  r'  r  r  _parse_attributerx  r  r   )r0  r  typedr  r  rd   r   r  rN   rO   rP   r   rM   ra   r  r[   r?  attrs                     r1  _parse_decl_specs_simplez)DefinitionParser._parse_decl_specs_simple  sv   			LLNUw/>>*522~~h/"* ~~h/"* H$~~i0"+ >>*-(Ge'==1*@!@ NN;7	   ${ ;I  ""&.."@K" 
"  ${ ;I  !^^H5F "nnY7G ##44Z@H.2++C0#'#B#Be#B#TD#' $		 +D !E LLN#'#3#3C#8 $		*S T'6t'< ((*DT"!';".	9i"*E6;KE;RT 	Tr3  c                    |r|dvrt        d|z        	 | j                  ||      }d }|r#| j                         }| j                  ||      }nd }t        ||||      S )Nr  r  r  r,  #Internal error, unknown outer "%s".)ry  rV  rJ  r	  )r0  r  rT  r  r  r  s         r1  r  z"DefinitionParser._parse_decl_specs  sv    KK E MNN	 11%?	
557H66ueDJHE9j(CCr3  c                    |dk(  r j                   }	  j                         }n|dk(  rz j                  t              rbt         j                        }t        |d       }t        |gdgd      } j                           j                  dk(  r* j                  d       nd }n|r j                         }nd }g }	  j                          |r j                  d      r j                           j                  d      r|j                  t        d              `d fd	}	 j                  dg|	      }
 j                  d      s j                  d
       |j                  t        |
             	  j!                  |      }|Wt#        |      dk(  rI|rG|dk(  rB|r@ j                           j                  d      r j%                  d      }t'        ||      S t)        |||      S # t        $ r | _         d }Y Fw xY w)NmayberL  Frq  r  z Unexpected ':' after identifier.rc  rd  c                 $     j                         S r-  r  r6  s   r1  r  z>DefinitionParser._parse_declarator_name_suffix.<locals>.parser"  s    1133r3  z&Expected ']' in end of array operator.r   r  r  rY  r=  r  )r  r  r   r  r$   rF  r  r  r  r  r  r  r  rx  r  r  rQ  rI  r'  rW  r;  )r0  r  r	  rT  r  r>  rJ  r  r?  r  r  r@  r  s   `            r1  _parse_declarator_name_suffixz.DefinitionParser._parse_declarator_name_suffix  s    G((C002 hzz-(*4+<+<=
*:t<&uugeD$$+II@A,,.FFLLN))#.##C(OOHTN3477vF'',IIFG099)D	X!!3f,##C(::e:LD4FNN)(4=? 	?W # s   G* *H ?H c                   |dvrt        d|z        g }| j                          |r| j                  d      r| j                          d}d}g }	 |s| j                  d      }|r|s| j                  d      }|r-| j	                         }||j                  |       Q	 | j                  |||      }	t        |	||t        |            S |rA| j                  d      r0| j                         }
| j                  |||      }	t        |	|
	      S |r0| j                  d
      r| j                  ||d      }	t        |	      S |rD| j                  dk(  r5|dk(  rt        d g d       S | j                  }	 | j                  |||      }|S |r| j                  }	 | j)                  d      }| j                          | j                  d      s| j#                  d       | j                          d}d}	 |s| j                  d      }|r|s| j                  d      }|r-	 | j                  |||      }	t+        ||||	      S | j                  }	 | j                  |||      }| j                  dk(  r+| j,                  j                  | j'                  |d             |S # t         $ r}|j                  |df       || _        	 | j                  dk(  sJ | j                  d       | j                  |||      }| j                  d      s| j#                  d       | j                  dd|      }	t%        ||	      cY d }~S # t         $ r4}|| _        |j                  |df       d}| j'                  ||      |d }~ww xY wd }~ww xY w# t         $ r%}|| _        |j                  |df       Y d }~nd }~ww xY w# t         $ r4}|| _        |j                  |df       d}| j'                  ||      |d }~ww xY w)N)r  r  r  ri   z'Internal error, unknown paramMode '%s'.r   Fr   rM   rf  r   r  r2  r  r0  r  r=  z/If declarator-id with parameters-and-qualifiersr3  z$Expected ')' in "( ptr-declarator )"r  r  r	  rT  r  z"If parenthesis in noptr-declaratorzError in declaratorT)r=  z-Expected '*' in pointer to member declarator.zIf pointer to member declaratorr   r   zIf declarator-idz0Error in declarator or parameters-and-qualifiers)ry  r  r  r  rS  rx  r  rd  r   rO  r  r  r  r;  r  r]  r   r  r  r  r  r  r<  )r0  r  r	  rT  r6  r   rM   attrListrU  rg  r  r  r  exParamQualr  exNoPtrParenr  r  r   s                      r1  r  z"DefinitionParser._parse_declarator5  sD    GG9IEG G
T%%c*LLNHEH#44Z@H  11':E ,,.#OOD)))%EBD#*:8*DF F T%%c*..0E))%EBD#U;;T%%e,))%EBD)t44T&&#-N* 2<@B B ((CW88	9>@
. ((CM..T.B'',IIMN
 !##'#8#8#D#$  $ 5 5g > $--eYF*4tLLhh	D44UIuMC   C'  ''(>(>z2(NOJo # W!!;#T#V WW,,333$$S) !225)UKE++C0		"JK11<B8= 2 ?D .EEE& W"DH%%|5Y&Z[2F00VD,V	W#W< # J!!1&G"HIIJ4  	DDHq"456GF((V<!C		Dso   1J AN 
AN3 	M?"M:=A7L:4M?:	M7/M22M77M::M?	N0N++N03	O0</O++O0Nc                |     j                          |dk(  r j                         }|t        |d      S  j                  d      sy  j                         }|t        |      S |dk(  rg }n%|dk(  rddg}n|ddg}n j	                  d	|z         |dk(  d fd
} j                  ||      }t        |      S )Nr  F)r  r   r,  r   r   r3  z;Internal error, initializer for outer '%s' not implemented.c                 (    j                         S r%  )r  r  s   r1  r  z3DefinitionParser._parse_initializer.<locals>.parser  s    44
4KKr3  )r.  r  )r  r  r  r  r  r  )r0  r  allowFallback
bracedInitfallbackEndr  r  r  s   `      @r1  _parse_initializerz#DefinitionParser._parse_initializer  s    & 	H557J%%jEBB$113
!!*--H%'Ko%*K]*KII %',- . o-
	L//V=/Ye$$r3  c                   |r|dvrt        d|z        |dk7  r|sJ |dv rg }| j                  }	 | j                  |d      }| j                  d|d      }d}|d	k(  rK| j	                          t        j                  d
      j                  | j                  | j                        rd}|r| j                  d       n@d}|dk(  rd}n|dk(  rd}d}n|dk(  rd}| j                  |      }| j                  ||      }t        ||      S # t        $ r}|dk(  rd}	n|d	k(  rd}	nt        ||j                  ||	f       || _        	 | j                  |      }| j                  d|      }nr# t        $ rf}
|| _        |dk(  rd}	n|d	k(  rd}	nt        ||j                  |
|	f       	 |dk(  rd}|dz  }n|d	k(  rd}nt        || j                  ||      |
d}
~
ww xY wY d}~d}~ww xY w)z
        named=False|'maybe'|True: 'maybe' is e.g., for function objects which
        doesn't need to name the arguments

        outer == operatorCast: annoying case, we should not take the params
        )r  r  r  r  r,  rY  r  )r  r  F)r  rT  Tr_  r  z
requires\b)allowSemicolonr  zIf just a namez"If the function has no return typer  r  If typedef-like declarationz!If the function has a return typez%Type must be either just a name or a ztypedef-like declaration.z(Error when parsing function declaration.Nr  r,  rL  )ry  r  r  r  r  recompiler  r  
assert_endr   r  rx  r  r  )r0  r  r  r6  r  r  r  mustEnd	exUntypeddescexTypedr  rT  r	  s                 r1  r  zDefinitionParser._parse_type  sP     > > E MNN&u(( JxxH6C 22e2L	--DE49 . ;J&LLNzz-066tQ"'OO4O8Z I .(*	/) ..U.;I)))KDy$''m # *CF?+Dj(?D(i7!!9d"34#!C $ 6 6U 6 CI111ND& C'DH<*,B,);%%wo6  F?%LF"&AAF"j0%OF"0i?"44ZHgU)C *Cs=   BD 	G(1G#%E,+G#,	G5A!GGG##G(c                   |r|dv sJ | j                  ||      }|dk7  r| j                  |      }t        ||      S | j                  }d }	 | j                  |d      }|t        |d       S | j	                          | j
                  dk7  r| j
                  dk7  r
|| _        d }nt        ||      S 	 | j                  d	      st        |d       S 	 | j                  dd 
      }t        ||      S # t        $ r}|| _        |}Y d }~Td }~ww xY w# t        $ rJ}	| g }
|
j                  |df       |
j                  |	df       d}|dz  }| j                  |
|      |	d }	~	ww xY w)NrX  rM  r,  r  F)r  re  r   r   r   r2  z-If default template argument is an expressionz&If default template argument is a typez$Error in non-type template parameterz# or constrained template parameter.)r  rh  r  r  r  r  r   r  r  rx  r  )r0  r  r  r  r  r  r  r   typeInitr  r  r  s               r1  rN  z&DefinitionParser._parse_type_with_init1  s    KKKKe59O#***7D"4..hh	**e*LD|&tT22 LLN  C'D,=,=,D 'tT22  $"4..	?''e4'@H:4JJ  	DHE	  	?}DKK OPQKK HIJ8C88C((s3>	?s8    C1 /AC1 D 1	D:	DD	E#AEE#c                    | j                         }| j                          | j                  d      st        |d       S | j	                  dd       }t        ||      S )Nr   F)r  r  r  r"  r  r$  s      r1  _parse_type_usingz"DefinitionParser._parse_type_using^  sS    &&($d++t,D$''r3  c                |    | j                         }| j                          | j                  d      }t        ||      S )Nr  )r  r  rh  r,  r/  s      r1  _parse_conceptzDefinitionParser._parse_conceptf  s6    ,,.
--h7*k22r3  c                   | j                         }| j                         }| j                          | j                  d      }g }| j                          | j	                  d      r	 | j                          d }d}d}| j                  d      rd}| j                  t              r| j                  }| j                          |s| j                  d      rd}| j                         }| j                          | j	                  d      }|j                  t        ||||             | j                          | j	                  d      r	 t        ||||      S )Nr  r  Fr   Tr2  r   )rO  r  r  r  r  r  _visibility_rer  rx  r5  r<  )	r0  r  r  r  r>  r7  r   r8  baseNames	            r1  _parse_classzDefinitionParser._parse_classl  s"   **,&&(%%g.C !
((3"G::n-!%!2!2JLLN4#8#8#C"G224''.\(JNO##C(eUE22r3  c                Z    | j                         }| j                         }t        ||      S r-  )rO  r  rE  )r0  r  r  s      r1  _parse_unionzDefinitionParser._parse_union  s+    **,&&(e$$r3  c                    d }| j                         }| j                         }| j                          d }| j                  d      r| j	                  d      }t        ||||      S )Nr  Fr  )rO  r  r  r  r  rL  )r0  rN  r  r  rO  s        r1  _parse_enumzDefinitionParser._parse_enum  sc    **,&&(C !--E-:NtV^U;;r3  c                
     j                         } j                         } j                          d } j                  d      r3 j                          d fd} j	                  g |      }t        |      }t        |||      S )Nr   c                 (     j                  d      S r  )r'  r6  s   r1  r  z2DefinitionParser._parse_enumerator.<locals>.parser  s    66%6HHr3  r  )r  rO  r  r  r  r  rT  )r0  r  r  r  r  initVals   `     r1  _parse_enumeratorz"DefinitionParser._parse_enumerator  su    &&(**,C LLNI55b&AG!'*DT4//r3  c                f   | j                          | j                  d      r| j                         }nd }| j                  }	 d }| j                          | j	                  d      rd}n9| j	                  d      rd}n%|r| j                  d       n| j                  d       | j                          | j                  d      }| j                          | j                  t              rt        | j                        }nd }| j                          |s%| j                  d      r| j                  dd 	      }n!d }| j                  d
vr| j                  d       t        ||||      }|rt        ||      S t        |      S # t         $ r}|r 	 || _        | j#                  dd      }	| j                          | j                  d      }t%        |	|      cY d }~S # t         $ rI}
|| _        d}g }|j'                  |df       |j'                  |
df       | j)                  ||      d d }
~
ww xY wd }~ww xY w)Nr   r   rJ   zFExpected 'typename' or 'class' after template template parameter list.zKExpected 'typename' or 'class' in the beginning of template type parameter.r2  r   Fr2  z,>z4Expected "," or ">" after (template) type parameter.r[  r,  z&Error when parsing template parameter.z:If unconstrained type parameter or template type parameterz3If constrained type parameter or non-type parameter)r  r  _parse_template_parameter_listr  r  r  r  r  r$   rF  r  r  r  rd  r  rm  r   rN  r  rx  r  )r0  r  r  rf  rg  rJ  rT   r  r  rp  eNonTyper  r  s                r1  _parse_template_parameterz*DefinitionParser._parse_template_parameter  s   >>*%>>@LLhh4	ECLLN$$Z0 &&w/		 > ? 		 B CLLN ,,U3MLLNzz-(*4+<+<=
!
LLN T%5%5c%:**d*C$$D0IITU3C4A7LD3L$GG+D11 	EE227OL $ 0 0 7.umDD" EAXY[TUW,,T6:DE	EsE   D0E> 3
E> >	H0H+AGH0	H(AH##H((H++H0c                   g }| j                          | j                  d      s| j                  d       	 | j                  }d }	 | j	                         }|j                  |       | j                          | j                  d      r| j                         }t        ||      S | j                  d      rd}g }|r|j                  |df       	 | j                  d       t        j                  |       | j                  ||      # t        $ r}|| _        |}Y d }~d }~ww xY w# t        $ r}	|j                  |	df       Y d }	~	gd }	~	ww xY w)	Nr   zExpected '<' after 'template'r   r   z!Error in template parameter list.zIf parameterzExpected "," or ">".zIf no parameter)r  r  r  r  r  rx  r   _parse_requires_clauser  r  r  r  )
r0  r  r  errrp  eParamr  r  r  r   s
             r1  r  z/DefinitionParser._parse_template_parameter_list  s9    24$II56((CC668%%e, LLN$!%!<!<!>(HH!!#&<KKn 568II45 T",,T6::' #   ' 8KK$5 6778s0   !D D& 	D#	DD#&	E/EEc                   | j                   }	 | j                         }| j                          | j	                  d      s|| _         y g }	 | j                          | j	                  d      }| j                          | j                  t              s| j                  d       | j                  }|t        v r| j                  d|z         t        |      }|j                  t        ||             | j                          | j	                  d      rn$| j	                  d      r| j                  d       t        ||      S # t        $ r
 || _         Y y w xY w)Nr%  r2  z2Expected identifier in template introduction list.zBExpected identifier in template introduction list, got keyword: %sr&  r   z:Error in template introduction list. Expected ",", or "}".)r  r  ry  r  r  r  r$   r  r  r;  rF  rx  r  r  )r0  r  rL   r  rg  txt_identifierrJ  s          r1  _parse_template_introductionz-DefinitionParser._parse_template_introduction
  s7   hh	--/G 	$DH LLN ,,U3MLLN::m,		NO!..N*		 ,.<= >&~6JMM::}UVLLN$$IIRS' ( 'w77=  	DH	s   E EEc                   | j                          | j                  d      sy d	d}g }g }|j                   ||              	 | j                          d}| j                  d      rd}|j                  d       n$| j                  d      rd}|j                  d       |sn|j                   ||              vt	        |      dk(  rt        |d         S t        t        ||            S )
Nrv   c                   g }g }|j                  | j                                	 | j                          d}| j                  d      rd}|j                  d       n$| j	                  d      rd}|j                  d       |sn |j                  | j                                ~t        |      dk(  r|d   S t        ||      S )NTFr   r<   rV  r   )rx  r  r  r  r  rI  r  )r0  andExprsr  r  s       r1  parse_and_exprz?DefinitionParser._parse_requires_clause.<locals>.parse_and_expr:  s    HCOOD::<=##D)"GJJt$^^E*"GJJu% > > @A  8}!{"#Hc22r3  TFr   ro   rV  r   )r0  r  rw   r  )r  r  rx  r  rI  r  r  )r0  r  orExprsr  r  s        r1  r  z'DefinitionParser._parse_requires_clause.  s     	~~j)	3* ~d+,LLNG%

4 %

4 NN>$/0  w<1$WQZ00$\'3%?@@r3  c                V   g }	 | j                          d }| j                  }| j                  d      r4	 | j                         }|dk(  r1|j                  %| j                  d       n| j                         }|sn=|dk(  r&t        |      dkD  r|| _        | j                  d       |j                  |       t        |      dk(  r|dk(  r| j                  d       t        |      dk(  ry t        |      S # t        $ r*}|dk(  rt        |      dk(  rt        d       cY d }~S |d }~ww xY w)Nr   r  r   rL   z'requires-clause not allowed for conceptz0More than 1 template parameter list for concept.z,Missing template parameter list for concept.)r  r  r  r  r   rI  r  r  r  r  rx  )r0  r  r  r  r  r   s         r1  "_parse_template_declaration_prefixz3DefinitionParser._parse_template_declaration_prefixc  s!   GI	LLNBFF((C~~j) !@@BF *v/D/D/PIIGH::<Y&3y>A+=		LMV$- . y>Q:#:IIDEy>Q/	::) '  !X-#i.A2E;DAA	 s#   C5 5	D(>D#D(!D##D(c                   |j                         }d}|sd}n(|r|j                  d}d}nt        |j                        }|dz   |k  r| j                  d||fz         ||kD  r||z
  }|s8|s6d|||fz  }	|	dz  }	|r|	d|z  z  }	|	t	        |      z  }	| j                  |	       g }
t        |      D ]  }|
j                  t        g d 	               |r|s|
j                  |j                         t        |
      }|S )
NFr   TrV  zeToo few template argument lists comapred to parameter lists. Argument lists: %d, Parameter lists: %d.zToo many template argument lists compared to parameter lists. Argument lists: %d, Parameter lists: %d, Extra empty parameters lists prepended: %d.z Declaration:
	z%s
	)r  )r  r  rI  r  r<  r+  r  rx  r  rC  r  )r0  r  r  fullSpecShorthandisMembernumArgsisMemberInstantiation	numParamsnumExtrar  newTemplates_is               r1  _check_template_consistencyz,DefinitionParser._check_template_consistency  s9    **, %IN44<	(,% 8 89	Q;"II I ),- . Y*H$-BC 	845 **!8n44Cs:&		#NPLHo P##$5b$NOP&;##N$<$<=9,GNr3  c           	     n   |dvrt        d|z        |dvrt        d|z        d }d }d }d }| j                          | j                  t              r| j                  }|dv r| j                  |      }|dk(  rDg }| j                  }	 |s| j                  dd      }| j                  }	 |s| j                         }n|dk(  r| j                         }n|dk(  r| j                  dd      }n|dk(  r$| j                  dd      }| j                         }n^|dk(  r| j                         }nH|dk(  r| j!                         }n2|dk(  r| j#                         }n|dk(  r| j%                         }nt&        | j)                  |j*                  |d|dk(        }| j                          | j-                  d      }t/        |||||||      S # t        $ r%}	|j                  |	d	f       || _        Y d }	~	Sd }	~	ww xY w# t        $ r4}	|| _        |j                  |	d
f       d}
| j                  ||
      |	d }	~	ww xY w)N)rJ   r   r  r  r  rL   rZ   r  z(Internal error, unknown objectType "%s".)rJ   r~   r   r  r  varr  rL   rZ   r  r  r  z+Internal error, unknown directiveType "%s".)r  rL   r  r  rJ   r   r  Tr2  rk  zIf type alias or template aliaszError in type declaration.rL   r  r  rJ   r   rZ   r  F)r  r  r  )ry  r  r  rz  r  r  r  r  r   rx  rv  r  rx  rN  r  r|  r~  r  r  r  r  r  r  r9  )r0  r  r  r7  r  r  r/  r6  r  r   r  r  s               r1  parse_declarationz"DefinitionParser.parse_declaration  s    ? ?FSTT !T T IMYZZ
!%::n%**JTT!DDZPNJ((C%"&"2"2V"2"LK ((CH""&"8"8":K 9$--/K8#444x4PK:%**Z*HK%)%@%@%B"7"++-K7"++-K6!**,K<'002K  99+:J:J:HLQCMQYCY : [ 	$$S)	j-,k4iA 	AG # !!1&C"DE # H!!1&G"HI5,,Z@aG	Hs0   G )G7 	G4G//G47	H4 /H//H4c                    | j                  d      }| j                         }| j                  ||d      }t        ||      }d|_        |S )Nrh   r  Fr  )r  r  r  r  r  )r0  r  r  r  s       r1  parse_namespace_objectz'DefinitionParser.parse_namespace_object  sX    @@K@X&&(99$LQ : S40$
r3  c                ~   | j                   }	 | j                  d      }| j                         }| j                          | j	                  d       | j                          | j                  ||d      }t        ||      }d|_        |dfS # t        $ r}	 || _         | j                  dd      }| j                          | j	                  d       | j                          |dfcY d }~S # t        $ rB}g }|j                  |df       |j                  |d	f       d
}	| j                  ||	      |d }~ww xY wd }~ww xY w)Nxrefr  r   Tr  r  FzIf shorthand refzIf full function refzError in cross-reference.)r  r  r  r  r  rn  r  r  r  r   r  rx  r  )
r0  r  r  r  res1e1res2e2r  r  s
             r1  parse_xref_objectz"DefinitionParser.parse_xref_object  s>   hh	@!DDPVDWN**,DLLNT"OO!==dNPT > VNn5D$DO: 	@@--j*E  &!U{"" @R!345R!7891,,T37R?@	@s7   A=B 	D<AC)#D<)	D42=D//D44D77D<c                   | j                   }	 | j                         }| j                          | j                          |S # t        $ r}|| _         	 | j                  d      }| j                          | j                          |cY d }~S # t        $ rB}d}g }|j                  |df       |j                  |df       | j                  ||      |d }~ww xY wd }~ww xY w)NFz%Error when parsing (type) expression.r  r  )r  r  r  rn  r   r  rx  r  )r0  r  r?  exExprr  exTyper  r  s           r1  parse_expressionz!DefinitionParser.parse_expression  s    hh	G))+DLLNOOK 	GDH
G&&u-!
" G@V_56VY/0,,T6:FG	Gs;   1A   	C	C2B	C		C=CCCCr;  )rw   r  r  )r  r<  r  r<  r  r<  rw   z4tuple[list[ASTExpression | ASTBracedInitList], bool])rw   r  )rw   r2  )rw   r  )rw   r  )rw   r  r  )r  r  r  rB   rw   zASTConditionalExpr | Noner  )r  r
  r  zCallable[[], ASTExpression]r.  rB   rw   r  )rw   rC  )rw   r  r  )r=  rB   rw   r  )rw   r  )rw   r  )r	  r<  rw   r  )r  r<  rT  rB   rw   r  )r  r<  rT  rB   rw   r	  )r  
bool | strr	  r<  rT  rB   rw   z6ASTDeclaratorNameParamQual | ASTDeclaratorNameBitField)r  r  r	  r<  rT  rB   rw   r"  rF  )r  r  re  rB   rw   r  r-  )r  r  r  r  rw   r  )r  r  r  r<  rw   r  )rw   r"  )rw   r,  )rw   r<  )rw   rE  )rw   rL  )rw   rT  )rw   rZ  )rw   r  )rw   r  r  )r  r<  rw   r  )
r  r  r  r  r  rB   r  rB   rw   r  )r  r<  r  r<  rw   r9  )rw   r  )rw   z*tuple[ASTNamespace | ASTDeclaration, bool])rw   zASTExpression | ASTType)6r=  r>  r?  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r'  r  r  r4  r9  r  rG  rJ  rQ  rV  r  r]  r  rh  r  rN  rv  rx  r|  r~  r  r  r  r  r  r  r  r  r  r  r  r  r@  r3  r1  r  r  k  s!     - - 0 02&:x94v.$&1$B'C7.	-.S1j]0~204BlB7;B@YB>'  26(.+F(.*.(.:G(.X%@><@.7dXAt+LZ[1z[TzD64?4?,/4?8<4?	?4?n )-qD!%qD,qDf/% ./%bV(p+?#+?+?T+?Z(33<%
<0 =E~ ;D"8H3Aj;0S;F OT%4P%7;%GK% *F%N?AB@<Gr3  r  c                 L    t        t        d      d       } t        | gdgd      S )NPhonyNameDueToErrorFrq  )r  rF  r  )r  s    r1  _make_phony_error_namer  )  s'    
}-BCT
JC#66r3  c                      e Zd ZU dZ ed ed      dd      gZded<   ej                  ej                  ej                  ej                  ej                  ej                  ej                  d	Z
d
ed<   ddZ	 	 	 	 ddZedd       Zedd       ZddZddZ	 	 	 	 	 	 ddZd fdZd dZd!dZd!dZd"dZd#dZ xZS )$	CPPObjectz%Description of a C++ language object.template parameterzTemplate Parameters)tparamr  Tlabelr  can_collapsezlist[Field]doc_field_types)no-index-entryzno-contents-entryzno-typesettingnoindexentrynocontentsentryr  single-line-parameter-listr8   option_specc           
     R   |j                   dk(  sJ |j                  }|sJ |j                  J |j                  J |j                  J |j
                  }|sJ |j
                  y |j                  }|y |j                   dk7  ry |j                  dk7  ry |j
                  }|j                  |j                  ddd      }|y |j                  j                         }||_
        t        ||j                  d d || j                  j                  | j                         d          y )Nr  rZ   FTrV  rV  rf  )r  r.  r  r  r~  r  r/  r  rX  r  r  r8  r|  r  get_source_info)r0  astr.  r  
parentDecltargetSymbolr   	declClones           r1  _add_enumerator_to_parentz#CPPObject._add_enumerator_to_parentA  sE   ~~--- v+++$$,,,""***}}|& !--
   F* ##v-#**(()9)9UZ^:? ) A=&&,,.	+1	(lf.>.>"$xx''d.B.B.DQ.G	Ir3  c                Z   g }t        dt        dz         D ]&  }	 |j                  |      }|j                  |       ( t        t        |            }|d   }|sJ t        j                  d      j                  |      s't        j                  d||| j                                |j                  j                         j                         j!                  d      }d}	|j                  j"                  }
|
0|
j$                  }|
j"                  }
||j&                  d	k(  rd
}	n|
0|	sd| j(                  vr||}| j*                  j,                  j.                  D ]#  }|j1                  |      s|t3        |      d  } n | j5                  |      }| j6                  d   j                  d||dd f       || j8                  j:                  j<                  vr| j*                  j>                  d   d   }||vr|j                  j@                  ||<   |sJ |d   j                  |       |dd  D ]<  }|s|| j8                  j:                  j<                  vs)|d   j                  |       > | j8                  j:                  jC                  |       y y # t        $ r |t        k  sJ Y w xY w)NrV  )r\  r   z^[a-zA-Z0-9_]*$zMIndex id generation for C++ object "%s" failed, please report as bug (id=%s).r{  r  FrL   Tr  entriesrL  r   rf  r  rY  )"r  r  r]  rx  r   rY  reversedrl  rm  r  r  r~  get_locationr.  r   rb  lstripr  r/  r  r  r|  r  cpp_index_common_prefix
startswithrI  get_index_text	indexnodestatedocumentrY  
domaindatar  note_explicit_target)r0  r  sigrz  rY  r   r  newestIdr  isInConceptr   r  strippedNamer}  	indexTextr  s                   r1  add_target_and_indexzCPPObject.add_target_and_indexk  s    q'A+& 	#A#ZZZ*

2	# 8C=!q6xzz,-33H=NN 458($($5$5$7  9 zz..0CCELLSQJJm==DA|)+" m /t||CL((//AA ??6*#/F#=L ++L9INN9%,,h	8RQU-VW4::..222HH''.w7E5 !jj00dO8EN!!(+!"g .TZZ00444EN))"-	.
 JJ44W= 3A   #7{"{#s   #JJ*)J*c                    t         r-  rH  r6  s    r1  object_typezCPPObject.object_type  s    !!r3  c                    | j                   S r-  )r  r6  s    r1  display_object_typezCPPObject.display_object_type  s    r3  c                6    t        d      || j                  fz  S )Nz%s (C++ %s))r   r  rO  s     r1  r  zCPPObject.get_index_text  s    4)A)A"BBBr3  c                N    |j                  | j                  | j                        S r-  )r  r  objtype)r0  r  s     r1  parse_definitionzCPPObject.parse_definition  s    ''(8(8$,,GGr3  c                @    |j                  |d| j                  |       y r  )r  r|  )r0  rz  r  r  s       r1  r  zCPPObject.describe_signature  s    wdhhHr3  c                   | j                   j                  j                  j                  }d|j                  vr>|j
                  d   d   }||j                  d<   |j                         |j                  d<   |j                  d   }|j                  }||j                  dk(  rd|j                          d| j                   d| j                  d	    }t        j                  || j                         
       t!               }|j#                  |      }||j                  d<   g S d |j                  d<   t$        | M         S )Ncpp:parent_symbolrf  root_symbolrm  r  zFC++ declarations inside functions are not supported. Parent function: z
Directive name: z
Directive arg: r   r{  cpp:last_symbol)r  r  settingsr|  	temp_datar  rv  ref_contextr/  r  r   r  	argumentsr  r~  r  r  r  r  run)	r0  r|  rootr  r  r  r  r.  r!  s	           r1  r  zCPPObject.run  s4   jj!!**..cmm3>>%(7D15CMM-.040C0C0ECOO,- }}%89!--
!j&;&;z&I''3'H'H'J&K L&&*ii[0A$..QRBSATVC NN3):):)<N=)+D!**40F/5CMM+,I ,0'(w{}r3  c                   | j                   j                  d   }| j                   j                  j                  xs$ | j                   j                  j                  xs d}d| j
                  vxr t        |      |cxkD  xr dkD  nc |d<   t        ||| j                   j                        }	 | j                  |      }|j                          	 |j!                  || j                   j"                  | j%                         d   	      }	|	j&                  J |	j(                  J | j                   j                  d   |	_        |	j&                  )|	j&                  j(                  J |	|	j&                  _        |	| j                   j                  d<   |j4                  dk(  r| j7                  |       t9        | j
                        }d| j
                  v |d<   | j;                  |||       |S # t        $ rW}t        j                  ||       t               }|j                  |      }	|	| j                   j                  d<   t        |d }~ww xY w# t*        $ r}|j,                  | j                   j                  d<   t/        d
      }
|
|j,                  j"                  |j,                  j0                  | j2                  |fz  }
t        j                  |
|       Y d }~Md }~ww xY w)Nr  r   r  r  r|  r  r{  r  rV  )r  r%  rz  r  r  )r|  r  r  !cpp_maximum_signature_line_lengthmaximum_signature_line_lengthr  rI  r  r  rn  r   r  r~  r  r  
ValueErrorr  r  r  r#  r$  r+  r.  r   r%  r  r  r  r  r  )r0  r  rz  r  max_lenr  r  r   r  r.  r  r  s               r1  handle_signaturezCPPObject.handle_signature  s   #xx112EF88??DD hhooCC 	 )< )SG'a' 	+,
 "#P
	$''/C	2!11TXX--D4H4H4J14M 2 OF &&...&&..."&(("4"45F"GF"".**77???39##04:DHH01 >>\)**3/ t||$&8DLL&H"#g6
M  	$NN1wN/ *+D!**40F4:DHH01!#	$( % 	2 56HHDHH01 8 9C))188==1138 8CNN3N11	2s3   /!G- CI -	I6AII	K$B KK$c                   | j                   j                  d   }|sJ | j                   j                  d   | _        | j                   j                  d   | _        || j                   j                  d<   |j                         | j                   j                  d<   g | j                   j                  j                  dd      |j                  j                  t              | j                   j                  d<   y )Nr  r  rm  cpp:domain_namer@  )
r|  r  oldParentSymbolr  oldParentKeyrv  r  r  rP  r<  )r0  
lastSymbols     r1  before_contentzCPPObject.before_content  s    !XX//0AB
z#xx112EF'+xx';';<L'M2<./1;1J1J1L-.1
XX##$5r:1
  ++C01
,-r3  c                    | j                   | j                  j                  d<   | j                  | j                  j                  d<   | j                  j                  d   d d | j                  j                  d<   y )Nr  rm  r  r  )r  r|  r  r  r  r6  s    r1  after_contentzCPPObject.after_content  sf    262F2F./151B1B-.040B0BCT0UVYWY0Z,-r3  c                    t        d | j                  j                  d   j                         j                  D              S )Nc              3  Z   K   | ]#  }|j                   j                  t               % y wr-  )r  rP  r<  )r  r   s     r1  r  z4CPPObject._object_hierarchy_parts.<locals>.<genexpr>!  s%      YQQ[[++C0 Ys   )+r  )tupler|  r  r   r  )r0  sig_nodes     r1  _object_hierarchy_partsz!CPPObject._object_hierarchy_parts   s?     YXX''(9:OOQWWY Y 	Yr3  c                   |j                  d      sy| j                  j                  j                  }|j                  j                  d      }|j
                  r|dv rd}nd}|d   ^ }}|j                  dk(  r=dj                  g | j                  j                  j                  dd	      ||z         S |j                  d
k(  r||z   S |j                  dk(  rdj                  |||z   gz         S y)N
_toc_partsr   r  >   methodr  r   domainr  r  r@  hideall)	r  r|  appr  r  add_function_parenthesestoc_object_entries_show_parentsr  r  )r0  r  r  r  parensparentsr  s          r1  _toc_entry_namezCPPObject._toc_entry_name$  s    ||L)$$//%%i0**w:P/PFF!,/$11X=99\txx11556GL\dU[m\]]11V;&= 11U:99Wv677r3  )r  r9  rw   r:  )r  r9  r  r<  rz  r1   rw   r:  r;  )r  r<  rw   r<  )r  r  rw   r9  )rz  r3   r  r9  r  r  rw   r:  rw   
list[Node])r  r<  rz  r3   rw   r9  r  )r  r3   rw   ztuple[str, ...])r  r3   rw   r<  )r=  r>  r?  __doc__r*   r   r  __annotations__r	   flagr  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  s   @r1  r  r  .  s   / 	)3H1I;"&	($O[  %//'__$//"%??&OO&0ooK (IT6>&16>6:6>p " "    CHI .I9=IBFI!F5n

[
Yr3  r  c                      e Zd ZdZy)CPPTypeObjectr  Nr=  r>  r?  r  r@  r3  r1  r  r  8      Kr3  r  c                      e Zd ZdZy)CPPConceptObjectrL   Nr  r@  r3  r1  r  r  <  s    Kr3  r  c                      e Zd ZdZy)CPPMemberObjectr  Nr  r@  r3  r1  r  r  @  s    Kr3  r  c            
          e Zd ZdZej
                   ed ed      dd       ed ed      d	d
d       ed ed      dd       ed ed      dd      gz   Zy)CPPFunctionObjectr  	parameter
Parameters)rp  r   r  argumentTr  
exceptionsThrowsr?  )throwsr   	exception)r  rolenamer  r  retvalzReturn values)retvalsr(  returnvalueReturnsF)returnsrw   )r  has_argr  N)	r=  r>  r?  r  r  r  r*   r   r)   r@  r3  r1  r  r  D  s|    K//[,D"&	( 	\8v;"&	( 	XQ%70"&	( 	m1Y<)	+3 Or3  r  c                  "    e Zd ZdZedd       Zy)CPPClassObjectrJ   c                :    | j                   dv sJ | j                   S )Nr  )r  r6  s    r1  r  z"CPPClassObject.display_object_typeY  s!     ||2222||r3  Nr;  )r=  r>  r?  r  r  r  r@  r3  r1  r/  r/  V  s    K r3  r/  c                      e Zd ZdZy)CPPUnionObjectr   Nr  r@  r3  r1  r2  r2  `  s    Kr3  r2  c                      e Zd ZdZy)CPPEnumObjectrZ   Nr  r@  r3  r1  r4  r4  d  r  r3  r4  c                      e Zd ZdZy)CPPEnumeratorObjectr  Nr  r@  r3  r1  r6  r6  h  s    Kr3  r6  c                  8    e Zd ZU dZdZdZdZdZi Zde	d<   d
dZ
y	)CPPNamespaceObjectzb
    This directive is just to tell Sphinx that we're documenting stuff in
    namespace foo.
    FrV  r   Tr8   r  c                   | j                   j                  d   d   }| j                  d   j                         dv r|}g }n}t	        | j                  d   | j                         | j                        }	 |j                         }|j                          |j                  |j                  |j                         }|g}|| j                   j"                  d<   || j                   j"                  d<   |j%                         | j                   j&                  d	<   g S # t        $ rE}t        j                  || j                                t               }t        |d       }Y d }~d }~ww xY w)
Nrf  r  r   NULLr  rm   r  r{  r  cpp:namespace_stackrm  )r|  r  r  r-  r  r  r  r  rn  r   r  r~  r  r  r  r  r  r  rv  r  )r0  
rootSymbolr.  stackr  r  r   r  s           r1  r  zCPPNamespaceObject.runx  s8   XX((/>
>>!""$(@@F"$E%dnnQ&7/3/@/@/B-1[[:F/335!!#
  ((9K9KLFHE28./4901171F1F1H-.	 # /q4+<+<+>?-/"4./s   5 D 	E'";E""E'Nr  )r=  r>  r?  r  has_contentrequired_argumentsoptional_argumentsfinal_argument_whitespacer  r  r  r@  r3  r1  r8  r8  l  s/    
 K $ K r3  r8  c                  4    e Zd ZU dZdZdZdZi Zded<   d	dZ	y)
CPPNamespacePushObjectFrV  r   Tr8   r  c                   | j                   d   j                         dv rg S t        | j                   d   | j                         | j                        }	 |j                         }|j                          | j                  j                  j                  dd       }|s| j                  j                  d   d   }|j!                  |j"                  |j$                        }| j                  j                  j                  dg       }|j'                  |       || j                  j                  d<   || j                  j                  d<   |j)                         | j                  j*                  d	<   g S # t        $ rF}t        j                  || j                                t               }t        |d       }Y d }~Fd }~ww xY w)
Nr   r:  r  r{  r  rf  r  r<  rm  )r  r-  r  r  r  r  rn  r   r  r~  r  r  r|  r  r  r  r  r  r  rx  rv  r  )r0  r  r  r   r  	oldParentr.  r>  s           r1  r  zCPPNamespacePushObject.run  su   >>!""$(@@I!$.."3+/+<+<+>)-6	+//1C
 HH&&**+>E	++E2=AI##CNNC4F4FG""&&'<bAV28./4901171F1F1H-.	  	+NN1t'8'8':N;)+DtT*C	+s    E2 2	G;;F<<GNr  
r=  r>  r?  r?  r@  rA  rB  r  r  r  r@  r3  r1  rD  rD    s(    K $ K r3  rD  c                  4    e Zd ZU dZdZdZdZi Zded<   ddZ	y)	CPPNamespacePopObjectFr   Tr8   r  c                   | j                   j                  j                  dd       }|rt        |      dk(  r(t        j                  d| j                                g }n|j                          t        |      dkD  r|d   }n| j                   j                  d   d   }|| j                   j                  d<   || j                   j                  d<   |j                         | j                   j                  d	<   g S )
Nr<  r   z=C++ namespace pop on empty stack. Defaulting to global scope.r{  r  rf  r  r  rm  )r|  r  r  rI  r  r~  r  rB  r  rv  r  )r0  r>  r.  s      r1  r  zCPPNamespacePopObject.run  s    ""&&'<dCE
aNNZ$($5$5$7  9EIIKu:>2YFXX((/>F28./4901171F1F1H-.	r3  Nr  rG  r@  r3  r1  rI  rI    s(    K $ K r3  rI  c                  8     e Zd Z	 	 d	 	 	 	 	 d fdZddZ xZS )	AliasNodec                   t         |           || _        || _        |ad|j                  vr>|j
                  d   d   }||j                  d<   |j                         |j                  d<   |j                  d   | _        y |J || _        y )Nr  rf  r  rm  )	r  r2  r  aliasOptionsr  r  rv  r  	parentKey)r0  r  rN  r|  rO  r  r!  s         r1  r2  zAliasNode.__init__  s     	(?"#--7~~e,];5912484G4G4I 01 __-=>DN(((&DNr3  c                h    | j                  | j                  | j                  d | j                        S )N)r|  rO  )r!  r  rN  rO  r6  s    r1  copyzAliasNode.copy  s1    ~~dhh(9(9"&$..  B 	Br3  r  )
r  r<  rN  r  r|  zBuildEnvironment | NonerO  zLookupKey | Nonerw   r:  )rw   rL  )r=  r>  r?  r2  rQ  r  r  s   @r1  rL  rL    s,    04/3'-','8<' Br3  rL  c                  J    e Zd Zej                  dz
  Z	 	 	 	 	 	 	 	 ddZddZy)AliasTransformrV  c           	        |dk(  rd}n|dk(  rd}n|dz  }d}g }|sPt        j                  dd      }	 |j                  |	       |j                  j	                  |	d| j
                  |       |r|r|}
nVt        j                         }t        j                         }|j                  |       ||_        d|d<   d	x|d
<   |d<   d|d<   |}
|j                  D ]P  }|j                  |j                  j                  dv r)| j                  ||d|||      }|
j                  |       R |s*t        j                        dk7  r |j                         |S )Nr   TrV  Fr   r  rf  r  aliasr  desctypezno-indexr}  maxdepthskipThisrN  renderOptionsr  )r
   r3   rx  r/  r  r|  desc_contentrq  r  r&  r  _render_symbolrC  rI  r  )r0  r   rX  rY  rN  rZ  r  recurser   rz  childContainercontentrq  r8  
childNodess                  r1  r\  zAliasTransform._render_symbol  sf    q=G]GMHG--b"5GELL!MM,,Wj$((MZ=B"//1}}t$ (!&X5<<Y$z"2#'Z !%++ 	2%%-%%004VV!00X!-]% 1 '
 %%j1	2 DMM 2a 7W%r3  c           
        | j                   j                  t              D ]  }|j                  }|j                  }	 t        ||| j                  j                        }|j                         \  }}|j                          |Qt        j                  |d      }	|	j                          |	t        j                   ||      z  }	|j#                  |	       | j                  j$                  d   j&                  d   }
|
j)                  |      }|sPt        j+                  d|       t        j+                  d|       t        j+                  |
j-                  d	             |sJ g }|ret/        |t0              sJ |}|j2                  }|j4                  r|j4                  j6                  }ng }|j9                  ||d
dddd      \  }}|Lg }nIt/        |t:              sJ |}|j<                  }|j?                  |d
ddd      }||jA                  |       |D cg c]  }|jB                  | }}tE        |      dk(  r}t        j                  |d      }	|jA                  |	       |	j                          |	t        j                   ||      z  }	t        j                  d|z  |       |j#                  |	       g }ddi}|D ]g  }|jB                  J | jG                  ||jH                  d   |jH                  d   |jH                  ||j                         } |jJ                  |       i |j#                  |         y # t        $ r'}t        j                  ||       d\  }}Y d }~d }~ww xY wc c}w )Nr  r{  r  r   rf  r  
Target: %sParentKey: %srV  anyTF)r  rZ  r  rD  rE  rF  rA  rD  rE  rF  r   z,Can not find C++ declaration for alias '%s'.r  rX  norootrW  )&r  findallrL  r  rO  r  r|  r  r  rn  r   r  r~  r
   r3   clearrw  replace_selfdomainsr  r  r  r5  r  r  r  r  r  r  r9  r  r  rx  r/  rI  r\  rN  rC  )r0  kwargsr  r  rO  r  r  isShorthandr   rz  r=  r  r  nsr  rZ  
failReasonr  r   r   rZ  r  s                         r1  applyzAliasTransform.apply  sV   MM)))4 Q	)D((CI.)#15B#)#;#;#= [!!#
 {"11#r:8--c377!!'*!%!1!1%!8!=!=m!LJ#-#;#;I#FL\3/_i8Z__Q/0<$&G!#|444}}$$$&$5$5$?$?M$&M&2&<&<#"/&*"$%* '= ',# ? G!#~666yy 11$DH<@PT 2 V =NN1%")GQQ]]-FqGGG7|q "11#r:G$8--c377MPSS(,  .!!'*&! ! &A==444--D$5$5j$A!%!2!28!<%)%6%6&3!% . 0C !ELL%& !!%(cQ	) # .q40#- [.` Hs$   AMM5*M5	M2M--M2N)r   r8  rX  re   rY  rB   rN  r  rZ  r  r  r   rw   r  )rk  r   rw   r:  )r=  r>  r?  r   default_priorityr\  ro  r@  r3  r1  rS  rS    s?    )::Q>,%),:>,!$,)3,\R)r3  rS  c                  R    e Zd ZU ej                  ej
                  dZded<   ddZy)CPPAliasObjectrX  rf  r8   r  c                   d| j                   v r*| j                   j                  dd      \  | _        | _        nd| j                   c| _        | _        t	        j
                         }| j                  j                  |_        | j                  |d<   | j                  x|d<   |d<   g | _        | j                  j                  dd      d| j                  v d	}|d   r-|d   dk(  r%t        j                  d
| j                                | j                         }|D ])  }|j                  t!        ||| j"                               + t	        j$                         }|j                  |       | j'                          | j                  j)                  | j*                  | j,                  |       d| j"                  j.                  d<   | j1                          |gS )a   
        On purpose this doesn't call the ObjectDescription version, but is based on it.
        Each alias signature may expand into multiple real signatures (an overload set).
        The code is therefore based on the ObjectDescription version.
        r  rV  r   r  r  rV  rX  rf  rs  zError in C++ alias declaration. Requested 'noroot' but 'maxdepth' 1. When skipping the root declaration, need 'maxdepth' 0 for infinite or at least 2.r{  )r|  Nobject)r  splitr  r  r
   rq  r  r  r  r  r  r  r~  r  get_signaturesrx  rL  r|  r[  r  nested_parser_  content_offsetr  r  )r0  r  rN  
signaturesr  contentnodes         r1  r  zCPPAliasObject.runk  s    $))(,		Q(?%DK(*DII%DK}}

++X-1\\9Y$z* "
((Q7$,,.
 !l:&>!&CNN L %)$5$5$7	  9
 ((*
 	DCKK	#|BC	D ++-K 

d.A.A;O'+8$vr3  Nr  )	r=  r>  r?  r	   nonnegative_intr  r  r  r  r@  r3  r1  rr  rr  e  s%    ..//K 
&r3  rr  c                       e Zd Z	 	 	 	 	 	 ddZy)CPPXRefRolec                ~   |j                   j                  |j                         |st        j                  dt        |            }|d   dk(  r.|s|j                  d      r|d d }|j                  d      r|d d }|s<|j                  d      }|d d dk(  r#|dd  }|j                  d      }|d	k7  r||d
z   d  }||fS )Nra  ri  rd  r   r   rV  r  r  r  )	
attributesupdater  r   subr<  r  r  rfind)r0  r|  refnodehas_explicit_titletitletargetdcolons          r1  process_linkzCPPXRefRole.process_link  s    !!#//2! '**=#e*EE9& &%..*>cr
t$!]]3'F RayCab	T*R<!&1*+.Ef}r3  N)r|  r7   r  r/   r  rB   r  r<  r  r<  rw   ztuple[str, str])r=  r>  r?  r  r@  r3  r1  r~  r~    s    ),1@r3  r~  c                  (     e Zd Zd fdZddZ xZS )CPPExprRolec                D    t         |           |rd| _        y d| _        y )Nzcpp-exprz	cpp-texpr)r  r2  
class_type)r0  asCoder!  s     r1  r2  zCPPExprRole.__init__  s!    (DO *DOr3  c                   | j                   j                  dd      }t        || j                         | j                        }	 |j                         }| j                  j                  j                  dd       }|| j                  j                  d   d	   }t        j                  d| j                  g      }|j!                  |d
| j                  |       |gg fS # t        $ rX}t        j                  d||| j                                t        j                  d||| j                  g      gg fcY d }~S d }~ww xY w)Nr  r1  r  z!Unparseable C++ expression: %r
%sr{  rf  )rq  r  r  re  )rd  r  r  r  r  r  r   r  r~  r
   desc_inliner  r|  r  r  r  r  )r0  rd  r  r  r>  r  rz  s          r1  r  zCPPExprRole.run  s)   yy  s+!$+/+<+<+>)-6	\))+C xx))--.A4H88..u5mDL &&ut6GHw
DHHlKy"}  	\NN?r$($5$5$7  9 ((dT__DUVWY[[[		\s   C 	D>&AD93D>9D>)r  rB   rw   r:  )rw   z'tuple[list[Node], list[system_message]])r=  r>  r?  r2  r  r  r  s   @r1  r  r    s    *r3  r  c                     e Zd ZdZdZdZ e ed      dddd       e ed      ddd       e ed	      d
dd       e ed      ddd       e ed      dd       e ed      dd       e ed      ddd       e ed      dd       e ed      ddd       e ed      ddddddd      d
Zi de	de	de
d	ededededededededededededeZ e        e        e        e        ed       e        e        e        e        e        e        ed       ed      dZ eddddddd      i dZd)d Z	 	 	 	 d*d!Zd+d"Zd,d#Z	 	 	 	 	 	 	 	 	 	 d-d$Z	 	 	 	 	 	 	 	 	 	 d.d%Z 	 	 	 	 	 	 	 	 d/d&Z!d0d'Z"d1d(Z#y)2	CPPDomaina  C++ language domain.

    There are two 'object type' attributes being used::

    - Each object created from directives gets an assigned .objtype from ObjectDescription.run.
      This is simply the directive name.
    - Each declaration (see the distinction in the directives dict below) has a nested .ast of
      type ASTDeclaration. That object has .objectType which corresponds to the keys in the
      object_types dict below. They are the core different types of declarations in C++ that
      one can document.
    rf  r  rJ   r~   rJ  r  r   r  funcr  r  rL   rZ   r  zfunction parameterr  )
rJ   r   r  r  r  rL   rZ   r  r-  r,  r  r  rh   znamespace-pushznamespace-poprU  T)
fix_parens)r  F)rd  rJ   r~   r   r  r  r  r  rL   rZ   r  r?  texprN)r  r  c                   t         j                  rqt        j                  d|       t        j                  d       t        j                  | j                  d   j                  d             t        j                  d       | j                  d   }|j                  |       t         j                  rqt        j                  d       t        j                  | j                  d   j                  d             t        j                  d       t        j                  d|       t        | j                  d	   j                               D ]  \  }}||k(  s| j                  d	   |=  y )
Nzclear_doc: %sz	before:r  rV  z	before endz	after:z
	after endzclear_doc end: %sr  )	r8  r  r  r  r  r5  r6  rY  items)r0  r  r=  r  nDocnames        r1  r6  zCPPDomain.clear_doc  s    !!LL'2LL%LL=166q9:LL(YY}-
W%!!LL$LL=166q9:LL'LL,g6"499W#5#;#;#=> 	-ND(7"IIg&t,	-r3  c                    t         j                  r^t        j                  d|       t        j                  | j                  d   j                  d             t        j                  d|       y y )Nzprocess_doc: %sr  r   zprocess_doc end: %s)r8  r  r  r  r  r5  )r0  r|  r  r  s       r1  process_doczCPPDomain.process_doc,  sN    !!LL*G4LL=166q9:LL.8 "r3  c                b    |j                   j                  | j                  j                         y r-  )r  r  r|  r  )r0  r  s     r1  process_field_xrefzCPPDomain.process_field_xref3  s      4 45r3  c                t   t         j                  rt        j                  d       t        j                  d       t        j                  | j                  d   j                  d             t        j                  d       t        j                  d       t        j                  |d   j                  d             t        j                  d       | j                  d   j                  |d   || j                         | j                  d   }|d   j                         D ]  \  }}||v s||vs|||<    t         j                  rqt        j                  d	       t        j                  | j                  d   j                  d             t        j                  d
       t        j                  d       y y )Nzmerge_domaindata:z	self:r  rV  z		self endz	other:z
	other endr  z	result:z	result endzmerge_domaindata end)	r8  r  r  r  r  r5  r  r|  r  )r0  r  	otherdataourNamesr  r  s         r1  merge_domaindatazCPPDomain.merge_domaindata6  sI   !!LL,-LL#LL=166q9:LL&LL$LL=166q9:LL'		- ++Im,D,4dhh	@99W%&w/557 	-MD'("x'%,HTN	-
 !!LL%LL=166q9:LL(LL/0	 "r3  c           	     :	   # dv rdz  t        j                        }	 |j                         \  }	}
j                  dd       } j                  d	   }|rq|j                  |      }|sZt        j                  d
       t        j                  d|j                         t        j                  |j                  d             |sJ |}|
rt        |	t              sJ |	}|j                  }|j                  r|j                  j                  }ng }|j                    xr t#        |j$                        dk(  }|j'                  ||ddd|      \  }}|"dk(  r|dk(  rt)        t+        |            d }n<|d   }n6t        |	t,              sJ |	}|j.                  }|j1                  |ddd      }||j2                  .t+        |      }|j5                  d      s|dk(  rt)        |      yj5                  d      rdd  |j2                  j6                  #d## fd} |       s<t        j                  d|j2                  j6                  |j9                                |j2                  }|
r0|j9                         }|j;                         j=                  d      }nj;                         }|j>                  }|sJ dk7  r\|jA                  d      jC                         } d}!j                  dd      s|j6                  dk(  r|
r}j                  jD                  r
dk(  r|!dz  }!j                  jD                  rdk(  r| jG                  d      r|!dz  }!dv r| jG                  d       r|jG                  d      r{|!dz  }!nuj                  jD                  rIdk(  r|jG                  d      r|!dz  }!nCdk(  r>| jG                  d      r-|jG                  d      s| d d! } n|jG                  d      r|!dz  }!|!dkD  r| d|!z  z  } |tI        jJ                  |       z  }tM        ||||jO                         ||      |j6                  f}"|"S # t        $ r7}d"fd} ||      \  }}t        j                  d||       Y d }~yd }~ww xY w)$N)rd  r  r   r  c                    dk7  r	dk7  r| fS t        d d j                        }	 |j                          | fS # t        $ r}d d |fcY d }~S d }~ww xY w)Nrd  r  r  r  )r  r  r  r   )r   parser2r  r|  r  r  r  s      r1  findWarningz2CPPDomain._resolve_xref_inner.<locals>.findWarningY  su    %<C6M!19$*6#2;4825**>+--/ qy  ' +!#2;?*+s   A   	A	AAAz&Unparseable C++ cross-reference: %r
%sr{  r  rm  r  rb  rc  rV  T)rD  rE  rF  rA  rJ  r  r   re  zstd::rX  cpp:r   c                     dk(  ryj                        } | r| v S t        j                  d d        t        )Nrd  TzType is z, declaration type is )objtypes_for_roler  r  r  )objtypesdeclTypr0  r  s    r1  	checkTypez0CPPDomain._resolve_xref_inner.<locals>.checkType  sK    e|--c2H(**LL8C5(>wiHI  r3  zcpp:%s targets a %s (%s).r  refexplicitFr  rd  r  z
operator()rn   r  )r   ry  rw   ztuple[str, Exception]r  )(r  r  r  r   r  r~  r  r  r  r  r5  r  r  r  r  r  r  rI  r  r  r   r<  r9  r  r  r/  r  r  r   rb  r  r  rB  rN  r  r  r   r  r,   r  )$r0  r|  fromdocnamebuilderr  r  r  contnoder  r  rl  r   r  r   r>  rO  r=  r  rm  r  rZ  rA  r  rn  r   r  txtNamer  r/  fullNestedNamedisplayNamer  r  addParenr  r  s$   ``  ```                            @r1  _resolve_xref_innerzCPPDomain._resolve_xref_innerN  s~    /!dNF!&4

K	%779C(  $xx(8$?	YY}-
#-#;#;I#FL\62_inn=Z__Q/0<%Lc<000B==D   " 1 1 ; ; "$(KKIS_5I"."8"8mS"&d!1	 #9 #3GZ
 ,&!%?? $CIs33 AJc>222D99D--dC@D8<D . RA 9-$iG!!'*g.>GS))>>&!ab'C--**	! {NN6 8 8113$(  *
 mm335N(;;=DDSIK113K))w ,LLO**,E H88M51k6L6LPZ6Zzz::se| A

;;v!NN<8 A.!NN:6'00> A zz::%<K,@,@,F$MH F]$~~d3K<P<PQU<V(-cr
&//5$MH!|(

5))H7K&446+)445 
U  	! !  NEArNNDa$(  *%	s   Q 	R#-RRc           	     6    | j                  |||||||      d   S rH  )r  )r0  r|  r  r  r  r  r  r  s           r1  resolve_xrefzCPPDomain.resolve_xref  s1     ''['3(.h@@AC 	Cr3  c           
         t        j                         5  | j                  |||d|||      \  }}d d d        r!dk(  rd|fgS d| j                  |      z   |fgS g S # 1 sw Y   .xY w)Nrd  r,  zcpp:templateParamr  )r   suppress_loggingr  role_for_objtype)	r0  r|  r  r  r  r  r  retnoder  s	            r1  resolve_any_xrefzCPPDomain.resolve_any_xref  s     %%' 	W#77['8=vtX WGW	W /),g677$"7"7"@@'JKK		W 	Ws   AA&c              #    K   | j                   d   }|j                         D ]  }|j                  |j                  sJ |j	                         }t        |      j                  d      }|j                         j                  d      }|j                  j                  }|j                  }|j                  j                         }|||||df  y w)Nr  r  rV  )
r  r:  r/  r  r   r<  r  rb  r  r  )	r0  r=  r.  r  r  dispnamer  r  r  s	            r1  get_objectszCPPDomain.get_objects  s     YY}-
 002 
	EF!!)>>!>#88:N~&--c2D%88:AA#FH++66JnnG))779H:w!DD
	Es   CCc                   |j                  dd       }|y |j                  dd       }|t        |j                        dk  ry | j                  d   }|j                  |      }|j	                         }dj                  t        |      |g      S )Nrj  rm  r   r  r  )r  rI  r  r  r   r  r<  )r0  r  r  rO  r=  r  
parentNames          r1  get_full_qualified_namez!CPPDomain.get_full_qualified_name   s    +t,>#xx(8$?	INN 3q 8YY}-
!//	:!668
yy#j/6233r3  r  )r|  r7   r  r<  r  znodes.documentrw   r:  )r  r4   rw   r:  )r  r
  r  r  rw   r:  )r|  r7   r  r<  r  r6   r  r<  r  r<  r  r4   r  r/   rw   z!tuple[Element | None, str | None])r|  r7   r  r<  r  r6   r  r<  r  r<  r  r4   r  r/   rw   zElement | None)r|  r7   r  r<  r  r6   r  r<  r  r4   r  r/   rw   zlist[tuple[str, Element]])rw   z-Iterator[tuple[str, str, str, str, str, int]])r  r/   rw   r<  )$r=  r>  r?  r  r  r  r   r   object_typesr/  r2  r  r  r  r  r4  r6  r8  rD  rI  rr  r	   r~  r  rolesr8  initial_datar6  r  r  r  r  r  r  r  r  r@  r3  r1  r  r    s   
 DEajwLRXYajwLRXYa
mvLRXYakxLQaiLRXYa	lyLQaivLRXYao|LQ #7!8LRZ\ab #7!8!-w'8UZ\bdL 	. 		
 	% 	/ 	 	 	# 	 	} 	m 	) 	'  	0!" 	.#& 	'J, }-t,-}=!m4(E*E  dD$dD$GL
-&9,9159610S!$S.1S9ES&-S2SSjCC'*C2>CJQC(C!$,8DK7E4r3  r  c                   | j                  t               | j                  dg d       | j                  dg d       | j                  dg d       | j                  dd dt        d h       | j	                  t
               | j                  ddd	       | j                  d
dd	       d }| j                  d|       dddddS )Nr  r|  r  r  r  )typescpp_debug_lookupFr   cpp_debug_show_treec                    | j                   j                  t        _        | j                   j                  t        _        | j                   j                  j                  d       y )NT)r>  )r  r  r8  r.  r  r  r  sort)r  s    r1  	initStuffzsetup.<locals>.initStuff   sA    !jj99!$!?!?

**///=r3  zbuilder-initedbuiltin	   T)r\  env_versionparallel_read_safeparallel_write_safe)
add_domainr  add_config_valuere   add_post_transformrS  connect)r  r  s     r1  setupr     s    NN92B>,b%8/U;<dERUW[Q\]>* +UB7.r:> KK ), "#	 r3  )r  z+ASTTemplateParams | ASTTemplateIntroductionr~  r  rw   rB   r  )r  r5   rw   zdict[str, Any])r  
__future__r   rl  typingr   r   r   r   docutilsr   docutils.parsers.rstr	   sphinxr
   sphinx.directivesr   sphinx.domainsr   r   sphinx.errorsr   sphinx.localer   r   sphinx.rolesr   r   sphinx.transformsr   !sphinx.transforms.post_transformsr   sphinx.utilr   sphinx.util.cfamilyr   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   sphinx.util.docfieldsr)   r*   sphinx.util.docutilsr+   sphinx.util.nodesr,   collections.abcr-   r.   docutils.nodesr/   r0   r1   r2   sphinx.addnodesr3   r4   sphinx.applicationr5   sphinx.buildersr6   sphinx.environmentr7   sphinx.util.typingr8   	getLoggerr=  r  r9   rm  VERBOSEr  Sr,  rz  r3  r  r;  rB  r  r  r  r  rX  r  r8  r  r%  r  r  r
  r"  r  ry  r+  rB  rF  r  r  r  r  r  r  r  r  r	  r  r!  r(  r<  rL  rX  r_  ri  rq  rw  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r,  r4  r=  rC  rT  ra  ri  rr  r  r  r  r  r  r  r  r  r  r  r  r	  r  r"  r;  rW  rd  r  r  r  r  r  r  r  r  r  r  r"  r,  r5  r<  rE  rL  rT  rZ  rd  rm  r  r  r  r  r  r  r  r9  r  r  r  r  r8  r  r  r  r  r  r  r  r/  r2  r4  r6  r8  rD  rI  rL  rS  rr  r~  r  r  r  r@  r3  r1  <module>r     s    " 	 8 8  +  / *   - - @      * 6 0 *3II<)'3-			8	$CLzx BJJ  ZZ  RZZ 89;?
=>rzz 	 ZZ	 BJJ  
 ZZ 	$ (RZZ ) ZZ  5
    0	>0!0 0 '	0 0 0 0 0 0 0  !0" #0$ %0& 	'0( 	
)0* 	
+0, 	
-0. 	
/00 	
102 	
304 	
506 	
708 	
90: 	
;0< 
#=0> 
#?0@ 	-A0B 	.C0D E0F G0H 	.I0J 	.K0L M0N 	/O0P 

	(


_0l4
C4 C4 C	4
 34 S4 s4 4 4 t4 S4 4 C4 4 c4  #!4" 
3#4$ c%4& #'4( )4* C+4, C-4. /40 3142 s344 S546 748 94: S;4< =4> C?4@ sA4B #C4D cE4F G4H sI4J K4L SM4N cO4P 3Q4R S4R "3S4T #U4T #CU4V dW4X tY4Z D[4\ ]4^ _4` ca4b Dc4d de4f dg4 j4	44T4 d4 	4 4 4 4 4 4 4  !4" #4" #4$ %4$ %4& '4& d'4( )4* 	$+4, 	$-4. 	$/40 	$142 	$344 	$544 $546 	$746 748 	$948 $94: 	$;4< 	$=4> 
4?4@ 
4A4B 	$C4D 	$E4D $E4F G4H I4J 	$K4L 	$M4N 
4O4P Q4P dQ4R 	$S4R tS4T 	$U4T dU4V 	$W4X 	$Y4Z [4\ 
4]4^ 


	g4l 
					d		  S	Ds/ +  
4L	5M'N%L(O!	4L#J	5M  S [  	 PI P	k 	NCG NCbS7 S:ECG ECX.G .	 		C
 	CC
 C*Jz J Jz J <Z <<KJ K(	=] 	=;;- ;;|;= ;"Am A&.7 .;l ;"I| I I I 	:L 	:	:L 	:@ @&=] =0;m ;@; ;.A] A0; ;(;M ;$AM A";] ;$;m ;$.I .Ib AM  ALA- A.%I= %IP#E #EL; ;>!F !FHI= I47m 7,*' *ZB B<W W&Ik I.BW B(/;g /;j.' .%<%8 %<P;&9 ;";"5 ;();1 );XK7 KD?g ?$TYg TYn?g ?*b. b.J@I7 @IL;w ;@).G ).XUJ UJp+A +A\iA} iAX@A} @AF<A] <A~aA- aAHCI CIR?= ?";+ ;4HW H.kAg kA\'Eg 'ET"Eg "EJR7 RHL L8 C7  CF0w 0fHw H6(Gg (GVKG KP.w .(6N'7 6Nr!A+ !AH&A#3 &AR5C. 5CpIU IU^3Ow 3Ol1;g 1;l$]7 $]NA A"cDW cDL7 ) ) %49=2d dN{Gz {G|=7
G!.1 GTI y i 	 $Y Y I ) ! !H_ @O 2B B,C)_ C)L,& ,^( <* B|4 |4~	r3  