
    FeR                   	   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
 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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l"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5 ddl6m7Z7m8Z8m9Z9 ddl:m;Z; ddl<m=Z= er2ddl>m?Z?m@Z@ ddlAmBZBmCZCmDZDmEZE ddlFmGZG ddlHmIZI ddlJmKZK ddlLmMZM ddlNmOZO  e!j                  eQ      ZR ed      ZSe	d   ZTg dZUg dZVddgd d!gd"d#gd$d%gd&d'gg d(g d)d*d+gd,d-gg d.d/d0ggZWg d1ZXg d2ZYd3ZZg d4Z[ ej                  d5ej                        Z^ ej                  d6ej                        Z` G d7 d8ea      Zb G d9 d:e$      Zc G d; d<e$      Zd G d= d>ec      Ze G d? d@ec      Zf G dA dBef      Zg G dC dDeg      Zh G dE dFeg      Zi G dG dHeg      Zj G dI dJeg      Zk G dK dLef      Zl G dM dNef      Zm G dO dPec      Zn G dQ dRen      Zo G dS dTen      Zp G dU dVen      Zq G dW dXen      Zr G dY dZen      Zs G d[ d\ef      Zt G d] d^ef      Zu G d_ d`ef      Zv G da dbef      Zw G dc ddef      Zx G de dfef      Zy G dg dhec      Zz G di djef      Z{ G dk dlef      Z| G dm dnec      Z} G do dpe}      Z~ G dq dre}      Z G ds dtec      Z G du dvec      Z G dw dxe$      Z G dy dzec      Z G d{ d|ec      Z G d} d~ec      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de%      Z G d dec      Z G d dec      Z G d dec      Z G d dec      Z G d dec      Z G d dec      Z G d dec      Z G d dec      Z G d dec      Z G d dec      Z G d de$      Z G d d      Z G d d      Z G d d      Z G d de&      ZddZ G d dee         Z G d de      Z e9d ed      ddd       e8d ed      dd       e7d ed      dd       e7d ed      dd      gZ G d de      Z G d de      Z G dÄ de      Z G dń de      Z G dǄ de      Z G dɄ de      Z G d˄ de      Z G d̈́ de;      Z G dτ de;      Z G dф de;      Z G dӄ dej                        Z G dՄ de      Z G dׄ de      Z G dل de      Z G dۄ de      Z G d݄ de      Zdd߄Zy)zThe C language domain.    )annotationsN)TYPE_CHECKINGAnyCallableTypeVarUnioncast)nodes)
directives)addnodes)ObjectDescription)DomainObjType)___)
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)	GeneratorIterator)ElementNodeTextElementsystem_message)pending_xref)Sphinx)Builder)BuildEnvironment)
OptionSpecT)	ASTStructASTUnionASTEnumASTEnumeratorASTTypeASTTypeWithInitASTMacro)/autobreakcasecharconstcontinuedefaultdodoubleelseenumexternfloatforgotoifinlineintlongregisterrestrictreturnshortsignedsizeofstaticstructswitchtypedefunionunsignedvoidvolatilewhile_Alignas_Alignof_Atomic_Bool_Complex
_Decimal32
_Decimal64_Decimal128_Generic
_Imaginary	_Noreturn_Static_assert_Thread_local)alignasalignofboolcomplex	imaginarynoreturnstatic_assertthread_localz||orz&&and|bitor^xor&bitand)z==z!=not_eq)z<=z>=<>z<<z>>+-)*/%z.*z->*)
++--r   r   r   r   !not~compl)=z*=z/=z%=z+=z-=z>>=z<<=z&=and_eqz^=xor_eqz|=or_eq   )Nz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                      e Zd ZddZddZy)_DuplicateSymbolErrorc                0    |sJ |sJ || _         || _        y N)symboldeclaration)selfr   r   s      2/usr/lib/python3/dist-packages/sphinx/domains/c.py__init__z_DuplicateSymbolError.__init__   s     v{&    c                >    d| j                   j                  d      z  S )Nz%Internal C duplicate symbol error:
%sr   )r   dumpr   s    r   __str__z_DuplicateSymbolError.__str__   s    7$++:J:J1:MMMr   N)r   Symbolr   ASTDeclarationrW   NonerW   str__name__
__module____qualname__r   r    r   r   r   r   ~   s    'Nr   r   c                       e Zd Z	 	 	 	 	 	 ddZy)ASTBasec                *    t        t        |             r   NotImplementedErrorreprr   signodemodeenvr   s        r   describe_signaturezASTBase.describe_signature       !$t*--r   N
r   r3   r   r   r   r8   r   r   rW   r   )r   r   r   r   r   r   r   r   r      s    . 0.:@.EI.r   r   c                  H    e Zd ZddZd	dZd
dZddZddZ	 	 	 	 	 	 ddZy)ASTIdentifierc                :    |J t        |      dk7  sJ || _        y Nr   )len
identifier)r   r   s     r   r   zASTIdentifier.__init__   s'    %%%:!###$r   c                Z    t        |      t        u xr | j                  |j                  k(  S r   )typer   r   r   others     r   __eq__zASTIdentifier.__eq__   s%    E{m+S5CSCS0SSr   c                &    | j                   d   dk(  S )Nr   @r   r   s    r   is_anonzASTIdentifier.is_anon   s    q!S((r   c                    | j                   S r   r   r   s    r   r   zASTIdentifier.__str__   s    r   c                >    | j                         rdS | j                  S )N[anonymous])r   r   r   s    r   get_display_stringz ASTIdentifier.get_display_string   s     $}CDOOCr   c                   t        |       | j                         rt        j                  d      }n*t        j                  | j                  | j                        }|dk(  rH|| j                  z   }t        j
                  ddd|d d       }|j                         |d<   ||z  }||z  }y |d	k(  rt        j                         }	|	|z  }	||	z  }y |d
k(  r||z  }y t        d|z        )Nr   )textmarkType cr   )	refdomainreftype	reftargetmodname	classnamec:parent_key
lastIsName
noneIsNameUnknown description mode: %s)	r)   r   r   desc_sig_namer   r5   get_lookup_key	desc_name	Exception)
r   r   r   r   prefixr   node
targetTextpnodenameNodes
             r   r   z ASTIdentifier.describe_signature   s     	 %<<>))}=D))$//4??KD:$//1J))"2>4>48:E %+$9$9$;E.!TMEuG\!))+HHxG\!tOG:TABBr   N)r   r   rW   r   )r   r   rW   rs   rW   rs   r   )r   r3   r   r   r   r8   r   r   r   r   rW   r   )	r   r   r   r   r   r   r   r   r   r   r   r   r   r      s>    %
T)
DC#&C06C;?Cr   r   c                  J    e Zd ZddZedd       Zd	dZd
dZ	 	 	 	 	 	 ddZy)ASTNestedNamec                @    t        |      dkD  sJ || _        || _        y r   )r   namesrooted)r   r   r   s      r   r   zASTNestedName.__init__   s     5zA~~
r   c                    | S r   r   r   s    r   namezASTNestedName.name   s    r   c                F    dj                  d | j                  D              S )N.c              3  2   K   | ]  }t        |        y wr   )r   ).0ns     r   	<genexpr>z'ASTNestedName.get_id.<locals>.<genexpr>   s     31A3s   joinr   r   versions     r   get_idzASTNestedName.get_id   s    xx3

333r   c                r    dj                  fd| j                  D              }| j                  rd|z   S |S )Nr   c              3  .   K   | ]  } |        y wr   r   )r   r   	transforms     r   r   z+ASTNestedName._stringify.<locals>.<genexpr>   s     8y|8   )r   r   r   r   r   ress    ` r   
_stringifyzASTNestedName._stringify   s1    hh8TZZ88;;9Jr   c                   t        |       |dk(  rs| j                  rd}t        |      t        t        | j                              D ]8  }|dk7  rd}t        |      | j                  |   }|j                  |||d|       : y |dk(  rY| j                  rJ t        |              t        | j                        dk(  sJ | j                  d   j                  |d|d|       y |dv r_d}d	}	|d
k(  r| j                  d d n| j                  }
|}|d
k(  rt        j                         }| j                  rK|dz  }|d
k(  r(t        |
      dk(  r|t        j                  dd      z  }n|t        j                  dd      z  }t        t        |
            D ]S  }|
|   }|	s|t        j                  dd      z  }|dz  }d}	t        |      }|dk7  r|j                  |d|||       ||z  }U |d
k(  rYt        | j                        dkD  r|t        j                  dd      z  }||z  }| j                  d   j                  |||d|       y y t        d|z        )Nr   zCan this happen?r   r   r   paramr   )r   r   markNameTr   Fr   r   )r)   r   AssertionErrorr
   Textranger   r   r   r   r   desc_addnamedesc_sig_punctuationr   )r   r   r   r   r   unreachableir   r   firstr   destident	txt_idents                 r   r   z ASTNestedName.describe_signature   sZ   %<{{0$[113tzz?+ E6"4K(55JJqM$$WdCVDE W_{{-CI-?tzz?a'''JJqM,,WlCVT;; FE'+|';DJJsOE D|#,,.{{#<'CJ!Ox<<S#FFGH99#sCCD3u:& 	$aH99#sCCDcMFJ	?,,T:sFFS)#	$ |#tzz?Q&H99#sCCDtOG

211'4b&Q	 $ :TABBr   N)r   zlist[ASTIdentifier]r   rs   rW   r   rW   r   r   rS   rW   r   r   r   rW   r   r   	r   r   r   r   propertyr   r   r   r   r   r   r   r   r      sF    
  48C 08C:@8CEI8Cr   r   c                      e Zd Zy)ASTExpressionNr   r   r   r   r   r   r  r        r   r  c                      e Zd Zy)
ASTLiteralNr  r   r   r   r  r    r  r   r  c                  0    e Zd ZddZddZ	 	 	 	 	 	 ddZy)ASTBooleanLiteralc                    || _         y r   value)r   r  s     r   r   zASTBooleanLiteral.__init__   	    
r   c                    | j                   ryy)Ntruefalser  r   r   s     r   r   zASTBooleanLiteral._stringify#  s    ::r   c                L    t        |       }|t        j                  ||      z  }y r   )r   r   desc_sig_keywordr   r   r   r   r   txts         r   r   z$ASTBooleanLiteral.describe_signature)  s"    $i8,,S#66r   N)r  rs   rW   r   r  r   r   r   r   r   r   r   r   r   r   r  r    s)    7 07:@7EI7r   r  c                  0    e Zd ZddZddZ	 	 	 	 	 	 ddZy)ASTNumberLiteralc                    || _         y r   datar   r*  s     r   r   zASTNumberLiteral.__init__0  	    	r   c                    | j                   S r   r)  r   s     r   r   zASTNumberLiteral._stringify3      yyr   c                L    t        |       }|t        j                  ||      z  }y r   )r   r   desc_sig_literal_numberr#  s         r   r   z#ASTNumberLiteral.describe_signature6  "    $i833C==r   Nr*  r   rW   r   r  r   r%  r   r   r   r'  r'  /  )    > 0>:@>EI>r   r'  c                  0    e Zd ZddZddZ	 	 	 	 	 	 ddZy)ASTCharLiteralc                    || _         || _        |j                         j                  d      }t	        |      dk(  rt        |      | _        y t        |      )Nzunicode-escaper   )r   r*  encodedecoder   ordr  r   )r   r   r*  decodeds       r   r   zASTCharLiteral.__init__=  sI    	++-&&'78w<1WDJ6w??r   c                |    | j                   d| j                  z   dz   S | j                   dz   | j                  z   dz   S )N')r   r*  r   s     r   r   zASTCharLiteral._stringifyF  s<    ;;?S((;;$tyy0366r   c                L    t        |       }|t        j                  ||      z  }y r   )r   r   desc_sig_literal_charr#  s         r   r   z!ASTCharLiteral.describe_signatureL  s"    $i811#s;;r   N)r   r   r*  r   rW   r   r  r   r%  r   r   r   r5  r5  <  s*    @7< 0<:@<EI<r   r5  c                  0    e Zd ZddZddZ	 	 	 	 	 	 ddZy)ASTStringLiteralc                    || _         y r   r)  r+  s     r   r   zASTStringLiteral.__init__S  r,  r   c                    | j                   S r   r)  r   s     r   r   zASTStringLiteral._stringifyV  r.  r   c                L    t        |       }|t        j                  ||      z  }y r   )r   r   desc_sig_literal_stringr#  s         r   r   z#ASTStringLiteral.describe_signatureY  r1  r   Nr2  r  r   r%  r   r   r   r@  r@  R  r3  r   r@  c                  8    e Zd ZddZddZddZ	 	 	 	 	 	 d	dZy)
ASTIdExpressionc                    || _         y r   r   r   r   s     r   r   zASTIdExpression.__init__`  s	    	r   c                &     || j                         S r   rH  r   s     r   r   zASTIdExpression._stringifyd      ##r   c                8    | j                   j                  |      S r   )r   r   r   s     r   r   zASTIdExpression.get_idg      yy((r   c                @    | j                   j                  ||||       y r   )r   r   r   s        r   r   z"ASTIdExpression.describe_signaturej  s    		$$WdC@r   N)r   r   r  r  r   r   r   r   r   r   r   r   r   r   r   rF  rF  _  s2    $)A 0A:@AEIAr   rF  c                  6    e Zd Zd ZddZddZ	 	 	 	 	 	 ddZy)	ASTParenExprc                    || _         y r   exprr   rT  s     r   r   zASTParenExpr.__init__p  r,  r   c                2    d || j                         z   dz   S N()rS  r   s     r   r   zASTParenExpr._stringifys      Ytyy))C//r   c                8    | j                   j                  |      S r   )rT  r   r   s     r   r   zASTParenExpr.get_idv  rM  r   c                    |t        j                  dd      z  }| j                  j                  ||||       |t        j                  dd      z  }y rW  r   r  rT  r   r   s        r   r   zASTParenExpr.describe_signaturey  H    800c::		$$WdC@800c::r   Nr  r  r   rO  r   r   r   rQ  rQ  o  s.    0); 0;:@;EI;r   rQ  c                      e Zd Zy)ASTPostfixOpNr  r   r   r   r`  r`    r  r   r`  c                  0    e Zd ZddZddZ	 	 	 	 	 	 ddZy)ASTPostfixCallExprc                    || _         y r   lst)r   re  s     r   r   zASTPostfixCallExpr.__init__  	    r   c                &     || j                         S r   rd  r   s     r   r   zASTPostfixCallExpr._stringify  s    ""r   c                @    | j                   j                  ||||       y r   )re  r   r   s        r   r   z%ASTPostfixCallExpr.describe_signature  s    ##GT3?r   N)re  z$ASTParenExprList | ASTBracedInitListrW   r   r  r   r%  r   r   r   rb  rb    s-    #@ 0@:@@EI@r   rb  c                  0    e Zd ZddZddZ	 	 	 	 	 	 ddZy)ASTPostfixArrayc                    || _         y r   rS  rU  s     r   r   zASTPostfixArray.__init__  r,  r   c                2    d || j                         z   dz   S N[]rS  r   s     r   r   zASTPostfixArray._stringify  rZ  r   c                    |t        j                  dd      z  }| j                  j                  ||||       |t        j                  dd      z  }y rm  r]  r   s        r   r   z"ASTPostfixArray.describe_signature  r^  r   N)rT  r  rW   r   r  r   r%  r   r   r   rj  rj    s)    0; 0;:@;EI;r   rj  c                  (    e Zd ZddZ	 	 	 	 	 	 ddZy)ASTPostfixIncc                     yNr   r   r   s     r   r   zASTPostfixInc._stringify      r   c                6    |t        j                  dd      z  }y rt  r   desc_sig_operatorr   s        r   r   z ASTPostfixInc.describe_signature      8--dD99r   Nr  r   r   r   r   r   r   r   r   r   rr  rr    $    : 0::@:EI:r   rr  c                  (    e Zd ZddZ	 	 	 	 	 	 ddZy)ASTPostfixDecc                     yNr   r   r   s     r   r   zASTPostfixDec._stringify  ru  r   c                6    |t        j                  dd      z  }y r  rw  r   s        r   r   z ASTPostfixDec.describe_signature  ry  r   Nr  r   rz  r   r   r   r}  r}    r{  r   r}  c                  .    e Zd Zd ZddZ	 	 	 	 	 	 ddZy)ASTPostfixMemberOfPointerc                    || _         y r   rH  rI  s     r   r   z"ASTPostfixMemberOfPointer.__init__  r,  r   c                ,    d || j                         z   S )N->rH  r   s     r   r   z$ASTPostfixMemberOfPointer._stringify  s    i		***r   c                r    |t        j                  dd      z  }| j                  j                  |d||       y )Nr  r   )r   rx  r   r   r   s        r   r   z,ASTPostfixMemberOfPointer.describe_signature  s1    8--dD99		$$WlCHr   Nr  r   r%  r   r   r   r  r    s-    +I 0I:@IEIIr   r  c                  0    e Zd ZddZddZ	 	 	 	 	 	 ddZy)ASTPostfixExprc                     || _         || _        y r   )r   	postFixes)r   r   r  s      r   r   zASTPostfixExpr.__init__  s    "r   c                     || j                         g}| j                  D ]  }|j                   ||              dj                  |      S Nr   )r   r  appendr   )r   r   r   ps       r   r   zASTPostfixExpr._stringify  sD    %& 	%AJJy|$	%wws|r   c                    | j                   j                  ||||       | j                  D ]  }|j                  ||||        y r   )r   r   r  )r   r   r   r   r   r  s         r   r   z!ASTPostfixExpr.describe_signature  sA    &&wc6B 	=A  $V<	=r   N)r   r  r  zlist[ASTPostfixOp]r  r   r%  r   r   r   r  r    s)    #= 0=:@=EI=r   r  c                  0    e Zd ZddZddZ	 	 	 	 	 	 ddZy)ASTUnaryOpExprc                     || _         || _        y r   oprT  )r   r  rT  s      r   r   zASTUnaryOpExpr.__init__  s    	r   c                    | j                   d   dv r"| j                   dz    || j                        z   S | j                    || j                        z   S )Nr   cn r  r   s     r   r   zASTUnaryOpExpr._stringify  sF    771:77S=9TYY#77777Ytyy111r   c                F   | j                   d   dv rE|t        j                  | j                   | j                         z  }|t        j                         z  }n-|t        j                  | j                   | j                         z  }| j
                  j                  ||||       y )Nr   r  )r  r   r"  desc_sig_spacerx  rT  r   r   s        r   r   z!ASTUnaryOpExpr.describe_signature  s{    771:x00$''BBGx..00Gx11$''477CCG		$$WdC@r   N)r  r   rT  r  r  r   r%  r   r   r   r  r    s-    2A 0A:@AEIAr   r  c                  .    e Zd Zd ZddZ	 	 	 	 	 	 ddZy)ASTSizeofTypec                    || _         y r   typr   r  s     r   r   zASTSizeofType.__init__  rf  r   c                2    d || j                         z   dz   S )Nzsizeof(rY  r  r   s     r   r   zASTSizeofType._stringify  s    9TXX..44r   c                    |t        j                  dd      z  }|t        j                  dd      z  }| j                  j	                  ||||       |t        j                  dd      z  }y )NrZ   rX  rY  r   r"  r  r  r   r   s        r   r   z ASTSizeofType.describe_signature  s_    8,,Xx@@800c::##GT3?800c::r   Nr  r   r%  r   r   r   r  r    s)    5; 0;:@;EI;r   r  c                  0    e Zd ZddZddZ	 	 	 	 	 	 ddZy)ASTSizeofExprc                    || _         y r   rS  rU  s     r   r   zASTSizeofExpr.__init__  r,  r   c                ,    d || j                         z   S )Nzsizeof rS  r   s     r   r   zASTSizeofExpr._stringify  s    9TYY///r   c                    |t        j                  dd      z  }|t        j                         z  }| j                  j	                  ||||       y )NrZ   )r   r"  r  rT  r   r   s        r   r   z ASTSizeofExpr.describe_signature   sD    8,,Xx@@8**,,		$$WdC@r   N)rT  r  r  r   r%  r   r   r   r  r    s-    0A 0A:@AEIAr   r  c                  0    e Zd ZddZddZ	 	 	 	 	 	 ddZy)ASTAlignofExprc                    || _         y r   r  r  s     r   r   zASTAlignofExpr.__init__  rf  r   c                2    d || j                         z   dz   S )Nzalignof(rY  r  r   s     r   r   zASTAlignofExpr._stringify  s    Idhh//#55r   c                    |t        j                  dd      z  }|t        j                  dd      z  }| j                  j	                  ||||       |t        j                  dd      z  }y )Nrr   rX  rY  r  r   s        r   r   z!ASTAlignofExpr.describe_signature  s_    8,,Y	BB800c::##GT3?800c::r   N)r  r?   r  r   r%  r   r   r   r  r    s)    6; 0;:@;EI;r   r  c                  0    e Zd ZddZddZ	 	 	 	 	 	 ddZy)ASTCastExprc                     || _         || _        y r   )r  rT  )r   r  rT  s      r   r   zASTCastExpr.__init__  s    	r   c                    dg}|j                   || j                               |j                  d       |j                   || j                               dj                  |      S NrX  rY  r   )r  r  rT  r   r   s      r   r   zASTCastExpr._stringify  sL    e

