403Webshell
Server IP : 127.0.0.1  /  Your IP : 216.73.216.109
Web Server : Apache/2.4.54 (Win64) OpenSSL/1.1.1q PHP/8.1.10
System : Windows NT DESKTOP-E5T4RUN 10.0 build 19045 (Windows 10) AMD64
User : SERVERWEB ( 0)
PHP Version : 8.1.10
Disable Function : NONE
MySQL : OFF |  cURL : ON |  WGET : OFF |  Perl : OFF |  Python : OFF |  Sudo : OFF |  Pkexec : OFF
Directory :  C:/cygwin64/lib/python3.9/site-packages/sphinx/domains/__pycache__/

Upload File :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

Current File : C:/cygwin64/lib/python3.9/site-packages/sphinx/domains/__pycache__/cpp.cpython-39.opt-1.pyc
a

�abA��8@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�ZUe�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�Zbd2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\�*Zcd/d)d#d]d^d_d`dadbdcdcdcdcddddd%d%d%deded'd'd'd'd0d0dfdfdfdfdfdgdgdhdhdidjdkdldldldmdmdndodpdjdkdldqdrdsdt�4Zddudvdwdxdydydzd{d|d}d~ddd�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d+d�d�d�d�d�d�d�d�d�d�d�d�d�d�d��7Zed�d�d�d�d�d�d�d�dydyd��
Zfd#d#dad`d_d��Zgee	ehehfeid�<d�d�gd�d�gd�d�gd�d�gd�d�ggd��gd��d�d�gd�d�ggd��d�d�ggZjgd��Zkgd��Zld�d�d�d�d��ZmGd�dÄd�en�ZoGd�dńd�e7�ZpGd�dDŽd�ep�ZqGd�dɄd�ep�ZrGd�d˄d�ep�ZsGd�d̈́d�ep�ZtGd�dτd�et�ZuGd�dфd�eu�ZvGd�dӄd�eu�ZwGd�dՄd�eu�ZxGd�dׄd�eu�ZyGd�dلd�eu�ZzGd�dۄd�eu�Z{Gd�d݄d�et�Z|Gd�d߄d�et�Z}Gd�d�d�et�Z~Gd�d�d�et�ZGd�d�d�ep�Z�Gd�d�d�e��Z�Gd�d�d�e��Z�Gd�d�d�e��Z�Gd�d�d�e��Z�Gd�d�d�e��Z�Gd�d�d�e��Z�Gd�d�d�et�Z�Gd�d��d�et�Z�Gd�d��d�et�Z�Gd�d��d�et�Z�Gd�d��d�et�Z�Gd�d��d�et�Z�Gd�d��d�et�Z�G�d�d��det�Z�G�d�d��det�Z�G�d�d��det�Z�G�d�d��det�Z�G�d�d	��d	et�Z�G�d
�d��det�Z�G�d�d
��d
ep�Z�G�d�d��det�Z�G�d�d��det�Z�G�d�d��det�Z�G�d�d��dep�Z�G�d�d��de��Z�G�d�d��de��Z�G�d�d��de��Z�G�d�d��dep�Z�G�d�d��dep�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�d0�d1��d1ep�Z�G�d2�d3��d3ep�Z�G�d4�d5��d5ep�Z�G�d6�d7��d7ep�Z�G�d8�d9��d9ep�Z�G�d:�d;��d;e��Z�G�d<�d=��d=e��Z�G�d>�d?��d?e��Z�G�d@�dA��dAe��Z�G�dB�dC��dCe��Z�G�dD�dE��dEe��Z�G�dF�dG��dGe��Z�G�dH�dI��dIet�Z�G�dJ�dK��dKe8�Z�G�dL�dM��dMep�Z�G�dN�dO��dOep�Z�G�dP�dQ��dQep�Z�G�dR�dS��dSep�Z�G�dT�dU��dUep�Z�G�dV�dW��dWep�Z�G�dX�dY��dYep�Z�G�dZ�d[��d[ep�Z�G�d\�d]��d]ep�Z�G�d^�d_��d_ep�Z�G�d`�da��daep�Z�G�db�dc��dcep�Z�G�dd�de��dee��Z�G�df�dg��dge��Z�G�dh�di��die��Z�G�dj�dk��dke��Z�G�dl�dm��dmep�Z�G�dn�do��doep�Z�G�dp�dq��dqep�Z�G�dr�ds��dsep�Z�G�dt�du��duep�Z�G�dv�dw��dwep�Z�G�dx�dy��dyep�Z�G�dz�d{��d{�Z�G�d|�d}��d}�Z�G�d~�d��d�Z�G�d��d���d�e9�Z�es�d���d��d��Z�G�d��d���d�e!e��Z�G�d��d���d�eЃZ�G�d��d���d�eЃZ�G�d��d���d�eЃZ�G�d��d���d�eЃZ�G�d��d���d�eЃZ�G�d��d���d�eЃZ�G�d��d���d�eЃZ�G�d��d���d�eЃZ�G�d��d���d�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�eeehef�d���d��d��Z�dS(�z�
    sphinx.domains.cpp
    ~~~~~~~~~~~~~~~~~~

    The C++ language domain.

    :copyright: Copyright 2007-2022 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)
        ->\*    |    \.\*    |    \,
    |   (<<|>>)=?    |    &&    |    \|\|
    |   !=
    |   [<>=/*%+|&^~-]=?
)YZalignas�alignof�and�and_eqZasm�auto�bitand�bitor�bool�breakZcaseZcatch�char�char8_t�char16_t�char32_t�class�compl�concept�const�	consteval�	constexpr�	constinit�
const_cast�continue�decltype�default�deleteZdo�double�dynamic_cast�else�enum�explicitZexport�extern�false�float�for�friendZgoto�if�inline�int�long�mutable�	namespace�new�noexcept�not�not_eq�nullptr�operator�or�or_eqZprivateZ	protected�public�register�reinterpret_cast�requires�return�short�signed�sizeof�staticZ
static_assert�static_cast�structZswitch�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�Z_CPPv2Z_CPPv3Z_CPPv4�c�C�i�U�l�L�b)
rE�signed char�
unsigned charra�
signed int�unsigned intrb�signed long�
unsigned longrC�ss�os�isZios�v�m)zstd::stringzstd::ostreamzstd::istreamz
std::iostreamzstd::vectorzstd::mapznew-operatorznew-array-operatorzdelete-operatorzdelete-array-operatorzinv-operatorzadd-operatorzsub-operatorzmul-operatorzdiv-operatorzmod-operatorzand-operatorzor-operatorzxor-operatorzassign-operatorzadd-assign-operatorzsub-assign-operatorzmul-assign-operatorzdiv-assign-operatorzmod-assign-operatorzand-assign-operatorzor-assign-operatorzxor-assign-operatorzlshift-operatorzrshift-operatorzlshift-assign-operatorzrshift-assign-operatorzeq-operatorzneq-operatorzlt-operatorzgt-operatorzlte-operatorzgte-operatorznot-operatorz
sand-operatorzsor-operatorzinc-operatorzdec-operatorzcomma-operatorzpointer-by-pointer-operatorzpointer-operatorz
call-operatorzsubscript-operator)*re�new[]rT�delete[]�~�+�-�*�/�%�&�|�^�=�+=�-=�*=�/=�%=�&=�|=�^=�<<�>>�<<=�>>=�==�!=�<�>�<=�>=�!�&&�||�++�--�,�->*�->�()�[]�a�h�wZDiZDsZDu�s�t�j�x�y�n�o�f�d�e�gZCfZCdZCeZDa�DcZDn)4r�rCrEr�r�r�rHrGrFrrz	short intzsigned shortzsigned short intzunsigned shortzunsigned short intrarsr�r�r�rbzlong intr�zsigned long intr�zunsigned long intz	long longz
long long intzsigned long longzsigned long long int�__int64zunsigned long longzunsigned long long int�__int128zsigned __int128zunsigned __int128r\rUzlong double�	__float80�	_Float64x�
__float128�	_Float128z_Complex floatz_Complex doublez_Complex long doublez_Imaginary floatz_Imaginary doublez_Imaginary long doubler@�decltype(auto)zstd::nullptr_t�nwZna�dl�da�co�pl�mi�mlZdvZrmZanrk�eoZaSZpLZmIZmLZdVZrMZaNZoRZeOZlsZrsZlSZrS�eq�ne�lt�gt�le�ge�nt�aaZoo�pp�mm�cmZpm�pt�cl�ixZds)7rer�rTr�r�rJr�r�r�r�r�r�rAr�rBr�r�r�r�r�r�r�r�r�r?r�rlr�r�r�r�r�r�r�r�rhr�r�r�r��<=>r�rgr�r>r�rkr�r�r�r�r�r�r��.*Zpp_Zmm_�deZadZpsZng)
r�r�r�r�r�r�r�rgr�rJ)N�u8�ur�r��_id_char_from_prefixr�r�r>r�rBr�r�r�rA)r�r�rh)r�r�r�r�r�r�r�r�r�)r�r�r�r�r�)r�r�r�r�r�r�r�r�r�r?r�r�r�rlZdcZscZcc�rc)rVrvrProc@s,eZdZdddd�dd�Zed�dd	�ZdS)
�_DuplicateSymbolError�Symbol�ASTDeclarationN)�symbol�declarationrqcCs||_||_dS�N)r�r�)�selfr�r��r�6/usr/lib/python3.9/site-packages/sphinx/domains/cpp.py�__init__Dsz_DuplicateSymbolError.__init__�rqcCsd|j�d�S)Nz'Internal C++ duplicate symbol error:
%sr)r��dump�rrrr�__str__Jsz_DuplicateSymbolError.__str__)�__name__�
__module__�__qualname__r�strrrrrrr�Csr�c@seZdZdS)�ASTBaseN�rr	r
rrrrrNsrc@speZdZedd�dd�Zed�dd�Zeed�d	d
�Zed�dd�Z	ed�d
d�Z
eedeeddd�dd�ZdS)�
ASTIdentifierN��
identifierrqcCs
||_dSr��r�rrrrrrVszASTIdentifier.__init__rcCs|jddkS)Nr�@rrrrr�is_anon[szASTIdentifier.is_anon��versionrqcCs�|��r|dkrt��|dkr2|jdkr,dS|jS|jdkr@dS|jddkrRd	S|��rzd
t|j�d|jdd�fStt|j��|jSdS)N��Zsize_tr��stdZStrr�ZD0zUt%d_%s)rr)r�lenr�rrrrr�get_id^s

 zASTIdentifier.get_idcCs|jSr�rrrrrrsszASTIdentifier.__str__cCs|��rdS|jS)N�[anonymous])rrrrrr�get_display_stringvsz ASTIdentifier.get_display_stringrr���signode�mode�env�prefix�templateArgsr�rqcCs$t|�|��rtjdd�}nt�|j|j�}|dkrx||j|}tjddd|ddd�}	|��|	d<|	|7}	||	7}n�|d	kr�t��}
|
|7}
||
7}n�|d
kr�||7}nt|dkr�|d�d
�||7}nT|dk�rd|j}tjddd|ddd�}	|��|	d<|	|7}	||	7}nt	d|��dS)Nr)�text�markTyper��cppr�Z	refdomain�reftype�	reftarget�modnameZ	classname�cpp:parent_key�
lastIsName�
noneIsName�param�classesz	sig-param�udl�
operator""�Unknown description mode: %s)
r6rrZ
desc_sig_namerr�get_lookup_key�	desc_name�append�	Exception)rr r!r"r#r$r��node�
targetText�pnodeZnameNoderrr�describe_signatureysD�





�
z ASTIdentifier.describe_signature)
rr	r
rrrCrrarrrrr;rrrrrUs�rc@sleZdZeedfddd�dd�Zed�dd	�Zee	d
�dd�Z
ee	d
�dd�Ze
e	de	ddd�dd�ZdS)�ASTNestedNameElement�ASTOperator�ASTTemplateArgsN)�	identOrOpr$rqcCs||_||_dSr��r?r$)rr?r$rrrr�szASTNestedNameElement.__init__rcCsdS�NFrrrrr�is_operator�sz ASTNestedNameElement.is_operatorrcCs&|j�|�}|jr"||j�|�7}|Sr�)r?rr$�rr�resrrrr�szASTNestedNameElement.get_id��	transformrqcCs"||j�}|jr|||j�7}|Sr�r@�rrFrDrrr�
_stringify�s
zASTNestedNameElement._stringifyrr�)r r!r"r#r�rqcCsN|jdurt|j�nd}|j�||||||�|jdurJ|j�|d||�dS)Nr�r&)r$rr?r;)rr r!r"r#r�ZtArgsrrrr;�s
z'ASTNestedNameElement.describe_signature)rr	r
rrrrCrBrarrr*rHrr;rrrrr<�s
��r<c@s�eZdZeeeeedd�dd�Zedd�dd��Ze	d�dd	�Z
de	eed�dd
�Ze
ed�dd�Zeedddd�dd�ZdS)�
ASTNestedNameN)�names�	templates�rootedrqcCs||_||_||_dSr�)rJrKrL)rrJrKrLrrrr�szASTNestedName.__init__rcCs|Sr�rrrrr�name�szASTNestedName.namecCs,d}|jD]}|��rq
|jr
|d7}q
|S)Nrr)rJrBr$)r�countr�rrr�
num_templates�s

zASTNestedName.num_templatesr�)r�	modifiersrqcs��dkr:t|�}|tvr t|Sd��fdd�|jD��Sg}t|j�dksXt|�dkrb|�d�|�|�|jD]}|�|����qrt|j�dks�t|�dkr�|�d�d�|�S)	Nr�::c3s|]}|���VqdSr��r)�.0r��rrr�	<genexpr>��z'ASTNestedName.get_id.<locals>.<genexpr>r�N�Er�)r�_id_shorthands_v1�joinrJrr6r)rrrP�ttrDr�rrTrr�s



zASTNestedName.get_idrEcCshg}|jr|�d�tt|j��D]:}|j|}|j|rN|�d||��q"|�||��q"d�|�S)Nr�z	template rQ)rLr6�rangerrJrKrZ)rrFrDr�r�rrrrH�s


zASTNestedName._stringifyrr��r r!r"r�rqcCs�t|�|dkr�|jr$|t�d�7}tt|j��D]\}|dkrL|t�d�7}|j|}|j|r||t�d�7}|t�d�7}|�|||d|�q2�n&|dkr�|jd�|d|d|��n|d	v�r�g}|d
kr�|j	j
dur�|j	j
j}d}d}	d}
d}|d
k�r|jdd�n|j}|}
|d
k�r(t��}
|j�rr|
d7}
|d
k�rbt|�dk�rb|t�
dd�7}n|
t�
dd�7}
tt|��D]�}||}|j|}|�s�|
t�
dd�7}
|
d7}
|�r�|
t�dd�7}
|
t��7}
d
}t|�}|dk�r.|j�r|t|�k�r|	t||�7}	|d7}|�|
d||	|
|�|
|7}
�q~|d
k�r�t|j�dk�rl|
t�
dd�7}
||
7}|jd�r�|t�dd�7}|t��7}|jd�|||d|�ntd|��dS)Nr.rQrz::blahrx� r�r/)r&r-�markNamer-T���Frr&r3)r6rLr
�Textr\rrJrKr;r��templatePrefixr�desc_addname�desc_sig_punctuation�desc_sig_keyword�desc_sig_spacerr$r7)rr r!r"r�r�r��templateParamsZiTemplateParamsZtemplateParamsPrefixr#�firstrJ�dest�nnerxZtxt_nnerrrr;�sx







�
z ASTNestedName.describe_signature)r�)rr	r
rr<rCr�propertyrMrarOrrr*rHrr;rrrrrI�s
�	�rIc@s2eZdZeed�dd�Zeedddd�dd	�ZdS)
�
ASTExpressionrcCstt|���dSr���NotImplementedError�reprrrrrrJszASTExpression.get_idrr�Nr]cCstt|���dSr�rm�rr r!r"r�rrrr;Msz ASTExpression.describe_signature�rr	r
rarrrr;rrrrrlIs�rlc@seZdZdS)�
ASTLiteralNr
rrrrrrUsrrc@sBeZdZeed�dd�Zeed�dd�Zeeddd	d
�dd�Z	d	S)
�ASTPointerLiteralrEcCsdS�Nrir�rrFrrrrHZszASTPointerLiteral._stringifyrcCsdS)NZLDnErrrrrr]szASTPointerLiteral.get_idrr�Nr]cCs|t�dd�7}dSrt�rrerprrrr;`sz$ASTPointerLiteral.describe_signature�
rr	r
r*rrHrarrr;rrrrrsYs
�rsc@sReZdZedd�dd�Zeed�dd�Zeed�d	d
�Z	e
edddd
�dd�ZdS)�ASTBooleanLiteralN��valuerqcCs
||_dSr��rz�rrzrrrrfszASTBooleanLiteral.__init__rEcCs|jr
dSdSdS)Nr|r[r{rurrrrHiszASTBooleanLiteral._stringifyrcCs|jr
dSdSdS)NZL1EZL0Er{rrrrroszASTBooleanLiteral.get_idrr�r]cCs|t�t|�t|��7}dSr�)rrerrprrrr;usz$ASTBooleanLiteral.describe_signature)rr	r
rCrr*rrHrarrr;rrrrrxes�rxc@sReZdZedd�dd�Zeed�dd�Zeed�d	d
�Ze	edddd
�dd�Z
dS)�ASTNumberLiteralN��datarqcCs
||_dSr��r�rrrrrr{szASTNumberLiteral.__init__rEcCs|jSr�r�rurrrrH~szASTNumberLiteral._stringifyrcCsd|j�dd�S)NzL%sE�'r�)r�replacerrrrr�szASTNumberLiteral.get_idrr�r]cCs|t�|j|j�7}dSr�)r�desc_sig_literal_numberrrprrrr;�sz#ASTNumberLiteral.describe_signature�rr	r
rrr*rHrarrr;rrrrr}zs�r}c@sReZdZedd�dd�Zeed�dd�Zeed�d	d
�Ze	edddd
�dd�Z
dS)�ASTStringLiteralNr~cCs
||_dSr�r�r�rrrr�szASTStringLiteral.__init__rEcCs|jSr�r�rurrrrH�szASTStringLiteral._stringifyrcCsdt|j�dS)NzLA%d_KcE�)rrrrrrr�szASTStringLiteral.get_idrr�r]cCs|t�|j|j�7}dSr�)r�desc_sig_literal_stringrrprrrr;�sz#ASTStringLiteral.describe_signaturer�rrrrr��s�r�c@sTeZdZeedd�dd�Zeed�dd�Zeed�d	d
�Ze	edddd
�dd�Z
dS)�ASTCharLiteralN)r#rrqcCsH||_||_t||_|���d�}t|�dkr<t|�|_nt	|��dS)Nzunicode-escaper)
r#rr��type�encode�decoder�ordrzr+)rr#rZdecodedrrrr�s
zASTCharLiteral.__init__rEcCs0|jdurd|jdS|jd|jdSdS�Nr�)r#rrurrrrH�s
zASTCharLiteral._stringifyrcCs|jt|j�Sr�)r�rrzrrrrr�szASTCharLiteral.get_idrr�r]cCs@|jdur|t�|j|j�7}d|jd}|t�||�7}dSr�)r#rrerZdesc_sig_literal_char)rr r!r"r��txtrrrr;�s
z!ASTCharLiteral.describe_signaturer�rrrrr��s�r�c@sReZdZeed�dd�Zeed�dd�Ze	ed�dd	�Z
eed
ddd
�dd�ZdS)�ASTUserDefinedLiteral��literal�identcCs||_||_dSr�r�)rr�r�rrrr�szASTUserDefinedLiteral.__init__rEcCs||j�||j�Sr�r�rurrrrH�sz ASTUserDefinedLiteral._stringifyrcCsd�|j�|�|j�|��S)Nz
clL_Zli{}E{}E)�formatr�rr�rrrrr�szASTUserDefinedLiteral.get_idrr�Nr]cCs,|j�||||�|j�|d|dd|�dS)Nr1r�)r�r;r�rprrrr;�sz(ASTUserDefinedLiteral.describe_signature)
rr	r
rrrrr*rrHrarrr;rrrrr��s�r�c@sBeZdZeed�dd�Zeed�dd�Zeeddd	d
�dd�Z	d	S)
�ASTThisLiteralrEcCsdS�NryrrurrrrH�szASTThisLiteral._stringifyrcCsdS)NZfpTrrrrrr�szASTThisLiteral.get_idrr�Nr]cCs|t�dd�7}dSr�rvrprrrr;�sz!ASTThisLiteral.describe_signaturerwrrrrr��s
�r�c@sVeZdZeeedd�dd�Zeed�dd�Zeed�d	d
�Z	e
edddd
�dd�ZdS)�ASTFoldExprN)�leftExpr�op�	rightExprrqcCs||_||_||_dSr�)r�r�r�)rr�r�r�rrrr�szASTFoldExpr.__init__rEcCs�dg}|jr<|�||j��|�d�|�|j�|�d�|�d�|jr||�d�|�|j�|�d�|�||j��|�d�d�|�S)N�(r^�...�)r�)r�r6r�r�rZrGrrrrH�s





zASTFoldExpr._stringifyrcCs�|dkrt|�Sg}|jdur*|�d�n |jdur@|�d�n
|�d�|�t|j�|jrr|�|j�|��|jr�|�|j�|��d�|�S)NrZfl�frZfLr�)rr�r6r��_id_operator_v2r�rrZrCrrrr�s


