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

u�a\�@sbdZddlZddlmZmZmZmZmZmZm	Z	m
Z
mZmZm
Z
ddlmZddlmZmZmZmZddlmZddlmZddlmZdd	lmZdd
lmZddlm Z ddl!m"Z"dd
l#m$Z$m%Z%ddl&m'Z'ddl(m)Z)m*Z*ddl+m,Z,m-Z-ddl.m/Z/ddl0m1Z1ddl2m3Z3ddl4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGddlHmIZImJZJmKZKddlLmMZMddlNmOZOddlPmQZQe3�ReS�ZTed�ZUedZVgd�ZWgd�ZXddgdd gd!d"gd#d$gd%d&ggd'�gd(�d)d*gd+d,ggd-�d.d/ggZYgd0�ZZgd1�Z[d2Z\gd3�Z]e�^d4ej_�Z`e�^d5�ZaGd6d7�d7eb�ZcGd8d9�d9e6�ZdGd:d;�d;e6�ZeGd<d=�d=ed�ZfGd>d?�d?ed�ZgGd@dA�dAeg�ZhGdBdC�dCeh�ZiGdDdE�dEeh�ZjGdFdG�dGeh�ZkGdHdI�dIeh�ZlGdJdK�dKeg�ZmGdLdM�dMeg�ZnGdNdO�dOed�ZoGdPdQ�dQeo�ZpGdRdS�dSeo�ZqGdTdU�dUeo�ZrGdVdW�dWeo�ZsGdXdY�dYeo�ZtGdZd[�d[eg�ZuGd\d]�d]eg�ZvGd^d_�d_eg�ZwGd`da�daeg�ZxGdbdc�dceg�ZyGddde�deeg�ZzGdfdg�dged�Z{Gdhdi�dieg�Z|Gdjdk�dkeg�Z}Gdldm�dmed�Z~Gdndo�doe~�ZGdpdq�dqe~�Z�Gdrds�dsed�Z�Gdtdu�dued�Z�Gdvdw�dwe6�Z�Gdxdy�dyed�Z�Gdzd{�d{ed�Z�Gd|d}�d}ed�Z�Gd~d�de��Z�Gd�d��d�e��Z�Gd�d��d�e��Z�Gd�d��d�e��Z�Gd�d��d�e7�Z�Gd�d��d�ed�Z�Gd�d��d�ed�Z�Gd�d��d�ed�Z�Gd�d��d�ed�Z�Gd�d��d�ed�Z�Gd�d��d�ed�Z�Gd�d��d�ed�Z�Gd�d��d�ed�Z�Gd�d��d�ed�Z�Gd�d��d�ed�Z�Gd�d��d�e6�Z�Gd�d��d��Z�Gd�d��d��Z�Gd�d��d��Z�Gd�d��d�e8�Z�d�effd�d��Z�Gd�d��d�e"e��Z�Gd�d��d�e��Z�eKd�e)d��d�d�d�d��eJd�e)d��d�d�d��eId�e)d��d�d�d��eId�e)d��d�d�d��gZ�Gd�d��d�e��Z�Gd�dÄd�e��Z�Gd�dńd�e��Z�Gd�dDŽd�e��Z�Gd�dɄd�e��Z�Gd�d˄d�e��Z�Gd�d̈́d�e��Z�Gd�dτd�eM�Z�Gd�dфd�eM�Z�Gd�dӄd�eM�Z�Gd�dՄd�ej�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�d�ed�ee�effd�d�Z�dS)�z�
    sphinx.domains.c
    ~~~~~~~~~~~~~~~~

    The C language domain.

    :copyright: Copyright 2007-2021 by the Sphinx team, see AUTHORS.
    :license: BSD, see LICENSE for details.
�N)�Any�Callable�Dict�	Generator�Iterator�List�Optional�Tuple�TypeVar�Union�cast)�nodes)�Element�Node�TextElement�system_message)�
directives)�addnodes)�pending_xref)�Sphinx)�Builder)�RemovedInSphinx50Warning)�ObjectDescription)�Domain�ObjType)�BuildEnvironment)�_�__)�
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�
TypedField)�SphinxDirective)�make_refnode)�
OptionSpec�T)�	ASTStruct�ASTUnion�ASTEnum�
ASTEnumerator�ASTType�ASTTypeWithInit�ASTMacro)/�auto�break�case�char�const�continue�default�do�double�else�enum�extern�float�for�goto�if�inline�int�long�register�restrict�return�short�signed�sizeof�static�struct�switch�typedef�union�unsigned�void�volatile�while�_Alignas�_Alignof�_Atomic�_Bool�_Complex�
_Decimal32�
_Decimal64�_Decimal128�_Generic�
_Imaginary�	_Noreturn�_Static_assert�
_Thread_local)�alignas�alignof�bool�complex�	imaginary�noreturn�
static_assert�thread_localz||�orz&&�and�|�bitor�^�xor�&�bitand)z==z!=�not_eq)z<=z>=�<�>z<<z>>�+�-)�*�/�%z.*z->*)
�++�--r�r�r�r��!�not�~�compl)�=z*=z/=z%=z+=z-=z>>=z<<=z&=�and_eqz^=�xor_eqz|=�or_eq�)N�c.zCv2.z>[LuU8]?('([^'\\]*(?:\\.[^'\\]*)*)'|"([^"\\]*(?:\\.[^"\\]*)*)")an(?x)
    \b(
    void|_Bool
    |signed|unsigned
    |short|long
    |char
    |int
    |__uint128|__int128
    |__int(8|16|32|64|128)  # extension
    |float|double
    |_Decimal(32|64|128)
    |_Complex|_Imaginary
    |__float80|_Float64x|__float128|_Float128|__ibm128  # extension
    |__fp16  # extension
    |_Sat|_Fract|fract|_Accum|accum  # extension
    )\b
c@s$eZdZddd�Zdefd	d
�ZdS)�_DuplicateSymbolError�symbol�Symbol�declaration�ASTDeclarationrYNcC� |sJ�|sJ�||_||_dS�N)r�r�)�selfr�r��r��2/usr/lib/python3/dist-packages/sphinx/domains/c.py�__init__t�
z_DuplicateSymbolError.__init__cCsd|j�d�S)Nz%Internal C duplicate symbol error:
%sr)r��dump�r�r�r�r��__str__z�z_DuplicateSymbolError.__str__)r�r�r�r�rYN)�__name__�
__module__�__qualname__r��strr�r�r�r�r�r�ss
r�c
@s*eZdZdededdddddf
d	d
�ZdS)�ASTBase�signode�mode�envrr�r�rYNcC�tt|���r���NotImplementedError�repr�r�r�r�r�r�r�r�r��describe_signature�zASTBase.describe_signature)r�r�r�rr�r�r�r�r�r�r�~s
���r�c@s|eZdZdeddfdd�Zdedefdd�Zdefd	d
�Zdefdd�Z	defd
d�Z
dededddeddddfdd�ZdS)�
ASTIdentifier�
identifierrYNcCs&|dusJ�t|�dksJ�||_dS�Nr)�lenr�)r�r�r�r�r�r��s
zASTIdentifier.__init__�othercCst|�tuo|j|jkSr�)�typer�r��r�r�r�r�r��__eq__�szASTIdentifier.__eq__cCs|jddkS)Nr�@�r�r�r�r�r��is_anon��zASTIdentifier.is_anoncC�|jSr�r�r�r�r�r�r���zASTIdentifier.__str__cCs|��rdS|jS)N�[anonymous])r�r�r�r�r�r��get_display_string��z ASTIdentifier.get_display_stringr�r�r�r�prefixr�r�c
Cs�t|�|��rtjdd�}nt�|j|j�}|dkr;||j}tjddd|ddd�}|��|d<||7}||7}dS|d	krMt��}	|	|7}	||	7}dS|d
krW||7}dStd|��)Nr�)�text�markType��cr�)�	refdomain�reftype�	reftarget�modname�	classname�c:parent_key�
lastIsName�
noneIsName�Unknown description mode: %s)	r5r�r�
desc_sig_namer�r�get_lookup_key�	desc_name�	Exception)
r�r�r�r�r�r��node�
targetText�pnode�nameNoder�r�r�r��s*
�z ASTIdentifier.describe_signature)
r�r�r�r�r�rrur�r�r�r�rr�r�r�r�r�r��s���r�c
@sveZdZdeededdfdd�Zeddd��Zd	e	de
fd
d�Zdede
fd
d�Z
dede
ddddddf
dd�ZdS)�
ASTNestedName�names�rootedrYNcCs t|�dksJ�||_||_dSr�)r�r�r�)r�r�r�r�r�r�r��s
zASTNestedName.__init__cCs|Sr�r�r�r�r�r��name��zASTNestedName.name�versioncCsd�dd�|jD��S)N�.css�|]}t|�VqdSr�)r���.0�nr�r�r��	<genexpr>���z'ASTNestedName.get_id.<locals>.<genexpr>��joinr��r�r�r�r�r��get_id�szASTNestedName.get_id�	transformcs,d��fdd�|jD��}|jrd|S|S)Nr�c3��|]}�|�VqdSr�r�r��r�r�r�r��r�z+ASTNestedName._stringify.<locals>.<genexpr>)r�r�r��r�r��resr�r�r��
_stringify�szASTNestedName._stringifyr�r�r�rr�r�c
Cs�t|�|dkr1|jrJd��tt|j��D]}|dkr Jd��|j|}|�|||d|�qdS|dkrU|jr>Jt|���t|j�dksGJ�|jd�|d|d|�dS|d	ksa|d
ksa|dkr�d}d}|d
krp|jdd
�n|j}	|}
|d
kr}t	�
�}
|jr�|d7}|d
kr�t|	�dkr�|t	�dd�7}n|
t	�dd�7}
tt|	��D]+}|	|}|s�|
t	�dd�7}
|d7}d}t|�}|dkr�|�|
d	|||�||7}q�|d
kr�t|j�dkr�|
t	�dd�7}
||
7}|jd
�|||d|�dSdStd|��)Nr�FzCan this happen?r�rr��paramr�r�r��markNameT���r�)
r5r�r
�Text�ranger�r�r�r�r�desc_addname�desc_sig_punctuationr�)
r�r�r�r�r��ir�r��firstr��dest�ident�	txt_identr�r�r�r��sV
�
�z ASTNestedName.describe_signature)rYr�)r�r�r�rr�rur��propertyr�rUr�r�r)r�rr�r�r�r�r�r��s
���r�c@�eZdZdS)�
ASTExpressionN�r�r�r�r�r�r�r�r�rc@r)�
ASTLiteralNrr�r�r�r�rrrc
@�NeZdZdeddfdd�Zdedefdd�Zd	ed
eddd
dddf
dd�Z	dS)�ASTBooleanLiteral�valuerYNcC�
||_dSr��r)r�rr�r�r�r��
zASTBooleanLiteral.__init__r�cCs|jrdSdS)N�true�falser	�r�r�r�r�r�r�szASTBooleanLiteral._stringifyr�r�r�rr�r�cC�t|�}|t�||�7}dSr�)r�r�desc_sig_keyword�r�r�r�r�r��txtr�r�r�r��z$ASTBooleanLiteral.describe_signature)
r�r�r�rur�r)r�r�rr�r�r�r�r�rs
���rc
@�NeZdZdeddfdd�Zdedefdd�Zd	ed
eddd
dddf
dd�ZdS)�ASTNumberLiteral�datarYNcCrr��r�r�rr�r�r�r�#r
zASTNumberLiteral.__init__r�cCr�r�rr
r�r�r�r�&r�zASTNumberLiteral._stringifyr�r�r�rr�r�cCrr�)r�r�desc_sig_literal_numberrr�r�r�r�)rz#ASTNumberLiteral.describe_signature�	r�r�r�r�r�r)r�rr�r�r�r�r�r"�
���rc
@sReZdZdededdfdd�Zdedefdd	�Zd
ededd
ddddf
dd�ZdS)�ASTCharLiteralr�rrYNcCs<||_||_|���d�}t|�dkrt|�|_dSt|��)Nzunicode-escaper�)r�r�encode�decoder��ordrr*)r�r�r�decodedr�r�r�r�0szASTCharLiteral.__init__r�cCs,|jdurd|jdS|jd|jdS)N�')r�rr
r�r�r�r�9s
zASTCharLiteral._stringifyr�r�r�rr�r�cCrr�)r�r�desc_sig_literal_charrr�r�r�r�?rz!ASTCharLiteral.describe_signaturerr�r�r�r�r/s	
���rc
@r)�ASTStringLiteralrrYNcCrr�rrr�r�r�r�Fr
zASTStringLiteral.__init__r�cCr�r�rr
r�r�r�r�Ir�zASTStringLiteral._stringifyr�r�r�rr�r�cCrr�)r�r�desc_sig_literal_stringrr�r�r�r�Lrz#ASTStringLiteral.describe_signaturerr�r�r�r�r"Err"c
@s\eZdZdefdd�Zdedefdd�Zdedefd	d
�Z	de
ded
dddddf
dd�ZdS)�ASTIdExpressionr�cCrr��r��r�r�r�r�r�r�Ss
zASTIdExpression.__init__r�rYcC�
||j�Sr�r%r
r�r�r�r�Wr
zASTIdExpression._stringifyr�cC�|j�|�Sr�)r�r�r�r�r�r�r�Z�zASTIdExpression.get_idr�r�r�rr�r�NcC�|j�||||�dSr�)r�r�r�r�r�r�r�]�z"ASTIdExpression.describe_signature)r�r�r�r�r�r)r�r�rUr�rr�r�r�r�r�r$Rs
���r$c
@sVeZdZdd�Zdedefdd�Zdedefdd	�Zd
e	dedd
ddddf
dd�Z
dS)�ASTParenExprcCrr���expr�r�r.r�r�r�r�cr
zASTParenExpr.__init__r�rYcC�d||j�dS�N�(�)r-r
r�r�r�r�fr�zASTParenExpr._stringifyr�cCr(r�)r.r�r�r�r�r�r�ir)zASTParenExpr.get_idr�r�r�rr�r�NcC�6|t�dd�7}|j�||||�|t�dd�7}dSr1�rr�r.r�r�r�r�r�r�l�zASTParenExpr.describe_signature)r�r�r�r�r)r�r�rUr�rr�r�r�r�r�r,bs
���r,c@r)�ASTPostfixOpNrr�r�r�r�r7vrr7c
@sReZdZdedddfdd�Zdedefdd	�Zd
ededd
ddddf
dd�Z	dS)�ASTPostfixCallExpr�lst)�ASTParenExprList�ASTBracedInitListrYNcCrr��r9)r�r9r�r�r�r�{r
zASTPostfixCallExpr.__init__r�cCr'r�r<r
r�r�r�r�~r
zASTPostfixCallExpr._stringifyr�r�r�rr�r�cCr*r�)r9r�r�r�r�r�r��r+z%ASTPostfixCallExpr.describe_signature)
r�r�r�rr�r)r�r�rr�r�r�r�r�r8zs
���r8c
@r)�ASTPostfixArrayr.rYNcCrr�r-r/r�r�r�r��r
zASTPostfixArray.__init__r�cCr0�N�[�]r-r
r�r�r�r��r�zASTPostfixArray._stringifyr�r�r�rr�r�cCr4r>r5r�r�r�r�r��r6z"ASTPostfixArray.describe_signature�
r�r�r�rr�r)r�r�rr�r�r�r�r�r=�rr=c
@�<eZdZdedefdd�Zdededdd	d
ddf
dd
�ZdS)�
ASTPostfixIncr�rYcC�dS�Nr�r�r
r�r�r�r���zASTPostfixInc._stringifyr�r�r�rr�r�NcC�|t�dd�7}dSrE�r�desc_sig_operatorr�r�r�r�r���z ASTPostfixInc.describe_signature�r�r�r�r)r�r�rr�r�r�r�r�rC��
���rCc
@rB)�
ASTPostfixDecr�rYcCrD�Nr�r�r
r�r�r�r��rFzASTPostfixDec._stringifyr�r�r�rr�r�NcCrGrNrHr�r�r�r�r��rJz ASTPostfixDec.describe_signaturerKr�r�r�r�rM�rLrMc
@�DeZdZdd�Zdedefdd�Zdeded	d
dddd
f
dd�Zd
S)�ASTPostfixMemberOfPointercCrr�r%r&r�r�r�r��r
z"ASTPostfixMemberOfPointer.__init__r�rYcC�d||j�S)N�->r%r
r�r�r�r��r�z$ASTPostfixMemberOfPointer._stringifyr�r�r�rr�r�NcCs&|t�dd�7}|j�|d||�dS)NrRr�)rrIr�r�r�r�r�r�r��sz,ASTPostfixMemberOfPointer.describe_signature�	r�r�r�r�r)r�r�rr�r�r�r�r�rP��
���rPc
@sReZdZdedeefdd�Zdedefdd�Z	d	e
d
eddd
dddf
dd�ZdS)�ASTPostfixExprr��	postFixescC�||_||_dSr�)r�rV)r�r�rVr�r�r�r���
zASTPostfixExpr.__init__r�rYcCs0||j�g}|jD]	}|�||��q	d�|�S�Nr�)r�rV�appendr�)r�r�r��pr�r�r�r��s

