U
    \ShbP                 /   @  sp  d Z ddlmZ ddlZddlmZmZmZmZm	Z	m
Z
mZ ddlmZ ddlmZmZmZmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlm Z m!Z! ddl"m#Z# ddl$m%Z%m&Z& ddl'm(Z(m)Z) ddl*m+Z+ ddl,m-Z- ddl.m/Z/ ddl0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZC ddlDmEZEmFZFmGZG ddlHmIZI ddlJmKZK ddlLmMZM e/NeOZPe	dZQe
d ZRdddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIg/ZSdJdKdLdMdNdOdPdQgZTdRdSgdTdUgdVdWgdXdYgdZd[gd\d]d^gd_d`dadbgdcddgdedfgdgdhdigdjdkggZUdldmdgdZdedfdndodpdqg
ZVdrdsdtdudvdwdxdydzd{d|d}d~dgZWdZXdddgZYeZdej[Z\eZdej]Z^G dd de_Z`G dd de2ZaG dd de2ZbG dd deaZcG dd deaZdG dd dedZeG dd deeZfG dd deeZgG dd deeZhG dd deeZiG dd dedZjG dd dedZkG dd deaZlG dd delZmG dd delZnG dd delZoG dd delZpG dd delZqG dd dedZrG dd dedZsG dd dedZtG dd dedZuG dd dedZvG dd dedZwG dd deaZxG dd dedZyG dd dedZzG dd deaZ{G dd de{Z|G dd de{Z}G dd deaZ~G ddĄ deaZG ddƄ de2ZG ddȄ deaZG ddʄ deaZG dd̄ deaZG dd΄ deZG ddЄ deZG dd҄ deZG ddԄ deZG ddք de3ZG dd؄ deaZG ddڄ deaZG dd܄ deaZG ddބ deaZG dd deaZG dd deaZG dd deaZG dd deaZG dd deaZG dd deaZG dd de2ZG dd dZG dd dZG dd dZG dd de4ZddddZG dd dee ZG dd deZeGde%dddd deFde%ddddeEde%dd	d
deEde%dd	ddgZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deIZG dd  d eIZG d!d" d"eIZG d#d$ d$ejZG d%d& d&e+ZG d'd( d(eZG d)d* d*e)ZG d+d, d,e(ZG d-d. d.e Zd/d0d1d2d3ZdS (4  zThe C language domain.    )annotationsN)AnyCallable	GeneratorIteratorTypeVarUnioncast)nodes)ElementNodeTextElementsystem_message)
directives)addnodes)pending_xref)Sphinx)Builder)ObjectDescription)DomainObjType)BuildEnvironment)___)
SphinxRoleXRefRole)SphinxTransform)ReferencesResolver)logging)ASTAttributeList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forZgotoifinlineintlongregisterrestrictreturnshortsignedsizeofstaticstructswitchtypedefunionZunsignedvoidvolatilewhileZ_AlignasZ_AlignofZ_AtomicZ_BoolZ_ComplexZ
_Decimal32Z
_Decimal64Z_Decimal128Z_GenericZ
_ImaginaryZ	_NoreturnZ_Static_assert_Thread_localZalignasalignofboolcomplex	imaginaryZnoreturnZstatic_assertthread_localz||orz&&and|Zbitor^xor&Zbitandz==z!=Znot_eqz<=z>=<>z<<z>>+-*/%z.*z->*++--!not~Zcompl=z*=z/=z%=z+=z-=z>>=z<<=z&=Zand_eqz^=Zxor_eqz|=Zor_eq   zc.zCv2.z>[LuU8]?('([^'\\]*(?:\\.[^'\\]*)*)'|"([^"\\]*(?:\\.[^"\\]*)*)")aj  
    \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,   e Zd ZddddddZddd	d
ZdS )_DuplicateSymbolErrorSymbolASTDeclarationNone)symboldeclarationrT   c                 C  s    |st |st || _|| _d S N)AssertionErrorr~   r   )selfr~   r    r   C/root/rtd-docs/venv/lib/python3.8/site-packages/sphinx/domains/c.py__init__z   s    z_DuplicateSymbolError.__init__strrT   c                 C  s   d| j d S )Nz%Internal C duplicate symbol error:
%sr   )r~   dumpr   r   r   r   __str__   s    z_DuplicateSymbolError.__str__N__name__
__module____qualname__r   r   r   r   r   r   rz   y   s   rz   c                   @  s"   e Zd ZddddddddZd	S )
ASTBaser   r   r   r{   r}   signodemodeenvr~   rT   c                 C  s   t t| d S r   NotImplementedErrorreprr   r   r   r   r~   r   r   r   describe_signature   s    zASTBase.describe_signatureN)r   r   r   r   r   r   r   r   r      s   r   c                   @  sn   e Zd ZdddddZdddd	d
ZddddZddddZddddZdddddddddZdS )ASTIdentifierr   r}   )
identifierrT   c                 C  s&   |d k	st t|dkst || _d S Nr   )r   lenr   )r   r   r   r   r   r      s    zASTIdentifier.__init__r   rb   otherrT   c                 C  s   t |tko| j|jkS r   )typer   r   r   r   r   r   r   __eq__   s    zASTIdentifier.__eq__r   c                 C  s   | j d dkS )Nr   @r   r   r   r   r   is_anon   s    zASTIdentifier.is_anonc                 C  s   | j S r   r   r   r   r   r   r      s    zASTIdentifier.__str__c                 C  s   |   rdS | jS )N[anonymous])r   r   r   r   r   r   get_display_string   s    z ASTIdentifier.get_display_stringr   r   r{   )r   r   r   prefixr~   rT   c           
      C  s   t | |  rtjdd}nt| j| j}|dkrt|| j }tjddd|d d d}| |d< ||7 }||7 }n@|d	krt }	|	|7 }	||	7 }n|d
kr||7 }ntd| d S )Nr   )textmarkType cr   )Z	refdomainZreftypeZ	reftargetmodname	classnamec:parent_key
lastIsName
noneIsNameUnknown description mode: %s)	r1   r   r   desc_sig_namer   r   get_lookup_key	desc_name	Exception)
r   r   r   r   r   r~   nodeZ
targetTextpnodeZnameNoder   r   r   r      s,    
 


z ASTIdentifier.describe_signatureN)	r   r   r   r   r   r   r   r   r   r   r   r   r   r      s   r   c                   @  sf   e Zd ZddddddZed ddd	Zd
ddddZdddddZddddddddZdS )ASTNestedNamezlist[ASTIdentifier]rb   r}   )namesrootedrT   c                 C  s    t |dkst|| _|| _d S r   )r   r   r   r   )r   r   r   r   r   r   r      s    zASTNestedName.__init__r   c                 C  s   | S r   r   r   r   r   r   name   s    zASTNestedName.namerP   r   versionrT   c                 C  s   d dd | jD S )N.c                 s  s   | ]}t |V  qd S r   )r   .0nr   r   r   	<genexpr>   s     z'ASTNestedName.get_id.<locals>.<genexpr>joinr   r   r   r   r   r   get_id   s    zASTNestedName.get_idr%   	transformrT   c                   s0   d  fdd| jD }| jr(d| S |S d S )Nr   c                 3  s   | ]} |V  qd S r   r   r   r   r   r   r      s     z+ASTNestedName._stringify.<locals>.<genexpr>)r   r   r   r   r   resr   r   r   
_stringify   s    zASTNestedName._stringifyr   r   r{   r   c                 C  s  t | |dkr~| jr,td|td7 }tt| jD ]>}|dkr\td|td7 }| j| }||||d| q:n|dkr| jrtt	| t| jdkst| jd |d|d| nP|dkr
d}d	}|d
kr| jd d n| j}	|}
|d
kr
t
 }
| jrT|d7 }|d
krDt|	dkrD|t
dd7 }n|
t
dd7 }
tt|	D ]\}|	| }|s|
t
dd7 }
|d7 }d}t	|}|dkr||
d||| ||7 }q`|d
krt| jdkr|
t
dd7 }
||
7 }| jd |||d| ntd| d S )Nr   zCan this happen?r   r   r   paramry   )r   r   markNameTr   Fr   r   )r1   r   r   r
   Textranger   r   r   r   r   Zdesc_addnamedesc_sig_punctuationr   )r   r   r   r   r~   ir   r   firstr   destidentZ	txt_identr   r   r   r      sV    




z ASTNestedName.describe_signatureN	r   r   r   r   propertyr   r   r   r   r   r   r   r   r      s   r   c                   @  s   e Zd ZdS )ASTExpressionNr   r   r   r   r   r   r   r     s   r   c                   @  s   e Zd ZdS )
ASTLiteralNr   r   r   r   r   r     s   r   c                   @  sB   e Zd ZdddddZdddd	d
ZddddddddZdS )ASTBooleanLiteralrb   r}   )valuerT   c                 C  s
   || _ d S r   r   )r   r   r   r   r   r     s    zASTBooleanLiteral.__init__r%   r   r   c                 C  s   | j r
dS dS d S )Ntruefalser   r   r   r   r   r   r     s    zASTBooleanLiteral._stringifyr   r   r{   r   c                 C  s   t | }|t||7 }d S r   )r   r   desc_sig_keywordr   r   r   r   r~   txtr   r   r   r   "  s    z$ASTBooleanLiteral.describe_signatureNr   r   r   r   r   r   r   r   r   r   r     s   r   c                   @  sB   e Zd ZdddddZddddd	Zd
dddddddZdS )ASTNumberLiteralr   r}   datarT   c                 C  s
   || _ d S r   r   r   r   r   r   r   r   )  s    zASTNumberLiteral.__init__r%   r   c                 C  s   | j S r   r   r   r   r   r   r   ,  s    zASTNumberLiteral._stringifyr   r   r{   r   c                 C  s   t | }|t||7 }d S r   )r   r   Zdesc_sig_literal_numberr   r   r   r   r   /  s    z#ASTNumberLiteral.describe_signatureNr   r   r   r   r   r   (  s   r   c                   @  sD   e Zd ZddddddZddddd	Zd
dddddddZdS )ASTCharLiteralr   r}   )r   r   rT   c                 C  s>   || _ || _| d}t|dkr2t|| _nt|d S )Nzunicode-escapery   )r   r   encodedecoder   ordr   r&   )r   r   r   decodedr   r   r   r   6  s    zASTCharLiteral.__init__r%   r   c                 C  s0   | j d krd| j d S | j d | j d S d S )N')r   r   r   r   r   r   r   ?  s    
zASTCharLiteral._stringifyr   r   r{   r   c                 C  s   t | }|t||7 }d S r   )r   r   Zdesc_sig_literal_charr   r   r   r   r   E  s    z!ASTCharLiteral.describe_signatureNr   r   r   r   r   r   5  s   	r   c                   @  sB   e Zd ZdddddZddddd	Zd
dddddddZdS )ASTStringLiteralr   r}   r   c                 C  s
   || _ d S r   r   r   r   r   r   r   L  s    zASTStringLiteral.__init__r%   r   c                 C  s   | j S r   r   r   r   r   r   r   O  s    zASTStringLiteral._stringifyr   r   r{   r   c                 C  s   t | }|t||7 }d S r   )r   r   Zdesc_sig_literal_stringr   r   r   r   r   R  s    z#ASTStringLiteral.describe_signatureNr   r   r   r   r   r   K  s   r   c                   @  sP   e Zd ZddddZddddd	Zd
ddddZddddddddZdS )ASTIdExpressionr   r   c                 C  s
   || _ d S r   r   r   r   r   r   r   r   Y  s    zASTIdExpression.__init__r%   r   r   c                 C  s
   || j S r   r   r   r   r   r   r   ]  s    zASTIdExpression._stringifyrP   r   c                 C  s   | j |S r   )r   r   r   r   r   r   r   `  s    zASTIdExpression.get_idr   r   r{   r}   r   c                 C  s   | j |||| d S r   )r   r   r   r   r   r   r   c  s    z"ASTIdExpression.describe_signatureNr   r   r   r   r   r   r   r   r   r   r   r   X  s   r   c                   @  sJ   e Zd Zdd ZdddddZddd	d
dZddddddddZdS )ASTParenExprc                 C  s
   || _ d S r   exprr   r   r   r   r   r   i  s    zASTParenExpr.__init__r%   r   r   c                 C  s   d|| j  d S N()r   r   r   r   r   r   l  s    zASTParenExpr._stringifyrP   r   c                 C  s   | j |S r   )r   r   r   r   r   r   r   o  s    zASTParenExpr.get_idr   r   r{   r}   r   c                 C  s6   |t dd7 }| j|||| |t dd7 }d S r   r   r   r   r   r   r   r   r   r   r  s    zASTParenExpr.describe_signatureNr   r   r   r   r   r   h  s   r   c                   @  s   e Zd ZdS )ASTPostfixOpNr   r   r   r   r   r   |  s   r   c                   @  sB   e Zd ZdddddZdddd	d
