HEX
Server: Apache
System: Linux pdx1-shared-a1-38 6.6.104-grsec-jammy+ #3 SMP Tue Sep 16 00:28:11 UTC 2025 x86_64
User: mmickelson (3396398)
PHP: 8.1.31
Disabled: NONE
Upload Files
File: //usr/lib/python3/dist-packages/sphinx/domains/__pycache__/cpp.cpython-310.pyc
o

u�aq��@s�UdZddlZddlmZmZmZmZmZmZm	Z	m
Z
mZmZm
Z
ddlmZddlmZmZmZmZddlmZddlmZddlmZmZdd	lmZdd
lmZddl m!Z!ddl"m#Z#m$Z$dd
l%m&Z&ddl'm(Z(ddl)m*Z*m+Z+ddl,m-Z-m.Z.ddl/m0Z0ddl1m2Z2ddl3m4Z4ddl5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHddlImJZJmKZKddlLmMZMddlNmOZOddlPmQZQe4�ReS�ZTed�ZU	e�Vd�ZWe�VdejX�ZYe�Vd�ZZe�Vd�Z[e�Vd�Z\gd�Z]e�Vd �Z^d!Z_gd"�Z`d#d#d$d%d%d&d'd'd(d)d*�
Zad+d,d-d.d/d0d1�Zbid2d3�d4d5�d6d7�d8d9�d:d;�d<d=�d>d?�d@dA�dBdC�dDdE�dFdG�dHdI�dJdK�dLdM�dNdO�dPdQ�dRdS�idTdU�dVdW�dXdY�dZd[�d\d]�d^d_�d`da�dbdc�ddde�dfdg�dhdi�djdk�dldm�dndo�dpdq�drds�dtdu��dvdwdxdydzd{d|d}d~��Zcidd/�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%�id�d%�d�d��d�d��d�d'�d�d'�d�d'�d�d'�d�d0�d�d0�d�d��d�d��d�d��d�d��d�d��d�d��d�d��d�d���id�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�i�Zdid2dʓd4d˓d6d̓d8d͓d:dΓd�dΓd<dГd>dѓd@dғdBdӓdDdԓdFdՓd�dՓdHdדd�dדdJdٓd�dٓidLdۓdNdܓdPdݓdRdޓdTdߓdVd�dXd�d�d�dZd�d�d�d\d�d�d�d^d�d`d�dbd�ddd�dfd��idhd�d�d�djd�dld�dnd�dpd�d�d+�drd�d�d�dtd��d�d��d�d��d�d��d�d��d�d��d�d��d��d���d�d�d�d�d��Ze�d�d�d�d	�d
�dd�d�d�dΐd�
Zfd#d#d�d�d��d
�Zgee	ehehfei�d<d�d�gdtd�gdHd�gdJd�gdFd�gg�d�g�d�d^d`gd<d>gg�d��dd�ggZjg�d�Zkg�d�Zl�d�d�d�d�d�ZmG�d�d��den�ZoG�d�d��de7�ZpG�d�d��dep�ZqG�d�d ��d ep�ZrG�d!�d"��d"ep�ZsG�d#�d$��d$ep�ZtG�d%�d&��d&et�ZuG�d'�d(��d(eu�ZvG�d)�d*��d*eu�ZwG�d+�d,��d,eu�ZxG�d-�d.��d.eu�ZyG�d/�d0��d0eu�ZzG�d1�d2��d2eu�Z{G�d3�d4��d4et�Z|G�d5�d6��d6et�Z}G�d7�d8��d8et�Z~G�d9�d:��d:et�ZG�d;�d<��d<ep�Z�G�d=�d>��d>e��Z�G�d?�d@��d@e��Z�G�dA�dB��dBe��Z�G�dC�dD��dDe��Z�G�dE�dF��dFe��Z�G�dG�dH��dHe��Z�G�dI�dJ��dJet�Z�G�dK�dL��dLet�Z�G�dM�dN��dNet�Z�G�dO�dP��dPet�Z�G�dQ�dR��dRet�Z�G�dS�dT��dTet�Z�G�dU�dV��dVet�Z�G�dW�dX��dXet�Z�G�dY�dZ��dZet�Z�G�d[�d\��d\et�Z�G�d]�d^��d^et�Z�G�d_�d`��d`et�Z�G�da�db��dbet�Z�G�dc�dd��ddep�Z�G�de�df��dfet�Z�G�dg�dh��dhet�Z�G�di�dj��djet�Z�G�dk�dl��dlep�Z�G�dm�dn��dne��Z�G�do�dp��dpe��Z�G�dq�dr��dre��Z�G�ds�dt��dtep�Z�G�du�dv��dvep�Z�G�dw�dx��dxep�Z�G�dy�dz��dze��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�ep�Z�G�d��d���d�ep�Z�G�d��d���d�ep�Z�G�d��d���d�ep�Z�G�d��d���d�ep�Z�G�d��d���d�ep�Z�G�d��d���d�ep�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�et�Z�G�d��d���d�e8�Z�G�d��d���d�ep�Z�G�d��d���d�ep�Z�G�d��d���d�ep�Z�G�d��d���d�ep�Z�G�d��d���d�ep�Z�G�d��d���d�ep�Z�G�d��d���d�ep�Z�G�d��d���d�ep�Z�G�d��d���d�ep�Z�G�d��d���d�ep�Z�G�d��d���d�ep�Z�G�d��d���d�ep�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�ep�Z�G�dǐdȄ�d�ep�Z�G�dɐdʄ�d�ep�Z�G�dːd̄�d�ep�Z�G�d͐d΄�d�ep�Z�G�dϐdЄ�d�ep�Z�G�dѐd҄�d҃Z�G�dӐdԄ�dԃZ�G�dՐdք�dփZ�G�dאd؄�d�e9�Zΐd�esf�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�eM�Z�G�d�d��d�eM�Z�G�d�d��d�eM�Z�G�d�d���d�ej�Z�G�d��d���d�e0�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�de�d�eeheff�d�d�Z�dS(z�
    sphinx.domains.cpp
    ~~~~~~~~~~~~~~~~~~

    The C++ language domain.

    :copyright: Copyright 2007-2021 by the Sphinx team, see AUTHORS.
    :license: BSD, see LICENSE for details.
�N)�Any�Callable�Dict�	Generator�Iterator�List�Optional�Tuple�TypeVar�Union�cast)�nodes)�Element�Node�TextElement�system_message)�
directives)�addnodes)�desc_signature�pending_xref)�Sphinx)�Builder)�ObjectDescription)�Domain�ObjType)�BuildEnvironment)�NoUri)�_�__)�
SphinxRole�XRefRole)�SphinxTransform)�ReferencesResolver)�logging)�ASTAttribute�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�TzN(?x)
    [a-zA-Z_][a-zA-Z0-9_]*\b   # note, no word boundary in the beginning
z>[LuU8]?('([^'\\]*(?:\\.[^'\\]*)*)'|"([^"\\]*(?:\\.[^"\\]*)*)")z\b(public|private|protected)\bz�(?x)
        \[\s*\]
    |   \(\s*\)
    |   \+\+ | --
    |   ->\*? | \,
    |   (<<|>>)=? | && | \|\|
    |   <=>
    |   [!<>=/*%+|&^~-]=?
    |   (\b(and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|xor|xor_eq)\b)
zx(?x)
        ->\*    |    \.\*    |    \,
    |   (<<|>>)=?    |    &&    |    \|\|
    |   !=
    |   [<>=/*%+|&^~-]=?
)Y�alignas�alignof�and�and_eq�asm�auto�bitand�bitor�bool�break�case�catch�char�char8_t�char16_t�char32_t�class�compl�concept�const�	consteval�	constexpr�	constinit�
const_cast�continue�decltype�default�delete�do�double�dynamic_cast�else�enum�explicit�export�extern�false�float�for�friend�goto�if�inline�int�long�mutable�	namespace�new�noexcept�not�not_eq�nullptr�operator�or�or_eq�private�	protected�public�register�reinterpret_cast�requires�return�short�signed�sizeof�static�
static_assert�static_cast�struct�switch�template�this�thread_local�throw�true�try�typedef�typeid�typename�union�unsigned�using�virtual�void�volatile�wchar_t�while�xor�xor_eqa(?x)
    \b(
    auto|void|bool
    |signed|unsigned
    |short|long
    |char|wchar_t|char(8|16|32)_t
    |int
    |__int(64|128)  # extension
    |float|double
    |__float80|_Float64x|__float128|_Float128  # extension
    |_Complex|_Imaginary  # extension
    )\b
�)N��_CPPv2�_CPPv3�_CPPv4�c�C�i�U�l�L�b)
rI�signed char�
unsigned charrh�
signed int�unsigned intri�signed long�
unsigned longrE�ss�os�is�ios�v�m)zstd::stringzstd::ostreamzstd::istreamz
std::iostreamzstd::vectorzstd::maprlznew-operator�new[]znew-array-operatorrXzdelete-operator�delete[]zdelete-array-operator�~zinv-operator�+zadd-operator�-zsub-operator�*zmul-operator�/zdiv-operator�%zmod-operator�&zand-operator�|zor-operator�^zxor-operator�=zassign-operator�+=zadd-assign-operator�-=zsub-assign-operator�*=zmul-assign-operator�/=zdiv-assign-operator�%=zmod-assign-operator�&=zand-assign-operator�|=zor-assign-operator�^=zxor-assign-operatorz<<zlshift-operatorz>>zrshift-operator�<<=zlshift-assign-operator�>>=zrshift-assign-operator�==zeq-operator�!=zneq-operator�<zlt-operator�>zgt-operator�<=zlte-operator�>=zgte-operator�!znot-operator�&&z
sand-operatorzsor-operatorzinc-operatorzdec-operatorzcomma-operatorzpointer-by-pointer-operatorzpointer-operatorz
call-operatorzsubscript-operator)�||�++�--�,�->*�->�()�[]r�rErIr��ar��hr��wrL�DirK�DsrJ�Dur{�sz	short intzsigned shortzsigned short intzunsigned short�tzunsigned short intrhr|r�r��jr�rizlong intr�zsigned long intr�zunsigned long intz	long long�xz
long long intzsigned long longzsigned long long int�__int64zunsigned long long�yzunsigned long long int�__int128�nzsigned __int128zunsigned __int128�orb�frZ�dzlong double�e�	__float80�	_Float64x�
__float128�g�	_Float128z_Complex float�Cfz_Complex double�Cdz_Complex long double�Cez_Imaginary floatz_Imaginary doublez_Imaginary long doublerB�Da�decltype(auto)�Dczstd::nullptr_t�Dn�nw�na�dl�da�corN�pl�mi�ml�dv�rm�anrCrrrD�eor��aS�pL�mI�mL�dV�rM�aNr@�oRrs�eOr��ls�rs�lS�rS�eq�nero�lt�gt�le�ge�<=>�ntrn�aar?r��oor��ppr��mmr��cmr��pm�pt�cl�ix�ds)r�r�r��.*�pp_�mm_�de�ad�ps�ng)
r�r�r�r�r�r�r�rnr�rN)N�u8�ur�r��_id_char_from_prefix)r�r�ro)rr�r�r�r�)r�r�r�r)r�r�r�r�r�r�r�r�r�r@r�r�r�rs�dc�sc�cc�rc)r[r�rTrxc@s$eZdZddd�Zdefd	d
�ZdS)�_DuplicateSymbolError�symbol�Symbol�declaration�ASTDeclarationrzNcC� |sJ�|sJ�||_||_dS�N)r,r.)�selfr,r.�r3�4/usr/lib/python3/dist-packages/sphinx/domains/cpp.py�__init__D�
z_DuplicateSymbolError.__init__cCsd|j�d�S)Nz'Internal C++ duplicate symbol error:
%sr)r,�dump�r2r3r3r4�__str__J�z_DuplicateSymbolError.__str__)r,r-r.r/rzN)�__name__�
__module__�__qualname__r5�strr9r3r3r3r4r+Cs
r+c@�eZdZdS)�ASTBaseN�r;r<r=r3r3r3r4r@N�r@c@s�eZdZdeddfdd�Zdefdd�Zdedefd	d
�Zdefdd�Z	defd
d�Z
dededddededdddfdd�ZdS)�
ASTIdentifier�
identifierrzNcCs&|dusJ�t|�dksJ�||_dS�Nr)�lenrD�r2rDr3r3r4r5Vs
zASTIdentifier.__init__cCs|jddkS)Nr�@�rDr8r3r3r4�is_anon[�zASTIdentifier.is_anon�versioncCs�|��r|dkrt��|dkr|jdkrdS|jS|jdkr dS|jddkr)d	S|��r=d
t|j�d|jdd�fStt|j��|jS)N���size_tr��std�Strr��D0zUt%d_%s)rJr)rDrFr>�r2rLr3r3r4�get_id^s

 zASTIdentifier.get_idcC�|jSr1rIr8r3r3r4r9s�zASTIdentifier.__str__cCs|��rdS|jS)N�[anonymous])rJrDr8r3r3r4�get_display_stringv�z ASTIdentifier.get_display_string�signode�mode�envr�prefix�templateArgsr,r-cCsTt|�|��rtjdd�}nt�|j|j�}|dkr=||j|}tjddd|ddd�}	|��|	d<|	|7}	||	7}dS|d	krOt��}
|
|7}
||
7}dS|d
krY||7}dS|dkrj|d�d
�||7}dS|dkr�t	|�dksvJ�t	|�dks~J�|��r�J�d|j}tjddd|ddd�}	|��|	d<|	|7}	||	7}dSt
d|��)NrW)�text�markTyper��cpprD��	refdomain�reftype�	reftarget�modname�	classname�cpp:parent_key�
lastIsName�
noneIsName�param�classesz	sig-param�udlr�
operator""�Unknown description mode: %s)r6rJr�
desc_sig_namerDr�get_lookup_key�	desc_name�appendrF�	Exception)r2rZr[r\r]r^r,�node�
targetText�pnode�nameNoder3r3r4�describe_signatureysJ�
�z ASTIdentifier.describe_signature)
r;r<r=r>r5rErJrhrTr9rXrryr3r3r3r4rCUs����rCc@s~eZdZdeedfddddfdd�Zdefd	d
�Zdede	fdd
�Z
dede	fdd�Zde
de	ddde	ddddfdd�ZdS)�ASTNestedNameElement�	identOrOp�ASTOperatorr^�ASTTemplateArgsrzNcC�||_||_dSr1�r{r^)r2r{r^r3r3r4r5��
zASTNestedNameElement.__init__cC�dS�NFr3r8r3r3r4�is_operator��z ASTNestedNameElement.is_operatorrLcCs&|j�|�}|jr||j�|�7}|Sr1)r{rTr^�r2rL�resr3r3r4rT�szASTNestedNameElement.get_id�	transformcC�"||j�}|jr|||j�7}|Sr1r�r2r�r�r3r3r4�
_stringify��
zASTNestedNameElement._stringifyrZr[r\rr]r,r-cCsR|jdur
t|j�nd}|j�||||||�|jdur'|j�|d||�dSdS)Nr�r`)r^r>r{ry)r2rZr[r\r]r,�tArgsr3r3r4ry�s

�z'ASTNestedNameElement.describe_signature)r;r<r=rrCr5rEr�rhr>rTr*r�rryr3r3r3r4rz�s$�
�
����rzc
@s�eZdZdeedeededdfdd�Zeddd	��Zde	fd
d�Z
dd
e	dedefdd�Zde
defdd�Zdededdddddf
dd�ZdS)�
ASTNestedName�names�	templates�rootedrzNcCs>t|�dksJ�||_||_t|j�t|j�ksJ�||_dSrE)rFr�r�r�)r2r�r�r�r3r3r4r5�s

zASTNestedName.__init__cCs|Sr1r3r8r3r3r4�name��zASTNestedName.namecCs,d}|jD]}|��rq|jr|d7}q|S�NrrN)r�r�r^)r2�countr�r3r3r4�
num_templates�s
�zASTNestedName.num_templatesr�rL�	modifierscs��dkrt|�}|tvrt|Sd��fdd�|jD��Sg}t|j�dks,t|�dkr1|�d�|�|�|jD]
}|�|����q9t|j�dksQt|�dkrV|�d�d�|�S)	NrN�::c3��|]}|���VqdSr1�rT)�.0r��rLr3r4�	<genexpr>���z'ASTNestedName.get_id.<locals>.<genexpr>r�N�Er�)r>�_id_shorthands_v1�joinr�rFrsrT)r2rLr��ttr�r�r3r�r4rT�s




zASTNestedName.get_idr�cCshg}|jr
|�d�tt|j��D]}|j|}|j|r'|�d||��q|�||��qd�|�S)Nr�z	template r�)r�rs�rangerFr�r�r�)r2r�r�r�r�r3r3r4r��s



zASTNestedName._stringifyrZr[r\rr,r-cCs�t|�|dkr:|jrJd��tt|j��D]!}|dkr Jd��|j|}|j|r.Jd��|�|||d	|�qdS|d
kre|jrGJt	|���t|j�dksPJ�|jdrWJ�|jd�|d
|d	|�dS|dksr|d
ksr|dk�rig}|d
kr�|dus~J�|j
jdur�|j
jj}d}d	}	d	}
d}|d
kr�|jdd�n|j}|}
|d
kr�t�
�}
|jr�|
d7}
|d
kr�t|�dkr�|t�dd�7}n|
t�dd�7}
tt|��D]Z}||}|j|}|s�|
t�dd�7}
|
d7}
|r�|
t�dd�7}
|
t��7}
d}t	|�}|d	k�r'|j�r|t|�k�r|	t	||�7}	|d7}|�|
d||	|
|�|
|7}
q�|d
k�rgt|j�dk�rE|
t�dd�7}
||
7}|jd�rY|t�dd�7}|t��7}|jd�|||d	|�dSdStd|��)NrjFzCan this happen?r�rz::blahr�� r�rkrNr`ri�markNameT���ro)r6r�r
�Textr�rFr�r�ryr>r.�templatePrefixr�desc_addname�desc_sig_punctuation�desc_sig_keyword�desc_sig_spacer^rt)r2rZr[r\r,r�r��templateParams�iTemplateParams�templateParamsPrefixr]�firstr��dest�nner��txt_nner3r3r4ry�s�

�




�

�	z ASTNestedName.describe_signature)rzr�)r�)r;r<r=rrzrEr5�propertyr�rhr�r>rTr*r�rryr3r3r3r4r��s(
��
�	
���r�c
@�<eZdZdedefdd�Zdededdd	d
ddf
dd
�ZdS)�
ASTExpressionrLrzcC�tt|���r1��NotImplementedError�reprrSr3r3r4rTJ�zASTExpression.get_idrZr[r\rr,r-NcCr�r1r��r2rZr[r\r,r3r3r4ryM�z ASTExpression.describe_signature�r;r<r=rhr>rTrryr3r3r3r4r�I�
���r�c@r?)�
ASTLiteralNrAr3r3r3r4r�UrBr�c
@�NeZdZdedefdd�Zdedefdd�Zded	ed
ddd
ddf
dd�Z	dS)�ASTPointerLiteralr�rzcCr��Nrpr3�r2r�r3r3r4r�Zr�zASTPointerLiteral._stringifyrLcCr�)N�LDnEr3rSr3r3r4rT]r�zASTPointerLiteral.get_idrZr[r\rr,r-NcC�|t�dd�7}dSr��rr�r�r3r3r4ry`�z$ASTPointerLiteral.describe_signature�
r;r<r=r*r>r�rhrTrryr3r3r3r4r�Y�
���r�c
@�`eZdZdeddfdd�Zdedefdd�Zd	edefd
d�Z	de
d
eddddddf
dd�ZdS)�ASTBooleanLiteral�valuerzNcC�
||_dSr1�r��r2r�r3r3r4r5f�
zASTBooleanLiteral.__init__r�cC�|jrdSdS)Nr�rar�r�r3r3r4r�i�zASTBooleanLiteral._stringifyrLcCr�)N�L1E�L0Er�rSr3r3r4rTor�zASTBooleanLiteral.get_idrZr[r\rr,r-cCs|t�t|�t|��7}dSr1)rr�r>r�r3r3r4ryu�z$ASTBooleanLiteral.describe_signature)r;r<r=rEr5r*r>r�rhrTrryr3r3r3r4r�es
���r�c
@�`eZdZdeddfdd�Zdedefdd�Zd	edefd
d�Zde	d
eddddddf
dd�Z
dS)�ASTNumberLiteral�datarzNcCr�r1�r��r2r�r3r3r4r5{r�zASTNumberLiteral.__init__r�cCrUr1r�r�r3r3r4r�~rVzASTNumberLiteral._stringifyrLcCsd|j�dd�S)NzL%sE�'r�)r��replacerSr3r3r4rT��zASTNumberLiteral.get_idrZr[r\rr,r-cC�|t�|j|j�7}dSr1)r�desc_sig_literal_numberr�r�r3r3r4ry��z#ASTNumberLiteral.describe_signature�r;r<r=r>r5r*r�rhrTrryr3r3r3r4r�z�
���r�c
@r�)�ASTStringLiteralr�rzNcCr�r1r�r�r3r3r4r5�r�zASTStringLiteral.__init__r�cCrUr1r�r�r3r3r4r��rVzASTStringLiteral._stringifyrLcCsdt|j�dS)NzLA%d_KcE�)rFr�rSr3r3r4rT�r�zASTStringLiteral.get_idrZr[r\rr,r-cCr�r1)r�desc_sig_literal_stringr�r�r3r3r4ry�r�z#ASTStringLiteral.describe_signaturer�r3r3r3r4r��r�r�c
@sdeZdZdededdfdd�Zdedefdd	�Zd
edefdd�Zd
e	deddddddf
dd�Z
dS)�ASTCharLiteralr]r�rzNcCsR||_||_|tvsJ�t||_|���d�}t|�dkr%t|�|_dSt	|��)Nzunicode-escaperN)
r]r�r&�type�encode�decoderF�ordr�r+)r2r]r��decodedr3r3r4r5�s
zASTCharLiteral.__init__r�cCs,|jdurd|jdS|jd|jdS�Nr�)r]r�r�r3r3r4r��s
zASTCharLiteral._stringifyrLcCs|jt|j�Sr1)r�r>r�rSr3r3r4rT�szASTCharLiteral.get_idrZr[r\rr,r-cCs@|jdur|t�|j|j�7}d|jd}|t�||�7}dSr�)r]rr�r��desc_sig_literal_char)r2rZr[r\r,�txtr3r3r4ry�s
z!ASTCharLiteral.describe_signaturer�r3r3r3r4r��s
���r�c
@s`eZdZdedefdd�Zdedefdd�Zd	e	defd
d�Z
ded
eddddddf
dd�ZdS)�ASTUserDefinedLiteral�literal�identcCr~r1�r�r�)r2r�r�r3r3r4r5��
zASTUserDefinedLiteral.__init__r�rzcC�||j�||j�Sr1r�r�r3r3r4r���z ASTUserDefinedLiteral._stringifyrLcCsd�|j�|�|j�|��S)Nz
clL_Zli{}E{}E)�formatr�rTr�rSr3r3r4rT�r�zASTUserDefinedLiteral.get_idrZr[r\rr,r-NcCs,|j�||||�|j�|d|dd|�dS)Nrmr�)r�ryr�r�r3r3r4ry�sz(ASTUserDefinedLiteral.describe_signature)
r;r<r=r�rCr5r*r>r�rhrTrryr3r3r3r4r��s
���r�c
@r�)�ASTThisLiteralr�rzcCr��Nr�r3r�r3r3r4r��r�zASTThisLiteral._stringifyrLcCr�)N�fpTr3rSr3r3r4rT�r�zASTThisLiteral.get_idrZr[r\rr,r-NcCr�r�r�r�r3r3r4ry�r�z!ASTThisLiteral.describe_signaturer�r3r3r3r4r��r�r�c
@sheZdZdedededdfdd�Zdedefd	d
�Zdedefdd
�Z	de
deddddddf
dd�ZdS)�ASTFoldExpr�leftExpr�op�	rightExprrzNcCs*|dus
|dus
J�||_||_||_dSr1)r�r�r�)r2r�r�r�r3r3r4r5�s
zASTFoldExpr.__init__r�cCs�dg}|jr|�||j��|�d�|�|j�|�d�|�d�|jr>|�d�|�|j�|�d�|�||j��|�d�d�|�S)N�(r��...�)r�)r�rsr�r�r�r�r3r3r4r��s






zASTFoldExpr._stringifyrLcCs�|dksJ�|dkrt|�Sg}|jdur|�d�n|jdur&|�d�n|�d�|�t|j�|jr?|�|j�|��|jrK|�|j�|��d�|�S)NrM�fl�fr�fLr�)r>r�rsr��_id_operator_v2r�rTr�r�r3r3r4rT�s



zASTFoldExpr.get_idrZr[r\rr,r-cCs�|t�dd�7}|jr*|j�||||�|t��7}|t�|j|j�7}|t��7}|t�dd�7}|jrT|t��7}|t�|j|j�7}|t��7}|j�||||�|t�dd�7}dS)Nr�rr)rr�r�ryr��desc_sig_operatorr�r�r�r3r3r4ryszASTFoldExpr.describe_signature)r;r<r=r�r>r5r*r�rhrTrryr3r3r3r4r��s"��
�
���r�c
@�\eZdZdefdd�Zdedefdd�Zdedefd	d
�Z	de
ded
dddddf
dd�ZdS)�ASTParenExpr�exprcCr�r1�r	�r2r	r3r3r4r5r�zASTParenExpr.__init__r�rzcC�d||j�dS�Nr�rr
r�r3r3r4r�rYzASTParenExpr._stringifyrLcC�|j�|�Sr1�r	rTrSr3r3r4rTr�zASTParenExpr.get_idrZr[r\rr,r-NcC�6|t�dd�7}|j�||||�|t�dd�7}dSr
�rr�r	ryr�r3r3r4ry �zASTParenExpr.describe_signature�r;r<r=r�r5r*r>r�rhrTrryr3r3r3r4r�
���rc
@r)�ASTIdExpressionr�cCr�r1�r��r2r�r3r3r4r5(�
zASTIdExpression.__init__r�rzcC�
||j�Sr1rr�r3r3r4r�,r�zASTIdExpression._stringifyrLcCrr1�r�rTrSr3r3r4rT/r�zASTIdExpression.get_idrZr[r\rr,r-NcC�|j�||||�dSr1)r�ryr�r3r3r4ry2�z"ASTIdExpression.describe_signature�r;r<r=r�r5r*r>r�rhrTrryr3r3r3r4r's
���rc
@s@eZdZdededefdd�Zdededd	d
dddf
d
d�ZdS)�ASTPostfixOp�idPrefixrLrzcCr�r1r��r2rrLr3r3r4rT;r�zASTPostfixOp.get_idrZr[r\rr,r-NcCr�r1r�r�r3r3r4ry>r�zASTPostfixOp.describe_signature)r;r<r=r>rhrTrryr3r3r3r4r:s
���rc
@�`eZdZdefdd�Zdedefdd�Zded	edefd
d�Z	de
d
eddddddf
dd�ZdS)�ASTPostfixArrayr	cCr�r1r
rr3r3r4r5Dr�zASTPostfixArray.__init__r�rzcCr�N�[�]r
r�r3r3r4r�GrYzASTPostfixArray._stringifyrrLcC�d||j�|�S)Nrrr r3r3r4rTJr�zASTPostfixArray.get_idrZr[r\rr,r-NcCrr#rr�r3r3r4ryMrz"ASTPostfixArray.describe_signaturerr3r3r3r4r"C�
���r"c
@r!)�ASTPostfixMemberr�cCr�r1rrr3r3r4r5Ur�zASTPostfixMember.__init__r�rzcC�d||j�S)N�.rr�r3r3r4r�XrKzASTPostfixMember._stringifyrrLcCr&)N�dtrr r3r3r4rT[r�zASTPostfixMember.get_idrZr[r\rr,r-NcC�&|t�dd�7}|j�|d||�dS)Nr*rj)rr�r�ryr�r3r3r4ry^�z#ASTPostfixMember.describe_signaturerr3r3r3r4r(Tr'r(c
@r!)�ASTPostfixMemberOfPointerr�cCr�r1rrr3r3r4r5er�z"ASTPostfixMemberOfPointer.__init__r�rzcCr))Nr�rr�r3r3r4r�hrKz$ASTPostfixMemberOfPointer._stringifyrrLcCr&)Nrrr r3r3r4rTkr�z ASTPostfixMemberOfPointer.get_idrZr[r\rr,r-NcCr,)Nr�rj)rrr�ryr�r3r3r4rynr-z,ASTPostfixMemberOfPointer.describe_signaturerr3r3r3r4r.dr'r.c
@�ReZdZdedefdd�Zdededefdd�Zd	ed
eddd
dddf
dd�Z	dS)�
ASTPostfixIncr�rzcCr��Nr�r3r�r3r3r4r�ur�zASTPostfixInc._stringifyrrLcC�d|S)Nrr3r r3r3r4rTx�zASTPostfixInc.get_idrZr[r\rr,r-NcCr�r1�rrr�r3r3r4ry{r�z ASTPostfixInc.describe_signaturer�r3r3r3r4r0t�
���r0c
@r/)�
ASTPostfixDecr�rzcCr��Nr�r3r�r3r3r4r��r�zASTPostfixDec._stringifyrrLcCr2)Nrr3r r3r3r4rT�r3zASTPostfixDec.get_idrZr[r\rr,r-NcCr�r7r4r�r3r3r4ry�r�z ASTPostfixDec.describe_signaturer�r3r3r3r4r6�r5r6c
@sheZdZdedddfdd�Zdedefdd	�Zd
ededefdd
�Z	de
deddddddf
dd�ZdS)�ASTPostfixCallExpr�lst��ASTParenExprList�ASTBracedInitListrzNcCr�r1�r9)r2r9r3r3r4r5�r�zASTPostfixCallExpr.__init__r�cCrr1r=r�r3r3r4r��r�zASTPostfixCallExpr._stringifyrrLcCs:d|g}|jjD]
}|�|�|��q|�d�d�|�S)Nrr�r�)r9�exprsrsrTr�)r2rrLr�r�r3r3r4rT�s