zASTPostfixExpr._stringifyr�r�r�rr�r�NcCs2|j�||||�|jD]
}|�||||�qdSr�)r�r�rV)r�r�r�r�r�r[r�r�r�r��s
�z!ASTPostfixExpr.describe_signature)r�r�r�rrr7r�r)r�r�rr�r�r�r�r�rU�s
���rUc
@sNeZdZdedefdd�Zdedefdd�Zd	ed
eddd
dddf
dd�Z	dS)�ASTUnaryOpExpr�opr.cCrWr��r]r.)r�r]r.r�r�r�r��rXzASTUnaryOpExpr.__init__r�rYcCs2|jddvr|jd||j�S|j||j�S)Nr�cn� r^r
r�r�r�r��szASTUnaryOpExpr._stringifyr�r�r�rr�r�NcCsZ|jddvr|t�|j|j�7}|t��7}n
|t�|j|j�7}|j�||||�dS)Nrr_)r]rr�desc_sig_spacerIr.r�r�r�r�r�r��s
z!ASTUnaryOpExpr.describe_signature)
r�r�r�r�rr�r)r�rr�r�r�r�r�r\�s
���r\c
@rO)�
ASTSizeofTypecCrr���typ�r�rdr�r�r�r��r
zASTSizeofType.__init__r�rYcCr0)Nzsizeof(r3rcr
r�r�r�r��r�zASTSizeofType._stringifyr�r�r�rr�r�NcC�F|t�dd�7}|t�dd�7}|j�||||�|t�dd�7}dS)Nr\r2r3�rrr�rdr�r�r�r�r�r���z ASTSizeofType.describe_signaturerSr�r�r�r�rb�rTrbc
@sJeZdZdefdd�Zdedefdd�Zded	ed
ddd
ddf
dd�Z	dS)�
ASTSizeofExprr.cCrr�r-r/r�r�r�r��r
zASTSizeofExpr.__init__r�rYcCrQ)Nzsizeof r-r
r�r�r�r��r�zASTSizeofExpr._stringifyr�r�r�rr�r�NcCs2|t�dd�7}|t��7}|j�||||�dS)Nr\)rrrar.r�r�r�r�r�r��sz ASTSizeofExpr.describe_signaturerAr�r�r�r�ri�s
���ric
@sFeZdZddd�Zdedefdd�Zd	ed
eddd
dddf
dd�ZdS)�ASTAlignofExprrdrAcCrr�rcrer�r�r�r��r
zASTAlignofExpr.__init__r�rYcCr0)Nzalignof(r3rcr
r�r�r�r��r�zASTAlignofExpr._stringifyr�r�r�rr�r�NcCrf)Nrtr2r3rgr�r�r�r�r�rhz!ASTAlignofExpr.describe_signature)rdrArSr�r�r�r�rj�s

���rjc
@sNeZdZdddefdd�Zdedefdd	�Zd
ededd
ddddf
dd�Z	dS)�ASTCastExprrdrAr.cCrWr�)rdr.)r�rdr.r�r�r�r�
rXzASTCastExpr.__init__r�rYcC�:dg}|�||j��|�d�|�||j��d�|�S�Nr2r3r�)rZrdr.r�r�r�r�r�r��


zASTCastExpr._stringifyr�r�r�rr�r�NcCsH|t�dd�7}|j�||||�|t�dd�7}|j�||||�dSr1)rr�rdr�r.r�r�r�r�r�szASTCastExpr.describe_signaturerAr�r�r�r�rks
���rkc
@�VeZdZdeedeefdd�Zdedefdd�Zd	e	d
eddd
dddf
dd�Z
dS)�ASTBinOpExpr�exprs�opscC�8t|�dksJ�t|�t|�dksJ�||_||_dS�Nrr��r�rqrr�r�rqrrr�r�r�r�!�
zASTBinOpExpr.__init__r�rYcC�tg}|�||jd��tdt|j��D] }|�d�|�|j|d�|�d�|�||j|��qd�|�S�Nrr�r`r��rZrqr�r�rrr��r�r�r�r�r�r�r�r�'�


zASTBinOpExpr._stringifyr�r�r�rr�r�NcC�|jd�||||�tdt|j��D]E}|t��7}|j|d}t|d�td�kr?t|d�td�kr?|t�||�7}n|t�	||�7}|t��7}|j|�||||�qdS�Nrr��a�z�
rqr�r�r�rrarrrrrI�r�r�r�r�r�r�r]r�r�r�r�1�(�zASTBinOpExpr.describe_signature�r�r�r�rrr�r�r)r�rr�r�r�r�r�rp �

���rpc
@ro)�ASTAssignmentExprrqrrcCrsrtrurvr�r�r�r�@rwzASTAssignmentExpr.__init__r�rYcCrxryrzr{r�r�r�r�Fr|zASTAssignmentExpr._stringifyr�r�r�rr�r�NcCr}r~r�r�r�r�r�r�Pr�z$ASTAssignmentExpr.describe_signaturer�r�r�r�r�r�?r�r�c
@s\eZdZdefdd�Zdedefdd�Zdedefd	d
�Zde	ded
dddddf
dd�Z
dS)�ASTFallbackExprr.cCrr�r-r/r�r�r�r�_r
zASTFallbackExpr.__init__r�rYcCr�r�r-r
r�r�r�r�br�zASTFallbackExpr._stringifyr�cCs
t|j�Sr�)r�r.r�r�r�r�r�er
zASTFallbackExpr.get_idr�r�r�rr�r�NcCs|t�|j|j�7}dSr�)r
�literalr.r�r�r�r�r�hsz"ASTFallbackExpr.describe_signature)r�r�r�r�r�r)r�rUr�rr�r�r�r�r�r�^s
���r�c@r)�ASTTrailingTypeSpecNrr�r�r�r�r�qrr�c
@sReZdZdeeddfdd�Zdedefdd�Zd	ed
eddd
dddf
dd�Z	dS)�ASTTrailingTypeSpecFundamentalr�rYNcCst|�dksJ�||_dSr�)r�r�)r�r�r�r�r�r�vs
z'ASTTrailingTypeSpecFundamental.__init__r�cCsd�|j�S)Nr`r�r
r�r�r�r�zr)z)ASTTrailingTypeSpecFundamental._stringifyr�r�r�rr�r�cCs:d}|jD]}|s|t��7}nd}|t�||�7}qdS)NTF)r�rra�desc_sig_keyword_type)r�r�r�r�r�r�r�r�r�r�r�}s
�z1ASTTrailingTypeSpecFundamental.describe_signature)
r�r�r�rr�r�r)r�rr�r�r�r�r�r�us
���r�c
@sdeZdZdededdfdd�Zedefdd��Zd	edefd
d�Z	de
d
eddddddf
dd�ZdS)�ASTTrailingTypeSpecNamer��
nestedNamerYNcCrWr�)r�r�)r�r�r�r�r�r�r��rXz ASTTrailingTypeSpecName.__init__cCr�r�)r�r�r�r�r�r���zASTTrailingTypeSpecName.namer�cCs:g}|jr|�|j�|�d�|�||j��d�|�S)Nr`r�)r�rZr�r�r�r�r�r�r��s

z"ASTTrailingTypeSpecName._stringifyr�r�r�rr�r�cCs>|jr|t�|j|j�7}|t��7}|jj||||d�dS�N�r�)r�rrrar�r�r�r�r�r�r��sz*ASTTrailingTypeSpecName.describe_signature)r�r�r�r�r�r�r�r�r)r�rr�r�r�r�r�r��s
���r�c
@sneZdZddddeddfdd�Zd	ed
edddefd
d�Zdedefdd�Z	de
deddddddf
dd�ZdS)�ASTFunctionParameterF�argrB�ellipsisrYNcCrWr�)r�r�)r�r�r�r�r�r�r��rXzASTFunctionParameter.__init__r��
objectTyper�r�cCs|jjj|dd�S)NF)�prefixed)�parentr�r��r�r�r�r�r�r�r�r��szASTFunctionParameter.get_idr�cCs|jrdS||j�S�N�...)r�r�r
r�r�r�r��s
zASTFunctionParameter._stringifyr�r�r�rcCs:t|�|jr|t�dd�7}dS|jj||||d�dS�Nr�r�)r5r�rr�r�r�r�r�r�r�r��sz'ASTFunctionParameter.describe_signature�F)r�r�r�rur�rUr�r�r)r�rr�r�r�r�r�r��s
���r�c
@speZdZdeedeeddfdd�Zedeefdd��Zd	e	de
fd
d�Zded
e
ddddddf
dd�Z
dS)�
ASTParameters�args�attrsrYNcCrWr�)r�r�)r�r�r�r�r�r�r��rXzASTParameters.__init__cCr�r��r�r�r�r�r��function_params�r�zASTParameters.function_paramsr�cCsvg}|�d�d}|jD]}|s|�d�d}|�t|��q|�d�|jD]}|�d�|�||��q'd�|�S)Nr2T�, Fr3r`r�)rZr�r�r�r�)r�r�r�r�r�attrr�r�r�r��s






