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-2.pyc
a

�abA��8@sX
UddlZddlmZmZmZmZmZmZmZm	Z	m
Z
mZmZddl
mZddlmZmZmZmZddlmZddlmZddlmZmZddlmZdd	lmZdd
lm Z ddl!m"Z"m#Z#ddl$m%Z%dd
l&m'Z'ddl(m)Z)m*Z*ddl+m,Z,m-Z-ddl.m/Z/ddl0m1Z1ddl2m3Z3ddl4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGddlHmIZImJZJddlKmLZLddlMmNZNddlOmPZPe3�QeR�ZSe
d�ZTe�Ud�ZVe�UdejW�ZXe�Ud�ZYe�Ud�ZZe�Ud�Z[gd�Z\e�Ud�Z]d Z^gd!�Z_d"d"d#d$d$d%d&d&d'd(d)�
Z`d*d+d,d-d.d/d0�Zad1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[�*Zbd.d(d"d\d]d^d_d`dadbdbdbdbdcdcd$d$d$ddddd&d&d&d&d/d/dedededededfdfdgdgdhdidjdkdkdkdldldmdndodidjdkdpdqdrds�4Zcdtdudvdwdxdxdydzd{d|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��7Zdd�d�d�d�d�d�d�d�dxdxd��
Zed"d"d`d_d^d��Zfeeegegfehd�<d�dgd�d�gd�d�gd�d�gd�d�ggd��gd��d�d�gd�d�ggd��d�d�ggZigd��Zjgd��Zkd�d�d�d�d��ZlGd�d„d�em�ZnGd�dĄd�e6�ZoGd�dƄd�eo�ZpGd�dȄd�eo�ZqGd�dʄd�eo�ZrGd�d̄d�eo�ZsGd�d΄d�es�ZtGd�dЄd�et�ZuGd�d҄d�et�ZvGd�dԄd�et�ZwGd�dքd�et�ZxGd�d؄d�et�ZyGd�dڄd�et�ZzGd�d܄d�es�Z{Gd�dބd�es�Z|Gd�d�d�es�Z}Gd�d�d�es�Z~Gd�d�d�eo�ZGd�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�es�Z�Gd�d�d�es�Z�Gd�d��d�es�Z�Gd�d��d�es�Z�Gd�d��d�es�Z�Gd�d��d�es�Z�Gd�d��d�es�Z�Gd��d��des�Z�G�d�d��des�Z�G�d�d��des�Z�G�d�d��des�Z�G�d�d��des�Z�G�d	�d
��d
es�Z�G�d�d��deo�Z�G�d
�d��des�Z�G�d�d��des�Z�G�d�d��des�Z�G�d�d��deo�Z�G�d�d��de��Z�G�d�d��de��Z�G�d�d��de��Z�G�d�d��deo�Z�G�d�d��deo�Z�G�d�d ��d eo�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*eo�Z�G�d+�d,��d,eo�Z�G�d-�d.��d.eo�Z�G�d/�d0��d0eo�Z�G�d1�d2��d2eo�Z�G�d3�d4��d4eo�Z�G�d5�d6��d6eo�Z�G�d7�d8��d8eo�Z�G�d9�d:��d:e��Z�G�d;�d<��d<e��Z�G�d=�d>��d>e��Z�G�d?�d@��d@e��Z�G�dA�dB��dBe��Z�G�dC�dD��dDe��Z�G�dE�dF��dFe��Z�G�dG�dH��dHes�Z�G�dI�dJ��dJe7�Z�G�dK�dL��dLeo�Z�G�dM�dN��dNeo�Z�G�dO�dP��dPeo�Z�G�dQ�dR��dReo�Z�G�dS�dT��dTeo�Z�G�dU�dV��dVeo�Z�G�dW�dX��dXeo�Z�G�dY�dZ��dZeo�Z�G�d[�d\��d\eo�Z�G�d]�d^��d^eo�Z�G�d_�d`��d`eo�Z�G�da�db��dbeo�Z�G�dc�dd��dde��Z�G�de�df��dfe��Z�G�dg�dh��dhe��Z�G�di�dj��dje��Z�G�dk�dl��dleo�Z�G�dm�dn��dneo�Z�G�do�dp��dpeo�Z�G�dq�dr��dreo�Z�G�ds�dt��dteo�Z�G�du�dv��dveo�Z�G�dw�dx��dxeo�Z�G�dy�dz��dz�Z�G�d{�d|��d|�Z�G�d}�d~��d~�Z�G�d�d���d�e8�Z�er�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�eL�Z�G�d��d���d�eL�Z�G�d��d���d�eL�Z�G�d��d���d�ej�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�eeegef�d���d��d��Z�dS(��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��dSr�r�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)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)N)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.r�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cs
eZdZUeded�ddd�gZeeed<e	j
e	j
d�Zeed<e
d	d
�dd�Ze
eed	d
�dd�Zeed�dd��Zeed�dd��Zeed�dd�Zee
d�dd�Zee
ed	d�dd�Zeed��fdd�Zeee
d �d!d"�Zd	d�d#d$�Zd	d�d%d&�Z�Z S)'�	CPPObject�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
r8rrrr7�__annotations__r�flagrr;r�rrrr'rkr(r)r"rxr+rrr;rr2r7r:r;rwrrrrr
js2

���*�8�%/r
c@seZdZdZdS)�
CPPTypeObjectr�N�rr	r
r(rrrrr>Msr>c@seZdZdZdS)�CPPConceptObjectrKNr?rrrrr@Qsr@c@seZdZdZdS)�CPPMemberObjectr�Nr?rrrrrAUsrAc
@sdeZdZdZejeded�ddd�eded�d	d
dd�eded
�ddd�eded�ddd�gZdS)�CPPFunctionObjectr��	parameterZ
Parameters)r/rCr<�argumentTr�
exceptionsZThrowsr�)Zthrowsr{�	exception)rZrolenamerJr�retvalz
Return values)ZretvalsrGZreturnvalueZReturnsF)�returnsrq)rZhas_argrJN)	rr	r
r(r
rr8rr7rrrrrBYs$
��
���rBc@s"eZdZdZeed�dd��ZdS)�CPPClassObjectrIrcCs|jSr�)r*rrrrr)nsz"CPPClassObject.display_object_typeN)rr	r
r(rkrr)rrrrrIksrIc@seZdZdZdS)�CPPUnionObjectr�Nr?rrrrrJusrJc@seZdZdZdS)�
CPPEnumObjectrXNr?rrrrrKysrKc@seZdZdZdS)�CPPEnumeratorObjectrNr?rrrrrL}srLc@s<eZdZUdZdZdZdZiZee	d<e
ed�dd�Zd	S)
�CPPNamespaceObjectFrrTrrc
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
Zhas_contentZrequired_argumentsZoptional_argumentsZfinal_argument_whitespacerr;r<rrr2rrrrrM�s
rMc@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)
NrrNr4rar,r'r-rOr,)r1r�rxrr{rr�r(rcrdrrr"r/r
r%rhr6rbr6r4r0)rr�rr�rMZ	oldParentr�rQrrrr2�s.
� 
zCPPNamespacePushObject.runNrRrrrrrS�s
rSc@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)
NrOrz=C++ namespace pop on empty stack. Defaulting to global scope.rar`r'r-r,r,)r"r/r
rrcrdrr�r%r4r0)rrQr�rrrr2�s�
zCPPNamespacePopObject.runNrRrrrrrT�s
rTcs:eZdZd	eededd��fdd�
Zdd�dd�Z�ZS)
�	AliasNodeNr)r�aliasOptionsr"�	parentKeyrqcsft���||_||_|dur\d|jvrN|jdd}||jd<|��|jd<|jd|_n||_dS)Nr,r'r-r,)	rrrrVr/r%r4r0rW)rrrVr"rWr3rrrr�s