zASTPostfixCallExpr.get_idrZr[r\rr,r-cCrr1)r9ryr�r3r3r4ry�rz%ASTPostfixCallExpr.describe_signature)r;r<r=rr5r*r>r�rhrTrryr3r3r3r4r8�s
���r8c
@sdeZdZdddeefdd�Zdedefdd	�Zd
e	defdd�Z
d
ededdddddf
dd�ZdS)�ASTPostfixExprr]�ASTType�	postFixescCr~r1)r]rA)r2r]rAr3r3r4r5�r�zASTPostfixExpr.__init__r�rzcCs0||j�g}|jD]	}|�||��q	d�|�S�Nr�)r]rArsr�)r2r�r��pr3r3r4r��s

zASTPostfixExpr._stringifyrLcCs(|j�|�}|jD]}|�||�}q	|Sr1)r]rTrA)r2rL�idrCr3r3r4rT�s
zASTPostfixExpr.get_idrZr[r\rr,r-NcCs2|j�||||�|jD]
}|�||||�qdSr1)r]ryrA)r2rZr[r\r,rCr3r3r4ry�s
�z!ASTPostfixExpr.describe_signature)
r;r<r=rrr5r*r>r�rhrTrryr3r3r3r4r?�s
���r?c
@sdeZdZdedddefdd�Zdedefd	d
�Zdedefdd
�Z	de
deddddddf
dd�ZdS)�ASTExplicitCastr�typr@r	cCs"|tvsJ�||_||_||_dSr1)�_id_explicit_castrrFr	)r2rrFr	r3r3r4r5�s
zASTExplicitCast.__init__r�rzcCsP|jg}|�d�|�||j��|�d�|�||j��|�d�d�|�S)Nr�z>(rr�)rrsrFr	r�r�r3r3r4r��s



zASTExplicitCast._stringifyrLcCs"t|j|j�|�|j�|�Sr1)rGrrFrTr	rSr3r3r4rT�s

�
�zASTExplicitCast.get_idrZr[r\rr,r-NcCs||t�|j|j�7}|t�dd�7}|j�||||�|t�dd�7}|t�dd�7}|j�||||�|t�dd�7}dS)Nr�r�r�r)rr�rr�rFryr	r�r3r3r4ry�sz"ASTExplicitCast.describe_signature�r;r<r=r>r�r5r*r�rhrTrryr3r3r3r4rE�s	
���rEc
@sheZdZdedefdefdd�Zdedefdd	�Z	d
e
defdd�Zd
ededdddddf
dd�Z
dS)�	ASTTypeId�
typeOrExprr@�isTypecCr~r1)rJrK)r2rJrKr3r3r4r5�r�zASTTypeId.__init__r�rzcCr)Nztypeid(r)rJr�r3r3r4r��rYzASTTypeId._stringifyrLcCs|jrdnd}||j�|�S)N�ti�te)rKrJrT)r2rLr]r3r3r4rT�szASTTypeId.get_idrZr[r\rr,r-NcC�F|t�dd�7}|t�dd�7}|j�||||�|t�dd�7}dS)Nr�r�r)rr�r�rJryr�r3r3r4ry��zASTTypeId.describe_signature)r;r<r=rr�rEr5r*r>r�rhrTrryr3r3r3r4rI�s
���rIc
@s`eZdZdedefdd�Zdedefdd�Zd	edefd
d�Z	de
d
eddddddf
dd�ZdS)�ASTUnaryOpExprr�r	cCr~r1�r�r	)r2r�r	r3r3r4r5�r�zASTUnaryOpExpr.__init__r�rzcCs2|jddvr|jd||j�S|j||j�S)Nr�cnr�rQr�r3r3r4r��szASTUnaryOpExpr._stringifyrLcCst|j|j�|�Sr1)�_id_operator_unary_v2r�r	rTrSr3r3r4rT�szASTUnaryOpExpr.get_idrZr[r\rr,r-NcCsZ|jddvr|t�|j|j�7}|t��7}n
|t�|j|j�7}|j�||||�dS)NrrR)r�rr�r�rr	ryr�r3r3r4ry�s
z!ASTUnaryOpExpr.describe_signaturerHr3r3r3r4rP�s
���rPc
@r)�ASTSizeofParamPackrDcCr�r1rIrGr3r3r4r5r�zASTSizeofParamPack.__init__r�rzcCr)Nz
sizeof...(rrIr�r3r3r4r�
rYzASTSizeofParamPack._stringifyrLcC�d|j�|�S)N�sZ)rDrTrSr3r3r4rT
r:zASTSizeofParamPack.get_idrZr[r\rr,r-NcCs\|t�dd�7}|t�dd�7}|t�dd�7}|jj|d||ddd�|t�dd�7}dS)Nr}rr�r`r�)r,r]r^r)rr�r�rDryr�r3r3r4rys�z%ASTSizeofParamPack.describe_signature)r;r<r=rCr5r*r>r�rhrTrryr3r3r3r4rTrrTc
@�XeZdZddd�Zdedefdd�Zd	edefd
d�Zde	d
eddddddf
dd�Z
dS)�
ASTSizeofTyperFr@cCr�r1�rF�r2rFr3r3r4r5r�zASTSizeofType.__init__r�rzcCr)Nzsizeof(rrYr�r3r3r4r�rYzASTSizeofType._stringifyrLcCrU)N�st�rFrTrSr3r3r4rT!r:zASTSizeofType.get_idrZr[r\rr,r-NcCrN)Nr}r�r�rr�r�rFryr�r3r3r4ry$rOz ASTSizeofType.describe_signature�rFr@�r;r<r=r5r*r>r�rhrTrryr3r3r3r4rX�

���rXc
@r)�
ASTSizeofExprr	cCr�r1r
rr3r3r4r5-r�zASTSizeofExpr.__init__r�rzcCr))Nzsizeof r
r�r3r3r4r�0rKzASTSizeofExpr._stringifyrLcCrU)N�szrrSr3r3r4rT3r:zASTSizeofExpr.get_idrZr[r\rr,r-NcC�2|t�dd�7}|t��7}|j�||||�dS)Nr}�rr�r�r	ryr�r3r3r4ry6�z ASTSizeofExpr.describe_signaturerr3r3r3r4ra,rrac
@rW)�ASTAlignofExprrFr@cCr�r1rYrZr3r3r4r5>r�zASTAlignofExpr.__init__r�rzcCr)Nzalignof(rrYr�r3r3r4r�ArYzASTAlignofExpr._stringifyrLcCrU)N�atr\rSr3r3r4rTDr:zASTAlignofExpr.get_idrZr[r\rr,r-NcCrN)Nr>r�rr]r�r3r3r4ryGrOz!ASTAlignofExpr.describe_signaturer^r_r3r3r3r4rf=r`rfc
@r)�ASTNoexceptExprr	cCr�r1r
rr3r3r4r5Pr�zASTNoexceptExpr.__init__r�rzcCr)N�	noexcept(rr
r�r3r3r4r�SrYzASTNoexceptExpr._stringifyrLcCrU)N�nxrrSr3r3r4rTVr:zASTNoexceptExpr.get_idrZr[r\rr,r-NcCrN)Nrmr�r�rr�r�r	ryr�r3r3r4ryYrOz"ASTNoexceptExpr.describe_signaturerr3r3r3r4rhOrrhc
@speZdZdededddedddf
d	d
�Zdedefdd
�Zde	defdd�Z
dededdddddf
dd�ZdS)�
ASTNewExprr��isNewTypeIdrFr@�initListr:rzNcC�||_||_||_||_dSr1)r�rmrFrn)r2r�rmrFrnr3r3r4r5b�
zASTNewExpr.__init__r�cCs^g}|jr
|�d�|�d�|jr|�||j��nJ�|jdur*|�||j��d�|�S)Nr�znew Fr�)r�rsrmrFrnr�r�r3r3r4r�is



zASTNewExpr._stringifyrLcCsTdg}|�d�|�|j�|��|jdur |�|j�|��n|�d�d�|�S)Nr�rr�r�)rsrFrTrnr�r�r3r3r4rTws



zASTNewExpr.get_idrZr[r\rr,r-cCst|jr|t�dd�7}|t�dd�7}|t��7}|jr&|j�||||�nJ�|jdur8|j�||||�dSdS)Nr�rl)	r�rr�r�r�rmrFryrnr�r3r3r4ry�s
�zASTNewExpr.describe_signature)
r;r<r=rErr5r*r>r�rhrTrryr3r3r3r4rlas�
�
���rlc
@sdeZdZdededefdd�Zdedefdd	�Zd
e	defdd�Z
d
ededdddddf
dd�ZdS)�
ASTDeleteExprr��arrayr	cC�||_||_||_dSr1)r�rrr	)r2r�rrr	r3r3r4r5��
zASTDeleteExpr.__init__r�rzcCsHg}|jr
|�d�|�d�|jr|�d�|�||j��d�|�S)Nr�zdelete z[] r�)r�rsrrr	r�r�r3r3r4r��s



zASTDeleteExpr._stringifyrLcCs |jrd}nd}||j�|�S)Nr�r�)rrr	rT�r2rLrDr3r3r4rT�szASTDeleteExpr.get_idrZr[r\rr,r-NcCsj|jr|t�dd�7}|t�dd�7}|t��7}|jr*|t�dd�7}|t��7}|j�||||�dS)Nr�rXr�)r�rr�r�r�rrr	ryr�r3r3r4ry�sz ASTDeleteExpr.describe_signature)
r;r<r=rEr�r5r*r>r�rhrTrryr3r3r3r4rq�s

���rqc
@s`eZdZdddefdd�Zdedefdd	�Zd
edefdd�Z	d
e
deddddddf
dd�ZdS)�ASTCastExprrFr@r	cCr~r1)rFr	)r2rFr	r3r3r4r5�r�zASTCastExpr.__init__r�rzcC�:dg}|�||j��|�d�|�||j��d�|�S�Nr�rr�)rsrFr	r�r�r3r3r4r���


zASTCastExpr._stringifyrLcCsd|j�|�|j�|�S)N�cv)rFrTr	rSr3r3r4rT�szASTCastExpr.get_idrZr[r\rr,r-NcCsH|t�dd�7}|j�||||�|t�dd�7}|j�||||�dSr
)rr�rFryr	r�r3r3r4ry�szASTCastExpr.describe_signaturerr3r3r3r4rv�s
���rvc
@sheZdZdeedeefdd�Zdedefdd�Zd	e	defd
d�Z
ded
eddddddf
dd�ZdS)�ASTBinOpExprr>�opscC�8t|�dksJ�t|�t|�dksJ�||_||_dSr��rFr>r|�r2r>r|r3r3r4r5��
zASTBinOpExpr.__init__r�rzcC�tg}|�||jd��tdt|j��D] }|�d�|�|j|d�|�d�|�||j|��qd�|�S�NrrNr�r��rsr>r�rFr|r��r2r�r�r�r3r3r4r���


zASTBinOpExpr._stringifyrLcCsn|dksJ�g}tt|j��D]}|�t|j|�|�|j|�|��q|�|jd�|��d�|�S)Nr�r�r��r�rFr|rsrr>rTr��r2rLr�r�r3r3r4rT�s
zASTBinOpExpr.get_idrZr[r\rr,r-NcC�|jd�||||�tdt|j��D]E}|t��7}|j|d}t|d�td�kr?t|d�td�kr?|t�||�7}n|t�	||�7}|t��7}|j|�||||�qdS�NrrNr��z�
r>ryr�rFrr�r|r�r�r�r2rZr[r\r,r�r�r3r3r4ry��(�zASTBinOpExpr.describe_signature)
r;r<r=rr�r>r5r*r�rhrTrryr3r3r3r4r{�s

	���r{c
@speZdZdeeedfdeddfdd�Zdede	fdd	�Z
d
ede	fdd�Zd
e
de	ddddddf
dd�ZdS)r<r>�
trailingCommarzNcCr~r1)r>r��r2r>r�r3r3r4r5�r�zASTBracedInitList.__init__rLc�dd��fdd�|jD��S)Nzil%sEr�c3r�r1r��r�r�r�r3r4r��r�z+ASTBracedInitList.get_id.<locals>.<genexpr>�r�r>rSr3r�r4rT��zASTBracedInitList.get_idr�cs4�fdd�|jD�}|jrdnd}dd�|�|fS)Nc�g|]}�|��qSr3r3r��r�r3r4�
<listcomp>�z0ASTBracedInitList._stringify.<locals>.<listcomp>r�r�z{%s%s}�, )r>r�r�)r2r�r>r�r3r�r4r�szASTBracedInitList._stringifyrZr[r\rr,r-cCs�t|�|t�dd�7}d}|jD]}|s$|t�dd�7}|t��7}nd}|�||||�q|jr:|t�dd�7}|t�dd�7}dS)N�{Tr�F�})r6rr�r>r�ryr��r2rZr[r\r,r�r�r3r3r4rys
z$ASTBracedInitList.describe_signature)r;r<r=rrr�rEr5rhr>rTr*r�rryr3r3r3r4r<�s�
�
���r<c
@speZdZdeeeefdeefdd�Zde	defdd�Z
d	edefd
d�Zde
d
eddddddf
dd�ZdS)�ASTAssignmentExprr>r|cCr}r�r~rr3r3r4r5r�zASTAssignmentExpr.__init__r�rzcCr�r�r�r�r3r3r4r�r�zASTAssignmentExpr._stringifyrLcCsbg}tt|j��D]}|�t|j|�|�|j|�|��q	|�|jd�|��d�|�S)Nr�r�r�r�r3r3r4rT's
zASTAssignmentExpr.get_idrZr[r\rr,r-NcCr�r�r�r�r3r3r4ry/r�z$ASTAssignmentExpr.describe_signature)r;r<r=rrr�r<r>r5r*r�rhrTrryr3r3r3r4r�s"

���r�c
@s`eZdZdeefdd�Zdedefdd�Zde	defd	d
�Z
deded
dddddf
dd�ZdS)�ASTCommaExprr>cCst|�dksJ�||_dSrE)rFr>�r2r>r3r3r4r5>s
zASTCommaExpr.__init__r�rzc�d��fdd�|jD��S)Nr�c3��|]}�|�VqdSr1r3r�r�r3r4r�C��z*ASTCommaExpr._stringify.<locals>.<genexpr>r�r�r3r�r4r�B�zASTCommaExpr._stringifyrLcCsdtd}g}tt|j�d�D]}|�|�|�|j|�|��q|�|jd�|��d�|�S)Nr�rNr�r�)rr�rFr>rsrTr�)r2rL�id_r�r�r3r3r4rTEs

zASTCommaExpr.get_idrZr[r\rr,r-NcCsb|jd�||||�tdt|j��D]}|t�dd�7}|t��7}|j|�||||�qdS)NrrNr�)r>ryr�rFrr�r�)r2rZr[r\r,r�r3r3r4ryNs�zASTCommaExpr.describe_signature)
r;r<r=rr�r5r*r>r�rhrTrryr3r3r3r4r�=s
	���r�c
@s\eZdZdefdd�Zdedefdd�Zdedefd	d
�Zde	ded
dddddf
dd�Z
dS)�ASTFallbackExprr	cCr�r1r
rr3r3r4r5Xr�zASTFallbackExpr.__init__r�rzcCrUr1r
r�r3r3r4r�[rVzASTFallbackExpr._stringifyrLcCs
t|j�Sr1)r>r	rSr3r3r4rT^r�zASTFallbackExpr.get_idrZr[r\rr,r-NcCr�r1)r
r�r	r�r3r3r4ryar�z"ASTFallbackExpr.describe_signaturer�r3r3r3r4r�Wrr�c@s~eZdZdefdd�Zdefdd�Zdedefdd�Zd	e	d
e	ddd
dddf
dd�Z
d	e	dedddeded
dddfdd�ZdS)r|rzcCr�r�r3r8r3r3r4rJnr�zASTOperator.is_anoncCr��NTr3r8r3r3r4r�qr�zASTOperator.is_operatorrLcC�t��r1�r�rSr3r3r4rTtrVzASTOperator.get_idrZ�	identnoder\rr,r-NcCr�)zARender the prefix into signode, and the last part into identnode.r��r2rZr�r\r,r3r3r4�_describe_identifierwsz ASTOperator._describe_identifierr[r]r^c
Cs�t|�|dkrt��}|�||||�||7}dS|dkrU|t|�|}tjddd|ddd�}	|��|	d<t��}
|�||
||�|
�	�}|	t�||�7}	||	7}dSt�
�}|�||||�||7}dS)Nrir`r�rarDrbrh)r6rrrr�r>rrqr
r��astextr�)
r2rZr[r\r]r^r,�mainNamervrw�	containerr��addNamer3r3r4ry|s*�zASTOperator.describe_signature)r;r<r=rErJr�rhr>rTrr�ryr3r3r3r4r|ms,
��
�
�����r|c
@s`eZdZdeddfdd�Zdedefdd�Zd	edefd
d�Zde	d
e	ddddddf
dd�Z
dS)�ASTOperatorBuildInr�rzNcCr�r1�r�)r2r�r3r3r4r5�r�zASTOperatorBuildIn.__init__rLcCsD|dkrt}|j|vrt��nt}|j|vrtd|j��||jS)NrNzBInternal error: Built-in operator "%s" can not be mapped to an id.)�_id_operator_v1r�r)rrt)r2rL�idsr3r3r4rT�s
�
�
zASTOperatorBuildIn.get_idr�cCs,|jdvs|jddvrd|jSd|jS)N�rlr�rXr�r�abcnox�	operator rqr�r�r3r3r4r��s

zASTOperatorBuildIn._stringifyrZr�r\rr,r-cCsL|t�dd�7}|jdvs|jddvr|t��7}|t�|j|j�7}dS)Nrqr�rr�)rr�r�r�rr�r3r3r4r��sz'ASTOperatorBuildIn._describe_identifier)r;r<r=r>r5rhrTr*r�rr�r3r3r3r4r��s
���r�c
@s`eZdZdeddfdd�Zdedefdd�Zd	edefd
d�Z	de
d
e
ddddddf
dd�ZdS)�ASTOperatorLiteralrDrzNcCr�r1rIrGr3r3r4r5�r�zASTOperatorLiteral.__init__rLcCs|dkrt��d|j�|�S)NrN�li)r)rDrTrSr3r3r4rT�szASTOperatorLiteral.get_idr�cCr))NrnrIr�r3r3r4r��rKzASTOperatorLiteral._stringifyrZr�r\rr,r-cCs:|t�dd�7}|t�dd�7}|j�|d|dd|�dS)Nrq�""r`r�)rr�r�rDryr�r3r3r4r��sz'ASTOperatorLiteral._describe_identifier)r;r<r=rCr5rhr>rTr*r�rr�r3r3r3r4r��s
���r�c
@sfeZdZddd�Zdedefdd	�Zd
edefdd�Zdefd
d�Z	de
de
ddddddf
dd�ZdS)�ASTOperatorTyper�r@rzNcCr�r1)r�)r2r�r3r3r4r5�r�zASTOperatorType.__init__rLcCs(|dkrd|j�|�Sd|j�|�S)NrNzcastto-%s-operatorrz)r�rTrSr3r3r4rT��zASTOperatorType.get_idr�cCsd�d||j�g�S)Nr�r�)r�r�r�r3r3r4r��r�zASTOperatorType._stringifycCst|�Sr1�r>r8r3r3r4�get_name_no_template�r3z$ASTOperatorType.get_name_no_templaterZr�r\rr,r-cCs2|t�dd�7}|t��7}|j�|d||�dS)Nrqr`)rr�r�r�ryr�r3r3r4r��rez$ASTOperatorType._describe_identifier)r�r@rzN)r;r<r=r5rhr>rTr*r�r�rr�r3r3r3r4r��s