9TXX&'

3

9TYY'(wws|r   c                    |t        j                  dd      z  }| j                  j                  ||||       |t        j                  dd      z  }| j                  j                  ||||       y rW  )r   r  r  r   rT  r   s        r   r   zASTCastExpr.describe_signature%  s`    800c::##GT3?800c::		$$WdC@r   N)r  r?   rT  r  r  r   r%  r   r   r   r  r    s-    A 0A:@AEIAr   r  c                  0    e Zd ZddZddZ	 	 	 	 	 	 ddZy)ASTBinOpExprc                x    t        |      dkD  sJ t        |      t        |      dz   k(  sJ || _        || _        y Nr   r   r   exprsopsr   r  r  s      r   r   zASTBinOpExpr.__init__.  :    5zA~~5zSX\)))
r   c                   g }|j                   || j                  d                t        dt        | j                              D ]i  }|j                  d       |j                  | j                  |dz
            |j                  d       |j                   || j                  |                k dj                  |      S Nr   r   r  r   r  r  r  r   r  r   r   r   r   r  s       r   r   zASTBinOpExpr._stringify4      

9TZZ]+,q#djj/* 	1AJJsOJJtxxA'JJsOJJyA/0		1
 wws|r   c                   | j                   d   j                  ||||       t        dt        | j                               D ]  }|t	        j
                         z  }| j                  |dz
     }t        |d         t        d      k\  r4t        |d         t        d      k  r|t	        j                  ||      z  }n|t	        j                  ||      z  }|t	        j
                         z  }| j                   |   j                  ||||        y Nr   r   az
r  r   r  r   r   r  r  r9  r"  rx  r   r   r   r   r   r  r  s          r   r   zASTBinOpExpr.describe_signature>      

1(($VDq#djj/* 	IAx..00G!a%B2a5zSX%#be*C*@844R<<855b"==x..00GJJqM,,WdCH	Ir   Nr  list[ASTExpression]r  	list[str]r  r   r%  r   r   r   r  r  -  -    I 0I:@IEIIr   r  c                  0    e Zd ZddZddZ	 	 	 	 	 	 ddZy)ASTAssignmentExprc                x    t        |      dkD  sJ t        |      t        |      dz   k(  sJ || _        || _        y r  r  r  s      r   r   zASTAssignmentExpr.__init__M  r  r   c                   g }|j                   || j                  d                t        dt        | j                              D ]i  }|j                  d       |j                  | j                  |dz
            |j                  d       |j                   || j                  |                k dj                  |      S r  r  r  s       r   r   zASTAssignmentExpr._stringifyS  r  r   c                   | j                   d   j                  ||||       t        dt        | j                               D ]  }|t	        j
                         z  }| j                  |dz
     }t        |d         t        d      k\  r4t        |d         t        d      k  r|t	        j                  ||      z  }n|t	        j                  ||      z  }|t	        j
                         z  }| j                   |   j                  ||||        y r  r  r  s          r   r   z$ASTAssignmentExpr.describe_signature]  r  r   Nr  r  r   r%  r   r   r   r  r  L  r  r   r  c                  8    e Zd ZddZddZddZ	 	 	 	 	 	 d	dZy)
ASTFallbackExprc                    || _         y r   rS  rU  s     r   r   zASTFallbackExpr.__init__l  r,  r   c                    | j                   S r   rS  r   s     r   r   zASTFallbackExpr._stringifyo  r.  r   c                ,    t        | j                        S r   )r   rT  r   s     r   r   zASTFallbackExpr.get_idr  s    499~r   c                ^    |t        j                  | j                  | j                        z  }y r   )r
   literalrT  r   s        r   r   z"ASTFallbackExpr.describe_signatureu  s    5==DII66r   N)rT  r   r  r  r   rO  r   r   r   r  r  k  s.    7 07:@7EI7r   r  c                      e Zd Zy)ASTTrailingTypeSpecNr  r   r   r   r  r  ~  r  r   r  c                  0    e Zd ZddZddZ	 	 	 	 	 	 ddZy)ASTTrailingTypeSpecFundamentalc                2    t        |      dk7  sJ || _        y r   )r   r   )r   r   s     r   r   z'ASTTrailingTypeSpecFundamental.__init__  s    5zQ
r   c                8    dj                  | j                        S )Nr  r   r   s     r   r   z)ASTTrailingTypeSpecFundamental._stringify  s    xx

##r   c                    d}| j                   D ]7  }|s|t        j                         z  }nd}|t        j                  ||      z  }9 y )NTF)r   r   r  desc_sig_keyword_type)r   r   r   r   r   r  r   s          r   r   z1ASTTrailingTypeSpecFundamental.describe_signature  sL     	<A82244x55a;;G	<r   N)r   r  rW   r   r  r   r%  r   r   r   r  r    s)    $< 0<:@<EI<r   r  c                  B    e Zd ZddZedd       ZddZ	 	 	 	 	 	 d	dZy)
ASTTrailingTypeSpecNamec                     || _         || _        y r   )r   
nestedName)r   r   r  s      r   r   z ASTTrailingTypeSpecName.__init__  s    $r   c                    | j                   S r   )r  r   s    r   r   zASTTrailingTypeSpecName.name  s    r   c                    g }| j                   r,|j                  | j                          |j                  d       |j                   || j                               dj                  |      S )Nr  r   )r   r  r  r   r   s      r   r   z"ASTTrailingTypeSpecName._stringify  sL    ;;JJt{{#JJsO

9T__-.wws|r   c                    | j                   rD|t        j                  | j                   | j                         z  }|t        j                         z  }| j                  j                  ||||       y Nr   )r   r   r"  r  r  r   r   s        r   r   z*ASTTrailingTypeSpecName.describe_signature  sV    ;;x00dkkJJGx..00G**7D#f*Mr   N)r   r   r  r   rW   r   r  r  r   )r   r   r   r   r  r   r   r   r   r   r   r  r    sA    %  N 0N:@NEINr   r  c                  :    e Zd ZdddZddZd	dZ	 	 	 	 	 	 d
dZy)ASTFunctionParameterc                     || _         || _        y r   )argellipsis)r   r  r  s      r   r   zASTFunctionParameter.__init__  s     r   c                P    |j                   j                  j                  |d      S )NF)prefixed)parentr   r   r   r   
objectTyper   s       r   r   zASTFunctionParameter.get_id  s"    }}((//%/HHr   c                @    | j                   ry || j                        S N...)r  r  r   s     r   r   zASTFunctionParameter._stringify  s    ==TXX&&r   c                    t        |       | j                  r|t        j                  dd      z  }y | j                  j                  ||||       y Nr  r  )r)   r  r   r  r  r   r   s        r   r   z'ASTFunctionParameter.describe_signature  sC    %==x44UEBBGHH''s6'Jr   NF)r  zASTTypeWithInit | Noner  rs   rW   r   r   rS   r  r   r   r   rW   r   r  
r   r   r   r   r   r8   r   r   rW   r   r   r   r   r   r   r   r   r   r   r   r  r    s3    !I'K 0K:@KEIKr   r  c                  B    e Zd ZddZedd       ZddZ	 	 	 	 	 	 d	dZy)
ASTParametersc                     || _         || _        y r   )argsattrs)r   r  r   s      r   r   zASTParameters.__init__  s    	
r   c                    | j                   S r   r  r   s    r   function_paramszASTParameters.function_params  s    yyr   c                   g }|j                  d       d}| j                  D ]1  }|s|j                  d       d}|j                  t        |             3 |j                  d       t        | j                        dk7  r2|j                  d       |j                   || j                               dj                  |      S )	NrX  T, FrY  r   r  r   )r  r  r   r   r   r   )r   r   r   r  r  s        r   r   zASTParameters._stringify  s    

3 	A

4 EJJs1v		
 	

3tzz?aJJsOJJy,-wws|r   c                .   t        |       d}|}|j                  r:t        |t        j                        s|j                  }3|j                  dd      }	 |dk(  rbt        j                         }||d<   | j                  D ]4  }t        j                  ddd      }	|j                  |	d||       ||	z  }6 ||z  }n|t        j                  d	d	      z  }d}
| j                  D ]K  }|
s0|t        j                  d
d
      z  }|t        j                         z  }d}
|j                  |d||       M |t        j                  dd      z  }t        | j                        dk7  r3|t        j                         z  }| j                  j                  |       y y )NFmulti_line_parameter_listr   r   Tnoemphr   r  rX  ,r   rY  r   )r)   r  
isinstancer   desc_signaturegetdesc_parameterlistr  desc_parameterr   r  r  r   r   )r   r   r   r   r   r  	test_node	paramlistr  r   r  s              r   r   z ASTParameters.describe_signature  s   %$)!$	i)@)@A%,,	(16QSX(Y% < 335I5NI12yy # //BtD&&ugs6&JU"	# y Gx44S#>>GEyy Px<<S#FFGx6688G&&w
C&OP x44S#>>Gtzz?ax..00GJJ))'2  r   N)r  list[ASTFunctionParameter]r   r   rW   r   rW   r  r  r   )r   r   r   r   r  r  r   r   r   r   r   r  r    s=      "3 0"3:@"3EI"3r   r  c                  @    e Zd Z	 	 	 	 	 	 	 	 	 	 ddZddZddZd	dZy)
ASTDeclSpecsSimplec                f    || _         || _        || _        || _        || _        || _        || _        y r   )storagethreadLocalrR   rV   rb   rF   r   )r   r  r  rR   rV   rb   rF   r   s           r   r   zASTDeclSpecsSimple.__init__  s4    &  

r   c           
     z   |s| S t        | j                  xs |j                  | j                  xs |j                  | j                  xs |j                  | j                  xs |j                  | j
                  xs |j
                  | j                  xs |j                  | j                  |j                  z         S r   )r  r  r  rR   rb   rF   rV   r   r   s     r   	mergeWithzASTDeclSpecsSimple.mergeWith  s    K!$,,"?%--"&"2"2"Ge6G6G"&++"="&--"A5>>"&**";"&--"A5>>"&**u{{":< 	<r   c                   g }t        | j                        dk7  r!|j                   || j                               | j                  r|j                  | j                         | j                  r|j                  | j                         | j
                  r|j                  d       | j                  r|j                  d       | j                  r|j                  d       | j                  r|j                  d       dj                  |      S )Nr   rR   rV   rb   rF   r  )
r   r   r  r  r  rR   rV   rb   rF   r   r   s      r   r   zASTDeclSpecsSimple._stringify  s    tzz?aJJy,-<<JJt||$JJt''(;;JJx ==JJz"==JJz"::JJwxx}r   c                X   dd}t        |      dk7  r;t        | j                        dk7  r#|j                  t        j                                t        j                         }| j                  j                  |       |j                  |j                         | j                  r ||| j                         | j                  r ||| j                         | j                  r	 ||d       | j                  r	 ||d       | j                  r	 ||d       | j                  r
 ||d       y y )Nc                    t        |       dk7  r#| j                  t        j                                | j                  t        j                  ||             y r   )r   r  r   r  r"  )	modifiersr   s     r   _addz3ASTDeclSpecsSimple.describe_signature.<locals>._add,  s@    9~"  !8!8!:;X66tTBCr   r   rR   rV   rb   rF   )r  
list[Node]r   r   rW   r   )r   r   r  r   r  r
   r3   r   extendchildrenr  r  rR   rV   rb   rF   )r   r  r  tempNodes       r   r   z%ASTDeclSpecsSimple.describe_signature+  s    	D
 y>Q3tzz?a#7X4467$$&