ZddddddddZdS )ASTPostfixCallExprz$ASTParenExprList | ASTBracedInitListr}   )lstrT   c                 C  s
   || _ d S r   r   )r   r   r   r   r   r     s    zASTPostfixCallExpr.__init__r%   r   r   c                 C  s
   || j S r   r  r   r   r   r   r     s    zASTPostfixCallExpr._stringifyr   r   r{   r   c                 C  s   | j |||| d S r   )r   r   r   r   r   r   r     s    z%ASTPostfixCallExpr.describe_signatureNr   r   r   r   r   r     s   r   c                   @  sB   e Zd ZdddddZdddd	d
ZddddddddZdS )ASTPostfixArrayr   r}   )r   rT   c                 C  s
   || _ d S r   r   r   r   r   r   r     s    zASTPostfixArray.__init__r%   r   r   c                 C  s   d|| j  d S N[]r   r   r   r   r   r     s    zASTPostfixArray._stringifyr   r   r{   r   c                 C  s6   |t dd7 }| j|||| |t dd7 }d S r  r   r   r   r   r   r     s    z"ASTPostfixArray.describe_signatureNr   r   r   r   r   r    s   r  c                   @  s2   e Zd ZdddddZddddd	d
ddZdS )ASTPostfixIncr%   r   r   c                 C  s   dS Nrs   r   r   r   r   r   r     s    zASTPostfixInc._stringifyr   r   r{   r}   r   c                 C  s   |t dd7 }d S r  r   desc_sig_operatorr   r   r   r   r     s    z ASTPostfixInc.describe_signatureNr   r   r   r   r   r   r   r   r   r    s   r  c                   @  s2   e Zd ZdddddZddddd	d
ddZdS )ASTPostfixDecr%   r   r   c                 C  s   dS Nrt   r   r   r   r   r   r     s    zASTPostfixDec._stringifyr   r   r{   r}   r   c                 C  s   |t dd7 }d S r  r  r   r   r   r   r     s    z ASTPostfixDec.describe_signatureNr
  r   r   r   r   r    s   r  c                   @  s:   e Zd Zdd ZdddddZddd	d
ddddZdS )ASTPostfixMemberOfPointerc                 C  s
   || _ d S r   r   r   r   r   r   r     s    z"ASTPostfixMemberOfPointer.__init__r%   r   r   c                 C  s   d|| j  S )N->r   r   r   r   r   r     s    z$ASTPostfixMemberOfPointer._stringifyr   r   r{   r}   r   c                 C  s&   |t dd7 }| j|d|| d S )Nr  r   )r   r	  r   r   r   r   r   r   r     s    z,ASTPostfixMemberOfPointer.describe_signatureNr   r   r   r   r   r    s   r  c                   @  sB   e Zd ZdddddZdddd	d
ZddddddddZdS )ASTPostfixExprr   zlist[ASTPostfixOp]r   	postFixesc                 C  s   || _ || _d S r   r  )r   r   r  r   r   r   r     s    zASTPostfixExpr.__init__r%   r   r   c                 C  s0   || j g}| jD ]}||| qd|S Nr   )r   r  appendr   )r   r   r   pr   r   r   r     s    
zASTPostfixExpr._stringifyr   r   r{   r}   r   c                 C  s2   | j |||| | jD ]}||||| qd S r   )r   r   r  )r   r   r   r   r~   r  r   r   r   r     s    
z!ASTPostfixExpr.describe_signatureNr   r   r   r   r   r    s   r  c                   @  sB   e Zd ZdddddZddddd	Zd
dddddddZdS )ASTUnaryOpExprr   r   opr   c                 C  s   || _ || _d S r   r  )r   r  r   r   r   r   r     s    zASTUnaryOpExpr.__init__r%   r   c                 C  s6   | j d dkr"| j d || j S | j || j S d S )Nr   cn r  r   r   r   r   r     s    zASTUnaryOpExpr._stringifyr   r   r{   r}   r   c                 C  sZ   | j d dkr0|t| j | j 7 }|t 7 }n|t| j | j 7 }| j|||| d S )Nr   r  )r  r   r   desc_sig_spacer	  r   r   r   r   r   r   r     s
    z!ASTUnaryOpExpr.describe_signatureNr   r   r   r   r   r    s   r  c                   @  s:   e Zd Zdd ZdddddZddd	d
ddddZdS )ASTSizeofTypec                 C  s
   || _ d S r   typr   r  r   r   r   r     s    zASTSizeofType.__init__r%   r   r   c                 C  s   d|| j  d S )Nzsizeof(r   r  r   r   r   r   r     s    zASTSizeofType._stringifyr   r   r{   r}   r   c                 C  sF   |t dd7 }|t dd7 }| j|||| |t dd7 }d S )NrW   r   r   r   r   r   r  r   r   r   r   r   r     s    z ASTSizeofType.describe_signatureNr   r   r   r   r   r    s   r  c                   @  s@   e Zd ZddddZddddd	Zd
dddddddZdS )ASTSizeofExprr   r   c                 C  s
   || _ d S r   r   r   r   r   r   r     s    zASTSizeofExpr.__init__r%   r   r   c                 C  s   d|| j  S )Nzsizeof r   r   r   r   r   r     s    zASTSizeofExpr._stringifyr   r   r{   r}   r   c                 C  s2   |t dd7 }|t  7 }| j|||| d S )NrW   )r   r   r  r   r   r   r   r   r   r     s    z ASTSizeofExpr.describe_signatureNr   r   r   r   r   r     s   r   c                   @  s@   e Zd ZddddZddddd	Zd
dddddddZdS )ASTAlignofExprr=   r  c                 C  s
   || _ d S r   r  r  r   r   r   r     s    zASTAlignofExpr.__init__r%   r   r   c                 C  s   d|| j  d S )Nzalignof(r   r  r   r   r   r   r     s    zASTAlignofExpr._stringifyr   r   r{   r}   r   c                 C  sF   |t dd7 }|t dd7 }| j|||| |t dd7 }d S )Nra   r   r   r  r   r   r   r   r     s    z!ASTAlignofExpr.describe_signatureNr   r   r   r   r   r!     s   r!  c                   @  sB   e Zd ZdddddZdddd	d
ZddddddddZdS )ASTCastExprr=   r   r  r   c                 C  s   || _ || _d S r   r#  )r   r  r   r   r   r   r     s    zASTCastExpr.__init__r%   r   r   c                 C  s:   dg}| || j | d | || j d|S Nr   r   r   )r  r  r   r   r   r   r   r   r     s
    
zASTCastExpr._stringifyr   r   r{   r}   r   c                 C  sH   |t dd7 }| j|||| |t dd7 }| j|||| d S r   )r   r   r  r   r   r   r   r   r   r     s    zASTCastExpr.describe_signatureNr   r   r   r   r   r"    s   r"  c                   @  sB   e Zd ZdddddZdddd	d
ZddddddddZdS )ASTBinOpExprlist[ASTExpression]	list[str]exprsopsc                 C  s8   t |dkstt |t |d ks(t|| _|| _d S Nr   ry   r   r   r)  r*  r   r)  r*  r   r   r   r   '  s    zASTBinOpExpr.__init__r%   r   r   c                 C  st   g }| || jd  tdt| jD ]@}| d | | j|d   | d | || j|  q(d|S Nr   ry   r  r   r  r)  r   r   r*  r   r   r   r   r   r   r   r   r   -  s    

zASTBinOpExpr._stringifyr   r   r{   r}   r   c                 C  s   | j d |||| tdt| j D ]}|t 7 }| j|d  }t|d tdkr~t|d tdkr~|t||7 }n|t	||7 }|t 7 }| j | |||| q&d S Nr   ry   az
r)  r   r   r   r   r  r*  r   r   r	  r   r   r   r   r~   r   r  r   r   r   r   7  s    (zASTBinOpExpr.describe_signatureNr   r   r   r   r   r%  &  s   
r%  c                   @  sB   e Zd ZdddddZdddd	d
ZddddddddZdS )ASTAssignmentExprr&  r'  r(  c                 C  s8   t |dkstt |t |d ks(t|| _|| _d S r+  r,  r-  r   r   r   r   F  s    zASTAssignmentExpr.__init__r%   r   r   c                 C  st   g }| || jd  tdt| jD ]@}| d | | j|d   | d | || j|  q(d|S r.  r/  r0  r   r   r   r   L  s    

zASTAssignmentExpr._stringifyr   r   r{   r}   r   c                 C  s   | j d |||| tdt| j D ]}|t 7 }| j|d  }t|d tdkr~t|d tdkr~|t||7 }n|t	||7 }|t 7 }| j | |||| q&d S r1  r4  r5  r   r   r   r   V  s    (z$ASTAssignmentExpr.describe_signatureNr   r   r   r   r   r6  E  s   
r6  c                   @  sP   e Zd ZddddZdddddZd	dd
ddZddddddddZdS )ASTFallbackExprr   r   c                 C  s
   || _ d S r   r   r   r   r   r   r   e  s    zASTFallbackExpr.__init__r%   r   c                 C  s   | j S r   r   r   r   r   r   r   h  s    zASTFallbackExpr._stringifyrP   r   c                 C  s
   t | jS r   )r   r   r   r   r   r   r   k  s    zASTFallbackExpr.get_idr   r   r{   r}   r   c                 C  s   |t | j| j7 }d S r   )r
   literalr   r   r   r   r   r   n  s    z"ASTFallbackExpr.describe_signatureNr   r   r   r   r   r7  d  s   r7  c                   @  s   e Zd ZdS )ASTTrailingTypeSpecNr   r   r   r   r   r9  w  s   r9  c                   @  sB   e Zd ZdddddZdddd	d
ZddddddddZdS )ASTTrailingTypeSpecFundamentalr'  r}   )r   rT   c                 C  s   t |dkst|| _d S r   )r   r   r   )r   r   r   r   r   r   |  s    z'ASTTrailingTypeSpecFundamental.__init__r%   r   r   c                 C  s   d | jS )Nr  r   r   r   r   r   r     s    z)ASTTrailingTypeSpecFundamental._stringifyr   r   r{   r   c                 C  s:   d}| j D ]*}|s |t 7 }nd}|t||7 }q
d S )NTF)r   r   r  Zdesc_sig_keyword_type)r   r   r   r   r~   r   r   r   r   r   r     s    
z1ASTTrailingTypeSpecFundamental.describe_signatureNr   r   r   r   r   r:  {  s   r:  c                   @  sV   e Zd ZddddddZedddd	Zd
ddddZddddddddZdS )ASTTrailingTypeSpecNamer   r   r}   )r   
nestedNamerT   c                 C  s   || _ || _d S r   )r   r<  )r   r   r<  r   r   r   r     s    z ASTTrailingTypeSpecName.__init__r   c                 C  s   | j S r   )r<  r   r   r   r   r     s    zASTTrailingTypeSpecName.namer%   r   c                 C  s:   g }| j r || j  |d ||| j d|S )Nr  r   )r   r  r<  r   r   r   r   r   r     s    
z"ASTTrailingTypeSpecName._stringifyr   r   r{   r   c                 C  s>   | j r&|t| j | j 7 }|t 7 }| jj||||d d S Nr~   )r   r   r   r  r<  r   r   r   r   r   r     s    z*ASTTrailingTypeSpecName.describe_signatureN)r   r   r   r   r   r   r   r   r   r   r   r   r;    s
   r;  c                   @  sZ   e Zd ZdddddddZdd	d
d	dddZdd	dddZdd	dd
ddddZdS )ASTFunctionParameterFzASTTypeWithInit | Nonerb   r}   )argellipsisrT   c                 C  s   || _ || _d S r   )r@  rA  )r   r@  rA  r   r   r   r     s    zASTFunctionParameter.__init__rP   r   r{   r   
objectTyper~   rT   c                 C  s   |j jj|ddS )NF)prefixed)parentr   r   r   r   rC  r~   r   r   r   r     s    zASTFunctionParameter.get_idr%   r   c                 C  s   | j r
dS || jS d S N...)rA  r@  r   r   r   r   r     s    zASTFunctionParameter._stringifyr   r   r   c                 C  s8   t | | jr |tdd7 }n| jj||||d d S NrH  r>  )r1   rA  r   r   r@  r   r   r   r   r   r     s    z'ASTFunctionParameter.describe_signatureN)Fr   r   r   r   r   r   r   r   r   r   r   r?    s   r?  c                   @  sV   e Zd ZddddddZedddd	Zd
ddddZddddddddZdS )ASTParameterslist[ASTFunctionParameter]r   r}   )argsattrsrT   c                 C  s   || _ || _d S r   )rM  rN  )r   rM  rN  r   r   r   r     s    zASTParameters.__init__r   c                 C  s   | j S r   rM  r   r   r   r   function_params  s    zASTParameters.function_paramsr%   r   r   c                 C  sz   g }| d d}| jD ]$}|s*| d d}| t| q| d t| jdkrp| d | || j d|S )	Nr   T, Fr   r   r  r   )r  rM  r   r   rN  r   )r   r   r   r   r2  r   r   r   r     s    