���r�c
@r�)�ASTTemplateArgConstantr�rzNcCr�r1r�r�r3r3r4r5�r�zASTTemplateArgConstant.__init__r�cCrr1r�r�r3r3r4r��r�z!ASTTemplateArgConstant._stringifyrLcCsD|dkrt|��dd�S|dkrdt|�dSd|j�|�dS)NrNr�r�r��Xr�)r>r�r�rTrSr3r3r4rT�s
zASTTemplateArgConstant.get_idrZr[r\rr,r-cCst|�|j�||||�dSr1)r6r�ryr�r3r3r4ry�sz)ASTTemplateArgConstant.describe_signaturerr3r3r3r4r��s
���r�c
@speZdZdeedefdeddfdd�Zdede	fd	d
�Z
dede	fdd
�Zde
de	ddddddf
dd�ZdS)r}�argsr@�
packExpansionrzNcCs|dusJ�||_||_dSr1)r�r�)r2r�r�r3r3r4r5�s
zASTTemplateArgs.__init__rLcs��dkr%g}|�d�|�d��fdd�|jD���|�d�d�|�Sg}|�d�t|j�dkr`|jdd	�D]
}|�|����q:|jrM|�d
�|�|jd	����|jr`|�d�|�d�d�|�S)NrN�:r*c3r�r1r��r�r�r�r3r4r�r�z)ASTTemplateArgs.get_id.<locals>.<genexpr>r��Irr��Jr�)rsr�r�rFrTr�)r2rLr�r�r3r�r4rT�s$
 






zASTTemplateArgs.get_idr�cs4d��fdd�|jD��}|jr|d7}d|dS)Nr�c3r�r1r3r�r�r3r4r�r�z-ASTTemplateArgs._stringify.<locals>.<genexpr>rr�r�)r�r�r�r�r3r�r4r�szASTTemplateArgs._stringifyrZr[r\rr,r-cCs�t|�|t�dd�7}d}|jD]}|s#|t�dd�7}|t��7}d}|j|d||d�q|jr:|t�dd�7}|t�dd�7}dS)	Nr�Tr�Fr`�r,rr�)r6rr�r�r�ryr�)r2rZr[r\r,r�r�r3r3r4rys
z"ASTTemplateArgs.describe_signature)r;r<r=rrr�rEr5rhr>rTr*r�rryr3r3r3r4r}�s�
�
���r}c
@r�)�ASTTrailingTypeSpecrLrzcCr�r1r�rSr3r3r4rT-r�zASTTrailingTypeSpec.get_idrZr[r\rr,r-NcCr�r1r�r�r3r3r4ry0r�z&ASTTrailingTypeSpec.describe_signaturer�r3r3r3r4r�,r�r�c
@sleZdZdeedeeddfdd�Zdedefdd	�Zd
edefdd�Z	d
e
deddddddf
dd�ZdS)�ASTTrailingTypeSpecFundamentalr��
canonNamesrzNcCs<t|�dksJ�t|�t|�ksJ||f��||_||_dSrE)rFr�r�)r2r�r�r3r3r4r56s
z'ASTTrailingTypeSpecFundamental.__init__r�cCsd�|j�S)Nr�)r�r�r�r3r3r4r�=r�z)ASTTrailingTypeSpecFundamental._stringifyrLcCsl|dkr"g}|jD]}|tvr|�t|�q	|�|�q	d�|�Sd�|j�}|tvr2td|��t|S)NrNr�r�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.)r��_id_fundamental_v1rsr��_id_fundamental_v2rt)r2rLr�r�r�r3r3r4rT@s

��z%ASTTrailingTypeSpecFundamental.get_idrZr[r\rr,r-cCs:d}|jD]}|s|t��7}nd}|t�||�7}qdS)NTF)r�rr��desc_sig_keyword_type)r2rZr[r\r,r�r�r3r3r4ryRs
�z1ASTTrailingTypeSpecFundamental.describe_signature)r;r<r=rr>r5r*r�rhrTrryr3r3r3r4r�5s
���r�c
@r�)�ASTTrailingTypeSpecDecltypeAutor�rzcCr�)Nr�r3r�r3r3r4r�^r�z*ASTTrailingTypeSpecDecltypeAuto._stringifyrLcCs|dkrt��dS)NrNr�)r)rSr3r3r4rTasz&ASTTrailingTypeSpecDecltypeAuto.get_idrZr[r\rr,r-NcCsD|t�dd�7}|t�dd�7}|t�dd�7}|t�dd�7}dS)NrVr�rBr)rr�r�r�r3r3r4ryfsz2ASTTrailingTypeSpecDecltypeAuto.describe_signaturer�r3r3r3r4r�]�
���r�c
@r)�ASTTrailingTypeSpecDecltyper	cCr�r1r
rr3r3r4r5or�z$ASTTrailingTypeSpecDecltype.__init__r�rzcCr)Nz	decltype(rr
r�r3r3r4r�rrYz&ASTTrailingTypeSpecDecltype._stringifyrLcCs"|dkrt��d|j�|�dS)NrN�DTr�)r)r	rTrSr3r3r4rTusz"ASTTrailingTypeSpecDecltype.get_idrZr[r\rr,r-NcCrN)NrVr�rrkr�r3r3r4ryzrOz.ASTTrailingTypeSpecDecltype.describe_signaturerr3r3r3r4r�ns
���r�c
@s~eZdZdededeeddfdd�Zedefdd	��Zd
e	defdd�Z
d
edefdd�Zde
deddddddf
dd�ZdS)�ASTTrailingTypeSpecNamer]�
nestedName�placeholderTyperzNcCrsr1)r]r�r�)r2r]r�r�r3r3r4r5��
z ASTTrailingTypeSpecName.__init__cCrUr1�r�r8r3r3r4r���zASTTrailingTypeSpecName.namerLcCrr1)r�rTrSr3r3r4rT�r�zASTTrailingTypeSpecName.get_idr�cCsZg}|jr|�|j�|�d�|�||j��|jdur(|�d�|�|j�d�|�S)Nr�r�)r]rsr�r�r�r�r3r3r4r��s



z"ASTTrailingTypeSpecName._stringifyrZr[r\rr,r-cCs�|jr|t�|j|j�7}|t��7}|jj||||d�|jdurc|t��7}|jdkr7|t�dd�7}dS|jdkr^|t�dd�7}|t�dd�7}|t�dd�7}|t�dd�7}dSJ|j��dS)Nr�rBr�rVr�r)r]rr�r�r�ryr�r�r�r3r3r4ry�s



�z*ASTTrailingTypeSpecName.describe_signature)r;r<r=r>r�rr5r�r�rhrTr*r�rryr3r3r3r4r��s"
�
�
���r�c
@sveZdZ	ddeddeddfdd�Zdd	ed
edddefd
d�Zde	defdd�Z
dededdddddf
dd�ZdS)�ASTFunctionParameterF�arg)�ASTTypeWithInit�'ASTTemplateParamConstrainedTypeWithInit�ellipsisrzNcCr~r1)r�r�)r2r�r�r3r3r4r5�s
zASTFunctionParameter.__init__rL�
objectTyper,r-cCs,|r|jjj|dd�S|jrdS|j�|�S)NF��prefixedr�)�parentr.rTr�r��r2rLr�r,r3r3r4rT�s
zASTFunctionParameter.get_idr�cCs|jrdS||j�S�Nr)r�r�r�r3r3r4r��s
zASTFunctionParameter._stringifyrZr[r\rcCs:t|�|jr|t�dd�7}dS|jj||||d�dS)Nrr�)r6r�rr�r�ryr�r3r3r4ry�sz'ASTFunctionParameter.describe_signature�F�NN)
r;r<r=rrEr5rhr>rTr*r�rryr3r3r3r4r��s ��
�
���r�c
@sNeZdZdeefdd�Zdedefdd�Zde	d	ed
ddd
ddf
dd�Z
dS)�ASTNoexceptSpecr	cCr�r1r
rr3r3r4r5�r�zASTNoexceptSpec.__init__r�rzcC�|jrd||j�dSdS)Nrirrmr
r�r3r3r4r��szASTNoexceptSpec._stringifyrZr[r\rr,r-NcCsP|t�dd�7}|jr&|t�dd�7}|j�|d||�|t�dd�7}dSdS)Nrmr�r`r�rr�r	r�ryr�r3r3r4ry�s�z"ASTNoexceptSpec.describe_signature�r;r<r=rr�r5r*r>r�rryr3r3r3r4r��r�r�c@s�eZdZdeedededeededdded	ed
ee	deedd
fdd�Z
edeefdd��Zde
defdd�Zde
defdd�Zdedefdd�Zdededddddd
f
d d!�Zd
S)"�ASTParametersQualifiersr�r�rP�refQual�
exceptionSpec�trailingReturnr@�override�final�attrs�initializerrzNcCs@||_||_||_||_||_||_||_||_|	|_|
|_	dSr1)
r�r�rPr�r�r�r�r�r�r�)r2r�r�rPr�r�r�r�r�r�r�r3r3r4r5�s
z ASTParametersQualifiers.__init__cCrUr1�r�r8r3r3r4�function_params�r�z'ASTParametersQualifiers.function_paramsrLcCslg}|jr
|�d�|jr|dkr|�d�n|�d�|jdkr'|�d�n
|jdkr1|�d�d	�|�S)
N�VrNr��Kr��Or��Rr�)r�rsrPr�r�r�r3r3r4�get_modifiers_id�s





z(ASTParametersQualifiers.get_modifiers_idcsd�dkrt|j�dkr
dSdd��fdd�|jD��St|j�dkr%dSd��fd	d�|jD��S)
NrNrr�rr*c3r�r1r�r�r�r3r4r�
r�z7ASTParametersQualifiers.get_param_id.<locals>.<genexpr>r�c3r�r1r�r�r�r3r4r�r�)rFr�r�rSr3r�r4�get_param_idsz$ASTParametersQualifiers.get_param_idr�cCs.g}|�d�d}|jD]}|s|�d�d}|�t|��q|�d�|jr,|�d�|jr4|�d�|jrB|�d�|�|j�|jrR|�d�|�||j��|jrb|�d	�|�||j��|jrj|�d
�|j	rr|�d�|j
D]}|�d�|�||��qu|jr�|�d�|�|j�d
�|�S)Nr�Tr�Frz	 volatilez constr�z -> � finalz	 override� = r�)
rsr�r>r�rPr�r�r�r�r�r�r�r�)r2r�r�r�r��attrr3r3r4r�sB














z"ASTParametersQualifiers._stringifyrZr[r\rr,r-cCs:t|�|dkr,t��}|jD]}tjdddd�}|j|d||d�||7}q||7}n3|t�dd�7}d}|jD]}|sK|t�dd�7}|t��7}d	}|j|d
||d�q9|t�dd�7}dtd
t	ddfdd�}	|j
rr|	|d�|jrz|	|d�|jr�|t��7}|t�|j|j�7}|j
r�|t��7}|j
�||||�|jr�|t��7}|t�dd�7}|t��7}|j�||||�|jr�|	|d�|jr�|	|d�|jD]
}
|t��7}|
�|�q�|j�r|t��7}|t�dd�7}|t��7}|jdvs�J�|jdk�r|t�dd�7}dS|t�|j|j�7}dSdS)Nrir�T)�noemphrkr�r�r�Fr`rrZr_rzcSs |t��7}|t�||�7}dSr1�rr�r��rZr_r3r3r4�	_add_annoIsz=ASTParametersQualifiers.describe_signature.<locals>._add_annor�rPr�r�r�r���0rXrWr�)r6r�desc_parameterlistr��desc_parameterryr�r�rr>r�rPr�r�r�rr�r�r�r�r�r�)r2rZr[r\r,�	paramlistr�rkr�r�r�r3r3r4ry3sb








�z*ASTParametersQualifiers.describe_signature)r;r<r=rr�rErr>r�r$r5r�r�rhr�r�r*r�rryr3r3r3r4r��s<�������
�
#���r�c@sNeZdZdeeddfdd�Zdedefdd�Zd	e	d
ddd
ddfdd�Z
dS)�ASTExplicitSpecr	rzNcCr�r1r
rr3r3r4r5or�zASTExplicitSpec.__init__r�cCs>dg}|jdur|�d�|�||j��|�d�d�|�S)Nr^r�rr�)r	rsr�r�r3r3r4r�rs



zASTExplicitSpec._stringifyrZr\rr,r-cCsT|t�dd�7}|jdur(|t�dd�7}|j�|d||�|t�dd�7}dSdS)Nr^r�r`rr�)r2rZr\r,r3r3r4ryzs
�z"ASTExplicitSpec.describe_signaturer�r3r3r3r4rns���rc@s�eZdZdededededeedededed	ed
ededeed
dfdd�Z	ddd�Z
ded
efdd�Zde
ddddd
dfdd�ZdS)�ASTDeclSpecsSimple�storage�threadLocalrgr��explicitSpecrQrRrSr�rPrdr�rzNc

CsL||_||_||_||_||_||_||_||_|	|_|
|_	||_
||_dSr1)rrrgr�rrQrRrSr�rPrdr�)
r2rrrgr�rrQrRrSr�rPrdr�r3r3r4r5�s
zASTDeclSpecsSimple.__init__�othercCs�|s|St|jp
|j|jp|j|jp|j|jp|j|jp|j|jp#|j|jp(|j|jp-|j|j	p2|j	|j
p7|j
|jp<|j|j|j�Sr1)
rrrrgr�rrQrRrSr�rPrdr�)r2rr3r3r4�	mergeWith�s










�zASTDeclSpecsSimple.mergeWithr�cs�g}|��fdd�|jD��|jr|�|j�|jr |�d�|jr(|�d�|jr0|�d�|jr8|�d�|jrC|��|j��|j	rK|�d�|j
rS|�d�|jr[|�d	�|jrc|�d
�|j
rk|�d�d�|�S)
Nc3r�r1r3)r�r�r�r3r4r��r�z0ASTDeclSpecsSimple._stringify.<locals>.<genexpr>r�rgrdr�rQrRrSr�rPr�)�extendr�rrsrrgrdr�rrQrRrSr�rPr�r�r3r�r4r��s2









zASTDeclSpecsSimple._stringifyrZr\rr,r-csd�|jD]}�r|t��7}d�|�|�qdtdtdtf�fdd�}|jr-|||j��|jr5||d��|j	r=||d	��|j
rE||d
��|jrM||d��|jrb�rX|t��7}|j�|||�d�|j
rj||d��|jrr||d
��|jrz||d��|jr�||d��|jr�||d��dSdS)NFTrZr_rzcs$�r|t��7}|t�||�7}dSr�r�r���addSpacer3r4�_add�sz3ASTDeclSpecsSimple.describe_signature.<locals>._addr�rgrdr�rQrRrSr�rP)r�rr�ryrr>rErrrgrdr�rrQrRrSr�rP)r2rZr\r,r�r
r3rr4ry�sB








�z%ASTDeclSpecsSimple.describe_signature)rrrzr)r;r<r=r>rErrrr$r5r	r*r�rryr3r3r3r4r�s:��������
�
���rc
@sleZdZdededededdf
dd�Zd	edefd
d�Zde	defd
d�Z
dededdddddf
dd�ZdS)�ASTDeclSpecs�outer�	leftSpecs�
rightSpecs�trailingrzNcCs,||_||_||_|j�|j�|_||_dSr1)rrrr	�allSpecs�trailingTypeSpec)r2rrrrr3r3r4r5�s

zASTDeclSpecs.__init__rLcCs�|dkr&g}|�|j�|��|jjr|�d�|jjr!|�d�d�|�Sg}|jjr1|�d�|jjr:|�d�|jdurH|�|j�|��d�|�S)NrNr�r�r�r�)rsrrTrr�rPr�r�r3r3r4rT�s 






zASTDeclSpecs.get_idr�cCs�g}||j�}t|�dkr|�|�|jrCt|�dkr |�d�|�||j��t|j�}t|�dkrCt|�dkr>|�d�|�|�d�|�S�Nrr�r�)rrFrsrr>rr�)r2r�r�r��rr3r3r4r�		s






zASTDeclSpecs._stringifyrZr[r\rr,r-cCs�t|�t|�}|j�|||�t|�|k}|jrP|r!|t��7}t|�}|jj||||d�t|�|k}tt|j��dkrR|rF|t��7}|j�|||�dSdSdS)Nr�r)	r6rFrryrrr�r>r)r2rZr[r\r,�numChildrenrr3r3r4ry	s$��zASTDeclSpecs.describe_signature)
r;r<r=r>rr�r5rhrTr*r�rryr3r3r3r4r�s&���
�
���rc
@r)�ASTArray�sizecCr�r1�r)r2rr3r3r4r52	r�zASTArray.__init__r�rzcCr�)Nr$r%r�rr�r3r3r4r�5	szASTArray._stringifyrLcCsN|dkrdS|dkr|jrdt|j�dSdS|jr%d|j�|�dSdS)NrN�Ar�r�A_)rr>rTrSr3r3r4rT;	szASTArray.get_idrZr[r\rr,r-NcCsDt|�|t�dd�7}|jr|j�|d||�|t�dd�7}dS)Nr$r`r%)r6rr�rryr�r3r3r4ryH	s
zASTArray.describe_signaturerr3r3r3r4r1	s

���rc
@s�eZdZedefdd��Zejdeddfdd��Zedefdd��Zede	e
fd	d
��Zed$dd
��Zdefdd�Z
dedefdd�Zdedefdd�Zdedefdd�Zdededefdd�Zdefdd�Zdededdd d!ddf
d"d#�ZdS)%�
ASTDeclaratorrzcCr�r1r�r8r3r3r4r�R	r�zASTDeclarator.namer�NcCr�r1r�rr3r3r4r�V	r�cCr�r1r�r8r3r3r4�isPackZ	r�zASTDeclarator.isPackcCr�r1r�r8r3r3r4r�^	r�zASTDeclarator.function_paramsr@cCr�r1r�r8r3r3r4r�b	r�zASTDeclarator.trailingReturncCr�r1r�r8r3r3r4�require_space_after_declSpecsf	r�z+ASTDeclarator.require_space_after_declSpecsrLcCr�r1r�rSr3r3r4r�i	r�zASTDeclarator.get_modifiers_idcCr�r1r�rSr3r3r4r�l	r�zASTDeclarator.get_param_idcCr�r1r�rSr3r3r4�get_ptr_suffix_ido	r�zASTDeclarator.get_ptr_suffix_id�returnTypeIdcCr�r1r��r2rLr!r3r3r4�get_type_idr	r�zASTDeclarator.get_type_idcCr�r1r�r8r3r3r4�is_function_typeu	r�zASTDeclarator.is_function_typerZr[r\rr,r-cCr�r1r�r�r3r3r4ryx	r�z ASTDeclarator.describe_signature�rzr@)r;r<r=r�r�r��setterrErrr�r�r�rrhr>r�r�r r#r$rryr3r3r3r4rQ	s0
���rc
@s"eZdZdedeededdfdd�Zedefdd	��Z	e	j
d
eddfdd	��Z	edefdd
��Zedee
fdd��Zed,dd��Zdedefdd�Zdedefdd�Zdedefdd�Zdededefdd�Zdefdd�Zdefdd �Zd!edefd"d#�Zd$ed%ed&d'd(d)ddf
d*d+�ZdS)-�ASTDeclaratorNameParamQual�declId�arrayOps�	paramQualrzNcCrsr1�r(r)r*)r2r(r)r*r3r3r4r5~	s
z#ASTDeclaratorNameParamQual.__init__cCrUr1�r(r8r3r3r4r��	r�zASTDeclaratorNameParamQual.namer�cCr�r1r,rr3r3r4r��	rcCr�r�r3r8r3r3r4r�	r�z!ASTDeclaratorNameParamQual.isPackcC�|jjSr1)r*r�r8r3r3r4r��	�z*ASTDeclaratorNameParamQual.function_paramsr@cCr-r1)r*r�r8r3r3r4r��	r.z)ASTDeclaratorNameParamQual.trailingReturnrLcCs|jr	|j�|�Std|��)Nz,This should only be called on a function: %s)r*r�rtrSr3r3r4r��	sz+ASTDeclaratorNameParamQual.get_modifiers_idcCs|jr	|j�|�SdSrB)r*r�rSr3r3r4r��	sz'ASTDeclaratorNameParamQual.get_param_idcr�)Nr�c3r�r1r�r�r�r3r4r��	r�z?ASTDeclaratorNameParamQual.get_ptr_suffix_id.<locals>.<genexpr>)r�r)rSr3r�r4r �	r�z,ASTDeclaratorNameParamQual.get_ptr_suffix_idr!cCsz|dksJ�g}|�|�|��|jr3|�|�|��|�d�|�|�|�|�|��|�d�n|�|�d�|�S)Nr��Fr�r�)rsr r*r�r�r��r2rLr!r�r3r3r4r#�	s



z&ASTDeclaratorNameParamQual.get_type_idcC�
|jduSr1r,r8r3r3r4r�	r�z8ASTDeclaratorNameParamQual.require_space_after_declSpecscCr1r1)r*r8r3r3r4r$�	r�z+ASTDeclaratorNameParamQual.is_function_typer�cCsTg}|jr
|�||j��|jD]	}|�||��q|jr%|�||j��d�|�SrB)r(rsr)r*r�)r2r�r�r�r3r3r4r��	s

z%ASTDeclaratorNameParamQual._stringifyrZr[r\rr,r-cCs\t|�|jr|j�||||�|jD]
}|�||||�q|jr,|j�||||�dSdSr1)r6r(ryr)r*)r2rZr[r\r,r�r3r3r4ry�	s
�z-ASTDeclaratorNameParamQual.describe_signaturer%)r;r<r=r�rrr�r5r�r�r&rErr�r�r�rhr>r�r�r r#rr$r*r�rryr3r3r3r4r'}	s@��
�

���r'c
@s�eZdZdedefdd�Zedefdd��Zejdedd	fd
d��Zde	de
fdd
�Zde	de
fdd�Zde
fdd�Zde
fdd�Zdede
fdd�Zdede
dddddd	f
dd�Zd	S)�ASTDeclaratorNameBitFieldr(rcCr~r1�r(r)r2r(rr3r3r4r5�	r�z"ASTDeclaratorNameBitField.__init__rzcCrUr1r,r8r3r3r4r��	r�zASTDeclaratorNameBitField.namer�NcCr�r1r,rr3r3r4r��	rrLcCr�rBr3rSr3r3r4r��	r�z&ASTDeclaratorNameBitField.get_param_idcCr�rBr3rSr3r3r4r �	r�z+ASTDeclaratorNameBitField.get_ptr_suffix_idcCr1r1r,r8r3r3r4r�	r�z7ASTDeclaratorNameBitField.require_space_after_declSpecscCr�r�r3r8r3r3r4r$�	r�z*ASTDeclaratorNameBitField.is_function_typer�cCs>g}|jr
|�||j��|�d�|�||j��d�|�S)N� : r�)r(rsrr�r�r3r3r4r��	s

z$ASTDeclaratorNameBitField._stringifyrZr[r\rr,r-cCs^t|�|jr|j�||||�|t��7}|t�dd�7}|t��7}|j�||||�dS)Nr�)r6r(ryrr�r�rr�r3r3r4ry�	sz,ASTDeclaratorNameBitField.describe_signature)r;r<r=r�r�r5r�r�r&rhr>r�r rErr$r*r�rryr3r3r3r4r2�	s$
���r2c
@seZdZdedededeeddf
dd�Zede	fd	d
��Z
e
jde	ddfdd
��Z
edeefd
d��Z
ed+dd��Zdefdd�Zdedefdd�Zdedefdd�Zdedefdd�Zdedefdd�Zdededefdd �Zdefd!d"�Zd#ed$ed%d&d'd(ddf
d)d*�ZdS),�ASTDeclaratorPtr�nextr�rPr�rzNcCs$|sJ�||_||_||_||_dSr1�r6r�rPr�)r2r6r�rPr�r3r3r4r5
s

