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

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

    The C++ language domain.

    :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS.
    :license: BSD, see LICENSE for details.
�N)�Any�Callable�Dict�	Generator�Iterator�List�Optional�Tuple�TypeVar�Union�cast)�nodes)�Element�Node�TextElement�system_message)�
directives)�addnodes)�desc_signature�pending_xref)�Sphinx)�Builder)�ObjectDescription)�Domain�ObjType)�BuildEnvironment)�NoUri)�_�__)�
SphinxRole�XRefRole)�SphinxTransform)�ReferencesResolver)�logging)�ASTAttribute�ASTBaseBase�ASTBaseParenExprList�
BaseParser�DefinitionError�NoOldIdError�StringifyTransform�$UnsupportedMultiCharacterCharLiteral�anon_identifier_re�binary_literal_re�char_literal_re�float_literal_re�float_literal_suffix_re�hex_literal_re�
identifier_re�integer_literal_re�integers_literal_suffix_re�octal_literal_re�verify_description_mode)�Field�GroupedField)�SphinxDirective)�make_refnode)�
OptionSpec�TzN(?x)
    [a-zA-Z_][a-zA-Z0-9_]*\b   # note, no word boundary in the beginning
z>[LuU8]?('([^'\\]*(?:\\.[^'\\]*)*)'|"([^"\\]*(?:\\.[^"\\]*)*)")z\b(public|private|protected)\bz�(?x)
        \[\s*\]
    |   \(\s*\)
    |   \+\+ | --
    |   ->\*? | \,
    |   (<<|>>)=? | && | \|\|
    |   <=>
    |   [!<>=/*%+|&^~-]=?
    |   (\b(and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|xor|xor_eq)\b)
zx(?x)
        ->\*    |    \.\*    |    \,
    |   (<<|>>)=?    |    &&    |    \|\|
    |   !=
    |   [<>=/*%+|&^~-]=?
)YZalignas�alignof�and�and_eqZasm�auto�bitand�bitor�bool�breakZcaseZcatch�char�char8_t�char16_t�char32_t�class�compl�concept�const�	consteval�	constexpr�	constinit�
const_cast�continue�decltype�default�deleteZdo�double�dynamic_cast�else�enum�explicitZexport�extern�false�float�for�friendZgoto�if�inline�int�long�mutable�	namespace�new�noexcept�not�not_eq�nullptr�operator�or�or_eqZprivateZ	protected�public�register�reinterpret_cast�requires�return�short�signed�sizeof�staticZ
static_assert�static_cast�structZswitch�template�this�thread_local�throw�true�try�typedef�typeid�typename�union�unsigned�using�virtual�void�volatile�wchar_t�while�xor�xor_eqa(?x)
    \b(
    auto|void|bool
    |signed|unsigned
    |short|long
    |char|wchar_t|char(8|16|32)_t
    |int
    |__int(64|128)  # extension
    |float|double
    |__float80|_Float64x|__float128|_Float128  # extension
    |_Complex|_Imaginary  # extension
    )\b
�)N�Z_CPPv2Z_CPPv3Z_CPPv4�c�C�i�U�l�L�b)
rE�signed char�
unsigned charra�
signed int�unsigned intrb�signed long�
unsigned longrC�ss�os�isZios�v�m)zstd::stringzstd::ostreamzstd::istreamz
std::iostreamzstd::vectorzstd::mapznew-operatorznew-array-operatorzdelete-operatorzdelete-array-operatorzinv-operatorzadd-operatorzsub-operatorzmul-operatorzdiv-operatorzmod-operatorzand-operatorzor-operatorzxor-operatorzassign-operatorzadd-assign-operatorzsub-assign-operatorzmul-assign-operatorzdiv-assign-operatorzmod-assign-operatorzand-assign-operatorzor-assign-operatorzxor-assign-operatorzlshift-operatorzrshift-operatorzlshift-assign-operatorzrshift-assign-operatorzeq-operatorzneq-operatorzlt-operatorzgt-operatorzlte-operatorzgte-operatorznot-operatorz
sand-operatorzsor-operatorzinc-operatorzdec-operatorzcomma-operatorzpointer-by-pointer-operatorzpointer-operatorz
call-operatorzsubscript-operator)*re�new[]rT�delete[]�~�+�-�*�/�%�&�|�^�=�+=�-=�*=�/=�%=�&=�|=�^=�<<�>>�<<=�>>=�==�!=�<�>�<=�>=�!�&&�||�++�--�,�->*�->�()�[]�a�h�wZDiZDsZDu�s�t�j�x�y�n�o�f�d�e�gZCfZCdZCeZDa�DcZDn)4r�rCrEr�r�r�rHrGrFrrz	short intzsigned shortzsigned short intzunsigned shortzunsigned short intrarsr�r�r�rbzlong intr�zsigned long intr�zunsigned long intz	long longz
long long intzsigned long longzsigned long long int�__int64zunsigned long longzunsigned long long int�__int128zsigned __int128zunsigned __int128r\rUzlong double�	__float80�	_Float64x�
__float128�	_Float128z_Complex floatz_Complex doublez_Complex long doublez_Imaginary floatz_Imaginary doublez_Imaginary long doubler@�decltype(auto)zstd::nullptr_t�nwZna�dl�da�co�pl�mi�mlZdvZrmZanrk�eoZaSZpLZmIZmLZdVZrMZaNZoRZeOZlsZrsZlSZrS�eq�ne�lt�gt�le�ge�nt�aaZoo�pp�mm�cmZpm�pt�cl�ixZds)7rer�rTr�r�rJr�r�r�r�r�r�rAr�rBr�r�r�r�r�r�r�r�r�r?r�rlr�r�r�r�r�r�r�r�rhr�r�r�r��<=>r�rgr�r>r�rkr�r�r�r�r�r�r��.*Zpp_Zmm_�deZadZpsZng)
r�r�r�r�r�r�r�rgr�rJ)N�u8�ur�r��_id_char_from_prefixr�r�r>r�rBr�r�r�rA)r�r�rh)r�r�r�r�r�r�r�r�r�)r�r�r�r�r�)r�r�r�r�r�r�r�r�r�r?r�r�r�rlZdcZscZcc�rc)rVrvrProc@s,eZdZdddd�dd�Zed�dd	�ZdS)
�_DuplicateSymbolError�Symbol�ASTDeclarationN)�symbol�declarationrqcCs |sJ�|sJ�||_||_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&|dusJ�t|�dksJ�||_dS�Nr)�lenr�rrrrrrVszASTIdentifier.__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)rrr�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�rqcCsRt|�|��rtjdd�}nt�|j|j�}|dkrx||j|}tjddd|ddd�}	|��|	d<|	|7}	||	7}n�|d	kr�t��}
|
|7}
||
7}n�|d
kr�||7}n�|dkr�|d�d
�||7}n�|dk�rBt	|�dks�J�t	|�dks�J�|���rJ�d|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�udlr�
operator""�Unknown description mode: %s)r6rrZ
desc_sig_namerr�get_lookup_key�	desc_name�appendr�	Exception)rr!r"r#r$r%r��node�
targetText�pnodeZnameNoderrr�describe_signatureysJ�





�
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�rA�rrGrErrr�
_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
rrrrCrCrarrr*rIrr<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>t|�dksJ�||_||_t|j�t|j�ks4J�||_dSr)rrKrLrM)rrKrLrMrrrr�s
zASTNestedName.__init__rcCs|Sr�rrrrr�name�szASTNestedName.namecCs,d}|jD]}|��rq
|jr
|d7}q
|S�Nrr)rKrCr%)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�joinrKrr7r)rrrR�ttrEr�rrVrr�s



zASTNestedName.get_idrFcCshg}|jr|�d�tt|j��D]:}|j|}|j|rN|�d||��q"|�||��q"d�|�S)Nr�z	template rS)rMr7�rangerrKrLr\)rrGrEr�r�rrrrI�s


zASTNestedName._stringifyrr��r!r"r#r�rqcCs(t|�|dkr�|jr0ds"Jd��|t�d�7}tt|j��D]t}|dkrddsVJd��|t�d�7}|j|}|j|r�ds�Jd��|t�d�7}|t�d�7}|�|||d	|�q>�nl|d
k�r|jr�Jt	|���t|j�dks�J�|jdr�J�|jd�|d
|d	|��n|dv�rg}|d
k�rN|du�s6J�|j
jdu�rN|j
jj}d}d	}	d	}
d}|d
k�rv|jdd�n|j}|}
|d
k�r�t�
�}
|j�r�|
d7}
|d
k�r�t|�dk�r�|t�dd�7}n|
t�dd�7}
tt|��D]�}||}|j|}|�s|
t�dd�7}
|
d7}
|�r>|
t�dd�7}
|
t��7}
d}t	|�}|d	k�r�|j�r�|t|�k�r�|	t	||�7}	|d7}|�|
d||	|
|�|
|7}
�q�|d
k�r$t|j�dk�r�|
t�dd�7}
||
7}|jd�r�|t�dd�7}|t��7}|jd�|||d	|�ntd|��dS)Nr/FzCan this happen?rSrz::blahrx� r�r0r)r'r.�markNamer.T���r'r4)r6rMr
�Textr^rrKrLr<rr��templatePrefixr�desc_addname�desc_sig_punctuation�desc_sig_keyword�desc_sig_spacer%r8)rr!r"r#r�r�r��templateParamsZiTemplateParamsZtemplateParamsPrefixr$�firstrK�dest�nnerxZtxt_nnerrrr<�s�









�
z ASTNestedName.describe_signature)r�)rr	r
rr=rCr�propertyrNrarQrrr*rIrr<rrrrrJ�s
�	�rJc@s2eZdZeed�dd�Zeedddd�dd	�ZdS)
�
ASTExpressionrcCstt|���dSr���NotImplementedError�reprrrrrrJszASTExpression.get_idrr�Nr_cCstt|���dSr�ro�rr!r"r#r�rrrr<Msz ASTExpression.describe_signature�rr	r
rarrrr<rrrrrnIs�rnc@seZdZdS)�
ASTLiteralNr
rrrrrtUsrtc@sBeZdZeed�dd�Zeed�dd�Zeeddd	d
�dd�Z	d	S)
�ASTPointerLiteralrFcCsdS�Nrir�rrGrrrrIZszASTPointerLiteral._stringifyrcCsdS)NZLDnErrrrrr]szASTPointerLiteral.get_idrr�Nr_cCs|t�dd�7}dSrv�rrgrrrrrr<`sz$ASTPointerLiteral.describe_signature�
rr	r
r*rrIrarrr<rrrrruYs
�ruc@sReZdZedd�dd�Zeed�dd�Zeed�d	d
�Z	e
edddd
�dd�ZdS)�ASTBooleanLiteralN��valuerqcCs
||_dSr��r|�rr|rrrrfszASTBooleanLiteral.__init__rFcCs|jr
dSdSdS)Nr|r[r}rwrrrrIiszASTBooleanLiteral._stringifyrcCs|jr
dSdSdS)NZL1EZL0Er}rrrrroszASTBooleanLiteral.get_idrr�r_cCs|t�t|�t|��7}dSr�)rrgrrrrrrr<usz$ASTBooleanLiteral.describe_signature)rr	r
rCrr*rrIrarrr<rrrrrzes�rzc@sReZdZedd�dd�Zeed�dd�Zeed�d	d
�Ze	edddd
�dd�Z
dS)�ASTNumberLiteralN��datarqcCs
||_dSr��r��rr�rrrr{szASTNumberLiteral.__init__rFcCs|jSr�r�rwrrrrI~szASTNumberLiteral._stringifyrcCsd|j�dd�S)NzL%sE�'r�)r��replacerrrrr�szASTNumberLiteral.get_idrr�r_cCs|t�|j|j�7}dSr�)r�desc_sig_literal_numberr�rrrrrr<�sz#ASTNumberLiteral.describe_signature�rr	r
rrr*rIrarrr<rrrrrzs�rc@sReZdZedd�dd�Zeed�dd�Zeed�d	d
�Ze	edddd
�dd�Z
dS)�ASTStringLiteralNr�cCs
||_dSr�r�r�rrrr�szASTStringLiteral.__init__rFcCs|jSr�r�rwrrrrI�szASTStringLiteral._stringifyrcCsdt|j�dS)NzLA%d_KcE�)rr�rrrrr�szASTStringLiteral.get_idrr�r_cCs|t�|j|j�7}dSr�)r�desc_sig_literal_stringr�rrrrrr<�sz#ASTStringLiteral.describe_signaturer�rrrrr��s�r�c@sTeZdZeedd�dd�Zeed�dd�Zeed�d	d
�Ze	edddd
�dd�Z
dS)�ASTCharLiteralN)r$r�rqcCsT||_||_|tvsJ�t||_|���d�}t|�dkrHt|�|_nt	|��dS)Nzunicode-escaper)
r$r�r��type�encode�decoder�ordr|r+)rr$r�Zdecodedrrrr�s
zASTCharLiteral.__init__rFcCs0|jdurd|jdS|jd|jdSdS�Nr�)r$r�rwrrrrI�s
zASTCharLiteral._stringifyrcCs|jt|j�Sr�)r�rr|rrrrr�szASTCharLiteral.get_idrr�r_cCs@|jdur|t�|j|j�7}d|jd}|t�||�7}dSr�)r$rrgr�Zdesc_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__rFcCs||j�||j�Sr�r�rwrrrrI�sz ASTUserDefinedLiteral._stringifyrcCsd�|j�|�|j�|��S)Nz
clL_Zli{}E{}E)�formatr�rr�rrrrr�szASTUserDefinedLiteral.get_idrr�Nr_cCs,|j�||||�|j�|d|dd|�dS)Nr2r�)r�r<r�rrrrrr<�sz(ASTUserDefinedLiteral.describe_signature)
rr	r
rtrrr*rrIrarrr<rrrrr��s�r�c@sBeZdZeed�dd�Zeed�dd�Zeeddd	d
�dd�Z	d	S)
�ASTThisLiteralrFcCsdS�NryrrwrrrrI�szASTThisLiteral._stringifyrcCsdS)NZfpTrrrrrr�szASTThisLiteral.get_idrr�Nr_cCs|t�dd�7}dSr�rxrrrrrr<�sz!ASTThisLiteral.describe_signatureryrrrrr��s
�r�c@sVeZdZeeedd�dd�Zeed�dd�Zeed�d	d
�Z	e
edddd
�dd�ZdS)�ASTFoldExprN)�leftExpr�op�	rightExprrqcCs*|dus|dusJ�||_||_||_dSr�)r�r�r�)rr�r�r�rrrr�szASTFoldExpr.__init__rFcCs�dg}|jr<|�||j��|�d�|�|j�|�d�|�d�|jr||�d�|�|j�|�d�|�||j��|�d�d�|�S)N�(r`�...�)r�)r�r7r�r�r\rHrrrrI�s





zASTFoldExpr._stringifyrcCs�|dksJ�|dkrt|�Sg}|jdur6|�d�n |jdurL|�d�n
|�d�|�t|j�|jr~|�|j�|��|jr�|�|j�|��d�|�S)NrZfl�frZfLr�)rr�r7r��_id_operator_v2r�rr\rDrrrr�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�)rrfr�r<rh�desc_sig_operatorr�r�rrrrrr<szASTFoldExpr.describe_signature)rr	r
rnrrr*rIrarrr<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__rFcCsd||j�dS�Nr�r�r�rwrrrrIszASTParenExpr._stringifyrcCs|j�|�Sr��r�rrrrrrszASTParenExpr.get_idrr�Nr_cCs6|t�dd�7}|j�||||�|t�dd�7}dSr��rrfr�r<rrrrrr< szASTParenExpr.describe_signature�rr	r
rnrr*rrIrarrr<rrrrr�s�r�c@sPeZdZed�dd�Zeed�dd�Zeed�dd	�Z	e
ed
ddd
�dd�ZdS)�ASTIdExpression�rNcCs
||_dSr�r��rrNrrrr(szASTIdExpression.__init__rFcCs
||j�Sr�r�rwrrrrI,szASTIdExpression._stringifyrcCs|j�|�Sr��rNrrrrrr/szASTIdExpression.get_idrr�Nr_cCs|j�||||�dSr�)rNr<rrrrrr<2sz"ASTIdExpression.describe_signature�rr	r
rJrr*rrIrarrr<rrrrr�'s�r�c@s4eZdZeeed�dd�Zeedddd�dd	�ZdS)
�ASTPostfixOp��idPrefixrrqcCstt|���dSr�ro�rr�rrrrr;szASTPostfixOp.get_idrr�Nr_cCstt|���dSr�rorrrrrr<>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__rFcCsd||j�dS�N�[�]r�rwrrrrIGszASTPostfixArray._stringifyr�cCsd||j�|�S)Nr�r�r�rrrrJszASTPostfixArray.get_idrr�Nr_cCs6|t�dd�7}|j�||||�|t�dd�7}dSr�r�rrrrrr<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__rFcCsd||j�S)N�.r�rwrrrrIXszASTPostfixMember._stringifyr�cCsd||j�|�S)NZdtr�r�rrrr[szASTPostfixMember.get_idrr�Nr_cCs&|t�dd�7}|j�|d||�dS)Nr�r/)rrfrNr<rrrrrr<^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__rFcCsd||j�S)Nr�r�rwrrrrIhsz$ASTPostfixMemberOfPointer._stringifyr�cCsd||j�|�S)Nr�r�r�rrrrksz ASTPostfixMemberOfPointer.get_idrr�Nr_cCs&|t�dd�7}|j�|d||�dS)Nr�r/)rr�rNr<rrrrrr<nsz,ASTPostfixMemberOfPointer.describe_signaturer�rrrrr�ds�r�c@sDeZdZeed�dd�Zeeed�dd�Zeeddd	d
�dd�Z	d	S)
�
ASTPostfixIncrFcCsdS�Nr�rrwrrrrIuszASTPostfixInc._stringifyr�cCsd|S)Nr�rr�rrrrxszASTPostfixInc.get_idrr�Nr_cCs|t�dd�7}dSr��rr�rrrrrr<{sz ASTPostfixInc.describe_signatureryrrrrr�ts
�r�c@sDeZdZeed�dd�Zeeed�dd�Zeeddd	d
�dd�Z	d	S)
�
ASTPostfixDecrFcCsdS�Nr�rrwrrrrI�szASTPostfixDec._stringifyr�cCsd|S)Nr�rr�rrrr�szASTPostfixDec.get_idrr�Nr_cCs|t�dd�7}dSr�r�rrrrrr<�sz ASTPostfixDec.describe_signatureryrrrrr��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__rFcCs
||j�Sr�r�rwrrrrI�szASTPostfixCallExpr._stringifyr�cCs:d|g}|jjD]}|�|�|��q|�d�d�|�S)Nr�rZr�)r��exprsr7rr\)rr�rrEr�rrrr�s

zASTPostfixCallExpr.get_idrr�r_cCs|j�||||�dSr�)r�r<rrrrrr<�sz%ASTPostfixCallExpr.describe_signature)rr	r
rrr*rrIrarrr<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__rFcCs0||j�g}|jD]}|�||��qd�|�S�Nr�)r$r�r7r\)rrGrE�prrrrI�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*rrIrarrr<rrrrr��s�r�c@sTeZdZeded�dd�Zeed�dd�Zeed�d	d
�Z	e
eddd
d�dd�Zd
S)�ASTExplicitCastr�)r�typr�cCs"|tvsJ�||_||_||_dSr�)�_id_explicit_castrr�r�)rrr�r�rrrr�szASTExplicitCast.__init__rFcCsP|jg}|�d�|�||j��|�d�|�||j��|�d�d�|�S)Nr�z>(r�r�)rr7r�r�r\rHrrrrI�s


zASTExplicitCast._stringifyrcCs"t|j|j�|�|j�|�Sr�)r�r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�)rrgrrfr�r<r�rrrrrr<�sz"ASTExplicitCast.describe_signature�rr	r
rrnrr*rIrarrr<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__rFcCsd||j�dS)Nztypeid(r�)r�rwrrrrI�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�)rrgrfr�r<rrrrrr<�szASTTypeId.describe_signature)rr	r
rrnrCrr*rrIrarrr<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__rFcCs6|jddvr"|jd||j�S|j||j�SdS)Nr�cnr`r�rwrrrrI�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�rrgrhr�r�r<rrrrrr<�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__rFcCsd||j�dS)Nz
sizeof...(r�rrwrrrrI
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�)rrgrfrr<rrrrrr<s�z%ASTSizeofParamPack.describe_signature)rr	r
rrr*rrIrarrr<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__rFcCsd||j�dS)Nzsizeof(r�r�rwrrrrIszASTSizeofType._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��rrgrfr�r<rrrrrr<$sz ASTSizeofType.describe_signature�rr	r
rr*rrIrarrr<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__rFcCsd||j�S)Nzsizeof r�rwrrrrI0szASTSizeofExpr._stringifyrcCsd|j�|�S)NZszr�rrrrr3szASTSizeofExpr.get_idrr�Nr_cCs2|t�dd�7}|t��7}|j�||||�dS)Nrt�rrgrhr�r<rrrrrr<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__rFcCsd||j�dS)Nzalignof(r�r�rwrrrrIAszASTAlignofExpr._stringifyrcCsd|j�|�S)NZatr�rrrrrDszASTAlignofExpr.get_idrr�Nr_cCsF|t�dd�7}|t�dd�7}|j�||||�|t�dd�7}dS)Nr=r�r�r�rrrrrr<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__rFcCsd||j�dS)N�	noexcept(r�r�rwrrrrISszASTNoexceptExpr._stringifyrcCsd|j�|�S)NZnxr�rrrrrVszASTNoexceptExpr.get_idrr�Nr_cCsF|t�dd�7}|t�dd�7}|j�||||�|t�dd�7}dS)Nrfr�r��rrgrfr�r<rrrrrr<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)rM�isNewTypeIdr��initListrqcCs||_||_||_||_dSr�)rMr�r�r�)rrMr�r�r�rrrrbszASTNewExpr.__init__rFcCsbg}|jr|�d�|�d�|jr6|�||j��nds>J�|jdurX|�||j��d�|�S)NrSznew Fr�)rMr7r�r�r�r\rHrrrrIis


zASTNewExpr._stringifyrcCsTdg}|�d�|�|j�|��|jdur@|�|j�|��n
|�d�d�|�S)Nr�rrZr�)r7r�rr�r\rDrrrrws


zASTNewExpr.get_idrr�r_cCst|jr|t�dd�7}|t�dd�7}|t��7}|jrL|j�||||�ndsTJ�|jdurp|j�||||�dS)NrSreF)	rMrrfrgrhr�r�r<r�rrrrrr<�s
zASTNewExpr.describe_signature)
rr	r
rCrrr*rrIrarrr<rrrrr�as��r�c@sTeZdZeeed�dd�Zeed�dd�Ze	ed�dd	�Z
eed
ddd
�dd�ZdS)�
ASTDeleteExpr�rM�arrayr�cCs||_||_||_dSr�r�)rrMr�r�rrrr�szASTDeleteExpr.__init__rFcCsHg}|jr|�d�|�d�|jr.|�d�|�||j��d�|�S)NrSzdelete z[] r�)rMr7r�r�r\rHrrrrI�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)NrSrTr�)rMrrfrgrhr�r�r<rrrrrr<�sz ASTDeleteExpr.describe_signature)
rr	r
rCrnrr*rrIrarrr<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__rFcCs:dg}|�||j��|�d�|�||j��d�|�S�Nr�r�r�)r7r�r�r\rHrrrrI�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�)rrfr�r<r�rrrrrr<�szASTCastExpr.describe_signaturer�rrrrr��s�r�c@sZeZdZeeeed�dd�Zeed�dd�Ze	ed�dd	�Z
eed
ddd
�dd�ZdS)�ASTBinOpExpr�r��opscCs8t|�dksJ�t|�t|�dks(J�||_||_dSrO�rr�r��rr�r�rrrr�szASTBinOpExpr.__init__rFcCstg}|�||jd��tdt|j��D]@}|�d�|�|j|d�|�d�|�||j|��q(d�|�S�Nrrr`r��r7r�r^rr�r\�rrGrEr�rrrrI�s

zASTBinOpExpr._stringifyrcCsn|dksJ�g}tt|j��D].}|�t|j|�|�|j|�|��q|�|jd�|��d�|�S)Nr�rbr��r^rr�r7r�r�rr\�rrrEr�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^rrrhr�r�rgr��rr!r"r#r�r�r�rrrr<�s(zASTBinOpExpr.describe_signature)
rr	r
rrnrrr*rIrarrr<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�rT�rUr�rVrrrW�rXz+ASTBracedInitList.get_id.<locals>.<genexpr>�r\r�rrrVrr�szASTBracedInitList.get_idrFcs4�fdd�|jD�}|jrdnd}dd�|�|fS)Ncsg|]}�|��qSrrr�rGrr�
<listcomp>rXz0ASTBracedInitList._stringify.<locals>.<listcomp>r�r�z{%s%s}�, )r�rr\)rrGr�rrrrrIszASTBracedInitList._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�})r6rrfr�rhr<r�rr!r"r#r�rjr�rrrr<s
z$ASTBracedInitList.describe_signature)rr	r
rrrnrCrrarrr*rIrr<rrrrr��s��r�c@sbeZdZeeeefeed�dd�Ze	ed�dd�Z
eed�dd	�Ze
ed
ddd
�dd�ZdS)�ASTAssignmentExprr�cCs8t|�dksJ�t|�t|�dks(J�||_||_dSrOr�r�rrrrszASTAssignmentExpr.__init__rFcCstg}|�||jd��tdt|j��D]@}|�d�|�|j|d�|�d�|�||j|��q(d�|�Sr�r�r�rrrrIs

zASTAssignmentExpr._stringifyrcCsbg}tt|j��D].}|�t|j|�|�|j|�|��q|�|jd�|��d�|�S)Nrbr�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�rrrrrr</s(z$ASTAssignmentExpr.describe_signature)rr	r
rrrnr�rrr*rIrarrr<rrrrrs 
�rc@sTeZdZeed�dd�Zeed�dd�Ze	ed�dd	�Z
eed
ddd
�dd�ZdS)�ASTCommaExpr�r�cCst|�dksJ�||_dSr)rr��rr�rrrr>szASTCommaExpr.__init__rFcsd��fdd�|jD��S)Nrc3s|]}�|�VqdSr�rrrrrrWCrXz*ASTCommaExpr._stringify.<locals>.<genexpr>rrwrrrrIBszASTCommaExpr._stringifyrcCsdtd}g}tt|j�d�D]$}|�|�|�|j|�|��q|�|jd�|��d�|�S)Nr�rrbr�)r�r^rr�r7rr\)rr�id_rEr�rrrrEs
zASTCommaExpr.get_idrr�Nr_cCsb|jd�||||�tdt|j��D]6}|t�dd�7}|t��7}|j|�||||�q&dS)Nrrr�)r�r<r^rrrfrh)rr!r"r#r�r�rrrr<Ns
zASTCommaExpr.describe_signature)
rr	r
rrnrr*rrIrarrr<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__rFcCs|jSr�r�rwrrrrI[szASTFallbackExpr._stringifyrcCs
t|j�Sr�)rr�rrrrr^szASTFallbackExpr.get_idrr�Nr_cCs|t�|j|j�7}dSr�)r
r�r�rrrrrr<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>rcCsdSrBrrrrrrnszASTOperator.is_anoncCsdS�NTrrrrrrCqszASTOperator.is_operatorrcCs
t��dSr��rprrrrrtszASTOperator.get_idrr�N�r!�	identnoder#r�rqcCs
t��dS)zARender the prefix into signode, and the last part into identnode.Nr�rr!rr#r�rrr�_describe_identifierwsz ASTOperator._describe_identifierr c
Cs�t|�|dkr2t��}|�||||�||7}n�|dkr�|t|�|}tjddd|ddd�}	|��|	d<t��}
|�||
||�|
�	�}|	t�||�7}	||	7}n t�
�}|�||||�||7}dS)Nr.r'r�r(rr)r-)r6rr6rrrr5r
r��astextre)
rr!r"r#r$r%r�ZmainNamer:r;�	containerr�ZaddNamerrrr<|s*
�
zASTOperator.describe_signature)rr	r
rCrrCrarrrrr<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�r8)rr�idsrrrr�s

�zASTOperatorBuildIn.get_idrFcCs0|jdvs|jddvr"d|jSd|jSdS)N�rer�rTr�r�abcnox�	operator rjrrwrrrrI�s
zASTOperatorBuildIn._stringifyrr�rcCsL|t�dd�7}|jdvs(|jddvr4|t��7}|t�|j|j�7}dS)Nrjrrr)rrgr�rhr�rrrrr�sz'ASTOperatorBuildIn._describe_identifier)rr	r
rrrarr*rIrrrrrrr�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_idrFcCsd||j�S)Nr3rrwrrrrI�szASTOperatorLiteral._stringifyrr�rcCs:|t�dd�7}|t�dd�7}|j�|d|dd|�dS)Nrj�""r'r�)rrgr�rr<rrrrr�sz'ASTOperatorLiteral._describe_identifier)rr	r
rrrarrr*rIrrrrrrr!�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_idrFcCsd�d||j�g�S)Nr�r )r\r�rwrrrrI�szASTOperatorType._stringifyrcCst|�Sr��rrrrr�get_name_no_template�sz$ASTOperatorType.get_name_no_templaterr�rcCs2|t�dd�7}|t��7}|j�|d||�dS)Nrjr')rrgrhr�r<rrrrr�sz$ASTOperatorType._describe_identifier)rr	r
rrarrr*rIr%rrrrrrr#�s�r#c@sReZdZedd�dd�Zeed�dd�Zeed�d	d
�Z	e
edddd
�dd�ZdS)�ASTTemplateArgConstantNr{cCs
||_dSr�r}r~rrrr�szASTTemplateArgConstant.__init__rFcCs
||j�Sr�r}rwrrrrI�sz!ASTTemplateArgConstant._stringifyrcCsD|dkrt|��dd�S|dkr0dt|�dSd|j�|�dS)Nrr`r�r��XrZ)rr�r|rrrrrr�s
zASTTemplateArgConstant.get_idrr�r_cCst|�|j�||||�dSr�)r6r|r<rrrrrr<�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|dusJ�||_||_dSr�)r(r))rr(r)rrrr�szASTTemplateArgs.__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�rT�rUr�rVrrrWrXz)ASTTemplateArgs.get_id.<locals>.<genexpr>r��Irrb�JrZ)r7r\r(rrr))rrrEr�rrVrr�s$
 





zASTTemplateArgs.get_idrFcs4d��fdd�|jD��}|jr(|d7}d|dS)Nrc3s|]}�|�VqdSr�rr+rrrrWrXz-ASTTemplateArgs._stringify.<locals>.<genexpr>r�r�r�)r\r(r)rHrrrrIszASTTemplateArgs._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�)r6rrfr(rhr<r))rr!r"r#r�rjr�rrrr<s
z"ASTTemplateArgs.describe_signature)rr	r
rrr&rCrrarrr*rIrr<rrrrr?�s��r?c@s2eZdZeed�dd�Zeedddd�dd	�ZdS)
�ASTTrailingTypeSpecrcCstt|���dSr�rorrrrr-szASTTrailingTypeSpec.get_idrr�Nr_cCstt|���dSr�rorrrrrr<0sz&ASTTrailingTypeSpec.describe_signaturersrrrrr/,s�r/c@s\eZdZeeeedd�dd�Zeed�dd�Zeed�d	d
�Z	e
edddd
�dd�ZdS)�ASTTrailingTypeSpecFundamentalN)rK�
canonNamesrqcCs<t|�dksJ�t|�t|�ks,J||f��||_||_dSr)rrKr1)rrKr1rrrr6sz'ASTTrailingTypeSpecFundamental.__init__rFcCsd�|j�S)Nr`)r\rKrwrrrrI=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.)r1�_id_fundamental_v1r7r\�_id_fundamental_v2r8)rrrEr�r�rrrr@s

��z%ASTTrailingTypeSpecFundamental.get_idrr�r_cCs:d}|jD]*}|s |t��7}nd}|t�||�7}q
dS)NTF)rKrrhZdesc_sig_keyword_type)rr!r"r#r�rjr�rrrr<Rs
z1ASTTrailingTypeSpecFundamental.describe_signature)rr	r
rrrr*rIrarrr<rrrrr05s�r0c@sBeZdZeed�dd�Zeed�dd�Zeeddd	d
�dd�Z	d	S)
�ASTTrailingTypeSpecDecltypeAutorFcCsdS)Nr�rrwrrrrI^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�)rrgrfrrrrrr<fsz2ASTTrailingTypeSpecDecltypeAuto.describe_signatureryrrrrr4]s
�r4c@sPeZdZed�dd�Zeed�dd�Zeed�dd	�Z	e
ed
ddd
�dd�ZdS)�ASTTrailingTypeSpecDecltyper�cCs
||_dSr�r�r�rrrrosz$ASTTrailingTypeSpecDecltype.__init__rFcCsd||j�dS)Nz	decltype(r�r�rwrrrrIrsz&ASTTrailingTypeSpecDecltype._stringifyrcCs"|dkrt��d|j�|�dS)NrZDTrZ)r)r�rrrrrrusz"ASTTrailingTypeSpecDecltype.get_idrr�Nr_cCsF|t�dd�7}|t�dd�7}|j�||||�|t�dd�7}dS)NrRr�r�r�rrrrrr<zsz.ASTTrailingTypeSpecDecltype.describe_signaturer�rrrrr5ns�r5c@sleZdZeeeedd�dd�Zeed�dd��Ze	ed�d	d
�Z
eed�dd
�Ze
edddd�dd�ZdS)�ASTTrailingTypeSpecNameN)r$�
nestedName�placeholderTyperqcCs||_||_||_dSr�)r$r7r8)rr$r7r8rrrr�sz ASTTrailingTypeSpecName.__init__rcCs|jSr��r7rrrrrN�szASTTrailingTypeSpecName.namercCs|j�|�Sr�)r7rrrrrr�szASTTrailingTypeSpecName.get_idrFcCsZg}|jr |�|j�|�d�|�||j��|jdurP|�d�|�|j�d�|�S)Nr`r�)r$r7r7r8r\rHrrrrI�s


z"ASTTrailingTypeSpecName._stringifyrr�r_cCs�|jr&|t�|j|j�7}|t��7}|jj||||d�|jdur�|t��7}|jdkrl|t�dd�7}nZ|jdkr�|t�dd�7}|t�dd�7}|t�dd�7}|t�dd�7}nds�J|j��dS)Nr.r@r�rRr�r�F)r$rrgrhr7r<r8rfrrrrrr<�s


z*ASTTrailingTypeSpecName.describe_signature)rr	r
rrJrrrmrNrarr*rIrr<rrrrr6�s��r6c@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_idrFcCs|jr
dS||j�SdS�Nr�)r>r=rwrrrrI�szASTFunctionParameter._stringifyrr_cCs8t|�|jr |t�dd�7}n|jj||||d�dS)Nr�r.)r6r>rrfr=r<rrrrrr<�sz'ASTFunctionParameter.describe_signature)F)NN)
rr	r
rrCrrarrr*rIrr<rrrrr:�s���r:c@sDeZdZeed�dd�Zeed�dd�Ze	eddd	d
�dd�Z
d	S)
�ASTNoexceptSpecr�cCs
||_dSr�r�r�rrrr�szASTNoexceptSpec.__init__rFcCs|jrd||j�dSdS)Nr�r�rfr�rwrrrrI�szASTNoexceptSpec._stringifyrr�Nr_cCsL|t�dd�7}|jrH|t�dd�7}|j�|d||�|t�dd�7}dS)Nrfr�r'r��rrgr�rfr<rrrrrr<�s
z"ASTNoexceptSpec.describe_signature�rr	r
rrnrr*rrIrr<rrrrrF�s
�rFc@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�rLrJrKrLrMrNrOrP)rr(r�rLrJrKrLrMrNrOrPrrrr�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�r7rLrJr\rDrrr�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�rTr+rVrrrW
rXz7ASTParametersQualifiers.get_param_id.<locals>.<genexpr>r�c3s|]}|���VqdSr�rTr+rVrrrWrX)rr(r\rrrVr�get_param_idsz$ASTParametersQualifiers.get_param_idrFcCs0g}|�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�)
r7r(rr�rLrJrKrLrNrMrOrPr\)rrGrErjr��attrrrrrIsB













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}|jdv�sJ�|jdk�r&|t�dd�7}n|t�|j|j�7}dS)Nr.r�T)Znoemphr0r.r�r�Fr'r��r!r&rqcSs |t��7}|t�||�7}dSr��rrhrg�r!r&rrr�	_add_annoIsz=ASTParametersQualifiers.describe_signature.<locals>._add_annor�rLr�rNrMr���0rTrSra)r6rZdesc_parameterlistr(Zdesc_parameterr<rfrhrrr�rLrJrKrLr�rNrMrOrPr�rg)rr!r"r#r�Z	paramlistr=r0rjr_r[rrrr<3s`








z*ASTParametersQualifiers.describe_signature)rr	r
rr:rCrrrFr$rrmrRrarWrXr*rIrr<rrrrrI�s

�#�rIc@sDeZdZeedd�dd�Zeed�dd�Ze	dd	dd
�dd�Z
dS)
�ASTExplicitSpecN�r�rqcCs
||_dSr�r�r�rrrroszASTExplicitSpec.__init__rFcCs>dg}|jdur4|�d�|�||j��|�d�d�|�S)NrYr�r�r�)r�r7r\rHrrrrIrs


zASTExplicitSpec._stringifyrr��r!r#r�rqcCsP|t�dd�7}|jdurL|t�dd�7}|j�|d||�|t�dd�7}dS)NrYr�r'r�rG)rr!r#r�rrrr<zs

z"ASTExplicitSpec.describe_signaturerHrrrrrbns
�rbc@sneZdZeeeeeeeeeeeeeedd�
dd�Z	ddd�dd�Z
eed�d	d
�Ze
dddd
�dd�ZdS)�ASTDeclSpecsSimpleN)
�storage�threadLocalr`r��explicitSpecrMrNrOr�rLr^rOrqc

CsL||_||_||_||_||_||_||_||_|	|_|
|_	||_
||_dSr�)rfrgr`r�rhrMrNrOr�rLr^rO)
rrfrgr`r�rhrMrNrOr�rLr^rOrrrr�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�)
rerfrgr`r�rhrMrNrOr�rLr^rO)rrirrr�	mergeWith�s










�zASTDeclSpecsSimple.mergeWithrFcs�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)rUr[rrrrW�rXz0ASTDeclSpecsSimple._stringify.<locals>.<genexpr>rzr`r^r�rMrNrOr�rLr`)�extendrOrfr7rgr`r^r�rhrMrNrOr�rLr\rHrrrrI�s2








zASTDeclSpecsSimple._stringifyrr�rdcsd�|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)rOrrhr<rrrCrfrgr`r^r�rhrMrNrOr�rL)rr!r#r�r[rnrrlrr<�s@








z%ASTDeclSpecsSimple.describe_signature)rr	r
rrCrrbrr$rrjr*rIrr<rrrrre�s��rec@sXeZdZeeeedd�dd�Zeed�dd�Ze	ed�d	d
�Z
eedddd
�dd�ZdS)�ASTDeclSpecsN)�outer�	leftSpecs�
rightSpecs�trailingrqcCs,||_||_||_|j�|j�|_||_dSr�)rprqrrrj�allSpecs�trailingTypeSpec)rrprqrrrsrrrr�s
zASTDeclSpecs.__init__rcCs�|dkrLg}|�|j�|��|jjr0|�d�|jjrB|�d�d�|�Sg}|jjrb|�d�|jjrt|�d�|jdur�|�|j�|��d�|�S)NrrSr�r�rT)r7rurrtr�rLr\rDrrrr�s 





zASTDeclSpecs.get_idrFcCs�g}||j�}t|�dkr$|�|�|jr�t|�dkr@|�d�|�||j��t|j�}t|�dkr�t|�dkr||�d�|�|�d�|�S�Nrr`r�)rqrr7rurrrr\)rrGrEr��rrrrrI		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)	r6rrqr<rurrhrrr)rr!r"r#r�ZnumChildrenrmrrrr<	s �zASTDeclSpecs.describe_signature)
rr	r
rrer/rrarr*rIrr<rrrrro�s��roc@sPeZdZed�dd�Zeed�dd�Zeed�dd	�Z	e
ed
ddd
�dd�ZdS)�ASTArray��sizecCs
||_dSr�ry)rrzrrrr2	szASTArray.__init__rFcCs |jrd||j�dSdSdS)Nr�r�r�ryrwrrrrI5	szASTArray._stringifyrcCsR|dkrdS|dkr0|jr,dt|j�dSdS|jrJd|j�|�dSdSdS)Nr�Ar�rZA_)rzrrrrrrr;	szASTArray.get_idrr�Nr_cCsDt|�|t�dd�7}|jr0|j�|d||�|t�dd�7}dS)Nr�r'r�)r6rrfrzr<rrrrrr<H	s
zASTArray.describe_signaturer�rrrrrx1	s
�rxc@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�rorrrrrNR	szASTDeclarator.nameN�rNrqcCstt|���dSr�ror�rrrrNV	scCstt|���dSr�rorrrr�isPackZ	szASTDeclarator.isPackcCstt|���dSr�rorrrrrR^	szASTDeclarator.function_paramsr�cCstt|���dSr�rorrrrrLb	szASTDeclarator.trailingReturncCstt|���dSr�rorrrr�require_space_after_declSpecsf	sz+ASTDeclarator.require_space_after_declSpecsrcCstt|���dSr�rorrrrrWi	szASTDeclarator.get_modifiers_idcCstt|���dSr�rorrrrrXl	szASTDeclarator.get_param_idcCstt|���dSr�rorrrr�get_ptr_suffix_ido	szASTDeclarator.get_ptr_suffix_id�r�returnTypeIdrqcCstt|���dSr�ro�rrr�rrr�get_type_idr	szASTDeclarator.get_type_idcCstt|���dSr�rorrrr�is_function_typeu	szASTDeclarator.is_function_typerr�r_cCstt|���dSr�rorrrrrr<x	sz ASTDeclarator.describe_signature)rr	r
rmrJrN�setterrCr~rr:rRrLrrarrWrXr�r�r�rr<rrrrr|Q	s&�r|c@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�rrrrrN�	szASTDeclaratorNameParamQual.namer}cCs
||_dSr�r�r�rrrrN�	scCsdSrBrrrrrr~�	sz!ASTDeclaratorNameParamQual.isPackcCs|jjSr�)r�rRrrrrrR�	sz*ASTDeclaratorNameParamQual.function_paramsr�cCs|jjSr�)r�rLrrrrrL�	sz)ASTDeclaratorNameParamQual.trailingReturnrcCs"|jr|j�|�Std|��dS)Nz,This should only be called on a function: %s)r�rWr8rrrrrW�	sz+ASTDeclaratorNameParamQual.get_modifiers_idcCs|jr|j�|�SdSdSr�)r�rXrrrrrX�	sz'ASTDeclaratorNameParamQual.get_param_idcsd��fdd�|jD��S)Nr�c3s|]}|���VqdSr�rTr+rVrrrW�	rXz?ASTDeclaratorNameParamQual.get_ptr_suffix_id.<locals>.<genexpr>)r\r�rrrVrr��	sz,ASTDeclaratorNameParamQual.get_ptr_suffix_idr�cCsz|dksJ�g}|�|�|��|jrf|�|�|��|�d�|�|�|�|�|��|�d�n
|�|�d�|�S)Nr��FrZr�)r7r�r�rWrXr\�rrr�rErrrr��	s


z&ASTDeclaratorNameParamQual.get_type_idcCs
|jduSr�r�rrrrr�	sz8ASTDeclaratorNameParamQual.require_space_after_declSpecscCs
|jduSr�)r�rrrrr��	sz+ASTDeclaratorNameParamQual.is_function_typerFcCsTg}|jr|�||j��|jD]}|�||��q |jrJ|�||j��d�|�Sr�)r�r7r�r�r\)rrGrEr�rrrrI�	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
rJrrxrIrrmrNr�rCr~r:rRrLrarrWrXr�r�rr�r*rIrr<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�rzcCs||_||_dSr�r�)rr�rzrrrr�	sz"ASTDeclaratorNameBitField.__init__rcCs|jSr�r�rrrrrN�	szASTDeclaratorNameBitField.nameNr}cCs
||_dSr�r�r�rrrrN�	srcCsdSr�rrrrrrX�	sz&ASTDeclaratorNameBitField.get_param_idcCsdSr�rrrrrr��	sz+ASTDeclaratorNameBitField.get_ptr_suffix_idcCs
|jduSr�r�rrrrr�	sz7ASTDeclaratorNameBitField.require_space_after_declSpecscCsdSrBrrrrrr��	sz*ASTDeclaratorNameBitField.is_function_typerFcCs>g}|jr|�||j��|�d�|�||j��d�|�S)N� : r�)r�r7rzr\rHrrrrI�	s
z$ASTDeclaratorNameBitField._stringifyrr�r_cCs^t|�|jr |j�||||�|t��7}|t�dd�7}|t��7}|j�||||�dS)Nr*)r6r�r<rrhrfrzrrrrrr<�	sz,ASTDeclaratorNameBitField.describe_signature)rr	r
rJrnrrmrNr�rarrXr�rCrr�r*rIrr<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�rLrOrqcCs$|sJ�||_||_||_||_dSr��r�r�rLrO)rr�r�rLrOrrrr
s
zASTDeclaratorPtr.__init__rcCs|jjSr��r�rNrrrrrN
szASTDeclaratorPtr.namer}cCs||j_dSr�r�r�rrrrN
scCs|jjSr��r�rRrrrrrR
sz ASTDeclaratorPtr.function_paramsr�cCs|jjSr��r�rLrrrrrL
szASTDeclaratorPtr.trailingReturncCs
|j��Sr��r�rrrrrr
sz.ASTDeclaratorPtr.require_space_after_declSpecsrFcCs�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�)rOr7rr�rLr�rr\�rrGrEr�rrrrI
s 






zASTDeclaratorPtr._stringifyrcCs|j�|�Sr��r�rWrrrrrW1
sz!ASTDeclaratorPtr.get_modifiers_idcCs|j�|�Sr��r�rXrrrrrX4
szASTDeclaratorPtr.get_param_idcCs�|dkrJdg}|jr|�d�|jr.|�d�|�|j�|��d�|�S|j�|�g}|�d�|jrr|�d�|jr�|�d�d�|�S)Nr�PrSr�r�)r�r7rLr�r�r\rDrrrr�7
s





z"ASTDeclaratorPtr.get_ptr_suffix_idr�cCsFdg}|jr|�d�|jr&|�d�|�|�|jj|d�|�d�S)Nr�rSr�r��r�)r�r7rLr�r�r\r�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�rxr^rrrr__
sz6ASTDeclaratorPtr.describe_signature.<locals>._add_annor�rL)
r6rrfrOr<rr�rLrhrrr�r)rr!r"r#r�r�r_rrrr<V
s"



z#ASTDeclaratorPtr.describe_signature)rr	r
r|rCrr$rrmrJrNr�r:rRrLrr*rrIrarWrXr�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�rOrqcCs|sJ�||_||_dSr��r�rO)rr�rOrrrrn
szASTDeclaratorRef.__init__rcCs|jjSr�r�rrrrrNs
szASTDeclaratorRef.namer}cCs||j_dSr�r�r�rrrrNw
scCsdSrrrrrrr~{
szASTDeclaratorRef.isPackcCs|jjSr�r�rrrrrR
sz ASTDeclaratorRef.function_paramsr�cCs|jjSr�r�rrrrrL�
szASTDeclaratorRef.trailingReturncCs
|j��Sr�r�rrrrr�
sz.ASTDeclaratorRef.require_space_after_declSpecsrFcCs\dg}|jD]}|�||��qt|j�dkrB|j��rB|�d�|�||j��d�|�S)Nr�rr`r�)rOr7rr�rr\r�rrrrI�
s

zASTDeclaratorRef._stringifyrcCs|j�|�Sr�r�rrrrrW�
sz!ASTDeclaratorRef.get_modifiers_idcCs|j�|�Sr�r�rrrrrX�
szASTDeclaratorRef.get_param_idcCs,|dkrd|j�|�S|j�|�dSdS)NrrV�r�r�rrrrr��
sz"ASTDeclaratorRef.get_ptr_suffix_idr�cCs |dksJ�|jj|d|d�S)Nr�rVr��r�r�r�rrrr��
szASTDeclaratorRef.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)	r6rrfrOr<rr�rrh)rr!r"r#r�r�rrrr<�
s
z#ASTDeclaratorRef.describe_signature)rr	r
r|rr$rrmrJrNr�rCr~r:rRrLrr*rrIrarWrXr�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|sJ�||_dSr��r�)rr�rrrr�
szASTDeclaratorParamPack.__init__rcCs|jjSr�r�rrrrrN�
szASTDeclaratorParamPack.namer}cCs||j_dSr�r�r�rrrrN�
scCs|jjSr�r�rrrrrR�
sz&ASTDeclaratorParamPack.function_paramsr�cCs|jjSr�r�rrrrrL�
sz%ASTDeclaratorParamPack.trailingReturncCsdSrBrrrrrr�
sz4ASTDeclaratorParamPack.require_space_after_declSpecsrFcCs"||j�}|jjrd|}d|S)Nr`r�r�rHrrrrI�
s
z!ASTDeclaratorParamPack._stringifyrcCs|j�|�Sr�r�rrrrrW�
sz'ASTDeclaratorParamPack.get_modifiers_idcCs|j�|�Sr�r�rrrrrX�
sz#ASTDeclaratorParamPack.get_param_idcCs,|dkrd|j�|�S|j�|�dSdS�Nr�Dpr�rrrrr��
sz(ASTDeclaratorParamPack.get_ptr_suffix_idr�cCs |dksJ�|jj|d|d�S)Nr�r�r�r�r�rrrr��
sz"ASTDeclaratorParamPack.get_type_idcCs
|j��Sr�r�rrrrr��
sz'ASTDeclaratorParamPack.is_function_typerr�r_cCsBt|�|t�dd�7}|jjr,|t��7}|j�||||�dSrE)r6rrfr�rNrhr<rrrrrr<�
s
z)ASTDeclaratorParamPack.describe_signature�rr	r
r|rrmrJrNr�rr:rRrLrCrr*rrIrarWrXr�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,|sJ�|sJ�||_||_||_||_dSr�)r�rLr�r�)rr�rLr�r�rrrr�
szASTDeclaratorMemPtr.__init__rcCs|jjSr�r�rrrrrN�
szASTDeclaratorMemPtr.namer}cCs||j_dSr�r�r�rrrrN�
scCs|jjSr�r�rrrrrR�
sz#ASTDeclaratorMemPtr.function_paramsr�cCs|jjSr�r�rrrrrLsz"ASTDeclaratorMemPtr.trailingReturncCsdSrrrrrrrsz1ASTDeclaratorMemPtr.require_space_after_declSpecsrFcCs|g}|�||j��|�d�|jr.|�d�|jrN|jrD|�d�|�d�|j��rb|�d�|�||j��d�|�S)Nz::*r�r`rLr�)r7r�r�rLr�rr\rHrrrrI
s





zASTDeclaratorMemPtr._stringifyrcCs |dkrt��n|j�|�SdS�Nr)r)r�rWrrrrrWsz$ASTDeclaratorMemPtr.get_modifiers_idcCs |dkrt��n|j�|�SdSr�)r)r�rXrrrrrXsz ASTDeclaratorMemPtr.get_param_idcCs*|dkrt��nt��|j�|�dSdSr�)r)rpr�r�rrrrr�%sz%ASTDeclaratorMemPtr.get_ptr_suffix_idr�cCsZ|dksJ�d}|jr|d7}|jr,|d7}|d7}||j�|�7}||7}|j�||�S)Nr�r�rSrT�M)r�rLr�rr�r�)rrr�ZnextReturnTypeIdrrrr�,szASTDeclaratorMemPtr.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'rSr�r\cSs|t�||�7}dSr�rxr^rrrr_Csz9ASTDeclaratorMemPtr.describe_signature.<locals>._add_annor�rL)r6r�r<rrfrrr�rLrhr�r)rr!r"r#r�r_rrrr<<s


z&ASTDeclaratorMemPtr.describe_signature)rr	r
rJrCr|rrmrNr�rr:rRrLrr*rrIrarWrXr�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 |sJ�|sJ�||_||_dSr��r�r�)rr�r�rrrrQszASTDeclaratorParen.__init__rcCs|jjSr��r�rNrrrrrNXszASTDeclaratorParen.namer}cCs||j_dSr�r�r�rrrrN\scCs|jjSr�)r�rRrrrrrR`sz"ASTDeclaratorParen.function_paramsr�cCs|jjSr�)r�rLrrrrrLdsz!ASTDeclaratorParen.trailingReturncCsdSrrrrrrrhsz0ASTDeclaratorParen.require_space_after_declSpecsrFcCs:dg}|�||j��|�d�|�||j��d�|�Sr�)r7r�r�r\rHrrrrIks

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

�

�z$ASTDeclaratorParen.get_ptr_suffix_idr�cCs*|dksJ�|j�||�}|jj||d�S)Nr�r�)r�r�r�)rrr�ZnextIdrrrr��szASTDeclaratorParen.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/)r6rrfr�r<r�rrrrrr<�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__rFcCs||j�dSrEr�rwrrrrI�szASTPackExpansionExpr._stringifyrcCs|j�|�}d|S)N�spr�r�rrrr�szASTPackExpansionExpr.get_idrr�Nr_cCs&|j�||||�|t�dd�7}dSrE)r�r<rrfrrrrrr<�sz'ASTPackExpansionExpr.describe_signature)rr	r
rrnr�rr*rrIrarrr<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�rrrrrr�szASTParenExprList.__init__rcsdd��fdd�|jD��S)Nzpi%sEr�c3s|]}|���VqdSr�rTrrVrrrW�rXz*ASTParenExprList.get_id.<locals>.<genexpr>rrrrVrr�szASTParenExprList.get_idrFcs"�fdd�|jD�}dd�|�S)Ncsg|]}�|��qSrrrrrrr�rXz/ASTParenExprList._stringify.<locals>.<listcomp>z(%s)r)r�r\)rrGr�rrrrI�szASTParenExprList._stringifyrr�r_cCsrt|�|t�dd�7}d}|jD]:}|sH|t�dd�7}|t��7}nd}|�||||�q"|t�dd�7}dS)Nr�Tr�Fr�)r6rrfr�rhr<rrrrr<�s
z#ASTParenExprList.describe_signature)rr	r
rrrnr�rrarrr*rIrr<rrrrr��s�r�c@sNeZdZdeeefedd�dd�Zee	d�dd�Z
ee	d	d
dd�dd
�ZdS)�ASTInitializerTN)r|�	hasAssignrqcCs||_||_dSr��r|r�)rr|r�rrrr�szASTInitializer.__init__rFcCs ||j�}|jrd|S|SdS�NrZr�)rrG�valrrrrI�s
zASTInitializer._stringifyrr�r_cCsLt|�|jr6|t��7}|t�dd�7}|t��7}|j�|d||�dS)Nr�r')r6r�rrhrfr|r<rrrrrr<�sz!ASTInitializer.describe_signature)T)
rr	r
rrnr�rCrr*rrIrr<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 |sJ�|sJ�||_||_dSr�)r�r�)rr�r�rrrr�szASTType.__init__rcCs|jjSr��r�rNrrrrrN�szASTType.namer}cCs||j_dSr�r�r�rrrrN�scCs|jjSr�)r�r~rrrrr~�szASTType.isPackcCs|jjSr�)r�rRrrrrrR�szASTType.function_paramscCs|jjSr�)r�rLrrrrrL�szASTType.trailingReturnr�r?c	Cs|dkr�g}|r�|dkrx|�|���|��|�|j�|��|�|j�|��|jjjsl|jj	r�|jj	jr�|�d�q�|dkr�|�|���|��q�t
|�ds�J�nF|j��r�t��|�|j�|��|�|j�
|��|�|j�|��d�|�Sg}|�r�|dk�r�|j�|�}|�|���||��|dk�r�|jj}|du�r�|j�
|�}|j�rl|j�|�}n|j�|�}|�|�|�|�|�|j�|��n2|dk�r�|�|���|��nt
|�d�s�J�n$|j�|�}|j�||�}|�|�d�|�S)Nr�functionZCEr�Fr�r�)r7�get_full_nested_namerr�rXrWr�rqrNrr�printr�r)r�r\r�rdrLr�)	rrr@r�rErRZtemplZtypeIdr�rrrr�s\
��









zASTType.get_idrFcCsRg}||j�}|�|�|j��r8t|�dkr8|�d�|�||j��d�|�Srv)r�r7r�rrr\)rrGrEr�rrrrI+s


zASTType._stringifycCs|jjrdSdSdS)Nr~r�)r�rurrrr�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�rrrrrhrrrrrr<:s
�zASTType.describe_signature)NN)rr	r
ror|rrmrJrNr�rCr~rr:rRrLrarrr*rIr�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|sJ�||_||_dSr��r�r��rr�r�rrrrIsz0ASTTemplateParamConstrainedTypeWithInit.__init__rcCs|jjSr��r�rNrrrrrNNsz,ASTTemplateParamConstrainedTypeWithInit.namecCs|jjSr��r�r~rrrrr~Rsz.ASTTemplateParamConstrainedTypeWithInit.isPackr�r?cCs2|dksJ�|r"|jjj|dd�S|j�|�SdS�Nr�FrA)rCr�rr�rDrrrrVsz.ASTTemplateParamConstrainedTypeWithInit.get_idrFcCs*||j�}|jr&|d7}|||j�7}|Sr�r�rHrrrrI_s

z2ASTTemplateParamConstrainedTypeWithInit._stringifyrr_cCsV|j�||||�|jrR|t��7}|t�dd�7}|t��7}|j�||||�dS)Nr�)r�r<r�rrhrfrrrrrr<fsz:ASTTemplateParamConstrainedTypeWithInit.describe_signature)NN)rr	r
r�rrmrJrNrCr~rarrr*rIrr<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�rrrrrNuszASTTypeWithInit.namecCs|jjSr�r�rrrrr~yszASTTypeWithInit.isPackr�r?cCsJ|dkr|j�||�S|dkr<|���|�d|j�|�S|���|�S)N�memberrr)r�rr�rDrrrr}s
�zASTTypeWithInit.get_idrFcCs4g}|�||j��|jr*|�||j��d�|�Sr�)r7r�r�r\rHrrrrI�s
zASTTypeWithInit._stringifyrr_cCs6t|�|j�||||�|jr2|j�||||�dSr�)r6r�r<r�rrrrrr<�sz"ASTTypeWithInit.describe_signature)NN)rr	r
r�r�rrmrJrNrCr~rarrr*rIrr<rrrrr;ps��	�r;c@sheZdZeedd�dd�Zdeeded�dd�Ze	ed	�d
d�Z
ed�d
d�Zeedddd�dd�Z
dS)�ASTTypeUsingN)rNr�rqcCs||_||_dSr�)rNr��rrNr�rrrr�szASTTypeUsing.__init__r�r?cCs|dkrt��|���|�Sr��r)r�rrDrrrr�szASTTypeUsing.get_idrFcCs>g}|�||j��|jr4|�d�|�||j��d�|�S)NrZr�)r7rNr�r\rHrrrrI�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')r6rNr<r�rrhrfrrrrrr<�szASTTypeUsing.describe_signature)NN)rr	r
rJr�rrarrr*rIr�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)r7rPrqcCs||_||_dSr��r7rP�rr7rPrrrr�szASTConcept.__init__rcCs|jSr�r9rrrrrN�szASTConcept.namer�r?cCs|dkrt��|���|�Sr�r�rDrrrr�szASTConcept.get_idrFcCs"||j�}|jr|||j�7}|Sr�r�rHrrrrI�s
zASTConcept._stringifyrr_cCs.|j�||||�|jr*|j�||||�dSr�)r7r<rPrrrrrr<�szASTConcept.describe_signature)NN)rr	r
rJr�rrmrNrarrr*rIrr<rrrrr��s���r�c@sHeZdZeeeedd�dd�Zeed�dd�Ze	edd	dd
�dd�Z
dS)
�ASTBaseClassN)rN�
visibilityr��packrqcCs||_||_||_||_dSr�)rNr�r�r�)rrNr�r�r�rrrr�szASTBaseClass.__init__rFcCs^g}|jdur$|�|j�|�d�|jr4|�d�|�||j��|jrT|�d�d�|�S)Nr`zvirtual r�r�)r�r7r�rNr�r\rHrrrrI�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�rrgrhr�rNr<r�rfrrrrrr<�s

�zASTBaseClass.describe_signature)rr	r
rJrrCrr*rIrr<rrrrr��s��r�c@s^eZdZeeeedd�dd�Zee	de	d�dd�Z
ee	d	�d
d�Ze
e	dddd
�dd�ZdS)�ASTClassN)rNrN�basesrqcCs||_||_||_dSr�)rNrNr�)rrNrNr�rrrr�szASTClass.__init__r�r?cCs|���|�Sr�)r�rrDrrrr�szASTClass.get_idrFcCsvg}|�||j��|jr$|�d�t|j�dkrl|�d�d}|jD]$}|sX|�d�d}|�||��qFd�|�S)NrYrr�TrFr�)r7rNrNrr�r\)rrGrErjr�rrrrI
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.rNrr*r�)r6rNr<rNrrhrgrr�rf�pop)rr!r"r#r�r�rrrr<
s
zASTClass.describe_signature)rr	r
rJrCrr�rrarrr*rIrr<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�rDrrrr'
szASTUnion.get_idrFcCs
||j�Sr�r�rwrrrrI,
szASTUnion._stringifyrr_cCs t|�|jj||||d�dS)Nr.)r6rNr<rrrrrr</
szASTUnion.describe_signature)rr	r
rJrrarrr*rIrr<rrrrr�#
s�r�c@sZeZdZeeedd�dd�Zeeded�dd�Ze	ed	�d
d�Z
eedddd
�dd�ZdS)�ASTEnumN)rN�scoped�underlyingTyperqcCs||_||_||_dSr�)rNr�r�)rrNr�r�rrrr6
szASTEnum.__init__r�r?cCs|dkrt��|���|�Sr�r�rDrrrr<
szASTEnum.get_idrFcCsZg}|jr |�|j�|�d�|�||j��|jrP|�d�|�||j��d�|�S)Nr`r�r�)r�r7rNr�r\rHrrrrIA
s

zASTEnum._stringifyrr_cCsbt|�|jj||||d�|jr^|t��7}|t�dd�7}|t��7}|jj|d||d�dS)Nr.r*r/)r6rNr<r�rrhrfrrrrrr<L
s
�zASTEnum.describe_signature)
rr	r
rJrr�rrarr*rIrr<rrrrr�5
s��r�c@sXeZdZeedd�dd�Zeeded�dd�Ze	ed	�d
d�Z
eedddd
�dd�ZdS)�
ASTEnumeratorN)rNr�rqcCs||_||_dSr�)rNr�)rrNr�rrrrZ
szASTEnumerator.__init__r�r?cCs|dkrt��|���|�Sr�r�rDrrrr^
szASTEnumerator.get_idrFcCs4g}|�||j��|jr*|�||j��d�|�Sr�)r7rNr�r\rHrrrrIc
s
zASTEnumerator._stringifyrr_cCs6t|�|j�||||�|jr2|j�|d||�dS)Nr')r6rNr<r�rrrrrr<j
sz ASTEnumerator.describe_signature)
rr	r
rJr�rrarrr*rIrr<rrrrr�Y
s�r�c@s@eZdZed�dd�Zeed�dd�Zeeddd	d
�dd�Z	d	S)
�ASTTemplateParamrcCstt|���dSr�rorrrr�get_identifierz
szASTTemplateParam.get_identifierrcCstt|���dSr�rorrrrr}
szASTTemplateParam.get_idrr�N)�
parentNoder"r#r�rqcCstt|���dSr�ro)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�
parameterPackrSrqcCs4|sJ�|r|dusJ�||_||_||_||_dSr�)r�rr�rS)rr�rr�rSrrrr�
sz)ASTTemplateKeyParamPackIdDefault.__init__rcCs|jSr�rrrrrr��
sz/ASTTemplateKeyParamPackIdDefault.get_identifierrcCs6|dksJ�g}|jr"|�d�n
|�d�d�|�S)Nr�r�rar�)r�r7r\rDrrrr�
s
z'ASTTemplateKeyParamPackIdDefault.get_idrFcCsx|jg}|jr(|jr|�d�|�d�|jrN|js>|�d�|�||j��|jrn|�d�|�||j��d�|�S)Nr`r�rZr�)r�r�rr7rSr\rHrrrrI�
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')	rrgr�r�rrhrfr<rSrrrrrr<�
sz3ASTTemplateKeyParamPackIdDefault.describe_signature)rr	r
rrrCr�rr�rarr*rIrr<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|sJ�||_dSr�r�r�rrrr�
szASTTemplateParamType.__init__rcCs |��}tt|d�gdgdd�S�NF�rM�r�rJr=�rr�rrrrN�
szASTTemplateParamType.namecCs|jjSr��r�r�rrrrr~�
szASTTemplateParamType.isPackcCs
|j��Sr��r�r�rrrrr��
sz#ASTTemplateParamType.get_identifierr�r?cCs2|dksJ�|r"|jjj|dd�S|j�|�SdSr�)rCr�rr�rDrrrr�
szASTTemplateParamType.get_idrFcCs
||j�Sr�r�rwrrrrI�
szASTTemplateParamType._stringifyrr_cCs|j�||||�dSr�)r�r<rrrrrr<�
sz'ASTTemplateParamType.describe_signature)NN�rr	r
r�rrmrJrNrCr~rr�rarrr*rIrr<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)�nestedParamsr�rqcCs |sJ�|sJ�||_||_dSr��r�r�)rr�r�rrrr�
sz%ASTTemplateParamTemplateType.__init__rcCs |��}tt|d�gdgdd�Sr�r�r�rrrrN�
sz!ASTTemplateParamTemplateType.namecCs|jjSr�r�rrrrr~�
sz#ASTTemplateParamTemplateType.isPackcCs
|j��Sr�r�rrrrr��
sz+ASTTemplateParamTemplateType.get_identifierr�r?cCs>|dksJ�|r"|jjj|dd�S|j�|�|j�|�SdS)Nr�rA)rCr�rr�r�rDrrrr�
sz#ASTTemplateParamTemplateType.get_idrFcCs||j�||j�Sr�r�rwrrrrI�
sz'ASTTemplateParamTemplateType._stringifyrr_cCs4|j�|d||�|t��7}|j�||||�dS)Nr/)r�r<rrhr�rrrrrr<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)r0rqcCs|sJ�||_dSr��r0)rr0rrrrsz ASTTemplateParamNonType.__init__rcCs |��}tt|d�gdgdd�Sr�r�r�rrrrNszASTTemplateParamNonType.namecCs|jjSr�)r0r~rrrrr~szASTTemplateParamNonType.isPackcCsd|jj}|r\t|j�dksJ�|jdjs.J�|jdjr>J�|jdj}t|t�sXJ�|SdSdS)Nrr)r0rNrrKr@r%�
isinstancer)rrNrErrrr�sz&ASTTemplateParamNonType.get_identifierr�r?cCs6|dksJ�|r"|jjj|dd�Sd|j�|�SdS)Nr�rAr)rCr�rr0rDrrrr#szASTTemplateParamNonType.get_idrFcCs
||j�Sr�r�rwrrrrI,sz"ASTTemplateParamNonType._stringifyrr_cCs|j�||||�dSr�)r0r<rrrrrr</sz*ASTTemplateParamNonType.describe_signature)NN)rr	r
rr;r<rrmrJrNrCr~rr�rarrr*rIrr<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|dusJ�||_dSr�)r�)rr�rrrr5szASTTemplateParams.__init__rcCsJ|dksJ�g}|�d�|jD]}|�|�|��q |�d�d�|�S)Nr�r,rZr�)r7r�rr\�rrrEr0rrrr9s


zASTTemplateParams.get_idrFcsBg}|�d�|�d��fdd�|jD���|�d�d�|�S)Nz	template<rc3s|]}�|�VqdSr�rr+rrrrWErXz/ASTTemplateParams._stringify.<locals>.<genexpr>z> r�)r7r\r�rHrrrrIBs

 
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�)rrgrfr�rhr<)rr!r"r#r�rjr0rrrr<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)Nri)r�desc_signature_line�sphinx_line_type)r�r!rrr�makeLineYszDASTTemplateParams.describe_signature_as_introducer.<locals>.makeLinerxr�Tr�Fr�)rrr�rgrfr�rhr<)
rr�r"r#r�r�r�ZlineNoderjr0rrr� describe_signature_as_introducerVs 
z2ASTTemplateParams.describe_signature_as_introducer)rr	r
rr�rrarrr*rIrr<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�rrrrNwsz%ASTTemplateIntroductionParameter.namecCs|jSr�)r�rrrrr~|sz'ASTTemplateIntroductionParameter.isPackcCs|jSr�rrrrrr��sz/ASTTemplateIntroductionParameter.get_identifierr�r?cCs4|dksJ�|r"|jjj|dd�S|jr,dSdSdS)Nr�rAr�ra)rCr�rr�rDrrrr�sz'ASTTemplateIntroductionParameter.get_idrcCs.|dksJ�|j�|�}|jr&d|S|SdS)Nr�r�)rrr�rDrrr�
get_id_as_arg�s
z.ASTTemplateIntroductionParameter.get_id_as_argrFcCs.g}|jr|�d�|�||j��d�|�S�Nr�r�)r�r7rr\rHrrrrI�s

z+ASTTemplateIntroductionParameter._stringifyrr_cCs0|jr|t�dd�7}|j�|||dd|�dSr�)r�rrfrr<rrrrrr<�sz3ASTTemplateIntroductionParameter.describe_signature)NN)rr	r
rrCrrmrJrNr~r�rarrr�r*rIrr<rrrrr�rs	�r�c@sZeZdZeeedd�dd�Zeed�dd�Z	e
ed�d	d
�Zeedde
dd
�dd�ZdS)�ASTTemplateIntroductionN)rKr�rqcCs t|�dksJ�||_||_dSr)rrKr�)rrKr�rrrr�sz ASTTemplateIntroduction.__init__rcCs�|dksJ�g}|�d�|jD]}|�|�|��q |�d�|�d�|�|j�|��|�d�|jD]}|�|�|��ql|�d�|�d�d�|�S)Nr�r,rZr'r�)r7r�rrKr�r\r�rrrr�s







zASTTemplateIntroduction.get_idrFcsRg}|��|j��|�d�|�d��fdd�|jD���|�d�d�|�S)Nr	rc3s|]}�|�VqdSr�r)rUr0rrrrW�rXz5ASTTemplateIntroduction._stringify.<locals>.<genexpr>z} r�)r7rKr\r�rHrrrrI�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'r	Tr�Fr
)rr�r�rKr<rfr�rh)	rr�r"r#r�r�r!rjr0rrrr��s
z8ASTTemplateIntroduction.describe_signature_as_introducer)rr	r
rJrr�rrarrr*rIrrCr�rrrrr��s�	�r�c@s`eZdZeeeefdd�dd�Zee	d�dd�Z
ee	d�d	d
�Ze
e	ddedd
�dd�ZdS)�ASTTemplateDeclarationPrefixN)rLrqcCs
||_dSr�)rL)rrLrrrr�sz%ASTTemplateDeclarationPrefix.__init__rcCs6|dksJ�g}|jD]}|�|�|��qd�|�S)Nr�r�)rLr7rr\)rrrEr�rrrr�s

z#ASTTemplateDeclarationPrefix.get_idrFcCs(g}|jD]}|�||��q
d�|�Sr�)rLr7r\)rrGrEr�rrrrI�s
z'ASTTemplateDeclarationPrefix._stringifyrr�)r!r"r#r�r�rqcCs*t|�|jD]}|�|d|||�qdS�Nr.)r6rLr�)rr!r"r#r�r�r�rrrr<�s
z/ASTTemplateDeclarationPrefix.describe_signature)rr	r
rrr�r�rrarrr*rIrrCr<rrrrr��s���r�c@sDeZdZedd�dd�Zeed�dd�Zej	edd	dd
�dd�Z
dS)
�ASTRequiresClauseNrccCs
||_dSr�r�r�rrrr�szASTRequiresClause.__init__rFcCsd||j�S)Nz	requires r�rwrrrrI�szASTRequiresClause._stringifyrr�r_cCs2|t�dd�7}|t��7}|j�||||�dS)Nrpr�rrrrrr<�sz$ASTRequiresClause.describe_signature)rr	r
rnrr*rrIrr�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�rd�requiresClauser��trailingRequiresClause�	semicolonrqc		Cs@||_||_||_||_||_||_||_||_d|_d|_	dSr�)
r@r�r�rdr�r�r�r�r��enumeratorScopedSymbol)	rr@r�r�rdr�r�r�r�rrrr
szASTDeclaration.__init__rc	Cs`|jr|j��nd}|jr$|j��nd}|jr8|j��nd}t|j|j|j|||j��||j	�Sr�)
rd�cloner�r�r�r@r�r�r�r�)rZtemplatePrefixCloneZrequiresClasueCloneZtrailingRequiresClasueClonerrrrs��
�zASTDeclaration.clonecCs|jjSr�)r�rNrrrrrN&szASTDeclaration.namecCs|jdkrdS|jjS)Nr�)r@r�rRrrrrrR*s
zASTDeclaration.function_paramsT)rrBrqcCs2|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�rZr�)
rdr)r@r�r�rr��
_id_prefixr7r�r�r�r\)rrrBrErrrr0s4


zASTDeclaration.get_idcCs|�td�Sr)r�_max_idrrrr�
get_newest_idNszASTDeclaration.get_newest_idrFcCs�g}|jr*|jdkr*|�|j�|�d�|jr@|�||j��|jr`|�||j��|�d�|�||j��|jr�|�d�|�||j��|jr�|�d�d�|�S)Nrmr`�;r�)r�r7rdr�r�r�r�r\rHrrrrIQs 



zASTDeclaration._stringifyr)r!r"r#�optionsrqc
Cs�t|�|jsJ�d|d<t��}d|_|jj|d<|jrZ|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}�n�|jdk�r$|t�dd�7}|t�
�7}�nV|jdk�r4�nF|jd
k�rD�n6|jdk�r�|jdv�s`J�|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}n|jdk�szJ|j��n:|jdk�rj|t�dd�7}|t�
�7}nd�szJ|j��|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�rI�rIrwr�rX�
enum-class�enum-structrwrFr�r)r6r�rr�r��isRedeclarationrdr<�getr�r7r�rgrhr@r�r�r�r�r�rf)
rr!r"r#rZmainDeclNodeZreqNoder$ZlastDeclNodeZtrailingReqNoderrrr<cs�
�




�z!ASTDeclaration.describe_signature)F)T)rr	r
rr�r�rrCrrrmrJrNrr:rRrarrr*rIrrr<rrrrr�	s$��
�r�c@s.eZdZeedd�dd�Zeed�dd�ZdS)�ASTNamespaceN�r7rdrqcCs||_||_dSr�)r7rd)rr7rdrrrr�szASTNamespace.__init__rFcCs4g}|jr|�||j��|�||j��d�|�Sr�)rdr7r7r\rHrrrrI�s
zASTNamespace._stringify)	rr	r
rJr�rr*rrIrrrrr
�s�r
c@s0eZdZeddeeefeedd�dd�Z	dS)�SymbolLookupResultr�N)�symbols�parentSymbolr@rir%rqcCs"||_||_||_||_||_dSr�)rrr@rir%)rrrr@rir%rrrr�s
zSymbolLookupResult.__init__)
rr	r
rrrr>rr?rrrrrr�s�rc@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  FcCsdsJ�dSrBrrrrr�__copy__�szSymbol.__copy__cCs(|jrds$J�ntddddddd�SdSrB)rCr�)r�memorrr�__deepcopy__�s
zSymbol.__deepcopy__N)r(rqcGs ttjtjdd�t|�dS)Nr���end)r�r��debug_indent_string�debug_indentrQrrr�debug_print�szSymbol.debug_printrcCsN|js:|jrJ�|jrJ�|jr$J�|jr.J�|jrJJ�n|jrJ|jsJJ�dSr�)rCr@rir%r��docnamerrrr�_assert_invariants�s



zSymbol._assert_invariants)r�r|rqcs$|dkrds J�nt��||�SdS)N�childrenF)�super�__setattr__)rr�r|��	__class__rrr�s
zSymbol.__setattr__)rCr@rir%r�r�linerqcCs~||_d|_d|_||_||_||_||_||_||_d|_	|�
�g|_g|_|jrd|jj�
|�|jrr||j_|��dSrB)rC�siblingAbove�siblingBelowr@rir%r�rr"rr�	_childrenZ
_anonChildrenr7r��!_add_template_and_function_params)rrCr@rir%r�rr"rrrr�s$zSymbol.__init__)r�rr"rqcCs�|��|jdusJ�|jdus$J�|jdus2J�|dus>J�|dusJJ�|dusVJ�||_||j_||_||_|��|��dSr�)rr�rr"r�r&)rr�rr"rrr�_fill_emptyszSymbol._fill_emptyc	Cs:tjrtjd7_t�d�|jr�|jjD]d}|��s:q,|jrVtddddd|d�}nd}t	|��d�}t
|gdgdd�}|�|g||j|j
�q,|jdu�r |jjdu�r |jjD]j}|jdur�q�|jj}|dur�q�tddddd|d�}|jr�J�t|j�dk�sJ�|�|g||j|j
�q�tj�r6tjd8_dS)Nrz"_add_template_and_function_params:�
templateParamFr��
functionParam)r��debug_lookuprrrir�r�r�r�r=rJ�_add_symbolsrr"rRr=rNrMrrK)r�tpr�rl�nn�fprrrr& s4


z(Symbol._add_template_and_function_paramscCs6|jdurdS||jjvsJ�|jj�|�d|_dSr�)rCr%�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$r7)rrZnewChildren�sChildrrrr1Ks





zSymbol.clear_docccs$|V|jD]}|��EdHqdSr�)r%�get_all_symbols)rr2rrrr3\s
zSymbol.get_all_symbols)r�NNccs.|jD]"}|V|j��sq|jEdHqdSr�)r%r@r�children_recurse_anon)rr�rrrr4as


zSymbol.children_recurse_anonrcCs�g}|}|jr |�|�|j}q|��g}|D]H}t|j|j�}|jdurf|�||j|j��f�q0|�||jdf�q0t	|�Sr�)
rCr7�reverser=r@r%r�rirr)rrr�r�rlrrrr5js

zSymbol.get_lookup_keycCsfg}|}|jr |�|�|j}q|��g}g}|D]"}|�t|j|j��|�d�q4t||dd�Sr�)rCr7r5r=r@r%rJ)rrr�rKrLrrrr�~s
zSymbol.get_full_nested_name)r@rir%�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@rir%r6r7r8r9rErrr�_find_first_named_symbol�s

�
zSymbol._find_first_named_symbol)	r@rir%r6r7r8r9r:rqc	
#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^rrN�endswithr~)r�r0r=Z	paramNameZargTxtZisArgPackExpansionZargName)r%rirr�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@rirr%�r�)r@r%rir6rr�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_stringrr4r%r#rB)r7r8rrr�
candidates�s


z.Symbol._find_named_symbols.<locals>.candidates�
candidate:rCrr�)r�r*rrr�rDrCr)
rr@rir%r6r7r8r9r:rArCrEr�r)r@r7r8rr%rir6rr;�sF

 



zSymbol._find_named_symbols)r7�
templateDecls�onMissingQualifiedSymbol�strictTemplateParamArgLists�ancestorLookupTyper6r7r8r9r:rqc
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�|��t|�ks�|��dt|�ks�J�nt|�|��dk�sJ�|j	}|}|j
�r6|j�r6|j}�q$|du�r�|d}
|
���s�|j�r�|j
|
j|||
d��r�t|�dk�r�|dk�r�|�r�|j�r�|jj|
jk�r�n�q�|j}�qRtj�r�t�d�t|�tjd�dd�d}|dd�D]�}|j}|j}|�r6|�r0|t|�k�sJ�||}|d7}nd}n*|�r\|t|�k�r\||}|d7}nd}|j|||||||	d�}|du�r�|||||�}|du�r�tj�r�tjd8_dSd}|}�q�tj�r�t�d�t|�tjd�dd�|d}|j}|j}|t|�k�r.|dt|�k�s$J�||}n|t|�k�s@J�d}|j||||||d|
d�}tj�r|t|�}tjd8_t|||||�S)Nrz_symbol_lookup:r>r�rznestedName:        ztemplateDecls:     r�css|]}t|�VqdSr�r$�rUr�rrrrWrXz(Symbol._symbol_lookup.<locals>.<genexpr>zstrictTemplateParamArgLists:zancestorLookupType:ztemplateShorthand: zmatchSelf:         zrecurseInAnon:     zcorrectPrimaryTemplateArgs: zsearchInSiblings:  r�r7r8r:rIzstarting point:rb�r6r7r8r9r�Fzhandle last name from:)r6r7r8r9r:)r�r*rrr�rDr\rQrrKrMrCrC�find_identifierr@r%r=r;�listr)rr7rGrHrIrJr6r7r8r9r:rKrZ	firstNameZ
iTemplateDeclrNr@r%rir�rrrr�_symbol_lookups�

�


���



�
�


��zSymbol._symbol_lookup)r7rGr�rr"rqcstjrrtjd7_t�d�tjd7_t�dd�dd�|D���t�d|�t�d��t�d	�����d
tttft	t
d
d�dd
�}|j|||dddddddd�
��dus�J�t�j
�}t|�dk�r�tj�rHt�d�tjd7_t�d�j�t�d�j�t�d�j�t�d��t�d�����tjd8_t�j�j�j�j���d�}tj�r|tjd8_|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�rrt�dt|	��t�dt|
��t�dt|��d
d �����fd!d"�}
t|
�dk�r�d}n�|
�}d
d
dd#��fd$d%�}�jd&k�r�t|
�dk�s�J�||
d|����}tj�rt�d'|�|
D]P}|jjd&k�r"|||�|j��}tj�r@t�d(|�||k�r|||��qt|	�dk�r�tj�r�t�d)�|du�r�t�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$rKrrrrW�rXz&Symbol._add_symbols.<locals>.<genexpr>z
nn:       z
decl:     zlocation: {}:{}r��rr@rir%rqc	Ssttjr^tjd7_t�d�tjd7_t�d|�t�d|�t�d|�tjd8_t||||dddd�S)Nrz'_add_symbols, onMissingQualifiedSymbol:�templateParams:�identOrOp:     ztemplateARgs:  r��rCr@rir%r�rr")r�r*rr�rr@rir%rrrrH�s
�z5Symbol._add_symbols.<locals>.onMissingQualifiedSymbolTF�rIrJr6r7r8r9r:rz _add_symbols, result, no symbol:rRrSztemplateArgs:  zdeclaration:   zlocation:      {}:{}rTr�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 symbolrTz end:   creating candidate symbol)r�r*rrr@rir%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*rrrr�)r�rZ�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*rrr\r�rrr>rr?rPrOrrrir@r%rr�r7rr@rr/r')rr7rGr�rr"rHrr�ZnoDeclZwithDeclZdupDeclr�rYrZr\�candIdZoldIdrrWrr+�s�

��	

�

	








zSymbol._add_symbolsr)ri�docnamesr#rqcCs�tjrtjd7_t�d�|dus*J�dd�}tjrFtjd7_|jD�]�}tjrzt�d|�tj��tjd7_|jr�|||�tjrLt�d�tjd8_qL|j|j|j	|j
dddddd�}t|�}tjr�t�d	t|��d
d�|D�}tj�rt�dt|��t|�d
k�r<|||�tjrLtjd8_qLd}	|j
du�rhtj�r^t�d�|d
}	n�|j
��}
tj�r�t�d|
�|D]^}|j
du�r�tj�r�t�d�|}	�q�|j
��}tj�r�t�d|�||
k�r�|}	�q�q�tj�rtjd8_|	du�r|||�qL|j
�r�|j|v�r�|	j
�sH|	�|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�|	�|||�qLtj�r�tjd8_dS)Nrzmerge_with:cSs|j�|�||_|��dSr�)r%r7rCr)r�
otherChildrrr�unconditionalAddCsz+Symbol.merge_with.<locals>.unconditionalAddzotherChild:
rF)r@rir%r6r7r8r9r:zraw candidate symbols:cSsg|]}|js|�qSr)r�rUr�rrrr`rXz%Symbol.merge_with.<locals>.<listcomp>z non-duplicate candidate symbols:rzno declaration in other childz
queryId:  zempty candidaterF�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%rDrr;r@rir%rOrr�rrr'r"rrr��logger�warning�
merge_with)rrir^r#r`r_ZcandiateIterrErZourChild�queryIdr�r]rN�msgrrrrg<s�


�









�

�zSymbol.merge_withrcCsZtjrtjd7_t�d�|r*|j}ng}|j||dddd�}tjrVtjd8_|S)Nrz	add_name:)r�rr")r�r*rrrLr+)rr7rdrGrErrr�add_name�s
�zSymbol.add_namecCs�tjrtjd7_t�d�|dus*J�|dus6J�|dusBJ�|j}|jrX|jj}ng}|�|||||�}tjr�tjd8_|S)Nrzadd_declaration:)r�r*rrrNrdrLr+)rr�rr"r7rGrErrr�add_declaration�s

zSymbol.add_declaration)r@r7r8r:rqcCs(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�rDr@r4r%r#)rr@r7r8r:�currentrr�rrrrN�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:FrMzname:          rRzid:            r�rz	not foundr�)
r�r*rrr�r%r�rr@r%r=r�rD)
rr�r�rNrirrEZcandr@r%rrr�
direct_lookup�sL


�
zSymbol.direct_lookup)r7rGr�r6r7r8r:rqc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�QualifiedSymbolIsTemplateParamsrnr�rQcs |jdur|jjdkr���dS)Nr()r�r@rU�rnrrrHs
z2Symbol.find_name.<locals>.onMissingQualifiedSymbolFrV)N�templateParamInQualifiedr��NNrr(rM)r�r*rrr�rDr8rrr>rr?rPrOrrrr�r@r=r@)rr7rGr�r6r7r8r:rHrXrEr�rror�	find_namesl


�
�
	

�

zSymbol.find_name)r�r�r6r7r8rqc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�rQcSsdSr�rrUrrrrH`sz9Symbol.find_declaration.<locals>.onMissingQualifiedSymbolFrVrZfakeDocnameForQuery�*rT)r�r*rrrNrdrLrrr>rr?rPrOrrrr@rir%rr�r/)rr�r�r6r7r8r7rGrHrXrZquerySymbolrhr�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)NrS�
z: z!!duplicate!! z	(r�r�)r�rrCr7rirr@r�r%rrr\)rrurErrrrD�s.





zSymbol.to_stringcCs6|�|�g}|jD]}|�|�|d��qd�|�S)Nrr�)rDr%r7rr\)rrurEr�rrrr�s
zSymbol.dump)N)8rr	r
rrr*�debug_show_treerr�staticmethodrrrrrrrr>r�r�r�rarr'r&r/r1rr3rmrr4r5rJr�r?rCr=r;rrrrPr+rgr�rjrkrNrmr	rrrtrDr�
__classcell__rrr rr��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.)rt�skip_ws�	skip_wordrurzr�r�r/r0rr�r-r1r3r5r4r�r�r.Z
last_match�groupr��UnicodeDecodeErrorr�r+)rr�r�Z	hasSuffixZfloatLitZregexZintLit�stringr$r�ZcharLitr�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�ZeFoldrE�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�)rrEr-rrr�_parse_primary_expressionCs
z*DefinitionParser._parse_primary_expression)rN�open�closerqcCs�|��|�|�sdS|�|�r(gdfSg}d}|��|��}|��|�d�rb|�t|��n
|�|�|��|�|�r�q�|�d�s�|�d||f�|j|kr0|dkr0|jd7_d}q�q0||fS)	NrqFr�r�z"Error in %s, expected ',' or '%s'.r
rT)	r�r�r��_parse_initializer_clauser7r�r�r�r�)rrNr�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-listr	r
)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��operatorCastZtypeOperatorCastr	z3Expecting '(' 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�rn�_parse_expression_fallbackr�r�r�r(r7r�r�r�r�r�r�r�r�r�r�r�r�r�)rZ
prefixTyper$rr�r�r�r�r��eTyper��header�errorsZeOuterZeInnerr�rNr�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'.rSreTzYSorry, neither new-placement nor parenthesised type-id in new-epression is supported yet.�rp�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�rEr�r�r�r�rMr�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�r7r�)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_opsrCrnr7r�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�)rzrarCrn)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�r7r��_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�r7rr
rrrrr�s
z"DefinitionParser._parse_expressionT)rr��allowrqc

CsJ|j}z|�WStyR}z,|r(|js*�|�d|�||_WYd}~n
d}~00|dus`J�|��|j}|�t�r�|j}n�ddddd�}g}	|j�st	|	�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�r	r�r�rrbrz0Could not find end of expression starting at %d.)r�r(ZallowFallbackExpressionParsing�warnr�r��
_string_rer�r�rr��keysr7r�r�r��stripr)
rrr�r�ZprevPosr�r�r|Zbracketsrrrrr�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�rp)
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|�r�|�r�J��q�q6|r6J�q6t||�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�r7r(r�r&r�)r�
prevErrorsr%r)r�ZparsedCommaZ	parsedEndr�r�r|r�rrr�_parse_template_argument_listish








:

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)
NFrSTrrxrjz#Expected identifier in nested name.z3Expected identifier in nested name, got keyword: %sz.Expected '::' in pointer to member (function).)r�r�rr�r7r�r�r2r�r�r��	_keywordsrr�r�r(�otherErrorsr=rJ)rr�rKrLrMrxr@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�r�|�d�|d	�|����n�|d
k�r|du�r�|�d�||��t|�dk�r�|�d�|d	�|����n�|dk�r.|du�r�|�d�||���nZ|dv�r~|du�rT|�d�||��t|�dk�r�|�d�|d	�|����n
|d
k�r�|du�r�|�d�||��t|�dk�r�|�d�|d	�|���n�|dk�rN|du�r�|�d�||��t|�dk�r|�d�|d	�|���t|�dk�r�|ddk�r�|�d�|d	�|���n:|du�rt|du�r�|�d�|��nd�s�Jd�|���g}|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.FzUnhandled type {})r�r��_simple_type_specifiers_rer�r7r�r�rr\rkr0)r�modifierZ
signedness�widthr�rKr�r1rrr�_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�r4r�r5r�r�r6)rrEr�r$�kr7r8rrr�_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�rpr�r�z<Expecting "," or ")" in parameters-and-qualifiers, got "%s".rLr�r�r�rfFr�r�r�rMrNr�r`z'Expected "%s" in initializer-specifier.z" or ")r�r�r�r7r:�_parse_type_with_initr�r�r�r�rFr��_parse_attributer\rI)rr�r(r=rLr�rJrKr�rLrMrNrOr[rPZvalidr�rrr� _parse_parameters_and_qualifiersbs�






��







�

���z1DefinitionParser._parse_parameters_and_qualifiers)rp�typedrqc
Cs(d}d}d}d}d}d}d}	d}
d}d}d}
g}|��|sP|rP|�d�}|rPq0|sh|rh|�d�}|rhq0|s�|dvr�|�d�r�d}q0|�d�r�d}q0|dkr�|�d�r�d}q0|�d	�r�d	}q0|s�|d
vr�|�d�}|r�q0|	s�|dvr�|�d�}	|	r�q0|dk�r.|
�s|�d
�}
|
�rq0|�s.|�d�}|�r.q0|dk�r�|�sP|�d�}|�rPq0|
�sh|�d�}
|
�rhq0|�s�|�d�}|�r�q0|�s�|�d�}|�r�d}|�d��r�|jdd�}|�s�|�d�|��|�d��s�|�d�t|�}q0|��}|�r
|�|�q0�q
q0t	|||||||	|
|||
|�S)zJust parse the simple ones.NrLr�)r�r�rurZr�rcrn)r�r�r`rNrOrzr�rMr^r�rYr�Fr�z=Expected constant expression after '(' in explicit specifier.r�z'Expected ')' to end explicit specifier.)
r�r�r�r�r�r�rbr�r7re)rrpr�rfrgr`r�rhrMrNrOr�rLr^rOrYr�r[rrr�_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".)r8r�r�ro)rrpr�rqrrrsrrrr�#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=rJr�r�r�r�r7rxrnr�r�rr�r�r�)
rr�r�r�r�r�rrlr�r�r|r�rzrrr�_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|�rR|j
dk�rR|d
k�rFtdgdd�S|j}
z|�
|||�}|WSt�yP}z�|�|df�|
|_zh|j
dk�s�J�|�d�|�|||�}
|�d��s�|�d�|jdd|d�}	t|
|	d�WWYd}~St�y:}z2|
|_|�|df�d}|�||�|�WYd}~n
d}~00WYd}~n
d}~00|�r2|j}
z6|jdd�}|��|�d��s�|�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�rh|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)r8r�r�r�r�r7r�r�r�r�r�r�r�r�r(r�r�r�r�r�r�)rr�r�r�r�r�rLrOr[r�r�rEZexParamQualr�ZexNoPtrParenr�rNr�rrrr�us��




���

�:
$

z"DefinitionParser._parse_declarator)rp�
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�rnr�)rrpr�Z
bracedInitZfallbackEndr�r|rr�r�_parse_initializer�s.


�z#DefinitionParser._parse_initializer)r�rprqc
Cs�|r(|dvrtd|��|dkr(|s(J�|dv�r�g}|j}z0|j|dd�}|jd|dd�}|jdd	�W�q�t�y�}�z|d
kr�d}n|dkr�d
}nds�J�|�||f�||_z|j|d�}|jd|d�}Wn�t�yx}	z�||_|d
kr�d}n|dk�rd}n
d�sJ�|�|	|f�|d
k�r<d}
|
d7}
n|dk�rLd}
n
d�sVJ�|�||
�|	�WYd}	~	n
d}	~	00WYd}~n
d}~00nPd
}|dk�r�d}n"|dk�r�d}d}n|dk�r�d}|j|d�}|j||d�}t||�S)z�
        named=False|'maybe'|True: 'maybe' is e.g., for function objects which
        doesn't need to name the arguments

        outer == operatorCast: annoying case, we should not take the params
        )r�r�r�r�r(r�r�)r�r�F)rpr�Tr�)ZallowSemicolonr�zIf just a namer�z"If the function has no return typer�r��If typedef-like declarationz!If the function has a return typez%Type must be either just a name or a ztypedef-like declaration.z(Error when parsing function declaration.Nr�r(r�)	r8r�r�r��
assert_endr(r7r�r�)rr�rpr�r�r�r�Z	exUntyped�descZexTypedr�r�rrrr�sh
�





	.


zDefinitionParser._parse_typec
Csr|r|dvsJ�|j||d�}|dkr<|j|d�}t||�S|j}d}zZ|j|dd�}|durjt|d�WS|��|jdkr�|jdkr�||_d}nt||�WSWn.ty�}z||_|}WYd}~n
d}~00|�d	�s�t|d�Sz|jddd
�}t||�WSt�yl}	zT|du�r|	�g}
|
�	|df�|
�	|	df�d
}|d7}|�
|
|�|	�WYd}	~	n
d}	~	00dS)Nr�r�r(r�F)rpr�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<r7r�)rr�rpr�r�r�r�r�ZtypeInitr�r�rirrrr�nsD



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)NrNr*Fr�Tr�r�)
r�r�r�r�r��_visibility_rer�r7r�r�)rrNrNr�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�rNr�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�rnr�r�r�)rrNr�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�r7r�)
rr�r�r�r�rrSr�r�r0ZeNonTyper�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�r7r(r�r�r�)	rrir��errr0ZeParamr�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)Nr	r�z2Expected identifier in template introduction list.zBExpected identifier in template introduction list, got keyword: %sr
r�z:Error in template introduction list. Expected ",", or "}".)r�r�r8r�r�r�r2r�r�r�rr7r�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)r7r�r�r�r�rr�)rZandExprsr�r�rrr�parse_and_exprts"


z?DefinitionParser._parse_requires_clause.<locals>.parse_and_exprFr�Trkrr)	r�r�rzrnr7r�rr�r�)rrZorExprsr�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�r7)rr@rLr�r�r�rrr�"_parse_template_declaration_prefix�s.


z3DefinitionParser._parse_template_declaration_prefix)r7rd�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
	)rQrLrr�rr�r^r7r�rkr�)rr7rdrrZnumArgsZisMemberInstantiationZ	numParamsZnumExtrariZnewTemplatesZ_irrr�_check_template_consistency�s<
��
z,DefinitionParser._check_template_consistency)r@r�rqc

Cs<|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�|��}nZ|dk�r�|��}nF|dk�r�|��}n2|dk�r�|��}n|dk�r�|��}n
d�s�J�|j|j|d|dkd�}|��|�d�}t||||||||�S)N)rIr�r�r�r�rKrXrz(Internal error, unknown objectType "%s".)rIrwr�r�r��varr�rKrXr
r	rz+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)r8r�r�r�r�rrr�r�r(r7r�r�r�r�r�r�r�r�rrNr�r�)
rr@r�r�rdr�r�r�r�r�r�r�r�rrr�parse_declaration�s|


&














�
�z"DefinitionParser.parse_declarationcCs8|jdd�}|��}|j||dd�}t||�}d|_|S)Nrd�r@F�r)rr�rr
r@)rrdrNrErrr�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�Tr	r�FzIf shorthand refzIf full function refzError in cross-reference.)
r�rr�r�r�r�rr
r@r(rr7r�)
rr�rdrNZres1�e1Zres2�e2r�rirrr�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�r7r�)rr�r�ZexExprr�ZexTyper�r�rrr�parse_expressionOs&
z!DefinitionParser.parse_expression)T)F)T)T)NT)N)F)_rr	r
rmrr|rr�r�rtr�rnr�r�r	rrr�rCr�r�r�r�r�r�r�r�r�r�r�rr�r�r�r�rr�r>r�r?r�rJr�r0r�r/r�rIr�rer�ror�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�rrr�rr
r
r
rrrrrrz�s�

<;���"


�_6$�
�, A2Y-d]
�8��w�1R
�-
=!&5�!��'E	rzrcCs ttd�d�}t|gdgdd�S)NZPhonyNameDueToErrorFr�)r=rrJ)rlrrr�_make_phony_error_nameesrcseZdZUdZeded�ddd�gZeee	d<e
je
jd�Ze
e	d	<ed
d�dd
�Zeeed
d�dd�Zeed�dd��Zeed�dd��Zeed�dd�Zeed�dd�Zeeed
d�dd�Zeed��fdd �Zeeed!�d"d#�Zd
d�d$d%�Zd
d�d&d'�Z �Z!S)(�	CPPObjectz%Description of a C++ language object.�template parameterzTemplate Parameters)ZtparamrT��labelrK�can_collapse�doc_field_types)�noindexentryr�option_specN)�astrqc	Cs�|jdksJ�|j}|sJ�|jdus*J�|jdus8J�|jdusFJ�|j}|sTJ�|jdurbdS|j}|durtdS|jdkr�dS|jdkr�dS|j}|j|jdddd�}|dur�dS|j�	�}||_
t||jdd||jj
|��dd�dS)NrrXFTrLrrT)r@r�r@rir%rCr�r�rNrr�r�r#r�get_source_info)rrr�r�
parentDeclZtargetSymbolr�Z	declClonerrr�_add_enumerator_to_parentxs<


�
�z#CPPObject._add_enumerator_to_parent)r�sigr!rqc	Cs�g}tdtd�D]>}z|j|d�}|�|�WqtyN|tksJJ�Yq0qtt|��}|d}|snJ�t�d��	|�s�t
jd|||��d�|j
�����d�}d}	|j
j}
|
dur�|
j}|
j}
|dur�q�|jd	kr�d
}	q�q�|	�sRd|jv�rR|}|jjjD](}
|�|
��r|t|
�d�}�q.�q|�|�}|jd�d
||ddf�||jjjv�r�|jjdd}||v�r�|j
j ||<|�s�J�|d�|�|dd�D].}|�s��q�||jjjv�r�|d�|��q�|jj�!|�dS)NrrVrz^[a-zA-Z0-9_]*$zMIndex id generation for C++ object "%s" failed, please report as bug (id=%s).rcr*FrKTr�entriesr�r�r(rKr)"r^rrr7r)rO�reversed�re�compiler�rerf�get_locationr�r�r�lstriprCr�r@rr#r}�cpp_index_common_prefix�
startswithr�get_index_textZ	indexnode�state�documentr�
domaindatarZnote_explicit_target)rrrr!rr�r��newestIdrNZisInConceptr�r�ZstrippedNamer$Z	indexTextrKrrr�add_target_and_index�s\�




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: {}rrc�cpp:last_symbol)r&r'Zsettingsr#�	temp_datar(r5�ref_contextr�r@rerfr�rr�rN�	argumentsr!rrjr�run)rr#�rootrrrirNr�r rrr5�s*



��


z
CPPObject.run)rr!rqc
Cs�|jjd}t|||jjd�}z|�|�}|��WnTty�}z<tj||d�t	�}|�
|�}||jjd<t|�WYd}~n
d}~00zx|j||jj
|��dd�}|jdus�J�|jdus�J�|jjd|_|jdur�|jjdus�J�||j_||jjd<Wndt�yf}zJ|j|jjd<td�}	|	|jj
|jj|j|f}	tj|	|d�WYd}~n
d}~00|jdk�r~|�|�t|j�}
d	|jv|
d	<|�|||
�|S)
Nr/�rdr}rcr1r)rr"rbrr)r#r2rzr}r.r�r(rerfrrj�
ValueErrorrkrrr#r$r�r�rr"r,r@r�dictrr<)rrr!rr�rr�rNr�rirrrr�handle_signaturesF

�
�$

zCPPObject.handle_signaturecCsP|jjd}|sJ�|jjd|_|jjd|_||jjd<|��|jjd<dS)Nr1r/r-)r#r2�oldParentSymbolr3�oldParentKeyr5)rZ
lastSymbolrrr�before_content@szCPPObject.before_contentcCs |j|jjd<|j|jjd<dS)Nr/r-)r;r#r2r<r3rrrr�
after_contentHszCPPObject.after_content)"rr	r
�__doc__r8rrrr7�__annotations__r�flagrr;r�rrrr*rmr+r,r%rzr.rrr<rr5r:r=r>ryrrr rrjs4

���*�8�%/rc@seZdZdZdS)�
CPPTypeObjectr�N�rr	r
r+rrrrrBMsrBc@seZdZdZdS)�CPPConceptObjectrKNrCrrrrrDQsrDc@seZdZdZdS)�CPPMemberObjectr�NrCrrrrrEUsrEc
@sdeZdZdZejeded�ddd�eded�d	d
dd�eded
�ddd�eded�ddd�gZdS)�CPPFunctionObjectr��	parameterZ
Parameters)r0rGr=�argumentTr�
exceptionsZThrowsr�)Zthrowsr{�	exception)rZrolenamerKr�retvalz
Return values)ZretvalsrKZreturnvalueZReturnsF)�returnsrq)rZhas_argrKN)	rr	r
r+rrr8rr7rrrrrFYs$
��
���rFc@s"eZdZdZeed�dd��ZdS)�CPPClassObjectrIrcCs|jdvsJ�|jS)Nr)r-rrrrr,nsz"CPPClassObject.display_object_typeN)rr	r
r+rmrr,rrrrrMksrMc@seZdZdZdS)�CPPUnionObjectr�NrCrrrrrNusrNc@seZdZdZdS)�
CPPEnumObjectrXNrCrrrrrOysrOc@seZdZdZdS)�CPPEnumeratorObjectrNrCrrrrrP}srPc@s@eZdZUdZdZdZdZdZiZe	e
d<eed�dd	�Z
d
S)�CPPNamespaceObjectzb
    This directive is just to tell Sphinx that we're documenting stuff in
    namespace foo.
    FrrTrrc
Cs�|jjdd}|jd��dvr,|}g}n�t|jd|��|jd�}z|��}|��WnFt	y�}z.t
j||��d�t�}t
|d�}WYd}~n
d}~00|�|j|j�}|g}||jjd<||jjd<|��|jjd	<gS)
Nr(r0r�ZNULLrarir7rcr/�cpp:namespace_stackr-)r#r(r4r�rzr!r}r
r�r(rerfrr
rjr7rdr2r5r3)r�
rootSymbolr��stackr�rr�rNrrrr5�s*
� zCPPNamespaceObject.runN)rr	r
r?�has_content�required_arguments�optional_arguments�final_argument_whitespacerr;r@rrr5rrrrrQ�s
rQc@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)
NrrRr7rcr/r(r0rSr-)r4r�rzr!r}r
r�r(rerfrr
r#r2rr(rjr7rdr7r5r3)rr�rr�rNZ	oldParentr�rUrrrr5�s.
� 
zCPPNamespacePushObject.runN�
rr	r
rVrWrXrYrr;r@rrr5rrrrrZ�s
rZc@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)
NrSrz=C++ namespace pop on empty stack. Defaulting to global scope.rcrbr(r0r/r-)r#r2rrrerfr!r�r(r5r3)rrUr�rrrr5�s�
zCPPNamespacePopObject.runNr[rrrrr\�s
r\cs:eZdZd	eededd��fdd�
Zdd�dd�Z�ZS)
�	AliasNodeNr)r�aliasOptionsr#�	parentKeyrqcsrt���||_||_|dur\d|jvrN|jdd}||jd<|��|jd<|jd|_n|dushJ�||_dS)Nr/r(r0r-)	rrrr^r2r(r5r3r_)rrr^r#r_r6r rrr�s


zAliasNode.__init__rcCs|j|j|jd|jd�S)N)r#r_)r!rr^r_rrrr�copy�s�zAliasNode.copy)NN)	rr	r
rr9rrr`ryrrr rr]�s��r]c@sDeZdZejdZeeeeee	e
ed�dd�Ze	dd�dd�Z
dS)	�AliasTransformr)r��maxdepth�skipThisr^�
renderOptionsr'rqc	Cs|dkrd}n|dkrd}n|d8}d}g}|sZt�dd�}	|�|	�|j�|	d|j|�|�r|rj|}
nDt��}t��}|�|�||_d|d<d	|d
<|d<d|d<|}
|j	D]>}
|
jdur�q�|
jj
d
vr�q�|j|
|d|||d�}|
�|�q�|�st
|j�dk�r|�|�|S)NrTrFr�rar(�domain�aliasr-�desctypeZnoindex)r(r)�rbrcr^rdr')rrr7r�r<r#�desc_contentr�r'r%r@�_render_symbolrkrr)rr�rbrcr^rdr'Zrecurser
r!ZchildContainer�contentr�r2Z
childNodesrrrrj�sH



�
zAliasTransform._render_symbolN)�kwargsrqcKs�|j�t�D�]x}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	��|�sJ�g}|�rzt|t��s.J�|}
|
j}|
j�rJ|
jj}ng}|j||d
ddddd
�\}}|du�r�g}nBt|t��s�J�|}|j}|j |d
dddd�}|du�r�|�!|�dd�|D�}t"|�dk�r$t�|d�}	|�!|	�|	��|	t�||�7}	tj
d||d�|�|	�qg}ddi}|D]F}|j#du�sHJ�|j$||j%d|j%d|j%||jd�}|�&|��q4|�|�qdS)Nr7rcrqr�r(r0�Target: �ParentKey: r�anyTF)r7rGr�r6r7r8r:�r6r7r8cSsg|]}|jdur|�qSr�r[rarrrr_rXz(AliasTransform.apply.<locals>.<listcomp>rz,Can not find C++ declaration for alias '%s'.rrb�norootrh)'r'�findallr]rrr_rzr#r}r
r�r(rerfrr�clearr6Zreplace_selfZdomainsr�rmr�rr�r
r7rdrLrrr�rNrtr7rr�rjr^rk)rrlr9rr_r�r�isShorthandr�r!rTrr�nsrNrG�
failReasonr�r�r
rdrErrr�apply%s�
�





�

�



��
�zAliasTransform.apply)rr	r
r"Zdefault_priorityr�rarCr9rrrrjrwrrrrra�s
�.rac@s6eZdZUejejd�Zeed<e	e
d�dd�ZdS)�CPPAliasObject�rbrqrrcCsd|jvr"|j�dd�\|_|_nd|j|_|_t��}|jj|_|j|d<|j|d<|d<g|_|j	�
dd�d|j	vd	�}|dr�|ddkr�tjd
|�
�d�|��}|D]}|�t|||jd��q�t��}|�|�|��|j�|j|j|�d
|jjd<|��|gS)a
        On purpose this doesn't call the ObjectDescription version, but is based on it.
        Each alias signature may expand into multiple real signatures (an overload set).
        The code is therefore based on the ObjectDescription version.
        r*rr�rer-rgrbrqryz�Error in C++ alias declaration. Requested 'noroot' but 'maxdepth' 1. When skipping the root declaration, need 'maxdepth' 0 for infinite or at least 2.rc)r#N�object)rN�splitrer-rr�r&r'rKrrrerfr!Zget_signaturesr7r]r#rir=Znested_parserkZcontent_offsetr2r>)rr9r^Z
signaturesrZcontentnoderrrr5�s2


��
zCPPAliasObject.runN)rr	r
rZnonnegative_intrArr;r@rrr5rrrrrx{s
�rxc@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*ror����r�rrSrbr�)	�
attributes�updater3r,�subrr@r"�rfind)rr#r}r~rr�Zdcolonrrr�process_link�s 


zCPPXRefRole.process_linkN)	rr	r
rrrCrr	r�rrrrr|�s�r|csBeZdZedd��fdd�Zeeeeefd�dd�Z	�Z
S)�CPPExprRoleN)�asCoderqcs t���|rd|_nd|_dS)Nzcpp-exprz	cpp-texpr)rr�
class_type)rr�r rrr�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)Nrvr`r7z!Unparseable C++ expression: %r
%srcr()r1r/r0r')r&r�rzr!r}rr(rerfrZdesc_inliner�r#r2rr(r<)rr&r�rr�rr!rrrr5�s$�
�2zCPPExprRole.run)rr	r
rCrr	rrrr5ryrrr rr��s	r�c@s8eZdZdZdZdZeed�dddd�eed�ddd�eed	�d
dd�eed�ddd�eed�dd�eed
�d
d�eed�ddd�eed�dd�eed�ddd�eed�ddddddd�d�
Ze	e	e
eeee
eeeeeeeeed�Ze�e�e�e�edd�e�e�e�e�e�e�edd�edd�d�
Zeddddddd�id�Zedd�dd�Zeeejdd�dd �Z e!dd!�d"d#�Z"e#ee$dd$�d%d&�Z%eee&eee!e'e(e)e'e)efd'�d(d)�Z*eee&eee!e'e)e'd'�d*d+�Z+eee&ee!e'e#e(ee'fd,�d-d.�Z,e-e(eeeeee.fd/�d0d1�Z/e'ed2�d3d4�Z0dS)5�	CPPDomainaC++ language domain.

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

    - Each object created from directives gets an assigned .objtype from ObjectDescription.run.
      This is simply the directive name.
    - Each declaration (see the distinction in the directives dict below) has a nested .ast of
      type ASTDeclaration. That object has .objectType which corresponds to the keys in the
      object_types dict below. They are the core different types of declarations in C++ that
      one can document.
    r(r{rIrwrr�r�r��funcr�rrKrXrzfunction parameterr)
rIr�r�r�r�rKrXrr)r()rIrwr�r�r�rr�rKrXr
r	rrdznamespace-pushz
namespace-poprfT)Z
fix_parens)r�F)
rorIrwr�r�r�rr�rKrXrr�ZtexprN)r0rKr0cCs�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:r0rz	before endz	after:z
	after endzclear_doc end:rK)r�rwr�r�rr1rO�items)rrrTrNZnDocnamerrrr1/s



zCPPDomain.clear_doc)r#rr'rqcCs2tjr.td|�t|jd�d��td|�dS)Nzprocess_doc:r0rzprocess_doc end:)r�rwr�r�r)rr#rr'rrr�process_docBs
zCPPDomain.process_doc)r;rqcCs|j�|jj�dSr�)r�r�r#r3)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:r0rz		self endz	other:z
	other endrKz	result:z	result endzmerge_domaindata end)r�rwr�r�rrgr#r�)rr^r�ZourNamesrNrrrr�merge_domaindataLs*�

zCPPDomain.merge_domaindata)r#�fromdocname�builderr�r�r9�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��|s�J�n|}|
�r�t|	t��sJ�|	}|j}|j�r$|jj}ng}|j�o>t|j�dk}|j||�ddd|d�\}}|du�r��dk�r�|dk�r�tt|����d}n|d}n.t|	t��s�J�|	}|j}|j|�dddd�}|du�s�|jdu�rt|�}|�d��s�|dk�rt|���d	S��d��r �dd��|jj�td����fdd�}|��sbtjd�|jj|���d�|j}|
�r�|��}|� ��!d�}n|� �}|j"}|�s�J��dk�r�|�#d��$�} d}!��	dd��s�|jd k�r�|
�rJ�jj%�r��d!k�r�|!d7}!�jj%�r�d"k�r| �&d#��r|!d7}!�dv�r�| �&d$��r�|�&d#��r�|!d7}!nn�jj%�r��d!k�rt|�&d��rt|!d7}!n.�d"k�r�| �&d��r�|�&d��s�| dd%�} n|�&d��r�|!d7}!|!dk�r�| d|!7} |t'�(| �7}t)||||�*�||�|jf}"|"S)&N)ror�r�r7)r�rqc
sz�dkr�dkr�|fSt�dd���jd�}z|��Wn4typ}z�dd�|fWYd}~Sd}~00�|fS)Nror�r�r7)rzr}r
r()r�Zparser2r)r#r9r�r�rr�findWarningos�&z2CPPDomain._resolve_xref_inner.<locals>.findWarningz&Unparseable C++ cross-reference: %r
%srcrqr-r0rmrnrT)r6r7r8r:rrprrpzstd::r�cpp:r�rcs>�dkrdS����}|r"�|vStd��f�ds:J�dS)NroTz"Type is %s, declaration type is %sF)Zobjtypes_for_roler�)Zobjtypes)�declTyprr�rr�	checkType�s
z0CPPDomain._resolve_xref_inner.<locals>.checkTypezcpp:%s targets a %s (%s).r*ZrefexplicitFr�ror�z
operator()rjr�)+rzr}r
r(r8r	rrerfrr�rmr�rr�r
r7rdrLrMrrKrrrr�rNrtr�r$r@rCr�rr"rr�rZadd_function_parenthesesr@r
rcr:r)#rr#r�r�r�r�r9r�r�rrtr�r�r�r�r_rTrrurNrGr:rrvr�r�ZtxtNamer�r��fullNestedNameZdisplayNamerrZaddParenrEr)r�r#r9rr�r�r�_resolve_xref_innerds�"

�




�




�
�

�
��



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

�&
zCPPDomain.resolve_any_xrefrc	cs�|jd}|��D]h}|jdur"q|js,J�|��}t|��d�}|���d�}|jj}|j}|j�	�}|||||dfVqdS)Nr0r*r)
r�r3r�rr�rr"rr@r)	rrTr�r�rNZdispnamer@rr)rrr�get_objectss



zCPPDomain.get_objects)r9rqcCsl|�dd�}|durdS|�dd�}|dus:t|j�dkr>dS|jd}|�|�}|��}d�t|�|g�S)Nr+r-rr0rS)rrr�rmr�r\r)rr9r�r_rTrZ
parentNamerrr�get_full_qualified_names

z!CPPDomain.get_full_qualified_name)1rr	r
r?rNrrrZobject_typesrMrNrFrErBrDrOrPrQrZr\rxrr|r�Zrolesr�Zinitial_datarr1rr
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)r5)r}r�r�r*r�rwr#�sort)r�rrr�	initStuff3s

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

�r�)�r?r�typingrrrrrrrr	r
rrZdocutilsr
Zdocutils.nodesrrrrZdocutils.parsers.rstrZsphinxrZsphinx.addnodesrrZsphinx.applicationrZsphinx.buildersrZsphinx.directivesrZsphinx.domainsrrZsphinx.environmentrZ
sphinx.errorsrZ
sphinx.localerrZsphinx.rolesrr Zsphinx.transformsr!Z!sphinx.transforms.post_transformsr"Zsphinx.utilr#Zsphinx.util.cfamilyr$r%r&r'r(r)r*r+r,r-r.r/r0r1r2r3r4r5r6Zsphinx.util.docfieldsr7r8Zsphinx.util.docutilsr9Zsphinx.util.nodesr:Zsphinx.util.typingr;Z	getLoggerrrer<r r��Sr�r�r�r�r�r�rrr2r[rr3r�r�r�rr@r�r�r�r�r8r�rrr=rJrnrtrurzrr�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!r#r&r?r/r0r4r5r6r:rFrIrbrerorxr|r�r�r�r�r�r�r�r�r�r�r�r<r;r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r
rrr�rzrrrBrDrErFrMrNrOrPrQrZr\r]rarxr|r�r�r�rrrr�<module>s�
4T
}
�




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

Youez - 2016 - github.com/yon3zu
LinuXploit