zASTParameters._stringifyr   r   r{   r   c                 C  s$  t | d}|}|jr:t|tjs*|j}q|dd}q:q|dkrt }||d< | jD ].}tjdddd}	|j	|	d||d ||	7 }qX||7 }nf|t
d	d	7 }d}
| jD ]:}|
s|t
d
d
7 }|t 7 }d}
|j	|d||d q|t
dd7 }t| jdkr |t 7 }| j	| d S )NFmulti_line_parameter_listr   r   TZnoemphr   r>  r   ,r   r   r   )r1   rE  
isinstancer   desc_signaturegetdesc_parameterlistrM  desc_parameterr   r   r  r   rN  )r   r   r   r   r~   rR  Z	test_node	paramlistr@  r   r   r   r   r   r     s:    



z ASTParameters.describe_signatureN)r   r   r   r   r   rP  r   r   r   r   r   r   rK    s
   rK  c                	   @  sX   e Zd ZdddddddddddZd d dd	d
ZdddddZdddddZdS )ASTDeclSpecsSimpler   rb   r   r}   )storagethreadLocalrO   rS   r^   rD   rN  rT   c                 C  s.   || _ || _|| _|| _|| _|| _|| _d S r   )r\  r]  rO   rS   r^   rD   rN  )r   r\  r]  rO   rS   r^   rD   rN  r   r   r   r     s    zASTDeclSpecsSimple.__init__r   c              	   C  sT   |s| S t | jp|j| jp|j| jp(|j| jp2|j| jp<|j| jpF|j| j|j S r   )r[  r\  r]  rO   r^   rD   rS   rN  r   r   r   r   	mergeWith  s    





zASTDeclSpecsSimple.mergeWithr%   r   c                 C  s   g }t | jdkr"||| j | jr4|| j | jrF|| j | jrV|d | jrf|d | jrv|d | jr|d d	|S )Nr   rO   rS   r^   rD   r  )
r   rN  r  r\  r]  rO   rS   r^   rD   r   r   r   r   r   r     s     



zASTDeclSpecsSimple._stringify
list[Node])	modifiersrT   c                 C  s   dddddd}t |dkr:t | jdkr:|t  t }| j| ||j	 | j
rl||| j
 | jr~||| j | jr||d | jr||d	 | jr||d
 | jr||d d S )Nr_  r   r}   )r`  r   rT   c                 S  s0   t | dkr| t  | t|| d S r   )r   r  r   r  r   )r`  r   r   r   r   _add%  s    z3ASTDeclSpecsSimple.describe_signature.<locals>._addr   rO   rS   r^   rD   )r   rN  r  r   r  r
   r   r   extendchildrenr\  r]  rO   rS   r^   rD   )r   r`  ra  ZtempNoder   r   r   r   $  s$    


z%ASTDeclSpecsSimple.describe_signatureN)r   r   r   r   r^  r   r   r   r   r   r   r[    s   
r[  c                   @  sH   e Zd ZddddddddZddd	d
dZddddddddZdS )ASTDeclSpecsr   r[  r9  r}   )outer	leftSpecs
rightSpecstrailingrT   c                 C  s,   || _ || _|| _| j| j| _|| _d S r   )re  rf  rg  r^  ZallSpecstrailingTypeSpec)r   re  rf  rg  rh  r   r   r   r   >  s
    zASTDeclSpecs.__init__r%   r   c                 C  s   g }|| j }t|dkr$|| | jrt|dkr@|d ||| j t| j}t|dkrt|dkr||d || d|S Nr   r  r   )rf  r   r  ri  r   rg  r   )r   r   r   lrr   r   r   r   J  s    





zASTDeclSpecs._stringifyr   r   r{   r   c                 C  s   t | g }| j| |D ]}||7 }q| jrt|dkrH|t 7 }| jj||||d g }| j| t|dkr|t 7 }|D ]}||7 }qd S )Nr   r>  )r1   rf  r   ri  r   r   r  rg  )r   r   r   r   r~   r`  mr   r   r   r   Z  s"    
zASTDeclSpecs.describe_signatureNr   r   r   r   r   rd  =  s   rd  c                   @  sJ   e Zd ZdddddddddZdddd	d
ZddddddddZdS )ASTArrayrb   r   )rX   rD   r^   rS   vlasizec                 C  sH   || _ || _|| _|| _|| _|| _|r4|d ks4t|d k	rD|rDtd S r   )rX   rD   r^   rS   ro  rp  r   )r   rX   rD   r^   rS   ro  rp  r   r   r   r   t  s    zASTArray.__init__r%   r   r   c                 C  s   g }| j r|d | jr$|d | jr4|d | jrD|d | jr\dd| d S | jrr||| j dd| d S )	NrX   rS   r^   rD   r  r  z*]r  )rX   r  rS   r^   rD   ro  r   rp  )r   r   elr   r   r   r     s    



zASTArray._stringifyr   r   r{   r}   r   c                   s   t | |tdd7 }d dddd fdd}| jrB||d	 | jrR||d
 | jrb||d | jrr||d | jr|tdd7 }n(| jr r|t	 7 }| j
|d|| |tdd7 }d S )Nr  Fr   r   rb   r   r   rT   c                   s$    r| t  7 } | t ||7 } dS NT)r   r  r   r   r   ZaddSpacer   r   ra    s    z)ASTArray.describe_signature.<locals>._addrX   rS   r^   rD   rp   r   r  )r1   r   r   rX   rS   r^   rD   ro  rp  r  r   )r   r   r   r   r~   ra  r   ru  r   r     s&    



zASTArray.describe_signatureNr   r   r   r   r   rn  s  s   rn  c                   @  s>   e Zd ZeddddZeddddZddd	d
ZdS )ASTDeclaratorr   r   c                 C  s   t t| d S r   r   r   r   r   r   r     s    zASTDeclarator.namerL  c                 C  s   t t| d S r   r   r   r   r   r   rP    s    zASTDeclarator.function_paramsrb   c                 C  s   t t| d S r   r   r   r   r   r   require_space_after_declSpecs  s    z+ASTDeclarator.require_space_after_declSpecsN)r   r   r   r   r   rP  rw  r   r   r   r   rv    s
   rv  c                   @  sx   e Zd ZdddddddZeddd	d
ZeddddZddddZdddddZddddddddZ	dS )ASTDeclaratorNameParamr   zlist[ASTArray]rK  r}   )declIdarrayOpsr   rT   c                 C  s   || _ || _|| _d S r   ry  rz  r   )r   ry  rz  r   r   r   r   r     s    zASTDeclaratorNameParam.__init__r   c                 C  s   | j S r   ry  r   r   r   r   r     s    zASTDeclaratorNameParam.namerL  c                 C  s   | j jS r   )r   rP  r   r   r   r   rP    s    z&ASTDeclaratorNameParam.function_paramsrb   c                 C  s
   | j d k	S r   r|  r   r   r   r   rw    s    z4ASTDeclaratorNameParam.require_space_after_declSpecsr%   r   r   c                 C  sT   g }| j r||| j  | jD ]}||| q | jrJ||| j d|S r  )ry  r  rz  r   r   )r   r   r   r  r   r   r   r     s    
z!ASTDeclaratorNameParam._stringifyr   r   r{   r   c                 C  sX   t | | jr | j|||| | jD ]}||||| q&| jrT| j|||| d S r   )r1   ry  r   rz  r   )r   r   r   r   r~   r  r   r   r   r     s    
z)ASTDeclaratorNameParam.describe_signatureN
r   r   r   r   r   r   rP  rw  r   r   r   r   r   r   rx    s   
rx  c                   @  sb   e Zd ZdddddZeddddZd	dd
dZdddddZddddddddZdS )ASTDeclaratorNameBitFieldr   r   ry  rp  c                 C  s   || _ || _d S r   r  )r   ry  rp  r   r   r   r     s    z"ASTDeclaratorNameBitField.__init__r   c                 C  s   | j S r   r|  r   r   r   r   r     s    zASTDeclaratorNameBitField.namerb   c                 C  s
   | j d k	S r   r|  r   r   r   r   rw    s    z7ASTDeclaratorNameBitField.require_space_after_declSpecsr%   r   r   c                 C  s>   g }| j r||| j  |d ||| j d|S )Nz : r   )ry  r  rp  r   r   r   r   r   r     s    
z$ASTDeclaratorNameBitField._stringifyr   r   r{   r}   r   c                 C  s^   t | | jr | j|||| |t 7 }|tdd7 }|t 7 }| j|||| d S )N:)r1   ry  r   r   r  r   rp  r   r   r   r   r     s    z,ASTDeclaratorNameBitField.describe_signatureN)	r   r   r   r   r   r   rw  r   r   r   r   r   r   r~    s   r~  c                   @  s|   e Zd ZdddddddddZedd	d
dZedd	ddZdd	ddZdddddZddddddddZ	dS )ASTDeclaratorPtrrv  rb   r   r}   )nextrS   r^   rD   rN  rT   c                 C  s*   |st || _|| _|| _|| _|| _d S r   )r   r  rS   r^   rD   rN  )r   r  rS   r^   rD   rN  r   r   r   r     s    zASTDeclaratorPtr.__init__r   r   c                 C  s   | j jS r   )r  r   r   r   r   r   r     s    zASTDeclaratorPtr.namerL  c                 C  s   | j jS r   )r  rP  r   r   r   r   rP    s    z ASTDeclaratorPtr.function_paramsc                 C  s*   | j p(| jp(| jp(t| jdkp(| j S r   )rD   r^   rS   r   rN  r  rw  r   r   r   r   rw    s
    z.ASTDeclaratorPtr.require_space_after_declSpecsr%   r   r   c                 C  s   dg}| || j t| jdkr@| js6| js6| jr@| d | jrP| d | jrp| jrf| d | d | jr| js| jr| d | d | js| js| jst| jdkr| j r| d | || j d|S )Nrp   r   r  rS   r^   rD   r   )	r  rN  r   rS   r^   rD   r  rw  r   r   r   r   r   r     s&     





 

zASTDeclaratorPtr._stringifyr   r   r{   r   c                 C  s  t | |tdd7 }| j| t| jdkrP| jsD| jsD| jrP|t	 7 }dddddd}| jrr||d	 | jr| jr|t	 7 }||d
 | jr| js| jr|t	 7 }||d | js| js| jst| jdkr| j
 r|t	 7 }| j
|||| d S )Nrp   r   r   r   r}   rr  c                 S  s   | t ||7 } d S r   )r   r   rt  r   r   r   	_add_anno9  s    z6ASTDeclaratorPtr.describe_signature.<locals>._add_annorS   r^   rD   )r1   r   r   rN  r   r   rS   r^   rD   r  r  rw  )r   r   r   r   r~   r  r   r   r   r   1  s(     


 
z#ASTDeclaratorPtr.describe_signatureNr}  r   r   r   r   r    s   	r  c                   @  sv   e Zd ZddddddZedddd	Zed
dddZddddZdddddZddddddddZ	dS )ASTDeclaratorParenrv  r}   )innerr  rT   c                 C  s    |st |st || _|| _d S r   )r   r  r  )r   r  r  r   r   r   r   M  s    zASTDeclaratorParen.__init__r   r   c                 C  s   | j jS r   )r  r   r   r   r   r   r   T  s    zASTDeclaratorParen.namerL  c                 C  s   | j jS r   )r  rP  r   r   r   r   rP  X  s    z"ASTDeclaratorParen.function_paramsrb   c                 C  s   dS rs  r   r   r   r   r   rw  \  s    z0ASTDeclaratorParen.require_space_after_declSpecsr%   r   r   c                 C  s:   dg}| || j | d | || j d|S r$  )r  r  r  r   r   r   r   r   r   _  s
    
zASTDeclaratorParen._stringifyr   r   r{   r   c                 C  sP   t | |tdd7 }| j|||| |tdd7 }| j|d|| d S )Nr   r   r   )r1   r   r   r  r   r  r   r   r   r   r   f  s
    z%ASTDeclaratorParen.describe_signatureNr}  r   r   r   r   r  L  s   r  c                   @  sB   e Zd ZdddddZdddd	d
ZddddddddZdS )ASTParenExprListr&  r}   )r)  rT   c                 C  s
   || _ d S r   )r)  )r   r)  r   r   r   r   s  s    zASTParenExprList.__init__r%   r   r   c                   s"    fdd| j D }dd| S )Nc                   s   g | ]} |qS r   r   r   er   r   r   