zASTDeclaratorPtr.__init__cCr-r1�r6r�r8r3r3r4r�
r.zASTDeclaratorPtr.namer�cC�||j_dSr1r8rr3r3r4r�
r�cCr-r1�r6r�r8r3r3r4r�
r.z ASTDeclaratorPtr.function_paramsr@cCr-r1�r6r�r8r3r3r4r�
r.zASTDeclaratorPtr.trailingReturncC�
|j��Sr1�r6rr8r3r3r4r
r�z.ASTDeclaratorPtr.require_space_after_declSpecsr�cCs�dg}|jD]	}|�||��qt|j�dkr"|js|jr"|�d�|jr*|�d�|jr:|jr5|�d�|�d�|jsG|jsGt|j�dkrQ|j��rQ|�d�|�||j��d�|�S)Nr�rr�r�rPr�)r�rsrFr�rPr6rr��r2r�r�r�r3r3r4r�
s 







zASTDeclaratorPtr._stringifyrLcCrr1�r6r�rSr3r3r4r�1
r�z!ASTDeclaratorPtr.get_modifiers_idcCrr1�r6r�rSr3r3r4r�4
r�zASTDeclaratorPtr.get_param_idcCs�|dkr%dg}|jr|�d�|jr|�d�|�|j�|��d�|�S|j�|�g}|�d�|jr9|�d�|jrA|�d�d�|�S)NrN�Pr�r�r�)r�rsrPr6r r�r�r3r3r4r 7
s






z"ASTDeclaratorPtr.get_ptr_suffix_idr!cCsFdg}|jr|�d�|jr|�d�|�|�|jj|d�|�d�S)NrAr�r�r��r!)r�rsrPr6r#r�r0r3r3r4r#I
s


zASTDeclaratorPtr.get_type_idcCr<r1�r6r$r8r3r3r4r$S
r�z!ASTDeclaratorPtr.is_function_typerZr[r\rr,r-cCs�t|�|t�dd�7}|jD]}|�|�qt|j�dkr*|js$|jr*|t��7}dt	dt
ddfdd�}|jr=||d�|jrN|jrI|t��7}||d	�|js[|js[t|j�dkrf|j��rf|t��7}|j�||||�dS)
Nr�rrZr_rzcS�|t�||�7}dSr1r�r�r3r3r4r�_
r�z6ASTDeclaratorPtr.describe_signature.<locals>._add_annor�rP)
r6rr�r�ryrFr�rPr�rr>r6r)r2rZr[r\r,r�r�r3r3r4ryV
s"



z#ASTDeclaratorPtr.describe_signaturer%)r;r<r=rrErr$r5r�r�r�r&r�r�r�rr*r>r�rhr�r�r r#r$rryr3r3r3r4r5
s8�
�

���r5c
@seZdZdedeeddfdd�Zedefdd��Z	e	j
d	eddfd
d��Z	edefdd��Zedee
fd
d��Zed+dd��Zdefdd�Zdedefdd�Zdedefdd�Zdedefdd�Zdedefdd�Zdededefdd �Zdefd!d"�Zd#ed$ed%d&d'd(ddf
d)d*�ZdS),�ASTDeclaratorRefr6r�rzNcC�|sJ�||_||_dSr1�r6r�)r2r6r�r3r3r4r5n
�
zASTDeclaratorRef.__init__cCr-r1r8r8r3r3r4r�s
r.zASTDeclaratorRef.namer�cCr9r1r8rr3r3r4r�w
r�cCr�r�r3r8r3r3r4r{
r�zASTDeclaratorRef.isPackcCr-r1r:r8r3r3r4r�
r.z ASTDeclaratorRef.function_paramsr@cCr-r1r;r8r3r3r4r��
r.zASTDeclaratorRef.trailingReturncCr<r1r=r8r3r3r4r�
r�z.ASTDeclaratorRef.require_space_after_declSpecsr�cCs\dg}|jD]	}|�||��qt|j�dkr!|j��r!|�d�|�||j��d�|�S)Nr�rr�r�)r�rsrFr6rr�r>r3r3r4r��
s


zASTDeclaratorRef._stringifyrLcCrr1r?rSr3r3r4r��
r�z!ASTDeclaratorRef.get_modifiers_idcCrr1r@rSr3r3r4r��
r�zASTDeclaratorRef.get_param_idcC�(|dkrd|j�|�S|j�|�dS)NrNr��r6r rSr3r3r4r �
r�z"ASTDeclaratorRef.get_ptr_suffix_idr!cC� |dksJ�|jj|d|d�S)Nr�r�rB�r6r#r"r3r3r4r#�
�zASTDeclaratorRef.get_type_idcCr<r1rCr8r3r3r4r$�
r�z!ASTDeclaratorRef.is_function_typerZr[r\rr,r-cCsht|�|t�dd�7}|jD]}|�|�qt|j�dkr)|j��r)|t��7}|j�||||�dS)Nr�r)	r6rr�r�ryrFr6rr�)r2rZr[r\r,r�r3r3r4ry�
s
z#ASTDeclaratorRef.describe_signaturer%)r;r<r=rrr$r5r�r�r�r&rErr�r�r�rr*r>r�rhr�r�r r#r$rryr3r3r3r4rEm
s4	
���rEc
@seZdZdeddfdd�Zedefdd��Zejdeddfd	d��Zede	e
fd
d��Zed(d
d��Zde
fdd�Zdedefdd�Zdedefdd�Zdedefdd�Zdedefdd�Zdededefdd�Zde
fdd�Zd ed!ed"d#d$d%ddf
d&d'�ZdS))�ASTDeclaratorParamPackr6rzNcC�|sJ�||_dSr1�r6)r2r6r3r3r4r5�
�
zASTDeclaratorParamPack.__init__cCr-r1r8r8r3r3r4r��
r.zASTDeclaratorParamPack.namer�cCr9r1r8rr3r3r4r��
r�cCr-r1r:r8r3r3r4r��
r.z&ASTDeclaratorParamPack.function_paramsr@cCr-r1r;r8r3r3r4r��
r.z%ASTDeclaratorParamPack.trailingReturncCr�r�r3r8r3r3r4r�
r�z4ASTDeclaratorParamPack.require_space_after_declSpecsr�cCs"||j�}|jjr
d|}d|S)Nr�rr8r�r3r3r4r��
s
z!ASTDeclaratorParamPack._stringifyrLcCrr1r?rSr3r3r4r��
r�z'ASTDeclaratorParamPack.get_modifiers_idcCrr1r@rSr3r3r4r��
r�z#ASTDeclaratorParamPack.get_param_idcCrI)NrN�DprJrSr3r3r4r �
r�z(ASTDeclaratorParamPack.get_ptr_suffix_idr!cCrK)Nr�rRrBrLr"r3r3r4r#�
rMz"ASTDeclaratorParamPack.get_type_idcCr<r1rCr8r3r3r4r$�
r�z'ASTDeclaratorParamPack.is_function_typerZr[r\rr,r-cCsBt|�|t�dd�7}|jjr|t��7}|j�||||�dSr�)r6rr�r6r�r�ryr�r3r3r4ry�
s
z)ASTDeclaratorParamPack.describe_signaturer%�r;r<r=rr5r�r�r�r&rr�r�r�rErr*r>r�rhr�r�r r#r$rryr3r3r3r4rN�
s0
���rNc
@seZdZdededededdf
dd�Zedefd	d
��Zej	deddfdd
��Zede
efd
d��Zed+dd��Z
defdd�Zdedefdd�Zdedefdd�Zdedefdd�Zdedefdd�Zdededefdd �Zdefd!d"�Zd#ed$ed%d&d'd(ddf
d)d*�ZdS),�ASTDeclaratorMemPtr�	classNamerPr�r6rzNcCs,|sJ�|sJ�||_||_||_||_dSr1)rUrPr�r6)r2rUrPr�r6r3r3r4r5�
s
zASTDeclaratorMemPtr.__init__cCr-r1r8r8r3r3r4r��
r.zASTDeclaratorMemPtr.namer�cCr9r1r8rr3r3r4r��
r�cCr-r1r:r8r3r3r4r��
r.z#ASTDeclaratorMemPtr.function_paramsr@cCr-r1r;r8r3r3r4r�r.z"ASTDeclaratorMemPtr.trailingReturncCr�r�r3r8r3r3r4rr�z1ASTDeclaratorMemPtr.require_space_after_declSpecsr�cCs|g}|�||j��|�d�|jr|�d�|jr'|jr"|�d�|�d�|j��r1|�d�|�||j��d�|�S)Nz::*r�r�rPr�)rsrUr�rPr6rr�r�r3r3r4r�
s






zASTDeclaratorMemPtr._stringifyrLcC�|dkrt��|j�|�S�NrN)r)r6r�rSr3r3r4r��z$ASTDeclaratorMemPtr.get_modifiers_idcCrVrW)r)r6r�rSr3r3r4r�rXz ASTDeclaratorMemPtr.get_param_idcCs|dkrt��t��rW)r)r�r6r rSr3r3r4r %sz%ASTDeclaratorMemPtr.get_ptr_suffix_idr!cCsZ|dksJ�d}|jr|d7}|jr|d7}|d7}||j�|�7}||7}|j�||�S)Nr�r�r�r��M)r�rPrUrTr6r#)r2rLr!�nextReturnTypeIdr3r3r4r#,szASTDeclaratorMemPtr.get_type_idcCr<r1rCr8r3r3r4r$9r�z$ASTDeclaratorMemPtr.is_function_typerZr[r\rr,r-cCs�t|�|j�|d||�|t�dd�7}|t�dd�7}dtdtddfdd�}|jr0||d	�|jrA|jr<|t�	�7}||d
�|j
��rL|t�	�7}|j
�||||�dS)Nr`r�r�rZr_rzcSrDr1r�r�r3r3r4r�Cr�z9ASTDeclaratorMemPtr.describe_signature.<locals>._add_annor�rP)r6rUryrr�rr>r�rPr�r6r)r2rZr[r\r,r�r3r3r4ry<s


z&ASTDeclaratorMemPtr.describe_signaturer%)r;r<r=r�rErr5r�r�r&rr�r�r�rr*r>r�rhr�r�r r#r$rryr3r3r3r4rT�
s@���
�	
���rTc
@seZdZdededdfdd�Zedefdd��Zejd	eddfd
d��Zede	e
fdd��Zed)dd��Zde
fdd�Zdedefdd�Zdedefdd�Zdedefdd�Zdedefdd�Zdededefdd�Zde
fdd �Zd!ed"ed#d$d%d&ddf
d'd(�ZdS)*�ASTDeclaratorParen�innerr6rzNcCr0r1�r\r6)r2r\r6r3r3r4r5Qr6zASTDeclaratorParen.__init__cCr-r1�r\r�r8r3r3r4r�Xr.zASTDeclaratorParen.namer�cCr9r1r^rr3r3r4r�\r�cCr-r1)r\r�r8r3r3r4r�`r.z"ASTDeclaratorParen.function_paramsr@cCr-r1)r\r�r8r3r3r4r�dr.z!ASTDeclaratorParen.trailingReturncCr�r�r3r8r3r3r4rhr�z0ASTDeclaratorParen.require_space_after_declSpecsr�cCrwrx)rsr\r6r�r�r3r3r4r�kryzASTDeclaratorParen._stringifyrLcCrr1)r\r�rSr3r3r4r�rr�z#ASTDeclaratorParen.get_modifiers_idcCrr1)r\r�rSr3r3r4r�ur�zASTDeclaratorParen.get_param_idcCs&|dkrt��|j�|�|j�|�SrW)r)r6r r\rSr3r3r4r xs


�z$ASTDeclaratorParen.get_ptr_suffix_idr!cCs*|dksJ�|j�||�}|jj||d�S)Nr�rB)r6r#r\)r2rLr!�nextIdr3r3r4r#�szASTDeclaratorParen.get_type_idcCr<r1)r\r$r8r3r3r4r$�r�z#ASTDeclaratorParen.is_function_typerZr[r\rr,r-cCsPt|�|t�dd�7}|j�||||�|t�dd�7}|j�|d||�dS)Nr�rrj)r6rr�r\ryr6r�r3r3r4ry�s
z%ASTDeclaratorParen.describe_signaturer%rSr3r3r3r4r[Ps0	
���r[c
@sdeZdZdeeeffdd�Zdedefdd�Z	de
defd	d
�Zdeded
dddddf
dd�Z
dS)�ASTPackExpansionExprr	cCr�r1r
rr3r3r4r5�r�zASTPackExpansionExpr.__init__r�rzcCs||j�dSr�r
r�r3r3r4r��rKzASTPackExpansionExpr._stringifyrLcCs|j�|�}d|S)N�sprrur3r3r4rT�szASTPackExpansionExpr.get_idrZr[r\rr,r-NcCs&|j�||||�|t�dd�7}dSr�)r	ryrr�r�r3r3r4ry�sz'ASTPackExpansionExpr.describe_signature)r;r<r=rr�r<r5r*r>r�rhrTrryr3r3r3r4r`�s
���r`c
@sleZdZdeeeefddfdd�Zdede	fdd�Z
d	ede	fd
d�Zde
d
e	ddddddf
dd�ZdS)r;r>rzNcCr�r1)r>r�r3r3r4r5�r�zASTParenExprList.__init__rLcr�)Nzpi%sEr�c3r�r1r�r�r�r3r4r��r�z*ASTParenExprList.get_id.<locals>.<genexpr>r�rSr3r�r4rT�r�zASTParenExprList.get_idr�cs"�fdd�|jD�}dd�|�S)Ncr�r3r3r�r�r3r4r��r�z/ASTParenExprList._stringify.<locals>.<listcomp>z(%s)r�)r>r�)r2r�r>r3r�r4r��szASTParenExprList._stringifyrZr[r\rr,r-cCsrt|�|t�dd�7}d}|jD]}|s$|t�dd�7}|t��7}nd}|�||||�q|t�dd�7}dS)Nr�Tr�Fr)r6rr�r>r�ryr�r3r3r4ry�s
z#ASTParenExprList.describe_signature)r;r<r=rrr�r<r5rhr>rTr*r�rryr3r3r3r4r;�s
���r;c
@s^eZdZ	ddeeefdeddfdd�Zdede	fd	d
�Z
dede	d
dddddf
dd�ZdS)�ASTInitializerTr��	hasAssignrzNcCr~r1�r�rc)r2r�rcr3r3r4r5�r�zASTInitializer.__init__r�cCs||j�}|jrd|S|S�Nr�rd)r2r��valr3r3r4r��s
zASTInitializer._stringifyrZr[r\rr,r-cCsLt|�|jr|t��7}|t�dd�7}|t��7}|j�|d||�dS)Nr�r`)r6rcrr�r�r�ryr�r3r3r4ry�sz!ASTInitializer.describe_signature�T)
r;r<r=rr�r<rEr5r*r>r�rryr3r3r3r4rb�s��
�
���rbc
@s�eZdZdededdfdd�Zedefdd��Zej	d	eddfd
d��Zede
fdd��Zedee
fd
d��Zed"dd��Z		d#dededddefdd�Zdedefdd�Zdefdd�Zdededdddddf
d d!�ZdS)$r@�	declSpecs�declrzNcCr0r1)rhri)r2rhrir3r3r4r5�r6zASTType.__init__cCr-r1�rir�r8r3r3r4r��r.zASTType.namer�cCr9r1rjrr3r3r4r��r�cCr-r1)rirr8r3r3r4r�r.zASTType.isPackcCr-r1)rir�r8r3r3r4r��r.zASTType.function_paramscCr-r1)rir�r8r3r3r4r��r.zASTType.trailingReturnrLr�r,r-c	Cs�|dkryg}|rQ|dkr<|�|���|��|�|j�|��|�|j�|��|jjjs6|jj	r;|jj	jr;|�d�n8|dkrK|�|���|��n)t
|�J�|j��rYt��|�|j�|��|�|j�
|��|�|j�|��d�|�Sg}|r�|dkr�|j�|�}|�|���||��|dkr�|jj}|dur�|j�
|�}|jr�|j�|�}n|j�|�}|�|�|�|�|�|j�|��n'|dkr�|�|���|��nt
|�J�|j�|�}|j�||�}|�|�d�|�S)NrN�function�CEr�Fr�r�)rs�get_full_nested_namerTrir�r�rhrrRr�printr$r)r r�r.r�r�r#)	r2rLr�r,r�r��templ�typeIdr!r3r3r4rT�s^
��
�





zASTType.get_idr�cCsRg}||j�}|�|�|j��rt|�dkr|�d�|�||j��d�|�Sr)rhrsrirrFr�)r2r�r�rhr3r3r4r�+s



zASTType._stringifycCs|jjrdSdS)Nr�r�)rhrr8r3r3r4�get_type_declaration_prefix4sz#ASTType.get_type_declaration_prefixrZr[r\rcCsdt|�|j�|d||�|j��r!tt|j��dkr!|t��7}|dkr'd}|j�||||�dS)Nr`rrj)	r6rhryrirrFr>rr�r�r3r3r4ry:s
zASTType.describe_signaturer%r�)r;r<r=rrr5r�r�r�r&rErrr�r�r�rhr>rTr*r�rqrryr3r3r3r4r@�s8��
�8	
���r@c
@s�eZdZdededdfdd�Zedefdd��Zedefd	d
��Z	dde
ded
ddefdd�Zde
defdd�Zdededdd
dddf
dd�ZdS)r�r��initrzNcCrFr1�r�rr�r2r�rrr3r3r4r5IrHz0ASTTemplateParamConstrainedTypeWithInit.__init__cCr-r1�r�r�r8r3r3r4r�Nr.z,ASTTemplateParamConstrainedTypeWithInit.namecCr-r1�r�rr8r3r3r4rRr.z.ASTTemplateParamConstrainedTypeWithInit.isPackrLr�r,r-cC�.|dksJ�|r|jjj|dd�S|j�|�S�Nr�Fr�)r�r.rTr�r�r3r3r4rTV�z.ASTTemplateParamConstrainedTypeWithInit.get_idr�cCs*||j�}|jr|d7}|||j�7}|Srersr�r3r3r4r�_s

z2ASTTemplateParamConstrainedTypeWithInit._stringifyrZr[r\rcCsZ|j�||||�|jr+|t��7}|t�dd�7}|t��7}|j�||||�dSdS)Nr�)r�ryrrrr�r�r�r3r3r4ryfs�z:ASTTemplateParamConstrainedTypeWithInit.describe_signaturer�)r;r<r=r@r5r�r�r�rErrhr>rTr*r�rryr3r3r3r4r�Hs	
���r�c
@s�eZdZdededdfdd�Zedefdd��Zede	fd	d
��Z
		ddeded
ddefdd�Z
dedefdd�Zdededdd
dddf
dd�ZdS)r�r�rrrzNcCr~r1rsrtr3r3r4r5qr�zASTTypeWithInit.__init__cCr-r1rur8r3r3r4r�ur.zASTTypeWithInit.namecCr-r1rvr8r3r3r4ryr.zASTTypeWithInit.isPackrLr�r,r-cCsJ|dkr|j�||�S|dkr|���|�d|j�|�S|���|�S)N�memberrNr)r�rTrmr�r3r3r4rT}s
�zASTTypeWithInit.get_idr�cC�4g}|�||j��|jr|�||j��d�|�SrB)rsr�rrr�r�r3r3r4r���

zASTTypeWithInit._stringifyrZr[r\rcCs:t|�|j�||||�|jr|j�||||�dSdSr1)r6r�ryrrr�r3r3r4ry��
�z"ASTTypeWithInit.describe_signaturer�)r;r<r=r@rbr5r�r�r�rErrhr>rTr*r�rryr3r3r3r4r�ps*��
�	
���r�c
@s�eZdZdededdfdd�Z		ddeded	d
defdd�Zd
e	defdd�Z
defdd�Zdededdd	d
ddf
dd�Z
dS)�ASTTypeUsingr�r�rzNcCr~r1)r�r��r2r�r�r3r3r4r5�r�zASTTypeUsing.__init__rLr�r,r-cC�|dkrt��|���|�SrW�r)rmrTr�r3r3r4rT��zASTTypeUsing.get_idr�cCs>g}|�||j��|jr|�d�|�||j��d�|�S)Nr�r�)rsr�r�r�r�r3r3r4r��s

zASTTypeUsing._stringifycCr�)Nr�r3r8r3r3r4rq�r�z(ASTTypeUsing.get_type_declaration_prefixrZr[r\rcC�ft|�|jj||||d�|jr1|t��7}|t�dd�7}|t��7}|jj|d||d�dSdS)Nr�r�r`)r6r�ryr�rr�r�r�r3r3r4ry�s�zASTTypeUsing.describe_signaturer�)r;r<r=r�r@r5rhr>rTr*r�rqrryr3r3r3r4r~�s$��
�
���r~c
@s�eZdZdededdfdd�Zedefdd��Z		dd	ed
e	ddde	fd
d�Z
dede	fdd�Zde
de	ddddddf
dd�ZdS)�
ASTConceptr�r�rzNcCr~r1�r�r��r2r�r�r3r3r4r5�r�zASTConcept.__init__cCrUr1r�r8r3r3r4r��r�zASTConcept.namerLr�r,r-cCr�rWr�r�r3r3r4rT�r�zASTConcept.get_idr�cCr�r1r�r�r3r3r4r��r�zASTConcept._stringifyrZr[r\rcCs2|j�||||�|jr|j�||||�dSdSr1)r�ryr�r�r3r3r4ry�s�zASTConcept.describe_signaturer�)r;r<r=r�rbr5r�r�rhr>rTr*r�rryr3r3r3r4r��s&��
�
���r�c
@sZeZdZdededededdf
dd�Zd	edefd
d�Zde	d
eddddddf
dd�Z
dS)�ASTBaseClassr��
visibilityr��packrzNcCror1)r�r�r�r�)r2r�r�r�r�r3r3r4r5�rpzASTBaseClass.__init__r�cCs^g}|jdur|�|j�|�d�|jr|�d�|�||j��|jr*|�d�d�|�S)Nr�zvirtual rr�)r�rsr�r�r�r�r�r3r3r4r��s




zASTBaseClass._stringifyrZr[r\rr,r-cCs�t|�|jdur|t�|j|j�7}|t��7}|jr*|t�dd�7}|t��7}|jj|d||d�|jrA|t�	dd�7}dSdS)Nr�r`r�r)
r6r�rr�r�r�r�ryr�r�r�r3r3r4ry�s

��zASTBaseClass.describe_signature)r;r<r=r�r>rEr5r*r�rryr3r3r3r4r��s 
��
�
���r�c
@steZdZdededeeddfdd�Zded	e	d
dde	fdd
�Z
dede	fdd�Zde
de	ddd
dddf
dd�ZdS)�ASTClassr�r��basesrzNcCrsr1)r�r�r�)r2r�r�r�r3r3r4r5�rtzASTClass.__init__rLr�r,r-cCs|���|�Sr1)rmrTr�r3r3r4rT�rKzASTClass.get_idr�cCsvg}|�||j��|jr|�d�t|j�dkr6|�d�d}|jD]}|s,|�d�d}|�||��q#d�|�S)Nr�rr4Tr�Fr�)rsr�r�rFr�r�)r2r�r�r�r�r3r3r4r�
s




zASTClass._stringifyrZr[r\rcCs�t|�|jj||||d�|jr|t��7}|t�dd�7}t|j�dkra|t��7}|t�	dd�7}|t��7}|jD]}|j||||d�|t�	dd�7}|t��7}q=|�
�|�
�dSdS)Nr�r�rr�r�)r6r�ryr�rr�r�rFr�r��pop)r2rZr[r\r,r�r3r3r4ry
s 
�zASTClass.describe_signature)r;r<r=r�rErr�r5rhr>rTr*r�rryr3r3r3r4r��s
���r�c
@sheZdZdeddfdd�Zdededd	defd
d�Zdedefd
d�Z	de
dedddd	ddf
dd�ZdS)�ASTUnionr�rzNcCr�r1rrr3r3r4r5$
r�zASTUnion.__init__rLr�r,r-cCr�rWr�r�r3r3r4rT'
�zASTUnion.get_idr�cCrr1rr�r3r3r4r�,
r�zASTUnion._stringifyrZr[r\rcCs t|�|jj||||d�dS)Nr�)r6r�ryr�r3r3r4ry/
�zASTUnion.describe_signature)r;r<r=r�r5rhr>rTr*r�rryr3r3r3r4r�#
s
���r�c
@speZdZdedededdfdd�Zded	ed
ddefdd
�Zde	defdd�Z
dededdd
dddf
dd�ZdS)�ASTEnumr��scoped�underlyingTyperzNcCrsr1)r�r�r�)r2r�r�r�r3r3r4r56
r�zASTEnum.__init__rLr�r,r-cCr�rWr�r�r3r3r4rT<
r�zASTEnum.get_idr�cCsZg}|jr|�|j�|�d�|�||j��|jr(|�d�|�||j��d�|�S)Nr�r4r�)r�rsr�r�r�r�r3r3r4r�A
s