zAliasNode.__init__rcCs|j|j|jd|jd�S)N)r"rW)rrrVrWrrrr�copy�s�zAliasNode.copy)NN)	rr	r
rr6rrrXrwrrrrrU�s��rUc@sDeZdZejdZeeeeee	e
ed�dd�Ze	dd�dd�Z
dS)	�AliasTransformr)r��maxdepth�skipThisrV�
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'�rZr[rVr\r$)rrr6r�r;r"�desc_contentr�r$r#r?�_render_symbolrirr)rr�rZr[rVr\r$Zrecurser
r ZchildContainer�contentr�r0Z
childNodesrrrrb�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'.rrZ�norootr`)#r$�findallrUrrrWrxr"r{r
r�r(rcrdrr�clearr5Zreplace_selfZdomainsrrkr�rr6rbrKrprMrrr6rrbrVri)rrdr8rrWr�r�isShorthandr�r rPrr�nsrMrE�
failReasonr�r�r
r\rDrrr�apply%s�
�




�

�



��
�zAliasTransform.apply)rr	r
r"Zdefault_priorityr�rarCr6rrrrbrorrrrrY�s
�.rYc@s6eZdZUejejd�Zeed<e	e
d�dd�ZdS)�CPPAliasObject�rZrirrcCsd|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)Nr)rr�r]r*r_rZrirqz�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"�object)rM�splitr]r*rr�r#r$rJrr
rcrdrZget_signaturesr6rUr"rar:Znested_parsercZcontent_offsetr/r;)rr8rVZ
signaturesrZcontentnoderrrr2�s2