zASTFoldExpr.get_idrr�r]cCs�|t�dd�7}|jrT|j�||||�|t��7}|t�|j|j�7}|t��7}|t�dd�7}|jr�|t��7}|t�|j|j�7}|t��7}|j�||||�|t�dd�7}dS)Nr�r�r�)rrdr�r;rf�desc_sig_operatorr�r�rprrrr;szASTFoldExpr.describe_signature)rr	r
rlrrr*rHrarrr;rrrrr��s��r�c@sPeZdZed�dd�Zeed�dd�Zeed�dd	�Z	e
ed
ddd
�dd�ZdS)�ASTParenExpr��exprcCs
||_dSr�r��rr�rrrrszASTParenExpr.__init__rEcCsd||j�dS�Nr�r�r�rurrrrHszASTParenExpr._stringifyrcCs|j�|�Sr��r�rrrrrrszASTParenExpr.get_idrr�Nr]cCs6|t�dd�7}|j�||||�|t�dd�7}dSr��rrdr�r;rprrrr; szASTParenExpr.describe_signature�rr	r
rlrr*rrHrarrr;rrrrr�s�r�c@sPeZdZed�dd�Zeed�dd�Zeed�dd	�Z	e
ed
ddd
�dd�ZdS)�ASTIdExpression�rMcCs
||_dSr�r��rrMrrrr(szASTIdExpression.__init__rEcCs
||j�Sr�r�rurrrrH,szASTIdExpression._stringifyrcCs|j�|�Sr��rMrrrrrr/szASTIdExpression.get_idrr�Nr]cCs|j�||||�dSr�)rMr;rprrrr;2sz"ASTIdExpression.describe_signature�rr	r
rIrr*rrHrarrr;rrrrr�'s�r�c@s4eZdZeeed�dd�Zeedddd�dd	�ZdS)
�ASTPostfixOp��idPrefixrrqcCstt|���dSr�rm�rr�rrrrr;szASTPostfixOp.get_idrr�Nr]cCstt|���dSr�rmrprrrr;>szASTPostfixOp.describe_signature)rr	r
rrarrr;rrrrr�:s�r�c@sReZdZed�dd�Zeed�dd�Zeeed�dd	�Z	e
ed
ddd
�dd�ZdS)�ASTPostfixArrayr�cCs
||_dSr�r�r�rrrrDszASTPostfixArray.__init__rEcCsd||j�dS�N�[�]r�rurrrrHGszASTPostfixArray._stringifyr�cCsd||j�|�S)Nr�r�r�rrrrJszASTPostfixArray.get_idrr�Nr]cCs6|t�dd�7}|j�||||�|t�dd�7}dSr�r�rprrrr;Msz"ASTPostfixArray.describe_signaturer�rrrrr�Cs�r�c@sReZdZed�dd�Zeed�dd�Zeeed�dd	�Z	e
ed
ddd
�dd�ZdS)�ASTPostfixMemberr�cCs
||_dSr�r�r�rrrrUszASTPostfixMember.__init__rEcCsd||j�S)N�.r�rurrrrHXszASTPostfixMember._stringifyr�cCsd||j�|�S)NZdtr�r�rrrr[szASTPostfixMember.get_idrr�Nr]cCs&|t�dd�7}|j�|d||�dS)Nr�r.)rrdrMr;rprrrr;^sz#ASTPostfixMember.describe_signaturer�rrrrr�Ts�r�c@sReZdZed�dd�Zeed�dd�Zeeed�dd	�Z	e
ed
ddd
�dd�ZdS)�ASTPostfixMemberOfPointerr�cCs
||_dSr�r�r�rrrresz"ASTPostfixMemberOfPointer.__init__rEcCsd||j�S)Nr�r�rurrrrHhsz$ASTPostfixMemberOfPointer._stringifyr�cCsd||j�|�S)Nr�r�r�rrrrksz ASTPostfixMemberOfPointer.get_idrr�Nr]cCs&|t�dd�7}|j�|d||�dS)Nr�r.)rr�rMr;rprrrr;nsz,ASTPostfixMemberOfPointer.describe_signaturer�rrrrr�ds�r�c@sDeZdZeed�dd�Zeeed�dd�Zeeddd	d
�dd�Z	d	S)
�
ASTPostfixIncrEcCsdS�Nr�rrurrrrHuszASTPostfixInc._stringifyr�cCsd|S)Nr�rr�rrrrxszASTPostfixInc.get_idrr�Nr]cCs|t�dd�7}dSr��rr�rprrrr;{sz ASTPostfixInc.describe_signaturerwrrrrr�ts
�r�c@sDeZdZeed�dd�Zeeed�dd�Zeeddd	d
�dd�Z	d	S)
�
ASTPostfixDecrEcCsdS�Nr�rrurrrrH�szASTPostfixDec._stringifyr�cCsd|S)Nr�rr�rrrr�szASTPostfixDec.get_idrr�Nr]cCs|t�dd�7}dSr�r�rprrrr;�sz ASTPostfixDec.describe_signaturerwrrrrr��s
�r�c@sXeZdZeddd�dd�Zeed�dd�Zeeed	�d
d�Z	e
edd
dd�dd�ZdS)�ASTPostfixCallExpr��ASTParenExprList�ASTBracedInitListN)�lstrqcCs
||_dSr��r�)rr�rrrr�szASTPostfixCallExpr.__init__rEcCs
||j�Sr�r�rurrrrH�szASTPostfixCallExpr._stringifyr�cCs:d|g}|jjD]}|�|�|��q|�d�d�|�S)Nr�rXr�)r��exprsr6rrZ)rr�rrDr�rrrr�s

zASTPostfixCallExpr.get_idrr�r]cCs|j�||||�dSr�)r�r;rprrrr;�sz%ASTPostfixCallExpr.describe_signature)rr	r
rrr*rrHrarrr;rrrrr��s�r�c@sVeZdZdeed�dd�Zeed�dd�Ze	ed�d	d
�Z
eeddd
d�dd�Zd
S)�ASTPostfixExpr�ASTType�r#�	postFixescCs||_||_dSr�r�)rr#r�rrrr�szASTPostfixExpr.__init__rEcCs0||j�g}|jD]}|�||��qd�|�S�Nr�)r#r�r6rZ)rrFrD�prrrrH�s
zASTPostfixExpr._stringifyrcCs(|j�|�}|jD]}|�||�}q|Sr�)r#rr�)rr�idr�rrrr�s
zASTPostfixExpr.get_idrr�Nr]cCs2|j�||||�|jD]}|�||||�qdSr�)r#r;r�)rr r!r"r�r�rrrr;�s
z!ASTPostfixExpr.describe_signature)
rr	r
rr�rr*rrHrarrr;rrrrr��s�r�c@sTeZdZeded�dd�Zeed�dd�Zeed�d	d
�Z	e
eddd
d�dd�Zd
S)�ASTExplicitCastr��r�typr�cCs||_||_||_dSr�r�)rrr�r�rrrr�szASTExplicitCast.__init__rEcCsP|jg}|�d�|�||j��|�d�|�||j��|�d�d�|�S)Nr�z>(r�r�)rr6r�r�rZrGrrrrH�s


zASTExplicitCast._stringifyrcCs"t|j|j�|�|j�|�Sr�)�_id_explicit_castrr�rr�rrrrr�s

�
�zASTExplicitCast.get_idrr�Nr]cCs||t�|j|j�7}|t�dd�7}|j�||||�|t�dd�7}|t�dd�7}|j�||||�|t�dd�7}dS)Nr�r�r�r�)rrerrdr�r;r�rprrrr;�sz"ASTExplicitCast.describe_signature�rr	r
rrlrr*rHrarrr;rrrrr��s	�r�c@sZeZdZedefed�dd�Zeed�dd�Z	e
ed�d	d
�Zeeddd
d�dd�Z
d
S)�	ASTTypeIdr���
typeOrExpr�isTypecCs||_||_dSr�r�)rr�r�rrrr�szASTTypeId.__init__rEcCsd||j�dS)Nztypeid(r�)r�rurrrrH�szASTTypeId._stringifyrcCs|jr
dnd}||j�|�S)NZti�te)r�r�r)rrr#rrrr�szASTTypeId.get_idrr�Nr]cCsF|t�dd�7}|t�dd�7}|j�||||�|t�dd�7}dS)Nrr�r�)rrerdr�r;rprrrr;�szASTTypeId.describe_signature)rr	r
rrlrCrr*rrHrarrr;rrrrr��s�r�c@sReZdZeed�dd�Zeed�dd�Zeed�dd	�Z	e
ed
ddd
�dd�ZdS)�ASTUnaryOpExpr�r�r�cCs||_||_dSr�r�)rr�r�rrrr�szASTUnaryOpExpr.__init__rEcCs6|jddvr"|jd||j�S|j||j�SdS)Nr�cnr^r�rurrrrH�szASTUnaryOpExpr._stringifyrcCst|j|j�|�Sr�)�_id_operator_unary_v2r�r�rrrrrr�szASTUnaryOpExpr.get_idrr�Nr]cCsZ|jddvr0|t�|j|j�7}|t��7}n|t�|j|j�7}|j�||||�dS)Nrr�)r�rrerfr�r�r;rprrrr;�s
z!ASTUnaryOpExpr.describe_signaturer�rrrrr��s�r�c@sPeZdZed�dd�Zeed�dd�Zeed�dd	�Z	e
ed
ddd
�dd�ZdS)�ASTSizeofParamPackrcCs
||_dSr�rrrrrrszASTSizeofParamPack.__init__rEcCsd||j�dS)Nz
sizeof...(r�rrurrrrH
szASTSizeofParamPack._stringifyrcCsd|j�|�S)NZsZ)rrrrrrr
szASTSizeofParamPack.get_idrr�Nr]cCs\|t�dd�7}|t�dd�7}|t�dd�7}|jj|d||ddd�|t�dd�7}dS)Nrtr�r�r&r�)r�r#r$r�)rrerdrr;rprrrr;s�z%ASTSizeofParamPack.describe_signature)rr	r
rrr*rrHrarrr;rrrrr�s�r�c@sPeZdZdd�dd�Zeed�dd�Zeed�d	d
�Ze	eddd
d�dd�Z
d
S)�
ASTSizeofTyper��r�cCs
||_dSr�r��rr�rrrrszASTSizeofType.__init__rEcCsd||j�dS)Nzsizeof(r�r�rurrrrHszASTSizeofType._stringifyrcCsd|j�|�S)N�st�r�rrrrrr!szASTSizeofType.get_idrr�Nr]cCsF|t�dd�7}|t�dd�7}|j�||||�|t�dd�7}dS)Nrtr�r��rrerdr�r;rprrrr;$sz ASTSizeofType.describe_signature�rr	r
rr*rrHrarrr;rrrrr�s�r�c@sPeZdZed�dd�Zeed�dd�Zeed�dd	�Z	e
ed
ddd
�dd�ZdS)�
ASTSizeofExprr�cCs
||_dSr�r�r�rrrr-szASTSizeofExpr.__init__rEcCsd||j�S)Nzsizeof r�rurrrrH0szASTSizeofExpr._stringifyrcCsd|j�|�S)NZszr�rrrrr3szASTSizeofExpr.get_idrr�Nr]cCs2|t�dd�7}|t��7}|j�||||�dS)Nrt�rrerfr�r;rprrrr;6sz ASTSizeofExpr.describe_signaturer�rrrrr�,s�r�c@sPeZdZdd�dd�Zeed�dd�Zeed�d	d
�Ze	eddd
d�dd�Z
d
S)�ASTAlignofExprr�r�cCs
||_dSr�r�r�rrrr>szASTAlignofExpr.__init__rEcCsd||j�dS)Nzalignof(r�r�rurrrrHAszASTAlignofExpr._stringifyrcCsd|j�|�S)NZatr�rrrrrDszASTAlignofExpr.get_idrr�Nr]cCsF|t�dd�7}|t�dd�7}|j�||||�|t�dd�7}dS)Nr=r�r�r�rprrrr;Gsz!ASTAlignofExpr.describe_signaturer�rrrrr�=s�r�c@sPeZdZed�dd�Zeed�dd�Zeed�dd	�Z	e
ed
ddd
�dd�ZdS)�ASTNoexceptExprr�cCs
||_dSr�r�r�rrrrPszASTNoexceptExpr.__init__rEcCsd||j�dS)N�	noexcept(r�r�rurrrrHSszASTNoexceptExpr._stringifyrcCsd|j�|�S)NZnxr�rrrrrVszASTNoexceptExpr.get_idrr�Nr]cCsF|t�dd�7}|t�dd�7}|j�||||�|t�dd�7}dS)Nrfr�r��rrerdr�r;rprrrr;Ysz"ASTNoexceptExpr.describe_signaturer�rrrrr�Os�r�c@s\eZdZeededdd�dd�Zeed�dd	�Ze	ed
�dd�Z
eed
ddd�dd�ZdS)�
ASTNewExprr�r�N)rL�isNewTypeIdr��initListrqcCs||_||_||_||_dSr�)rLr�r�r�)rrLr�r�r�rrrrbszASTNewExpr.__init__rEcCsZg}|jr|�d�|�d�|jr6|�||j��n|jdurP|�||j��d�|�S)NrQznew r�)rLr6r�r�r�rZrGrrrrHis


zASTNewExpr._stringifyrcCsTdg}|�d�|�|j�|��|jdur@|�|j�|��n
|�d�d�|�S)Nr�rrXr�)r6r�rr�rZrCrrrrws


zASTNewExpr.get_idrr�r]cCsl|jr|t�dd�7}|t�dd�7}|t��7}|jrL|j�||||�n|jdurh|j�||||�dS)NrQre)	rLrrdrerfr�r�r;r�rprrrr;�s
zASTNewExpr.describe_signature)
rr	r
rCrrr*rrHrarrr;rrrrr�as��r�c@sTeZdZeeed�dd�Zeed�dd�Ze	ed�dd	�Z
eed
ddd
�dd�ZdS)�
ASTDeleteExpr�rL�arrayr�cCs||_||_||_dSr�r�)rrLr�r�rrrr�szASTDeleteExpr.__init__rEcCsHg}|jr|�d�|�d�|jr.|�d�|�||j��d�|�S)NrQzdelete z[] r�)rLr6r�r�rZrGrrrrH�s


zASTDeleteExpr._stringifyrcCs |jrd}nd}||j�|�S)Nr�r�)r�r�r�rrr�rrrr�szASTDeleteExpr.get_idrr�Nr]cCsj|jr|t�dd�7}|t�dd�7}|t��7}|jrT|t�dd�7}|t��7}|j�||||�dS)NrQrTr�)rLrrdrerfr�r�r;rprrrr;�sz ASTDeleteExpr.describe_signature)
rr	r
rCrlrr*rrHrarrr;rrrrr��s
�r�c@sReZdZded�dd�Zeed�dd�Zeed�d	d
�Z	e
eddd
d�dd�Zd
S)�ASTCastExprr��r�r�cCs||_||_dSr�r�)rr�r�rrrr�szASTCastExpr.__init__rEcCs:dg}|�||j��|�d�|�||j��d�|�S�Nr�r�r�)r6r�r�rZrGrrrrH�s

zASTCastExpr._stringifyrcCsd|j�|�|j�|�S)N�cv)r�rr�rrrrr�szASTCastExpr.get_idrr�Nr]cCsH|t�dd�7}|j�||||�|t�dd�7}|j�||||�dSr�)rrdr�r;r�rprrrr;�szASTCastExpr.describe_signaturer�rrrrr��s�r�c@sZeZdZeeeed�dd�Zeed�dd�Ze	ed�dd	�Z
eed
ddd
�dd�ZdS)�ASTBinOpExpr�r��opscCs||_||_dSr�r��rr�r�rrrr�szASTBinOpExpr.__init__rEcCstg}|�||jd��tdt|j��D]@}|�d�|�|j|d�|�d�|�||j|��q(d�|�S�Nrrr^r��r6r�r\rr�rZ�rrFrDr�rrrrH�s

zASTBinOpExpr._stringifyrcCsbg}tt|j��D].}|�t|j|�|�|j|�|��q|�|jd�|��d�|�S�Nr`r��r\rr�r6r�r�rrZ�rrrDr�rrrr�szASTBinOpExpr.get_idrr�Nr]cCs�|jd�||||�tdt|j��D]�}|t��7}|j|d}t|d�td�kr~t|d�td�kr~|t�||�7}n|t�	||�7}|t��7}|j|�||||�q&dS�Nrrr��z�
r�r;r\rrrfr�r�rer��rr r!r"r�r�r�rrrr;�s(zASTBinOpExpr.describe_signature)
rr	r
rrlrrr*rHrarrr;rrrrr��s
	�r�c@s`eZdZeeedfedd�dd�Zee	d�dd�Z
ee	d�d	d
�Ze
e	dddd
�dd�ZdS)r�N)r��
trailingCommarqcCs||_||_dSr�)r�r�rr�rrrrr�szASTBracedInitList.__init__rcsdd��fdd�|jD��S)Nzil%sEr�c3s|]}|���VqdSr�rR�rSr�rTrrrU�rVz+ASTBracedInitList.get_id.<locals>.<genexpr>�rZr�rrrTrr�szASTBracedInitList.get_idrEcs4�fdd�|jD�}|jrdnd}dd�|�|fS)Ncsg|]}�|��qSrrr�rFrr�
<listcomp>rVz0ASTBracedInitList._stringify.<locals>.<listcomp>r�r�z{%s%s}�, )r�rrZ)rrFr�rrrrrHszASTBracedInitList._stringifyrr�r]cCs�t|�|t�dd�7}d}|jD]:}|sH|t�dd�7}|t��7}nd}|�||||�q"|jrt|t�dd�7}|t�dd�7}dS)N�{Tr�F�})r6rrdr�rfr;r�rr r!r"r�rhr�rrrr;s
z$ASTBracedInitList.describe_signature)rr	r
rrrlrCrrarrr*rHrr;rrrrr��s��r�c@sbeZdZeeeefeed�dd�Ze	ed�dd�Z
eed�dd	�Ze
ed
ddd
�dd�ZdS)�ASTAssignmentExprr�cCs||_||_dSr�r�r�rrrrszASTAssignmentExpr.__init__rEcCstg}|�||jd��tdt|j��D]@}|�d�|�|j|d�|�d�|�||j|��q(d�|�Sr�r�r�rrrrHs

zASTAssignmentExpr._stringifyrcCsbg}tt|j��D].}|�t|j|�|�|j|�|��q|�|jd�|��d�|�Sr�r�r�rrrr'szASTAssignmentExpr.get_idrr�Nr]cCs�|jd�||||�tdt|j��D]�}|t��7}|j|d}t|d�td�kr~t|d�td�kr~|t�||�7}n|t�	||�7}|t��7}|j|�||||�q&dSr�r�rrrrr;/s(z$ASTAssignmentExpr.describe_signature)rr	r
rrrlr�rrr*rHrarrr;rrrrrs 
�rc@sTeZdZeed�dd�Zeed�dd�Ze	ed�dd	�Z
eed
ddd
�dd�ZdS)�ASTCommaExpr�r�cCs
||_dSr�r
�rr�rrrr>szASTCommaExpr.__init__rEcsd��fdd�|jD��S)Nrc3s|]}�|�VqdSr�rrrrrrUCrVz*ASTCommaExpr._stringify.<locals>.<genexpr>rrurrrrHBszASTCommaExpr._stringifyrcCsdtd}g}tt|j�d�D]$}|�|�|�|j|�|��q|�|jd�|��d�|�S)Nr�rr`r�)r�r\rr�r6rrZ)rr�id_rDr�rrrrEs
zASTCommaExpr.get_idrr�Nr]cCsb|jd�||||�tdt|j��D]6}|t�dd�7}|t��7}|j|�||||�q&dS)Nrrr�)r�r;r\rrrdrf)rr r!r"r�r�rrrr;Ns
zASTCommaExpr.describe_signature)
rr	r
rrlrr*rrHrarrr;rrrrr=s	�rc@sPeZdZed�dd�Zeed�dd�Zeed�dd	�Ze	ed
ddd
�dd�Z
dS)�ASTFallbackExprr�cCs
||_dSr�r�r�rrrrXszASTFallbackExpr.__init__rEcCs|jSr�r�rurrrrH[szASTFallbackExpr._stringifyrcCs
t|j�Sr�)rr�rrrrr^szASTFallbackExpr.get_idrr�Nr]cCs|t�|j|j�7}dSr�)r
r�r�rprrrr;asz"ASTFallbackExpr.describe_signaturer�rrrrrWs�rc@sheZdZed�dd�Zed�dd�Zeed�dd�Ze	e	d	d
dd�d
d�Z
e	ed	eed
dd�dd�ZdS)r=rcCsdSrArrrrrrnszASTOperator.is_anoncCsdS�NTrrrrrrBqszASTOperator.is_operatorrcCs
t��dSr��rnrrrrrtszASTOperator.get_idrr�N�r �	identnoder"r�rqcCs
t��dS)zARender the prefix into signode, and the last part into identnode.Nr�rr rr"r�rrr�_describe_identifierwsz ASTOperator._describe_identifierrc
Cs�t|�|dkr2t��}|�||||�||7}n�|dkr�|t|�|}tjddd|ddd�}	|��|	d<t��}
|�||
||�|
�	�}|	t�||�7}	||	7}n t�
�}|�||||�||7}dS)Nr-r&r�r'rr(r,)r6rr5rrrr4r
r��astextrc)
rr r!r"r#r$r�ZmainNamer9r:�	containerr�ZaddNamerrrr;|s*
�
zASTOperator.describe_signature)rr	r
rCrrBrarrrrr;rrrrr=ms��r=c@sReZdZedd�dd�Zeed�dd�Zeed�d	d
�Ze	e	dddd
�dd�Z
dS)�ASTOperatorBuildInN)r�rqcCs
||_dSr��r�)rr�rrrr�szASTOperatorBuildIn.__init__rcCsD|dkrt}|j|vr"t��nt}|j|vr:td|j��||jS)NrzBInternal error: Built-in operator "%s" can not be mapped to an id.)�_id_operator_v1r�r)r�r7)rr�idsrrrr�s

�zASTOperatorBuildIn.get_idrEcCs0|jdvs|jddvr"d|jSd|jSdS)N�rer�rTr�r�abcnox�	operator rjrrurrrrH�s
zASTOperatorBuildIn._stringifyrr�rcCsL|t�dd�7}|jdvs(|jddvr4|t��7}|t�|j|j�7}dS)Nrjrrr)rrer�rfr�rrrrr�sz'ASTOperatorBuildIn._describe_identifier)rr	r
rrrarr*rHrrrrrrr�s�rc@sReZdZedd�dd�Zeed�dd�Zeed�d	d
�Z	e
e
dddd
�dd�ZdS)�ASTOperatorLiteralNrcCs
||_dSr�rrrrrr�szASTOperatorLiteral.__init__rcCs$|dkrt��nd|j�|�SdS)NrZli)r)rrrrrrr�szASTOperatorLiteral.get_idrEcCsd||j�S)Nr2rrurrrrH�szASTOperatorLiteral._stringifyrr�rcCs:|t�dd�7}|t�dd�7}|j�|d|dd|�dS)Nrj�""r&r�)rrer�rr;rrrrr�sz'ASTOperatorLiteral._describe_identifier)rr	r
rrrarrr*rHrrrrrrr �s�r c@s`eZdZddd�dd�Zeed�dd�Zeed	�d
d�Zed�d
d�Z	e
e
dddd�dd�ZdS)�ASTOperatorTyper�N)r�rqcCs
||_dSr�)r�)rr�rrrr�szASTOperatorType.__init__rcCs,|dkrd|j�|�Sd|j�|�SdS)Nrzcastto-%s-operatorr�)r�rrrrrr�szASTOperatorType.get_idrEcCsd�d||j�g�S)Nr�r)rZr�rurrrrH�szASTOperatorType._stringifyrcCst|�Sr��rrrrr�get_name_no_template�sz$ASTOperatorType.get_name_no_templaterr�rcCs2|t�dd�7}|t��7}|j�|d||�dS)Nrjr&)rrerfr�r;rrrrr�sz$ASTOperatorType._describe_identifier)rr	r
rrarrr*rHr$rrrrrrr"�s�r"c@sReZdZedd�dd�Zeed�dd�Zeed�d	d
�Z	e
edddd
�dd�ZdS)�ASTTemplateArgConstantNrycCs
||_dSr�r{r|rrrr�szASTTemplateArgConstant.__init__rEcCs
||j�Sr�r{rurrrrH�sz!ASTTemplateArgConstant._stringifyrcCsD|dkrt|��dd�S|dkr0dt|�dSd|j�|�dS)Nrr^r�r��XrX)rr�rzrrrrrr�s
zASTTemplateArgConstant.get_idrr�r]cCst|�|j�||||�dSr�)r6rzr;rprrrr;�sz)ASTTemplateArgConstant.describe_signaturer�rrrrr%�s�r%c@s`eZdZeedefedd�dd�Zee	d�dd�Z
ee	d	�d
d�Ze
e	dd
dd�dd�ZdS)r>r�N)�args�
packExpansionrqcCs||_||_dSr�)r'r()rr'r(rrrr�szASTTemplateArgs.__init__rcs��dkrJg}|�d�|�d��fdd�|jD���|�d�d�|�Sg}|�d�t|j�dkr�|jdd	�D]}|�|����qt|jr�|�d
�|�|jd	����|jr�|�d�|�d�d�|�S)Nr�:r�c3s|]}|���VqdSr�rR�rSr�rTrrrUrVz)ASTTemplateArgs.get_id.<locals>.<genexpr>r��Irr`�JrX)r6rZr'rrr()rrrDr�rrTrr�s$
 