zASTEnum._stringifyrZr[r\rcCr�)Nr�r�rj)r6r�ryr�rr�r�r�r3r3r4ryL
s

��zASTEnum.describe_signature)
r;r<r=r�r>r@r5rhrTr*r�rryr3r3r3r4r�5
s
�
�
���r�c
@sleZdZdededdfdd�Zdeded	d
defdd�Zd
e	defdd�Z
dededdd	d
ddf
dd�ZdS)�
ASTEnumeratorr�rrrzNcCr~r1)r�rr)r2r�rrr3r3r4r5Z
r�zASTEnumerator.__init__rLr�r,r-cCr�rWr�r�r3r3r4rT^
r�zASTEnumerator.get_idr�cCr{rB)rsr�rrr�r�r3r3r4r�c
r|zASTEnumerator._stringifyrZr[r\rcCs:t|�|j�||||�|jr|j�|d||�dSdS)Nr`)r6r�ryrrr�r3r3r4ryj
r}z ASTEnumerator.describe_signature)
r;r<r=r�rbr5rhr>rTr*r�rryr3r3r3r4r�Y
s
���r�c
@sJeZdZdefdd�Zdedefdd�Zdeded	d
dddd
f
dd�Z	d
S)�ASTTemplateParamrzcCr�r1r�r8r3r3r4�get_identifierz
r�zASTTemplateParam.get_identifierrLcCr�r1r�rSr3r3r4rT}
r�zASTTemplateParam.get_id�
parentNoder[r\rr,r-NcCr�r1r�)r2r�r[r\r,r3r3r4ry�
r�z#ASTTemplateParam.describe_signature)
r;r<r=rCr�rhr>rTrryr3r3r3r4r�y
s
���r�c
@szeZdZdededededdf
dd�Zdefd	d
�Zde	defdd
�Z
dedefdd�Zde
deddddddf
dd�ZdS)� ASTTemplateKeyParamPackIdDefault�keyrD�
parameterPackrWrzNcCs4|sJ�|r|dusJ�||_||_||_||_dSr1)r�rDr�rW)r2r�rDr�rWr3r3r4r5�
s
z)ASTTemplateKeyParamPackIdDefault.__init__cCrUr1rIr8r3r3r4r��
rVz/ASTTemplateKeyParamPackIdDefault.get_identifierrLcCs6|dksJ�g}|jr|�d�n|�d�d�|�S)Nr�rRr�r�)r�rsr�r�r3r3r4rT�
s

z'ASTTemplateKeyParamPackIdDefault.get_idr�cCsx|jg}|jr|jr|�d�|�d�|jr'|js|�d�|�||j��|jr7|�d�|�||j��d�|�S)Nr�rr�r�)r�r�rDrsrWr�r�r3r3r4r��
s




z+ASTTemplateKeyParamPackIdDefault._stringifyrZr[r\rr,r-cCs�|t�|j|j�7}|jr|jr|t��7}|t�dd�7}|jr5|js*|t��7}|j�|||dd|�|jrW|t��7}|t�dd�7}|t��7}|j�|d||�dSdS)Nrr�r�r`)	rr�r�r�rDr�r�ryrWr�r3r3r4ry�
s�z3ASTTemplateKeyParamPackIdDefault.describe_signature)r;r<r=r>rCrEr@r5r�rhrTr*r�rryr3r3r3r4r��
s$
��
�


���r�c
@s�eZdZdeddfdd�Zedefdd��Zedefdd	��Z	de
fd
d�Zdded
e
ddde
fdd�Zdede
fdd�Zdede
ddddddf
dd�ZdS)�ASTTemplateParamTyper�rzNcCrOr1r�r�r3r3r4r5�
rQzASTTemplateParamType.__init__cC� |��}tt|d�gdgdd�S�NF�r��r�r�rz�r2rDr3r3r4r��
r�zASTTemplateParamType.namecCr-r1�r�r�r8r3r3r4r�
r.zASTTemplateParamType.isPackcCr<r1�r�r�r8r3r3r4r��
r�z#ASTTemplateParamType.get_identifierrLr�r,r-cCrwrx)r�r.rTr�r�r3r3r4rT�
ryzASTTemplateParamType.get_idr�cCrr1r�r�r3r3r4r��
r�zASTTemplateParamType._stringifyrZr[r\rcCrr1)r�ryr�r3r3r4ry�
rz'ASTTemplateParamType.describe_signaturer��r;r<r=r�r5r�r�r�rErrCr�rhr>rTr*r�rryr3r3r3r4r��
s 	
���r�c
@s�eZdZdddeddfdd�Zedefdd	��Zedefd
d��Z	de
fdd
�Zddede
ddde
fdd�Zdede
fdd�Zdede
ddddddf
dd�ZdS)�ASTTemplateParamTemplateType�nestedParams�ASTTemplateParamsr�rzNcCr0r1�r�r�)r2r�r�r3r3r4r5�
s
z%ASTTemplateParamTemplateType.__init__cCr�r�r�r�r3r3r4r��
r�z!ASTTemplateParamTemplateType.namecCr-r1r�r8r3r3r4r�
r.z#ASTTemplateParamTemplateType.isPackcCr<r1r�r8r3r3r4r��
r�z+ASTTemplateParamTemplateType.get_identifierrLr�r,r-cCs:|dksJ�|r|jjj|dd�S|j�|�|j�|�S)Nr�r�)r�r.rTr�r�r�r3r3r4rT�
sz#ASTTemplateParamTemplateType.get_idr�cCr�r1r�r�r3r3r4r��
r�z'ASTTemplateParamTemplateType._stringifyrZr[r\rcCs4|j�|d||�|t��7}|j�||||�dS)Nrj)r�ryrr�r�r�r3r3r4rysz/ASTTemplateParamTemplateType.describe_signaturer�r�r3r3r3r4r��
s(�
�	
���r�c
@s�eZdZdeeefddfdd�Zedefdd��Z	ede
fdd	��Zdefd
d�Z
dded
edddefdd�Zdedefdd�Zdededdddddf
dd�ZdS)�ASTTemplateParamNonTyperkrzNcCrOr1�rk)r2rkr3r3r4r5s
z ASTTemplateParamNonType.__init__cCr�r�r�r�r3r3r4r�r�zASTTemplateParamNonType.namecCr-r1)rkrr8r3r3r4rr.zASTTemplateParamNonType.isPackcCs`|jj}|r.t|j�dksJ�|jdjsJ�|jdjrJ�|jdj}t|t�s,J�|SdS)NrNr)rkr�rFr�r{r^�
isinstancerC)r2r�r�r3r3r4r�sz&ASTTemplateParamNonType.get_identifierrLr�r,r-cCs2|dksJ�|r|jjj|dd�Sd|j�|�S)Nr�r�r)r�r.rTrkr�r3r3r4rT#szASTTemplateParamNonType.get_idr�cCrr1r�r�r3r3r4r�,r�z"ASTTemplateParamNonType._stringifyrZr[r\rcCrr1)rkryr�r3r3r4ry/rz*ASTTemplateParamNonType.describe_signaturer�)r;r<r=rr�r�r5r�r�r�rErrCr�rhr>rTr*r�rryr3r3r3r4r�s,��
�	
���r�c@s�eZdZdeeddfdd�Zdedefdd�Zd	e	defd
d�Z
ded
eddddddf
dd�Zde
d
edddddeddfdd�ZdS)r��paramsrzNcCs|dusJ�||_dSr1)r�)r2r�r3r3r4r55s
zASTTemplateParams.__init__rLcCsJ|dksJ�g}|�d�|jD]
}|�|�|��q|�d�d�|�S)Nr�r�r�r�)rsr�rTr��r2rLr�rkr3r3r4rT9s



zASTTemplateParams.get_idr�csBg}|�d�|�d��fdd�|jD���|�d�d�|�S)Nz	template<r�c3r�r1r3r�r�r3r4r�Er�z/ASTTemplateParams._stringify.<locals>.<genexpr>z> r�)rsr�r�r�r3r�r4r�Bs

 

zASTTemplateParams._stringifyrZr[r\rr,r-cCsx|t�dd�7}|t�dd�7}d}|jD]}|s'|t�dd�7}|t��7}d}|�||||�q|t�dd�7}dS)Nr�r�Tr�Fr�)rr�r�r�r�ry)r2rZr[r\r,r�rkr3r3r4ryIs
z$ASTTemplateParams.describe_signaturer��lineSpecc
Cs�dtdtjfdd�}||�}|t�dd�7}|t�dd�7}d}|jD]"}	|s5|t�dd�7}|t��7}d	}|r=||�}|	�||||�q#|rN|sN||�}|t�d
d
�7}dS)Nr�rzcSst��}||7}d|_|S)Nr�)r�desc_signature_line�sphinx_line_type)r�rZr3r3r4�makeLineYszDASTTemplateParams.describe_signature_as_introducer.<locals>.makeLiner�r�Tr�Fr�)rrr�r�r�r�r�ry)
r2r�r[r\r,r�r��lineNoder�rkr3r3r4� describe_signature_as_introducerVs 
z2ASTTemplateParams.describe_signature_as_introducer)r;r<r=rr�r5rhr>rTr*r�rryrrEr�r3r3r3r4r�4s0	
��
�
������r�c
@s�eZdZdededdfdd�Zedefdd��Zedefd	d
��Z	defdd�Z
dd
ededddefdd�Z
d
edefdd�Zdedefdd�Zdededdddddf
dd�ZdS)� ASTTemplateIntroductionParameterrDr�rzNcCr~r1)rDr�)r2rDr�r3r3r4r5sr�z)ASTTemplateIntroductionParameter.__init__cCr�r�r�r�r3r3r4r�wr�z%ASTTemplateIntroductionParameter.namecCrUr1)r�r8r3r3r4r|r�z'ASTTemplateIntroductionParameter.isPackcCrUr1rIr8r3r3r4r��rVz/ASTTemplateIntroductionParameter.get_identifierrLr�r,r-cCs0|dksJ�|r|jjj|dd�S|jrdSdS)Nr�r�rRr�)r�r.rTr�r�r3r3r4rT�sz'ASTTemplateIntroductionParameter.get_idcCs*|dksJ�|j�|�}|jrd|S|S)Nr�ra)rDrTr�r�r3r3r4�
get_id_as_arg�s
z.ASTTemplateIntroductionParameter.get_id_as_argr�cCs.g}|jr
|�d�|�||j��d�|�S�Nrr�)r�rsrDr�r�r3r3r4r��s


z+ASTTemplateIntroductionParameter._stringifyrZr[r\rcCs0|jr|t�dd�7}|j�|||dd|�dSr�)r�rr�rDryr�r3r3r4ry�sz3ASTTemplateIntroductionParameter.describe_signaturer�)r;r<r=rCrEr5r�r�r�rr�rhr>rTr�r*r�rryr3r3r3r4r�rs"	
���r�c@sleZdZdedeeddfdd�Zdedefdd	�Z	d
e
defdd�Zd
ededdddde
ddfdd�ZdS)�ASTTemplateIntroductionrOr�rzNcCs t|�dksJ�||_||_dSrE)rFrOr�)r2rOr�r3r3r4r5�s
z ASTTemplateIntroduction.__init__rLcCs�|dksJ�g}|�d�|jD]
}|�|�|��q|�d�|�d�|�|j�|��|�d�|jD]
}|�|�|��q6|�d�|�d�d�|�S)Nr�r�r�r�r�)rsr�rTrOr�r�r�r3r3r4rT�s








zASTTemplateIntroduction.get_idr�csRg}|��|j��|�d�|�d��fdd�|jD���|�d�d�|�S)Nr�r�c3r�r1r3)r�rkr�r3r4r��r�z5ASTTemplateIntroduction._stringify.<locals>.<genexpr>z} r�)rsrOr�r�r�r3r�r4r��s
 

z"ASTTemplateIntroduction._stringifyr�r[r\rr,r-r�c	Cs�t��}||7}d|_|j�|d||�|t�dd�7}d}|jD]}|s3|t�dd�7}|t��7}d}|�||||�q!|t�dd�7}dS)N�templateIntroductionr`r�Tr�Fr�)rr�r�rOryr�r�r�)	r2r�r[r\r,r�rZr�rkr3r3r4r��s
z8ASTTemplateIntroduction.describe_signature_as_introducer)r;r<r=r�rr�r5rhr>rTr*r�rrEr�r3r3r3r4r��s*�
�������r�c@speZdZdeeeefddfdd�Zdede	fdd�Z
d	ede	fd
d�Zde
d
e	dddddeddfdd�ZdS)�ASTTemplateDeclarationPrefixr�rzNcCr�r1)r�)r2r�r3r3r4r5��
z%ASTTemplateDeclarationPrefix.__init__rLcCs6|dksJ�g}|jD]
}|�|�|��qd�|�S)Nr�r�)r�rsrTr�)r2rLr�r�r3r3r4rT�s


z#ASTTemplateDeclarationPrefix.get_idr�cCs(g}|jD]	}|�||��qd�|�SrB)r�rsr�)r2r�r�r�r3r3r4r��s

z'ASTTemplateDeclarationPrefix._stringifyrZr[r\rr,r-r�cCs*t|�|jD]}|�|d|||�qdS�Nri)r6r�r�)r2rZr[r\r,r�r�r3r3r4ry�s
�z/ASTTemplateDeclarationPrefix.describe_signature)r;r<r=rrr�r�r5rhr>rTr*r�rrEryr3r3r3r4r��s&��
�
����r�c
@sPeZdZdeddfdd�Zdedefdd�Zd	ej	d
eddd
dddf
dd�Z
dS)�ASTRequiresClauser	rzNcCr�r1r
rr3r3r4r5�r�zASTRequiresClause.__init__r�cCr))Nz	requires r
r�r3r3r4r��rKzASTRequiresClause._stringifyrZr[r\rr,r-cCrc)Nryrdr�r3r3r4ry�rez$ASTRequiresClause.describe_signature)r;r<r=r�r5r*r>r�rr�ryr3r3r3r4r��s���r�c@s�eZdZ	d%dededededededed	ed
dfdd
�Zd&dd�Z	e
d
efdd��Ze
d
e
efdd��Zd'deded
efdd�Zd
efdd�Zded
efdd�Zdeded d!d"ed
df
d#d$�ZdS)(r/Fr��
directiveTyper�r��requiresClauser.�trailingRequiresClause�	semicolonrzNc		Cs@||_||_||_||_||_||_||_||_d|_d|_	dSr1)
r�r�r�r�r�r.r�r�r,�enumeratorScopedSymbol)	r2r�r�r�r�r�r.r�r�r3r3r4r5
s
zASTDeclaration.__init__c	Cs`|jr|j��nd}|jr|j��nd}|jr|j��nd}t|j|j|j|||j��||j	�Sr1)
r��cloner�r�r/r�r�r�r.r�)r2�templatePrefixClone�requiresClasueClone�trailingRequiresClasueCloner3r3r4r�s��
�zASTDeclaration.clonecCr-r1)r.r�r8r3r3r4r�&r.zASTDeclaration.namecCs|jdkrdS|jjS)Nrk)r�r.r�r8r3r3r4r�*s
zASTDeclaration.function_paramsTrLr�cCs.|dkr#|jr
t��|jdkr|jr|jj�|�S|j�||j|j�S|jdkr3|jr3|jj�||�S|r;t|g}ng}|jrI|�|j�|��|j	sO|j
r�|dkrVt��|�d�|j	rf|j
rf|�d�|j	rs|�|j	j�|��|j
r�|�|j
j�|��|�d�|�|j�||j|j��d�|�S)NrN�
enumeratorr��IQrr�r�)
r�r)r�r�r.rTr,�
_id_prefixrsr�r�r	r�)r2rLr�r�r3r3r4rT0s4



zASTDeclaration.get_idcCs|�td�Sr�)rT�_max_idr8r3r3r4�
get_newest_idNr�zASTDeclaration.get_newest_idr�cCs�g}|jr|jdkr|�|j�|�d�|jr |�||j��|jr0|�||j��|�d�|�||j��|jrH|�d�|�||j��|jrP|�d�d�|�S)Nrvr��;r�)r�rsr�r�r.r�r�r�r�r3r3r4r�Qs 




zASTDeclaration._stringifyrZr[r\r�optionsc
Cs�t|�|js	J�d|d<t��}d|_|jj|d<|jr-|jj||||j|�d�d�|j	rFt��}d|_|�
|�|j	�|d||j�||7}|jrb|jd	krb|t�|j|j�7}|t�
�7}|jd
kr{|j��}|t�||�7}|t�
�7}n�|jdkr�|t�dd�7}|t�
�7}n�|jdkr�n�|jd
kr�n�|jdkr�|jdvs�J�|t�|j|j�7}|t�
�7}nw|jdkr�|t�dd�7}|t�
�7}nc|jdk�r|t�dd�7}|t�
�7}|jdkr�|t�dd�7}|t�
�7}n;|jdk�r	|t�dd�7}|t�
�7}n&|jdk�sJ|j��n|jdk�r*|t�dd�7}|t�
�7}nJ|j��|j�||||j�|}|j�rWt��}	d|	_|�
|	�|	}|j�|	d||j�|j�re|t�dd�7}dSdS)NT�is_multiline�
declarator�
add_permalink�tparam-line-spec)r,r�r�r`rvr�rOrzrkrM�rMr�r�r]�
enum-class�enum-structr�r�Fr�r�)r6r,rr�r��isRedeclarationr�ry�getr�rsr�r�r�r�r.rqr�r�r�r�)
r2rZr[r\r��mainDeclNode�reqNoder]�lastDeclNode�trailingReqNoder3r3r4rycs�
�











��z!ASTDeclaration.describe_signaturer�)rzr/rg)r;r<r=r>r�r�rrEr5r�r�r�r�rr�r�rhrTr�r*r�rrryr3r3r3r4r/	s<������
�


���r/c@s4eZdZdededdfdd�Zdedefdd	�ZdS)
�ASTNamespacer�r�rzNcCr~r1)r�r�)r2r�r�r3r3r4r5�r�zASTNamespace.__init__r�cCs4g}|jr
|�||j��|�||j��d�|�SrB)r�rsr�r�r�r3r3r4r��s