%%h/**+<<DLL)D,,-;;H%==J'==J'::G$ r   N)r  r   r  r   rR   rs   rV   rs   rb   rs   rF   rs   r   r   rW   r   )r   r  rW   r  r  )r  r   rW   r   )r   r   r   r   r  r   r   r   r   r   r  r    s>    +/8<EUZ^	<$%r   r  c                  @    e Zd Z	 	 	 	 	 	 	 	 ddZddZ	 	 	 	 	 	 ddZy)ASTDeclSpecsc                    || _         || _        || _        | j                  j                  | j                        | _        || _        y r   )outer	leftSpecs
rightSpecsr  allSpecstrailingTypeSpec)r   r'  r(  r)  trailings        r   r   zASTDeclSpecs.__init__E  s;     
"$00A (r   c                   g } || j                         }t        |      dkD  r|j                  |       | j                  rt        |      dkD  r|j                  d       |j                   || j                               t	        | j
                        }t        |      dkD  r0t        |      dkD  r|j                  d       |j                  |       dj                  |      S Nr   r  r   )r(  r   r  r+  r   r)  r   )r   r   r   lrs        r   r   zASTDeclSpecs._stringifyQ  s    dnn%q6A:JJqM  3x!|

3JJy!6!678DOO$A1vzs8a<JJsO

1wws|r   c                   t        |       g }| j                  j                  |       |D ]  }||z  }	 | j                  rt	        |      dkD  r|t        j                         z  }| j                  j                  ||||       g }| j                  j                  |       t	        |      dkD  r|t        j                         z  }|D ]  }||z  }	 y y )Nr   r  )r)   r(  r   r+  r   r   r  r)  )r   r   r   r   r   r  ms          r   r   zASTDeclSpecs.describe_signaturea  s    % "	)))4 	AqLG	  9~!82244!!44WdC<B 5 DIOO..y99~!82244 1 !r   N)
r'  r   r(  r  r)  r  r,  r  rW   r   r  r   r%  r   r   r   r%  r%  D  sM    
).
)/
) /
) 48
)  0:@EIr   r%  c                  8    e Zd Z	 	 	 	 ddZddZ	 	 	 	 	 	 ddZy)ASTArrayc                r    || _         || _        || _        || _        || _        || _        |r|J ||rJ y y r   )r[   rF   rb   rV   vlasize)r   r[   rF   rb   rV   r6  r7  s          r   r   zASTArray.__init__{  sM    
  	<<N7s r   c                   g }| j                   r|j                  d       | j                  r|j                  d       | j                  r|j                  d       | j                  r|j                  d       | j
                  rddj                  |      z   dz   S | j                  r!|j                   || j                               ddj                  |      z   dz   S )	Nr[   rV   rb   rF   rn  r  z*]ro  )r[   r  rV   rb   rF   r6  r   r7  )r   r   els      r   r   zASTArray._stringify  s    ;;IIh==IIj!==IIj!::IIg88"%,,YYIIi		*+SXXb\!C''r   c                
   t        |       |t        j                  dd      z  }ddfd}| j                  r	 ||d      | j                  r	 ||d      | j
                  r	 ||d      | j                  r	 ||d      | j                  r|t        j                  dd      z  }nC| j                  r7r|t        j                         z  }| j                  j                  |d	||       |t        j                  d
d
      z  }y )Nrn  Fc                j    r| t        j                         z  } | t        j                  ||      z  } yNT)r   r  r"  )r   r   addSpaces     r   r  z)ASTArray.describe_signature.<locals>._add  s3    82244x00t<<Gr   r[   rV   rb   rF   r   r   ro  )r   r3   r   r   rW   rs   )r)   r   r  r[   rV   rb   rF   r6  r7  r  r   )r   r   r   r   r   r  r=  s         @r   r   zASTArray.describe_signature  s    %800c::	 ;;GX.H==GZ0H==GZ0H::GW-H88x44S#>>GYY82244II((*c6J800c::r   N)r[   rs   rF   rs   rb   rs   rV   rs   r6  rs   r7  r  r  r   r%  r   r   r   r4  r4  z  s9    "/( ; 0;:@;EI;r   r4  c                  8    e Zd Zedd       Zedd       ZddZy)ASTDeclaratorc                *    t        t        |             r   r   r   s    r   r   zASTDeclarator.name  r   r   c                *    t        t        |             r   r   r   s    r   r  zASTDeclarator.function_params  r   r   c                *    t        t        |             r   r   r   s    r   require_space_after_declSpecsz+ASTDeclarator.require_space_after_declSpecs  s    !$t*--r   Nr  r  r   )r   r   r   r  r   r  rC  r   r   r   r?  r?    s-    . . . ..r   r?  c                  h    e Zd Z	 	 	 	 	 	 ddZed	d       Zed
d       ZddZddZ	 	 	 	 	 	 ddZ	y)ASTDeclaratorNameParamc                .    || _         || _        || _        y r   declIdarrayOpsr   )r   rH  rI  r   s       r   r   zASTDeclaratorNameParam.__init__  s     
r   c                    | j                   S r   rH  r   s    r   r   zASTDeclaratorNameParam.name      {{r   c                .    | j                   j                  S r   )r   r  r   s    r   r  z&ASTDeclaratorNameParam.function_params      zz)))r   c                    | j                   d uS r   rK  r   s    r   rC  z4ASTDeclaratorNameParam.require_space_after_declSpecs      {{$&&r   c                ,   g }| j                   r!|j                   || j                                | j                  D ]  }|j                   ||              | j                  r!|j                   || j                               dj	                  |      S r  )rH  r  rI  r   r   )r   r   r   r  s       r   r   z!ASTDeclaratorNameParam._stringify  sp    ;;JJy-.-- 	&BJJy}%	&::JJy,-wws|r   c                   t        |       | j                  r| j                  j                  ||||       | j                  D ]  }|j                  ||||        | j                  r| j                  j                  ||||       y y r   )r)   rH  r   rI  r   )r   r   r   r   r   r  s         r   r   z)ASTDeclaratorNameParam.describe_signature  st    %;;KK**7D#vF-- 	>B!!'4f=	>::JJ))'4fE r   N)rH  r   rI  zlist[ASTArray]r   r  rW   r   r  r  r   r  r   
r   r   r   r   r  r   r  rC  r   r   r   r   r   rE  rE    sr    )2?DH   * *
'F 0F:@FEIFr   rE  c                  J    e Zd ZddZedd       Zd	dZd
dZ	 	 	 	 	 	 ddZy)ASTDeclaratorNameBitFieldc                     || _         || _        y r   rH  r7  )r   rH  r7  s      r   r   z"ASTDeclaratorNameBitField.__init__  s    	r   c                    | j                   S r   rK  r   s    r   r   zASTDeclaratorNameBitField.name  rL  r   c                    | j                   d uS r   rK  r   s    r   rC  z7ASTDeclaratorNameBitField.require_space_after_declSpecs  rP  r   c                    g }| j                   r!|j                   || j                                |j                  d       |j                   || j                               dj                  |      S )Nz : r   )rH  r  r7  r   r   s      r   r   z$ASTDeclaratorNameBitField._stringify  sR    ;;JJy-.

5

9TYY'(wws|r   c                8   t        |       | j                  r| j                  j                  ||||       |t        j                         z  }|t        j
                  dd      z  }|t        j                         z  }| j                  j                  ||||       y )N:)r)   rH  r   r   r  r  r7  r   s        r   r   z,ASTDeclaratorNameBitField.describe_signature  s~    %;;KK**7D#vF8**,,800c::8**,,		$$WdC@r   N)rH  r   r7  r  r  r   r  r   )	r   r   r   r   r  r   rC  r   r   r   r   r   rU  rU    sF      
'A 0A:@AEIAr   rU  c                  d    e Zd Z	 	 	 	 ddZed	d       Zed
d       ZddZddZ	 	 	 	 	 	 ddZ	y)ASTDeclaratorPtrc                R    |sJ || _         || _        || _        || _        || _        y r   nextrV   rb   rF   r   )r   ra  rV   rb   rF   r   s         r   r   zASTDeclaratorPtr.__init__  s,    t	  

r   c                .    | j                   j                  S r   )ra  r   r   s    r   r   zASTDeclaratorPtr.name      yy~~r   c                .    | j                   j                  S r   )ra  r  r   s    r   r  z ASTDeclaratorPtr.function_params      yy(((r   c                    | j                   xsP | j                  xsB | j                  xs4 t        | j                        dkD  xs | j
                  j                         S r   )rF   rb   rV   r   r   ra  rC  r   s    r   rC  z.ASTDeclaratorPtr.require_space_after_declSpecs  sN    zz 6T]] 6dmm 6

Oa6II335	6r   c                P   dg}|j                   || j                               t        | j                        dk7  r5| j                  s| j                  s| j
                  r|j                  d       | j                  r|j                  d       | j                  r.| j                  r|j                  d       |j                  d       | j
                  r:| j                  s| j                  r|j                  d       |j                  d       | j
                  s0| j                  s$| j                  st        | j                        dkD  r+| j                  j                         r|j                  d       |j                   || j                               dj                  |      S )Nr   r   r  rV   rb   rF   r   )	r  r   r   rV   rb   rF   ra  rC  r   r   s      r   r   zASTDeclaratorPtr._stringify#  s   e

9TZZ()tzz?aT]]dmmtzzJJsO==JJz"==}}

3JJz"::}}

3JJw::$--3tzz?Q;Nyy668

3

9TYY'(wws|r   c                h   t        |       |t        j                  dd      z  }| j                  j	                  |       t        | j                        dk7  r;| j                  s| j                  s| j                  r|t        j                         z  }dd}| j                  r	 ||d       | j                  r,| j                  r|t        j                         z  } ||d       | j                  r8| j                  s| j                  r|t        j                         z  } ||d       | j                  s0| j                  s$| j                  st        | j                        dkD  r1| j                  j                         r|t        j                         z  }| j                  j	                  ||||       y )Nr   r   c                6    | t        j                  ||      z  } y r   )r   r"  )r   r   s     r   	_add_annoz6ASTDeclaratorPtr.describe_signature.<locals>._add_anno@  s    x00t<<Gr   rV   rb   rF   )r   r3   r   r   rW   r   )r)   r   r  r   r   r   rV   rb   rF   r  ra  rC  )r   r   r   r   r   rj  s         r   r   z#ASTDeclaratorPtr.describe_signature8  s9   %800c::

%%g.tzz?aT]]dmmtzzx..00G	= ==gz*==}}82244gz*::}}82244gw'::$--3tzz?Q;Nyy66882244		$$WdC@r   N)ra  r?  rV   rs   rb   rs   rF   rs   r   r   rW   r   r  r  r   r  r   rS  r   r   r   r^  r^    sj    (-1   ) )6
*A 0A:@AEIAr   r^  c                  \    e Zd ZddZed	d       Zed
d       ZddZddZ	 	 	 	 	 	 ddZ	y)ASTDeclaratorParenc                0    |sJ |sJ || _         || _        y r   innerra  )r   ro  ra  s      r   r   zASTDeclaratorParen.__init__T  s    ut
	r   c                .    | j                   j                  S r   )ro  r   r   s    r   r   zASTDeclaratorParen.name[  s    zzr   c                .    | j                   j                  S r   )ro  r  r   s    r   r  z"ASTDeclaratorParen.function_params_  rN  r   c                     yr<  r   r   s    r   rC  z0ASTDeclaratorParen.require_space_after_declSpecsc  ru  r   c                    dg}|j                   || j                               |j                  d       |j                   || j                               dj                  |      S r  )r  ro  ra  r   r   s      r   r   zASTDeclaratorParen._stringifyf  sL    e

9TZZ()

3

9TYY'(wws|r   c                    t        |       |t        j                  dd      z  }| j                  j	                  ||||       |t        j                  dd      z  }| j
                  j	                  |d||       y )NrX  rY  r   )r)   r   r  ro  r   ra  r   s        r   r   z%ASTDeclaratorParen.describe_signaturem  sh    %800c::

%%gtS&A800c::		$$WlCHr   N)ro  r?  ra  r?  rW   r   r  r  r   r  r   rS  r   r   r   rl  rl  S  sZ       * *I 0I:@IEIIr   rl  c                  0    e Zd ZddZddZ	 	 	 	 	 	 ddZy)ASTParenExprListc                    || _         y r   )r  )r   r  s     r   r   zASTParenExprList.__init__z  r  r   c                r    | j                   D cg c]
  } ||       }}ddj                  |      z  S c c}w )Nz(%s)r  )r  r   )r   r   er  s       r   r   zASTParenExprList._stringify}  s6    '+zz2!122		%((( 3s   4c                6   t        |       |t        j                  dd      z  }d}| j                  D ]K  }|s1|t        j                  dd      z  }|t        j                         z  }nd}|j                  ||||       M |t        j                  dd      z  }y )NrX  Tr
  FrY  )r)   r   r  r  r  r   r   r   r   r   r   r  ry  s          r   r   z#ASTParenExprList.describe_signature  s    %800c:: 	=A888cBB82244  $V<	= 	800c::r   N)r  r  rW   r   r  r   r%  r   r   r   rv  rv  y  s)    ); 0;:@;EI;r   rv  c                  0    e Zd ZddZddZ	 	 	 	 	 	 ddZy)ASTBracedInitListc                     || _         || _        y r   )r  trailingCommar   r  r  s      r   r   zASTBracedInitList.__init__  s    
*r   c                |    dj                  fd| j                  D              }| j                  rdnd}d| | dS )Nr  c              3  .   K   | ]  } |        y wr   r   )r   ry  r   s     r   r   z/ASTBracedInitList._stringify.<locals>.<genexpr>  s     ;1)A,;r   r
  r   {})r   r  r  )r   r   r  r  s    `  r   r   zASTBracedInitList._stringify  s=    		;

;;#11rE7=/,,r   c                   t        |       |t        j                  dd      z  }d}| j                  D ]K  }|s1|t        j                  dd      z  }|t        j                         z  }nd}|j                  ||||       M | j                  r|t        j                  dd      z  }|t        j                  dd      z  }y )Nr  Tr
  Fr  )r)   r   r  r  r  r   r  r{  s          r   r   z$ASTBracedInitList.describe_signature  s    %800c:: 	=A888cBB82244  $V<	= x44S#>>G800c::r   N)r  r  r  rs   rW   r   r  r   r%  r   r   r   r}  r}    s)    +-
; 0;:@;EI;r   r}  c                  :    e Zd Z	 d	 	 	 ddZddZ	 	 	 	 	 	 ddZy)	ASTInitializerc                     || _         || _        y r   r  	hasAssign)r   r  r  s      r   r   zASTInitializer.__init__  s    
"r   c                L     || j                         }| j                  rd|z   S |S )Nz = r  )r   r   vals      r   r   zASTInitializer._stringify  s&    

#>>3;Jr   c                    t        |       | j                  rG|t        j                         z  }|t        j                  dd      z  }|t        j                         z  }| j
                  j                  |d||       y )Nr   r   )r)   r  r   r  r  r  r   r   s        r   r   z!ASTInitializer.describe_signature  sf    %>>x..00Gx44S#>>Gx..00G

%%gz3Gr   NT)r  z!ASTBracedInitList | ASTExpressionr  rs   rW   r   r  r   r%  r   r   r   r  r    s@    #'# #,0#
H 0H:@HEIHr   r  c                  d    e Zd Zd	dZed
d       ZddZedd       ZddZddZ		 	 	 	 	 	 ddZ
y)r?   c                0    |sJ |sJ || _         || _        y r   )	declSpecsdecl)r   r  r  s      r   r   zASTType.__init__  s    yt"	r   c                .    | j                   j                  S r   )r  r   r   s    r   r   zASTType.name  rc  r   c                @    |j                         j                  |      S r   get_full_nested_namer   r  s       r   r   zASTType.get_id      **,33G<<r   c                .    | j                   j                  S r   )r  r  r   s    r   r  zASTType.function_params  re  r   c                "   g } || j                         }|j                  |       | j                  j                         rt	        |      dkD  r|j                  d       |j                   || j                               dj                  |      S r.  )r  r  r  rC  r   r   )r   r   r   r  s       r   r   zASTType._stringify  sj    dnn-	

999224Y!9KJJsO

9TYY'(wws|r   c                2    | j                   j                  ryy)Nr^   r   )r  r+  r   s    r   get_type_declaration_prefixz#ASTType.get_type_declaration_prefix  s    >>**r   c                D   t        |       | j                  j                  |d||       | j                  j	                         r8t        t        | j                              dkD  r|t        j                         z  }|dk(  rd}| j                  j                  ||||       y )Nr   r   r   )	r)   r  r   r  rC  r   r   r   r  r   s        r   r   zASTType.describe_signature  s    %))':sFKII335C'(1,x..00G :D		$$WdC@r   N)r  r%  r  r?  rW   r   r  r  r  r  r   r   )r   r   r   r   r  r   r   r  r   r  r   r   r   r   r?   r?     s_      = ) )A 0A:@AEIAr   r?   c                  J    e Zd ZddZedd       Zd	dZd
dZ	 	 	 	 	 	 ddZy)r@   c                     || _         || _        y r   )r   init)r   r   r  s      r   r   zASTTypeWithInit.__init__  s    		r   c                .    | j                   j                  S r   )r   r   r   s    r   r   zASTTypeWithInit.name  rc  r   c                <    | j                   j                  |||      S r   )r   r   r  s       r   r   zASTTypeWithInit.get_id  s    yyV<<r   c                    g }|j                   || j                               | j                  r!|j                   || j                               dj                  |      S r  )r  r   r  r   r   s      r   r   zASTTypeWithInit._stringify  sF    

9TYY'(99JJy+,wws|r   c                    t        |       | j                  j                  ||||       | j                  r| j                  j                  ||||       y y r   )r)   r   r   r  r   s        r   r   z"ASTTypeWithInit.describe_signature  sF    %		$$WdC@99II(($VD r   N)r   r?   r  r  rW   r   r  r  r  r   r  r   r   r   r@   r@     sF      =E 0E:@EEIEr   r@   c                  <    e Zd Z	 	 d	 	 	 ddZddZ	 	 	 	 	 	 ddZy)	ASTMacroParameterc                .    || _         || _        || _        y r   )r  r  variadic)r   r  r  r  s       r   r   zASTMacroParameter.__init__  s      r   c                    | j                   ry| j                  r || j                        dz   S  || j                        S r  )r  r  r  r   s     r   r   zASTMacroParameter._stringify  s6    ==]]TXX&..TXX&&r   c                   t        |       | j                  r|t        j                  dd      z  }y | j                  r%t        |       }|t        j                  ||      z  }y | j                  j                  ||||       y r  )	r)   r  r   r  r  r   r   r  r   )r   r   r   r   r   r   s         r   r   z$ASTMacroParameter.describe_signature  sj    %==x44UEBBG]]t9Dx--dD99GHH''s6'Jr   N)FF)r  zASTNestedName | Noner  rs   r  rs   rW   r   r  r  r%  r   r   r   r  r    sC    CH"'!!,0!'	K 0	K:@	KEI	Kr   r  c                  J    e Zd ZddZedd       Zd	dZd
dZ	 	 	 	 	 	 ddZy)rA   c                     || _         || _        y r   )r
  r  )r   r
  r  s      r   r   zASTMacro.__init__(  s    
	r   c                    | j                   S r   )r
  r   s    r   r   zASTMacro.name,  s    zzr   c                @    |j                         j                  |      S r   r  r  s       r   r   zASTMacro.get_id0  r  r   c                D   g }|j                   || j                               | j                  a|j                  d       d}| j                  D ].  }|s|j                  d       d}|j                   ||             0 |j                  d       dj                  |      S )NrX  Tr  FrY  r   )r  r
  r  r   )r   r   r   r  r  s        r   r   zASTMacro._stringify3  s    

9TZZ()99 JJsOEyy +JJt$

9S>*	+
 JJsOwws|r   c                (   t        |       | j                  j                  ||||       | j                  y t	        j
                         }| j                  D ]4  }t	        j                  ddd      }|j                  |d||       ||z  }6 ||z  }y )Nr   Tr  r   r  )r)   r
  r   r  r   r  r  )r   r   r   r   r   r  r  r   s           r   r   zASTMacro.describe_signatureA  s    %

%%gtS&A99//1	99 	C++B4@E""5'3v"FI	 	9r   N)r
  r   r  zlist[ASTMacroParameter] | NonerW   r   r  r  r  r   r  r   r   r   rA   rA   '  sB      = 0:@EIr   rA   c                  8    e Zd ZddZddZddZ	 	 	 	 	 	 d	dZy)
r;   c                    || _         y r   rH  rI  s     r   r   zASTStruct.__init__P  r,  r   c                @    |j                         j                  |      S r   r  r  s       r   r   zASTStruct.get_idS  r  r   c                &     || j                         S r   rH  r   s     r   r   zASTStruct._stringifyV  rK  r   c                X    t        |       | j                  j                  ||||       y r  r)   r   r   r   s        r   r   zASTStruct.describe_signatureY  %    %		$$WdC$Gr   Nr   r   rW   r   r  r  r   r  r   r   r   r;   r;   O  2    =$H 0H:@HEIHr   r;   c                  8    e Zd ZddZddZddZ	 	 	 	 	 	 d	dZy)
r<   c                    || _         y r   rH  rI  s     r   r   zASTUnion.__init__`  r,  r   c                @    |j                         j                  |      S r   r  r  s       r   r   zASTUnion.get_idc  r  r   c                &     || j                         S r   rH  r   s     r   r   zASTUnion._stringifyf  rK  r   c                X    t        |       | j                  j                  ||||       y r  r  r   s        r   r   zASTUnion.describe_signaturei  r  r   Nr  r  r  r   r  r   r   r   r<   r<   _  r  r   r<   c                  8    e Zd ZddZddZddZ	 	 	 	 	 	 d	dZy)
r=   c                    || _         y r   rH  rI  s     r   r   zASTEnum.__init__p  r,  r   c                @    |j                         j                  |      S r   r  r  s       r   r   zASTEnum.get_ids  r  r   c                &     || j                         S r   rH  r   s     r   r   zASTEnum._stringifyv  rK  r   c                X    t        |       | j                  j                  ||||       y r  r  r   s        r   r   zASTEnum.describe_signaturey  r  r   Nr  r  r  r   r  r   r   r   r=   r=   o  r  r   r=   c                  @    e Zd Z	 	 	 	 ddZddZddZ	 	 	 	 	 	 d	dZy)
r>   c                .    || _         || _        || _        y r   )r   r  r   )r   r   r  r   s       r   r   zASTEnumerator.__init__  s    		
r   c                @    |j                         j                  |      S r   r  r  s       r   r   zASTEnumerator.get_id  r  r   c                X   g }|j                   || j                               t        | j                        dk7  r2|j                  d       |j                   || j                               | j                  r!|j                   || j                               dj                  |      S r.  )r  r   r   r   r  r   r   s      r   r   zASTEnumerator._stringify  sv    

9TYY'(tzz?aJJsOJJy,-99JJy+,wws|r   c                @   t        |       | j                  j                  ||||       t        | j                        dk7  r2|t        j                         z  }| j                  j                  |       | j                  r| j                  j                  |d||       y y )Nr   r   )r)   r   r   r   r   r   r  r  r   s        r   r   z ASTEnumerator.describe_signature  s{    %		$$WdC@tzz?ax..00GJJ))'299II((*c6J r   N)r   r   r  ASTInitializer | Noner   r   rW   r   r  r  r   r  r   r   r   r>   r>     sB    (-1=K 0K:@KEIKr   r>   c                  |    e Zd Z	 d
	 	 	 	 	 ddZddZedd       Zedd       ZdddZddZ	ddZ
	 	 	 	 	 	 ddZy	)r   c                X    || _         || _        || _        || _        d | _        d | _        y r   )r  directiveTyper   	semicolonr   enumeratorScopedSymbolr   r  r  r   r  s        r   r   zASTDeclaration.__init__  s1     %*&"".2#r   c                    t        | j                  | j                  | j                  j	                         | j
                        S r   )r   r  r  r   cloner  r   s    r   r  zASTDeclaration.clone  s7    doot/A/A"..446H 	Hr   c                N    t        t        | j                        }|j                  S r   )r	   DeclarationTyper   r   r   r  s     r   r   zASTDeclaration.name  s    OT%5%56yyr   c                n    | j                   dk7  ry t        t        | j                        }|j                  S )Nfunction)r  r	   r?   r   r  r  s     r   r  zASTDeclaration.function_params  s/    ??j(GT--.###r   c                   | j                   dk(  r2| j                  r&| j                  j                  j                  ||      S | j                  j                  || j                   | j                        }|rt
        |   |z   S |S )N
enumerator)r  r  r   r   r   
_id_prefix)r   r   r  id_s       r   r   zASTDeclaration.get_id  so    ??l*t/J/J..::AA'8TT%%gtLg&,,Jr   c                .    | j                  t        d      S r<  )r   _max_idr   s    r   get_newest_idzASTDeclaration.get_newest_id  s    {{7D))r   c                L     || j                         }| j                  r|dz  }|S )N;)r   r  r   s      r   r   zASTDeclaration._stringify  s'    (()>>3JC
r   c                R   t        |       | j                  sJ d|d<   t        j                         }d|_        | j                  j
                   |d<   ||z  }| j                  dv rnq| j                  dk(  r2|t        j                  dd      z  }|t        j                         z  }n0| j                  dk(  r1|t        j                  dd      z  }|t        j                         z  }n| j                  dk(  r1|t        j                  dd      z  }|t        j                         z  }n| j                  d	k(  r1|t        j                  d	d	      z  }|t        j                         z  }np| j                  d
k(  r[t        t        | j                        }|j                         }|t        j                  ||      z  }|t        j                         z  }nt        | j                  j                  |||| j                         | j                  r|t        j                   dd      z  }y y )NTis_multiline
declaratoradd_permalink>   macromemberr  r\   r_   rL   r  r   r  )r)   r   r   desc_signature_linesphinx_line_typeisRedeclarationr  r"  r  r	   r?   r   r  r  r   r  r  )r   r   r   r   optionsmainDeclNoder  r   s           r   r   z!ASTDeclaration.describe_signature  s   %{{{ #'335(4%,0KK,G,G(G_%<??==__(H55hIILH3355L__'H55gwGGLH3355L__&H55ffEELH3355L__,H55lLQQLH3355L__&!1!12D557FH55ffEELH3355L  ++L$T[[Q>>H99#sCCL r   Nr  )
r  r   r  
str | Noner   z&DeclarationType | ASTFunctionParameterr  rs   rW   r   )rW   r   r  )rW   z!list[ASTFunctionParameter] | Noner  )r   rS   r  rs   rW   r   r   r  )
r   r3   r   r   r   r8   r  dictrW   r   )r   r   r   r   r  r  r   r  r   r  r   r   r   r   r   r   r     s     $)
3D
3 
3-1
3H   $ $*$D 0$D;?$DDH$Dr   r   c                      e Zd Z	 	 	 	 ddZy)SymbolLookupResultc                .    || _         || _        || _        y r   )symbolsparentSymbolr
  )r   r  r  r
  s       r   r   zSymbolLookupResult.__init__  s    (
r   N)r  Iterator[Symbol]r  r   r
  r   rW   r   )r   r   r   r   r   r   r   r  r    s    %*.r   r  c                      e Zd ZddZddZy)	LookupKeyc                    || _         y r   r)  r+  s     r   r   zLookupKey.__init__  r,  r   c                R    dj                  d | j                  D              }d| dS )Nr  c              3  4   K   | ]  \  }}d | d| d  yw)rX  r  rY  Nr   )r   r
  r  s      r   r   z$LookupKey.__str__.<locals>.<genexpr>  s#     J*%AeWBse1-Js   rn  ro  )r   r*  )r   ro  s     r   r   zLookupKey.__str__   s(    		J		JJ5'|r   N)r*  zlist[tuple[ASTIdentifier, str]]rW   r   r   r   r   r   r   r  r    s    r   r  c                      e Zd ZdZdZdZdZd Zd Ze	dd       Z
d dZd! fdZ	 	 	 	 	 	 	 	 	 	 	 	 d"d	Zd#d
Zd dZd dZd$dZd%dZed%d       Zed%d       Zd&dZd'dZ	 	 	 	 	 	 d(dZ	 	 	 	 	 	 	 	 d)dZ	 	 	 	 	 	 	 	 	 	 	 	 	 	 d*dZ	 	 	 	 	 	 	 	 	 	 d+dZ	 	 	 	 d,dZd-dZ	 	 	 	 	 	 d.dZ	 	 	 	 	 	 	 	 d/dZd0dZ 	 	 	 	 	 	 d1dZ!d2dZ"d2dZ# xZ$S )3r   r   z  Fc                    t         r   )r  r   s    r   __copy__zSymbol.__copy__  s    r   c                D    | j                   rt        t        d d d d d       S r   )r  r  r   )r   memos     r   __deepcopy__zSymbol.__deepcopy__  s"    ;;  dD$d33r   c                     t         j                  t        j                  t        j                  z  d       t        j                  |   y )Nr   end)loggerdebugr   debug_indent_stringdebug_indentr  s    r   debug_printzSymbol.debug_print  s/    V//&2E2EE2Ndr   c                    | j                   s| j                  rJ | j                  rJ y | j                  r| j                  sJ y y r   )r  r   docnamer   s    r   _assert_invariantszSymbol._assert_invariants  sA    {{''''||##|||#|  r   c                :    |dk(  rt         t        | 	  ||      S )Nr"  )r  super__setattr__)r   keyr  	__class__s      r   r
  zSymbol.__setattr__"  s#    *  w"3..r   c                l   || _         d | _        d | _        || _        || _        || _        || _        d| _        | j                          g | _	        g | _
        | j                   r%| j                   j                  j                  |        | j                  r| | j                  _        | j                          y )NF)r  siblingAbovesiblingBelowr
  r   r  liner  r  	_children_anonChildrenr  r   _add_function_params)r   r  r
  r   r  r  s         r   r   zSymbol.__init__'  s     $($(
&	$! (*+-;;KK!!((.&*D# 	!!#r   c                   | j                          | j                  J | j                  J | j                  J |J |J |J || _        | | j                  _        || _        || _        | j                          | j                          y r   )r  r   r  r  r   r  )r   r   r  r  s       r   _fill_emptyzSymbol._fill_emptyF  s    !'''||###yy   &&&"""&"&	!!!#r   c                T   t         j                  r.t         xj                  dz  c_        t         j                  d       | j                  | j                  j
                  | j                  j
                  D ]  }|j                  |j                  j                  }|)t        dd |      }|j                  rJ t        |j                        dk(  sJ | j                  ||| j                  | j                          t         j                  rt         xj                  dz  c_        y y )Nr   z_add_function_params:functionParam)r   debug_lookupr  r  r   r  r  r   r   r   r   r   _add_symbolsr  r  )r   r  nnr  s       r   r  zSymbol._add_function_paramsV  s    1$67
 'D,<,<,L,L,X%%55 
E55=UUZZ:%otQ?99$}288})))!!"dDLL$))D
E 1$ r   c                    | j                   y | | j                   j                  v sJ | j                   j                  j                  |        d | _         y r   )r  r  remover   s    r   r  zSymbol.removem  sF    ;;t{{,,,,,$$T*r   c                d   | j                   D ]  }|j                  |       |j                  s!|j                  |k(  s1d |_        d |_        d |_        |j
                  |j                  |j
                  _        |j                  |j
                  |j                  _        d |_        d |_         y r   )r  	clear_docr   r  r  r  r  )r   r  sChilds      r   r  zSymbol.clear_doct  s    nn 	+FW%!!fnn&?%)"!%"&&27=7J7JF''4&&27=7J7JF''4&*#&*#	+r   c              #  j   K   |  | j                   D ]  }|j                         E d {     y 7 wr   )r  get_all_symbols)r   r  s     r   r!  zSymbol.get_all_symbols  s3     
nn 	0F--///	0/s   '313c              #  8   K   | j                   E d {    y 7 wr   )r  r   s    r   r"  zSymbol.children  s     >>!!s   c              #     K   | j                   D ]5  }| |j                  j                         s"|j                  E d {    7 y 7 wr   )r  r
  r   children_recurse_anon)r   r   s     r   r$  zSymbol.children_recurse_anon  sC      	/AG77??$....		/ /s   >A
 AA
c                |   g }| }|j                   r*|j                  |       |j                   }|j                   r*|j                          g }|D ]a  }|j                  6|j                  |j                  |j                  j                         f       E|j                  |j                  d f       c t        |      S r   )r  r  reverser   r
  r  r  )r   r  sr  s       r   r   zSymbol.get_lookup_key  s    
 hhNN1A hh 	 	,A}}(

AGGQ]]%@%@%BCD

AGGT?+	, ~r   c                    g }| }|j                   r*|j                  |       |j                   }|j                   r*|j                          g }|D ]  }|j                  |j                          t	        |d      S )NFr   )r  r  r&  r
  r   )r   r  r'  r   s       r   r  zSymbol.get_full_nested_name  sn    hhNN1A hh 	 	"ALL!	"U511r   c                    t         j                  rt         j                  d       | j                  |||d      }	 t	        |      S # t
        $ r Y y w xY w)Nz_find_first_named_symbol ->F)searchInSiblings)r   r  r  _find_named_symbolsra  StopIteration)r   r
  	matchSelfrecurseInAnonr   s        r   _find_first_named_symbolzSymbol._find_first_named_symbol  s[     <=&&ui8= ' ?	9 		s   
A 	AAc              #  f   K   t         j                  rt         xj                  dz  c_        t         j                  d       t         xj                  dz  c_        t         j                  d       t        j                   j                  t         j                  dz         d       t         j                  d|       t         j                  d       t         j                  d       t         j                  d	|       d fd
} |       D ]  }t         j                  rLt         j                  d       t        j                  |j                  t         j                  dz         d       |j                  |k(  sot         j                  rGt         xj                  dz  c_        t         j                  d       t         xj                  dz  c_        | t         j                  st         xj                  dz  c_         t         j                  rt         xj                  dz  c_        y y w)Nr   z_find_named_symbols:self:r   r  zident:            zmatchSelf:        zrecurseInAnon:    zsearchInSiblings: c               3     K   } t         j                  rLt         j                  d       t        j	                  | j                  t         j                  dz         d       	 r|  r| j                  E d {    n| j                  E d {    | j                  y | j                  } t         j                  rLt         j                  d       t        j	                  | j                  t         j                  dz         d       7 7 |w)Nzsearching in self:r   r   r  zsearching in sibling:)
r   r  r  r   r  	to_stringr  r$  r  r  )r'  r.  r/  r   s    r   
candidatesz.Symbol._find_named_symbols.<locals>.candidates  s     A""""#78Q[[)<)<q)@ArJG  6666 {{**>>)NN&&&&'>?LLV-@-@1-D!E2LN  7*s%   A7D:D
;DDA;DDz
candidate:matches      )rW   zGenerator[Symbol, None, None])r   r  r  r  r   r  r4  r
  )r   r
  r.  r/  r+  r5  r'  s   ` ``   r   r,  zSymbol._find_named_symbols  s     1$561$w'LL(;(;a(?@bLI3U;3Y?3]C35EF	O(  	-A""""<0Q[[)<)<q)@ArJww%&&''1,'&&y1''1,'&&''1,'	- 1$ s   E9H1?A+H1+AH1c                   t         j                  rt         xj                  dz  c_        t         j                  d       t         xj                  dz  c_        t         j                  d       t        j                  | j                  t         j                  dz         d       t         j                  d|       t         j                  d|       t         j                  d|       t         j                  d	|       t         j                  d
|       |j                  }| }|j                  r%|j                  r|j                  }|j                  r|@|d   }	|j                  r/|j                  |	|||      rn|j                  }|j                  r/t         j                  rLt         j                  d       t        j                  |j                  t         j                  dz         d       |d d D ]R  }
|j                  |
||      }|6 |||
      }|+t         j                  rt         xj                  dz  c_         y d}|}T t         j                  rLt         j                  d       t        j                  |j                  t         j                  dz         d       |d   }
|j                  |
|||      }t         j                  r$t        |      }t         xj                  dz  c_        t        |||
      S )Nr   z_symbol_lookup:r2  r   r  znestedName:        zancestorLookupType:zmatchSelf:         zrecurseInAnon:     zsearchInSiblings:  r   r.  r/  r+  zstarting point:r   r.  r/  r8  Fzhandle last name from:)r   r  r  r  r   r  r4  r   r   r  find_identifierr0  r,  listr  )r   r  onMissingQualifiedSymbolancestorLookupTyper.  r/  r+  r   r  	firstNamer
  r   r  s                r   _symbol_lookupzSymbol._symbol_lookup  s    1$011$w'LL(;(;a(?@bLI4jA46HI4i@4mD46FG   %%+22 %%)aI%%//	:C>KAQ 0 S +22 %% 01LL//0C0Ca0GHbLQ 3BZ 	"E!::- ; IF~1,F>**++q0+ I!L	" 78LL//0C0Ca0GHbLQ b	22Y'- 3 / 7mG1$!'<??r   c                
   t         j                  rt         xj                  dz  c_        t         j                  d       t         xj                  dz  c_        t         j                  d|       t         j                  d       t         j                  d d        dd}| j	                  ||d ddd	      J t        j                        }t        |      d
k(  rt         j                  rt         j                  d       t         xj                  dz  c_        t         j                  dj                         t         j                  d       t         j                  d d        t         xj                  dz  c_        t        j                  j                        }t         j                  rt         xj                  dz  c_        |S t         j                  rft         j                  d       t         xj                  dz  c_        t         j                  dt        |             t         xj                  dz  c_        sCt         j                  r.t         j                  d       t         xj                  dz  c_        |d
   S g }g }	g }
|D ]O  }|j                  |j                  |       !|j                  r|
j                  |       ?|	j                  |       Q t         j                  r]t         j                  dt        |             t         j                  dt        |	             t         j                  dt        |
             dfd}t        |	      d
k(  rd }n |       }d fd}j                  dk7  rt        |	      dk  sJ  ||	d
   |       j                         }t         j                  rt         j                  d|       |	D ]Q  }|j                  j                         }t         j                  rt         j                  d|       ||k(  sI |||       S t        |      d
k(  rLt         j                  r1t         j                  d|d u       t         xj                  dz  c_        ||S  |       S t         j                  r1t         j                  d|d u       t         xj                  dz  c_        ||j                          |d
   }|j!                         |S )!Nr   z_add_symbols:z
nn:       z
decl:     z
location: r\  c                .   t         j                  rvt         xj                  dz  c_        t         j                  d       t         xj                  dz  c_        t         j                  d|       t         xj                  dz  c_        t        | |d d d       S )Nr   z'_add_symbols, onMissingQualifiedSymbol:zident: r8  r  r
  r   r  r  )r   r  r  r  r  r
  s     r   r>  z5Symbol._add_symbols.<locals>.onMissingQualifiedSymbolQ  sw    ""##q(#""#LM##q(#""9e4##q(#U&*DtE Er   Fr?  r.  r/  r+  r   z _add_symbols, result, no symbol:zident:       zdeclaration: zlocation:    rD  r8  z_add_symbols, result, symbols:znumber symbols:zno declarationz
#noDecl:  z
#withDecl:z
#dupDecl: c                     t         j                  rt         j                  d       t        j                  j                        } t         j                  rt         j                  d       | S )Nz begin: creating candidate symbolrD  z end:   creating candidate symbol)r   r  r  r  r
  )r   r   r  r  lookupResults    r   makeCandSymbolz+Symbol._add_symbols.<locals>.makeCandSymbol  s]    """"#EF<#<#<"."4"4(3$+$8F """"#EFMr   c                
   t         j                  r`t         xj                  dz  c_        t         j                  d       t         xj                  dz  c_        t         xj                  dz  c_        d|_        t        |       )Nr   redeclarationr8  T)r   r  r  r  r  r   )r   
candSymbolr   s     r   handleDuplicateDeclarationz7Symbol._add_symbols.<locals>.handleDuplicateDeclaration  sd    &&''1,'&&7''1,'''1,'
 .2
*+FK@@r   r  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   rW   r   )rW   r   )r   r   rL  r   rW   r   )r   r  r  r  rA  r=  r  r   r
  r  r   r  r  r  r  r  r  )r   r  r   r  r  r>  r  r   noDeclwithDecldupDeclr'  rI  rL  rM  candIdoldIdrH  s     ```            @r   r  zSymbol._add_symbols>  sJ    1$/1$|Z8|[9G9AdV<=	E **:+C>B5:9><A + C '''|++,w<1""""#EF##q(#""?L4F4FG""?K@""]7)1TF#CD##q(#<#<#<"."4"4(3$+$8F ""##q(#M?@1$0#g,?1$""""#34##q(# 1: 	#A}}$a ""q!"	# |S[9|S];|S\:		 		 x=AJ')JA %%38})))*8A;
C !..0F""""9f5" C**88:&&&&y%8U?.vzBC v;!""""BJVZDZ ##q(#%!!%''""""Wd*, ##q(#%!!# AYF {GT:Mr   c                   t         j                  r.t         xj                  dz  c_        t         j                  d       |J |j                  D ]Z  }| j                  |j                  dd      }|3| j                  j                  |       | |_        |j                          W|j                  r|j                  |v r|j                  s2|j                  |j                  |j                  |j                         n|j                  |j                  k7  rt        |j                        }t        d      }||j                  |j                  |j                  j                   |fz  }t"        j%                  ||j                  |j                  f       n	 |j'                  |||       ] t         j                  rt         xj                  dz  c_        y y )Nr   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  r0  r
  r  r  r  r   r  r  r  r   r   r  r   warning
merge_with)r   r   docnamesr   
otherChildourChildr   msgs           r   rX  zSymbol.merge_with  s   1$}-   // 	;J44 &&%# 5 %H %%j1$(
!--/%%**<*<*H++(()?)?)3););Z__N%%););;x334D > ?C!1!18==!)!5!5!C!CT!K KCNN3*2D2Djoo1VNW
 
Hc:5	;6 1$ r   c                    t         j                  r.t         xj                  dz  c_        t         j                  d       | j	                  |d d d       }t         j                  rt         xj                  dz  c_        |S )Nr   z	add_name:)r   r  r  )r   r  r  r  r  )r   r  r   s      r   add_namezSymbol.add_name	  sc    1${+
dQUV1$
r   c                ,   t         j                  r.t         xj                  dz  c_        t         j                  d       |J |J |J |j                  }| j                  ||||      }t         j                  rt         xj                  dz  c_        |S )Nr   zadd_declaration:)r   r  r  r  r   r  )r   r   r  r  r  r   s         r   add_declarationzSymbol.add_declaration  s    1$12&&&""" %%

K$G1$
r   c                   t         j                  rt         xj                  dz  c_        t         j                  d       t         xj                  dz  c_        t         j                  d|       t         j                  d|       t         j                  d|       t         j                  d|       t        j                  | j                  t         j                  dz         d       t         xj                  d	z  c_        | }|t         j                  r~t         xj                  d	z  c_        t         j                  d
       t        j                  |j                  t         j                  dz         d       t         xj                  d	z  c_        |r|j                  |k(  r|S |r|j                  n|j                  }|D ]  }|j                  |k(  s|c S  |s	 y |j                  }|y )Nr   zfind_identifier:zident:           zmatchSelf:       zrecurseInAnon:   zsearchInSiblings:r   r  r8  ztrying:)r   r  r  r  r   r  r4  r
  r$  r  r  )r   r
  r.  r/  r+  currentr"  r'  s           r   r<  zSymbol.find_identifier   s    1$121$2E:2I>2MB24DELL(;(;a(?@bLI1$!""##q(#""9-W..v/B/BQ/FGRP##q(#W]]e38Ew447K\K\H 77e#H $ **G ! r   c                   t         j                  rGt         xj                  dz  c_        t         j                  d       t         xj                  dz  c_        | }|j                  D ]  \  }}d }|j
                  D ]  }|j                  |k(  s|} n |}t         j                  r{t         j                  d|       t         j                  d|       |8t        j                  |j                  t         j                  dz         d       nt         j                  d       |t         j                  rt         xj                  dz  c_         y  t         j                  rt         xj                  dz  c_        |S )	Nr   zdirect_lookup:zname:          zid:            r   r  z	not foundr8  )
r   r  r  r  r*  r  r
  r   r  r4  )r   r  r'  r   r  r   cands          r   direct_lookupzSymbol.direct_lookup?  s0   1$/01$ 	ID#C ::%C A""""#4d;""#4c:=LLV-@-@1-D!E2LN&&{3y&&''1,'#	$ 1$r   c                j   t         j                  r.t         xj                  dz  c_        t         j                  d       	 	 	 	 	 	 dd}| j	                  |||||d      }t         j                  rt         xj                  dz  c_        |y t        |j                        }t        |      dk(  ry |d   S )Nr   zfind_declaration:c                     y r   r   rE  s     r   r>  z9Symbol.find_declaration.<locals>.onMissingQualifiedSymbolb  s     r   FrF  r   )r  r   r
  r   rW   Symbol | None)r   r  r  r  rA  r=  r  r   )r   r  r  r.  r/  r>  rH  r  s           r   find_declarationzSymbol.find_declaration[  s     1$23	 	 	 	 **:+C>A5>9F<A + C 1$|++,w<1qzr   c                   t         j                  |z  g}| j                  s|j                  d       n| j                  r%|j                  t        | j                               n$|j                  t        | j                               | j                  rR|j                  d       | j                  r|j                  d       |j                  t        | j                               | j                  r=|j                  d       |j                  | j                         |j                  d       |j                  d       dj                  |      S )Nz::z: z!!duplicate!! z	(rY  
r   )
r   r  r  r  r
  r   r   r  r  r   )r   indentr   s      r   r4  zSymbol.to_stringx  s    ))F23{{JJtzz

3tzz?+

3t//01

4 ''JJ/0

3t//01<<JJuJJt||$JJsO

4wws|r   c                    | j                  |      g}| j                  D ]%  }|j                  |j                  |dz                ' dj	                  |      S )Nr   r   )r4  r  r  r   r   )r   rl  r   r   s       r   r   zSymbol.dump  sM    ~~f%& 	+AJJqvvfqj)*	+wws|r   )r  r   rW   r   rW   r   )r  r   r  r   rW   r   )r  r   r
  r   r   ASTDeclaration | Noner  r  r  
int | NonerW   r   )r   r   r  r   r  rS   rW   r   r  r   rW   r   )rW   r  )rW   r  r  )r
  r   r.  rs   r/  rs   rW   rh  )
r
  r   r.  rs   r/  rs   r+  rs   rW   r  )r  r   r>  z0Callable[[Symbol, ASTIdentifier], Symbol | None]r?  r  r.  rs   r/  rs   r+  rs   rW   zSymbolLookupResult | None)
r  r   r   ro  r  r  r  rp  rW   r   )r   r   rY  r  r   r8   rW   r   )r  r   rW   r   )r   r   r  r   r  rS   rW   r   )
r
  r   r.  rs   r/  rs   r+  rs   rW   rh  )r  r  rW   rh  )
r  r   r  r   r.  rs   r/  rs   rW   rh  )rl  rS   rW   r   )%r   r   r   r  r  r  debug_show_treer  r  staticmethodr  r  r
  r   r  r  r  r  r!  r  r"  r$  r   r  r0  r,  rA  r  rX  r^  r`  r<  re  ri  r4  r   __classcell__r  s   @r   r   r     s-   LLO4  $/
$$ $ +	$
 $ $ 
$>$ %.+0
 " " / /(
2
,0
AE
JW
0%'+0%<@0%.20%7G0%dK@!K@ #SK@ '	K@
 K@ K@ K@ 
#K@Ze!e +e 	e
 e 
eN"%("%-1"%H!$,/4:#'8<PT*>8$(9=BO:*r   r   c                     e Zd Zed*d       Zed        Zed        Zd+dZd,dZd-dZ	d-dZ
	 	 d.dZd/d	Zd0d
Zd1dZd2dZd2dZd2dZd3dZd2dZd2dZd2dZ	 d4	 	 	 	 	 	 	 d5dZd6dZd+dZd7dZd8dZd9dZ	 	 	 	 	 	 d:dZd4d;dZ	 	 	 	 	 	 	 	 d<dZ	 d4	 	 	 d<dZd=	 d>dZ d?d@dZ!dAd Z"dBd!Z#dCd"Z$dDd#Z%dEd$Z&dFd%Z'dGd&Z(d6d'Z)d6d(Z*dHd)Z+y)IDefinitionParserc                     y)NCr   r   s    r   languagezDefinitionParser.language  s    r   c                .    | j                   j                  S r   )configc_id_attributesr   s    r   id_attributeszDefinitionParser.id_attributes  s    {{***r   c                .    | j                   j                  S r   )r|  c_paren_attributesr   s    r   paren_attributesz!DefinitionParser.paren_attributes  s    {{---r   c                z   | j                   dk7  ry | j                  }| xj                  dz  c_        d}	 | j                  r| j                  d       n;| j                   dk(  r|s| xj                  dz  c_        n*| j                   dk(  rd}nd}| xj                  dz  c_        o| j                  || j                   S )N"r   FTz$Unexpected end during inside string.\)current_charposeoffail
definition)r   startPosescapes      r   _parse_stringzDefinitionParser._parse_string  s    #88Axx		@A""c)&A""d*HHMH  x11r   c                   | j                          | j                  d      rt        d      S | j                  d      rt        d      S | j                  }| j	                  t
              r7| j	                  t               t        | j                  || j                         S t        t        t        t        fD ]L  }| j	                  |      s| j	                  t               t        | j                  || j                         c S  | j                         }|t        |      S | j	                  t               rC| j"                  j%                  d      }| j"                  j%                  d      }	 t'        ||      S y # t(        $ r}| j+                  d|z         Y d }~y d }~wt,        $ r | j+                  d       Y y w xY w)	Nr  Tr  Fr   r8  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&   r(   r'   r  r@  r!   
last_matchgroupr5  UnicodeDecodeErrorr  r   )r   r  regexstringr   r*  ry  s          r   _parse_literalzDefinitionParser._parse_literal  s    	>>&!$T**>>'"$U++hh::&'JJ./#DOOC$ABB'(*:< 	GEzz% 

56'DHH(EFF		G ##%#F++ ::o&__**1-F??((+DH%fd33  & Z		TWXXYY  8 H		 G HHs   /E< <	F>FF>=F>c                    | j                   dk7  ry | xj                  dz  c_        | j                         }| j                          | j	                  d      s| j                  d       t        |      S )NrX  r   rY  z0Expected ')' in end of parenthesized expression.)r  r  _parse_expressionr  skip_stringr  rQ  )r   r   s     r   _parse_paren_expressionz(DefinitionParser._parse_paren_expression  s]    #A$$&$IIHIC  r   c                    | j                          | j                         }||S | j                         }||S | j                         }|t	        |      S y r   )r  r  r  _parse_nested_namerF  )r   r   r  s      r   _parse_primary_expressionz*DefinitionParser._parse_primary_expression  s^     	$($7$7$9?J**,?J$$&>"2&&r   c                   | j                          | j                  |      sy| j                  |      rg dfS g }d}	 | j                          | j                         }| j                          |j	                  |       | j                          | j                  |      r	 ||fS | j                  d      s| j                  d| d| d       | j                  |k(  r!|dk(  r| xj                  d	z  c_        d}	 ||fS )
NNNFTr
  z	Error in z, expected ',' or 'z'.r  r   )r  skip_string_and_wsr  r  r  r  r  r  )r   r   opencloser  r  rT  s          r   _parse_initializer_listz(DefinitionParser._parse_initializer_list  s     	&&t,E"u9LLN))+DLLNLLLLN& m## **3/		IdV+>ugRHI  E)eslA $m## r   c                J    | j                  ddd      \  }}|y t        |      S )Nzparenthesized expression-listrX  rY  )r  rv  r  s      r   _parse_paren_expression_listz-DefinitionParser._parse_paren_expression_list	  s5      $;;<[<? F}=&&r   c                L    | j                  ddd      \  }}|y t        ||      S )Nzbraced-init-listr  r  )r  r}  r  s      r   _parse_braced_init_listz(DefinitionParser._parse_braced_init_list 	  s5      $;;<NPSUXY}= 66r   c                   | j                         }g }	 | j                          | j                  d      r]| j                         }| j                          | j	                  d      s| j                  d       |j                  t        |             | j	                  d      rR| j	                  d      r| xj                  dz  c_        n+| j                         }|j                  t        |             | j	                  d      r|j                  t                      | j	                  d      r|j                  t                      :| j                         }||j                  t        |             h	 t        ||      S )	Nrn  ro  z*Expected ']' in end of postfix expression.r  r   r7  r   r   )r  r  r  r  r  r  r  rj  r  r  r  rr  r}  r  rb  r  )r   r   r  rT  r   re  s         r   _parse_postfix_expressionz*DefinitionParser._parse_postfix_expression(	  sE    //1 )+	LLN&&s+--/'',IIJK  !67%##C(HHMH224D$$%>t%DE%  1%  1335C  !3C!89fi00r   c                   | j                          t        D ]L  }|d   dv r| j                  |      }n| j                  |      }|s0| j	                         }t        ||      c S  | j                  d      r{| j                  d      rO| j                  d      }| j                          | j                  d      s| j                  d       t        |      S | j                         }t        |      S | j                  d	      rq| j                  d      s| j                  d
       | j                  d      }| j                          | j                  d      s| j                  d       t        |      S | j                         S )Nr   r  rZ   rX  F)namedrY  zExpecting ')' to end 'sizeof'.rr   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  r  )r   r  r   rT  r  s        r   r  z(DefinitionParser._parse_unary_expressionT	  sV    	' 	0B!u}nnR(&&r*224%b$//	0   *&&s+&&U&3'',II>?$S))//1D &&  +**3/		:;"""/CLLN##C(		;<!#&&--//r   c                   | j                   }| j                          | j                  d      rP	 | j                  d      }| j                  d      s| j	                  d       | j                         }t        ||      S | j                         S # t        $ rn}|| _         	 | j                         cY d }~S # t        $ r@}g }|j                  |df       |j                  |df       | j                  |d      |d }~ww xY wd }~ww xY w)NrX  FrY  z Expected ')' in cast expression.zIf type cast expressionzIf unary expressionzError in cast expression.)r  r  r  r  r  r  r  r   r  r  _make_multi_error)r   r  r  rT  exCastexUnaryerrss          r   r  z'DefinitionParser._parse_cast_expressionz	  s   hhC [&&u-'',II@A224"3-- //11 # 	[[7799& [DKK)B CDKK*? @A001LNSZ[	[		[s<   AB 	DD B4.D4	C==;C88C==D  Dc                     fd | d      S )Nc                0    dz   t        t              k(  rd	 fd}nd		 fd}g }g }|j                   |              	  j                           j                  }d}t           D ]  }|d   dv r j                  |      s j                  |      s.|dk(  r& j                  dk(  r xj                  dz  c_         n/	  |       }|j                  |       |j                  |       d} n |snt        ||      S # t        $ r
 | _        Y w xY w)
Nr   c                 $     j                         S r   )r  r   s   r   parserzYDefinitionParser._parse_logical_or_expression.<locals>._parse_bin_op_expr.<locals>.parser	  s    6688r   c                       dz         S )Nr   r   )_parse_bin_op_expropIdr   s   r   r  zYDefinitionParser._parse_logical_or_expression.<locals>._parse_bin_op_expr.<locals>.parser	  s    -dD1H==r   TFr   abcnoxr   rW   r  )
r   _expression_bin_opsr  r  r  r  r  r  r   r  )
r   r  r  r  r  r  oneMorer  rT  r  s
   ``       r   r  zIDefinitionParser._parse_logical_or_expression.<locals>._parse_bin_op_expr	  s   ax32339>ECLL"hh-d3 'B!u(#~~b1$#//3$SyT%6%6#%=A'%xT*

2"&#'( 3 4  s++	 + '#&'s   +DDDr   r   )r   r  s    @r   _parse_logical_or_expressionz-DefinitionParser._parse_logical_or_expression	  s    $	,J "$**r   c                     y r   r   )r   
orExprHeads     r   "_parse_conditional_expression_tailz3DefinitionParser._parse_conditional_expression_tail	  s    r   c                f   g }g }| j                         }|j                  |       	 d}| j                          t        D ]a  }|d   dv r| j	                  |      s| j                  |      s.| j                         }|j                  |       |j                  |       d}c |snt        ||      S )NTFr   r  )r  r  r  _expression_assignment_opsr  r  r  )r   r  r  orExprr  r  rT  s          r   _parse_assignment_expressionz-DefinitionParser._parse_assignment_expression	  s     224VGLLN0 
a5H$>>"- ++B/ 88:T"

2
    !,,r   c                &    | j                         }|S r   )r  )r   r  s     r   _parse_constant_expressionz+DefinitionParser._parse_constant_expression	  s    224r   c                "    | j                         S r   r  r   s    r   r  z"DefinitionParser._parse_expression	  s     0022r   c                l   | j                   }	  |       S # t        $ r4}|r| j                  s | j                  d|z         || _         Y d }~nd }~ww xY w|J | j	                          | j                   }| j                  t              r| j                  }ndddd}g }	| j                  st        |	      dk(  r| j                  |v rn| j                  |v r|	j                  || j                            n0t        |	      dkD  r"| j                  |	d   k(  r|	j                          | xj                   dz  c_         | j                  st        |      dkD  r | j                  r| j                  d	|z         | j                  || j                    j                         }t!        |j                               S )
NzBParsing of expression failed. Using fallback parser. Error was:
%srY  r  ro  )rX  r  rn  r   r   r   z0Could not find end of expression starting at %d.)r  r   allowFallbackExpressionParsingwarnr  r  
_string_rematched_textr  r   r  r  popr  r  stripr  )
r   r  r  allowprevPosry  r  r  bracketsr  s
             r   _parse_expression_fallbackz+DefinitionParser._parse_expression_fallback	  s    ((		8O 	  C CII (*+, -DHH	 88::j!%%E !s5H!#GhhLA%$*;*;s*B$$0NN8D,=,=#>?\A%$*;*;wr{*JKKMA hh 3x!|		L$% &OOHTXX6<<>Eu{{}--s    	A*AAc                f   g }| j                          d}| j                  d      rd}	 | j                          | j                  t              s| j	                  d       | j
                  }|t        v r| j	                  d|z         | j
                  | j                  j                  v r?d}| j	                  || j
                  t        | j                  j                        fz         t        |      }|j                  |       | j                          | j                  d      sn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  r  	_keywordsr|  c_extra_keywordsr   r   r  r   )r   r   r   r   r\  r
  s         r   r  z#DefinitionParser._parse_nested_name
  s   C FLLN::m,		?@**JY&		 ,.89 :  DKK$@$@@< 		#!2!2!$T[[%A%A!B!D D E!*-ELLLLN##C() * UF++r   c                    | j                  t              r| j                  S dD ]0  }|| j                  j                  v s| j                  |      s.|c S  y )N)rs   rt   ru   )r  _simple_type_specifiers_rer  r|  r  r  )r   ts     r   _parse_simple_type_specifierz-DefinitionParser._parse_simple_type_specifier<
  sR    ::01$$$1 	ADKK000>>!$H	 r   c                    g }| j                          	 | j                         }|n"|j                  |       | j                          5t        |      dk(  ry t	        |      S r   )r  r  r  r   r  )r   r   r  s      r   _parse_simple_type_specifiersz.DefinitionParser._parse_simple_type_specifiersE
  s]    113AyLLOLLN  u:?-e44r   c                    | j                          | j                         }||S d }| j                          dD ]  }| j                  |      s|} n | j                         }t	        ||      S )N)r\   rL   r_   )r  r  r  r  r  )r   r   r   kr  s        r   _parse_trailing_type_specz*DefinitionParser._parse_trailing_type_specS
  sw     	002?J , 	A$$Q'	
 ,,.
&vz::r   c                   | j                          | j                  d      s|dk(  r| j                  d       ny g }| j                          | j                  d      s	 | j                          | j                  d      rN|j                  t	        d d             | j                          | j                  d      s| j                  d       n| j                  d d	      }|j                  t	        |             | j                          | j                  d
      r| j                  d      rn | j                  d| j                   d       | j                         }t        ||      S )NrX  r  zExpecting "(" in parameters.rY  r  Tz'Expected ")" after "..." in parameters.singler'  r  r
  z)Expecting "," or ")" in parameters, got "z".)	r  r  r  r  r  _parse_type_with_initr  _parse_attribute_listr  )r   	paramModer  r  r   s        r   _parse_parametersz"DefinitionParser._parse_parametersf
  s6   $J&		89$##E*KK 4T4 @ALLN++C0		"KL 00t80L056##C(##C(		EdFWFWEXXZ[\' * **,T5))r   c                   d}d}d}d}d}d}g }		 | j                          |sY|dk(  r(| j                  d      rd},| j                  d      rd}@|dv r(| j                  d      rd}X| j                  d      rd}l|dk(  r*|s(| j                  d      rd}| j                  d	      rd	}|d
k(  r|s| j                  d      }|r|s|r| j                  d      }|r|s|r| j                  d      }|r|s|r| j                  d      }|r| j                         }
|
r|	j                  |
       #	 t	        ||||||t        |	            S )zJust parse the simple ones.Nr  rB   rU   )r  r  r[   rM   rx   rp   r  rR   rV   rb   rF   )r  r  _parse_attributer  r  r   )r   r'  typedr  r  rR   rV   rb   rF   r   attrs              r   _parse_decl_specs_simplez)DefinitionParser._parse_decl_specs_simple
  sy    LLNH$~~f-"( ~~j1", 22~~h/"* ~~h/"*  >>.1"0K>>/2"1K
"61>>*5>>*5Uw/((*DT"!';"*He=Me=TV 	Vr   c                    |r|dvrt        d|z        | j                  ||      }d }|r#| j                         }| j                  ||      }nd }t        ||||      S )Nr   r  r  #Internal error, unknown outer "%s".)r   r  r  r%  )r   r'  r  r(  r)  r,  s         r   _parse_decl_specsz"DefinitionParser._parse_decl_specs
  so    :: E MNN11%?	
557H66ueDJHE9j(CCr   c           
     x    |dv sJ |dk(  r͉ j                  t              r j                  t        v r j	                  d j                  z          j                   j
                  j                  v r?d} j	                  | j                  t         j
                  j                        fz         t         j                        }t        |gd      }nd }n|r j                         }nd }g }	  j                          |r> j                  d      r, j                          d}d}	d}
d}	 |s j                  d	      rd}|	s j                  d
      rd}	-|
s j                  d      rd}
C|s j                  d      rd}Y	 |rdn j                  d      }|r% j                  d      s j	                  d       d }n^ j                  d      rd }nJ fd} j                  dg|      } j                           j                  d      s j	                  d       |j!                  t#        ||	|
|||             nnT j%                  |      }|Ut'        |      dk(  rG|rE|dk(  r@|r> j                           j                  d      r j)                         }t+        ||      S t-        |||      S )N)TFr  r  z$Expected identifier, got keyword: %sr  Fr)  rn  Tr[   rF   rb   rV   r   ro  z&Expected ']' in end of array operator.c                 $     j                         S r   )r  r   s   r   r  z>DefinitionParser._parse_declarator_name_suffix.<locals>.parser  s    #'#9#9#;;r   r   r   r\  rW  rG  )r  r%   r  r  r  r|  r  r   r   r   r  r  r  r  r  r  r  r4  r  r   r  rU  rE  )r   r  r  r  r\  r   rH  rI  r[   rF   rb   rV   r6  r7  r  r   s   `               r   _parse_declarator_name_suffixz.DefinitionParser._parse_declarator_name_suffix
  s    ////Hzz-($$	1II 0262C2CD E$$(D(DD@C IIcT%6%6%()E)E%F%H H I*4+<+<=
&
|EB,,.FFLLN))#.  !00:%)F$ 009$(E$#00<'+H$#00<'+H$%e4+B+B3+G++C0		"JKD'',#<#>>ufM#//4 II&NO(CQU VWY Z &&y1=S]a/f,##C(::<D4FNN%Vh,13 	3r   c           	        |dvrt        d|z        g }| j                          |r| j                  d      r| j                          d}d}d}g }	 |s| j                  d      }|r|s| j                  d      }|r-|s| j                  d      }|rC| j	                         }	|	|j                  |	       g	 | j                  |||      }
t        |
|||t        |            S |r1| j                  d	k(  r"| j                  }	 | j                  |||      }|S | j                  }	 | j                  |||      S # t        $ r}d
}|dk(  r|dz  }|j                  ||f       || _
        	 | j                  d	k(  sJ | j                  d	       | j                  |||      }| j                  d      s| j                  d       | j                  dd|      }
t        ||
      cY d }~S # t        $ r@}|| _
        d}|dk(  r|dz  }|j                  ||f       d}| j                  ||      |d }~ww xY wd }~ww xY w# t        $ r4}|| _
        |j                  |df       d}| j                  ||      |d }~ww xY w)N)r   r  z'Internal error, unknown paramMode '%s'.r   FrV   rb   rF   r`  rX  z If declarator-id with parametersr  z (e.g., 'void f(int arg)')rY  z$Expected ')' in "( ptr-declarator )"r   r  r  r  rn  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  r  r  r  _parse_declaratorr^  r   r  r  r  r   r  rl  r  )r   r  r  r  
prevErrorsrV   rb   rF   r   r  ra  r  r   exParamQualr\  ro  exNoPtrParenheaderry  s                      r   r  z"DefinitionParser._parse_declarator$  s    009IEG G
T%%c*LLNHHEE#44Z@H #44Z@H  11':E ,,.#LL&))%EBD#-5PU*:5*AC C T&&#- ((CW88	9>@
8 hh	D55eYNN; # W8
*77C!!;"45W,,333$$S) !225)UKE++C0		"JK11<B8= 2 ?D .EEE& W"DH>C J.FF%%|S&9:2F00VD,VW'W<  	DDHq"4568F((V<!C		DsU   D7 $H8 7	H5 &H0'A7G$H5$	H--;H((H--H00H58	I5/I00I5Nc                     j                          |dk(  r	  j                  d      sy  j                         }|t        |      S |dk(  rg }n|ddg}n j	                  d|z          fd} j                  ||      }t        |      S )Nr  r   r
  rY  z;Internal error, initializer for outer '%s' not implemented.c                 $     j                         S r   r  r   s   r   r  z3DefinitionParser._parse_initializer.<locals>.parser  s    4466r   )r  )r  r  r  r  r  r  )r   r'  allowFallback
bracedInitfallbackEndr  r  s   `      r   _parse_initializerz#DefinitionParser._parse_initializeru  s    H
 $113
!!*--H%'K]*KII %',- .	7 //V=/Ye$$r   c                   |r|dvrt        d|z        |sJ |dk(  rIg }| j                  }	 | j                  |d      }| j                  d|d      }| j	                  d       nY|dk(  r&| j                  |
      }| j                  d|      }n.d}|dk(  rd}| j                  |
      }| j                  ||      }t        ||      S # t
        $ r}d	}|j                  ||f       || _        	 | j                  |
      }| j                  d|      }nH# t
        $ r<}	|| _        d}|j                  |	|f       	 d}
|
dz  }
| j                  ||
      |	d}	~	ww xY wY d}~d}~ww xY w)z
        named=False|'single'|True: 'single' is e.g., for function objects which
        doesn't need to name the arguments, but otherwise is a single name
        r  r  r   F)r'  r  Tr  )allowSemicolonzIf just a namer'  )r  r  zIf typedef-like declarationz%Type must be either just a name or a ztypedef-like declaration.Nr  r  )	r   r  r  r  
assert_endr   r  r  r?   )r   r  r'  r  r  r  r  	exUntypeddescexTypedr  r  r  s                r   r  zDefinitionParser._parse_type  s   
 :: E MNNL5F?JxxH C 22e2L	--DE49 . ;t4: j ..U.;I)))FDI ..U.;I)))KDy$''K # C'!!9d"34#C $ 6 6U 6 CI111ND& C'DH8D%%wo6 !H"=="44ZHgUC Cs;   9C 	E*E%2%DE%	E!7EEE%%E*c                t    |r|dv sJ | j                  ||      }| j                  |      }t        ||      S )Nr  r  r  )r  r  r@   )r   r  r'  r   r  s        r   r  z&DefinitionParser._parse_type_with_init  sI    ::::e59&&U&3tT**r   c                   | j                          | j                         }|| j                  d       | j                          | j                  d      st	        |d       S | j                  d      rt	        |g       S g }	 | j                          | j                  d      rO|j                  t        d d             | j                          | j                  d      s| j                  d       n	| j                  t              s| j                  d       t        t        | j                        gd	      }| j                          | j                  d      rO|j                  t        |dd             | j                          | j                  d      s| j                  d       nR|j                  t        |             | j                  d
      rU| j                  d      rn| j                  d       yt	        ||      S )Nz(Expected identifier in macro definition.rX  rY  r  Tz-Expected ")" after "..." in macro parameters.z(Expected identifier in macro parameters.Fr)  r
  z9Expected identifier, ')', or ',' in macro parameter list.)r  r  r  r  rA   r  r  r  r  r%   r   r   r  )r   r
  r  r  s       r   _parse_macrozDefinitionParser._parse_macro  s   '')=II@A&&s+E4((C E2&&LLN&-dD9:'',IIMN::m,		DEd.?.? @A%PB LLN&&u--b%>?'',IIMNKK)"-.&&s+&&s+IIQR3 4 t$$r   c                8    | j                         }t        |      S r   )r  r;   rI  s     r   _parse_structzDefinitionParser._parse_struct  s    &&(r   c                8    | j                         }t        |      S r   )r  r<   rI  s     r   _parse_unionzDefinitionParser._parse_union  s    &&(~r   c                8    | j                         }t        |      S r   )r  r=   rI  s     r   _parse_enumzDefinitionParser._parse_enum  s    &&(t}r   c                
     j                         } j                         } j                          d } j                  d      r3 j                          d fd} j	                  g |      }t        |      }t        |||      S )Nr   c                 $     j                         S r   )r  r   s   r   r  z2DefinitionParser._parse_enumerator.<locals>.parser  s    6688r   r  )r  r  r  r  r  r  r>   )r   r   r   r  r  initVals   `     r   _parse_enumeratorz"DefinitionParser._parse_enumerator  sv    &&(**,C LLN9 55b&AG!'*DT4//r   c                :   |dvrt        d|z        |dvrt        d|z        d }|dk(  r| j                  dd      }n|dk(  r| j                  dd      }n|d	k(  r| j                         }nw|d
k(  r| j	                         }na|dk(  r| j                         }nK|dk(  r| j                         }n5|dk(  r| j                         }n|dk(  r| j                  dd      }nt        |d	k7  r"| j                          | j                  d      }nd}t        ||||      S )N)r  r  r  r\   r_   rL   r  r   z(Internal error, unknown objectType "%s".)	r  r  varr  r\   r_   rL   r  r   z+Internal error, unknown directiveType "%s".r  T)r  r'  r  r  r\   r_   rL   r  r   r  F)r   r  r  r  r  r  r  r  r  r  r  r   r  s        r   parse_declarationz"DefinitionParser.parse_declaration  sI    X XFSTT ![ [IMYZZ'+!444x4PK:%**Z*HK7"++-K8#,,.K7"++-K6!**,K<'002K6!**V*DK   LLN((-IIj-iPPr   c                "    | j                         S r   )r  r   s    r   parse_namespace_objectz'DefinitionParser.parse_namespace_object8  s    &&((r   c                    | j                         }| j                          | j                  d       | j                          |S )Nz())r  r  r  r  rI  s     r   parse_xref_objectz"DefinitionParser.parse_xref_object;  s6    &&(r   c                   | j                   }d }	 | j                         }| j                          | j                          |S # t        $ r}|| _         	 | j                  d      }| j                          | j                          nN# t        $ rB}d}g }|j                  |df       |j                  |df       | j                  ||      |d }~ww xY wY d }~|S d }~ww xY w)NFz%Error when parsing (type) expression.zIf expressionzIf type)r  r  r  r  r   r  r  r  )r   r  r   exExprexTyper  r  s          r   parse_expressionz!DefinitionParser.parse_expressionC  s    hh'+	G((*CLLNOO 
  	GDH	G&&u-!" G@V_56VY/0,,T6:FG " 
	Gs;   0A 	CC1BC	C=CCCCr   )rW   r  )rW   zASTLiteral | None)rW   ASTExpression | None)r   r   r  r   r  r   rW   z tuple[list[ASTExpression], bool])rW   zASTParenExprList | None)rW   zASTBracedInitList | None)rW   r  r  )r  r   rW   r$  r  )r  r  r  zCallable[[], ASTExpression]r  rs   rW   r  r  )rW   z%ASTTrailingTypeSpecFundamental | None)rW   r  )r  r   rW   zASTParameters | None)r'  r  r  rs   rW   r  )r'  r  r  rs   rW   r%  )r  
bool | strr  r   r  rs   rW   r?  r<  )r'  r  r  rs   rW   r  r   )r  r%  r'  r  rW   r?   )r  r%  r'  r  rW   r@   )rW   rA   )rW   r;   )rW   r<   )rW   r=   )rW   r>   )r  r   r  r   rW   r   )rW   zASTExpression | ASTType),r   r   r   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  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r#  r   r   r   rw  rw    s     + + . .2&$L	! $%E$<'7*1X$0L201+f-<3 ). )./). ). $1).V,<5;&!*F:V:V(,:V	:VxDO3#O303O3<@O3	O3d )-OD!%OD1>ODb% 5%:9(v+%%N0 QD)r   rw  c                 0    t        t        d      gd      S )NPhonyNameDueToErrorFr)  )r   r   r   r   r   _make_phony_error_namer(  Y  s    -(=>?NNr   c                  .    e Zd ZU dZej
                  ej
                  ej
                  ej
                  ej
                  ej
                  dZded<   ddZ	 	 	 	 ddZ	e
dd       Ze
dd       Zdd	Zdd
Z	 	 	 	 ddZd fdZddZddZddZ xZS )CObjectz-
    Description of a C language object.
    )no-index-entryzno-contents-entryzno-typesettingnoindexentrynocontentsentrysingle-line-parameter-listr9   option_specc                   |j                   dk(  sJ |j                  }|sJ |j                  J |j                  }|sJ |j                  y |j                  }|y |j                   dk7  ry |j
                  dk7  ry |j                  }|j                  |j                  ddd      }|y |j                  j                         }||_        t        ||j                  || j                  j                  | j                         d          y )Nr  rL   FTr:  r   rD  )r  r   r
  r  r   r  r<  r  r  r   r   r  get_source_info)r   astr   r  
parentDecltargetSymbolr'  	declClones           r   _add_enumerator_to_parentz!CObject._add_enumerator_to_parentk  s   ~~--- v||'''}}|& !--
   F* ##v-#**((VZ:? ) A=&&,,.	+1	(l&,,$xx''d.B.B.DQ.G	Ir   c                *   g }t        dt        dz         D ]&  }	 |j                  |      }|j                  |       ( t        t        |            }|d   }|sJ |j                  j                         j                         j                  d      }|| j                  j                  j                  vr|sJ |d   j                  |       |dd  D ]<  }|s|| j                  j                  j                  vs)|d   j                  |       > | j                  j                  j                  |       d| j                  vr5| j!                  |      }	| j"                  d   j                  d|	|d	d f       y y # t        $ r |t        k  sJ Y {w xY w)
Nr   )r   r   r   idsr+  entriesr  r   )r  r  r   r  r   r=  reversedr   r  r   lstripstatedocumentr8  note_explicit_targetr  get_index_text	indexnode)
r   r2  sigr   r8  r  idnewestIdr   	indexTexts
             r   add_target_and_indexzCObject.add_target_and_index  sx   q'A+& 	#A#ZZZ*

2	# 8C=!q6xzz..0CCELLSQ4::..222O8EN!!(+!"g .TZZ00444EN))"-	. JJ44W=4<</++D1INN9%,,h	8RQU-VW 0+   #7{"{#s   #E::FFc                    t         r   )r   r   s    r   object_typezCObject.object_type  s    !!r   c                    | j                   S r   )rG  r   s    r   display_object_typezCObject.display_object_type  s    r   c                6    t        d      || j                  fz  S )Nz	%s (C %s))r   rI  rI  s     r   r?  zCObject.get_index_text  s    ~t'?'? @@@r   c                N    |j                  | j                  | j                        S r   )r  rG  objtype)r   r  s     r   parse_definitionzCObject.parse_definition  s    ''(8(8$,,GGr   c                @    |j                  |d| j                  |       y )Nr   )r   r   )r   r   r2  r  s       r   r   zCObject.describe_signature  s    wdhhHr   c                *   | j                   j                  j                  j                  }d|j                  vr>|j
                  d   d   }||j                  d<   |j                         |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  s      r   rW  zCObject.run  s    jj!!**..CMM1>>#&}5D/3CMM+,.2.A.A.CCOON+
 *.o&w{}r   c                   | j                   j                  d   }| j                   j                  j                  xs$ | j                   j                  j                  xs d}d| j
                  vxr t        |      |cxkD  xr dkD  nc |d<   t        ||| j                   j                        }	 | j                  |      }|j                          	 |j!                  || j                   j"                  | j%                         d   	      }	|	j&                  J |	j(                  J | j                   j                  d   |	_        |	j&                  )|	j&                  j(                  J |	|	j&                  _        |	| j                   j                  d<   |j4                  dk(  r| j7                  |       t9        | j
                        }| j;                  |||       |S # t        $ rW}t        j                  ||       t               }|j                  |      }	|	| j                   j                  d<   t        |d }~ww xY w# t*        $ r}|j,                  | j                   j                  d<   t/        d
      }
|
|j,                  j"                  |j,                  j0                  | j2                  |fz  }
t        j                  |
|       Y d }~<d }~ww xY w)NrP  r   r.  r  rV  r|  rU  rR  r   )r  r  rT  r  )r   rT  r|  c_maximum_signature_line_lengthmaximum_signature_line_lengthr  r   rw  rM  r  r   r   rW  r(  r^  
ValueErrorr`  r  r1  r  r  r   r   r   r  rI  r  r6  r  r   )r   rA  r   r  max_lenr  r2  ry  r   r   r\  r  s               r   handle_signaturezCObject.handle_signature  s   #xx112CD88??BB hhooCC 	 )< )SG'a' 	+,
 "#P
	$''/C	2!11TXX--D4H4H4J14M 2 OF &&...&&..."&(("4"4_"EF"".**77???39##028DHH/ >>\)**3/ t||$g6
I  	$NN1wN/ *+D!**40F28DHH/!#	$( % 	2 34((DHH/ 6 7C))188==$:R:RTWXXCNN3N11	2s3   /!G CH? 	H<%AH77H<?	KB KKc                6   | j                   j                  d   }|sJ | j                   j                  d   | _        | j                   j                  d   | _        || j                   j                  d<   |j                         | j                   j                  d<   y )NrR  rP  r   )r   rT  oldParentSymbolrV  oldParentKeyr   )r   
lastSymbols     r   before_contentzCObject.before_content  s    !XX//@
z#xx112CD'+xx';';N'K0:,-/9/H/H/J^,r   c                    | j                   | j                  j                  d<   | j                  | j                  j                  d<   y )NrP  r   )ra  r   rT  rb  rV  r   s    r   after_contentzCObject.after_content  s7    040D0D,-/3/@/@^,r   )r2  r   rW   r   )r2  r   rA  r   r   r3   rW   r   r   )r   r   rW   r   )r  rw  rW   r   )r   r3   r2  r   r  r  rW   r   rW   r   )rA  r   r   r3   rW   r   rn  )r   r   r   __doc__r   flagr/  __annotations__r6  rE  r  rG  rI  r?  rM  r   rW  r_  rd  rf  rt  ru  s   @r   r*  r*  ]  s    
 %//'__$//"%??&0ooK #IJX&1X6:X@ " "    AHI$(I-1I3jKAr   r*  c                  "    e Zd ZdZedd       Zy)CMemberObjectr  c                :    | j                   dv sJ | j                   S )N)r  r  )rL  r   s    r   rI  z!CMemberObject.display_object_type  s!     ||0000||r   Nr   )r   r   r   rG  r  rI  r   r   r   rl  rl    s    K r   rl  	parameter
Parameters)r   rn  r  argumentrT  )r   )labelr   typerolename	typenamesretvalzReturn values)retvalsrt  T)rq  r   can_collapsereturnvalueReturnsF)returnsrW   )rq  has_argr   
returntypezReturn type)rtypec                  0    e Zd ZdZej                         Zy)CFunctionObjectr  Nr   r   r   rG  _function_doc_field_typescopydoc_field_typesr   r   r   r~  r~  )  s    K/446Or   r~  c                  0    e Zd ZdZej                         Zy)CMacroObjectr  Nr  r   r   r   r  r  /  s    K/446Or   r  c                      e Zd ZdZy)CStructObjectr\   Nr   r   r   rG  r   r   r   r  r  5  s    Kr   r  c                      e Zd ZdZy)CUnionObjectr_   Nr  r   r   r   r  r  9  s    Kr   r  c                      e Zd ZdZy)CEnumObjectrL   Nr  r   r   r   r  r  =      Kr   r  c                      e Zd ZdZy)CEnumeratorObjectr  Nr  r   r   r   r  r  A  s    Kr   r  c                      e Zd ZdZy)CTypeObjectr   Nr  r   r   r   r  r  E  r  r   r  c                  8    e Zd ZU dZdZdZdZdZi Zde	d<   d
dZ
y	)CNamespaceObjectzb
    This directive is just to tell Sphinx that we're documenting stuff in
    namespace foo.
    Fr   r   Tr9   r/  c                   | j                   j                  d   d   }| j                  d   j                         dv r|}g }nrt	        | j                  d   | j                         | j                   j                        }	 |j                         }|j                          |j                  |      }|g}|| j                   j                  d<   || j                   j                  d<   |j                         | j                   j                   d	<   g S # t        $ r9}t        j                  || j                                t               }Y d }~d }~ww xY w)
Nr   rQ  r   NULL0nullptrrZ  rU  rP  c:namespace_stackr   )r   rU  	argumentsr  rw  get_locationr|  r  r  r   r   rW  r(  r^  rT  r   rV  )r   
rootSymbolr   stackr  r   ry  s          r   rW  zCNamespaceObject.runU  s#   XX((-m<
>>!""$(@@F"$E%dnnQ&7/3/@/@/B-1XX__>F0446!!#  ((.FHE06,-27.//5/D/D/F^,	 # 0q4+<+<+>?-/0s   ? D 	E/EENrg  )r   r   r   rh  has_contentrequired_argumentsoptional_argumentsfinal_argument_whitespacer/  rj  rW  r   r   r   r  r  I  s/    
 K $ K r   r  c                  4    e Zd ZU dZdZdZdZi Zded<   d	dZ	y)
CNamespacePushObjectFr   r   Tr9   r/  c                Z   | j                   d   j                         dv rg S t        | j                   d   | j                         | j                  j
                        }	 |j                         }|j                          | j                  j                  j                  dd       }|s| j                  j                  d   d   }|j                  |      }| j                  j                  j                  dg       }|j!                  |       || j                  j                  d<   || j                  j                  d<   |j#                         | j                  j$                  d	<   g S # t        $ r:}t        j                  || j                                t               }Y d }~%d }~ww xY w)
Nr   r  rZ  rU  rP  r   rQ  r  r   )r  r  rw  r  r   r|  r  r  r   r   rW  r(  rT  r  rU  r^  r  r   rV  )r   r  r   ry  	oldParentr   r  s          r   rW  zCNamespacePushObject.runs  s`   >>!""$(@@I!$.."3+/+<+<+>)-:	,002D HH&&**+<dC	++C0?I##D)""&&':B?V06,-27.//5/D/D/F^,	  	,NN1t'8'8':N;)+D	,s     E' '	F*0/F%%F*Nrg  
r   r   r   r  r  r  r  r/  rj  rW  r   r   r   r  r  l  s(    K $ K r   r  c                  4    e Zd ZU dZdZdZdZi Zded<   ddZ	y)	CNamespacePopObjectFr   Tr9   r/  c                   | j                   j                  j                  dd       }|rt        |      dk(  r(t        j                  d| j                                g }n|j                          t        |      dkD  r|d   }n| j                   j                  d   d   }|| j                   j                  d<   || j                   j                  d<   |j                         | j                   j                  d	<   g S )
Nr  r   z;C namespace pop on empty stack. Defaulting to global scope.rU  r   r   rQ  rP  zcp:parent_key)r   rT  r  r   r   rW  r  r  rU  r   rV  )r   r  r   s      r   rW  zCNamespacePopObject.run  s    ""&&':DAE
aNNX$($5$5$7  9EIIKu:>2YFXX((-m<F06,-27./060E0E0G_-	r   Nrg  r  r   r   r   r  r    s(    K $ K r   r  c                  D     e Zd Z	 	 d	 	 	 	 	 	 	 	 	 	 	 d fdZddZ xZS )	AliasNodec                (   t         |           || _        || _        || _        |ad|j
                  vr>|j                  d   d   }||j
                  d<   |j                         |j                  d<   |j                  d   | _	        y |J || _	        y )NrP  r   rQ  r   )
r	  r   rA  aliasOptionsr=  rT  rU  r   rV  	parentKey)r   rA  r  r=  r   r  rX  r  s          r   r   zAliasNode.__init__  s     	( ? 5~~c*=937/0262E2E2G/ __^<DN(((&DNr   c                ~    | j                  | j                  | j                  | j                  d | j                        S )N)r   r  )r  rA  r  r=  r  r   s    r   r  zAliasNode.copy  s7    ~~dhh(9(94=="&$..  B 	Br   r  )rA  r   r  r  r=  r   r   zBuildEnvironment | Noner  zLookupKey | NonerW   r   )rW   r  )r   r   r   r   r  rt  ru  s   @r   r  r    sP     (,&*'' ' 	'
 %' $' 
',Br   r  c                  J    e Zd Zej                  dz
  Z	 	 	 	 	 	 	 	 ddZddZy)AliasTransformr   c           	     z   |dk(  rd}n|dk(  rd}n|dz  }d}g }|sPt        j                  dd      }	 |j                  |	       |j                  j	                  |	d| j
                  |       |r|r|}
nVt        j                         }t        j                         }|j                  |       ||_        d|d<   d	x|d
<   |d<   d|d<   |}
|j                  D ]7  }|j                  | j                  ||d|||      }|
j                  |       9 |s*t        j                        dk7  r |j                         |S )Nr   Tr   Fr   r   r   domainaliasrL  desctypeno-indexmaxdepthskipThisr  renderOptionsr=  )r   r  r  r   r   r   desc_contentr
  r=  r"  _render_symbolr!  r   )r   r'  r  r  r  r  r=  recurser
   r   childContainercontentr
  r  
childNodess                  r   r  zAliasTransform._render_symbol  sN    q=G]GMHG--b"5GELL!MM,,Wj$((MZ=B"//1}}t$ (!$X5<<Y$z"2#'Z !%** 2%%-!00X!-]% 1 '
 %%j12 DMM 2a 7W%r   c           	     
   | j                   j                  t              D ]  }|j                  }|j                  }	 t        ||| j                  j                        }|j                         }|Qt        j                  |d      }|j                          |t        j                  ||      z  }|j!                  |       | j                  j"                  d   j$                  d   }	|	j'                  |      }
|
sPt        j)                  d|       t        j)                  d|       t        j)                  |	j+                  d             |
sJ |
j-                  |d	d
d
      }|}t        j                  |d      }|j/                  |       |j                          |t        j                  ||      z  }t        j                  d|z  |       |j!                  |       |j0                  d   s|j2                  }t        j                  |d      }|j/                  |       |j                          |t        j                  ||      z  }t        j                  d|z  |       |j!                  |       [| j5                  ||j0                  d   |j0                  d   |j0                  i |j                         }|j!                  |        y # t        $ r$}t        j                  ||       d }Y d }~d }~ww xY w)NrZ  rU  r   r   rQ  
Target: %sParentKey: %sr   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  rA  r  rw  r   r|  r  r   r   rW  r   r  clearr   replace_selfdomainsr*  re  r  r   ri  r  r  r   r  )r   kwargsr   rA  r  r  r   ry  r   r  r  r'  r
   s                r   applyzAliasTransform.apply  s   MM)))4 ;	%D((CI)#15B//1
 |"11#r:8--c377!!'*!%!1!1#!6!;!;M!JJ#-#;#;I#FL\3/_i8Z__Q/0<--ed . 4A y"11#r:G$8--c377MPTT(,  .!!'* $$X.1==3H"11#r:G$8--c377WZ^^!  # !!'*''D4E4Ej4Q151B1B81L595F5F684== ( RE e$w;	% # q40s   2K	LK==LN)r'  r   r  rS   r  rs   r  r  r  r  r=  r   rW   r   )r  r   rW   r   )r   r   r   r   default_priorityr  r  r   r   r   r  r    s>    )::Q>*%)*:>*!$*)3*X<%r   r  c                  R    e Zd ZU ej                  ej
                  dZded<   ddZy)CAliasObjectr  r  r9   r/  c           	        d| j                   v r*| j                   j                  dd      \  | _        | _        nd| j                   c| _        | _        t	        j
                         }| j                  j                  |_        | j                  |d<   | j                  x|d<   |d<   d|d<   g | _        | j                  j                  d	d      d
| j                  v d}|d
   r-|d	   dk(  r%t        j                  d| j                                | j                         D ]>  }|j                  t!        ||| j                  j                  | j"                               @ |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\  r   r   r  rL  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.rU  )r   )r   splitr  rL  r   r
  r<  r=  r   r  r  r   rW  r  get_signaturesr  r  r   )r   r   r  rA  s       r   rW  zCAliasObject.run4  s<    $))(,		Q(?%DK(*DII%DK}}

++X-1\\9Y$z*Z "
((Q7$,,.
 !l:&>!&CNN L %)$5$5$7	  9
 &&( 	YCKK	#|TZZ5H5HdhhWX	Yvr   Nrg  )	r   r   r   r   nonnegative_intri  r/  rj  rW  r   r   r   r  r  .  s%    ..//K 
r   r  c                  $    e Zd Z	 	 	 	 	 	 	 	 ddZy)	CXRefRolec                   |j                   j                  |j                         |st        j                  dt        |            }|s<|j                  d      }|dd dk(  r#|dd  }|j                  d      }|dk7  r||dz   d  }||fS )Nr   r   r   r   r   r   )
attributesupdaterV  r   subr   r;  rfind)r   r   refnodehas_explicit_titletitletargetdots          r   process_linkzCXRefRole.process_linkW  s    !!#//2! '**=#e*EE!]]3'F QqzS ab	kk#&"9!#'(OEf}r   N)r   r8   r  r1   r  rs   r  r   r  r   rW   ztuple[str, str])r   r   r   r  r   r   r   r  r  V  s'    )-69CFKZr   r  c                  (     e Zd Zd fdZddZ xZS )	CExprRolec                D    t         |           |rd| _        y d| _        y )Nzc-exprzc-texpr)r	  r   
class_type)r   asCoder  s     r   r   zCExprRole.__init__m  s!    &DO (DOr   c                   | j                   j                  dd      }t        || j                         | j                  j
                        }	 |j                         }| j                  j                  j                  dd       }|| j                  j                  d   d	   }t        j                  d| j                  g      }|j!                  |d
| j                  |       |gg fS # t        $ rX}t        j                  d||| j                                t        j                  d||| j                  g      gg fcY d }~S d }~ww xY w)Nrk  r  rZ  zUnparseable C expression: %r
%srU  r   )classesrP  rQ  r   )r   replacerw  r  r   r|  r#  r   r   rW  r   desc_inliner  rT  r  rU  r   )r   r   r  r2  exr  r   s          r   rW  zCExprRole.runv  s,   yy  s+!$1B1B1D)-:	Z))+C xx))--.?F88..s3MBL &&sT__4EFw
DHHlKy"}  	ZNN=tR$($5$5$7  9 ((dD4??BSTUWYYY		Zs   C' '	E0AE=EE)r  rs   rW   r   )rW   z'tuple[list[Node], list[system_message]])r   r   r   r   rW  rt  ru  s   @r   r  r  l  s    (r   r  c                     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       e        e        e        e        e        e        ed       ed      dZ eddddd      i dZded<   d%dZ	 	 	 	 d&dZd'dZd(d Z	 	 	 	 	 	 	 	 	 	 d)d!Z 	 	 	 	 	 	 	 	 	 	 d*d"Z!	 	 	 	 	 	 	 	 d+d#Z"d,d$Z#y)-CDomainzC language domain.r   ry  r  r  r*  r   variabler  funcr   r  r\   r_   rL   r  zfunction parameter)
r  r  r  r  r\   r_   rL   r  r   r  )r  r  r  r  r\   r_   rL   r  r   	namespaceznamespace-pushznamespace-popr  T)
fix_parens)r  F)r  r*  r  r  r  r\   r_   rL   r  r   rT  texprN)rQ  objectsz3dict[str, Symbol | dict[str, tuple[str, str, str]]]initial_datac                J   t         j                  rqt        j                  d|       t        j                  d       t        j                  | j                  d   j                  d             t        j                  d       | j                  d   }|j                  |       t         j                  rrt        j                  d       t        j                  | j                  d   j                  d             t        j                  d       t        j                  d|       y y )	Nzclear_doc: %sz	before:rQ  r   z	before endz	after:z
	after endzclear_doc end: %s)r   rr  r   r  r*  r   r  )r   r  r  s      r   r  zCDomain.clear_doc  s    !!LL'2LL%LL=166q9:LL(YY}-
W%!!LL$LL=166q9:LL'LL,g6	 "r   c                    t         j                  r^t        j                  d|       t        j                  | j                  d   j                  d             t        j                  d|       y y )Nzprocess_doc: %srQ  r   zprocess_doc end: %s)r   rr  r   r  r*  r   )r   r   r  r=  s       r   process_doczCDomain.process_doc  sN    !!LL*G4LL=166q9:LL.8 "r   c                b    |j                   j                  | j                  j                         y r   )r  r  r   rV  )r   r   s     r   process_field_xrefzCDomain.process_field_xref  s      4 45r   c                   t         j                  rt        j                  d       t        j                  d       t        j                  | j                  d   j                  d             t        j                  d       t        j                  d       t        j                  |d   j                  d             t        j                  d       t        j                  d       | j                  d   j                  |d   || j                         | j                  d	   }|d	   j                         D ]  \  }\  }}}||v s||vs|||f||<    y )
Nzmerge_domaindata:z	self:rQ  r   z		self endz	other:z
	other endzmerge_domaindata endr  )	r   rr  r   r  r*  r   rX  r   items)r   rY  	otherdata
ourObjectsfullnamefnr  rL  s           r   merge_domaindatazCDomain.merge_domaindata  s   !!LL,-LL#LL=166q9:LL&LL$LL=166q9:LL'LL/0		- ++Im,D,4dhh	@YYy)
,5i,@,F,F,H 	>(H(r3X~:-,.W+=Jx(	>r   c                   t        |||j                        }	 |j                         }	|j                  dd       }| j                  d   }|rg|j                  |      }|sPt        j                  d|       t        j                  d|       t        j                  |j                  d	             |sJ |}|j                  |	|d
d
      }||j                  y|j                  }|	j                         }|j                  }|sJ t        ||||j!                         ||      |j"                  fS # t        $ r#}
t        j                  d||
|       Y d }
~
yd }
~
ww xY w)NrZ  z$Unparseable C cross-reference: %r
%srU  r  r   rQ  r  r  r   Tr;  )rw  r|  r  r   r   rW  r  r*  re  r  r   ri  r   r   r  r.   r  r  )r   r   fromdocnamebuilderr  r  r   contnoder  r   ry  r  r  r  r'  r   displayNamer  s                     r   _resolve_xref_innerzCDomain._resolve_xref_inner  sW    "&4

K	++-D
  $xx=	YY}-
#-#;#;I#FL\62_i8Z__Q/0<%L))$48 * N9- mm--/))wG[''557;*556 	67  	NNBFA$(  *	s   D0 0	E9EEc           	     6    | j                  |||||||      d   S r   )r  )r   r   r   r  r  r  r   r  s           r   resolve_xrefzCDomain.resolve_xref  s1     ''['3(.h@@AC 	Cr   c           
         t        j                         5  | j                  |||d|||      \  }}d d d        rd| j                        z   |fgS g S # 1 sw Y   $xY w)Nr  zc:)r   suppress_loggingr  role_for_objtype)	r   r   r   r  r  r   r  retnoderL  s	            r   resolve_any_xrefzCDomain.resolve_any_xref  sv     %%' 	W#77['8=vtX WGW	W D11'::GDEE		W 	Ws   AAc              #    K   | j                   d   }|j                         D ]  }|j                  |j                  sJ |j	                         }t        |      j                  d      }|j                         j                  d      }|j                  j                  }|j                  }|j                  j                         }|||||df  y w)NrQ  r   r   )
r*  r!  r   r  r  r   r;  r   r  r  )	r   r  r   fullNestedNamer   dispnamer  r  rC  s	            r   get_objectszCDomain.get_objects&  s     YY}-
 002 
	EF!!)>>!>#88:N~&--c2D%88:AA#FH++66JnnG))779H:w!DD
	Es   CCrq  )r   r8   r  r   r=  znodes.documentrW   r   )r   r5   rW   r   )rY  r  r  r  rW   r   )r   r8   r   r   r  r7   r  r   r  r   r   r5   r  r1   rW   z!tuple[Element | None, str | None])r   r8   r   r   r  r7   r  r   r  r   r   r5   r  r1   rW   zElement | None)r   r8   r   r   r  r7   r  r   r   r5   r  r1   rW   zlist[tuple[str, Element]])rW   z-Iterator[tuple[str, str, str, str, str, int]])$r   r   r   rh  r   rq  r   r   object_typesrl  r~  r  r  r  r  r  r  r  r  r  r  r   r  r  rolesr   r  rj  r  r  r  r  r  r  r  r  r   r   r   r  r    s#   DE !H+uhMq}uhMAjMvfU7wM!H+xfU7wfU&	vfUao|M&	fU #7!8eU]_efL   #'%.,J$ +{T*+k&%(E dD$d;ILE 
7 9,91596>(#6!$#6.1#69E#6&-#62S#6JCC'*C2>C&C+9C!$,8DK7Er   r  c                   | j                  t               | j                  dg d       | j                  dg d       | j                  dt        d       | j                  dd dt        d h       | j                  t               ddd	d	d
S )Nr}  r   r  r  r[  )typesbuiltinr7  T)r   env_versionparallel_read_safeparallel_write_safe)
add_domainr  add_config_value_macroKeywordsrS   add_post_transformr  )apps    r   setupr  5  s    NN7*B6-r59+^UC:D%PSUY{[>* "#	 r   r  )r  r6   rW   zdict[str, Any])rh  
__future__r   retypingr   r   r   r   r   r	   docutilsr
   docutils.parsers.rstr   sphinxr   sphinx.directivesr   sphinx.domainsr   r   sphinx.localer   r   sphinx.rolesr   r   sphinx.transformsr   !sphinx.transforms.post_transformsr   sphinx.utilr   sphinx.util.cfamilyr   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   sphinx.util.docfieldsr*   r+   r,   sphinx.util.docutilsr-   sphinx.util.nodesr.   collections.abcr/   r0   docutils.nodesr1   r2   r3   r4   sphinx.addnodesr5   sphinx.applicationr6   sphinx.buildersr7   sphinx.environmentr8   sphinx.util.typingr9   	getLoggerr   r   r:   r  r  r  r  r  r  r  r  compileSr  VERBOSEr  r   r   r   r   r   r  r  r  r'  r5  r@  rF  rQ  r`  rb  rj  rr  r}  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r%  r4  r?  rE  rU  r^  rl  rv  r}  r  r?   r@   r  rA   r;   r<   r=   r>   r   r  r  r   rw  r(  r*  rl  r  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   <module>r:     s    " 	 E E  +  / *  - - @      * B A 0 *3II,)'3-			8	$CL.	 
4L	5M'N%L(O	4L#J	5M  S [  !
 RZZ 89;?
 (RZZ )  ZZ! &NI N.k .,CK ,C^LCG LCf	G 		 	7
 7 
>z 
><Z <,
>z 
>Am A ;= ;(	7 		@ 	@;l ;:L ::L :
I 
I=] =*A] A*;M ;AM A;] ;$A- A(I7 I>I I>7m 7&	' 	<%8 <&N1 N2K7 K0:3G :3z>% >%B07 0l8;w 8;v
.G 
.&F] &FRA ABDA} DAN I  IL;+ ;.; ;6HW H.,Ag ,A^Eg E6K K6%w %PH H Hw H Hg H KG K>SD[ SDl  L
 L
^Bz BJOqA/ qAhG  {!L/>"i9 ?!3,"$ 
-q|U%'	,a. 7g 777 7G 7 '  '    F? >/ 2B B8k%_ k%\%$ %P ,
 @fEf fERr   