zASTTemplateArgs.get_idrEcs4d��fdd�|jD��}|jr(|d7}d|dS)Nrc3s|]}�|�VqdSr�rr*rrrrUrVz-ASTTemplateArgs._stringify.<locals>.<genexpr>r�r�r�)rZr'r(rGrrrrHszASTTemplateArgs._stringifyrr�r]cCs�t|�|t�dd�7}d}|jD]:}|sF|t�dd�7}|t��7}d}|j|d||d�q"|jrt|t�dd�7}|t�dd�7}dS)	Nr�Tr�Fr&�r�r�r�)r6rrdr'rfr;r()rr r!r"r�rhr�rrrr;s
z"ASTTemplateArgs.describe_signature)rr	r
rrr%rCrrarrr*rHrr;rrrrr>�s��r>c@s2eZdZeed�dd�Zeedddd�dd	�ZdS)
�ASTTrailingTypeSpecrcCstt|���dSr�rmrrrrr-szASTTrailingTypeSpec.get_idrr�Nr]cCstt|���dSr�rmrprrrr;0sz&ASTTrailingTypeSpec.describe_signaturerqrrrrr.,s�r.c@s\eZdZeeeedd�dd�Zeed�dd�Zeed�d	d
�Z	e
edddd
�dd�ZdS)�ASTTrailingTypeSpecFundamentalN)rJ�
canonNamesrqcCs||_||_dSr�)rJr0)rrJr0rrrr6sz'ASTTrailingTypeSpecFundamental.__init__rEcCsd�|j�S)Nr^)rZrJrurrrrH=sz)ASTTrailingTypeSpecFundamental._stringifyrcCsl|dkrDg}|jD]&}|tvr.|�t|�q|�|�qd�|�Sd�|j�}|tvrdtd|��t|S)Nrr�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.)r0�_id_fundamental_v1r6rZ�_id_fundamental_v2r7)rrrDr�r�rrrr@s

��z%ASTTrailingTypeSpecFundamental.get_idrr�r]cCs:d}|jD]*}|s |t��7}nd}|t�||�7}q
dS)NTF)rJrrfZdesc_sig_keyword_type)rr r!r"r�rhr�rrrr;Rs
z1ASTTrailingTypeSpecFundamental.describe_signature)rr	r
rrrr*rHrarrr;rrrrr/5s�r/c@sBeZdZeed�dd�Zeed�dd�Zeeddd	d
�dd�Z	d	S)
�ASTTrailingTypeSpecDecltypeAutorEcCsdS)Nr�rrurrrrH^sz*ASTTrailingTypeSpecDecltypeAuto._stringifyrcCs|dkrt��dS)Nrr�)r)rrrrrasz&ASTTrailingTypeSpecDecltypeAuto.get_idrr�Nr]cCsD|t�dd�7}|t�dd�7}|t�dd�7}|t�dd�7}dS)NrRr�r@r�)rrerdrprrrr;fsz2ASTTrailingTypeSpecDecltypeAuto.describe_signaturerwrrrrr3]s
�r3c@sPeZdZed�dd�Zeed�dd�Zeed�dd	�Z	e
ed
ddd
�dd�ZdS)�ASTTrailingTypeSpecDecltyper�cCs
||_dSr�r�r�rrrrosz$ASTTrailingTypeSpecDecltype.__init__rEcCsd||j�dS)Nz	decltype(r�r�rurrrrHrsz&ASTTrailingTypeSpecDecltype._stringifyrcCs"|dkrt��d|j�|�dS)NrZDTrX)r)r�rrrrrrusz"ASTTrailingTypeSpecDecltype.get_idrr�Nr]cCsF|t�dd�7}|t�dd�7}|j�||||�|t�dd�7}dS)NrRr�r�r�rprrrr;zsz.ASTTrailingTypeSpecDecltype.describe_signaturer�rrrrr4ns�r4c@sleZdZeeeedd�dd�Zeed�dd��Ze	ed�d	d
�Z
eed�dd
�Ze
edddd�dd�ZdS)�ASTTrailingTypeSpecNameN)r#�
nestedName�placeholderTyperqcCs||_||_||_dSr�)r#r6r7)rr#r6r7rrrr�sz ASTTrailingTypeSpecName.__init__rcCs|jSr��r6rrrrrM�szASTTrailingTypeSpecName.namercCs|j�|�Sr�)r6rrrrrr�szASTTrailingTypeSpecName.get_idrEcCsZg}|jr |�|j�|�d�|�||j��|jdurP|�d�|�|j�d�|�S)Nr^r�)r#r6r6r7rZrGrrrrH�s


z"ASTTrailingTypeSpecName._stringifyrr�r]cCs�|jr&|t�|j|j�7}|t��7}|jj||||d�|jdur�|t��7}|jdkrl|t�dd�7}nL|jdkr�|t�dd�7}|t�dd�7}|t�dd�7}|t�dd�7}ndS)Nr-r@r�rRr�r�)r#rrerfr6r;r7rdrprrrr;�s


z*ASTTrailingTypeSpecName.describe_signature)rr	r
rrIrrrkrMrarr*rHrr;rrrrr5�s��r5c@s`eZdZdededd�dd�Zdeeded�d	d
�Ze	ed�dd
�Z
eedddd�dd�ZdS)�ASTFunctionParameterF)�ASTTypeWithInit�'ASTTemplateParamConstrainedTypeWithInitN)�arg�ellipsisrqcCs||_||_dSr�)r<r=)rr<r=rrrr�szASTFunctionParameter.__init__r��r�
objectTyper�rqcCs0|r|jjj|dd�S|jr dS|j�|�SdS)NF��prefixedr�)�parentr�rr=r<�rrr?r�rrrr�s
zASTFunctionParameter.get_idrEcCs|jr
dS||j�SdS�Nr�)r=r<rurrrrH�szASTFunctionParameter._stringifyrr]cCs8t|�|jr |t�dd�7}n|jj||||d�dS)Nr�r-)r6r=rrdr<r;rprrrr;�sz'ASTFunctionParameter.describe_signature)F)NN)
rr	r
rrCrrarrr*rHrr;rrrrr9�s���r9c@sDeZdZeed�dd�Zeed�dd�Ze	eddd	d
�dd�Z
d	S)
�ASTNoexceptSpecr�cCs
||_dSr�r�r�rrrr�szASTNoexceptSpec.__init__rEcCs|jrd||j�dSdS)Nr�r�rfr�rurrrrH�szASTNoexceptSpec._stringifyrr�Nr]cCsL|t�dd�7}|jrH|t�dd�7}|j�|d||�|t�dd�7}dS)Nrfr�r&r��rrer�rdr;rprrrr;�s
z"ASTNoexceptSpec.describe_signature�rr	r
rrlrr*rrHrr;rrrrrE�s
�rEc@s�eZdZeeeeeeedeeee	eedd�dd�Z
eeed�dd��Ze
ed	�d
d�Ze
ed	�dd
�Zeed�dd�Zeedddd�dd�ZdS)�ASTParametersQualifiersr�N)r'r�rL�refQual�
exceptionSpec�trailingReturn�override�final�attrs�initializerrqcCs@||_||_||_||_||_||_||_||_|	|_|
|_	dSr�)
r'r�rLrIrJrKrLrMrNrO)rr'r�rLrIrJrKrLrMrNrOrrrr�sz ASTParametersQualifiers.__init__rcCs|jSr��r'rrrr�function_params�sz'ASTParametersQualifiers.function_paramsrcCslg}|jr|�d�|jr8|dkr.|�d�n
|�d�|jdkrN|�d�n|jdkrb|�d�d	�|�S)
N�Vrr��Kr��Or��Rr�)r�r6rLrIrZrCrrr�get_modifiers_id�s




z(ASTParametersQualifiers.get_modifiers_idcsh�dkr8t|j�dkrdSdd��fdd�|jD��St|j�dkrJdSd��fd	d�|jD��SdS)
Nrrr�rr�c3s|]}|���VqdSr�rRr*rTrrrU
rVz7ASTParametersQualifiers.get_param_id.<locals>.<genexpr>r�c3s|]}|���VqdSr�rRr*rTrrrUrV)rr'rZrrrTr�get_param_idsz$ASTParametersQualifiers.get_param_idrEcCs0g}|�d�d}|jD]$}|s*|�d�d}|�t|��q|�d�|jrX|�d�|jrh|�d�|jr�|�d�|�|j�|jr�|�d�|�||j��|jr�|�d	�|�||j��|jr�|�d
�|j	r�|�d�|j
D]}|�d�|�||��q�|j�r&|�d�|�|j�d
�|�S)Nr�TrFr�z	 volatilez constr^z -> � finalz	 override� = r�)
r6r'rr�rLrIrJrKrMrLrNrOrZ)rrFrDrhr��attrrrrrHsB













z"ASTParametersQualifiers._stringifyrr�r]cCs.t|�|dkrXt��}|jD].}tjdddd�}|j|d||d�||7}q||7}nf|t�dd�7}d}|jD]:}|s�|t�dd�7}|t��7}d	}|j|d
||d�qr|t�dd�7}tt	dd�d
d�}	|j
r�|	|d�|jr�|	|d�|j�r|t��7}|t�|j|j�7}|j
�r>|t��7}|j
�||||�|j�r�|t��7}|t�dd�7}|t��7}|j�||||�|j�r�|	|d�|j�r�|	|d�|jD]}
|t��7}|
�|��q�|j�r*|t��7}|t�dd�7}|t��7}|jdk�r|t�dd�7}n|t�|j|j�7}dS)Nr-r�T)Znoemphr/r-r�r�Fr&r��r r%rqcSs |t��7}|t�||�7}dSr��rrfre�r r%rrr�	_add_annoIsz=ASTParametersQualifiers.describe_signature.<locals>._add_annor�rLr�rMrLr��0)r6rZdesc_parameterlistr'Zdesc_parameterr;rdrfrrr�rLrIrJrKr�rMrLrNrOr�re)rr r!r"r�Z	paramlistr<r/rhr^rZrrrr;3s^








z*ASTParametersQualifiers.describe_signature)rr	r
rr9rCrrrEr$rrkrQrarVrWr*rHrr;rrrrrH�s

�#�rHc@sDeZdZeedd�dd�Zeed�dd�Ze	dd	dd
�dd�Z
dS)
�ASTExplicitSpecN�r�rqcCs
||_dSr�r�r�rrrroszASTExplicitSpec.__init__rEcCs>dg}|jdur4|�d�|�||j��|�d�d�|�S)NrYr�r�r�)r�r6rZrGrrrrHrs


zASTExplicitSpec._stringifyrr��r r"r�rqcCsP|t�dd�7}|jdurL|t�dd�7}|j�|d||�|t�dd�7}dS)NrYr�r&r�rF)rr r"r�rrrr;zs

z"ASTExplicitSpec.describe_signaturerGrrrrr`ns
�r`c@sneZdZeeeeeeeeeeeeeedd�
dd�Z	ddd�dd�Z
eed�d	d
�Ze
dddd
�dd�ZdS)�ASTDeclSpecsSimpleN)
�storage�threadLocalr`r��explicitSpecrMrNrOr�rLr^rNrqc

CsL||_||_||_||_||_||_||_||_|	|_|
|_	||_
||_dSr�)rdrer`r�rfrMrNrOr�rLr^rN)
rrdrer`r�rfrMrNrOr�rLr^rNrrrr�szASTDeclSpecsSimple.__init__)�otherrqcCs�|s|St|jp|j|jp|j|jp(|j|jp2|j|jp<|j|jpF|j|jpP|j|jpZ|j|j	pd|j	|j
pn|j
|jpx|j|j|j�Sr�)
rcrdrer`r�rfrMrNrOr�rLr^rN)rrgrrr�	mergeWith�s










�zASTDeclSpecsSimple.mergeWithrEcs�g}|��fdd�|jD��|jr0|�|j�|jr@|�d�|jrP|�d�|jr`|�d�|jrp|�d�|jr�|��|j��|j	r�|�d�|j
r�|�d�|jr�|�d	�|jr�|�d
�|j
r�|�d�d�|�S)
Nc3s|]}�|�VqdSr�r)rSrZrrrrU�rVz0ASTDeclSpecsSimple._stringify.<locals>.<genexpr>rzr`r^r�rMrNrOr�rLr^)�extendrNrdr6rer`r^r�rfrMrNrOr�rLrZrGrrrrH�s2








zASTDeclSpecsSimple._stringifyrr�rbcsd�|jD]"}�r|t��7}d�|�|�q
tttd��fdd�}|jrV|||j��|jrf||d��|j	rv||d��|j
r�||d��|jr�||d	��|jr��r�|t��7}|j�|||�d�|j
r�||d
��|jr�||d��|jr�||d��|j�r||d
��|j�r||d��dS)NFTr[cs$�r|t��7}|t�||�7}dSrr\r]��addSpacerr�_add�sz3ASTDeclSpecsSimple.describe_signature.<locals>._addrzr`r^r�rMrNrOr�rL)rNrrfr;rrrCrdrer`r^r�rfrMrNrOr�rL)rr r"r�rZrlrrjrr;�s@








z%ASTDeclSpecsSimple.describe_signature)rr	r
rrCrr`rr$rrhr*rHrr;rrrrrc�s��rcc@sXeZdZeeeedd�dd�Zeed�dd�Ze	ed�d	d
�Z
eedddd
�dd�ZdS)�ASTDeclSpecsN)�outer�	leftSpecs�
rightSpecs�trailingrqcCs,||_||_||_|j�|j�|_||_dSr�)rnrorprh�allSpecs�trailingTypeSpec)rrnrorprqrrrr�s
zASTDeclSpecs.__init__rcCs�|dkrLg}|�|j�|��|jjr0|�d�|jjrB|�d�d�|�Sg}|jjrb|�d�|jjrt|�d�|jdur�|�|j�|��d�|�S)NrrRr�r�rS)r6rsrrrr�rLrZrCrrrr�s 





zASTDeclSpecs.get_idrEcCs�g}||j�}t|�dkr$|�|�|jr�t|�dkr@|�d�|�||j��t|j�}t|�dkr�t|�dkr||�d�|�|�d�|�S�Nrr^r�)rorr6rsrrprZ)rrFrDr��rrrrrH		s





zASTDeclSpecs._stringifyrr�r]cCs�t|�t|�}|j�|||�t|�|k}|jr�|rB|t��7}t|�}|jj||||d�t|�|k}tt|j��dkr�|r�|t��7}|j�|||�dS)Nr-r)	r6rror;rsrrfrrp)rr r!r"r�ZnumChildrenrkrrrr;	s �zASTDeclSpecs.describe_signature)
rr	r
rrcr.rrarr*rHrr;rrrrrm�s��rmc@sPeZdZed�dd�Zeed�dd�Zeed�dd	�Z	e
ed
ddd
�dd�ZdS)�ASTArray��sizecCs
||_dSr�rw)rrxrrrr2	szASTArray.__init__rEcCs |jrd||j�dSdSdS)Nr�r�r�rwrurrrrH5	szASTArray._stringifyrcCsR|dkrdS|dkr0|jr,dt|j�dSdS|jrJd|j�|�dSdSdS)Nr�Ar�rZA_)rxrrrrrrr;	szASTArray.get_idrr�Nr]cCsDt|�|t�dd�7}|jr0|j�|d||�|t�dd�7}dS)Nr�r&r�)r6rrdrxr;rprrrr;H	s
zASTArray.describe_signaturer�rrrrrv1	s
�rvc@s�eZdZeed�dd��Zejedd�dd��Zeed�dd��Zee	e
d�d	d
��Zedd�dd
��Zed�dd�Z
eed�dd�Zeed�dd�Zeed�dd�Zeeed�dd�Zed�dd�Zeedddd�dd �ZdS)!�
ASTDeclaratorrcCstt|���dSr�rmrrrrrMR	szASTDeclarator.nameN�rMrqcCstt|���dSr�rmr�rrrrMV	scCstt|���dSr�rmrrrr�isPackZ	szASTDeclarator.isPackcCstt|���dSr�rmrrrrrQ^	szASTDeclarator.function_paramsr�cCstt|���dSr�rmrrrrrKb	szASTDeclarator.trailingReturncCstt|���dSr�rmrrrr�require_space_after_declSpecsf	sz+ASTDeclarator.require_space_after_declSpecsrcCstt|���dSr�rmrrrrrVi	szASTDeclarator.get_modifiers_idcCstt|���dSr�rmrrrrrWl	szASTDeclarator.get_param_idcCstt|���dSr�rmrrrr�get_ptr_suffix_ido	szASTDeclarator.get_ptr_suffix_id�r�returnTypeIdrqcCstt|���dSr�rm�rrr�rrr�get_type_idr	szASTDeclarator.get_type_idcCstt|���dSr�rmrrrr�is_function_typeu	szASTDeclarator.is_function_typerr�r]cCstt|���dSr�rmrprrrr;x	sz ASTDeclarator.describe_signature)rr	r
rkrIrM�setterrCr|rr9rQrKr}rarrVrWr~r�r�rr;rrrrrzQ	s&�rzc@s
eZdZeeeedd�dd�Zeed�dd��Z	e	j
edd�d	d��Z	eed�d
d��Zeee
d�dd
��Zedd�dd��Zeed�dd�Zeed�dd�Zeed�dd�Zeeed�dd�Zed�dd�Zed�dd�Zeed�d d!�Zeed"d#dd$�d%d&�ZdS)'�ASTDeclaratorNameParamQualN)�declId�arrayOps�	paramQualrqcCs||_||_||_dSr��r�r�r�)rr�r�r�rrrr~	sz#ASTDeclaratorNameParamQual.__init__rcCs|jSr��r�rrrrrM�	szASTDeclaratorNameParamQual.namer{cCs
||_dSr�r�r�rrrrM�	scCsdSrArrrrrr|�	sz!ASTDeclaratorNameParamQual.isPackcCs|jjSr�)r�rQrrrrrQ�	sz*ASTDeclaratorNameParamQual.function_paramsr�cCs|jjSr�)r�rKrrrrrK�	sz)ASTDeclaratorNameParamQual.trailingReturnrcCs"|jr|j�|�Std|��dS)Nz,This should only be called on a function: %s)r�rVr7rrrrrV�	sz+ASTDeclaratorNameParamQual.get_modifiers_idcCs|jr|j�|�SdSdSr�)r�rWrrrrrW�	sz'ASTDeclaratorNameParamQual.get_param_idcsd��fdd�|jD��S)Nr�c3s|]}|���VqdSr�rRr*rTrrrU�	rVz?ASTDeclaratorNameParamQual.get_ptr_suffix_id.<locals>.<genexpr>)rZr�rrrTrr~�	sz,ASTDeclaratorNameParamQual.get_ptr_suffix_idrcCsng}|�|�|��|jrZ|�|�|��|�d�|�|�|�|�|��|�d�n
|�|�d�|�S)N�FrXr�)r6r~r�rVrWrZ�rrr�rDrrrr��	s


z&ASTDeclaratorNameParamQual.get_type_idcCs
|jduSr�r�rrrrr}�	sz8ASTDeclaratorNameParamQual.require_space_after_declSpecscCs
|jduSr�)r�rrrrr��	sz+ASTDeclaratorNameParamQual.is_function_typerEcCsTg}|jr|�||j��|jD]}|�||��q |jrJ|�||j��d�|�Sr�)r�r6r�r�rZ)rrFrDr�rrrrH�	s
z%ASTDeclaratorNameParamQual._stringifyrr�r]cCsXt|�|jr |j�||||�|jD]}|�||||�q&|jrT|j�||||�dSr�)r6r�r;r�r�)rr r!r"r�r�rrrr;�	s
z-ASTDeclaratorNameParamQual.describe_signature)rr	r
rIrrvrHrrkrMr�rCr|r9rQrKrarrVrWr~r�r}r�r*rHrr;rrrrr�}	s0�
�r�c@s�eZdZeed�dd�Zeed�dd��Zejedd�d	d��Ze	e
d
�dd�Ze	e
d
�d
d�Ze
d�dd�Ze
d�dd�Zee
d�dd�Zee
dddd�dd�ZdS)�ASTDeclaratorNameBitField�r�rxcCs||_||_dSr�r�)rr�rxrrrr�	sz"ASTDeclaratorNameBitField.__init__rcCs|jSr�r�rrrrrM�	szASTDeclaratorNameBitField.nameNr{cCs
||_dSr�r�r�rrrrM�	srcCsdSr�rrrrrrW�	sz&ASTDeclaratorNameBitField.get_param_idcCsdSr�rrrrrr~�	sz+ASTDeclaratorNameBitField.get_ptr_suffix_idcCs
|jduSr�r�rrrrr}�	sz7ASTDeclaratorNameBitField.require_space_after_declSpecscCsdSrArrrrrr��	sz*ASTDeclaratorNameBitField.is_function_typerEcCs>g}|jr|�||j��|�d�|�||j��d�|�S)N� : r�)r�r6rxrZrGrrrrH�	s
z$ASTDeclaratorNameBitField._stringifyrr�r]cCs^t|�|jr |j�||||�|t��7}|t�dd�7}|t��7}|j�||||�dS)Nr))r6r�r;rrfrdrxrprrrr;�	sz,ASTDeclaratorNameBitField.describe_signature)rr	r
rIrlrrkrMr�rarrWr~rCr}r�r*rHrr;rrrrr��	s�r�c@s�eZdZeeeeedd�dd�Zee	d�dd��Z
e
je	dd�d	d��Z
eeed�d
d��Z
edd�d
d��Zed�dd�Zeed�dd�Zeed�dd�Zeed�dd�Zeed�dd�Zeeed�dd�Zed�dd�Zeed d!dd"�d#d$�ZdS)%�ASTDeclaratorPtrN)�nextr�rLrNrqcCs||_||_||_||_dSr��r�r�rLrN)rr�r�rLrNrrrr
szASTDeclaratorPtr.__init__rcCs|jjSr��r�rMrrrrrM
szASTDeclaratorPtr.namer{cCs||j_dSr�r�r�rrrrM
scCs|jjSr��r�rQrrrrrQ
sz ASTDeclaratorPtr.function_paramsr�cCs|jjSr��r�rKrrrrrK
szASTDeclaratorPtr.trailingReturncCs
|j��Sr��r�r}rrrrr}
sz.ASTDeclaratorPtr.require_space_after_declSpecsrEcCs�dg}|jD]}|�||��qt|j�dkrD|js:|jrD|�d�|jrT|�d�|jrt|jrj|�d�|�d�|js�|js�t|j�dkr�|j��r�|�d�|�||j��d�|�S)Nr�rr^r�rLr�)rNr6rr�rLr�r}rZ�rrFrDr�rrrrH
s 






zASTDeclaratorPtr._stringifyrcCs|j�|�Sr��r�rVrrrrrV1
sz!ASTDeclaratorPtr.get_modifiers_idcCs|j�|�Sr��r�rWrrrrrW4
szASTDeclaratorPtr.get_param_idcCs�|dkrJdg}|jr|�d�|jr.|�d�|�|j�|��d�|�S|j�|�g}|�d�|jrr|�d�|jr�|�d�d�|�S)Nr�PrRr�r�)r�r6rLr�r~rZrCrrrr~7
s





z"ASTDeclaratorPtr.get_ptr_suffix_idrcCsFdg}|jr|�d�|jr&|�d�|�|�|jj|d�|�d�S)Nr�rRr�r��r�)r�r6rLr�r�rZr�rrrr�I
s


zASTDeclaratorPtr.get_type_idcCs
|j��Sr��r�r�rrrrr�S
sz!ASTDeclaratorPtr.is_function_typerr�r]cCs�t|�|t�dd�7}|jD]}|�|�qt|j�dkrT|jsH|jrT|t��7}t	t
dd�dd�}|jrv||d�|jr�|jr�|t��7}||d�|js�|js�t|j�dkr�|j��r�|t��7}|j�||||�dS)Nr�rr[cSs|t�||�7}dSr�rvr]rrrr^_
sz6ASTDeclaratorPtr.describe_signature.<locals>._add_annor�rL)
r6rrdrNr;rr�rLrfrrr�r})rr r!r"r�r�r^rrrr;V
s"



z#ASTDeclaratorPtr.describe_signature)rr	r
rzrCrr$rrkrIrMr�r9rQrKr}r*rrHrarVrWr~r�r�rr;rrrrr�
s*�
�r�c@seZdZeeedd�dd�Zeed�dd��Z	e	j
edd�d	d��Z	eed�d
d��Zeee
d�dd
��Zedd�dd��Zed�dd�Zeed�dd�Zeed�dd�Zeed�dd�Zeed�dd�Zeeed�dd�Zed�d d!�Zeed"d#dd$�d%d&�ZdS)'�ASTDeclaratorRefN)r�rNrqcCs||_||_dSr��r�rN)rr�rNrrrrn
szASTDeclaratorRef.__init__rcCs|jjSr�r�rrrrrMs
szASTDeclaratorRef.namer{cCs||j_dSr�r�r�rrrrMw
scCsdSrrrrrrr|{
szASTDeclaratorRef.isPackcCs|jjSr�r�rrrrrQ
sz ASTDeclaratorRef.function_paramsr�cCs|jjSr�r�rrrrrK�
szASTDeclaratorRef.trailingReturncCs
|j��Sr�r�rrrrr}�
sz.ASTDeclaratorRef.require_space_after_declSpecsrEcCs\dg}|jD]}|�||��qt|j�dkrB|j��rB|�d�|�||j��d�|�S)Nr�rr^r�)rNr6rr�r}rZr�rrrrH�
s

zASTDeclaratorRef._stringifyrcCs|j�|�Sr�r�rrrrrV�
sz!ASTDeclaratorRef.get_modifiers_idcCs|j�|�Sr�r�rrrrrW�
szASTDeclaratorRef.get_param_idcCs,|dkrd|j�|�S|j�|�dSdS)NrrU�r�r~rrrrr~�
sz"ASTDeclaratorRef.get_ptr_suffix_idrcCs|jj|d|d�S)NrUr��r�r�r�rrrr��
szASTDeclaratorRef.get_type_idcCs
|j��Sr�r�rrrrr��
sz!ASTDeclaratorRef.is_function_typerr�r]cCsht|�|t�dd�7}|jD]}|�|�qt|j�dkrR|j��rR|t��7}|j�||||�dS)Nr�r)	r6rrdrNr;rr�r}rf)rr r!r"r�r�rrrr;�
s
z#ASTDeclaratorRef.describe_signature)rr	r
rzrr$rrkrIrMr�rCr|r9rQrKr}r*rrHrarVrWr~r�r�rr;rrrrr�m
s*	�r�c@s�eZdZedd�dd�Zeed�dd��Zejedd�d	d��Zee	e
d�d
d��Zedd�d
d��Ze
d�dd�Zeed�dd�Zeed�dd�Zeed�dd�Zeed�dd�Zeeed�dd�Ze
d�dd�Zeed d!dd"�d#d$�ZdS)%�ASTDeclaratorParamPackN)r�rqcCs
||_dSr��r�)rr�rrrr�
szASTDeclaratorParamPack.__init__rcCs|jjSr�r�rrrrrM�
szASTDeclaratorParamPack.namer{cCs||j_dSr�r�r�rrrrM�
scCs|jjSr�r�rrrrrQ�
sz&ASTDeclaratorParamPack.function_paramsr�cCs|jjSr�r�rrrrrK�
sz%ASTDeclaratorParamPack.trailingReturncCsdSrArrrrrr}�
sz4ASTDeclaratorParamPack.require_space_after_declSpecsrEcCs"||j�}|jjrd|}d|S)Nr^r�r�rGrrrrH�
s
z!ASTDeclaratorParamPack._stringifyrcCs|j�|�Sr�r�rrrrrV�
sz'ASTDeclaratorParamPack.get_modifiers_idcCs|j�|�Sr�r�rrrrrW�
sz#ASTDeclaratorParamPack.get_param_idcCs,|dkrd|j�|�S|j�|�dSdS�Nr�Dpr�rrrrr~�
sz(ASTDeclaratorParamPack.get_ptr_suffix_idrcCs|jj|d|d�S)Nr�r�r�r�rrrr��
sz"ASTDeclaratorParamPack.get_type_idcCs
|j��Sr�r�rrrrr��
sz'ASTDeclaratorParamPack.is_function_typerr�r]cCsBt|�|t�dd�7}|jjr,|t��7}|j�||||�dSrD)r6rrdr�rMrfr;rprrrr;�
s
z)ASTDeclaratorParamPack.describe_signature�rr	r
rzrrkrIrMr�rr9rQrKrCr}r*rrHrarVrWr~r�r�rr;rrrrr��
s&�r�c@s�eZdZeeeedd�dd�Zeed�dd��Zej	edd�d	d��Zee
ed�d
d��Zedd�d
d��Z
ed�dd�Zeed�dd�Zeed�dd�Zeed�dd�Zeed�dd�Zeeed�dd�Zed�dd�Zeed d!dd"�d#d$�ZdS)%�ASTDeclaratorMemPtrN)�	classNamerLr�r�rqcCs||_||_||_||_dSr�)r�rLr�r�)rr�rLr�r�rrrr�
szASTDeclaratorMemPtr.__init__rcCs|jjSr�r�rrrrrM�
szASTDeclaratorMemPtr.namer{cCs||j_dSr�r�r�rrrrM�
scCs|jjSr�r�rrrrrQ�
sz#ASTDeclaratorMemPtr.function_paramsr�cCs|jjSr�r�rrrrrKsz"ASTDeclaratorMemPtr.trailingReturncCsdSrrrrrrr}sz1ASTDeclaratorMemPtr.require_space_after_declSpecsrEcCs|g}|�||j��|�d�|jr.|�d�|jrN|jrD|�d�|�d�|j��rb|�d�|�||j��d�|�S)Nz::*r�r^rLr�)r6r�r�rLr�r}rZrGrrrrH
s





zASTDeclaratorMemPtr._stringifyrcCs |dkrt��n|j�|�SdS�Nr)r)r�rVrrrrrVsz$ASTDeclaratorMemPtr.get_modifiers_idcCs |dkrt��n|j�|�SdSr�)r)r�rWrrrrrWsz ASTDeclaratorMemPtr.get_param_idcCs*|dkrt��nt��|j�|�dSdSr�)r)rnr�r~rrrrr~%sz%ASTDeclaratorMemPtr.get_ptr_suffix_idrcCsNd}|jr|d7}|jr |d7}|d7}||j�|�7}||7}|j�||�S)Nr�rRrS�M)r�rLr�rr�r�)rrr�ZnextReturnTypeIdrrrr�,szASTDeclaratorMemPtr.get_type_idcCs
|j��Sr�r�rrrrr�9sz$ASTDeclaratorMemPtr.is_function_typerr�r]cCs�t|�|j�|d||�|t�dd�7}|t�dd�7}ttdd�dd�}|jr\||d�|jr~|jrt|t�	�7}||d�|j
��r�|t�	�7}|j
�||||�dS)	Nr&rQr�r[cSs|t�||�7}dSr�rvr]rrrr^Csz9ASTDeclaratorMemPtr.describe_signature.<locals>._add_annor�rL)r6r�r;rrdrrr�rLrfr�r})rr r!r"r�r^rrrr;<s


z&ASTDeclaratorMemPtr.describe_signature)rr	r
rIrCrzrrkrMr�rr9rQrKr}r*rrHrarVrWr~r�r�rr;rrrrr��
s*�	
�r�c@s�eZdZeedd�dd�Zeed�dd��Zejedd�d	d��Zee	e
d�d
d��Zedd�d
d��Ze
d�dd�Zeed�dd�Zeed�dd�Zeed�dd�Zeed�dd�Zeeed�dd�Ze
d�dd�Zeed d!dd"�d#d$�ZdS)%�ASTDeclaratorParenN)�innerr�rqcCs||_||_dSr��r�r�)rr�r�rrrrQszASTDeclaratorParen.__init__rcCs|jjSr��r�rMrrrrrMXszASTDeclaratorParen.namer{cCs||j_dSr�r�r�rrrrM\scCs|jjSr�)r�rQrrrrrQ`sz"ASTDeclaratorParen.function_paramsr�cCs|jjSr�)r�rKrrrrrKdsz!ASTDeclaratorParen.trailingReturncCsdSrrrrrrr}hsz0ASTDeclaratorParen.require_space_after_declSpecsrEcCs:dg}|�||j��|�d�|�||j��d�|�Sr�)r6r�r�rZrGrrrrHks