zASTNamespace._stringify)	r;r<r=r�r�r5r*r>r�r3r3r3r4r��s�
�r�c@s:eZdZdeddddeeefdededdfd	d
�Z	dS)�SymbolLookupResult�symbolsr-�parentSymbolr{r�r^rzNcCs"||_||_||_||_||_dSr1)r�r�r{r�r^)r2r�r�r{r�r^r3r3r4r5�s

zSymbolLookupResult.__init__)
r;r<r=rrrCr|rr}r5r3r3r3r4r��s
����r�c@s4eZdZdeeeeeefe	fddfdd�Z
dS)�	LookupKeyr�rzNcCr�r1r�r�r3r3r4r5�r�zLookupKey.__init__)r;r<r=rr	rzrr�r�r>r5r3r3r3r4r��s���r�cs
eZdZdZdZdZdZdd�Zdd�Ze	de
d	d
fdd��ZdYd
d�Zde
de
d	d
f�fdd�Zdddeeefdeeefde
dede
ded	d
fdd�Zdede
ded	d
fdd�ZdYdd�ZdYd d!�Zde
d	d
fd"d#�Zd	ee
fd$d%�Zed	ed&fd'd(��ZdZd*d+�Z d	e!fd,d-�Z"deeefde
de#d.e$d/e$d0e$d1e$d	dfd2d3�Z%deeefde
de#d.e$d/e$d0e$d1e$d4e$d	edfd5d6�Z&d7e!d8e'e
d9e(deeefe
e#gdfd:e$d;e
d.e$d/e$d0e$d1e$d4e$d	e)fd<d=�Z*d7e!d8e'e
dede
ded	dfd>d?�Z+d@ddAe'e
dBdCd	d
fdDdE�Z,	
d[d7e!dFe-d	dfdGdH�Z.dede
ded	dfdIdJ�Z/deeefd/e$d0e$d4e$d	df
dKdL�Z0d\dMdN�Z1d7e!d8e'e
dOe
d.e$d/e$d0e$d4e$d	e2e'de
ffdPdQ�Z3dedOe
d.e$d/e$d0e$d	dfdRdS�Z4dTed	e
fdUdV�Z5dTed	e
fdWdX�Z6�Z7S)]r-rz  FcCsJ�r1r3r8r3r3r4�__copy__�r�zSymbol.__copy__cCs|jrJ�tddddddd�Sr1)r�r-)r2�memor3r3r4�__deepcopy__�szSymbol.__deepcopy__r�rzNcGs ttjtjdd�t|�dS)Nr���end)rnr-�debug_indent_string�debug_indentr�r3r3r4�debug_print�szSymbol.debug_printcCsT|js|jrJ�|jr
J�|jrJ�|jrJ�|jrJ�dS|jr&|js(J�dSdSr1)r�r{r�r^r.�docnamer8r3r3r4�_assert_invariants�s




�zSymbol._assert_invariantsr�r�cs|dkrJ�t��||�S)N�children)�super�__setattr__)r2r�r���	__class__r3r4r��szSymbol.__setattr__r�r{r�r^r.r��linecCs~||_d|_d|_||_||_||_||_||_||_d|_	|�
�g|_g|_|jr2|jj�
|�|jr9||j_|��dSr�)r��siblingAbove�siblingBelowr{r�r^r.r�r�r�r��	_children�
_anonChildrenrsr,�!_add_template_and_function_params)r2r�r{r�r^r.r�r�r3r3r4r5�s$zSymbol.__init__cCs�|��|jdusJ�|jdusJ�|jdusJ�|dusJ�|dus%J�|dus+J�||_||j_||_||_|��|��dSr1)r�r.r�r�r,r�)r2r.r�r�r3r3r4�_fill_emptyszSymbol._fill_emptyc	Cs6tjrtjd7_t�d�|jrI|jjD]2}|��sq|jr+tddddd|d�}nd}t	|��d�}t
|gdgdd�}|�|g||j|j
�q|jdur�|jjdur�|jjD]4}|jdur`qX|jj}|duriqXtddddd|d�}|jrxJ�t|j�dks�J�|�|g||j|j
�qXtjr�tjd8_dSdS)NrNz"_add_template_and_function_params:�
templateParamFr��
functionParam)r-�debug_lookupr�r�r�r�r�r.r/rzr��_add_symbolsr�r�r�r�r�r�rFr�)r2�tprir��nn�fpr3r3r4r� s6


�z(Symbol._add_template_and_function_paramscCs6|jdurdS||jjvsJ�|jj�|�d|_dSr1)r�r��remover8r3r3r4r�Ds


z
Symbol.removecCs�g}|jD]7}|�|�|jr7|j|kr7d|_d|_d|_|jdur'|j|j_|jdur1|j|j_d|_d|_|�|�q||_dSr1)r��	clear_docr.r�r�r�r�rs)r2r��newChildren�sChildr3r3r4r�Ks






zSymbol.clear_docccs&�|V|jD]	}|��EdHqdSr1)r��get_all_symbols)r2r�r3r3r4r�\s
�
�zSymbol.get_all_symbols)r-NNccs0�|jD]}|V|j��sq|jEdHqdSr1)r�r{rJ�children_recurse_anon)r2r�r3r3r4r�as�

�zSymbol.children_recurse_anonr�cCs�g}|}|jr|�|�|j}|js|��g}|D]$}t|j|j�}|jdur5|�||j|j��f�q|�||jdf�qt	|�Sr1)
r�rs�reverserzr{r^r.r�r�r�)r2r�r�r�r�r3r3r4rqjs
�
zSymbol.get_lookup_keycCsjg}|}|jr|�|�|j}|js|��g}g}|D]}|�t|j|j��|�d�qt||dd�Sr�)r�rsrrzr{r^r�)r2r�r�r�r�r3r3r4rm~s
�zSymbol.get_full_nested_name�templateShorthand�	matchSelf�
recurseInAnon�correctPrimaryTemplateArgsc	
CsJtjrt�d�|j|||||||dd�}zt|�WSty$YdSw)Nz_find_first_named_symbol ->F)�searchInSiblings)r-r�r��_find_named_symbolsr6�
StopIteration)	r2r{r�r^rrrrr�r3r3r4�_find_first_named_symbol�s

�
�zSymbol._find_first_named_symbolrc	
#s��tjrXtjd7_t�d�tjd7_t�d�t��tjd�dd�t�d��t�d��t�d��t�d	��t�d
��t�d��t�d|�t�d
|�dtf��fdd�}	|rq�durq�durq|	�sqd�dddtf����fdd�}
dttddff���fdd�}|�D]=}tjr�t�d�t|�tjd�dd�|
|�r�tjr�tjd7_t�d�tjd8_|Vtjr�tjd7_q�tjr�tjd8_dSdS)NrNz_find_named_symbols:�self:r�r�zidentOrOp:                  ztemplateParams:             ztemplateArgs:               ztemplateShorthand:          zmatchSelf:                  zrecurseInAnon:              zcorrectPrimaryTemplateAargs:zsearchInSiblings:           rzcs�t�j�t�j�krdSt�j�dkrdStt�j��D]3}�j|}�j|}t|j�}t|�}|�d�}|j|kr>dS|rF|dd�n|}||krOdSqdS)NTrr���F)rFr�r�r�r>r��endswithr)r�rkr��	paramName�argTxt�isArgPackExpansion�argName)r^r�r3r4�isSpecialization�s"




�z4Symbol._find_named_symbols.<locals>.isSpecializationr�r-cs�|j�krdS|jdu�dukr�durdS�sdS�r't|j�t��kr'dS|jdu�dukr2dS|jr@t|j�t��kr@dSdS)NFT)r{r�r>r^�r�)r{r^r�rr3r4�matches�s 
z+Symbol._find_named_symbols.<locals>.matchesc3s���}tjrt�d�t|�tjd�dd�	�r|V�r&|jEdHn|jEdH|jdur3dS|j}tjrJt�d�t|�tjd�dd�q)Nzsearching in self:rNr�r�Tzsearching in sibling:)	r-r�r�rn�	to_stringr�r�r�r�r)rrr2r3r4�
candidates�s$�


�z.Symbol._find_named_symbols.<locals>.candidates�
candidate:rrMr�)r-r�r�r�rnrrEr)
r2r{r�r^rrrrrrrrr�r3)r{rrr2r^r�rr4r�sL�

 


��zSymbol._find_named_symbolsr��
templateDecls�onMissingQualifiedSymbol�strictTemplateParamArgLists�ancestorLookupTypec
Csrtjretjd7_t�d�tjd7_t�d�t|�tjd�dd�t�d|�t�dd�d	d
�|D���t�d|�t�d|�t�d
|�t�d|�t�d|�t�d|	�t�d|
�|r||��t|�ks{|��dt|�ks{J�nt|�|��dks�J�|j	}|}|j
r�|jr�|j}|js�|dur�|d}
|
��s�|jr�|j
|
j|||
d�r�t|�dkr�|dkr�|r�|jr�|jj|
jkr�nn|j}|js�tjr�t�d�t|�tjd�dd�d}|dd�D]g}|j}|j}|�r|�r|t|�k�sJ�||}|d7}nd}n|�r"|t|�k�r"||}|d7}nd}|j|||||||	d�}|du�rO|||||�}|du�rOtj�rLtjd8_dSd}|}q�tj�rit�d�t|�tjd�dd�|d}|j}|j}|t|�k�r�|dt|�k�s�J�||}n|t|�k�s�J�d}|j||||||d|
d�}tj�r�t|�}tjd8_t|||||�S)NrNz_symbol_lookup:r	r�r�znestedName:        ztemplateDecls:     r�cs��|]}t|�VqdSr1r��r�r�r3r3r4r�r�z(Symbol._symbol_lookup.<locals>.<genexpr>zstrictTemplateParamArgLists:zancestorLookupType:ztemplateShorthand: zmatchSelf:         zrecurseInAnon:     zcorrectPrimaryTemplateArgs: zsearchInSiblings:  r�rrrrMzstarting point:r��rrrrr�Fzhandle last name from:)rrrrr)r-r�r�r�rnrr�r�rFr�r�r�r��find_identifierr{r^rr�listr�)r2r�rrrrrrrrrr�r��	firstName�
iTemplateDeclr�r{r^r�r,r�r3r3r4�_symbol_lookups�

�����


�
�


��zSymbol._symbol_lookupcs�tjr9tjd7_t�d�tjd7_t�dd�dd�|D���t�d|�t�d��t�d	�����d
ddtttfd
t	dt
ddf
dd�}|j|||dddddddd�
��dusaJ�t�j
�}t|�dkr�tjr�t�d�tjd7_t�d�j�t�d�j�t�d�j�t�d��t�d�����tjd8_t�j�j�j�j���d�}tjr�tjd8_|Stjr�t�d�tjd7_t�dt|��tjd8_�s�tjr�t�d �tjd8_|dSg}	g}
g}|D]}|jdu�r
|	�|�q�|j�r|�|�q�|
�|�q�tj�r6t�d!t|	��t�d"t|
��t�d#t|��d1����fd$d%�}
t|
�dk�rJd}nY|
�}d2�fd(d)�}�jd*k�rjt|
�dk�scJ�||
d|����}tj�rxt�d+|�|
D](}|jjd*k�r�|||�|j��}tj�r�t�d,|�||k�r�|||��qzt|	�dk�r�tj�r�t�d-�|du�r�t�d.�nt�d/�tjd8_|du�r�|S|
�Stj�r�t�d0|du�tjd8_|du�r�|��|	d}|�����|S)3NrNz
_add_symbols:ztdecls:r�csrr1r�rr3r3r4r��r�z&Symbol._add_symbols.<locals>.<genexpr>z
nn:       z
decl:     zlocation: {}:{}r�r-r{r�r^rzc	Ssttjr/tjd7_t�d�tjd7_t�d|�t�d|�t�d|�tjd8_t||||dddd�S)NrNz'_add_symbols, onMissingQualifiedSymbol:�templateParams:�identOrOp:     ztemplateARgs:  r��r�r{r�r^r.r�r�)r-r�r�r��r�r{r�r^r3r3r4r�s
�z5Symbol._add_symbols.<locals>.onMissingQualifiedSymbolTF�rrrrrrrrz _add_symbols, result, no symbol:r#r$ztemplateArgs:  zdeclaration:   zlocation:      {}:{}r%r�z_add_symbols, result, symbols:znumber symbols:zno declarationz
#noDecl:  z
#withDecl:z
#dupDecl: c	sBtjrt�d�t�j�j�j�j���d�}tjrt�d�|S)Nz begin: creating candidate symbolr%z end:   creating candidate symbol)r-r�r�r�r{r�r^r��r.r�r��lookupResultr3r4�makeCandSymbol�s
�
z+Symbol._add_symbols.<locals>.makeCandSymbolr,�
candSymbolcsJtjrtjd7_t�d�tjd8_tjd8_d|_t|���)NrN�
redeclarationr�T)r-r�r�r�r�r+)r,r+�r.r3r4�handleDuplicateDeclaration�s

z7Symbol._add_symbols.<locals>.handleDuplicateDeclarationrkzcandId:zoldId: zno match, no emptyz$result is already created candSymbolzresult is makeCandSymbol()zAno match, but fill an empty declaration, candSybmol is not None?:)rzr-)r,r-r+r-rzN)r-r�r�r�r�r�rrCr|rr}r"rr�rFr�r{r^r�r.rsr�r�r�r�r�)r2r�rr.r�r�rr�r,�noDecl�withDecl�dupDeclr�r*r+r.�candId�oldIdr3r(r4r��s�

���
��	

�

	




�




zSymbol._add_symbolsr�docnamesr\rcCs�tjrtjd7_t�d�|dusJ�dd�}tjr#tjd7_|jD�]:}tjr=t�d|�tj��tjd7_|jrU|||�tjrTt�d�tjd8_q&|j|j|j	|j
dddddd�}t|�}tjrtt�d	t|��d
d�|D�}tjr�t�dt|��t|�d
kr�|||�tjr�tjd8_q&d}	|j
dur�tjr�t�d�|d
}	n9|j
��}
tjr�t�d|
�|D](}|j
dur�tjr�t�d�|}	q�|j
��}tjr�t�d|�||
kr�|}	nq�tjr�tjd8_|	dur�|||�q&|j
�rZ|j|v�rZ|	j
�s|	�|j
|j|j�nD|	j|jk�r>t|	j
�}
td�}||	j|	j|	j
j|
f}tj||j|jfd�nd}|d|	�d�7}|d|�d�7}tj||jd�|	�|||�q&tj�rotjd8_dSdS)NrNzmerge_with:cSs|j�|�||_|��dSr1)r�rsr�r�)r2�
otherChildr3r3r4�unconditionalAddCsz+Symbol.merge_with.<locals>.unconditionalAddzotherChild:
r�F)r{r�r^rrrrrzraw candidate symbols:cSsg|]}|js|�qSr3)r��r�r�r3r3r4r�`sz%Symbol.merge_with.<locals>.<listcomp>z non-duplicate candidate symbols:rzno declaration in other childz
queryId:  zempty candidater�RDuplicate C++ declaration, also defined at %s:%s.
Declaration is '.. cpp:%s:: %s'.��locationz1Internal C++ domain error during symbol merging.
z
ourChild:
z
otherChild:
r�)r-r�r�r�r�rr�rr{r�r^rrFr.r�r�r�r�r>rr��logger�warning�
merge_with)r2rr4r\r6r5�candiateIterrr��ourChild�queryIdr,r2r��msgr3r3r4r=<s�


�







�
�

��zSymbol.merge_withr�cCsZtjrtjd7_t�d�|r|j}ng}|j||dddd�}tjr+tjd8_|S)NrNz	add_name:)r.r�r�)r-r�r�r�r�r�)r2r�r�rr�r3r3r4�add_name�s
�zSymbol.add_namecCs�tjrtjd7_t�d�|dusJ�|dusJ�|dus!J�|j}|jr,|jj}ng}|�|||||�}tjrAtjd8_|S)NrNzadd_declaration:)r-r�r�r�r�r�r�r�)r2r.r�r�r�rr�r3r3r4�add_declaration�s

zSymbol.add_declarationcCs,tjrAtjd7_t�d�tjd7_t�d|�t�d|�t�d|�t�d|�t|�tjd�dd�tjd	8_|}|dur�tjritjd	7_t�d
�t|�tjd�dd�tjd	8_|rr|j|krr|S|rw|jn|j}|D]}|j|kr�|Sq||s�	dS|j	}|dusGdS)NrNzfind_identifier:zidentOrOp:       zmatchSelf:       zrecurseInAnon:   zsearchInSiblings:r�r�r�ztrying:)
r-r�r�r�rnrr{r�r�r�)r2r{rrr�currentr�r�r3r3r4r�s<


���zSymbol.find_identifierc

Cs6tjrtjd7_t�d�tjd7_|}|jD]s\}}}|dur@d}|jD]}|jdur1q)|j��|kr<|}nq)|}n|j}|j	}	|j
|||	ddddd�}tjr}t�d|�t�d|�t�d|�|durxt|�tjd�dd	�nt�d
�|dur�tjr�tjd8_dSqtjr�tjd8_|S)NrNzdirect_lookup:Frzname:          r#zid:            r�r�z	not foundr�)
r-r�r�r�r�r�r.r�r{r^rrnr)
r2r�r�r�r�r�r��candr{r^r3r3r4�
direct_lookup�sP


��
�zSymbol.direct_lookuprFcs�tjrQtjd7_t�d�tjd7_t�d�t|�tjd�dd�t�d|�t�d|�t�d|�t�d	|�t�d
|�t�d|�t�d|�Gd
d�dt��dddttt	fdt
dtddf
�fdd�}z|j|||d||||d|d�
}	Wn
�y�YdSw|	dur�tjr�tjd8_dSt
|	j�}
t|
�dkr�tjr�tjd8_|
dfS|	jjdur�|	jjjdkr�dS|	jj|	jdd|||dd�}tjr�tjd8_|dur�|gdfSdS)NrNz
find_name:r	r�r�znestedName:       ztemplateDecls:    ztyp:              ztemplateShorthand:zmatchSelf:        zrecurseInAnon:    zsearchInSiblings: c@r?)z8Symbol.find_name.<locals>.QualifiedSymbolIsTemplateParamNrAr3r3r3r4�QualifiedSymbolIsTemplateParamrBrGr�r-r{r�r^rzcs |jdur|jjdkr���dS)Nr�)r.r�r&�rGr3r4rs
z2Symbol.find_name.<locals>.onMissingQualifiedSymbolFr')N�templateParamInQualifiedr�r�rr�r)r-r�r�r�rnrrtrrCr|rr}r"rr�rFr�r.r�rr{)r2r�rrFrrrrrr)r�r,r3rHr4�	find_namesv


����

�	�
�
zSymbol.find_namecCs tjrtjd7_t�d�|j}|jr|jj}ng}dddttt	fdt
dtddf
d	d
�}|j|||d||||ddd�
}	tjrHtjd8_|	durNdSt
|	j�}
t|
�d
kr[dSt|	j|	j|	j|	j|ddd�}|��}|
D]}
|
jdurxqp|
j��}||kr�|��|
Sqp|��dS)NrNzfind_declaration:r�r-r{r�r^rzcS�dSr1r3r&r3r3r4r`sz9Symbol.find_declaration.<locals>.onMissingQualifiedSymbolFr'r�fakeDocnameForQuery�*r%)r-r�r�r�r�r�r�rrCr|rr}r"rr�rFr�r{r�r^r�r.r�)r2r.rFrrrr�rrr)r��querySymbolr@r,r2r3r3r4�find_declarationTsh


���
��	
�

�zSymbol.find_declaration�indentcCs�tj|g}|js|�d�nO|jr'|�t|j��|�d�|�tj|�|jr3|�t|j��n|�t|j��|jrF|�t|j��|jr^|�d�|j	rV|�d�|�t|j��|j
rq|�d�|�|j
�|�d�|�d�d�|�S)Nr��
z: z!!duplicate!! z	(rr�)r-r�r�rsr�r>r{r.r^r�r�r�)r2rPr�r3r3r4r�s.






zSymbol.to_stringcCs6|�|�g}|jD]}|�|�|d��q	d�|�S)NrNr�)rr�rsr7r�)r2rPr�r�r3r3r4r7�s

zSymbol.dump�rzN)rzr�r1)r�r�rzr-)8r;r<r=r�r�r��debug_show_treer�r��staticmethodrr�r�r>r�rrCr|r�r�r/rhr5r�r�r�r�rr�r�rr�rqr�rmr}rErrrrr�r"r�r=r�rBrCrrFr	rJrOrr7�
__classcell__r3r3r�r4r-�s"

�����
�

$
������
��������
�j��������
����
�6�
�c��
���
����
�
)�����
�M��
�6r-c@s�eZdZedefdd��Zedd��Zedd��Zdefdd	�Zde	fd
d�Z
defdd
�Zdefdd�Z
dedededeeeeefeffdd�Zdefdd�Zdeeeffdd�Zdefdd�Zdeeeffdd�Zdefdd�Zdefdd �Zdefd!d"�Zd#edefd$d%�Zd&edd'fd(d)�Zd#edefd*d+�Z d#edefd,d-�Z!defd.d/�Z"	0d}d1eed2e#gefd3edefd4d5�Z$de%fd6d7�Z&de'fd8d9�Z(d~d;ede)fd<d=�Z*de+fd>d?�Z,de-fd@dA�Z.dBede/fdCdD�Z0dEedFede1fdGdH�Z2d}dEedFede3fdIdJ�Z4dKeeefdBedFedee5e6ffdLdM�Z7	0d}dKeeefdBedFede8fdNdO�Z9ddEedPede:fdQdR�Z;d�dKeeefdEede<fdSdT�Z=dKeeefdEedee>e?ffdUdV�Z@deAfdWdX�ZBdeCfdYdZ�ZDdeEfd[d\�ZFdeGfd]d^�ZHdeIfd_d`�ZJdeKfdadb�ZLdeMfdcdd�ZNdeOfdedf�ZPdeQfdgdh�ZRdeSeTfdidj�ZUdkedeSeVfdldm�ZW	:d~dne)doeVdpedqedeVf
drds�ZXdkedtedeYfdudv�ZZde[fdwdx�Z\deee[eYfeffdydz�Z]deee<ffd{d|�Z^d'S)��DefinitionParserrzcCr�)N�C++r3r8r3r3r4�language�r�zDefinitionParser.languagecCr-r1)�config�cpp_id_attributesr8r3r3r4�
id_attributes�r.zDefinitionParser.id_attributescCr-r1)rY�cpp_paren_attributesr8r3r3r4�paren_attributes�r.z!DefinitionParser.paren_attributescCs�|jdkrdS|j}|jd7_d}	|jr|�d�n|jdkr,|s,|jd7_n|jdkr4d}nd}|jd7_q|j||j�S)N�"rNFTz$Unexpected end during inside string.�\)�current_char�pos�eof�fail�
definition)r2�startPos�escaper3r3r4�
_parse_string�s"

�zDefinitionParser._parse_stringc
s�dtdtf�fdd�}�����d�rt�S��d�r td�S��d�r)td	�S�j}��t�rH��t�}t	�j
|�j��}|rD|S||�Sttt
tfD]"}��|�rp��t�}t	�j
|�j��}|rj|S||�SqN���}|dur|t|��S��t�rLjj�d
�}�j�d�}	z
t||	�}
W||
�Sty�}z��d|�WYd}~||
�Sd}~wty���d
�Y||
�SwdS)Nr�rzcs"��t�s|St�j�}t||�Sr1)�match�udl_identifier_rerC�matched_textr�r�r8r3r4�_udl�s


z-DefinitionParser._parse_literal.<locals>._udlrpr�TraFrNr�z8Can not handle character literal. Internal error was: %szJCan not handle character literal resulting in multiple decoded characters.)r��skip_ws�	skip_wordr�r�rarhr/r0r�rdr-r1r3r5r4rgr�r.�
last_match�groupr��UnicodeDecodeErrorrcr+)r2rkra�	hasSuffix�floatLit�regex�intLit�stringr]r��charLitr�r3r8r4�_parse_literal�sV	




�

�
����zDefinitionParser._parse_literalc
Cs�|jdkrdS|jd7_|��|�d�r8|�t�s!|�d�|j}|��}|�	d�s2|�d�t
d||�S|j}z)|��|��}|��|�t�sR|�d�|j}|��|�d�sc|�d�WnGty�}z;||_z|��}|��|�	d�s�|�d	�Wnty�}z
|�
|d
f|dfgd�|�d}~wwt|�WYd}~Sd}~ww|�	d�r�t
||d�S|�t�s�|�d
�||jkr�|�d||jf�|��}|��|�	d�s�|�d�t
|||�S)Nr�rNrz6Expected fold operator after '...' in fold expression.rz'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.zIf fold expressionzIf 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`rarl�skip_string_and_wsrh�_fold_operator_rercrj�_parse_cast_expression�skip_stringr�r(�_parse_expression�_make_multi_errorr)r2r�r�rar��eFoldr��eExprr3r3r4�_parse_fold_or_paren_expressionsv









�

��������



�

z0DefinitionParser._parse_fold_or_paren_expressioncCsd|��|��}|dur|S|��|�d�rt�S|��}|dur$|S|��}|dur0t|�SdSr�)rlrwrmr�r��_parse_nested_namer)r2r�r�r3r3r4�_parse_primary_expressionCs
z*DefinitionParser._parse_primary_expressionr��open�closecCs�|��|�|�sdS|�|�rgdfSg}d}	|��|��}|��|�d�r2|�t|��n|�|�|��|�|�rE	||fS|�d�sS|�d||f�|j|krj|dkrj|jd7_d}	||fSq)	Nr�FTrr�z"Error in %s, expected ',' or '%s'.r�rN)	rlrxr{�_parse_initializer_clausersr`rcr`ra)r2r�r�r�r>r�r	r3r3r4�_parse_initializer_listZs4





��z(DefinitionParser._parse_initializer_listcCs&|�ddd�\}}|durdSt|�S)Nzparenthesized expression-listr�r)r�r;r�r3r3r4�_parse_paren_expression_list|s�z-DefinitionParser._parse_paren_expression_listcCs |��}|dur
|S|jdd�S�NF��
inTemplate)�_parse_braced_init_list�_parse_assignment_expression)r2�bracedInitListr3r3r4r��sz*DefinitionParser._parse_initializer_clausecCs(|�ddd�\}}|durdSt||�S)Nzbraced-init-listr�r�)r�r<r�r3r3r4r��s
z(DefinitionParser._parse_braced_init_listcCs|��}|dur
|S|��Sr1)r�r�)r2�parenr3r3r4�*_parse_expression_list_or_braced_init_list�sz;DefinitionParser._parse_expression_list_or_braced_init_listc
sLd}d}���d}tD]}��|�r|}nq|dursd}��d�s*��d|���d�}�����d�s?��d|���d�sK��d|�d	tf�fd
d�}��dg|�}�����d�sk��d
|�t	|||�}�n��d��rd}��d�s���d��j
}z��d�}t|dd�}��d�s���d�Wn�t�y}	zX|�_
z"d	tf�fdd�}��dg|�}t|dd�}��d�s̈�d�Wn,ty�}
z |�_
d}|d7}g}|�
|	df�|�
|
df���||�|
�d}
~
wwWYd}	~	ntd}	~	ww�j
}z���}d}Wnct�ys}
zV|�_
z��dd�}d}����jdk�r:�jdk�r:��d�Wn-t�yh}z |�_
d}|d7}g}|�
|
d f�|�
|df���||�|�d}~wwWYd}
~
nd}
~
wwg}	���|d!v�r��d"��r����}�����d#��s���d$�|�
t|���qv��d%��rш�d&��r��j
d'8_
n��d(��rĈj
d)8_
n
���}|�
t|���qv��d*��r��d&��r�j
d)8_
n
���}|�
t|���qv��d+��r|�
t���qv��d,��r|�
t���qv���}|du�r |�
t|���qv	t||�S)-Nrr�zExpected '<' after '%s'.Fr�z Expected '>' after type in '%s'.r�zExpected '(' in '%s'.rzc����Sr1�r|r3r8r3r4�parser�r3z:DefinitionParser._parse_postfix_expression.<locals>.parserrzExpected ')' to end '%s'.r�zExpected '(' after 'typeid'.T)rKz%Expected ')' to end 'typeid' of type.cr�r1r�r3r8r3r4r��r3z+Expected ')' to end 'typeid' of expression.zError in 'typeid(...)'.z Expected type or expression.�If type�
If expressionr	�operatorCast�typeOperatorCastr�z3Expecting '(' or '{' after type in cast expression.zError in postfix expression,z% expected primary expression or type.zIf primary expression)r	rr�r$r%z*Expected ']' in end of postfix expression.r*r�r�z..rMr�r�r�)rlrG�skip_word_and_wsr{rc�_parse_typerxr��_parse_expression_fallbackrErarIr(rsr}r�r`r|r"r�r(r.r0r6r�r8r?)r2�
prefixTyper]rr�rFr�r	ra�eTyper�header�errors�eOuter�eInnerrAr�r9r3r8r4�_parse_postfix_expression�s�
�









�

�����
�����



z*DefinitionParser._parse_postfix_expressionc
Cs�|��tD] }|ddvr|�|�}n|�|�}|r&|��}t||�Sq|�d�r�|�d�r\|�d�s;|�d�|�	t
�sE|�d�t|j�}|��|�d�sX|�d	�t
|�S|�d�ry|jd
d�}|��|�d�su|�d�t|�S|��}t|�S|�d
�r�|�d�s�|�d�|jd
d�}|��|�d�s�|�d�t|�S|�d�r�|�d�s�|�d�|��}|��|�d�s�|�d�t|�S|j}|�d�}|��|�d�s�||_n/d}|�d�r�|�d�|r�|jdd�}	|jd
dd�}
n|�d�|��}t||t|	|
�|�S|j}|�d�}|��|�d��s*||_|��S|�d�}|�r=|�d��s=|�d�|��}t|||�S)NrrRr}rr�z Expecting '(' after 'sizeof...'.z%Expecting identifier for 'sizeof...'.rz!Expecting ')' to end 'sizeof...'.F��namedzExpecting ')' to end 'sizeof'.r>zExpecting '(' after 'alignof'.zExpecting ')' to end 'alignof'.rmzExpecting '(' after 'noexcept'.� Expecting ')' to end 'noexcept'.r�rlTzYSorry, 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.rXr$r%z(Expected ']' in array delete-expression.)rl�_expression_unary_opsrmr{rzrPr�rxrcrhr2rCrjrTr�rX�_parse_unary_expressionrarfr|rhra�_parse_decl_specs�_parse_declaratorr�rlr@rqr�)
r2r�r�r	r�rFrar�rmrhrir9rrr3r3r4r�4s�

�




























�
z(DefinitionParser._parse_unary_expressionc
Cs�|j}|��|�d�rdz|�d�}|�d�s|�d�|��}t||�WStyc}z2||_z|��WWYd}~Sty^}zg}|�	|df�|�	|df�|�
|d�|�d}~wwd}~ww|��S)Nr�Frz Expected ')' in cast expression.zIf type cast expressionzIf unary expressionzError in cast expression.)rarlr{r�rcrzrvr(r�rsr})r2rarFr	�exCast�exUnary�errsr3r3r4rz�s6



������z'DefinitionParser._parse_cast_expressionr�cs,dtdtdtdtf�fdd���|d|d�S)	Nr2�opIdr�rzc
	s(�dtt�krdtdtf�fdd�}n
dtdtf���fdd�}g}g}|�||d��	���|r:�jd	kr:nU�j}d
}t�D]G}|ddvrR��|�sQqCn��	|�sXqC|d
krj�jd
krj�jd8_n!z||d�}	|�|	�|�|�d}Wnt
y�|�_YqCw|s�nq.t||�S)NrNr�rzcr�r1)rzr�r8r3r4r��r3zYDefinitionParser._parse_logical_or_expression.<locals>._parse_bin_op_expr.<locals>.parsercs���d|d�S)NrNr�r3r�)�_parse_bin_op_exprr�r2r3r4r��rYr�Tr�Frr�r�)rF�_expression_bin_opsrEr�rsrlr`rarmr{r(r{)
r2r�r�r�r>r|ra�oneMorer�r	�r�)r�r2r4r��sF
�




��
zIDefinitionParser._parse_logical_or_expression.<locals>._parse_bin_op_exprrr�)rVrhrEr�)r2r�r3r�r4�_parse_logical_or_expression�s���(z-DefinitionParser._parse_logical_or_expression�
orExprHeadNcCrKr1r3)r2r�r3r3r4�"_parse_conditional_expression_tail�r�z3DefinitionParser._parse_conditional_expression_tailcCs�g}g}|j|d�}|�|�	d}|��tD]%}|ddvr'|�|�s&qn|�|�s-q|��}|�|�|�|�d}q|sAnqt|�dkrJ|St||�S)Nr�TFr�anox)	r�rsrl�_expression_assignment_opsrmr{r�rFr�)r2r�r>r|�orExprr�r�r	r3r3r4r��s0