<listcomp>w  s     z/ASTParenExprList._stringify.<locals>.<listcomp>z(%s)rQ  )r)  r   )r   r   r)  r   r   r   r   v  s    zASTParenExprList._stringifyr   r   r{   r   c                 C  sr   t | |tdd7 }d}| jD ]:}|sH|tdd7 }|t 7 }nd}||||| q"|tdd7 }d S )Nr   TrT  Fr   )r1   r   r   r)  r  r   r   r   r   r   r~   r   r  r   r   r   r   z  s    
z#ASTParenExprList.describe_signatureNr   r   r   r   r   r  r  s   r  c                   @  sD   e Zd ZddddddZddd	d
dZddddddddZdS )ASTBracedInitListr&  rb   r}   )r)  trailingCommarT   c                 C  s   || _ || _d S r   )r)  r  r   r)  r  r   r   r   r     s    zASTBracedInitList.__init__r%   r   r   c                   s8   d  fdd| jD }| jr$dnd}d| | dS )NrQ  c                 3  s   | ]} |V  qd S r   r   r  r   r   r   r     s     z/ASTBracedInitList._stringify.<locals>.<genexpr>rT  r   {})r   r)  r  )r   r   r)  r  r   r   r   r     s    zASTBracedInitList._stringifyr   r   r{   r   c                 C  s   t | |tdd7 }d}| jD ]:}|sH|tdd7 }|t 7 }nd}||||| q"| jrt|tdd7 }|tdd7 }d S )Nr  TrT  Fr  )r1   r   r   r)  r  r   r  r  r   r   r   r     s    
z$ASTBracedInitList.describe_signatureNr   r   r   r   r   r    s   r  c                   @  sF   e Zd ZdddddddZdd	d
ddZdd	ddddddZdS )ASTInitializerTz!ASTBracedInitList | ASTExpressionrb   r}   )r   	hasAssignrT   c                 C  s   || _ || _d S r   r   r  )r   r   r  r   r   r   r     s    zASTInitializer.__init__r%   r   r   c                 C  s    || j }| jrd| S |S d S )Nz = r  )r   r   valr   r   r   r     s    
zASTInitializer._stringifyr   r   r{   r   c                 C  sL   t | | jr6|t 7 }|tdd7 }|t 7 }| j|d|| d S )Nrx   r   )r1   r  r   r  r   r   r   r   r   r   r   r     s    z!ASTInitializer.describe_signatureN)Tr   r   r   r   r   r    s    r  c                   @  s   e Zd ZddddddZeddd	d
ZdddddddZeddddZdddddZddddZ	ddddddddZ
dS ) r=   rd  rv  r}   )	declSpecsdeclrT   c                 C  s    |st |st || _|| _d S r   )r   r  r  )r   r  r  r   r   r   r     s    zASTType.__init__r   r   c                 C  s   | j jS r   )r  r   r   r   r   r   r     s    zASTType.namerP   r   r{   rB  c                 C  s   |  |S r   get_full_nested_namer   rF  r   r   r   r     s    zASTType.get_idrL  c                 C  s   | j jS r   )r  rP  r   r   r   r   rP    s    zASTType.function_paramsr%   r   c                 C  sR   g }|| j }|| | j r8t|dkr8|d ||| j d|S rj  )r  r  r  rw  r   r   )r   r   r   r  r   r   r   r     s    


zASTType._stringifyc                 C  s   | j jrdS dS d S )Nr[   r   )r  ri  r   r   r   r   get_type_declaration_prefix  s    z#ASTType.get_type_declaration_prefixr   r   r   c                 C  sd   t | | j|d|| | j rBtt| jdkrB|t 7 }|dkrNd}| j|||| d S )Nr   r   r   )	r1   r  r   r  rw  r   r   r   r  r   r   r   r   r     s    
zASTType.describe_signatureN)r   r   r   r   r   r   r   rP  r   r  r   r   r   r   r   r=     s   	r=   c                   @  sj   e Zd ZddddddZeddd	d
ZdddddddZdddddZddddddddZdS )r>   r=   r  r}   )r   initrT   c                 C  s   || _ || _d S r   )r   r  )r   r   r  r   r   r   r     s    zASTTypeWithInit.__init__r   r   c                 C  s   | j jS r   )r   r   r   r   r   r   r     s    zASTTypeWithInit.namerP   r   r{   rB  c                 C  s   | j |||S r   )r   r   rF  r   r   r   r     s    zASTTypeWithInit.get_idr%   r   c                 C  s4   g }| || j | jr*| || j d|S r  )r  r   r  r   r   r   r   r   r     s
    zASTTypeWithInit._stringifyr   r   r   c                 C  s6   t | | j|||| | jr2| j|||| d S r   )r1   r   r   r  r   r   r   r   r     s    z"ASTTypeWithInit.describe_signatureNr   r   r   r   r   r>     s   r>   c                   @  sH   e Zd ZddddddddZdd	d
ddZdd	ddddddZdS )ASTMacroParameterFzASTNestedName | Nonerb   r}   )r@  rA  variadicrT   c                 C  s   || _ || _|| _d S r   )r@  rA  r  )r   r@  rA  r  r   r   r   r     s    zASTMacroParameter.__init__r%   r   r   c                 C  s,   | j r
dS | jr|| jd S || jS d S rG  )rA  r  r@  r   r   r   r   r     s
    zASTMacroParameter._stringifyr   r   r{   r   c                 C  sX   t | | jr |tdd7 }n4| jr@t| }|t||7 }n| jj||||d d S rI  )	r1   rA  r   r   r  r   r   r@  r   )r   r   r   r   r~   r   r   r   r   r     s    z$ASTMacroParameter.describe_signatureN)FFr   r   r   r   r   r    s
     r  c                   @  sj   e Zd ZddddddZedddd	Zd
ddddddZdddddZddddddddZdS )r?   r   zlist[ASTMacroParameter] | Noner}   )r   rM  rT   c                 C  s   || _ || _d S r   )r   rM  )r   r   rM  r   r   r   r   !  s    zASTMacro.__init__r   c                 C  s   | j S r   )r   r   r   r   r   r   %  s    zASTMacro.namerP   r   r{   rB  c                 C  s   |  |S r   r  rF  r   r   r   r   )  s    zASTMacro.get_idr%   r   c                 C  sl   g }| || j | jd k	rb| d d}| jD ]$}|sD| d d}| || q2| d d|S )Nr   TrQ  Fr   r   )r  r   rM  r   )r   r   r   r   r@  r   r   r   r   ,  s    




zASTMacro._stringifyr   r   r   c                 C  sr   t | | j|||| | jd kr(d S t }| jD ].}tjdddd}|j|d||d ||7 }q6||7 }d S )Nr   TrS  r   r>  )r1   r   r   rM  r   rX  rY  )r   r   r   r   r~   rZ  r@  r   r   r   r   r   :  s    


zASTMacro.describe_signatureNr   r   r   r   r   r?      s   r?   c                   @  sV   e Zd ZdddddZddddd	d
dZdddddZddddddddZdS )r9   r   r}   r   rT   c                 C  s
   || _ d S r   r   r   r   r   r   r   I  s    zASTStruct.__init__rP   r   r{   rB  c                 C  s   |  |S r   r  rF  r   r   r   r   L  s    zASTStruct.get_idr%   r   c                 C  s
   || j S r   r   r   r   r   r   r   O  s    zASTStruct._stringifyr   r   r   c                 C  s    t | | jj||||d d S r=  r1   r   r   r   r   r   r   r   R  s    zASTStruct.describe_signatureNrJ  r   r   r   r   r9   H  s   r9   c                   @  sV   e Zd ZdddddZddddd	d
dZdddddZddddddddZdS )r:   r   r}   r  c                 C  s
   || _ d S r   r   r   r   r   r   r   Y  s    zASTUnion.__init__rP   r   r{   rB  c                 C  s   |  |S r   r  rF  r   r   r   r   \  s    zASTUnion.get_idr%   r   c                 C  s
   || j S r   r   r   r   r   r   r   _  s    zASTUnion._stringifyr   r   r   c                 C  s    t | | jj||||d d S r=  r  r   r   r   r   r   b  s    zASTUnion.describe_signatureNrJ  r   r   r   r   r:   X  s   r:   c                   @  sV   e Zd ZdddddZddddd	d
dZdddddZddddddddZdS )r;   r   r}   r  c                 C  s
   || _ d S r   r   r   r   r   r   r   i  s    zASTEnum.__init__rP   r   r{   rB  c                 C  s   |  |S r   r  rF  r   r   r   r   l  s    zASTEnum.get_idr%   r   c                 C  s
   || j S r   r   r   r   r   r   r   o  s    zASTEnum._stringifyr   r   r   c                 C  s    t | | jj||||d d S r=  r  r   r   r   r   r   r  s    zASTEnum.describe_signatureNrJ  r   r   r   r   r;   h  s   r;   c                   @  sZ   e Zd ZdddddddZdd	d
d	dddZdd	dddZdd	dd
ddddZdS )r<   r   ASTInitializer | Noner   r}   )r   r  rN  rT   c                 C  s   || _ || _|| _d S r   )r   r  rN  )r   r   r  rN  r   r   r   r   y  s    zASTEnumerator.__init__rP   r   r{   rB  c                 C  s   |  |S r   r  rF  r   r   r   r     s    zASTEnumerator.get_idr%   r   c                 C  s\   g }| || j t| jdkr<| d | || j | jrR| || j d|S rj  )r  r   r   rN  r  r   r   r   r   r   r     s    
zASTEnumerator._stringifyr   r   r   c                 C  s\   t | | j|||| t| jdkr@|t 7 }| j| | jrX| j|d|| d S )Nr   r   )r1   r   r   r   rN  r   r  r  r   r   r   r   r     s    z ASTEnumerator.describe_signatureNrJ  r   r   r   r   r<   x  s   
r<   c                   @  s   e Zd Zd%dddddddd	Zd d
ddZedd
ddZedd
ddZd&ddddddZdd
ddZ	dddddZ
dddd dd!d"d#Zd$S )'r|   Fr   
str | Nonez&DeclarationType | ASTFunctionParameterrb   r}   )rC  directiveTyper   	semicolonrT   c                 C  s(   || _ || _|| _|| _d | _d | _d S r   )rC  r  r   r  r~   enumeratorScopedSymbolr   rC  r  r   r  r   r   r   r     s    zASTDeclaration.__init__r   c                 C  s   t | j| j| j | jS r   )r|   rC  r  r   cloner  r   r   r   r   r    s    
 zASTDeclaration.cloner   c                 C  s   t t| j}|jS r   )r	   DeclarationTyper   r   r   r  r   r   r   r     s    zASTDeclaration.namez!list[ASTFunctionParameter] | Nonec                 C  s    | j dkrd S tt| j}|jS )Nfunction)rC  r	   r=   r   rP  r  r   r   r   rP    s    
zASTDeclaration.function_paramsTrP   )r   rD  rT   c                 C  sL   | j dkr | jr | jj||S | j|| j | j}|rDt| | S |S d S )N
enumerator)rC  r  r   r   r~   
_id_prefix)r   r   rD  id_r   r   r   r     s    zASTDeclaration.get_idc                 C  s   |  tdS rs  )r   _max_idr   r   r   r   get_newest_id  s    zASTDeclaration.get_newest_idr%   r   c                 C  s   || j }| jr|d7 }|S )N;)r   r  r   r   r   r   r     s    
zASTDeclaration._stringifyr   r   dict)r   r   r   optionsrT   c                 C  s^  t | | jstd|d< t }d|_| jj |d< ||7 }| jdkrJn| jdkrr|tdd7 }|t	 7 }n| jdkr|tdd7 }|t	 7 }n| jdkr|tdd7 }|t	 7 }nl| jd	kr|td	d	7 }|t	 7 }nD| jd
kr(t
t| j}| }|t||7 }|t	 7 }nt | j|||| j | jrZ|tdd7 }d S )NTZis_multilineZ
declaratorZadd_permalink>   membermacror  rY   r\   rJ   r  r   r  )r1   r~   r   r   Zdesc_signature_lineZsphinx_line_typeisRedeclarationrC  r   r  r	   r=   r   r  r   r  r   )r   r   r   r   r  ZmainDeclNoder  r   r   r   r   r     s<    





z!ASTDeclaration.describe_signatureN)F)T)r   r   r   r   r  r   r   rP  r   r  r   r   r   r   r   r   r|     s    	r|   c                   @  s    e Zd ZdddddddZdS )	SymbolLookupResultIterator[Symbol]r{   r   r}   )symbolsparentSymbolr   rT   c                 C  s   || _ || _|| _d S r   )r  r  r   )r   r  r  r   r   r   r   r     s    zSymbolLookupResult.__init__N)r   r   r   r   r   r   r   r   r    s   r  c                   @  s*   e Zd ZdddddZdddd	Zd
S )	LookupKeyzlist[tuple[ASTIdentifier, str]]r}   r   c                 C  s
   || _ d S r   r   r   r   r   r   r     s    zLookupKey.__init__r   r   c                 C  s"   d dd | jD }d| dS )NrQ  c                 s  s$   | ]\}}d | d| dV  qdS )r   rQ  r   Nr   )r   r   r  r   r   r   r     s     z$LookupKey.__str__.<locals>.<genexpr>r  r  )r   r   )r   r  r   r   r   r     s    zLookupKey.__str__Nr   r   r   r   r   r    s   r  c                      s  e Zd ZdZdZdZdZdd Zdd Ze	dd	d