zASTParameters._stringifyr�r�r�rr�r�c
Cs�t|�|dkr,t��}|jD]}tjdddd�}|j|d||d�||7}q||7}n3|t�dd�7}d}|jD]}|sK|t�dd�7}|t��7}d	}|j|d
||d�q9|t�dd�7}|jD]
}	|t��7}|	�|�qbdS)Nr�r�T��noemphr�r�r2�,Fr�r3)	r5r�desc_parameterlistr��desc_parameterr�r�rar�)
r�r�r�r�r��	paramlistr�r�r�r�r�r�r�r��s*




�z ASTParameters.describe_signature)r�r�r�rr�r#r�r�r�r)r�r�rr�r�r�r�r�r��s
���r�c@sleZdZdededededededeedd	fd
d�Zdd
d�Zde	defdd�Z
deedd	fdd�Zd	S)�ASTDeclSpecsSimple�storage�threadLocalrTrXrdrHr�rYNcCs.||_||_||_||_||_||_||_dSr�)r�r�rTrXrdrHr�)r�r�r�rTrXrdrHr�r�r�r�r��s
zASTDeclSpecsSimple.__init__r�c	CsT|s|St|jp
|j|jp|j|jp|j|jp|j|jp|j|jp#|j|j|j�Sr�)r�r�r�rTrdrHrXr�r�r�r�r��	mergeWith�s





�zASTDeclSpecsSimple.mergeWithr�cs�g}|��fdd�|jD��|jr|�|j�|jr!|�|j�|jr)|�d�|jr1|�d�|jr9|�d�|jrA|�d�d�	|�S)Nc3r�r�r�)r�r�r�r�r�r�r�z0ASTDeclSpecsSimple._stringify.<locals>.<genexpr>rTrXrdrHr`)
�extendr�r�rZr�rTrXrdrHr�r�r�r�r�r�s




zASTDeclSpecsSimple._stringify�	modifierscCs�dttdtddfdd�}|jD]}t|�dkr|�t���|�|�|��q|j	r1|||j	�|j
r:|||j
�|jrB||d�|jrJ||d�|j
rR||d	�|jr\||d
�dSdS)Nr�r�rYcSs0t|�dkr
|�t���|�t�||��dSr�)r�rZrrar)r�r�r�r�r��_addsz3ASTDeclSpecsSimple.describe_signature.<locals>._addrrTrXrdrH)rrr�r�r�rZrrar�r�r�rTrXrdrH)r�r�r�r�r�r�r�r�s$



�z%ASTDeclSpecsSimple.describe_signature)r�r�rYr�)
r�r�r�r�rurrr�r�r)r�rr�r�r�r�r�r��s����
�

r�c
@sZeZdZdededededdf
dd�Zd	edefd
d�Zde	d
eddddddf
dd�Z
dS)�ASTDeclSpecs�outer�	leftSpecs�
rightSpecs�trailingrYNcCs,||_||_||_|j�|j�|_||_dSr�)r�r�r�r��allSpecs�trailingTypeSpec)r�r�r�r�r�r�r�r�r�,s

zASTDeclSpecs.__init__r�cCs�g}||j�}t|�dkr|�|�|jrCt|�dkr |�d�|�||j��t|j�}t|�dkrCt|�dkr>|�d�|�|�d�|�S�Nrr`r�)r�r�rZr�r�r�r�)r�r�r��l�rr�r�r�r�8s






zASTDeclSpecs._stringifyr�r�r�rr�r�cCs�t|�g}|j�|�|D]}||7}q|jrKt|�dkr$|t��7}|jj||||d�g}|j�|�t|�dkrB|t��7}|D]}||7}qDdSdS)Nrr�)r5r�r�r�r�rrar�)r�r�r�r�r�r��mr�r�r�r�Hs&
�
�	zASTDeclSpecs.describe_signature)r�r�r�r�r�r�r�r)r�rr�r�r�r�r�r�+s$���
�
���r�c@s^eZdZdedededededefdd�Zd	ed
efdd�Zd
e	deddddd
df
dd�Z
dS)�ASTArrayr]rHrdrX�vla�sizecCsL||_||_||_||_||_||_|r|dusJ�|dur"|r$J�dSdSr�)r]rHrdrXr�r�)r�r]rHrdrXr�r�r�r�r�r�bs�zASTArray.__init__r�rYcCs�g}|jr
|�d�|jr|�d�|jr|�d�|jr"|�d�|jr.dd�|�dS|jr9|�||j��dd�|�dS)	Nr]rXrdrHr?r`z*]r@)r]rZrXrdrHr�r�r�)r�r��elr�r�r�r�os



zASTArray._stringifyr�r�r�rr�r�Ncs�t|�|t�dd�7}d�dtdtdtf�fdd�}|jr#||d��|jr+||d	��|jr3||d
��|j	r;||d��|j
rG|t�dd�7}n|jr[�rR|t��7}|j�
|d
||�|t�dd�7}dS)Nr?Fr�r�rYcs$�r|t��7}|t�||�7}dS�NT)rrar�r�r���addSpacer�r�r��sz)ASTArray.describe_signature.<locals>._addr]rXrdrHr�r�r@)r5rr�rr�rur]rXrdrHr�r�rar�)r�r�r�r�r�r�r�r�r�r�s&



zASTArray.describe_signature)r�r�r�rurr�r)r�r�rr�r�r�r�r�r�as�
�
���r�c@sBeZdZedefdd��Zedeefdd��Zde	fdd�Z
dS)	�
ASTDeclaratorrYcCr�r�r�r�r�r�r�r��r�zASTDeclarator.namecCr�r�r�r�r�r�r�r��r�zASTDeclarator.function_paramscCr�r�r�r�r�r�r��require_space_after_declSpecs�r)z+ASTDeclarator.require_space_after_declSpecsN)r�r�r�r�r�r�rr�r�rur�r�r�r�r�r��sr�c
@s�eZdZdedeededdfdd�Zedefdd	��Z	edee
fd
d��Zdefdd
�Z
dedefdd�Zdededdddddf
dd�ZdS)�ASTDeclaratorNameParam�declId�arrayOpsr�rYNcC�||_||_||_dSr��r�r�r�)r�r�r�r�r�r�r�r���
zASTDeclaratorNameParam.__init__cCr�r��r�r�r�r�r�r��r�zASTDeclaratorNameParam.namecC�|jjSr�)r�r�r�r�r�r�r���z&ASTDeclaratorNameParam.function_paramscC�
|jduSr�r�r�r�r�r�r��r
z4ASTDeclaratorNameParam.require_space_after_declSpecsr�cCsTg}|jr
|�||j��|jD]	}|�||��q|jr%|�||j��d�|�SrY)r�rZr�r�r�)r�r�r�r]r�r�r�r��s

z!ASTDeclaratorNameParam._stringifyr�r�r�rr�r�cCs\t|�|jr|j�||||�|jD]
}|�||||�q|jr,|j�||||�dSdSr�)r5r�r�r�r�)r�r�r�r�r�r]r�r�r�r��s
�z)ASTDeclaratorNameParam.describe_signature)r�r�r�r�rr�r�r�r�r�r�r�rur�r)r�r�rr�r�r�r�r�r��s*��
�

���r�c
@sneZdZdedefdd�Zedefdd��Zdefdd	�Z	d
e
defdd�Zd
e
deddddddf
dd�ZdS)�ASTDeclaratorNameBitFieldr�r�cCrWr��r�r�)r�r�r�r�r�r�r��rXz"ASTDeclaratorNameBitField.__init__rYcCr�r�r�r�r�r�r�r��r�zASTDeclaratorNameBitField.namecCr�r�r�r�r�r�r�r��r
z7ASTDeclaratorNameBitField.require_space_after_declSpecsr�cCs>g}|jr
|�||j��|�d�|�||j��d�|�S)Nz : r�)r�rZr�r�r�r�r�r�r��s

z$ASTDeclaratorNameBitField._stringifyr�r�r�rr�r�NcCs^t|�|jr|j�||||�|t��7}|t�dd�7}|t��7}|j�||||�dS)N�:)r5r�r�rrar�r�r�r�r�r�r��sz,ASTDeclaratorNameBitField.describe_signature)r�r�r�r�rr�r�r�rur�r)r�r�rr�r�r�r�r�r��s
���r�c@s�eZdZdedededededdfdd	�Zedefd
d��Z	ede
efdd
��Zdefdd�Z
dedefdd�Zdededdddddf
dd�ZdS)�ASTDeclaratorPtr�nextrXrdrHr�rYNcCs*|sJ�||_||_||_||_||_dSr��r�rXrdrHr�)r�r�rXrdrHr�r�r�r�r��s
zASTDeclaratorPtr.__init__cCr�r�)r�r�r�r�r�r�r��r�zASTDeclaratorPtr.namecCr�r�)r�r�r�r�r�r�r�r�z ASTDeclaratorPtr.function_paramscCs*|jp|jp|jpt|j�dkp|j��Sr�)rHrdrXr�r�r�r�r�r�r�r�r�s
��z.ASTDeclaratorPtr.require_space_after_declSpecsr�cCs�dg}|jD]	}|�||��qt|j�dkr%|js |js |jr%|�d�|jr-|�d�|jr=|jr8|�d�|�d�|jrP|jsF|jrK|�d�|�d�|js`|js`|js`t|j�dkrj|j��rj|�d�|�||j��d�|�S)Nr�rr`rXrdrHr�)	r�rZr�rXrdrHr�r�r�)r�r�r�rr�r�r�r�
s(
 





 


zASTDeclaratorPtr._stringifyr�r�r�rr�r�cCst|�|t�dd�7}|jD]}|�|�qt|j�dkr-|js'|js'|jr-|t�	�7}dt
dtddfdd�}|jr@||d�|jrQ|jrL|t�	�7}||d	�|jre|jsZ|jr`|t�	�7}||d
�|jsu|jsu|jsut|j�dkr�|j�
�r�|t�	�7}|j�||||�dS)Nr�rr�r�rYcSs|t�||�7}dSr�)rrr�r�r�r��	_add_anno)�z6ASTDeclaratorPtr.describe_signature.<locals>._add_annorXrdrH)r5rr�r�r�r�rXrdrHrarr�r�r�)r�r�r�r�r�rr�r�r�r�r� s*
 


 
z#ASTDeclaratorPtr.describe_signature)r�r�r�r�rurr�r�r�r�rr�r�r�r)r�r�rr�r�r�r�r�r��s&�
�	
���r�c
@s�eZdZdededdfdd�Zedefdd��Zedee	fd	d
��Z
defdd�Zd
e
defdd�Zdededdddddf
dd�ZdS)�ASTDeclaratorParen�innerr�rYNcCr�r��r�r�)r�r�r�r�r�r�r�=r�zASTDeclaratorParen.__init__cCr�r�)r�r�r�r�r�r�r�Dr�zASTDeclaratorParen.namecCr�r�)r�r�r�r�r�r�r�Hr�z"ASTDeclaratorParen.function_paramscCrDr�r�r�r�r�r�r�LrFz0ASTDeclaratorParen.require_space_after_declSpecsr�cCrlrm)rZr�r�r�r�r�r�r�r�OrnzASTDeclaratorParen._stringifyr�r�r�rr�r�cCsPt|�|t�dd�7}|j�||||�|t�dd�7}|j�|d||�dS)Nr2r3r�)r5rr�r�r�r�r�r�r�r�r�Vs
z%ASTDeclaratorParen.describe_signature)r�r�r�r�r�r�r�r�rr�r�rur�r)r�r�rr�r�r�r�r�r�<s
���r�c
@sReZdZdeeddfdd�Zdedefdd�Zd	e	d
eddd
dddf
dd�Z
dS)r:rqrYNcCrr�)rq)r�rqr�r�r�r�cr
zASTParenExprList.__init__r�cs"�fdd�|jD�}dd�|�S)Nc�g|]}�|��qSr�r��r��er�r�r��
<listcomp>g�z/ASTParenExprList._stringify.<locals>.<listcomp>z(%s)r�)rqr�)r�r�rqr�r�r�r�fszASTParenExprList._stringifyr�r�r�rr�r�cCsrt|�|t�dd�7}d}|jD]}|s$|t�dd�7}|t��7}nd}|�||||�q|t�dd�7}dS)Nr2Tr�Fr3)r5rr�rqrar��r�r�r�r�r�r�r�r�r�r�r�js
z#ASTParenExprList.describe_signature)r�r�r�rrr�r)r�r�rr�r�r�r�r�r:bs
���r:c
@sVeZdZdeededdfdd�Zdedefdd	�Z	d
e
dedd
ddddf
dd�ZdS)r;rq�
trailingCommarYNcCrWr�)rqr��r�rqr�r�r�r�r�zrXzASTBracedInitList.__init__r�cs4�fdd�|jD�}|jrdnd}dd�|�|fS)Ncr�r�r�r�r�r�r�r�r�z0ASTBracedInitList._stringify.<locals>.<listcomp>r�r�z{%s%s}r�)rqr�r�)r�r�rqr�r�r�r�r�~szASTBracedInitList._stringifyr�r�r�rr�r�cCs�t|�|t�dd�7}d}|jD]}|s$|t�dd�7}|t��7}nd}|�||||�q|jr:|t�dd�7}|t�dd�7}dS)N�{Tr�F�})r5rr�rqrar�r�r�r�r�r�r��s
z$ASTBracedInitList.describe_signature)r�r�r�rrrur�r)r�r�rr�r�r�r�r�r;ys
���r;c
@s^eZdZ	ddeeefdeddfdd�Zdede	fd	d
�Z
dede	d
dddddf
dd�ZdS)�ASTInitializerTr�	hasAssignrYNcCrWr��rr�)r�rr�r�r�r�r��s
zASTInitializer.__init__r�cCs||j�}|jrd|S|S)Nz = r�)r�r��valr�r�r�r��s
zASTInitializer._stringifyr�r�r�rr�r�cCsLt|�|jr|t��7}|t�dd�7}|t��7}|j�|d||�dS)Nr�r�)r5r�rrar�rr�r�r�r�r�r��sz!ASTInitializer.describe_signature�T)
r�r�r�rr;rrur�r)r�r�rr�r�r�r�r�r��s��
�
���r�c
@s�eZdZdededdfdd�Zedefdd��Zd	e	d
e
ddde
fd
d�Zedee
fdd��Zdede
fdd�Zde
fdd�Zdede
ddddddf
dd�ZdS)rA�	declSpecs�declrYNcCr�r�)r�r�)r�r�r�r�r�r�r��r�zASTType.__init__cCr�r�)r�r�r�r�r�r�r��r�zASTType.namer�r�r�r�cC�|���|�Sr���get_full_nested_namer�r�r�r�r�r��r�zASTType.get_idcCr�r�)r�r�r�r�r�r�r��r�zASTType.function_paramsr�cCsRg}||j�}|�|�|j��rt|�dkr|�d�|�||j��d�|�Sr�)r�rZr�r�r�r�)r�r�r�r�r�r�r�r��s



zASTType._stringifycCs|jjrdSdS)Nr`r�)r�r�r�r�r�r��get_type_declaration_prefix�sz#ASTType.get_type_declaration_prefixr�r�r�rcCsdt|�|j�|d||�|j��r!tt|j��dkr!|t��7}|dkr'd}|j�||||�dS)Nr�rr�)	r5r�r�r�r�r�r�rrar�r�r�r�r��s
zASTType.describe_signature)r�r�r�r�r�r�r�r�r�rUr�r�rr�r�r)r�r�rr�r�r�r�r�rA�s 	
���rAc
@s~eZdZdededdfdd�Zedefdd��Zd	e	d
e
ddde
fd
d�Zdede
fdd�Z
dede
ddddddf
dd�ZdS)rBr��initrYNcCrWr�)r�r�)r�r�r�r�r�r�r��rXzASTTypeWithInit.__init__cCr�r�)r�r�r�r�r�r�r��r�zASTTypeWithInit.namer�r�r�r�cCs|j�|||�Sr�)r�r�r�r�r�r�r��r�zASTTypeWithInit.get_idr�cC�4g}|�||j��|jr|�||j��d�|�SrY)rZr�r�r�r�r�r�r�r���

zASTTypeWithInit._stringifyr�r�r�rcCs:t|�|j�||||�|jr|j�||||�dSdSr�)r5r�r�r�r�r�r�r�r���
�z"ASTTypeWithInit.describe_signature)r�r�r�rAr�r�r�r�r�rUr�r�r)r�rr�r�r�r�r�rB�s
���rBc
@s\eZdZ		ddedededdfdd�Zd	edefd
d�Zde	d
eddddddf
dd�Z
dS)�ASTMacroParameterFr�r��variadicrYNcCr�r�)r�r�r�)r�r�r�r�r�r�r�r��r�zASTMacroParameter.__init__r�cCs(|jrdS|jr||j�dS||j�Sr�)r�r�r�r
r�r�r�r��s

zASTMacroParameter._stringifyr�r�r�rr�r�cCs\t|�|jr|t�dd�7}dS|jr"t|�}|t�||�7}dS|jj||||d�dSr�)	r5r�rr�r�r�r�r�r�)r�r�r�r�r�r�r�r�r�r�sz$ASTMacroParameter.describe_signature)FF)r�r�r�r�rur�r)r�r�rr�r�r�r�r�r��s ��
�
���r�c
@s�eZdZdedeeddfdd�Zedefdd��Zd	e	d
e
ddde
fd
d�Zdede
fdd�Z
dede
ddddddf
dd�ZdS)rCr�r�rYNcCrWr�)r�r�)r�r�r�r�r�r�r�rXzASTMacro.__init__cCr�r�)r�r�r�r�r�r�r�z
ASTMacro.namer�r�r�r�cCr�r�r�r�r�r�r�r�r�zASTMacro.get_idr�cCslg}|�||j��|jdur1|�d�d}|jD]}|s"|�d�d}|�||��q|�d�d�|�S)Nr2Tr�Fr3r�)rZr�r�r�)r�r�r�r�r�r�r�r�r�s





zASTMacro._stringifyr�r�r�rcCsrt|�|j�||||�|jdurdSt��}|jD]}tjdddd�}|j|d||d�||7}q||7}dS)Nr�Tr�r�r�)r5r�r�r�rr�r�)r�r�r�r�r�r�r�r�r�r�r�r�*s


zASTMacro.describe_signature)r�r�r�r�rr�r�r�r�rUr�r�r)r�rr�r�r�r�r�rCs
���rCc
@�heZdZdeddfdd�Zdededd	defd
d�Zdedefd
d�Z	de
dedddd	ddf
dd�ZdS)r=r�rYNcCrr�r%r&r�r�r�r�9r
zASTStruct.__init__r�r�r�r�cCr�r�r�r�r�r�r�r�<r�zASTStruct.get_idr�cCr'r�r%r
r�r�r�r�?r
zASTStruct._stringifyr�r�r�rcC� t|�|jj||||d�dSr��r5r�r�r�r�r�r�r�B�zASTStruct.describe_signature�r�r�r�r�r�rUr�r�r)r�rr�r�r�r�r�r=8�
���r=c
@r�)r>r�rYNcCrr�r%r&r�r�r�r�Ir
zASTUnion.__init__r�r�r�r�cCr�r�r�r�r�r�r�r�Lr�zASTUnion.get_idr�cCr'r�r%r
r�r�r�r�Or
zASTUnion._stringifyr�r�r�rcCr�r�r�r�r�r�r�r�Rr�zASTUnion.describe_signaturer�r�r�r�r�r>Hr�r>c
@r�)r?r�rYNcCrr�r%r&r�r�r�r�Yr
zASTEnum.__init__r�r�r�r�cCr�r�r�r�r�r�r�r�\r�zASTEnum.get_idr�cCr'r�r%r
r�r�r�r�_r
zASTEnum._stringifyr�r�r�rcCr�r�r�r�r�r�r�r�br�zASTEnum.describe_signaturer�r�r�r�r�r?Xr�r?c
@sleZdZdededdfdd�Zdeded	d
defdd�Zd
e	defdd�Z
dededdd	d
ddf
dd�ZdS)r@r�r�rYNcCrWr�)r�r�)r�r�r�r�r�r�r�irXzASTEnumerator.__init__r�r�r�r�cCr�r�r�r�r�r�r�r�mr�zASTEnumerator.get_idr�cCr�rY)rZr�r�r�r�r�r�r�r�pr�zASTEnumerator._stringifyr�r�r�rcCs:t|�|j�||||�|jr|j�|d||�dSdS)Nr�)r5r�r�r�r�r�r�r�r�wr�z ASTEnumerator.describe_signature)
r�r�r�r�r�r�rUr�r�r)r�rr�r�r�r�r�r@hs
���r@c@s�eZdZ	d!dededeeefdeddf
dd	�Zd"d
d�Z	e
defdd
��Ze
de
efdd��Zd#dededefdd�Zdefdd�Zdedefdd�Zdededddeddf
dd �ZdS)$r�Fr��
directiveTyper��	semicolonrYNcCs(||_||_||_||_d|_d|_dSr�)r�r�r�r�r��enumeratorScopedSymbol�r�r�r�r�r�r�r�r�r��s
zASTDeclaration.__init__cCst|j|j|j��|j�Sr�)r�r�r�r��cloner�r�r�r�r�r��s
�zASTDeclaration.clonecCstt|j�}|jSr�)r�DeclarationTyper�r��r�r�r�r�r�r��szASTDeclaration.namecCs |jdkrdStt|j�}|jS)N�function)r�rrAr�r�rr�r�r�r��s
zASTDeclaration.function_paramsTr�r�cCsH|jdkr|jr|jj�||�S|j�||j|j�}|r"t||S|S)N�
enumerator)r�r�r�r�r��
_id_prefix)r�r�r��id_r�r�r�r��szASTDeclaration.get_idcCs|�td�Sr�)r��_max_idr�r�r�r��
get_newest_id�r)zASTDeclaration.get_newest_idr�cCs||j�}|jr|d7}|S)N�;)r�r�r�r�r�r�r��s
zASTDeclaration._stringifyr�r�r�r�optionscCstt|�|js	J�d|d<t��}d|_|jj|d<||7}|jdkr%n||jdkr+nv|jdkr1np|jdkrE|t�dd�7}|t��7}n\|jd	krY|t�d	d	�7}|t��7}nH|jd
krm|t�d
d
�7}|t��7}n4|jdkr�|t�dd�7}|t��7}n |jdkr�t	t
|j�}|��}|t�||�7}|t��7}nJ�|j�
||||j�|jr�|t�dd�7}dSdS)NT�is_multiline�
declarator�
add_permalink�memberr�macror^rarNrr�Fr)r5r�r�desc_signature_line�sphinx_line_type�isRedeclarationr�rrarrAr�r�r�r�r�)r�r�r�r�r	�mainDeclNoder�r�r�r�r�r��sF








�z!ASTDeclaration.describe_signaturer�)rYr�r�)r�r�r�r�rrr�rur�r�r�r�r�rr�rUr�rr)r�rrr�r�r�r�r�r�s0�
��
�
	
���r�c@s*eZdZdeddddeddfdd�ZdS)	�SymbolLookupResult�symbolsr��parentSymbolr�rYNcCr�r�)rrr�)r�rrr�r�r�r�r��r�zSymbolLookupResult.__init__)r�r�r�rr�r�r�r�r�r�r�s��rc@s8eZdZdeeeefddfdd�Zdefdd�ZdS)�	LookupKeyrrYNcCrr�rrr�r�r�r��r
zLookupKey.__init__cCsd�d�dd�|jD���S)Nz[{}]r�css �|]\}}d�||�VqdS)z({}, {})N)�format)r�r�rr�r�r�r��s���z$LookupKey.__str__.<locals>.<genexpr>)rr�rr�r�r�r�r��s
�zLookupKey.__str__)	r�r�r�rr	r�r�r�r�r�r�r�r�r�srcsbeZdZdZdZdZdZdd�Zdd�Ze	de
d	d
fdd��ZdQd
d�Zde
de
d	d
f�fdd�Zdddedede
ded	d
fdd�Zdede
ded	d
fdd�ZdQdd�ZdQdd�Zde
d	d
fd d!�Zd	edfd"d#�Zed	edfd$d%��Zed	edfd&d'��ZdRd)d*�Zd	efd+d,�Zded-ed.ed	dfd/d0�Z ded-ed.ed1ed	edf
d2d3�Z!d4ed5e"degdfd6e
d-ed.ed1ed	e#fd7d8�Z$d4edede
ded	df
d9d:�Z%d;dd<e&e
d=d>d	d
fd?d@�Z'd4ed	dfdAdB�Z(dede
ded	dfdCdD�Z)ded-ed.ed1ed	df
dEdF�Z*dSdGdH�Z+d4edIe
d-ed.ed	df
dJdK�Z,dLed	e
fdMdN�Z-dLed	e
fdOdP�Z.�Z/S)Tr�rz  FcCsJ�r�r�r�r�r�r��__copy__�rFzSymbol.__copy__cCs|jrJ�tddddd�Sr�)r�r�)r��memor�r�r��__deepcopy__�szSymbol.__deepcopy__r�rYNcGs ttjtjdd�t|�dS)Nr���end)�printr��debug_indent_string�debug_indentr�r�r�r��debug_print�szSymbol.debug_printcCs6|js|jrJ�|jr
J�dS|jr|jsJ�dSdSr�)r�r��docnamer�r�r�r��_assert_invariants�s