zASTDeclaratorParen._stringifyrcCs|j�|�Sr�)r�rVrrrrrVrsz#ASTDeclaratorParen.get_modifiers_idcCs|j�|�Sr�)r�rWrrrrrWuszASTDeclaratorParen.get_param_idcCsB|dkr&t��|j�|�|j�|�S|j�|�|j�|�SdSr�)r)r�r~r�rrrrr~xs

�

�z$ASTDeclaratorParen.get_ptr_suffix_idrcCs|j�||�}|jj||d�S)Nr�)r�r�r�)rrr�ZnextIdrrrr��szASTDeclaratorParen.get_type_idcCs
|j��Sr�)r�r�rrrrr��sz#ASTDeclaratorParen.is_function_typerr�r]cCsPt|�|t�dd�7}|j�||||�|t�dd�7}|j�|d||�dS)Nr�r�r.)r6rrdr�r;r�rprrrr;�s
z%ASTDeclaratorParen.describe_signaturer�rrrrr�Ps&	�r�c@sXeZdZeeefd�dd�Zeed�dd�Z	e
ed�dd	�Zeed
ddd
�dd�Z
dS)�ASTPackExpansionExprr�cCs
||_dSr�r�r�rrrr�szASTPackExpansionExpr.__init__rEcCs||j�dSrDr�rurrrrH�szASTPackExpansionExpr._stringifyrcCs|j�|�}d|S�N�spr�r�rrrr�szASTPackExpansionExpr.get_idrr�Nr]cCs&|j�||||�|t�dd�7}dSrD)r�r;rrdrprrrr;�sz'ASTPackExpansionExpr.describe_signature)rr	r
rrlr�rr*rrHrarrr;rrrrr��s�r�c@s^eZdZeeeefdd�dd�Zee	d�dd�Z
ee	d�d	d
�Ze
e	dddd
�dd�ZdS)r�N)r�rqcCs
||_dSr�r
rrrrr�szASTParenExprList.__init__rcsdd��fdd�|jD��S)Nzpi%sEr�c3s|]}|���VqdSr�rRrrTrrrU�rVz*ASTParenExprList.get_id.<locals>.<genexpr>rrrrTrr�szASTParenExprList.get_idrEcs"�fdd�|jD�}dd�|�S)Ncsg|]}�|��qSrrrrrrr�rVz/ASTParenExprList._stringify.<locals>.<listcomp>z(%s)r)r�rZ)rrFr�rrrrH�szASTParenExprList._stringifyrr�r]cCsrt|�|t�dd�7}d}|jD]:}|sH|t�dd�7}|t��7}nd}|�||||�q"|t�dd�7}dS)Nr�Tr�Fr�)r6rrdr�rfr;r
rrrr;�s
z#ASTParenExprList.describe_signature)rr	r
rrrlr�rrarrr*rHrr;rrrrr��s�r�c@sNeZdZdeeefedd�dd�Zee	d�dd�Z
ee	d	d
dd�dd
�ZdS)�ASTInitializerTN)rz�	hasAssignrqcCs||_||_dSr��rzr�)rrzr�rrrr�szASTInitializer.__init__rEcCs ||j�}|jrd|S|SdS�NrYr�)rrF�valrrrrH�s
zASTInitializer._stringifyrr�r]cCsLt|�|jr6|t��7}|t�dd�7}|t��7}|j�|d||�dS)Nr�r&)r6r�rrfrdrzr;rprrrr;�sz!ASTInitializer.describe_signature)T)
rr	r
rrlr�rCrr*rrHrr;rrrrr��s���r�c@s�eZdZeedd�dd�Zeed�dd��Zej	edd�d	d��Zee
d�d
d��Zeee
d�dd
��Zedd�dd��Zdeeded�dd�Zeed�dd�Zed�dd�Zeedddd�dd�ZdS)r�N)�	declSpecs�declrqcCs||_||_dSr�)r�r�)rr�r�rrrr�szASTType.__init__rcCs|jjSr��r�rMrrrrrM�szASTType.namer{cCs||j_dSr�r�r�rrrrM�scCs|jjSr�)r�r|rrrrr|�szASTType.isPackcCs|jjSr�)r�rQrrrrrQ�szASTType.function_paramscCs|jjSr�)r�rKrrrrrK�szASTType.trailingReturnr�r>c	Cs�|dkr�g}|r�|dkrx|�|���|��|�|j�|��|�|j�|��|jjjsl|jj	r�|jj	jr�|�d�q�|dkr�|�|���|��q�t
|�nF|j��r�t��|�|j�|��|�|j�
|��|�|j�|��d�|�Sg}|�r�|dk�r�|j�|�}|�|���||��|dk�r�|jj}|du�r�|j�
|�}|j�rd|j�|�}n|j�|�}|�|�|�|�|�|j�|��n(|dk�r�|�|���|��nt
|�n$|j�|�}|j�||�}|�|�d�|�S)Nr�functionZCEr�r�r�)r6�get_full_nested_namerr�rWrVr�rorNrp�printr�r)r~rZr�rbrKr�)	rrr?r�rDrPZtemplZtypeIdr�rrrr�s\
��








zASTType.get_idrEcCsRg}||j�}|�|�|j��r8t|�dkr8|�d�|�||j��d�|�Srt)r�r6r�r}rrZ)rrFrDr�rrrrH+s


zASTType._stringifycCs|jjrdSdSdS)Nr~r�)r�rsrrrr�get_type_declaration_prefix4sz#ASTType.get_type_declaration_prefixrr]cCsdt|�|j�|d||�|j��rBtt|j��dkrB|t��7}|dkrNd}|j�||||�dS)Nr&rr.)	r6r�r;r�r}rrrrfrprrrr;:s
�zASTType.describe_signature)NN)rr	r
rmrzrrkrIrMr�rCr|rr9rQrKrarrr*rHr�rr;rrrrr��s*��8	�r�c@s~eZdZeedd�dd�Zeed�dd��Zeed�dd	��Z	de
ed
ed�dd
�Ze
ed�dd�Zeedd
dd�dd�ZdS)r;N�r��initrqcCs||_||_dSr��r�r��rr�r�rrrrIsz0ASTTemplateParamConstrainedTypeWithInit.__init__rcCs|jjSr��r�rMrrrrrMNsz,ASTTemplateParamConstrainedTypeWithInit.namecCs|jjSr��r�r|rrrrr|Rsz.ASTTemplateParamConstrainedTypeWithInit.isPackr�r>cCs&|r|jjj|dd�S|j�|�SdS�NFr@)rBr�rr�rCrrrrVsz.ASTTemplateParamConstrainedTypeWithInit.get_idrEcCs*||j�}|jr&|d7}|||j�7}|Sr�r�rGrrrrH_s

z2ASTTemplateParamConstrainedTypeWithInit._stringifyrr]cCsV|j�||||�|jrR|t��7}|t�dd�7}|t��7}|j�||||�dS)Nr�)r�r;r�rrfrdrprrrr;fsz:ASTTemplateParamConstrainedTypeWithInit.describe_signature)NN)rr	r
r�rrkrIrMrCr|rarrr*rHrr;rrrrr;Hs	�r;c@s~eZdZeedd�dd�Zeed�dd��Zee	d�dd	��Z
deed
ed�dd
�Z
eed�dd�Zeedd
dd�dd�ZdS)r:Nr�cCs||_||_dSr�r�r�rrrrqszASTTypeWithInit.__init__rcCs|jjSr�r�rrrrrMuszASTTypeWithInit.namecCs|jjSr�r�rrrrr|yszASTTypeWithInit.isPackr�r>cCsJ|dkr|j�||�S|dkr<|���|�d|j�|�S|���|�S)N�memberrr)r�rr�rCrrrr}s
�zASTTypeWithInit.get_idrEcCs4g}|�||j��|jr*|�||j��d�|�Sr�)r6r�r�rZrGrrrrH�s
zASTTypeWithInit._stringifyrr]cCs6t|�|j�||||�|jr2|j�||||�dSr�)r6r�r;r�rprrrr;�sz"ASTTypeWithInit.describe_signature)NN)rr	r
r�r�rrkrIrMrCr|rarrr*rHrr;rrrrr:ps��	�r:c@sheZdZeedd�dd�Zdeeded�dd�Ze	ed	�d
d�Z
ed�d
d�Zeedddd�dd�Z
dS)�ASTTypeUsingN)rMr�rqcCs||_||_dSr�)rMr��rrMr�rrrr�szASTTypeUsing.__init__r�r>cCs|dkrt��|���|�Sr��r)r�rrCrrrr�szASTTypeUsing.get_idrEcCs>g}|�||j��|jr4|�d�|�||j��d�|�S)NrYr�)r6rMr�rZrGrrrrH�s
zASTTypeUsing._stringifyrcCsdS)Nr�rrrrrr��sz(ASTTypeUsing.get_type_declaration_prefixrr]cCsbt|�|jj||||d�|jr^|t��7}|t�dd�7}|t��7}|jj|d||d�dS)Nr-r�r&)r6rMr;r�rrfrdrprrrr;�szASTTypeUsing.describe_signature)NN)rr	r
rIr�rrarrr*rHr�rr;rrrrr��s���r�c@sleZdZeedd�dd�Zeed�dd��Zdee	de	d	�d
d�Z
ee	d�d
d�Ze
e	dddd�dd�ZdS)�
ASTConceptN)r6rOrqcCs||_||_dSr��r6rO�rr6rOrrrr�szASTConcept.__init__rcCs|jSr�r8rrrrrM�szASTConcept.namer�r>cCs|dkrt��|���|�Sr�r�rCrrrr�szASTConcept.get_idrEcCs"||j�}|jr|||j�7}|Sr�r�rGrrrrH�s
zASTConcept._stringifyrr]cCs.|j�||||�|jr*|j�||||�dSr�)r6r;rOrprrrr;�szASTConcept.describe_signature)NN)rr	r
rIr�rrkrMrarrr*rHrr;rrrrr��s���r�c@sHeZdZeeeedd�dd�Zeed�dd�Ze	edd	dd
�dd�Z
dS)
�ASTBaseClassN)rM�
visibilityr��packrqcCs||_||_||_||_dSr�)rMr�r�r�)rrMr�r�r�rrrr�szASTBaseClass.__init__rEcCs^g}|jdur$|�|j�|�d�|jr4|�d�|�||j��|jrT|�d�d�|�S)Nr^zvirtual r�r�)r�r6r�rMr�rZrGrrrrH�s



zASTBaseClass._stringifyrr�r]cCs�t|�|jdur2|t�|j|j�7}|t��7}|jrT|t�dd�7}|t��7}|jj|d||d�|jr~|t�	dd�7}dS)Nr�r&r-r�)
r6r�rrerfr�rMr;r�rdrprrrr;�s

�zASTBaseClass.describe_signature)rr	r
rIrrCrr*rHrr;rrrrr��s��r�c@s^eZdZeeeedd�dd�Zee	de	d�dd�Z
ee	d	�d
d�Ze
e	dddd
�dd�ZdS)�ASTClassN)rMrM�basesrqcCs||_||_||_dSr�)rMrMr�)rrMrMr�rrrr�szASTClass.__init__r�r>cCs|���|�Sr�)r�rrCrrrr�szASTClass.get_idrEcCsvg}|�||j��|jr$|�d�t|j�dkrl|�d�d}|jD]$}|sX|�d�d}|�||��qFd�|�S)NrXrr�TrFr�)r6rMrMrr�rZ)rrFrDrhr�rrrrH
s



zASTClass._stringifyrr]cCs�t|�|jj||||d�|jr>|t��7}|t�dd�7}t|j�dkr�|t��7}|t�	dd�7}|t��7}|jD]2}|j||||d�|t�	dd�7}|t��7}qz|�
�|�
�dS)Nr-rMrr)r�)r6rMr;rMrrfrerr�rd�pop)rr r!r"r�r�rrrr;
s
zASTClass.describe_signature)rr	r
rIrCrr�rrarrr*rHrr;rrrrr��s�r�c@sVeZdZedd�dd�Zeeded�dd�Zeed	�d
d�Z	e
edddd
�dd�ZdS)�ASTUnionNr{cCs
||_dSr�r�r�rrrr$
szASTUnion.__init__r�r>cCs|dkrt��|���|�Sr�r�rCrrrr'
szASTUnion.get_idrEcCs
||j�Sr�r�rurrrrH,
szASTUnion._stringifyrr]cCs t|�|jj||||d�dS)Nr-)r6rMr;rprrrr;/
szASTUnion.describe_signature)rr	r
rIrrarrr*rHrr;rrrrr�#
s�r�c@sZeZdZeeedd�dd�Zeeded�dd�Ze	ed	�d
d�Z
eedddd
�dd�ZdS)�ASTEnumN)rM�scoped�underlyingTyperqcCs||_||_||_dSr�)rMr�r�)rrMr�r�rrrr6
szASTEnum.__init__r�r>cCs|dkrt��|���|�Sr�r�rCrrrr<
szASTEnum.get_idrEcCsZg}|jr |�|j�|�d�|�||j��|jrP|�d�|�||j��d�|�S)Nr^r�r�)r�r6rMr�rZrGrrrrHA
s

zASTEnum._stringifyrr]cCsbt|�|jj||||d�|jr^|t��7}|t�dd�7}|t��7}|jj|d||d�dS)Nr-r)r.)r6rMr;r�rrfrdrprrrr;L
s
�zASTEnum.describe_signature)
rr	r
rIrr�rrarr*rHrr;rrrrr�5
s��r�c@sXeZdZeedd�dd�Zeeded�dd�Ze	ed	�d
d�Z
eedddd
�dd�ZdS)�
ASTEnumeratorN)rMr�rqcCs||_||_dSr�)rMr�)rrMr�rrrrZ
szASTEnumerator.__init__r�r>cCs|dkrt��|���|�Sr�r�rCrrrr^
szASTEnumerator.get_idrEcCs4g}|�||j��|jr*|�||j��d�|�Sr�)r6rMr�rZrGrrrrHc
s
zASTEnumerator._stringifyrr]cCs6t|�|j�||||�|jr2|j�|d||�dS)Nr&)r6rMr;r�rprrrr;j
sz ASTEnumerator.describe_signature)
rr	r
rIr�rrarrr*rHrr;rrrrr�Y
s�r�c@s@eZdZed�dd�Zeed�dd�Zeeddd	d
�dd�Z	d	S)
�ASTTemplateParamrcCstt|���dSr�rmrrrr�get_identifierz
szASTTemplateParam.get_identifierrcCstt|���dSr�rmrrrrr}
szASTTemplateParam.get_idrr�N)�
parentNoder!r"r�rqcCstt|���dSr�rm)rr�r!r"r�rrrr;�
sz#ASTTemplateParam.describe_signature)
rr	r
rr�rarrrr;rrrrr�y
s
�r�c@sfeZdZeeeedd�dd�Zed�dd�Ze	ed�d	d
�Z
eed�dd
�Ze
edddd�dd�ZdS)� ASTTemplateKeyParamPackIdDefaultN)�keyr�
parameterPackrSrqcCs |r||_||_||_||_dSr�)r�rr�rS)rr�rr�rSrrrr�
s
z)ASTTemplateKeyParamPackIdDefault.__init__rcCs|jSr�rrrrrr��
sz/ASTTemplateKeyParamPackIdDefault.get_identifierrcCs*g}|jr|�d�n
|�d�d�|�S)Nr�r_r�)r�r6rZrCrrrr�
s