ddZ
d	dddZddd	d fddZd ddddd	dddZdddd	dddZd	dd d!Zd	dd"d#Zdd	d$d%d&Zd'dd(d)Zed'dd*d+Zed'dd,d-Zd.dd/d0Zd1dd2d3Zdd4d4d5d6d7d8Zdd4d4d4d'd9d:d;Zd1d<dd4d4d4d=d>d?d@Zd1dddd dAdBdCZd dDdEd	dFdGdHZd1d dIdJdKZdddd ddLdMZdd4d4d4d5d9dNdOZd.d5dPdQdRZ d1dd4d4d5dSdTdUZ!dddVdWdXZ"dddVdYdZZ#  Z$S )[r{   r   z  Fc                 C  s
   t  d S r   )r   r   r   r   r   __copy__  s    zSymbol.__copy__c                 C  s   | j rt td d d d d S r   )rE  r   r{   )r   memor   r   r   __deepcopy__  s    zSymbol.__deepcopy__r   r}   )rM  rT   c                  G  s    t tjtj dd t |   d S )Nr   end)printr{   debug_indent_stringdebug_indentrO  r   r   r   debug_print  s    zSymbol.debug_printr   c                 C  s0   | j s| jrt| jr,tn| jr,| js,td S r   )rE  r   r   docnamer   r   r   r   _assert_invariants  s
    
zSymbol._assert_invariantsr   )keyr   rT   c                   s   |dkrt  t ||S )Nrc  )r   super__setattr__)r   r  r   	__class__r   r   r    s    zSymbol.__setattr__r   zASTDeclaration | Noner  z
int | None)rE  r   r   r  linerT   c                 C  sr   || _ d | _d | _|| _|| _|| _|| _d| _|   g | _	g | _
| j rX| j j	|  | jrf| | j_|   d S )NF)rE  siblingAbovesiblingBelowr   r   r  r  r  r  	_childrenZ_anonChildrenr  r~   _add_function_params)r   rE  r   r   r  r  r   r   r   r      s     zSymbol.__init__r|   rP   )r   r  r  rT   c                 C  s   |    | jd kst| jd ks$t| jd ks2t|d k	s>t|d k	sJt|d k	sVt|| _| | j_|| _|| _|    |   d S r   )r  r   r   r  r  r~   r  )r   r   r  r  r   r   r   _fill_empty?  s    zSymbol._fill_emptyc                 C  s   t jrt  jd7  _t d | jd k	r| jjd k	r| jjD ]^}|jd krLq<|jj}|d kr^q<tdd |}|j	rtt
t|jdkst
| ||| j| j q<t jrt  jd8  _d S )Nry   z_add_function_params:functionParam)r{   debug_lookupr  r  r   rP  r@  r   r|   r   r   r   r   _add_symbolsr  r  )r   r  nnr  r   r   r   r  O  s     


zSymbol._add_function_paramsc                 C  s6   | j d krd S | | j jkst| j j|  d | _ d S r   )rE  r  r   remover   r   r   r   r  f  s
    
zSymbol.remover  rT   c                 C  sp   | j D ]d}|| |jr|j|krd |_d |_d |_|jd k	rJ|j|j_|jd k	r^|j|j_d |_d |_qd S r   )r  	clear_docr   r  r  r  r  )r   r  sChildr   r   r   r  m  s    





zSymbol.clear_docr  c                 c  s$   | V  | j D ]}| E d H  qd S r   )r  get_all_symbols)r   r  r   r   r   r  {  s    
zSymbol.get_all_symbolsc                 c  s   | j E d H  d S r   )r  r   r   r   r   rc    s    zSymbol.childrenc                 c  s.   | j D ]"}|V  |j sq|jE d H  qd S r   )r  r   r   children_recurse_anon)r   r   r   r   r   r    s
    

zSymbol.children_recurse_anonr  c                 C  sp   g }| }|j r || |j }q|  g }|D ]6}|jd k	rV||j|j f q0||jd f q0t|S r   )rE  r  reverser   r   r  r  )r   r  sr  r   r   r   r     s    

zSymbol.get_lookup_keyr   c                 C  sN   g }| }|j r || |j }q|  g }|D ]}||j q0t|ddS )NFr   )rE  r  r  r   r   )r   r  r  r   r   r   r   r    s    
zSymbol.get_full_nested_namerb   Symbol | None)r   	matchSelfrecurseInAnonrT   c                 C  sH   t jrt d | j|||dd}z
t|W S  tk
rB   Y d S X d S )Nz_find_first_named_symbol ->F)searchInSiblings)r{   r  r  _find_named_symbolsr  StopIteration)r   r   r  r  r   r   r   r   _find_first_named_symbol  s    


zSymbol._find_first_named_symbol)r   r  r  r  rT   c                 #  s2  t jr~t  jd7  _t d t  jd7  _t d tt jd dd t d| t d  t d t d	| d
d fdd}| D ]|}t jrt d t|t jd dd |j|krt jrt  jd7  _t d t  jd8  _|V  t jrt  jd7  _qt jr.t  jd8  _d S )Nry   z_find_named_symbols:self:r   r  zident:            zmatchSelf:        zrecurseInAnon:    zsearchInSiblings: zGenerator[Symbol, None, None]r   c                  3  s   } t jr,t d t| t jd dd  r6| V  rH| jE d H  n| jE d H  | jd kr`q| j} t jr,t d t| t jd dd q,d S )Nzsearching in self:ry   r   r  zsearching in sibling:)	r{   r  r  r  	to_stringr  r  r  r  )r  r  r  r   r   r   
candidates  s    


z.Symbol._find_named_symbols.<locals>.candidatesz
candidate:matches      )r{   r  r  r  r  r  r   )r   r   r  r  r  r  r  r   r  r   r    s2    





zSymbol._find_named_symbolsz0Callable[[Symbol, ASTIdentifier], Symbol | None]zSymbolLookupResult | None)r<  onMissingQualifiedSymbolancestorLookupTyper  r  r  rT   c                 C  s  t jrt  jd7  _t d t  jd7  _t d t| t jd dd t d| t d| t d| t d	| t d
| |j}| }|jr|jr|j}q|d k	r|d }	|jr|j	|	|||drq|j}qt jrt d t|t jd dd |d d D ]X}
|j
|
||d}|d kr^|||
}|d kr^t jrXt  jd8  _ d S d}|}qt jrt d t|t jd dd |d }
|j|
|||d}t jrt|}t  jd8  _t|||
S )Nry   z_symbol_lookup:r  r   r  znestedName:        zancestorLookupType:zmatchSelf:         zrecurseInAnon:     zsearchInSiblings:  r   r  r  r  zstarting point:r   r  r  r  Fzhandle last name from:)r{   r  r  r  r  r  r   r   rE  find_identifierr  r  listr  )r   r<  r  r  r  r  r  r   r  Z	firstNamer   r~   r  r   r   r   _symbol_lookup  sr    


  



 zSymbol._symbol_lookup)r<  r   r  r  rT   c                   s  t jrZt  jd7  _t d t  jd7  _t d| t d  t d d  dddd	d
d}| j||d ddddd k	sttj}t|dkr4t jrt d t  jd7  _t dj	 t d  t d d  t  jd8  _t j
j	 d}t jr0t  jd8  _|S t jrrt d t  jd7  _t dt| t  jd8  _ st jrt d t  jd8  _|d S g }g }	g }
|D ]<}|jd kr|| n|jr|
| n
|	| qt jr&t dt| t dt|	 t dt|
 dd fdd}t|	dkrRd }n| }dddd fd d!} jd"krt|	dkst||	d |   }t jrt d#| |	D ]8}|j }t jrt d$| ||kr||| qt|dkr>t jr(t d%|d k	 t  jd8  _|d k	r6|S | S nRt jrdt d&|d k	 t  jd8  _|d k	rv|  |d }|  |S d S )'Nry   z_add_symbols:z
nn:       z
decl:     z
location: r  r{   r   r  r   rT   c                 S  sX   t jrFt  jd7  _t d t  jd7  _t d| t  jd8  _t | |d d d dS )Nry   z'_add_symbols, onMissingQualifiedSymbol:zident: r  rE  r   r   r  r  )r{   r  r  r  r  r   r   r   r   r  J  s    
  z5Symbol._add_symbols.<locals>.onMissingQualifiedSymbolFr  r  r  r  r   z _add_symbols, result, no symbol:zident:       zdeclaration: zlocation:    r  r  z_add_symbols, result, symbols:znumber symbols:zno declarationz
#noDecl:  z
#withDecl:z
#dupDecl: r   c                    s:   t jrt d t jj d} t jr6t d | S )Nz begin: creating candidate symbolr  z end:   creating candidate symbol)r{   r  r  r  r   r>  r   r  r  lookupResultr   r   makeCandSymbol  s    
 
z+Symbol._add_symbols.<locals>.makeCandSymbolr}   )r~   
candSymbolrT   c                   sN   t jr:t  jd7  _t d t  jd8  _t  jd8  _d|_t|  d S )Nry   Zredeclarationr  T)r{   r  r  r  r  rz   )r~   r  )r   r   r   handleDuplicateDeclaration  s    
z7Symbol._add_symbols.<locals>.handleDuplicateDeclarationr  zcandId:zoldId: z,no match, no empty, candSybmol is not None?:zAno match, but fill an empty declaration, candSybmol is not None?:)r{   r  r  r  r  r   r  r  r   r   r  r   r  r  rC  r  r  r  )r   r<  r   r  r  r  r  r~   ZnoDeclZwithDeclZdupDeclr  r  r  r  ZcandIdZoldIdr   r  r   r  7  s    



 




 

zSymbol._add_symbolsr'  r   )r   docnamesr   rT   c                 C  s  t jrt  jd7  _t d |d k	s*t|jD ]}| j|jddd}|d krj| j| | |_	|
  q0|jr|j|kr|js||j|j|j nN|j|jkrt|j}td}||j|j|jj|f }tj||j|jfd n |||| q0t jr
t  jd8  _d S )Nry   zmerge_with:F)r   r  r  NDuplicate C declaration, also defined at %s:%s.
Declaration is '.. c:%s:: %s'.location)r{   r  r  r  r   r  r  r   r  rE  r  r   r  r  r  r   r   r  loggerwarning
merge_with)r   r   r  r   Z
otherChildZourChildr   msgr   r   r   r    s@    

  

 zSymbol.merge_with)r<  rT   c                 C  sH   t jrt  jd7  _t d | j|d d d d}t jrDt  jd8  _|S )Nry   z	add_name:)r   r  r  )r{   r  r  r  r  )r   r<  r   r   r   r   add_name  s    
zSymbol.add_namec                 C  sp   t jrt  jd7  _t d |d k	s*t|d k	s6t|d k	sBt|j}| ||||}t jrlt  jd8  _|S )Nry   zadd_declaration:)r{   r  r  r  r   r   r  )r   r   r  r  r<  r   r   r   r   add_declaration  s    
zSymbol.add_declarationc                 C  s(  t jrt  jd7  _t d t  jd7  _t d| t d| t d| t d| t| t jd dd t  jd	8  _| }|d k	r$t jrt  jd	7  _t d
 t|t jd dd t  jd	8  _|r|j|kr|S |r|jn|j}|D ]}|j|kr|  S q|sq$|j	}qd S )Nry   zfind_identifier:zident:           zmatchSelf:       zrecurseInAnon:   zsearchInSiblings:r   r  r  ztrying:)
r{   r  r  r  r  r  r   r  r  r  )r   r   r  r  r  currentrc  r  r   r   r   r    s6    




zSymbol.find_identifier)r  rT   c                 C  s   t jr,t  jd7  _t d t  jd7  _| }|jD ]\}}d }|jD ]}|j|krH|} q`qH|}t jrt d| t d| |d k	rt|t jd dd n
t d |d kr6t jrt  jd8  _ d S q6t jrt  jd8  _|S )	Nry   zdirect_lookup:zname:          zid:            r   r  z	not foundr  )	r{   r  r  r  r   r  r   r  r  )r   r  r  r   r  r   candr   r   r   direct_lookup8  s2    



zSymbol.direct_lookup)r<  r  r  r  rT   c                 C  s   t jrt  jd7  _t d dddddd}| j|||||d	d
}t jrZt  jd8  _|d krfd S t|j}t|dkrd S |d S )Nry   zfind_declaration:r{   r   r  r  c                 S  s   d S r   r   r  r   r   r   r  [  s    z9Symbol.find_declaration.<locals>.onMissingQualifiedSymbolFr  r   )r{   r  r  r  r  r  r  r   )r   r<  r  r  r  r  r  r  r   r   r   find_declarationT  s&    

zSymbol.find_declaration)indentrT   c                 C  s   t j| g}| js|d nX| jr6|t| j n|t| j | jrv|d | jrf|d |t| j | jr|d || j |d |d d	|S )Nz::z: z!!duplicate!! z	(r   
r   )
r{   r  rE  r  r   r   r   r  r  r   )r   r  r   r   r   r   r  q  s"    