�zSymbol._assert_invariants�keyrcs|dkrJ�t��||�S)N�children)�super�__setattr__)r�r#r��	__class__r�r�r&szSymbol.__setattr__r�r�r�r!�linecCsr||_d|_d|_||_||_||_||_d|_|��g|_	g|_
|jr,|jj	�|�|jr3||j_|�
�dS)NF)r��siblingAbove�siblingBelowr�r�r!r)rr"�	_children�
_anonChildrenrZr��_add_function_params)r�r�r�r�r!r)r�r�r�r�s zSymbol.__init__cCs�|��|jdusJ�|jdusJ�|jdusJ�|dusJ�|dus%J�|dus+J�||_||j_||_||_|��|��dSr�)r"r�r!r)r�r.)r�r�r!r)r�r�r��_fill_empty'szSymbol._fill_emptycCs�tjrtjd7_t�d�|jdurN|jjdurN|jjD]/}|jdur&q|jj}|dur/qtdd|�}|j	r:J�t
|j�dksCJ�|�|||j
|j�qtjrZtjd8_dSdS)Nr�z_add_function_params:�
functionParam)r��debug_lookuprr r�r�r�r�r�r�r�r��_add_symbolsr!r))r�r[�nnr�r�r�r�r.7s"


�zSymbol._add_function_paramscCs6|jdurdS||jjvsJ�|jj�|�d|_dSr�)r�r,�remover�r�r�r�r4Ns


z
Symbol.removecCsp|jD]2}|�|�|jr5|j|kr5d|_d|_d|_|jdur%|j|j_|jdur/|j|j_d|_d|_qdSr�)r,�	clear_docr�r!r)r*r+)r�r!�sChildr�r�r�r5Us





��zSymbol.clear_docccs&�|V|jD]	}|��EdHqdSr�)r,�get_all_symbols)r�r6r�r�r�r7cs
�
�zSymbol.get_all_symbolsccs�|jEdHdSr�)r,r�r�r�r�r$hs�zSymbol.childrenccs0�|jD]}|V|j��sq|jEdHqdSr�)r,r�r��children_recurse_anon)r�r�r�r�r�r8ls�

�zSymbol.children_recurse_anonrcCstg}|}|jr|�|�|j}|js|��g}|D]}|jdur-|�|j|j��f�q|�|jdf�qt|�Sr�)r�rZ�reverser�r�rr)r�r�sr#r�r�r�r�ts
�
zSymbol.get_lookup_keycCsRg}|}|jr|�|�|j}|js|��g}|D]}|�|j�qt|dd�S)NF�r�)r�rZr9r�r�)r�rr:r�r�r�r�r��s
�zSymbol.get_full_nested_name�	matchSelf�
recurseInAnoncCsBtjrt�d�|j|||dd�}zt|�WSty YdSw)Nz_find_first_named_symbol ->F)�searchInSiblings)r�r1r �_find_named_symbolsr��
StopIteration)r�r�r<r=r�r�r�r��_find_first_named_symbol�s

�
�zSymbol._find_first_named_symbolr>c#s:�tjr@tjd7_t�d�tjd7_t�d�t��tjd�dd�t�d|�t�d��t�d��t�d	|�d
tdf���fdd
�}|�D]>}tjrft�d�t|�tjd�dd�|j|kr�tjr�tjd7_t�d�tjd8_|Vtjr�tjd7_qPtjr�tjd8_dSdS)Nr�z_find_named_symbols:�self:r�rzident:            zmatchSelf:        zrecurseInAnon:    zsearchInSiblings: rY)r�NNc3s���}tjrt�d�t|�tjd�dd�	�r|V�r&|jEdHn|jEdH|jdur3dS|j}tjrJt�d�t|�tjd�dd�q)Nzsearching in self:r�r�rTzsearching in sibling:)	r�r1r r�	to_stringrr8r,r*)r:�r<r=r�r�r��
candidates�s$�


�z.Symbol._find_named_symbols.<locals>.candidatesz
candidate:�matches��)r�r1rr rrCrr�)r�r�r<r=r>rEr:r�rDr�r?�s8�





��zSymbol._find_named_symbolsr��onMissingQualifiedSymbol�ancestorLookupTypec
Cs�tjrEtjd7_t�d�tjd7_t�d�t|�tjd�dd�t�d|�t�d|�t�d|�t�d	|�t�d
|�|j}|}|jrV|jrV|j}|jsP|durq|d}	|jrq|j	|	|||d�rkn|j}|jsatjr�t�d
�t|�tjd�dd�|dd�D](}
|j
|
||d�}|dur�|||
�}|dur�tjr�tjd8_dSd}|}q�tjr�t�d�t|�tjd�dd�|d}
|j|
|||d�}tjr�t|�}tjd8_t
|||
�S)Nr�z_symbol_lookup:rBr�rznestedName:        zancestorLookupType:zmatchSelf:         zrecurseInAnon:     zsearchInSiblings:  r�r<r=r>zstarting point:r��r<r=rHFzhandle last name from:)r�r1rr rrCr�r�r��find_identifierrAr?�listr)
r�r�rIrJr<r=r>r�r�	firstNamer�r�rr�r�r��_symbol_lookup�sp

���
�

�zSymbol._symbol_lookupcsltjr+tjd7_t�d�tjd7_t�d|�t�d��t�d�����dddtd	dfd
d�}|j||ddddd
���dusGJ�t�j�}t	|�dkr�tjr~t�d�tjd7_t�d�j
�t�d��t�d�����tjd8_t�j�j
���d�}tjr�tjd8_|Stjr�t�d�tjd7_t�dt	|��tjd8_�s�tjr�t�d�tjd8_|dSg}g}	g}
|D]}|jdur�|�
|�q�|jr�|
�
|�q�|	�
|�q�tj�rt�dt	|��t�dt	|	��t�dt	|
��d&����fdd�}t	|	�dk�rd}
nM|�}
d'�fdd �}�jd!k�r<t	|	�dk�s5J�||	d|
����}tj�rJt�d"|�|	D]}|j��}tj�r]t�d#|�||k�rg|||
��qLt	|�dk�r�tj�r�t�d$|
du�tjd8_|
du�r�|
S|�Stj�r�t�d%|
du�tjd8_|
du�r�|
��|d}|�����|S)(Nr�z
_add_symbols:z
nn:       z
decl:     zlocation: {}:{}rr�r�rYcSsXtjr#tjd7_t�d�tjd7_t�d|�tjd8_t||dddd�S)Nr�z'_add_symbols, onMissingQualifiedSymbol:zident: rH�r�r�r�r!r))r�r1rr �rr�r�r�r�rI(s
�z5Symbol._add_symbols.<locals>.onMissingQualifiedSymbolF�rJr<r=r>rz _add_symbols, result, no symbol:z
ident:       z
declaration: zlocation:    {}:{}rQrHz_add_symbols, result, symbols:znumber symbols:zno declarationz
#noDecl:  z
#withDecl:z
#dupDecl: cs:tjrt�d�t�j�j���d�}tjrt�d�|S)Nz begin: creating candidate symbolrQz end:   creating candidate symbol)r�r1r rr�r��r�r!r)�lookupResultr�r��makeCandSymbolos
�
z+Symbol._add_symbols.<locals>.makeCandSymbolr��
candSymbolcsJtjrtjd7_t�d�tjd8_tjd8_d|_t|���)Nr��
redeclarationrHT)r�r1rr rr�)r�rW)r�r�r��handleDuplicateDeclarations

z7Symbol._add_symbols.<locals>.handleDuplicateDeclarationrzcandId:zoldId: z,no match, no empty, candSybmol is not None?:zAno match, but fill an empty declaration, candSybmol is not None?:)rYr�)r�r�rWr�rYN)r�r1rr rr�rPrNrr�r�rr�rZrr�rr4r/)r�r�r�r!r)rIrr��noDecl�withDecl�dupDeclr:rVrWrY�candId�oldIdr�rTr�r2s�

�

�







�
�
zSymbol._add_symbolsr��docnamesr�rcCstjrtjd7_t�d�|dusJ�|jD]b}|j|jddd�}|dur5|j�|�||_|�	�q|j
rs|j|vrs|j
sK|�|j
|j|j
�n(|j|jkrrt|j
�}td�}||j|j
|j
j|f}tj||j|j
fd�n	|�|||�qtjr�tjd8_dSdS)Nr�zmerge_with:F)r�r<r=�NDuplicate C declaration, also defined at %s:%s.
Declaration is '.. c:%s:: %s'.��location)r�r1rr r,rAr�rZr�r"r�r!r/r)r�rr��logger�warning�
merge_with)r�r�r_r��
otherChild�ourChildr��msgr�r�r�re�s>

��

��zSymbol.merge_withcCsHtjrtjd7_t�d�|j|dddd�}tjr"tjd8_|S)Nr�z	add_name:)r�r!r))r�r1rr r2)r�r�r�r�r�r��add_name�s
zSymbol.add_namecCsptjrtjd7_t�d�|dusJ�|dusJ�|dus!J�|j}|�||||�}tjr6tjd8_|S)Nr�zadd_declaration:)r�r1rr r�r2)r�r�r!r)r�r�r�r�r��add_declaration�s
zSymbol.add_declarationcCs,tjrAtjd7_t�d�tjd7_t�d|�t�d|�t�d|�t�d|�t|�tjd�dd�tjd	8_|}|dur�tjritjd	7_t�d
�t|�tjd�dd�tjd	8_|rr|j|krr|S|rw|jn|j}|D]}|j|kr�|Sq||s�	dS|j	}|dusGdS)Nr�zfind_identifier:zident:           zmatchSelf:       zrecurseInAnon:   zsearchInSiblings:r�rrHztrying:)
r�r1rr rrCr�r8r,r*)r�r�r<r=r>�currentr$r:r�r�r�rM�s<


���zSymbol.find_identifiercCs�tjrtjd7_t�d�tjd7_|}|jD]M\}}d}|jD]}|j|kr/|}nq$|}tjrWt�d|�t�d|�|durRt|�tjd�dd�nt�d�|durhtjretjd8_dSqtjrstjd8_|S)	Nr�zdirect_lookup:zname:          zid:            r�rz	not foundrH)	r�r1rr rr,r�rrC)r�r#r:r�rr��candr�r�r��
direct_lookups6


�
�zSymbol.direct_lookuprdcCs�tjrtjd7_t�d�dddtddfdd�}|j|||||d	d
�}tjr/tjd8_|dur5dSt|j�}t|�dkrBdS|dS)Nr�zfind_declaration:rr�r�rYcS�dSr�r�rRr�r�r�rI7r�z9Symbol.find_declaration.<locals>.onMissingQualifiedSymbolFrSr)	r�r1rr r�rPrNrr�)r�r�rdr<r=rIrUrr�r�r��find_declaration0s.
�
��
zSymbol.find_declaration�indentcCs�tj|g}|js|�d�n,|jr|�t|j��n|�t|j��|jr;|�d�|jr3|�d�|�t|j��|jrN|�d�|�|j�|�d�|�d�d�	|�S)Nz::z: z!!duplicate!! z	(r3�
r�)
r�rr�rZr�r�r�rr!r�)r�rpr�r�r�r�rCKs"





zSymbol.to_stringcCs6|�|�g}|jD]}|�|�|d��q	d�|�S)Nr�r�)rCr,rZr�r�)r�rpr�r�r�r�r�r�`s

zSymbol.dump�rYN)rYr)r#rrYr�)0r�r�r�rrr1�debug_show_treerr�staticmethodrr r"r�r&r�r�rUr�r/r.r4r5rr7r�r$r8r�r�r�rurAr?rrrPr2rrerirjrMrmrorCr��
__classcell__r�r�r'r�r��s�
	
���
�


��
����
�2�����
�H���
�!�
�$	��
����
�

��
�r�c
@seZdZedefdd��Zedd��Zedd��Zdefdd	�Zde	fd
d�Z
defdd
�Zdefdd�Z
dedededeeeeffdd�Zdefdd�Zdefdd�Zdefdd�Zdefdd�Zdefdd�Zdefdd �Zd!edefd"d#�Zdefd$d%�Zdefd&d'�Zdefd(d)�Z	*ddd+eed,e gefd-edefd.d/�Z!de"fd0d1�Z#de$efd2d3�Z%de&fd4d5�Z'de(fd6d7�Z)d8ede*fd9d:�Z+d;ed<ede,fd=d>�Z-ddd;ed<ede.fd?d@�Z/dAe0eefd8ed<ede1fdBdC�Z2	*dddAe0eefd8ed<ede1fdDdE�Z3ded;edGede4fdHdI�Z5dfdAe0eefd;ede6fdJdK�Z7dAe0eefd;ede8fdLdM�Z9de:fdNdO�Z;de<fdPdQ�Z=de>fdRdS�Z?de@fdTdU�ZAdeBfdVdW�ZCdeDfdXdY�ZEdZed[edeDfd\d]�ZFde"fd^d_�ZGde"fd`da�ZHde0ee6ffdbdc�ZIdFS)g�DefinitionParserrYcCrD)N�Cr�r�r�r�r��languagehr�zDefinitionParser.languagecCr�r�)�config�c_id_attributesr�r�r�r��
id_attributeslr�zDefinitionParser.id_attributescCr�r�)ry�c_paren_attributesr�r�r�r��paren_attributespr�z!DefinitionParser.paren_attributescCs�|jdkrdS|j}|jd7_d}	|jr|�d�n|jdkr,|s,|jd7_n|jdkr4d}nd}|jd7_q|j||j�S)N�"r�FTz$Unexpected end during inside string.�\)�current_char�pos�eof�fail�
definition)r��startPos�escaper�r�r��
_parse_stringts"