�


�
z-DefinitionParser._parse_assignment_expressioncCs|j|d�}|S�Nr�)r�)r2r�r�r3r3r4�_parse_constant_expression	sz+DefinitionParser._parse_constant_expressioncCsT|jdd�g}	|��|�d�sn
|�|jdd��qt|�dkr&|dSt|�S)NFr�Tr�rNr)r�rlr{rsrFr�r�r3r3r4r|s
�z"DefinitionParser._parse_expressionTr�r��allowc

CsF|j}z|�WSty)}z|r|js�|�d|�||_WYd}~nd}~ww|dus0J�|��|j}|�t�r@|j}n]ddddd�}g}	|js�t	|	�dkrX|j
|vrXn+|j
|��vrh|	�||j
�nt	|	�dkry|j
|	dkry|	�
�|jd	7_|jrLt	|�dkr�|jr�|�d
|�|j||j���}t|���S)NzBParsing of expression failed. Using fallback parser. Error was:
%srr�r%r�)r�r�r$r�rr�rNz0Could not find end of expression starting at %d.)rar(�allowFallbackExpressionParsing�warnrlrh�
_string_rerjrbrFr`�keysrsr�rcrd�stripr�)
r2r�r�r��prevPosr�rer��bracketsr�r3r3r4r�sD
���	
��z+DefinitionParser._parse_expression_fallbackcCs�|��|�t�rt|j�SdD],}|�|�sq|��|�d�r7|��|�d�s3|�d|d�|d7}t|�S|�d�rY|��|�t�sP|�d�t	|j�}t
|�S|jd	d
d�}t|�S)N)rlrXr$r%zExpected "]" after  "operator z["r�r�z%Expected user-defined literal suffix.Fr��r�r)
rlrh�_operator_rer�rjrmr{rcr2rCr�r�r�)r2r�rDr�r3r3r4�_parse_operatorIs*








z DefinitionParser._parse_operatorc
Cs�|��|�d�sdS|�d�rtgd�Sg}g}d}	|j}d}d}z:|jdd�}|��|�d�rBd}d}|�d�sA|�d�n|�d�rJd}n
|�d	�rRd}n|�d
�|�|�Wnxty�}zl|�|df�||_z<|j	dd�}	|��|�d�r�d}d}|�d�s�|�d�n|�d�r�d}n
|�d	�r�d}n|�d
�|�t
|	��Wnty�}z||_|�|d
f�d}
|�||
�|�d}~wwWYd}~nd}~ww|r�|r�J�n|r�J�qt||�S)Nr�r�FrNr�rTz3Expected ">" after "..." in template argument list.r�z6Expected "...>", ">" or "," in template argument list.zIf type argumentr�zIf non-type argumentz(Error in parsing template argument list.)rlrxr{r}rar�rcrsr(r�r�r})r2�
prevErrorsr^r�ra�parsedComma�	parsedEndr�r�r�r�r3r3r4�_parse_template_argument_listisz





�





�


������
/z.DefinitionParser._parse_template_argument_listF�
memberPointerc
CsJg}g}|��d}|�d�rd}	|��t|�dkr"|�d�}nd}|�|�d}|�d�r5|��}n)|�t�sL|rGt|�dkrG|��nX|�	d�|j
}|tvrZ|�	d	|�t|�}|j
}z|��}	Wnty�}
z||_
d}	|j�|
�WYd}
~
nd}
~
ww|�t||	��|��|�d�s�|r�|�	d
�nqt|||�S)NFr�TrNrr�rqz#Expected identifier in nested name.z3Expected identifier in nested name, got keyword: %sz.Expected '::' in pointer to member (function).)rlr{rFr�rsr�rhr2r�rcrj�	_keywordsrCrar�r(�otherErrorsrzr�)r2r�r�r�r�r�r{rDrar^�exr3r3r4r��sV





���

�&z#DefinitionParser._parse_nested_namecCs�d}d}g}d}g}|��|�t�r�|j}|�|�|dvr/|dur,|�d�||��|}nc|dvrC|dur@|�d�||��|}nO|dkr^t|�dkrX|�d�||d��|�|�n4|dkrt|�dkry|ddkry|�d�||d��|�|�n|dvr�|dur�|�d�||��|}|��|�t�st|�dkr�dS|dvr�|dur�|�d�||��|dur�|�d�||��t|�dkr�|�d�|d	�|���n�|d
kr�|dur�|�d�||��t|�dkr�|�d�|d	�|���n�|dk�r|du�r|�d�||��n�|dv�r3|du�r|�d�||��t|�dk�r2|�d�|d	�|���n�|d
k�rZ|du�rF|�d�||��t|�dk�rY|�d�|d	�|���n[|dk�r�|du�rm|�d�||��t|�dk�r�|�d�|d	�|���t|�dk�r�|ddk�r�|�d�|d	�|���n|du�r�|du�r�|�d�|��nJd�|���g}|du�r�|�|�|du�r�|�|�|�	|�|du�r�|�|�t
||�S)N)rBr�rErIr�rJrKrLrhr�r�rbrZr�r�r�r�zCan not have both {} and {}.)r|r�r{rri)�
_Imaginary�_Complex)rBr�rEr�rJrKrLr�r�r�r�r�rIrh)r�r�rbrZrNz.Can not have {} without a floating point type.FzUnhandled type {})rlrh�_simple_type_specifiers_rerjrsrcr�rFr�r
r�)r2�modifier�
signedness�widthrFr�r�r�r3r3r4�_parse_simple_type_specifiers�s�


���

�

�

�

�

�







z.DefinitionParser._parse_simple_type_specifierscCs4|��|��}|dur|S|��|�d�rI|�d�s!|�d�|�d�r3|�d�s0|�d�t�S|��}|��|�d�sE|�d�t|�Sd}|��dD]}|�|�r\|}nqQ|�	�}|��d}|�
d�rod}n%|�d�r�|�d�s~|�d	�|�d�s�|�d
�|�d�s�|�d�d}t|||�S)
NrVr�zExpected '(' after 'decltype'.rBrz#Expected ')' after 'decltype(auto'.z%Expected ')' after 'decltype(<expr>'.)rMr�r]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�)rlr�r�rxrcr{r�r|r�r�rmr�)r2r�r	r]�kr�r�r3r3r4�_parse_trailing_type_spec5sL








�







z*DefinitionParser._parse_trailing_type_specr�cCsv|dkrdS|��|�d�s|dkr|�d�ndSg}|��|�d�sn	|��|�d�rG|�tdd��|��|�d�sF|�d	�n'|jdd
d�}|�t|��|��|�d�r_q&|�d�ren	|�d
|j�q'|��|�d�}|�d�}|s�|�d�}d}|�d�r�d}|s�|�d�r�d}d}|��|�d�r�|�d�r�|�	d�}|��|�d�s�|�d�t
|�}nt
d�}|��|�d�r�|jdd�}	nd}	|��|�d�}
|�d�}|
s�|�d�}
g}	|��}
|
dur�n|�|
�q�|��d}|dk�r.|�d��r.|��d}|D]
}|�|��r|}n�q|�s.|�dd�
|��t||||||	|
|||�
S)Nrlr�rkz+Expecting "(" in parameters-and-qualifiers.rrNrTz6Expected ")" after "..." in parameters-and-qualifiers.�single�rr�r�z<Expecting "," or ")" in parameters-and-qualifiers, got "%s".rPr�r�r�rmFr�r�r�r�r�r�r�z'Expected "%s" in initializer-specifier.z" or ")rlr{rcrsr��_parse_type_with_initr`r�rxr�r�r��_parse_attributer�r�)r2r�r�r�rPr�r�r�r	r�r�r�r�r�r��validr�r3r3r4� _parse_parameters_and_qualifiersbs�






���












�
�����z1DefinitionParser._parse_parameters_and_qualifiersr�typedc
Csd}d}d}d}d}d}d}	d}
d}d}d}
g}	|��|s)|r)|�d�}|r)q|s5|r5|�d�}|r5q|s_|dvrK|�d�rCd}q|�d�rKd}q|dkrW|�d	�rWd	}q|�d
�r_d
}q|sm|dvrm|�d�}|rmq|	s{|dvr{|�d
�}	|	r{q|dkr�|
s�|�d�}
|
r�q|s�|�d�}|r�q|dkr�|s�|�d�}|r�q|
s�|�d�}
|
r�q|s�|�d�}|r�q|s�|�d�}|r�d}|�d�r�|jdd�}|s�|�d�|��|�d�s�|�d�t|�}q|��}|r�|�|�q	t	|||||||	|
|||
|�S)zJust parse the simple ones.NrNrPr�)rzrkr~r`rzrjrw)rkrzrgrRrSr�rkrQrdr�r^r�Fr�z=Expected constant expression after '(' in explicit specifier.rz'Expected ')' to end explicit specifier.)
rlrmr�r{r�rcrr�rsr)r2rr�rrrgr�rrQrRrSr�rPrdr�r^r	r�r3r3r4�_parse_decl_specs_simple�s�



















�z)DefinitionParser._parse_decl_specs_simplecCsV|r|dvrtd|��	|�||�}d}|r"|��}|�||�}nd}t||||�S)N�r�rzrkr��#Internal error, unknown outer "%s".)rtr�r�r)r2rr�rrrr3r3r4r�#s
z"DefinitionParser._parse_decl_specsr�c
s�|dkr�j}z���}WnEty|�_d}Yn8w|dkrJ��t�rGt�j�}t|d�}t|gdgdd�}��	��j
dkrF��d�nd}n	|rQ���}nd}g}	��	�|r���d�r���	���d	�rr|�
td��qUd
tf�fdd�}	��d	g|	�}
��d	�s���d
�|�
t|
��qU	��|�}|dur�t|�dkr�|r�|dkr�|r���	���d�r��jdd�}t||d�St|||d�S)N�mayber�Fr�r�z Unexpected ':' after identifier.rNr$r%rzcr�r1r�r3r8r3r4r�ar3z>DefinitionParser._parse_declarator_name_suffix.<locals>.parserz&Expected ']' in end of array operator.rr�r�r3r+)rar�r(rhr2rCrjrzr�rlr`rcr{rsrr�r�r�rFr�r2r')
r2r�r�r�rar(rDr�r)r�r�r*rr3r8r4�_parse_declarator_name_suffix>s\�




�





�z.DefinitionParser._parse_declarator_name_suffixc
Cs�|dvr
td|��g}|��|rT|�d�rT|��d}d}g}	|s,|�d�}|r,q!|s6|�d�}|r6q!|��}|durD|�|�q!	|�|||�}	t|	|||d�S|rz|�d	�rzg}	|��}|durgn|�|�q^|�|||�}	t|	|d
�S|r�|�d�r�|�||d�}	t	|	d�S|�r|j
d
k�r|dkr�tdgdd�S|j}
z
|�
|||�}|WSt�y}z]|�|df�|
|_z2|j
d
ks�J�|�d
�|�|||�}
|�d�s�|�d�|jdd|d�}	t|
|	d�WWYd}~St�y}z|
|_|�|df�d}|�||�|�d}~wwd}~ww|�r�|j}
z|jdd�}|��|�d��s5|�d�|��Wnt�yW}z|
|_|�|df�WYd}~n4d}~wwd}d}	|�sj|�d�}|�rj�q\|�sw|�d�}|�rw�q\	|�|||�}	t||||	d�S|j}
z|�
|||�}|j
dk�r�|j�|�|d��|WSt�y�}z|
|_|�|df�d}|�||�|�d}~ww) N)r�rkr�rlz'Internal error, unknown paramMode '%s'.r�FrNr�rPr7r�rGrrPr�r�r+z/If declarator-id with parameters-and-qualifiersrz$Expected ')' in "( ptr-declarator )"r��r�r�r�r]z"If parenthesis in noptr-declaratorzError in declaratorT)r�z-Expected '*' in pointer to member declarator.zIf pointer to member declaratorr�r�zIf declarator-idz0Error in declarator or parameters-and-qualifiers)rtrlr{r�r�rsr�r5rErNr`r'rar�r(rcr[r}r�rTr�)r2r�r�r�r�r�rPr�r�r6rar��exParamQualr\�exNoPtrParenr�r�r�r3r3r4r�us��



�
���


�����
��

��z"DefinitionParser._parse_declarator�
allowFallbackcs����|dkr���}|durt|dd�S��d�sdS���}|dur)t|�S|dkr0g}n|dkr9ddg}n|durBddg}n��d	|�|dk�d
tf��fdd�}�j|||d
�}t|�S)NrzF)rcr�r�r�r�rz;Internal error, initializer for outer '%s' not implemented.rzcs�j�d�Sr�)r�r3�r�r2r3r4r�r�z3DefinitionParser._parse_initializer.<locals>.parser)r�)rlr�rbr{rcr�r�)r2rr��
bracedInit�fallbackEndr�r�r3r�r4�_parse_initializer�s.


�z#DefinitionParser._parse_initializerc

Cs�|r|dvrtd|��|dkr|sJ�|dvr�g}|j}z|j|dd�}|jd|dd�}|jdd	�Wn�ty�}zr|d
krCd}n	|dkrJd
}nJ�|�||f�||_z|j|d�}|jd|d�}WnBty�}	z6||_|d
krwd}n	|dkr~d}nJ�|�|	|f�	|d
kr�d}
|
d7}
n	|dkr�d}
nJ�|�||
�|	�d}	~	wwWYd}~n*d}~wwd
}|dkr�d}n|dkr�d}d}n|dkr�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�rzrkr�r�r�r�)r�rkF)rr�Tr�)�allowSemicolonr�zIf just a namerkz"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 ztypedef-like declaration.z(Error when parsing function declaration.Nrzr�r�)	rtrar�r��
assert_endr(rsr}r@)
r2r�rr�rerhri�	exUntyped�desc�exTypedr�r�r�r3r3r4r�sr�
�����,
zDefinitionParser._parse_typec
Cs^|r|dvsJ�|j||d�}|dkr|j|d�}t||�S|j}d}z-|j|dd�}|dur5t|d�WS|��|jdkrI|jdkrI||_d}nt||�WSWntyg}z||_|}WYd}~nd}~ww|�d	�srt|d�Sz
|jddd
�}t||�WSty�}	z#|dur�|	�g}
|
�	|df�|
�	|	df�d
}|d7}|�
|
|�|	�d}	~	ww)Nr�r�r�r�F)rr�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�rarlr`r(r{r�rsr})r2r�rr�rrrarr��typeInitr�r�rAr3r3r4r�nsN
���

��z&DefinitionParser._parse_type_with_initcCs:|��}|��|�d�st|d�S|�dd�}t||�S)Nr�F)r�rlr{r~r�rr3r3r4�_parse_type_using�s


z"DefinitionParser._parse_type_usingcCs$|��}|��|�d�}t||�S)Nrz)r�rlr�r�r�r3r3r4�_parse_concept�s

zDefinitionParser._parse_conceptcCs�|��}|��|�d�}g}|��|�d�ra	|��d}d}d}|�d�r*d}|�t�r6|j}|��|s?|�d�r?d}|��}|��|�d�}|�t||||��|��|�d�r`q	t	|||�S)	Nr�r�rNFr�Trr�)
r�rlr�r{rh�_visibility_rerjrsr�r�)r2r�r�r�r�r�r��baseNamer3r3r4�_parse_class�s6





zDefinitionParser._parse_classcCs|��}t|�Sr1)r�r�rr3r3r4�_parse_union�szDefinitionParser._parse_unioncCsBd}|��|��}|��d}|�d�r|jdd�}t|||�S)Nr�Fr�)rlr�r{r�r�)r2r�r�r�r3r3r4�_parse_enum�s
zDefinitionParser._parse_enumcsV���}���d}��d�r&���dtf�fdd�}��g|�}t|�}t||�S)Nr�rzcs�jdd�Sr�)r�r3r8r3r4r��r�z2DefinitionParser._parse_enumerator.<locals>.parser)r�rlr{r�r�rbr�)r2r�rrr��initValr3r8r4�_parse_enumerator�s

z"DefinitionParser._parse_enumeratorc