zSymbol.to_stringc                 C  s6   |  |g}| jD ]}|||d  qd|S )Nry   r   )r  r  r  r   r   )r   r  r   r   r   r   r   r     s    
zSymbol.dump)%r   r   r   r  r  r  debug_show_treer  r  staticmethodr  r  r  r   r  r  r  r  r  r   rc  r  r   r  r  r  r  r  r  r  r  r  r  r  r  r   __classcell__r   r   r  r   r{     sF   	2M ($	r{   c                   @  sz  e Zd ZeddddZedd Zedd Zd	dd
dZddddZddddZ	ddddZ
dddddddZddddZddddZdddd Zd!dd"d#Zd!dd$d%Zd!dd&d'Zd(dd)d*d+Zd!dd,d-Zd!dd.d/Zd!dd0d1Zd|d3d4d5d!d6d7d8Zd9dd:d;Zd	dd<d=Zd>dd?d@ZdAddBdCZddDdEdFdGZd	d5dHdIdJdKZd}d	d5dLdIdMdNZdOdd5dPdQdRdSZd~dOdd5dPdQdTdUZdd	d5dWdXdYdZZ ddOd	d[d\d]d^Z!dOd	d_d\d`daZ"dbddcddZ#deddfdgZ$dhddidjZ%dkddldmZ&dnddodpZ'dddqdrdsdtZ(d9ddudvZ)d9ddwdxZ*dyddzd{Z+dVS )DefinitionParserr   r   c                 C  s   dS )NCr   r   r   r   r   language  s    zDefinitionParser.languagec                 C  s   | j jS r   )configc_id_attributesr   r   r   r   id_attributes  s    zDefinitionParser.id_attributesc                 C  s   | j jS r   )r  c_paren_attributesr   r   r   r   paren_attributes  s    z!DefinitionParser.paren_attributesr  c                 C  s   | j dkrd S | j}|  jd7  _d}| jr8| d n4| j dkrX|sX|  jd7  _q|n| j dkrhd}nd}|  jd7  _q&| j|| j S )N"ry   Fz$Unexpected end during inside string.\T)current_charposeoffail
definition)r   startPosescaper   r   r   _parse_string  s    

zDefinitionParser._parse_stringzASTLiteral | Nonec              
   C  s6  |    | drtdS | dr,tdS | j}| trZ| t t| j|| j S t	t
ttfD ]0}| |rf| t t| j|| j   S qf|  }|d k	rt|S | tr2| jd}| jd}zt||W S  tk
r } z| d|  W 5 d }~X Y n  tk
r0   | d Y nX d S )	Nr   Tr   Fry   r  z8Can not handle character literal. Internal error was: %szJCan not handle character literal resulting in multiple decoded characters.)skip_ws	skip_wordr   r  matchr*   r+   r   r  r(   r,   r.   r0   r/   r  r   r)   Z
last_matchgroupr   UnicodeDecodeErrorr  r&   )r   r  regexstringr   r   r  r   r   r   _parse_literal  s:    



 

zDefinitionParser._parse_literalzASTExpression | Nonec                 C  sH   | j dkrd S |  jd7  _|  }|   | ds@| d t|S )Nr   ry   r   z0Expected ')' 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_expressionc                 C  sL   |    |  }|d k	r|S |  }|d k	r0|S |  }|d k	rHt|S d S r   )r  r%  r(  _parse_nested_namer   )r   r   r  r   r   r   _parse_primary_expression  s    z*DefinitionParser._parse_primary_expressionz tuple[list[ASTExpression], bool])r   opencloserT   c                 C  s   |    | |sdS | |r(g dfS g }d}|    |  }|    || |    | |rfq| ds| d| d| d | j|kr0|dkr0|  jd7  _d	}qq0||fS )
NNNFrT  z	Error in z, expected ',' or 'z'.r  ry   T)r  skip_string_and_wsr'  r&  r  r  r  r  )r   r   r+  r,  r)  r  r   r   r   r   _parse_initializer_list  s*    




z(DefinitionParser._parse_initializer_listzASTParenExprList | Nonec                 C  s&   |  ddd\}}|d krd S t|S )Nzparenthesized expression-listr   r   )r/  r  r  r   r   r   _parse_paren_expression_list	  s     z-DefinitionParser._parse_paren_expression_listzASTBracedInitList | Nonec                 C  s(   |  ddd\}}|d krd S t||S )Nzbraced-init-listr  r  )r/  r  r  r   r   r   _parse_braced_init_list	  s    z(DefinitionParser._parse_braced_init_listr  c                 C  s   |   }g }|   | drR|  }|   | dsB| d |t| q| dr| drv|  jd8  _n| 	 }|t
| q| dr|t  q| dr|t  q|  }|d k	r|t| qqqt||S )	Nr  r  z*Expected ']' in end of postfix expression.r  rp   r  rs   rt   )r*  r  r.  r&  r'  r  r  r  r  r)  r  r  r  r0  r   r  )r   r   r  r   r   r   r   r   r   _parse_postfix_expression!	  s8    







z*DefinitionParser._parse_postfix_expressionr   c                 C  s   |    tD ]@}|d dkr(| |}n
| |}|r|  }t||  S q| dr| dr| jdd}|    | ds| 	d t
|S |  }t|S | d	r| ds| 	d
 | jdd}|    | ds| 	d t|S |  S )Nr   r  rW   r   F)namedr   zExpecting ')' to end 'sizeof'.ra   zExpecting '(' after 'alignof'.zExpecting ')' to end 'alignof'.)r  _expression_unary_opsr  r'  _parse_cast_expressionr  skip_word_and_wsr.  _parse_typer  r  _parse_unary_expressionr   r!  r2  )r   r  r   r   r  r   r   r   r8  M	  s4    	









z(DefinitionParser._parse_unary_expressionc                 C  s   | j }|   | drz2| d}| ds8| d |  }t||W S  tk
r } zn|| _ z|  W  W Y VS  tk
r } z2g }|	|df |	|df | 
|d|W 5 d }~X Y nX W 5 d }~X Y qX n|  S d S )Nr   Fr   z Expected ')' in cast expression.zIf type cast expressionzIf unary expressionzError in cast expression.)r  r  r'  r7  r  r5  r"  r#   r8  r  _make_multi_error)r   r  r  r   ZexCastZexUnaryerrsr   r   r   r5  s	  s.    



(z'DefinitionParser._parse_cast_expressionc                   s    fdd  | dS )Nc           	   	     s   d t tkr$ddfdd}ndd fdd}g }g }||    j}d}t  D ]}|d d	kr|sqhn|sqh|d
krjd
kr jd8  _ qz(| }|| || d}W  qW qh tk
r   |_Y qhX qh|sNqqNt	||S )Nry   r   r   c                     s      S r   )r5  r   r   r   r   parser	  s    zYDefinitionParser._parse_logical_or_expression.<locals>._parse_bin_op_expr.<locals>.parserc                     s    d S )Nry   r   r   )_parse_bin_op_expropIdr   r   r   r;  	  s    Fr   abcnoxrk   T)
r   _expression_bin_opsr  r  r  r  r'  r  r#   r%  )	r   r=  r;  r)  r*  r  oneMorer  r   r<  )r=  r   r   r<  	  s:    




zIDefinitionParser._parse_logical_or_expression.<locals>._parse_bin_op_exprr   r   r   r   rA  r   _parse_logical_or_expression	  s    %z-DefinitionParser._parse_logical_or_expressionr   )
orExprHeadrT   c                 C  s   d S r   r   )r   rC  r   r   r   "_parse_conditional_expression_tail	  s    z3DefinitionParser._parse_conditional_expression_tailc                 C  s   g }g }|   }|| d}|   tD ]J}|d dkrH| |sTq*n| |sTq*|   }|| || d}q*|sq~qt||S )NFr   r>  T)rB  r  r  _expression_assignment_opsr  r'  r6  )r   r)  r*  orExprr@  r  r   r   r   r   _parse_assignment_expression	  s&    




z-DefinitionParser._parse_assignment_expressionc                 C  s   |   }|S r   )rB  )r   rF  r   r   r   _parse_constant_expression	  s    z+DefinitionParser._parse_constant_expressionc                 C  s   |   S r   rG  r   r   r   r   r&  	  s    z"DefinitionParser._parse_expressionTr'  zCallable[[], ASTExpression]rb   )r  r;  allowrT   c           
   
   C  s>  | j }z| W S  tk
rP } z$|r*| js, | d|  || _ W 5 d }~X Y nX |d k	s^t|   | j }| tr~| j}ndddd}g }	| j	st
|	dkr| j|krq| j|kr|	|| j  n"t
|	dkr| j|	d kr|	  |  j d7  _ qt
|dk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   ry   z0Could not find end of expression starting at %d.)r  r#   ZallowFallbackExpressionParsingwarnr   r  r   
_string_rematched_textr  r   r  r  popr  r  stripr7  )
r   r  r;  rJ  ZprevPosr  r  r   Zbracketsr  r   r   r   _parse_expression_fallback	  s>    


z+DefinitionParser._parse_expression_fallbackr   c                 C  s   g }|    d}| drd}|    | ts:| d | j}|tkrV| d|  | j| jjkrd}| || jt	| jjf  t
|}|| |    | dsqqt||S )NFr   Tz#Expected identifier in nested name.z3Expected identifier in nested name, got keyword: %sExpected 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   r-   r  rM  	_keywordsr  c_extra_keywordsr   r   r  r   )r   r   r   r   r   r   r   r   r   r)  
  s0    






z#DefinitionParser._parse_nested_namec                 C  s<   |  tr| jS dD ]"}|| jjkr| |r|  S qd S )N)rb   rc   rd   )r   _simple_type_specifiers_rerM  r  rS  r  )r   tr   r   r   _parse_simple_type_specifier5
  s    


z-DefinitionParser._parse_simple_type_specifierz%ASTTrailingTypeSpecFundamental | Nonec                 C  sJ   g }|    |  }|d krq2|| |    qt|dkrBd S t|S r   )r  rV  r  r   r:  )r   r   rU  r   r   r   _parse_simple_type_specifiers>
  s    

z.DefinitionParser._parse_simple_type_specifiersr9  c                 C  sV   |    |  }|d k	r|S d }|    dD ]}| |r,|} qDq,|  }t||S )N)rY   rJ   r\   )r  rW  r6  r)  r;  )r   r   r   kr<  r   r   r   _parse_trailing_type_specL
  s    
z*DefinitionParser._parse_trailing_type_speczASTParameters | None)	paramModerT   c                 C  s   |    | ds*|dkr&| d nd S g }|    | ds|    | dr|td d |    | ds| d q| jd dd	}|t| |    | d
rq@| drq| d| j d q@|  }t||S )Nr   r  zExpecting "(" in parameters.r   rH  Tz'Expected ")" after "..." in parameters.singlere  r3  rT  z)Expecting "," or ")" in parameters, got "z".)	r  r'  r  r  r?  _parse_type_with_initr  _parse_attribute_listrK  )r   rZ  rM  r@  rN  r   r   r   _parse_parameters_
  s2    






z"DefinitionParser._parse_parametersr[  )re  typedrT   c              	   C  sF  d}d}d}d}d}d}g }	|    |sx|dkrP| dr@d}q| drPd}q|dkrx| drhd}q| drxd}q|dkr|s| drd}q| d	rd	}q|d
kr|s| d}|rq|s|r| d}|rq|s|r| d}|rq|s|r| d}|rq|  }
|
r.|	|
 qq.qt||||||t|	S )zJust parse the simple ones.Nr  r@   rR   )r  r  rX   rK   re   r`   r  rO   rS   r^   rD   )r  r  _parse_attributer  r[  r   )r   re  r`  r\  r]  rO   rS   r^   rD   rN  attrr   r   r   _parse_decl_specs_simple
  sr    










   z)DefinitionParser._parse_decl_specs_simplerd  c                 C  sT   |r|dkrt d| | ||}d }|rB|  }| ||}nd }t||||S )Nr   r  r  #Internal error, unknown outer "%s".)r   rc  rY  rd  )r   re  r`  rf  rg  rh  r   r   r   _parse_decl_specs
  s    z"DefinitionParser._parse_decl_specsz
bool | strrv  )r3  rZ  r`  rT   c              	     s:  |dkst |dkr tr jtkr8 d j   j jjkrfd} | jt jjf  t	 j}t
|gdd}qd }n|r  }nd }g }   |r̈ dr̈   d}d}	d}
d}|s drd	}q|	s d
rd	}	q|
s drd	}
q|s, dr,d	}qΐq,q|r6dn d}|rb ds\ d d }nJ drtd }n8 fdd} dg|}    ds d |t||	|
||| qqq |}|d kr,t|dkr,|r,|dkr,|r,    dr,  }t||dS t|||dS )N)TFr[  r[  z$Expected identifier, got keyword: %srQ  Fr  r  rX   TrD   r^   rS   rp   r  z&Expected ']' in end of array operator.c                     s      S r   )r&  r   r   r   r   r;  	  s    z>DefinitionParser._parse_declarator_name_suffix.<locals>.parserr   r   r  r  r{  )r   r   r-   rM  rR  r  r  rS  r   r   r   r)  r  r'  r6  r.  rP  r  rn  r_  r   rH  r~  rx  )r   r3  rZ  r`  r   r   ry  rz  rX   rD   r^   rS   ro  rp  r;  r   r   r   r   _parse_declarator_name_suffix
  s    