z'ASTTemplateKeyParamPackIdDefault.get_idrEcCsx|jg}|jr(|jr|�d�|�d�|jrN|js>|�d�|�||j��|jrn|�d�|�||j��d�|�S)Nr^r�rYr�)r�r�rr6rSrZrGrrrrH�
s



z+ASTTemplateKeyParamPackIdDefault._stringifyrr�r]cCs�|t�|j|j�7}|jr<|jr,|t��7}|t�dd�7}|jrj|jsT|t��7}|j�|||dd|�|jr�|t��7}|t�dd�7}|t��7}|j�|d||�dS)Nr�r�r�r&)	rrer�r�rrfrdr;rSrprrrr;�
sz3ASTTemplateKeyParamPackIdDefault.describe_signature)rr	r
rrrCr�rr�rarr*rHrr;rrrrr��
s�

�r�c@s�eZdZedd�dd�Zeed�dd��Zeed�dd	��Z	e
d�d
d�Zdee
de
d
�dd�Zee
d�dd�Zee
dddd�dd�ZdS)�ASTTemplateParamTypeNr~cCs
||_dSr�r�r�rrrr�
szASTTemplateParamType.__init__rcCs |��}tt|d�gdgdd�S�NF�rL�r�rIr<�rr�rrrrM�
szASTTemplateParamType.namecCs|jjSr��rr�rrrrr|�
szASTTemplateParamType.isPackcCs
|j��Sr��rr�rrrrr��
sz#ASTTemplateParamType.get_identifierr�r>cCs&|r|jjj|dd�S|j�|�SdSr�)rBr�rrrCrrrr�
szASTTemplateParamType.get_idrEcCs
||j�Sr�r�rurrrrH�
szASTTemplateParamType._stringifyrr]cCs|j�||||�dSr�)rr;rprrrr;�
sz'ASTTemplateParamType.describe_signature)NN�rr	r
r�rrkrIrMrCr|rr�rarrr*rHrr;rrrrr��
s	�r�c@s�eZdZdedd�dd�Zeed�dd��Zeed�d	d
��Z	e
d�dd�Zdee
d
e
d�dd�Zee
d�dd�Zee
dd
dd�dd�ZdS)�ASTTemplateParamTemplateType�ASTTemplateParamsN)�nestedParamsrrqcCs||_||_dSr��r�r)rr�rrrrr�
sz%ASTTemplateParamTemplateType.__init__rcCs |��}tt|d�gdgdd�Sr�r�r�rrrrM�
sz!ASTTemplateParamTemplateType.namecCs|jjSr�r�rrrrr|�
sz#ASTTemplateParamTemplateType.isPackcCs
|j��Sr�r�rrrrr��
sz+ASTTemplateParamTemplateType.get_identifierr�r>cCs2|r|jjj|dd�S|j�|�|j�|�SdS)Nr@)rBr�rr�rrCrrrr�
sz#ASTTemplateParamTemplateType.get_idrEcCs||j�||j�Sr�r�rurrrrH�
sz'ASTTemplateParamTemplateType._stringifyrr]cCs4|j�|d||�|t��7}|j�||||�dS)Nr.)r�r;rrfrrprrrr;sz/ASTTemplateParamTemplateType.describe_signature)NNr�rrrrr��
s�	�r�c@s�eZdZeeefdd�dd�Zeed�dd��Z	ee
d�dd	��Zed�d
d�Z
deeded
�dd�Zeed�dd�Zeedddd�dd�ZdS)�ASTTemplateParamNonTypeN)r/rqcCs
||_dSr��r/)rr/rrrrsz ASTTemplateParamNonType.__init__rcCs |��}tt|d�gdgdd�Sr�r�r�rrrrMszASTTemplateParamNonType.namecCs|jjSr�)r/r|rrrrr|szASTTemplateParamNonType.isPackcCs$|jj}|r|jdj}|SdSdS�Nr)r/rMrJr?)rrMrDrrrr�s
z&ASTTemplateParamNonType.get_identifierr�r>cCs*|r|jjj|dd�Sd|j�|�SdS)Nr@r)rBr�rr/rCrrrr#szASTTemplateParamNonType.get_idrEcCs
||j�Sr�r�rurrrrH,sz"ASTTemplateParamNonType._stringifyrr]cCs|j�||||�dSr�)r/r;rprrrr;/sz*ASTTemplateParamNonType.describe_signature)NN)rr	r
rr:r;rrkrIrMrCr|rr�rarrr*rHrr;rrrrr�s��	�r�c@sneZdZeedd�dd�Zeed�dd�Ze	ed�d	d
�Z
eedddd
�dd�Ze
eddedd�dd�ZdS)r�N)�paramsrqcCs
||_dSr�)r�)rr�rrrr5szASTTemplateParams.__init__rcCs>g}|�d�|jD]}|�|�|��q|�d�d�|�S)Nr+rXr�)r6r�rrZ�rrrDr/rrrr9s


zASTTemplateParams.get_idrEcsBg}|�d�|�d��fdd�|jD���|�d�d�|�S)Nz	template<rc3s|]}�|�VqdSr�rr*rrrrUErVz/ASTTemplateParams._stringify.<locals>.<genexpr>z> r�)r6rZr�rGrrrrHBs

 
zASTTemplateParams._stringifyrr�r]cCsx|t�dd�7}|t�dd�7}d}|jD]8}|sN|t�dd�7}|t��7}d}|�||||�q*|t�dd�7}dS)Nrxr�Tr�Fr�)rrerdr�rfr;)rr r!r"r�rhr/rrrr;Is
z$ASTTemplateParams.describe_signature�r�r!r"r��lineSpecrqc
Cs�ttjd�dd�}||�}|t�dd�7}|t�dd�7}d}|jD]D}	|sh|t�dd�7}|t��7}d}|rx||�}|	�||||�qD|r�|s�||�}|t�d	d	�7}dS)
N)r�rqcSst��}||7}d|_|S)Nrg)r�desc_signature_line�sphinx_line_type)r�r rrr�makeLineYszDASTTemplateParams.describe_signature_as_introducer.<locals>.makeLinerxr�Tr�Fr�)rrr�rerdr�rfr;)
rr�r!r"r�r�r�ZlineNoderhr/rrr� describe_signature_as_introducerVs 
z2ASTTemplateParams.describe_signature_as_introducer)rr	r
rr�rrarrr*rHrr;rrCr�rrrrr�4s	��r�c@s�eZdZeedd�dd�Zeed�dd��Zeed�dd	��Z	ed�d
d�Z
deeded
�dd�Z
eed�dd�Zeed�dd�Zeedddd�dd�ZdS)� ASTTemplateIntroductionParameterN)rr�rqcCs||_||_dSr�)rr�)rrr�rrrrssz)ASTTemplateIntroductionParameter.__init__rcCs |��}tt|d�gdgdd�Sr�r�r�rrrrMwsz%ASTTemplateIntroductionParameter.namecCs|jSr�)r�rrrrr||sz'ASTTemplateIntroductionParameter.isPackcCs|jSr�rrrrrr��sz/ASTTemplateIntroductionParameter.get_identifierr�r>cCs(|r|jjj|dd�S|jr dSdSdS)Nr@r�r_)rBr�rr�rCrrrr�s
z'ASTTemplateIntroductionParameter.get_idrcCs"|j�|�}|jrd|S|SdSr�)rrr�rCrrr�
get_id_as_arg�sz.ASTTemplateIntroductionParameter.get_id_as_argrEcCs.g}|jr|�d�|�||j��d�|�S�Nr�r�)r�r6rrZrGrrrrH�s

z+ASTTemplateIntroductionParameter._stringifyrr]cCs0|jr|t�dd�7}|j�|||dd|�dSr�)r�rrdrr;rprrrr;�sz3ASTTemplateIntroductionParameter.describe_signature)NN)rr	r
rrCrrkrIrMr|r�rarrr�r*rHrr;rrrrr�rs	�r�c@sZeZdZeeedd�dd�Zeed�dd�Z	e
ed�d	d
�Zeedde
dd
�dd�ZdS)�ASTTemplateIntroductionN)rKr�rqcCs||_||_dSr�)rKr�)rrKr�rrrr�sz ASTTemplateIntroduction.__init__rcCs�g}|�d�|jD]}|�|�|��q|�d�|�d�|�|j�|��|�d�|jD]}|�|�|��q`|�d�|�d�d�|�S)Nr+rXr&r�)r6r�rrKr�rZr�rrrr�s







zASTTemplateIntroduction.get_idrEcsRg}|��|j��|�d�|�d��fdd�|jD���|�d�d�|�S)Nrrc3s|]}�|�VqdSr�r)rSr/rrrrU�rVz5ASTTemplateIntroduction._stringify.<locals>.<genexpr>z} r�)r6rKrZr�rGrrrrH�s
 
z"ASTTemplateIntroduction._stringifyrr�r�c	Cs�t��}||7}d|_|j�|d||�|t�dd�7}d}|jD]8}|sf|t�dd�7}|t��7}d}|�||||�qB|t�dd�7}dS)NZtemplateIntroductionr&rTr�Fr	)rr�r�rKr;rdr�rf)	rr�r!r"r�r�r rhr/rrrr��s
z8ASTTemplateIntroduction.describe_signature_as_introducer)rr	r
rIrr�rrarrr*rHrrCr�rrrrr��s�	�r�c@s`eZdZeeeefdd�dd�Zee	d�dd�Z
ee	d�d	d
�Ze
e	ddedd
�dd�ZdS)�ASTTemplateDeclarationPrefixN)rKrqcCs
||_dSr�)rK)rrKrrrr�sz%ASTTemplateDeclarationPrefix.__init__rcCs*g}|jD]}|�|�|��q
d�|�Sr�)rKr6rrZ)rrrDr�rrrr�s
z#ASTTemplateDeclarationPrefix.get_idrEcCs(g}|jD]}|�||��q
d�|�Sr�)rKr6rZ)rrFrDr�rrrrH�s
z'ASTTemplateDeclarationPrefix._stringifyrr�)r r!r"r�r�rqcCs*t|�|jD]}|�|d|||�qdS�Nr-)r6rKr�)rr r!r"r�r�r�rrrr;�s
z/ASTTemplateDeclarationPrefix.describe_signature)rr	r
rrr�r�rrarrr*rHrrCr;rrrrr��s���r�c@sDeZdZedd�dd�Zeed�dd�Zej	edd	dd
�dd�Z
dS)
�ASTRequiresClauseNracCs
||_dSr�r�r�rrrr�szASTRequiresClause.__init__rEcCsd||j�S)Nz	requires r�rurrrrH�szASTRequiresClause._stringifyrr�r]cCs2|t�dd�7}|t��7}|j�||||�dS)Nrpr�rprrrr;�sz$ASTRequiresClause.describe_signature)rr	r
rlrr*rrHrr�r;rrrrr��s
�r�c@s�eZdZdeeeeeeeedd�	dd�Zdd�dd�Z	e
ed�d	d
��Ze
e
ed�dd��Zdeeed�dd�Zed�dd�Zeed�dd�Zeededd�dd�ZdS)r�FN)	r?�
directiveTyper�rb�requiresClauser��trailingRequiresClause�	semicolonrqc		Cs@||_||_||_||_||_||_||_||_d|_d|_	dSr�)
r?r�r�rbr�r�r�r�r��enumeratorScopedSymbol)	rr?r�r�rbr�r�r�r�rrrr
szASTDeclaration.__init__rc	Cs`|jr|j��nd}|jr$|j��nd}|jr8|j��nd}t|j|j|j|||j��||j	�Sr�)
rb�cloner�r�r�r?r�r�r�r�)rZtemplatePrefixCloneZrequiresClasueCloneZtrailingRequiresClasueClonerrrr�s��
�zASTDeclaration.clonecCs|jjSr�)r�rMrrrrrM&szASTDeclaration.namecCs|jdkrdS|jjS)Nr�)r?r�rQrrrrrQ*s
zASTDeclaration.function_paramsT)rrArqcCs2|dkrF|jrt��|jdkr2|jr2|jj�|�S|j�||j|j�S|jdkrf|jrf|jj�||�S|rvt|g}ng}|jr�|�|j�|��|j	s�|j
�r|dkr�t��|�d�|j	r�|j
r�|�d�|j	r�|�|j	j�|��|j
�r|�|j
j�|��|�d�|�|j�||j|j��d�|�S)Nr�
enumeratorr�ZIQr�rXr�)
rbr)r?r�r�rr��
_id_prefixr6r�r�r�rZ)rrrArDrrrr0s4


zASTDeclaration.get_idcCs|�td�Sr)r�_max_idrrrr�
get_newest_idNszASTDeclaration.get_newest_idrEcCs�g}|jr*|jdkr*|�|j�|�d�|jr@|�||j��|jr`|�||j��|�d�|�||j��|jr�|�d�|�||j��|jr�|�d�d�|�S)Nrmr^�;r�)r�r6rbr�r�r�r�rZrGrrrrHQs 



zASTDeclaration._stringifyr)r r!r"�optionsrqc
Cs�t|�d|d<t��}d|_|jj|d<|jrP|jj||||j|�d�d�|j	r�t��}d|_|�
|�|j	�|d||j�||7}|jr�|jd	kr�|t�|j|j�7}|t�
�7}|jd
kr�|j��}|t�||�7}|t�
�7}�nL|jdk�r|t�dd�7}|t�
�7}�n |jdk�r*�n|jd
k�r:�n|jdk�rh|t�|j|j�7}|t�
�7}n�|jdk�r�|t�dd�7}|t�
�7}n�|jdk�r|t�dd�7}|t�
�7}|jdk�r�|t�dd�7}|t�
�7}n*|jdk�r:|t�dd�7}|t�
�7}nn*|jdk�r:|t�dd�7}|t�
�7}n|j�||||j�|}|j�r�t��}	d|	_|�
|	�|	}|j�|	d||j�|j�r�|t�dd�7}dS)NTZis_multilineZ
declaratorZ
add_permalink�tparam-line-spec)r�r�r�r&rmr�rKr�r�rIr�rX�
enum-class�enum-structrwrr�r)r6rr�r�r��isRedeclarationrbr;�getr�r6r�rerfr?r�r�r�r�r�rd)
rr r!r"rZmainDeclNodeZreqNoder#ZlastDeclNodeZtrailingReqNoderrrr;csz�




�z!ASTDeclaration.describe_signature)F)T)rr	r
rr�r�rrCrr�rkrIrMrr9rQrarrr*rHrrr;rrrrr�	s$��
�r�c@s.eZdZeedd�dd�Zeed�dd�ZdS)�ASTNamespaceN�r6rbrqcCs||_||_dSr�)r6rb)rr6rbrrrr�szASTNamespace.__init__rEcCs4g}|jr|�||j��|�||j��d�|�Sr�)rbr6r6rZrGrrrrH�s
zASTNamespace._stringify)	rr	r
rIr�rr*rrHrrrrr�s�rc@s0eZdZeddeeefeedd�dd�Z	dS)�SymbolLookupResultr�N)�symbols�parentSymbolr?rgr$rqcCs"||_||_||_||_||_dSr�)rrr?rgr$)rrrr?rgr$rrrr�s
zSymbolLookupResult.__init__)
rr	r
rrrr=rr>rrrrrr
�s�r
c@s2eZdZeeeeeefe	fdd�dd�Z
dS)�	LookupKeyNr~cCs
||_dSr�r�r�rrrr�szLookupKey.__init__)rr	r
rr	r<rr�r�rrrrrrr�s���rcs�eZdZdZdZdZdZdd�Zdd�Ze	e
dd	�d
d��Zdd�d
d�Ze
e
dd��fdd�Zdeeefeeefe
ee
edd�dd�Zee
edd�dd�Zdd�dd�Zdd�dd�Ze
dd�dd�Zee
d�dd �Zeed!d�d"d#��Zd$d�d%d&�Z e!d�d'd(�Z"eeefe
e#e$e$e$e$dd)�d*d+�Z%eeefe
e#e$e$e$e$e$edd,�	d-d.�Z&e!e'e
e(deeefe
e#gdfe$e
e$e$e$e$e$e)d/�d0d1�Z*e!e'e
ee
edd2�d3d4�Z+de'e
d5dd6�d7d8�Z,dOe!e-dd9�d:d;�Z.ee
edd�d<d=�Z/eeefe$e$e$dd>�d?d@�Z0d$ddA�dBdC�Z1e!e'e
e
e$e$e$e$e2e'de
fdD�dEdF�Z3ee
e$e$e$ddG�dHdI�Z4ee
dJ�dKdL�Z5ee
dJ�dMdN�Z6�Z7S)Pr�rz  FcCsdSr�rrrrr�__copy__�szSymbol.__copy__cCs |jrntddddddd�SdSr�)rBr�)r�memorrr�__deepcopy__�szSymbol.__deepcopy__N)r'rqcGs ttjtjdd�t|�dS)Nr���end)r�r��debug_indent_string�debug_indentrPrrr�debug_print�szSymbol.debug_printrcCs|jsn|jrdSr�)rBr�rrrr�_assert_invariants�szSymbol._assert_invariants)r�rzrqcs|dkr
nt��||�SdS)N�children)�super�__setattr__)rr�rz��	__class__rrr�szSymbol.__setattr__)rBr?rgr$r��docname�linerqcCs~||_d|_d|_||_||_||_||_||_||_d|_	|�
�g|_g|_|jrd|jj�
|�|jrr||j_|��dSrA)rB�siblingAbove�siblingBelowr?rgr$r�rr r	r�	_childrenZ
_anonChildrenr6r��!_add_template_and_function_params)rrBr?rgr$r�rr rrrr�s$zSymbol.__init__)r�rr rqcCs6|��||_||j_||_||_|��|��dSr�)rr�r�rr r$)rr�rr rrr�_fill_emptyszSymbol._fill_emptyc	Cstjrtjd7_t�d�|jr�|jjD]d}|��s:q,|jrVtddddd|d�}nd}t	|��d�}t
|gdgdd�}|�|g||j|j
�q,|jdur�|jjdur�|jjD]L}|jdur�q�|jj}|dur�q�tddddd|d�}|�|g||j|j
�q�tj�rtjd8_dS)Nrz"_add_template_and_function_params:�
templateParamFr��
functionParam)r��debug_lookuprrrgr�r�r�r�r<rI�_add_symbolsrr rQr<rM)r�tpr�rj�nn�fprrrr$ s0

z(Symbol._add_template_and_function_paramscCs&|jdurdS|jj�|�d|_dSr�)rBr#�removerrrrr-Ds
z
Symbol.remove�rrqcCs�g}|jD]n}|�|�|jrn|j|krnd|_d|_d|_|jdurN|j|j_|jdurb|j|j_d|_d|_|�|�q
||_dSr�)r#�	clear_docr�rr r!r"r6)rrZnewChildren�sChildrrrr/Ks





zSymbol.clear_docccs$|V|jD]}|��EdHqdSr�)r#�get_all_symbols)rr0rrrr1\s
zSymbol.get_all_symbols)r�NNccs.|jD]"}|V|j��sq|jEdHqdSr�)r#r?r�children_recurse_anon)rr�rrrr2as


zSymbol.children_recurse_anonrcCs�g}|}|jr |�|�|j}q|��g}|D]H}t|j|j�}|jdurf|�||j|j��f�q0|�||jdf�q0t	|�Sr�)
rBr6�reverser<r?r$r�rgrr)rrr�r�rjrrrr4js

zSymbol.get_lookup_keycCsfg}|}|jr |�|�|j}q|��g}g}|D]"}|�t|j|j��|�d�q4t||dd�Sr�)rBr6r3r<r?r$rI)rrr�rJrKrrrr�~s
zSymbol.get_full_nested_name)r?rgr$�templateShorthand�	matchSelf�
recurseInAnon�correctPrimaryTemplateArgsrqc	
CsNtjrt�d�|j|||||||dd�}z
t|�WStyHYdS0dS)Nz_find_first_named_symbol ->F)�searchInSiblings)r�r(r�_find_named_symbolsr��
StopIteration)	rr?rgr$r4r5r6r7rDrrr�_find_first_named_symbol�s

�
zSymbol._find_first_named_symbol)	r?rgr$r4r5r6r7r8rqc	
#s�tjr�tjd7_t�d�tjd7_t�d�t��tjd�dd�t�d��t�d��t�d��t�d	��t�d
��t�d��t�d|�t�d
|�td���fdd�}	|r�dur�dur�|	�s�d�dtd�����fdd�}
ttddfd����fdd�}|�D]�}tj�rNt�d�t|�tjd�dd�|
|��r tj�r�tjd7_t�d�tjd8_|Vtj�r tjd7_�q tj�r�tjd8_dS)Nrz_find_named_symbols:�self:r�rzidentOrOp:                  ztemplateParams:             ztemplateArgs:               ztemplateShorthand:          zmatchSelf:                  zrecurseInAnon:              zcorrectPrimaryTemplateAargs:zsearchInSiblings:           rcs�t�j�t�j�krdSt�j�dkr*dStt�j��D]f}�j|}�j|}t|j�}t|�}|�d�}|j|kr|dS|r�|dd�n|}||kr8dSq8dS)NTrr����F)rr�r'r\rrM�endswithr|)r�r/r<Z	paramNameZargTxtZisArgPackExpansionZargName)r$rgrr�isSpecialization�s 