�zDefinitionParser._parse_stringc
Cs4|��|�d�r
td�S|�d�rtd�S|j}|�t�r-|�t�t|j||j��St	t
ttfD]}|�|�rK|�t
�t|j||j��Sq3|��}|durXt|�S|�t�r�|j�d�}|j�d�}zt||�WSty�}z|�d|�WYd}~dSd}~wty�|�d�YdSwdS)	NrTrFr�rHz8Can not handle character literal. Internal error was: %szJCan not handle character literal resulting in multiple decoded characters.)�skip_ws�	skip_wordrr��matchr.r/rr�r,r0r2r4r3r�r"r-�
last_match�groupr�UnicodeDecodeErrorr�r*)r�r��regex�stringr�rr�r�r�r��_parse_literal�sB



�

�
���zDefinitionParser._parse_literalcCsH|jdkrdS|jd7_|��}|��|�d�s |�d�t|�S)Nr2r�r3z0Expected ')' in end of parenthesized expression.)r�r��_parse_expressionr��skip_stringr�r,)r�r�r�r�r��_parse_paren_expression�s


z(DefinitionParser._parse_paren_expressioncCsL|��|��}|dur|S|��}|dur|S|��}|dur$t|�SdSr�)r�r�r��_parse_nested_namer$)r�r�r3r�r�r��_parse_primary_expression�sz*DefinitionParser._parse_primary_expressionr��open�closecCs�|��|�|�sdS|�|�rgdfSg}d}	|��|��}|��|�|�|��|�|�r8	||fS|�d�sF|�d||f�|j|kr]|dkr]|jd7_d}	||fSq)N�NNFTr�z"Error in %s, expected ',' or '%s'.r�r�)r��skip_string_and_wsr�r�rZr�r�r�)r�r�r�r�rqr�r.r�r�r��_parse_initializer_list�s0




��z(DefinitionParser._parse_initializer_listcCs&|�ddd�\}}|durdSt|�S)Nzparenthesized expression-listr2r3)r�r:r�r�r�r��_parse_paren_expression_list�s�z-DefinitionParser._parse_paren_expression_listcCs(|�ddd�\}}|durdSt||�S)Nzbraced-init-listr�r�)r�r;r�r�r�r��_parse_braced_init_list�s
z(DefinitionParser._parse_braced_init_listcCs�|��}g}	|��|�d�r*|��}|��|�d�s"|�d�|�t|��q|�d�rH|�d�r<|jd8_n|�	�}|�t
|��q|�d�rT|�t��q|�d	�r`|�t��q|�
�}|durp|�t|��q	t||�S)
NTr?r@z*Expected ']' in end of postfix expression.rRr�rGr�r�)r�r�r�r�r�r�rZr=r�r�rPrCrMr�r8rU)r�r�rVr.r�r9r�r�r��_parse_postfix_expression�s:








z*DefinitionParser._parse_postfix_expressioncCs�|��tD] }|ddvr|�|�}n|�|�}|r&|��}t||�Sq|�d�rQ|�d�rI|jdd�}|��|�d�sE|�	d�t
|�S|��}t|�S|�d	�rx|�d�s`|�	d
�|jdd�}|��|�d�st|�	d�t
|�S|��S)Nrr_r\r2F)�namedr3zExpecting ')' to end 'sizeof'.rtzExpecting '(' after 'alignof'.zExpecting ')' to end 'alignof'.)r��_expression_unary_opsr�r��_parse_cast_expressionr\�skip_word_and_wsr��_parse_typer�rb�_parse_unary_expressionrirjr�)r�r]r�r.rdr�r�r�r�'	s6	
�








z(DefinitionParser._parse_unary_expressionc
Cs�|j}|��|�d�rdz|�d�}|�d�s|�d�|��}t||�WStyc}z2||_z|��WWYd}~Sty^}zg}|�	|df�|�	|df�|�
|d�|�d}~wwd}~ww|��S)Nr2Fr3z Expected ')' in cast expression.zIf type cast expressionzIf unary expressionzError in cast expression.)r�r�r�r�r�r�rkr'r�rZ�_make_multi_error)r�r�rdr.�exCast�exUnary�errsr�r�r�r�M	s6



������z'DefinitionParser._parse_cast_expressioncs�fdd���|d�S)Nc		s�dtt�krdtf�fdd�}ndtf���fdd�}g}g}|�|��	����j}d}t�D]E}|dd	vrD��|�sCq5n��|�sJq5|d
kr\�jd
kr\�jd8_nz|�}|�|�|�|�d}Wnt	yz|�_Yq5w|s~nq(t
||�S)Nr�rYc����Sr�)r�r�r�r�r��parsers	�zYDefinitionParser._parse_logical_or_expression.<locals>._parse_bin_op_expr.<locals>.parsercs���d�S)Nr�r�r�)�_parse_bin_op_expr�opIdr�r�r�r�v	r�TFr�abcnoxr�)r��_expression_bin_opsrrZr�r�r�r�r�r'rp)	r�r�r�rqrrr��oneMorer]r.�r�)r�r�r�r�q	sB
�



��
zIDefinitionParser._parse_logical_or_expression.<locals>._parse_bin_op_exprrr�r�r�r�r��_parse_logical_or_expressione	s
%z-DefinitionParser._parse_logical_or_expression�
orExprHeadcCrnr�r�)r�r�r�r�r��"_parse_conditional_expression_tail�	r�z3DefinitionParser._parse_conditional_expression_tailcCs�g}g}|��}|�|�	d}|��tD]%}|ddvr%|�|�s$qn|�|�s+q|��}|�|�|�|�d}q|s?nqt||�S)NTFrr�)r�rZr��_expression_assignment_opsr�r�r�)r�rqrr�orExprr�r]r.r�r�r��_parse_assignment_expression�	s,

�


�
z-DefinitionParser._parse_assignment_expressioncCs|��}|Sr�)r�)r�r�r�r�r��_parse_constant_expression�	sz+DefinitionParser._parse_constant_expressioncC�|��Sr��r�r�r�r�r�r��	sz"DefinitionParser._parse_expressionTrr��allowc

CsD|j}z|�WSty)}z|r|js�|�d|�||_WYd}~nd}~ww|dus0J�|��|j}|�t�r@|j}n\dddd�}g}	|js�t	|	�dkrW|j
|vrWn+|j
|��vrg|	�||j
�nt	|	�dkrx|j
|	dkrx|	�
�|jd7_|jrKt	|�dkr�|jr�|�d	|�|j||j���}t|���S)
NzBParsing of expression failed. Using fallback parser. Error was:
%sr3r�r@)r2r�r?rr�r�z0Could not find end of expression starting at %d.)r�r'�allowFallbackExpressionParsing�warnr�r��
_string_re�matched_textr�r�r��keysrZ�popr�r��stripr�)
r�rr�r��prevPosr�r�r�bracketsrr�r�r��_parse_expression_fallback�	sD
���	
��z+DefinitionParser._parse_expression_fallbackcCs�g}|��d}|�d�rd}	|��|�t�s|�d�|j}|tvr,|�d|�|j|jjvrCd}|�||jt	|jj�f�t
|�}|�|�|��|�d�sVnqt||�S)NFr�Tr�z#Expected identifier in nested name.z3Expected identifier in nested name, got keyword: %s��Expected identifier, got user-defined keyword: %s. Remove it from c_extra_keywords to allow it as identifier.
Currently c_extra_keywords is %s.)
r�r�r�r1r�r��	_keywordsry�c_extra_keywordsr�r�rZr�)r�r�r�r�rhr�r�r�r�r��	s4


�

�

�
z#DefinitionParser._parse_nested_namecCs<|�t�r|jSdD]}||jjvr|�|�r|Sq
dS)N)rurvrw)r��_simple_type_specifiers_rer�ryr�r�)r��tr�r�r��_parse_simple_type_specifier
s

�z-DefinitionParser._parse_simple_type_specifiercCsLg}|��	|��}|durn
|�|�|��qt|�dkr"dSt|�S)NTr)r�r�rZr�r�)r�r�r�r�r�r��_parse_simple_type_specifiers
s
�z.DefinitionParser._parse_simple_type_specifierscCsV|��|��}|dur|Sd}|��dD]}|�|�r!|}nq|��}t||�S)N)r^rNra)r�r�r�r�r�)r�r�r��kr�r�r�r��_parse_trailing_type_spec&
s
�
z*DefinitionParser._parse_trailing_type_spec�	paramModecCs�|��|�d�s|dkr|�d�ndSg}|��|�d�sh	|��|�d�rA|�tdd��|��|�d�s@|�d�n'|jdd	d
�}|�t|��|��|�d�rYq |�d�r_n	|�d|j�q!g}	|��}|durtn|�|�qkt||�S)
Nr2rzExpecting "(" in parameters.r3r�r�Tz'Expected ")" after "..." in parameters.�single�r�r�r�z-Expecting "," or ")" in parameters, got "%s".)	r�r�r�rZr��_parse_type_with_initr��_parse_attributer�)r�r�r�r�r�r�r�r�r��_parse_parameters9
sJ






���
�
z"DefinitionParser._parse_parametersr��typedcCs8d}d}d}d}d}d}g}		|��|s=|dkr)|�d�r!d}q|�d�r)d}q|dvr=|�d�r5d}q|�d�r=d}q|dkrS|sS|�d	�rKd	}q|�d
�rSd
}q|dkra|sa|�d�}|raq|sm|rm|�d
�}|rmq|sy|ry|�d�}|ryq|s�|r�|�d�}|r�q|��}
|
r�|	�|
�q	t|||||||	�S)zJust parse the simple ones.Nr�r
rDrW)r
rr]rOrzrrrrTrXrdrH)r�r�r�rZr�)r�r�r�r�r�rTrXrdrHr�r�r�r�r��_parse_decl_specs_simplee
sn










�z)DefinitionParser._parse_decl_specs_simplecCsT|r|dvrtd|��|�||�}d}|r!|��}|�||�}nd}t||||�S)N�r�r
r�#Internal error, unknown outer "%s".)r�r�r�r�)r�r�r�r�r�r�r�r�r��_parse_decl_specs�
sz"DefinitionParser._parse_decl_specsr�c	s"|dvsJ�|dkrC��t�r@�jtvr��d�j��j�jjvr3d}��|�jt�jj�f�t�j�}t	|gdd�}nd}n	|rJ��
�}nd}g}	���|r؈�d�r؈��d}d}	d}
d}	|sq��
d
�rqd	}qf|	s{��
d�r{d	}	qf|
s���
d�r�d	}
qf|s���
d
�r�d	}qf	|r�dn��d�}|r���d�s���d�d}
n#��d�r�d}
n�fdd�}��dg|�}
�����d�sˈ�d�|�t||	|
|||
��nnqO��|�}|du�r
t|�dk�r
|�r
|dk�r
|�r
�����d��r
���}
t||
d�St|||d�S)N)TFr�r�z$Expected identifier, got keyword: %sr�Fr;r�r?Tr]rHrdrXr�r@z&Expected ']' in end of array operator.cr�r�)r�r�r�r�r�r��
r�z>DefinitionParser._parse_declarator_name_suffix.<locals>.parserrr�r�r�r�)r�r1r�r�r�ryr�r�r�r�r�r�r�r�r�r�rZr�r�r�r�r�r�)r�r�r�r�rhr�r�r�r]rHrdrXr�r�r�r�r�r�r��_parse_declarator_name_suffix�
s�

�

�










�
-�z.DefinitionParser._parse_declarator_name_suffixc
Cs<|dvr
td|��g}|��|ra|�d�ra|��d}d}d}g}	|s.|�d�}|r.q#|s8|�d�}|r8q#|sB|�d�}|rBq#|��}	|	durP|�|	�q#	|�|||�}
t|
||||d	�S|r�|jd
kr�|j	}z
|�
|||�}|WSty�}
zpd}|dkr�|d
7}|�|
|f�||_	z2|jd
ks�J�|�d
�|�|||�}|�d�s�|�d�|jdd|d�}
t
||
d�WWYd}
~
Sty�}z||_	d}|dkr�|d7}|�||f�d}|�||�|�d}~wwd}
~
ww|j	}z|�
|||�WSt�y}z||_	|�|df�d}|�||�|�d}~ww)N)r�rz'Internal error, unknown paramMode '%s'.r�Fr�rXrdrHr�r2z If declarator-id with parametersrz (e.g., 'void f(int arg)')r3z$Expected ')' in "( ptr-declarator )"r��r�r�r�r�z"If parenthesis in noptr-declaratorz% (e.g., 'void (*f(int arg))(double)')zError in declaratorzIf declarator-idz!Error in declarator or parameters)r�r�r�r�r�rZ�_parse_declaratorr�r�r�r�r'r�r�r�)r�r�r�r��
prevErrorsrXrdrHr�r�r�r�r��exParamQualrhr��exNoPtrParen�headerr�r�r�r�r��
s��



��


�������z"DefinitionParser._parse_declaratorN�
allowFallbackcs����|dkr		��d�sdS���}|durt|�S|dkr#g}n|dur,ddg}n��d|��fdd	�}�j|||d
�}t|�S)Nr
F)r�r�r�r3z;Internal error, initializer for outer '%s' not implemented.cr�r�r�r�r�r�r�r�fr�z3DefinitionParser._parse_initializer.<locals>.parser)r�)r�r�r�r�r�r�)r�r�r��
bracedInit�fallbackEndr�rr�r�r��_parse_initializerOs"


�z#DefinitionParser._parse_initializerc

Csb|r|dvrtd|��|sJ�|dkr�g}|j}z|j|dd�}|jd|dd�}|jdd�Wn{ty�}zHd	}|�||f�||_z|j|d
�}|jd|d�}Wn&tyy}	z||_d}|�|	|f�	d
}
|
d7}
|�||
�|	�d}	~	wwWYd}~n,d}~ww|dkr�|j|d
�}|jd|d�}nd}|dkr�d}|j|d
�}|j||d�}t||�S)z�
        named=False|'single'|True: 'single' is e.g., for function objects which
        doesn't need to name the arguments, but otherwise is a single name
        r�r�r�F)r�r�Tr�)�allowSemicolonzIf just a name�r�)r�r�zIf typedef-like declarationz%Type must be either just a name or a ztypedef-like declaration.Nrr
)	r�r�r�r��
assert_endr'rZr�rA)
r�r�r�r�r�r�r��	exUntyped�desc�exTypedr�r�r�r�r�r�r�lsT������
zDefinitionParser._parse_typecCs4|r|dvsJ�|j||d�}|j|d�}t||�S)Nr�r�r�)r�r�rB)r�r�r�r�r�r�r�r�r��s

z&DefinitionParser._parse_type_with_initcCs>|��|��}|dur|�d�|��|�d�st|d�S|�d�r)t|g�Sg}	|��|�d�rL|�tdd��|��|�d�sK|�d�nN|�t	�sV|�d�t
t|j�gd	d
�}|��|�d�r�|�t|d	d��|��|�d�s�|�d�n|�t|��|�d�r�q+|�d�r�n|�d�q,t||�S)
Nz(Expected identifier in macro definition.r2r3r�r�Tz-Expected ")" after "..." in macro parameters.z(Expected identifier in macro parameters.Fr;r�z9Expected identifier, ')', or ',' in macro parameter list.)
r�r�r�r�rCr�rZr�r�r1r�r�r�)r�r�r�r3r�r�r��_parse_macro�sH















�
zDefinitionParser._parse_macrocC�|��}t|�Sr�)r�r=r&r�r�r��
_parse_struct��zDefinitionParser._parse_structcCr�r�)r�r>r&r�r�r��_parse_union�r�zDefinitionParser._parse_unioncCr�r�)r�r?r&r�r�r��_parse_enum�r�zDefinitionParser._parse_enumcsV���}���d}��d�r&���dtf�fdd�}��g|�}t|�}t||�S)Nr�rYcr�r�)r�r�r�r�r�r��r�z2DefinitionParser._parse_enumerator.<locals>.parser)r�r�r�rr�r�r@)r�r�r�r��initValr�r�r��_parse_enumerator�s

z"DefinitionParser._parse_enumeratorcCsl|��d}|�d�rd}|��}n|�d�rd}|��}n|�d�r*d}|��}n|�d�t|||d�S)Nr^rarNzTCould not parse pre-v3 type directive. Must start with 'struct', 'union', or 'enum'.F)r�r�r�r�r�r�r�)r�r�rdr�r�r��parse_pre_v3_type_definition�s






z-DefinitionParser.parse_pre_v3_type_definitionr�r�cCs|dvr
td|��|dvrtd|��d}|dkr"|jddd�}nG|dkr.|jddd�}n;|d	kr7|��}n2|d
kr@|��}n)|dkrI|��}n |dkrR|��}n|d
kr[|��}n|dkrg|jddd�}nJ�|d	krw|��|�	d�}nd}t
||||�S)N)rr
rr^rarNrr�z(Internal error, unknown objectType "%s".)	rr
�varrr^rarNrr�z+Internal error, unknown directiveType "%s".r
T)r�r�rrr^rarNrr�Fr)r�r�r�r�r�r�r�r�r�r�r�r�r�r�r��parse_declarations6




z"DefinitionParser.parse_declarationcCr�r�)r�r�r�r�r��parse_namespace_object#r�z'DefinitionParser.parse_namespace_objectcCs&|��}|��|�d�|��|S)Nz())r�r�r�r�r&r�r�r��parse_xref_object&s

z"DefinitionParser.parse_xref_objectc
Cs�|j}d}z|��}|��|��W|Sty_}z?||_z|�d�}|��|��Wn%tyS}zd}g}|�|df�|�|df�|�||�|�d}~wwWYd}~|Sd}~ww)NFz%Error when parsing (type) expression.z
If expressionzIf type)r�r�r�r�r'r�rZr�)r�r�r��exExpr�exTyper�r�r�r�r��parse_expression.s2

�
��
���z!DefinitionParser.parse_expressionr�r�r�)Jr�r�r�r�r�rxr{r}r�rr�rr�r�r	rrur�r:r�r;r�rUr�r�r�r�rr�r�r�r�rr�r�r�rr�r�r�r�r�r�r�r�r�r�r�rr�r�r�r�r�rAr�rBr�rCr�r=r�r>r�r?r�r@r�r�r�r�r�r�r�r�r�r�r�rvgs�

&
�
,&3	��
��
�+	,:
���
�R��
�Q
� ;("rvrYcCsttd�gdd�S)N�PhonyNameDueToErrorFr;)r�r�r�r�r�r��_make_phony_error_nameDr�r�cseZdZUdZdejiZeed<de	ddfdd�Z
de	d	ed
eddfdd�Z
edefd
d��Zedefdd��Zdedefdd�Zdede	fdd�Zdede	fdd�Zd
ede	deddfdd�Zdeef�fdd�Zd	ed
ede	fdd�Zd&d d!�Zd&d"d#�Zdedefd$d%�Z�ZS)'�CObjectz-
    Description of a C language object.
    �noindexentry�option_spec�astrYNcCs�|jdksJ�|j}|sJ�|jdusJ�|j}|sJ�|jdur#dS|j}|dur,dS|jdkr3dS|jdkr:dS|j}|j|jdddd�}|durMdS|j��}||_t	||j||j
j|��dd�dS)NrrNFTrKr�rQ)
r�r�r�r�r�r�rMr�r�r�r�r!�get_source_info)r�r�r�r�
parentDecl�targetSymbolr:�	declCloner�r�r��_add_enumerator_to_parentQs6


�

�z!CObject._add_enumerator_to_parent�sigr�c
	Csg}tdtd�D]}z
|j|d�}|�|�Wq	ty'|tks%J�Yq	wtt|��}|d}|s6J�|j���	��
d�}||jjj
vrs|sKJ�|d�|�|dd�D]}|s]qX||jjj
vrk|d�|�qX|jj�|�d|jvr�|�|�}	|jd�d|	|d	df�dSdS)
Nr�)r�rr��idsr��entriesr�r�)r�rr�rZr(rN�reversedr�r�r��lstrip�state�documentr�note_explicit_targetr	�get_index_text�	indexnode)
r�r�rr�rr��id�newestIdr��	indexTextr�r�r��add_target_and_indexvs4��

�zCObject.add_target_and_indexcCst��r�)r�r�r�r�r��object_type�r�zCObject.object_typecCr�r�)rr�r�r�r��display_object_type�r�zCObject.display_object_typer�cCstd�||jfS)Nz	%s (C %s))rrr&r�r�r�r
�r�zCObject.get_index_textr�cCs|�|j|j�Sr�)r�r�objtype�r�r�r�r�r��parse_definition�r�zCObject.parse_definitioncCs|��Sr�)r�rr�r�r�r��r�z$CObject.parse_pre_v3_type_definitionr	cCs|�|d|j|�dS)Nr�)r�r�)r�r�r�r	r�r�r�r��r+zCObject.describe_signaturecsP|jjjj}d|jvr|jdd}||jd<|��|jd<d|jd<t��	�S)N�c:parent_symbolr��root_symbolr��
c:last_symbol)
r
r�settingsr��	temp_data�
domaindatar��ref_contextr%�run)r�r��rootr'r�r�r�s



zCObject.runcCs8|jjd}t|||jjd�}z`z|�|�}|��WnRtym}zF|jjds*�|jdkr0�z|�|�}|��Wn	tyD|�w|j	|_
|jjdrcd}|�tj
||j	||�}tj||d�WYd}~nd}~wwWn$ty�}ztj||d�t�}	|�|	�}
|
|jjd<t|�d}~wwz<|j||jj|��d	d
�}
|
jdus�J�|
jdus�J�|jjd|
_|
jdur�|
jjdus�J�|
|
j_|
|jjd<Wn2t�y}z%|j|jjd<td�}||jj|jj|j|f}tj||d�WYd}~nd}~ww|j	dk�r|�|�t|j�}|� |||�|S)
Nr�rbry�c_allow_pre_v3r��c_warn_on_allowed_pre_v3zl{}: Pre-v3 C type directive '.. c:type:: {}' converted to '.. c:{}:: {}'.
The original parsing error was:
{}rarr�)r!r)r`r)!r�rrvryrr�r'rr�r�rrrr�rcrdr�ri�
ValueErrorrjr!rr*r+r�r�rr)rr�dictr	r�)r�rr�rr�r��eOrigrhr�r�r�r	r�r�r��handle_signature�st


�
����
��	�
��	

zCObject.handle_signaturecCsP|jjd}|s
J�|jjd|_|jjd|_||jjd<|��|jjd<dS)Nrrr�)r�r�oldParentSymbolr�oldParentKeyr�)r��
lastSymbolr�r�r��before_content�szCObject.before_contentcCs |j|jjd<|j|jjd<dS)Nrr�)r(r�rr)rr�r�r�r��
after_content
szCObject.after_contentcCsd|S)z�Generate old styled node_id for C objects.

        .. note:: Old Styled node_id was used until Sphinx-3.0.
                  This will be removed in Sphinx-5.0.
        r�r�r&r�r�r��make_old_id
szCObject.make_old_idrr)r�r�r��__doc__r�flagr�r;�__annotations__r�rr�rrr�rrr
rvrr�rr�rrrr'r+r,r-rur�r�r'r�r�Hs6
�
%�
� 
�
�
@
r�c@s"eZdZdZedefdd��ZdS)�
CMemberObjectr
rYcCs|jdvsJ�|jS)N)r
r�)rr�r�r�r�r
sz!CMemberObject.display_object_typeN)r�r�r�rr�r�rr�r�r�r�r1

sr1�	parameter�
Parameters)r�r2r��argumentr.)r�)�labelr��typerolename�	typenames�retvalz
Return values)�retvalsr8T)r5r��can_collapse�returnvalue�ReturnsF)�returnsrY)r5�has_argr��
returntypezReturn type)�rtypec@�eZdZdZe��ZdS)�CFunctionObjectrN�r�r�r�r�_function_doc_field_types�copy�doc_field_typesr�r�r�r�rB%
�rBc@rA)�CMacroObjectrNrCr�r�r�r�rH+
rGrHc@�eZdZdZdS)�
CStructObjectr^N�r�r�r�rr�r�r�r�rJ1
�rJc@rI)�CUnionObjectraNrKr�r�r�r�rM5
rLrMc@rI)�CEnumObjectrNNrKr�r�r�r�rN9
rLrNc@rI)�CEnumeratorObjectrNrKr�r�r�r�rO=
rLrOc@rI)�CTypeObjectr�NrKr�r�r�r�rPA
rLrPc@s@eZdZUdZdZdZdZdZiZe	e
d<deefdd	�Z
d
S)�CNamespaceObjectzb
    This directive is just to tell Sphinx that we're documenting stuff in
    namespace foo.
    Fr�rTr�rYc
Cs�|jjdd}|jd��dvr|}g}n?t|jd|��|jjd�}z
|��}|��Wnt	yL}zt
j||��d�t�}WYd}~nd}~ww|�
|�}|g}||jjd<||jjd<|��|jjd	<gS)
Nr�rr��NULL�0�nullptrr!rar�c:namespace_stackr�)r�r�	argumentsr�rv�get_locationryr�r�r'rcrdr�rirr�r)r��
rootSymbolr��stackr�r�r�r�r�r�rQ
s,
���
zCNamespaceObject.runN)r�r�r�r.�has_content�required_arguments�optional_arguments�final_argument_whitespacer�r;r0rrrr�r�r�r�rQE
s
rQc@s<eZdZUdZdZdZdZiZee	d<de
efdd�Zd	S)
�CNamespacePushObjectFr�rTr�rYc
Cs�|jd��dvrgSt|jd|��|jjd�}z
|��}|��WntyA}zt	j
||��d�t�}WYd}~nd}~ww|jj�
dd�}|sT|jjdd}|�|�}|jj�
dg�}|�|�||jjd<||jjd<|��|jjd	<gS)
NrrRr!rarr�rrVr�)rWr�rvrXr�ryr�r�r'rcrdr�r�getrrirZr�r)r�r�r�r��	oldParentr�rZr�r�r�ro
s0
���

zCNamespacePushObject.runN�
r�r�r�r[r\r]r^r�r;r0rrrr�r�r�r�r_h
�
r_c@s<eZdZUdZdZdZdZiZee	d<de
efdd�ZdS)	�CNamespacePopObjectFrTr�rYcCs�|jj�dd�}|rt|�dkrtjd|��d�g}n|��t|�dkr+|d}n|jjdd}||jjd<||jjd<|�	�|jj
d	<gS)
NrVrz;C namespace pop on empty stack. Defaulting to global scope.rar�r�rrz
cp:parent_key)r�rr`r�rcrdrXr�rr�r)r�rZr�r�r�r�r�
s�
zCNamespacePopObject.runNrbr�r�r�r�rd�
rcrdc
sFeZdZ		d
dedededddeddf�fd	d
�
Zddd�Z�Z	S)�	AliasNodeNr�aliasOptionsrr�r�	parentKeyrYcszt���||_||_||_|dur2d|jvr*|jdd}||jd<|��|jd<|jd|_	dS|dus8J�||_	dS)Nrr�rr�)
r%r�rrfrrrr�rrg)r�rrfrr�rgr r'r�r�r��
s



zAliasNode.__init__cCs|j|j|j|jd|jd�S)N)r�rg)r(rrfrrgr�r�r�r�rE�
s�zAliasNode.copyr�)rYre)
r�r�r�r�r%rrr�rErur�r�r'r�re�
s�����rec@sReZdZejdZdededededede	de
efd	d
�Zde	ddfd
d�Z
dS)�AliasTransformr�r:�maxdepth�skipThisrf�
renderOptionsrrYc	Cs|dkrd}n
|dkrd}n|d8}d}g}|s-t�dd�}	|�|	�|j�|	d|j|�|r�|r4|}
n"t��}t��}|�|�||_d|d<d	|d
<|d<d|d<|}
|j	D]}
|
jduraqY|j
|
|d|||d
�}|
�|�qY|s�t|j	�dkr�|�|�|S)NrTr�Fr�r�r��domain�aliasr�desctype�noindex�rirjrfrkr)
r�desc_signaturerZr�r�r��desc_contentr�rr$�_render_symbolr�r�)r�r:rirjrfrkr�recurser
r��childContainer�contentr�r6�
childNodesr�r�r�rs�
sD



�
zAliasTransform._render_symbol�kwargsNc
Ks�|j�t�D]�}tt|�}|j}|j}zt|||jjd�}|�	�}Wnt
y=}ztj||d�d}WYd}~nd}~ww|durZt
�|d�}|��|t
�||�7}|�|�q|jjdjd}	|	�|�}
|
s{td|�td|�t|	�d��|
sJ�|
j|d	d
d
d�}|dur�t
�|d�}|�|�|��|t
�||�7}tjd||d�|�|�q|jd
s�|jdur�t
�|d�}|�|�|��|t
�||�7}tjd||d�|�|�q|j||jd|jd
|jt�|jd�}|�|�qdS)Nr!rar�r�r�Target: �ParentKey: r��anyTrLz,Could not find C declaration for alias '%s'.�norootzACan not render C declaration for alias '%s'. No such declaration.rirp)r�traversererrrgrvr�ryr�r'rcrdrrq�clearr��replace_self�domainsrrmrr�rorZrfr�rsr%)
r�rxr�rrgr�r�r�r�rYrr:r
r�r�r��apply�
sv
���



�

�

�
��zAliasTransform.apply)r�r�r�r!�default_priorityr�rUrur%rrrrsr�r�r�r�r�rh�
s
���
�,rhc@s6eZdZUejejd�Zeed<de	e
fdd�ZdS)�CAliasObject�rir|r�rYc	Cs�d|jvr|j�dd�\|_|_nd|j|_|_t��}|jj|_|j|d<|j|d<|d<d|d<g|_|j	�
d	d�d
|j	vd�}|d
rW|d	dkrWtjd|�
�d
�|��}t|�D]\}}|�t|||jj|jd��q_|gS)z�
        On purpose this doesn't call the ObjectDescription version, but is based on it.
        Each alias signature may expand into multiple real signatures if 'noroot'.
        The code is therefore based on the ObjectDescription version.
        r�r�r�rlrrnTrorir|r�z�Error in C alias declaration. Requested 'noroot' but 'maxdepth' 1. When skipping the root declaration, need 'maxdepth' 0 for infinite or at least 2.ra)r�)r��splitrlrrr�r
rr�r	r`rcrdrX�get_signatures�	enumeraterZrer�)r�r�rf�
signaturesr�rr�r�r�r,s(


��zCAliasObject.runN)r�r�r�r�nonnegative_intr/r�r;r0rrrr�r�r�r�r�&s

�r�cs\eZdZdedededededeeeffdd�Zdee	e
e	eff�fd	d
�Z�Z
S)�	CXRefRoler��refnode�has_explicit_title�title�targetrYcCsv|j�|j�|st�dt|��}|s7|�d�}|dd�dkr7|dd�}|�d�}|dkr7||dd�}||fS)Nr�r�rr�r�r�)�
attributes�updaterr+�subr�r	�rfind)r�r�r�r�r�r��dotr�r�r��process_linkPs

zCXRefRole.process_linkc	sD|jjdst���S|j�dd�}t||��|jjd�}z
|��t���WSt	y�}znd|_
z|��}Wnt	yLt���YWYd}~Swgd�}|jj�
dd�}|dure|jjdd	}tj|d
�}|�|d|j|�|jjdr�d
}|d7}|�tj|||�}tj||��d�|ggfWYd}~Sd}~ww)Nr"rqr`r!r)�xrefr��c-texprzcpp:parent_symbolr�r��classesr�r#zB{}: Pre-v3 C type role ':c:type:`{}`' converted to ':c:expr:`{}`'.z#
The original parsing error was:
{}ra)r�ryr%rr��replacervrXr�r'r�r�rr`rr
rTr�rrr�rcrd)	r�r�r�r&r�r�rr�rhr'r�r�rds<

����z
CXRefRole.run)r�r�r�rrrur�r	r�rrrrrur�r�r'r�r�Os
���

�*r�csDeZdZdeddf�fdd�Zdeeeeeffdd�Z	�Z
S)�	CExprRole�asCoderYNcs"t���|rd|_dSd|_dS)Nzc-exprr�)r%r��
class_type)r�r�r'r�r�r��s


zCExprRole.__init__c
Cs�|j�dd�}t||��|jjd�}z|��}Wn+tyC}ztj	d|||��d�t
jd|||jgd�ggfWYd}~Sd}~ww|jj
�dd�}|durX|jjdd	}t
jd|jgd�}|�|d
|j|�|ggfS)Nrqr`r!zUnparseable C expression: %r
%srar�r�rrr�)r�r�rvrXr�ryr�r'rcrdr�desc_inliner�rr`rr�)r�r�r�r��exrr�r�r�r�r�s&
�
�(��
z
CExprRole.run)r�r�r�rur�r	rrrrrur�r�r'r�r��s&	r�c@sxeZdZUdZdZdZeed�dddd�eed�dddd�eed	�d
dd�eed�dd�eed
�d
dd�eed�ddd�eed�ddd�eed�dd�eed�dd�eed�dddd�d�
Ze	e	e
eee
eeeeeeed�
Ze�e�e�edd�e�e�e�e�e�e�edd�edd�d�Zeddddd�id�Zeeeeeeeeeeffffed<deddfdd�Z d e!ded!e"j#ddfd"d#�Z$d$e%ddfd%d&�Z&d'e'ed(eddfd)d*�Z(d e!d+ed,e)d-ed.ed/e%d0e*dee+e*e+effd1d2�Z,d e!d+ed,e)d-ed.ed/e%d0e*de+e*fd3d4�Z-d e!d+ed,e)d.ed/e%d0e*de'eee*ffd5d6�Z.de/eeeeeee0ffd7d8�Z1dS)9�CDomainzC language domain.r�rwr
r�rr��variabler�funcr�rr^rarNrzfunction parameter)
r
r�rrr^rarNrr�r0)
r
r�rrr^rarNrr��	namespaceznamespace-pushz
namespace-poprmT)�
fix_parens)r�F)r
rr�r�rr^rarNrr�r.�texprN)r�objects�initial_datar!rYcCs�tjrtd|�td�t|jd�d��td�|jd}|�|�tjr@td�t|jd�d��td�td|�dSdS)	Nz
clear_doc:z	before:rr�z	before endz	after:z
	after endzclear_doc end:)r�rsrrr�r5)r�r!rYr�r�r�r5�s


�zCDomain.clear_docr�rcCs6tjrtd|�t|jd�d��td|�dSdS)Nzprocess_doc:rrzprocess_doc end:)r�rsrrr�)r�r�r!rr�r�r��process_doc�s

�zCDomain.process_docr�cCs|j�|jj�dSr�)r�r�r�r)r�r�r�r�r��process_field_xref�r�zCDomain.process_field_xrefr_�	otherdatacCs�tjr.td�td�t|jd�d��td�td�t|d�d��td�td�|jd�|d||j�|jd	}|d	��D]\}\}}}||vr\||vr\|||f||<qFdS)
Nzmerge_domaindata:z	self:rr�z		self endz	other:z
	other endzmerge_domaindata endr�)r�rsrrr�rer��items)r�r_r��
ourObjects�fullname�fnrrr�r�r��merge_domaindata�s&�
��zCDomain.merge_domaindata�fromdocname�builderrdr�r��contnodec
Cst|||jd�}z|��}	Wnty*}
ztjd||
|d�WYd}
~
dSd}
~
ww|�dd�}|jd}|rU|�|�}
|
sPt	d|�t	d|�t	|�
d	��|
sTJ�n|}
|
j|	|d
d
d�}|dusi|jdurkdS|j}|	�
�}|j}|syJ�t||||��||�|jfS)Nr!z$Unparseable C cross-reference: %r
%srar�r�rryrzr�TrL)rvryr�r'rcrdr`rrmrr�ror�r�r!r:rr�)r�r�r�r�rdr�r�r�r�r�r�rgrYrr:r��displayNamer!r�r�r��_resolve_xref_innersD
���




�
��zCDomain._resolve_xref_innerc	Cs|�|||||||�dSr�)r�)r�r�r�r�rdr�r�r�r�r�r��resolve_xref0s
��zCDomain.resolve_xrefc	
Cs^t���|�|||d|||�\}}Wd�n1swY|r-d|�|�|fgSgS)Nr{zc:)r"�suppress_loggingr��role_for_objtype)	r�r�r�r�r�r�r��retnoderr�r�r��resolve_any_xref6s


��zCDomain.resolve_any_xrefc	cs��|jd}|��D]4}|jdurq
|jsJ�|��}t|��d�}|���d�}|jj}|j}|j�	�}|||||dfVq
dS)Nrr�r�)
rr7r�r!r�r�r	r�r�r)	r�rYr��fullNestedNamer��dispnamer�r!rr�r�r��get_objects@s�



�zCDomain.get_objects)2r�r�r�r.r�r5rr�object_typesr1rBrHrJrMrNrOrPrQr_rdr�rr�r��rolesr�r�rr�rr	r0r5rr
rr�rr�rr�rrrr�r�r�rrUr�r�r�r�r�r��s�
���0�
�
�����
�%����
����
�&
r��appcCsh|�t�|�dgd�|�dgd�|�dtd�|�t�|�ddd�|�ddd�d	d
ddd�S)Nrzr�r|r�r"Fr#T�builtinrH)r��env_version�parallel_read_safe�parallel_write_safe)�
add_domainr��add_config_value�_macroKeywords�add_post_transformrh)r�r�r�r��setupOs

�r�)�r.�re�typingrrrrrrrr	r
rr�docutilsr
�docutils.nodesrrrr�docutils.parsers.rstr�sphinxr�sphinx.addnodesr�sphinx.applicationr�sphinx.buildersr�sphinx.deprecationr�sphinx.directivesr�sphinx.domainsrr�sphinx.environmentr�
sphinx.localerr�sphinx.rolesrr�sphinx.transformsr �!sphinx.transforms.post_transformsr!�sphinx.utilr"�sphinx.util.cfamilyr#r$r%r&r'r(r)r*r+r,r-r.r/r0r1r2r3r4r5�sphinx.util.docfieldsr6r7r8�sphinx.util.docutilsr9�sphinx.util.nodesr:�sphinx.util.typingr;�	getLoggerr�rcr<rr�r�r�r�r�rr�compile�Sr�r�r�r�r�r�r�rrrrrr"r$r,r7r8r=rCrMrPrUr\rbrirjrkrpr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r:r;r�rArBr�rCr=r>r?r@r�rrr�rvr�r�r1rDrBrHrJrMrNrOrPrQr_rdrerhr�r�r�r�r�r�r�r�r�r��<module>s8
4T
��
�
	/Q

		
3?6;
)!I&/(Z	dF
�
����#o)7 *