z.DefinitionParser._parse_declarator_name_suffixc                 C  sn  |dkrt d| g }|   |r| dr|   d}d}d}g }|sZ| d}|rZqF|sn| d}|rnqF|s| d}|rqF|  }	|	d k	r||	 qFqqF| |||}
t|
|||t|dS |r| j	d	kr| j
}z| |||}|W S  tk
r } zd
}|dkr|d7 }|||f || _
zd| j	d	ksBt| d	 | |||}| dsp| d | jdd|d}
t||
dW  W Y fS  tk
r } z@|| _
d}|dkr|d7 }|||f d}| |||W 5 d }~X Y nX W 5 d }~X Y nX | j
}z| |||W S  tk
rh } z*|| _
||df d}| |||W 5 d }~X Y nX d S )N)r   r  z'Internal error, unknown paramMode '%s'.rp   FrS   r^   rD   )r  rS   r^   rD   rN  r   z If declarator-id with parametersr  z (e.g., 'void f(int arg)')r   z$Expected ')' in "( ptr-declarator )"r   r3  rZ  r`  )r  r  z"If parenthesis in noptr-declaratorz% (e.g., 'void (*f(int arg))(double)')zError in declaratorzIf declarator-idz!Error in declarator or parameters)r   r  r'  r6  ra  r  _parse_declaratorr  r   r  r  rg  r#   r   r  r  r9  )r   r3  rZ  r`  
prevErrorsrS   r^   rD   rN  rb  r  r  r   ZexParamQualr   r  ZexNoPtrParenheaderr  r   r   r   ri    s    



  



2z"DefinitionParser._parse_declaratorNr  )re  allowFallbackrT   c                   s       |dkr0dr0  }|d k	r0t|ddS  ds>d S   }|d k	rVt|S |dkrdg }n |d krvddg}n d|   fdd	} j|||d
}t|S )Nr  F)r  rx   rT  r   z;Internal error, initializer for outer '%s' not implemented.c                     s      S r   rI  r   r   r   r   r;    s    z3DefinitionParser._parse_initializer.<locals>.parser)rJ  )r  r1  r  r'  r  rP  )r   re  rl  Z
bracedInitZfallbackEndr;  r   r   r   r   _parse_initializern  s(    

z#DefinitionParser._parse_initializerr=   )r3  re  rT   c                 C  st  |r |dkrt d| |s t|dkrg }| j}z.| j|dd}| jd|dd}| jdd W n tk
r } zd	}|||f || _z| j|d
}| jd|d}W nV tk
r }	 z6|| _d}||	|f d}
|
d7 }
| ||
|	W 5 d}	~	X Y nX W 5 d}~X Y nX nR|dkr>| j|d
}| jd|d}n,d}|dkrPd}| 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
        rd  re  r   F)re  r`  Trh  )ZallowSemicolonzIf just a namere  )r3  rZ  zIf typedef-like declarationz%Type must be either just a name or a ztypedef-like declaration.Nr  r  )
r   r   r  rf  ri  
assert_endr#   r  r9  r=   )r   r3  re  rj  r  r  r  Z	exUntypeddescZexTypedrk  rZ  r   r   r   r7    sJ    
	&

zDefinitionParser._parse_typer>   c                 C  s4   |r|dkst | j||d}| j|d}t||S )Nrd  r\  rn  )r   r7  rm  r>   )r   r3  re  r   r  r   r   r   r]    s
    z&DefinitionParser._parse_type_with_initr?   c                 C  sJ  |    |  }|d kr"| d |    | ds>t|d S | drRt|g S g }|    | dr|td d |    | ds| d q@| t	s| d t
t| jgdd	}|    | dr|t|dd |    | ds@| d q@|t| | d
r$qV| dr4q@| d qVt||S )Nz(Expected identifier in macro definition.r   r   rH  Tz-Expected ")" after "..." in macro parameters.z(Expected identifier in macro parameters.Fr  rT  z9Expected identifier, ')', or ',' in macro parameter list.)r  r)  r  r.  r?   r'  r  r  r   r-   r   r   rM  )r   r   rM  r  r   r   r   _parse_macro  sD    










zDefinitionParser._parse_macror9   c                 C  s   |   }t|S r   )r)  r9   r   r   r   r   _parse_struct  s    zDefinitionParser._parse_structr:   c                 C  s   |   }t|S r   )r)  r:   r   r   r   r   _parse_union  s    zDefinitionParser._parse_unionr;   c                 C  s   |   }t|S r   )r)  r;   r   r   r   r   _parse_enum  s    zDefinitionParser._parse_enumr<   c                   s`      }  }   d } drT   dd fdd} g |}t|}t|||S )Nrx   r   r   c                     s      S r   )rH  r   r   r   r   r;    s    z2DefinitionParser._parse_enumerator.<locals>.parser)r)  r^  r  r'  rP  r  r<   )r   r   rN  r  r;  ZinitValr   r   r   _parse_enumerator   s    
z"DefinitionParser._parse_enumeratorr|   )rC  r  rT   c                 C  s  |dkrt d| |dkr(t d| d }|dkrD| jddd}n|dkr\| jddd}nx|d	krn|  }nf|d
kr|  }nT|dkr|  }nB|dkr|  }n0|dkr|  }n|dkr| jddd}nt |d	kr| 	  | 
d}nd}t||||S )N)r  r  r  rY   r\   rJ   r  r   z(Internal error, unknown objectType "%s".)	r  r  varr  rY   r\   rJ   r  r   z+Internal error, unknown directiveType "%s".r  T)r3  re  r  r  rY   r\   rJ   r  r   r  F)r   r]  r7  rq  rr  rs  rt  ru  r   r  r'  r|   r  r   r   r   parse_declaration  s6    




z"DefinitionParser.parse_declarationc                 C  s   |   S r   )r)  r   r   r   r   parse_namespace_object1  s    z'DefinitionParser.parse_namespace_objectc                 C  s&   |   }|   | d |   |S )Nz())r)  r  r'  ro  r   r   r   r   parse_xref_object4  s
    
z"DefinitionParser.parse_xref_objectzASTExpression | ASTTypec                 C  s   | j }d }z|  }|   |   W n tk
r } z~|| _ z| d}|   |   W nT tk
r } z6d}g }||df ||df | |||W 5 d }~X Y nX W 5 d }~X Y nX |S )NFz%Error when parsing (type) expression.zIf expressionzIf type)r  r&  r  ro  r#   r7  r  r9  )r   r  r   ZexExprZexTyperk  r:  r   r   r   parse_expression<  s&    
2z!DefinitionParser.parse_expression)T)T)T)NT)N),r   r   r   r   r  r  r  r  r%  r(  r*  r/  r0  r1  r2  r8  r5  rB  rD  rG  rH  r&  rP  r)  rV  rW  rY  r_  rc  rf  rg  ri  rm  r7  r]  rq  rr  rs  rt  ru  rw  rx  ry  rz  r   r   r   r   r    sZ   

&,&3	 +	#<R Q;'"r  r   c                   C  s   t tdgddS )NZPhonyNameDueToErrorFr  )r   r   r   r   r   r   _make_phony_error_nameR  s    r{  c                      s   e Zd ZU dZejejejdZded< ddddd	Zdd
dddddZ	e
d
dddZe
d
dddZd
d
dddZdddddZdddddddZdd fd d!Zd
ddd"d#d$Zddd%d&Zddd'd(Z  ZS ))CObjectz-
    Description of a C language object.
    )noindexentryZnocontentsentrysingle-line-parameter-listr7   option_specr|   r}   )astrT   c                 C  s   |j dkst|j}|st|jd k	s*t|j}|s8t|jd krFd S |j}|d krXd S |j dkrfd S |jdkrtd S |j}|j|jdddd}|d k	rd S |j }||_	t
||j|| jj|  d d d S )Nr  rJ   FTr  ry   r  )rC  r   r~   r   rE  r   r  r  r  r  r{   r   r  get_source_info)r   r  r~   r  Z
parentDeclZtargetSymbolr  Z	declCloner   r   r   _add_enumerator_to_parenta  s8    



 
z!CObject._add_enumerator_to_parentr   r   )r  sigr   rT   c           
   	   C  s  g }t dtd D ]@}z|j|d}|| W q tk
rP   |tk sLtY qX qtt|}|d }|spt|j	 
 d}|| jjjkr|st|d | |dd  D ]&}|sq|| jjjkr|d | q| jj| d| jkr| |}	| jd d|	|d	d f d S )
Nry   )r   r   r   idsr}  entriesr[  r   )r   r  r   r  r$   r   r  reversedr~   r  r   lstripstatedocumentr  Znote_explicit_targetr  get_index_textZ	indexnode)
r   r  r  r   r  r   idnewestIdr   Z	indexTextr   r   r   add_target_and_index  s.    
zCObject.add_target_and_indexr   c                 C  s
   t  d S r   )r   r   r   r   r   object_type  s    zCObject.object_typec                 C  s   | j S r   )r  r   r   r   r   display_object_type  s    zCObject.display_object_typer  c                 C  s   t d|| jf S )Nz	%s (C %s))r   r  r   r   r   r   r    s    zCObject.get_index_textr  )r;  rT   c                 C  s   | | j| jS r   )rw  r  objtype)r   r;  r   r   r   parse_definition  s    zCObject.parse_definitionr  )r   r  r  rT   c                 C  s   | |d| j| d S )Nr   )r   r   )r   r   r  r  r   r   r   r     s    zCObject.describe_signaturer_  c                   sP   | j jjj}d|jkr<|jd d }||jd< | |jd< d |jd< 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    


zCObject.run)r  r   rT   c              
   C  s  | j jd }| j jjp"| j jjp"d}d| jkoHt||  koDdkn  |d< t||| j jd}z| |}|	  W nR t
k
r } z4tj||d t }||}	|	| j jd< t|W 5 d }~X Y nX z~|j|| j j|  d d	}	|	jd kst|	jd kst| j jd |	_|	jd k	r:|	jjd ks2t|	|	j_|	| j jd< W nb tk
r } zB|j| j jd< td
}
|
|jj|jj| j|f }
tj|
|d W 5 d }~X Y nX |jdkr| | t| j}| ||| |S )Nr  r   r~  rR  r  r  r  r  ry   )r  r  r  r  )r   r  r  c_maximum_signature_line_lengthZmaximum_signature_line_lengthr  r   r  r  ro  r#   r  r  r{  r  
ValueErrorr  r  r  r  r   r  rz   r~   r   r  r  rC  r  r  r   )r   r  r   r  max_lenr;  r  r  r   r~   r   r  r   r   r   handle_signature  sT    



  
 

zCObject.handle_signaturec                 C  sP   | j jd }|st| j jd | _| j jd | _|| j jd< | | j jd< d S )Nr  r  r   )r   r  r   oldParentSymbolr  oldParentKeyr   )r   Z
lastSymbolr   r   r   before_content  s    zCObject.before_contentc                 C  s    | j | jjd< | j| jjd< d S )Nr  r   )r  r   r  r  r  r   r   r   r   after_content  s    zCObject.after_content)r   r   r   __doc__r   flagr  __annotations__r  r  r   r  r  r  r  r   r  r  r  r  r  r   r   r  r   r|  V  s$   
% 5r|  c                   @  s"   e Zd ZdZeddddZdS )CMemberObjectr  r   r   c                 C  s   | j dkst| j S )N)r  rv  )r  r   r   r   r   r   r  
  s    z!CMemberObject.display_object_typeN)r   r   r   r  r   r  r   r   r   r   r    s   r  	parameterZ
Parameters)r   r  r@  argumentr   )r   )labelr   ZtyperolenameZ	typenamesretvalzReturn values)Zretvalsr  T)r  r   Zcan_collapseZreturnvalueZReturnsF)ZreturnsrT   )r  has_argr   Z
returntypezReturn type)Zrtypec                   @  s   e Zd ZdZe ZdS )CFunctionObjectr  Nr   r   r   r  _function_doc_field_typescopyZdoc_field_typesr   r   r   r   r    s   r  c                   @  s   e Zd ZdZe ZdS )CMacroObjectr  Nr  r   r   r   r   r  %  s   r  c                   @  s   e Zd ZdZdS )CStructObjectrY   Nr   r   r   r  r   r   r   r   r  +  s   r  c                   @  s   e Zd ZdZdS )CUnionObjectr\   Nr  r   r   r   r   r  /  s   r  c                   @  s   e Zd ZdZdS )CEnumObjectrJ   Nr  r   r   r   r   r  3  s   r  c                   @  s   e Zd ZdZdS )CEnumeratorObjectr  Nr  r   r   r   r   r  7  s   r  c                   @  s   e Zd ZdZdS )CTypeObjectr   Nr  r   r   r   r   r  ;  s   r  c                   @  s<   e Zd ZU dZdZdZdZdZi Zde	d< dd	d
dZ
dS )CNamespaceObjectzb
    This directive is just to tell Sphinx that we're documenting stuff in
    namespace foo.
    Fry   r   Tr7   r  r_  r   c              
   C  s   | j jd d }| jd  dkr,|}g }n|t| jd |  | j jd}z| }|  W n: t	k