z4Symbol._find_named_symbols.<locals>.isSpecializationr�)r�rqcs�|j�krdS|jdu�dukr4�dur,dS�s4dS�rNt|j�t��krNdS|jdu�dukrddS|jr�t|j�t��kr�dSdS)NFT)r?rgrr$�r�)r?r$rgr4rr�matches�s 
z+Symbol._find_named_symbols.<locals>.matchesc3s��}tjr,t�d�t|�tjd�dd��r6|V�rH|jEdHn|jEdH|jdur`q�|j}tjr,t�d�t|�tjd�dd�q,dS)Nzsearching in self:rr�rzsearching in sibling:)	r�r(rr��	to_stringrr2r#r!r@)r5r6rrr�
candidates�s


z.Symbol._find_named_symbols.<locals>.candidates�
candidate:rArr�)r�r(rrr�rBrCr)
rr?rgr$r4r5r6r7r8r?rArCr�r)r?r5r6rr$rgr4rr9�sF

 



zSymbol._find_named_symbols)r6�
templateDecls�onMissingQualifiedSymbol�strictTemplateParamArgLists�ancestorLookupTyper4r5r6r7r8rqc
Cs
tjr�tjd7_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�n|j}|}|jr�|j	r�|j	}q�|du�rn|d}
|
�
��sn|j	�rn|j|
j|||
d��rdt
|�dk�rn|dk�rn|�rn|j	�rn|j	j|
jk�rnn�qn|j	}�q
tj�r�t�d�t|�tjd�dd�d}|dd�D]�}|j}|j}|�r�|�r�||}|d7}nd}n*|�r|t
|�k�r||}|d7}nd}|j|||||||	d�}|du�r\|||||�}|du�r\tj�rVtjd8_dSd}|}�q�tj�r�t�d�t|�tjd�dd�|d}|j}|j}|t
|�k�r�||}nd}|j||||||d|
d�}tj�r�t|�}tjd8_t|||||�S)Nrz_symbol_lookup:r<r�rznestedName:        ztemplateDecls:     r�css|]}t|�VqdSr�r#�rSr�rrrrUrVz(Symbol._symbol_lookup.<locals>.<genexpr>zstrictTemplateParamArgLists:zancestorLookupType:ztemplateShorthand: zmatchSelf:         zrecurseInAnon:     zcorrectPrimaryTemplateArgs: zsearchInSiblings:  r�r5r6r8rIzstarting point:r`�r4r5r6r7r�Fzhandle last name from:)r4r5r6r7r8)r�r(rrr�rBrZrJrLrBrB�find_identifierr?rr$r;r9�listr
)rr6rErFrGrHr4r5r6r7r8rJrZ	firstNameZ
iTemplateDeclrMr?r$rgr�rrrr�_symbol_lookups�



���



�
�


��zSymbol._symbol_lookup)r6rEr�rr rqcs�tjrrtjd7_t�d�tjd7_t�dd�dd�|D���t�d|�t�d��t�d	�����d
tttft	t
d
d�dd
�}|j|||dddddddd�
�t�j
�}t|�dk�rttj�r<t�d�tjd7_t�d�j�t�d�j�t�d�j�t�d��t�d�����tjd8_t�j�j�j�j���d�}tj�rptjd8_|Stj�r�t�d�tjd7_t�dt|��tjd8_��s�tj�r�t�d�tjd8_|dSg}	g}
g}|D]<}|jdu�r|	�|�n|j�r |�|�n
|
�|��q�tj�rft�dt|	��t�dt|
��t�dt|��d
d �����fd!d"�}
t|
�dk�r�d}n�|
�}d
d
dd#��fd$d%�}�jd&k�r�||
d|����}tj�r�t�d'|�|
D]P}|jjd&k�r|||�|j��}tj�r"t�d(|�||k�r�|||��q�t|	�dk�r�tj�r�t�d)�|du�rpt�d*�n
t�d+�tjd8_|du�r�|S|
�SnRtj�r�t�d,|du�tjd8_|du�r�|��|	d}|�����|SdS)-Nrz
_add_symbols:ztdecls:r�css|]}t|�VqdSr�r#rIrrrrU�rVz&Symbol._add_symbols.<locals>.<genexpr>z
nn:       z
decl:     zlocation: {}:{}r��rr?rgr$rqc	Ssttjr^tjd7_t�d�tjd7_t�d|�t�d|�t�d|�tjd8_t||||dddd�S)Nrz'_add_symbols, onMissingQualifiedSymbol:�templateParams:�identOrOp:     ztemplateARgs:  r��rBr?rgr$r�rr )r�r(rr�rr?rgr$rrrrF�s
�z5Symbol._add_symbols.<locals>.onMissingQualifiedSymbolTF�rGrHr4r5r6r7r8rz _add_symbols, result, no symbol:rPrQztemplateArgs:  zdeclaration:   zlocation:      {}:{}rRr�z_add_symbols, result, symbols:znumber symbols:zno declarationz
#noDecl:  z
#withDecl:z
#dupDecl: rc	sBtjrt�d�t�j�j�j�j���d�}tjr>t�d�|S)Nz begin: creating candidate symbolrRz end:   creating candidate symbol)r�r(rrr?rgr$r-�r�rr �lookupResultrr�makeCandSymbol�s
�
z+Symbol._add_symbols.<locals>.makeCandSymbol)r��
candSymbolrqcsNtjr:tjd7_t�d�tjd8_tjd8_d|_t|���dS)NrZ
redeclarationr�T)r�r(rrr	r�)r�rX�r�rr�handleDuplicateDeclaration�s
z7Symbol._add_symbols.<locals>.handleDuplicateDeclarationr�zcandId:zoldId: zno match, no emptyz$result is already created candSymbolzresult is makeCandSymbol()zAno match, but fill an empty declaration, candSybmol is not None?:)r�r(rrrZr�rrr=rr>rNrMrrrgr?r$rr�r6r	r?rr-r%)rr6rEr�rr rFrr�ZnoDeclZwithDeclZdupDeclr�rWrXrZ�candIdZoldIdrrUrr)�s�

��


�

	








zSymbol._add_symbolsr)rg�docnamesr"rqcCs�tjrtjd7_t�d�dd�}tjr:tjd7_|jD�]�}tjrnt�d|�tj��tjd7_|jr�|||�tjr@t�d�tjd8_q@|j|j|j	|j
dddddd�}t|�}tjr�t�d	t|��d
d�|D�}tj�rt�dt|��t|�d
k�r0|||�tjr@tjd8_q@d}	|j
du�r\tj�rRt�d�|d
}	n�|j
��}
tj�rzt�d|
�|D]^}|j
du�r�tj�r�t�d�|}	�q~|j
��}tj�r�t�d|�||
k�r~|}	�qސq~tj�r�tjd8_|	du�r
|||�q@|j
�r�|j|v�r�|	j
�s<|	�|j
|j|j�n�|	j|jk�r�t|	j
�}
td�}||	j|	j|	j
j|
f}tj||j|jfd�n8d}|d|	�d�7}|d|�d�7}tj||jd�|	�|||�q@tj�r�tjd8_dS)Nrzmerge_with:cSs|j�|�||_|��dSr�)r#r6rBr)r�
otherChildrrr�unconditionalAddCsz+Symbol.merge_with.<locals>.unconditionalAddzotherChild:
r	F)r?rgr$r4r5r6r7r8zraw candidate symbols:cSsg|]}|js|�qSr)r	�rSr�rrrr`rVz%Symbol.merge_with.<locals>.<listcomp>z non-duplicate candidate symbols:rzno declaration in other childz
queryId:  zempty candidaterD�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(rrr#rBr	r9r?rgr$rMrr�rrr%r rrr��logger�warning�
merge_with)rrgr\r"r^r]ZcandiateIterrCrZourChild�queryIdr�r[rM�msgrrrre<s�


�









�

�zSymbol.merge_withrcCsZtjrtjd7_t�d�|r*|j}ng}|j||dddd�}tjrVtjd8_|S)Nrz	add_name:)r�rr )r�r(rrrKr))rr6rbrErDrrr�add_name�s
�zSymbol.add_namecCsbtjrtjd7_t�d�|j}|jr4|jj}ng}|�|||||�}tjr^tjd8_|S)Nrzadd_declaration:)r�r(rrrMrbrKr))rr�rr r6rErDrrr�add_declaration�s

zSymbol.add_declaration)r?r5r6r8rqcCs(tjr�tjd7_t�d�tjd7_t�d|�t�d|�t�d|�t�d|�t|�tjd�dd�tjd	8_|}|du�r$tjr�tjd	7_t�d
�t|�tjd�dd�tjd	8_|r�|j|kr�|S|r�|jn|j}|D]}|j|kr�|Sq�|�s�q$|j	}q�dS)Nrzfind_identifier:zidentOrOp:       zmatchSelf:       zrecurseInAnon:   zsearchInSiblings:r�rr�ztrying:)
r�r(rrr�rBr?r2r#r!)rr?r5r6r8�currentrr�rrrrL�s6




zSymbol.find_identifier)r�rqc

Cs:tjr,tjd7_t�d�tjd7_|}|jD]�\}}}|dur�d}|jD]&}|jdurbqR|j��|krR|}qzqR|}n$|j}|j	}	|j
|||	ddddd�}tjr�t�d|�t�d|�t�d|�|dur�t|�tjd�dd	�n
t�d
�|dur6tj�rtjd8_dSq6tj�r6tjd8_|S)Nrzdirect_lookup:FrKzname:          rPzid:            r�rz	not foundr�)
r�r(rrrr#r�rr?r$r;r�rB)
rr�r�rMrgrrDZcandr?r$rrr�
direct_lookup�sL


�
zSymbol.direct_lookup)r6rEr�r4r5r6r8rqcs�tjr�tjd7_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��dttt	ft
tdd��fdd�}z"|j|||d||||d|d�
}	Wn��yYdS0|	du�r2tj�r.tjd8_dSt
|	j�}
t|
�dk�rhtj�r`tjd8_|
dfS|	jjdu�r�|	jjjdk�r�dS|	jj|	jdd|||dd�}tj�r�tjd8_|du�r�|gdfSdSdS)Nrz
find_name:r<r�rznestedName:       ztemplateDecls:    ztyp:              ztemplateShorthand:zmatchSelf:        zrecurseInAnon:    zsearchInSiblings: c@seZdZdS)z8Symbol.find_name.<locals>.QualifiedSymbolIsTemplateParamNr
rrrr�QualifiedSymbolIsTemplateParamsrlr�rOcs |jdur|jjdkr���dS)Nr&)r�r?rS�rlrrrFs
z2Symbol.find_name.<locals>.onMissingQualifiedSymbolFrT)N�templateParamInQualifiedr��NNrr&rK)r�r(rrr�rBr7rrr=rr>rNrMrrrr�r?r;r?)rr6rEr�r4r5r6r8rFrVrDr�rrmr�	find_namesl


�
�
	

�

zSymbol.find_name)r�r�r4r5r6rqcCstjrtjd7_t�d�|j}|jr4|jj}ng}dttt	ft
tdd�dd�}|j|||d||||ddd�
}	tjr�tjd8_|	dur�dSt
|	j�}
t|
�d	kr�dSt|	j|	j|	j|	j|d
dd�}|��}|
D]2}
|
jdur�q�|
j��}||kr�|��|
Sq�|��dS)
Nrzfind_declaration:r�rOcSsdSr�rrSrrrrF`sz9Symbol.find_declaration.<locals>.onMissingQualifiedSymbolFrTrZfakeDocnameForQuery�*rR)r�r(rrrMrbrKrrr=rr>rNrMrrrr?rgr$rr�r-)rr�r�r4r5r6r6rErFrVrZquerySymbolrfr�r[rrr�find_declarationTs^


��	
�


zSymbol.find_declaration)�indentrqcCs�tj|g}|js|�d�n�|jrN|�t|j��|�d�|�tj|�|jrf|�t|j��n|�t|j��|jr�|�t|j��|jr�|�d�|j	r�|�d�|�t|j��|j
r�|�d�|�|j
�|�d�|�d�d�|�S)NrQ�
z: z!!duplicate!! z	(r�r�)r�rrBr6rgrr?r�r$r	rrZ)rrsrDrrrrB�s.





zSymbol.to_stringcCs6|�|�g}|jD]}|�|�|d��qd�|�S)Nrr�)rBr#r6rrZ)rrsrDr�rrrr�s
zSymbol.dump)N)8rr	r
rrr(�debug_show_treerr�staticmethodrrrrrrrr=r�r�r�rarr%r$r-r/rr1rkrr2r4rIr�r>rCr;r9rrr
rNr)rer�rhrirLrkr	rprrrBr�
__classcell__rrrrr��s�
�$
�
�j��6�c���
�)�M�6r�c@s�eZdZeed�dd��Zedd��Zedd��Zed�dd	�Ze	d�d
d�Z
ed�dd
�Zed�dd�Z
eeeeeeeefefd�dd�Zed�dd�Zeeefd�dd�Zed�dd�Zeeefd�dd�Zed�dd�Zed�dd�Zed�dd �Zeed!�d"d#�Zed$d%�d&d'�Zeed!�d(d)�Z eed!�d*d+�Z!ed�d,d-�Z"dveee#gefeed/�d0d1�Z$e%d�d2d3�Z&e'd�d4d5�Z(dwee)d7�d8d9�Z*e+d�d:d;�Z,e-d�d<d=�Z.ee/d>�d?d@�Z0eee1dA�dBdC�Z2dxeee3dA�dDdE�Z4eeefeeee5e6fdF�dGdH�Z7dyeeefeee8dF�dIdJ�Z9dzeee:dK�dLdM�Z;d{eeefee<dN�dOdP�Z=eeefeee>e?fdN�dQdR�Z@eAd�dSdT�ZBeCd�dUdV�ZDeEd�dWdX�ZFeGd�dYdZ�ZHeId�d[d\�ZJeKd�d]d^�ZLeMd�d_d`�ZNeOd�dadb�ZPeQd�dcdd�ZReSeTd�dedf�ZUeeSeVdg�dhdi�ZWd|e)eVeeeVdj�dkdl�ZXeeeYdm�dndo�ZZe[d�dpdq�Z\eee[eYfefd�drds�Z]eee<fd�dtdu�Z^d$S)}�DefinitionParserrcCsdS)N�C++rrrrr�language�szDefinitionParser.languagecCs|jjSr�)�config�cpp_id_attributesrrrr�
id_attributes�szDefinitionParser.id_attributescCs|jjSr�)r{�cpp_paren_attributesrrrr�paren_attributes�sz!DefinitionParser.paren_attributescCs�|jdkrdS|j}|jd7_d}|jr8|�d�n4|jdkrX|sX|jd7_q|n|jdkrhd}nd}|jd7_q&|j||j�S)N�"rFz$Unexpected end during inside string.�\T)�current_char�pos�eof�fail�
definition)r�startPos�escaperrr�
_parse_string�s

zDefinitionParser._parse_stringc
s�ttd��fdd�}�����d�r,t�S��d�r>td�S��d�rPtd�S�j}��t�r���t�}t	�j
|�j��}|r�|S||�Sttt
tfD]D}��|�r���t�}t	�j
|�j��}|r�|S||�Sq����}|du�r�|t|��S��t��r��j�d	�}�j�d
�}	zt||	�}
WnPt�yd}z��d|�WYd}~n&d}~0t�y���d�Yn0||
�SdS)
N)r�rqcs"��t�s|St�j�}t||�Sr�)�match�udl_identifier_rer�matched_textr�r�rrr�_udl�s

z-DefinitionParser._parse_literal.<locals>._udlrir|Tr[Frr�z8Can not handle character literal. Internal error was: %szJCan not handle character literal resulting in multiple decoded characters.)rr�skip_ws�	skip_wordrsrxr�r�r/r0r}r�r-r1r3r5r4r�r�r.Z
last_match�groupr��UnicodeDecodeErrorr�r+)rr�r�Z	hasSuffixZfloatLitZregexZintLit�stringr#rZcharLitr�rrr�_parse_literal�sL	




�


"zDefinitionParser._parse_literalc
Cs�|jdkrdS|jd7_|��|�d�rp|�t�sB|�d�|j}|��}|�	d�sd|�d�t
d||�S|j}zR|��|��}|��|�t�s�|�d�|j}|��|�d�s�|�d�Wn�t�yh}z�||_z*|��}|��|�	d��s|�d	�Wn@t�yJ}z&|�
|d
f|dfgd�|�WYd}~n
d}~00t|�WYd}~Sd}~00|�	d��r�t
||d�S|�t��s�|�d
�||jk�r�|�d||jf�|��}|��|�	d��s�|�d�t
|||�S)Nr�rr�z6Expected fold operator after '...' in fold expression.r�z'Expected ')' in end of fold expression.z@Expected fold operator after left expression in fold expression.z6Expected '...' after fold operator in fold expression.z0Expected ')' in end of parenthesized expression.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�r�r��skip_string_and_wsr��_fold_operator_rer�r��_parse_cast_expression�skip_stringr�r(�_parse_expression�_make_multi_errorr�)rr�r�r�r�ZeFoldrD�eExprrrr�_parse_fold_or_paren_expressionsj








���
�
z0DefinitionParser._parse_fold_or_paren_expressioncCsd|��|��}|dur|S|��|�d�r4t�S|��}|durH|S|��}|dur`t|�SdSr�)r�r�r�r�r��_parse_nested_namer�)rrDr+rrr�_parse_primary_expressionCs
z*DefinitionParser._parse_primary_expression)rM�open�closerqcCs�|��|�|�sdS|�|�r(gdfSg}d}|��|��}|��|�d�rb|�t|��n
|�|�|��|�|�r�q�|�d�s�|�d||f�|j|kr0|dkr0|jd7_d}q�q0||fS)	NroFr�r�z"Error in %s, expected ',' or '%s'.r	rT)	r�r�r��_parse_initializer_clauser6r�r�r�r�)rrMr�r�r�rr�rrr�_parse_initializer_listZs.





z(DefinitionParser._parse_initializer_listcCs&|�ddd�\}}|durdSt|�S)Nzparenthesized expression-listr�r�)r�r�rrrr�_parse_paren_expression_list|s�z-DefinitionParser._parse_paren_expression_listcCs |��}|dur|S|jdd�S�NF��
inTemplate)�_parse_braced_init_list�_parse_assignment_expression)rZbracedInitListrrrr��sz*DefinitionParser._parse_initializer_clausecCs(|�ddd�\}}|durdSt||�S)Nzbraced-init-listrr	)r�r�rrrrr��sz(DefinitionParser._parse_braced_init_listcCs|��}|dur|S|��Sr�)r�r�)rZparenrrr�*_parse_expression_list_or_braced_init_list�sz;DefinitionParser._parse_expression_list_or_braced_init_listc
srd}d}���d}tD]}��|�r|}q0q|dur�d}��d�sT��d|���d�}�����d�s~��d|���d�s���d|�td	��fd
d�}��dg|�}�����d�sֈ�d
|�t	|||�}�n$��d��r d}��d��s��d��j
}z0��d�}t|dd�}��d��s@��d�Wn�t�y}	z�|�_
zFtd	��fdd�}��dg|�}t|dd�}��d��s���d�Wnft�y}
zL|�_
d}|d7}g}|�
|	df�|�
|
df���||�|
�WYd}
~
n
d}
~
00WYd}	~	n
d}	~	00n�j
}z���}d}Wn�t�y}
z�|�_
z>��dd�}d}����jdk�r��jdk�r���d�Wnft�y�}zL|�_
d}|d7}g}|�
|
d f�|�
|df���||�|�WYd}~n
d}~00WYd}
~
n
d}
~
00g}���|d!v�r<��d"��rd���}�����d#��sR��d$�|�
t|���q��d%��rˆ�d&��r��j
d'8_
n6��d(��r��j
d)8_
n���}|�
t|���q��d*��r��d&��r�j
d)8_
n���}|�
t|���q��d+��r |�
t���q��d,��r<|�
t���q���}|du�rh|�
t|���q�qh�qt||�S)-Nrr�zExpected '<' after '%s'.Fr�z Expected '>' after type in '%s'.r�zExpected '(' in '%s'.rcs���Sr��r�rrrr�parser�sz:DefinitionParser._parse_postfix_expression.<locals>.parserr�zExpected ')' to end '%s'.rzExpected '(' after 'typeid'.T)r�z%Expected ')' to end 'typeid' of type.cs���Sr�r�rrrrr��sz+Expected ')' to end 'typeid' of expression.zError in 'typeid(...)'.z Expected type or expression.�If type�
If expressionr��operatorCastZtypeOperatorCastrz3Expecting '(' or '{' after type in cast expression.zError in postfix expression,z% expected primary expression or type.zIf primary expression)r�rrr�r�z*Expected ']' in end of postfix expression.r�r�r�z..rr�r�r�)r�r��skip_word_and_wsr�r��_parse_typer�rl�_parse_expression_fallbackr�r�r�r(r6r�r�r�r�r�r�r�r�r�r�r�r�r�)rZ
prefixTyper#rr�r�r�r�r��eTyper��header�errorsZeOuterZeInnerr�rMr�rrr�_parse_postfix_expression�s�







<:


z*DefinitionParser._parse_postfix_expressionc
Cs�|��tD]@}|ddvr(|�|�}n
|�|�}|r|��}t||�Sq|�d��r|�d�r�|�d�sx|�d�|�	t
�s�|�d�t|j�}|��|�d�s�|�d	�t
|�S|�d�r�|jd
d�}|��|�d�s�|�d�t|�S|��}t|�S|�d
��rX|�d��s&|�d�|jd
d�}|��|�d��sP|�d�t|�S|�d��r�|�d��sz|�d�|��}|��|�d��s�|�d�t|�S|j}|�d�}|��|�d��s�||_nbd}|�d��r�|�d�|�r|jdd�}	|jd
dd�}
n
|�d�|��}t||t|	|
�|�S|j}|�d�}|��|�d��sb||_n:|�d�}|�r�|�d��s�|�d�|��}t|||�S|��S)Nrr�rtr�r�z Expecting '(' after 'sizeof...'.z%Expecting identifier for 'sizeof...'.r�z!Expecting ')' to end 'sizeof...'.F��namedzExpecting ')' to end 'sizeof'.r=zExpecting '(' after 'alignof'.zExpecting ')' to end 'alignof'.rfzExpecting '(' after 'noexcept'.� Expecting ')' to end 'noexcept'.rQreTzYSorry, neither new-placement nor parenthesised type-id in new-epression is supported yet.�rn�r��	paramModezASorry, parenthesised type-id in new expression not yet supported.rTr�r�z(Expected ']' in array delete-expression.)r��_expression_unary_opsr�r�r�r�r�r�r�r�r2rr�r�r�r��_parse_unary_expressionr�r�r�r�r��_parse_decl_specs�_parse_declaratorr�r�r�r�r�)
rr�rDr�r�r�r�rLr�r�r�r�r�rrrr�4s�






















z(DefinitionParser._parse_unary_expressionc
Cs�|j}|��|�d�r�z2|�d�}|�d�s8|�d�|��}t||�WSty�}z|||_z|��WWYd}~Sty�}z:g}|�	|df�|�	|df�|�
|d�|�WYd}~n
d}~00WYd}~q�d}~00n|��SdS)Nr�Fr�z Expected ')' in cast expression.zIf type cast expressionzIf unary expressionzError in cast expression.)r�r�r�r�r�r�r�r(r�r6r�)rr�r�r�ZexCastZexUnary�errsrrrr��s.



��0z'DefinitionParser._parse_cast_expression�r�rqcs&ttttd��fdd���|d|d�S)N)r�opIdr�rqc
	s2�dtt�kr&ttd��fdd�}nttd����fdd�}g}g}|�||d�����|rp�jdkrp�q(�j}d}t�D]�}|d	d
vr���|�s�q�n��	|�s�q�|dkr҈jdkr҈jd8_�qz.||d�}	|�|	�|�|�d}W�qWq�t
�y|�_Yq�0q�|sV�q(qVt||�S)
Nrr�cs���Sr�)r�r�rrrr��szYDefinitionParser._parse_logical_or_expression.<locals>._parse_bin_op_expr.<locals>.parsercs���d|d�S)Nrr�rr�)�_parse_bin_op_exprr�rrrr��sr�r�Frrr�T)r�_expression_bin_opsrCrlr6r�r�r�r�r�r(r�)
rr�r�r�r�r�r��oneMorer�r��r�)r�rrr��s>




zIDefinitionParser._parse_logical_or_expression.<locals>._parse_bin_op_exprrr�)rxrarCrl)rr�rr�r�_parse_logical_or_expression�s�(z-DefinitionParser._parse_logical_or_expressionN)�
orExprHeadrqcCsdSr�r)rr�rrr�"_parse_conditional_expression_tail�sz3DefinitionParser._parse_conditional_expression_tailcCs�g}g}|j|d�}|�|�d}|��tD]J}|ddvrL|�|�sXq.n|�|�sXq.|��}|�|�|�|�d}q.|sq�qt|�dkr�|St||�SdS)Nr�FrZanoxT)	r�r6r��_expression_assignment_opsr�r�r�rr)rr�r�r��orExprr�r�r�rrrr��s*





z-DefinitionParser._parse_assignment_expressioncCs|j|d�}|S�Nr�)r�)rr�r�rrr�_parse_constant_expression	sz+DefinitionParser._parse_constant_expressioncCsV|jdd�g}|��|�d�s"q6|�|jdd��qt|�dkrJ|dSt|�SdS)NFr�r�rr)r�r�r�r6rrrrrrr�s
z"DefinitionParser._parse_expressionT)rr��allowrqc

Cs:|j}z|�WStyR}z,|r(|js*�|�d|�||_WYd}~n
d}~00|��|j}|�t�rt|j}n�ddddd�}g}	|js�t	|	�dkr�|j
|vr�q�|j
|��vr�|	�||j
�n"t	|	�dkr�|j
|	dkr�|	�
�|jd	7_q�t	|�dk�r|j�r|�d
|�|j||j���}t|���S)NzBParsing of expression failed. Using fallback parser. Error was:
%sr�r	r�r�)r�rr�r�rr`rz0Could not find end of expression starting at %d.)r�r(ZallowFallbackExpressionParsing�warnr�r��
_string_rer�r�rr��keysr6r�r�r��stripr)
rrr�r�ZprevPosr�r�rzZbracketsrrrrr�s<
�
�z+DefinitionParser._parse_expression_fallbackcCs�|��|�t�rt|j�SdD]X}|�|�s0q |��|�d�rn|��|�d�sf|�d|d�|d7}t|�S|�d�r�|��|�t�s�|�d�t	|j�}t
|�S|jd	d
d�}t|�S)N)rerTr�r�zExpected "]" after  "operator z["r�r!z%Expected user-defined literal suffix.Fr��r�rn)
r�r��_operator_rerr�r�r�r�r2rr r�r")rr�rr�rrr�_parse_operatorIs*








