U
    \ªSh ã                Y   @  s  U d Z ddlmZ ddlZddlmZmZmZmZm	Z	 ddl
mZ ddlmZmZmZmZ ddlmZ ddlmZ dd	lmZmZ 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$ 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/m0Z0 ddl1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZD ddlEmFZFmGZG ddlHmIZI ddlJmKZK ddlLmMZM e0 NeO¡ZPe	dƒZQe RdejS¡ZTe RdejU¡ZVe Rd¡ZWe RdejS¡ZXe RdejS¡ZYd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxgYZZe RdyejS¡Z[dzZ\dd{d|d}d~gZ]ddd€ddd‚dƒdƒd„d…d†œ
Z^d‡dˆd‰dŠd‹dŒdœZ_dŽddd‘d’d“d”d•d–d—d˜d™dšd›dœddždŸd d¡d¢d£d¤d¥d¦d§d¨d©dªd«d¬d­d®d¯d°d±d²d³d´dµd¶d·d¸œ*Z`d‹d…dd¹dºd»d¼d½d¾d¿d¿d¿d¿dÀdÀddddÁdÁdƒdƒdƒdƒdŒdŒdÂdÂdÂdÂdÂdÃdÃdÄdÄdÅdÆdÇdÈdÈdÈdÉdÉdÊdËdÌdÆdÇdÈdÍdÎdÏdÐœ4ZadÑdÒdÓdÔdÕdÕdÖd×dØdÙdÚdÛdÛdUdUdÜdÜdÝdÞdßdàdádâdãdãdädädådådædçdèdédêdëdëdìdídîdïd‡dðdðdñdñdòdòdódôdõdöd÷dødùdúdûdüœ8Zbdýdþdÿd dddðdðdÕdÕdœ
Zcddd½d¼d»dœZddeed< ddUgdd"gd	d'gd
dwgdd&gdddRgdddddgddgddgdddgddggZfddddddddQdd1g
Zgd d!d"d#d$d%d&d'd(d#d)d*dxdVgZhd+d,d-d.d/œZiG d0d1„ d1ejƒZkG d2d3„ d3e3ƒZlG d4d5„ d5elƒZmG d6d7„ d7elƒZnG d8d9„ d9elƒZoG d:d;„ d;elƒZpG d<d=„ d=epƒZqG d>d?„ d?eqƒZrG d@dA„ dAeqƒZsG dBdC„ dCeqƒZtG dDdE„ dEeqƒZuG dFdG„ dGeqƒZvG dHdI„ dIeqƒZwG dJdK„ dKepƒZxG dLdM„ dMepƒZyG dNdO„ dOepƒZzG dPdQ„ dQepƒZ{G dRdS„ dSelƒZ|G dTdU„ dUe|ƒZ}G dVdW„ dWe|ƒZ~G dXdY„ dYe|ƒZG dZd[„ d[e|ƒZ€G d\d]„ d]e|ƒZG d^d_„ d_e|ƒZ‚G d`da„ daepƒZƒG dbdc„ dcepƒZ„G ddde„ deepƒZ…G dfdg„ dgepƒZ†G dhdi„ diepƒZ‡G djdk„ dkepƒZˆG dldm„ dmepƒZ‰G dndo„ doepƒZŠG dpdq„ dqepƒZ‹G drds„ dsepƒZŒG dtdu„ duepƒZG dvdw„ dwepƒZŽG dxdy„ dyepƒZG dzd{„ d{epƒZG d|d}„ d}elƒZ‘G d~d„ depƒZ’G d€d„ depƒZ“G d‚dƒ„ dƒepƒZ”G d„d…„ d…elƒZ•G d†d‡„ d‡e•ƒZ–G dˆd‰„ d‰e•ƒZ—G dŠd‹„ d‹e•ƒZ˜G dŒd„ delƒZ™G dŽd„ delƒZšG dd‘„ d‘elƒZ›G d’d“„ d“e›ƒZœG d”d•„ d•e›ƒZG d–d—„ d—e›ƒZžG d˜d™„ d™e›ƒZŸG dšd›„ d›elƒZ G dœd„ delƒZ¡G dždŸ„ dŸelƒZ¢G d d¡„ d¡elƒZ£G d¢d£„ d£elƒZ¤G d¤d¥„ d¥elƒZ¥G d¦d§„ d§elƒZ¦G d¨d©„ d©elƒZ§G dªd«„ d«e§ƒZ¨G d¬d­„ d­e§ƒZ©G d®d¯„ d¯e§ƒZªG d°d±„ d±e§ƒZ«G d²d³„ d³e§ƒZ¬G d´dµ„ dµe§ƒZ­G d¶d·„ d·e§ƒZ®G d¸d¹„ d¹epƒZ¯G dºd»„ d»e4ƒZ°G d¼d½„ d½elƒZ±G d¾d¿„ d¿elƒZ²G dÀdÁ„ dÁelƒZ³G dÂdÃ„ dÃelƒZ´G dÄdÅ„ dÅelƒZµG dÆdÇ„ dÇelƒZ¶G dÈdÉ„ dÉelƒZ·G dÊdË„ dËelƒZ¸G dÌdÍ„ dÍelƒZ¹G dÎdÏ„ dÏelƒZºG dÐdÑ„ dÑelƒZ»G dÒdÓ„ dÓelƒZ¼G dÔdÕ„ dÕe¼ƒZ½G dÖd×„ d×e¼ƒZ¾G dØdÙ„ dÙe¼ƒZ¿G dÚdÛ„ dÛe¼ƒZÀG dÜdÝ„ dÝelƒZÁG dÞdß„ dßelƒZÂG dàdá„ dáelƒZÃG dâdã„ dãelƒZÄG dädå„ dåelƒZÅG dædç„ dçelƒZÆG dèdé„ déelƒZÇG dêdë„ dëƒZÈG dìdí„ díƒZÉdîdd(dïœdðdñ„ZÊG dòdó„ dóƒZËG dôdõ„ dõe5ƒZÌd9döœd÷dø„ZÍG dùdú„ dúeeÆ ƒZÎG dûdü„ düeÎƒZÏG dýdþ„ dþeÎƒZÐG dÿd „ d eÎƒZÑG dd„ deÎƒZÒG dd„ deÎƒZÓG dd„ deÎƒZÔG dd„ deÎƒZÕG d	d
„ d
eÎƒZÖG dd„ deIƒZ×G dd„ deIƒZØG dd„ deIƒZÙG dd„ dejƒZÚG dd„ de,ƒZÛG dd„ deƒZÜG dd„ de*ƒZÝG dd„ de)ƒZÞG dd„ deƒZßdddœd d!„ZàdS ("  zThe C++ language domain.é    )ÚannotationsN)ÚAnyÚCallableÚ	GeneratorÚIteratorÚTypeVar)Únodes)ÚElementÚNodeÚTextElementÚsystem_message)Ú
directives)Úaddnodes)Údesc_signatureÚpending_xref)ÚSphinx)ÚBuilder)ÚObjectDescription)ÚDomainÚObjType)ÚBuildEnvironment)Ú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)Ú
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
        ->\*    |    \.\*    |    \,
    |   (<<|>>)=?    |    &&    |    \|\|
    |   !=
    |   [<>=/*%+|&^~-]=?
ZalignasÚalignofÚandÚand_eqÚasmÚautoÚbitandÚbitorÚboolÚbreakÚcaseZ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ÚexplicitZexportÚexternÚfalseÚfloatÚforÚfriendZgotoÚifÚinlineÚintÚlongÚmutableÚ	namespaceÚnewÚnoexceptÚnotÚnot_eqÚnullptrÚoperatorÚorÚor_eqÚprivateZ	protectedÚpublicÚregisterÚreinterpret_castÚrequiresÚreturnÚshortÚsignedÚsizeofÚstaticZ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
é   Ú Z_CPPv2Z_CPPv3Z_CPPv4ÚcÚCÚiÚUÚlÚLÚb)
rB   úsigned charúunsigned charr_   ú
signed intúunsigned intr`   úsigned longúunsigned longr?   ÚssÚosÚisÚiosÚvÚm)zstd::stringzstd::ostreamzstd::istreamzstd::iostreamzstd::vectorzstd::mapznew-operatorznew-array-operatorzdelete-operatorzdelete-array-operatorzinv-operatorzadd-operatorzsub-operatorzmul-operatorzdiv-operatorzmod-operatorzand-operatorzor-operatorzxor-operatorzassign-operatorzadd-assign-operatorzsub-assign-operatorzmul-assign-operatorzdiv-assign-operatorzmod-assign-operatorzand-assign-operatorzor-assign-operatorzxor-assign-operatorzlshift-operatorzrshift-operatorzlshift-assign-operatorzrshift-assign-operatorzeq-operatorzneq-operatorzlt-operatorzgt-operatorzlte-operatorzgte-operatorznot-operatorzsand-operatorzsor-operatorzinc-operatorzdec-operatorzcomma-operatorzpointer-by-pointer-operatorzpointer-operatorzcall-operatorzsubscript-operator)*rc   únew[]rQ   údelete[]ú~ú+ú-Ú*ú/ú%ú&ú|ú^ú=ú+=ú-=ú*=ú/=ú%=ú&=ú|=ú^=ú<<ú>>ú<<=ú>>=ú==ú!=ú<ú>ú<=ú>=ú!ú&&ú||ú++ú--ú,ú->*ú->ú()ú[]ÚaÚhÚwZDiZDsZDuÚsÚtÚjÚxÚyÚnÚoÚfÚdÚeÚgZCfZCdZCeZDaÚDcZDn)4r…   r?   rB   r”   r•   r‡   rE   rD   rC   rq   z	short intzsigned shortzsigned short intzunsigned shortzunsigned short intr_   rr   r–   r‚   r—   r`   zlong intr˜   zsigned long intr™   zunsigned long intz	long longzlong long intzsigned long longzsigned long long intÚ__int64zunsigned long longzunsigned long long intÚ__int128zsigned __int128zunsigned __int128rZ   rS   zlong doubleÚ	__float80Ú	_Float64xÚ
__float128Ú	_Float128z_Complex floatz_Complex doublez_Complex long doublez_Imaginary floatz_Imaginary doublez_Imaginary long doubler<   údecltype(auto)zstd::nullptr_tÚnwÚnaÚdlÚdaÚcoÚplÚmiÚmlZdvZrmZanÚeoZaSZpLZmIZmLZdVZrMZaNZoRZeOZlsÚrsZlSZrSÚeqÚneÚltÚgtÚleÚgeÚntÚaaZooÚppÚmmÚcmÚpmÚptÚclÚixZdsZqu)8rc   r    rQ   r¡   r¢   rG   r£   r¤   r¥   r¦   r§   r¨   r=   r©   r>   rª   r‰   r«   r¬   r­   r®   r¯   r°   r±   r:   r²   rj   r³   rŠ   r´   rµ   r¶   r·   r¸   r¹   rf   rº   r»   r¼   r½   ú<=>r¾   re   r¿   r9   rÀ   ri   rÁ   rÂ   rÃ   rÄ   rÅ   rÆ   rÇ   ú.*ú?Zpp_Zmm_ÚdeÚadZpsÚng)
rÁ   rÂ   r¥   r¨   r£   r¤   r¾   re   r¢   rG   )NÚu8Úur   r’   zdict[str | None, str]Ú_id_char_from_prefixrÀ   r¿   r©   rª   r¨   r¸   r¹   r÷   r¼   r½   rº   r»   r´   rµ   r£   r¤   r¥   r¦   r§   rø   rÄ   rÁ   rÂ   r¾   r¢   r«   r®   r¯   r°   r¬   r­   r·   r¶   r±   r³   r²   ZdcÚscÚccÚrc)rT   ru   rM   rn   c                   @  s,   e Zd Zddddœdd„Zddœd	d
„ZdS )Ú_DuplicateSymbolErrorÚSymbolÚASTDeclarationÚNone)ÚsymbolÚdeclarationrp   c                 C  s    |st ‚|st ‚|| _|| _d S ©N)ÚAssertionErrorr  r  )Úselfr  r  © r  úE/root/rtd-docs/venv/lib/python3.8/site-packages/sphinx/domains/cpp.pyÚ__init__N  s    z_DuplicateSymbolError.__init__Ústr©rp   c                 C  s   d| j  d¡ S )Nz'Internal C++ duplicate symbol error:
%sr   )r  Údump©r  r  r  r  Ú__str__T  s    z_DuplicateSymbolError.__str__N)Ú__name__Ú
__module__Ú__qualname__r  r  r  r  r  r  r  M  s   r  c                   @  s   e Zd ZdS )ÚASTBaseN©r  r  r  r  r  r  r  r  X  s   r  c                   @  sp   e Zd Zdddœdd„Zddœdd	„Zd
ddœdd„Zddœdd„Zddœdd„Zddddddddœdd„ZdS )ÚASTIdentifierr  r  ©Ú
identifierrp   c                 C  s&   |d k	st ‚t|ƒdkst ‚|| _d S ©Nr   )r
  Úlenr  ©r  r  r  r  r  r  `  s    zASTIdentifier.__init__r?   r  c                 C  s   | j d dkS )Nr   ú@©r  r  r  r  r  Úis_anone  s    zASTIdentifier.is_anonr_   ©Úversionrp   c                 C  s’   |   ¡ r|dk rtƒ ‚|dkr2| jdkr,dS | jS | jdkr@dS | jd dkrRd	S |   ¡ rzd
t| jƒd | jdd … f S tt| jƒƒ| j S d S )Né   é   Zsize_trË   ÚstdZStr   r¢   ZD0zUt%d_%s)r!  r$   r  r  r  ©r  r#  r  r  r  Úget_idh  s    

 zASTIdentifier.get_idc                 C  s   | j S r	  r   r  r  r  r  r  }  s    zASTIdentifier.__str__c                 C  s   |   ¡ rdS | jS )Nú[anonymous])r!  r  r  r  r  r  Úget_display_string€  s    z ASTIdentifier.get_display_stringr   r   r  ©ÚsignodeÚmodeÚenvÚprefixÚtemplateArgsr  rp   c                 C  sR  t |ƒ |  ¡ rtjdd}nt | j| j¡}|dkrx|| j | }tjddd|d d d}	| ¡ |	d< |	|7 }	||	7 }nÖ|d	kršt ¡ }
|
|7 }
||
7 }n´|d
kr¬||7 }n¢|dkrÌ|d  d¡ ||7 }n‚|dkrBt	|ƒdksæt
‚t	|ƒdksöt
‚|  ¡ rt
‚d| j }tjddd|d d d}	| ¡ |	d< |	|7 }	||	7 }ntd| ƒ‚d S )Nr)  )ÚtextÚmarkTyperŒ   Úcppr  ©Z	refdomainÚreftypeÚ	reftargetÚmodnameÚ	classnameúcpp:parent_keyÚ
lastIsNameÚ
noneIsNameÚparamÚclassesz	sig-paramÚudlr   ú
operator""úUnknown description mode: %s)r1   r!  r   Zdesc_sig_namer  r   Úget_lookup_keyÚ	desc_nameÚappendr  r
  Ú	Exception)r  r,  r-  r.  r/  r0  r  ÚnodeÚ
targetTextÚpnodeZnameNoder  r  r  Údescribe_signatureƒ  sN     ý





 ý
z ASTIdentifier.describe_signatureN)	r  r  r  r  r!  r(  r  r*  rH  r  r  r  r  r  _  s   r  c                   @  sd   e Zd Zddddœdd„Zddœd	d
„Zdddœdd„Zdddœdd„Zdddddddœdd„ZdS )ÚASTNestedNameElementúASTIdentifier | ASTOperatorÚASTTemplateArgsr  )Ú	identOrOpr0  rp   c                 C  s   || _ || _d S r	  ©rL  r0  )r  rL  r0  r  r  r  r  ®  s    zASTNestedNameElement.__init__r?   r  c                 C  s   dS ©NFr  r  r  r  r  Úis_operator³  s    z ASTNestedNameElement.is_operatorr_   r  r"  c                 C  s&   | j  |¡}| jr"|| j |¡7 }|S r	  )rL  r(  r0  ©r  r#  Úresr  r  r  r(  ¶  s    zASTNestedNameElement.get_idr%   ©Ú	transformrp   c                 C  s"   || j ƒ}| jr||| jƒ7 }|S r	  rM  ©r  rS  rQ  r  r  r  Ú
_stringify¼  s    
zASTNestedNameElement._stringifyr   r   r  )r,  r-  r.  r/  r  rp   c                 C  sN   | j d k	rt| j ƒnd}| j ||||||¡ | j d k	rJ| j  |d||¡ d S )NrŒ   r2  )r0  r  rL  rH  )r  r,  r-  r.  r/  r  ZtArgsr  r  r  rH  Â  s    
z'ASTNestedNameElement.describe_signatureN)r  r  r  r  rO  r(  rU  rH  r  r  r  r  rI  ­  s
   rI  c                   @  sz   e Zd Zdddddœdd„Zed dœd	d
„ƒZddœdd„Zdddddœdd„Zdddœdd„Zddddddœdd„Z	dS )ÚASTNestedNamezlist[ASTNestedNameElement]z
list[bool]r?   r  )ÚnamesÚ	templatesÚrootedrp   c                 C  s>   t |ƒdkst‚|| _|| _t | jƒt | jƒks4t‚|| _d S r  )r  r
  rW  rX  rY  )r  rW  rX  rY  r  r  r  r  Ë  s
    zASTNestedName.__init__r  c                 C  s   | S r	  r  r  r  r  r  ÚnameÓ  s    zASTNestedName.namer_   c                 C  s,   d}| j D ]}| ¡ rq
|jr
|d7 }q
|S ©Nr   r%  )rW  rO  r0  )r  ÚcountrÐ   r  r  r  Únum_templates×  s    

zASTNestedName.num_templatesrŒ   r  )r#  Ú	modifiersrp   c                   s¶   ˆ dkr:t | ƒ}|tkr t| S d ‡ fdd„| jD ƒ¡S g }t| jƒdksXt|ƒdkrb| d¡ | |¡ | jD ]}| | ˆ ¡¡ qrt| jƒdks¢t|ƒdkr¬| d¡ d |¡S )	Nr%  ú::c                 3  s   | ]}|  ˆ ¡V  qd S r	  ©r(  )Ú.0rÐ   ©r#  r  r  Ú	<genexpr>æ  s     z'ASTNestedName.get_id.<locals>.<genexpr>r   ÚNÚErŒ   )r  Ú_id_shorthands_v1ÚjoinrW  r  rC  r(  )r  r#  r^  ÚttrQ  rÐ   r  rb  r  r(  à  s    



zASTNestedName.get_idr%   rR  c                 C  sh   g }| j r| d¡ tt| jƒƒD ]:}| j| }| j| rN| d||ƒ ¡ q"| ||ƒ¡ q"d |¡S )NrŒ   z	template r_  )rY  rC  Úranger  rW  rX  rg  )r  rS  rQ  r   rÐ   r  r  r  rU  ò  s    


zASTNestedName._stringifyr   r   r  ©r,  r-  r.  r  rp   c                 C  s  t |ƒ |dkr¬| jr,tdƒ‚|t d¡7 }tt| jƒƒD ]l}|dkr\tdƒ‚|t d¡7 }| j| }| j| r”tdƒ‚|t d¡7 }|t d¡7 }| 	|||d|¡ q:nl|d	kr| jrÈtt
| ƒƒ‚t| jƒd
ksÚt‚| jd rèt‚| jd  	|d	|d|¡ n|dkrg }|dkrB|d k	s*t‚|jjd k	rB|jjj}d}d}	d}
d}|dkrj| jd d… n| j}|}|dkr†t ¡ }| jrÐ|
d7 }
|dkrÀt|ƒdkrÀ|t dd¡7 }n|t dd¡7 }tt|ƒƒD ]º}|| }| j| }|s|t dd¡7 }|
d7 }
|r2|t dd¡7 }|t ¡ 7 }d}t
|ƒ}|dkrŒ|jrv|t|ƒk rv|	t
|| ƒ7 }	|d
7 }| 	|d||	|
 |¡ |
|7 }
qÜ|dkrt| jƒd
krÊ|t dd¡7 }||7 }| jd rò|t dd¡7 }|t ¡ 7 }| jd  	|||d|¡ ntd| ƒ‚d S )Nr;  zCan this happen?r_  r   z::blahrx   ú rŒ   r<  r%  )r2  r:  ÚmarkNamer:  TéÿÿÿÿFr2  r@  )r1   rY  r
  r   ÚTextri  r  rW  rX  rH  r  r  ÚtemplatePrefixr   Údesc_addnameÚdesc_sig_punctuationÚdesc_sig_keywordÚdesc_sig_spacer0  rD  )r  r,  r-  r.  r  r   rÐ   ÚtemplateParamsZiTemplateParamsZtemplateParamsPrefixr/  ÚfirstrW  ÚdestÚnnerx   Ztxt_nner  r  r  rH  þ  sŠ    








  ÿ
z ASTNestedName.describe_signatureN)rŒ   )
r  r  r  r  ÚpropertyrZ  r]  r(  rU  rH  r  r  r  r  rV  Ê  s   	rV  c                   @  s2   e Zd Zdddœdd„Zddddd	d
œdd„ZdS )ÚASTExpressionr_   r  r"  c                 C  s   t t| ƒƒ‚d S r	  ©ÚNotImplementedErrorÚreprr'  r  r  r  r(  T  s    zASTExpression.get_idr   r   r  r  rj  c                 C  s   t t| ƒƒ‚d S r	  rz  ©r  r,  r-  r.  r  r  r  r  rH  W  s    z ASTExpression.describe_signatureN©r  r  r  r(  rH  r  r  r  r  ry  S  s   ry  c                   @  s   e Zd ZdS )Ú
ASTLiteralNr  r  r  r  r  r  _  s   r  c                   @  sB   e Zd Zdddœdd„Zdddœdd	„Zd
dddddœdd„ZdS )ÚASTPointerLiteralr%   r  rR  c                 C  s   dS ©Nrg   r  ©r  rS  r  r  r  rU  d  s    zASTPointerLiteral._stringifyr_   r"  c                 C  s   dS )NZLDnEr  r'  r  r  r  r(  g  s    zASTPointerLiteral.get_idr   r   r  r  rj  c                 C  s   |t  dd¡7 }d S r  ©r   rr  r}  r  r  r  rH  j  s    z$ASTPointerLiteral.describe_signatureN©r  r  r  rU  r(  rH  r  r  r  r  r€  c  s   r€  c                   @  sR   e Zd Zdddœdd„Zdddœd	d
„Zdddœdd„Zddddddœdd„ZdS )ÚASTBooleanLiteralr?   r  ©Úvaluerp   c                 C  s
   || _ d S r	  ©r‡  ©r  r‡  r  r  r  r  p  s    zASTBooleanLiteral.__init__r%   r  rR  c                 C  s   | j r
dS dS d S )Nr|   rY   rˆ  r‚  r  r  r  rU  s  s    zASTBooleanLiteral._stringifyr_   r"  c                 C  s   | j r
dS dS d S )NZL1EZL0Erˆ  r'  r  r  r  r(  y  s    zASTBooleanLiteral.get_idr   r   r  rj  c                 C  s   |t  t| ƒt| ƒ¡7 }d S r	  )r   rr  r  r}  r  r  r  rH    s    z$ASTBooleanLiteral.describe_signatureN©r  r  r  r  rU  r(  rH  r  r  r  r  r…  o  s   r…  c                   @  sR   e Zd Zdddœdd„Zdddœdd	„Zd
ddœdd„Zddddddœdd„ZdS )ÚASTNumberLiteralr  r  ©Údatarp   c                 C  s
   || _ d S r	  ©r  ©r  r  r  r  r  r  …  s    zASTNumberLiteral.__init__r%   rR  c                 C  s   | j S r	  rŽ  r‚  r  r  r  rU  ˆ  s    zASTNumberLiteral._stringifyr_   r"  c                 C  s   d| j  dd¡ S )NzL%sEú'rŒ   )r  Úreplacer'  r  r  r  r(  ‹  s    zASTNumberLiteral.get_idr   r   r  rj  c                 C  s   |t  | j| j¡7 }d S r	  )r   Údesc_sig_literal_numberr  r}  r  r  r  rH    s    z#ASTNumberLiteral.describe_signatureNrŠ  r  r  r  r  r‹  „  s   r‹  c                   @  sR   e Zd Zdddœdd„Zdddœdd	„Zd
ddœdd„Zddddddœdd„ZdS )ÚASTStringLiteralr  r  rŒ  c                 C  s
   || _ d S r	  rŽ  r  r  r  r  r  •  s    zASTStringLiteral.__init__r%   rR  c                 C  s   | j S r	  rŽ  r‚  r  r  r  rU  ˜  s    zASTStringLiteral._stringifyr_   r"  c                 C  s   dt | jƒd  S )NzLA%d_KcEé   )r  r  r'  r  r  r  r(  ›  s    zASTStringLiteral.get_idr   r   r  rj  c                 C  s   |t  | j| j¡7 }d S r	  )r   Údesc_sig_literal_stringr  r}  r  r  r  rH  Ÿ  s    z#ASTStringLiteral.describe_signatureNrŠ  r  r  r  r  r“  ”  s   r“  c                   @  sT   e Zd Zddddœdd„Zdddœdd	„Zd
ddœdd„Zddddddœdd„ZdS )ÚASTCharLiteralr  r  )r/  r  rp   c                 C  sT   || _ || _|tkst‚t| | _| ¡  d¡}t|ƒdkrHt|ƒ| _	nt
|ƒ‚d S )Nzunicode-escaper%  )r/  r  rÿ   r
  ÚtypeÚencodeÚdecoder  Úordr‡  r&   )r  r/  r  Údecodedr  r  r  r  ¥  s    
zASTCharLiteral.__init__r%   rR  c                 C  s0   | j d krd| j d S | j d | j d S d S ©Nr  )r/  r  r‚  r  r  r  rU  °  s    
zASTCharLiteral._stringifyr_   r"  c                 C  s   | j t| jƒ S r	  )r—  r  r‡  r'  r  r  r  r(  ¶  s    zASTCharLiteral.get_idr   r   r  rj  c                 C  s@   | j d k	r|t | j | j ¡7 }d| j d }|t ||¡7 }d S rœ  )r/  r   rr  r  Zdesc_sig_literal_char)r  r,  r-  r.  r  Útxtr  r  r  rH  º  s    
z!ASTCharLiteral.describe_signatureNrŠ  r  r  r  r  r–  ¤  s   r–  c                   @  sR   e Zd Zdddœdd„Zdddœd	d
„Zdddœdd„Zddddddœdd„ZdS )ÚASTUserDefinedLiteralr  r  ©ÚliteralÚidentc                 C  s   || _ || _d S r	  rŸ  )r  r   r¡  r  r  r  r  Ã  s    zASTUserDefinedLiteral.__init__r%   r  rR  c                 C  s   || j ƒ|| jƒ S r	  rŸ  r‚  r  r  r  rU  Ç  s    z ASTUserDefinedLiteral._stringifyr_   r"  c                 C  s"   d| j  |¡› d| j |¡› dS )NZclL_Zlire  )r¡  r(  r   r'  r  r  r  r(  Ê  s    zASTUserDefinedLiteral.get_idr   r   r  r  rj  c                 C  s,   | j  ||||¡ | j |d|dd|¡ d S )Nr>  rŒ   )r   rH  r¡  r}  r  r  r  rH  Î  s    z(ASTUserDefinedLiteral.describe_signatureNrŠ  r  r  r  r  rž  Â  s   rž  c                   @  sB   e Zd Zdddœdd„Zdddœdd	„Zd
dddddœdd„ZdS )ÚASTThisLiteralr%   r  rR  c                 C  s   dS ©Nry   r  r‚  r  r  r  rU  ×  s    zASTThisLiteral._stringifyr_   r"  c                 C  s   dS )NZfpTr  r'  r  r  r  r(  Ú  s    zASTThisLiteral.get_idr   r   r  r  rj  c                 C  s   |t  dd¡7 }d S r£  rƒ  r}  r  r  r  rH  Ý  s    z!ASTThisLiteral.describe_signatureNr„  r  r  r  r  r¢  Ö  s   r¢  c                   @  sV   e Zd Zdddddœdd„Zdddœd	d
„Zdddœdd„Zddddddœdd„ZdS )ÚASTFoldExprry  r  r  )ÚleftExprÚopÚ	rightExprrp   c                 C  s*   |d k	s|d k	st ‚|| _|| _|| _d S r	  )r
  r¥  r¦  r§  ©r  r¥  r¦  r§  r  r  r  r  ã  s    zASTFoldExpr.__init__r%   rR  c                 C  s   dg}| j r<| || j ƒ¡ | d¡ | | j¡ | d¡ | d¡ | jr|| d¡ | | j¡ | d¡ | || jƒ¡ | d¡ d |¡S )Nú(rk  ú...ú)rŒ   )r¥  rC  r¦  r§  rg  rT  r  r  r  rU  ê  s    





zASTFoldExpr._stringifyr_   r"  c                 C  s    |dkst ‚|dkrt| ƒS g }| jd kr6| d¡ n | jd krL| d¡ n
| d¡ | t| j ¡ | jr~| | j |¡¡ | jr–| | j |¡¡ d |¡S )Nr$  ÚflÚfrZfLrŒ   )	r
  r  r¥  rC  r§  Ú_id_operator_v2r¦  r(  rg  rP  r  r  r  r(  ú  s    


zASTFoldExpr.get_idr   r   r  rj  c                 C  s¼   |t  dd¡7 }| jrT| j ||||¡ |t  ¡ 7 }|t  | j| j¡7 }|t  ¡ 7 }|t  dd¡7 }| jr¨|t  ¡ 7 }|t  | j| j¡7 }|t  ¡ 7 }| j ||||¡ |t  dd¡7 }d S )Nr©  rª  r«  )r   rq  r¥  rH  rs  Údesc_sig_operatorr¦  r§  r}  r  r  r  rH    s    zASTFoldExpr.describe_signatureNrŠ  r  r  r  r  r¤  â  s   r¤  c                   @  sP   e Zd Zddœdd„Zdddœdd	„Zd
ddœdd„Zddddddœdd„ZdS )ÚASTParenExprry  ©Úexprc                 C  s
   || _ d S r	  r±  ©r  r²  r  r  r  r  !  s    zASTParenExpr.__init__r%   r  rR  c                 C  s   d|| j ƒ d S ©Nr©  r«  r±  r‚  r  r  r  rU  $  s    zASTParenExpr._stringifyr_   r"  c                 C  s   | j  |¡S r	  ©r²  r(  r'  r  r  r  r(  '  s    zASTParenExpr.get_idr   r   r  r  rj  c                 C  s6   |t  dd¡7 }| j ||||¡ |t  dd¡7 }d S r´  ©r   rq  r²  rH  r}  r  r  r  rH  *  s    zASTParenExpr.describe_signatureNrŠ  r  r  r  r  r°     s   r°  c                   @  sP   e Zd Zddœdd„Zdddœdd	„Zd
ddœdd„Zddddddœdd„ZdS )ÚASTIdExpressionrV  ©rZ  c                 C  s
   || _ d S r	  r¸  ©r  rZ  r  r  r  r  2  s    zASTIdExpression.__init__r%   r  rR  c                 C  s
   || j ƒS r	  r¸  r‚  r  r  r  rU  6  s    zASTIdExpression._stringifyr_   r"  c                 C  s   | j  |¡S r	  ©rZ  r(  r'  r  r  r  r(  9  s    zASTIdExpression.get_idr   r   r  r  rj  c                 C  s   | j  ||||¡ d S r	  )rZ  rH  r}  r  r  r  rH  <  s    z"ASTIdExpression.describe_signatureNrŠ  r  r  r  r  r·  1  s   r·  c                   @  s4   e Zd Zddddœdd„Zddddd	d
œdd„ZdS )ÚASTPostfixOpr  r_   ©ÚidPrefixr#  rp   c                 C  s   t t| ƒƒ‚d S r	  rz  ©r  r½  r#  r  r  r  r(  E  s    zASTPostfixOp.get_idr   r   r  r  rj  c                 C  s   t t| ƒƒ‚d S r	  rz  r}  r  r  r  rH  H  s    zASTPostfixOp.describe_signatureNr~  r  r  r  r  r»  D  s   r»  c                   @  sR   e Zd Zddœdd„Zdddœdd	„Zdd
ddœdd„Zddddddœdd„ZdS )ÚASTPostfixArrayry  r±  c                 C  s
   || _ d S r	  r±  r³  r  r  r  r  N  s    zASTPostfixArray.__init__r%   r  rR  c                 C  s   d|| j ƒ d S ©Nú[ú]r±  r‚  r  r  r  rU  Q  s    zASTPostfixArray._stringifyr_   r¼  c                 C  s   d| | j  |¡ S )Nrö   rµ  r¾  r  r  r  r(  T  s    zASTPostfixArray.get_idr   r   r  r  rj  c                 C  s6   |t  dd¡7 }| j ||||¡ |t  dd¡7 }d S rÀ  r¶  r}  r  r  r  rH  W  s    z"ASTPostfixArray.describe_signatureNrŠ  r  r  r  r  r¿  M  s   r¿  c                   @  sR   e Zd Zddœdd„Zdddœdd	„Zdd
ddœdd„Zddddddœdd„ZdS )ÚASTPostfixMemberrV  r¸  c                 C  s
   || _ d S r	  r¸  r¹  r  r  r  r  _  s    zASTPostfixMember.__init__r%   r  rR  c                 C  s   d|| j ƒ S )NÚ.r¸  r‚  r  r  r  rU  b  s    zASTPostfixMember._stringifyr_   r¼  c                 C  s   d| | j  |¡ S )NÚdtrº  r¾  r  r  r  r(  e  s    zASTPostfixMember.get_idr   r   r  r  rj  c                 C  s&   |t  dd¡7 }| j |d||¡ d S )NrÄ  r;  )r   rq  rZ  rH  r}  r  r  r  rH  h  s    z#ASTPostfixMember.describe_signatureNrŠ  r  r  r  r  rÃ  ^  s   rÃ  c                   @  sR   e Zd Zddœdd„Zdddœdd	„Zdd
ddœdd„Zddddddœdd„ZdS )ÚASTPostfixMemberOfPointerrV  r¸  c                 C  s
   || _ d S r	  r¸  r¹  r  r  r  r  o  s    z"ASTPostfixMemberOfPointer.__init__r%   r  rR  c                 C  s   d|| j ƒ S )NrÅ   r¸  r‚  r  r  r  rU  r  s    z$ASTPostfixMemberOfPointer._stringifyr_   r¼  c                 C  s   d| | j  |¡ S )Nrô   rº  r¾  r  r  r  r(  u  s    z ASTPostfixMemberOfPointer.get_idr   r   r  r  rj  c                 C  s&   |t  dd¡7 }| j |d||¡ d S )NrÅ   r;  )r   r¯  rZ  rH  r}  r  r  r  rH  x  s    z,ASTPostfixMemberOfPointer.describe_signatureNrŠ  r  r  r  r  rÆ  n  s   rÆ  c                   @  sD   e Zd Zdddœdd„Zddddœdd	„Zd
dddddœdd„ZdS )ÚASTPostfixIncr%   r  rR  c                 C  s   dS ©NrÁ   r  r‚  r  r  r  rU    s    zASTPostfixInc._stringifyr_   r¼  c                 C  s   d| S )Nrð   r  r¾  r  r  r  r(  ‚  s    zASTPostfixInc.get_idr   r   r  r  rj  c                 C  s   |t  dd¡7 }d S rÈ  ©r   r¯  r}  r  r  r  rH  …  s    z ASTPostfixInc.describe_signatureNr„  r  r  r  r  rÇ  ~  s   rÇ  c                   @  sD   e Zd Zdddœdd„Zddddœdd	„Zd
dddddœdd„ZdS )ÚASTPostfixDecr%   r  rR  c                 C  s   dS ©NrÂ   r  r‚  r  r  r  rU  ‹  s    zASTPostfixDec._stringifyr_   r¼  c                 C  s   d| S )Nrñ   r  r¾  r  r  r  r(  Ž  s    zASTPostfixDec.get_idr   r   r  r  rj  c                 C  s   |t  dd¡7 }d S rË  rÉ  r}  r  r  r  rH  ‘  s    z ASTPostfixDec.describe_signatureNr„  r  r  r  r  rÊ  Š  s   rÊ  c                   @  sT   e Zd Zdddœdd„Zdddœd	d
„Zddddœdd„Zddddddœdd„ZdS )ÚASTPostfixCallExprú$ASTParenExprList | ASTBracedInitListr  )Úlstrp   c                 C  s
   || _ d S r	  ©rÎ  )r  rÎ  r  r  r  r  —  s    zASTPostfixCallExpr.__init__r%   r  rR  c                 C  s
   || j ƒS r	  rÏ  r‚  r  r  r  rU  š  s    zASTPostfixCallExpr._stringifyr_   r¼  c                 C  s:   d|g}| j jD ]}| | |¡¡ q| d¡ d |¡S )Nrõ   re  rŒ   )rÎ  ÚexprsrC  r(  rg  )r  r½  r#  rQ  rÔ   r  r  r  r(    s
    
zASTPostfixCallExpr.get_idr   r   r  rj  c                 C  s   | j  ||||¡ d S r	  )rÎ  rH  r}  r  r  r  rH  ¤  s    z%ASTPostfixCallExpr.describe_signatureNrŠ  r  r  r  r  rÌ  –  s   rÌ  c                   @  sR   e Zd Zdddœdd„Zdddœd	d
„Zdddœdd„Zddddddœdd„ZdS )ÚASTPostfixExprÚASTTypezlist[ASTPostfixOp]©r/  Ú	postFixesc                 C  s   || _ || _d S r	  rÓ  )r  r/  rÔ  r  r  r  r  ª  s    zASTPostfixExpr.__init__r%   r  rR  c                 C  s0   || j ƒg}| jD ]}| ||ƒ¡ qd |¡S ©NrŒ   )r/  rÔ  rC  rg  )r  rS  rQ  Úpr  r  r  rU  ®  s    
zASTPostfixExpr._stringifyr_   r"  c                 C  s(   | j  |¡}| jD ]}| ||¡}q|S r	  )r/  r(  rÔ  )r  r#  ÚidrÖ  r  r  r  r(  ´  s    
zASTPostfixExpr.get_idr   r   r  r  rj  c                 C  s2   | j  ||||¡ | jD ]}| ||||¡ qd S r	  )r/  rH  rÔ  )r  r,  r-  r.  r  rÖ  r  r  r  rH  º  s    
z!ASTPostfixExpr.describe_signatureNrŠ  r  r  r  r  rÑ  ©  s   rÑ  c                   @  sT   e Zd Zddddœdd„Zdddœd	d
„Zdddœdd„Zddddddœdd„ZdS )ÚASTExplicitCastr  rÒ  ry  )ÚcastÚtypr²  c                 C  s"   |t kst‚|| _|| _|| _d S r	  )Ú_id_explicit_castr
  rÙ  rÚ  r²  )r  rÙ  rÚ  r²  r  r  r  r  Â  s    zASTExplicitCast.__init__r%   rR  c                 C  sP   | j g}| d¡ | || jƒ¡ | d¡ | || jƒ¡ | d¡ d |¡S )Nrº   z>(r«  rŒ   )rÙ  rC  rÚ  r²  rg  rT  r  r  r  rU  È  s    


zASTExplicitCast._stringifyr_   r"  c                 C  s"   t | j | j |¡ | j |¡ S r	  )rÛ  rÙ  rÚ  r(  r²  r'  r  r  r  r(  Ñ  s
    
ÿ
þzASTExplicitCast.get_idr   r   r  r  rj  c                 C  s|   |t  | j| j¡7 }|t  dd¡7 }| j ||||¡ |t  dd¡7 }|t  dd¡7 }| j ||||¡ |t  dd¡7 }d S )Nrº   r»   r©  r«  )r   rr  rÙ  rq  rÚ  rH  r²  r}  r  r  r  rH  Ö  s    z"ASTExplicitCast.describe_signatureNrŠ  r  r  r  r  rØ  Á  s   	rØ  c                   @  sR   e Zd Zdddœdd„Zdddœd	d
„Zdddœdd„Zddddddœdd„ZdS )Ú	ASTTypeIdzASTType | ASTExpressionr?   ©Ú
typeOrExprÚisTypec                 C  s   || _ || _d S r	  rÝ  )r  rÞ  rß  r  r  r  r  â  s    zASTTypeId.__init__r%   r  rR  c                 C  s   d|| j ƒ d S )Nztypeid(r«  )rÞ  r‚  r  r  r  rU  æ  s    zASTTypeId._stringifyr_   r"  c                 C  s   | j r
dnd}|| j |¡ S )NÚtiÚte)rß  rÞ  r(  )r  r#  r/  r  r  r  r(  é  s    zASTTypeId.get_idr   r   r  r  rj  c                 C  sF   |t  dd¡7 }|t  dd¡7 }| j ||||¡ |t  dd¡7 }d S )Nr   r©  r«  )r   rr  rq  rÞ  rH  r}  r  r  r  rH  í  s    zASTTypeId.describe_signatureNrŠ  r  r  r  r  rÜ  á  s   rÜ  c                   @  sR   e Zd Zdddœdd„Zdddœdd	„Zd
ddœdd„Zddddddœdd„ZdS )ÚASTUnaryOpExprr  ry  ©r¦  r²  c                 C  s   || _ || _d S r	  rã  )r  r¦  r²  r  r  r  r  ù  s    zASTUnaryOpExpr.__init__r%   rR  c                 C  s6   | j d dkr"| j d || jƒ S | j || jƒ S d S )Nr   Úcnrk  rã  r‚  r  r  r  rU  ý  s    zASTUnaryOpExpr._stringifyr_   r"  c                 C  s   t | j | j |¡ S r	  )Ú_id_operator_unary_v2r¦  r²  r(  r'  r  r  r  r(    s    zASTUnaryOpExpr.get_idr   r   r  r  rj  c                 C  sZ   | j d dkr0|t | j | j ¡7 }|t ¡ 7 }n|t | j | j ¡7 }| j ||||¡ d S )Nr   rä  )r¦  r   rr  rs  r¯  r²  rH  r}  r  r  r  rH    s
    z!ASTUnaryOpExpr.describe_signatureNrŠ  r  r  r  r  râ  ø  s   râ  c                   @  sP   e Zd Zddœdd„Zdddœdd	„Zd
ddœdd„Zddddddœdd„ZdS )ÚASTSizeofParamPackr  r   c                 C  s
   || _ d S r	  r   r  r  r  r  r    s    zASTSizeofParamPack.__init__r%   r  rR  c                 C  s   d|| j ƒ d S )Nz
sizeof...(r«  r   r‚  r  r  r  rU    s    zASTSizeofParamPack._stringifyr_   r"  c                 C  s   d| j  |¡ S )NZsZ)r  r(  r'  r  r  r  r(    s    zASTSizeofParamPack.get_idr   r   r  r  rj  c                 C  s\   |t  dd¡7 }|t  dd¡7 }|t  dd¡7 }| jj|d||ddd |t  dd¡7 }d S )Nrs   rª  r©  r2  rŒ   )r  r/  r0  r«  )r   rr  rq  r  rH  r}  r  r  r  rH    s      ÿz%ASTSizeofParamPack.describe_signatureNrŠ  r  r  r  r  ræ    s   ræ  c                   @  sP   e Zd Zddœdd„Zdddœdd	„Zd
ddœdd„Zddddddœdd„ZdS )ÚASTSizeofTyperÒ  ©rÚ  c                 C  s
   || _ d S r	  rè  ©r  rÚ  r  r  r  r  %  s    zASTSizeofType.__init__r%   r  rR  c                 C  s   d|| j ƒ d S )Nzsizeof(r«  rè  r‚  r  r  r  rU  (  s    zASTSizeofType._stringifyr_   r"  c                 C  s   d| j  |¡ S )NÚst©rÚ  r(  r'  r  r  r  r(  +  s    zASTSizeofType.get_idr   r   r  r  rj  c                 C  sF   |t  dd¡7 }|t  dd¡7 }| j ||||¡ |t  dd¡7 }d S )Nrs   r©  r«  ©r   rr  rq  rÚ  rH  r}  r  r  r  rH  .  s    z ASTSizeofType.describe_signatureNrŠ  r  r  r  r  rç  $  s   rç  c                   @  sP   e Zd Zddœdd„Zdddœdd	„Zd
ddœdd„Zddddddœdd„ZdS )ÚASTSizeofExprry  r±  c                 C  s
   || _ d S r	  r±  r³  r  r  r  r  7  s    zASTSizeofExpr.__init__r%   r  rR  c                 C  s   d|| j ƒ S )Nzsizeof r±  r‚  r  r  r  rU  :  s    zASTSizeofExpr._stringifyr_   r"  c                 C  s   d| j  |¡ S )NÚszrµ  r'  r  r  r  r(  =  s    zASTSizeofExpr.get_idr   r   r  r  rj  c                 C  s2   |t  dd¡7 }|t  ¡ 7 }| j ||||¡ d S )Nrs   ©r   rr  rs  r²  rH  r}  r  r  r  rH  @  s    z ASTSizeofExpr.describe_signatureNrŠ  r  r  r  r  rí  6  s   rí  c                   @  sP   e Zd Zddœdd„Zdddœdd	„Zd
ddœdd„Zddddddœdd„ZdS )ÚASTAlignofExprrÒ  rè  c                 C  s
   || _ d S r	  rè  ré  r  r  r  r  H  s    zASTAlignofExpr.__init__r%   r  rR  c                 C  s   d|| j ƒ d S )Nzalignof(r«  rè  r‚  r  r  r  rU  K  s    zASTAlignofExpr._stringifyr_   r"  c                 C  s   d| j  |¡ S )NÚatrë  r'  r  r  r  r(  N  s    zASTAlignofExpr.get_idr   r   r  r  rj  c                 C  sF   |t  dd¡7 }|t  dd¡7 }| j ||||¡ |t  dd¡7 }d S )Nr8   r©  r«  rì  r}  r  r  r  rH  Q  s    z!ASTAlignofExpr.describe_signatureNrŠ  r  r  r  r  rð  G  s   rð  c                   @  sP   e Zd Zddœdd„Zdddœdd	„Zd
ddœdd„Zddddddœdd„ZdS )ÚASTNoexceptExprry  r±  c                 C  s
   || _ d S r	  r±  r³  r  r  r  r  Z  s    zASTNoexceptExpr.__init__r%   r  rR  c                 C  s   d|| j ƒ d S )Nú	noexcept(r«  r±  r‚  r  r  r  rU  ]  s    zASTNoexceptExpr._stringifyr_   r"  c                 C  s   d| j  |¡ S )NÚnxrµ  r'  r  r  r  r(  `  s    zASTNoexceptExpr.get_idr   r   r  r  rj  c                 C  sF   |t  dd¡7 }|t  dd¡7 }| j ||||¡ |t  dd¡7 }d S )Nrd   r©  r«  ©r   rr  rq  r²  rH  r}  r  r  r  rH  c  s    z"ASTNoexceptExpr.describe_signatureNrŠ  r  r  r  r  rò  Y  s   rò  c                   @  sX   e Zd Zddddddœdd„Zdd	d
œdd„Zdd	dœdd„Zdd	ddddœdd„ZdS )Ú
ASTNewExprr?   rÒ  rÍ  r  )rY  ÚisNewTypeIdrÚ  ÚinitListrp   c                 C  s   || _ || _|| _|| _d S r	  )rY  r÷  rÚ  rø  )r  rY  r÷  rÚ  rø  r  r  r  r  l  s    zASTNewExpr.__init__r%   r  rR  c                 C  s`   g }| j r| d¡ | d¡ | jr6| || jƒ¡ ntƒ ‚| jd k	rV| || jƒ¡ d |¡S )Nr_  znew rŒ   )rY  rC  r÷  rÚ  r
  rø  rg  rT  r  r  r  rU  s  s    


zASTNewExpr._stringifyr_   r"  c                 C  sT   dg}|  d¡ |  | j |¡¡ | jd k	r@|  | j |¡¡ n
|  d¡ d |¡S )NrÞ   r   re  rŒ   )rC  rÚ  r(  rø  rg  rP  r  r  r  r(    s    


zASTNewExpr.get_idr   r   r  rj  c                 C  sr   | j r|t dd¡7 }|t dd¡7 }|t ¡ 7 }| jrL| j ||||¡ ntƒ ‚| j	d k	rn| j	 ||||¡ d S )Nr_  rc   )
rY  r   rq  rr  rs  r÷  rÚ  rH  r
  rø  r}  r  r  r  rH    s    
zASTNewExpr.describe_signatureNrŠ  r  r  r  r  rö  k  s   rö  c                   @  sT   e Zd Zddddœdd„Zdddœd	d
„Zdddœdd„Zddddddœdd„ZdS )ÚASTDeleteExprr?   ry  ©rY  Úarrayr²  c                 C  s   || _ || _|| _d S r	  rú  )r  rY  rû  r²  r  r  r  r    s    zASTDeleteExpr.__init__r%   r  rR  c                 C  sH   g }| j r| d¡ | d¡ | jr.| d¡ | || jƒ¡ d |¡S )Nr_  zdelete z[] rŒ   )rY  rC  rû  r²  rg  rT  r  r  r  rU  ¢  s    


zASTDeleteExpr._stringifyr_   r"  c                 C  s    | j rd}nd}|| j |¡ S )Nrá   rà   )rû  r²  r(  ©r  r#  r×  r  r  r  r(  ¬  s    zASTDeleteExpr.get_idr   r   r  r  rj  c                 C  sj   | j r|t dd¡7 }|t dd¡7 }|t ¡ 7 }| jrT|t dd¡7 }|t ¡ 7 }| j ||||¡ d S )Nr_  rQ   rÇ   )rY  r   rq  rr  rs  rû  r²  rH  r}  r  r  r  rH  ³  s    z ASTDeleteExpr.describe_signatureNrŠ  r  r  r  r  rù  œ  s   
rù  c                   @  sR   e Zd Zdddœdd„Zdddœd	d
„Zdddœdd„Zddddddœdd„ZdS )ÚASTCastExprrÒ  ry  ©rÚ  r²  c                 C  s   || _ || _d S r	  rþ  )r  rÚ  r²  r  r  r  r  Ã  s    zASTCastExpr.__init__r%   r  rR  c                 C  s:   dg}|  || jƒ¡ |  d¡ |  || jƒ¡ d |¡S ©Nr©  r«  rŒ   )rC  rÚ  r²  rg  rT  r  r  r  rU  Ç  s
    
zASTCastExpr._stringifyr_   r"  c                 C  s   d| j  |¡ | j |¡ S )NÚcv)rÚ  r(  r²  r'  r  r  r  r(  Î  s    zASTCastExpr.get_idr   r   r  r  rj  c                 C  sH   |t  dd¡7 }| j ||||¡ |t  dd¡7 }| j ||||¡ d S r´  )r   rq  rÚ  rH  r²  r}  r  r  r  rH  Ñ  s    zASTCastExpr.describe_signatureNrŠ  r  r  r  r  rý  Â  s   rý  c                   @  sR   e Zd Zdddœdd„Zdddœd	d
„Zdddœdd„Zddddddœdd„ZdS )ÚASTBinOpExprúlist[ASTExpression]ú	list[str])rÐ  Úopsc                 C  s8   t |ƒdkst‚t |ƒt |ƒd ks(t‚|| _|| _d S r[  )r  r
  rÐ  r  )r  rÐ  r  r  r  r  r  Ú  s    zASTBinOpExpr.__init__r%   r  rR  c                 C  st   g }|  || jd ƒ¡ tdt| jƒƒD ]@}|  d¡ |  | j|d  ¡ |  d¡ |  || j| ƒ¡ q(d |¡S )Nr   r%  rk  rŒ   )rC  rÐ  ri  r  r  rg  )r  rS  rQ  r   r  r  r  rU  à  s    

zASTBinOpExpr._stringifyr_   r"  c                 C  sn   |dkst ‚g }tt| jƒƒD ].}| t| j|  ¡ | | j|  |¡¡ q| | jd  |¡¡ d |¡S )Nr”  rm  rŒ   )	r
  ri  r  r  rC  r®  rÐ  r(  rg  )r  r#  rQ  r   r  r  r  r(  ê  s    zASTBinOpExpr.get_idr   r   r  r  rj  c                 C  s¶   | j d  ||||¡ tdt| j ƒƒD ]Š}|t ¡ 7 }| j|d  }t|d ƒtdƒkr~t|d ƒtdƒkr~|t ||¡7 }n|t 	||¡7 }|t ¡ 7 }| j |  ||||¡ q&d S )Nr   r%  rÈ   Úz)
rÐ  rH  ri  r  r   rs  r  rš  rr  r¯  )r  r,  r-  r.  r  r   r¦  r  r  r  rH  ó  s    (zASTBinOpExpr.describe_signatureNrŠ  r  r  r  r  r  Ù  s   
	r  c                   @  sT   e Zd Zddddœdd„Zdddœdd	„Zd
ddœdd„Zddddddœdd„ZdS )ÚASTConditionalExprry  ©ÚifExprÚthenExprÚelseExprc                 C  s   || _ || _|| _d S r	  r  )r  r  r	  r
  r  r  r  r    s    zASTConditionalExpr.__init__r%   r  rR  c                 C  sR   g }|  || jƒ¡ |  d¡ |  || jƒ¡ |  d¡ |  || jƒ¡ d |¡S )Nz ? ú : rŒ   )rC  r  r	  r
  rg  rT  r  r  r  rU    s    

zASTConditionalExpr._stringifyr_   r"  c                 C  s^   |dkst ‚g }| td ¡ | | j |¡¡ | | j |¡¡ | | j |¡¡ d |¡S )Nr”  rù   rŒ   )r
  rC  r®  r  r(  r	  r
  rg  rP  r  r  r  r(    s    zASTConditionalExpr.get_idr   r   r  r  rj  c                 C  sŠ   | j  ||||¡ |t ¡ 7 }|t dd¡7 }|t ¡ 7 }| j ||||¡ |t ¡ 7 }|t dd¡7 }|t ¡ 7 }| j ||||¡ d S )Nrù   ú:)r  rH  r   rs  r¯  r	  r
  r}  r  r  r  rH    s    z%ASTConditionalExpr.describe_signatureNrŠ  r  r  r  r  r    s   		r  c                   @  sT   e Zd Zddddœdd„Zddd	œd
d„Zdddœdd„Zddddddœdd„ZdS )ÚASTBracedInitListú'list[ASTExpression | ASTBracedInitList]r?   r  )rÐ  ÚtrailingCommarp   c                 C  s   || _ || _d S r	  )rÐ  r  ©r  rÐ  r  r  r  r  r  (  s    zASTBracedInitList.__init__r_   r  r"  c                   s   dd  ‡ fdd„| jD ƒ¡ S )Nzil%sErŒ   c                 3  s   | ]}|  ˆ ¡V  qd S r	  r`  ©ra  rÔ   rb  r  r  rc  .  s     z+ASTBracedInitList.get_id.<locals>.<genexpr>©rg  rÐ  r'  r  rb  r  r(  -  s    zASTBracedInitList.get_idr%   rR  c                   s8   d  ‡ fdd„| jD ƒ¡}| jr$dnd}d|› |› dS )Nú, c                 3  s   | ]}ˆ |ƒV  qd S r	  r  r  ©rS  r  r  rc  1  s     z/ASTBracedInitList._stringify.<locals>.<genexpr>rÃ   rŒ   Ú{Ú})rg  rÐ  r  )r  rS  rÐ  r  r  r  r  rU  0  s    zASTBracedInitList._stringifyr   r   r  rj  c                 C  sˆ   t |ƒ |t dd¡7 }d}| jD ]:}|sH|t dd¡7 }|t ¡ 7 }nd}| ||||¡ q"| jrt|t dd¡7 }|t dd¡7 }d S )Nr  TrÃ   Fr  )r1   r   rq  rÐ  rs  rH  r  ©r  r,  r-  r.  r  ru  rÔ   r  r  r  rH  5  s    
z$ASTBracedInitList.describe_signatureN©r  r  r  r  r(  rU  rH  r  r  r  r  r  '  s   r  c                   @  sT   e Zd Zddddœdd„Zdddœd	d
„Zdddœdd„Zddddddœdd„ZdS )ÚASTAssignmentExprry  r  ú!ASTExpression | ASTBracedInitList©r¥  r¦  r§  c                 C  s   || _ || _|| _d S r	  r  r¨  r  r  r  r  G  s    zASTAssignmentExpr.__init__r%   rR  c                 C  sN   g }|  || jƒ¡ |  d¡ |  | j¡ |  d¡ |  || jƒ¡ d |¡S ©Nrk  rŒ   )rC  r¥  r¦  r§  rg  rT  r  r  r  rU  M  s    

zASTAssignmentExpr._stringifyr_   r"  c                 C  sB   g }|  t| j ¡ |  | j |¡¡ |  | j |¡¡ d |¡S rÕ  )rC  r®  r¦  r¥  r(  r§  rg  rP  r  r  r  r(  V  s
    zASTAssignmentExpr.get_idr   r   r  r  rj  c                 C  s–   | j  ||||¡ |t ¡ 7 }t| jd ƒtdƒkr`t| jd ƒtdƒkr`|t | j| j¡7 }n|t | j| j¡7 }|t ¡ 7 }| j ||||¡ d S )Nr   rÈ   r  )	r¥  rH  r   rs  rš  r¦  rr  r¯  r§  r}  r  r  r  rH  ^  s    ,z$ASTAssignmentExpr.describe_signatureNrŠ  r  r  r  r  r  F  s   	r  c                   @  sP   e Zd Zddœdd„Zdddœdd	„Zd
ddœdd„Zddddddœdd„ZdS )ÚASTCommaExprr  ©rÐ  c                 C  s   t |ƒdkst‚|| _d S r  )r  r
  rÐ  ©r  rÐ  r  r  r  r  k  s    zASTCommaExpr.__init__r%   r  rR  c                   s   d  ‡ fdd„| jD ƒ¡S )Nr  c                 3  s   | ]}ˆ |ƒV  qd S r	  r  r  r  r  r  rc  p  s     z*ASTCommaExpr._stringify.<locals>.<genexpr>r  r‚  r  r  r  rU  o  s    zASTCommaExpr._stringifyr_   r"  c                 C  sd   t d }g }tt| jƒd ƒD ]$}| |¡ | | j|  |¡¡ q| | jd  |¡¡ d |¡S )NrÃ   r%  rm  rŒ   )r®  ri  r  rÐ  rC  r(  rg  )r  r#  Úid_rQ  r   r  r  r  r(  r  s    
zASTCommaExpr.get_idr   r   r  r  rj  c                 C  sb   | j d  ||||¡ tdt| j ƒƒD ]6}|t dd¡7 }|t ¡ 7 }| j |  ||||¡ q&d S )Nr   r%  rÃ   )rÐ  rH  ri  r  r   rq  rs  )r  r,  r-  r.  r  r   r  r  r  rH  {  s
    zASTCommaExpr.describe_signatureNrŠ  r  r  r  r  r  j  s   	r  c                   @  sP   e Zd Zddœdd„Zdddœdd„Zd	dd
œdd„Zddddddœdd„ZdS )ÚASTFallbackExprr  r±  c                 C  s
   || _ d S r	  r±  r³  r  r  r  r  …  s    zASTFallbackExpr.__init__r%   rR  c                 C  s   | j S r	  r±  r‚  r  r  r  rU  ˆ  s    zASTFallbackExpr._stringifyr_   r"  c                 C  s
   t | jƒS r	  )r  r²  r'  r  r  r  r(  ‹  s    zASTFallbackExpr.get_idr   r   r  r  rj  c                 C  s   |t  | j| j¡7 }d S r	  )r   r   r²  r}  r  r  r  rH  Ž  s    z"ASTFallbackExpr.describe_signatureNrŠ  r  r  r  r  r!  „  s   r!  c                   @  sh   e Zd Zddœdd„Zddœdd„Zddd	œd
d„Zddddddœdd„Zddddddddœdd„ZdS )ÚASTOperatorr?   r  c                 C  s   dS rN  r  r  r  r  r  r!  ›  s    zASTOperator.is_anonc                 C  s   dS ©NTr  r  r  r  r  rO  ž  s    zASTOperator.is_operatorr_   r  r"  c                 C  s
   t ƒ ‚d S r	  ©r{  r'  r  r  r  r(  ¡  s    zASTOperator.get_idr   r   r  r  ©r,  Ú	identnoder.  r  rp   c                 C  s
   t ƒ ‚dS )zARender the prefix into signode, and the last part into identnode.Nr$  ©r  r,  r&  r.  r  r  r  r  Ú_describe_identifier¤  s    z ASTOperator._describe_identifierr+  c                 C  sÊ   t |ƒ |dkr2t ¡ }|  ||||¡ ||7 }n”|dkr¦|t| ƒ | }tjddd|d d d}	| ¡ |	d< t ¡ }
|  ||
||¡ |
 	¡ }|	t ||¡7 }	||	7 }n t 
¡ }|  ||||¡ ||7 }d S )Nr:  r2  rŒ   r3  r  r4  r9  )r1   r   rB  r(  r  r   rA  r   r   Úastextrp  )r  r,  r-  r.  r/  r0  r  ZmainNamerF  rG  Ú	containerr  ZaddNamer  r  r  rH  ©  s,    
 ý
zASTOperator.describe_signatureN)r  r  r  r!  rO  r(  r(  rH  r  r  r  r  r"  š  s
   r"  c                   @  sR   e Zd Zdddœdd„Zdddœdd	„Zd
ddœdd„Zddddddœdd„ZdS )ÚASTOperatorBuildInr  r  )r¦  rp   c                 C  s
   || _ d S r	  ©r¦  )r  r¦  r  r  r  r  È  s    zASTOperatorBuildIn.__init__r_   r"  c                 C  sD   |dkrt }| j|kr"tƒ ‚nt}| j|kr:td| j ƒ‚|| j S )Nr%  zBInternal error: Built-in operator "%s" can not be mapped to an id.)Ú_id_operator_v1r¦  r$   r®  rD  )r  r#  Úidsr  r  r  r(  Ë  s    

ÿzASTOperatorBuildIn.get_idr%   rR  c                 C  s0   | j dks| j d dkr"d| j  S d| j  S d S )N©rc   r    rQ   r¡   r   Úabcnoxú	operator rh   r,  r‚  r  r  r  rU  ×  s    
zASTOperatorBuildIn._stringifyr   r   r  r%  c                 C  sL   |t  dd¡7 }| jdks(| jd dkr4|t  ¡ 7 }|t  | j| j¡7 }d S )Nrh   r/  r   r0  )r   rr  r¦  rs  r¯  r'  r  r  r  r(  Ý  s    z'ASTOperatorBuildIn._describe_identifierN©r  r  r  r  r(  rU  r(  r  r  r  r  r+  Ç  s   r+  c                   @  sR   e Zd Zdddœdd„Zdddœd	d
„Zdddœdd„Zddddddœdd„ZdS )ÚASTOperatorLiteralr  r  r  c                 C  s
   || _ d S r	  r   r  r  r  r  r  æ  s    zASTOperatorLiteral.__init__r_   r  r"  c                 C  s   |dkrt ƒ ‚d| j |¡ S )Nr%  Zli)r$   r  r(  r'  r  r  r  r(  é  s    zASTOperatorLiteral.get_idr%   rR  c                 C  s   d|| j ƒ S )Nr?  r   r‚  r  r  r  rU  î  s    zASTOperatorLiteral._stringifyr   r   r  r%  c                 C  s:   |t  dd¡7 }|t  dd¡7 }| j |d|dd|¡ d S )Nrh   ú""r2  rŒ   )r   rr  r•  r  rH  r'  r  r  r  r(  ñ  s    z'ASTOperatorLiteral._describe_identifierNr2  r  r  r  r  r3  å  s   r3  c                   @  s`   e Zd Zdddœdd„Zdddœd	d
„Zdddœdd„Zddœdd„Zddddddœdd„ZdS )ÚASTOperatorTyperÒ  r  )r—  rp   c                 C  s
   || _ d S r	  )r—  )r  r—  r  r  r  r  ù  s    zASTOperatorType.__init__r_   r  r"  c                 C  s,   |dkrd| j  |¡ S d| j  |¡ S d S )Nr%  zcastto-%s-operatorr   )r—  r(  r'  r  r  r  r(  ü  s    zASTOperatorType.get_idr%   rR  c                 C  s   d  d|| jƒg¡S )NrŒ   r1  )rg  r—  r‚  r  r  r  rU    s    zASTOperatorType._stringifyr  c                 C  s   t | ƒS r	  ©r  r  r  r  r  Úget_name_no_template  s    z$ASTOperatorType.get_name_no_templater   r   r  r%  c                 C  s2   |t  dd¡7 }|t  ¡ 7 }| j |d||¡ d S )Nrh   r2  )r   rr  rs  r—  rH  r'  r  r  r  r(    s    z$ASTOperatorType._describe_identifierN)r  r  r  r  r(  rU  r7  r(  r  r  r  r  r5  ø  s
   r5  c                   @  sR   e Zd Zdddœdd„Zdddœd	d
„Zdddœdd„Zddddddœdd„ZdS )ÚASTTemplateArgConstantry  r  r†  c                 C  s
   || _ d S r	  rˆ  r‰  r  r  r  r    s    zASTTemplateArgConstant.__init__r%   r  rR  c                 C  s
   || j ƒS r	  rˆ  r‚  r  r  r  rU    s    z!ASTTemplateArgConstant._stringifyr_   r"  c                 C  sD   |dkrt | ƒ dd¡S |dkr0dt | ƒ d S d| j |¡ d S )Nr%  rk  r¤   r”  ÚXre  )r  r‘  r‡  r(  r'  r  r  r  r(    s
    zASTTemplateArgConstant.get_idr   r   r  rj  c                 C  s   t |ƒ | j ||||¡ d S r	  )r1   r‡  rH  r}  r  r  r  rH    s    z)ASTTemplateArgConstant.describe_signatureNrŠ  r  r  r  r  r8    s   r8  c                   @  sT   e Zd Zddddœdd„Zddd	œd
d„Zdddœdd„Zddddddœdd„ZdS )rK  z&list[ASTType | ASTTemplateArgConstant]r?   r  )ÚargsÚpackExpansionrp   c                 C  s   |d k	st ‚|| _|| _d S r	  )r
  r:  r;  )r  r:  r;  r  r  r  r  $  s    zASTTemplateArgs.__init__r_   r  r"  c                   sÔ   ˆ dkrJg }|  d¡ |  d ‡ fdd„| jD ƒ¡¡ |  d¡ d |¡S g }|  d¡ t| jƒdkrÀ| jd d	… D ]}|  | ˆ ¡¡ qt| jrš|  d
¡ |  | jd	  ˆ ¡¡ | jrÀ|  d¡ |  d¡ d |¡S )Nr%  r  rÄ  c                 3  s   | ]}|  ˆ ¡V  qd S r	  r`  ©ra  rÈ   rb  r  r  rc  .  s     z)ASTTemplateArgs.get_id.<locals>.<genexpr>rŒ   ÚIr   rm  ÚJre  )rC  rg  r:  r  r(  r;  )r  r#  rQ  rÈ   r  rb  r  r(  *  s$    
 





zASTTemplateArgs.get_idr%   rR  c                   s4   d  ‡ fdd„| jD ƒ¡}| jr(|d7 }d| d S )Nr  c                 3  s   | ]}ˆ |ƒV  qd S r	  r  r<  r  r  r  rc  @  s     z-ASTTemplateArgs._stringify.<locals>.<genexpr>rª  rº   r»   )rg  r:  r;  rT  r  r  r  rU  ?  s    zASTTemplateArgs._stringifyr   r   r  rj  c                 C  sˆ   t |ƒ |t dd¡7 }d}| jD ]:}|sF|t dd¡7 }|t ¡ 7 }d}|j|d||d q"| jrt|t dd¡7 }|t dd¡7 }d S )	Nrº   TrÃ   Fr2  ©r  rª  r»   )r1   r   rq  r:  rs  rH  r;  )r  r,  r-  r.  r  ru  rÈ   r  r  r  rH  E  s    
z"ASTTemplateArgs.describe_signatureNr  r  r  r  r  rK  #  s   rK  c                   @  s2   e Zd Zdddœdd„Zddddd	d
œdd„ZdS )ÚASTTrailingTypeSpecr_   r  r"  c                 C  s   t t| ƒƒ‚d S r	  rz  r'  r  r  r  r(  Y  s    zASTTrailingTypeSpec.get_idr   r   r  r  rj  c                 C  s   t t| ƒƒ‚d S r	  rz  r}  r  r  r  rH  \  s    z&ASTTrailingTypeSpec.describe_signatureNr~  r  r  r  r  r@  X  s   r@  c                   @  sT   e Zd Zddddœdd„Zdddœd	d
„Zdddœdd„Zddddddœdd„ZdS )ÚASTTrailingTypeSpecFundamentalr  r  )rW  Ú
canonNamesrp   c                 C  s<   t |ƒdkst‚t |ƒt |ƒks,t||fƒ‚|| _|| _d S r  )r  r
  rW  rB  )r  rW  rB  r  r  r  r  b  s    z'ASTTrailingTypeSpecFundamental.__init__r%   r  rR  c                 C  s   d  | j¡S )Nrk  )rg  rW  r‚  r  r  r  rU  i  s    z)ASTTrailingTypeSpecFundamental._stringifyr_   r"  c                 C  sl   |dkrDg }| j D ]&}|tkr.| t| ¡ q| |¡ qd |¡S d | j ¡}|tkrdtd| ƒ‚t| S )Nr%  r¤   rk  z”Semi-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.)rB  Ú_id_fundamental_v1rC  rg  Ú_id_fundamental_v2rD  )r  r#  rQ  rÈ   r  r  r  r  r(  l  s    

þÿz%ASTTrailingTypeSpecFundamental.get_idr   r   r  rj  c                 C  s:   d}| j D ]*}|s |t ¡ 7 }nd}|t ||¡7 }q
d S )NTF)rW  r   rs  Zdesc_sig_keyword_type)r  r,  r-  r.  r  ru  rÐ   r  r  r  rH  ~  s    
z1ASTTrailingTypeSpecFundamental.describe_signatureNrŠ  r  r  r  r  rA  a  s   rA  c                   @  sB   e Zd Zdddœdd„Zdddœdd	„Zd
dddddœdd„ZdS )ÚASTTrailingTypeSpecDecltypeAutor%   r  rR  c                 C  s   dS )NrÝ   r  r‚  r  r  r  rU  Š  s    z*ASTTrailingTypeSpecDecltypeAuto._stringifyr_   r"  c                 C  s   |dkrt ƒ ‚dS )Nr%  rÖ   )r$   r'  r  r  r  r(    s    z&ASTTrailingTypeSpecDecltypeAuto.get_idr   r   r  r  rj  c                 C  sD   |t  dd¡7 }|t  dd¡7 }|t  dd¡7 }|t  dd¡7 }d S )NrO   r©  r<   r«  )r   rr  rq  r}  r  r  r  rH  ’  s    z2ASTTrailingTypeSpecDecltypeAuto.describe_signatureNr„  r  r  r  r  rE  ‰  s   rE  c                   @  sP   e Zd Zddœdd„Zdddœdd	„Zd
ddœdd„Zddddddœdd„ZdS )ÚASTTrailingTypeSpecDecltypery  r±  c                 C  s
   || _ d S r	  r±  r³  r  r  r  r  ›  s    z$ASTTrailingTypeSpecDecltype.__init__r%   r  rR  c                 C  s   d|| j ƒ d S )Nz	decltype(r«  r±  r‚  r  r  r  rU  ž  s    z&ASTTrailingTypeSpecDecltype._stringifyr_   r"  c                 C  s"   |dkrt ƒ ‚d| j |¡ d S )Nr%  ZDTre  )r$   r²  r(  r'  r  r  r  r(  ¡  s    z"ASTTrailingTypeSpecDecltype.get_idr   r   r  r  rj  c                 C  sF   |t  dd¡7 }|t  dd¡7 }| j ||||¡ |t  dd¡7 }d S )NrO   r©  r«  rõ  r}  r  r  r  rH  ¦  s    z.ASTTrailingTypeSpecDecltype.describe_signatureNrŠ  r  r  r  r  rF  š  s   rF  c                   @  sh   e Zd Zdddddœdd„Zeddœd	d
„ƒZdddœdd„Zdddœdd„Zddddddœdd„ZdS )ÚASTTrailingTypeSpecNamer  rV  ú
str | Noner  )r/  Ú
nestedNameÚplaceholderTyperp   c                 C  s   || _ || _|| _d S r	  )r/  rI  rJ  )r  r/  rI  rJ  r  r  r  r  ¯  s    z ASTTrailingTypeSpecName.__init__r  c                 C  s   | j S r	  ©rI  r  r  r  r  rZ  µ  s    zASTTrailingTypeSpecName.namer_   r"  c                 C  s   | j  |¡S r	  )rI  r(  r'  r  r  r  r(  ¹  s    zASTTrailingTypeSpecName.get_idr%   rR  c                 C  sZ   g }| j r | | j ¡ | d¡ | || jƒ¡ | jd k	rP| d¡ | | j¡ d |¡S r  )r/  rC  rI  rJ  rg  rT  r  r  r  rU  ¼  s    


z"ASTTrailingTypeSpecName._stringifyr   r   r  rj  c                 C  sÆ   | j r&|t | j | j ¡7 }|t ¡ 7 }| jj||||d | jd k	rÂ|t ¡ 7 }| jdkrl|t dd¡7 }nV| jdkr¸|t dd¡7 }|t dd¡7 }|t dd¡7 }|t dd¡7 }n
t| jƒ‚d S )Nr?  r<   rÝ   rO   r©  r«  )	r/  r   rr  rs  rI  rH  rJ  rq  r
  r}  r  r  r  rH  Ç  s    


z*ASTTrailingTypeSpecName.describe_signatureN©	r  r  r  r  rx  rZ  r(  rU  rH  r  r  r  r  rG  ®  s   rG  c                   @  s\   e Zd Zdddddœdd„Zdd	d
dddœdd„Zdddœdd„Zddddddœdd„ZdS )ÚASTFunctionParameterFú9ASTTypeWithInit | ASTTemplateParamConstrainedTypeWithInitr?   r  )ÚargÚellipsisrp   c                 C  s   || _ || _d S r	  )rO  rP  )r  rO  rP  r  r  r  r  Û  s    zASTFunctionParameter.__init__Nr_   rH  úSymbol | Noner  ©r#  Ú
objectTyper  rp   c                 C  s0   |r|j jj|ddS | jr dS | j |¡S d S )NF©Úprefixedr  )Úparentr  r(  rP  rO  ©r  r#  rS  r  r  r  r  r(  à  s
    zASTFunctionParameter.get_idr%   rR  c                 C  s   | j r
dS || jƒS d S ©Nrª  )rP  rO  r‚  r  r  r  rU  í  s    zASTFunctionParameter._stringifyr   r   r  rj  c                 C  s8   t |ƒ | jr |t dd¡7 }n| jj||||d d S )Nrª  r?  )r1   rP  r   rq  rO  rH  r}  r  r  r  rH  ó  s    z'ASTFunctionParameter.describe_signature)F)NNr  r  r  r  r  rM  Ú  s    ÿ   ÿrM  c                   @  s@   e Zd Zddœdd„Zdddœdd	„Zd
dddddœdd„ZdS )ÚASTNoexceptSpecúASTExpression | Noner±  c                 C  s
   || _ d S r	  r±  r³  r  r  r  r  ý  s    zASTNoexceptSpec.__init__r%   r  rR  c                 C  s   | j rd|| j ƒ d S dS )Nró  r«  rd   r±  r‚  r  r  r  rU     s    zASTNoexceptSpec._stringifyr   r   r  r  rj  c                 C  sL   |t  dd¡7 }| jrH|t  dd¡7 }| j |d||¡ |t  dd¡7 }d S )Nrd   r©  r2  r«  ©r   rr  r²  rq  rH  r}  r  r  r  rH    s
    z"ASTNoexceptSpec.describe_signatureN©r  r  r  r  rU  rH  r  r  r  r  rY  ü  s   rY  c                   @  s†   e Zd Zddddddddddddœd	d
„Zeddœdd„ƒZdddœdd„Zdddœdd„Zdddœdd„Zddddddœdd„Z	dS ) ÚASTParametersQualifiersúlist[ASTFunctionParameter]r?   rH  rY  rÒ  r   r  )r:  r†   rI   ÚrefQualÚexceptionSpecÚtrailingReturnÚoverrideÚfinalÚattrsÚinitializerrp   c                 C  s@   || _ || _|| _|| _|| _|| _|| _|| _|	| _|
| _	d S r	  )
r:  r†   rI   r_  r`  ra  rb  rc  rd  re  )r  r:  r†   rI   r_  r`  ra  rb  rc  rd  re  r  r  r  r    s    z ASTParametersQualifiers.__init__r  c                 C  s   | j S r	  ©r:  r  r  r  r  Úfunction_params  s    z'ASTParametersQualifiers.function_paramsr_   r  r"  c                 C  sl   g }| j r| d¡ | jr8|dkr.| d¡ n
| d¡ | jdkrN| d¡ n| jdkrb| d¡ d	 |¡S )
NÚVr%  rŽ   ÚKr¿   ÚOr¨   ÚRrŒ   )r†   rC  rI   r_  rg  rP  r  r  r  Úget_modifiers_id#  s    




z(ASTParametersQualifiers.get_modifiers_idc                   sh   ˆ dkr8t | jƒdkrdS dd ‡ fdd„| jD ƒ¡ S t | jƒdkrJdS d ‡ fd	d„| jD ƒ¡S d S )
Nr%  r   rŒ   r   rÄ  c                 3  s   | ]}|  ˆ ¡V  qd S r	  r`  r<  rb  r  r  rc  7  s     z7ASTParametersQualifiers.get_param_id.<locals>.<genexpr>rž   c                 3  s   | ]}|  ˆ ¡V  qd S r	  r`  r<  rb  r  r  rc  ;  s     )r  r:  rg  r'  r  rb  r  Úget_param_id2  s    z$ASTParametersQualifiers.get_param_idr%   rR  c                 C  s6  g }|  d¡ d}| jD ]$}|s*|  d¡ d}|  t|ƒ¡ q|  d¡ | jrX|  d¡ | jrh|  d¡ | jr„|  d¡ |  | j¡ | jr¤|  d¡ |  || jƒ¡ | jrÄ|  d	¡ |  || jƒ¡ | jrÔ|  d
¡ | j	rä|  d¡ t
| jƒdkr|  d¡ |  || jƒ¡ | jr,|  d¡ |  | j¡ d |¡S )Nr©  Tr  Fr«  z	 volatilez constrk  z -> ú finalz	 overrider   ú = rŒ   )rC  r:  r  r†   rI   r_  r`  ra  rc  rb  r  rd  re  rg  )r  rS  rQ  ru  rÈ   r  r  r  rU  =  sB    












z"ASTParametersQualifiers._stringifyr   r   r  rj  c                 C  s€  t |ƒ d}|}|jr:t|tjƒs*|j}q| dd¡}q:q|dkr’t ¡ }||d< | jD ].}tjdddd}	|j	|	d||d ||	7 }qX||7 }nf|t 
d	d	¡7 }d}
| jD ]:}|
sÐ|t 
d
d
¡7 }|t ¡ 7 }d}
|j	|d||d q¬|t 
dd¡7 }ddddœdd„}| jr||dƒ | jr.||dƒ | jrV|t ¡ 7 }|t 
| j| j¡7 }| jr||t ¡ 7 }| j 	||||¡ | jr¾|t ¡ 7 }|t dd¡7 }|t ¡ 7 }| j 	||||¡ | jrÐ||dƒ | jrâ||dƒ t| jƒdkr
|t ¡ 7 }| j 	|¡ | jr||t ¡ 7 }|t 
dd¡7 }|t ¡ 7 }| jdksJt‚| jdkrh|t dd¡7 }n|t | j| j¡7 }d S )NFÚmulti_line_parameter_listr:  rŒ   T)Znoemphr<  r?  r©  rÃ   r2  r«  r   r  r  ©r,  r1  rp   c                 S  s    | t  ¡ 7 } | t  ||¡7 } d S r	  ©r   rs  rr  ©r,  r1  r  r  r  Ú	_add_anno€  s    z=ASTParametersQualifiers.describe_signature.<locals>._add_annor†   rI   rÅ   rc  rb  r   r«   ©Ú0rQ   rP   rv  )r1   rV  Ú
isinstancer   r   ÚgetZdesc_parameterlistr:  Zdesc_parameterrH  rq  rs  r†   rI   r_  r`  ra  r¯  rc  rb  r  rd  re  r
  r’  rr  )r  r,  r-  r.  r  rp  Z	test_nodeZ	paramlistrO  r<  ru  rt  r  r  r  rH  `  sr    







z*ASTParametersQualifiers.describe_signatureN)
r  r  r  r  rx  rg  rl  rm  rU  rH  r  r  r  r  r]    s   "#r]  c                   @  s@   e Zd Zdddœdd„Zdddœd	d
„Zdddddœdd„ZdS )ÚASTExplicitSpecrZ  r  ©r²  rp   c                 C  s
   || _ d S r	  r±  r³  r  r  r  r  ¦  s    zASTExplicitSpec.__init__r%   r  rR  c                 C  s>   dg}| j d k	r4| d¡ | || j ƒ¡ | d¡ d |¡S )NrW   r©  r«  rŒ   )r²  rC  rg  rT  r  r  r  rU  ©  s    


zASTExplicitSpec._stringifyr   r   r  ©r,  r.  r  rp   c                 C  sP   |t  dd¡7 }| jd k	rL|t  dd¡7 }| j |d||¡ |t  dd¡7 }d S )NrW   r©  r2  r«  r[  )r  r,  r.  r  r  r  r  rH  ±  s
    
z"ASTExplicitSpec.describe_signatureNr\  r  r  r  r  ry  ¥  s   ry  c                   @  sf   e Zd Zddddddddddddddœdd„Zd d d	œd
d„Zdddœdd„Zdddddœdd„ZdS )ÚASTDeclSpecsSimpler  r?   zASTExplicitSpec | Noner   r  )ÚstorageÚthreadLocalr^   r„   ÚexplicitSpecrJ   rK   rL   r†   rI   r\   rd  rp   c                 C  sL   || _ || _|| _|| _|| _|| _|| _|| _|	| _|
| _	|| _
|| _d S r	  )r}  r~  r^   r„   r  rJ   rK   rL   r†   rI   r\   rd  )r  r}  r~  r^   r„   r  rJ   rK   rL   r†   rI   r\   rd  r  r  r  r  »  s    zASTDeclSpecsSimple.__init__)Úotherrp   c                 C  s†   |s| S t | jp|j| jp|j| jp(|j| jp2|j| jp<|j| jpF|j| jpP|j| jpZ|j| j	pd|j	| j
pn|j
| jpx|j| j|j ƒS r	  )r|  r}  r~  r^   r„   r  rJ   rK   rL   r†   rI   r\   rd  )r  r€  r  r  r  Ú	mergeWithÍ  s    










õzASTDeclSpecsSimple.mergeWithr%   rR  c                 C  sä   g }t | jƒdkr"| || jƒ¡ | jr4| | j¡ | jrD| d¡ | jrT| d¡ | jrd| d¡ | jrt| d¡ | jrŠ| || jƒ¡ | j	rš| d¡ | j
rª| d¡ | jrº| d¡ | jrÊ| d	¡ | jrÚ| d
¡ d |¡S )Nr   rz   r^   r\   r„   rJ   rK   rL   r†   rI   rk  )r  rd  rC  r}  r~  r^   r\   r„   r  rJ   rK   rL   r†   rI   rg  rT  r  r  r  rU  Ý  s4    








zASTDeclSpecsSimple._stringifyr   r   r  r{  c                   s   | j  |¡ t| j ƒdk‰ ddddœ‡ fdd„}| jrB||| jƒ‰ | jrR||dƒ‰ | jrb||d	ƒ‰ | jrr||d
ƒ‰ | jr‚||dƒ‰ | jr¬ˆ r˜|t	 
¡ 7 }| j |||¡ d‰ | jr¼||dƒ‰ | jrÌ||dƒ‰ | jrÜ||dƒ‰ | jrì||dƒ‰ | jrü||dƒ‰ d S )Nr   r   r  r?   rq  c                   s$   ˆ r| t  ¡ 7 } | t  ||¡7 } dS r#  rr  rs  ©ÚaddSpacer  r  Ú_addþ  s    z3ASTDeclSpecsSimple.describe_signature.<locals>._addrz   r^   r\   r„   TrJ   rK   rL   r†   rI   )rd  rH  r  r}  r~  r^   r\   r„   r  r   rs  rJ   rK   rL   r†   rI   )r  r,  r.  r  r„  r  r‚  r  rH  ù  s8    







z%ASTDeclSpecsSimple.describe_signatureN)r  r  r  r  r  rU  rH  r  r  r  r  r|  º  s   &r|  c                   @  sX   e Zd Zddddddœdd„Zddd	œd
d„Zdddœdd„Zddddddœdd„ZdS )ÚASTDeclSpecsr  r|  r@  r  )ÚouterÚ	leftSpecsÚ
rightSpecsÚtrailingrp   c                 C  s,   || _ || _|| _| j | j¡| _|| _d S r	  )r†  r‡  rˆ  r  ÚallSpecsÚtrailingTypeSpec)r  r†  r‡  rˆ  r‰  r  r  r  r   	  s
    zASTDeclSpecs.__init__r_   r"  c                 C  sš   |dkrLg }|  | j |¡¡ | jjr0|  d¡ | jjrB|  d¡ d |¡S g }| jjrb|  d¡ | jjrt|  d¡ | jd k	r|  | j |¡¡ d |¡S )Nr%  rh  rŽ   rŒ   ri  )rC  r‹  r(  rŠ  r†   rI   rg  rP  r  r  r  r(  +	  s     





zASTDeclSpecs.get_idr%   rR  c                 C  s   g }|| j ƒ}t|ƒdkr$| |¡ | jr†t|ƒdkr@| d¡ | || jƒ¡ t| jƒ}t|ƒdkr†t|ƒdkr|| d¡ | |¡ d |¡S ©Nr   rk  rŒ   )r‡  r  rC  r‹  r  rˆ  rg  )r  rS  rQ  r‘   Úrr  r  r  rU  =	  s    





zASTDeclSpecs._stringifyr   r   r  rj  c                 C  s    t |ƒ t|ƒ}| j |||¡ t|ƒ|k}| jrœ|rB|t ¡ 7 }t|ƒ}| jj||||d t|ƒ|k}tt| jƒƒdkrœ|rŒ|t ¡ 7 }| j |||¡ d S )Nr?  r   )	r1   r  r‡  rH  r‹  r   rs  r  rˆ  )r  r,  r-  r.  r  ZnumChildrenrƒ  r  r  r  rH  M	  s     ÿzASTDeclSpecs.describe_signatureNr  r  r  r  r  r…  	  s   r…  c                   @  sP   e Zd Zddœdd„Zdddœdd	„Zd
ddœdd„Zddddddœdd„ZdS )ÚASTArrayry  ©Úsizec                 C  s
   || _ d S r	  r  )r  r  r  r  r  r  f	  s    zASTArray.__init__r%   r  rR  c                 C  s    | j rd|| j ƒ d S dS d S )NrÁ  rÂ  rÇ   r  r‚  r  r  r  rU  i	  s    zASTArray._stringifyr_   r"  c                 C  sR   |dkrdS |dkr0| j r,dt| j ƒ d S dS | j rJd| j  |¡ d S dS d S )Nr%  ÚAr”  r   ZA_)r  r  r(  r'  r  r  r  r(  o	  s    zASTArray.get_idr   r   r  r  rj  c                 C  sD   t |ƒ |t dd¡7 }| jr0| j |d||¡ |t dd¡7 }d S )NrÁ  r2  rÂ  )r1   r   rq  r  rH  r}  r  r  r  rH  |	  s
    zASTArray.describe_signatureNrŠ  r  r  r  r  rŽ  e	  s   rŽ  c                   @  sÞ   e Zd Zeddœdd„ƒZejdddœdd„ƒZeddœd	d
„ƒZeddœdd„ƒZeddœdd„ƒZddœdd„Z	dddœdd„Z
dddœdd„Zdddœdd„Zddddœdd„Zddœdd „Zd!dd"d#dd$œd%d&„Zd'S )(ÚASTDeclaratorrV  r  c                 C  s   t t| ƒƒ‚d S r	  rz  r  r  r  r  rZ  †	  s    zASTDeclarator.namer  ©rZ  rp   c                 C  s   t t| ƒƒ‚d S r	  rz  r¹  r  r  r  rZ  Š	  s    r?   c                 C  s   t t| ƒƒ‚d S r	  rz  r  r  r  r  ÚisPackŽ	  s    zASTDeclarator.isPackr^  c                 C  s   t t| ƒƒ‚d S r	  rz  r  r  r  r  rg  ’	  s    zASTDeclarator.function_paramsrÒ  c                 C  s   t t| ƒƒ‚d S r	  rz  r  r  r  r  ra  –	  s    zASTDeclarator.trailingReturnc                 C  s   t t| ƒƒ‚d S r	  rz  r  r  r  r  Úrequire_space_after_declSpecsš	  s    z+ASTDeclarator.require_space_after_declSpecsr_   r  r"  c                 C  s   t t| ƒƒ‚d S r	  rz  r'  r  r  r  rl  	  s    zASTDeclarator.get_modifiers_idc                 C  s   t t| ƒƒ‚d S r	  rz  r'  r  r  r  rm   	  s    zASTDeclarator.get_param_idc                 C  s   t t| ƒƒ‚d S r	  rz  r'  r  r  r  Úget_ptr_suffix_id£	  s    zASTDeclarator.get_ptr_suffix_id©r#  ÚreturnTypeIdrp   c                 C  s   t t| ƒƒ‚d S r	  rz  ©r  r#  r˜  r  r  r  Úget_type_id¦	  s    zASTDeclarator.get_type_idc                 C  s   t t| ƒƒ‚d S r	  rz  r  r  r  r  Úis_function_type©	  s    zASTDeclarator.is_function_typer   r   r  rj  c                 C  s   t t| ƒƒ‚d S r	  rz  r}  r  r  r  rH  ¬	  s    z ASTDeclarator.describe_signatureN)r  r  r  rx  rZ  Úsetterr”  rg  ra  r•  rl  rm  r–  rš  r›  rH  r  r  r  r  r’  …	  s"   r’  c                   @  s  e Zd Zdddddœdd„Zeddœd	d
„ƒZejdddœdd
„ƒZeddœdd„ƒZeddœdd„ƒZeddœdd„ƒZ	dddœdd„Z
dddœdd„Zdddœdd„Zddddœd d!„Zddœd"d#„Zddœd$d%„Zd&dd'œd(d)„Zd*dd+d,dd-œd.d/„Zd0S )1ÚASTDeclaratorNameParamQualrV  zlist[ASTArray]r]  r  )ÚdeclIdÚarrayOpsÚ	paramQualrp   c                 C  s   || _ || _|| _d S r	  ©rž  rŸ  r   )r  rž  rŸ  r   r  r  r  r  ²	  s    z#ASTDeclaratorNameParamQual.__init__r  c                 C  s   | j S r	  ©rž  r  r  r  r  rZ  ¹	  s    zASTDeclaratorNameParamQual.namer“  c                 C  s
   || _ d S r	  r¢  r¹  r  r  r  rZ  ½	  s    r?   c                 C  s   dS rN  r  r  r  r  r  r”  Á	  s    z!ASTDeclaratorNameParamQual.isPackr^  c                 C  s   | j jS r	  )r   rg  r  r  r  r  rg  Å	  s    z*ASTDeclaratorNameParamQual.function_paramsrÒ  c                 C  s   | j jS r	  )r   ra  r  r  r  r  ra  É	  s    z)ASTDeclaratorNameParamQual.trailingReturnr_   r  r"  c                 C  s"   | j r| j  |¡S td|  ƒ‚d S )Nz,This should only be called on a function: %s)r   rl  rD  r'  r  r  r  rl  Î	  s    z+ASTDeclaratorNameParamQual.get_modifiers_idc                 C  s   | j r| j  |¡S dS d S rÕ  )r   rm  r'  r  r  r  rm  Ô	  s    z'ASTDeclaratorNameParamQual.get_param_idc                   s   d  ‡ fdd„| jD ƒ¡S )NrŒ   c                 3  s   | ]}|  ˆ ¡V  qd S r	  r`  r<  rb  r  r  rc  Û	  s     z?ASTDeclaratorNameParamQual.get_ptr_suffix_id.<locals>.<genexpr>)rg  rŸ  r'  r  rb  r  r–  Ú	  s    z,ASTDeclaratorNameParamQual.get_ptr_suffix_idr—  c                 C  sz   |dkst ‚g }| |  |¡¡ | jrf| |  |¡¡ | d¡ | |¡ | |  |¡¡ | d¡ n
| |¡ d |¡S )Nr”  ÚFre  rŒ   )r
  rC  r–  r   rl  rm  rg  ©r  r#  r˜  rQ  r  r  r  rš  Ý	  s    


z&ASTDeclaratorNameParamQual.get_type_idc                 C  s
   | j d k	S r	  r¢  r  r  r  r  r•  î	  s    z8ASTDeclaratorNameParamQual.require_space_after_declSpecsc                 C  s
   | j d k	S r	  )r   r  r  r  r  r›  ñ	  s    z+ASTDeclaratorNameParamQual.is_function_typer%   rR  c                 C  sT   g }| j r| || j ƒ¡ | jD ]}| ||ƒ¡ q | jrJ| || jƒ¡ d |¡S rÕ  )rž  rC  rŸ  r   rg  )r  rS  rQ  r¦  r  r  r  rU  ô	  s    
z%ASTDeclaratorNameParamQual._stringifyr   r   r  rj  c                 C  sX   t |ƒ | jr | j ||||¡ | jD ]}| ||||¡ q&| jrT| j ||||¡ d S r	  )r1   rž  rH  rŸ  r   )r  r,  r-  r.  r  r¦  r  r  r  rH  þ	  s    
z-ASTDeclaratorNameParamQual.describe_signatureN)r  r  r  r  rx  rZ  rœ  r”  rg  ra  rl  rm  r–  rš  r•  r›  rU  rH  r  r  r  r  r  ±	  s&   
r  c                   @  s¦   e Zd Zdddœdd„Zeddœdd„ƒZejdd	d
œdd„ƒZdddœdd„Zdddœdd„Zddœdd„Z	ddœdd„Z
dddœdd„Zddddd	dœd d!„Zd"S )#ÚASTDeclaratorNameBitFieldrV  ry  ©rž  r  c                 C  s   || _ || _d S r	  r¦  )r  rž  r  r  r  r  r  

  s    z"ASTDeclaratorNameBitField.__init__r  c                 C  s   | j S r	  r¢  r  r  r  r  rZ  
  s    zASTDeclaratorNameBitField.namer  r“  c                 C  s
   || _ d S r	  r¢  r¹  r  r  r  rZ  
  s    r_   r  r"  c                 C  s   dS rÕ  r  r'  r  r  r  rm  
  s    z&ASTDeclaratorNameBitField.get_param_idc                 C  s   dS rÕ  r  r'  r  r  r  r–  
  s    z+ASTDeclaratorNameBitField.get_ptr_suffix_idr?   c                 C  s
   | j d k	S r	  r¢  r  r  r  r  r•  
  s    z7ASTDeclaratorNameBitField.require_space_after_declSpecsc                 C  s   dS rN  r  r  r  r  r  r›  !
  s    z*ASTDeclaratorNameBitField.is_function_typer%   rR  c                 C  s>   g }| j r| || j ƒ¡ | d¡ | || jƒ¡ d |¡S )Nr  rŒ   )rž  rC  r  rg  rT  r  r  r  rU  $
  s    
z$ASTDeclaratorNameBitField._stringifyr   r   r  rj  c                 C  s^   t |ƒ | jr | j ||||¡ |t ¡ 7 }|t dd¡7 }|t ¡ 7 }| j ||||¡ d S )Nr  )r1   rž  rH  r   rs  rq  r  r}  r  r  r  rH  ,
  s    z,ASTDeclaratorNameBitField.describe_signatureN)r  r  r  r  rx  rZ  rœ  rm  r–  r•  r›  rU  rH  r  r  r  r  r¥  	
  s   r¥  c                   @  s  e Zd Zddddddœdd„Zedd	œd
d„ƒZejdddœdd„ƒZedd	œdd„ƒZedd	œdd„ƒZedd	œdd„ƒZ	dd	œdd„Z
dddœdd„Zdddœdd „Zdddœd!d"„Zdddœd#d$„Zdddd%œd&d'„Zdd	œd(d)„Zd*dd+d,dd-œd.d/„Zd0S )1ÚASTDeclaratorPtrr’  r?   r   r  )Únextr†   rI   rd  rp   c                 C  s$   |st ‚|| _|| _|| _|| _d S r	  )r
  r¨  r†   rI   rd  )r  r¨  r†   rI   rd  r  r  r  r  8
  s
    zASTDeclaratorPtr.__init__rV  r  c                 C  s   | j jS r	  ©r¨  rZ  r  r  r  r  rZ  @
  s    zASTDeclaratorPtr.namer“  c                 C  s   || j _d S r	  r©  r¹  r  r  r  rZ  D
  s    c                 C  s   | j jS r	  ©r¨  r”  r  r  r  r  r”  H
  s    zASTDeclaratorPtr.isPackr^  c                 C  s   | j jS r	  ©r¨  rg  r  r  r  r  rg  L
  s    z ASTDeclaratorPtr.function_paramsrÒ  c                 C  s   | j jS r	  ©r¨  ra  r  r  r  r  ra  P
  s    zASTDeclaratorPtr.trailingReturnc                 C  s
   | j  ¡ S r	  ©r¨  r•  r  r  r  r  r•  T
  s    z.ASTDeclaratorPtr.require_space_after_declSpecsr%   r  rR  c                 C  s²   dg}|  || jƒ¡ t| jƒdkr:| js0| jr:|  d¡ | jrJ|  d¡ | jrj| jr`|  d¡ |  d¡ | js„| js„t| jƒdkr˜| j ¡ r˜|  d¡ |  || jƒ¡ d |¡S )Nr¥   r   rk  r†   rI   rŒ   )rC  rd  r  r†   rI   r¨  r•  rg  rT  r  r  r  rU  W
  s    





zASTDeclaratorPtr._stringifyr_   r"  c                 C  s   | j  |¡S r	  ©r¨  rl  r'  r  r  r  rl  h
  s    z!ASTDeclaratorPtr.get_modifiers_idc                 C  s   | j  |¡S r	  ©r¨  rm  r'  r  r  r  rm  k
  s    zASTDeclaratorPtr.get_param_idc                 C  sŒ   |dkrJdg}| j r| d¡ | jr.| d¡ | | j |¡¡ d |¡S | j |¡g}| d¡ | j rr| d¡ | jr‚| d¡ d |¡S )Nr%  ÚPrh  rŽ   rŒ   )r†   rC  rI   r¨  r–  rg  rP  r  r  r  r–  n
  s    





z"ASTDeclaratorPtr.get_ptr_suffix_idr—  c                 C  sF   dg}| j r| d¡ | jr&| d¡ | |¡ | jj|d |¡dS )Nr°  rh  rŽ   rŒ   ©r˜  )r†   rC  rI   r¨  rš  rg  r¤  r  r  r  rš  €
  s    


zASTDeclaratorPtr.get_type_idc                 C  s
   | j  ¡ S r	  ©r¨  r›  r  r  r  r  r›  Š
  s    z!ASTDeclaratorPtr.is_function_typer   r   r  rj  c                 C  sÔ   t |ƒ |t dd¡7 }| j |¡ t| jƒdkrJ| js>| jrJ|t ¡ 7 }ddddœdd„}| jrl||d	ƒ | jrŽ| jr„|t ¡ 7 }||d
ƒ | js¨| js¨t| jƒdkr¾| j	 
¡ r¾|t ¡ 7 }| j	 ||||¡ d S )Nr¥   r   r   r  r  rq  c                 S  s   | t  ||¡7 } d S r	  rƒ  rs  r  r  r  rt  •
  s    z6ASTDeclaratorPtr.describe_signature.<locals>._add_annor†   rI   )r1   r   rq  rd  rH  r  r†   rI   rs  r¨  r•  ©r  r,  r-  r.  r  rt  r  r  r  rH  
  s     


z#ASTDeclaratorPtr.describe_signatureN©r  r  r  r  rx  rZ  rœ  r”  rg  ra  r•  rU  rl  rm  r–  rš  r›  rH  r  r  r  r  r§  7
  s&   
r§  c                   @  s   e Zd Zddddœdd„Zeddœd	d
„ƒZejdddœdd
„ƒZeddœdd„ƒZeddœdd„ƒZeddœdd„ƒZ	ddœdd„Z
dddœdd„Zdddœdd „Zdddœd!d"„Zdddœd#d$„Zdddd%œd&d'„Zddœd(d)„Zd*dd+d,dd-œd.d/„Zd0S )1ÚASTDeclaratorRefr’  r   r  )r¨  rd  rp   c                 C  s   |st ‚|| _|| _d S r	  )r
  r¨  rd  )r  r¨  rd  r  r  r  r  ¤
  s    zASTDeclaratorRef.__init__rV  r  c                 C  s   | j jS r	  r©  r  r  r  r  rZ  ©
  s    zASTDeclaratorRef.namer“  c                 C  s   || j _d S r	  r©  r¹  r  r  r  rZ  ­
  s    r?   c                 C  s   | j jS r	  rª  r  r  r  r  r”  ±
  s    zASTDeclaratorRef.isPackr^  c                 C  s   | j jS r	  r«  r  r  r  r  rg  µ
  s    z ASTDeclaratorRef.function_paramsrÒ  c                 C  s   | j jS r	  r¬  r  r  r  r  ra  ¹
  s    zASTDeclaratorRef.trailingReturnc                 C  s
   | j  ¡ S r	  r­  r  r  r  r  r•  ½
  s    z.ASTDeclaratorRef.require_space_after_declSpecsr%   r  rR  c                 C  sR   dg}|  || jƒ¡ t| jƒdkr8| j ¡ r8|  d¡ |  || jƒ¡ d |¡S )Nr¨   r   rk  rŒ   )rC  rd  r  r¨  r•  rg  rT  r  r  r  rU  À
  s    
zASTDeclaratorRef._stringifyr_   r"  c                 C  s   | j  |¡S r	  r®  r'  r  r  r  rl  È
  s    z!ASTDeclaratorRef.get_modifiers_idc                 C  s   | j  |¡S r	  r¯  r'  r  r  r  rm  Ë
  s    zASTDeclaratorRef.get_param_idc                 C  s,   |dkrd| j  |¡ S | j  |¡d S d S )Nr%  rk  ©r¨  r–  r'  r  r  r  r–  Î
  s    z"ASTDeclaratorRef.get_ptr_suffix_idr—  c                 C  s    |dkst ‚| jj|d| dS )Nr”  rk  r±  ©r
  r¨  rš  r™  r  r  r  rš  Ô
  s    zASTDeclaratorRef.get_type_idc                 C  s
   | j  ¡ S r	  r²  r  r  r  r  r›  Ù
  s    z!ASTDeclaratorRef.is_function_typer   r   r  rj  c                 C  s^   t |ƒ |t dd¡7 }| j |¡ t| jƒdkrH| j ¡ rH|t ¡ 7 }| j ||||¡ d S )Nr¨   r   )	r1   r   rq  rd  rH  r  r¨  r•  rs  r}  r  r  r  rH  Ü
  s    z#ASTDeclaratorRef.describe_signatureNr´  r  r  r  r  rµ  £
  s&   rµ  c                   @  sþ   e Zd Zdddœdd„Zeddœdd	„ƒZejddd
œdd	„ƒZeddœdd„ƒZeddœdd„ƒZeddœdd„ƒZ	ddœdd„Z
dddœdd„Zdddœdd„Zdddœd d!„Zdddœd"d#„Zdddd$œd%d&„Zddœd'd(„Zd)dd*d+dd,œd-d.„Zd/S )0ÚASTDeclaratorParamPackr’  r  )r¨  rp   c                 C  s   |st ‚|| _d S r	  )r
  r¨  )r  r¨  r  r  r  r  ç
  s    zASTDeclaratorParamPack.__init__rV  r  c                 C  s   | j jS r	  r©  r  r  r  r  rZ  ë
  s    zASTDeclaratorParamPack.namer“  c                 C  s   || j _d S r	  r©  r¹  r  r  r  rZ  ï
  s    r^  c                 C  s   | j jS r	  r«  r  r  r  r  rg  ó
  s    z&ASTDeclaratorParamPack.function_paramsrÒ  c                 C  s   | j jS r	  r¬  r  r  r  r  ra  ÷
  s    z%ASTDeclaratorParamPack.trailingReturnr?   c                 C  s   dS r#  r  r  r  r  r  r”  û
  s    zASTDeclaratorParamPack.isPackc                 C  s   dS rN  r  r  r  r  r  r•  ÿ
  s    z4ASTDeclaratorParamPack.require_space_after_declSpecsr%   r  rR  c                 C  s"   || j ƒ}| j jrd| }d| S )Nrk  rª  r©  rT  r  r  r  rU    s    
z!ASTDeclaratorParamPack._stringifyr_   r"  c                 C  s   | j  |¡S r	  r®  r'  r  r  r  rl    s    z'ASTDeclaratorParamPack.get_modifiers_idc                 C  s   | j  |¡S r	  r¯  r'  r  r  r  rm    s    z#ASTDeclaratorParamPack.get_param_idc                 C  s,   |dkrd| j  |¡ S | j  |¡d S d S ©Nr%  ÚDpr¶  r'  r  r  r  r–    s    z(ASTDeclaratorParamPack.get_ptr_suffix_idr—  c                 C  s    |dkst ‚| jj|d| dS )Nr”  rº  r±  r·  r™  r  r  r  rš    s    z"ASTDeclaratorParamPack.get_type_idc                 C  s
   | j  ¡ S r	  r²  r  r  r  r  r›    s    z'ASTDeclaratorParamPack.is_function_typer   r   r  rj  c                 C  sB   t |ƒ |t dd¡7 }| jjr,|t ¡ 7 }| j ||||¡ d S rX  )r1   r   rq  r¨  rZ  rs  rH  r}  r  r  r  rH    s
    z)ASTDeclaratorParamPack.describe_signatureN)r  r  r  r  rx  rZ  rœ  rg  ra  r”  r•  rU  rl  rm  r–  rš  r›  rH  r  r  r  r  r¸  æ
  s&   r¸  c                   @  sþ   e Zd Zddddddœdd„Zeddœd	d
„ƒZejdddœdd
„ƒZedd„ ƒZeddœdd„ƒZeddœdd„ƒZ	ddœdd„Z
dddœdd„Zdddœdd„Zdddœd d!„Zdddœd"d#„Zdddd$œd%d&„Zddœd'd(„Zd)dd*d+dd,œd-d.„Zd/S )0ÚASTDeclaratorMemPtrrV  r?   r’  r  )Ú	classNamerI   r†   r¨  rp   c                 C  s,   |st ‚|st ‚|| _|| _|| _|| _d S r	  )r
  r¼  rI   r†   r¨  )r  r¼  rI   r†   r¨  r  r  r  r  &  s    zASTDeclaratorMemPtr.__init__r  c                 C  s   | j jS r	  r©  r  r  r  r  rZ  /  s    zASTDeclaratorMemPtr.namer“  c                 C  s   || j _d S r	  r©  r¹  r  r  r  rZ  3  s    c                 C  s   | j jS r	  rª  r  r  r  r  r”  7  s    zASTDeclaratorMemPtr.isPackr^  c                 C  s   | j jS r	  r«  r  r  r  r  rg  ;  s    z#ASTDeclaratorMemPtr.function_paramsrÒ  c                 C  s   | j jS r	  r¬  r  r  r  r  ra  ?  s    z"ASTDeclaratorMemPtr.trailingReturnc                 C  s   dS r#  r  r  r  r  r  r•  C  s    z1ASTDeclaratorMemPtr.require_space_after_declSpecsr%   r  rR  c                 C  s|   g }|  || jƒ¡ |  d¡ | jr.|  d¡ | jrN| jrD|  d¡ |  d¡ | j ¡ rb|  d¡ |  || jƒ¡ d |¡S )Nz::*r†   rk  rI   rŒ   )rC  r¼  r†   rI   r¨  r•  rg  rT  r  r  r  rU  F  s    





zASTDeclaratorMemPtr._stringifyr_   r"  c                 C  s   |dkrt ƒ ‚| j |¡S ©Nr%  )r$   r¨  rl  r'  r  r  r  rl  U  s    z$ASTDeclaratorMemPtr.get_modifiers_idc                 C  s   |dkrt ƒ ‚| j |¡S r½  )r$   r¨  rm  r'  r  r  r  rm  Z  s    z ASTDeclaratorMemPtr.get_param_idc                 C  s$   |dkrt ƒ ‚tƒ ‚| j |¡d S r¹  )r$   r{  r¨  r–  r'  r  r  r  r–  _  s    z%ASTDeclaratorMemPtr.get_ptr_suffix_idr—  c                 C  sZ   |dkst ‚d}| jr|d7 }| jr,|d7 }|d7 }|| j |¡7 }||7 }| j ||¡S )Nr”  rŒ   rh  ri  ÚM)r
  r†   rI   r¼  r(  r¨  rš  )r  r#  r˜  ZnextReturnTypeIdr  r  r  rš  e  s    zASTDeclaratorMemPtr.get_type_idc                 C  s
   | j  ¡ S r	  r²  r  r  r  r  r›  r  s    z$ASTDeclaratorMemPtr.is_function_typer   r   r  rj  c                 C  sª   t |ƒ | j |d||¡ |t dd¡7 }|t dd¡7 }ddddœdd	„}| jr\||d
ƒ | jr~| jrt|t ¡ 7 }||dƒ | j 	¡ r”|t ¡ 7 }| j ||||¡ d S )Nr2  r_  r¥   r   r  r  rq  c                 S  s   | t  ||¡7 } d S r	  rƒ  rs  r  r  r  rt  |  s    z9ASTDeclaratorMemPtr.describe_signature.<locals>._add_annor†   rI   )
r1   r¼  rH  r   rq  r†   rI   rs  r¨  r•  r³  r  r  r  rH  u  s    


z&ASTDeclaratorMemPtr.describe_signatureNr´  r  r  r  r  r»  %  s&   	
r»  c                   @  sú   e Zd Zddddœdd„Zeddœdd	„ƒZejddd
œdd	„ƒZedd„ ƒZeddœdd„ƒZeddœdd„ƒZ	ddœdd„Z
dddœdd„Zdddœdd„Zdddœd d!„Zdddœd"d#„Zdddd$œd%d&„Zddœd'd(„Zd)dd*d+dd,œd-d.„Zd/S )0ÚASTDeclaratorParenr’  r  )Úinnerr¨  rp   c                 C  s    |st ‚|st ‚|| _|| _d S r	  )r
  rÀ  r¨  )r  rÀ  r¨  r  r  r  r  Š  s    zASTDeclaratorParen.__init__rV  r  c                 C  s   | j jS r	  ©rÀ  rZ  r  r  r  r  rZ  ‘  s    zASTDeclaratorParen.namer“  c                 C  s   || j _d S r	  rÁ  r¹  r  r  r  rZ  •  s    c                 C  s   | j jp| jjS r	  )rÀ  r”  r¨  r  r  r  r  r”  ™  s    zASTDeclaratorParen.isPackr^  c                 C  s   | j jS r	  )rÀ  rg  r  r  r  r  rg    s    z"ASTDeclaratorParen.function_paramsrÒ  c                 C  s   | j jS r	  )rÀ  ra  r  r  r  r  ra  ¡  s    z!ASTDeclaratorParen.trailingReturnr?   c                 C  s   dS r#  r  r  r  r  r  r•  ¥  s    z0ASTDeclaratorParen.require_space_after_declSpecsr%   r  rR  c                 C  s:   dg}|  || jƒ¡ |  d¡ |  || jƒ¡ d |¡S rÿ  )rC  rÀ  r¨  rg  rT  r  r  r  rU  ¨  s
    
zASTDeclaratorParen._stringifyr_   r"  c                 C  s   | j  |¡S r	  )rÀ  rl  r'  r  r  r  rl  ¯  s    z#ASTDeclaratorParen.get_modifiers_idc                 C  s   | j  |¡S r	  )rÀ  rm  r'  r  r  r  rm  ²  s    zASTDeclaratorParen.get_param_idc                 C  s>   |dkr&t ƒ ‚| j |¡| j |¡ S | j |¡| j |¡ S r½  )r$   r¨  r–  rÀ  r'  r  r  r  r–  µ  s    

ÿ

ÿz$ASTDeclaratorParen.get_ptr_suffix_idr—  c                 C  s*   |dkst ‚| j ||¡}| jj||dS )Nr”  r±  )r
  r¨  rš  rÀ  )r  r#  r˜  ZnextIdr  r  r  rš  ½  s    zASTDeclaratorParen.get_type_idc                 C  s
   | j  ¡ S r	  )rÀ  r›  r  r  r  r  r›  Ã  s    z#ASTDeclaratorParen.is_function_typer   r   r  rj  c                 C  sP   t |ƒ |t dd¡7 }| j ||||¡ |t dd¡7 }| j |d||¡ d S )Nr©  r«  r;  )r1   r   rq  rÀ  rH  r¨  r}  r  r  r  rH  Æ  s
    z%ASTDeclaratorParen.describe_signatureNr´  r  r  r  r  r¿  ‰  s&   
r¿  c                   @  sP   e Zd Zddœdd„Zdddœdd	„Zd
ddœdd„Zddddddœdd„ZdS )ÚASTPackExpansionExprr  r±  c                 C  s
   || _ d S r	  r±  r³  r  r  r  r  Ó  s    zASTPackExpansionExpr.__init__r%   r  rR  c                 C  s   || j ƒd S rX  r±  r‚  r  r  r  rU  Ö  s    zASTPackExpansionExpr._stringifyr_   r"  c                 C  s   | j  |¡}d| S )NÚsprµ  rü  r  r  r  r(  Ù  s    zASTPackExpansionExpr.get_idr   r   r  r  rj  c                 C  s&   | j  ||||¡ |t dd¡7 }d S rX  )r²  rH  r   rq  r}  r  r  r  rH  Ý  s    z'ASTPackExpansionExpr.describe_signatureNrŠ  r  r  r  r  rÂ  Ò  s   rÂ  c                   @  sR   e Zd Zdddœdd„Zdddœd	d
„Zdddœdd„Zddddddœdd„ZdS )ÚASTParenExprListr  r  )rÐ  rp   c                 C  s
   || _ d S r	  r  r  r  r  r  r  ä  s    zASTParenExprList.__init__r_   r  r"  c                   s   dd  ‡ fdd„| jD ƒ¡ S )Nzpi%sErŒ   c                 3  s   | ]}|  ˆ ¡V  qd S r	  r`  r  rb  r  r  rc  è  s     z*ASTParenExprList.get_id.<locals>.<genexpr>r  r'  r  rb  r  r(  ç  s    zASTParenExprList.get_idr%   rR  c                   s"   ‡ fdd„| j D ƒ}dd |¡ S )Nc                   s   g | ]}ˆ |ƒ‘qS r  r  r  r  r  r  Ú
<listcomp>ë  s     z/ASTParenExprList._stringify.<locals>.<listcomp>z(%s)r  )rÐ  rg  )r  rS  rÐ  r  r  r  rU  ê  s    zASTParenExprList._stringifyr   r   r  rj  c                 C  sr   t |ƒ |t dd¡7 }d}| jD ]:}|sH|t dd¡7 }|t ¡ 7 }nd}| ||||¡ q"|t dd¡7 }d S )Nr©  TrÃ   Fr«  )r1   r   rq  rÐ  rs  rH  r  r  r  r  rH  î  s    
z#ASTParenExprList.describe_signatureNr  r  r  r  r  rÄ  ã  s   rÄ  c                   @  sF   e Zd Zdddddœdd„Zdd	d
œdd„Zdd	ddddœdd„ZdS )ÚASTInitializerTr  r?   r  )r‡  Ú	hasAssignrp   c                 C  s   || _ || _d S r	  ©r‡  rÇ  )r  r‡  rÇ  r  r  r  r  þ  s    zASTInitializer.__init__r%   r  rR  c                 C  s    || j ƒ}| jrd| S |S d S ©Nro  rÈ  )r  rS  Úvalr  r  r  rU    s    
zASTInitializer._stringifyr   r   r  rj  c                 C  sL   t |ƒ | jr6|t ¡ 7 }|t dd¡7 }|t ¡ 7 }| j |d||¡ d S )Nr«   r2  )r1   rÇ  r   rs  rq  r‡  rH  r}  r  r  r  rH  
  s    z!ASTInitializer.describe_signatureN)Tr\  r  r  r  r  rÆ  ý  s    ÿrÆ  c                   @  sÆ   e Zd Zddddœdd„Zeddœd	d
„ƒZejdddœdd
„ƒZeddœdd„ƒZeddœdd„ƒZed dœdd„ƒZ	d)dddddœdd„Z
dddœdd „Zddœd!d"„Zd#dd$d%dd&œd'd(„ZdS )*rÒ  r…  r’  r  )Ú	declSpecsÚdeclrp   c                 C  s    |st ‚|st ‚|| _|| _d S r	  )r
  rË  rÌ  )r  rË  rÌ  r  r  r  r    s    zASTType.__init__rV  r  c                 C  s   | j jS r	  ©rÌ  rZ  r  r  r  r  rZ    s    zASTType.namer“  c                 C  s   || j _d S r	  rÍ  r¹  r  r  r  rZ    s    r?   c                 C  s   | j jS r	  )rÌ  r”  r  r  r  r  r”  #  s    zASTType.isPackr^  c                 C  s   | j jS r	  )rÌ  rg  r  r  r  r  rg  '  s    zASTType.function_paramsc                 C  s   | j jS r	  )rÌ  ra  r  r  r  r  ra  +  s    zASTType.trailingReturnNr_   rH  rQ  r  rR  c           	      C  sð  |dkrðg }|r |dkrx|  | ¡  |¡¡ |  | j |¡¡ |  | j |¡¡ | jjjsl| jj	rž| jj	jrž|  d¡ qæ|dkr–|  | ¡  |¡¡ qæt
|ƒ‚nF| j ¡ r°tƒ ‚|  | j |¡¡ |  | j |¡¡ |  | j |¡¡ d |¡S g }|rÂ|dkr˜| j |¡}|  | ¡  ||¡¡ |dkr„|jj}|d k	r„| j |¡}| jrd| j |¡}n| j |¡}|  |¡ |  |¡ |  | j |¡¡ n(|dkr¸|  | ¡  |¡¡ nt
|ƒ‚n$| j |¡}| j ||¡}|  |¡ d |¡S )Nr%  ÚfunctionZCEr—  rŒ   r‹   )rC  Úget_full_nested_namer(  rÌ  rm  rl  rË  r‡  rK   rˆ  r
  r›  r$   r–  rg  r  ro  ra  rš  )	r  r#  rS  r  rQ  r^  ZtemplZtypeIdr˜  r  r  r  r(  /  sX    
ÿþ










zASTType.get_idr%   rR  c                 C  sR   g }|| j ƒ}| |¡ | j ¡ r8t|ƒdkr8| d¡ | || jƒ¡ d |¡S rŒ  )rË  rC  rÌ  r•  r  rg  )r  rS  rQ  rË  r  r  r  rU  e  s    


zASTType._stringifyc                 C  s   | j jrdS dS d S )Nr~   r—  )rË  r‹  r  r  r  r  Úget_type_declaration_prefixn  s    z#ASTType.get_type_declaration_prefixr   r   r  rj  c                 C  sd   t |ƒ | j |d||¡ | j ¡ rBtt| jƒƒdkrB|t ¡ 7 }|dkrNd}| j ||||¡ d S )Nr2  r   r;  )	r1   rË  rH  rÌ  r•  r  r  r   rs  r}  r  r  r  rH  t  s    
ÿzASTType.describe_signature)NN)r  r  r  r  rx  rZ  rœ  r”  rg  ra  r(  rU  rÐ  rH  r  r  r  r  rÒ    s"     ÿ6	rÒ  c                   @  s~   e Zd Zddddœdd„Zeddœdd	„ƒZed
dœdd„ƒZddddddœdd„Zdddœdd„Zddddddœdd„Z	dS ) Ú'ASTTemplateParamConstrainedTypeWithInitrÒ  r  ©r—  Úinitrp   c                 C  s   |st ‚|| _|| _d S r	  )r
  r—  rÓ  ©r  r—  rÓ  r  r  r  r  ƒ  s    z0ASTTemplateParamConstrainedTypeWithInit.__init__rV  r  c                 C  s   | j jS r	  ©r—  rZ  r  r  r  r  rZ  ˆ  s    z,ASTTemplateParamConstrainedTypeWithInit.namer?   c                 C  s   | j jS r	  ©r—  r”  r  r  r  r  r”  Œ  s    z.ASTTemplateParamConstrainedTypeWithInit.isPackNr_   rH  rQ  r  rR  c                 C  s2   |dkst ‚|r"|jjj|ddS | j |¡S d S ©Nr”  FrT  )r
  rV  r  r(  r—  rW  r  r  r  r(    s    z.ASTTemplateParamConstrainedTypeWithInit.get_idr%   rR  c                 C  s*   || j ƒ}| jr&|d7 }||| jƒ7 }|S rÉ  ©r—  rÓ  rT  r  r  r  rU  ›  s
    
z2ASTTemplateParamConstrainedTypeWithInit._stringifyr   r   r  rj  c                 C  sV   | j  ||||¡ | jrR|t ¡ 7 }|t dd¡7 }|t ¡ 7 }| j ||||¡ d S )Nr«   )r—  rH  rÓ  r   rs  rq  r}  r  r  r  rH  ¢  s    z:ASTTemplateParamConstrainedTypeWithInit.describe_signature)NN©
r  r  r  r  rx  rZ  r”  r(  rU  rH  r  r  r  r  rÑ  ‚  s      ÿrÑ  c                   @  s~   e Zd Zddddœdd„Zeddœd	d
„ƒZeddœdd„ƒZd dddddœdd„Zdddœdd„Zddddddœdd„Z	dS )!ÚASTTypeWithInitrÒ  rÆ  r  rÒ  c                 C  s   || _ || _d S r	  rØ  rÔ  r  r  r  r  ­  s    zASTTypeWithInit.__init__rV  r  c                 C  s   | j jS r	  rÕ  r  r  r  r  rZ  ±  s    zASTTypeWithInit.namer?   c                 C  s   | j jS r	  rÖ  r  r  r  r  r”  µ  s    zASTTypeWithInit.isPackNr_   rH  rQ  r  rR  c                 C  sJ   |dkr| j  ||¡S |dkr<| ¡  |¡d | j  |¡ S | ¡  |¡S )NÚmemberr%  r   )r—  r(  rÏ  rW  r  r  r  r(  ¹  s    
ÿzASTTypeWithInit.get_idr%   rR  c                 C  s4   g }|  || jƒ¡ | jr*|  || jƒ¡ d |¡S rÕ  )rC  r—  rÓ  rg  rT  r  r  r  rU  Â  s
    zASTTypeWithInit._stringifyr   r   r  rj  c                 C  s6   t |ƒ | j ||||¡ | jr2| j ||||¡ d S r	  )r1   r—  rH  rÓ  r}  r  r  r  rH  É  s    z"ASTTypeWithInit.describe_signature)NNrÙ  r  r  r  r  rÚ  ¬  s     ÿ	rÚ  c                   @  sh   e Zd Zddddœdd„Zddd	d
ddœdd„Zdddœdd„Zddœdd„Zddddddœdd„ZdS )ÚASTTypeUsingrV  rÒ  r  )rZ  r—  rp   c                 C  s   || _ || _d S r	  )rZ  r—  ©r  rZ  r—  r  r  r  r  Ò  s    zASTTypeUsing.__init__Nr_   rH  rQ  r  rR  c                 C  s   |dkrt ƒ ‚| ¡  |¡S r½  ©r$   rÏ  r(  rW  r  r  r  r(  Ö  s    zASTTypeUsing.get_idr%   rR  c                 C  s>   g }|  || jƒ¡ | jr4|  d¡ |  || jƒ¡ d |¡S )Nro  rŒ   )rC  rZ  r—  rg  rT  r  r  r  rU  Ü  s    
zASTTypeUsing._stringifyr  c                 C  s   dS )Nrƒ   r  r  r  r  r  rÐ  ä  s    z(ASTTypeUsing.get_type_declaration_prefixr   r   r  rj  c                 C  sb   t |ƒ | jj||||d | jr^|t ¡ 7 }|t dd¡7 }|t ¡ 7 }| jj|d||d d S )Nr?  r«   r2  )r1   rZ  rH  r—  r   rs  rq  r}  r  r  r  rH  ç  s    zASTTypeUsing.describe_signature)NN)r  r  r  r  r(  rU  rÐ  rH  r  r  r  r  rÜ  Ñ  s     ÿrÜ  c                   @  sl   e Zd Zddddœdd„Zeddœdd	„ƒZddddddœdd„Zdddœdd„Zddddddœdd„Zd
S )Ú
ASTConceptrV  rÆ  r  )rI  re  rp   c                 C  s   || _ || _d S r	  ©rI  re  ©r  rI  re  r  r  r  r  ö  s    zASTConcept.__init__r  c                 C  s   | j S r	  rK  r  r  r  r  rZ  ú  s    zASTConcept.nameNr_   rH  rQ  r  rR  c                 C  s   |dkrt ƒ ‚| ¡  |¡S r½  rÞ  rW  r  r  r  r(  þ  s    zASTConcept.get_idr%   rR  c                 C  s"   || j ƒ}| jr||| jƒ7 }|S r	  rà  rT  r  r  r  rU    s    
zASTConcept._stringifyr   r   r  rj  c                 C  s.   | j  ||||¡ | jr*| j ||||¡ d S r	  )rI  rH  re  r}  r  r  r  rH  
  s    zASTConcept.describe_signature)NNrL  r  r  r  r  rß  õ  s     ÿrß  c                   @  sH   e Zd Zddddddœdd„Zddd	œd
d„Zddddddœdd„ZdS )ÚASTBaseClassrV  r  r?   r  )rZ  Ú
visibilityr„   Úpackrp   c                 C  s   || _ || _|| _|| _d S r	  )rZ  rã  r„   rä  )r  rZ  rã  r„   rä  r  r  r  r    s    zASTBaseClass.__init__r%   rR  c                 C  s^   g }| j d k	r$| | j ¡ | d¡ | jr4| d¡ | || jƒ¡ | jrT| d¡ d |¡S )Nrk  zvirtual rª  rŒ   )rã  rC  r„   rZ  rä  rg  rT  r  r  r  rU    s    



zASTBaseClass._stringifyr   r   r  rj  c                 C  s‚   t |ƒ | jd k	r2|t | j| j¡7 }|t ¡ 7 }| jrT|t dd¡7 }|t ¡ 7 }| jj|d||d | jr~|t 	dd¡7 }d S )Nr„   r2  r?  rª  )
r1   rã  r   rr  rs  r„   rZ  rH  rä  rq  r}  r  r  r  rH  %  s    

ÿzASTBaseClass.describe_signatureNr\  r  r  r  r  râ    s   râ  c                   @  s\   e Zd Zddddddœdd„Zd	d
dd
dœdd„Zdd
dœdd„Zdd
ddddœdd„ZdS )ÚASTClassrV  r?   zlist[ASTBaseClass]r   r  )rZ  rc  Úbasesrd  rp   c                 C  s   || _ || _|| _|| _d S r	  )rZ  rc  ræ  rd  )r  rZ  rc  ræ  rd  r  r  r  r  5  s    zASTClass.__init__r_   r  r  rR  c                 C  s   |  ¡  |¡S r	  )rÏ  r(  rW  r  r  r  r(  <  s    zASTClass.get_idr%   rR  c                 C  sž   g }|  || jƒ¡ t| jƒdkr,|  d¡ |  || jƒ¡ | jrL|  d¡ t| jƒdkr”|  d¡ d}| jD ]$}|s€|  d¡ d}|  ||ƒ¡ qnd |¡S )	Nr   rk  rn  r  Tr  FrŒ   )rC  rd  r  rZ  rc  ræ  rg  )r  rS  rQ  ru  r“   r  r  r  rU  ?  s     




zASTClass._stringifyr   r   rj  c                 C  sè   t |ƒ | j |¡ t| jƒdkr.|t ¡ 7 }| jj||||d | jrd|t ¡ 7 }|t dd¡7 }t| j	ƒdkrä|t ¡ 7 }|t 
dd¡7 }|t ¡ 7 }| j	D ]2}|j||||d |t 
dd¡7 }|t ¡ 7 }q | ¡  | ¡  d S )Nr   r?  rc  r  rÃ   )r1   rd  rH  r  r   rs  rZ  rc  rr  ræ  rq  Úpop)r  r,  r-  r.  r  r“   r  r  r  rH  Q  s$    
zASTClass.describe_signatureNr  r  r  r  r  rå  4  s   rå  c                   @  sX   e Zd Zddddœdd„Zddd	dd
œdd„Zdddœdd„Zdddd	ddœdd„ZdS )ÚASTUnionrV  r   r  )rZ  rd  rp   c                 C  s   || _ || _d S r	  )rZ  rd  )r  rZ  rd  r  r  r  r  h  s    zASTUnion.__init__r_   r  r  rR  c                 C  s   |dkrt ƒ ‚| ¡  |¡S r½  rÞ  rW  r  r  r  r(  l  s    zASTUnion.get_idr%   rR  c                 C  sF   g }|  || jƒ¡ t| jƒdkr,|  d¡ |  || jƒ¡ d |¡S rŒ  )rC  rd  r  rZ  rg  rT  r  r  r  rU  q  s    
zASTUnion._stringifyr   r   rj  c                 C  sF   t |ƒ | j |¡ t| jƒdkr.|t ¡ 7 }| jj||||d d S )Nr   r?  )r1   rd  rH  r  r   rs  rZ  r}  r  r  r  rH  y  s
    zASTUnion.describe_signatureNr  r  r  r  r  rè  g  s   rè  c                   @  s\   e Zd Zddddddœdd„Zd	dd
ddœdd„Zdddœdd„Zdddd
ddœdd„ZdS )ÚASTEnumrV  r  rÒ  r   r  )rZ  ÚscopedÚunderlyingTyperd  rp   c                 C  s   || _ || _|| _|| _d S r	  )rZ  rê  rë  rd  )r  rZ  rê  rë  rd  r  r  r  r  ƒ  s    zASTEnum.__init__r_   r  rR  c                 C  s   |dkrt ƒ ‚| ¡  |¡S r½  rÞ  rW  r  r  r  r(  Š  s    zASTEnum.get_idr%   rR  c                 C  s‚   g }| j r | | j ¡ | d¡ | || jƒ¡ t| jƒdkrH| d¡ | || jƒ¡ | jrx| d¡ | || jƒ¡ d |¡S )Nrk  r   r  rŒ   )rê  rC  rd  r  rZ  rë  rg  rT  r  r  r  rU    s    


zASTEnum._stringifyr   r   rj  c                 C  sˆ   t |ƒ | j |¡ t| jƒdkr.|t ¡ 7 }| jj||||d | jr„|t ¡ 7 }|t dd¡7 }|t ¡ 7 }| jj|d||d d S )Nr   r?  r  r;  )	r1   rd  rH  r  r   rs  rZ  rë  rq  r}  r  r  r  rH    s    
 ÿzASTEnum.describe_signatureNr  r  r  r  r  ré  ‚  s   ré  c                   @  sZ   e Zd Zdddddœdd„Zdd	d
d	dœdd„Zdd	dœdd„Zdd	dd
ddœdd„ZdS )ÚASTEnumeratorrV  zASTInitializer | Noner   r  )rZ  rÓ  rd  rp   c                 C  s   || _ || _|| _d S r	  )rZ  rÓ  rd  )r  rZ  rÓ  rd  r  r  r  r  ®  s    zASTEnumerator.__init__r_   r  r  rR  c                 C  s   |dkrt ƒ ‚| ¡  |¡S r½  rÞ  rW  r  r  r  r(  ´  s    zASTEnumerator.get_idr%   rR  c                 C  s\   g }|  || jƒ¡ t| jƒdkr<|  d¡ |  || jƒ¡ | jrR|  || jƒ¡ d |¡S rŒ  )rC  rZ  r  rd  rÓ  rg  rT  r  r  r  rU  ¹  s    
zASTEnumerator._stringifyr   r   rj  c                 C  s\   t |ƒ | j ||||¡ t| jƒdkr@|t ¡ 7 }| j |¡ | jrX| j |d||¡ d S )Nr   r2  )r1   rZ  rH  r  rd  r   rs  rÓ  r}  r  r  r  rH  Ã  s    z ASTEnumerator.describe_signatureNr  r  r  r  r  rì  ­  s   
rì  c                   @  sd   e Zd Zddœdd„Zdddœdd	„Zd
dddddœdd„Zeddœdd„ƒZeddœdd„ƒZdS )ÚASTTemplateParamr  r  c                 C  s   t t| ƒƒ‚d S r	  rz  r  r  r  r  Úget_identifierÖ  s    zASTTemplateParam.get_identifierr_   r  r"  c                 C  s   t t| ƒƒ‚d S r	  rz  r'  r  r  r  r(  Ù  s    zASTTemplateParam.get_idr   r   r  r  )Ú
parentNoder-  r.  r  rp   c                 C  s   t t| ƒƒ‚d S r	  rz  )r  rï  r-  r.  r  r  r  r  rH  Ü  s    z#ASTTemplateParam.describe_signaturer?   c                 C  s   t t| ƒƒ‚d S r	  rz  r  r  r  r  r”  à  s    zASTTemplateParam.isPackrV  c                 C  s   t t| ƒƒ‚d S r	  rz  r  r  r  r  rZ  ä  s    zASTTemplateParam.nameN)	r  r  r  rî  r(  rH  rx  r”  rZ  r  r  r  r  rí  Õ  s   rí  c                   @  sf   e Zd Zddddddœdd„Zdd	œd
d„Zdddœdd„Zdddœdd„Zddddddœdd„ZdS )Ú ASTTemplateKeyParamPackIdDefaultr  r  r?   rÒ  r  )Úkeyr  ÚparameterPackrP   rp   c                 C  s4   |st ‚|r|d kst ‚|| _|| _|| _|| _d S r	  )r
  rñ  r  rò  rP   )r  rñ  r  rò  rP   r  r  r  r  ê  s    z)ASTTemplateKeyParamPackIdDefault.__init__r  c                 C  s   | j S r	  r   r  r  r  r  rî  ô  s    z/ASTTemplateKeyParamPackIdDefault.get_identifierr_   r"  c                 C  s6   |dkst ‚g }| jr"| d¡ n
| d¡ d |¡S )Nr”  rº  rv  rŒ   )r
  rò  rC  rg  rP  r  r  r  r(  ÷  s    
z'ASTTemplateKeyParamPackIdDefault.get_idr%   rR  c                 C  sx   | j g}| jr(| jr| d¡ | d¡ | jrN| js>| d¡ | || jƒ¡ | jrn| d¡ | || jƒ¡ d |¡S )Nrk  rª  ro  rŒ   )rñ  rò  r  rC  rP   rg  rT  r  r  r  rU    s    



z+ASTTemplateKeyParamPackIdDefault._stringifyr   r   r  rj  c                 C  s®   |t  | j| j¡7 }| jr<| jr,|t  ¡ 7 }|t  dd¡7 }| jrj| jsT|t  ¡ 7 }| j |||dd|¡ | jrª|t  ¡ 7 }|t  dd¡7 }|t  ¡ 7 }| j |d||¡ d S )Nrª  rŒ   r«   r2  )	r   rr  rñ  rò  r  rs  rq  rH  rP   r}  r  r  r  rH    s    z3ASTTemplateKeyParamPackIdDefault.describe_signatureN)r  r  r  r  rî  r(  rU  rH  r  r  r  r  rð  é  s
   

rð  c                   @  sŠ   e Zd Zdddœdd„Zeddœdd	„ƒZed
dœdd„ƒZddœdd„Zd"dddddœdd„Zdddœdd„Z	ddddddœd d!„Z
dS )#ÚASTTemplateParamTyperð  r  rŒ  c                 C  s   |st ‚|| _d S r	  )r
  r  r  r  r  r  r  #  s    zASTTemplateParamType.__init__rV  r  c                 C  s    |   ¡ }tt|d ƒgdgddS ©NF©rY  ©rî  rV  rI  ©r  r×  r  r  r  rZ  '  s    zASTTemplateParamType.namer?   c                 C  s   | j jS r	  ©r  rò  r  r  r  r  r”  ,  s    zASTTemplateParamType.isPackr  c                 C  s
   | j  ¡ S r	  ©r  rî  r  r  r  r  rî  0  s    z#ASTTemplateParamType.get_identifierNr_   rH  rQ  r  rR  c                 C  s2   |dkst ‚|r"|jjj|ddS | j |¡S d S r×  )r
  rV  r  r(  r  rW  r  r  r  r(  3  s    zASTTemplateParamType.get_idr%   rR  c                 C  s
   || j ƒS r	  rŽ  r‚  r  r  r  rU  >  s    zASTTemplateParamType._stringifyr   r   r  rj  c                 C  s   | j  ||||¡ d S r	  )r  rH  r}  r  r  r  rH  A  s    z'ASTTemplateParamType.describe_signature)NN©r  r  r  r  rx  rZ  r”  rî  r(  rU  rH  r  r  r  r  ró  "  s      ÿró  c                   @  sŒ   e Zd Zddddœdd„Zeddœd	d
„ƒZeddœdd„ƒZddœdd„Zd#dddddœdd„Zdddœdd„Z	dddddd œd!d"„Z
dS )$ÚASTTemplateParamTemplateTypeÚASTTemplateParamsrð  r  )ÚnestedParamsr  rp   c                 C  s    |st ‚|st ‚|| _|| _d S r	  )r
  rý  r  )r  rý  r  r  r  r  r  G  s    z%ASTTemplateParamTemplateType.__init__rV  r  c                 C  s    |   ¡ }tt|d ƒgdgddS rô  rö  r÷  r  r  r  rZ  N  s    z!ASTTemplateParamTemplateType.namer?   c                 C  s   | j jS r	  rø  r  r  r  r  r”  S  s    z#ASTTemplateParamTemplateType.isPackr  c                 C  s
   | j  ¡ S r	  rù  r  r  r  r  rî  W  s    z+ASTTemplateParamTemplateType.get_identifierNr_   rH  rQ  r  rR  c                 C  s>   |dkst ‚|r"|jjj|d dS | j |¡| j |¡ S d S )Nr”  rT  )r
  rV  r  r(  rý  r  rW  r  r  r  r(  Z  s    z#ASTTemplateParamTemplateType.get_idr%   rR  c                 C  s   || j ƒ|| jƒ S r	  )rý  r  r‚  r  r  r  rU  e  s    z'ASTTemplateParamTemplateType._stringifyr   r   r  rj  c                 C  s4   | j  |d||¡ |t ¡ 7 }| j ||||¡ d S )Nr;  )rý  rH  r   rs  r  r}  r  r  r  rH  h  s    z/ASTTemplateParamTemplateType.describe_signature)NNrú  r  r  r  r  rû  F  s      ÿrû  c                   @  sŽ   e Zd Zd#ddddœdd„Zedd	œd
d„ƒZedd	œdd„ƒZdd	œdd„Zd$dddddœdd„Zdddœdd„Z	dddddd œd!d"„Z
dS )%ÚASTTemplateParamNonTypeFrN  r?   r  )r<  rò  rp   c                 C  s   |st ‚|| _|| _d S r	  )r
  r<  rò  )r  r<  rò  r  r  r  r  p  s    z ASTTemplateParamNonType.__init__rV  r  c                 C  s    |   ¡ }tt|d ƒgdgddS rô  rö  r÷  r  r  r  rZ  w  s    zASTTemplateParamNonType.namec                 C  s   | j jp| jS r	  )r<  r”  rò  r  r  r  r  r”  |  s    zASTTemplateParamNonType.isPackr  c                 C  sd   | j j}|r\t|jƒdkst‚|jd js.t‚|jd jr>t‚|jd j}t|tƒsXt‚|S d S d S )Nr%  r   )	r<  rZ  r  rW  r
  rL  r0  rw  r  )r  rZ  rQ  r  r  r  rî  €  s    z&ASTTemplateParamNonType.get_identifierNr_   rH  rQ  r  rR  c                 C  sH   |dkst ‚|r"|jjj|d dS d}| jr4|d7 }|| j |¡ S d S )Nr”  rT  r   rº  )r
  rV  r  r(  rò  r<  )r  r#  rS  r  rQ  r  r  r  r(  Œ  s    zASTTemplateParamNonType.get_idr%   rR  c                 C  s   || j ƒ}| jr|d7 }|S rX  )r<  rò  rT  r  r  r  rU  š  s    
z"ASTTemplateParamNonType._stringifyr   r   r  rj  c                 C  s,   | j  ||||¡ | jr(|t dd¡7 }d S rX  )r<  rH  rò  r   rq  r}  r  r  r  rH     s    z*ASTTemplateParamNonType.describe_signature)F)NNrú  r  r  r  r  rþ  o  s    þ   ÿrþ  c                   @  sp   e Zd Zddddœdd„Zddd	d
dœdd„Zdd
dœdd„Zdd
ddddœdd„Zdd
ddd	ddœdd„ZdS )rü  zlist[ASTTemplateParam]úASTRequiresClause | Noner  )ÚparamsÚrequiresClauserp   c                 C  s   |d k	st ‚|| _|| _d S r	  )r
  r   r  )r  r   r  r  r  r  r  ¨  s    zASTTemplateParams.__init__Fr_   r?   r  )r#  ÚexcludeRequiresrp   c                 C  s|   |dkst ‚g }| d¡ | jD ]}| | |¡¡ q | d¡ |sr| jrr| d¡ | | jj |¡¡ | d¡ d |¡S )Nr”  r=  re  ÚIQrŒ   )r
  rC  r   r(  r  r²  rg  )r  r#  r  rQ  r<  r  r  r  r(  ®  s    





zASTTemplateParams.get_idr%   rR  c                   sf   g }|  d¡ |  d ‡ fdd„| jD ƒ¡¡ |  d¡ | jd k	r\|  ˆ | jƒ¡ |  d¡ d |¡S )Nz	template<r  c                 3  s   | ]}ˆ |ƒV  qd S r	  r  r<  r  r  r  rc  ¾  s     z/ASTTemplateParams._stringify.<locals>.<genexpr>z> rk  rŒ   )rC  rg  r   r  rT  r  r  r  rU  »  s    
 


zASTTemplateParams._stringifyr   r   r  rj  c                 C  s    |t  dd¡7 }|t  dd¡7 }d}| jD ]8}|sN|t  dd¡7 }|t  ¡ 7 }d}| ||||¡ q*|t  dd¡7 }| jd k	rœ|t  ¡ 7 }| j ||||¡ d S )Nrx   rº   TrÃ   Fr»   )r   rr  rq  r   rs  rH  r  )r  r,  r-  r.  r  ru  r<  r  r  r  rH  Å  s    

z$ASTTemplateParams.describe_signaturer   ©rï  r-  r.  r  ÚlineSpecrp   c                 C  sÚ   dddœdd„}||ƒ}|t  dd¡7 }|t  dd¡7 }d}| jD ]D}	|sf|t  d	d	¡7 }|t  ¡ 7 }d
}|rv||ƒ}|	 ||||¡ qB|r˜|s˜||ƒ}|t  dd¡7 }| jrÖt  ¡ }
d|
_||
7 }| j |
d||¡ d S )Nr   zaddnodes.desc_signature_line)rï  rp   c                 S  s   t  ¡ }| |7 } d|_|S )Nrt  )r   Údesc_signature_lineÚsphinx_line_type)rï  r,  r  r  r  ÚmakeLineØ  s    zDASTTemplateParams.describe_signature_as_introducer.<locals>.makeLinerx   rº   TrÃ   Fr»   r  r2  )	r   rr  rq  r   rs  rH  r  r  r  )r  rï  r-  r.  r  r  r  ZlineNoderu  r<  ZreqNoder  r  r  Ú describe_signature_as_introducerÕ  s*    
z2ASTTemplateParams.describe_signature_as_introducerN)F)r  r  r  r  r(  rU  rH  r	  r  r  r  r  rü  §  s
   
rü  c                   @  sœ   e Zd Zddddœdd„Zeddœd	d
„ƒZeddœdd„ƒZddœdd„Zd$dddddœdd„Zdddœdd„Z	dddœdd„Z
dddd dd!œd"d#„ZdS )%Ú ASTTemplateIntroductionParameterr  r?   r  )r  rò  rp   c                 C  s   || _ || _d S r	  )r  rò  )r  r  rò  r  r  r  r  ÷  s    z)ASTTemplateIntroductionParameter.__init__rV  r  c                 C  s    |   ¡ }tt|d ƒgdgddS rô  rö  r÷  r  r  r  rZ  û  s    z%ASTTemplateIntroductionParameter.namec                 C  s   | j S r	  )rò  r  r  r  r  r”     s    z'ASTTemplateIntroductionParameter.isPackc                 C  s   | j S r	  r   r  r  r  r  rî    s    z/ASTTemplateIntroductionParameter.get_identifierNr_   rH  rQ  r  rR  c                 C  s4   |dkst ‚|r"|jjj|d dS | jr,dS dS d S )Nr”  rT  rº  rv  )r
  rV  r  r(  rò  rW  r  r  r  r(    s    z'ASTTemplateIntroductionParameter.get_idr"  c                 C  s.   |dkst ‚| j |¡}| jr&d| S |S d S )Nr”  rÃ  )r
  r  r(  rò  rP  r  r  r  Úget_id_as_arg  s
    z.ASTTemplateIntroductionParameter.get_id_as_argr%   rR  c                 C  s.   g }| j r| d¡ | || jƒ¡ d |¡S ©Nrª  rŒ   )rò  rC  r  rg  rT  r  r  r  rU    s
    
z+ASTTemplateIntroductionParameter._stringifyr   r   r  rj  c                 C  s0   | j r|t dd¡7 }| j |||dd|¡ d S r  )rò  r   rq  r  rH  r}  r  r  r  rH  %  s    z3ASTTemplateIntroductionParameter.describe_signature)NN)r  r  r  r  rx  rZ  r”  rî  r(  r  rU  rH  r  r  r  r  r
  ö  s      ÿ	r
  c                   @  sV   e Zd Zddddœdd„Zddd	œd
d„Zdddœdd„Zdddddddœdd„ZdS )ÚASTTemplateIntroductionrV  z&list[ASTTemplateIntroductionParameter]r  )rH   r   rp   c                 C  s    t |ƒdkst‚|| _|| _d S r  )r  r
  rH   r   )r  rH   r   r  r  r  r  -  s    z ASTTemplateIntroduction.__init__r_   r  r"  c                 C  s    |dkst ‚g }| d¡ | jD ]}| | |¡¡ q | d¡ | d¡ | | j |¡¡ | d¡ | jD ]}| | |¡¡ ql| d¡ | d¡ d |¡S )Nr”  r=  re  r9  rŒ   )r
  rC  r   r(  rH   r  rg  )r  r#  rQ  r<  r  r  r  r(  3  s    







zASTTemplateIntroduction.get_idr%   rR  c                   sR   g }|  ˆ | jƒ¡ |  d¡ |  d ‡ fdd„| jD ƒ¡¡ |  d¡ d |¡S )Nr  r  c                 3  s   | ]}ˆ |ƒV  qd S r	  r  )ra  r<  r  r  r  rc  I  s     z5ASTTemplateIntroduction._stringify.<locals>.<genexpr>ú} rŒ   )rC  rH   rg  r   rT  r  r  r  rU  E  s    
 
z"ASTTemplateIntroduction._stringifyr   r   r  r?   r  c           	      C  s   t  ¡ }||7 }d|_| j |d||¡ |t  dd¡7 }d}| jD ]8}|sf|t  dd¡7 }|t  ¡ 7 }d}| ||||¡ qB|t  dd¡7 }d S )NZtemplateIntroductionr2  r  TrÃ   Fr  )r   r  r  rH   rH  rq  r   rs  )	r  rï  r-  r.  r  r  r,  ru  r<  r  r  r  r	  M  s    
z8ASTTemplateIntroduction.describe_signature_as_introducerN)r  r  r  r  r(  rU  r	  r  r  r  r  r  ,  s   r  c                   @  sb   e Zd Zdddœdd„Zddœdd	„Zd
ddœdd„Zdddœdd„Zdddddddœdd„ZdS )ÚASTTemplateDeclarationPrefixz1list[ASTTemplateParams | ASTTemplateIntroduction]r  )rX  rp   c                 C  s
   || _ d S r	  )rX  )r  rX  r  r  r  r  c  s    z%ASTTemplateDeclarationPrefix.__init__rÿ  r  c                 C  s,   | j d krd S | j d }t|tƒs&d S |jS )Nrm  )rX  rw  rü  r  )r  ZlastListr  r  r  Úget_requires_clause_in_lasth  s    


z8ASTTemplateDeclarationPrefix.get_requires_clause_in_lastr_   r  r"  c                 C  sp   |dkst ‚g }t| jƒd }t| jƒD ]<\}}t|tƒrT| |j|||kd¡ q(| | |¡¡ q(d |¡S )Nr”  r%  )r  rŒ   )	r
  r  rX  Ú	enumeraterw  rü  rC  r(  rg  )r  r#  rQ  Z	lastIndexr   rÌ   r  r  r  Ú%get_id_except_requires_clause_in_lastp  s    
zBASTTemplateDeclarationPrefix.get_id_except_requires_clause_in_lastr%   rR  c                 C  s(   g }| j D ]}| ||ƒ¡ q
d |¡S rÕ  )rX  rC  rg  )r  rS  rQ  rÌ   r  r  r  rU  |  s    
z'ASTTemplateDeclarationPrefix._stringifyr   r   r  r?   )r,  r-  r.  r  r  rp   c                 C  s*   t |ƒ | jD ]}| |d|||¡ qd S ©Nr:  )r1   rX  r	  )r  r,  r-  r.  r  r  rÌ   r  r  r  rH  ‚  s    
z/ASTTemplateDeclarationPrefix.describe_signatureN)r  r  r  r  r  r  rU  rH  r  r  r  r  r  b  s
   r  c                   @  sB   e Zd Zdddœdd„Zdddœd	d
„Zddddddœdd„ZdS )ÚASTRequiresClausery  r  rz  c                 C  s
   || _ d S r	  r±  r³  r  r  r  r  Š  s    zASTRequiresClause.__init__r%   r  rR  c                 C  s   d|| j ƒ S )Nz	requires r±  r‚  r  r  r  rU    s    zASTRequiresClause._stringifyznodes.TextElementr   r  rj  c                 C  s2   |t  dd¡7 }|t  ¡ 7 }| j ||||¡ d S )Nro   rï  r}  r  r  r  rH    s    z$ASTRequiresClause.describe_signatureNr\  r  r  r  r  r  ‰  s   r  c                
   @  s¤   e Zd Zd'dddddddd	d
œdd„Zd dœdd„Zeddœdd„ƒZeddœdd„ƒZd(ddddœdd„Zddœdd„Z	dddœdd „Z
d!dd"d#d	d$œd%d&„ZdS ))r  NFr  rH  ú#ASTTemplateDeclarationPrefix | Noner   rÿ  r?   r  )rS  ÚdirectiveTyperã  ro  r  ÚtrailingRequiresClauseÚ	semicolonrp   c                 C  s:   || _ || _|| _|| _|| _|| _|| _d | _d | _d S r	  )	rS  r  rã  ro  r  r  r  r  ÚenumeratorScopedSymbol)r  rS  r  rã  ro  r  r  r  r  r  r  r  ›  s    zASTDeclaration.__init__r  c                 C  sJ   | j r| j  ¡ nd }| jr$| j ¡ nd }t| j| j| j|| j ¡ || jƒS r	  )	ro  Úcloner  r  rS  r  rã  r  r  )r  ZtemplatePrefixCloneZtrailingRequiresClasueCloner  r  r  r  ­  s    ÿÿ ýzASTDeclaration.clonerV  c                 C  s   | j jS r	  )r  rZ  r  r  r  r  rZ  ¶  s    zASTDeclaration.namer^  c                 C  s   | j dkrd S | jjS )NrÎ  )rS  r  rg  r  r  r  r  rg  º  s    
zASTDeclaration.function_paramsTr_   )r#  rU  rp   c                 C  sD  |dkrL| j s| jrtƒ ‚| jdkr8| jr8| jj |¡S | j || j| j¡S | jdkrl| jrl| jj ||¡S |r|t| g}ng }| j d k	r¨| 	| j  
|¡¡ | j  ¡ }nd }|s¸| jr |dk rÆtƒ ‚| 	d¡ |rä| jrä| 	d¡ |rú| 	|j |¡¡ | jr| 	| jj |¡¡ | 	d¡ | 	| j || j| j¡¡ d |¡S )Nr%  Ú
enumeratorr‹   r  rï   re  rŒ   )ro  r  r$   rS  r  r  r(  r  Ú
_id_prefixrC  r  r  r²  rg  )r  r#  rU  rQ  ZrequiresClauseInLastr  r  r  r(  À  s8    




zASTDeclaration.get_idc                 C  s   |   td¡S r#  )r(  Ú_max_idr  r  r  r  Úget_newest_idí  s    zASTDeclaration.get_newest_idr%   rR  c                 C  sŠ   g }| j r*| j dkr*| | j ¡ | d¡ | jr@| || jƒ¡ | || jƒ¡ | jrp| d¡ | || jƒ¡ | jr€| d¡ d |¡S )Nrl   rk  ú;rŒ   )rã  rC  ro  r  r  r  rg  rT  r  r  r  rU  ð  s    


zASTDeclaration._stringifyr   r   Údict)r,  r-  r.  Úoptionsrp   c           	      C  sš  t |ƒ | jst‚d|d< t ¡ }d|_| jj |d< | jrZ| jj|||| j| 	d¡d ||7 }| j
r’| j
dkr’|t | j
| j
¡7 }|t ¡ 7 }| jdkrÆ| j ¡ }|t ||¡7 }|t ¡ 7 }nh| jd	krð|t d	d	¡7 }|t ¡ 7 }n>| jd
krþn0| jdkr<| jdkst‚|t | j| j¡7 }|t ¡ 7 }nò| jdkrf|t dd¡7 }|t ¡ 7 }nÈ| jdkrú|t dd¡7 }|t ¡ 7 }| jdkr¸|t dd¡7 }|t ¡ 7 }n@| jdkrâ|t dd¡7 }|t ¡ 7 }n| jdks.t| jƒ‚n4| jdkr$|t dd¡7 }|t ¡ 7 }n
t| jƒ‚| j |||| j¡ |}| jr~t ¡ }d|_| |¡ |}| j |d|| j¡ | jr–|t dd¡7 }d S )NTZis_multilineZ
declaratorZadd_permalinkútparam-line-spec)r  r  rl   r—  rH   >   rÛ  rÎ  rF   ©rF   rv   r   rV   ú
enum-classúenum-structrv   r  r  r2  r  )r1   r  r
  r   r  r  ÚisRedeclarationro  rH  rx  rã  rr  rs  rS  r  rÐ  r  r  rC  r  rq  )	r  r,  r-  r.  r!  ZmainDeclNoder/  ZlastDeclNodeZtrailingReqNoder  r  r  rH  ÿ  sx    
þ





   ÿz!ASTDeclaration.describe_signature)NNNNNF)T)r  r  r  r  r  rx  rZ  rg  r(  r  rU  rH  r  r  r  r  r  š  s          û	-r  c                   @  s.   e Zd Zddddœdd„Zddd	œd
d„ZdS )ÚASTNamespacerV  r  r  ©rI  ro  rp   c                 C  s   || _ || _d S r	  )rI  ro  )r  rI  ro  r  r  r  r  A  s    zASTNamespace.__init__r%   r  rR  c                 C  s4   g }| j r| || j ƒ¡ | || jƒ¡ d |¡S rÕ  )ro  rC  rI  rg  rT  r  r  r  rU  F  s
    zASTNamespace._stringifyN)r  r  r  r  rU  r  r  r  r  r'  @  s   r'  c                   @  s$   e Zd Zdddddddœdd	„Zd
S )ÚSymbolLookupResultúIterator[Symbol]r  rJ  r   rK  r  )ÚsymbolsÚparentSymbolrL  rt  r0  rp   c                 C  s"   || _ || _|| _|| _|| _d S r	  )r+  r,  rL  rt  r0  )r  r+  r,  rL  rt  r0  r  r  r  r  O  s
    zSymbolLookupResult.__init__N©r  r  r  r  r  r  r  r  r)  N  s   r)  c                   @  s   e Zd Zdddœdd„ZdS )Ú	LookupKeyzSlist[tuple[ASTNestedNameElement, ASTTemplateParams | ASTTemplateIntroduction, str]]r  rŒ  c                 C  s
   || _ d S r	  rŽ  r  r  r  r  r  Z  s    zLookupKey.__init__Nr-  r  r  r  r  r.  Y  s   r.  z+ASTTemplateParams | ASTTemplateIntroduction)rt  r0  rp   c           	      C  s¤   t | jƒt |jƒkrdS t | jƒdkr*dS tt | jƒƒD ]f}| j| }|j| }t|jƒ}t|ƒ}| d¡}|j|kr| dS |rŒ|d d… n|}||kr8 dS q8dS )NTr   rª  éýÿÿÿF)r  r   r:  ri  r  rZ  Úendswithr”  )	rt  r0  r   r<  rO  Z	paramNameZargTxtZisArgPackExpansionZargNamer  r  r  Ú_is_specialization`  s     




r1  c                      s*  e Zd ZdZdZdZdZdd„ Zdd„ Ze	dd	d
œdd„ƒZ
d	dœdd„Zddd	dœ‡ fdd„Zdddddddd	dœdd„Zdddd	dœd d!„Zd	dœd"d#„Zd	dœd$d%„Zdd	d&œd'd(„Zd)dœd*d+„Zed,dœd-d.„ƒZd/dœd0d1„Zd2dœd3d4„Zd5dd6d7d7d7d7d d8œd9d:„Zd5dd6d7d7d7d7d7d;d<œ	d=d>„Zd2d?d@d7dd7d7d7d7d7dAdBœdCdD„Zd2d?dddd dEœdFdG„Zd dHdId	dJœdKdL„Zdfd2dNd dOœdPdQ„Zdddd dœdRdS„Zd5d7d7d7d dTœdUdV„Zd/d dWœdXdY„Zd2d?dd7d7d7d7dZd[œd\d]„Z ddd7d7d7d d^œd_d`„Z!dddaœdbdc„Z"dddaœddde„Z#‡  Z$S )gr  r   z  Fc                 C  s
   t ƒ ‚d S r	  )r
  r  r  r  r  Ú__copy__  s    zSymbol.__copy__c                 C  s    | j rtƒ ‚td d d d d d d ƒS r	  )rV  r
  r  )r  Úmemor  r  r  Ú__deepcopy__‚  s    zSymbol.__deepcopy__r   r  )r:  rp   c                  G  s    t tjtj dd t | Ž  d S )NrŒ   ©Úend)Úprintr  Údebug_indent_stringÚdebug_indentrf  r  r  r  Údebug_printˆ  s    zSymbol.debug_printr  c                 C  sN   | j s:| jrt‚| jrt‚| jr$t‚| jr.t‚| jrJt‚n| jrJ| jsJt‚d S r	  )rV  rL  r
  rt  r0  r  Údocnamer  r  r  r  Ú_assert_invariants  s    



zSymbol._assert_invariantsr  )rñ  r‡  rp   c                   s   |dkrt ƒ ‚tƒ  ||¡S )NÚchildren)r
  ÚsuperÚ__setattr__)r  rñ  r‡  ©Ú	__class__r  r  r?  ™  s    zSymbol.__setattr__rQ  z"ASTIdentifier | ASTOperator | Nonez2ASTTemplateParams | ASTTemplateIntroduction | NonezASTDeclaration | NonerH  z
int | None)rV  rL  rt  r0  r  r;  Úlinerp   c                 C  s”   || _ d | _d | _|| _|d k	r.t||ƒs.d }|| _|| _|| _|| _|| _	d| _
|  ¡  g | _g | _| j rz| j j | ¡ | jrˆ| | j_|  ¡  d S rN  )rV  ÚsiblingAboveÚsiblingBelowrL  r1  rt  r0  r  r;  rB  r&  r<  Ú	_childrenZ_anonChildrenrC  r  Ú!_add_template_and_function_params)r  rV  rL  rt  r0  r  r;  rB  r  r  r  r  ž  s,    ÿzSymbol.__init__r  r_   )r  r;  rB  rp   c                 C  s„   |   ¡  | jd kst‚| jd ks$t‚| jd ks2t‚|d k	s>t‚|d k	sJt‚|d k	sVt‚|| _| | j_|| _|| _|   ¡  |  ¡  d S r	  )r<  r  r
  r;  rB  r  rF  )r  r  r;  rB  r  r  r  Ú_fill_emptyÆ  s    zSymbol._fill_emptyc                 C  s(  t jrt  jd7  _t  d¡ | jrŠ| jjD ]\}| ¡ s:q,| jrNtd|d}nd }t	| ¡ d ƒ}t
|gdgdd}|  |g || j| j¡ q,| jd k	r| jjd k	r| jjD ]`}|jd kr¼q¬|jj}|d krÎq¬td|d}|jrät‚t|jƒdksöt‚|  |g || j| j¡ q¬t jr$t  jd8  _d S )Nr%  z"_add_template_and_function_params:ÚtemplateParam)rS  r  Frõ  ÚfunctionParam)r  Údebug_lookupr9  r:  rt  r   rî  r  r  rI  rV  Ú_add_symbolsr;  rB  rg  rO  rZ  rY  r
  r  rW  )r  ÚtprÌ  rw  ÚnnÚfpr  r  r  rF  Ö  s4    


z(Symbol._add_template_and_function_paramsc                 C  s6   | j d krd S | | j jkst‚| j j | ¡ d | _ d S r	  )rV  rE  r
  Úremover  r  r  r  rO  ú  s
    
zSymbol.remove©r;  rp   c                 C  s„   g }| j D ]n}| |¡ |jrn|j|krnd |_d |_d |_|jd k	rN|j|j_|jd k	rb|j|j_d |_d |_| |¡ q
|| _ d S r	  )rE  Ú	clear_docr  r;  rB  rC  rD  rC  )r  r;  ZnewChildrenÚsChildr  r  r  rQ    s    





zSymbol.clear_doczIterator[Any]c                 c  s$   | V  | j D ]}| ¡ E d H  qd S r	  )rE  Úget_all_symbols)r  rR  r  r  r  rS    s    
zSymbol.get_all_symbolsúGenerator[Symbol, None, None]c                 c  s.   | j D ]"}|V  |j ¡ sq|jE d H  qd S r	  )rE  rL  r!  Úchildren_recurse_anon)r  r   r  r  r  rU    s
    

zSymbol.children_recurse_anonr.  c                 C  s‚   g }| }|j r | |¡ |j }q| ¡  g }|D ]H}t|j|jƒ}|jd k	rf| ||j|j ¡ f¡ q0| ||jd f¡ q0t	|ƒS r	  )
rV  rC  ÚreverserI  rL  r0  r  rt  r  r.  )r  r+  rË   rñ  rw  r  r  r  rA     s    

zSymbol.get_lookup_keyrV  c                 C  sf   g }| }|j r | |¡ |j }q| ¡  g }g }|D ]"}| t|j|jƒ¡ | d¡ q4t||ddS rô  )rV  rC  rV  rI  rL  r0  rV  )r  r+  rË   rW  rX  r  r  r  rÏ  4  s    
zSymbol.get_full_nested_namerJ  rK  r?   )rL  rt  r0  ÚtemplateShorthandÚ	matchSelfÚrecurseInAnonÚcorrectPrimaryTemplateArgsrp   c           	   
   C  sP   t jrt  d¡ | j|||||||dd}z
t|ƒW S  tk
rJ   Y d S X d S )Nz_find_first_named_symbol ->F)ÚsearchInSiblings)r  rJ  r:  Ú_find_named_symbolsr¨  ÚStopIteration)	r  rL  rt  r0  rW  rX  rY  rZ  rQ  r  r  r  Ú_find_first_named_symbolB  s    

  ý
zSymbol._find_first_named_symbolr*  )	rL  rt  r0  rW  rX  rY  rZ  r[  rp   c	                 #  s¦  t jr®t  jd7  _t  d¡ t  jd7  _t  d¡ tˆ t jd ¡dd t  dˆ ¡ t  dˆ¡ t  dˆ¡ t  d	ˆ¡ t  d
ˆ¡ t  dˆ¡ t  d|¡ t  d|¡ |rÐˆd k	rÐˆd k	rÐtˆˆƒsÐd ‰dddœ‡ ‡‡‡fdd„}	ddœ‡‡‡fdd„}
|
ƒ D ]„}t jr4t  d¡ t| t jd ¡dd |	|ƒrt jrlt  jd7  _t  d¡ t  jd8  _|V  t jrt  jd7  _qt jr¢t  jd8  _d S )Nr%  z_find_named_symbols:úself:rŒ   r5  zidentOrOp:                  ztemplateParams:             ztemplateArgs:               ztemplateShorthand:          zmatchSelf:                  zrecurseInAnon:              zcorrectPrimaryTemplateAargs:zsearchInSiblings:           r  r?   )rË   rp   c                   s„   | j ˆ krdS | jd kˆd kkr4ˆd k	r,dS ˆs4dS ˆrNt| jƒtˆƒkrNdS | jd kˆd kkrddS | jr€t| jƒtˆƒkr€dS dS )NFT)rL  rt  r  r0  ©rË   )rL  r0  rt  rW  r  r  Úmatchesn  s     
z+Symbol._find_named_symbols.<locals>.matchesrT  r  c                  3  s”   ˆ} t jr,t  d¡ t|  t jd ¡dd ˆ r6| V  ˆrH| jE d H  n| jE d H  | jd kr`q| j} t jr,t  d¡ t|  t jd ¡dd q,d S )Nzsearching in self:r%  rŒ   r5  zsearching in sibling:)	r  rJ  r:  r7  Ú	to_stringr9  rU  rE  rC  r`  )rX  rY  r  r  r  Ú
candidates„  s    


z.Symbol._find_named_symbols.<locals>.candidatesú
candidate:ra  r$  r”  )r  rJ  r9  r:  r7  rb  r1  )r  rL  rt  r0  rW  rX  rY  rZ  r[  ra  rc  rË   r  )rL  rX  rY  r  r0  rt  rW  r  r\  R  sD    






zSymbol._find_named_symbolsz	list[Any]zTCallable[[Symbol, ASTIdentifier | ASTOperator, Any, ASTTemplateArgs], Symbol | None]r)  )rI  ÚtemplateDeclsÚonMissingQualifiedSymbolÚstrictTemplateParamArgListsÚancestorLookupTyperW  rX  rY  rZ  r[  rp   c              
   C  sŒ  t jrÊt  jd7  _t  d¡ t  jd7  _t  d¡ t|  t jd ¡dd t  d|¡ t  dd d	d
„ |D ƒ¡¡ t  d|¡ t  d|¡ t  d|¡ t  d|¡ t  d|¡ t  d|	¡ t  d|
¡ |rø| ¡ t|ƒksö| ¡ d t|ƒksöt	‚nt|ƒ| ¡ d kst	‚|j
}| }|jr6|jr6|j}q$|d k	r¶|d }| ¡ s¶|jr¶|j|j|||
dr¬t|ƒdkr¶|dkr¶|r¶|jr¶|jj|jkr¶nq¶|j}qRt jràt  d¡ t| t jd ¡dd d}|d d… D ]Ð}|j}|j}|r6|r0|t|ƒk st	‚|| }|d7 }nd }n*|r\|t|ƒk r\|| }|d7 }nd }|j|||||||	d}|d kr¶|||||ƒ}|d kr¶t jr°t  jd8  _ d S d}|}qðt jrìt  d¡ t| t jd ¡dd |d }|j}|j}|t|ƒk r.|d t|ƒks$t	‚|| }n|t|ƒks@t	‚d }|j||||||d|
d}t jr|t|ƒ}t  jd8  _t|||||ƒS )Nr%  z_symbol_lookup:r_  rŒ   r5  znestedName:        ztemplateDecls:     rÃ   c                 s  s   | ]}t |ƒV  qd S r	  r6  ©ra  rÌ   r  r  r  rc  »  s     z(Symbol._symbol_lookup.<locals>.<genexpr>zstrictTemplateParamArgLists:zancestorLookupType:ztemplateShorthand: zmatchSelf:         zrecurseInAnon:     zcorrectPrimaryTemplateArgs: zsearchInSiblings:  r   ©rX  rY  r[  rF   zstarting point:rm  ©rW  rX  rY  rZ  r”  Fzhandle last name from:)rW  rX  rY  rZ  r[  )r  rJ  r9  r:  r7  rb  rg  r]  r  r
  rW  rY  rV  rO  Úfind_identifierrL  r0  r^  r\  Úlistr)  )r  rI  re  rf  rg  rh  rW  rX  rY  rZ  r[  rW  r,  Z	firstNameZiTemplateDeclrZ  rL  r0  rt  r  r+  r  r  r  Ú_symbol_lookup§  sØ    

ÿ


ýÿþ



 ú
 ÿ


    ü  ÿzSymbol._symbol_lookup)rI  re  r  r;  rB  rp   c                   s  t jrvt  jd7  _t  d¡ t  jd7  _t  dd dd„ |D ƒ¡¡ t  d|¡ t  dˆ ¡ t  d	ˆ› d
ˆ› ¡ ddddddœdd„}| j|||dd dddddd
‰ˆd k	s¶t‚tˆjƒ}t	|ƒdkr€t jrHt  d¡ t  jd7  _t  dˆj
¡ t  dˆj¡ t  dˆj¡ t  dˆ ¡ t  dˆ› d
ˆ› ¡ t  jd8  _t ˆjˆjˆj
ˆjˆ ˆˆd}t jr|t  jd8  _|S t jr¾t  d¡ t  jd7  _t  d t	|ƒ¡ t  jd8  _ˆ sìt jrät  d!¡ t  jd8  _|d S g }	g }
g }|D ]<}|jd kr|	 |¡ n|jr,| |¡ n
|
 |¡ qüt jrrt  d"t	|	ƒ¡ t  d#t	|
ƒ¡ t  d$t	|ƒ¡ dd%œ‡ ‡‡‡fd&d'„}t	|
ƒdkržd }nº|ƒ }ddd(d)œ‡ fd*d+„}ˆ jd,kræt	|
ƒdksØt‚||
d |ƒ ˆ  ¡ }t jrt  d-|¡ |
D ]P}|jjd,kr"|||ƒ |j ¡ }t jr@t  d.|¡ ||kr|||ƒ qt	|	ƒdkr¼t jr¦t  d/¡ |d k	rŽt  d0¡ n
t  d1¡ t  jd8  _|d k	r´|S |ƒ S nRt jrât  d2|d k	¡ t  jd8  _|d k	rô| ¡  |	d }| ˆ ˆˆ¡ |S d S )3Nr%  z_add_symbols:ztdecls:rÃ   c                 s  s   | ]}t |ƒV  qd S r	  r6  ri  r  r  r  rc  7  s     z&Symbol._add_symbols.<locals>.<genexpr>z
nn:       z
decl:     z
location: r  r  rJ  r   rK  rQ  ©r,  rL  rt  r0  rp   c              	   S  st   t jr^t  jd7  _t  d¡ t  jd7  _t  d|¡ t  d|¡ t  d|¡ t  jd8  _t | |||d d d dS )Nr%  z'_add_symbols, onMissingQualifiedSymbol:útemplateParams:úidentOrOp:     ztemplateARgs:  r”  ©rV  rL  rt  r0  r  r;  rB  )r  rJ  r9  r:  ©r,  rL  rt  r0  r  r  r  rf  <  s    
  ýz5Symbol._add_symbols.<locals>.onMissingQualifiedSymbolTF©rg  rh  rW  rX  rY  rZ  r[  r   z _add_symbols, result, no symbol:rp  rq  ztemplateArgs:  zdeclaration:   zlocation:      rr  r”  z_add_symbols, result, symbols:znumber symbols:zno declarationz
#noDecl:  z
#withDecl:z
#dupDecl: r  c               	     sB   t jrt  d¡ t ˆjˆjˆjˆjˆ ˆˆd} t jr>t  d¡ | S )Nz begin: creating candidate symbolrr  z end:   creating candidate symbol)r  rJ  r:  r,  rL  rt  r0  r?  ©r  r;  rB  ÚlookupResultr  r  ÚmakeCandSymbol  s    
 û
z+Symbol._add_symbols.<locals>.makeCandSymbolr  )r  Ú
candSymbolrp   c                   sN   t jr:t  jd7  _t  d¡ t  jd8  _t  jd8  _d|_t| ˆ ƒ‚d S )Nr%  Zredeclarationr”  T)r  rJ  r9  r:  r&  r  )r  rx  ©r  r  r  ÚhandleDuplicateDeclaration¡  s    
z7Symbol._add_symbols.<locals>.handleDuplicateDeclarationrÎ  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  rJ  r9  r:  rg  rn  r
  rm  r+  r  rt  rL  r0  r,  r  rC  r&  rS  r  rO  rG  )r  rI  re  r  r;  rB  rf  r+  r  ZnoDeclZwithDeclZdupDeclrË   rw  rx  rz  ÚcandIdZoldIdr  ru  r  rK  .  sÒ    
ø	

 û

	






þ
zSymbol._add_symbolsr  r   )r€  Údocnamesr.  rp   c                 C  s.  t jrt  jd7  _t  d¡ |d k	s*t‚dd„ }t jrFt  jd7  _|jD ]Ä}t jrzt  d| t j¡¡ t  jd7  _|jrª|| |ƒ t jrLt  d¡ t  jd8  _qL| j|j	|j
|jdddddd}t|ƒ}t jrèt  d	t|ƒ¡ d
d„ |D ƒ}t jrt  dt|ƒ¡ t|ƒdkr<|| |ƒ t jrLt  jd8  _qLd }	|jd krht jr^t  d¡ |d }	n‚|j ¡ }
t jr†t  d|
¡ |D ]^}|jd kr´t jr¬t  d¡ |}	qŠ|j ¡ }t jrÒt  d|¡ ||
krŠ|}	 qêqŠt jr t  jd8  _|	d kr|| |ƒ qL|jr|j|kr|	jsH|	 |j|j|j¡ n¼|	j|jkr˜t|	jƒ}tdƒ}||	j|	j|	jj|f }tj||j|jfd nl|jj|	jjkrÌ|jjdkrÌ|	jj|jjkrÌn8d}|d|	 d¡ 7 }|d| d¡ 7 }tj||jd |	 |||¡ qLt jr*t  jd8  _d S )Nr%  zmerge_with:c                 S  s   | j  |¡ | |_| ¡  d S r	  )rE  rC  rV  r<  )r  Ú
otherChildr  r  r  ÚunconditionalAddí  s    z+Symbol.merge_with.<locals>.unconditionalAddzotherChild:
r&  F)rL  rt  r0  rW  rX  rY  rZ  r[  zraw candidate symbols:c                 S  s   g | ]}|j s|‘qS r  )r&  ©ra  rË   r  r  r  rÅ  
  s      z%Symbol.merge_with.<locals>.<listcomp>z non-duplicate candidate symbols:r   zno declaration in other childz
queryId:  zempty candidaterd  úRDuplicate C++ declaration, also defined at %s:%s.
Declaration is '.. cpp:%s:: %s'.©Úlocation©rH  rI  z1Internal C++ domain error during symbol merging.
z
ourChild:
z
otherChild:
r”  )r  rJ  r9  r:  r
  rE  rb  r&  r\  rL  rt  r0  rm  r  r  r  r;  rG  rB  r  r   r  ÚloggerÚwarningrS  rV  Ú
merge_with)r  r€  r|  r.  r~  r}  ZcandiateIterrc  r+  ZourChildÚqueryIdr  r{  rZ  Úmsgr  r  r  r†  æ  s¼    


  ú









 ÿ

 ÿÿÿþüzSymbol.merge_withNr  r(  c                 C  sZ   t jrt  jd7  _t  d¡ |r*|j}ng }| j||d d d d}t jrVt  jd8  _|S )Nr%  z	add_name:)r  r;  rB  )r  rJ  r9  r:  rX  rK  )r  rI  ro  re  rQ  r  r  r  Úadd_nameQ  s    
  ÿzSymbol.add_namec                 C  s†   t jrt  jd7  _t  d¡ |d k	s*t‚|d k	s6t‚|d k	sBt‚|j}|jrX|jj}ng }|  |||||¡}t jr‚t  jd8  _|S )Nr%  zadd_declaration:)	r  rJ  r9  r:  r
  rZ  ro  rX  rK  )r  r  r;  rB  rI  re  rQ  r  r  r  Úadd_declaration`  s    

zSymbol.add_declaration)rL  rX  rY  r[  rp   c                 C  s(  t jr‚t  jd7  _t  d¡ t  jd7  _t  d|¡ t  d|¡ t  d|¡ t  d|¡ t|  t jd ¡dd t  jd	8  _| }|d k	r$t jrÔt  jd	7  _t  d
¡ t| t jd ¡dd t  jd	8  _|ræ|j|kræ|S |rð|jn|j}|D ]}|j|krú|  S qú|sq$|j	}q†d S )Nr%  zfind_identifier:zidentOrOp:       zmatchSelf:       zrecurseInAnon:   zsearchInSiblings:rŒ   r5  r”  ztrying:)
r  rJ  r9  r:  r7  rb  rL  rU  rE  rC  )r  rL  rX  rY  r[  Úcurrentr=  rË   r  r  r  rl  r  s6    




zSymbol.find_identifier)rñ  rp   c           
   
   C  s:  t jr,t  jd7  _t  d¡ t  jd7  _| }|jD ]è\}}}|d k	r€d }|jD ]&}|jd krbqR|j ¡ |krR|} qzqR|}n$|j}|j	}	|j
|||	ddddd}t jrút  d|¡ t  d|¡ t  d|¡ |d k	rðt| t jd ¡dd	 n
t  d
¡ |d kr6t jrt  jd8  _ d S q6t jr6t  jd8  _|S )Nr%  zdirect_lookup:Frk  zname:          rp  zid:            rŒ   r5  z	not foundr”  )r  rJ  r9  r:  r  rE  r  r  rL  r0  r^  r7  rb  )
r  rñ  rË   rZ  rt  r   rQ  ÚcandrL  r0  r  r  r  Údirect_lookup‘  sN    


 û
zSymbol.direct_lookupztuple[list[Symbol], str])rI  re  rÚ  rW  rX  rY  r[  rp   c                   sÒ  t jr¢t  jd7  _t  d¡ t  jd7  _t  d¡ t|  t jd ¡dd t  d|¡ t  d|¡ t  d|¡ t  d	|¡ t  d
|¡ t  d|¡ t  d|¡ G dd„ dtƒ‰ ddddddœ‡ fdd„}z"| j|||d||||d|d
}	W n ˆ k
r   Y dS X |	d kr,t jr(t  jd8  _dS t|	j	ƒ}
t
|
ƒdkrbt jrZt  jd8  _|
d fS |	jjd k	r„|	jjjdkr„dS |	jj|	jd d |||dd}t jr¶t  jd8  _|d k	rÊ|gd fS dS d S )Nr%  z
find_name:r_  rŒ   r5  znestedName:       ztemplateDecls:    ztyp:              ztemplateShorthand:zmatchSelf:        zrecurseInAnon:    zsearchInSiblings: c                   @  s   e Zd ZdS )z8Symbol.find_name.<locals>.QualifiedSymbolIsTemplateParamNr  r  r  r  r  ÚQualifiedSymbolIsTemplateParamÎ  s   rŽ  r  rJ  r   rK  rQ  ro  c                   s    | j d k	r| j jdkrˆ ƒ ‚d S )NrH  )r  rS  rs  ©rŽ  r  r  rf  Ñ  s    
z2Symbol.find_name.<locals>.onMissingQualifiedSymbolFrt  )NÚtemplateParamInQualifiedr”  ©NNr   rH  rk  )r  rJ  r9  r:  r7  rb  rD  rn  rm  r+  r  r,  r  rS  r^  rL  )r  rI  re  rÚ  rW  rX  rY  r[  rf  rv  rQ  r  r  r  r  Ú	find_nameº  sl    

ø
	

    ý

zSymbol.find_name)r  rÚ  rW  rX  rY  rp   c                 C  s  t jrt  jd7  _t  d¡ |j}|jr4|jj}ng }ddddddœd	d
„}| j|||d||||ddd
}	t jr€t  jd8  _|	d krŒd S t|	j	ƒ}
t
|
ƒdkr¦d S t |	j|	j|	j|	j|ddd}| ¡ }|
D ]2}|jd kràqÐ|j ¡ }||krÐ| ¡  |  S qÐ| ¡  d S )Nr%  zfind_declaration:r  rJ  r   rK  rQ  ro  c                 S  s   d S r	  r  rs  r  r  r  rf    s    z9Symbol.find_declaration.<locals>.onMissingQualifiedSymbolFrt  r   ZfakeDocnameForQueryé*   rr  )r  rJ  r9  r:  rZ  ro  rX  rn  rm  r+  r  r,  rL  rt  r0  r  r  rO  )r  r  rÚ  rW  rX  rY  rI  re  rf  rv  r+  ZquerySymbolr‡  r  r{  r  r  r  Úfind_declaration  sV    

ø	
ú


zSymbol.find_declaration)Úindentrp   c                 C  s  t j| g}| js| d¡ n´| jrN| t| jƒ¡ | d¡ | t j| ¡ | jrf| t| jƒ¡ n| t| jƒ¡ | jrŒ| t| jƒ¡ | jrÒ| d¡ | j	r¬| d¡ | d| jj
 d ¡ | t| jƒ¡ | jrø| d¡ | | j¡ | d¡ | d¡ d	 |¡S )
Nr_  Ú
z: z!!duplicate!! r  r  z	(r«  rŒ   )r  r8  rV  rC  rt  r  rL  r  r0  r&  rS  r;  rg  )r  r•  rQ  r  r  r  rb  =  s0    





zSymbol.to_stringc                 C  s6   |   |¡g}| jD ]}| | |d ¡¡ qd |¡S )Nr%  rŒ   )rb  rE  rC  r  rg  )r  r•  rQ  r   r  r  r  r  Y  s    
zSymbol.dump)N)%r  r  r  r9  r8  rJ  Údebug_show_treer2  r4  Ústaticmethodr:  r<  r?  r  rG  rF  rO  rQ  rS  rx  rU  rA  rÏ  r^  r\  rn  rK  r†  r‰  rŠ  rl  r  r’  r”  rb  r  Ú__classcell__r  r  r@  r  r  y  sH   ($U"  9l ÿ)M6r  c                   @  s  e Zd Zeddœdd„ƒZedd„ ƒZedd„ ƒZddœd	d
„Zddœdd„Zddœdd„Z	ddœdd„Z
dddddœdd„Zddœdd„Zddœdd„Zddœdd„Zd dœd!d"„Zd#dœd$d%„Zddœd&d'„Zddœd(d)„Zd*dd+œd,d-„Zdd*d.d/œd0d1„Zd*dd+œd2d3„Zd*dd+œd4d5„Zddœd6d7„Zd¢d9d:d*dd;œd<d=„Zd>dœd?d@„ZdAdœdBdC„Zd£d*dEdFœdGdH„ZdIdœdJdK„ZdLdœdMdN„ZddOdPœdQdR„Zdd*dSdTœdUdV„Zd¤dd*dWdTœdXdY„Z dZdd*d[d\œd]d^„Z!d¥dZdd*d_d\œd`da„Z"d¦dcd*dddeœdfdg„Z#d§dZdcdhdiœdjdk„Z$dZddldiœdmdn„Z%dodœdpdq„Z&drdœdsdt„Z'dudœdvdw„Z(dxdœdydz„Z)d{dœd|d}„Z*d~dœdd€„Z+ddœd‚dƒ„Z,d„dœd…d†„Z-d‡dœdˆd‰„Z.dŠdœd‹dŒ„Z/dddŽœdd„Z0d¨dEd‘d*d*d‘d’œd“d”„Z1ddd•d–œd—d˜„Z2d™dœdšd›„Z3dœdœddž„Z4dŸdœd d¡„Z5dbS )©ÚDefinitionParserr  r  c                 C  s   dS )NúC++r  r  r  r  r  Úlanguagea  s    zDefinitionParser.languagec                 C  s   | j jS r	  )ÚconfigÚcpp_id_attributesr  r  r  r  Úid_attributese  s    zDefinitionParser.id_attributesc                 C  s   | j jS r	  )r  Úcpp_paren_attributesr  r  r  r  Úparen_attributesi  s    z!DefinitionParser.paren_attributesc                 C  sŒ   | j dkrd S | j}|  jd7  _d}| jr8|  d¡ n4| j dkrX|sX|  jd7  _q|n| j dkrhd}nd}|  jd7  _q&| j|| j… S )Nú"r%  Fz$Unexpected end during inside string.ú\T)Úcurrent_charÚposÚeofÚfailÚ
definition)r  ÚstartPosÚescaper  r  r  Ú_parse_stringm  s    

zDefinitionParser._parse_stringr  c              
     sŽ  dddœ‡ fdd„}ˆ   ¡  ˆ  d¡r,tƒ S ˆ  d¡r>tdƒS ˆ  d¡rPtd	ƒS ˆ j}ˆ  t¡rŽˆ  t¡}tˆ j	|ˆ j… ƒ}|r†|S ||ƒS t
tttfD ]D}ˆ  |¡ršˆ  t¡}tˆ j	|ˆ j… ƒ}|rÒ|  S ||ƒ  S qšˆ  ¡ }|d k	 rþ|t|ƒƒS ˆ  t¡rŠˆ j d
¡}ˆ j d¡}	zt||	ƒ}
W nP tk
rb } zˆ  d| ¡ W 5 d }~X Y n  tk
r€   ˆ  d¡ Y nX ||
ƒS d S )Nr  )r   rp   c                   s"   ˆ   t¡s| S tˆ jƒ}t| |ƒS r	  )ÚmatchÚudl_identifier_rer  Úmatched_textrž  rŸ  r  r  r  Ú_udl‰  s    

z-DefinitionParser._parse_literal.<locals>._udlrg   r|   TrY   Fr%  r”  z8Can not handle character literal. Internal error was: %szJCan not handle character literal resulting in multiple decoded characters.)Úskip_wsÚ	skip_wordr€  r…  r¥  r¬  r*   r+   r‹  r¨  r(   r,   r.   r0   r/   r«  r“  r)   Z
last_matchÚgroupr–  ÚUnicodeDecodeErrorr§  r&   )r  r¯  r¥  Z	hasSuffixZfloatLitÚregexZintLitÚstringr/  r  ZcharLitrÔ   r  r  r  Ú_parse_literal€  sN    	




 ÿ


zDefinitionParser._parse_literalry  c                 C  sê  | j dkrd S |  jd7  _|  ¡  |  d¡rp|  t¡sB|  d¡ | j}|  ¡ }|  	d¡sd|  d¡ t
d ||ƒS | j}zR|  ¡  |  ¡ }|  ¡  |  t¡s¤|  d¡ | j}|  ¡  |  d¡sÆ|  d¡ W n  tk
rh } z€|| _z*|  ¡ }|  ¡  |  	d¡s
|  d	¡ W n> tk
rJ } z|  |d
f|dfgd¡|‚W 5 d }~X Y nX t|ƒ W Y ¢S d }~X Y nX |  	d¡r‚t
||d ƒS |  t¡s˜|  d¡ || jkr¸|  d|| jf ¡ |  ¡ }|  ¡  |  	d¡sÞ|  d¡ t
|||ƒS )Nr©  r%  rª  z6Expected fold operator after '...' in fold expression.r«  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.z6Operators are different in binary fold: '%s' and '%s'.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°  )r  r¦  r§  r¥  r¥  ZeFoldrQ  ÚeExprr  r  r  Ú_parse_fold_or_paren_expression¼  sj    








þýý
ÿ
z0DefinitionParser._parse_fold_or_paren_expressionc                 C  sd   |   ¡  |  ¡ }|d k	r|S |   ¡  |  d¡r4tƒ S |  ¡ }|d k	rH|S |  ¡ }|d k	r`t|ƒS d S r£  )r°  r¶  r±  r¢  r¾  Ú_parse_nested_namer·  )r  rQ  rM  r  r  r  Ú_parse_primary_expression÷  s    
z*DefinitionParser._parse_primary_expressionz4tuple[list[ASTExpression | ASTBracedInitList], bool])rZ  ÚopenÚcloserp   c                 C  sÒ   |   ¡  |  |¡sdS |  |¡r(g dfS g }d}|   ¡  |  ¡ }|   ¡  |  d¡rb| t|ƒ¡ n
| |¡ |   ¡  |  |¡r€qÊ|  d¡s¢|  d|› d|› d¡ | j|kr0|dkr0|  jd	7  _d
}qÊq0||fS )Nr‘  Frª  rÃ   z	Error in z, expected ',' or 'z'.r  r%  T)	r°  r·  rº  Ú_parse_initializer_clauserC  rÂ  r§  r¤  r¥  )r  rZ  rÁ  rÂ  rÐ  r  r²  r  r  r  Ú_parse_initializer_list  s.    





z(DefinitionParser._parse_initializer_listrÄ  c                 C  s&   |   ddd¡\}}|d krd S t|ƒS )Nzparenthesized expression-listr©  r«  )rÄ  rÄ  r  r  r  r  Ú_parse_paren_expression_list/  s     ÿz-DefinitionParser._parse_paren_expression_listr  c                 C  s    |   ¡ }|d k	r|S | jddS ©NF©Ú
inTemplate)Ú_parse_braced_init_listÚ_parse_assignment_expression)r  ZbracedInitListr  r  r  rÃ  <  s    z*DefinitionParser._parse_initializer_clauser  c                 C  s(   |   ddd¡\}}|d krd S t||ƒS )Nzbraced-init-listr  r  )rÄ  r  r  r  r  r  rÉ  B  s    z(DefinitionParser._parse_braced_init_listrÍ  c                 C  s   |   ¡ }|d k	r|S |  ¡ S r	  )rÅ  rÉ  )r  Zparenr  r  r  Ú*_parse_expression_list_or_braced_init_listJ  s    z;DefinitionParser._parse_expression_list_or_braced_init_listrÑ  c                   sj  d }d }ˆ   ¡  d }tD ]}ˆ  |¡r|} q0q|d k	ræd}ˆ  d¡sTˆ  d| ¡ ˆ  d¡}ˆ   ¡  ˆ  d¡s~ˆ  d| ¡ ˆ  d¡s–ˆ  d| ¡ d	d
œ‡ fdd„}ˆ  dg|¡}ˆ   ¡  ˆ  d¡sÖˆ  d| ¡ t|||ƒ}nˆ  d¡rd}ˆ  d¡sˆ  d¡ ˆ j	}z0ˆ  d¡}t
|dd}ˆ  d¡s@ˆ  d¡ W nÖ tk
r }	 z¶|ˆ _	zFd	d
œ‡ fdd„}ˆ  dg|¡}t
|dd}ˆ  d¡s ˆ  d¡ W nd tk
r }
 zD|ˆ _	d}|d7 }g }| |	df¡ | |
df¡ ˆ  ||¡|
‚W 5 d }
~
X Y nX W 5 d }	~	X Y nX næˆ j	}zˆ  ¡ }d}W nÎ tk
r  } z®|ˆ _	z>ˆ  dd¡}d}ˆ   ¡  ˆ jdkrˆˆ jdkrˆˆ  d¡ W nd tk
rî } zD|ˆ _	d}|d 7 }g }| |d!f¡ | |df¡ ˆ  ||¡|‚W 5 d }~X Y nX W 5 d }~X Y nX g }ˆ   ¡  |d"kr4ˆ  d#¡r\ˆ  ¡ }ˆ   ¡  ˆ  d$¡sJˆ  d%¡ | t|ƒ¡ qˆ  d&¡rºˆ  d'¡r„ˆ  j	d(8  _	n6ˆ  d)¡r ˆ  j	d*8  _	nˆ  ¡ }| t|ƒ¡ qˆ  d+¡rüˆ  d'¡râˆ  j	d*8  _	nˆ  ¡ }| t|ƒ¡ qˆ  d,¡r| tƒ ¡ qˆ  d-¡r4| tƒ ¡ qˆ  ¡ }|d k	r`| t|ƒ¡ qq`qt||ƒS ).NrÙ  rº   zExpected '<' after '%s'.Fr»   z Expected '>' after type in '%s'.r©  zExpected '(' in '%s'.ry  r  c                     s   ˆ   ¡ S r	  ©r»  r  r  r  r  Úparser|  s    z:DefinitionParser._parse_postfix_expression.<locals>.parserr«  zExpected ')' to end '%s'.r   zExpected '(' after 'typeid'.T)rß  z%Expected ')' to end 'typeid' of type.c                     s   ˆ   ¡ S r	  rÌ  r  r  r  r  rÍ  ‘  s    z+Expected ')' to end 'typeid' of expression.zError in 'typeid(...)'.z Expected type or expression.úIf typeúIf expressionr²  ÚoperatorCastZ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   rÁ  rÂ  z*Expected ']' in end of postfix expression.rÄ  r¥   r”  z..r$  rÅ   rÁ   rÂ   )r°  rÛ  Úskip_word_and_wsrº  r§  Ú_parse_typer·  Ú_parse_expression_fallbackrØ  r¥  rÜ  r#   rC  r¼  rÀ  r¤  r»  r¿  r¿  rÃ  rÆ  rÇ  rÊ  rË  rÌ  rÑ  )r  Z
prefixTyper/  rÙ  r   rÚ  rÍ  r²  r¥  ÚeTyper½  ÚheaderÚerrorsZeOuterZeInnerrÔ  rZ  rÎ  r  r  r  Ú_parse_postfix_expressionR  sÔ    







42


z*DefinitionParser._parse_postfix_expressionc                 C  s¤  |   ¡  tD ]@}|d dkr(|  |¡}n
|  |¡}|r|  ¡ }t||ƒ  S q|  d¡r|  d¡rº|  d¡sx|  d¡ |  	t
¡sŒ|  d¡ t| jƒ}|   ¡  |  d¡s²|  d	¡ t|ƒS |  d¡rô| jd
d}|   ¡  |  d¡sì|  d¡ t|ƒS |  ¡ }t|ƒS |  d¡rX|  d¡s&|  d¡ | jd
d}|   ¡  |  d¡sP|  d¡ t|ƒS |  d¡r¨|  d¡sz|  d¡ |  ¡ }|   ¡  |  d¡s |  d¡ t|ƒS | j}|  d¡}|   ¡  |  d¡sÔ|| _nbd}|  d¡rî|  d¡ |r| jd d}	| jd
dd}
n
|  d¡ |  ¡ }t||t|	|
ƒ|ƒS | j}|  d¡}|   ¡  |  d¡sb|| _n:|  d¡}|rˆ|  d¡sˆ|  d¡ |  ¡ }t|||ƒS |  ¡ S )Nr   rä  rs   rª  r©  z Expecting '(' after 'sizeof...'.z%Expecting identifier for 'sizeof...'.r«  z!Expecting ')' to end 'sizeof...'.F©ÚnamedzExpecting ')' to end 'sizeof'.r8   zExpecting '(' after 'alignof'.zExpecting ')' to end 'alignof'.rd   zExpecting '(' after 'noexcept'.ú Expecting ')' to end 'noexcept'.r_  rc   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.rQ   rÁ  rÂ  z(Expected ']' in array delete-expression.)r°  Ú_expression_unary_opsr±  rº  r¹  râ  rÑ  r·  r§  r¬  r-   r  r®  ræ  rÒ  rç  Ú_parse_unary_expressionrí  rð  r»  rò  r¥  Ú_parse_decl_specsÚ_parse_declaratorrË  rö  rÒ  rù  r×  )r  r¦  rQ  r²  r¡  rÚ  r¥  rY  r÷  rË  rÌ  rÎ  rû  r  r  r  rß  ç  sˆ    





















z(DefinitionParser._parse_unary_expressionc                 C  sæ   | j }|  ¡  |  d¡rÚz2|  d¡}|  d¡s8|  d¡ |  ¡ }t||ƒW S  tk
rÖ } zn|| _ z|  ¡ W  W Y ¢VS  tk
rÄ } z2g }| 	|df¡ | 	|df¡ |  
|d¡|‚W 5 d }~X Y nX W 5 d }~X Y qâX n|  ¡ S d S )Nr©  Fr«  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ß  rC  r¼  )r  r¥  rÚ  r²  ZexCastZexUnaryÚerrsr  r  r  r¹  F  s.    



ÿÿ(z'DefinitionParser._parse_cast_expressionr?   ©rÈ  rp   c                   s&   dddddœ‡ fdd„‰ ˆ | d|d	S )
Nrš  r_   r?   ry  )r  ÚopIdrÈ  rp   c           
   	     s4  ˆ d t tƒkr&dddœ‡fdd„}ndddœ‡‡ ‡fdd„}g }g }| ||d¡ ˆ ¡  |rpˆjd	krpq*ˆj}d
}tˆ  D ]œ}|d dkr ˆ |¡s¬q‚nˆ |¡s¬q‚|dkrÒˆjdkrÒˆ jd8  _ q z.||d}	| |	¡ | |¡ d}W  q W q‚ tk
r   |ˆ_Y q‚X q‚|sVq*qVt	||ƒS )Nr%  r?   ry  rã  c                   s   ˆ   ¡ S r	  )r¹  rÇ  r  r  r  rÍ  m  s    zYDefinitionParser._parse_logical_or_expression.<locals>._parse_bin_op_expr.<locals>.parserc                   s   ˆ ˆˆd | dS )Nr%  rÇ  r  rÇ  )Ú_parse_bin_op_exprrä  r  r  r  rÍ  p  s    rÇ  r»   Fr   r0  r¨   T)
r  Ú_expression_bin_opsrC  r°  r¤  r¥  r±  rº  r#   r  )
r  rä  rÈ  rÍ  rÐ  r  r¥  ÚoneMorer¦  r²  ©rå  )rä  r  r  rå  j  s>    




zIDefinitionParser._parse_logical_or_expression.<locals>._parse_bin_op_exprr   rÇ  r  )r  rÈ  r  rè  r  Ú_parse_logical_or_expression^  s    (z-DefinitionParser._parse_logical_or_expressionzASTConditionalExpr | None)Ú
orExprHeadrÈ  rp   c                 C  sP   |   ¡  |  d¡sd S |  ¡ }|   ¡  |  d¡s:|  d¡ |  |¡}t|||ƒS )Nrù   r  z=Expected ":" after then-expression in conditional expression.)r°  rº  r»  r§  rÊ  r  )r  rê  rÈ  r	  r
  r  r  r  Ú"_parse_conditional_expression_tail”  s    



z3DefinitionParser._parse_conditional_expression_tailc                 C  sn   | j |d}|  ||¡}|d k	r$|S tD ]@}|d dkrF|  |¡sRq(n|  |¡sRq(|  ¡ }t|||ƒ  S |S )NrÇ  r   Zanox)ré  rë  Ú_expression_assignment_opsr±  rº  rÃ  r  )r  rÈ  r¥  ÚcondExprr¦  r§  r  r  r  rÊ  £  s    

z-DefinitionParser._parse_assignment_expressionc                 C  s(   | j |d}|  ||¡}|d k	r$|S |S ©NrÇ  )ré  rë  )r  rÈ  ZorExprrí  r  r  r  Ú_parse_constant_expressionÂ  s
    z+DefinitionParser._parse_constant_expressionc                 C  sV   | j ddg}|  ¡  |  d¡s"q6| | j dd¡ qt|ƒdkrJ|d S t|ƒS d S )NFrÇ  rÃ   r%  r   )rÊ  r°  rº  rC  r  r  r  r  r  r  r»  Ì  s    
z"DefinitionParser._parse_expressionTr  zCallable[[], ASTExpression])r6  rÍ  Úallowrp   c           
   
   C  sD  | j }z|ƒ W S  tk
rP } z$|r*| js,‚ |  d| ¡ || _ W 5 d }~X Y nX |d k	s^t‚|  ¡  | j }|  t¡r~| j}nºdddddœ}g }	| j	s t
|	ƒdkr²| j|kr²q | j|krÎ|	 || j ¡ n"t
|	ƒdkrð| j|	d krð|	 ¡  |  j d	7  _ qt
|ƒdkr$| j	r$|  d
| ¡ | j|| j …  ¡ }t| ¡ ƒS )NzBParsing of expression failed. Using fallback parser. Error was:
%sr«  r  rÂ  r»   )r©  r  rÁ  rº   r   rm  r%  z0Could not find end of expression starting at %d.)r¥  r#   ZallowFallbackExpressionParsingÚwarnr
  r°  r¬  Ú
_string_rer®  r¦  r  r¤  rC  rç  r§  r¨  Ústripr!  )
r  r6  rÍ  rð  ZprevPosrÔ   r©  r‡  Zbracketsr+  r  r  r  rÓ  Ú  s>    
ÿ

ÿz+DefinitionParser._parse_expression_fallbackr"  c                 C  sÈ   |   ¡  |  t¡rt| jƒS dD ]X}|  |¡s0q |   ¡  |  d¡rn|   ¡  |  d¡sf|  d| d ¡ |d7 }t|ƒ  S |  d¡r²|   ¡  |  t¡s |  d¡ t	| jƒ}t
|ƒS | jd	d
d}t|ƒS )N)rc   rQ   rÁ  rÂ  zExpected "]" after  "operator z["rÇ   r4  z%Expected user-defined literal suffix.FrÐ  ©rÙ  r†  )r°  r¬  Ú_operator_rer+  r®  r±  rº  r§  r-   r  r3  rÒ  r5  )r  r¦  r  r—  r  r  r  Ú_parse_operator  s*    








z DefinitionParser._parse_operatorrK  c                 C  sè  |   ¡  |  d¡sd S |  d¡r*tg dƒS g }g }d}| j}d}d}zv| jdd}|   ¡  |  d¡r‚d}d}|  d¡s¬|  d¡ n*|  d¡r’d}n|  d¡r¢d}n
|  d	¡ | |¡ W n tk
r¾ } zä| |d
f¡ || _z€| j	dd}	|   ¡  |  d¡r$d}d}|  d¡sR|  d¡ n.|  d¡r6d}n|  d¡rHd}n
|  d	¡ | t
|	ƒ¡ W nJ tk
r¬ } z*|| _| |df¡ d}
|  ||
¡|‚W 5 d }~X Y nX W 5 d }~X Y nX |rÔ|rÞt‚qÞ|r6t‚q6t||ƒS )Nrº   r»   FrØ  rª  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º  rK  r¥  rÒ  r§  rC  r#   rï  r8  r¼  r
  )r  Ú
prevErrorsr0  r;  r¥  ZparsedCommaZ	parsedEndr—  rÔ   r‡  rÕ  r  r  r  Ú_parse_template_argument_list&  sh    








2

z.DefinitionParser._parse_template_argument_listFrV  )ÚmemberPointerrp   c              
   C  sN  g }g }|   ¡  d}|  d¡r"d}|   ¡  t|ƒdkrB|  d¡}nd}| |¡ d }|  d¡rh|  ¡ }nT|  t¡s˜|rŽt|ƒdkrŽ| ¡  qB|  	d¡ | j
}|tkr´|  	d| ¡ t|ƒ}| j}z|  ¡ }	W n: tk
r }
 z|| _d }	| j |
¡ W 5 d }
~
X Y nX | t||	ƒ¡ |   ¡  |  d¡s"|rB|  	d	¡ qBq"t|||ƒS )
NFr_  Tr   rx   rh   z#Expected identifier in nested name.z3Expected identifier in nested name, got keyword: %sz.Expected '::' in pointer to member (function).)r°  rº  r  rÑ  rC  rö  r¬  r-   rç  r§  r®  Ú	_keywordsr  r¥  rø  r#   ÚotherErrorsrI  rV  )r  rù  rW  rX  rY  rx   rL  r  r¥  r0  Úexr  r  r  r¿  f  sN    





ÿ

z#DefinitionParser._parse_nested_namerA  c                 C  sH  d }d }g }d }g }|   ¡  |  t¡rX| j}| |¡ |dkrf|d k	r`|  d|› d|› d¡ |}nè|dkr”|d k	rŽ|  d|› d|› d¡ |}nº|dkrÐt|ƒdkrÄ|  d|› d|d › d¡ | |¡ n~|dkrt|ƒdkr|d dkr|  d|› d|d › d¡ | |¡ n0|d	krN|d k	rJ|  d|› d|› d¡ |}|   ¡  qt|ƒdkrjd S |d
krè|d k	r–|  d|› d|› d¡ |d k	r¸|  d|› d|› d¡ t|ƒdkrô|  d|› dd |¡› d¡ n|dkrD|d k	r|  d|› d|› d¡ t|ƒdkrô|  d|› dd |¡› d¡ n°|dkrt|d k	rô|  d|› d|› d¡ n€|dkrÐ|d k	r |  d|› d|› d¡ t|ƒdkrô|  d|› dd |¡› d¡ n$|dkr*|d k	rü|  d|› d|› d¡ t|ƒdkrô|  d|› dd |¡› d¡ nÊ|dkr¾|d k	rV|  d|› d|› d¡ t|ƒdkr‚|  d|› dd |¡› d¡ t|ƒdkrô|d dkrô|  d|› dd |¡› d¡ n6|d kræ|d k	rô|  d|› d¡ ntd|› ƒ‚g }|d k	r| |¡ |d k	r | |¡ | 	|¡ |d k	r>| |¡ t
||ƒS )N)r<   r…   r?   rB   r‡   rC   rD   rE   r_   r×   rØ   rZ   rS   rÙ   rÚ   rÛ   rÜ   zCan not have both z and rÄ  )rr   r‚   rq   r   r`   )Z
_ImaginaryZ_Complex)r<   r…   r?   r‡   rC   rD   rE   rÙ   rÚ   rÛ   rÜ   rk  rB   r_   )r×   rØ   rZ   rS   r%  zCan not have z without a floating point type.zUnhandled type )r°  r¬  Ú_simple_type_specifiers_rer®  rC  r§  r  rg  r
  ÚextendrA  )r  ÚmodifierZ
signednessÚwidthrÚ  rW  rÌ   rB  r  r  r  Ú_parse_simple_type_specifiers˜  sš    







"

"



"

 

 








z.DefinitionParser._parse_simple_type_specifiersr@  c                 C  s:  |   ¡  |  ¡ }|d k	r|S |   ¡  |  d¡r’|  d¡sB|  d¡ |  d¡rf|  d¡s`|  d¡ tƒ S |  ¡ }|   ¡  |  d¡sŠ|  d¡ t|ƒS d }|   ¡  dD ]}|  |¡r¢|} qºq¢|  	¡ }|   ¡  d }|  
d¡rÞd}nP|  d¡r.|  d¡sþ|  d	¡ |  d¡s|  d
¡ |  d¡s*|  d¡ d}t|||ƒS )NrO   r©  zExpected '(' after 'decltype'.r<   r«  z#Expected ')' after 'decltype(auto'.z%Expected ')' after 'decltype(<expr>'.)rF   rv   rV   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°  r  rÑ  r·  r§  rº  rE  r»  rF  r¿  r±  rG  )r  rQ  r²  r/  ÚkrI  rJ  r  r  r  Ú_parse_trailing_type_specñ  sJ    













z*DefinitionParser._parse_trailing_type_specr]  )rÝ  rp   c                 C  sp  |dkrd S |   ¡  |  d¡s6|dkr2|  d¡ nd S g }|   ¡  |  d¡sÞ|   ¡  |  d¡rŒ| td dƒ¡ |   ¡  |  d¡sÞ|  d¡ qÞ| jd d	d
}| t|ƒ¡ |   ¡  |  d¡r¼qL|  d¡rÈqÞ|  d| j› d¡ qL|   ¡  |  d¡}|  d¡}|s
|  d¡}d }|  d¡rd}|s4|  d¡r4d}d }|   ¡  |  d¡r’|  d¡rŠ|  	d¡}|   ¡  |  d¡s€|  d¡ t
|ƒ}nt
d ƒ}|   ¡  |  d¡r´| jdd}	nd }	|   ¡  |  d¡}
|  d¡}|
sä|  d¡}
|  ¡ }|   ¡  d }|dkrV|  d¡rV|   ¡  d}|D ]}|  |¡r|} q<q|sV|  dd |¡ ¡ t||||||	|
|||ƒ
S )Nrc   r©  rÎ  z+Expecting "(" in parameters-and-qualifiers.r«  rª  Tz6Expected ")" after "..." in parameters-and-qualifiers.Úsingle©r†  rÙ  rÃ   z8Expecting "," or ")" in parameters-and-qualifiers, got "z".rI   r†   r¿   r¨   rd   FrÚ  rÅ   rØ  rb  rc  r«   ru  z'Expected "%s" in initializer-specifier.z" or ")r°  rº  r§  rC  rM  Ú_parse_type_with_initr¤  rÑ  r·  rï  rY  rÒ  Ú_parse_attribute_listrg  r]  )r  rÝ  r:  rO  rI   r†   r_  r`  r²  ra  rb  rc  rd  re  ZvalidrÊ   r  r  r  Ú _parse_parameters_and_qualifiers  s¨    














ÿ
ÿÿ        þz1DefinitionParser._parse_parameters_and_qualifiersr|  )r†  Útypedrp   c                 C  s,  d}d}d}d}d}d}d}	d}
d}d}d}g }|   ¡  |sP|rP|  d¡}|rPq0|sh|rh|  d¡}|rhq0|s¼|dkr”|  d¡r„d}q0|  d¡r”d}q0|dkr¬|  d¡r¬d}q0|  d	¡r¼d	}q0|sØ|d
krØ|  d¡}|rØq0|	sô|dkrô|  d¡}	|	rôq0|dkr.|
s|  d¡}
|
rq0|s.|  d¡}|r.q0|dkrê|sP|  d¡}|rPq0|sh|  d¡}|rhq0|s€|  d¡}|r€q0|sê|  d¡}|rêd}|  d¡rà| jdd}|sÂ|  d¡ |   ¡  |  d¡sà|  d¡ t|ƒ}q0|  ¡ }|r
| |¡ q0q
q0t	|||||||	|
|||t
|ƒƒS )zJust parse the simple ones.NrI   r†   )rÛ  rÎ  rt   rX   rÛ  ra   rm   )rÎ  rÛ  r^   rK   rL   rz   rÎ  rJ   r\   r„   rW   r©  FrÇ  z=Expected constant expression after '(' in explicit specifier.r«  z'Expected ')' to end explicit specifier.)r°  r±  rÑ  rº  rï  r§  ry  Ú_parse_attributerC  r|  r   )r  r†  r	  r}  r~  r^   r„   r  rJ   rK   rL   r†   rI   r\   rd  rW   r²  Úattrr  r  r  Ú_parse_decl_specs_simple{  s¼    



















      þz)DefinitionParser._parse_decl_specs_simpler…  c                 C  sT   |r|dkrt d| ƒ‚|  ||¡}d }|rB|  ¡ }|  ||¡}nd }t||||ƒS )N©r—  rÛ  rÎ  rH  ú#Internal error, unknown outer "%s".)rD  r  r  r…  )r  r†  r	  r‡  rˆ  r‰  r  r  r  rà  Ø  s    z"DefinitionParser._parse_decl_specsz
bool | strz6ASTDeclaratorNameParamQual | ASTDeclaratorNameBitField)rÙ  rÝ  r	  rp   c                   s¨  |dkr<ˆ j }zˆ  ¡ }W qª tk
r8   |ˆ _ d }Y qªX nn|dkr˜ˆ  t¡r’tˆ jƒ}t|d ƒ}t|gdgdd}ˆ  	¡  ˆ j
dkr–ˆ  d¡ qªd }n|r¦ˆ  ¡ }nd }g }ˆ  	¡  |r6ˆ  d¡r6ˆ  	¡  ˆ  d¡rê| td ƒ¡ q®d	d
œ‡ fdd„}	ˆ  dg|	¡}
ˆ  d¡s ˆ  d¡ | t|
ƒ¡ q®q6q®ˆ  |¡}|d kršt|ƒdkrš|rš|dkrš|ršˆ  	¡  ˆ  d¡ršˆ jdd}t||dS t|||dS )NÚmayber  Frõ  r  z Unexpected ':' after identifier.rÁ  rÂ  ry  r  c                     s   ˆ   ¡ S r	  rÌ  r  r  r  r  rÍ    s    z>DefinitionParser._parse_declarator_name_suffix.<locals>.parserz&Expected ']' in end of array operator.r   r—  rÇ  r¦  r¡  )r¥  r¿  r#   r¬  r-   r  r®  rI  rV  r°  r¤  r§  rº  rC  rŽ  rÓ  r  r  rï  r¥  r  )r  rÙ  rÝ  r	  r¥  rž  r  rw  rŸ  rÍ  r‡  r   r  r  r  r  Ú_parse_declarator_name_suffixó  sV    







ÿz.DefinitionParser._parse_declarator_name_suffixr’  c                 C  sœ  |dkrt d| ƒ‚g }|  ¡  |r¬|  d¡r¬|  ¡  d}d}g }|sV|  d¡}|rVqB|sj|  d¡}|rjqB|  ¡ }|d k	rŠ| |¡ qBqŠqB|  |||¡}	t|	||t|ƒdS |rÜ|  d¡rÜ|  	¡ }
|  |||¡}	t
|	|
d	S |r|  d
¡r|  ||d¡}	t|	dS |r4| jdkr4|dkr0td g d dS | j}z|  |||¡}|W S  tk
r2 } zÈ| |df¡ || _zd| jdks„t‚|  d¡ |  |||¡}|  d¡s²|  d¡ | jdd|d}	t||	dW  W Y ¢PS  tk
r  } z*|| _| |df¡ d}|  ||¡|‚W 5 d }~X Y nX W 5 d }~X Y nX |r| j}z6| jdd}|  ¡  |  d¡sl|  d¡ |  ¡  W n8 tk
r® } z|| _| |df¡ W 5 d }~X Y ndX d}d}|sÒ|  d¡}|rÒq¸|sô|  d¡}|rôq¸qôq¸|  |||¡}	t||||	dS | j}z4|  |||¡}| jdkrH| j |  |d¡¡ |W S  tk
r– } z*|| _| |df¡ d}|  ||¡|‚W 5 d }~X Y nX d S )N)r—  rÎ  rÐ  rc   z'Internal error, unknown paramMode '%s'.r¥   Fr†   rI   )r¨  r†   rI   rd  r¨   )r¨  rd  rª  )r¨  r©  rÐ  r¡  z/If declarator-id with parameters-and-qualifiersr«  z$Expected ')' in "( ptr-declarator )"r—  ©rÙ  rÝ  r	  )rÀ  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)rD  r°  rº  rÑ  r
  rC  rá  r§  r   r  rµ  r¸  r¤  r  r¥  r  r#   r
  r§  r¿  r¼  r¿  r»  rû  )r  rÙ  rÝ  r	  r÷  r†   rI   ZattrListr  r¨  rd  r¥  rQ  ZexParamQualrÀ  ZexNoPtrParenrÕ  rZ  rÔ   r  r  r  rá  )  sÌ    ÿ


ÿ

ÿÿÿ

þ2
 

z"DefinitionParser._parse_declaratorNrH  rÆ  )r†  ÚallowFallbackrp   c                   sÆ   ˆ  ¡  |dkr,ˆ ¡ }|d k	r,t|ddS ˆ d¡s:d S ˆ ¡ }|d k	rRt|ƒS |dkr`g }n2|dkrrddg}n |d kr„ddg}nˆ d	| ¡ |dk‰ d
dœ‡ ‡fdd„}ˆj|||d}t|ƒS )NrÛ  F)rÇ  r«   rH  rÃ   r»   r«  z;Internal error, initializer for outer '%s' not implemented.ry  r  c                     s   ˆj ˆ dS rî  )rÊ  r  ©rÈ  r  r  r  rÍ  È  s    z3DefinitionParser._parse_initializer.<locals>.parser)rð  )r°  rÉ  rÆ  rº  r§  rÓ  )r  r†  r  Z
bracedInitZfallbackEndrÍ  r‡  r  r  r  Ú_parse_initializerœ  s.    


ÿz#DefinitionParser._parse_initializerrÒ  )rÙ  r†  rp   c                 C  s  |r(|dkrt d| ƒ‚|dkr(|s(t‚|dkr¶g }| j}zb| j|dd}| jd|dd}d}|d	krŠ|  ¡  t d
¡ | j	| j¡rŠd}|rš| j
dd W q tk
r² } zô|dkrÀd}	n|d	krÎd}	ntƒ ‚| ||	f¡ || _z| j|d}| jd|d}W nš tk
r  }
 zz|| _|dkr0d}	n|d	kr@d}	ntƒ ‚| |
|	f¡ |dkrld}|d7 }n|d	kr|d}ntƒ ‚|  ||¡|
‚W 5 d}
~
X Y nX W 5 d}~X Y nX nPd}|dkrÊd}n"|dkrÞd}d}n|dkrìd}| j|d}| j||d}t||ƒS )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Ð  rH  r  rÐ  )r—  rÎ  F)r†  r	  Tr  rÎ  z
requires\b)Z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Û  rH  r  )rD  r
  r¥  rà  rá  r°  ÚreÚcompiler¬  r¨  Ú
assert_endr#   rC  r¼  rÒ  )r  rÙ  r†  r÷  r©  rË  rÌ  ZmustEndZ	exUntypedÚdescZexTypedrÕ  rÝ  r  r  r  rÒ  Í  st    
ÿ




	&


zDefinitionParser._parse_typerN  c              
   C  sn  |r|dkst ‚| j||d}|dkr<| j|d}t||ƒS | j}d }zZ| j|dd}|d krjt|d ƒW S |  ¡  | jdkr’| jdkr’|| _d }nt||ƒW S W n, tk
rÌ } z|| _|}W 5 d }~X Y nX |  d	¡sât|d ƒS z| jdd d
}t	||ƒW S  tk
rh }	 zL|d kr|	‚g }
|
 
|df¡ |
 
|	df¡ d}|d7 }|  |
|¡|	‚W 5 d }	~	X Y nX d S )Nr  r  rH  rÛ  F)r†  r  rÃ   r»   r«   rô  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
  rÒ  r  rÚ  r¥  r°  r¤  r#   rº  rÑ  rC  r¼  )r  rÙ  r†  r—  rÓ  r¥  r½  rÔ   ZtypeInitrÔ  râ  rˆ  r  r  r  r  %  sD    



z&DefinitionParser._parse_type_with_initrÜ  c                 C  s:   |   ¡ }|  ¡  |  d¡s$t|d ƒS |  dd ¡}t||ƒS )Nr«   F)r¿  r°  rº  rÜ  rÒ  rÝ  r  r  r  Ú_parse_type_usingR  s    

z"DefinitionParser._parse_type_usingrß  c                 C  s$   |   ¡ }|  ¡  |  d¡}t||ƒS )NrÛ  )r¿  r°  r  rß  rá  r  r  r  Ú_parse_conceptZ  s    
zDefinitionParser._parse_conceptrå  c           	      C  sØ   |   ¡ }|  ¡ }|  ¡  |  d¡}g }|  ¡  |  d¡rÊ|  ¡  d }d}d}|  d¡rZd}|  t¡rr| j}|  ¡  |s„|  d¡r„d}|  ¡ }|  ¡  |  d¡}| t	||||ƒ¡ |  ¡  |  d¡rÊq8qÊq8t
||||ƒS )Nrc  r  Fr„   Trª  rÃ   )r  r¿  r°  rÑ  rº  r¬  Ú_visibility_rer®  rC  râ  rå  )	r  rd  rZ  rc  ræ  rã  r„   rä  ÚbaseNamer  r  r  Ú_parse_class`  s6    





zDefinitionParser._parse_classrè  c                 C  s   |   ¡ }|  ¡ }t||ƒS r	  )r  r¿  rè  )r  rd  rZ  r  r  r  Ú_parse_union~  s    zDefinitionParser._parse_unionré  c                 C  sD   d }|   ¡ }|  ¡ }|  ¡  d }|  d¡r6| jdd}t||||ƒS )Nr  FrØ  )r  r¿  r°  rº  rÒ  ré  )r  rê  rd  rZ  rë  r  r  r  Ú_parse_enumƒ  s    
zDefinitionParser._parse_enumrì  c                   s`   ˆ   ¡ }ˆ  ¡ }ˆ  ¡  d }ˆ  d¡rTˆ  ¡  ddœ‡ fdd„}ˆ  g |¡}t|ƒ}t|||ƒS )Nr«   ry  r  c                     s   ˆ j ddS rÆ  )rï  r  r  r  r  rÍ  •  s    z2DefinitionParser._parse_enumerator.<locals>.parser)r¿  r  r°  rº  rÓ  rÆ  rì  )r  rZ  rd  rÓ  rÍ  ZinitValr  r  r  Ú_parse_enumerator  s    
z"DefinitionParser._parse_enumeratorrí  c                 C  sÒ  |   ¡  |  d¡r|  ¡ }nd }| j}zæd }|   ¡  |  d¡rDd}n*|  d¡rTd}n|rd|  d¡ n
|  d¡ |   ¡  |  d¡}|   ¡  |  t¡ržt	| j
ƒ}nd }|   ¡  |sÈ|  d¡rÈ| jdd d	}nd }| jd
krà|  d¡ t||||ƒ}|r t||ƒW S t|ƒW S W nÀ tk
rÌ } z |r(‚ z8|| _|  dd¡}	|   ¡  |  d¡}t|	|ƒW  W Y ¢`S  tk
rº }
 z:|| _d}g }| |df¡ | |
df¡ |  ||¡‚W 5 d }
~
X Y nX W 5 d }~X Y nX d S )Nrx   r€   rF   zFExpected 'typename' or 'class' after template template parameter list.zKExpected 'typename' or 'class' in the beginning of template type parameter.rª  r«   Frô  z,>z4Expected "," or ">" after (template) type parameter.r  rH  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-   r  r®  rÒ  r¤  rð  rû  ró  r#   r  rþ  rC  r¼  )r  rý  r¥  rñ  rò  r  rP   r  rÔ  r<  ZeNonTyperÕ  râ  r  r  r  Ú_parse_template_parameter  sl    








 ÿ
ÿÿz*DefinitionParser._parse_template_parameterrü  c           
   
   C  s  g }|   ¡  |  d¡s |  d¡ | j}d }z|  ¡ }| |¡ W n, tk
rl } z|| _|}W 5 d }~X Y nX |   ¡  |  d¡r’|  ¡ }t||ƒS |  d¡r q q d}g }|rº| |df¡ z|  d¡ W n0 tk
rø }	 z| |	df¡ W 5 d }	~	X Y nX t	|ƒ |  
||¡‚q d S )	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#  rC  r#   Ú_parse_requires_clauserü  r7  r¼  )
r  rt  r¥  Úerrr<  ZeParamr  rÕ  râ  rÔ   r  r  r  r"  Ü  s8    




 z/DefinitionParser._parse_template_parameter_listr  c                 C  sè   | j }z|  ¡ }W n tk
r.   || _ Y d S X |  ¡  |  d¡sL|| _ d S g }|  ¡  |  d¡}|  ¡  |  t¡s~|  d¡ | j}|t	krš|  d| ¡ t
|ƒ}| t||ƒ¡ |  ¡  |  d¡rÆqÞ|  d¡rÒqP|  d¡ qPt||ƒS )Nr  rª  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¿  rD  r°  rº  r¬  r-   r§  r®  rú  r  rC  r
  r  )r  r¥  rH   r   rò  Ztxt_identifierr  r  r  r  Ú_parse_template_introductionþ  s<    



ÿ

z-DefinitionParser._parse_template_introductionrÿ  c                 C  sº   |   ¡  |  d¡sd S dddœdd„}g }g }| || ƒ¡ |   ¡  d}|  d¡rbd	}| d¡ n|  d
¡rzd	}| d
¡ |s€q| || ƒ¡ q<t|ƒdkr¨t|d ƒS tt||ƒƒS d S )Nro   rš  ry  )r  rp   c                 S  sŒ   g }g }|  |  ¡ ¡ |  ¡  d}|  d¡r<d}|  d¡ n|  d¡rTd}|  d¡ |sZqj|  |  ¡ ¡ qt|ƒdkr~|d S t||ƒS d S )NFr¿   Tr9   r%  r   )rC  rÀ  r°  rº  r±  r  r  )r  ZandExprsr  rç  r  r  r  Úparse_and_expr.  s"    


z?DefinitionParser._parse_requires_clause.<locals>.parse_and_exprFrÀ   Tri   r%  r   )r°  r±  rC  rº  r  r  r  )r  r'  ZorExprsr  rç  r  r  r  r$  "  s*    



z'DefinitionParser._parse_requires_clauser  )rS  rp   c              
   C  s  g }|   ¡  d }| j}|  d¡r–z|  ¡ }W nJ tk
rv } z,|dkrbt|ƒdkrbtd ƒ W Y ¢
S |‚W 5 d }~X Y nX |dkr¤|jd k	r¤|  d¡ n|  	¡ }|s¤qÔ|dkrÈt|ƒdkrÈ|| _|  d¡ | 
|¡ qt|ƒdkrò|dkrò|  d¡ t|ƒdkrd S t|ƒS d S )Nrx   rÛ  r   rH   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#   r  r  r  r§  r&  rC  )r  rS  rX  r   r¥  rÔ   r  r  r  Ú"_parse_template_declaration_prefixW  s2    


z3DefinitionParser._parse_template_declaration_prefixr  )rI  ro  ÚfullSpecShorthandÚisMemberrp   c                 C  sî   |  ¡ }d}|sd}n"|r.|jd kr.d}d}n
t|jƒ}|d |k rV|  d||f ¡ ||krê|| }|sª|sªd|||f }	|	d7 }	|r”|	d| 7 }	|	t|ƒ7 }	|  |	¡ g }
t|ƒD ]}|
 tg d d	¡ q¶|râ|sâ|
 	|j¡ t
|
ƒ}|S )
NFr   Tr%  zeToo few template argument lists comapred to parameter lists. Argument lists: %d, Parameter lists: %d.z’Too 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]  rX  r  r§  r  rñ  ri  rC  rü  rþ  r  )r  rI  ro  r)  r*  ZnumArgsZisMemberInstantiationZ	numParamsZnumExtrarˆ  ZnewTemplatesZ_ir  r  r  Ú_check_template_consistencyx  s<    
þý
z,DefinitionParser._check_template_consistencyr  )rS  r  rp   c              
   C  s  |dkrt d| ƒ‚|dkr(t d| ƒ‚d }d }d }d }|  ¡  |  t¡rP| j}|dkrb|  |¡}|dkr(g }| j}z|sŠ| jddd}W n6 tk
rÂ }	 z| 	|	d	f¡ || _W 5 d }	~	X Y nX | j}z|sØ|  
¡ }W nJ tk
r$ }	 z*|| _| 	|	d
f¡ d}
|  ||
¡|	‚W 5 d }	~	X Y nX n¦|dkr<|  ¡ }n’|dkrV| jddd}nx|dkrx| jddd}|  ¡ }nV|dkrŒ|  ¡ }nB|dkr |  ¡ }n.|dkr´|  ¡ }n|dkrÈ|  ¡ }ntƒ ‚| j|j|d|dkd}|  ¡  |  d¡}t|||||||ƒS )N)rF   r   rÎ  rÛ  r—  rH   rV   r  z(Internal error, unknown objectType "%s".)rF   rv   r   rÎ  rÛ  Úvarr—  rH   rV   r%  r$  r  z+Internal error, unknown directiveType "%s".)r—  rH   rÛ  rÎ  rF   r   r—  Trô  r  zIf type alias or template aliaszError in type declaration.rH   rÛ  rÎ  rF   r   rV   r  F)r)  r*  r  )rD  r°  r¬  r  r®  r(  r¥  rÒ  r#   rC  r  r¼  r  r  r$  r  r  r   r!  r
  r+  rZ  rº  r  )r  rS  r  rã  ro  r  r  r÷  r¥  rÔ   rÕ  r  r  r  r  Úparse_declarationŸ  sx    


"












ý
  þz"DefinitionParser.parse_declarationr'  c                 C  s8   | j dd}|  ¡ }| j||dd}t||ƒ}d|_|S )Nrb   ©rS  F©r)  )r(  r¿  r+  r'  rS  )r  ro  rZ  rQ  r  r  r  Úparse_namespace_objectà  s    ÿ
z'DefinitionParser.parse_namespace_objectz*tuple[ASTNamespace | ASTDeclaration, bool]c           
      C  s  | j }zX| jdd}|  ¡ }|  ¡  |  d¡ |  ¡  | j||dd}t||ƒ}d|_|dfW S  t	k
r } zšz>|| _ |  
dd¡}|  ¡  |  d¡ |  ¡  |dfW  W Y ¢\S  t	k
r } z6g }| |df¡ | |d	f¡ d
}	|  ||	¡|‚W 5 d }~X Y nX W 5 d }~X Y nX d S )NZxrefr.  rÆ   Tr/  rÎ  FzIf shorthand refzIf full function refzError in cross-reference.)r¥  r(  r¿  r°  rº  r  r+  r'  rS  r#   r-  rC  r¼  )
r  r¥  ro  rZ  Zres1Úe1Zres2Úe2râ  rˆ  r  r  r  Úparse_xref_objecté  s6    
ÿ


z"DefinitionParser.parse_xref_objectzASTExpression | ASTTypec                 C  sÐ   | j }z|  ¡ }|  ¡  |  ¡  |W S  tk
rÊ } zˆ|| _ z(|  d¡}|  ¡  |  ¡  |W  W Y ¢ZS  tk
r¸ } z6d}g }| |df¡ | |df¡ |  ||¡|‚W 5 d }~X Y nX W 5 d }~X Y nX d S )NFz%Error when parsing (type) expression.rÏ  rÎ  )r¥  r»  r°  r  r#   rÒ  rC  r¼  )r  r¥  r²  ZexExprrÚ  ZexTyperÕ  râ  r  r  r  Úparse_expression  s&    
z!DefinitionParser.parse_expression)T)F)T)T)NT)N)F)6r  r  r  rx  rœ  rŸ  r¡  r«  r¶  r¾  rÀ  rÄ  rÅ  rÃ  rÉ  rË  r×  rß  r¹  ré  rë  rÊ  rï  r»  rÓ  rö  rø  r¿  r  r  r  r  rà  r  rá  r  rÒ  r  r  r  r  r  r   r!  r#  r"  r&  r$  r(  r+  r-  r0  r3  r4  r  r  r  r  rš  `  sr   

<;! _6
 þ, @2Y-]]7 ÿs1X-
?"$5# þ'A	rš  r  c                  C  s    t tdƒd ƒ} t| gdgddS )NZPhonyNameDueToErrorFrõ  )rI  r  rV  )rw  r  r  r  Ú_make_phony_error_name  s    r5  c                      s  e Zd ZU dZededƒdddgZded< ej	ej	ej	ej	d	œZ
d
ed< dddœdd„Zdddddœdd„Zeddœdd„ƒZeddœdd„ƒZdddœdd„Zdddœd d!„Zd"dd#dd$œd%d&„Zd'dœ‡ fd(d)„Zdd"dd*œd+d,„Zddœd-d.„Zddœd/d0„Z‡  ZS )1Ú	CPPObjectz%Description of a C++ language object.útemplate parameterzTemplate Parameters)Ztparamr7  T©ÚlabelrW  Úcan_collapsezlist[Field]Údoc_field_types)ÚnoindexentryZnocontentsentryr"  úsingle-line-parameter-listr6   Úoption_specr  r  )Úastrp   c              	   C  sî   |j dkst‚|j}|st‚|jd k	s*t‚|jd ks8t‚|jd ksFt‚|j}|sTt‚|jd krbd S |j}|d krtd S |j dkr‚d S |jdkrd S |j}|j	|jdddd}|d k	r¶d S |j 
¡ }||_t||jd d || jj|  ¡ d d d S )Nr  rV   FTrj  r%  rr  )rS  r
  r  rL  rt  r0  rV  r  r  rl  r  r  r  r.  r;  Úget_source_info)r  r?  r  r,  Ú
parentDeclZtargetSymbolrË   Z	declCloner  r  r  Ú_add_enumerator_to_parent2  s@    


ÿ
  
ýz#CPPObject._add_enumerator_to_parentr  r   )r?  Úsigr,  rp   c              	   C  sð  g }t dtd ƒD ]@}z|j|d}| |¡ W q tk
rP   |tk sLt‚Y qX qtt|ƒƒ}|d }|spt‚t 	d¡ 
|¡s–tjd|||  ¡ d |j ¡  ¡  d¡}d}	|jj}
|
d k	ræ|
j}|
j}
|d krÔq¶|jd	kr¶d
}	qæq¶|	sTd| jkrT|}| jjjD ](}| |¡r|t|ƒd … } q0q|  |¡}| jd  d||dd f¡ || jjjkrì| jj d d }||krŠ|jj!||< |s”t‚|d  |¡ |dd … D ].}|s¼q®|| jjjkr®|d  |¡ q®| jj "|¡ d S )Nr%  rb  r   z^[a-zA-Z0-9_]*$zMIndex id generation for C++ object "%s" failed, please report as bug (id=%s).r  r  FrH   Tr<  Úentriesr  rŒ   r3  rW  r.  )#ri  r  r(  rC  r$   r
  rm  Úreversedr  r  r¬  r„  r…  Úget_locationr  rÏ  r*  ÚlstriprV  r  rS  r!  r.  r  Úcpp_index_common_prefixÚ
startswithr  Úget_index_textZ	indexnodeÚstateÚdocumentr.  Ú
domaindatar;  Znote_explicit_target)r  r?  rC  r,  r.  r   r×  ÚnewestIdrZ  ZisInConceptrË   rÌ  ZstrippedNamer/  Z	indexTextrW  r  r  r  Úadd_target_and_index\  s^     þ




zCPPObject.add_target_and_indexr  c                 C  s
   t ƒ ‚d S r	  r$  r  r  r  r  Úobject_type”  s    zCPPObject.object_typec                 C  s   | j S r	  )rP  r  r  r  r  Údisplay_object_type˜  s    zCPPObject.display_object_typer“  c                 C  s   t dƒ|| jf S )Nz%s (C++ %s))r   rQ  r¹  r  r  r  rJ  œ  s    zCPPObject.get_index_textrš  )rÍ  rp   c                 C  s   |  | j| j¡S r	  )r-  rP  Úobjtype)r  rÍ  r  r  r  Úparse_definitionŸ  s    zCPPObject.parse_definitionr   r   )r,  r?  r!  rp   c                 C  s   |  |d| j|¡ d S r  )rH  r.  )r  r,  r?  r!  r  r  r  rH  ¢  s    zCPPObject.describe_signatureú
list[Node]c                   sÄ   | j jjj}d|jkr<|jd d }||jd< | ¡ |jd< |jd }|j}|d k	r°|j	dkr°d| 
¡ › d| j› d| jd	 › }tj||  ¡ d
 tƒ }| |¡}||jd< g S d |jd< tƒ  ¡ S )Núcpp:parent_symbolr3  Úroot_symbolr9  rÎ  zFC++ declarations inside functions are not supported. Parent function: z
Directive name: z
Directive arg: r   r  úcpp:last_symbol)rK  rL  Úsettingsr.  Ú	temp_datarM  rA  Úref_contextr  rS  rÏ  rZ  Ú	argumentsr„  r…  rF  r5  r‰  r>  Úrun)r  r.  Úrootr,  rA  rˆ  rZ  r  r@  r  r  r\  ¦  s     


"


zCPPObject.run)rC  r,  rp   c              
   C  sì  | j jd }| j jjp"| j jjp"d}d| jkoHt|ƒ|  koDdkn  |d< t||| j jd}z|  |¡}| 	¡  W nR t
k
rÈ } z4tj||d tƒ }| |¡}	|	| j jd< t|‚W 5 d }~X Y nX z~|j|| j j|  ¡ d d	}	|	jd ksöt‚|	jd kst‚| j jd |	_|	jd k	r:|	jjd ks2t‚|	|	j_|	| j jd< W nb tk
rª } zB|j| j jd< td
ƒ}
|
|jj|jj| j|f }
tj|
|d W 5 d }~X Y nX |jdkrÂ|  |¡ t| jƒ}d| jk|d< |  |||¡ |S )NrU  r   r=  rp  ©r‚  r  r  rW  r%  )r;  rB  r€  r  r"  )r.  rY  r  Ú!cpp_maximum_signature_line_lengthZmaximum_signature_line_lengthr!  r  rš  rS  r  r#   r„  r…  r5  r‰  Ú
ValueErrorrŠ  r;  r@  rC  r
  rD  r  r  r   rB  rQ  rS  rB  r   rH  )r  rC  r,  r,  Úmax_lenrÍ  r?  rÔ   rZ  r  rˆ  r!  r  r  r  Úhandle_signatureÉ  s\    
ÿþ
þ

  
ÿ ÿ 

zCPPObject.handle_signaturec                 C  sP   | j jd }|st‚| j jd | _| j jd | _|| j jd< | ¡ | j jd< d S )NrW  rU  r9  )r.  rY  r
  ÚoldParentSymbolrZ  ÚoldParentKeyrA  )r  Z
lastSymbolr  r  r  Úbefore_content   s    zCPPObject.before_contentc                 C  s    | j | jjd< | j| jjd< d S )NrU  r9  )rc  r.  rY  rd  rZ  r  r  r  r  Úafter_content  s    zCPPObject.after_content)r  r  r  Ú__doc__r3   r   r;  Ú__annotations__r   Úflagr>  rB  rO  rx  rP  rQ  rJ  rS  rH  r\  rb  re  rf  r™  r  r  r@  r  r6  "  s0   

þÿü*8#7r6  c                   @  s   e Zd ZdZdS )ÚCPPTypeObjectr—  N©r  r  r  rP  r  r  r  r  rj    s   rj  c                   @  s   e Zd ZdZdS )ÚCPPConceptObjectrH   Nrk  r  r  r  r  rl    s   rl  c                   @  s   e Zd ZdZdS )ÚCPPMemberObjectrÛ  Nrk  r  r  r  r  rm    s   rm  c                
   @  sd   e Zd ZdZejededƒdddededƒd	d
ddededƒdddededƒdddg ZdS )ÚCPPFunctionObjectrÎ  Ú	parameterZ
Parameters)r<  ro  rO  ÚargumentTr8  Ú
exceptionsZThrowsr²  )Zthrowsr{   Ú	exception)r9  ZrolenamerW  r:  ÚretvalzReturn values)Zretvalsrs  ZreturnvalueZReturnsF)Zreturnsrp   )r9  Úhas_argrW  N)	r  r  r  rP  r6  r;  r3   r   r2   r  r  r  r  rn    s$   
þþ
þÿörn  c                   @  s"   e Zd ZdZeddœdd„ƒZdS )ÚCPPClassObjectrF   r  r  c                 C  s   | j dkst‚| j S )Nr#  )rR  r
  r  r  r  r  rQ  .  s    z"CPPClassObject.display_object_typeN)r  r  r  rP  rx  rQ  r  r  r  r  ru  +  s   ru  c                   @  s   e Zd ZdZdS )ÚCPPUnionObjectr   Nrk  r  r  r  r  rv  5  s   rv  c                   @  s   e Zd ZdZdS )ÚCPPEnumObjectrV   Nrk  r  r  r  r  rw  9  s   rw  c                   @  s   e Zd ZdZdS )ÚCPPEnumeratorObjectr  Nrk  r  r  r  r  rx  =  s   rx  c                   @  s<   e Zd ZU dZdZdZdZdZi Zde	d< dd	œd
d„Z
dS )ÚCPPNamespaceObjectzb
    This directive is just to tell Sphinx that we're documenting stuff in
    namespace foo.
    Fr%  r   Tr6   r>  rT  r  c              
   C  sâ   | j jd d }| jd  ¡ dkr,|}g }nŠt| jd |  ¡ | jd}z| ¡ }| ¡  W nD t	k
rž } z&t
j||  ¡ d tƒ }t|d ƒ}W 5 d }~X Y nX | |j|j¡}|g}|| j jd< || j jd< | ¡ | j jd	< g S )
Nr3  rV  r   ©ZNULLrv  rg   r^  r  rU  úcpp:namespace_stackr9  )r.  rM  r[  ró  rš  rF  r  r0  r  r#   r„  r…  r5  r'  r‰  rI  ro  rY  rA  rZ  )r  Ú
rootSymbolr  ÚstackrÍ  r?  rÔ   rZ  r  r  r  r\  M  s*    
þzCPPNamespaceObject.runN)r  r  r  rg  Úhas_contentÚrequired_argumentsÚoptional_argumentsÚfinal_argument_whitespacer>  rh  r\  r  r  r  r  ry  A  s   
ry  c                   @  s8   e Zd ZU dZdZdZdZi Zded< ddœd	d
„Z	dS )ÚCPPNamespacePushObjectFr%  r   Tr6   r>  rT  r  c              
   C  s  | j d  ¡ dkrg S t| j d |  ¡ | jd}z| ¡ }| ¡  W nD tk
rˆ } z&tj	||  ¡ d t
ƒ }t|d ƒ}W 5 d }~X Y nX | jj dd ¡}|s®| jjd d }| |j|j¡}| jj dg ¡}| |¡ || jjd< || jjd< | ¡ | jjd	< g S )
Nr   rz  r^  r  rU  r3  rV  r{  r9  )r[  ró  rš  rF  r  r0  r  r#   r„  r…  r5  r'  r.  rY  rx  rM  r‰  rI  ro  rC  rA  rZ  )r  rÍ  r?  rÔ   rZ  Z	oldParentr  r}  r  r  r  r\  l  s.    
þ
zCPPNamespacePushObject.runN©
r  r  r  r~  r  r€  r  r>  rh  r\  r  r  r  r  r‚  e  s   
r‚  c                   @  s8   e Zd ZU dZdZdZdZi Zded< ddœdd	„Z	d
S )ÚCPPNamespacePopObjectFr   Tr6   r>  rT  r  c                 C  s’   | j j dd ¡}|r t|ƒdkr8tjd|  ¡ d g }n| ¡  t|ƒdkrV|d }n| j jd d }|| j jd< || j jd< | 	¡ | j j
d	< g S )
Nr{  r   z=C++ namespace pop on empty stack. Defaulting to global scope.r  rm  r3  rV  rU  r9  )r.  rY  rx  r  r„  r…  rF  rç  rM  rA  rZ  )r  r}  r  r  r  r  r\  Œ  s    ÿ
zCPPNamespacePopObject.runNrƒ  r  r  r  r  r„  …  s   
r„  c                      s:   e Zd Zdddddddœ‡ fdd	„Zd d
œdd„Z‡  ZS )Ú	AliasNodeNr  r   zBuildEnvironment | NonezLookupKey | Noner  )rC  ÚaliasOptionsr.  Ú	parentKeyrp   c                   sr   t ƒ  ¡  || _|| _|d k	r\d|jkrN|jd d }||jd< | ¡ |jd< |jd | _n|d k	sht	‚|| _d S )NrU  r3  rV  r9  )
r>  r  rC  r†  rY  rM  rA  rZ  r‡  r
  )r  rC  r†  r.  r‡  r]  r@  r  r  r  Ÿ  s    


zAliasNode.__init__r  c                 C  s   | j | j| jd | jdS )N)r.  r‡  )rA  rC  r†  r‡  r  r  r  r  Úcopy¯  s     ÿzAliasNode.copy)NN)r  r  r  r  rˆ  r™  r  r  r@  r  r…  ž  s     þr…  c                   @  s@   e Zd Zejd Zddddddddœd	d
„Zdddœdd„ZdS )ÚAliasTransformr%  r  r_   r?   r   r   rT  )rË   ÚmaxdepthÚskipThisr†  ÚrenderOptionsrL  rp   c              	   C  s  |dkrd}n|dkrd}n|d8 }d}g }|sZt  dd¡}	| |	¡ |j |	d| j|¡ |r|rj|}
nDt  ¡ }t  ¡ }| |¡ ||_d|d< d	 |d
< |d< d|d< |}
|j	D ]>}|jd krÄq´|jj
dkrÒq´| j||d|||d}|
 |¡ q´|st|jƒdkr| |¡ |S )Nr   Tr%  FrŒ   rl  r3  ÚdomainÚaliasrR  ÚdesctypeZnoindexrƒ  ©rŠ  r‹  r†  rŒ  rL  )r   r   rC  r  rH  r.  Údesc_contentr  rL  rE  rS  Ú_render_symbolrþ  r  r=  )r  rË   rŠ  r‹  r†  rŒ  rL  Zrecurser   r,  ZchildContainerÚcontentr  rR  Z
childNodesr  r  r  r’  ·  sN    



   ý
zAliasTransform._render_symbolr  )Úkwargsrp   c                 K  s~  | j  t¡D ]j}|j}|j}z*t||| jjd}| ¡ \}}| 	¡  W n8 t
k
r€ } ztj||d d\}}W 5 d }~X Y nX |d krºt |d¡}	|	 ¡  |	t ||¡7 }	| |	¡ q| jjd jd }
|
 |¡}|sütd|ƒ td|ƒ t|
 d	¡ƒ |st‚g }|rlt|tƒs t‚|}|j}|jr<|jj}ng }|j||d
ddddd\}}|d kr®g }nBt|tƒs|t‚|}|j}|j |d
dddd}|d k	r®| !|¡ dd„ |D ƒ}t"|ƒdkrt |d¡}	| !|	¡ |	 ¡  |	t ||¡7 }	tjd| |d | |	¡ qg }ddi}|D ]F}|j#d k	s:t‚| j$||j%d |j%d |j%||j d}| &|¡ q&| |¡ qd S )Nr^  r  r‘  rŒ   r3  rV  úTarget: úParentKey: r%  ÚanyTF)rI  re  rÚ  rW  rX  rY  r[  ©rW  rX  rY  c                 S  s   g | ]}|j d k	r|‘qS r	  ry  r  r  r  r  rÅ    s     
 z(AliasTransform.apply.<locals>.<listcomp>r   z,Can not find C++ declaration for alias '%s'.r"  rŠ  Únorootr  )'rL  Úfindallr…  rC  r‡  rš  r.  r  r3  r  r#   r„  r…  r   r   ÚclearrB  Zreplace_selfÚdomainsr  r  r7  r  r
  rw  r'  rI  ro  rX  r’  r  rZ  r”  rC  r  r  r’  r†  rþ  )r  r”  rE  rC  r‡  rÍ  r?  ÚisShorthandrÔ   r,  r|  r,  r+  ÚnsrZ  re  Ú
failReasonrÌ  rË   r   rŒ  rQ  r  r  r  Úapplyå  s     ÿ





 ú

 þ



ÿ ÿ ûzAliasTransform.applyN)r  r  r  r   Zdefault_priorityr’  r   r  r  r  r  r‰  ´  s   
.r‰  c                   @  s2   e Zd ZU ejejdœZded< ddœdd„ZdS )	ÚCPPAliasObject©rŠ  r™  r6   r>  rT  r  c                 C  s  d| j kr"| j  dd¡\| _| _nd| j  | _| _t ¡ }| jj|_| j|d< | j |d< |d< g | _| j	 
dd¡d| j	kd	œ}|d r¦|d dkr¦tjd
|  ¡ d |  ¡ }|D ]}| t||| jd¡ q²t ¡ }| |¡ |  ¡  | j | j| j|¡ d| jjd< |  ¡  |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  r%  rŒ   r  rR  r  rŠ  r™  r¢  z–Error 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)rZ  Úsplitr  rR  r   r  rK  rL  rW  r!  rx  r„  r…  rF  Zget_signaturesrC  r…  r.  r‘  re  Znested_parser“  Zcontent_offsetrY  rf  )r  rE  r†  Z
signaturesrC  Zcontentnoder  r  r  r\  @  s2    


þü
zCPPAliasObject.runN)	r  r  r  r   Znonnegative_intri  r>  rh  r\  r  r  r  r  r¡  :  s   
þr¡  c                   @  s$   e Zd Zdddddddœdd„Zd	S )
ÚCPPXRefRoler   r	   r?   r  ztuple[str, str])r.  ÚrefnodeÚhas_explicit_titleÚtitleÚtargetrp   c                 C  s²   |j  |j¡ |s"t dt|ƒ¡}|d dkr^|sH| d¡rH|d d… }| d¡r^|d d… }|sª| d¡}|d d… dkrª|dd … }| d¡}|d	krª||d
 d … }||fS )Nr)  r5  r—  rÆ   éþÿÿÿr¢   r%  r_  rm  r”  )	Ú
attributesÚupdaterZ  r'   Úsubr  r0  rG  Úrfind)r  r.  r¦  r§  r¨  r©  Zdcolonr  r  r  Úprocess_linkj  s     


zCPPXRefRole.process_linkN)r  r  r  r¯  r  r  r  r  r¥  i  s   r¥  c                      s2   e Zd Zdddœ‡ fdd„Zddœdd	„Z‡  ZS )
ÚCPPExprRoler?   r  )ÚasCoderp   c                   s    t ƒ  ¡  |rd| _nd| _d S )Nzcpp-exprz	cpp-texpr)r>  r  Ú
class_type)r  r±  r@  r  r  r  ˆ  s    
zCPPExprRole.__init__z'tuple[list[Node], list[system_message]]r  c              
   C  sÞ   | j  dd¡}t||  ¡ | jd}z| ¡ }W nX tk
r† } z:tjd|||  ¡ d t	j
d||| jgdgg f W Y ¢S d }~X Y nX | jj dd ¡}|d kr°| jjd d	 }t	j
d| jgd}| |d
| j|¡ |gg fS )Nr–  rk  r^  z!Unparseable C++ expression: %r
%sr  r3  )r=  rU  rV  r2  )r1  r‘  rš  rF  r  r4  r#   r„  r…  r   Zdesc_inliner²  r.  rY  rx  rM  rH  )r  r1  rÍ  r?  rü  r,  r,  r  r  r  r\  ‘  s$    þ
ÿ2zCPPExprRole.run)r  r  r  r  r\  r™  r  r  r@  r  r°  ‡  s   	r°  c                   @  sþ  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e	e	e
eeeeeeeeeeeeedœZeƒ eƒ eƒ eƒ eddeƒ eƒ eƒ eƒ eƒ eƒ eddedddœZedddddddƒi dœZdddœdd„Zd dd!dd"œd#d$„Zd%dd&œd'd(„Zd)d*dd+œd,d-„Zd dd.ddd%d/d0d1œd2d3„Zd dd.ddd%d/d4d1œd5d6„Z d dd.dd%d/d7d8œd9d:„Z!d;d<œd=d>„Z"d/dd?œd@dA„Z#dS )BÚ	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.
    r3  r›  rF   rv   r  r—  r   rÎ  ÚfuncrÛ  r,  rH   rV   r  zfunction parameterr7  )
rF   r   rÎ  rÛ  r—  rH   rV   r  rI  rH  )rF   rv   r   rÎ  rÛ  r,  r—  rH   rV   r%  r$  r  rb   znamespace-pushznamespace-poprŽ  T)Z
fix_parens)r±  F)r—  rF   rv   r   r´  rÛ  r,  r—  rH   rV   r  r²  ZtexprN)rV  rW  r  r  rP  c                 C  s°   t jr4td|ƒ tdƒ t| jd  d¡ƒ tdƒ | jd }| |¡ t jr|tdƒ t| jd  d¡ƒ tdƒ td|ƒ t| jd	  ¡ ƒD ]\}}||krŽ| jd	 |= qŽd S )
Nz
clear_doc:z	before:rV  r%  z	before endz	after:z
	after endzclear_doc end:rW  )r  r—  r7  r  r  rQ  rm  Úitems)r  r;  r|  rZ  ZnDocnamer  r  r  rQ  î  s    



zCPPDomain.clear_docr   znodes.document)r.  r;  rL  rp   c                 C  s2   t jr.td|ƒ t| jd  d¡ƒ td|ƒ d S )Nzprocess_doc:rV  r   zprocess_doc end:)r  r—  r7  r  r  )r  r.  r;  rL  r  r  r  Úprocess_doc  s    
zCPPDomain.process_docr   )rG  rp   c                 C  s   |j  | jj¡ d S r	  )r«  r¬  r.  rZ  )r  rG  r  r  r  Úprocess_field_xref  s    zCPPDomain.process_field_xrefr  r   )r|  Ú	otherdatarp   c                 C  sÜ   t jrTtdƒ tdƒ t| jd  d¡ƒ tdƒ tdƒ t|d  d¡ƒ tdƒ | jd  |d || j¡ | jd }|d  ¡ D ] \}}||kr„||kr„|||< q„t jrØtd	ƒ t| jd  d¡ƒ td
ƒ tdƒ d S )Nzmerge_domaindata:z	self:rV  r%  z		self endz	other:z
	other endrW  z	result:z	result endzmerge_domaindata end)r  r—  r7  r  r  r†  r.  rµ  )r  r|  r¸  ZourNamesrZ  r;  r  r  r  Úmerge_domaindata  s,     ÿ

zCPPDomain.merge_domaindatar   r	   z!tuple[Element | None, str | None])r.  ÚfromdocnameÚbuilderrÚ  r©  rE  Úcontnoderp   c           #   
     sö  ˆdkrˆd7 ‰t ˆˆˆjd}z| ¡ \}	}
W n` tk
r } zBdddœ‡‡‡‡fdd„}||ƒ\}}tjd	||ˆd
 W Y ¢dS d }~X Y nX ˆ dd ¡}ˆjd }|rè| |¡}|sÞt	dˆƒ t	d|jƒ t	| 
d¡ƒ |sìt‚n|}|
r’t|	tƒst‚|	}|j}|jr|jj}ng }|j o8t|jƒdk}|j||ˆddd|d\}}|d krˆˆdkr‚|dkr‚tt|ƒˆƒ‚d }n|d }n.t|	tƒs¢t‚|	}|j}|j|ˆdddd}|d ksÖ|jd krt|ƒ}| d¡sô|dkrþt|ˆƒ‚dS ˆ d¡rˆdd … ‰|jj‰ ddœ‡ ‡‡fdd„}|ƒ s\tjdˆ|jj| ¡ ˆd
 |j}|
r€| ¡ }| ¡  d ¡}n| ¡ }|j }|s˜t‚ˆdkrÖ| !d¡ "¡ } d}!ˆ d!d"¡s²|jd#kr²|
rDˆjj#rðˆd$krð|!d7 }!ˆjj#rˆd%kr|  $d&¡r|!d7 }!ˆdkr²|  $d'¡r²| $d&¡r²|!d7 }!nnˆjj#ržˆd$krn| $d¡rn|!d7 }!n.ˆd%kr²|  $d¡r²| $d¡s²| d d(… } n| $d¡r²|!d7 }!|!dkrÈ| d|! 7 } |t% &| ¡7 }t'|||| (¡ ||ƒ|jf}"|"S ))N)r—  r´  rÆ   r^  rD  ztuple[str, Exception])rÔ   rp   c              
     s|   ˆdkrˆdkrˆ| fS t ˆd d… ˆˆ jd}z| ¡  W n6 tk
rr } zˆd d… |f W Y ¢S d }~X Y nX ˆ| fS )Nr—  r´  rª  r^  )rš  r  r3  r#   )rÔ   Zparser2r2  )r.  rE  r©  rÚ  r  r  ÚfindWarning.  s    þ&z2CPPDomain._resolve_xref_inner.<locals>.findWarningz&Unparseable C++ cross-reference: %r
%sr  r‘  r9  rV  r•  r–  r%  T)rW  rX  rY  r[  r  r  r   r˜  zstd::r&  úcpp:r‹   r?   r  c                    s@   ˆdkrdS ˆ  ˆ¡} | r"ˆ | kS tdˆ› dˆ › ƒ tƒ ‚d S )Nr—  TzType is z, declaration type is )Zobjtypes_for_roler7  r
  )Zobjtypes)ÚdeclTypr  rÚ  r  r  Ú	checkTypeu  s    
z0CPPDomain._resolve_xref_inner.<locals>.checkTypezcpp:%s targets a %s (%s).r  ZrefexplicitFrÎ  r—  r´  z
operator()rh   rª  ))rš  r  r3  r#   r„  r…  rx  r  r  r7  r  r
  rw  r'  rI  ro  rX  rY  r  rW  r’  r   r  r  rZ  r”  r  rI  rS  rÏ  r*  rG  r;  rç  r)  Zadd_function_parenthesesr0  r   rn  r5   r  )#r  r.  rº  r»  rÚ  r©  rE  r¼  rÍ  r?  r  rÔ   r½  rÌ   rü  r‡  r|  r,  rž  rZ  re  r[  r+  rŸ  rË   rÌ  ZtxtNamerÀ  r  ÚfullNestedNameZdisplayNamer;  r¨  ZaddParenrQ  r  )r¿  r.  rE  r  r©  rÚ  r  Ú_resolve_xref_inner#  sà    
ÿ




   ü




 þ
 ý

ÿ
ÿþ




  ÿþzCPPDomain._resolve_xref_innerzElement | Nonec              	   C  s   |   |||||||¡d S r  )rÂ  )r  r.  rº  r»  rÚ  r©  rE  r¼  r  r  r  Úresolve_xref¸  s      ÿÿzCPPDomain.resolve_xrefzlist[tuple[str, Element]])r.  rº  r»  r©  rE  r¼  rp   c           	   
   C  s\   t  ¡   |  |||d|||¡\}}W 5 Q R X |rX|dkrDd|fgS d|  |¡ |fgS g S )Nr—  rH  zcpp:templateParamr¾  )r   Úsuppress_loggingrÂ  Zrole_for_objtype)	r  r.  rº  r»  r©  rE  r¼  ZretnoderR  r  r  r  Úresolve_any_xref¾  s    

   ÿ
zCPPDomain.resolve_any_xrefz-Iterator[tuple[str, str, str, str, str, int]]r  c           	      c  s€   | j d }| ¡ D ]h}|jd kr"q|js,t‚| ¡ }t|ƒ d¡}| ¡  d¡}|jj	}|j}|j 
¡ }|||||dfV  qd S )NrV  r  r%  )r  rS  r  r;  r
  rÏ  r  rG  r*  rS  r  )	r  r|  r  rÁ  rZ  ZdispnamerS  r;  rN  r  r  r  Úget_objectsË  s    



zCPPDomain.get_objects)rE  rp   c                 C  sl   |  dd ¡}|d krd S |  dd ¡}|d ks:t|jƒdkr>d S | jd }| |¡}| ¡ }d t|ƒ|g¡S )Nr6  r9  r   rV  r_  )rx  r  r  r  rÏ  rg  r  )r  rE  r©  r‡  r|  r,  Z
parentNamer  r  r  Úget_full_qualified_nameÙ  s    

z!CPPDomain.get_full_qualified_name)$r  r  r  rg  rZ  r9  r   r   Zobject_typesru  rv  rn  rm  rj  rl  rw  rx  ry  r‚  r„  r¡  r   r¥  r°  Zrolesr  Zinitial_datarQ  r¶  r·  r¹  rÂ  rÃ  rÅ  rÆ  rÇ  r  r  r  r  r³  ¨  s„         ÿõíóþ r³  r   zdict[str, Any])Úapprp   c                 C  s’   |   t¡ |  dg d¡ |  dg d¡ |  dg d¡ | jdd dtd hd |  t¡ |  ddd	¡ |  d
dd	¡ dd„ }|  d|¡ dddddœS )NrH  r.  rž  r   r_  )ÚtypesÚcpp_debug_lookupFrŒ   Úcpp_debug_show_treec                 S  s(   | j jt_| j jt_| j jjdd d S )NT)rV  )r  rÊ  r  rJ  rË  r—  rH  Úsort)rÈ  r  r  r  Ú	initStuffó  s    

zsetup.<locals>.initStuffzbuilder-initedÚbuiltiné	   T)r#  Zenv_versionZparallel_read_safeZparallel_write_safe)Z
add_domainr³  Zadd_config_valuer_   Zadd_post_transformr‰  Úconnect)rÈ  rÍ  r  r  r  Úsetupç  s    

ürÑ  )árg  Ú
__future__r   r  Útypingr   r   r   r   r   Zdocutilsr   Zdocutils.nodesr	   r
   r   r   Zdocutils.parsers.rstr   Zsphinxr   Zsphinx.addnodesr   r   Zsphinx.applicationr   Zsphinx.buildersr   Zsphinx.directivesr   Zsphinx.domainsr   r   Zsphinx.environmentr   Zsphinx.errorsr   Zsphinx.localer   r   Zsphinx.rolesr   r   Zsphinx.transformsr   Z!sphinx.transforms.post_transformsr   Zsphinx.utilr   Zsphinx.util.cfamilyr   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   Zsphinx.util.docfieldsr2   r3   Zsphinx.util.docutilsr4   Zsphinx.util.nodesr5   Zsphinx.util.typingr6   Ú	getLoggerr  r„  r7   r  ÚVERBOSEr­  ÚSrò  r  rõ  r¸  rú  rý  r  r  rC  rf  r-  rD  r®  rå  rÿ   rh  ræ  rÞ  rì  rÛ  rD  r  r  r  rI  rV  ry  r  r€  r…  r‹  r“  r–  rž  r¢  r¤  r°  r·  r»  r¿  rÃ  rÆ  rÇ  rÊ  rÌ  rÑ  rØ  rÜ  râ  ræ  rç  rí  rð  rò  rö  rù  rý  r  r  r  r  r  r!  r"  r+  r3  r5  r8  rK  r@  rA  rE  rF  rG  rM  rY  r]  ry  r|  r…  rŽ  r’  r  r¥  r§  rµ  r¸  r»  r¿  rÂ  rÄ  rÆ  rÒ  rÑ  rÚ  rÜ  rß  râ  rå  rè  ré  rì  rí  rð  ró  rû  rþ  rü  r
  r  r  r  r  r'  r)  r.  r1  r  rš  r5  r6  rj  rl  rm  rn  ru  rv  rw  rx  ry  r‚  r„  r…  r‰  r¡  r¥  r°  r³  rÑ  r  r  r  r  Ú<module>   sæ  T
   þÿ
	÷
û                                                                           òô	öú	Ñ8  Í6           Í6  ø   þ


õ(       ÿüN 
>	 1&(&$-5	(," eF ,X.lC?dIn*%$#3+(9$)8O66' '       n               L l
$  /!  A