��
zCPPAliasObject.runN)rr	r
rZnonnegative_intr=rr;r<rrr2rrrrrp{s
�rpc@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)rgr����r�rrQr`r�)	�
attributes�updater0r,�subrr>r�rfind)rr"rurvrwrxZdcolonrrr�process_link�s 


zCPPXRefRole.process_linkN)	rr	r
rrrCrr	r~rrrrrt�s�rtcsBeZdZedd��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	rc@s4eZdZdZdZeed�dddd�eed�ddd�eed�d	dd�eed
�d
dd�eed�dd�eed�dd�eed
�d
dd�eed�dd�eed�dd
d�eed�ddddd
dd�d�
Zeee	e
eeee
eeeeeeeed�Ze�e�e�e�edd�e�e�e�e�e�e�edd�edd�d�
Zeddddddd�id�Zedd�dd�Zeeejdd�dd�Ze 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.�d/d0�Z.e&ed1�d2d3�Z/dS)4�	CPPDomainr'ryrIrwrr�r�r��funcr�rrKrXrzfunction parameterr)
rIr�r�r�r�rKrXrr'r&)rIrwr�r�r�rr�rKrXrrrrdznamespace-pushz
namespace-popr^T)Z
fix_parens)r�F)
rgrIrwr�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)rrrPrMZnDocnamerrrr//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�)rzr{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�rxr8�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)rgr�r�r4)r�rqc
sz�dkr�dkr�|fSt�dd���jd�}z|��Wn4typ}z�dd�|fWYd}~Sd}~00�|fS)Nrgr�ryr4)rxr{r
r()r�Zparser2r	)r"r8rxr�rr�findWarningos�&z2CPPDomain._resolve_xref_inner.<locals>.findWarningz&Unparseable C++ cross-reference: %r
%sraror,r-rerfrT)r4r5r6r8rrnrrhzstd::r�cpp:r�rcs6�dkrdS����}|r"�|vStd��f�dS)NrgTz"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�rgr�z
operator()rjry)(rxr{r
r(r7r	rrcrdr
rrkr�rr6rbrKrLrrJrprrMrrr�r!r?rCr�rrrr�rZadd_function_parenthesesr>r
rar:r)#rr"r�r�r�rxr8r�r�rrlr�r�r�r�rWrPrrmrMrEr8rrnr�r�ZtxtNamer�r��fullNestedNameZdisplayNamerrwZaddParenrDr)r�r"r8rrxr�r�_resolve_xref_innerds�"

�



�




�
�
�
��





��zCPPDomain._resolve_xref_innerc	Cs|�|||||||�dSr�)r�)rr"r�r�r�rxr8r�rrr�resolve_xref�s
��zCPPDomain.resolve_xref)r"r�r�rxr8r�rqc	
Cspt���*|�|||d|||�\}}Wd�n1s80Y|rl|dkrXd|fgSd|�|�|fgSgS)Nrgr&zcpp:templateParamr�)r#Zsuppress_loggingr�Zrole_for_objtype)	rr"r�r�rxr8r�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)	rrPr�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)rr8rxrWrPrZ
parentNamerrr�get_full_qualified_names

z!CPPDomain.get_full_qualified_name)0rr	r
rMrrrZobject_typesrIrJrBrAr>r@rKrLrMrSrTrprrtrZrolesr�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_transformrYZconnect)r�r�rrr�setup(s

�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>r@rArBrIrJrKrLrMrSrTrUrYrprtrr�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