Cs�|��|�d�r|��}nd}|j}zpd}|��|�d�r"d}n|�d�r*d}n
|r2|�d�n|�d�|��|�d�}|��|�t�rOt	|j
�}nd}|��|sd|�d�rd|jddd	�}nd}|jd
vrp|�d�t
||||�}|rt||�WSt|�WSty�}z?|r��z||_|�dd
�}	t|	�WWYd}~Sty�}
z||_d}g}|�|df�|�|
df�|�||��d}
~
wwd}~ww)Nr�r�rMzFExpected 'typename' or 'class' after template template parameter list.zKExpected 'typename' or 'class' in the beginning of template type parameter.rr�Fr�z,>z4Expected "," or ">" after (template) type parameter.r�r�z&Error when parsing template parameter.z:If unconstrained type parameter or template type parameterz3If constrained type parameter or non-type parameter)rlrm�_parse_template_parameter_listrar�rcr{rhr2rCrjr�r`r�r�r�r(r�r�rsr})
r2r�rar�r�rDrWr�r�rk�eNonTyper�r�r3r3r4�_parse_template_parameter�sn








�
������z*DefinitionParser._parse_template_parameterc	
Csg}|��|�d�s|�d�	|j}d}z|��}|�|�Wnty8}z||_|}WYd}~nd}~ww|��|�d�rFt|�S|�d�rLqd}g}|rY|�|df�z|�d�Wntyy}z
|�|d	f�WYd}~nd}~wwt|�|�	||��)
Nr�zExpected '<' after 'template'rNr�r�z!Error in template parameter list.zIf parameterzExpected "," or ">".zIf no parameter)
rlr{rcrar�rsr(r�rnr})	r2r�ra�errrk�eParamr�r�r�r3r3r4r�!s@

��

��z/DefinitionParser._parse_template_parameter_listcCs�|j}z|��}Wn
ty||_YdSw|��|�d�s%||_dSg}	|��|�d�}|��|�t�s?|�d�|j}|t	vrM|�d|�t
|�}|�t||��|��|�d�rcn|�d�riq'|�d�q(t
||�S)	Nr�rNrz2Expected identifier in template introduction list.zBExpected identifier in template introduction list, got keyword: %sr�r�z:Error in template introduction list. Expected ",", or "}".)rar�rtrlr{rhr2rcrjr�rCrsr�r�)r2rarOr�r��txt_identifierrDr3r3r4�_parse_template_introductionBsB�



�


�
z-DefinitionParser._parse_template_introductioncCs�|��|�d�sdSdtdtfdd�}g}g}|�||��	|��d}|�d�r3d}|�d�n|�d	�r?d}|�d	�|sBn|�||��q t|�d
krVt|d�Stt||��S)Nryr2rzcSs�g}g}|�|���	|��d}|�d�rd}|�d�n|�d�r+d}|�d�|s.n|�|���qt|�dkr@|dSt||�S)NTFr�r?rNr)rsr�rlr{rmrFr{)r2�andExprsr|r�r3r3r4�parse_and_exprts&


�
z?DefinitionParser._parse_requires_clause.<locals>.parse_and_exprTFr�rrrNr)	rlrmrVr�rsr{rFr�r{)r2r�orExprsr|r�r3r3r4�_parse_requires_clausehs.



�z'DefinitionParser._parse_requires_clauser�c
Cs�g}	|��d}|j}|�d�r:z|��}Wn)ty9}z|dkr3t|�dkr3td�WYd}~S|�d}~ww|��}|sAn|dkrSt|�dkrS||_|�d�|�	|�qt|�dkrh|dkrh|�d�t|�dkrpdSt|�S)NrNr�rzrrOz0More than 1 template parameter list for concept.z,Missing template parameter list for concept.)
rlrarmr�r(rFr�rrcrs)r2r�r�r�rar�r3r3r4�"_parse_template_declaration_prefix�s6
��

�
z3DefinitionParser._parse_template_declaration_prefixr�r��fullSpecShorthand�isMembercCs�|��}d}|sd}n|r|jdurd}d}nt|j�}|d|kr+|�d||f�||krs||}|sU|sUd|||f}	|	d7}	|rJ|	d|7}	|	t|�7}	|�|	�g}
t|�D]	}|
�tg��q[|ro|so|
�	|j�t
|
�}|S)	NFrTrNzeToo 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�rFrcr>r�r�rsr�r
r�)r2r�r�rr�numArgs�isMemberInstantiation�	numParams�numExtrarA�newTemplatesr�r3r3r4�_check_template_consistency�s<
��
z,DefinitionParser._check_template_consistencyr�c

Cs|dvr
td|��|dvrtd|��d}d}d}d}d}|��|�t�r*|j}|dvr?|�|�}|dkr?|dur?|��}|dkr�g}|j}	z|sR|jddd	�}Wnt	yo}
z|�
|
d
f�|	|_WYd}
~
nd}
~
ww|j}	z|sz|��}Wnnt	y�}
z|	|_|�
|
df�d}|�||�|
�d}
~
ww|d
kr�|�
�}nF|dkr�|jddd	�}n:|dkr�|jddd	�}|dur�|��}n&|dkr�|��}n|dkr�|��}n|dkr�|��}n|dkr�|��}nJ�|j|j|d|dkd�}|��|�d�}t||||||||�S)N)rMr�rkrzr�rOr]r�z(Internal error, unknown objectType "%s".)rMr�r�rkrz�varr�rOr]r�r�r�z+Internal error, unknown directiveType "%s".)r�rOrzrkrMrkr�Tr�r�zIf type alias or template aliaszError in type declaration.rOrzrMr�r]r�F)rrr�)rtrlrhr�rjrrrar�r(rsr�r}r�r�r�r�r�r�rr�r{r/)
r2r�r�r�r�r�r�r.r�rar�r�r�r3r3r4�parse_declaration�s�

������
�



�
�z"DefinitionParser.parse_declarationcCs8|jdd�}|��}|j||dd�}t||�}d|_|S)Nrk�r�F�r)rr�rr�r�)r2r�r�r�r3r3r4�parse_namespace_object(s�
z'DefinitionParser.parse_namespace_objectc

Cs|j}z,|jdd�}|��}|��|�d�|��|j||dd�}t||�}d|_|dfWSt	y�}zGz!||_|�
dd�}|��|�d�|��|dfWWYd}~St	y}}zg}|�|df�|�|d	f�d
}	|�||	�|�d}~wwd}~ww)N�xrefrr�TrrkFzIf shorthand refzIf full function refzError in cross-reference.)
rarr�rlr{r�rr�r�r(rrsr})
r2rar�r��res1�e1�res2�e2r�rAr3r3r4�parse_xref_object1s>
�


����z"DefinitionParser.parse_xref_objectc
Cs�|j}z|��}|��|��|WSty]}z?||_z|�d�}|��|��|WWYd}~StyX}zd}g}|�|df�|�|df�|�||�|�d}~wwd}~ww)NFz%Error when parsing (type) expression.r�r�)rar|rlr�r(r�rsr})r2rar	�exExprrF�exTyper�r�r3r3r4�parse_expressionOs.
����z!DefinitionParser.parse_expressionrgr�r�r1)_r;r<r=r�r>rXr[r]rgr�rwr�r�r�r	rrr<rEr�r;r�r�r�r�r?r�r�rzr�rr�r�r�r|rr�r|r�r}r�r�r�r�r�r�r�r�r�rr�rr�r'r2r�rr�rbr�r@r�r�r�r�r~r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrr�rr�rrr/rr�rrrr3r3r3r4rV�s�

<;��
�"


�_6$�
��
�, A2Y-d]
���

�8��
�w
� 1Q
��

�-
=!&5
�!����
�'E	rVrzcCs ttd�d�}t|gdgdd�S)N�PhonyNameDueToErrorFr�)rzrCr�)r�r3r3r4�_make_phony_error_namee�rcseZdZUdZeded�ddd�gZeee	d<e
je
jd�Ze
e	d	<d
eddfd
d�Zd
edededdfdd�Zedefdd��Zedefdd��Zdedefdd�Zdedefdd�Zded
ededdfdd�Zdeef�fd d!�Zdededefd"d#�Zd(d$d%�Zd(d&d'�Z �Z!S))�	CPPObjectz%Description of a C++ language object.�template parameterzTemplate Parameters)�tparamr!T��labelr��can_collapse�doc_field_types)�noindexentryr��option_spec�astrzNc	Cs�|jdksJ�|j}|sJ�|jdusJ�|jdusJ�|jdus#J�|j}|s*J�|jdur1dS|j}|dur:dS|jdkrAdS|jdkrHdS|j}|j|jdddd�}|dur[dS|j�	�}||_
t||jdd||jj
|��dd�dS)Nr�r]FTrrNr%)r�r,r{r�r^r�r.r�rr�r�r-r\r��get_source_info)r2r)r,r��
parentDecl�targetSymbolr��	declCloner3r3r4�_add_enumerator_to_parentxs<


�

�z#CPPObject._add_enumerator_to_parent�sigrZc	Cs�g}tdtd�D]}z
|j|d�}|�|�Wq	ty'|tks%J�Yq	wtt|��}|d}|s6J�t�d��	|�sIt
jd|||��d�|j
�����d�}d}	|j
j}
|
durt|
j}|
j}
|durhqY|jd	krpd
}	n|
dus]|	s�d|jvr�|}|jjjD]}
|�|
�r�|t|
�d�}nq�|�|�}|jd�d
||ddf�||jjjvr�|jjdd}||vr�|j
j ||<|s�J�|d�|�|dd�D]}|s�q�||jjjvr�|d�|�q�|jj�!|�dSdS)NrNr�rz^[a-zA-Z0-9_]*$zMIndex id generation for C++ object "%s" failed, please report as bug (id=%s).r9r�FrOTr'�entriesr�r�rar�r�)"r�r�rTrsr)r�reversed�re�compilerhr;r<�get_locationr,rmrX�lstripr�r.r�r�r\rY�cpp_index_common_prefix�
startswithrF�get_index_text�	indexnode�state�documentr��
domaindatar��note_explicit_target)r2r)r/rZr�r�rD�newestIdr��isInConceptr�ri�strippedNamer]�	indexTextr�r3r3r4�add_target_and_index�sf��
�
�
��zCPPObject.add_target_and_indexcCr�r1r�r8r3r3r4�object_type�r�zCPPObject.object_typecCrUr1)rCr8r3r3r4�display_object_type�r�zCPPObject.display_object_typer�cCstd�||jfS)Nz%s (C++ %s))rrDrr3r3r4r8�rYzCPPObject.get_index_textr�cCs|�|j|j�Sr1)rrC�objtype)r2r�r3r3r4�parse_definition�r:zCPPObject.parse_definitionr�cCs|�|d|j|�dSr�)ryr\)r2rZr)r�r3r3r4ry�rzCPPObject.describe_signaturecs�|jjjj}d|jvr|jdd}||jd<|��|jd<|jd}|j}|durV|j	dkrVd}t
j|�t
|���|j|jd�|��d�t�}|�|�}||jd	<gSd|jd	<t���S)
N�cpp:parent_symbolra�root_symbolrhrkzmC++ declarations inside functions are not supported. Parent function: {}
Directive name: {}
Directive arg: {}rr9�cpp:last_symbol)r:r;�settingsr\�	temp_datar<rq�ref_contextr.r�r;r<r�r>rmr��	argumentsr4rrBr��run)r2r\�rootr�r+rAr�r,r�r3r4rN�s*




��



z
CPPObject.runc
Cs�|jjd}t|||jjd�}z|�|�}|��Wn$ty>}ztj||d�t	�}|�
|�}||jjd<t|�d}~wwz<|j||jj
|��dd�}|jdusUJ�|jdus\J�|jjd|_|jdurt|jjduspJ�||j_||jjd<Wn1ty�}z%|j|jjd<td�}	|	|jj
|jj|j|f}	tj|	|d�WYd}~nd}~ww|jdkr�|�|�t|j�}
d	|jv|
d	<|�|||
�|S)
NrG�r:rYr9rIrN)r�r�r8r�r�)r\rKrVrYrFr�r(r;r<rrB�
ValueErrorrCr�r*r�r�r+r,rr�rDr�r.�dictr�ry)r2r/rZr�r�r)r�r�r,rAr�r3r3r4�handle_signaturesN

��	�
���



zCPPObject.handle_signaturecCsP|jjd}|s
J�|jjd|_|jjd|_||jjd<|��|jjd<dS)NrIrGrh)r\rK�oldParentSymbolrL�oldParentKeyrq)r2�
lastSymbolr3r3r4�before_content@szCPPObject.before_contentcCs |j|jjd<|j|jjd<dS)NrGrh)rTr\rKrUrLr8r3r3r4�
after_contentHrzCPPObject.after_contentrR)"r;r<r=�__doc__r8rr&rr7�__annotations__r�flagr(r;r/r.r>rrBr�rCrDr8rVrFrrryrrNrSrWrXrUr3r3r�r4r jsB

���
*�
�8��
�%
/r c@�eZdZdZdS)�
CPPTypeObjectr�N�r;r<r=rCr3r3r3r4r]M�r]c@r\)�CPPConceptObjectrONr^r3r3r3r4r`Qr_r`c@r\)�CPPMemberObjectrzNr^r3r3r3r4raUr_rac
@sdeZdZdZejeded�ddd�eded�d	d
dd�eded
�ddd�eded�ddd�gZdS)�CPPFunctionObjectrk�	parameter�
Parameters)rkrcr��argumentTr#�
exceptions�Throwsr	)�throwsr��	exception)r$�rolenamer�r%�retvalz
Return values)�retvalsrk�returnvalue�ReturnsF)�returnsrz)r$�has_argr�N)	r;r<r=rCr r&r8rr7r3r3r3r4rbYs&
��
��
�rbc@s"eZdZdZedefdd��ZdS)�CPPClassObjectrMrzcCs|jdvsJ�|jS)Nr�)rEr8r3r3r4rDnsz"CPPClassObject.display_object_typeN)r;r<r=rCr�r>rDr3r3r3r4rqksrqc@r\)�CPPUnionObjectr�Nr^r3r3r3r4rrur_rrc@r\)�
CPPEnumObjectr]Nr^r3r3r3r4rsyr_rsc@r\)�CPPEnumeratorObjectr�Nr^r3r3r3r4rt}r_rtc@s@eZdZUdZdZdZdZdZiZe	e
d<deefdd	�Z
d
S)�CPPNamespaceObjectzb
    This directive is just to tell Sphinx that we're documenting stuff in
    namespace foo.
    FrNrTr(rzc
Cs�|jjdd}|jd��dvr|}g}nFt|jd|��|jd�}z
|��}|��Wn#t	yP}zt
j||��d�t�}t
|d�}WYd}~nd}~ww|�|j|j�}|g}||jjd<||jjd<|��|jjd	<gS)
NrarHr��NULLr�rprPr9rG�cpp:namespace_stackrh)r\r<rMr�rVr4rYrr�r(r;r<rr�rBr�r�rKrqrL)r2�
rootSymbolr,�stackr�r)r�r�r3r3r4rN�s.
���zCPPNamespaceObject.runN)r;r<r=rY�has_content�required_arguments�optional_arguments�final_argument_whitespacer(r;rZrrrNr3r3r3r4ru�s
ruc@s<eZdZUdZdZdZdZiZee	d<de
efdd�Zd	S)
�CPPNamespacePushObjectFrNrTr(rzc
Cs|jd��dvrgSt|jd|��|jd�}z
|��}|��Wn#tyE}ztj	||��d�t
�}t|d�}WYd}~nd}~ww|jj
�dd�}|sX|jjdd}|�|j|j�}|jj
�dg�}|�|�||jj
d<||jj
d<|��|jjd	<gS)
NrrvrPr9rGrarHrxrh)rMr�rVr4rYrr�r(r;r<rr�r\rKr�r<rBr�r�rsrqrL)r2r�r)r�r��	oldParentr,rzr3r3r4rN�s2
���
zCPPNamespacePushObject.runN�
r;r<r=r{r|r}r~r(r;rZrrrNr3r3r3r4r��
rc@s<eZdZUdZdZdZdZiZee	d<de
efdd�ZdS)	�CPPNamespacePopObjectFrTr(rzcCs�|jj�dd�}|rt|�dkrtjd|��d�g}n|��t|�dkr+|d}n|jjdd}||jjd<||jjd<|�	�|jj
d	<gS)
Nrxrz=C++ namespace pop on empty stack. Defaulting to global scope.r9r�rarHrGrh)r\rKr�rFr;r<r4r�r<rqrL)r2rzr,r3r3r4rN�s�
zCPPNamespacePopObject.runNr�r3r3r3r4r��r�r�csBeZdZ		ddededddeddf
�fdd	�
Zd
d
d�Z�ZS)�	AliasNodeNr/�aliasOptionsr\r�	parentKeyrzcstt���||_||_|dur/d|jvr'|jdd}||jd<|��|jd<|jd|_dS|dus5J�||_dS)NrGrarHrh)	r�r5r/r�rKr<rqrLr�)r2r/r�r\r�rOr�r3r4r5�s



zAliasNode.__init__cCs|j|j|jd|jd�S)N)r\r�)r�r/r�r�r8r3r3r4�copy�s�zAliasNode.copyr�)rzr�)	r;r<r=r>rRr�r5r�rUr3r3r�r4r��s����r�c@sReZdZejdZdededededede	de
efd	d
�Zde	ddfd
d�Z
dS)�AliasTransformrNr��maxdepth�skipThisr��
renderOptionsr;rzc	Cs|dkrd}n
|dkrd}n|d8}d}g}|s-t�dd�}	|�|	�|j�|	d|j|�|r�|r4|}
n"t��}t��}|�|�||_d|d<d	|d
<|d<d|d<|}
|j	D]}
|
jduraqY|
jj
d
vrhqY|j|
|d|||d�}|
�|�qY|s�t
|j�dkr�|�|�|S)NrTrNFr�r�ra�domain�aliasrE�desctype�noindex)r�r��r�r�r�r�r;)rrrsr.ryr\�desc_contentr�r;r�r��_render_symbolr
rFr�)r2r�r�r�r�r�r;�recurser
rZ�childContainer�contentr�r��
childNodesr3r3r4r��sH



�
zAliasTransform._render_symbol�kwargsNcKs||j�t�D�]4}tt|�}|j}|j}zt|||jjd�}|�	�\}}|�
�WntyF}ztj
||d�d\}}WYd}~nd}~ww|durct�|d�}	|	��|	t�||�7}	|�|	�q|jjdjd}
|
�|�}|s�td|�td|�t|
�d	��|s�J�g}|r�t|t�s�J�|}
|
j}|
jr�|
jj}ng}|j||d
ddddd
�\}}|dur�g}nt|t�s�J�|}|j}|j |d
dddd�}|dur�|�!|�dd�|D�}t"|�dk�r
t�|d�}	|�!|	�|	��|	t�||�7}	tj
d||d�|�|	�qg}ddi}|D]#}|j#du�sJ�|j$||j%d|j%d|j%||jd�}|�&|��q|�|�qdS)NrPr9r�r�rarH�Target: �ParentKey: rN�anyTF)r�rrFrrrr�rrrcSsg|]	}|jdur|�qSr1r-r7r3r3r4r�_sz(AliasTransform.apply.<locals>.<listcomp>rz,Can not find C++ declaration for alias '%s'.r�r��norootr�)'r;�traverser�rr/r�rVr\rYrr�r(r;r<rr�clearrr�replace_self�domainsr�rFrnr7r�r�r�r�r�rJr/r�rOrsrFr.r�r�r
)r2r�rur/r�r�r)�isShorthandr�rZryr�r��nsr�r�
failReasonrir�r
r�r�r3r3r4�apply%s�
���





���


��
��zAliasTransform.apply)r;r<r=r"�default_priorityr-rhrErRrrrr�r�r3r3r3r4r��s
���
�.r�c@s6eZdZUejejd�Zeed<de	e
fdd�ZdS)�CPPAliasObject�r�r�r(rzcCsd|jvr|j�dd�\|_|_nd|j|_|_t��}|jj|_|j|d<|j|d<|d<g|_|j	�
dd�d|j	vd	�}|drS|ddkrStjd
|�
�d�|��}t|�D]\}}|�t|||jd��q[t��}|�|�|��|j�|j|j|�d
|jjd<|��|gS)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�rNr�r�rEr�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.r9)r\N�object)r��splitr�rErr�r:r;r�r�r�r;r<r4�get_signatures�	enumeratersr�r\r�rW�nested_parser��content_offsetrKrX)r2rur��
signaturesr�r/�contentnoder3r3r4rN�s2


��
zCPPAliasObject.runN)r;r<r=r�nonnegative_intr[r(r;rZrrrNr3r3r3r4r�{s

�r�c@s6eZdZdedededededeeeffdd�Zd	S)
�CPPXRefRoler\�refnode�has_explicit_title�title�targetrzcCs�|j�|j�|st�dt|��}|ddkr/|s$|�d�r$|dd�}|�d�r/|dd�}|sU|�d�}|dd�dkrU|dd�}|�d�}|d	krU||d
d�}||fS)NrWrdr�r����r�rNr�r�r�)	�
attributes�updaterLr,�subr>rr5�rfind)r2r\r�r�r�r��dcolonr3r3r4�process_link�s 


zCPPXRefRole.process_linkN)	r;r<r=rrrEr>r	r�r3r3r3r4r��s��
�r�csDeZdZdeddf�fdd�Zdeeeeeffdd�Z	�Z
S)�CPPExprRole�asCoderzNcs"t���|rd|_dSd|_dS)Nzcpp-exprz	cpp-texpr)r�r5�
class_type)r2r�r�r3r4r5�s


zCPPExprRole.__init__c
Cs�|j�dd�}t||��|jd�}z|��}Wn+tyB}ztjd|||��d�t	j
d|||jgd�ggfWYd}~Sd}~ww|jj
�dd�}|durW|jjdd	}t	j
d|jgd�}|�|d
|j|�|ggfS)NrQr�rPz!Unparseable C++ expression: %r
%sr9ra)rlrGrHr`)r_r�rVr4rYrr(r;r<r�desc_inliner�r\rKr�r<ry)r2r_r�r)r�r�rZr3r3r4rN�s(�
�(��
zCPPExprRole.run)r;r<r=rEr5r	rrrrNrUr3r3r�r4r��s&	r�c@s�eZdZdZdZdZeed�dddd�eed�ddd�eed	�d
dd�eed�ddd�eed�dd�eed
�d
d�eed�ddd�eed�dd�eed�ddd�eed�ddddddd�d�
Zide	�de	�de
�d	e�de�de�de
�d
e�de�de�de�de�de�de�de�de�Ze�e�e�e�edd�e�e�e�e�e�e�edd�edd�d�
Zeddddddd�id�Zd ed!dfd"d#�Zd$ed ed%ejd!dfd&d'�Z d(e!d!dfd)d*�Z"d+e#ed,e$d!dfd-d.�Z%d$ed/ed0e&d1ed2ed3e!d4e'd!e(e)e'e)effd5d6�Z*d$ed/ed0e&d1ed2ed3e!d4e'd!e)e'fd7d8�Z+d$ed/ed0e&d2ed3e!d4e'd!e#e(ee'ffd9d:�Z,d!e-e(eeeeee.ffd;d<�Z/d3e'd!efd=d>�Z0dS)?�	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.
    rarWrMr�rDr�r�rk�funcrzrrOr]r�zfunction parameterr!)
rMr�rkrzr�rOr]r�r�r�r�r�rkznamespace-pushz
namespace-popr�T)�
fix_parens)r�F)
r�rMr�r�r�rzrr�rOr]r�r	�texprN)rHr�r�rzcCs�tjrtd|�td�t|jd�d��td�|jd}|�|�tjr>td�t|jd�d��td�td|�t|jd	���D]\}}||krU|jd	|=qGdS)
Nz
clear_doc:z	before:rHrNz	before endz	after:z
	after endzclear_doc end:r�)r-rSrnr�r7r�r�items)r2r�ryr��nDocnamer3r3r4r�/s"



��zCPPDomain.clear_docr\r;cCs6tjrtd|�t|jd�d��td|�dSdS)Nzprocess_doc:rHrzprocess_doc end:)r-rSrnr�r7)r2r\r�r;r3r3r4�process_docBs

�zCPPDomain.process_docrwcCs|j�|jj�dSr1)r�r�r\rL)r2rwr3r3r4�process_field_xrefIr�zCPPDomain.process_field_xrefr4�	otherdatacCs�tjr*td�td�t|jd�d��td�td�t|d�d��td�|jd�|d||j�|jd}|d��D]\}}||vrR||vrR|||<qBtjrntd	�t|jd�d��td
�td�dSdS)Nzmerge_domaindata:z	self:rHrNz		self endz	other:z
	other endr�z	result:z	result endzmerge_domaindata end)r-rSrnr�r7r=r\r�)r2r4r��ourNamesr�r�r3r3r4�merge_domaindataLs.�
��zCPPDomain.merge_domaindata�fromdocname�builderrFr�ru�contnodec#
s��dks�dkr�d7�t���jd�}z|��\}	}
Wn4tyP}z(dtdtttff����fdd�}||�\}
}tjd	|
|�d
�WYd}~dSd}~ww��	dd�}�j
d
}|r||�|�}|swtd��td|j
�t|�
d��|s{J�n|}|
r�t|	t�s�J�|	}|j}|jr�|jj}ng}|jo�t|j�dk}|j||�ddd|d�\}}|durňdkr�|dkr�tt|����d}n|d}nt|	t�s�J�|	}|j}|j|�dddd�}|dus�|jdur�t|�}|�d�s�|dkr�t|���dS��d��r	�dd��|jj�dtf���fdd�}|��s*tjd�|jj|���d
�|j}|
�r<|��}|� ��!d�}n|� �}|j"}|�sHJ��dk�r�|�#d��$�} d}!��	dd ��s�|jd!k�r�|
�r��jj%�rt�dk�rt|!d7}!�jj%�r��dk�r�| �&d"��r�|!d7}!�dk�s��dk�r�| �&d#��r�|�&d"��r�|!d7}!n7�jj%�rЈdk�r�|�&d��r�|!d7}!n"�dk�r�| �&d��r�|�&d��s�| dd$�} n
|�&d��r�|!d7}!|!dk�r�| d|!7} |t'�(| �7}t)||||�*�||�|jf}"|"S)%Nr�r�r�rPr�rzc
sx�dkr�dkr�|fSt�dd���jd�}z	|��W�|fSty;}z�dd�|fWYd}~Sd}~ww)Nr�r�r�rP)rVrYrr()r��parser2r)r\rur�rFr3r4�findWarningos�
���z2CPPDomain._resolve_xref_inner.<locals>.findWarningz&Unparseable C++ cross-reference: %r
%sr9r�rhrHr�r�rNT)rrrrrDrIrr�zstd::rP�cpp:r�cs6�dkrdS����}|r�|vStd��f�J�)Nr�Tz"Type is %s, declaration type is %s)�objtypes_for_rolern)�objtypes)�declTypr2rFr3r4�	checkType�s
z0CPPDomain._resolve_xref_inner.<locals>.checkTypezcpp:%s targets a %s (%s).r��refexplicitFrkz
operator()rqr�)+rVrYrr(rtr	r>r;r<r�r�rFrnr7r�r�r�r�r�r�rFr�rJrr/r�rOr.r7r�rErmrXr5r�r�r��add_function_parenthesesrr
r�r:r�)#r2r\r�r�rFr�rur�r�r)r�r�r�r�r�r�ryr�r�r�rrr�r�r�ri�txtNamer�r.�fullNestedName�displayNamer�r��addParenr�r3)r�r\rur2r�rFr4�_resolve_xref_innerds�$
���





�
�
�

����


�

��zCPPDomain._resolve_xref_innerc	Cs|�|||||||�dSrE)r�)r2r\r�r�rFr�rur�r3r3r4�resolve_xref�s
��zCPPDomain.resolve_xrefc	
Cspt���|�|||d|||�\}}Wd�n1swY|r6|dkr,d|fgSd|�|�|fgSgS)Nr�r�zcpp:templateParamr�)r#�suppress_loggingr��role_for_objtype)	r2r\r�r�r�rur��retnoderEr3r3r4�resolve_any_xref�s


��
zCPPDomain.resolve_any_xrefc	cs��|jd}|��D]4}|jdurq
|jsJ�|��}t|��d�}|���d�}|jj}|j}|j�	�}|||||dfVq
dS)NrHr�rN)
r�r�r.r�rmr>r5rXr�r�)	r2ryr,r�r��dispnamer�r�r>r3r3r4�get_objectss�



�zCPPDomain.get_objectscCsl|�dd�}|durdS|�dd�}|dust|j�dkrdS|jd}|�|�}|��}d�t|�|g�S)NrerhrrHr�)r�rFr�rFrmr�r>)r2rur�r�ryr��
parentNamer3r3r4�get_full_qualified_names

z!CPPDomain.get_full_qualified_name)1r;r<r=rYr�r$rr�object_typesrqrrrbrar]r`rsrtrurr�r�rr�r��rolesr-�initial_datar>r�rr
r;r�rr�rrr�rrr	rr�r�r�rrhr�r�r3r3r3r4r��s����������	�
���
�������
�
�����
�����
����
�"
r��appcCs||�t�|�dgd�|�dgd�|�dgd�|�t�|�ddd�|�ddd�d	d
�}|�d|�dd
ddd�S)Nr6r\rZr\�cpp_debug_lookupFr��cpp_debug_show_treecSs(|jjt_|jjt_|jjjdd�dS)NT)r)rYr�r-r�r�rSr6�sort)r�r3r3r4�	initStuff3s

zsetup.<locals>.initStuffzbuilder-inited�builtinr�T)rL�env_version�parallel_read_safe�parallel_write_safe)�
add_domainr��add_config_value�add_post_transformr��connect)r�r�r3r3r4�setup(s

�r�)�rYr2�typingrrrrrrrr	r
rr�docutilsr
�docutils.nodesrrrr�docutils.parsers.rstr�sphinxr�sphinx.addnodesrr�sphinx.applicationr�sphinx.buildersr�sphinx.directivesr�sphinx.domainsrr�sphinx.environmentr�
sphinx.errorsr�
sphinx.localerr�sphinx.rolesrr �sphinx.transformsr!�!sphinx.transforms.post_transformsr"�sphinx.utilr#�sphinx.util.cfamilyr$r%r&r'r(r)r*r+r,r-r.r/r0r1r2r3r4r5r6�sphinx.util.docfieldsr7r8�sphinx.util.docutilsr9�sphinx.util.nodesr:�sphinx.util.typingr;�	getLoggerr;r;r<r3ri�Sr�r�r�ryr�r�r�r�r�r�r�r�rrSr&r>rZr�r�r�rGrtr+r@rCrzr�r�r�r�r�r�r�r�r�r�r�rrrr"r(r.r0r6r8r?rErIrPrTrXrarfrhrlrqrvr{r<r�r�r�r|r�r�r�r�r}r�r�r�r�r�r�r�r�rrrrrr'r2r5rErNrTr[r`r;rbr@r�r�r~r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r/r�r�r�r-rVrr r]r`rarbrqrrrsrtrurr�r�r�r�r�r�r�r�r3r3r3r4�<module>s
4T

{�




	�
�����
���
������������������� �!�"�#�$�%�&�'�(�6�������	�
���
������������������� �!�"�#�$�%�&�'�(�)�)�*�*�+�,�-�.�/�0�1�2�3�5�������
������������������������� �!�"�"�#�$�%�&�'�(�(�)�)�*�*�+�,�-�.�/
�5���

�N
>	 1&('-5	(,!hF ,X.jE;cFp(%$#+$ 9"'->46#gHd
$ /!&A