r } zt
j||  d t }W 5 d }~X Y nX ||}|g}|| j jd< || j jd< | | j jd	< g S )
Nr   r  r   ZNULL0Znullptrr  r  r  c:namespace_stackr   )r   r  	argumentsrO  r  get_locationr  rx  ro  r#   r  r  r{  r  r  r   r  )r   
rootSymbolr~   stackr;  r   r  r   r   r   r  K  s(    

zCNamespaceObject.runN)r   r   r   r  has_contentrequired_argumentsoptional_argumentsfinal_argument_whitespacer  r  r  r   r   r   r   r  ?  s   
r  c                   @  s8   e Zd ZU dZdZdZdZi Zded< ddd	d
Z	dS )CNamespacePushObjectFry   r   Tr7   r  r_  r   c              
   C  s   | j d  dkrg S t| j d |  | jjd}z| }|  W n: tk
r } zt	j
||  d t }W 5 d }~X Y nX | jjdd }|s| jjd d }||}| jjdg }|| || jjd< || jjd< | | jjd	< g S )
Nr   r  r  r  r  r   r  r  r   )r  rO  r  r  r   r  rx  ro  r#   r  r  r{  r  rW  r  r  r  r   r  )r   r;  r   r  Z	oldParentr~   r  r   r   r   r  i  s,    


zCNamespacePushObject.runN
r   r   r   r  r  r  r  r  r  r  r   r   r   r   r  b  s   
r  c                   @  s8   e Zd ZU dZdZdZdZi Zded< dddd	Z	d
S )CNamespacePopObjectFr   Tr7   r  r_  r   c                 C  s   | j jdd }|r t|dkr8tjd|  d g }n|  t|dkrV|d }n| j jd d }|| j jd< || j jd< |	 | j j
d	< g S )
Nr  r   z;C namespace pop on empty stack. Defaulting to global scope.r  r   r   r  r  zcp:parent_key)r   r  rW  r   r  r  r  rN  r  r   r  )r   r  r~   r   r   r   r    s    
zCNamespacePopObject.runNr  r   r   r   r   r    s   
r  c                      s<   e Zd Zdddddddd fd	d
Zd dddZ  ZS )	AliasNodeNr   r  r   zBuildEnvironment | NonezLookupKey | Noner}   )r  aliasOptionsr  r   	parentKeyrT   c                   sx   t    || _|| _|| _|d k	rbd|jkrT|jd d }||jd< | |jd< |jd | _	n|d k	snt
|| _	d S )Nr  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     s    


zAliasNode.__init__r   c                 C  s   | j | j| j| jd | jdS )N)r   r  )r  r  r  r  r  r   r   r   r   r    s     zAliasNode.copy)NN)r   r   r   r   r  r  r   r   r  r   r    s     r  c                   @  s@   e Zd Zejd Zddddddddd	d
ZdddddZdS )AliasTransformry   r{   rP   rb   r  r   r_  )r  maxdepthskipThisr  renderOptionsr  rT   c              	   C  s
  |dkrd}n|dkrd}n|d8 }d}g }|sZt dd}	||	 |j|	d| j| |r|rj|}
nDt  }t  }|| ||_d|d< d	 |d
< |d< d|d< |}
|j	D ]0}|jd krq| j
||d|||d}|
| q|st|j	dkr|| |S )Nr   Try   Fr   r   r   domainaliasr  desctypenoindexr  r  r  r  r  )r   rV  r  r   r   r   Zdesc_contentrp  r  rc  _render_symbolrb  r   )r   r  r  r  r  r  r  Zrecurser
   r   ZchildContainercontentrp  r  Z
childNodesr   r   r   r    sJ    



   
zAliasTransform._render_symbolr}   )kwargsrT   c                 K  s  | j tD ]}|j}|j}zt||| jjd}| }W n4 t	k
rp } zt
j||d d }W 5 d }~X Y nX |d krt|d}|  |t||7 }|| q| jjd jd }	|	|}
|
std| td| t|	d |
st|
j|d	d
d
d}|d kr\t|d}|| |  |t||7 }t
jd| |d || q|jd s|jd krt|d}|| |  |t||7 }t
jd| |d || q| j||jd |jd |ji |j d}|| qd S )Nr  r  r   r   r  Target: ParentKey: ry   anyTr  z,Could not find C declaration for alias '%s'.norootzACan not render C declaration for alias '%s'. No such declaration.r  r  )r  findallr  r  r  r  r   r  ry  r#   r  r  r   rV  clearr   Zreplace_selfdomainsr   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   apply  st    



  





 zAliasTransform.applyN)r   r   r   r   Zdefault_priorityr  r  r   r   r   r   r    s   
,r  c                   @  s2   e Zd ZU ejejdZded< ddddZdS )	CAliasObjectr  r  r7   r  r_  r   c              	   C  s   d| j kr"| j dd\| _| _nd| j  | _| _t }| jj|_| j|d< | j |d< |d< d|d< g | _| j	
d	dd
| j	kd}|d
 r|d	 dkrtjd|  d |  D ] }|t||| jj| jd q|gS )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  ry   r   r  r  r  Tr  r  r  r  zError in C alias declaration. Requested 'noroot' but 'maxdepth' 1. When skipping the root declaration, need 'maxdepth' 0 for infinite or at least 2.r  )r   )r   splitr  r  r   rp  r  r  r   r  rW  r  r  r  Zget_signaturesr  r  r   )r   r   r  r  r   r   r   r  *  s&    


zCAliasObject.runN)	r   r   r   r   Znonnegative_intr  r  r  r  r   r   r   r   r  $  s   
r  c                   @  s$   e Zd ZdddddddddZd	S )
	CXRefRoler   r   rb   r   ztuple[str, str])r   refnodehas_explicit_titletitletargetrT   c                 C  sv   |j |j |s"tdt|}|sn|d}|dd dkrn|dd  }|d}|dkrn||d d  }||fS )Nr   rw   r   ry   r   r   )
attributesupdater  r'   subr   r  rfind)r   r   r  r  r  r  dotr   r   r   process_linkM  s    

zCXRefRole.process_linkN)r   r   r   r  r   r   r   r   r  L  s   r  c                      s2   e Zd Zddd fddZdddd	Z  ZS )
	CExprRolerb   r}   )asCoderT   c                   s    t    |rd| _nd| _d S )Nzc-exprzc-texpr)r  r   
class_type)r   r  r  r   r   r   c  s    
zCExprRole.__init__z'tuple[list[Node], list[system_message]]r   c              
   C  s   | j dd}t||  | jjd}z| }W nX tk
r } z:tj	d|||  d t
jd||| jgdgg f W Y S d }~X Y nX | jjdd }|d kr| jjd d	 }t
jd| jgd}||d
| j| |gg fS )Nr  r  r  zUnparseable C expression: %r
%sr  r   )classesr  r  r   )r   replacer  r  r   r  rz  r#   r  r  r   Zdesc_inliner  r  rW  r  r   )r   r   r;  r  exr  r   r   r   r   r  l  s"    

2zCExprRole.run)r   r   r   r   r  r  r   r   r  r   r  b  s   	r  c                   @  s  e Zd ZU dZdZdZeedddddeedddddeed	d
ddeedddeeddddeeddddeeddddeedddeedddeedddddd
Ze	e	e
eeeeeeeeeedZe e e edde e e e e e eddedddZedddddi dZded< dddd d!Zd"dd#dd$d%d&Zd'dd(d)d*Zd+d,dd-d.d/Zd"dd0ddd'd1d2d3d4d5Z d"dd0ddd'd1d6d3d7d8Z!d"dd0dd'd1d9d:d;d<Z"d=d>d?d@Z#dS )ACDomainzC language domain.r   r  r  rv  r   r   variabler  funcr   r  rY   r\   rJ   r  zfunction parameter)
r  rv  r  r  rY   r\   rJ   r  r   r  )r  rv  r  r  rY   r\   rJ   r  r   	namespaceznamespace-pushznamespace-popr  T)Z
fix_parens)r  F)r  r   rv  r  r  rY   r\   rJ   r  r   r   ZtexprN)r  objectsz3dict[str, Symbol | dict[str, tuple[str, str, str]]]initial_datar   r}   r  c                 C  s   t jr4td| td t| jd d td | jd }|| t jr|td t| jd d td td| d S )	Nz
clear_doc:z	before:r  ry   z	before endz	after:z
	after endzclear_doc end:)r{   r	  r  r   r   r  )r   r  r  r   r   r   r    s    


zCDomain.clear_docr   znodes.document)r   r  r  rT   c                 C  s2   t jr.td| t| jd d td| d S )Nzprocess_doc:r  r   zprocess_doc end:)r{   r	  r  r   r   )r   r   r  r  r   r   r   process_doc  s    
zCDomain.process_docr   )r   rT   c                 C  s   |j | jj d S r   )r  r  r   r  )r   r   r   r   r   process_field_xref  s    zCDomain.process_field_xrefr'  r  )r  	otherdatarT   c                 C  s   t jr\td td t| jd d td td t|d d td td | jd |d || j | jd	 }|d	  D ],\}\}}}||kr||kr|||f||< qd S )
Nzmerge_domaindata:z	self:r  ry   z		self endz	other:z
	other endzmerge_domaindata endr  )r{   r	  r  r   r   r  r   items)r   r  r  Z
ourObjectsfullnamefnr  r  r   r   r   merge_domaindata  s$     
zCDomain.merge_domaindatar   r   z!tuple[Element | None, str | None])r   fromdocnamebuilderr  r  r   contnoderT   c              
   C  s  t |||jd}z| }	W n: tk
rV }
 ztjd||
|d W Y dS d }
~
X Y nX |dd }| jd }|r||}|st	d| t	d| t	|
d	 |stn|}|j|	|d
d
d}|d ks|jd krdS |j}|	 }|j}|stt|||| |||jfS )Nr  z$Unparseable C cross-reference: %r
%sr  r-  r   r  r  r  ry   Tr  )r  r  ry  r#   r  r  rW  r   r  r  r   r   r  r   r   r  r6   r  rC  )r   r   r  r   r  r  r   r  r;  r   r  r  r  r  r  r   ZdisplayNamer  r   r   r   _resolve_xref_inner  sF    





   zCDomain._resolve_xref_innerzElement | Nonec              	   C  s   |  |||||||d S r   )r  )r   r   r  r   r  r  r   r  r   r   r   resolve_xref  s      zCDomain.resolve_xrefzlist[tuple[str, Element]])r   r  r   r  r   r  rT   c           	   
   C  sJ   t    | |||d|||\}}W 5 Q R X |rFd| | |fgS g S )Nr  zc:)r   suppress_loggingr  Zrole_for_objtype)	r   r   r  r   r  r   r  Zretnoder  r   r   r   resolve_any_xref  s    

   zCDomain.resolve_any_xrefz-Iterator[tuple[str, str, str, str, str, int]]r   c           	      c  s   | j d }| D ]h}|jd kr"q|js,t| }t|d}| d}|jj	}|j}|j
 }|||||dfV  qd S )Nr  r   ry   )r   r  r   r  r   r  r   r  r   rC  r  )	r   r  r~   ZfullNestedNamer   ZdispnamerC  r  r  r   r   r   get_objects  s    



zCDomain.get_objects)$r   r   r   r  r   r  r   r   Zobject_typesr  r  r  r  r  r  r  r  r  r  r  r  r   r  r  Zrolesr{   r  r  r  r  r  r  r  r  r  r  r   r   r   r   r    sh   
%
r  r   zdict[str, Any])apprT   c                 C  sb   |  t | dg d | dg d | dtd | jdd dtd hd | t ddd	d	d
S )Nr  r   r  rS  r  )typesbuiltinr  T)r   Zenv_versionZparallel_read_safeZparallel_write_safe)Z
add_domainr  Zadd_config_value_macroKeywordsrP   Zadd_post_transformr  )r  r   r   r   setup+  s    

r  )r  
__future__r   retypingr   r   r   r   r   r   r	   Zdocutilsr
   Zdocutils.nodesr   r   r   r   Zdocutils.parsers.rstr   Zsphinxr   Zsphinx.addnodesr   Zsphinx.applicationr   Zsphinx.buildersr   Zsphinx.directivesr   Zsphinx.domainsr   r   Zsphinx.environmentr   Zsphinx.localer   r   Zsphinx.rolesr   r   Zsphinx.transformsr   Z!sphinx.transforms.post_transformsr   Zsphinx.utilr   Zsphinx.util.cfamilyr   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   Zsphinx.util.docfieldsr2   r3   r4   Zsphinx.util.docutilsr5   Zsphinx.util.nodesr6   Zsphinx.util.typingr7   	getLoggerr   r  r8   r  rR  r
  r?  r4  rE  r  r  compileSrL  VERBOSErT  r   rz   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r  r   r!  r"  r%  r6  r7  r9  r:  r;  r?  rK  r[  rd  rn  rv  rx  r~  r  r  r  r  r  r=   r>   r  r?   r9   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   r   <module>   s  $T
                                              
       
	/Q		=A6;)!G&/(V	            L 2
 #n(  *