z DefinitionParser._parse_operatorc
Cs�|��|�d�sdS|�d�r*tgd�Sg}g}d}|j}d}d}zv|jdd�}|��|�d�r�d}d}|�d�s�|�d�n*|�d�r�d}n|�d�r�d}n
|�d	�|�|�W�nt�y�}z�|�|d
f�||_z�|j	dd�}	|��|�d��r"d}d}|�d��sP|�d�n.|�d��r4d}n|�d��rFd}n
|�d	�|�t
|	��WnLt�y�}z2||_|�|df�d
}
|�||
�|�WYd}~n
d}~00WYd}~n
d}~00|r6�q�q6q6t||�S)Nr�r�Fr�r�Tz3Expected ">" 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.)r�r�r�r>r�r�r�r6r(r�r%r�)r�
prevErrorsr$r(r�ZparsedCommaZ	parsedEndr�r�rzr�rrr�_parse_template_argument_listisf








:z.DefinitionParser._parse_template_argument_listF)�
memberPointerrqc
CsPg}g}|��d}|�d�r"d}|��t|�dkrB|�d�}nd}|�|�d}|�d�rh|��}nT|�t�s�|r�t|�dkr�|���qD|�	d�|j
}|tvr�|�	d|�t|�}|j
}z|��}	Wn<t�y
}
z"||_
d}	|j�|
�WYd}
~
n
d}
~
00|�t||	��|��|�d�s"|�rD|�	d	��qDq"t|||�S)
NFrQTrrxrjz#Expected identifier in nested name.z3Expected identifier in nested name, got keyword: %sz.Expected '::' in pointer to member (function).)r�r�rr�r6r�r�r2r�r�r��	_keywordsrr�r�r(�otherErrorsr<rI)rr�rJrKrLrxr?rr�r$�exrrrr��sN





�"

z#DefinitionParser._parse_nested_namecCs�d}d}g}d}g}|��|�t��r6|j}|�|�|dvr`|durZ|�d�||��|}n�|dvr�|dur�|�d�||��|}n�|dkr�t|�dkr�|�d�||d��|�|�nn|dk�rt|�dkr�|ddkr�|�d�||d��|�|�n*|dv�r,|du�r(|�d�||��|}|��qt|�dk�rHdS|dv�r�|du�rn|�d�||��|du�r�|�d�||��t|�dk�rr|�d�|d	�|����n�|d
k�r|du�r�|�d�||��t|�dk�rr|�d�|d	�|����nn|dk�r.|du�rr|�d�||���nD|dv�r||du�rT|�d�||��t|�dk�rr|�d�|d	�|���n�|d
k�r�|du�r�|�d�||��t|�dk�rr|�d�|d	�|���n�|dk�rL|du�r�|�d�||��t|�dk�r|�d�|d	�|���t|�dk�rr|ddk�rr|�d�|d	�|���n&|du�rr|du�rr|�d�|��ng}|du�r�|�|�|du�r�|�|�|�	|�|du�r�|�|�t
||�S)N)r@r�rCrEr�rFrGrHrar�r�r\rUr�r�r�r�zCan not have both {} and {}.)rsr�rrrrb)Z
_ImaginaryZ_Complex)r@r�rCr�rFrGrHr�r�r�r�r^rEra)r�r�r\rUrz.Can not have {} without a floating point type.)r�r��_simple_type_specifiers_rer�r6r�r�rrZrir/)r�modifierZ
signedness�widthr�rJr�r0rrr�_parse_simple_type_specifiers�s�


























z.DefinitionParser._parse_simple_type_specifierscCs:|��|��}|dur|S|��|�d�r�|�d�sB|�d�|�d�rf|�d�s`|�d�t�S|��}|��|�d�s�|�d�t|�Sd}|��dD]}|�|�r�|}q�q�|�	�}|��d}|�
d�r�d}nP|�d��r.|�d�s�|�d	�|�d��s|�d
�|�d��s*|�d�d}t|||�S)
NrRr�zExpected '(' after 'decltype'.r@r�z#Expected ')' after 'decltype(auto'.z%Expected ')' after 'decltype(<expr>'.)rIrwrXr�r�z<Expected '(' after 'decltype' in placeholder type specifier.z@Expected 'auto' after 'decltype(' in placeholder type specifier.zAExpected ')' after 'decltype(auto' in placeholder type specifier.r�)r�r�r�r�r�r�r3r�r4r�r�r5)rrDr�r#�kr6r7rrr�_parse_trailing_type_spec5sJ













z*DefinitionParser._parse_trailing_type_spec)r�rqcCs�|dkrdS|��|�d�s6|dkr2|�d�ndSg}|��|�d�s�|��|�d�r�|�tdd��|��|�d�s�|�d�q�|jdd	d
�}|�t|��|��|�d�r�qLqL|�d�r�q�qL|�d|j�qL|��|�d
�}|�d�}|�s
|�d
�}d}|�d��rd}|�s4|�d��r4d}d}|��|�d��r�|�d��r�|�	d�}|��|�d��s�|�d�t
|�}nt
d�}|��|�d��r�|jdd�}	nd}	|��|�d�}
|�d�}|
�s�|�d�}
g}|��}
|
du�r��q|�|
��q�|��d}|dk�rv|�d��rv|��d}|D]}|�|��r>|}�q\�q>|�sv|�dd�
|��t||||||	|
|||�
S)Nrer�r�z+Expecting "(" in parameters-and-qualifiers.r�r�Tz6Expected ")" after "..." in parameters-and-qualifiers.�single�rnr�r�z<Expecting "," or ")" in parameters-and-qualifiers, got "%s".rLr�r�r�rfFr�r�r�rLrMr�)r_rTrSz'Expected "%s" in initializer-specifier.z" or ")r�r�r�r6r9�_parse_type_with_initr�r�r�r�rEr��_parse_attributerZrH)rr�r'r<rLr�rIrJr�rKrLrMrNrZrOZvalidr�rrr� _parse_parameters_and_qualifiersbs�






��







�

���z1DefinitionParser._parse_parameters_and_qualifiers)rn�typedrqc
Cs(d}d}d}d}d}d}d}	d}
d}d}d}
g}|��|sP|rP|�d�}|rPq0|sh|rh|�d�}|rhq0|s�|dvr�|�d�r�d}q0|�d�r�d}q0|dkr�|�d�r�d}q0|�d	�r�d	}q0|s�|d
vr�|�d�}|r�q0|	s�|dvr�|�d�}	|	r�q0|dk�r.|
�s|�d
�}
|
�rq0|�s.|�d�}|�r.q0|dk�r�|�sP|�d�}|�rPq0|
�sh|�d�}
|
�rhq0|�s�|�d�}|�r�q0|�s�|�d�}|�r�d}|�d��r�|jdd�}|�s�|�d�|��|�d��s�|�d�t|�}q0|��}|�r
|�|�q0�q
q0t	|||||||	|
|||
|�S)zJust parse the simple ones.NrLr�)r�r�rurZr�rcrn)r�r�r`rNrOrzr�rMr^r�rYr�Fr�z=Expected constant expression after '(' in explicit specifier.r�z'Expected ')' to end explicit specifier.)
r�r�r�r�r�r�r`r�r6rc)rrnr�rdrer`r�rfrMrNrOr�rLr^rNrYr�rZrrr�_parse_decl_specs_simple�s�



















�z)DefinitionParser._parse_decl_specs_simplecCsT|r|dvrtd|��|�||�}d}|rB|��}|�||�}nd}t||||�S)N)r�r�r�r&�#Internal error, unknown outer "%s".)r7r�r�rm)rrnr�rorprqrrrr�#sz"DefinitionParser._parse_decl_specs)r�r�r�rqc
s�|dkr:�j}z���}Wq�ty6|�_d}Yq�0nn|dkr���t�r�t�j�}t|d�}t|gdgdd�}��	��j
dkr���d�q�d}n|r����}nd}g}��	�|�r6��d��r6��	���d�r�|�
td��q�td	��fd
d�}	��dg|	�}
��d��s��d�|�
t|
��q�q��q6q���|�}|du�r�t|�d
k�r�|�r�|dk�r�|�r���	���d��r��jdd�}t||d�St|||d�S)N�mayber�Fr�r)z Unexpected ':' after identifier.r�r�rcs���Sr�r�rrrrr�asz>DefinitionParser._parse_declarator_name_suffix.<locals>.parserz&Expected ']' in end of array operator.rr�r�r�r�)r�r�r(r�r2rr�r<rIr�r�r�r�r6rvrlr�r�rr�r�r�)
rr�r�r�r�r�rrjr�r�rzr�rxrrr�_parse_declarator_name_suffix>sV







�z.DefinitionParser._parse_declarator_name_suffixc
Cs�|dvrtd|��g}|��|r�|�d�r�|��d}d}g}|sV|�d�}|rVqB|sj|�d�}|rjqB|��}|dur�|�|�qBq�qB|�|||�}	t|	|||d�S|r�|�d�r�g}|��}|dur�q�|�|�q�|�|||�}	t|	|d	�S|�r|�d
��r|�||d�}	t	|	d�S|�rB|j
dk�rB|d
k�rFtdgdd�S|j}
z|�
|||�}|WSt�y@}z�|�|df�|
|_zX|�d�|�|||�}
|�d��s�|�d�|jdd|d�}	t|
|	d�WWYd}~St�y*}z2|
|_|�|df�d}|�||�|�WYd}~n
d}~00WYd}~n
d}~00|�r"|j}
z6|jdd�}|��|�d��sz|�d�|��Wn:t�y�}z |
|_|�|df�WYd}~nld}~00d}d}|�s�|�d�}|�r�q�|�s|�d�}|�r�qȐq�q�|�|||�}	t||||	d�S|j}
z4|�
|||�}|j
dk�rX|j�|�|d��|WSt�y�}z2|
|_|�|df�d}|�||�|�WYd}~n
d}~00dS)N)r�r�r�rez'Internal error, unknown paramMode '%s'.r�Fr�rLr�r�r�r�r�r�r�r�z/If declarator-id with parameters-and-qualifiersr�z$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)r7r�r�r�r�r6r�r�r�r�r�r�r�r�r(r�r�r�r�r�r�)rr�r�r�r�r�rLrNrZr�r�rDZexParamQualr�ZexNoPtrParenr�rMr�rrrr�us��




���

�:
$

z"DefinitionParser._parse_declarator)rn�
allowFallbackrqcs����|dkr,���}|dur,t|dd�S��d�s:dS���}|durRt|�S|dkr`g}n2|dkrrddg}n |dur�ddg}n��d	|�|dk�td
���fdd�}�j|||d
�}t|�S)Nr�F)r�r�r&r�r�r�z;Internal error, initializer for outer '%s' not implemented.rcs�j�d�Sr�)r�r�r�rrrr�sz3DefinitionParser._parse_initializer.<locals>.parser)r�)r�r�r�r�r�rlr�)rrnr�Z
bracedInitZfallbackEndr�rzrr�r�_parse_initializer�s.


�z#DefinitionParser._parse_initializer)r�rnrqc
Cs�|r |dvrtd|��|dkr |dv�rjg}|j}z0|j|dd�}|jd|dd�}|jdd	�W�q�t�yf}z�|d
kr�d}n|dkr�d
}n|�||f�||_z|j|d�}|jd|d�}Wn�t�yP}	zr||_|d
kr�d}n|dkr�d}n|�|	|f�|d
k�rd}
|
d7}
n|dk�r.d}
n|�||
�|	�WYd}	~	n
d}	~	00WYd}~n
d}~00nPd
}|dk�r~d}n"|dk�r�d}d}n|dk�r�d}|j|d�}|j||d�}t||�S)z�
        named=False|'maybe'|True: 'maybe' is e.g., for function objects which
        doesn't need to name the arguments

        outer == operatorCast: annoying case, we should not take the params
        )r�r�r�r�r&r�r�)r�r�F)rnr�Tr�)ZallowSemicolonr�zIf just a namer�z"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.Nr�r&r�)	r7r�r�r��
assert_endr(r6r�r�)rr�rnr�r�r�r�Z	exUntyped�descZexTypedr�r�rrrr�s`
�


	.


zDefinitionParser._parse_typec
Csf|r|j||d�}|dkr0|j|d�}t||�S|j}d}zZ|j|dd�}|dur^t|d�WS|��|jdkr�|jdkr�||_d}nt||�WSWn.ty�}z||_|}WYd}~n
d}~00|�d�s�t|d�Sz|jddd	�}t||�WSt�y`}	zT|du�r|	�g}
|
�	|d
f�|
�	|	df�d}|d
7}|�
|
|�|	�WYd}	~	n
d}	~	00dS)Nr�r&r�F)rnr�r�r�r�r�z-If default template argument is an expressionz&If default template argument is a typez$Error in non-type template parameterz# or constrained template parameter.)r�r�r:r�r�r�r(r�r;r6r�)rr�rnr�r�r�r�r�ZtypeInitr�r�rgrrrr�nsB



z&DefinitionParser._parse_type_with_initcCs:|��}|��|�d�s$t|d�S|�dd�}t||�S)Nr�F)r�r�r�r�r�r�rrr�_parse_type_using�s

z"DefinitionParser._parse_type_usingcCs$|��}|��|�d�}t||�S)Nr�)r�r�r�r�r�rrr�_parse_concept�s
zDefinitionParser._parse_conceptcCs�|��}|��|�d�}g}|��|�d�r�|��d}d}d}|�d�rRd}|�t�rj|j}|��|s||�d�r|d}|��}|��|�d�}|�t||||��|��|�d�r�q0q0q�q0t	|||�S)NrMr)Fr�Tr�r�)
r�r�r�r�r��_visibility_rer�r6r�r�)rrMrMr�r�r�r�ZbaseNamerrr�_parse_class�s4





zDefinitionParser._parse_classcCs|��}t|�Sr�)r�r�r�rrr�_parse_union�szDefinitionParser._parse_unioncCsBd}|��|��}|��d}|�d�r6|jdd�}t|||�S)Nr)Fr�)r�r�r�r�r�)rr�rMr�rrr�_parse_enum�s
zDefinitionParser._parse_enumcsV���}���d}��d�rL���td��fdd�}��g|�}t|�}t||�S)Nr�rcs�jdd�Sr�)r�rrrrr��sz2DefinitionParser._parse_enumerator.<locals>.parser)r�r�r�rlr�r�r�)rrMr�r�ZinitValrrr�_parse_enumerator�s
z"DefinitionParser._parse_enumeratorc

Cs�|��|�d�r|��}nd}|j}z�d}|��|�d�rDd}n*|�d�rTd}n|rd|�d�n
|�d�|��|�d�}|��|�t�r�t	|j
�}nd}|��|s�|�d�r�|jddd	�}nd}|jd
vr�|�d�t
||||�}|�rt||�WSt|�WSWn�t�y�}z�|�r&�z(||_|�dd
�}	t|	�WWYd}~St�y�}
zB||_d}g}|�|df�|�|
df�|�||��WYd}
~
n
d}
~
00WYd}~n
d}~00dS)Nrxr�rIzFExpected 'typename' or 'class' after template template parameter list.zKExpected 'typename' or 'class' in the beginning of template type parameter.r�r�Fr�z,>z4Expected "," or ">" after (template) type parameter.r�r&z&Error when parsing template parameter.z:If unconstrained type parameter or template type parameterz3If constrained type parameter or non-type parameter)r�r��_parse_template_parameter_listr�r�r�r�r�r2rr�r�r�r�r�r�r(r�r�r6r�)
rr�r�r�r�rrSrr�r/ZeNonTyper�r�rrr�_parse_template_parameter�sf








���z*DefinitionParser._parse_template_parameterc	
Csg}|��|�d�s |�d�|j}d}z|��}|�|�Wn.tyn}z||_|}WYd}~n
d}~00|��|�d�r�t|�S|�d�r�q q d}g}|r�|�|df�z|�d�Wn2ty�}z|�|df�WYd}~n
d}~00t|�|�	||��q dS)	Nr�zExpected '<' after 'template'r�r�z!Error in template parameter list.zIf parameterzExpected "," or ">".zIf no parameter)
r�r�r�r�r�r6r(r�r�r�)	rrgr��errr/ZeParamr�r�r�rrrr�!s6



$z/DefinitionParser._parse_template_parameter_listcCs�|j}z|��}Wnty,||_YdS0|��|�d�sJ||_dSg}|��|�d�}|��|�t�s||�d�|j}|t	vr�|�d|�t
|�}|�t||��|��|�d�r�q�qN|�d�r�qNqN|�d�qNt
||�S)Nrr�z2Expected identifier in template introduction list.zBExpected identifier in template introduction list, got keyword: %sr	r�z:Error in template introduction list. Expected ",", or "}".)r�r�r7r�r�r�r2r�r�r�rr6r�r�)rr�rKr�r�Ztxt_identifierrrrr�_parse_template_introductionBs<



�

z-DefinitionParser._parse_template_introductioncCs�|��|�d�sdSttd�dd�}g}g}|�||��|��d}|�d�rbd}|�d�n|�d�rzd}|�d�|s�q�|�||��q<t|�d	kr�t|d
�Stt||��SdS)Nrp)rrqcSs�g}g}|�|���|��d}|�d�r<d}|�d�n|�d�rTd}|�d�|sZqj|�|���qt|�dkr~|dSt||�SdS)NFr�Tr>rr)r6r�r�r�r�rr�)rZandExprsr�r�rrr�parse_and_exprts"


z?DefinitionParser._parse_requires_clause.<locals>.parse_and_exprFr�Trkrr)	r�r�rxrlr6r�rr�r�)rr�ZorExprsr�r�rrr�_parse_requires_clausehs*



z'DefinitionParser._parse_requires_clause)r?rqc
Cs�g}|��d}|j}|�d�r�z|��}Wq�ty|}z8|dkrdt|�dkrdtd�WYd}~S|�WYd}~q�d}~00n|��}|s�q�|dkr�t|�dkr�||_|�d�|�	|�qt|�dkr�|dkr�|�d�t|�dkr�dSt|�SdS)Nrxr�rrKz0More than 1 template parameter list for concept.z,Missing template parameter list for concept.)
r�r�r�r�r(rr�r�r�r6)rr?rKr�r�r�rrr�"_parse_template_declaration_prefix�s.


z3DefinitionParser._parse_template_declaration_prefix)r6rb�fullSpecShorthand�isMemberrqcCs�|��}d}|sd}n"|r.|jdur.d}d}n
t|j�}|d|krV|�d||f�||kr�||}|s�|s�d|||f}	|	d7}	|r�|	d|7}	|	t|�7}	|�|	�g}
t|�D]}|
�tg��q�|r�|s�|
�	|j�t
|
�}|S)	NFrTrzeToo 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
	)rOrKrr�rr�r\r6r�rir�)rr6rbrrZnumArgsZisMemberInstantiationZ	numParamsZnumExtrargZnewTemplatesZ_irrr�_check_template_consistency�s<
��
z,DefinitionParser._check_template_consistency)r?r�rqc

Cs2|dvrtd|��|dvr(td|��d}d}d}d}d}|��|�t�rT|j}|dvr~|�|�}|dkr~|dur~|��}|dk�rHg}|j}	z|s�|jddd	�}Wn8t	y�}
z |�
|
d
f�|	|_WYd}
~
n
d}
~
00|j}	z|s�|��}WnLt	�yD}
z2|	|_|�
|
df�d}|�||�|
�WYd}
~
n
d}
~
00n�|d
k�r\|�
�}n�|dk�rv|jddd	�}n||dk�r�|jddd	�}|du�r�|��}nP|dk�r�|��}n<|dk�r�|��}n(|dk�r�|��}n|dk�r�|��}n|j|j|d|dkd�}|��|�d�}t||||||||�S)N)rIr�r�r�r�rKrXrz(Internal error, unknown objectType "%s".)rIrwr�r�r��varr�rKrXrrrz+Internal error, unknown directiveType "%s".)r�rKr�r�rIr�r�Tr�r�zIf type alias or template aliaszError in type declaration.rKr�rIr�rXrF)rrr)r7r�r�r�r�r�r�r�r�r(r6r�r�r�r�r�r�r�r�rrMr�r�)
rr?r�r�rbr�r�r�r�r�r�r�r�rrr�parse_declaration�sz


&













�
�z"DefinitionParser.parse_declarationcCs8|jdd�}|��}|j||dd�}t||�}d|_|S)Nrd�r?F�r)r�r�rrr?)rrbrMrDrrr�parse_namespace_object(s�
z'DefinitionParser.parse_namespace_objectc

Cs&|j}zX|jdd�}|��}|��|�d�|��|j||dd�}t||�}d|_|dfWSt	�y }z�zB||_|�
dd�}|��|�d�|��|dfWWYd}~St	�y
}z>g}|�|df�|�|d	f�d
}	|�||	�|�WYd}~n
d}~00WYd}~n
d}~00dS)NZxrefrr�Trr�FzIf shorthand refzIf full function refzError in cross-reference.)
r�r�r�r�r�r�rrr?r(rr6r�)
rr�rbrMZres1�e1Zres2�e2r�rgrrr�parse_xref_object1s6
�


z"DefinitionParser.parse_xref_objectc
Cs�|j}z|��}|��|��|WSty�}z�||_z,|�d�}|��|��|WWYd}~Sty�}z>d}g}|�|df�|�|df�|�||�|�WYd}~n
d}~00WYd}~n
d}~00dS)NFz%Error when parsing (type) expression.r�r�)r�r�r�r�r(r�r6r�)rr�r�ZexExprr�ZexTyper�r�rrr�parse_expressionOs&
z!DefinitionParser.parse_expression)T)F)T)T)NT)N)F)_rr	r
rkrrzr}rr�rrr�rlr�r�r	rrr�rCr�r�r�r�r�r�r�r�r�r�r�rr�r�r�r�rr�r=r�r>r�rIr�r/r�r.r�rHr�rcr�rmr�r�r�r�rzr�r�r�r�r�r:r;r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rr�r�r�r�rr�rrrr
rrrrrrx�s�

<;���"


�_6$�
�, A2Y-d]
�8��w�1R
�-
=!&5�!��'E	rxrcCs ttd�d�}t|gdgdd�S)NZPhonyNameDueToErrorFr�)r<rrI)rjrrr�_make_phony_error_nameesrcseZdZUdZeded�ddd�gZeee	d<e
je
jd�Ze
e	d	<ed
d�dd
�Zeeed
d�dd�Zeed�dd��Zeed�dd��Zeed�dd�Zeed�dd�Zeeed
d�dd�Zeed��fdd �Zeeed!�d"d#�Zd
d�d$d%�Zd
d�d&d'�Z �Z!S)(�	CPPObjectz%Description of a C++ language object.�template parameterzTemplate Parameters)ZtparamrT��labelrJ�can_collapse�doc_field_types)�noindexentryr�option_specN)�astrqc	Cs�|j}|j}|jdurdS|j}|dur,dS|jdkr:dS|jdkrHdS|j}|j|jdddd�}|durndS|j��}||_t	||jdd||j
j|��dd�dS)NrXFTrJrrR)
r�rBr�r?r�rLr?r�r�r�r"r�get_source_info)rrr�r�
parentDeclZtargetSymbolr�Z	declClonerrr�_add_enumerator_to_parentxs0


�
�z#CPPObject._add_enumerator_to_parent)r�sigr rqc	Cs�g}tdtd�D]2}z|j|d�}|�|�WqtyBYq0qtt|��}|d}t�d��	|�s�t
jd|||��d�|j
�����d�}d}	|j
j}
|
dur�|
j}|
j}
|dur�q�|jd	kr�d
}	q�q�|	�s:d|jv�r:|}|jjjD]$}
|�|
�r�|t|
�d�}�qq�|�|�}|jd�d
||ddf�||jjjv�r�|jjdd}||v�rp|j
j ||<|d�|�|dd�D].}|�s��q�||jjjv�r�|d�|��q�|jj�!|�dS)NrrTrz^[a-zA-Z0-9_]*$zMIndex id generation for C++ object "%s" failed, please report as bug (id=%s).rar)FrKTr�entriesr�r�r'rJr)"r\rrr6r)rM�reversed�re�compiler�rcrd�get_locationr�r�r�lstriprBr�r?rr"r{�cpp_index_common_prefix�
startswithr�get_index_textZ	indexnode�state�documentr�
domaindatarZnote_explicit_target)rrrr rr�r��newestIdrMZisInConceptr�r�ZstrippedNamer#Z	indexTextrJrrr�add_target_and_index�sX�



zCPPObject.add_target_and_indexrcCs
t��dSr�rrrrr�object_type�szCPPObject.object_typecCs|jSr�)r(rrrr�display_object_type�szCPPObject.display_object_typer{cCstd�||jfS)Nz%s (C++ %s))rr)r�rrrr"�szCPPObject.get_index_text)r�rqcCs|�|j|j�Sr�)rr(�objtype)rr�rrr�parse_definition�szCPPObject.parse_definition)r rrrqcCs|�|d|j|�dSr�)r;r")rr rrrrrr;�szCPPObject.describe_signaturecs�|jjjj}d|jvr<|jdd}||jd<|��|jd<|jd}|j}|dur�|j	dkr�d}t
j|�t
|���|j|jd�|��d�t�}|�|�}||jd	<gSd|jd	<t���S)
N�cpp:parent_symbolr'�root_symbolr,r�zmC++ declarations inside functions are not supported. Parent function: {}
Directive name: {}
Directive arg: {}rra�cpp:last_symbol)r#r$Zsettingsr"�	temp_datar%r4�ref_contextr�r?rcrdr�rr�rM�	argumentsrrrhr�run)rr"�rootrrrgrMr�rrrr2�s*



��


z
CPPObject.run)rr rqc
Cs||jjd}t|||jjd�}z|�|�}|��WnTty�}z<tj||d�t	�}|�
|�}||jjd<t|�WYd}~n
d}~00zL|j||jj
|��dd�}|jjd|_|jdur�||j_||jjd<Wndt�y:}zJ|j|jjd<td�}	|	|jj
|jj|j|f}	tj|	|d�WYd}~n
d}~00|jdk�rR|�|�t|j�}
d	|jv|
d	<|�|||
�|S)
Nr,�rbr{rar.r)rr r`rr)r"r/rxr{r+r�r(rcrdrrh�
ValueErrorrirrr!r"r�r�rr r)r?r�dictrr;)rrr rr�rr�rMr�rgrrrr�handle_signatures@

�
�$

zCPPObject.handle_signaturecCsH|jjd}|jjd|_|jjd|_||jjd<|��|jjd<dS)Nr.r,r,)r"r/�oldParentSymbolr0�oldParentKeyr4)rZ
lastSymbolrrr�before_content@s
zCPPObject.before_contentcCs |j|jjd<|j|jjd<dS)Nr,r,)r8r"r/r9r0rrrr�
after_contentHszCPPObject.after_content)"rr	r
�__doc__r8rrrr7�__annotations__r�flagrr;r�rrrr'rkr(r)r"rxr+rrr;rr2r7r:r;rwrrrrr
js4

���*�8�%/r
c@seZdZdZdS)�
CPPTypeObjectr�N�rr	r
r(rrrrr?Msr?c@seZdZdZdS)�CPPConceptObjectrKNr@rrrrrAQsrAc@seZdZdZdS)�CPPMemberObjectr�Nr@rrrrrBUsrBc
@sdeZdZdZejeded�ddd�eded�d	d
dd�eded
�ddd�eded�ddd�gZdS)�CPPFunctionObjectr��	parameterZ
Parameters)r/rDr<�argumentTr�
exceptionsZThrowsr�)Zthrowsr{�	exception)rZrolenamerJr�retvalz
Return values)ZretvalsrHZreturnvalueZReturnsF)�returnsrq)rZhas_argrJN)	rr	r
r(r
rr8rr7rrrrrCYs$
��
���rCc@s"eZdZdZeed�dd��ZdS)�CPPClassObjectrIrcCs|jSr�)r*rrrrr)nsz"CPPClassObject.display_object_typeN)rr	r
r(rkrr)rrrrrJksrJc@seZdZdZdS)�CPPUnionObjectr�Nr@rrrrrKusrKc@seZdZdZdS)�
CPPEnumObjectrXNr@rrrrrLysrLc@seZdZdZdS)�CPPEnumeratorObjectrNr@rrrrrM}srMc@s@eZdZUdZdZdZdZdZiZe	e
d<eed�dd	�Z
d
S)�CPPNamespaceObjectzb
    This directive is just to tell Sphinx that we're documenting stuff in
    namespace foo.
    FrrTrrc
Cs�|jjdd}|jd��dvr,|}g}n�t|jd|��|jd�}z|��}|��WnFt	y�}z.t
j||��d�t�}t
|d�}WYd}~n
d}~00|�|j|j�}|g}||jjd<||jjd<|��|jjd	<gS)
Nr'r-r�ZNULLr_rir4rar,�cpp:namespace_stackr,)r"r%r1r�rxrr{rr�r(rcrdrrrhr6rbr/r4r0)r�
rootSymbolr��stackr�rr�rMrrrr2�s*
� zCPPNamespaceObject.runN)rr	r
r<�has_content�required_arguments�optional_arguments�final_argument_whitespacerr;r=rrr2rrrrrN�s
rNc@s<eZdZUdZdZdZdZiZee	d<e
ed�dd�Zd	S)
�CPPNamespacePushObjectFrrTrrc
Cs|jd��dvrgSt|jd|��|jd�}z|��}|��WnFty�}z.tj	||��d�t
�}t|d�}WYd}~n
d}~00|jj
�dd�}|s�|jjdd}|�|j|j�}|jj
�dg�}|�|�||jj
d<||jj
d<|��|jjd	<gS)
NrrOr4rar,r'r-rPr,)r1r�rxrr{rr�r(rcrdrrr"r/r
r%rhr6rbr6r4r0)rr�rr�rMZ	oldParentr�rRrrrr2�s.
� 
zCPPNamespacePushObject.runN�
rr	r
rSrTrUrVrr;r=rrr2rrrrrW�s
rWc@s<eZdZUdZdZdZdZiZee	d<e
ed�dd�ZdS)	�CPPNamespacePopObjectFrTrrcCs�|jj�dd�}|r t|�dkr8tjd|��d�g}n|��t|�dkrV|d}n|jjdd}||jjd<||jjd<|�	�|jj
d	<gS)
NrPrz=C++ namespace pop on empty stack. Defaulting to global scope.rar`r'r-r,r,)r"r/r
rrcrdrr�r%r4r0)rrRr�rrrr2�s�
zCPPNamespacePopObject.runNrXrrrrrY�s
rYcs:eZdZd	eededd��fdd�
Zdd�dd�Z�ZS)
�	AliasNodeNr)r�aliasOptionsr"�	parentKeyrqcsft���||_||_|dur\d|jvrN|jdd}||jd<|��|jd<|jd|_n||_dS)Nr,r'r-r,)	rrrr[r/r%r4r0r\)rrr[r"r\r3rrrr�s


zAliasNode.__init__rcCs|j|j|jd|jd�S)N)r"r\)rrr[r\rrrr�copy�s�zAliasNode.copy)NN)	rr	r
rr6rrr]rwrrrrrZ�s��rZc@sDeZdZejdZeeeeee	e
ed�dd�Ze	dd�dd�Z
dS)	�AliasTransformr)r��maxdepth�skipThisr[�
renderOptionsr$rqc	Cs|dkrd}n|dkrd}n|d8}d}g}|sZt�dd�}	|�|	�|j�|	d|j|�|�r|rj|}
nDt��}t��}|�|�||_d|d<d	|d
<|d<d|d<|}
|j	D]>}
|
jdur�q�|
jj
d
vr�q�|j|
|d|||d�}|
�|�q�|�st
|j�dk�r|�|�|S)NrTrFr�r_r'�domain�aliasr*�desctypeZnoindex)r&r'�r_r`r[rar$)rrr6r�r;r"�desc_contentr�r$r#r?�_render_symbolrirr)rr�r_r`r[rar$Zrecurser
r ZchildContainer�contentr�r0Z
childNodesrrrrg�sH



�
zAliasTransform._render_symbolN)�kwargsrqcKsR|j�t�D�]>}tt|�}|j}|j}z*t|||jjd�}|�	�\}}|�
�Wn:ty�}z"tj
||d�d\}}WYd}~n
d}~00|dur�t�|d�}	|	��|	t�||�7}	|�|	�q|jjdjd}
|
�|�}|�s
td|�td|�t|
�d	��g}|�r`|}
|
j}|
j�r0|
jj}ng}|j||d
ddddd
�\}}|du�r�g}n2|}|j}|j|d
dddd�}|du�r�|�|�dd�|D�}t|�dk�r�t�|d�}	|�|	�|	��|	t�||�7}	tj
d||d�|�|	�qg}ddi}|D]6}|j ||j!d|j!d|j!||jd�}|�"|��q
|�|�qdS)Nr4raror�r'r-�Target: �ParentKey: r�anyTF)r6rEr�r4r5r6r8�r4r5r6cSsg|]}|jdur|�qSr�rYr_rrrr_rVz(AliasTransform.apply.<locals>.<listcomp>rz,Can not find C++ declaration for alias '%s'.rr_�norootre)#r$�findallrZrrr\rxr"r{r
r�r(rcrdrr�clearr5Zreplace_selfZdomainsrrkr�rr6rbrKrprMrrr6rrgr[ri)rrir8rr\r�r�isShorthandr�r rQrr�nsrMrE�
failReasonr�r�r
rarDrrr�apply%s�
�




�

�



��
�zAliasTransform.apply)rr	r
r"Zdefault_priorityr�rarCr6rrrrgrtrrrrr^�s
�.r^c@s6eZdZUejejd�Zeed<e	e
d�dd�ZdS)�CPPAliasObject�r_rnrrcCsd|jvr"|j�dd�\|_|_nd|j|_|_t��}|jj|_|j|d<|j|d<|d<g|_|j	�
dd�d|j	vd	�}|dr�|ddkr�tjd
|�
�d�|��}|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)rr�rbr*rdr_rnrvz�Error in C++ alias declaration. Requested 'noroot' but 'maxdepth' 1. When skipping the root declaration, need 'maxdepth' 0 for infinite or at least 2.ra)r"N�object)rM�splitrbr*rr�r#r$rJrr
rcrdrZget_signaturesr6rZr"rfr:Znested_parserhZcontent_offsetr/r;)rr8r[Z
signaturesrZcontentnoderrrr2�s2


��
zCPPAliasObject.runN)rr	r
rZnonnegative_intr>rr;r=rrr2rrrrru{s
�ruc@s,eZdZeeeeeeeefd�dd�ZdS)�CPPXRefRole)r"�refnode�has_explicit_title�title�targetrqcCs�|j�|j�|s"t�dt|��}|ddkr^|sH|�d�rH|dd�}|�d�r^|dd�}|s�|�d�}|dd�dkr�|dd�}|�d�}|d	kr�||d
d�}||fS)Nrr)rlr����r�rrQr`r�)	�
attributes�updater0r,�subrr>r�rfind)rr"rzr{r|r}Zdcolonrrr�process_link�s 


zCPPXRefRole.process_linkN)	rr	r
rrrCrr	r�rrrrry�s�rycsBeZdZedd��fdd�Zeeeeefd�dd�Z	�Z
S)�CPPExprRoleN)�asCoderqcs t���|rd|_nd|_dS)Nzcpp-exprz	cpp-texpr)rr�
class_type)rr�rrrr�s
zCPPExprRole.__init__rc
Cs�|j�dd�}t||��|jd�}z|��}WnVty�}z>tjd|||��d�t	j
d|||jgd�ggfWYd}~Sd}~00|jj
�dd�}|dur�|jjdd	}t	j
d|jgd�}|�|d
|j|�|ggfS)Nrtr^r4z!Unparseable C++ expression: %r
%srar')r0r,r-r&)r%r�rxrr{rr(rcrdrZdesc_inliner�r"r/r
r%r;)rr%r�rr�rr rrrr2�s$�
�2zCPPExprRole.run)rr	r
rCrr	rrrr2rwrrrrr��s	r�c@s8eZdZdZdZdZeed�dddd�eed�ddd�eed	�d
dd�eed�ddd�eed�dd�eed
�d
d�eed�ddd�eed�dd�eed�ddd�eed�ddddddd�d�
Ze	e	e
eeee
eeeeeeeeed�Ze�e�e�e�edd�e�e�e�e�e�e�edd�edd�d�
Zeddddddd�id�Zedd�dd�Zeeejdd�dd �Z e!dd!�d"d#�Z"e#ee$dd$�d%d&�Z%eee&eee!e'e(e)e'e)efd'�d(d)�Z*eee&eee!e'e)e'd'�d*d+�Z+eee&ee!e'e#e(ee'fd,�d-d.�Z,e-e(eeeeee.fd/�d0d1�Z/e'ed2�d3d4�Z0dS)5�	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.
    r'ryrIrwrr�r�r��funcr�rrKrXrzfunction parameterr)
rIr�r�r�r�rKrXrr'r&)rIrwr�r�r�rr�rKrXrrrrdznamespace-pushz
namespace-poprcT)Z
fix_parens)r�F)
rlrIrwr�r�r�rr�rKrXrr�ZtexprN)r-rJr.cCs�tjr4td|�td�t|jd�d��td�|jd}|�|�tjr|td�t|jd�d��td�td|�t|jd	���D]\}}||kr�|jd	|=q�dS)
Nz
clear_doc:z	before:r-rz	before endz	after:z
	after endzclear_doc end:rJ)r�rur�rrr/rM�items)rrrQrMZnDocnamerrrr//s



zCPPDomain.clear_doc)r"rr$rqcCs2tjr.td|�t|jd�d��td|�dS)Nzprocess_doc:r-rzprocess_doc end:)r�rur�rr)rr"rr$rrr�process_docBs
zCPPDomain.process_doc)r:rqcCs|j�|jj�dSr�)rr�r"r0)rr:rrr�process_field_xrefIszCPPDomain.process_field_xref)r\�	otherdatarqcCs�tjrTtd�td�t|jd�d��td�td�t|d�d��td�|jd�|d||j�|jd}|d��D] \}}||vr�||vr�|||<q�tjr�td	�t|jd�d��td
�td�dS)Nzmerge_domaindata:z	self:r-rz		self endz	other:z
	other endrJz	result:z	result endzmerge_domaindata end)r�rur�rrrer"r�)rr\r�ZourNamesrMrrrr�merge_domaindataLs*�

zCPPDomain.merge_domaindata)r"�fromdocname�builderr�r}r8�contnoderqc#
s��dvr�d7�t���jd�}z|��\}	}
Wnfty�}zNttttfd�����fdd�}||�\}
}tjd|
|�d�WYd}~d	Sd}~00��	d
d�}�j
d}|r�|�|�}|s�td��td
|j
�t|�
d��n|}|
�r�|	}|j}|j�r|jj}ng}|j�o&t|j�dk}|j||�ddd|d�\}}|du�rv�dk�rp|dk�rptt|����d}n|d}n|	}|j}|j|�dddd�}|du�s�|jdu�r�t|�}|�d��s�|dk�r�t|���d	S��d��r��dd��|jj�td����fdd�}|��s:tjd�|jj|���d�|j}|
�r^|��}|���d�}n|��}|j}�dk�r�|� d��!�} d}!��	dd��s�|jd k�r�|
�r�jj"�rĈd!k�r�|!d7}!�jj"�r�d"k�r�| �#d#��r�|!d7}!�dv�r�| �#d$��r�|�#d#��r�|!d7}!nn�jj"�rr�d!k�rB|�#d��rB|!d7}!n.�d"k�r�| �#d��r�|�#d��s�| dd%�} n|�#d��r�|!d7}!|!dk�r�| d|!7} |t$�%| �7}t&||||�'�||�|jf}"|"S)&N)rlr�r�r4)r�rqc
sz�dkr�dkr�|fSt�dd���jd�}z|��Wn4typ}z�dd�|fWYd}~Sd}~00�|fS)Nrlr�r~r4)rxr{r
r()r�Zparser2r	)r"r8r}r�rr�findWarningos�&z2CPPDomain._resolve_xref_inner.<locals>.findWarningz&Unparseable C++ cross-reference: %r
%sraror,r-rjrkrT)r4r5r6r8rrnrrmzstd::r�cpp:r�rcs6�dkrdS����}|r"�|vStd��f�dS)NrlTz"Type is %s, declaration type is %s)Zobjtypes_for_roler�)Zobjtypes)�declTyprr�rr�	checkType�s
z0CPPDomain._resolve_xref_inner.<locals>.checkTypezcpp:%s targets a %s (%s).r)ZrefexplicitFr�rlr�z
operator()rjr~)(rxr{r
r(r7r	rrcrdr
rrkr�rr6rbrKrLrrJrprrMrrr�r!r?rCr�rrrr�rZadd_function_parenthesesr>r
rar:r)#rr"r�r�r�r}r8r�r�rrqr�r�r�r�r\rQrrrrMrEr8rrsr�r�ZtxtNamer�r��fullNestedNameZdisplayNamerr|ZaddParenrDr)r�r"r8rr}r�r�_resolve_xref_innerds�"

�



�




�
�
�
��





��zCPPDomain._resolve_xref_innerc	Cs|�|||||||�dSr�)r�)rr"r�r�r�r}r8r�rrr�resolve_xref�s
��zCPPDomain.resolve_xref)r"r�r�r}r8r�rqc	
Cspt���*|�|||d|||�\}}Wd�n1s80Y|rl|dkrXd|fgSd|�|�|fgSgS)Nrlr&zcpp:templateParamr�)r#Zsuppress_loggingr�Zrole_for_objtype)	rr"r�r�r}r8r�Zretnoder*rrr�resolve_any_xref�s

�&
zCPPDomain.resolve_any_xrefrc	csv|jd}|��D]^}|jdur"q|��}t|��d�}|���d�}|jj}|j}|j�	�}|||||dfVqdS)Nr-r)r)
rr1r�r�rrrr?rr)	rrQr�r�rMZdispnamer?rr&rrr�get_objectss


zCPPDomain.get_objects)r8rqcCsl|�dd�}|durdS|�dd�}|dus:t|j�dkr>dS|jd}|�|�}|��}d�t|�|g�S)Nr*r,rr-rQ)r
rrrkr�rZr)rr8r}r\rQrZ
parentNamerrr�get_full_qualified_names

z!CPPDomain.get_full_qualified_name)1rr	r
r<rMrrrZobject_typesrJrKrCrBr?rArLrMrNrWrYrurryr�Zrolesr�Zinitial_datarr/rr
r$r�rr�rrr�rrr	rr�r�r�rrar�r�rrrrr��s����������
"r�)�apprqcCs||�t�|�dgd�|�dgd�|�dgd�|�t�|�ddd�|�ddd�d	d
�}|�d|�dd
ddd�S)Nr r"r|r~�cpp_debug_lookupFr��cpp_debug_show_treecSs(|jjt_|jjt_|jjjdd�dS)NT)r3)r{r�r�r(r�rur �sort)r�rrr�	initStuff3s

zsetup.<locals>.initStuffzbuilder-initedZbuiltinr�T)rZenv_versionZparallel_read_safeZparallel_write_safe)Z
add_domainr�Zadd_config_valueZadd_post_transformr^Zconnect)r�r�rrr�setup(s

�r�)�r<r�typingrrrrrrrr	r
rrZdocutilsr
Zdocutils.nodesrrrrZdocutils.parsers.rstrZsphinxrZsphinx.addnodesrrZsphinx.applicationrZsphinx.buildersrZsphinx.directivesrZsphinx.domainsrrZsphinx.environmentrZ
sphinx.errorsrZ
sphinx.localerrZsphinx.rolesrr Zsphinx.transformsr!Z!sphinx.transforms.post_transformsr"Zsphinx.utilr#Zsphinx.util.cfamilyr$r%r&r'r(r)r*r+r,r-r.r/r0r1r2r3r4r5r6Zsphinx.util.docfieldsr7r8Zsphinx.util.docutilsr9Zsphinx.util.nodesr:Zsphinx.util.typingr;Z	getLoggerrrcr<rr��Sr�r�r�r�r�r�rrr1rYrr2r�r�r�rr=r�r�r�r�r7r�rrr<rIrlrrrsrxr}r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrr=rr r"r%r>r.r/r3r4r5r9rErHr`rcrmrvrzr�r�r�r�r�r�r�r�r�r�r�r;r:r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rr
rr�rxrr
r?rArBrCrJrKrLrMrNrWrYrZr^ruryr�r�r�rrrr�<module>s�
4T
}
�




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

Youez - 2016 - github.com/yon3zu
LinuXploit