
    zir                      U d Z ddlmZ ddlZddlmZmZmZmZ ddl	m
Z
 ddlmZ ddlmZ ddlmZ dd	lmZmZ dd
lmZ ddlmZmZ ddlmZmZ ddlmZ ddlmZ ddl m!Z! dd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l6m7Z7m8Z8 ddl9m:Z: ddl;m<Z< er4ddl=m>Z>m?Z? ddl@mAZAmBZBmCZCmDZD ddlEmFZFmGZG ddlHmIZI ddlJmKZK ddlLmMZM ddlNmOZO  e!jP        eQ          ZR ed          ZS	  ejT        dejU                  ZV ejT        dejW                  ZX ejT        d          ZY ejT        dejU                  ZZ ejT        d ejU                  Z[g d!Z\ ejT        d"ejU                  Z]d#Z^g d$Z_d%d%d&d'd'd(d)d)d*d+d,
Z`d-d.d/d0d1d2d3Zai d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUi dVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzd{d|d}d~ddZbi dd1dd+dd%dddddddddddddddddddddddddd'dd'i dd'dddddd)dd)dd)dd)dd2dd2ddddddddddddddddi ddddddddddddddddddddddddddddddddǓddɓddiZci d4d̓d6d͓d8dΓd:dϓd<dГddГd>dғd@dӓdBdԓdDdՓdFd֓dHdדddדdJdٓddٓdLdۓddۓi dNdݓdPdޓdRdߓdTddVddXddZdddd\dddd^dddd`ddbdddddfddhdi djddddlddnddpddrddd-dtddddvddddddddddddd ddddddddZdd	d
ddddddddАd
Zed%d%ddddZfdegd<   ddgdvdgdJdgdLdgdHdgg dg dd`dbgd>d@gg dddggZhg dZig dZjdddddZk G d del          Zm G d d e$          Zn G d! d"en          Zo G d# d$en          Zp G d% d&en          Zq G d' d(en          Zr G d) d*er          Zs G d+ d,es          Zt G d- d.es          Zu G d/ d0es          Zv G d1 d2es          Zw G d3 d4es          Zx G d5 d6es          Zy G d7 d8er          Zz G d9 d:er          Z{ G d; d<er          Z| G d= d>er          Z} G d? d@en          Z~ G dA dBe~          Z G dC dDe~          Z G dE dFe~          Z G dG dHe~          Z G dI dJe~          Z G dK dLe~          Z G dM dNer          Z G dO dPer          Z G dQ dRer          Z G dS dTer          Z G dU dVer          Z G dW dXer          Z G dY dZer          Z G d[ d\er          Z G d] d^er          Z G d_ d`er          Z G da dber          Z G dc dder          Z G de dfer          Z G dg dher          Z G di djen          Z G dk dler          Z G dm dner          Z G do dper          Z G dq dren          Z G ds dte          Z G du dve          Z G dw dxe          Z G dy dzen          Z G d{ d|en          Z G d} d~en          Z G d de          Z G d de          Z G d de          Z G d de          Z G d den          Z G d den          Z G d den          Z G d den          Z G d den          Z G d den          Z G d den          Z G d den          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 der          Z G d de%          Z G d den          Z G d den          Z G d den          Z G d den          Z G d den          Z G d den          Z G d den          Z G d den          Z G d den          Z G d den          Z G d den          Z G d den          Z G d de          Z G dÄ de          Z G dń de          Z G dǄ de          Z G dɄ den          Z G d˄ den          Z G d̈́ den          Z G dτ den          Z G dф den          Z G dӄ den          Z G dՄ den          Z G dׄ dئ          Z G dل dڦ          Zːdd߄Z G d d          Z G d de&          ZΐddZ G d dee                   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:          Z G d de
jA                  Z G d d e          Z G d de          Z G d de          Z G d de          Z G d de          ZddZdS (  zThe C++ language domain.    )annotationsN)TYPE_CHECKINGAnyCallableTypeVar)nodes)
directives)addnodes)ObjectDescription)DomainObjType)NoUri)___)
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)SphinxDirective)make_refnode)	GeneratorIterator)ElementNodeTextElementsystem_message)desc_signaturepending_xref)Sphinx)Builder)BuildEnvironment)
OptionSpecTzJ
    [a-zA-Z_][a-zA-Z0-9_]*\b   # note, no word boundary in the beginning
z>[LuU8]?('([^'\\]*(?:\\.[^'\\]*)*)'|"([^"\\]*(?:\\.[^"\\]*)*)")z\b(public|private|protected)\bz
        \[\s*\]
    |   \(\s*\)
    |   \+\+ | --
    |   ->\*? | \,
    |   (<<|>>)=? | && | \|\|
    |   <=>
    |   [!<>=/*%+|&^~-]=?
    |   (\b(and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|xor|xor_eq)\b)
zt
        ->\*    |    \.\*    |    \,
    |   (<<|>>)=?    |    &&    |    \|\|
    |   !=
    |   [<>=/*%+|&^~-]=?
)Yalignasalignofandand_eqasmautobitandbitorboolbreakcasecatchcharchar8_tchar16_tchar32_tclasscomplconceptconst	consteval	constexpr	constinit
const_castcontinuedecltypedefaultdeletedodoubledynamic_castelseenumexplicitexportexternfalsefloatforfriendgotoifinlineintlongmutable	namespacenewnoexceptnotnot_eqnullptroperatororor_eqprivate	protectedpublicregisterreinterpret_castrequiresreturnshortsignedsizeofstaticstatic_assertstatic_caststructswitchtemplatethisthread_localthrowtruetrytypedeftypeidtypenameunionunsignedusingvirtualvoidvolatilewchar_twhilexorxor_eqa  
    \b(
    auto|void|bool
    |signed|unsigned
    |short|long
    |char|wchar_t|char(8|16|32)_t
    |int
    |__int(64|128)  # extension
    |float|double
    |__float80|_Float64x|__float128|_Float128  # extension
    |_Complex|_Imaginary  # extension
    )\b
   )N _CPPv2_CPPv3_CPPv4cCiUlLb)
rF   signed charunsigned charre   
signed intunsigned intrf   signed longunsigned longrB   ssosisiosvm)zstd::stringzstd::ostreamzstd::istreamzstd::iostreamzstd::vectorzstd::mapri   znew-operatornew[]znew-array-operatorrU   zdelete-operatordelete[]zdelete-array-operator~zinv-operator+zadd-operator-zsub-operator*zmul-operator/zdiv-operator%zmod-operator&zand-operator|zor-operator^zxor-operator=zassign-operator+=zadd-assign-operator-=zsub-assign-operator*=zmul-assign-operator/=zdiv-assign-operator%=zmod-assign-operator&=zand-assign-operator|=zor-assign-operator^=zxor-assign-operatorz<<zlshift-operatorz>>zrshift-operator<<=zlshift-assign-operator>>=zrshift-assign-operator==zeq-operator!=zneq-operator<zlt-operator>zgt-operator<=zlte-operator>=zgte-operator!znot-operator&&zsand-operatorzsor-operatorzinc-operatorzdec-operatorzcomma-operatorzpointer-by-pointer-operatorzpointer-operatorzcall-operatorzsubscript-operator)||++--,->*->()[]r   rB   rF   r   ar   hr   wrI   DirH   DsrG   Durx   sz	short intzsigned shortzsigned short intzunsigned shorttzunsigned short intre   ry   r   r   jr   rf   zlong intr   zsigned long intr   zunsigned long intz	long longxzlong long intzsigned long longzsigned long long int__int64zunsigned long longyzunsigned long long int__int128nzsigned __int128zunsigned __int128or_   frW   dzlong doublee	__float80	_Float64x
__float128g	_Float128z_Complex floatCfz_Complex doubleCdz_Complex long doubleCez_Imaginary floatz_Imaginary doublez_Imaginary long doubler?   Dadecltype(auto)Dczstd::nullptr_tDnnwnadldacorK   plmimldvrmanr@   ro   rA   eor   aSpLmImLdVrMaNr=   oRrp   eOr   lsrslSrSeqnerl   ltgtlege<=>ntrk   aar<   r   oor   ppr   mmr   cmr   pmptclixdsqu)r   r   r   .*?pp_mm_deadpsng)
r   r   r   r   r   r   r   rk   r   rK   )Nu8ur   r   zdict[str | None, str]_id_char_from_prefix)r   r   rl   )r  r   r   r   r   )r   r   r   r  )r   r   r   r   r   r   r   r   r   r=   r   r   r   rp   dcscccrc)rX   r}   rQ   ru   c                      e Zd ZddZdd	Zd
S )_DuplicateSymbolErrorsymbolSymboldeclarationASTDeclarationrw   Nonec                2    |sJ |sJ || _         || _        d S N)r,  r.  )selfr,  r.  s      ]/var/www/tmov.alphamb/tmov_inventario/venv/lib/python3.11/site-packages/sphinx/domains/cpp.py__init__z_DuplicateSymbolError.__init__S  s,    &    strc                <    d| j                             d          z  S )Nz'Internal C++ duplicate symbol error:
%sr   )r,  dumpr3  s    r4  __str__z_DuplicateSymbolError.__str__Y  s    9DK<L<LQ<O<OOOr6  N)r,  r-  r.  r/  rw   r0  rw   r7  )__name__
__module____qualname__r5  r;   r6  r4  r+  r+  R  sB        ' ' ' 'P P P P P Pr6  r+  c                      e Zd ZdS )ASTBaseNr=  r>  r?  r@  r6  r4  rB  rB  ]          Dr6  rB  c                  F    e Zd ZddZddZdd
ZddZddZddZd dZ	dS )!ASTIdentifier
identifierr7  rw   r0  c                F    |J t          |          dk    sJ || _        d S Nr   )lenrG  r3  rG  s     r4  r5  zASTIdentifier.__init__e  s0    %%%:!####$r6  	transformr   c                "     || j                   S r2  rG  r3  rL  s     r4  
_stringifyzASTIdentifier._stringifyj  s    y)))r6  rB   c                $    | j         d         dk    S )Nr   @rN  r:  s    r4  is_anonzASTIdentifier.is_anonm  s    q!S((r6  versionre   c                   |                                  r|dk     rt          |dk    r| j        dk    rdS | j        S | j        dk    rdS | j        d         dk    rd	S |                                  r)d
t          | j                  dz
  | j        dd          fz  S t	          t          | j                            | j        z   S )N      size_tr   stdStr   r   D0zUt%d_%s)rS  r   rG  rJ  r7  r3  rT  s     r4  get_idzASTIdentifier.get_idp  s    <<>> 	gkka<<(**s&?e##4_Q3&&4||~~ C C$8$81$<doabb>Q#RRR3t//004?BBr6  c                    | j         S r2  rN  r:  s    r4  r;  zASTIdentifier.__str__  
    r6  c                <    |                                  rdn| j        S )N[anonymous])rS  rG  r:  s    r4  get_display_stringz ASTIdentifier.get_display_string  s     $C}}DOCr6  signoder1   modeenvr7   prefixtemplateArgsr,  r-  c                D   t          |           |                                 rt          j        d          }nt          j        | j        | j                  }|dk    rJ|| j        z   |z   }t          j        ddd|d d           }	|                                |	d<   |	|z  }	||	z  }d S |d	k    rt          j                    }
|
|z  }
||
z  }d S |d
k    r||z  }d S |dk    r"|d                             d           ||z  }d S |dk    rt          |          dk    sJ t          |          dk    sJ |                                 rJ d| j        z   }t          j        ddd|d d           }	|                                |	d<   |	|z  }	||	z  }d S t          d|z            )Nra  )textmarkTyper   cpprG  	refdomainreftype	reftargetmodname	classnamecpp:parent_key
lastIsName
noneIsNameparamclassesz	sig-paramudlr   
operator""Unknown description mode: %s)r(   rS  r
   desc_sig_namerG  r4   get_lookup_key	desc_nameappendrJ  	Exception)r3  rc  rd  re  rf  rg  r,  node
targetTextpnodenameNodes              r4  describe_signaturez ASTIdentifier.describe_signature  s   %%%<<>> 	L)}===DD)$/4?KKD:$/1L@J)"2>4>48: : :E '-&;&;&=&=E"#TMEuGGG\!!)++HHxGGG\!!tOGGGW__O"";///tOGGGU]]v;;!####|$$))))||~~%%%%7J)"2>4>48: : :E '-&;&;&=&=E"#TMEuGGG:TABBBr6  N)rG  r7  rw   r0  rL  r   rw   r7  rw   rB   rT  re   rw   r7  r<  rc  r1   rd  r7  re  r7   rf  r7  rg  r7  r,  r-  rw   r0  )
r=  r>  r?  r5  rP  rS  r]  r;  rb  r  r@  r6  r4  rF  rF  d  s        % % % %
* * * *) ) ) )C C C C*   D D D D'C 'C 'C 'C 'C 'Cr6  rF  c                  6    e Zd ZddZdd	ZddZddZddZdS ) ASTNestedNameElement	identOrOpASTIdentifier | ASTOperatorrg  ASTTemplateArgsrw   r0  c                "    || _         || _        d S r2  r  rg  )r3  r  rg  s      r4  r5  zASTNestedNameElement.__init__  s    "(r6  rB   c                    dS NFr@  r:  s    r4  is_operatorz ASTNestedNameElement.is_operator      ur6  rT  re   r7  c                    | j                             |          }| j        r|| j                            |          z  }|S r2  )r  r]  rg  r3  rT  ress      r4  r]  zASTNestedNameElement.get_id  sB    n##G,, 	54$++G444C
r6  rL  r   c                Z     || j                   }| j        r| || j                  z  }|S r2  r  r3  rL  r  s      r4  rP  zASTNestedNameElement._stringify  s:    i'' 	099T.///C
r6  rc  r1   rd  re  r7   rf  r,  r-  c                    | j         t          | j                   nd}| j                            ||||||           | j         | j                             |d||           d S d S )Nr   rj  )rg  r7  r  r  )r3  rc  rd  re  rf  r,  tArgss          r4  r  z'ASTNestedNameElement.describe_signature  ss    *.*;*GD%&&&R))'4feVTTT(00*c6RRRRR )(r6  N)r  r  rg  r  rw   r0  r  r  r  )rc  r1   rd  r7  re  r7   rf  r7  r,  r-  rw   r0  )r=  r>  r?  r5  r  r]  rP  r  r@  r6  r4  r  r    s~        ) ) ) )
         S S S S S Sr6  r  c                  P    e Zd Zdd	Zedd
            Zd dZd!d"dZd#dZd$dZ	dS )%ASTNestedNamenameslist[ASTNestedNameElement]	templates
list[bool]rootedrB   rw   r0  c                    t          |          dk    sJ || _        || _        t          | j                  t          | j                  k    sJ || _        d S rI  )rJ  r  r  r  )r3  r  r  r  s       r4  r5  zASTNestedName.__init__  sQ    5zzA~~~~
"4:#dn"5"55555r6  c                    | S r2  r@  r:  s    r4  namezASTNestedName.name  s    r6  re   c                `    d}| j         D ]#}|                                r|j        r|dz  }$|S Nr   rW  )r  r  rg  )r3  countr   s      r4  num_templateszASTNestedName.num_templates  sD     	 	A}} ~ 
r6  r   rT  	modifiersr7  c                b   dk    rKt          |           }|t          v rt          |         S d                    fd| j        D                       S g }t	          | j                  dk    st	          |          dk    r|                    d           |                    |           | j        D ]*}|                    |                                         +t	          | j                  dk    st	          |          dk    r|                    d           d                    |          S )NrW  ::c              3  B   K   | ]}|                               V  d S r2  r]  ).0r   rT  s     r4  	<genexpr>z'ASTNestedName.get_id.<locals>.<genexpr>  /       G Gq'!2!2 G G G G G Gr6  r   NEr   )r7  _id_shorthands_v1joinr  rJ  r}  r]  )r3  rT  r  ttr  r   s    `    r4  r]  zASTNestedName.get_id  s   a<<TB&&&(,,yy G G G GDJ G G GGGGtz??Q#i..1"4"4JJsOOO

9 	* 	*AJJqxx(())))tz??Q#i..1"4"4JJsOOOwws||r6  rL  r   c                d   g }| j         r|                    d           t          t          | j                            D ]\}| j        |         }| j        |         r"|                    d ||          z              >|                     ||                     ]d                    |          S )Nr   z	template r  )r  r}  rangerJ  r  r  r  )r3  rL  r  r   r   s        r4  rP  zASTNestedName._stringify  s    ; 	JJrNNNs4:'' 	) 	)A
1A~a  )

;156666

99Q<<((((yy~~r6  rc  r1   rd  re  r7   r,  r-  c                   t          |           |dk    r| j        rd}t          |          t          t          | j                            D ]]}|dk    rd}t          |          | j        |         }| j        |         rd}t          |          |	                    |||d|           ^d S |d	k    rm| j        rJ t          |                       t          | j                  d
k    sJ | j        d         rJ | j        d         	                    |d	|d|           d S |dv rNg }|dk    r!|J |j        j        |j        j        j        }d}	d}
d}d}|dk    r| j        d d         n| j        }|}|dk    rt          j                    }| j        rO|dz  }|dk    r,t          |          dk    r|t          j        dd          z  }n|t          j        dd          z  }t          t          |                    D ]}||         }| j        |         }|s|t          j        dd          z  }|dz  }|r.|t          j        dd          z  }|t          j                    z  }d}t          |          }|dk    rS|j        r0|	t          |          k     r|
t          ||	                   z  }
|	d
z  }	|	                    |d||
|z   |           ||z  }|dk    rt          | j                  d
k    r|t          j        dd          z  }||z  }| j        d         r.|t          j        dd          z  }|t          j                    z  }| j        d         	                    |||d|           d S d S t'          d|z            )Nrt  zCan this happen?r  r   z::blahr    r   ru  rW  )rj  rs  markNamers  TFrj  ry  )r(   r  AssertionErrorr   Textr  rJ  r  r  r  r7  r.  templatePrefixr
   desc_addnamedesc_sig_punctuationdesc_sig_keyworddesc_sig_spacerg  r~  )r3  rc  rd  re  r,  unreachabler   r   templateParamsiTemplateParamstemplateParamsPrefixrf  firstr  destnner   txt_nnes                     r4  r  z ASTNestedName.describe_signature  s   %%%<{ ,0$[1113tz??++ E E66"4K(555JqM>!$ /"4K(555 $$WdCVDDDDE E W__{--CII---tz??a''''~a((((JqM,,WgsBOOOOO;;;
 )+N|##)))%4@%+%7%F%PNO#% FE'+|';';DJssOOE
 D|##,..{ F$<''CJJ!OOx<T4HHHGGH9$EEED3u::&& " "Ah>!, #H9$EEEDdNF 6H5j*MMMDH3555Dc((b==' -Oc.>Q>Q,Q,Q,N?4S0T0TT,'1,**4+.0Dv0MvW W W'!|##tz??Q&&H9$EEEDtOG>"% 9x8ZPPPGx6888G
211'4b&QQQQQ $# :TABBBr6  N)r  r  r  r  r  rB   rw   r0  rw   r  )rw   re   )r   )rT  re   r  r7  rw   r7  r  
rc  r1   rd  r7  re  r7   r,  r-  rw   r0  )
r=  r>  r?  r5  propertyr  r  r]  rP  r  r@  r6  r4  r  r    s               X       $
 
 
 
QC QC QC QC QC QCr6  r  c                      e Zd ZddZddZdS )ASTExpressionrT  re   rw   r7  c                :    t          t          |                     r2  NotImplementedErrorreprr\  s     r4  r]  zASTExpression.get_id_      !$t**---r6  rc  r1   rd  re  r7   r,  r-  r0  c                :    t          t          |                     r2  r  r3  rc  rd  re  r,  s        r4  r  z ASTExpression.describe_signatureb      !$t**---r6  Nr  r  r=  r>  r?  r]  r  r@  r6  r4  r  r  ^  <        . . . .. . . . . .r6  r  c                      e Zd ZdS )
ASTLiteralNrC  r@  r6  r4  r  r  j  rD  r6  r  c                  &    e Zd ZddZddZddZdS )ASTPointerLiteralrL  r   rw   r7  c                    dS Nrm   r@  rO  s     r4  rP  zASTPointerLiteral._stringifyo  s    yr6  rT  re   c                    dS )NLDnEr@  r\  s     r4  r]  zASTPointerLiteral.get_idr      vr6  rc  r1   rd  re  r7   r,  r-  r0  c                6    |t          j        dd          z  }d S r  r
   r  r  s        r4  r  z$ASTPointerLiteral.describe_signatureu  s    8,Y	BBBr6  Nr  r  r  r=  r>  r?  rP  r]  r  r@  r6  r4  r  r  n  sV              C C C C C Cr6  r  c                  .    e Zd ZddZdd	ZddZddZdS )ASTBooleanLiteralvaluerB   rw   r0  c                    || _         d S r2  r  r3  r  s     r4  r5  zASTBooleanLiteral.__init__{      


r6  rL  r   r7  c                    | j         rdS dS )Nr   r^   r  rO  s     r4  rP  zASTBooleanLiteral._stringify~  s    : 	67r6  rT  re   c                    | j         rdS dS )NL1EL0Er  r\  s     r4  r]  zASTBooleanLiteral.get_id  s    : 	55r6  rc  r1   rd  re  r7   r,  r-  c                j    |t          j        t          |           t          |                     z  }d S r2  )r
   r  r7  r  s        r4  r  z$ASTBooleanLiteral.describe_signature  s)    8,SYYD		BBBr6  N)r  rB   rw   r0  r  r  r  r=  r>  r?  r5  rP  r]  r  r@  r6  r4  r  r  z  sj                 C C C C C Cr6  r  c                  .    e Zd ZddZddZddZddZdS )ASTNumberLiteraldatar7  rw   r0  c                    || _         d S r2  r  r3  r  s     r4  r5  zASTNumberLiteral.__init__      			r6  rL  r   c                    | j         S r2  r  rO  s     r4  rP  zASTNumberLiteral._stringify  
    yr6  rT  re   c                >    d| j                             dd          z  S )NzL%sE'r   )r  replacer\  s     r4  r]  zASTNumberLiteral.get_id  s    	))#r2222r6  rc  r1   rd  re  r7   r,  r-  c                J    |t          j        | j        | j                  z  }d S r2  )r
   desc_sig_literal_numberr  r  s        r4  r  z#ASTNumberLiteral.describe_signature  !    83DItyIIIr6  Nr  r7  rw   r0  r  r  r  r  r@  r6  r4  r  r    sj              3 3 3 3J J J J J Jr6  r  c                  .    e Zd ZddZddZddZddZdS )ASTStringLiteralr  r7  rw   r0  c                    || _         d S r2  r  r  s     r4  r5  zASTStringLiteral.__init__  r  r6  rL  r   c                    | j         S r2  r  rO  s     r4  rP  zASTStringLiteral._stringify  r  r6  rT  re   c                6    dt          | j                  dz
  z  S )NzLA%d_KcE   )rJ  r  r\  s     r4  r]  zASTStringLiteral.get_id  s    S^^a/00r6  rc  r1   rd  re  r7   r,  r-  c                J    |t          j        | j        | j                  z  }d S r2  )r
   desc_sig_literal_stringr  r  s        r4  r  z#ASTStringLiteral.describe_signature  r   r6  Nr  r  r  r  r  r@  r6  r4  r  r    sj              1 1 1 1J J J J J Jr6  r  c                  .    e Zd ZddZdd	ZddZddZdS )ASTCharLiteralrf  r7  r  rw   r0  c                   || _         || _        |t          v sJ t          |         | _        |                                                    d          }t          |          dk    rt          |          | _        d S t          |          )Nzunicode-escaperW  )
rf  r  r%  typeencodedecoderJ  ordr  r   )r3  rf  r  decodeds       r4  r5  zASTCharLiteral.__init__  sz    	-----(0	++--&&'788w<<1WDJJJ6w???r6  rL  r   c                T    | j         d| j        z   dz   S | j         dz   | j        z   dz   S Nr  )rf  r  rO  s     r4  rP  zASTCharLiteral._stringify  s4    ;?S((;$ty0366r6  rT  re   c                :    | j         t          | j                  z   S r2  )r  r7  r  r\  s     r4  r]  zASTCharLiteral.get_id  s    y3tz??**r6  rc  r1   rd  re  r7   r,  r-  c                    | j         "|t          j        | j         | j                   z  }d| j        z   dz   }|t          j        ||          z  }d S r  )rf  r
   r  r  desc_sig_literal_char)r3  rc  rd  re  r,  txts         r4  r  z!ASTCharLiteral.describe_signature  sP    ;"x0dkJJJGDIo#81#s;;;r6  N)rf  r7  r  r7  rw   r0  r  r  r  r  r@  r6  r4  r  r    sh        	@ 	@ 	@ 	@7 7 7 7+ + + +< < < < < <r6  r  c                  .    e Zd ZddZdd
ZddZddZdS )ASTUserDefinedLiteralliteralr  identrF  c                "    || _         || _        d S r2  r  r  )r3  r  r  s      r4  r5  zASTUserDefinedLiteral.__init__  s    


r6  rL  r   rw   r7  c                D     || j                    || j                  z   S r2  r  rO  s     r4  rP  z ASTUserDefinedLiteral._stringify  s%    y&&4:)>)>>>r6  rT  re   c                t    d| j                             |           d| j                            |           dS )NclL_Zlir  )r  r]  r  r\  s     r4  r]  zASTUserDefinedLiteral.get_id  s;    U**733UUdl6I6I'6R6RUUUUr6  rc  r1   rd  re  r7   r,  r-  r0  c                ~    | j                             ||||           | j                            |d|dd|           d S )Nrw  r   )r  r  r  r  s        r4  r  z(ASTUserDefinedLiteral.describe_signature  sD    ''sFCCC
%%guc2r6JJJJJr6  N)r  r  r  rF  r  r  r  r  r@  r6  r4  r  r    sn           ? ? ? ?V V V VK K K K K Kr6  r  c                  &    e Zd ZddZddZddZdS )ASTThisLiteralrL  r   rw   r7  c                    dS Nr   r@  rO  s     r4  rP  zASTThisLiteral._stringify  r  r6  rT  re   c                    dS )NfpTr@  r\  s     r4  r]  zASTThisLiteral.get_id  r  r6  rc  r1   rd  re  r7   r,  r-  r0  c                6    |t          j        dd          z  }d S r%  r  r  s        r4  r  z!ASTThisLiteral.describe_signature  s    8,VV<<<r6  Nr  r  r  r  r@  r6  r4  r#  r#    sP              = = = = = =r6  r#  c                  .    e Zd ZddZddZddZddZdS )ASTFoldExprleftExprr  opr7  	rightExprrw   r0  c                <    ||J || _         || _        || _        d S r2  r+  r,  r-  r3  r+  r,  r-  s       r4  r5  zASTFoldExpr.__init__  s,    #y'<'<'< "r6  rL  r   c                >   dg}| j         rg|                     || j                              |                    d           |                    | j                   |                    d           |                    d           | j        rg|                    d           |                    | j                   |                    d           |                     || j                             |                    d           d                    |          S )N(r  ...)r   )r+  r}  r,  r-  r  r  s      r4  rP  zASTFoldExpr._stringify  s    e= 	JJyy//000JJsOOOJJtwJJsOOO

5> 	2JJsOOOJJtwJJsOOOJJyy00111

3wws||r6  rT  re   c                "   |dk    sJ |dk    rt          |           S g }| j        |                    d           n2| j        |                    d           n|                    d           |                    t          | j                            | j        r-|                    | j                            |                     | j        r-|                    | j                            |                     d                    |          S )NrV  flfrfLr   )r7  r+  r}  r-  _id_operator_v2r,  r]  r  r  s      r4  r]  zASTFoldExpr.get_id  s    !||||a<<t99= JJt^#JJt JJt

?47+,,,= 	6JJt}++G44555> 	7JJt~,,W55666wws||r6  rc  r1   rd  re  r7   r,  r-  c                ^   |t          j        dd          z  }| j        rk| j                            ||||           |t          j                    z  }|t          j        | j        | j                  z  }|t          j                    z  }|t          j        dd          z  }| j        rk|t          j                    z  }|t          j        | j        | j                  z  }|t          j                    z  }| j                            ||||           |t          j        dd          z  }d S )Nr2  r3  r4  )r
   r  r+  r  r  desc_sig_operatorr,  r-  r  s        r4  r  zASTFoldExpr.describe_signature  s   80c:::= 	1M,,WdCHHHx.000Gx1$'47CCCGx.000G80>>>> 	Jx.000Gx1$'47CCCGx.000GN--gtS&III80c:::r6  N)r+  r  r,  r7  r-  r  rw   r0  r  r  r  r  r@  r6  r4  r*  r*    sd        # # # #       *; ; ; ; ; ;r6  r*  c                  .    e Zd ZddZddZddZddZdS )ASTParenExprexprr  c                    || _         d S r2  r>  r3  r>  s     r4  r5  zASTParenExpr.__init__,  r  r6  rL  r   rw   r7  c                .    d || j                   z   dz   S Nr2  r4  r@  rO  s     r4  rP  zASTParenExpr._stringify/      YYty)))C//r6  rT  re   c                6    | j                             |          S r2  r>  r]  r\  s     r4  r]  zASTParenExpr.get_id2      y(((r6  rc  r1   rd  re  r7   r,  r-  r0  c                    |t          j        dd          z  }| j                            ||||           |t          j        dd          z  }d S rC  r
   r  r>  r  r  s        r4  r  zASTParenExpr.describe_signature5  P    80c:::	$$WdC@@@80c:::r6  Nr>  r  r  r  r  r  r@  r6  r4  r=  r=  +  sd           0 0 0 0) ) ) ); ; ; ; ; ;r6  r=  c                  .    e Zd ZddZddZddZddZdS )ASTIdExpressionr  r  c                    || _         d S r2  r  r3  r  s     r4  r5  zASTIdExpression.__init__=  s    			r6  rL  r   rw   r7  c                "     || j                   S r2  rO  rO  s     r4  rP  zASTIdExpression._stringifyA      y###r6  rT  re   c                6    | j                             |          S r2  r  r]  r\  s     r4  r]  zASTIdExpression.get_idD  rG  r6  rc  r1   rd  re  r7   r,  r-  r0  c                @    | j                             ||||           d S r2  )r  r  r  s        r4  r  z"ASTIdExpression.describe_signatureG  $    	$$WdC@@@@@r6  Nr  r  r  r  r  r  r@  r6  r4  rM  rM  <  sj           $ $ $ $) ) ) )A A A A A Ar6  rM  c                      e Zd ZddZddZdS )ASTPostfixOpidPrefixr7  rT  re   rw   c                :    t          t          |                     r2  r  r3  rZ  rT  s      r4  r]  zASTPostfixOp.get_idP  r  r6  rc  r1   rd  re  r7   r,  r-  r0  c                :    t          t          |                     r2  r  r  s        r4  r  zASTPostfixOp.describe_signatureS  r  r6  NrZ  r7  rT  re   rw   r7  r  r  r@  r6  r4  rY  rY  O  r  r6  rY  c                  .    e Zd ZddZddZddZddZdS )ASTPostfixArrayr>  r  c                    || _         d S r2  r@  rA  s     r4  r5  zASTPostfixArray.__init__Y  r  r6  rL  r   rw   r7  c                .    d || j                   z   dz   S N[]r@  rO  s     r4  rP  zASTPostfixArray._stringify\  rD  r6  rZ  rT  re   c                B    d|z   | j                             |          z   S )Nr  rF  r\  s      r4  r]  zASTPostfixArray.get_id_  !    h!1!1'!:!:::r6  rc  r1   rd  re  r7   r,  r-  r0  c                    |t          j        dd          z  }| j                            ||||           |t          j        dd          z  }d S rc  rI  r  s        r4  r  z"ASTPostfixArray.describe_signatureb  rJ  r6  NrK  r  r^  r  r  r@  r6  r4  r`  r`  X  sd           0 0 0 0; ; ; ;; ; ; ; ; ;r6  r`  c                  .    e Zd ZddZddZddZddZdS )ASTPostfixMemberr  r  c                    || _         d S r2  rO  rP  s     r4  r5  zASTPostfixMember.__init__j  r  r6  rL  r   rw   r7  c                (    d || j                   z   S )N.rO  rO  s     r4  rP  zASTPostfixMember._stringifym  s    YYty))))r6  rZ  rT  re   c                B    d|z   | j                             |          z   S )NdtrT  r\  s      r4  r]  zASTPostfixMember.get_idp  rg  r6  rc  r1   rd  re  r7   r,  r-  r0  c                p    |t          j        dd          z  }| j                            |d||           d S )Nrm  rt  )r
   r  r  r  r  s        r4  r  z#ASTPostfixMember.describe_signatures  s;    80c:::	$$WlCHHHHHr6  NrW  r  r^  r  r  r@  r6  r4  rj  rj  i  sj           * * * *; ; ; ;I I I I I Ir6  rj  c                  .    e Zd ZddZddZddZddZdS )ASTPostfixMemberOfPointerr  r  c                    || _         d S r2  rO  rP  s     r4  r5  z"ASTPostfixMemberOfPointer.__init__z  r  r6  rL  r   rw   r7  c                (    d || j                   z   S )Nr   rO  rO  s     r4  rP  z$ASTPostfixMemberOfPointer._stringify}  s    ii	****r6  rZ  rT  re   c                B    d|z   | j                             |          z   S )Nr  rT  r\  s      r4  r]  z ASTPostfixMemberOfPointer.get_id  rg  r6  rc  r1   rd  re  r7   r,  r-  r0  c                p    |t          j        dd          z  }| j                            |d||           d S )Nr   rt  )r
   r;  r  r  r  s        r4  r  z,ASTPostfixMemberOfPointer.describe_signature  s;    8-dD999	$$WlCHHHHHr6  NrW  r  r^  r  r  r@  r6  r4  rr  rr  y  sj           + + + +; ; ; ;I I I I I Ir6  rr  c                  &    e Zd ZddZdd	ZddZdS )ASTPostfixIncrL  r   rw   r7  c                    dS Nr   r@  rO  s     r4  rP  zASTPostfixInc._stringify      tr6  rZ  rT  re   c                    d|z   S )Nr  r@  r\  s      r4  r]  zASTPostfixInc.get_id      hr6  rc  r1   rd  re  r7   r,  r-  r0  c                6    |t          j        dd          z  }d S rz  r
   r;  r  s        r4  r  z ASTPostfixInc.describe_signature      8-dD999r6  Nr  r^  r  r  r@  r6  r4  rx  rx    P              : : : : : :r6  rx  c                  &    e Zd ZddZdd	ZddZdS )ASTPostfixDecrL  r   rw   r7  c                    dS Nr   r@  rO  s     r4  rP  zASTPostfixDec._stringify  r{  r6  rZ  rT  re   c                    d|z   S )Nr  r@  r\  s      r4  r]  zASTPostfixDec.get_id  r}  r6  rc  r1   rd  re  r7   r,  r-  r0  c                6    |t          j        dd          z  }d S r  r  r  s        r4  r  z ASTPostfixDec.describe_signature  r  r6  Nr  r^  r  r  r@  r6  r4  r  r    r  r6  r  c                  .    e Zd ZddZdd	ZddZddZdS )ASTPostfixCallExprlst$ASTParenExprList | ASTBracedInitListrw   r0  c                    || _         d S r2  r  )r3  r  s     r4  r5  zASTPostfixCallExpr.__init__      r6  rL  r   r7  c                "     || j                   S r2  r  rO  s     r4  rP  zASTPostfixCallExpr._stringify  s    y"""r6  rZ  rT  re   c                    d|g}| j         j        D ]*}|                    |                    |                     +|                    d           d                    |          S )Nr  r  r   )r  exprsr}  r]  r  )r3  rZ  rT  r  r   s        r4  r]  zASTPostfixCallExpr.get_id  s_    X 	* 	*AJJqxx(())))

3wws||r6  rc  r1   rd  re  r7   r,  r-  c                @    | j                             ||||           d S r2  )r  r  r  s        r4  r  z%ASTPostfixCallExpr.describe_signature  s$    ##GT3?????r6  N)r  r  rw   r0  r  r^  r  r  r@  r6  r4  r  r    sj           # # # #   @ @ @ @ @ @r6  r  c                  .    e Zd ZddZdd
ZddZddZdS )ASTPostfixExprrf  ASTType	postFixeslist[ASTPostfixOp]c                "    || _         || _        d S r2  )rf  r  )r3  rf  r  s      r4  r5  zASTPostfixExpr.__init__  s    "r6  rL  r   rw   r7  c                     || j                   g}| j        D ] }|                     ||                     !d                    |          S Nr   )rf  r  r}  r  )r3  rL  r  ps       r4  rP  zASTPostfixExpr._stringify  sT    y%%& 	% 	%AJJyy||$$$$wws||r6  rT  re   c                z    | j                             |          }| j        D ]}|                    ||          }|S r2  )rf  r]  r  )r3  rT  idr  s       r4  r]  zASTPostfixExpr.get_id  sB    [(( 	' 	'A"g&&BB	r6  rc  r1   rd  re  r7   r,  r-  r0  c                    | j                             ||||           | j        D ]}|                    ||||           d S r2  )rf  r  r  )r3  rc  rd  re  r,  r  s         r4  r  z!ASTPostfixExpr.describe_signature  sV    &&wc6BBB 	= 	=A  $V<<<<	= 	=r6  N)rf  r  r  r  r  r  r  r  r@  r6  r4  r  r    sd        # # # #      = = = = = =r6  r  c                  .    e Zd ZddZddZddZddZdS )ASTExplicitCastcastr7  typr  r>  r  c                F    |t           v sJ || _        || _        || _        d S r2  )_id_explicit_castr  r  r>  )r3  r  r  r>  s       r4  r5  zASTExplicitCast.__init__  s-    (((((				r6  rL  r   rw   c                F   | j         g}|                    d           |                     || j                             |                    d           |                     || j                             |                    d           d                    |          S )Nr   z>(r4  r   )r  r}  r  r>  r  r  s      r4  rP  zASTExplicitCast._stringify  s    yk

3

99TX&&'''

4

99TY''(((

3wws||r6  rT  re   c                    t           | j                 | j                            |          z   | j                            |          z   S r2  )r  r  r  r]  r>  r\  s     r4  r]  zASTExplicitCast.get_id  s?    !$),(()	  ))* 	+r6  rc  r1   rd  re  r7   r,  r-  r0  c                ~   |t          j        | j        | j                  z  }|t          j        dd          z  }| j                            ||||           |t          j        dd          z  }|t          j        dd          z  }| j                            ||||           |t          j        dd          z  }d S )Nr   r   r2  r4  )r
   r  r  r  r  r  r>  r  s        r4  r  z"ASTExplicitCast.describe_signature  s    8,TY	BBB80c:::##GT3???80c:::80c:::	$$WdC@@@80c:::r6  N)r  r7  r  r  r>  r  r  r  r  r  r@  r6  r4  r  r    sd              + + + +
; ; ; ; ; ;r6  r  c                  .    e Zd ZddZdd
ZddZddZdS )	ASTTypeId
typeOrExprASTType | ASTExpressionisTyperB   c                "    || _         || _        d S r2  )r  r  )r3  r  r  s      r4  r5  zASTTypeId.__init__  s    $r6  rL  r   rw   r7  c                .    d || j                   z   dz   S )Nztypeid(r4  )r  rO  s     r4  rP  zASTTypeId._stringify  s    99T_555;;r6  rT  re   c                R    | j         rdnd}|| j                            |          z   S )Ntite)r  r  r]  )r3  rT  rf  s      r4  r]  zASTTypeId.get_id  s-    .$..w7777r6  rc  r1   rd  re  r7   r,  r-  r0  c                    |t          j        dd          z  }|t          j        dd          z  }| j                            ||||           |t          j        dd          z  }d S )Nr   r2  r4  )r
   r  r  r  r  r  s        r4  r  zASTTypeId.describe_signature  sg    8,Xx@@@80c:::**7D#vFFF80c:::r6  N)r  r  r  rB   r  r  r  r  r@  r6  r4  r  r    sd           < < < <8 8 8 8; ; ; ; ; ;r6  r  c                  .    e Zd ZddZdd	ZddZddZdS )ASTUnaryOpExprr,  r7  r>  r  c                "    || _         || _        d S r2  r,  r>  )r3  r,  r>  s      r4  r5  zASTUnaryOpExpr.__init__  s    			r6  rL  r   rw   c                    | j         d         dv r| j         dz    || j                  z   S | j          || j                  z   S )Nr   cnr  r  rO  s     r4  rP  zASTUnaryOpExpr._stringify  sI    71:7S=99TY#7#7777YYty1111r6  rT  re   c                \    t           | j                 | j                            |          z   S r2  )_id_operator_unary_v2r,  r>  r]  r\  s     r4  r]  zASTUnaryOpExpr.get_id  s$    $TW-	0@0@0I0IIIr6  rc  r1   rd  re  r7   r,  r-  r0  c                   | j         d         dv r9|t          j        | j         | j                   z  }|t          j                    z  }n"|t          j        | j         | j                   z  }| j                            ||||           d S )Nr   r  )r,  r
   r  r  r;  r>  r  r  s        r4  r  z!ASTUnaryOpExpr.describe_signature  s    71:x0$'BBBGx.000GGx1$'47CCCG	$$WdC@@@@@r6  N)r,  r7  r>  r  r  r  r  r  r@  r6  r4  r  r    sn           2 2 2 2J J J JA A A A A Ar6  r  c                  .    e Zd ZddZddZddZddZdS )ASTSizeofParamPackrG  rF  c                    || _         d S r2  rN  rK  s     r4  r5  zASTSizeofParamPack.__init__      $r6  rL  r   rw   r7  c                .    d || j                   z   dz   S )Nz
sizeof...(r4  rN  rO  s     r4  rP  zASTSizeofParamPack._stringify  s    ii8883>>r6  rT  re   c                <    d| j                             |          z   S )NsZ)rG  r]  r\  s     r4  r]  zASTSizeofParamPack.get_id"  s    do,,W5555r6  rc  r1   rd  re  r7   r,  r-  r0  c                   |t          j        dd          z  }|t          j        dd          z  }|t          j        dd          z  }| j                            |d||dd           |t          j        dd          z  }d S )Nrz   r3  r2  rj  r   )r,  rf  rg  r4  )r
   r  r  rG  r  r  s        r4  r  z%ASTSizeofParamPack.describe_signature%  s    8,Xx@@@80>>>80c:::**7J28RT 	+ 	V 	V 	V80c:::r6  N)rG  rF  r  r  r  r  r@  r6  r4  r  r    sd        % % % %? ? ? ?6 6 6 6; ; ; ; ; ;r6  r  c                  .    e Zd ZddZddZddZddZdS )ASTSizeofTyper  r  c                    || _         d S r2  r  r3  r  s     r4  r5  zASTSizeofType.__init__0  r  r6  rL  r   rw   r7  c                .    d || j                   z   dz   S )Nzsizeof(r4  r  rO  s     r4  rP  zASTSizeofType._stringify3  s    99TX...44r6  rT  re   c                <    d| j                             |          z   S )Nstr  r]  r\  s     r4  r]  zASTSizeofType.get_id6      dhoog....r6  rc  r1   rd  re  r7   r,  r-  r0  c                    |t          j        dd          z  }|t          j        dd          z  }| j                            ||||           |t          j        dd          z  }d S )Nrz   r2  r4  r
   r  r  r  r  r  s        r4  r  z ASTSizeofType.describe_signature9  sg    8,Xx@@@80c:::##GT3???80c:::r6  Nr  r  r  r  r  r  r@  r6  r4  r  r  /  sd           5 5 5 5/ / / /; ; ; ; ; ;r6  r  c                  .    e Zd ZddZddZddZddZdS )ASTSizeofExprr>  r  c                    || _         d S r2  r@  rA  s     r4  r5  zASTSizeofExpr.__init__B  r  r6  rL  r   rw   r7  c                (    d || j                   z   S )Nzsizeof r@  rO  s     r4  rP  zASTSizeofExpr._stringifyE  s    99TY////r6  rT  re   c                <    d| j                             |          z   S )NszrF  r\  s     r4  r]  zASTSizeofExpr.get_idH      di&&w////r6  rc  r1   rd  re  r7   r,  r-  r0  c                    |t          j        dd          z  }|t          j                    z  }| j                            ||||           d S )Nrz   r
   r  r  r>  r  r  s        r4  r  z ASTSizeofExpr.describe_signatureK  sN    8,Xx@@@8*,,,	$$WdC@@@@@r6  NrK  r  r  r  r  r@  r6  r4  r  r  A  sj           0 0 0 00 0 0 0A A A A A Ar6  r  c                  .    e Zd ZddZddZddZddZdS )ASTAlignofExprr  r  c                    || _         d S r2  r  r  s     r4  r5  zASTAlignofExpr.__init__S  r  r6  rL  r   rw   r7  c                .    d || j                   z   dz   S )Nzalignof(r4  r  rO  s     r4  rP  zASTAlignofExpr._stringifyV  s    IIdh///#55r6  rT  re   c                <    d| j                             |          z   S )Natr  r\  s     r4  r]  zASTAlignofExpr.get_idY  r  r6  rc  r1   rd  re  r7   r,  r-  r0  c                    |t          j        dd          z  }|t          j        dd          z  }| j                            ||||           |t          j        dd          z  }d S )Nr;   r2  r4  r  r  s        r4  r  z!ASTAlignofExpr.describe_signature\  sg    8,Y	BBB80c:::##GT3???80c:::r6  Nr  r  r  r  r  r@  r6  r4  r  r  R  sd           6 6 6 6/ / / /; ; ; ; ; ;r6  r  c                  .    e Zd ZddZddZddZddZdS )ASTNoexceptExprr>  r  c                    || _         d S r2  r@  rA  s     r4  r5  zASTNoexceptExpr.__init__e  r  r6  rL  r   rw   r7  c                .    d || j                   z   dz   S )N	noexcept(r4  r@  rO  s     r4  rP  zASTNoexceptExpr._stringifyh      YYty111C77r6  rT  re   c                <    d| j                             |          z   S )NnxrF  r\  s     r4  r]  zASTNoexceptExpr.get_idk  r  r6  rc  r1   rd  re  r7   r,  r-  r0  c                    |t          j        dd          z  }|t          j        dd          z  }| j                            ||||           |t          j        dd          z  }d S )Nrj   r2  r4  r
   r  r  r>  r  r  s        r4  r  z"ASTNoexceptExpr.describe_signaturen  g    8,ZDDD80c:::	$$WdC@@@80c:::r6  NrK  r  r  r  r  r@  r6  r4  r  r  d  sd           8 8 8 80 0 0 0; ; ; ; ; ;r6  r  c                  .    e Zd Zdd
ZddZddZddZdS )
ASTNewExprr  rB   isNewTypeIdr  r  initListr  rw   r0  c                >    || _         || _        || _        || _        d S r2  )r  r  r  r  )r3  r  r  r  r  s        r4  r5  zASTNewExpr.__init__w  s#    & r6  rL  r   r7  c                J   g }| j         r|                    d           |                    d           | j        r$|                     || j                             nt          | j        #|                     || j                             d                    |          S )Nr  znew r   )r  r}  r  r  r  r  r  r  s      r4  rP  zASTNewExpr._stringify~  s    ; 	JJt

6 	!JJyy**++++  =$JJyy//000wws||r6  rT  re   c                J   dg}|                     d           |                     | j                            |                     | j        .|                     | j                            |                     n|                     d           d                    |          S )Nr   r   r  r   )r}  r  r]  r  r  r  s      r4  r]  zASTNewExpr.get_id  s    f

3

48??7++,,,=$JJt}++G445555JJsOOOwws||r6  rc  r1   rd  re  r7   r,  r-  c                D   | j         r|t          j        dd          z  }|t          j        dd          z  }|t          j                    z  }| j        r| j                            ||||           nt          | j	        | j	                            ||||           d S d S )Nr  ri   )
r  r
   r  r  r  r  r  r  r  r  r  s        r4  r  zASTNewExpr.describe_signature  s    ; 	Ax4T4@@@G8,UE:::8*,,, 	!H''sFCCCC  =$M,,WdCHHHHH %$r6  N)
r  rB   r  rB   r  r  r  r  rw   r0  r  r  r  r  r@  r6  r4  r  r  v  sj        ! ! ! !   
 
 
 
I I I I I Ir6  r  c                  .    e Zd ZddZddZddZddZdS )ASTDeleteExprr  rB   arrayr>  r  c                0    || _         || _        || _        d S r2  )r  r  r>  )r3  r  r  r>  s       r4  r5  zASTDeleteExpr.__init__  s    
			r6  rL  r   rw   r7  c                   g }| j         r|                    d           |                    d           | j        r|                    d           |                     || j                             d                    |          S )Nr  zdelete z[] r   )r  r}  r  r>  r  r  s      r4  rP  zASTDeleteExpr._stringify  s    ; 	JJt

9: 	JJu

99TY''(((wws||r6  rT  re   c                T    | j         rd}nd}|| j                            |          z   S )Nr   r   )r  r>  r]  r3  rT  r  s      r4  r]  zASTDeleteExpr.get_id  s3    : 	BBBDI$$W----r6  rc  r1   rd  re  r7   r,  r-  r0  c                D   | j         r|t          j        dd          z  }|t          j        dd          z  }|t          j                    z  }| j        r.|t          j        dd          z  }|t          j                    z  }| j                            ||||           d S )Nr  rU   r   )r  r
   r  r  r  r  r>  r  r  s        r4  r  z ASTDeleteExpr.describe_signature  s    ; 	Ax4T4@@@G8,Xx@@@8*,,,: 	1x4T4@@@Gx.000G	$$WdC@@@@@r6  N)r  rB   r  rB   r>  r  r  r  r  r  r@  r6  r4  r  r    sj           
   . . . .	A 	A 	A 	A 	A 	Ar6  r  c                  .    e Zd ZddZdd
ZddZddZdS )ASTCastExprr  r  r>  r  c                "    || _         || _        d S r2  )r  r>  )r3  r  r>  s      r4  r5  zASTCastExpr.__init__  s    			r6  rL  r   rw   r7  c                    dg}|                      || j                             |                     d           |                      || j                             d                    |          S Nr2  r4  r   )r}  r  r>  r  r  s      r4  rP  zASTCastExpr._stringify  sd    e

99TX&&'''

3

99TY''(((wws||r6  rT  re   c                r    d| j                             |          z   | j                            |          z   S )Ncv)r  r]  r>  r\  s     r4  r]  zASTCastExpr.get_id  s0    dhoog...1A1A'1J1JJJr6  rc  r1   rd  re  r7   r,  r-  r0  c                    |t          j        dd          z  }| j                            ||||           |t          j        dd          z  }| j                            ||||           d S rC  )r
   r  r  r  r>  r  s        r4  r  zASTCastExpr.describe_signature  sn    80c:::##GT3???80c:::	$$WdC@@@@@r6  N)r  r  r>  r  r  r  r  r  r@  r6  r4  r  r    sn              K K K KA A A A A Ar6  r  c                  .    e Zd ZddZdd
ZddZddZdS )ASTBinOpExprr  list[ASTExpression]ops	list[str]c                    t          |          dk    sJ t          |          t          |          dz   k    sJ || _        || _        d S r  )rJ  r  r  )r3  r  r  s      r4  r5  zASTBinOpExpr.__init__  sH    5zzA~~~~5zzSXX\))))
r6  rL  r   rw   r7  c                   g }|                      || j        d                              t          dt          | j                            D ]x}|                     d           |                     | j        |dz
                      |                     d           |                      || j        |                              yd                    |          S )Nr   rW  r  r   )r}  r  r  rJ  r  r  )r3  rL  r  r   s       r4  rP  zASTBinOpExpr._stringify  s    

99TZ]++,,,q#dj//** 	1 	1AJJsOOOJJtxA'''JJsOOOJJyyA//0000wws||r6  rT  re   c                   |dk    sJ g }t          t          | j                            D ]`}|                    t          | j        |                             |                    | j        |                             |                     a|                    | j        d                             |                     d                    |          S )Nr  r  r   )r  rJ  r  r}  r9  r  r]  r  )r3  rT  r  r   s       r4  r]  zASTBinOpExpr.get_id  s    !||||s48}}%% 	6 	6AJJtx{3444JJtz!}++G445555

4:b>((11222wws||r6  rc  r1   rd  re  r7   r,  r-  r0  c                N   | j         d                             ||||           t          dt          | j                             D ]}|t	          j                    z  }| j        |dz
           }t          |d                   t          d          k    r?t          |d                   t          d          k    r|t	          j        ||          z  }n|t	          j	        ||          z  }|t	          j                    z  }| j         |                             ||||           d S )Nr   rW  r   z)
r  r  r  rJ  r
   r  r  r  r  r;  )r3  rc  rd  re  r,  r   r,  s          r4  r  zASTBinOpExpr.describe_signature  s   
1(($VDDDq#dj//** 	I 	IAx.000G!a%B2a5zzSXX%%#be**C*@*@84R<<<85b"===x.000GJqM,,WdCHHHH	I 	Ir6  N)r  r  r  r  r  r  r  r  r@  r6  r4  r  r    sj                 I I I I I Ir6  r  c                  .    e Zd ZddZdd
ZddZddZdS )ASTConditionalExprifExprr  thenExprelseExprc                0    || _         || _        || _        d S r2  )r  r  r  )r3  r  r  r  s       r4  r5  zASTConditionalExpr.__init__  s      r6  rL  r   rw   r7  c                V   g }|                      || j                             |                     d           |                      || j                             |                     d           |                      || j                             d                    |          S )Nz ?  : r   )r}  r  r  r  r  r  s      r4  rP  zASTConditionalExpr._stringify  s    

99T[))***

5

99T]++,,,

5

99T]++,,,wws||r6  rT  re   c                   |dk    sJ g }|                     t          d                    |                     | j                            |                     |                     | j                            |                     |                     | j                            |                     d                    |          S )Nr  r  r   )r}  r9  r  r]  r  r  r  r  s      r4  r]  zASTConditionalExpr.get_id  s    !||||

?3'(((

4;%%g..///

4=''00111

4=''00111wws||r6  rc  r1   rd  re  r7   r,  r-  r0  c                   | j                             ||||           |t          j                    z  }|t          j        dd          z  }|t          j                    z  }| j                            ||||           |t          j                    z  }|t          j        dd          z  }|t          j                    z  }| j                            ||||           d S )Nr  :)r  r  r
   r  r;  r  r  r  s        r4  r  z%ASTConditionalExpr.describe_signature%  s    &&wc6BBB8*,,,8-c37778*,,,(($VDDD8*,,,8-c37778*,,,(($VDDDDDr6  N)r  r  r  r  r  r  r  r  r  r  r@  r6  r4  r  r    sj        ! ! ! !      
E 
E 
E 
E 
E 
Er6  r  c                  .    e Zd ZddZddZddZddZdS )ASTBracedInitListr  'list[ASTExpression | ASTBracedInitList]trailingCommarB   rw   r0  c                "    || _         || _        d S r2  )r  r  r3  r  r  s      r4  r5  zASTBracedInitList.__init__3  s    
*r6  rT  re   r7  c                V    dd                     fd| j        D                       z  S )Nzil%sEr   c              3  B   K   | ]}|                               V  d S r2  r  r  r   rT  s     r4  r  z+ASTBracedInitList.get_id.<locals>.<genexpr>9  r  r6  r  r  r\  s    `r4  r]  zASTBracedInitList.get_id8  1     G G G GDJ G G GGGGGr6  rL  r   c                v    d                     fd| j        D                       }| j        rdnd}d| | dS )N, c              3  .   K   | ]} |          V  d S r2  r@  r  r   rL  s     r4  r  z/ASTBracedInitList._stringify.<locals>.<genexpr><  s+      ;;1))A,,;;;;;;r6  r   r   {})r  r  r  )r3  rL  r  r  s    `  r4  rP  zASTBracedInitList._stringify;  sR    		;;;;
;;;;;#19r,E,=,,,,r6  rc  r1   rd  re  r7   r,  r-  c                p   t          |           |t          j        dd          z  }d}| j        D ]M}|s/|t          j        dd          z  }|t          j                    z  }nd}|                    ||||           N| j        r|t          j        dd          z  }|t          j        dd          z  }d S )Nr(  Tr   Fr)  )r(   r
   r  r  r  r  r  r3  rc  rd  re  r,  r  r   s          r4  r  z$ASTBracedInitList.describe_signature@  s    %%%80c::: 	= 	=A 88cBBB82444  $V<<<< 	?x4S#>>>G80c:::r6  N)r  r  r  rB   rw   r0  r  r  r  r=  r>  r?  r5  r]  rP  r  r@  r6  r4  r  r  2  sh        + + + +
H H H H- - - -
; ; ; ; ; ;r6  r  c                  .    e Zd ZddZddZddZddZdS )ASTAssignmentExprr+  r  r,  r7  r-  !ASTExpression | ASTBracedInitListc                0    || _         || _        || _        d S r2  r/  r0  s       r4  r5  zASTAssignmentExpr.__init__R  s     "r6  rL  r   rw   c                D   g }|                      || j                             |                     d           |                     | j                   |                     d           |                      || j                             d                    |          S Nr  r   )r}  r+  r,  r-  r  r  s      r4  rP  zASTAssignmentExpr._stringifyX  s    

99T]++,,,

3

47

3

99T^,,---wws||r6  rT  re   c                .   g }|                     t          | j                            |                     | j                            |                     |                     | j                            |                     d                    |          S r  )r}  r9  r,  r+  r]  r-  r  r  s      r4  r]  zASTAssignmentExpr.get_ida  st    

?47+,,,

4=''00111

4>((11222wws||r6  rc  r1   rd  re  r7   r,  r-  r0  c                   | j                             ||||           |t          j                    z  }t	          | j        d                   t	          d          k    rNt	          | j        d                   t	          d          k    r#|t          j        | j        | j                  z  }n"|t          j        | j        | j                  z  }|t          j                    z  }| j                            ||||           d S )Nr   r   r  )	r+  r  r
   r  r  r,  r  r;  r-  r  s        r4  r  z$ASTAssignmentExpr.describe_signaturei  s    (($VDDD8*,,,twqz??c#hh&&3twqz??c#hh+F+Fx0$'BBBGGx1$'47CCCG8*,,,))'4fEEEEEr6  N)r+  r  r,  r7  r-  r/  r  r  r  r  r@  r6  r4  r.  r.  Q  sj        # # # #      	F 	F 	F 	F 	F 	Fr6  r.  c                  .    e Zd ZddZddZddZddZdS )ASTCommaExprr  r  c                >    t          |          dk    sJ || _        d S rI  )rJ  r  r3  r  s     r4  r5  zASTCommaExpr.__init__v  s     5zzA~~~~


r6  rL  r   rw   r7  c                P    d                     fd| j        D                       S )Nr%  c              3  .   K   | ]} |          V  d S r2  r@  r'  s     r4  r  z*ASTCommaExpr._stringify.<locals>.<genexpr>{  s+      ::!1::::::r6  r"  rO  s    `r4  rP  zASTCommaExpr._stringifyz  s,    yy::::tz::::::r6  rT  re   c                   t           d         }g }t          t          | j                  dz
            D ]J}|                    |           |                    | j        |                             |                     K|                    | j        d                             |                     d                    |          S )Nr   rW  r  r   )r9  r  rJ  r  r}  r]  r  )r3  rT  id_r  r   s        r4  r]  zASTCommaExpr.get_id}  s    c"s4:*++ 	6 	6AJJsOOOJJtz!}++G445555

4:b>((11222wws||r6  rc  r1   rd  re  r7   r,  r-  r0  c                8   | j         d                             ||||           t          dt          | j                             D ]S}|t	          j        dd          z  }|t	          j                    z  }| j         |                             ||||           Td S )Nr   rW  r   )r  r  r  rJ  r
   r  r  )r3  rc  rd  re  r,  r   s         r4  r  zASTCommaExpr.describe_signature  s    
1(($VDDDq#dj//** 	I 	IAx4S#>>>Gx.000GJqM,,WdCHHHH	I 	Ir6  N)r  r  r  r  r  r  r@  r6  r4  r6  r6  u  sj           ; ; ; ;   I I I I I Ir6  r6  c                  .    e Zd ZddZddZdd
ZddZdS )ASTFallbackExprr>  r7  c                    || _         d S r2  r@  rA  s     r4  r5  zASTFallbackExpr.__init__  r  r6  rL  r   rw   c                    | j         S r2  r@  rO  s     r4  rP  zASTFallbackExpr._stringify  r  r6  rT  re   c                *    t          | j                  S r2  )r7  r>  r\  s     r4  r]  zASTFallbackExpr.get_id  s    49~~r6  rc  r1   rd  re  r7   r,  r-  r0  c                J    |t          j        | j        | j                  z  }d S r2  )r   r  r>  r  s        r4  r  z"ASTFallbackExpr.describe_signature  s     5=DI666r6  N)r>  r7  r  r  r  r  r@  r6  r4  r?  r?    sd                 7 7 7 7 7 7r6  r?  c                  6    e Zd ZddZddZddZddZddZdS )ASTOperatorrw   rB   c                    dS r  r@  r:  s    r4  rS  zASTOperator.is_anon  r  r6  c                    dS NTr@  r:  s    r4  r  zASTOperator.is_operator  r{  r6  rT  re   r7  c                    t           r2  r  r\  s     r4  r]  zASTOperator.get_id  s    !!r6  rc  r1   	identnodere  r7   r,  r-  r0  c                    t           )zARender the prefix into signode, and the last part into identnode.rJ  r3  rc  rK  re  r,  s        r4  _describe_identifierz ASTOperator._describe_identifier  s
     "!r6  rd  rf  rg  c                H   t          |           |dk    r2t          j                    }|                     ||||           ||z  }d S |dk    r|t	          |           z   |z   }t          j        ddd|d d           }	|                                |	d<   t          j                    }
|                     ||
||           |
	                                }|	t          j        ||          z  }	||	z  }d S t          j
                    }|                     ||||           ||z  }d S )Nrs  rj  r   rk  rG  rl  rr  )r(   r
   r|  rN  r7  r4   r{  r   r  astextr  )r3  rc  rd  re  rf  rg  r,  mainNamer  r  	containerr  addNames                r4  r  zASTOperator.describe_signature  sE    	 %%%<)++H%%h#vFFFxGGGZ#d))+l:J)"2>4>48: : :E '-&;&;&=&=E"#
 I%%gy#vFFF""$$CX'S111EuGGG+--G%%gwVDDDwGGGr6  Nr  r  
rc  r1   rK  r1   re  r7   r,  r-  rw   r0  r  )r=  r>  r?  rS  r  r]  rN  r  r@  r6  r4  rE  rE    sx              " " " "" " " "
     r6  rE  c                  .    e Zd ZddZddZddZddZdS )ASTOperatorBuildInr,  r7  rw   r0  c                    || _         d S r2  r,  )r3  r,  s     r4  r5  zASTOperatorBuildIn.__init__  s    r6  rT  re   c                    |dk    rt           }| j        |vrt          nt          }| j        |vrt	          d| j        z            || j                 S )NrW  zBInternal error: Built-in operator "%s" can not be mapped to an id.)_id_operator_v1r,  r   r9  r~  )r3  rT  idss      r4  r]  zASTOperatorBuildIn.get_id  si    a<<!Cwc!!"" " "C7# 248G< = = =47|r6  rL  r   c                Z    | j         dv s| j         d         dv r
d| j         z   S d| j         z   S )Nri   r   rU   r   r   abcnox	operator rn   rX  rO  s     r4  rP  zASTOperatorBuildIn._stringify  s:    7<<<
h@V@V((''r6  rc  r1   rK  re  r7   r,  r-  c                    |t          j        dd          z  }| j        dv s| j        d         dv r|t          j                    z  }|t          j        | j        | j                  z  }d S )Nrn   r]  r   r^  )r
   r  r,  r  r;  rM  s        r4  rN  z'ASTOperatorBuildIn._describe_identifier  si    8,ZDDD7<<<
h@V@Vx.000GX/AAA			r6  N)r,  r7  rw   r0  r  r  rT  r=  r>  r?  r5  r]  rP  rN  r@  r6  r4  rV  rV    sj           
 
 
 
( ( ( (B B B B B Br6  rV  c                  .    e Zd ZddZdd	ZddZddZdS )ASTOperatorLiteralrG  rF  rw   r0  c                    || _         d S r2  rN  rK  s     r4  r5  zASTOperatorLiteral.__init__  r  r6  rT  re   r7  c                V    |dk    rt           d| j                            |          z   S )NrW  li)r   rG  r]  r\  s     r4  r]  zASTOperatorLiteral.get_id  s,    a<<do,,W5555r6  rL  r   c                (    d || j                   z   S )Nrx  rN  rO  s     r4  rP  zASTOperatorLiteral._stringify  s    ii8888r6  rc  r1   rK  re  r7   r,  r-  c                    |t          j        dd          z  }|t          j        dd          z  }| j                            |d|dd|           d S )Nrn   ""rj  r   )r
   r  r	  rG  r  rM  s        r4  rN  z'ASTOperatorLiteral._describe_identifier  sV    8,ZDDD83D$???**9j#r2vVVVVVr6  N)rG  rF  rw   r0  r  r  rT  ra  r@  r6  r4  rc  rc    sj        % % % %6 6 6 6
9 9 9 9W W W W W Wr6  rc  c                  6    e Zd ZddZdd	ZddZddZddZdS )ASTOperatorTyper  r  rw   r0  c                    || _         d S r2  )r  )r3  r  s     r4  r5  zASTOperatorType.__init__  r  r6  rT  re   r7  c                    |dk    rd| j                             |          z  S d| j                             |          z   S )NrW  zcastto-%s-operatorr  )r  r]  r\  s     r4  r]  zASTOperatorType.get_id  sA    a<<'$)*:*:7*C*CCC$)**73333r6  rL  r   c                L    d                     d || j                  g          S )Nr   r_  )r  r  rO  s     r4  rP  zASTOperatorType._stringify  s%    wwYYty%9%9:;;;r6  c                     t          |           S r2  r7  r:  s    r4  get_name_no_templatez$ASTOperatorType.get_name_no_template  s    4yyr6  rc  r1   rK  re  r7   r,  r-  c                    |t          j        dd          z  }|t          j                    z  }| j                            |d||           d S )Nrn   rj  )r
   r  r  r  r  rM  s        r4  rN  z$ASTOperatorType._describe_identifier  sN    8,ZDDD8*,,,	$$Y
CHHHHHr6  N)r  r  rw   r0  r  r  r<  rT  )r=  r>  r?  r5  r]  rP  rq  rN  r@  r6  r4  rk  rk    s~           4 4 4 4< < < <   I I I I I Ir6  rk  c                  .    e Zd ZddZdd	ZddZddZdS )ASTTemplateArgConstantr  r  rw   r0  c                    || _         d S r2  r  r  s     r4  r5  zASTTemplateArgConstant.__init__  r  r6  rL  r   r7  c                "     || j                   S r2  r  rO  s     r4  rP  z!ASTTemplateArgConstant._stringify  s    y$$$r6  rT  re   c                    |dk    r#t          |                               dd          S |dk    rdt          |           z   dz   S d| j                            |          z   dz   S )NrW  r  r   r  Xr  )r7  r  r  r]  r\  s     r4  r]  zASTTemplateArgConstant.get_id!  se    a<<t99$$S#...a<<T?S((TZ&&w///#55r6  rc  r1   rd  re  r7   r,  r-  c                ^    t          |           | j                            ||||           d S r2  )r(   r  r  r  s        r4  r  z)ASTTemplateArgConstant.describe_signature(  s2    %%%
%%gtS&AAAAAr6  N)r  r  rw   r0  r  r  r  r  r@  r6  r4  rt  rt    sj           % % % %6 6 6 6B B B B B Br6  rt  c                  .    e Zd ZddZddZddZddZdS )r  args&list[ASTType | ASTTemplateArgConstant]packExpansionrB   rw   r0  c                *    |J || _         || _        d S r2  )r{  r}  )r3  r{  r}  s      r4  r5  zASTTemplateArgs.__init__/  s#    	*r6  rT  re   r7  c                    dk    rzg }|                     d           |                     d                    fd| j        D                                  |                     d           d                    |          S g }|                     d           t          | j                  dk    r| j        d d         D ]*}|                     |                                         +| j        r|                     d	           |                     | j        d                                                  | j        r|                     d
           |                     d
           d                    |          S )NrW  r  rm  c              3  B   K   | ]}|                               V  d S r2  r  r  r   rT  s     r4  r  z)ASTTemplateArgs.get_id.<locals>.<genexpr>9  s/      EEa 1 1EEEEEEr6  r   Ir   r  Jr  )r}  r  r{  rJ  r]  r}  )r3  rT  r  r   s    `  r4  r]  zASTTemplateArgs.get_id5  sN   a<<CJJsOOOJJsxxEEEE49EEEEEFFFJJsOOO773<<

3ty>>AYss^ . .

188G,,----!  

3JJty}++G44555!  

3

3wws||r6  rL  r   c                x    d                     fd| j        D                       }| j        r|dz  }d|z   dz   S )Nr%  c              3  .   K   | ]} |          V  d S r2  r@  r  r   rL  s     r4  r  z-ASTTemplateArgs._stringify.<locals>.<genexpr>K  s+      88		!888888r6  r3  r   r   )r  r{  r}  r  s    ` r4  rP  zASTTemplateArgs._stringifyJ  sM    ii8888di88888 	5LCSy3r6  rc  r1   rd  re  r7   r,  r-  c                p   t          |           |t          j        dd          z  }d}| j        D ]M}|s.|t          j        dd          z  }|t          j                    z  }d}|                    |d||           N| j        r|t          j        dd          z  }|t          j        dd          z  }d S )	Nr   Tr   Frj  r,  r3  r   )r(   r
   r  r{  r  r  r}  )r3  rc  rd  re  r,  r  r   s          r4  r  z"ASTTemplateArgs.describe_signatureP  s    %%%80c::: 	J 	JA 588cBBB82444E  *c& IIII 	Cx4UEBBBG80c:::r6  N)r{  r|  r}  rB   rw   r0  r  r  r  r,  r@  r6  r4  r  r  .  sd        + + + +   *   ; ; ; ; ; ;r6  r  c                      e Zd ZddZddZdS )ASTTrailingTypeSpecrT  re   rw   r7  c                :    t          t          |                     r2  r  r\  s     r4  r]  zASTTrailingTypeSpec.get_idd  r  r6  rc  r1   rd  re  r7   r,  r-  r0  c                :    t          t          |                     r2  r  r  s        r4  r  z&ASTTrailingTypeSpec.describe_signatureg  r  r6  Nr  r  r  r@  r6  r4  r  r  c  r  r6  r  c                  .    e Zd ZddZdd
ZddZddZdS )ASTTrailingTypeSpecFundamentalr  r  
canonNamesrw   r0  c                    t          |          dk    sJ t          |          t          |          k    sJ ||f            || _        || _        d S rI  )rJ  r  r  )r3  r  r  s      r4  r5  z'ASTTrailingTypeSpecFundamental.__init__m  sQ    5zzQ5zzS__,,,uj.A,,,
$r6  rL  r   r7  c                6    d                     | j                  S )Nr  )r  r  rO  s     r4  rP  z)ASTTrailingTypeSpecFundamental._stringifyt  s    xx
###r6  rT  re   c                R   |dk    r`g }| j         D ]A}|t          v r!|                    t          |                    ,|                    |           Bd                    |          S d                    | j                   }|t          vrt          d|z            t          |         S )NrW  r   r  zSemi-internal error: Fundamental type "%s" can not be mapped to an ID. Is it a true fundamental type? If not so, the parser should have rejected it.)r  _id_fundamental_v1r}  r  _id_fundamental_v2r~  )r3  rT  r  r   r  s        r4  r]  z%ASTTrailingTypeSpecFundamental.get_idw  s    a<<C_ " "***JJ1!45555JJqMMMM88C== hht''(((24789 9 9 "#&&r6  rc  r1   rd  re  r7   r,  r-  c                    d}| j         D ]5}|s|t          j                    z  }nd}|t          j        ||          z  }6d S )NTF)r  r
   r  desc_sig_keyword_type)r3  rc  rd  re  r,  r  r   s          r4  r  z1ASTTrailingTypeSpecFundamental.describe_signature  s]     	< 	<A 82444x5a;;;GG	< 	<r6  N)r  r  r  r  rw   r0  r  r  r  r  r@  r6  r4  r  r  l  sd        % % % %$ $ $ $' ' ' '$< < < < < <r6  r  c                  &    e Zd ZddZddZddZdS )ASTTrailingTypeSpecDecltypeAutorL  r   rw   r7  c                    dS )Nr   r@  rO  s     r4  rP  z*ASTTrailingTypeSpecDecltypeAuto._stringify  s    r6  rT  re   c                     |dk    rt           dS )NrW  r   )r   r\  s     r4  r]  z&ASTTrailingTypeSpecDecltypeAuto.get_id  s    a<<tr6  rc  r1   rd  re  r7   r,  r-  r0  c                    |t          j        dd          z  }|t          j        dd          z  }|t          j        dd          z  }|t          j        dd          z  }d S )NrS   r2  r?   r4  )r
   r  r  r  s        r4  r  z2ASTTrailingTypeSpecDecltypeAuto.describe_signature  sb    8,ZDDD80c:::8,VV<<<80c:::r6  Nr  r  r  r  r@  r6  r4  r  r    sP                  
; ; ; ; ; ;r6  r  c                  .    e Zd ZddZddZddZddZdS )ASTTrailingTypeSpecDecltyper>  r  c                    || _         d S r2  r@  rA  s     r4  r5  z$ASTTrailingTypeSpecDecltype.__init__  r  r6  rL  r   rw   r7  c                .    d || j                   z   dz   S )Nz	decltype(r4  r@  rO  s     r4  rP  z&ASTTrailingTypeSpecDecltype._stringify  r  r6  rT  re   c                \    |dk    rt           d| j                            |          z   dz   S )NrW  DTr  )r   r>  r]  r\  s     r4  r]  z"ASTTrailingTypeSpecDecltype.get_id  s1    a<<di&&w///#55r6  rc  r1   rd  re  r7   r,  r-  r0  c                    |t          j        dd          z  }|t          j        dd          z  }| j                            ||||           |t          j        dd          z  }d S )NrS   r2  r4  r  r  s        r4  r  z.ASTTrailingTypeSpecDecltype.describe_signature  r  r6  NrK  r  r  r  r  r@  r6  r4  r  r    sd           8 8 8 86 6 6 6
; ; ; ; ; ;r6  r  c                  F    e Zd Zdd	Zedd
            ZddZddZddZdS )ASTTrailingTypeSpecNamerf  r7  
nestedNamer  placeholderType
str | Nonerw   r0  c                0    || _         || _        || _        d S r2  )rf  r  r  )r3  rf  r  r  s       r4  r5  z ASTTrailingTypeSpecName.__init__  s    $.r6  c                    | j         S r2  r  r:  s    r4  r  zASTTrailingTypeSpecName.name  
    r6  rT  re   c                6    | j                             |          S r2  )r  r]  r\  s     r4  r]  zASTTrailingTypeSpecName.get_id  s    %%g...r6  rL  r   c                N   g }| j         r/|                    | j                    |                    d           |                     || j                             | j        /|                    d           |                    | j                   d                    |          S r2  )rf  r}  r  r  r  r  s      r4  rP  z"ASTTrailingTypeSpecName._stringify  s    ; 	JJt{###JJsOOO

99T_--...+JJsOOOJJt+,,,wws||r6  rc  r1   rd  re  r7   r,  r-  c                F   | j         r8|t          j        | j         | j                   z  }|t          j                    z  }| j                            ||||           | j        |t          j                    z  }| j        dk    r|t          j        dd          z  }d S | j        dk    rb|t          j        dd          z  }|t          j        dd          z  }|t          j        dd          z  }|t          j        dd          z  }d S t          | j                  d S )Nr  r?   r   rS   r2  r4  )	rf  r
   r  r  r  r  r  r  r  r  s        r4  r  z*ASTTrailingTypeSpecName.describe_signature  s&   ; 	1x0dkJJJGx.000G**7D#f*MMM+x.000G#v--84VVDDD%)99984ZLLL88cBBB84VVDDD88cBBB$T%9::: ,+r6  N)rf  r7  r  r  r  r  rw   r0  r  r  r  r  	r=  r>  r?  r5  r  r  r]  rP  r  r@  r6  r4  r  r    s        / / / /    X/ / / /	 	 	 	; ; ; ; ; ;r6  r  c                  6    e Zd Z	 dddZ	 dddZd dZd!dZd	S )"ASTFunctionParameterFarg9ASTTypeWithInit | ASTTemplateParamConstrainedTypeWithInitellipsisrB   rw   r0  c                "    || _         || _        d S r2  )r  r  )r3  r  r  s      r4  r5  zASTFunctionParameter.__init__  s     r6  NrT  re   
objectTyper  r,  Symbol | Noner7  c                    |r!|j         j                            |d          S | j        rdS | j                            |          S )NFprefixedr  )parentr.  r]  r  r  r3  rT  r  r,  s       r4  r]  zASTFunctionParameter.get_id  sN      	M=,33Ge3LLL= 	,38??7+++r6  rL  r   c                4    | j         rdS  || j                  S Nr3  )r  r  rO  s     r4  rP  zASTFunctionParameter._stringify  s#    = 	'59TX&&&r6  rc  r1   rd  re  r7   r-  c                    t          |           | j        r|t          j        dd          z  }d S | j                            ||||           d S )Nr3  r  )r(   r  r
   r  r  r  r  s        r4  r  z'ASTFunctionParameter.describe_signature  s[    %%%= 	Kx4UEBBBGGGH''s6'JJJJJr6  F)r  r  r  rB   rw   r0  NNrT  re   r  r  r,  r  rw   r7  r  r  r,  r@  r6  r4  r  r    s~        "'! ! ! ! ! TX, , , , ,' ' ' 'K K K K K Kr6  r  c                  &    e Zd ZddZddZddZdS )ASTNoexceptSpecr>  ASTExpression | Nonec                    || _         d S r2  r@  rA  s     r4  r5  zASTNoexceptSpec.__init__  r  r6  rL  r   rw   r7  c                @    | j         rd || j                   z   dz   S dS )Nr  r4  rj   r@  rO  s     r4  rP  zASTNoexceptSpec._stringify  s-    9 	<49!5!55;;zr6  rc  r1   rd  re  r7   r,  r-  r0  c                    |t          j        dd          z  }| j        rO|t          j        dd          z  }| j                            |d||           |t          j        dd          z  }d S d S )Nrj   r2  rj  r4  r
   r  r>  r  r  r  s        r4  r  z"ASTNoexceptSpec.describe_signature  s{    8,ZDDD9 	?x4S#>>>GI((*c6JJJx4S#>>>GGG	? 	?r6  N)r>  r  r  r  r=  r>  r?  r5  rP  r  r@  r6  r4  r  r    sP              
? ? ? ? ? ?r6  r  c                  N    e Zd Zd&dZed'd            Zd(dZd(dZd)dZd*d$Z	d%S )+ASTParametersQualifiersr{  list[ASTFunctionParameter]r   rB   rM   refQualr  exceptionSpecr  trailingReturnr  overridefinalattrsr   initializerrw   r0  c                    || _         || _        || _        || _        || _        || _        || _        || _        |	| _        |
| _	        d S r2  )
r{  r   rM   r  r  r  r  r  r  r  )r3  r{  r   rM   r  r  r  r  r  r  r  s              r4  r5  z ASTParametersQualifiers.__init__  sS    
 	 
*, 

&r6  c                    | j         S r2  r{  r:  s    r4  function_paramsz'ASTParametersQualifiers.function_params*  s
    yr6  rT  re   r7  c                Z   g }| j         r|                    d           | j        r1|dk    r|                    d           n|                    d           | j        dk    r|                    d           n | j        dk    r|                    d           d	                    |          S )
NVrW  r   Kr   Or   Rr   )r   r}  rM   r  r  r  s      r4  get_modifiers_idz(ASTParametersQualifiers.get_modifiers_id.  s    = 	JJsOOO: 	 !||

3

3<4JJsOOOO\S  JJsOOOwws||r6  c                   dk    rCt          | j                  dk    rdS dd                    fd| j        D                       z   S t          | j                  dk    rdS d                    fd| j        D                       S )	NrW  r   r   r   rm  c              3  B   K   | ]}|                               V  d S r2  r  r  s     r4  r  z7ASTParametersQualifiers.get_param_id.<locals>.<genexpr>B  s/      &L&LQqxx'8'8&L&L&L&L&L&Lr6  r   c              3  B   K   | ]}|                               V  d S r2  r  r  s     r4  r  z7ASTParametersQualifiers.get_param_id.<locals>.<genexpr>F  s/      @@188G,,@@@@@@r6  )rJ  r{  r  r\  s    `r4  get_param_idz$ASTParametersQualifiers.get_param_id=  s    a<<49~~""rchh&L&L&L&L$)&L&L&LLLLLty>>Q377@@@@di@@@@@@r6  rL  r   c                f   g }|                     d           d}| j        D ]=}|s|                     d           d}|                     t          |                     >|                     d           | j        r|                     d           | j        r|                     d           | j        r/|                     d           |                     | j                   | j        r8|                     d           |                      || j                             | j        r8|                     d	           |                      || j                             | j        r|                     d
           | j	        r|                     d           t          | j                  dk    r8|                     d           |                      || j                             | j        r/|                     d           |                     | j                   d                    |          S )Nr2  Tr%  Fr4  z	 volatilez constr  z ->  finalz	 overrider    = r   )r}  r{  r7  r   rM   r  r  r  r  r  rJ  r  r  r  )r3  rL  r  r  r   s        r4  rP  z"ASTParametersQualifiers._stringifyH  s	   

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

4   EJJs1vv

3= 	$JJ{###: 	!JJx   < 	%JJsOOOJJt|$$$ 	6JJsOOOJJyy!344555 	7JJvJJyy!455666: 	!JJx   = 	$JJ{###tz??aJJsOOOJJyy,,--- 	)JJuJJt'(((wws||r6  rc  r1   rd  re  r7   r,  r-  c                   t          |           d}|}|j        r9t          |t          j                  s|j        })|                    dd          }	 |dk    r]t          j                    }||d<   | j        D ]7}t          j        ddd          }	|	                    |	d||           ||	z  }8||z  }n|t          j
        d	d	          z  }d}
| j        D ]M}|
s.|t          j
        d
d
          z  }|t          j                    z  }d}
|	                    |d||           N|t          j
        dd          z  }dd}| j        r ||d           | j        r ||d           | j        r8|t          j                    z  }|t          j
        | j        | j                  z  }| j        r3|t          j                    z  }| j        	                    ||||           | j        ra|t          j                    z  }|t          j        dd          z  }|t          j                    z  }| j        	                    ||||           | j        r ||d           | j        r ||d           t)          | j                  dk    r0|t          j                    z  }| j        	                    |           | j        r|t          j                    z  }|t          j
        dd          z  }|t          j                    z  }| j        dv sJ | j        dk    r|t          j        dd          z  }d S |t          j        | j        | j                  z  }d S d S )NFmulti_line_parameter_listrs  r   T)noemphru  r  r2  r   rj  r4  rc  r1   ri  r7  rw   r0  c                b    | t          j                    z  } | t          j        ||          z  } d S r2  r
   r  r  rc  ri  s     r4  	_add_annoz=ASTParametersQualifiers.describe_signature.<locals>._add_anno  s0    x.000Gx0t<<<GGGr6  r   rM   r   r  r  r   r   0rU   rT   r  rc  r1   ri  r7  rw   r0  )r(   r  
isinstancer
   r3   getdesc_parameterlistr{  desc_parameterr  r  r  r   rM   r  r  r  r;  r  r  rJ  r  r  r  r  )r3  rc  rd  re  r,  r  	test_node	paramlistr  ru  r  r  s               r4  r  z*ASTParametersQualifiers.describe_signaturek  s   %%%$)!$	 	i)@AA %,	(16QSX(Y(Y% < 355I5NI12y # # /BtDDD&&ugs6&JJJU"		y GGx4S#>>>GEy P P 9x<S#FFFGx6888G&&w
C&OOOOx4S#>>>G	= 	= 	= 	= = 	+Igz***: 	(Igw'''< 	Qx.000Gx4T\4<PPPG 	Nx.000G11'4fMMM 	Ox.000Gx1$===Gx.000G227D#vNNN: 	(Igw'''= 	+Igz***tz??ax.000GJ))'222 	Yx.000Gx4S#>>>Gx.000G#'AAAAA3&&8;CEEE84T5EtGWXXX	Y 	Yr6  N)r{  r  r   rB   rM   rB   r  r  r  r  r  r  r  rB   r  rB   r  r   r  r  rw   r0  rw   r  r  r  r  )
r=  r>  r?  r5  r  r  r  r  rP  r  r@  r6  r4  r  r    s        ' ' ' '     X   	A 	A 	A 	A! ! ! !FBY BY BY BY BY BYr6  r  c                  &    e Zd ZddZdd	ZddZdS )ASTExplicitSpecr>  r  rw   r0  c                    || _         d S r2  r@  rA  s     r4  r5  zASTExplicitSpec.__init__  r  r6  rL  r   r7  c                    dg}| j         M|                    d           |                     || j                              |                    d           d                    |          S )Nr[   r2  r4  r   )r>  r}  r  r  s      r4  rP  zASTExplicitSpec._stringify  s]    l9 JJsOOOJJyy++,,,JJsOOOwws||r6  rc  r1   re  r7   r,  r-  c                    |t          j        dd          z  }| j        O|t          j        dd          z  }| j                            |d||           |t          j        dd          z  }d S d S )Nr[   r2  rj  r4  r  )r3  rc  re  r,  s       r4  r  z"ASTExplicitSpec.describe_signature  sw    8,ZDDD9 x4S#>>>GI((*c6JJJx4S#>>>GGG ! r6  N)r>  r  rw   r0  r  rc  r1   re  r7   r,  r-  rw   r0  r  r@  r6  r4  r  r    sP              ? ? ? ? ? ?r6  r  c                  .    e Zd Zd!dZd"dZd#dZd$dZd S )%ASTDeclSpecsSimplestorager7  threadLocalrB   rd   r   explicitSpecASTExplicitSpec | NonerN   rO   rP   r   rM   ra   r  r   rw   r0  c                    || _         || _        || _        || _        || _        || _        || _        || _        |	| _        |
| _	        || _
        || _        d S r2  )r  r   rd   r   r  rN   rO   rP   r   rM   ra   r  )r3  r  r   rd   r   r  rN   rO   rP   r   rM   ra   r  s                r4  r5  zASTDeclSpecsSimple.__init__  s^    
 &(""" 



r6  otherc                `   |s| S t          | j        p|j        | j        p|j        | j        p|j        | j        p|j        | j        p|j        | j        p|j        | j        p|j        | j        p|j        | j	        p|j	        | j
        p|j
        | j        p|j        | j        |j        z             S r2  )r  r  r   rd   r   r  rN   rO   rP   r   rM   ra   r  )r3  r  s     r4  	mergeWithzASTDeclSpecsSimple.mergeWith  s     	K!$,"?%-"&"2"Ge6G"&+"="&,"?%-"&"3"Iu7I"&."CEO"&."CEO"&."CEO"&-"A5>"&*";"&+"="&*u{":< < 	<r6  rL  r   c                4   g }t          | j                  dk    r#|                     || j                             | j        r|                    | j                   | j        r|                    d           | j        r|                    d           | j        r|                    d           | j        r|                    d           | j        r#|                     || j                             | j	        r|                    d           | j
        r|                    d           | j        r|                    d           | j        r|                    d	           | j        r|                    d
           d                    |          S )Nr   r   rd   ra   r   rN   rO   rP   r   rM   r  )rJ  r  r}  r  r   rd   ra   r   r  rN   rO   rP   r   rM   r  r  s      r4  rP  zASTDeclSpecsSimple._stringify  s   tz??aJJyy,,---< 	%JJt|$$$ 	'JJ~&&&; 	!JJx   ; 	!JJx   < 	"JJy!!! 	5JJyy!233444> 	$JJ{###> 	$JJ{###> 	$JJ{###= 	#JJz""": 	 JJwxx}}r6  rc  r1   re  r7   r,  r-  c                |   | j                             |           t          | j                   dk    dfd}| j        r ||| j                  | j        r ||d	          | j        r ||d
          | j        r ||d          | j        r ||d          | j        r6r|t          j
                    z  }| j                            |||           d| j        r ||d          | j        r ||d          | j        r ||d          | j        r ||d          | j        r ||d          d S d S )Nr   rc  r1   ri  r7  rw   rB   c                h    r| t          j                    z  } | t          j        ||          z  } dS rH  r  )rc  ri  addSpaces     r4  _addz3ASTDeclSpecsSimple.describe_signature.<locals>._add		  s:     582444x0t<<<G4r6  r   rd   ra   r   TrN   rO   rP   r   rM   )rc  r1   ri  r7  rw   rB   )r  r  rJ  r  r   rd   ra   r   r  r
   r  rN   rO   rP   r   rM   )r3  rc  re  r,  r  r
  s        @r4  r  z%ASTDeclSpecsSimple.describe_signature	  s   
%%g...tz??a'	 	 	 	 	 	 < 	3tGT\22H 	5tG^44H; 	/tGX..H; 	/tGX..H< 	0tGY//H 	 58244400#vFFFH> 	2tG[11H> 	2tG[11H> 	2tG[11H= 	1tGZ00H: 	.tGW--HHH	. 	.r6  N)r  r7  r   rB   rd   rB   r   rB   r  r  rN   rB   rO   rB   rP   rB   r   rB   rM   rB   ra   rB   r  r   rw   r0  )r  r  rw   r  r  r  )r=  r>  r?  r5  r  rP  r  r@  r6  r4  r  r    sd           $< < < <    8#. #. #. #. #. #.r6  r  c                  .    e Zd Zdd
ZddZddZddZdS )ASTDeclSpecsouterr7  	leftSpecsr  
rightSpecstrailingr  rw   r0  c                    || _         || _        || _        | j                            | j                  | _        || _        d S r2  )r  r  r  r  allSpecstrailingTypeSpec)r3  r  r  r  r  s        r4  r5  zASTDeclSpecs.__init__+	  s@    
 
"$00AA (r6  rT  re   c                4   |dk    rg }|                     | j                            |                     | j        j        r|                     d           | j        j        r|                     d           d                    |          S g }| j        j        r|                     d           | j        j        r|                     d           | j        -|                     | j                            |                     d                    |          S )NrW  r  r   r   r  )r}  r  r]  r  r   rM   r  r  s      r4  r]  zASTDeclSpecs.get_id6	  s    a<<CJJt,33G<<===}%  

3}"  

3773<<=! 	JJsOOO= 	JJsOOO ,JJt,33G<<===wws||r6  rL  r   c                   g } || j                   }t          |          dk    r|                    |           | j        rt          |          dk    r|                    d           |                     || j                             t	          | j                  }t          |          dk    r=t          |          dk    r|                    d           |                    |           d                    |          S Nr   r  r   )r  rJ  r}  r  r7  r  r  )r3  rL  r  r   rs        r4  rP  zASTDeclSpecs._stringifyH	  s    Idn%%q66A::JJqMMM  	3xx!||

3JJyy!677888DO$$A1vvzzs88a<<JJsOOO

1wws||r6  rc  r1   rd  re  r7   r,  r-  c                   t          |           t          |          }| j                            |||           t          |          |k    }| j        r|r|t          j                    z  }t          |          }| j                            ||||           t          |          |k    }t          t          | j                            dk    r8|r|t          j                    z  }| j                            |||           d S d S d S )Nr  r   )	r(   rJ  r  r  r  r
   r  r7  r  )r3  rc  rd  re  r,  numChildrenr
  s          r4  r  zASTDeclSpecs.describe_signatureX	  s   %%%'ll))'3???w<<;.  	I 582444g,,K!44WdC<B 5 D D D7||{2H3t''((1,, 9x6888G227CHHHHH	I 	I -,r6  N)
r  r7  r  r  r  r  r  r  rw   r0  r  r  r  r,  r@  r6  r4  r  r  *	  sj        	) 	) 	) 	)   $    I I I I I Ir6  r  c                  .    e Zd ZddZddZddZddZdS )ASTArraysizer  c                    || _         d S r2  r  )r3  r  s     r4  r5  zASTArray.__init__q	  r  r6  rL  r   rw   r7  c                @    | j         rd || j                   z   dz   S dS )Nrd  re  r   r  rO  s     r4  rP  zASTArray._stringifyt	  s-    9 	49---334r6  rT  re   c                    |dk    rdS |dk    r#| j         rdt          | j                   z   dz   S dS | j         r d| j                             |          z   dz   S dS )NrW  Ar  r   A_)r  r7  r]  r\  s     r4  r]  zASTArray.get_idz	  so    a<<3a<<y S^^+c11t9 	))'222S884r6  rc  r1   rd  re  r7   r,  r-  r0  c                    t          |           |t          j        dd          z  }| j        r| j                            |d||           |t          j        dd          z  }d S )Nrd  rj  re  )r(   r
   r  r  r  r  s        r4  r  zASTArray.describe_signature	  si    %%%80c:::9 	KI((*c6JJJ80c:::r6  N)r  r  r  r  r  r  r@  r6  r4  r  r  p	  sd                 ; ; ; ; ; ;r6  r  c                      e Zd Zed d            Zej        d!d            Ze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S )(ASTDeclaratorrw   r  c                :    t          t          |                     r2  r  r:  s    r4  r  zASTDeclarator.name	  r  r6  r  r0  c                :    t          t          |                     r2  r  rP  s     r4  r  zASTDeclarator.name	  r  r6  rB   c                :    t          t          |                     r2  r  r:  s    r4  isPackzASTDeclarator.isPack	  r  r6  r  c                :    t          t          |                     r2  r  r:  s    r4  r  zASTDeclarator.function_params	  r  r6  r  c                :    t          t          |                     r2  r  r:  s    r4  r  zASTDeclarator.trailingReturn	  r  r6  c                :    t          t          |                     r2  r  r:  s    r4  require_space_after_declSpecsz+ASTDeclarator.require_space_after_declSpecs	  r  r6  rT  re   r7  c                :    t          t          |                     r2  r  r\  s     r4  r  zASTDeclarator.get_modifiers_id	  r  r6  c                :    t          t          |                     r2  r  r\  s     r4  r  zASTDeclarator.get_param_id	  r  r6  c                :    t          t          |                     r2  r  r\  s     r4  get_ptr_suffix_idzASTDeclarator.get_ptr_suffix_id	  r  r6  returnTypeIdc                :    t          t          |                     r2  r  r3  rT  r3  s      r4  get_type_idzASTDeclarator.get_type_id	  r  r6  c                :    t          t          |                     r2  r  r:  s    r4  is_function_typezASTDeclarator.is_function_type	  r  r6  rc  r1   rd  re  r7   r,  r-  c                :    t          t          |                     r2  r  r  s        r4  r  z ASTDeclarator.describe_signature	  r  r6  Nr  r  r  rw   r0  r  r  rw   r  r  rT  re   r3  r7  rw   r7  r  )r=  r>  r?  r  r  setterr*  r  r  r.  r  r  r2  r6  r8  r  r@  r6  r4  r&  r&  	  s@       . . . X. 
[. . . [. . . . X. . . . X. . . . X.. . . .. . . .. . . .. . . .. . . .. . . .. . . . . .r6  r&  c                      e Zd Zd)d	Zed*d
            Zej        d+d            Zed,d            Zed-d            Zed.d            Z	d/dZ
d/dZd/dZd0dZd,dZd,dZd1dZd2d'Zd(S )3ASTDeclaratorNameParamQualdeclIdr  arrayOpslist[ASTArray]	paramQualr  rw   r0  c                0    || _         || _        || _        d S r2  r@  rA  rC  )r3  r@  rA  rC  s       r4  r5  z#ASTDeclaratorNameParamQual.__init__	  s      "r6  c                    | j         S r2  r@  r:  s    r4  r  zASTDeclaratorNameParamQual.name	  
    {r6  r  c                    || _         d S r2  rG  rP  s     r4  r  zASTDeclaratorNameParamQual.name	      r6  rB   c                    dS r  r@  r:  s    r4  r*  z!ASTDeclaratorNameParamQual.isPack	      ur6  r  c                    | j         j        S r2  )rC  r  r:  s    r4  r  z*ASTDeclaratorNameParamQual.function_params	  s    ~--r6  r  c                    | j         j        S r2  )rC  r  r:  s    r4  r  z)ASTDeclaratorNameParamQual.trailingReturn	  s    ~,,r6  rT  re   r7  c                h    | j         r| j                             |          S t          d| z            )Nz,This should only be called on a function: %s)rC  r  r~  r\  s     r4  r  z+ASTDeclaratorNameParamQual.get_modifiers_id	  s6    > 	<>227;;;FMNNNr6  c                H    | j         r| j                             |          S dS r  )rC  r  r\  s     r4  r  z'ASTDeclaratorNameParamQual.get_param_id	  s'    > 	>..w7772r6  c                P    d                     fd| j        D                       S )Nr   c              3  B   K   | ]}|                               V  d S r2  r  r  s     r4  r  z?ASTDeclaratorNameParamQual.get_ptr_suffix_id.<locals>.<genexpr>	  s/      @@Qqxx((@@@@@@r6  )r  rA  r\  s    `r4  r2  z,ASTDeclaratorNameParamQual.get_ptr_suffix_id	  s,    ww@@@@$-@@@@@@r6  r3  c                   |dk    sJ g }|                     |                     |                     | j        r|                     |                     |                     |                     d           |                     |           |                     |                     |                     |                     d           n|                     |           d                    |          S )Nr  Fr  r   )r}  r2  rC  r  r  r  r3  rT  r3  r  s       r4  r6  z&ASTDeclaratorNameParamQual.get_type_id	  s    !||||

4))'22333> 	%JJt,,W55666JJsOOOJJ|$$$JJt((11222JJsOOOOJJ|$$$wws||r6  c                    | j         d uS r2  rG  r:  s    r4  r.  z8ASTDeclaratorNameParamQual.require_space_after_declSpecs	      {$&&r6  c                    | j         d uS r2  )rC  r:  s    r4  r8  z+ASTDeclaratorNameParamQual.is_function_type	  s    ~T))r6  rL  r   c                (   g }| j         r#|                     || j                              | j        D ] }|                     ||                     !| j        r#|                     || j                             d                    |          S r  )r@  r}  rA  rC  r  )r3  rL  r  r,  s       r4  rP  z%ASTDeclaratorNameParamQual._stringify	  s    ; 	/JJyy--...- 	& 	&BJJyy}}%%%%> 	2JJyy00111wws||r6  rc  r1   rd  re  r7   r,  r-  c                    t          |           | j        r| j                            ||||           | j        D ]}|                    ||||           | j        r| j                            ||||           d S d S r2  )r(   r@  r  rA  rC  )r3  rc  rd  re  r,  r,  s         r4  r  z-ASTDeclaratorNameParamQual.describe_signature	
  s    %%%; 	GK**7D#vFFF- 	> 	>B!!'4f====> 	JN--gtS&IIIII	J 	Jr6  N)r@  r  rA  rB  rC  r  rw   r0  r  r:  r  r  r;  r  r<  r  r  )r=  r>  r?  r5  r  r  r=  r*  r  r  r  r  r2  r6  r.  r8  rP  r  r@  r6  r4  r?  r?  	  sx       # # # #    X 
[   [    X . . . X. - - - X-O O O O   A A A A   "' ' ' '* * * *   J J J J J Jr6  r?  c                      e Zd ZddZed d            Zej        d!d
            Zd"dZd"dZd#dZ	d#dZ
d$dZd%dZdS )&ASTDeclaratorNameBitFieldr@  r  r  r  c                "    || _         || _        d S r2  r@  r  )r3  r@  r  s      r4  r5  z"ASTDeclaratorNameBitField.__init__
  s    			r6  rw   c                    | j         S r2  rG  r:  s    r4  r  zASTDeclaratorNameBitField.name
  rH  r6  r  r0  c                    || _         d S r2  rG  rP  s     r4  r  zASTDeclaratorNameBitField.name
  rJ  r6  rT  re   r7  c                    dS r  r@  r\  s     r4  r  z&ASTDeclaratorNameBitField.get_param_id!
      rr6  c                    dS r  r@  r\  s     r4  r2  z+ASTDeclaratorNameBitField.get_ptr_suffix_id$
  rb  r6  rB   c                    | j         d uS r2  rG  r:  s    r4  r.  z7ASTDeclaratorNameBitField.require_space_after_declSpecs)
  rW  r6  c                    dS r  r@  r:  s    r4  r8  z*ASTDeclaratorNameBitField.is_function_type,
  r  r6  rL  r   c                    g }| j         r#|                     || j                              |                    d           |                     || j                             d                    |          S )Nr  r   )r@  r}  r  r  r  s      r4  rP  z$ASTDeclaratorNameBitField._stringify/
  so    ; 	/JJyy--...

5

99TY''(((wws||r6  rc  r1   rd  re  r7   r,  r-  c                .   t          |           | j        r| j                            ||||           |t          j                    z  }|t          j        dd          z  }|t          j                    z  }| j                            ||||           d S )Nr  )r(   r@  r  r
   r  r  r  r  s        r4  r  z,ASTDeclaratorNameBitField.describe_signature7
  s    %%%; 	GK**7D#vFFF8*,,,80c:::8*,,,	$$WdC@@@@@r6  N)r@  r  r  r  r  r:  r  r  r  r  )r=  r>  r?  r5  r  r  r=  r  r2  r.  r8  rP  r  r@  r6  r4  r\  r\  
  s               X 
[   [      
' ' ' '      A A A A A Ar6  r\  c                      e Zd Zd*d
Zed+d            Zej        d,d            Zed-d            Zed.d            Zed/d            Z	d-dZ
d0dZd1dZd1dZd1dZd2dZd-d Zd3d(Zd)S )4ASTDeclaratorPtrnextr&  r   rB   rM   r  r   rw   r0  c                F    |sJ || _         || _        || _        || _        d S r2  rj  r   rM   r  )r3  rj  r   rM   r  s        r4  r5  zASTDeclaratorPtr.__init__C
  s+    	 



r6  r  c                    | j         j        S r2  rj  r  r:  s    r4  r  zASTDeclaratorPtr.nameK
      y~r6  r  c                    || j         _        d S r2  rn  rP  s     r4  r  zASTDeclaratorPtr.nameO
      	r6  c                    | j         j        S r2  rj  r*  r:  s    r4  r*  zASTDeclaratorPtr.isPackS
      yr6  r  c                    | j         j        S r2  rj  r  r:  s    r4  r  z ASTDeclaratorPtr.function_paramsW
      y((r6  r  c                    | j         j        S r2  rj  r  r:  s    r4  r  zASTDeclaratorPtr.trailingReturn[
      y''r6  c                4    | j                                         S r2  rj  r.  r:  s    r4  r.  z.ASTDeclaratorPtr.require_space_after_declSpecs_
      y66888r6  rL  r   r7  c                   dg}|                      || j                             t          | j                  dk    r#| j        s| j        r|                     d           | j        r|                     d           | j        r1| j        r|                     d           |                     d           | j        s| j        st          | j                  dk    r.| j                                        r|                     d           |                      || j                             d                    |          S )Nr   r   r  r   rM   r   )r}  r  rJ  r   rM   rj  r.  r  r  s      r4  rP  zASTDeclaratorPtr._stringifyb
  s    e

99TZ(()))tz??aT]djJJsOOO= 	#JJz""": 	 }  

3JJw: 	  	 #dj//A*=*=y6688  

3

99TY''(((wws||r6  rT  re   c                6    | j                             |          S r2  rj  r  r\  s     r4  r  z!ASTDeclaratorPtr.get_modifiers_ids
      y))'222r6  c                6    | j                             |          S r2  rj  r  r\  s     r4  r  zASTDeclaratorPtr.get_param_idv
      y%%g...r6  c                   |dk    r}dg}| j         r|                    d           | j        r|                    d           |                    | j                            |                     d                    |          S | j                            |          g}|                    d           | j         r|                    d           | j        r|                    d           d                    |          S )NrW  Pr  r   r   )r   r}  rM   rj  r2  r  r  s      r4  r2  z"ASTDeclaratorPtr.get_ptr_suffix_idy
  s    a<<%C}  

3z  

3JJty227;;<<<773<<y**7334

3= 	JJsOOO: 	JJsOOOwws||r6  r3  c                    dg}| j         r|                    d           | j        r|                    d           |                    |           | j                            |d                    |                    S )Nr  r  r   r   r3  )r   r}  rM   rj  r6  r  rU  s       r4  r6  zASTDeclaratorPtr.get_type_id
  sr    e= 	JJsOOO: 	JJsOOO

<   y$$W2773<<$HHHr6  c                4    | j                                         S r2  rj  r8  r:  s    r4  r8  z!ASTDeclaratorPtr.is_function_type
      y))+++r6  rc  r1   rd  re  r7   r,  r-  c                r   t          |           |t          j        dd          z  }| j                            |           t          | j                  dk    r$| j        s| j        r|t          j                    z  }dd	}| j        r ||d
           | j        r)| j        r|t          j                    z  } ||d           | j        s| j        st          | j                  dk    r/| j	        
                                r|t          j                    z  }| j	                            ||||           d S )Nr   r   rc  r1   ri  r7  rw   r0  c                6    | t          j        ||          z  } d S r2  r  r  s     r4  r  z6ASTDeclaratorPtr.describe_signature.<locals>._add_anno
      x0t<<<GGGr6  r   rM   r  )r(   r
   r  r  r  rJ  r   rM   r  rj  r.  r3  rc  rd  re  r,  r  s         r4  r  z#ASTDeclaratorPtr.describe_signature
  sJ   %%%80c:::
%%g...tz??aT]djx.000G	= 	= 	= 	== 	+Igz***: 	(} 582444Igw''': 	5 	5#dj//A*=*=y6688 582444	$$WdC@@@@@r6  N)
rj  r&  r   rB   rM   rB   r  r   rw   r0  r  r:  r  r  r;  r  r  r<  r  r=  r>  r?  r5  r  r  r=  r*  r  r  r.  rP  r  r  r2  r6  r8  r  r@  r6  r4  ri  ri  B
  st              X 
[   [       X  ) ) ) X) ( ( ( X(9 9 9 9   "3 3 3 3/ / / /   $I I I I, , , ,A A A A A Ar6  ri  c                      e Zd Zd(dZed)d	            Zej        d*d            Ze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d0dZd+dZd1d&Zd'S )2ASTDeclaratorRefrj  r&  r  r   rw   r0  c                *    |sJ || _         || _        d S r2  rj  r  )r3  rj  r  s      r4  r5  zASTDeclaratorRef.__init__
  s    	


r6  r  c                    | j         j        S r2  rn  r:  s    r4  r  zASTDeclaratorRef.name
  ro  r6  r  c                    || j         _        d S r2  rn  rP  s     r4  r  zASTDeclaratorRef.name
  rq  r6  rB   c                    | j         j        S r2  rs  r:  s    r4  r*  zASTDeclaratorRef.isPack
  rt  r6  r  c                    | j         j        S r2  rv  r:  s    r4  r  z ASTDeclaratorRef.function_params
  rw  r6  r  c                    | j         j        S r2  ry  r:  s    r4  r  zASTDeclaratorRef.trailingReturn
  rz  r6  c                4    | j                                         S r2  r|  r:  s    r4  r.  z.ASTDeclaratorRef.require_space_after_declSpecs
  r}  r6  rL  r   r7  c                J   dg}|                      || j                             t          | j                  dk    r.| j                                        r|                     d           |                      || j                             d                    |          S )Nr   r   r  r   )r}  r  rJ  rj  r.  r  r  s      r4  rP  zASTDeclaratorRef._stringify
  s    e

99TZ(()))tz??aDI$K$K$M$MJJsOOO

99TY''(((wws||r6  rT  re   c                6    | j                             |          S r2  r  r\  s     r4  r  z!ASTDeclaratorRef.get_modifiers_id
  r  r6  c                6    | j                             |          S r2  r  r\  s     r4  r  zASTDeclaratorRef.get_param_id
  r  r6  c                    |dk    rd| j                             |          z   S | j                             |          dz   S )NrW  r  rj  r2  r\  s     r4  r2  z"ASTDeclaratorRef.get_ptr_suffix_id
  sA    a<<44W====9..w77#==r6  r3  c                P    |dk    sJ | j                             |d|z             S )Nr  r  r  rj  r6  r5  s      r4  r6  zASTDeclaratorRef.get_type_id
  s/    !||||y$$W3;M$NNNr6  c                4    | j                                         S r2  r  r:  s    r4  r8  z!ASTDeclaratorRef.is_function_type
  r  r6  rc  r1   rd  re  r7   r,  r-  c                P   t          |           |t          j        dd          z  }| j                            |           t          | j                  dk    r/| j                                        r|t          j                    z  }| j                            ||||           d S )Nr   r   )	r(   r
   r  r  r  rJ  rj  r.  r  r  s        r4  r  z#ASTDeclaratorRef.describe_signature
  s    %%%80c:::
%%g...tz??Q49#J#J#L#Lx.000G	$$WdC@@@@@r6  N)rj  r&  r  r   rw   r0  r  r:  r  r  r;  r  r  r<  r  r  r@  r6  r4  r  r  
  st          
    X 
[   [       X  ) ) ) X) ( ( ( X(9 9 9 9   3 3 3 3/ / / /> > > >O O O O
, , , ,A A A A A Ar6  r  c                      e Zd Zd&dZed'd            Zej        d(d	            Ze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%S )0ASTDeclaratorParamPackrj  r&  rw   r0  c                    |sJ || _         d S r2  rj  )r3  rj  s     r4  r5  zASTDeclaratorParamPack.__init__
      			r6  r  c                    | j         j        S r2  rn  r:  s    r4  r  zASTDeclaratorParamPack.name
  ro  r6  r  c                    || j         _        d S r2  rn  rP  s     r4  r  zASTDeclaratorParamPack.name
  rq  r6  r  c                    | j         j        S r2  rv  r:  s    r4  r  z&ASTDeclaratorParamPack.function_params
  rw  r6  r  c                    | j         j        S r2  ry  r:  s    r4  r  z%ASTDeclaratorParamPack.trailingReturn  rz  r6  rB   c                    dS rH  r@  r:  s    r4  r*  zASTDeclaratorParamPack.isPack  s    tr6  c                    dS r  r@  r:  s    r4  r.  z4ASTDeclaratorParamPack.require_space_after_declSpecs
  r  r6  rL  r   r7  c                N     || j                   }| j         j        rd|z   }d|z   S )Nr  r3  rn  r  s      r4  rP  z!ASTDeclaratorParamPack._stringify  s2    i	""9> 	)Cs{r6  rT  re   c                6    | j                             |          S r2  r  r\  s     r4  r  z'ASTDeclaratorParamPack.get_modifiers_id  r  r6  c                6    | j                             |          S r2  r  r\  s     r4  r  z#ASTDeclaratorParamPack.get_param_id  r  r6  c                    |dk    rd| j                             |          z   S | j                             |          dz   S )NrW  Dpr  r\  s     r4  r2  z(ASTDeclaratorParamPack.get_ptr_suffix_id  sA    a<<$)55g>>>>9..w77$>>r6  r3  c                P    |dk    sJ | j                             |d|z             S )Nr  r  r  r  r5  s      r4  r6  z"ASTDeclaratorParamPack.get_type_id  s/    !||||y$$W4,;N$OOOr6  c                4    | j                                         S r2  r  r:  s    r4  r8  z'ASTDeclaratorParamPack.is_function_type$  r  r6  rc  r1   rd  re  r7   r,  r-  c                    t          |           |t          j        dd          z  }| j        j        r|t          j                    z  }| j                            ||||           d S r  )r(   r
   r  rj  r  r  r  r  s        r4  r  z)ASTDeclaratorParamPack.describe_signature'  sh    %%%80>>>9> 	1x.000G	$$WdC@@@@@r6  N)rj  r&  rw   r0  r  r:  r  r;  r  r  r  r<  r  )r=  r>  r?  r5  r  r  r=  r  r  r*  r.  rP  r  r  r2  r6  r8  r  r@  r6  r4  r  r  
  st              X 
[   [ ) ) ) X) ( ( ( X(    X      3 3 3 3/ / / /? ? ? ?P P P P
, , , ,A A A A A Ar6  r  c                      e Zd Zd)d
Zed*d            Zej        d+d            Zed             Zed,d            Zed-d            Z	d.dZ
d/dZd0dZd0dZd0dZd1dZd.dZd2d'Zd(S )3ASTDeclaratorMemPtr	classNamer  rM   rB   r   rj  r&  rw   r0  c                N    |sJ |sJ || _         || _        || _        || _        d S r2  )r  rM   r   rj  )r3  r  rM   r   rj  s        r4  r5  zASTDeclaratorMemPtr.__init__1  s7    "
 			r6  c                    | j         j        S r2  rn  r:  s    r4  r  zASTDeclaratorMemPtr.name:  ro  r6  r  c                    || j         _        d S r2  rn  rP  s     r4  r  zASTDeclaratorMemPtr.name>  rq  r6  c                    | j         j        S r2  rs  r:  s    r4  r*  zASTDeclaratorMemPtr.isPackB  rt  r6  r  c                    | j         j        S r2  rv  r:  s    r4  r  z#ASTDeclaratorMemPtr.function_paramsF  rw  r6  r  c                    | j         j        S r2  ry  r:  s    r4  r  z"ASTDeclaratorMemPtr.trailingReturnJ  rz  r6  c                    dS rH  r@  r:  s    r4  r.  z1ASTDeclaratorMemPtr.require_space_after_declSpecsN  r{  r6  rL  r   r7  c                   g }|                      || j                             |                     d           | j        r|                     d           | j        r1| j        r|                     d           |                     d           | j                                        r|                     d           |                      || j                             d                    |          S )Nz::*r   r  rM   r   )r}  r  r   rM   rj  r.  r  r  s      r4  rP  zASTDeclaratorMemPtr._stringifyQ  s    

99T^,,---

5= 	#JJz""": 	 }  

3JJw92244 	JJsOOO

99TY''(((wws||r6  rT  re   c                P    |dk    rt           | j                            |          S NrW  )r   rj  r  r\  s     r4  r  z$ASTDeclaratorMemPtr.get_modifiers_id`  s'    a<<y))'222r6  c                P    |dk    rt           | j                            |          S r  )r   rj  r  r\  s     r4  r  z ASTDeclaratorMemPtr.get_param_ide  s'    a<<y%%g...r6  c                *    |dk    rt           t          r  )r   r  rj  r2  r\  s     r4  r2  z%ASTDeclaratorMemPtr.get_ptr_suffix_idj  s    a<<!!r6  r3  c                    |dk    sJ d}| j         r|dz  }| j        r|dz  }|dz  }|| j                            |          z  }||z  }| j                            ||          S )Nr  r   r  r  M)r   rM   r  r]  rj  r6  )r3  rT  r3  nextReturnTypeIds       r4  r6  zASTDeclaratorMemPtr.get_type_idp  s    !||||= 	$#: 	$#CDN11':::L(y$$W.>???r6  c                4    | j                                         S r2  r  r:  s    r4  r8  z$ASTDeclaratorMemPtr.is_function_type}  r  r6  rc  r1   rd  re  r7   r,  r-  c                   t          |           | j                            |d||           |t          j        dd          z  }|t          j        dd          z  }dd
}| j        r ||d           | j        r)| j        r|t          j                    z  } ||d           | j        	                                r|t          j                    z  }| j                            ||||           d S )Nrj  r  r   rc  r1   ri  r7  rw   r0  c                6    | t          j        ||          z  } d S r2  r  r  s     r4  r  z9ASTDeclaratorMemPtr.describe_signature.<locals>._add_anno  r  r6  r   rM   r  )
r(   r  r  r
   r  r   rM   r  rj  r.  r  s         r4  r  z&ASTDeclaratorMemPtr.describe_signature  s   %%%))':sFKKK80t<<<80c:::	= 	= 	= 	== 	+Igz***: 	(} 582444Igw'''92244 	1x.000G	$$WdC@@@@@r6  N)
r  r  rM   rB   r   rB   rj  r&  rw   r0  r  r:  r  r;  r  r  r  r<  r  r  r@  r6  r4  r  r  0  so              X 
[   [     X  ) ) ) X) ( ( ( X(      3 3 3 3
/ / / /
; ; ; ;@ @ @ @, , , ,A A A A A Ar6  r  c                      e Zd Zd'dZed(d            Zej        d)d
            Ze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d0d%Zd&S )1ASTDeclaratorPareninnerr&  rj  rw   r0  c                2    |sJ |sJ || _         || _        d S r2  r  rj  )r3  r  rj  s      r4  r5  zASTDeclaratorParen.__init__  s&    
			r6  r  c                    | j         j        S r2  r  r  r:  s    r4  r  zASTDeclaratorParen.name  s    zr6  r  c                    || j         _        d S r2  r  rP  s     r4  r  zASTDeclaratorParen.name  s    
r6  c                2    | j         j        p| j        j        S r2  )r  r*  rj  r:  s    r4  r*  zASTDeclaratorParen.isPack  s    z 4DI$44r6  r  c                    | j         j        S r2  )r  r  r:  s    r4  r  z"ASTDeclaratorParen.function_params  s    z))r6  r  c                    | j         j        S r2  )r  r  r:  s    r4  r  z!ASTDeclaratorParen.trailingReturn  s    z((r6  rB   c                    dS rH  r@  r:  s    r4  r.  z0ASTDeclaratorParen.require_space_after_declSpecs  r{  r6  rL  r   r7  c                    dg}|                      || j                             |                     d           |                      || j                             d                    |          S r   )r}  r  rj  r  r  s      r4  rP  zASTDeclaratorParen._stringify  sd    e

99TZ(()))

3

99TY''(((wws||r6  rT  re   c                6    | j                             |          S r2  )r  r  r\  s     r4  r  z#ASTDeclaratorParen.get_modifiers_id  s    z**7333r6  c                6    | j                             |          S r2  )r  r  r\  s     r4  r  zASTDeclaratorParen.get_param_id  s    z&&w///r6  c                    |dk    rt           | j                            |          | j                            |          z   S r  )r   rj  r2  r  r\  s     r4  r2  z$ASTDeclaratorParen.get_ptr_suffix_id  sC    a<< z++G44I''001 	1r6  r3  c                    |dk    sJ | j                             ||          }| j                            ||          S )Nr  r  )rj  r6  r  )r3  rT  r3  nextIds       r4  r6  zASTDeclaratorParen.get_type_id  sA    !||||&&w==z%%gF%CCCr6  c                4    | j                                         S r2  )r  r8  r:  s    r4  r8  z#ASTDeclaratorParen.is_function_type  s    z**,,,r6  rc  r1   rd  re  r7   r,  r-  c                    t          |           |t          j        dd          z  }| j                            ||||           |t          j        dd          z  }| j                            |d||           d S )Nr2  r4  rt  )r(   r
   r  r  r  rj  r  s        r4  r  z%ASTDeclaratorParen.describe_signature  s|    %%%80c:::
%%gtS&AAA80c:::	$$WlCHHHHHr6  N)r  r&  rj  r&  rw   r0  r  r:  r  r;  r  r  r  r<  r  r  r@  r6  r4  r  r    so              X 
[   [ 5 5 X5 * * * X* ) ) ) X)      4 4 4 40 0 0 01 1 1 1D D D D- - - -I I I I I Ir6  r  c                  .    e Zd ZddZddZddZddZdS )ASTPackExpansionExprr>  r/  c                    || _         d S r2  r@  rA  s     r4  r5  zASTPackExpansionExpr.__init__  r  r6  rL  r   rw   r7  c                (     || j                   dz   S r  r@  rO  s     r4  rP  zASTPackExpansionExpr._stringify  s    y##e++r6  rT  re   c                @    | j                             |          }d|z   S )NsprF  r  s      r4  r]  zASTPackExpansionExpr.get_id  s!    Yg&&byr6  rc  r1   rd  re  r7   r,  r-  r0  c                p    | j                             ||||           |t          j        dd          z  }d S r  )r>  r  r
   r  r  s        r4  r  z'ASTPackExpansionExpr.describe_signature  s9    	$$WdC@@@80>>>r6  N)r>  r/  r  r  r  r  r@  r6  r4  r  r    sd           , , , ,   ? ? ? ? ? ?r6  r  c                  .    e Zd ZddZdd	ZddZddZdS )ASTParenExprListr  r  rw   r0  c                    || _         d S r2  )r  r8  s     r4  r5  zASTParenExprList.__init__  r  r6  rT  re   r7  c                V    dd                     fd| j        D                       z  S )Nzpi%sEr   c              3  B   K   | ]}|                               V  d S r2  r  r!  s     r4  r  z*ASTParenExprList.get_id.<locals>.<genexpr>  r  r6  r"  r\  s    `r4  r]  zASTParenExprList.get_id  r#  r6  rL  r   c                Z    fd| j         D             }dd                    |          z  S )Nc                &    g | ]} |          S r@  r@  r'  s     r4  
<listcomp>z/ASTParenExprList._stringify.<locals>.<listcomp>  s!    222!1222r6  z(%s)r%  )r  r  )r3  rL  r  s    ` r4  rP  zASTParenExprList._stringify  s5    2222tz222		%((((r6  rc  r1   rd  re  r7   r,  r-  c                2   t          |           |t          j        dd          z  }d}| j        D ]M}|s/|t          j        dd          z  }|t          j                    z  }nd}|                    ||||           N|t          j        dd          z  }d S )Nr2  Tr   Fr4  )r(   r
   r  r  r  r  r+  s          r4  r  z#ASTParenExprList.describe_signature  s    %%%80c::: 	= 	=A 88cBBB82444  $V<<<<80c:::r6  N)r  r  rw   r0  r  r  r  r,  r@  r6  r4  r  r    sh           H H H H) ) ) ); ; ; ; ; ;r6  r  c                  *    e Zd Z	 dddZddZddZdS )ASTInitializerTr  r/  	hasAssignrB   rw   r0  c                "    || _         || _        d S r2  r  r  )r3  r  r  s      r4  r5  zASTInitializer.__init__	  s    
"r6  rL  r   r7  c                >     || j                   }| j        rd|z   S |S Nr  r  )r3  rL  vals      r4  rP  zASTInitializer._stringify  s,    i
##> 	3;Jr6  rc  r1   rd  re  r7   r,  r-  c                    t          |           | j        rD|t          j                    z  }|t          j        dd          z  }|t          j                    z  }| j                            |d||           d S )Nr   rj  )r(   r  r
   r  r  r  r  r  s        r4  r  z!ASTInitializer.describe_signature  sy    %%%> 	1x.000Gx4S#>>>Gx.000G
%%gz3GGGGGr6  NT)r  r/  r  rB   rw   r0  r  r  r  r@  r6  r4  r  r    s^        #'# # # # #
   H H H H H Hr6  r  c                      e Zd Zd%dZed&d	            Zej        d'd            Zed(d            Zed)d            Zed*d            Z		 	 d+d,dZ
d-dZd.dZd/d$ZdS )0r  	declSpecsr  declr&  rw   r0  c                2    |sJ |sJ || _         || _        d S r2  )r  r  )r3  r  r  s      r4  r5  zASTType.__init__   s)    "			r6  r  c                    | j         j        S r2  r  r  r:  s    r4  r  zASTType.name&  ro  r6  r  c                    || j         _        d S r2  r  rP  s     r4  r  zASTType.name*  rq  r6  rB   c                    | j         j        S r2  )r  r*  r:  s    r4  r*  zASTType.isPack.  rt  r6  r  c                    | j         j        S r2  )r  r  r:  s    r4  r  zASTType.function_params2  rw  r6  c                    | j         j        S r2  )r  r  r:  s    r4  r  zASTType.trailingReturn6  rz  r6  NrT  re   r  r  r,  r  r7  c                   |dk    rg }|r.|dk    r|                     |                                                    |                     |                     | j                            |                     |                     | j                            |                     | j        j        j        s| j        j	        r&| j        j	        j        r|                     d           n|dk    r;|                     |                                                    |                     nt          |          | j                                        rt          |                     | j                            |                     |                     | j                            |                     |                     | j                            |                     d                    |          S g }|rn|dk    r| j                            |          }|                     |                                                    ||                     |dk    r|j        j        }|| j                            |          }| j        r| j                            |          }n| j                            |          }|                     |           |                     |           |                     | j                            |                     n|dk    r;|                     |                                                    |                     nYt          |          | j                            |          }| j                            ||          }|                     |           d                    |          S )NrW  functionCEr  r   r   )r}  get_full_nested_namer]  r  r  r  r  r  rO   r  r  r8  r   r2  r  r.  r  r  r6  )	r3  rT  r  r,  r  r  templtypeIdr3  s	            r4  r]  zASTType.get_id:  sS   a<<C <++JJv::<<CCGLLMMMJJty55g>>???JJty99'BBCCC0: )!^6)!^6@) 

4(((6))JJv::<<CCGLLMMMM(4449--// '&&

4>0099:::

4966w??@@@

4911'::;;;773<< 	Z'' I66w??	

66688??SSTTTa<<".=E(!%!<!<W!E!E. J+/+>+E+Eg+N+NLL+/>+@+@+I+IL

6***

<000

4911'::;;;;v%%

66688??HHIIII$Z000  >0099LY**7LAAFJJvwws||r6  rL  r   c                B   g } || j                   }|                    |           | j                                        r(t	          |          dk    r|                    d           |                     || j                             d                    |          S r  )r  r}  r  r.  rJ  r  )r3  rL  r  r  s       r4  rP  zASTType._stringifyp  s    Idn--	

992244 	Y!9K9KJJsOOO

99TY''(((wws||r6  c                "    | j         j        rdS dS )Nr   r  )r  r  r:  s    r4  get_type_declaration_prefixz#ASTType.get_type_declaration_prefixy  s    >* 	96r6  rc  r1   rd  re  r7   r-  c                P   t          |           | j                            |d||           | j                                        r;t          t          | j                            dk    r|t          j                    z  }|dk    rd}| j                            ||||           d S )Nrj  r   rt  )	r(   r  r  r  r.  rJ  r7  r
   r  r  s        r4  r  zASTType.describe_signature  s    %%%))':sFKKKI3355 	1C''((1,,x.000G :D	$$WdC@@@@@r6  )r  r  r  r&  rw   r0  r  r:  r  r  r;  r  r  r  r<  r  )r=  r>  r?  r5  r  r  r=  r*  r  r  r]  rP  r  r  r@  r6  r4  r  r    s/              X 
[   [       X  ) ) ) X) ( ( ( X( =A'+4 4 4 4 4l      A A A A A Ar6  r  c                  b    e Zd ZddZedd            Zed d
            Z	 d!d"dZd#dZd$dZ	dS )%'ASTTemplateParamConstrainedTypeWithInitr  r  initrw   r0  c                *    |sJ || _         || _        d S r2  r  r  r3  r  r  s      r4  r5  z0ASTTemplateParamConstrainedTypeWithInit.__init__  s    				r6  r  c                    | j         j        S r2  r  r  r:  s    r4  r  z,ASTTemplateParamConstrainedTypeWithInit.name  ro  r6  rB   c                    | j         j        S r2  r  r*  r:  s    r4  r*  z.ASTTemplateParamConstrainedTypeWithInit.isPack  rt  r6  NrT  re   r  r  r,  r  r7  c                    |dk    sJ |r!|j         j                            |d          S | j                            |          S Nr  Fr  )r  r.  r]  r  r  s       r4  r]  z.ASTTemplateParamConstrainedTypeWithInit.get_id  M     !|||| 	-=,33Ge3LLL9##G,,,r6  rL  r   c                d     || j                   }| j        r|dz  }| || j                  z  }|S r  r  r  s      r4  rP  z2ASTTemplateParamConstrainedTypeWithInit._stringify  sA    i	""9 	(5LC99TY'''C
r6  rc  r1   rd  re  r7   r-  c                   | j                             ||||           | j        rc|t          j                    z  }|t          j        dd          z  }|t          j                    z  }| j                            ||||           d S d S )Nr   )r  r  r  r
   r  r  r  s        r4  r  z:ASTTemplateParamConstrainedTypeWithInit.describe_signature  s    	$$WdC@@@9 	Ex.000Gx4S#>>>Gx.000GI(($VDDDDD		E 	Er6  )r  r  r  r  rw   r0  r  r  r  r  r  r  
r=  r>  r?  r5  r  r  r*  r]  rP  r  r@  r6  r4  r  r    s           
    X       X  TX	- 	- 	- 	- 	-   E E E E E Er6  r  c                  d    e Zd ZddZed d	            Zed!d            Z	 	 d"d#dZd$dZd%dZ	dS )&ASTTypeWithInitr  r  r  r  rw   r0  c                "    || _         || _        d S r2  r  r  s      r4  r5  zASTTypeWithInit.__init__      				r6  r  c                    | j         j        S r2  r  r:  s    r4  r  zASTTypeWithInit.name  ro  r6  rB   c                    | j         j        S r2  r  r:  s    r4  r*  zASTTypeWithInit.isPack  rt  r6  NrT  re   r  r  r,  r  r7  c                (   |dk    r| j                             ||          S |dk    rE|                                                    |          dz   | j                             |          z   S |                                                    |          S )NmemberrW  r   )r  r]  r  r  s       r4  r]  zASTTypeWithInit.get_id  s    !!9##GZ888a<<//1188AADHI$$W--. /**,,33G<<<r6  rL  r   c                    g }|                      || j                             | j        r#|                      || j                             d                    |          S r  )r}  r  r  r  r  s      r4  rP  zASTTypeWithInit._stringify  s]    

99TY''(((9 	-JJyy++,,,wws||r6  rc  r1   rd  re  r7   r-  c                    t          |           | j                            ||||           | j        r| j                            ||||           d S d S r2  )r(   r  r  r  r  s        r4  r  z"ASTTypeWithInit.describe_signature  se    %%%	$$WdC@@@9 	EI(($VDDDDD	E 	Er6  )r  r  r  r  rw   r0  r  r  r  r  r  r  r  r@  r6  r4  r  r    s               X       X  =A'+= = = = =   E E E E E Er6  r  c                  <    e Zd ZddZ	 	 dddZddZd dZd!dZdS )"ASTTypeUsingr  r  r  r  rw   r0  c                "    || _         || _        d S r2  )r  r  r3  r  r  s      r4  r5  zASTTypeUsing.__init__  r!  r6  NrT  re   r  r  r,  r  r7  c                j    |dk    rt           |                                                    |          S r  r   r  r]  r  s       r4  r]  zASTTypeUsing.get_id  1    a<<**,,33G<<<r6  rL  r   c                    g }|                      || j                             | j        r8|                     d           |                      || j                             d                    |          S )Nr  r   )r}  r  r  r  r  s      r4  rP  zASTTypeUsing._stringify  so    

99TY''(((9 	-JJuJJyy++,,,wws||r6  c                    dS )Nr   r@  r:  s    r4  r  z(ASTTypeUsing.get_type_declaration_prefix  s    wr6  rc  r1   rd  re  r7   r-  c                6   t          |           | j                            ||||           | j        rd|t	          j                    z  }|t	          j        dd          z  }|t	          j                    z  }| j                            |d||           d S d S )Nr  r   rj  )r(   r  r  r  r
   r  r  r  s        r4  r  zASTTypeUsing.describe_signature  s    %%%	$$WdC$GGG9 	Rx.000Gx4S#>>>Gx.000GI((*c&(QQQQQ		R 	Rr6  )r  r  r  r  rw   r0  r  r  r  r<  r  )r=  r>  r?  r5  r]  rP  r  r  r@  r6  r4  r)  r)    s            =A'+= = = = =      R R R R R Rr6  r)  c                  L    e Zd ZddZedd            Z	 	 dddZd dZd!dZd	S )"
ASTConceptr  r  r  r  rw   r0  c                "    || _         || _        d S r2  r  r  r3  r  r  s      r4  r5  zASTConcept.__init__  s    $&r6  c                    | j         S r2  r  r:  s    r4  r  zASTConcept.name  r  r6  NrT  re   r  r  r,  r  r7  c                j    |dk    rt           |                                                    |          S r  r-  r  s       r4  r]  zASTConcept.get_id	  r.  r6  rL  r   c                Z     || j                   }| j        r| || j                  z  }|S r2  r5  r  s      r4  rP  zASTConcept._stringify  s:    i(( 	/99T-...C
r6  rc  r1   rd  re  r7   r-  c                    | j                             ||||           | j        r| j                            ||||           d S d S r2  )r  r  r  r  s        r4  r  zASTConcept.describe_signature  sY    **7D#vFFF 	L//sFKKKKK	L 	Lr6  )r  r  r  r  rw   r0  r  r  r  r  r  r  r@  r6  r4  r3  r3     s        ' ' ' '    X =A'+= = = = =   L L L L L Lr6  r3  c                  &    e Zd Zdd
ZddZddZdS )ASTBaseClassr  r  
visibilityr7  r   rB   packrw   r0  c                >    || _         || _        || _        || _        d S r2  )r  r=  r   r>  )r3  r  r=  r   r>  s        r4  r5  zASTBaseClass.__init__  s"    	$			r6  rL  r   c                R   g }| j         /|                    | j                    |                    d           | j        r|                    d           |                     || j                             | j        r|                    d           d                    |          S )Nr  zvirtual r3  r   )r=  r}  r   r  r>  r  r  s      r4  rP  zASTBaseClass._stringify$  s    ?&JJt'''JJsOOO< 	#JJz"""

99TY''(((9 	JJuwws||r6  rc  r1   rd  re  r7   r,  r-  c                   t          |           | j        8|t          j        | j        | j                  z  }|t          j                    z  }| j        r.|t          j        dd          z  }|t          j                    z  }| j                            |d||           | j        r|t          j	        dd          z  }d S d S )Nr   rj  r  r3  )
r(   r=  r
   r  r  r   r  r  r>  r  r  s        r4  r  zASTBaseClass.describe_signature0  s    %%%?&x015B B BGx.000G< 	1x0IFFFGx.000G	$$Wj#f$MMM9 	Cx4UEBBBGGG	C 	Cr6  N)
r  r  r=  r7  r   rB   r>  rB   rw   r0  r  r  r  r@  r6  r4  r<  r<    sV           
 
 
 
C C C C C Cr6  r<  c                  .    e Zd ZddZddZddZd dZdS )!ASTClassr  r  r  rB   baseslist[ASTBaseClass]r  r   rw   r0  c                >    || _         || _        || _        || _        d S r2  )r  r  rD  r  )r3  r  r  rD  r  s        r4  r5  zASTClass.__init__@  s"    	




r6  rT  re   r  r7  r,  r-  c                P    |                                                     |          S r2  )r  r]  r  s       r4  r]  zASTClass.get_idG  s"    **,,33G<<<r6  rL  r   c                .   g }|                      || j                             t          | j                  dk    r|                     d           |                      || j                             | j        r|                     d           t          | j                  dk    rX|                     d           d}| j        D ]9}|s|                     d           d}|                      ||                     :d                    |          S )	Nr   r  r  r  Tr%  Fr   )r}  r  rJ  r  r  rD  r  )r3  rL  r  r  r   s        r4  rP  zASTClass._stringifyJ  s   

99TZ(()))tz??aJJsOOO

99TY''(((: 	!JJx   tz??QJJuEZ ) ) %JJt$$$

99Q<<((((wws||r6  rc  r1   rd  re  r7   c                   t          |           | j                            |           t          | j                  dk    r|t	          j                    z  }| j                            ||||           | j        r.|t	          j                    z  }|t	          j        dd          z  }t          | j	                  dk    r|t	          j                    z  }|t	          j
        dd          z  }|t	          j                    z  }| j	        D ]I}|                    ||||           |t	          j
        dd          z  }|t	          j                    z  }J|                                 |                                 d S d S )Nr   r  r  r  r   )r(   r  r  rJ  r
   r  r  r  r  rD  r  pop)r3  rc  rd  re  r,  r   s         r4  r  zASTClass.describe_signature\  sp   %%%
%%g...tz??ax.000G	$$WdC$GGG: 	Cx.000Gx0'BBBGtz??Qx.000Gx4S#>>>Gx.000GZ 5 5$$WdC$GGG88cBBB82444KKMMMKKMMMMM r6  N)
r  r  r  rB   rD  rE  r  r   rw   r0  rT  re   r  r7  r,  r-  rw   r7  r  r  r,  r@  r6  r4  rC  rC  ?  sd           = = = =   $     r6  rC  c                  .    e Zd ZddZddZddZddZdS )ASTUnionr  r  r  r   rw   r0  c                "    || _         || _        d S r2  )r  r  )r3  r  r  s      r4  r5  zASTUnion.__init__s  s    	


r6  rT  re   r  r7  r,  r-  c                j    |dk    rt           |                                                    |          S r  r-  r  s       r4  r]  zASTUnion.get_idw  1    a<<**,,33G<<<r6  rL  r   c                   g }|                      || j                             t          | j                  dk    r|                     d           |                      || j                             d                    |          S r  )r}  r  rJ  r  r  r  s      r4  rP  zASTUnion._stringify|  su    

99TZ(()))tz??aJJsOOO

99TY''(((wws||r6  rc  r1   rd  re  r7   c                    t          |           | j                            |           t          | j                  dk    r|t	          j                    z  }| j                            ||||           d S )Nr   r  )r(   r  r  rJ  r
   r  r  r  s        r4  r  zASTUnion.describe_signature  sq    %%%
%%g...tz??ax.000G	$$WdC$GGGGGr6  N)r  r  r  r   rw   r0  rK  r  r  r,  r@  r6  r4  rM  rM  r  sj           = = = =
   H H H H H Hr6  rM  c                  .    e Zd ZddZddZddZddZdS ) ASTEnumr  r  scopedr7  underlyingTyper  r  r   rw   r0  c                >    || _         || _        || _        || _        d S r2  )r  rU  rV  r  )r3  r  rU  rV  r  s        r4  r5  zASTEnum.__init__  s#    	,


r6  rT  re   r  r,  r-  c                j    |dk    rt           |                                                    |          S r  r-  r  s       r4  r]  zASTEnum.get_id  rP  r6  rL  r   c                    g }| j         r/|                    | j                    |                    d           |                     || j                             t          | j                  dk    r|                    d           |                     || j                             | j        r8|                    d           |                     || j                             d                    |          S )Nr  r   r  r   )rU  r}  r  rJ  r  rV  r  r  s      r4  rP  zASTEnum._stringify  s    ; 	JJt{###JJsOOO

99TZ(()))tz??aJJsOOO

99TY''((( 	7JJuJJyy!455666wws||r6  rc  r1   rd  re  r7   c                   t          |           | j                            |           t          | j                  dk    r|t	          j                    z  }| j                            ||||           | j        rd|t	          j                    z  }|t	          j        dd          z  }|t	          j                    z  }| j                            |d||           d S d S )Nr   r  r  rt  )	r(   r  r  rJ  r
   r  r  rV  r  r  s        r4  r  zASTEnum.describe_signature  s    %%%
%%g...tz??ax.000G	$$WdC$GGG 	Gx.000Gx4S#>>>Gx.000G227L36v 3 G G G G G		G 	Gr6  N)
r  r  rU  r7  rV  r  r  r   rw   r0  rK  r  r  r,  r@  r6  r4  rT  rT    sj           = = = =
   G G G G G Gr6  rT  c                  .    e Zd Zdd	ZddZddZddZdS )ASTEnumeratorr  r  r  ASTInitializer | Noner  r   rw   r0  c                0    || _         || _        || _        d S r2  )r  r  r  )r3  r  r  r  s       r4  r5  zASTEnumerator.__init__  s    		


r6  rT  re   r  r7  r,  r-  c                j    |dk    rt           |                                                    |          S r  r-  r  s       r4  r]  zASTEnumerator.get_id  rP  r6  rL  r   c                j   g }|                      || j                             t          | j                  dk    r8|                     d           |                      || j                             | j        r#|                      || j                             d                    |          S r  )r}  r  rJ  r  r  r  r  s      r4  rP  zASTEnumerator._stringify  s    

99TY''(((tz??aJJsOOOJJyy,,---9 	-JJyy++,,,wws||r6  rc  r1   rd  re  r7   c                :   t          |           | j                            ||||           t          | j                  dk    r0|t          j                    z  }| j                            |           | j        r| j                            |d||           d S d S )Nr   rj  )r(   r  r  rJ  r  r
   r  r  r  s        r4  r  z ASTEnumerator.describe_signature  s    %%%	$$WdC@@@tz??ax.000GJ))'2229 	KI((*c6JJJJJ	K 	Kr6  N)r  r  r  r]  r  r   rw   r0  rK  r  r  r,  r@  r6  r4  r\  r\    sj           = = = =
   K K K K K Kr6  r\  c                  V    e Zd ZddZddZddZedd            Zedd            ZdS )ASTTemplateParamrw   rF  c                :    t          t          |                     r2  r  r:  s    r4  get_identifierzASTTemplateParam.get_identifier  r  r6  rT  re   r7  c                :    t          t          |                     r2  r  r\  s     r4  r]  zASTTemplateParam.get_id  r  r6  
parentNoder1   rd  re  r7   r,  r-  r0  c                :    t          t          |                     r2  r  )r3  rg  rd  re  r,  s        r4  r  z#ASTTemplateParam.describe_signature  r  r6  rB   c                :    t          t          |                     r2  r  r:  s    r4  r*  zASTTemplateParam.isPack  r  r6  r  c                :    t          t          |                     r2  r  r:  s    r4  r  zASTTemplateParam.name  r  r6  Nrw   rF  r  )
rg  r1   rd  r7  re  r7   r,  r-  rw   r0  r  r  )	r=  r>  r?  re  r]  r  r  r*  r  r@  r6  r4  rc  rc    s        . . . .. . . .. . . . . . . X. . . . X. . .r6  rc  c                  6    e Zd ZddZddZddZddZd dZdS )! ASTTemplateKeyParamPackIdDefaultkeyr7  rG  rF  parameterPackrB   rT   r  rw   r0  c                R    |sJ |r|J || _         || _        || _        || _        d S r2  )rn  rG  ro  rT   )r3  rn  rG  ro  rT   s        r4  r5  z)ASTTemplateKeyParamPackIdDefault.__init__  s=    


 	#???$*r6  c                    | j         S r2  rN  r:  s    r4  re  z/ASTTemplateKeyParamPackIdDefault.get_identifier  r_  r6  rT  re   c                    |dk    sJ g }| j         r|                    d           n|                    d           d                    |          S )Nr  r  r  r   )ro  r}  r  r  s      r4  r]  z'ASTTemplateKeyParamPackIdDefault.get_id  sS    !|||| 	JJtJJsOOOwws||r6  rL  r   c                   | j         g}| j        r1| j        r|                    d           |                    d           | j        r?| j        s|                    d           |                     || j                             | j        r8|                    d           |                     || j                             d                    |          S )Nr  r3  r  r   )rn  ro  rG  r}  rT   r  r  s      r4  rP  z+ASTTemplateKeyParamPackIdDefault._stringify  s    xj 	  

3JJu? 	3%  

3JJyy11222< 	0JJuJJyy..///wws||r6  rc  r1   rd  re  r7   r,  r-  c                   |t          j        | j        | j                  z  }| j        r5| j        r|t          j                    z  }|t          j        dd          z  }| j        r<| j        s|t          j                    z  }| j                            |||dd|           | j        rc|t          j                    z  }|t          j        dd          z  }|t          j                    z  }| j                            |d||           d S d S )Nr3  r   r   rj  )	r
   r  rn  ro  rG  r  r  r  rT   r  s        r4  r  z3ASTTemplateKeyParamPackIdDefault.describe_signature  s   8,TXtx@@@ 	C 582444x4UEBBBG? 	S% 582444O..wc2r6RRR< 	Nx.000Gx4S#>>>Gx.000GL++GZfMMMMM		N 	Nr6  N)
rn  r7  rG  rF  ro  rB   rT   r  rw   r0  rk  r  r  r  )r=  r>  r?  r5  re  r]  rP  r  r@  r6  r4  rm  rm    s~                    N N N N N Nr6  rm  c                  j    e Zd ZddZed d            Zed!d	            Zd"dZ	 d#d$dZd%dZ	d&dZ
dS )'ASTTemplateParamTyper  rm  rw   r0  c                    |sJ || _         d S r2  r  r  s     r4  r5  zASTTemplateParamType.__init__.  r  r6  r  c                n    |                                  }t          t          |d           gdgd          S NFr  re  r  r  r3  r  s     r4  r  zASTTemplateParamType.name2  8      ""22t<<=wuUUUUr6  rB   c                    | j         j        S r2  r  ro  r:  s    r4  r*  zASTTemplateParamType.isPack7      y&&r6  rF  c                4    | j                                         S r2  r  re  r:  s    r4  re  z#ASTTemplateParamType.get_identifier;      y'')))r6  NrT  re   r  r  r,  r  r7  c                    |dk    sJ |r!|j         j                            |d          S | j                            |          S r  )r  r.  r]  r  r  s       r4  r]  zASTTemplateParamType.get_id>  r  r6  rL  r   c                "     || j                   S r2  r  rO  s     r4  rP  zASTTemplateParamType._stringifyI  rR  r6  rc  r1   rd  re  r7   r-  c                @    | j                             ||||           d S r2  )r  r  r  s        r4  r  z'ASTTemplateParamType.describe_signatureL  rV  r6  )r  rm  rw   r0  r  r  rk  r  r  r  r  r=  r>  r?  r5  r  r  r*  re  r]  rP  r  r@  r6  r4  rv  rv  -  s            V V V XV ' ' ' X'* * * * TX	- 	- 	- 	- 	-$ $ $ $A A A A A Ar6  rv  c                  j    e Zd Zd!dZed"d	            Zed#d            Zd$dZ	 d%d&dZd'dZ	d(d Z
dS ))ASTTemplateParamTemplateTypenestedParamsASTTemplateParamsr  rm  rw   r0  c                2    |sJ |sJ || _         || _        d S r2  r  r  )r3  r  r  s      r4  r5  z%ASTTemplateParamTemplateType.__init__R  s*    (			r6  r  c                n    |                                  }t          t          |d           gdgd          S ry  r{  r|  s     r4  r  z!ASTTemplateParamTemplateType.nameY  r}  r6  rB   c                    | j         j        S r2  r  r:  s    r4  r*  z#ASTTemplateParamTemplateType.isPack^  r  r6  rF  c                4    | j                                         S r2  r  r:  s    r4  re  z+ASTTemplateParamTemplateType.get_identifierb  r  r6  NrT  re   r  r  r,  r  r7  c                    |dk    sJ |r!|j         j                            |d           S | j                            |          | j                            |          z   S )Nr  r  )r  r.  r]  r  r  r  s       r4  r]  z#ASTTemplateParamTemplateType.get_ide  sd     !|||| 	Q=,33Gd3KKK$++G44ty7G7G7P7PPPr6  rL  r   c                D     || j                    || j                  z   S r2  r  rO  s     r4  rP  z'ASTTemplateParamTemplateType._stringifyp  s&    y*++ii	.B.BBBr6  rc  r1   rd  re  r7   r-  c                    | j                             |d||           |t          j                    z  }| j                            ||||           d S )Nrt  )r  r  r
   r  r  r  s        r4  r  z/ASTTemplateParamTemplateType.describe_signatures  sT    ,,WlCPPP8*,,,	$$WdC@@@@@r6  )r  r  r  rm  rw   r0  r  r  rk  r  r  r  r  r  r@  r6  r4  r  r  Q  s            V V V XV ' ' ' X'* * * * TX	Q 	Q 	Q 	Q 	QC C C CA A A A A Ar6  r  c                  n    e Zd Z	 d!d"dZed#d
            Zed$d            Zd%dZ	 d&d'dZd(dZ	d)d Z
dS )*ASTTemplateParamNonTypeFru  r  ro  rB   rw   r0  c                *    |sJ || _         || _        d S r2  ru  ro  )r3  ru  ro  s      r4  r5  z ASTTemplateParamNonType.__init__{  s"     
*r6  r  c                n    |                                  }t          t          |d           gdgd          S ry  r{  r|  s     r4  r  zASTTemplateParamNonType.name  r}  r6  c                (    | j         j        p| j        S r2  )ru  r*  ro  r:  s    r4  r*  zASTTemplateParamNonType.isPack  s    z 6D$66r6  rF  c                    | j         j        }|rmt          |j                  dk    sJ |j        d         j        sJ |j        d         j        rJ |j        d         j        }t          |t                    sJ |S d S )NrW  r   )ru  r  rJ  r  r  rg  r  rF  )r3  r  r  s      r4  re  z&ASTTemplateParamNonType.get_identifier  s    z 	tz??a'''':a=****z!}1111*Q-)Cc=11111J4r6  NrT  re   r  r  r,  r  r7  c                    |dk    sJ |r!|j         j                            |d           S d}| j        r|dz  }|| j                            |          z   S )Nr  r  r   r  )r  r.  r]  ro  ru  )r3  rT  r  r,  r  s        r4  r]  zASTTemplateParamNonType.get_id  sk     !|||| 	4=,33Gd3KKKC! t**73333r6  rL  r   c                >     || j                   }| j        r|dz  }|S r  r  r  s      r4  rP  z"ASTTemplateParamNonType._stringify  s,    i
## 	5LC
r6  rc  r1   rd  re  r7   r-  c                    | j                             ||||           | j        r|t          j        dd          z  }d S d S r  )ru  r  ro  r
   r  r  s        r4  r  z*ASTTemplateParamNonType.describe_signature  sQ    
%%gtS&AAA 	Cx4UEBBBGGG	C 	Cr6  r  )ru  r  ro  rB   rw   r0  r  r  rk  r  r  r  r  r  r@  r6  r4  r  r  z  s         (-+ + + + + V V V XV 7 7 7 X7
 
 
 
 TX4 4 4 4 4   C C C C C Cr6  r  c                  8    e Zd ZddZd d!dZd"dZd#dZd$dZdS )%r  paramslist[ASTTemplateParam]requiresClauseASTRequiresClause | Nonerw   r0  c                *    |J || _         || _        d S r2  )r  r  )r3  r  r  s      r4  r5  zASTTemplateParams.__init__  s#    !!!,r6  FrT  re   excludeRequiresrB   r7  c                   |dk    sJ g }|                     d           | j        D ]*}|                     |                    |                     +|                     d           |sc| j        r\|                     d           |                     | j        j                            |                     |                     d           d                    |          S )Nr  r  r  IQr   )r}  r  r]  r  r>  r  )r3  rT  r  r  ru  s        r4  r]  zASTTemplateParams.get_id  s    !||||

3[ 	. 	.EJJu||G,,----

3 	4#6 	JJtJJt*/66w??@@@JJsOOOwws||r6  rL  r   c                v   g }|                     d           |                     d                    fd| j        D                                  |                     d           | j        8|                      | j                             |                     d           d                    |          S )Nz	template<r%  c              3  .   K   | ]} |          V  d S r2  r@  r  s     r4  r  z/ASTTemplateParams._stringify.<locals>.<genexpr>  s+      ??aYYq\\??????r6  z> r  r   )r}  r  r  r  r  s    ` r4  rP  zASTTemplateParams._stringify  s    

;

499????4;?????@@@

4*JJyy!455666JJsOOOwws||r6  rc  r1   rd  re  r7   r,  r-  c                   |t          j        dd          z  }|t          j        dd          z  }d}| j        D ]L}|s.|t          j        dd          z  }|t          j                    z  }d}|                    ||||           M|t          j        dd          z  }| j        5|t          j                    z  }| j                            ||||           d S d S )Nr   r   Tr   Fr   )r
   r  r  r  r  r  r  )r3  rc  rd  re  r,  r  ru  s          r4  r  z$ASTTemplateParams.describe_signature  s    8,ZDDD80c:::[ 	A 	AE 588cBBB82444E$$WdC@@@@80c:::*x.000G227D#vNNNNN +*r6  rg  r3   lineSpecc                "   dd} ||          }|t          j        dd          z  }|t          j        dd          z  }d}| j        D ]Y}	|s.|t          j        d	d	          z  }|t          j                    z  }d
}|r ||          }|	                    ||||           Z|r|s ||          }|t          j        dd          z  }| j        r>t          j                    }
d|
_        ||
z  }| j                            |
d||           d S d S )Nrg  r3   rw   addnodes.desc_signature_linec                D    t          j                    }| |z  } d|_        |S )Nr  )r
   desc_signature_linesphinx_line_type)rg  rc  s     r4  makeLinezDASTTemplateParams.describe_signature_as_introducer.<locals>.makeLine  s'    244G'!J'7G$Nr6  r   r   Tr   Fr   r  rj  )rg  r3   rw   r  )	r
   r  r  r  r  r  r  r  r  )r3  rg  rd  re  r,  r  r  lineNoder  ru  reqNodes              r4   describe_signature_as_introducerz2ASTTemplateParams.describe_signature_as_introducer  sh   	 	 	 	
 8J''H-j*EEEH1#s;;;[ 	B 	BE 6H9#sCCCH3555E 0#8J//$$XtS&AAAA 	,E 	,x
++HH1#s;;; 	U244G'7G$'!J227JVTTTTT		U 	Ur6  N)r  r  r  r  rw   r0  r  )rT  re   r  rB   rw   r7  r  r  rg  r3   rd  r7  re  r7   r,  r-  r  rB   rw   r0  )r=  r>  r?  r5  r]  rP  r  r  r@  r6  r4  r  r    s        - - - -       O O O O U U U U U Ur6  r  c                  r    e Zd Zd dZed!d	            Zed"d
            Zd#dZ	 d$d%dZd&dZ	d'dZ
d(dZdS )) ASTTemplateIntroductionParameterrG  rF  ro  rB   rw   r0  c                "    || _         || _        d S r2  )rG  ro  )r3  rG  ro  s      r4  r5  z)ASTTemplateIntroductionParameter.__init__  s    $*r6  r  c                n    |                                  }t          t          |d           gdgd          S ry  r{  r|  s     r4  r  z%ASTTemplateIntroductionParameter.name  r}  r6  c                    | j         S r2  )ro  r:  s    r4  r*  z'ASTTemplateIntroductionParameter.isPack  s    !!r6  c                    | j         S r2  rN  r:  s    r4  re  z/ASTTemplateIntroductionParameter.get_identifier  r_  r6  NrT  re   r  r  r,  r  r7  c                n    |dk    sJ |r!|j         j                            |d           S | j        rdS dS )Nr  r  r  r  )r  r.  r]  ro  r  s       r4  r]  z'ASTTemplateIntroductionParameter.get_id  sL     !|||| 	=,33Gd3KKK! tsr6  c                b    |dk    sJ | j                             |          }| j        rd|z   S |S )Nr  r  )rG  r]  ro  r  s      r4  get_id_as_argz.ASTTemplateIntroductionParameter.get_id_as_arg   s>    !||||o$$W-- 	#:Jr6  rL  r   c                    g }| j         r|                    d           |                     || j                             d                    |          S Nr3  r   )ro  r}  rG  r  r  s      r4  rP  z+ASTTemplateIntroductionParameter._stringify)  sR     	JJu

99T_--...wws||r6  rc  r1   rd  re  r7   r-  c                    | j         r|t          j        dd          z  }| j                            |||dd|           d S r  )ro  r
   r  rG  r  r  s        r4  r  z3ASTTemplateIntroductionParameter.describe_signature0  sK     	Cx4UEBBBG**7D#r2vNNNNNr6  )rG  rF  ro  rB   rw   r0  r  r  rk  r  r  r  r  r  )r=  r>  r?  r5  r  r  r*  re  r]  r  rP  r  r@  r6  r4  r  r    s        + + + + V V V XV " " " X"    TX          O O O O O Or6  r  c                  .    e Zd ZddZddZddZddZdS )ASTTemplateIntroductionrL   r  r  &list[ASTTemplateIntroductionParameter]rw   r0  c                L    t          |          dk    sJ || _        || _        d S rI  )rJ  rL   r  )r3  rL   r  s      r4  r5  z ASTTemplateIntroduction.__init__8  s'    6{{Qr6  rT  re   r7  c                ^   |dk    sJ g }|                     d           | j        D ]*}|                     |                    |                     +|                     d           |                     d           |                     | j                            |                     |                     d           | j        D ]*}|                     |                    |                     +|                     d           |                     d           d                    |          S )Nr  r  r  rx  r   )r}  r  r]  rL   r  r  )r3  rT  r  ru  s       r4  r]  zASTTemplateIntroduction.get_id>  s   !||||

3[ 	. 	.EJJu||G,,----

3

3

4<&&w//000

3[ 	5 	5EJJu**7334444

3

3wws||r6  rL  r   c                >   g }|                      | j                             |                     d           |                     d                    fd| j        D                                  |                     d           d                    |          S )Nr(  r%  c              3  .   K   | ]} |          V  d S r2  r@  )r  ru  rL  s     r4  r  z5ASTTemplateIntroduction._stringify.<locals>.<genexpr>T  s-      GG%YYu--GGGGGGr6  } r   )r}  rL   r  r  r  s    ` r4  rP  z"ASTTemplateIntroduction._stringifyP  s    

99T\**+++

3

499GGGG4;GGGGGHHH

4wws||r6  rg  r3   rd  re  r7   r,  r-  r  rB   c                   t          j                    }||z  }d|_        | j                            |d||           |t          j        dd          z  }d}| j        D ]L}|s.|t          j        dd          z  }|t          j                    z  }d}|                    ||||           M|t          j        dd          z  }d S )NtemplateIntroductionrj  r(  Tr   Fr)  )r
   r  r  rL   r  r  r  r  )	r3  rg  rd  re  r,  r  rc  r  ru  s	            r4  r  z8ASTTemplateIntroduction.describe_signature_as_introducerX  s     .00g
#9 ''S&III80c:::[ 	A 	AE 588cBBB82444E$$WdC@@@@80c:::r6  N)rL   r  r  r  rw   r0  r  r  r  )r=  r>  r?  r5  r]  rP  r  r@  r6  r4  r  r  7  sd              $   ; ; ; ; ; ;r6  r  c                  6    e Zd ZddZddZddZddZddZdS )ASTTemplateDeclarationPrefixr  1list[ASTTemplateParams | ASTTemplateIntroduction]rw   r0  c                    || _         d S r2  )r  )r3  r  s     r4  r5  z%ASTTemplateDeclarationPrefix.__init__n  s     #r6  r  c                j    | j         d S | j         d         }t          |t                    sd S |j        S )Nr  )r  r  r  r  )r3  lastLists     r4  get_requires_clause_in_lastz8ASTTemplateDeclarationPrefix.get_requires_clause_in_lasts  s<    >!4>"%($566 	4&&r6  rT  re   r7  c                z   |dk    sJ g }t          | j                  dz
  }t          | j                  D ]q\  }}t          |t                    r/|                    |                    |||k                         I|                    |                    |                     rd                    |          S )Nr  rW  )r  r   )rJ  r  	enumerater  r  r}  r]  r  )r3  rT  r  	lastIndexr   r   s         r4  %get_id_except_requires_clause_in_lastzBASTTemplateDeclarationPrefix.get_id_except_requires_clause_in_last{  s    !||||''!+	dn-- 	. 	.DAq!.// .

188Ga9n8NNOOOO

188G,,----wws||r6  rL  r   c                    g }| j         D ] }|                     ||                     !d                    |          S r  )r  r}  r  )r3  rL  r  r   s       r4  rP  z'ASTTemplateDeclarationPrefix._stringify  sE     	% 	%AJJyy||$$$$wws||r6  rc  r3   rd  re  r7   r,  r-  r  rB   c                j    t          |           | j        D ]}|                    |d|||           d S Nrs  )r(   r  r  )r3  rc  rd  re  r,  r  r   s          r4  r  z/ASTTemplateDeclarationPrefix.describe_signature  sO    %%% 	] 	]A..wc6S[\\\\	] 	]r6  N)r  r  rw   r0  rw   r  r  r  )rc  r3   rd  r7  re  r7   r,  r-  r  rB   rw   r0  )r=  r>  r?  r5  r  r  rP  r  r@  r6  r4  r  r  m  s~        # # # #
' ' ' '
 
 
 
   ] ] ] ] ] ]r6  r  c                  &    e Zd ZddZdd	ZddZdS )ASTRequiresClauser>  r  rw   r0  c                    || _         d S r2  r@  rA  s     r4  r5  zASTRequiresClause.__init__  r  r6  rL  r   r7  c                (    d || j                   z   S )Nz	requires r@  rO  s     r4  rP  zASTRequiresClause._stringify  s    YYty1111r6  rc  nodes.TextElementrd  re  r7   r,  r-  c                    |t          j        dd          z  }|t          j                    z  }| j                            ||||           d S )Nrv   r  r  s        r4  r  z$ASTRequiresClause.describe_signature  sN    8,ZDDD8*,,,	$$WdC@@@@@r6  N)r>  r  rw   r0  r  )
rc  r  rd  r7  re  r7   r,  r-  rw   r0  r  r@  r6  r4  r  r    sV           2 2 2 2A A A A A Ar6  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d0dZ	d1d Z
d2d(ZdS )3r/  NFr  r7  directiveTyper  r=  r  #ASTTemplateDeclarationPrefix | Noner.  r   trailingRequiresClauser  	semicolonrB   rw   r0  c                    || _         || _        || _        || _        || _        || _        || _        d | _        d | _        d S r2  )	r  r  r=  r  r.  r  r  r,  enumeratorScopedSymbol)r3  r  r  r=  r  r.  r  r  s           r4  r5  zASTDeclaration.__init__  sN     %*$,&&<#"".2###r6  c           	     
   | j         r| j                                         nd }| j        r| j                                        nd }t          | j        | j        | j        || j                                        || j                  S r2  )	r  cloner  r/  r  r  r=  r.  r  )r3  templatePrefixClonetrailingRequiresClasueClones      r4  r  zASTDeclaration.clone  s    =A=PZd177999VZ*'5d&A&G&G&I&I&I04 	$dot/A4?1".44668S"n. . 	.r6  r  c                    | j         j        S r2  )r.  r  r:  s    r4  r  zASTDeclaration.name  s    $$r6  r  c                4    | j         dk    rd S | j        j        S )Nr  )r  r.  r  r:  s    r4  r  zASTDeclaration.function_params  s     ?j((4//r6  TrT  re   r  c                8   |dk    rl| j         s| j        rt          | j        dk    r&| j        r| j        j                            |          S | j                            || j        | j                  S | j        dk    r'| j        r | j        j                            ||          S |rt          |         g}ng }| j         G|	                    | j         
                    |                     | j                                         }nd }|s| j        r|dk     rt          |	                    d           |r| j        r|	                    d           |r-|	                    |j                            |                     | j        r2|	                    | j        j                            |                     |	                    d           |	                    | j                            || j        | j                             d                    |          S )NrW  
enumeratorr   r  r  r  r   )r  r  r   r  r  r.  r]  r,  
_id_prefixr}  r  r  r>  r  )r3  rT  r  r  requiresClauseInLasts        r4  r]  zASTDeclaration.get_id  s   a<<" #d&A #"",..43N.2>EEgNNN#**7DOT[QQQ?l**t/J*.:AA'8TTT 	g&'CCC *JJt*PPQXYYZZZ#'#6#R#R#T#T  #'  	4#> 	{{""JJt# !(C !

4   # F

/4;;GDDEEE* M

46;BB7KKLLLJJsOOO

4#**7DOT[QQRRRwws||r6  c                8    |                      t          d          S rH  )r]  _max_idr:  s    r4  get_newest_idzASTDeclaration.get_newest_id  s    {{7D)))r6  rL  r   c                   g }| j         r:| j         dk    r/|                    | j                    |                    d           | j        r#|                     || j                             |                     || j                             | j        r8|                    d           |                     || j                             | j        r|                    d           d                    |          S )Nrs   r  ;r   )r=  r}  r  r.  r  r  r  r  s      r4  rP  zASTDeclaration._stringify  s    ? 	t(::JJt'''JJsOOO 	7JJyy!455666

99T-..///& 	?JJsOOOJJyy!<==>>>> 	JJsOOOwws||r6  rc  r3   rd  re  r7   optionsdictc           	     b   t          |           | j        sJ d|d<   t          j                    }d|_        | j        j         |d<   | j        r7| j                            |||| j        |                    d                     ||z  }| j	        rC| j	        dk    r8|t          j
        | j	        | j	                  z  }|t          j                    z  }| j        dk    rI| j                                        }|t          j
        ||          z  }|t          j                    z  }n| j        d	k    r0|t          j
        d	d	          z  }|t          j                    z  }n| j        d
v rn| j        dk    rE| j        dv sJ |t          j
        | j        | j                  z  }|t          j                    z  }nQ| j        dk    r0|t          j
        dd          z  }|t          j                    z  }n| j        dk    r|t          j
        dd          z  }|t          j                    z  }| j        dk    r/|t          j
        dd          z  }|t          j                    z  }n| j        dk    r/|t          j
        dd          z  }|t          j                    z  }ni| j        dk    sJ | j                    nN| j        dk    r/|t          j
        dd          z  }|t          j                    z  }nt!          | j                  | j                            |||| j                   |}| j        rSt          j                    }d|_        |                    |           |}| j                            |d|| j                   | j        r|t          j        dd          z  }d S d S )NTis_multiline
declaratoradd_permalinktparam-line-spec)r,  r  rs   r  rL   >   r%  r  rJ   rJ   r~   r   rZ   
enum-classenum-structr~   r  r  rj  r  )r(   r,  r
   r  r  isRedeclarationr  r  r  r=  r  r  r  r.  r  r  r  r  r}  r  r  )	r3  rc  rd  re  r  mainDeclNoderf  lastDeclNodetrailingReqNodes	            r4  r  z!ASTDeclaration.describe_signature
  s   %%%{ #'355(4%,0K,G(G_% 	]227D#:>+<CKKHZ<[<[ 3 ] ] ] 	<? 	6t(::H5dotWWWLH3555L?f$$%AACCFH5ffEEELH3555LL_	))H5iKKKLH3555LL_ 666_''%)<<<<<H5d6H$J\]]]LH3555LL_''H5gwGGGLH3555LL_&&H5ffEEELH3555L!\11 9'7 K KK 7 9 99#}44 9(H M MM 7 9 99)V333T5G3333_,,H5lLQQQLH3555LL 111++L$T[QQQ#& 	?&:<<O/GO,NN?+++*L'::S$+? ? ?> 	DH9#sCCCLLL	D 	Dr6  )NNNNNF)r  r7  r  r  r=  r  r  r  r.  r   r  r  r  rB   rw   r0  )rw   r/  r  r  r  )rT  re   r  rB   rw   r7  r<  r  )
rc  r3   rd  r7  re  r7   r  r  rw   r0  )r=  r>  r?  r5  r  r  r  r  r]  r  rP  r  r@  r6  r4  r/  r/    s        DH*.GK$(DH#(3 3 3 3 3$. . . . % % % X% 0 0 0 X0
+ + + + +Z* * * *   >D >D >D >D >D >Dr6  r/  c                      e Zd ZddZddZdS )ASTNamespacer  r  r  r  rw   r0  c                "    || _         || _        d S r2  )r  r  )r3  r  r  s      r4  r5  zASTNamespace.__init__L  s    $,r6  rL  r   r7  c                    g }| j         r#|                     || j                              |                     || j                             d                    |          S r  )r  r}  r  r  r  s      r4  rP  zASTNamespace._stringifyQ  s_     	7JJyy!455666

99T_--...wws||r6  N)r  r  r  r  rw   r0  r  )r=  r>  r?  r5  rP  r@  r6  r4  r  r  K  s<        - - - -
     r6  r  c                      e Zd ZddZdS )SymbolLookupResultsymbolsIterator[Symbol]parentSymbolr-  r  r  r  r   rg  r  rw   r0  c                L    || _         || _        || _        || _        || _        d S r2  )r
  r  r  r  rg  )r3  r
  r  r  r  rg  s         r4  r5  zSymbolLookupResult.__init__Z  s0     (",(r6  N)r
  r  r  r-  r  r  r  r   rg  r  rw   r0  r=  r>  r?  r5  r@  r6  r4  r	  r	  Y  s(        ) ) ) ) ) )r6  r	  c                      e Zd ZddZdS )	LookupKeyr  Slist[tuple[ASTNestedNameElement, ASTTemplateParams | ASTTemplateIntroduction, str]]rw   r0  c                    || _         d S r2  r  r  s     r4  r5  zLookupKey.__init__e  s     			r6  N)r  r  rw   r0  r  r@  r6  r4  r  r  d  s(             r6  r  r  +ASTTemplateParams | ASTTemplateIntroductionrg  rw   c                   t          | j                  t          |j                  k    rdS t          | j                  dk    rdS t          t          | j                            D ]y}| j        |         }|j        |         }t	          |j                  }t	          |          }|                    d          }|j        |k    r dS |r
|d d         n|}||k    r dS zdS )NTr   r3  F)rJ  r  r{  r  r7  r  endswithr*  )	r  rg  r   ru  r  	paramNameargTxtisArgPackExpansionargNames	            r4  _is_specializationr  k  s    
 > !!S):%;%;;;t
> !!Q&&t3~,--..  %a("
OO	S#__U33<---44!3?&"++44  5r6  c                       e Zd ZdZdZdZdZd Zd Ze	dUd
            Z
dVdZdW fdZdXdZdYd ZdVd!ZdVd"ZdZd#Zd[d%Zed\d'            Zd]d)Zd^d+Zd_d3Zd`d6Zdad?Zdbd@ZdcdFZ	 dddedJZdfdKZdgdLZdhdMZdidPZ djdQZ!dkdSZ"dkdTZ# xZ$S )lr-  r   z  Fc                    t           r2  )r  r:  s    r4  __copy__zSymbol.__copy__  s    r6  c           	     H    | j         rt          t          d d d d d d d           S r2  )r  r  r-  )r3  memos     r4  __deepcopy__zSymbol.__deepcopy__  s,    ; 	!  dD$dD$???r6  r{  r   rw   r0  c                     t                               t          j        t          j        z  d           t          j        |   d S )Nr   end)loggerdebugr-  debug_indent_stringdebug_indentr  s    r4  debug_printzSymbol.debug_print  s6    V/&2EE2NNNdr6  c                    | j         s/| j        rJ | j        rJ | j        rJ | j        rJ | j        rJ d S | j        r	| j        sJ d S d S r2  )r  r  r  rg  r.  docnamer:  s    r4  _assert_invariantszSymbol._assert_invariants  s    { 		$~%%%****((((''''|##### $|###$ $##r6  rn  r7  r  c                b    |dk    rt           t                                          ||          S )Nchildren)r  super__setattr__)r3  rn  r  	__class__s      r4  r0  zSymbol.__setattr__  s.    *  ww""3...r6  r  r  r  "ASTIdentifier | ASTOperator | Noner  2ASTTemplateParams | ASTTemplateIntroduction | Nonerg  r.  ASTDeclaration | Noner+  r  line
int | Nonec                   || _         d | _        d | _        || _        |t	          ||          sd }|| _        || _        || _        || _        || _	        d| _
        |                                  g | _        g | _        | j         r| j         j                            |            | j        r| | j        _        |                                  d S r  )r  siblingAbovesiblingBelowr  r  r  rg  r.  r+  r5  r   r,  	_children_anonChildrenr}  r,  !_add_template_and_function_params)r3  r  r  r  rg  r.  r+  r5  s           r4  r5  zSymbol.__init__  s    
 +/+/" $&~|DD %L,(&	$!!! (*+-; 	/K!((... 	+&*D# 	..00000r6  r/  re   c                   |                                   | j        J | j        J | j        J |J |J |J || _        | | j        _        || _        || _        |                                   |                                  d S r2  )r,  r.  r+  r5  r,  r<  )r3  r.  r+  r5  s       r4  _fill_emptyzSymbol._fill_empty  s    !!!'''|###y   &&&"""&"&	!!!..00000r6  c                    t           j        r/t           xj        dz  c_        t                               d           | j        r| j        j        D ]}|                                s| j        rt          d|          }nd }t          |                                d           }t          |gdgd          }|                     |g || j        | j                   | j        | j        j        }| j        j        D ]p}|j        
|j        j        }|t          d|          }|j        rJ t%          |j                  dk    sJ |                     |g || j        | j                   qt           j        rt           xj        dz  c_        d S d S )NrW  z"_add_template_and_function_params:templateParam)r  r.  Frz  functionParam)r-  debug_lookupr(  r)  r  r  re  r.  r/  r  r  _add_symbolsr+  r5  r  r  r  r  rJ  r  )r3  tpr  r  nnfps         r4  r<  z(Symbol._add_template_and_function_params  s    	E1$CDDD
  	I)0 
I 
I((** #  )_RTUUUDDD*2+<+<+>+>EE"C55'%@@@!!"b$diHHHH'D,<,L,X&6 
I 
I6>V[:%bQQQ9$$$28}}))))!!"b$diHHHH 	%1$	% 	%r6  c                    | j         d S | | j         j        v sJ | j         j                            |            d | _         d S r2  )r  r:  remover:  s    r4  rH  zSymbol.remove  sI    ;Ft{,,,,,$$T***r6  c                J   g }| j         D ]}|                    |           |j        r^|j        |k    rSd |_        d |_        d |_        |j        |j        |j        _        |j        |j        |j        _        d |_        d |_        |                    |           || _         d S r2  )r:  	clear_docr.  r+  r5  r8  r9  r}  )r3  r+  newChildrensChilds       r4  rJ  zSymbol.clear_doc  s    $&n 	' 	'FW%%%! 	+fn&?&?%)"!%"&27=7JF'4&27=7JF'4&*#&*#v&&&&$r6  Iterator[Any]c              #  Z   K   | V  | j         D ]}|                                E d {V  d S r2  )r:  get_all_symbols)r3  rL  s     r4  rO  zSymbol.get_all_symbols  sQ      


n 	0 	0F--//////////	0 	0r6  Generator[Symbol, None, None]c              #  t   K   | j         D ]-}|V  |j                                        s |j        E d {V  .d S r2  )r:  r  rS  children_recurse_anon)r3  r   s     r4  rR  zSymbol.children_recurse_anon"  sa       	/ 	/AGGG;&&(( .........	/ 	/r6  r  c                   g }| }|j         r#|                    |           |j         }|j         #|                                 g }|D ]u}t          |j        |j                  }|j        5|                    ||j        |j                                        f           X|                    ||j        d f           vt          |          S r2  )
r  r}  reverser  r  rg  r.  r  r  r  )r3  r
  r   rn  r  s        r4  r{  zSymbol.get_lookup_key+  s    
 h 	NN1A h 	 	 	: 	:A&q{ANCCC}(

C!11=3N3N3P3PQRRRR

C!1489999~~r6  r  c                @   g }| }|j         r#|                    |           |j         }|j         #|                                 g }g }|D ]D}|                    t          |j        |j                             |                    d           Et          ||d          S ry  )r  r}  rT  r  r  rg  r  )r3  r
  r   r  r  s        r4  r  zSymbol.get_full_nested_name?  s    h 	NN1A h 	 		 	$ 	$ALL-ak1>JJKKKU####UIe<<<<r6  r  r  templateShorthandrB   	matchSelfrecurseInAnoncorrectPrimaryTemplateArgsc           
         t           j        rt                               d           |                     |||||||d          }	 t	          |          S # t
          $ r Y d S w xY w)Nz_find_first_named_symbol ->F)searchInSiblings)r-  rB  r)  _find_named_symbolsrj  StopIteration)	r3  r  r  rg  rV  rW  rX  rY  r  s	            r4  _find_first_named_symbolzSymbol._find_first_named_symbolM  s    
  	><===&&y.,'8)]'A8= ' ? ?	99 	 	 	44	s   A 
A"!A"r[  r  c	              #     K   t           j        rrt           xj        dz  c_        t                               d           t           xj        dz  c_        t                               d           t                                                   t           j        dz             d           t                               d           t                               d           t                               d           t                               d	           t                               d
           t                               d           t                               d|           t                               d|           |rt                    sd dfd}	d fd}
 |
            D ]}t           j        rVt                               d           t                              |                    t           j        dz             d            |	|          rut           j        rDt           xj        dz  c_        t                               d           t           xj        dz  c_        |V  t           j        rt           xj        dz  c_        t           j        rt           xj        dz  c_        d S d S )NrW  z_find_named_symbols:self:r   r#  zidentOrOp:                  ztemplateParams:             ztemplateArgs:               ztemplateShorthand:          zmatchSelf:                  zrecurseInAnon:              zcorrectPrimaryTemplateAargs:zsearchInSiblings:           r   r-  rw   rB   c                    | j         k    rdS | j        d u d u k    rdS sdS r't          | j                  t                    k    rdS | j        d u d u k    rdS | j        r't          | j                  t                    k    rdS dS )NFT)r  r  r7  rg  )r   r  rg  r  rV  s    r4  matchesz+Symbol._find_named_symbols.<locals>.matchesy  s    {i''u D(n.DEE!- 5( ! 5 !q'((C,?,??? 5$&LD,@AAu~ !q~&&#l*;*;;; 54r6  rP  c               3    K   } t           j        rVt                               d           t                              |                     t           j        dz             d           	 r| V  r| j        E d {V  n| j        E d {V  | j	        d S | j	        } t           j        rVt                               d           t                              |                     t           j        dz             d           )Nzsearching in self:rW  r   r#  Tzsearching in sibling:)
r-  rB  r)  r%  r&  	to_stringr(  rR  r:  r8  )r   rW  rX  r3  s    r4  
candidatesz.Symbol._find_named_symbols.<locals>.candidates  s     A" K""#7888Q[[)<q)@AArJJJO GGG  + 666666666 {*******>)EN& O&&'>???LLV-@1-D!E!E2LNNNOr6  
candidate:rb  rV  r  )r   r-  rw   rB   rw   rP  )r-  rB  r(  r)  r%  r&  rd  r  )r3  r  r  rg  rV  rW  rX  rY  r[  rb  re  r   s   ```````     r4  r\  zSymbol._find_named_symbols]  s     
  	Q1$56661$w'''LL(;a(?@@bLIII=yIII=~NNN=|LLL=?PQQQ=yIII=}MMM=?YZZZ=?OPPP% 	()l.F *.,GG (#'L	 	 	 	 	 	 	 	 	,	O 	O 	O 	O 	O 	O 	O 	O(  	- 	-A" K""<000Q[[)<q)@AArJJJwqzz -& -''1,''&&y111''1,''& -''1,'' 	%1$	% 	%r6  r  templateDecls	list[Any]onMissingQualifiedSymbolTCallable[[Symbol, ASTIdentifier | ASTOperator, Any, ASTTemplateArgs], Symbol | None]strictTemplateParamArgListsancestorLookupTyper	  c           
     T
   t           j        rt           xj        dz  c_        t                               d           t           xj        dz  c_        t                               d           t                              |                     t           j        dz             d           t                               d|           t                               dd                    d	 |D                                  t                               d
|           t                               d|           t                               d|           t                               d|           t                               d|           t                               d|	           t                               d|
           |rP|                                t          |          k    s*|                                dz   t          |          k    sJ n*t          |          |                                dz   k    sJ |j
        }| }|j        r|j        r|j        }|j        ||d         }|                                sl|j        re|                    |j        |||
          r9t          |          dk    r%|dk    r|r|j        r|j        j        |j        k    rnn|j        }|j        et           j        rVt                               d           t                              |                    t           j        dz             d           d}|d d         D ]}|j        }|j        }|r(|r#|t          |          k     sJ ||         }|dz  }n(d }n%|r!|t          |          k     r||         }|dz  }nd }|                    |||||||	          }|4 |||||          }|$t           j        rt           xj        dz  c_         d S d}|}t           j        rVt                               d           t                              |                    t           j        dz             d           |d         }|j        }|j        }|t          |          k     r!|dz   t          |          k    sJ ||         }n|t          |          k    sJ d }|                    ||||||d|
          }t           j        r$t'          |          }t           xj        dz  c_        t)          |||||          S )NrW  z_symbol_lookup:r`  r   r#  znestedName:        ztemplateDecls:     r   c              3  4   K   | ]}t          |          V  d S r2  rp  r  r   s     r4  r  z(Symbol._symbol_lookup.<locals>.<genexpr>  s(      >]>]!s1vv>]>]>]>]>]>]r6  zstrictTemplateParamArgLists:zancestorLookupType:ztemplateShorthand: zmatchSelf:         zrecurseInAnon:     zcorrectPrimaryTemplateArgs: zsearchInSiblings:  r   rW  rX  r[  rJ   zstarting point:r  rV  rW  rX  rY  r  Fzhandle last name from:)rV  rW  rX  rY  r[  )r-  rB  r(  r)  r%  r&  rd  r  r  rJ  r  r  r  r  find_identifierr  rg  r^  r\  listr	  )r3  r  rh  rj  rl  rm  rV  rW  rX  rY  r[  r  r  	firstNameiTemplateDeclr  r  rg  r  r,  r
  s                        r4  _symbol_lookupzSymbol._symbol_lookup  s     	H1$01111$w'''LL(;a(?@@bLIII4jAAA4chh>]>]}>]>]>]6]6]^^^=?Z[[[46HIII46GHHH4i@@@4mDDD=?YZZZ46FGGG& 	H ,,..#m2D2DDD,,..2c-6H6HHHHH}%%)A)A)C)Ca)GGGGG   	3% 3+2 % 3)aI((** 7") 7#33I4G>GBOEU 4 W W "  JJ!OO0Bg0M0MR[0M , 3 1N , 3 =AT T T !#/#6L #) 7  	R0111LL//0Ca0GHHbLQQQ #2#J &	" &	"DI,L* * *(3}+=+=====%2=%AN!Q&MM%)NN   *MC4F4F$F$F%2=%AN!Q&MM%)N!::"3#++E ; G GF ~11,	2@,P P>* 1++q0++44 I!LL 	R7888LL//0Ca0GHHbLQQQ RyN	(3}---- 1$M(:(:::::*=9NN C$6$66666!N22~|/9'E-	 3 / /
  	%7mmG1$!'<"+^\K K 	Kr6  c                8   t           j        rt           xj        dz  c_        t                               d           t           xj        dz  c_        t                               dd                    d |D                                  t                               d|           t                               d           t                               d d	            d3d}|                     |||dd ddddd
  
        J t          j                  }t          |          dk    r8t           j        rt                               d           t           xj        dz  c_        t                               dj	                   t                               dj
                   t                               dj                   t                               d           t                               d d	            t           xj        dz  c_        t          j        j
        j	        j                  }t           j        rt           xj        d z  c_        |S t           j        rlt                               d!           t           xj        dz  c_        t                               d"t          |                     t           xj        dz  c_        sCt           j        r/t                               d#           t           xj        d z  c_        |d         S g }	g }
g }|D ]Q}|j        |	                    |           |j        r|                    |           <|
                    |           Rt           j        rxt                               d$t          |	                     t                               d%t          |
                     t                               d&t          |                     d4fd'}t          |
          dk    rd }n |            }d5fd+}j        d,k    r't          |
          dk    sJ  ||
d         |                                           }t           j        rt                               d-|           |
D ]p}|j        j        d,k    r |||           |j                                        }t           j        rt                               d.|           ||k    r |||           qt          |	          dk    rt           j        rft                               d/           |t                               d0           nt                               d1           t           xj        d z  c_        ||S  |            S t           j        r2t                               d2|d u           t           xj        d z  c_        ||                                 |	d         }|                               |S )6NrW  z_add_symbols:ztdecls:r   c              3  4   K   | ]}t          |          V  d S r2  rp  rp  s     r4  r  z&Symbol._add_symbols.<locals>.<genexpr>B  s(      2Q2Qa3q662Q2Q2Q2Q2Q2Qr6  z
nn:       z
decl:     z
location: r  r  r-  r  r  r  r   rg  r  rw   r  c           	        t           j        rt           xj        dz  c_        t                               d           t           xj        dz  c_        t                               d|           t                               d|           t                               d|           t           xj        dz  c_        t          | |||d d d           S )NrW  z'_add_symbols, onMissingQualifiedSymbol:templateParams:identOrOp:     ztemplateARgs:  r  r  r  r  rg  r.  r+  r5  )r-  rB  r(  r)  r  r  r  rg  s       r4  rj  z5Symbol._add_symbols.<locals>.onMissingQualifiedSymbolG  s     " )##q(##""#LMMM##q(##""#4nEEE""#4i@@@""#4lCCC##q(##)7'3"&T3 3 3 3r6  TFrl  rm  rV  rW  rX  rY  r[  r   z _add_symbols, result, no symbol:r{  r|  ztemplateArgs:  zdeclaration:   zlocation:      r}  r  z_add_symbols, result, symbols:znumber symbols:zno declarationz
#noDecl:  z
#withDecl:z
#dupDecl: c            	         t           j        rt                               d           t          j        j        j        j                  } t           j        rt                               d           | S )Nz begin: creating candidate symbolr}  z end:   creating candidate symbol)r-  rB  r)  r  r  r  rg  )r,  r.  r+  r5  lookupResults    r4  makeCandSymbolz+Symbol._add_symbols.<locals>.makeCandSymbol  s    " G""#EFFF<#<&2&<+7+F)5)B(3$+$8 8 8F " G""#EFFFMr6  r,  
candSymbolr0  c                    t           j        rYt           xj        dz  c_        t                               d           t           xj        dz  c_        t           xj        dz  c_        d|_        t          |           )NrW  redeclarationr  T)r-  rB  r(  r)  r   r+  )r,  r  r.  s     r4  handleDuplicateDeclarationz7Symbol._add_symbols.<locals>.handleDuplicateDeclaration  sx    & -''1,''&&777''1,''''1,''
 .2
*+FK@@@r6  r  zcandId:zoldId: zno match, no emptyz$result is already created candSymbolzresult is makeCandSymbol()zAno match, but fill an empty declaration, candSybmol is not None?:
r  r-  r  r  r  r   rg  r  rw   r  )rw   r-  )r,  r-  r  r-  rw   r0  )r-  rB  r(  r)  r  rw  rt  r
  rJ  r  r  rg  r  r.  r}  r   r  r  rH  r>  )r3  r  rh  r.  r+  r5  rj  r
  r,  noDeclwithDecldupDeclr   r  r  r  candIdoldIdr  s      ```            @r4  rC  zSymbol._add_symbols9  s   
  	>1$///1$y#((2Q2Q=2Q2Q2Q*Q*QRRR|Z888|[999<G<<d<<===	3 	3 	3 	3" **:}+CGK>B=B5:9>FJ<A + C C '''|+,,w<<1" )""#EFFF##q(##""#4l6QRRR""#4l6LMMM""#4l6OPPP""#4kBBB""#EW#E#Et#E#EFFF##q(##<#<&2&<+7+F)5)B(3$+$8 8 8F " )##q(##M 	%?@@@1$0#g,,???1$ 	" )""#3444##q(## 1: 	# 	#A}$a    " #q!!!!"""" 	;|S[[999|S]];;;|S\\:::	 	 	 	 	 	 	 	 	 x==AJJ'))JA A A A A A %338}}))))**8A;
CCC !..00F" 6""9f555" 
C 
C %0J>>..vzBBB*88::& 9&&y%888U??..vzBBB v;;!" )""#7888)&&'MNNNN&&'CDDD##q(##%!!%~'''" )""Wd*   ##q(##%!!### AYF {GT:::Mr6  r  docnamesr  re  r7   c                	   t           j        r/t           xj        dz  c_        t                               d           |J d }t           j        rt           xj        dz  c_        |j        D ]1}t           j        rMt                               d|                    t           j                             t           xj        dz  c_        |j        rH || |           t           j        r/t                               d           t           xj        dz  c_        |                     |j        |j	        |j
        ddddd          }t          |          }t           j        r(t                               dt          |                     d	 |D             }t           j        r(t                               d
t          |                     t          |          dk    r/ || |           t           j        rt           xj        dz  c_        d }	|j        /t           j        rt                               d           |d         }	n|j                                        }
t           j        rt                               d|
           |D ]|}|j        )t           j        rt                               d           |}	2|j                                        }t           j        rt                               d|           ||
k    r|}	 n}t           j        rt           xj        dz  c_        |	 || |           |j        rN|j        |v rD|	j        s(|	                    |j        |j        |j                   n|	j        |j        k    rit%          |	j                  }t'          d          }||	j        |	j        |	j        j        |fz  }t*                              ||j        |j        f           n|j        j        |	j        j        k    r)|j        j        dv r|	j        j        |j        j        k    rnYd}|d|	                    d          z   z  }|d|                    d          z   z  }t*                              ||j                   |	                    |||           3t           j        rt           xj        dz  c_        d S d S )NrW  zmerge_with:c                p    | j                             |           | |_        |                                 d S r2  )r:  r}  r  r,  )r3  
otherChilds     r4  unconditionalAddz+Symbol.merge_with.<locals>.unconditionalAdd  s8    N!!*--- $J))+++++r6  zotherChild:
r   F)r  r  rg  rV  rW  rX  rY  r[  zraw candidate symbols:c                     g | ]}|j         	|S r@  )r   r  r   s     r4  r  z%Symbol.merge_with.<locals>.<listcomp>  s     FFFQA4EFqFFFr6  z non-duplicate candidate symbols:r   zno declaration in other childz
queryId:  zempty candidaterf  RDuplicate C++ declaration, also defined at %s:%s.
Declaration is '.. cpp:%s:: %s'.locationr@  rA  z1Internal C++ domain error during symbol merging.
z
ourChild:
z
otherChild:
r  )r-  rB  r(  r)  r:  rd  r   r\  r  r  rg  rt  rJ  r.  r  r+  r>  r5  r7  r   r  r%  warningr  r  
merge_with)r3  r  r  re  r  r  candiateIterre  r
  ourChildqueryIdr,  r  r  msgs                  r4  r  zSymbol.merge_with  s    	.1$}---   	, 	, 	,  	%1$/ X	; X	;J" )""?J4H4HI\4]4]^^^##q(##)   z222& -&&'8999''1,''33$.)8'4"'5#!& 4 ( (L l++J" N""#;S__MMMFF*FFFG" U""#Es7||TTT7||q    z222& -''1,''H%-& H&&'FGGG"1:$0>>@@& >&&|W===%  F)1!. B"../@AAA $* #/==??F* A**<@@@((#) ) " )##q(##  z222% I**<*H*H+ I(()?)3);Z_N N N N%);;;x344D @ A AC!18=!)!5!CT!K KCNN3*2Djo1VNWWWW".9$0;< <&2=>? ?$O7:;L;XXX  S}x/A/A!/D/DDD0:3G3G3J3JJJsZ5GHHH
Hc:::: 	%1$	% 	%r6  Nr  r  c                
   t           j        r/t           xj        dz  c_        t                               d           |r|j        }ng }|                     ||d d d           }t           j        rt           xj        dz  c_        |S )NrW  z	add_name:)r.  r+  r5  )r-  rB  r(  r)  r  rC  )r3  r  r  rh  r  s        r4  add_namezSymbol.add_name\  s     	,1${+++ 	*4MMM
M,0$T   K K 	%1$
r6  c                B   t           j        r/t           xj        dz  c_        t                               d           |J |J |J |j        }|j        r|j        j        }ng }|                     |||||          }t           j        rt           xj        dz  c_        |S )NrW  zadd_declaration:)r-  rB  r(  r)  r  r  r  rC  )r3  r.  r+  r5  r  rh  r  s          r4  add_declarationzSymbol.add_declarationk  s     	31$1222&&&""" %
% 	'6@MMM
M;QUVV 	%1$
r6  c                   t           j        rt           xj        dz  c_        t                               d           t           xj        dz  c_        t                               d|           t                               d|           t                               d|           t                               d|           t                              |                     t           j        dz             d           t           xj        d	z  c_        | }|t           j        rt           xj        d	z  c_        t                               d
           t                              |                    t           j        dz             d           t           xj        d	z  c_        |r|j        |k    r|S |r|j        n|j	        }|D ]}|j        |k    r|c S |sn	|j
        }|d S )NrW  zfind_identifier:zidentOrOp:       zmatchSelf:       zrecurseInAnon:   zsearchInSiblings:r   r#  r  ztrying:)r-  rB  r(  r)  r%  r&  rd  r  rR  r:  r8  )r3  r  rW  rX  r[  currentr.  r   s           r4  rs  zSymbol.find_identifier}  s     		%1$12221$2I>>>2I>>>2MBBB24DEEELL(;a(?@@bLIII1$!" )##q(##""9---W..v/BQ/FGGRPPP##q(## W.);;8E\w447K\H  ;)++HHH ,# *G ! tr6  c           
        t           j        rDt           xj        dz  c_        t                               d           t           xj        dz  c_        | }|j        D ]G\  }}}|8d }|j        D ]+}|j        
|j                                        |k    r|} n,|}n*|j        }|j	        }	|
                    |||	dddd          }t           j        rt                               d|           t                               d|           t                               d|           |=t                              |                    t           j        dz             d	           nt                               d
           |$t           j        rt           xj        dz  c_         d S It           j        rt           xj        dz  c_        |S )NrW  zdirect_lookup:Frr  zname:          r{  zid:            r   r#  z	not foundr  )r-  rB  r(  r)  r  r:  r.  r  r  rg  r^  r%  r&  rd  )
r3  rn  r   r  r  r<  r  candr  rg  s
             r4  direct_lookupzSymbol.direct_lookup  s    	%1$/0001$), 	 	%D.#K  D'/ '55773>>" ?  N	#0..y/=|AF9>=BJO / Q Q " 4""#4d;;;""#4nEEE""#4c:::=LLV-@1-D!E!E2LNNNN&&{333y& -''1,''tt   	%1$r6  r  tuple[list[Symbol], str]c                    t           j        rWt           xj        dz  c_        t                               d           t           xj        dz  c_        t                               d           t                              |                     t           j        dz             d           t                               d|           t                               d|           t                               d|           t                               d	|           t                               d
|           t                               d|           t                               d|            G d dt                    d"fd}	 |                     |||d||||d|
  
        }	n# $ r Y dS w xY w|	#t           j        rt           xj        dz  c_        dS t          |	j
                  }
t          |
          dk    r%t           j        rt           xj        dz  c_        |
d fS |	j        j        |	j        j        j        d k    rdS |	j                            |	j        d d |||d!          }t           j        rt           xj        dz  c_        ||gd fS dS )#NrW  z
find_name:r`  r   r#  znestedName:       ztemplateDecls:    ztyp:              ztemplateShorthand:zmatchSelf:        zrecurseInAnon:    zsearchInSiblings: c                      e Zd ZdS )8Symbol.find_name.<locals>.QualifiedSymbolIsTemplateParamNrC  r@  r6  r4  QualifiedSymbolIsTemplateParamr    s        Dr6  r  r  r-  r  r  r  r   rg  r  rw   r  c                :    | j         | j         j        dk    rd S )Nr@  )r.  r  )r  r  r  rg  r  s       r4  rj  z2Symbol.find_name.<locals>.onMissingQualifiedSymbol  s*     '3+6/II884r6  Fr  )NtemplateParamInQualifiedr  r  r   r@  rr  r  )r-  rB  r(  r)  r%  r&  rd  r~  rw  rt  r
  rJ  r  r.  r  r^  r  )r3  r  rh  r  rV  rW  rX  r[  rj  r  r  r,  r  s               @r4  	find_namezSymbol.find_name  s     	G1$|,,,1$w'''LL(;a(?@@bLIII3Z@@@3]CCC3S99935FGGG3Y???3]CCC35EFFF	 	 	 	 	Y 	 	 		 	 	 	 	 		4..z=/GKPBEAR9B=JJO@P / R RLL . 	4 	4 	4333	4 " )##q(##:<'((s88q==" )##q(##9$0<(4??RR77 *CC"D$/9'E D K K  	%1$8T>!:s    F   F)(F)c                   t           j        r/t           xj        dz  c_        t                               d           |j        }|j        r|j        j        }ng }dd}|                     |||d||||dd
  
        }	t           j        rt           xj        dz  c_        |	d S t          |	j	                  }
t          |
          dk    rd S t          |	j        |	j        |	j        |	j        |dd          }|                                }|
D ]A}|j        
|j                                        }||k    r|                                 |c S B|                                 d S )NrW  zfind_declaration:r  r-  r  r  r  r   rg  r  rw   r  c                    d S r2  r@  r~  s       r4  rj  z9Symbol.find_declaration.<locals>.onMissingQualifiedSymbol  s	     4r6  Fr  r   fakeDocnameForQuery*   r}  r  )r-  rB  r(  r)  r  r  r  rw  rt  r
  rJ  r  r  r  rg  r  r.  rH  )r3  r.  r  rV  rW  rX  r  rh  rj  r  r
  querySymbolr  r,  r  s                  r4  find_declarationzSymbol.find_declaration  s     	41$2333 %
% 	'6@MMM	 	 	 	 **:}+CGL>A=N5>9FFK<A + C C  	%1$4|+,,w<<14L$='3'=,8,G*6*C)4%:"$& & & ++-- 	 	F!)'5577F  ""$$$ ! 	tr6  indentc                "   t           j        |z  g}| j        s|                    d           nm| j        r^|                    t          | j                             |                    d           |                    t           j        |z             | j        r(|                    t          | j                             n'|                    t          | j                             | j        r'|                    t          | j                             | j        r}|                    d           | j	        r|                    d           |                    d| j        j
        z   dz              |                    t          | j                             | j        rD|                    d           |                    | j                   |                    d           |                    d           d	                    |          S )
Nr  
z: z!!duplicate!! r(  r  z	(r4  r   )r-  r'  r  r}  r  r7  r  r.  rg  r   r  r+  r  )r3  r  r  s      r4  rd  zSymbol.to_stringH  s   )F23{ 	2JJt" @

3t233444

4   

65>???~ 2

3t~..////

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

3t011222 2

4   ' 1JJ/000

3!1!<<tCDDD

3t/00111< 	JJuJJt|$$$JJsOOO

4wws||r6  c                    |                      |          g}| j        D ]-}|                    |                    |dz                        .d                    |          S )NrW  r   )rd  r:  r}  r9  r  )r3  r  r  r   s       r4  r9  zSymbol.dumpd  s\    ~~f%%& 	+ 	+AJJqvvfqj))****wws||r6  )r{  r   rw   r0  rw   r0  )rn  r7  r  r   rw   r0  )r  r  r  r2  r  r3  rg  r   r.  r4  r+  r  r5  r6  rw   r0  )r.  r/  r+  r7  r5  re   rw   r0  r+  r7  rw   r0  )rw   rM  rg  )rw   r  r  )r  r  r  r   rg  r  rV  rB   rW  rB   rX  rB   rY  rB   rw   r-  )r  r  r  r   rg  r  rV  rB   rW  rB   rX  rB   rY  rB   r[  rB   rw   r  )r  r  rh  ri  rj  rk  rl  rB   rm  r7  rV  rB   rW  rB   rX  rB   rY  rB   r[  rB   rw   r	  )r  r  rh  ri  r.  r/  r+  r7  r5  re   rw   r-  )r  r-  r  r  re  r7   rw   r0  r2  )r  r  r  r  rw   r-  )r.  r/  r+  r7  r5  re   rw   r-  )
r  r  rW  rB   rX  rB   r[  rB   rw   r-  )rn  r  rw   r-  )r  r  rh  ri  r  r7  rV  rB   rW  rB   rX  rB   r[  rB   rw   r  )r.  r/  r  r7  rV  rB   rW  rB   rX  rB   rw   r-  )r  re   rw   r7  )%r=  r>  r?  r(  r'  rB  debug_show_treer  r!  staticmethodr)  r,  r0  r5  r>  r<  rH  rJ  rO  r  rR  r{  r  r^  r\  rw  rC  r  r  r  rs  r  r  r  rd  r9  __classcell__r1  s   @r4  r-  r-    s       LLO  @ @ @    \
$ 
$ 
$ 
$/ / / / / /
&1 &1 &1 &1P1 1 1 1 "% "% "% "%H   % % % %"0 0 0 0
 / / / X/   (= = = =    S% S% S% S%jEK EK EK EKNv v v vpi% i% i% i%X HL       $   >' ' ' 'RK K K KZ4 4 4 4l   8       r6  r-  c                     e Zd Zedwd            Zed             Zed             ZdwdZdxdZdyd
Z	dydZ
dzdZd{dZd|dZd}dZd~dZddZdydZdydZddZdd"Zdd#Zdd$Zdyd%Z	 ddd,Zdd.Zdd0Zddd4Zdd6Zdd8Zdd;Zdd?ZdddAZ ddEZ!	 dddGZ"dddLZ#dddNZ$ddPZ%ddRZ&ddTZ'ddVZ(ddXZ)ddZZ*dd\Z+dd^Z,dd`Z-ddbZ.dddZ/ddgZ0	 dddmZ1ddpZ2ddrZ3ddtZ4ddvZ5dHS )DefinitionParserrw   r7  c                    dS )NC++r@  r:  s    r4  languagezDefinitionParser.languagel  rL  r6  c                    | j         j        S r2  )configcpp_id_attributesr:  s    r4  id_attributeszDefinitionParser.id_attributesp  s    {,,r6  c                    | j         j        S r2  )r  cpp_paren_attributesr:  s    r4  paren_attributesz!DefinitionParser.paren_attributest  s    {//r6  c                0   | j         dk    rd S | j        }| xj        dz  c_        d}	 | j        r|                     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_        \| j        || j                 S )N"rW  FTz$Unexpected end during inside string.\)current_charposeoffail
definition)r3  startPosescapes      r4  _parse_stringzDefinitionParser._parse_stringx  s    ##48A
	x 		@AAAA"c))&)A"d**HHMHH
	 x011r6  r  c                    d fd}                                                        d          rt                      S                      d          rt          d          S                      d          rt          d	          S  j        }                     t                    rJ                     t                    }t           j	        | j                           }|r|S  ||          S t          t          t          t          fD ]e}                     |          rN                     t                    }t           j	        | j                           }|r|c S  ||          c S f                                 }| |t!          |                    S                      t"                    r j                            d
          } j                            d          }		 t)          ||	          }
nO# t*          $ r"}                     d|z             Y d }~n(d }~wt.          $ r                      d           Y nw xY w ||
          S d S )Nr  r  rw   c                                         t                    s| S t          j                  }t	          | |          S r2  )matchudl_identifier_rerF  matched_textr  )r  r  r3  s     r4  _udlz-DefinitionParser._parse_literal.<locals>._udl  s?    ::/00  "$"344E(%888r6  rm   r   Tr^   FrW  r  z8Can not handle character literal. Internal error was: %szJCan not handle character literal resulting in multiple decoded characters.)r  r  rw   r  )skip_ws	skip_wordr  r  r  r  r!   r"   r  r  r   r#   r%   r'   r&   r  r  r    
last_matchgroupr  UnicodeDecodeErrorr  r   )r3  r  r  	hasSuffixfloatLitregexintLitstringrf  r  charLitr   s   `           r4  _parse_literalzDefinitionParser._parse_literal  s   	9 	9 	9 	9 	9 	9 	>>)$$ 	'$&&&>>&!! 	+$T***>>'"" 	,$U+++h::&'' 	&

#:;;I'DH(EFFH &tH~~%'(*:< 	( 	(Ezz%   ( JJ'ABB	)$/#dh,*GHH (!MMM4<<'''( ##%%4(00111 ::o&& 
	!_**1--F?((++DH(66% Z Z Z		TWXXYYYYYYYY7 H H H		 G H H H H HH 4== ts   /H   
I
H''"IIr  c                2   | j         dk    rd S | xj        dz  c_        |                                  |                     d          r|                     t
                    s|                     d           | j        }|                                 }| 	                    d          s|                     d           t          d ||          S | j        }	 |                                  |                                 }|                                  |                     t
                    s|                     d           | j        }|                                  |                     d          s|                     d           n# t          $ r}|| _        	 |                                 }|                                  | 	                    d          s|                     d	           n/# t          $ r"}|                     |d
f|dfgd          |d }~ww xY wt          |          cY d }~S d }~ww xY w| 	                    d          rt          ||d           S |                     t
                    s|                     d           || j        k    r!|                     d|d| j        d           |                                 }|                                  | 	                    d          s|                     d           t          |||          S )Nr2  rW  r3  z6Expected fold operator after '...' in fold expression.r4  z'Expected ')' in end of fold expression.z@Expected fold operator after left expression in fold expression.z6Expected '...' after fold operator in fold expression.z0Expected ')' in end of parenthesized expression.zIf fold expressionzIf parenthesized expressionz5Error in fold expression or parenthesized expression.z=Expected fold operator or ')' after '...' in fold expression.z)Operators are different in binary fold: 'z' and ''.z+Expected ')' to end binary fold expression.)r  r  r  skip_string_and_wsr  _fold_operator_rer  r  _parse_cast_expressionskip_stringr*  r   _parse_expression_make_multi_errorr=  )r3  r,  r-  r  r+  eFoldr  eExprs           r4  _parse_fold_or_paren_expressionz0DefinitionParser._parse_fold_or_paren_expression  sG    ##4A""5)) 	4::/00 T		RSSS"B3355I##C(( E		CDDDtR333h	%LLNNN2244HLLNNN::/00 ^		\]]]"BLLNNN**511 T		RSSS 	% 	% 	%DH	W,,..'',, RIIPQQQ" W W W,,019:. KL L RWWW
  $$$$$$$$	% C   	3xT222zz+,, 	WIIUVVV"""IIIT...0 1 1 1//11	$$ 	EIICDDD8R333sD   B0F 
H2H-AG*)H-*
H4HHH-'H2-H2c                F   |                                   |                                 }||S |                                   |                     d          rt                      S |                                 }||S |                                 }|t          |          S d S r%  )r  r  r  r#  r  _parse_nested_namerM  )r3  r  rE  s      r4  _parse_primary_expressionz*DefinitionParser._parse_primary_expression  s     	!0022?J>>&!! 	$!###2244?J$$&&>"2&&&tr6  r  openclose4tuple[list[ASTExpression | ASTBracedInitList], bool]c                   |                                   |                     |          sdS |                     |          rg dfS g }d}	 |                                   |                                 }|                                   |                     d          r#|                    t          |                     n|                    |           |                                   |                     |          rnW|                     d          s|                     d| d| d           | j        |k    r|d	k    r| xj        d
z  c_        d}n
||fS )Nr  FTr3  r   z	Error in z, expected ',' or 'r  r)  rW  )	r  r  r  _parse_initializer_clauser}  r  r  r  r  )r3  r  r  r  r  r  r>  s          r4  _parse_initializer_listz(DefinitionParser._parse_initializer_list  sn    	&&t,, 	:E"" 	u99;	LLNNN1133DLLNNN&& #1$778888T"""LLNNN&& **3// J		HdHHuHHHIII E))esllA $!	" m##r6  r  c                \    |                      ddd          \  }}|d S t          |          S )Nzparenthesized expression-listr2  r4  )r  r  r  s      r4  _parse_paren_expression_listz-DefinitionParser._parse_paren_expression_list:  s@      $;;<[<? F  F}=4&&&r6  r/  c                ^    |                                  }||S |                     d          S NF
inTemplate)_parse_braced_init_list_parse_assignment_expression)r3  bracedInitLists     r4  r  z*DefinitionParser._parse_initializer_clauseG  s6    5577%!!00E0BBBr6  r  c                ^    |                      ddd          \  }}|d S t          ||          S )Nzbraced-init-listr(  r)  )r  r  r  s      r4  r  z(DefinitionParser._parse_braced_init_listM  s=      $;;<NPSUXYY}=4 666r6  r  c                Z    |                                  }||S |                                 S r2  )r  r  )r3  parens     r4  *_parse_expression_list_or_braced_init_listz;DefinitionParser._parse_expression_list_or_braced_init_listU  s2     1133L++---r6  r  c                    d }d }                                   d }t          D ]}                     |          r|} n|#d}                     d          s                     d|z                                  d          }                                                        d          s                     d|z                                  d          s                     d|z             d- fd}                     dg|          }                                                        d          s                     d|z             t          |||          }ny                     d          rfd}                     d          s                     d            j	        }	                      d          }t          |d          }                     d          s                     d           n# t          $ r}	| _	        	 d- fd}                     dg|          }t          |d          }                     d          s                     d           ng# t          $ rZ}
| _	        d}|dz  }g }|                    |	df           |                    |
df                                ||          |
d }
~
ww xY wY d }	~	nd }	~	ww xY w j	        }	                                  }d}n# t          $ r}| _	        	                      dd          }d}                                    j        dk    r  j        dk    r                     d           ng# t          $ rZ}| _	        d}|dz  }g }|                    |d f           |                    |df                                ||          |d }~ww xY wY d }~nd }~ww xY wg }	                                    |d!v r                     d"          ru                                 }                                                        d#          s                     d$           |                    t#          |                                          d%          r                     d&          r xj	        d'z  c_	        n^                     d(          r xj	        d)z  c_	        n8                                 }|                    t'          |                     =                     d*          r^                     d&          r xj	        d)z  c_	        n8                                 }|                    t)          |                                          d+          r#|                    t+                                                      d,          r#|                    t-                                                                   }|$|                    t1          |                     Z	 t3          ||          S ).Nr  r   zExpected '<' after '%s'.Fr   z Expected '>' after type in '%s'.r2  zExpected '(' in '%s'.rw   r  c                 ,                                      S r2  r  r:  s   r4  parserz:DefinitionParser._parse_postfix_expression.<locals>.parser  s    --///r6  r4  zExpected ')' to end '%s'.r   zExpected '(' after 'typeid'.T)r  z%Expected ')' to end 'typeid' of type.c                 ,                                      S r2  r  r:  s   r4  r  z:DefinitionParser._parse_postfix_expression.<locals>.parser  s    #55777r6  z+Expected ')' to end 'typeid' of expression.zError in 'typeid(...)'.z Expected type or expression.If typeIf expressionr>  operatorCasttypeOperatorCastr(  z3Expecting '(' or '{' after type in cast expression.zError in postfix expression,z% expected primary expression or type.zIf primary expression)r>  r  r   rd  re  z*Expected ']' in end of postfix expression.rm  r   r  z..rV  r   r   r   rw   r  )r  r  skip_word_and_wsr  r  _parse_typer  _parse_expression_fallbackr  r  r  r   r}  r  r  r  r  r`  r  rj  rr  rx  r  r  r  r  )r3  
prefixTyperf  r  r   r  r  r>  r  eTyper  headererrorseOutereInnerr  r  r  s   `                 r4  _parse_postfix_expressionz*DefinitionParser._parse_postfix_expression]  s   , 
" 	 	A$$Q''  J##C(( =		4t;<<<""5))CLLNNN**3// E		<tCDDD##C(( :		1D89990 0 0 0 0 022C5&AADLLNNN##C(( >		5<===$T355FF""8,, 6	M!J**3// :		8999(CL&&u--"3t444'',, GIIEFFF" L L LL8 8 8 8 8 8::C5&IID&tE:::F++C00 Q		"OPPP& L L L"DH6F==FFMM5)"4555MM5/":;;;00@@eKLL& (CM7799#

" M M MM "--e^DDF!3J
 LLNNN(C//D4E4L4L		"WXXX& M M M"DH;FEEFFMM6+B"CDDDMM69"566600@@fLMM0 )+	'	LLNNN777**3// 1133DLLNNN++C00 P		"NOOO$$_T%:%:;;;##C(( 
!'',, 	!A))$// !A#6688!(()9$)?)?@@@ ##D)) !'',, !A#6688!(()B4)H)HIII ##D)) $$]__555##D)) $$]__555AACCC  !3C!8!8999fi000s}   /AH 
KKAI,+K,
K6AKKKK)L   
O
OAM*)O*
O4AO		OOOc                	   |                                   t          D ]_}|d         dv r|                     |          }n|                     |          }|r&|                                 }t          ||          c S `|                     d          rj|                     d          r|                     d          s|                     d           | 	                    t                    s|                     d           t          | j                  }|                                   |                     d          s|                     d	           t          |          S |                     d          rc|                     d
          }|                                   |                     d          s|                     d           t          |          S |                                 }t#          |          S |                     d          r|                     d          s|                     d           |                     d
          }|                                   |                     d          s|                     d           t%          |          S |                     d          r|                     d          s|                     d           |                                 }|                                   |                     d          s|                     d           t)          |          S | j        }|                     d          }|                                   |                     d          s|| _        nd}|                     d          r|                     d           |r.|                     d           }	|                     d
d          }
n|                     d           |                                 }t3          ||t5          |	|
          |          S | j        }|                     d          }|                                   |                     d          s|| _        nf|                     d          }|r*|                     d          s|                     d           |                                 }t7          |||          S |                                 S )Nr   r  rz   r3  r2  z Expecting '(' after 'sizeof...'.z%Expecting identifier for 'sizeof...'.r4  z!Expecting ')' to end 'sizeof...'.FnamedzExpecting ')' to end 'sizeof'.r;   zExpecting '(' after 'alignof'.zExpecting ')' to end 'alignof'.rj   zExpecting '(' after 'noexcept'. Expecting ')' to end 'noexcept'.r  ri   TzYSorry, neither new-placement nor parenthesised type-id in new-epression is supported yet.r  r  	paramModezASorry, parenthesised type-id in new expression not yet supported.rU   rd  re  z(Expected ']' in array delete-expression.)r  _expression_unary_opsr  r  r  r  r  r  r  r  r$   rF  r  r  r  r  _parse_unary_expressionr  r  r  r  r  _parse_decl_specs_parse_declaratorr  r  r  r  r  )r3  r,  r  r>  r  r  r  r  r  r  r  r  r  s                r4  r%  z(DefinitionParser._parse_unary_expression  s    	' 	0 	0B!u}}nnR((&&r** 02244%b$/////0   ** 	'&&u-- 	1..s33 BII@AAAzz-00 GIIEFFF%d&788'',, CIIABBB)%000&&s++ *&&U&33'',, @II>???$S)))//11D &&&  ++ 	'**3// <		:;;;"""//CLLNNN##C(( =		;<<<!#&&&  ,, 	)**3// =		;<<<))++DLLNNN##C(( >		<==="4(((h!!$''$$U++ 	RDHH K&&s++ @ 		 ? @ @ @  _ 222>>	--EU-KK		]^^^AACCCfk79d3K3KSQQQh!!$''$$X.. 	6DHH++C00E FT44S99 F		DEEE..00D 555--///r6  c                j   | j         }|                                  |                     d          r	 |                     d          }|                     d          s|                     d           |                                 }t          ||          S # t          $ r}|| _         	 |                                 cY d }~S # t          $ rL}g }|	                    |df           |	                    |df           | 
                    |d          |d }~ww xY wd }~ww xY w|                                 S )Nr2  Fr4  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}  r  )r3  r  r  r>  exCastexUnaryerrss          r4  r  z'DefinitionParser._parse_cast_expressionQ  sp   hC   	2[&&u--'',, BII@AAA2244"3---" 	[ 	[ 	[[7799999999& [ [ [DKK)B CDDDKK*? @AAA001LN NSZ[	[		[ //111s=   A"B 
DD'C :D 
D
ADDDDr  rB   c                ,    dfd	 | d
|          S )Nr3  r  opIdre   r  rB   rw   r  c                    dz   t          t                    k    rd fd}nd
 fd}g }g }|                     ||                     	                                   |r j        d
k    rnȉ j        }d}t                   D ]}|d         dv r                     |          s"n                     |          s9|dk    r j        dk    r xj        dz  c_         nR	  ||          }	|                    |	           |                    |           d	} n# t          $ r
 | _        Y w xY w|snt          ||          S )NrW  r  rB   rw   r  c                ,                                     S r2  )r  r  r3  s    r4  r  zYDefinitionParser._parse_logical_or_expression.<locals>._parse_bin_op_expr.<locals>.parserx  s    66888r6  c                &     dz   |           S )NrW  r   r@  )r  _parse_bin_op_exprr-  r3  s    r4  r  zYDefinitionParser._parse_logical_or_expression.<locals>._parse_bin_op_expr.<locals>.parser{  s    --dD1HTTTTr6  r   Tr   Fr   r^  r   r  rB   rw   r  )
rJ  _expression_bin_opsr}  r  r  r  r  r  r   r  )r3  r-  r  r  r  r  r  oneMorer,  r>  r2  s   ``        r4  r2  zIDefinitionParser._parse_logical_or_expression.<locals>._parse_bin_op_expru  s   ax3233339 9 9 9 9 9 9U U U U U U U UECLL:666777 $"3s":":h-d3 ' 'B!u((#~~b11 %$%  $//33 %$SyyT%6#%=%=A'%v<<<T***

2"&* ' ' '#&' 78  s+++s   '8D!!D54D5r   r   )r3  r  r-  re   r  rB   rw   r  r@  )r3  r  r2  s     @r4  _parse_logical_or_expressionz-DefinitionParser._parse_logical_or_expressioni  s<    '	, '	, '	, '	, '	, '	,P "!$jAAAAr6  
orExprHeadASTConditionalExpr | Nonec                H   |                                   |                     d          sd S |                                 }|                                   |                     d          s|                     d           |                     |          }t          |||          S )Nr  r  z=Expected ":" after then-expression in conditional expression.)r  r  r  r  r  r  )r3  r7  r  r  r  s        r4  "_parse_conditional_expression_tailz3DefinitionParser._parse_conditional_expression_tail  s    
 	$$ 	4))++$$ 	WIIUVVV44Z@@!*hAAAr6  c                4   |                      |          }|                     ||          }||S t          D ]_}|d         dv r|                     |          s"n|                     |          s9|                                 }t          |||          c S |S )Nr   r   anox)r6  r:  _expression_assignment_opsr  r  r  r.  )r3  r  r+  condExprr,  r-  s         r4  r  z-DefinitionParser._parse_assignment_expression  s     44
4KK::8ZPPO, 	> 	>B!u~~b))  ''++ 6688I$Xr9=====r6  c                f    |                      |          }|                     ||          }||S |S Nr   )r6  r:  )r3  r  orExprr>  s       r4  _parse_constant_expressionz+DefinitionParser._parse_constant_expression  s?     22j2II::6:NNOr6  c                .   |                      d          g}	 |                                  |                     d          sn*|                    |                      d                     Tt	          |          dk    r|d         S t          |          S )NFr   Tr   rW  r   )r  r  r  r}  rJ  r6  r8  s     r4  r  z"DefinitionParser._parse_expression  s     22e2DDE	NLLNNN##C(( LL::e:LLMMM		N
 u::??8O&&&r6  Tr$  r  r  Callable[[], ASTExpression]allowc                f   | j         }	  |            S # t          $ r3}|r| j        s |                     d|z             || _         Y d }~nd }~ww xY w|J |                                  | j         }|                     t                    r| j        }nddddd}g }	| j        st          |	          dk    r
| j
        |v rny| j
        |v r!|	                    || j
                            n8t          |	          dk    r%| j
        |	d         k    r|	                                 | xj         d	z  c_         | j        t          |          dk    r| j        r|                     d
|z             | j        || j                                                  }t!          |                                          S )NzBParsing of expression failed. Using fallback parser. Error was:
%sr4  r)  re  r   )r2  r(  rd  r   r   r  rW  z0Could not find end of expression starting at %d.)r  r   allowFallbackExpressionParsingwarnr  r  
_string_rer  r  rJ  r  r}  rJ  r  r  stripr?  )
r3  r$  r  rE  prevPosr   r  r  bracketsr
  s
             r4  r  z+DefinitionParser._parse_expression_fallback  s    (		688O 	 	 	   C II (*+, - - -DHHHHHH	 8::j!! 	?%EE !s3??H!#Gh LLA%%$*;s*B*B$00NN8D,=#>????\\A%%$*;wr{*J*JKKMMMA h  3xx!|||		L$% & & &OHTX$56<<>>Eu{{}}---s   	 
A)AArE  c                   |                                   |                     t                    rt          | j                  S dD ]}|                     |          s|                                   |                     d          rI|                                   |                     d          s|                     d|z   dz              |dz  }t          |          c S |                     d          rf|                                   |                     t                    s|                     d           t          | j                  }t          |          S |                     d	d
          }t          |          S )N)ri   rU   rd  re  zExpected "]" after  "operator z["r   ri  z%Expected user-defined literal suffix.Fr  r  r  )r  r  _operator_rerV  r  r  r  r  r$   rF  rc  r  rk  )r3  r,  rG  r  s       r4  _parse_operatorz DefinitionParser._parse_operator  sr    ::l## 	9%d&7888 " 		* 		*B>>"%% LLNNN$$ '',, LII>CdJKKKd
%b))))) D!! 	2LLNNN::m,, C		ABBB&t'899J%j111 e>BBt$$$r6  r  c                B   |                                   |                     d          sd S |                     d          rt          g d          S g }g }d}	 | j        }d}d}	 |                     d          }|                                   |                     d          r/d}d}|                     d          s|                     d           nE|                     d          rd}n-|                     d	          rd}n|                     d
           |                    |           nV# t          $ rH}|                    |df           || _        	 | 	                    d          }	|                                   |                     d          r/d}d}|                     d          s|                     d           nE|                     d          rd}n-|                     d	          rd}n|                     d
           |                    t          |	                     nI# t          $ r<}|| _        |                    |df           d}
|                     ||
          |d }~ww xY wY d }~nd }~ww xY w|r|rJ n|rJ 9t          ||          S )Nr   r   FrW  r  r3  Tz3Expected ">" after "..." in template argument list.r   z6Expected "...>", ">" or "," in template argument list.zIf type argumentr   zIf non-type argumentz(Error in parsing template argument list.)r  r  r  r  r  r  r  r}  r   rB  rt  r  )r3  
prevErrorsrg  r}  r  parsedComma	parsedEndr  r   r  r  s              r4  _parse_template_argument_listz.DefinitionParser._parse_template_argument_list1  s+    	&&s++ 	4C   	."2u---
?A-	%(CKI%L''e'44**511 
X$(M $I++C00 Y		"WXXX%%c** X $II%%c** X"&KKIIVWWW##D))))" L L L!!1&8"9:::L ;;t;LLELLNNN..u55 
\(,$(	#//44 ] II&[\\\))#.. \$(		))#.. \&*		"Z[[[ ''(>u(E(EFFFF& L L L"DH%%q*@&ABBBGF00VDD!K	L GFFFF#L.  &&&&$$$$[-	%\ |];;;s>   $CD. .J9I<CH.-I<.
I487I//I44I<<JFmemberPointerr  c                $   g }g }|                                   d}|                     d          rd}	 |                                   t          |          dk    r|                     d          }nd}|                    |           d }|                     d          r|                                 }n|                     t                    s@|r)t          |          dk    r|                                 n	| 	                    d           | j
        }|t          v r| 	                    d	|z             t          |          }| j        }	 |                                 }	n:# t          $ r-}
|| _        d }	| j                            |
           Y d }
~
nd }
~
ww xY w|                    t#          ||	                     |                                   |                     d          s|r| 	                    d
           nt%          |||          S )NFr  TrW  r   r   rn   z#Expected identifier in nested name.z3Expected identifier in nested name, got keyword: %sz.Expected '::' in pointer to member (function).)r  r  rJ  r  r}  rP  r  r$   rJ  r  r  	_keywordsrF  r  rU  r   otherErrorsr  r  )r3  rV  r  r  r  r   r  rG  r  rg  exs              r4  r  z#DefinitionParser._parse_nested_nameq  s5   ,. "	D!! 	F%	LLNNN5zzA~~00<< X&&&59I$$Z00 6 0022		zz-00 E$ Ua!IICDDD!.
**II 02<= > > >)*55	 (C,#AACC" , , ,# ''++++++++, LL-iFFGGGLLNNN##D))   PIINOOOK%	L UIv666s   E! !
F+#FFr  c                	   d }d }g }d }g }|                                   |                     t                    rg| j        }|                    |           |dv r!||                     d| d| d           |}n|dv r!||                     d| d| d           |}n|dk    rKt          |          dk    r"|                     d| d|d          d           |                    |           n|dk    rWt          |          dk    r.|d         dk    r"|                     d| d|d          d           |                    |           n$|d	v r ||                     d| d| d           |}|                                   |                     t                    gt          |          dk    rd S |d
v r||                     d| d| d           ||                     d| d| d           t          |          dk    r/|                     d| dd                    |           d           nB|dk    rb||                     d| d| d           t          |          dk    r/|                     d| dd                    |           d           n|dk    r ||                     d| d| d           n|dv rb||                     d| d| d           t          |          dk    r/|                     d| dd                    |           d           nN|dk    ra||                     d| d| d           t          |          dk    r/|                     d| dd                    |           d           n|dk    r||                     d| d| d           t          |          dk    r/|                     d| dd                    |           d           t          |          dk    r;|d         dk    r/|                     d| dd                    |           d           n2|||                     d| d           nd| }t          |          g }||                    |           ||                    |           |	                    |           ||                    |           t          ||          S )N)r?   r   rB   rF   r   rG   rH   rI   re   r   r   r_   rW   r   r   r   r   zCan not have both z and rm  )ry   r   rx   r   rf   )
_Imaginary_Complex)r?   r   rB   r   rG   rH   rI   r   r   r   r   r  rF   re   )r   r   r_   rW   rW  zCan not have z without a floating point type.zUnhandled type )r  r  _simple_type_specifiers_rer  r}  r  rJ  r  r  extendr  )	r3  modifier
signednesswidthr  r  r   r  r  s	            r4  _parse_simple_type_specifiersz.DefinitionParser._parse_simple_type_specifiers  s   #!%
jj344 	!ALLOOO J J J
 ?IIA1AA3AAABBB,,,)IIH1HH:HHHIII

gu::??IIF1FF58FFFGGGQfu::??uQx6'9'9IIF1FF58FFFGGGQ000'IIF1FF8FFFGGGLLNNN7 jj344 	8 u::??4 H H H #		DsDDDDDEEE%		FsFFFFFGGG5zzQ		KsKK%KKKLLLF]]#		DsDDDDDEEE5zzQ		KsKK%KKKLLLE\\#		DsDDDDDEEE+++#		DsDDDDDEEE5zzQ		KsKK%KKKLLLG^^%		FsFFFFFGGG5zzQ		KsKK%KKKLLLH__%		FsFFFFFGGG5zzA~~		KsKK%KKKLLL5zzQ58v#5#5		KsKK%KKKLLL[#		S(SSSTTT)C))C %%% "
h'''!j)))%   ?c"""-eZ@@@r6  r  c                   |                                   |                                 }||S |                                   |                     d          r|                     d          s|                     d           |                     d          r8|                     d          s|                     d           t                      S |                                 }|                                   |                     d          s|                     d           t          |          S d }|                                   dD ]}|                     |          r|} n| 	                                }|                                   d }| 
                    d          rd}n|                     d          r|                     d          s|                     d	           |                     d          s|                     d
           |                     d          s|                     d           d}t          |||          S )NrS   r2  zExpected '(' after 'decltype'.r?   r4  z#Expected ')' after 'decltype(auto'.z%Expected ')' after 'decltype(<expr>'.)rJ   r~   rZ   r   r   z<Expected '(' after 'decltype' in placeholder type specifier.z@Expected 'auto' after 'decltype(' in placeholder type specifier.zAExpected ')' after 'decltype(auto' in placeholder type specifier.r   )r  rc  r  r  r  r  r  r  r  r  r  r  )r3  r  r>  rf  kr  r  s          r4  _parse_trailing_type_specz*DefinitionParser._parse_trailing_type_spec  sO    	0022?J 	  ,, 	5**3// <		:;;;$$V,, 9'',, EIICDDD6888))++DLLNNN##C(( C		ABBB.t444 A 	 	A$$Q''  ,,..
>>&!! 		/$OO"":.. 	/**3// Z		XYYY((00 ^		\]]]**3// _		]^^^.O&vz?KKKr6  r#  r  c                ^   |dk    rd S |                                   |                     d          s|dk    r|                     d           nd S g }|                                   |                     d          s%	 |                                   |                     d          rb|                    t	          d d                     |                                   |                     d          s|                     d	           n|                     d d
          }|                    t	          |                     |                                   |                     d          r|                     d          rn |                     d| j         d           $|                                   |                     d          }|                     d          }|s|                     d          }d }|                     d          rd}|s|                     d          rd}d }|                                   |                     d          r|                     d          rc| 	                    d          }|                                   |                     d          s|                     d           t          |          }nt          d           }|                                   |                     d          r|                     d          }	nd }	|                                   |                     d          }
|                     d          }|
s|                     d          }
|                                 }|                                   d }|dk    rv|                     d          ra|                                   d}|D ]}|                     |          r|} n|s+|                     dd                    |          z             t          ||||||	|
|||
  
        S )Nri   r2  r  z+Expecting "(" in parameters-and-qualifiers.r4  rW  r3  Tz6Expected ")" after "..." in parameters-and-qualifiers.singler  r  r   z8Expecting "," or ")" in parameters-and-qualifiers, got "z".rM   r   r   r   rj   Fr   r   r  r  r  r   r  z'Expected "%s" in initializer-specifier.z" or ")r  r  r  r}  r  _parse_type_with_initr  r  r  rB  r  r  _parse_attribute_listr  r  )r3  r#  r{  r  rM   r   r  r  r>  r  r  r  r  r  validr   s                   r4   _parse_parameters_and_qualifiersz1DefinitionParser._parse_parameters_and_qualifiers*  si   4$$ 	J&&		GHHHHt$$ 	99##E** KK 4T4 @ @AAALLNNN++C00 @		 #? @ @ @ 00t80LL055666##C(( ##C(( 		 8"&"38 8 8 9 9 9)9. 	%%g..((44 	3))'22ED!! 	G 	4++C00 	GJ'' 	6&&s++ 666u=='',, BII@AAA / 5 5 / 5 5D!! 	"!--E-::NN!N((44%%g.. 	,, H **,,
""t'7'7'<'<"LLNNN.E  ((++ "#KE  ,		=mmE**+, , , '(E7M>eUK1 1 	1r6  r  typedr  c                D   d}d}d}d}d}d}d}	d}
d}d}d}g }	 |                                   |s|r|                     d          }|r1|s|r|                     d          }|rM|sj|dv r0|                     d          rd}k|                     d          rd}|dk    r|                     d	          rd	}|                     d
          rd
}|s|dv r|                     d          }|r|	s|dv r|                     d          }	|	r|dk    r6|
s|                     d          }
|
r|s|                     d          }|r1|dk    r|s|                     d          }|rR|s|                     d          }|rm|s|                     d          }|r|s|                     d          }|rd}|                     d          rk|                     d          }|s|                     d           |                                   |                     d          s|                     d           t          |          }4|                                 }|r|                    |           a	 t          |||||||	|
|||t          |                    S )zJust parse the simple ones.NrW  rM   r   )r%  r  r{   r]   r%  rg   rt   )r  r%  rd   rO   rP   r   r  rN   ra   r   r[   r2  Fr   z=Expected constant expression after '(' in explicit specifier.r4  z'Expected ')' to end explicit specifier.)r  r  r  r  rB  r  r  _parse_attributer}  r  r   )r3  r  rn  r  r   rd   r   r  rN   rO   rP   r   rM   ra   r  r[   r>  attrs                     r4  _parse_decl_specs_simplez)DefinitionParser._parse_decl_specs_simple  s   			J	LLNNN U w//   >>*55  222~~h// !"* ~~h// !"* H$$~~i00 !"+ >>*-- (G e'===11  *@!@!@ NN;77	     ! ${ ; ;I  ! " !"&.."@"@K" ! 
""  ! ${ ; ;I  !  !!^^H55F !  !"nnY77G ! # !#44Z@@H !.2++C00 U#'#B#Be#B#T#TD#' E $		 +D !E !E !E LLNNN#'#3#3C#8#8 U $		*S T T T'6t'<'< ((**D T"""!';".	9i"*E6;KE;R;RT T 	Tr6  r  c                    |r|dvrt          d|z            	 |                     ||          }d }|r+|                                 }|                     ||          }nd }t          ||||          S )Nr  r%  r  r@  #Internal error, unknown outer "%s".)r~  rr  rf  r  )r3  r  rn  r  r  r  s         r4  r&  z"DefinitionParser._parse_decl_specs  s     	OKKK E MNNN	 11%??	
 	5577H66ueDDJJHE9j(CCCr6  r  
bool | str6ASTDeclaratorNameParamQual | ASTDeclaratorNameBitFieldc                    |dk    r6 j         }	                                  }n# t          $ r | _         d }Y nw xY w|dk    r                     t                    rmt           j                  }t          |d           }t          |gdgd          } 	                                  j
        dk    r                     d           nd }n|r                                 }nd }g }	  	                                 |rˉ                     d          r 	                                                      d	          r#|                    t          d                      xd fd}	                     d	g|	          }
                     d	          s                     d           |                    t          |
                     	                      |          }|mt#          |          dk    rZ|rX|dk    rR|rP 	                                                      d          r'                     d          }t'          ||          S t)          |||          S )Nmayberh  Frz  r  z Unexpected ':' after identifier.rW  rd  re  rw   r  c                 ,                                      S r2  r  r:  s   r4  r  z>DefinitionParser._parse_declarator_name_suffix.<locals>.parser"  s    11333r6  z&Expected ']' in end of array operator.r   r  r   r^  rE  r  )r  r  r   r  r$   rF  r  r  r  r  r  r  r  r}  r  r  rm  rJ  rB  r\  r?  )r3  r  r#  rn  r  r@  rG  r  rA  r  r  rC  r  s   `            r4  _parse_declarator_name_suffixz.DefinitionParser._parse_declarator_name_suffix  s    G(C0022"    hzz-(( 	*4+<==
*:t<<&uugeDDD$++II@AAA 	,,..FFF	LLNNN ))#.. ##C(( OOHTNN3334 4 4 4 4 477vFF'',, HIIFGGG00099)DD	X!!3!3 Of,,,##C(( O::e:LLD4FNNNN)(4=? ? ? 	?s   % ;;r&  c                	   |dvrt          d|z            g }|                                  |r|                     d          r|                                  d}d}g }	 |s|                     d          }|r|s|                     d          }|r5|                                 }||                    |           a	 |                     |||          }	t          |	||t          |                    S |rQ|                     d	          r<| 	                                }
|                     |||          }	t          |	|

          S |r<|                     d          r'|                     ||d          }	t          |	          S |rP| j        dk    rD|dk    rt          d g d           S | j        }	 |                     |||          }|S # t           $ r}|                    |df           || _        	 | j        dk    sJ |                     d           |                     |||          }|                     d          s|                     d           |                     dd|          }	t%          ||	          cY d }~S # t           $ r<}|| _        |                    |df           d}|                     ||          |d }~ww xY wd }~ww xY w|r	| j        }	 |                     d          }|                                  |                     d          s|                     d           |                                  d}d}	 |s|                     d          }|r|s|                     d          }|r5	 |                     |||          }	t+          ||||	          S # t           $ r(}|| _        |                    |df           Y d }~nd }~ww xY w| j        }	 |                     |||          }| j        dk    r.| j                            |                     |d                     |S # t           $ r<}|| _        |                    |df           d}|                     ||          |d }~ww xY w) N)r  r  r  ri   z'Internal error, unknown paramMode '%s'.r   FrW  r   rM   rl  r   r  r3  r  r2  r  rE  z/If declarator-id with parameters-and-qualifiersr4  z$Expected ')' in "( ptr-declarator )"r  r  r#  rn  r  z"If parenthesis in noptr-declaratorzError in declaratorT)rV  z-Expected '*' in pointer to member declarator.zIf pointer to member declaratorr   r   zIf declarator-idz0Error in declarator or parameters-and-qualifiers)r~  r  r  r  rp  r}  r'  ri  r   rk  r  r  r  r?  r  r{  r   r  r  r  r  r  rY  )r3  r  r#  rn  rR  r   rM   attrListrq  rj  r  r  r  exParamQualr  exNoPtrParenr  r  r   s                      r4  r'  z"DefinitionParser._parse_declarator5  s    GGG9IEG G G
 	FT%%c** 	FLLNNNHEH !#44Z@@H !  ! 11'::E ! ,,..#OOD)))))%EBBD#*:8*D*DF F F F  	<T%%c** 	<..00E))%EBBD#U;;;; 	5T%%e,, 	5))%EBBD)t4444 #	WT&#--N** 2<@B B B B (CW88	9>@ @
" W W W!!;#T#V W W WW,3333$$S))) !225)UKKE++C00 L		"JKKK11<B8= 2 ? ?D .EEEEEEEEEE& W W W"DH%%|5Y&Z[[[2F00VDD,V	W#W,  	M(CM..T.BB'',, OIIMNNN
 !	# %#'#8#8#D#D# %$  % $ 5 5g > >  %$--eYFF*4tLLLL# # J J J!!1&G"HIIIIIIIIJ$ h	D44UIuMMC  C'' ''(>(>z2(N(NOOOJ 	D 	D 	DDHq"45666GF((V<<!C		Dso   7G 
KK9BJ
K

K7KKKK&A(N2 2
O$<OO$/AQ 
R7RRNr  allowFallbackr  c                                                       |dk    r'                                 }|t          |d          S                      d          sd S                                  }|t          |          S |dk    rg }n*|dk    rddg}n|ddg}n                     d	|z             |dk    d fd}                     |||          }t          |          S )Nr%  F)r  r   r@  r   r   r4  z;Internal error, initializer for outer '%s' not implemented.rw   r  c                 0                                    S r@  )r  r0  s   r4  r  z3DefinitionParser._parse_initializer.<locals>.parser  s    44
4KKKr6  )rE  r  )r  r  r  r  r  r  )r3  r  r  
bracedInitfallbackEndr  r  r  s   `      @r4  _parse_initializerz#DefinitionParser._parse_initializer  sA   & 	H5577J%%jEBBBB$$ 	41133
!!*---H%'KKo%%*KK]*KKII %',- . . . o-
	L 	L 	L 	L 	L 	L 	L//V=/YYe$$$r6  r  c                J   |r |dvrt          d|z            |dk    r|sJ |dv rg }| j        }	 |                     |d          }|                     d|d          }d}|d	k    rH|                                  t          j        d
                              | j        | j                  rd}|r| 	                    d           nJ# t          $ r}|dk    rd}	n|d	k    rd}	nt          ||                    ||	f           || _        	 |                     |          }|                     d|          }n# t          $ rt}
|| _        |dk    rd}	n|d	k    rd}	nt          ||                    |
|	f           	 |dk    rd}|dz  }n|d	k    rd}nt          ||                     ||          |
d}
~
ww xY wY d}~nSd}~ww xY wd}|dk    rd}n|dk    rd}d}n|dk    rd}|                     |          }|                     ||          }t          ||          S )z
        named=False|'maybe'|True: 'maybe' is e.g., for function objects which
        doesn't need to name the arguments

        outer == operatorCast: annoying case, we should not take the params
        )r  r%  r  r  r@  ru  r  )r  r  F)r  rn  Tr}  r  z
requires\b)allowSemicolonr  zIf just a namez"If the function has no return typer!  r"  If typedef-like declarationz!If the function has a return typez%Type must be either just a name or a ztypedef-like declaration.z(Error when parsing function declaration.Nr%  r@  rh  )r~  r  r&  r'  r  recompiler  r  
assert_endr   r  r}  r  r  )r3  r  r  rR  r  r  r  mustEnd	exUntypeddescexTypedr  rn  r#  s                 r4  r  zDefinitionParser._parse_type  s     	 > > > E MNNN&&((( JxH6C 22e2LL	--DE49 . ; ;J&&LLNNNz-0066tQQ ("' 9OO4O888" *C *C *CF??+DDj((?DD(i7!!9d"3444#!C $ 6 6U 6 C CI111NNDD& C C C'DH<*,,B,);%%wo666C F??%LF"&AAFF"j00%OFF"0i?"44ZHHgU)C DDDD*CX I  .((*	/)) ..U.;;I)))KKDy$'''s=   BC 
G8G-D<;G<
F:A/F55F::GGr  c                (   |r|dv sJ |                      ||          }|dk    r&|                     |          }t          ||          S | j        }d }	 |                     |d          }|t          |d           S |                                  | j        dk    r| j        dk    r
|| _        d }nt          ||          S n # t          $ r}|| _        |}Y d }~nd }~ww xY w|                     d	          st          |d           S 	 |                      dd 
          }t          ||          S # t          $ rV}	| g }
|
	                    |df           |
	                    |	df           d}|dz  }| 
                    |
|          |	d }	~	ww xY w)Nrt  ri  r@  r!  F)r  r  r   r   r   rN  z-If default template argument is an expressionz&If default template argument is a typez$Error in non-type template parameterz# or constrained template parameter.)r  r  r  r  r  r  r   r  r  r}  r  )r3  r  r  r  r  r  r  r   typeInitr  r+  r  s               r4  rj  z&DefinitionParser._parse_type_with_init1  s     	LKKKKKe599O##***77D"4...h	**e*LLD|&tT222 LLNNN C''D,=,D,D 'tT222   	 	 	DHEEEEEE	 $$ 	/"4...	?''e4'@@H:4JJJ 	? 	? 	?}DKK OPQQQKK HIJJJ8C88C((s33>	?s8   (C ?AC 
C!	CC!
&D1 1
F;AFFr)  c                    |                                  }|                                  |                     d          st          |d           S |                     dd           }t          ||          S )Nr   F)r  r  r  r)  r  r+  s      r4  _parse_type_usingz"DefinitionParser._parse_type_using^  sk    &&(($$ 	,d+++t,,D$'''r6  r3  c                    |                                  }|                                  |                     d          }t          ||          S )Nr%  )r  r  r  r3  r6  s      r4  _parse_conceptzDefinitionParser._parse_conceptf  sC    ,,..
--h77*k222r6  rC  c                <   |                                  }|                                 }|                                  |                     d          }g }|                                  |                     d          r	 |                                  d }d}d}|                     d          rd}|                     t                    r| j        }|                                  |s|                     d          rd}|                                 }|                                  |                     d          }|                    t          ||||                     |                                  |                     d          r	 t          ||||          S )	Nr  r  rW  Fr   Tr3  r   )rk  r  r  r  r  r  _visibility_rer  r}  r<  rC  )	r3  r  r  r  rD  r=  r   r>  baseNames	            r4  _parse_classzDefinitionParser._parse_classl  s   **,,&&((%%g..C   	!
((33 #"G::n-- #!%!2JLLNNN #4#8#8#C#C #"G2244''..\(JNNOOO##C(( eUE222r6  rM  c                r    |                                  }|                                 }t          ||          S r2  )rk  r  rM  )r3  r  r  s      r4  _parse_unionzDefinitionParser._parse_union  s4    **,,&&((e$$$r6  rT  c                    d }|                                  }|                                 }|                                  d }|                     d          r|                     d          }t          ||||          S )Nr  Fr  )rk  r  r  r  r  rT  )r3  rU  r  r  rV  s        r4  _parse_enumzDefinitionParser._parse_enum  s{    **,,&&((C   	;!--E-::NtV^U;;;r6  r\  c                J                                      }                                 }                                  d }                     d          r?                                  d fd}                     g |          }t          |          }t          |||          S )Nr   rw   r  c                 0                          d          S r  )rB  r:  s   r4  r  z2DefinitionParser._parse_enumerator.<locals>.parser  s    66%6HHHr6  r  )r  rk  r  r  r  r  r\  )r3  r  r  r  r  initVals   `     r4  _parse_enumeratorz"DefinitionParser._parse_enumerator  s    &&((**,,C   	+LLNNNI I I I I I55b&AAG!'**DT4///r6  rc  c                &   |                                   |                     d          r|                                 }nd }| j        }	 d }|                                   |                     d          rd}nE|                     d          rd}n-|r|                     d           n|                     d           |                                   |                     d          }|                                   |                     t                    rt          | j
                  }nd }|                                   |s-|                     d          r|                     dd 	          }n d }| j        d
vr|                     d           t          ||||          }|rt          ||          S t          |          S # t           $ r}|r 	 || _        |                     dd          }	|                                   |                     d          }t%          |	|          cY d }~S # t           $ rU}
|| _        d}g }|                    |df           |                    |
df           |                     ||          d d }
~
ww xY wd }~ww xY w)Nr   r   rJ   zFExpected 'typename' or 'class' after template template parameter list.zKExpected 'typename' or 'class' in the beginning of template type parameter.r3  r   FrN  z,>z4Expected "," or ">" after (template) type parameter.ry  r@  z&Error when parsing template parameter.z:If unconstrained type parameter or template type parameterz3If constrained type parameter or non-type parameter)r  r  _parse_template_parameter_listr  r  r  r  r  r$   rF  r  r  r  rm  r  rv  r   rj  r  r}  r  )r3  r  r  rn  ro  rG  rT   r  r  ru  eNonTyper  r+  s                r4  _parse_template_parameterz*DefinitionParser._parse_template_parameter  s   >>*%% 	 >>@@LLLh4	ECLLNNN$$Z00 	C &&w// C C		 > ? ? ? ? 		 B C C CLLNNN ,,U33MLLNNNzz-(( "*4+<==

!
LLNNN  VT%5%5c%:%: V**d*CC$D00IITUUU3C4A7L LD 23L$GGG+D111 	E 	E 	E E227OLL $ 0 0 7 7.umDDDDDDDD" E E EAXY[ [ [TUW W W,,T6::DE	EsE   	E'G  1G   
J
JAH)#J)
J3AJJJJr  c                   g }|                                   |                     d          s|                     d           	 | j        }d }	 |                                 }|                    |           n # t          $ r}|| _        |}Y d }~nd }~ww xY w|                                   |                     d          r$|                                 }t          ||          S |                     d          rd}g }|r|                    |df           	 |                     d           n.# t          $ r!}	|                    |	d	f           Y d }	~	nd }	~	ww xY wt          
                    |           |                     ||          )
Nr   zExpected '<' after 'template'rW  r   r   z!Error in template parameter list.zIf parameterzExpected "," or ">".zIf no parameter)r  r  r  r  r  r}  r   _parse_requires_clauser  r%  r&  r  )
r3  r  r  errru  eParamr  r  r+  r   s
             r4  r  z/DefinitionParser._parse_template_parameter_list  s    24$$ 	7II5666	;(CC6688%%e,,,,"    LLNNN$$ ;!%!<!<!>!>(HHH!!#&& ;< 7KKn 56668II45555& 8 8 8KK$5 6777777778T""",,T6:::s0   )A6 6
B 	BBD- -
E7EEr  c                2   | j         }	 |                                 }n# t          $ r || _         Y d S w xY w|                                  |                     d          s	|| _         d S g }	 |                                  |                     d          }|                                  |                     t                    s|                     d           | j        }|t          v r|                     d|z             t          |          }|                    t          ||                     |                                  |                     d          rn.|                     d          r|                     d           t          ||          S )	Nr(  rW  r3  z2Expected identifier in template introduction list.zBExpected identifier in template introduction list, got keyword: %sr)  r   z:Error in template introduction list. Expected ",", or "}".)r  r  r~  r  r  r  r$   r  r  rX  rF  r}  r  r  )r3  r  rL   r  ro  txt_identifierrG  s          r4  _parse_template_introductionz-DefinitionParser._parse_template_introduction
  s   h	--//GG 	 	 	DH44	 	$$ 	DH4 	TLLNNN ,,U33MLLNNN::m,, P		NOOO!.N**		 ,.<= > > >&~66JMM::}UUVVVLLNNN$$ $$ IIRSSS'	T( 'w777s    33r  c                R   |                                   |                     d          sd S dd}g }g }|                     ||                      	 |                                   d}|                     d	          rd}|                    d	           n,|                     d
          rd}|                    d
           |sn|                     ||                      t	          |          dk    rt          |d                   S t          t          ||                    S )Nrv   r3  r  rw   r  c                   g }g }|                     |                                            	 |                                  d}|                     d          rd}|                     d           n,|                     d          rd}|                     d           |sn(|                     |                                            t          |          dk    r|d         S t          ||          S )NTFr   r<   rW  r   )r}  r  r  r  r  rJ  r  )r3  andExprsr  r5  s       r4  parse_and_exprz?DefinitionParser._parse_requires_clause.<locals>.parse_and_expr:  s    HCOOD::<<===B##D)) &"GJJt$$$$^^E** &"GJJu%%%  > > @ @AAAB 8}}!!{"#Hc222r6  TFr   ro   rW  r   )r3  r  rw   r  )r  r  r}  r  rJ  r  r  )r3  r  orExprsr  r5  s        r4  r  z'DefinitionParser._parse_requires_clause.  sA    	~~j)) 	4	3 	3 	3 	3* ~~d++,,,	1LLNNNG%% !

4    %% !

4    NN>>$//000	1 w<<1$WQZ000$\'3%?%?@@@r6  r  r  c                   g }	 |                                   d }| j        }|                     d          rz	 |                                 }nA# t          $ r4}|dk    r't          |          dk    rt          d           cY d }~S |d }~ww xY w|dk    r|j        |                     d           n| 	                                }|snL|dk    r/t          |          dk    r|| _        |                     d           |
                    |           t          |          dk    r|dk    r|                     d           t          |          dk    rd S t          |          S )	NrW  r   r%  r   rL   z'requires-clause not allowed for conceptz0More than 1 template parameter list for concept.z,Missing template parameter list for concept.)r  r  r  r  r   rJ  r  r  r  r  r}  )r3  r  r  r  r  r   s         r4  "_parse_template_declaration_prefixz3DefinitionParser._parse_template_declaration_prefixc  s   GI		%LLNNNBFF(C~~j))  !@@BBFF&      !X--#i..A2E2E;DAAAAAAAA	 
 **v/D/PIIGHHH::<< Y&&3y>>A+=+=		LMMMV$$$-	%. y>>Q:#:#:IIDEEEy>>Q4/	:::s#   A 
B
'B=B
BB
r  r  r  fullSpecShorthandisMemberc                *   |                                 }d}|sd}n"|r|j        d}d}nt          |j                  }|dz   |k     r|                     d||fz             ||k    r||z
  }|s@|s>d|||fz  }	|	dz  }	|r|	d|z  z  }	|	t	          |          z  }	|                     |	           g }
t          |          D ]&}|
                    t          g d 	                     '|r|s|
	                    |j                   t          |
          }|S )
NFr   TrW  zeToo few template argument lists comapred to parameter lists. Argument lists: %d, Parameter lists: %d.zToo many template argument lists compared to parameter lists. Argument lists: %d, Parameter lists: %d, Extra empty parameters lists prepended: %d.z Declaration:
	z%s
	)r  )r  r  rJ  r  r7  rH  r  r}  r  r_  r  )r3  r  r  r  r  numArgsisMemberInstantiation	numParamsnumExtrar  newTemplates_is               r4  _check_template_consistencyz,DefinitionParser._check_template_consistency  s    **,, % 	:II :N4<	(,%% 899	Q;""II I ),- . . . Y*H$ 	-B 	C 	845 **! 58n44Cs:&		#NPLHoo P P##$5b$N$N$NOOOO >&; >##N$<===9,GGNr6  r  r/  c           	        |dvrt          d|z            |dvrt          d|z            d }d }d }d }|                                  |                     t                    r| j        }|dv r|                     |          }|dk    rg }| j        }	 |s|                     dd          }n5# t          $ r(}	|	                    |	d	f           || _        Y d }	~	nd }	~	ww xY w| j        }	 |s| 
                                }n'# t          $ r<}	|| _        |	                    |	d
f           d}
|                     ||
          |	d }	~	ww xY w|dk    r|                                 }n|dk    r|                     dd          }n|dk    r,|                     dd          }|                                 }ns|dk    r|                                 }nX|dk    r|                                 }n=|dk    r|                                 }n"|dk    r|                                 }nt&          |                     |j        |d|dk              }|                                  |                     d          }t/          |||||||          S )N)rJ   r   r  r%  r  rL   rZ   r  z(Internal error, unknown objectType "%s".)rJ   r~   r   r  r%  varr  rL   rZ   r  r  r  z+Internal error, unknown directiveType "%s".)r  rL   r%  r  rJ   r   r  TrN  r  zIf type alias or template aliaszError in type declaration.rL   r%  r  rJ   r   rZ   r  F)r  r  r  )r~  r  r  r  r  r  r  r  r   r}  r  r  r  rj  r  r  r  r  r  r  r  r  r  r/  )r3  r  r  r=  r  r  r.  rR  r  r   r  r  s               r4  parse_declarationz"DefinitionParser.parse_declaration  s4    ? ? ?FSTTT !T T T IMYZZZ
!%::n%% 	+*JTTT!DDZPPNJ(C% M"&"2"2V"2"L"LK"   !!1&C"DEEE (CH" ;"&"8"8":":K" H H H!!1&G"HIII5,,Z@@aG	H
 9$$--//KK8##444x4PPKK:%%**Z*HHK%)%@%@%B%B""7""++--KK7""++--KK6!!**,,KK<''0022KK  99+:J:HLQCMQYCY : [ [ 	$$S))	j-,k4iA A 	As0   B- -
C7CC*D 
E7EEr  c                    |                      d          }|                                 }|                     ||d          }t          ||          }d|_        |S )Nrh   r  Fr  )r  r  r  r  r  )r3  r  r  r  s       r4  parse_namespace_objectz'DefinitionParser.parse_namespace_object  sg    @@K@XX&&((99$LQ : S S400$
r6  *tuple[ASTNamespace | ASTDeclaration, bool]c                   | j         }	 |                     d          }|                                 }|                                  |                     d           |                                  |                     ||d          }t          ||          }d|_        |dfS # t          $ r}	 || _         | 
                    dd          }|                                  |                     d           |                                  |dfcY d }~S # t          $ rN}g }|                    |df           |                    |d	f           d
}	|                     ||	          |d }~ww xY wd }~ww xY w)Nxrefr  r   Tr  r  FzIf shorthand refzIf full function refzError in cross-reference.)r  r  r  r  r  r  r  r  r  r   r  r}  r  )
r3  r  r  r  res1e1res2e2r+  r  s
             r4  parse_xref_objectz"DefinitionParser.parse_xref_object  s   h	@!DDPVDWWN**,,DLLNNNT"""OO!==dNPT > V VNn55D$DO: 	@ 	@ 	@@--j*EE  &&&!!!U{""""""" @ @ @R!34555R!789991,,T377R?@	@s8   BB# #
E1.ADE1
E)A	E$$E))E,,E1ASTExpression | ASTTypec                    | j         }	 |                                 }|                                  |                                  |S # t          $ r}|| _         	 |                     d          }|                                  |                                  |cY d }~S # t          $ rN}d}g }|                    |df           |                    |df           |                     ||          |d }~ww xY wd }~ww xY w)NFz%Error when parsing (type) expression.r  r  )r  r  r  r  r   r  r}  r  )r3  r  r>  exExprr  exTyper  r+  s           r4  parse_expressionz!DefinitionParser.parse_expression  s$   h	G))++DLLNNNOOK 	G 	G 	GDH
G&&u--!!!





" G G G@V_5666VY/000,,T6::FG	Gs<   =A 
C=C8>BC=
C5'A	C00C55C88C=r<  )rw   r  r  )r  r7  r  r7  r  r7  rw   r  )rw   r  )rw   r/  )rw   r  )rw   r  )rw   r  r3  )r7  r  r  rB   rw   r8  r  )r$  r  r  rD  rE  rB   rw   r  )rw   rE  )rw   r  r  )rV  rB   rw   r  )rw   r  )rw   r  )r#  r7  rw   r  )r  r7  rn  rB   rw   r  )r  r7  rn  rB   rw   r  )r  rv  r#  r7  rn  rB   rw   rw  )r  rv  r#  r7  rn  rB   rw   r&  rH  )r  r  r  rB   rw   r  r2  )r  rv  r  r  rw   r  )r  rv  r  r7  rw   r  )rw   r)  )rw   r3  )rw   rC  )rw   rM  )rw   rT  )rw   r\  )rw   rc  )rw   r  )rw   r  r  )r  r7  rw   r  )
r  r  r  r  r  rB   r  rB   rw   r  )r  r7  r  r7  rw   r/  )rw   r  )rw   r  )rw   r  )6r=  r>  r?  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r%  r  r6  r:  r  rB  r  r  rP  rU  r  rc  rf  rm  rr  r&  r{  r'  r  r  rj  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r@  r6  r4  r  r  k  s          X - - X- 0 0 X02 2 2 2&: : : :x94 94 94 94v   .$ $ $ $B' ' ' 'C C C C7 7 7 7. . . .S1 S1 S1 S1j]0 ]0 ]0 ]0~2 2 2 204B 4B 4B 4BlB B B B   >   ' ' ' '  26(. (. (. (. (.X% % % %@>< >< >< ><@.7 .7 .7 .7 .7dXA XA XA XAt+L +L +L +LZ[1 [1 [1 [1z[T [T [T [TzD D D D D64? 4? 4? 4?n )-qD qD qD qD qDf/% /% /% /% /%bV( V( V( V( V(p+? +? +? +?Z( ( ( (3 3 3 33 3 3 3<% % % %
< < < <0 0 0 0 =E =E =E =E~ ;  ;  ;  ;D"8 "8 "8 "8H3A 3A 3A 3Aj; ; ; ;F OT% % % % %N?A ?A ?A ?AB   @ @ @ @<G G G G G Gr6  r  c                 d    t          t          d          d           } t          | gdgd          S )NPhonyNameDueToErrorFrz  )r  rF  r  )r  s    r4  _make_phony_error_namer  )  s3    
}-BCCT
J
JC#6666r6  c                  F    e Zd ZU dZ ed ed          dd          gZded<   ej	        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d0 fd"Zd1d#Zd2d$Zd2d%Zd3d(Zd4d)Z xZS )5	CPPObjectz%Description of a C++ language object.template parameterzTemplate Parameters)tparamr  Tlabelr  can_collapsezlist[Field]doc_field_types)no-index-entryzno-contents-entryzno-typesettingnoindexentrynocontentsentryr  single-line-parameter-listr8   option_specastr/  rw   r0  c           
        |j         dk    sJ |j        }|sJ |j        J |j        J |j        J |j        }|sJ |j        d S |j        }|d S |j         dk    rd S |j        dk    rd S |j        }|                    |j        ddd          }|d S |j        	                                }||_
        t          ||j        d d || j        j        |                                 d                    d S )Nr  rZ   FTrq  rW  r}  )r  r,  r  r  rg  r  r.  r  rs  r  r  r-  re  r+  get_source_info)r3  r  r,  r  
parentDecltargetSymbolr   	declClones           r4  _add_enumerator_to_parentz#CPPObject._add_enumerator_to_parentA  s\   ~---- +++$,,,"***}& F!-
 F F** F#v--F#*(()9UZ^:? ) A A=F&,,..	+1	(lf.>"$x'd.B.B.D.DQ.G	I 	I 	I 	I 	I 	Ir6  sigr7  rc  r1   c                8   g }t          dt          dz             D ]K}	 |                    |          }|                    |           /# t          $ r |t          k     sJ Y Hw xY wt          t          |                    }|d         }|sJ t          j        d          	                    |          s0t                              d|||                                            |j                                                                                            d          }d}	|j        j        }
|
!|
j        }|
j        }
||j        d	k    rd
}	n|
!|	sd| j        vr~|}| j        j        j        D ]0}|                    |          r|t3          |          d          } n1|                     |          }| j        d                             d||dd f           || j        j        j        vr| j        j        d         d         }||vr|j        j         ||<   |sJ |d                             |           |dd          D ]3}|s|| j        j        j        vr|d                             |           4| j        j        !                    |           d S d S )NrW  )rT  r   z^[a-zA-Z0-9_]*$zMIndex id generation for C++ object "%s" failed, please report as bug (id=%s).r  r  FrL   Tr  entriesrh  r   rk  r  r[  )"r  r  r]  r}  r   rt  reversedr  r  r  r%  r  get_locationr,  r  rb  lstripr  r.  r  r  re  r  cpp_index_common_prefix
startswithrJ  get_index_text	indexnodestatedocumentr[  
domaindatar+  note_explicit_target)r3  r  r  rc  r[  r   r  newestIdr  isInConceptr   r  strippedNamerf  	indexTextr  s                   r4  add_target_and_indexzCPPObject.add_target_and_indexk  s    q'A+&& 	# 	#A#ZZZ**

2 # # #7{{{{{{# 8C==!!q6z,--33H== 	9NN 458($($5$5$7$7  9 9 9 z..00CCEELLSQQJm=DA|)++" m  	X/t|CCL(/A  ??6** #/F#=LE ++L99IN9%,,h	8RQU-VWWW4:.222H'.w7E5  !j0dOOOEN!!(+++!""g . . TZ0444EN))"---J44W===== 32s   +A

A$#A$c                    t           r2  rJ  r:  s    r4  object_typezCPPObject.object_type  s    !!r6  c                    | j         S r2  )r  r:  s    r4  display_object_typezCPPObject.display_object_type  s    r6  r  c                4    t          d          || j        fz  S )Nz%s (C++ %s))r   r   rP  s     r4  r  zCPPObject.get_index_text  s    4)A"BBBr6  r  r  c                B    |                     | j        | j                  S r2  )r  r  objtype)r3  r  s     r4  parse_definitionzCPPObject.parse_definition  s    ''(8$,GGGr6  r3   r  r  c                @    |                     |d| j        |           d S r  )r  re  )r3  rc  r  r  s       r4  r  zCPPObject.describe_signature  s$    wdhHHHHHr6  
list[Node]c                ^   | j         j        j        j        }d|j        vr9|j        d         d         }||j        d<   |                                |j        d<   |j        d         }|j        }||j	        dk    rd|
                                 d| j         d| j        d	          }t                              ||                                 
           t!                      }|                    |          }||j        d<   g S d |j        d<   t%                                                      S )Ncpp:parent_symbolrk  root_symbolrr  r  zFC++ declarations inside functions are not supported. Parent function: z
Directive name: z
Directive arg: r   r  cpp:last_symbol)r  r  settingsre  	temp_datar  r{  ref_contextr.  r  r  r  	argumentsr%  r  r  r  r  r/  run)	r3  re  rootr  r  r  r  r,  r1  s	           r4  r  zCPPObject.run  sA   j!*.cm33>%(7D15CM-.040C0C0E0ECO,- }%89!-
!j&;z&I&IV'3'H'H'J'JV V&*iV VBF.QRBSV VC NN3):):)<)<N===)++D!**400F/5CM+,I ,0'(ww{{}}r6  c                   | j         j        d         }| j         j        j        p| j         j        j        pd}d| j        vot          |          |cxk    odk    nc |d<   t          ||| j         j                  }	 |                     |          }|	                                 nh# t          $ r[}t                              ||           t                      }|                    |          }	|	| j         j        d<   t          |d }~ww xY w	 |                    || j         j        |                                 d         	          }	|	j        J |	j        J | j         j        d         |	_        |	j        |	j        j        J |	|	j        _        |	| j         j        d<   nx# t*          $ rk}|j        | j         j        d<   t/          d
          }
|
|j        j        |j        j        | j        |fz  }
t                              |
|           Y d }~nd }~ww xY w|j        dk    r|                     |           t9          | j                  }d| j        v |d<   |                     |||           |S )Nr  r   r  r  r  r  r  r
  rW  )r+  r5  r  r  r  )re  r  r  !cpp_maximum_signature_line_lengthmaximum_signature_line_lengthr  rJ  r  r  r  r   r%  r  r  r  
ValueErrorr  r+  r  r8  r9  r+  r,  r   r5  r   r  r  r  r  )r3  r  rc  r  max_lenr  r  r   r  r,  r  r  s               r4  handle_signaturezCPPObject.handle_signature  s   #x12EF8?D hoC 	 )< )SG''''a'''' 	+,
 "#PPP
	$''//C 	$ 	$ 	$NN1wN/// *++D!**400F4:DH01!#	$	2!11TX-D4H4H4J4J14M 2 O OF &...&..."&("45F"GF".*7???39#04:DH011$ 	2 	2 	2 56HDH01 8 9 9C)18=138 8CNN3N11111111	2 >\))**3/// t|$$&8DL&H"#g666
s3   =)B' '
D1ADDBF$ $
H.A!HHc                   | j         j        d         }|sJ | j         j        d         | _        | j         j        d         | _        || j         j        d<   |                                | j         j        d<   g | j         j                            dd          |j                            t                    R | j         j        d<   d S )Nr
  r  rr  cpp:domain_namer@  )
re  r  oldParentSymbolr  oldParentKeyr{  r  r  rP  r7  )r3  
lastSymbols     r4  before_contentzCPPObject.before_content  s    !X/0AB
#x12EF'+x';<L'M2<./1;1J1J1L1L-.1
X##$5r::1
 ++C001
 1
,---r6  c                    | j         | j        j        d<   | j        | j        j        d<   | j        j        d         d d         | j        j        d<   d S )Nr  rr  r  r  )r  re  r  r  r  r:  s    r4  after_contentzCPPObject.after_content  sU    262F./151B-.040BCT0UVYWYVY0Z,---r6  sig_nodetuple[str, ...]c                    t          d | j        j        d                                         j        D                       S )Nc              3  T   K   | ]#}|j                             t                    V  $d S r2  )r  rP  r7  r  s     r4  r  z4CPPObject._object_hierarchy_parts.<locals>.<genexpr>!  sJ       Y YQQ[++C00 Y Y Y Y Y Yr6  r
  )tuplere  r  r  r  )r3  r   s     r4  _object_hierarchy_partsz!CPPObject._object_hierarchy_parts   sR     Y YX'(9:OOQQWY Y Y Y Y 	Yr6  c                   |                     d          sdS | j        j        j        }|j                             d          }|j        r|dv rd}nd}|d         ^ }}|j        dk    r;d                    g | j        j                             dd	          ||z   R           S |j        d
k    r||z   S |j        dk    rd                    |||z   gz             S dS )N
_toc_partsr   r  >   methodr  r   domainr  r  r@  hideall)	r  re  appr  r  add_function_parenthesestoc_object_entries_show_parentsr  r  )r3  r   r  r  parensparentsr  s          r4  _toc_entry_namezCPPObject._toc_entry_name$  s    ||L)) 	2$/%%i00* 	w:P/P/PFFF!,/$1X==99\tx1556GLL\dU[m\\]]]1V;;&= 1U::99Wv6777rr6  )r  r/  rw   r0  )r  r/  r  r7  rc  r1   rw   r0  r<  )r  r7  rw   r7  )r  r  rw   r/  )rc  r3   r  r/  r  r  rw   r0  rw   r  )r  r7  rc  r3   rw   r/  r  )r   r3   rw   r!  )r   r3   rw   r7  )r=  r>  r?  __doc__r*   r   r  __annotations__r	   flagr  r  r  r  r  r   r  r  r  r  r  r  r  r%  r1  r  r  s   @r4  r  r  .  s        // 	)3H1I1I;"&	( 	( 	($O     %/'_$/"%?&O&0o K    (I (I (I (IT6> 6> 6> 6>p " " " X"       X C C C CH H H HI I I I! ! ! ! ! !F5 5 5 5n

 

 

 

[ [ [ [
Y Y Y Y       r6  r  c                      e Zd ZdZdS )CPPTypeObjectr  Nr=  r>  r?  r  r@  r6  r4  r7  r7  8          KKKr6  r7  c                      e Zd ZdZdS )CPPConceptObjectrL   Nr8  r@  r6  r4  r;  r;  <  s        KKKr6  r;  c                      e Zd ZdZdS )CPPMemberObjectr%  Nr8  r@  r6  r4  r=  r=  @  s        KKKr6  r=  c            
          e Zd ZdZej         ed ed          dd           ed ed          d	d
d           ed ed          dd           ed ed          dd          gz   ZdS )CPPFunctionObjectr  	parameter
Parameters)ru  r@  r  argumentTr  
exceptionsThrowsr>  )throwsr   	exception)r  rolenamer  r  retvalzReturn values)retvalsrH  returnvalueReturnsF)returnsrw   )r  has_argr  N)	r=  r>  r?  r  r  r  r*   r   r)   r@  r6  r4  r?  r?  D  s        K/[,D"&	( 	( 	( 	\8v;"&	( 	( 	( 	XQQ%7%70"&	( 	( 	( 	m11Y<<)	+ 	+ 	+3 OOOr6  r?  c                  *    e Zd ZdZedd            ZdS )CPPClassObjectrJ   rw   r7  c                &    | j         dv sJ | j         S )Nr  )r  r:  s    r4  r   z"CPPClassObject.display_object_typeY  s      |22222|r6  Nr<  )r=  r>  r?  r  r  r   r@  r6  r4  rO  rO  V  s7        K   X  r6  rO  c                      e Zd ZdZdS )CPPUnionObjectr   Nr8  r@  r6  r4  rR  rR  `  s        KKKr6  rR  c                      e Zd ZdZdS )CPPEnumObjectrZ   Nr8  r@  r6  r4  rT  rT  d  r9  r6  rT  c                      e Zd ZdZdS )CPPEnumeratorObjectr  Nr8  r@  r6  r4  rV  rV  h  s        KKKr6  rV  c                  :    e Zd ZU dZdZdZdZdZi Zde	d<   dd
Z
dS )CPPNamespaceObjectzb
    This directive is just to tell Sphinx that we're documenting stuff in
    namespace foo.
    FrW  r   Tr8   r  rw   r  c                   | j         j        d         d         }| j        d                                         dv r|}g }nt	          | j        d         |                                 | j                  }	 |                                }|                                 nc# t          $ rV}t                              ||                                            t                      }t          |d           }Y d }~nd }~ww xY w|                    |j        |j                  }|g}|| j         j        d<   || j         j        d<   |                                | j         j        d	<   g S )
Nrk  r	  r   NULLr  rm   r  r  r  cpp:namespace_stackrr  )re  r  r  rJ  r  r  r  r  r  r   r%  r  r  r  r  r  r  r  r{  r  )r3  
rootSymbolr,  stackr  r  r   r  s           r4  r  zCPPNamespaceObject.runx  sf   X(/>
>!""$$(@@@F"$EE%dnQ&7/3/@/@/B/B-1[: : :F/3355!!####" / / /q4+<+<+>+>???-//"4../  ((9KLLFHE28./4901171F1F1H1H-.	s   4(B 
C='AC88C=Nr2  )r=  r>  r?  r3  has_contentrequired_argumentsoptional_argumentsfinal_argument_whitespacer  r4  r  r@  r6  r4  rX  rX  l  s^          
 K $ K         r6  rX  c                  6    e Zd ZU dZdZdZdZi Zded<   dd	Z	d
S )CPPNamespacePushObjectFrW  r   Tr8   r  rw   r  c                j   | j         d                                         dv rg S t          | j         d         |                                 | j                  }	 |                                }|                                 nc# t          $ rV}t          	                    ||                                            t                      }t          |d           }Y d }~nd }~ww xY w| j        j                            dd           }|s| j        j        d         d         }|                    |j        |j                  }| j        j                            dg           }|                    |           || j        j        d<   || j        j        d<   |                                | j        j        d	<   g S )
Nr   rZ  r  r  r  rk  r	  r\  rr  )r  rJ  r  r  r  r  r  r   r%  r  r  r  re  r  r  r  r  r  r  r}  r{  r  )r3  r  r  r   r  	oldParentr,  r^  s           r4  r  zCPPNamespacePushObject.run  s   >!""$$(@@@I!$."3+/+<+<+>+>)-6 6 6	+//11C 	+ 	+ 	+NN1t'8'8':':N;;;)++DtT**CCCCCC	+ H&**+>EE	 	B+E2=AI##CNC4FGG"&&'<bAAV28./4901171F1F1H1H-.	s   (B 
C"ACC"Nr2  
r=  r>  r?  r_  r`  ra  rb  r  r4  r  r@  r6  r4  rd  rd    sR         K $ K         r6  rd  c                  6    e Zd ZU dZdZdZdZi Zded<   d
dZ	d	S )CPPNamespacePopObjectFr   Tr8   r  rw   r  c                   | j         j                            dd           }|rt          |          dk    r1t                              d|                                            g }n|                                 t          |          dk    r	|d         }n| j         j        d         d         }|| j         j        d<   || j         j        d<   |	                                | j         j
        d	<   g S )
Nr\  r   z=C++ namespace pop on empty stack. Defaulting to global scope.r  r  rk  r	  r  rr  )re  r  r  rJ  r%  r  r  rJ  r  r{  r  )r3  r^  r,  s      r4  r  zCPPNamespacePopObject.run  s    "&&'<dCC 	E

aNNZ$($5$5$7$7  9 9 9EEIIKKKu::>>2YFFX(/>F28./4901171F1F1H1H-.	r6  Nr2  rg  r@  r6  r4  ri  ri    sR         K $ K         r6  ri  c                  .     e Zd Z	 	 dd fdZddZ xZS )	AliasNodeNr  r7  aliasOptionsr  re  BuildEnvironment | None	parentKeyLookupKey | Nonerw   r0  c                *   t                                                       || _        || _        |Vd|j        vr9|j        d         d         }||j        d<   |                                |j        d<   |j        d         | _        d S |J || _        d S )Nr  rk  r	  rr  )	r/  r5  r  rm  r  r  r{  r  ro  )r3  r  rm  re  ro  r  r1  s         r4  r5  zAliasNode.__init__  s     	(?"#-77~e,];5912484G4G4I4I 01 _-=>DNNN(((&DNNNr6  c                R    |                      | j        | j        d | j                  S )N)re  ro  )r1  r  rm  ro  r:  s    r4  copyzAliasNode.copy  s0    ~~dh(9"&$.  B B 	Br6  r  )
r  r7  rm  r  re  rn  ro  rp  rw   r0  )rw   rl  )r=  r>  r?  r5  rs  r  r  s   @r4  rl  rl    sd        04/3' ' ' ' ' ' ' B B B B B B B Br6  rl  c                  2    e Zd Zej        dz
  ZddZddZdS )AliasTransformrW  r   r-  maxdepthre   skipThisrB   rm  r  renderOptionsr  r   rw   r  c           	        |dk    rd}n|dk    rd}n|dz  }d}g }|sGt          j        dd          }	 |j        |	           |j                            |	d| j        |           |r|r|}
nXt          j                    }t          j                    }|                    |           ||_        d|d<   d	x|d
<   |d<   d|d<   |}
|j	        D ]I}|j        
|j        j
        dv r|                     ||d|||          }|
                    |           J|s(t          |j                  dk    r |j        |           |S )Nr   TrW  Fr   r  rk  r)  aliasr  desctypezno-indexr  rv  rw  rm  rx  r  )r
   r3   r}  r.  r  re  desc_contentr  r  r:  r  _render_symbolr_  rJ  r.  )r3  r   rv  rw  rm  rx  r  recurser   rc  childContainercontentr  rL  
childNodess                  r4  r~  zAliasTransform._render_symbol  s    q==GG]]GGMHG 	[-b"55GEL!!!M,,Wj$(MZZZ 	& &=B"/11}t$$$ (!&X5<<Y$z"2#'Z !%+ 	2 	2%-%04VVV!00X!-]% 1 ' '
 %%j1111 &DM 2 2a 7 7W%%%r6  kwargsr0  c           
        | j                             t                    D ]T}|j        }|j        }	 t          ||| j        j                  }|                                \  }}|	                                 n8# t          $ r+}t                              ||           d\  }}Y d }~nd }~ww xY w|Wt          j        |d          }	|	                                 |	t          j        ||          z  }	|                    |	           | j        j        d         j        d         }
|
                    |          }|sct                              d|           t                              d|           t                              |
                    d	                     |sJ g }|rZt/          |t0                    sJ |}|j        }|j        r|j        j        }ng }|                    ||d
dddd          \  }}|g }nQt/          |t:                    sJ |}|j        }|                    |d
ddd          }||                     |           d |D             }tC          |          dk    rt          j        |d          }	|                     |	           |	                                 |	t          j        ||          z  }	t                              d|z  |           |                    |	           g }ddi}|D ]V}|j"        J | #                    ||j$        d         |j$        d         |j$        ||j                   } |j%        |           W|                    |           Vd S )Nr  r  r  r   rk  r	  
Target: %sParentKey: %srW  anyTF)r  rh  r  rV  rW  rX  r[  rV  rW  rX  c                     g | ]}|j         	|S r2  )r.  r  s     r4  r  z(AliasTransform.apply.<locals>.<listcomp>I  s    GGGQQ]-Fq-F-F-Fr6  r   z,Can not find C++ declaration for alias '%s'.r  rv  norootr|  )&r  findallrl  r  ro  r  re  r  r  r  r   r%  r  r
   r3   clearr|  replace_selfdomainsr  r  r&  r9  r  r  r  r  r  r  r/  r  r  r}  rJ  r.  r~  rm  r_  )r3  r  r  r  ro  r  r  isShorthandr   rc  r]  r  r
  nsr  rh  
failReasonr  r   r   rx  r  s                         r4  applyzAliasTransform.apply  s   M)))44 Q	) Q	)D(CI.)#15B B B#)#;#;#=#= [!!####" . . .q4000#- [[[[[[. {"1#r::8-c3777!!'***!%!1%!8!=m!LJ#-#;#;I#F#FL 1\3///_i888Z__Q//000$&G &!#|44444}$ '$&$5$?MM$&M&2&<&<#"/&*"$%* '= ', ',# ? G!#~66666y 11$DH<@PT 2 V V =NN1%%%GG'GGGG7||q  "1#r::G$$$8-c3777MPSS(,  . . .!!'****&! ! & &A=444--D$5j$A!%!28!<%)%6&3!% . 0 0C !EL%%%%!!%((((cQ	) Q	)s   AA::
B/!B**B/N)r   r-  rv  re   rw  rB   rm  r  rx  r  r  r   rw   r  )r  r   rw   r0  )r=  r>  r?  r   default_priorityr~  r  r@  r6  r4  ru  ru    sQ        ):Q>, , , ,\R) R) R) R) R) R)r6  ru  c                  @    e Zd ZU ej        ej        dZded<   ddZdS )	CPPAliasObjectrv  r  r8   r  rw   r  c                z   d| j         v r)| j                             dd          \  | _        | _        nd| j         c| _        | _        t	          j                    }| j        j        |_        | j        |d<   | j        x|d<   |d<   g | _        | j	        
                    dd          d| j	        v d	}|d         r:|d         dk    r.t                              d
|                                            |                                 }|D ],}|                    t!          ||| j                             -t	          j                    }|                    |           |                                  | j                            | j        | j        |           d| j        j        d<   |                                  |gS )a   
        On purpose this doesn't call the ObjectDescription version, but is based on it.
        Each alias signature may expand into multiple real signatures (an overload set).
        The code is therefore based on the ObjectDescription version.
        r  rW  r   r)  r  r{  rv  r  r  zError in C++ alias declaration. Requested 'noroot' but 'maxdepth' 1. When skipping the root declaration, need 'maxdepth' 0 for infinite or at least 2.r  )re  Nobject)r  splitr)  r  r
   r  r  r  r  r  r  r%  r  r  get_signaturesr}  rl  re  r}  r  nested_parser  content_offsetr  r  )r3  r  rm  
signaturesr  contentnodes         r4  r  zCPPAliasObject.runk  s    $)(,	Q(?(?%DK(*DI%DK}
+X-1\9Y$z* "
((Q77$,.
 
 ! 	9l:&>!&C&CNN L %)$5$5$7$7	  9 9 9
 ((**
 	D 	DCKK	#|BBBCCCC+--K   
d.A;OOO'+8$vr6  Nr2  )	r=  r>  r?  r	   nonnegative_intr5  r  r4  r  r@  r6  r4  r  r  e  sU         ./ K    
& & & & & &r6  r  c                      e Zd ZddZdS )CPPXRefRolere  r7   refnoder/   has_explicit_titlerB   titler7  targetrw   tuple[str, str]c                   |j                             |j                   |s"t          j        dt          |                    }|d         dk    r@|s|                    d          r
|d d         }|                    d          r
|d d         }|sU|                    d          }|d d         dk    r2|dd          }|                    d          }|d	k    r||d
z   d          }||fS )Nra  rn  r  r   r   rW  r  r  r  )	
attributesupdater  r   subr7  r  r  rfind)r3  re  r  r  r  r  dcolons          r4  process_linkzCPPXRefRole.process_link  s
   !!#/222! 	F '*=#e**EEE9&& & #%..*>*> #crc
t$$ %! 	/]]3''F RaRyCabb	T**R<<!&1*++.Ef}r6  N)re  r7   r  r/   r  rB   r  r7  r  r7  rw   r  )r=  r>  r?  r  r@  r6  r4  r  r    s(             r6  r  c                  (     e Zd Zd fdZd	dZ xZS )
CPPExprRoleasCoderB   rw   r0  c                l    t                                                       |r	d| _        d S d| _        d S )Nzcpp-exprz	cpp-texpr)r/  r5  
class_type)r3  r  r1  s     r4  r5  zCPPExprRole.__init__  s9     	*(DOOO *DOOOr6  'tuple[list[Node], list[system_message]]c                v   | j                             dd          }t          ||                                 | j                  }	 |                                }nh# t          $ r[}t                              d|||                                            t          j
        d||| j        g          gg fcY d }~S d }~ww xY w| j        j                            dd           }|| j        j        d         d	         }t          j
        d| j        g          }|                    |d
| j        |           |gg fS )Nr  r  r  z!Unparseable C++ expression: %r
%sr  rk  )rv  r  r	  rj  )ri  r  r  r  r  r  r   r%  r  r
   desc_inliner  re  r  r  r  r  )r3  ri  r  r  rZ  r  rc  s          r4  r  zCPPExprRole.run  sd   y  s++!$+/+<+<+>+>)-6 6 6	\))++CC 	\ 	\ 	\NN?r$($5$5$7$7  9 9 9 (dT_DUVVVWY[[[[[[[[		\
 x)--.A4HH8.u5mDL &ut6GHHHw
DHlKKKy"}s   A 
C %AB;5C ;C )r  rB   rw   r0  )rw   r  )r=  r>  r?  r5  r  r  r  s   @r4  r  r    sQ        * * * * * *       r6  r  c                     e Zd ZdZdZdZ e ed          d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           e ed          dd           e ed          ddd           e ed          ddddddd          d
Zi de	de	de
d	ededededededededededededeZ e             e             e             e             ed           e             e             e             e             e             e             ed           ed          dZ eddddddd          i dZdCd$ZdDd)ZdEd,ZdFd1ZdGd;ZdHd=Z dId?Z!dJdAZ"dKdBZ#dS )L	CPPDomaina  C++ language domain.

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

    - Each object created from directives gets an assigned .objtype from ObjectDescription.run.
      This is simply the directive name.
    - Each declaration (see the distinction in the directives dict below) has a nested .ast of
      type ASTDeclaration. That object has .objectType which corresponds to the keys in the
      object_types dict below. They are the core different types of declarations in C++ that
      one can document.
    rk  r  rJ   r~   rG  r  r   r  funcr%  r  rL   rZ   r  zfunction parameterr  )
rJ   r   r  r%  r  rL   rZ   r  rA  r@  r  r  rh   znamespace-pushznamespace-poprz  T)
fix_parens)r  F)r  rJ   r~   r   r  r%  r  r  rL   rZ   r  r>  texprN)r	  r  r+  r7  rw   r0  c                "   t           j        rt                              d|           t                              d           t                              | j        d                             d                     t                              d           | j        d         }|                    |           t           j        rt                              d           t                              | j        d                             d                     t                              d           t                              d|           t          | j        d	                                                   D ]\  }}||k    r| j        d	         |= d S )
Nzclear_doc: %sz	before:r	  rW  z	before endz	after:z
	after endzclear_doc end: %sr  )	r-  r  r%  r&  r  r9  rJ  rt  items)r3  r+  r]  r  nDocnames        r4  rJ  zCPPDomain.clear_doc  sJ   ! 	)LL'222LL%%%LL=166q99:::LL(((Y}-
W%%%! 	7LL$$$LL=166q99:::LL'''LL,g666"49W#5#;#;#=#=>> 	- 	-ND(7""Ig&t,	- 	-r6  re  r7   r  nodes.documentc                    t           j        rpt                              d|           t                              | j        d                             d                     t                              d|           d S d S )Nzprocess_doc: %sr	  r   zprocess_doc end: %s)r-  r  r%  r&  r  r9  )r3  re  r+  r  s       r4  process_doczCPPDomain.process_doc,  sn    ! 	9LL*G444LL=166q99:::LL.88888	9 	9r6  r  r4   c                N    |j                             | j        j                   d S r2  )r  r  re  r  )r3  r  s     r4  process_field_xrefzCPPDomain.process_field_xref3  s$     455555r6  r  r  	otherdatar  c                   t           j        rt                              d           t                              d           t                              | j        d                             d                     t                              d           t                              d           t                              |d                             d                     t                              d           | j        d                             |d         || j                   | j        d         }|d                                         D ]\  }}||v r	||vr|||<   t           j        rt                              d	           t                              | j        d                             d                     t                              d
           t                              d           d S d S )Nzmerge_domaindata:z	self:r	  rW  z		self endz	other:z
	other endr  z	result:z	result endzmerge_domaindata end)	r-  r  r%  r&  r  r9  r  re  r  )r3  r  r  ourNamesr  r+  s         r4  merge_domaindatazCPPDomain.merge_domaindata6  s   ! 	(LL,---LL###LL=166q99:::LL&&&LL$$$LL=166q99:::LL'''	- ++Im,D,4dh	@ 	@ 	@9W%&w/5577 	- 	-MD'(""x''%,HTN! 	1LL%%%LL=166q99:::LL(((LL/00000		1 	1r6  fromdocnamebuilderr6   r  r  r  contnoder/   !tuple[Element | None, str | None]c           	     	   # dv rdz  t          j                  }	 |                                \  }	}
nM# t          $ r@}d'fd} ||          \  }}t                              d	||
           Y d }~dS d }~ww xY w                    dd           } j        d         }|r|                    |          }|sht          	                    d           t          	                    d|j                   t          	                    |
                    d                     |sJ n|}|
rt          |	t                    sJ |	}|j        }|j        r|j        j        }ng }|j         ot#          |j                  dk    }|                    ||ddd|          \  }}|,dk    r#|dk    rt)          t+          |                    d }nC|d         }n:t          |	t,                    sJ |	}|j        }|                    |ddd          }||j        <t+          |          }|                    d          s|dk    rt)          |          dS                     d          r
dd          |j        j        #d(# fd} |            s;t                              d|j        j        |                                
           |j        }|
r<|                                }|                                                    d          }n|                                }|j        }|sJ dk    rk|                     d          !                                } d}!                    dd           s|j        d!k    r|
rwj        j"        rd"k    r|!dz  }!j        j"        r d#k    r| #                    d$          r|!dz  }!dv r/| #                    d%          r|#                    d$          r|!dz  }!nj        j"        r\d"k    r|#                    d          r|!dz  }!nUd#k    r4| #                    d          r|#                    d          s
| d d&         } n|#                    d          r|!dz  }!|!dk    r| d|!z  z  } |tI          j%        |           z  }tM          ||||'                                ||          |j        f}"|"S ))N)r  r  r   r  r   r~  rw   tuple[str, Exception]c                    dk    r
dk    r| fS t          d d         j                  }	 |                                 n## t          $ r}d d         |fcY d }~S d }~ww xY w| fS )Nr  r  r  r  )r  r  r  r   )r   parser2r  re  r  r  r  s      r4  findWarningz2CPPDomain._resolve_xref_inner.<locals>.findWarningY  s    %<<C6MM!19$*6#2#;4825*> > >+--////& + + +!#2#;?******+ qy s   A 
A'A"A'"A'z&Unparseable C++ cross-reference: %r
%sr  r  rr  r	  r  r  rW  T)rV  rW  rX  r[  rG  r  r   r  zstd::rY  cpp:r   rB   c                     dk    rdS                                } | r| v S t                              d d            t          )Nr  TzType is z, declaration type is )objtypes_for_roler%  r&  r  )objtypesdeclTypr3  r  s    r4  	checkTypez0CPPDomain._resolve_xref_inner.<locals>.checkType  s`    e||t--c22H +(**LLHCHHwHHIII  r6  zcpp:%s targets a %s (%s).r  refexplicitFr  r  r  z
operator()rn   r  )r   r~  rw   r  r  )(r  r  r  r   r%  r  r  r  r  r&  r9  r  r  r  r  r  r  rJ  r  r  r   r7  r/  r  r  r.  r  r  r  rb  r  r+  rJ  rP  r-  r  r   r  r,   r  )$r3  re  r  r  r  r  r  r  r  r  r  r   r  r   rZ  ro  r]  r  r  r  rh  r[  r
  r  r   r  txtNamer  r.  fullNestedNamedisplayNamer+  r  addParenr  r  s$   ``  ```                            @r4  _resolve_xref_innerzCPPDomain._resolve_xref_innerN  s    /!!dNF!&4
KKK	%7799C 	 	 	! ! ! ! ! ! ! ! !  KNNEArNNDa$(  * * *:::::%	&  $xx(8$??	Y}-
 	&#-#;#;I#F#FL 1\6222_in===Z__Q//000%L 	Rc<00000B=D  # " 1 ; "$(KIS__5I"."8"8mS"&d!1	 #9 #3 #3GZ
 ,&&!%??? $CIIs333 AJc>22222D9D--dC@D8<D . R RA 9-$iiG!!'** *g.>.>GS))):>>&!! 	abb'C-*	! 	! 	! 	! 	! 	! 	! 	! y{{ 	*NN6 81133$(  * * *
 m 	43355N(;;==DDSIIKK1133K) ,LLOO**,,E H88M511 *k6LPZ6Z6Z *z: &se|| A
; &v!NN<88 AN A..!NN:66 /'00>> / !A z: *%<<K,@,@,F,F<$MHH F]]$~~d33 3K<P<PQU<V<V 3(-crc
&//55 *$MH!||(
5)))H7K&4466+ )45 
s   A   
B

5BB
Element | Nonec           	     D    |                      |||||||          d         S rI  )r  )r3  re  r  r  r  r  r  r  s           r4  resolve_xrefzCPPDomain.resolve_xref  s7     ''['3(.h@ @@AC 	Cr6  list[tuple[str, Element]]c           
         t          j                    5  |                     |||d|||          \  }}d d d            n# 1 swxY w Y   |r&|dk    rd|fgS d|                     |          z   |fgS g S )Nr  r@  zcpp:templateParamr  )r   suppress_loggingr  role_for_objtype)	r3  re  r  r  r  r  r  retnoder  s	            r4  resolve_any_xrefzCPPDomain.resolve_any_xref  s     %'' 	W 	W#77['8=vtX W  WGW	W 	W 	W 	W 	W 	W 	W 	W 	W 	W 	W 	W 	W 	W 	W  	L/)),g677$"7"7"@"@@'JKK	s   ?AA-Iterator[tuple[str, str, str, str, str, int]]c              #    K   | j         d         }|                                D ]}|j        
|j        sJ |                                }t          |                              d          }|                                                    d          }|j        j        }|j        }|j        	                                }|||||dfV  d S )Nr	  r  rW  )
r  rO  r.  r+  r  r7  r  rb  r  r  )	r3  r]  r,  r  r  dispnamer  r+  r  s	            r4  get_objectszCPPDomain.get_objects  s      Y}-
 0022 
	E 
	EF!)>!!!#88::N~&&--c22D%88::AA#FFH+6JnG)7799H:w!DDDDD
	E 
	Er6  c                N   |                     dd           }|d S |                     dd           }|t          |j                  dk    rd S | j        d         }|                    |          }|                                }d                    t          |          |g          S )Nro  rr  r   r	  r  )r  rJ  r  r  r  r  r7  )r3  r  r  ro  r]  r  
parentNames          r4  get_full_qualified_namez!CPPDomain.get_full_qualified_name   s    +t,,>4#xx(8$??	IN 3 3q 8 84Y}-
!//	::!6688
yy#j//62333r6  r  )re  r7   r+  r7  r  r  rw   r0  )r  r4   rw   r0  )r  r  r  r  rw   r0  )re  r7   r  r7  r  r6   r  r7  r  r7  r  r4   r  r/   rw   r  )re  r7   r  r7  r  r6   r  r7  r  r7  r  r4   r  r/   rw   r  )re  r7   r  r7  r  r6   r  r7  r  r4   r  r/   rw   r  )rw   r  )r  r/   rw   r7  )$r=  r>  r?  r3  r  r  r   r   object_typesrO  rR  r?  r=  r7  r;  rT  rV  rX  rd  ri  r  r	   r  r  rolesr-  initial_datarJ  r  r  r  r  r  r  r  r  r@  r6  r4  r  r    s       
 
 DEgaajjwLRXYYgaajjwLRXYYgaa
mmvLRXYYgaakkxLQQgaaiiLRXYYgaa	llyLQQgaaiivLRXYYgaaoo|LQQ #7!8!8LRZ\abb #7!8!8!-w'8UZ\bd d L 	. 		
 	% 	/ 	 	 	# 	 	} 	m 	) 	'  	0!" 	.#& 	'J, {}}+--t,,,+--{}};==!kmm4(((E*** E  vdD$dD$GG L
- - - -&9 9 9 96 6 6 61 1 1 10S S S SjC C C C   E E E E4 4 4 4 4 4r6  r  r,  r5   dict[str, Any]c                   |                      t                     |                     dg d           |                     dg d           |                     dg d           |                     dd dt          d h           |                     t
                     |                     ddd	           |                     d
dd	           d }|                     d|           dddddS )Nr  re  r  r  r  )typescpp_debug_lookupFr   cpp_debug_show_treec                    | j         j        t          _        | j         j        t          _        | j         j                            d           d S )NT)rT  )r  r  r-  rB  r  r  r  sort)r,  s    r4  	initStuffzsetup.<locals>.initStuff   s>    !j9!$!?
*///=====r6  zbuilder-initedbuiltin	   T)rT  env_versionparallel_read_safeparallel_write_safe)
add_domainr  add_config_valuere   add_post_transformru  connect)r,  r  s     r4  setupr	     s   NN92B>>>,b%888/U;;;<dERUW[Q\]]]>*** +UB777.r:::> > > KK ),,, "#	  r6  )r  r  rg  r  rw   rB   r  )r,  r5   rw   r  )r3  
__future__r   r  typingr   r   r   r   docutilsr   docutils.parsers.rstr	   sphinxr
   sphinx.directivesr   sphinx.domainsr   r   sphinx.errorsr   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*   sphinx.util.docutilsr+   sphinx.util.nodesr,   collections.abcr-   r.   docutils.nodesr/   r0   r1   r2   sphinx.addnodesr3   r4   sphinx.applicationr5   sphinx.buildersr6   sphinx.environmentr7   sphinx.util.typingr8   	getLoggerr=  r%  r9   r  VERBOSEr  SrI  r  rO  r  rX  r^  r  r  r  r  rZ  r  r9  r  r%  r4  r4  r$  r=  r  r~  r+  rB  rF  r  r  r  r  r  r  r  r  r  r  r#  r*  r=  rM  rY  r`  rj  rr  rx  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r.  r6  r?  rE  rV  rc  rk  rt  r  r  r  r  r  r  r  r  r  r  r  r  r  r&  r?  r\  ri  r  r  r  r  r  r  r  r  r  r  r)  r3  r<  rC  rM  rT  r\  rc  rm  rv  r  r  r  r  r  r  r  r/  r  r	  r  r  r-  r  r  r  r7  r;  r=  r?  rO  rR  rT  rV  rX  rd  ri  rl  ru  r  r  r  r  r	  r@  r6  r4  <module>r	     sE"      " " " " " " 				 8 8 8 8 8 8 8 8 8 8 8 8       + + + + + +       / / / / / / * * * * * * * *               - - - - - - - - - - - - - - @ @ @ @ @ @                                               * 6 5 5 5 5 5 5 5 0 0 0 0 0 0 * * * * * * 	.33333333IIIIIIIIIIII<<<<<<<<))))))''''''333333------		8	$	$GCLLzx BJ  Z   RZ 89;? ?
=>>rz 	 Z	 	 BJ  
 Z    	$ (RZ ) Z   555
      0	>0!0 0 '	0 0 0 0 0 0 0  !0" #0$ %0& 	'0( 	
)0* 	
+0, 	
-0 0. 	
/00 	
102 	
304 	
506 	
708 	
90: 	
;0< 
#=0> 
#?0@ 	-A0B 	.C0D E0F G0H 	.I0J 	.K0L M0N 	/O0 0P 

	(


_0 0 0l4
C4 C4 C	4
 34 S4 s4 4 4 t4 S4 4 C4 4 c4  #!4" 
3#4$ c%4 4& #'4( )4* C+4, C-4. /40 3142 s344 S546 748 94: S;4< =4> C?4@ sA4B #C4D cE4F G4 4 4H sI4J K4L SM4N cO4P 3Q4R S4R "3S4T #U4T #CU4V dW4X tY4Z D[4\ ]4^ _4` ca4b Dc4d de4 4f dg4 4 j4	44T4 d4 	4 4 4 4 4 4 4  !4" #4" #4$ %4$ %4& '4& d'4 4( )4* 	$+4, 	$-4. 	$/40 	$142 	$344 	$544 $546 	$746 748 	$948 $94: 	$;4< 	$=4> 
4?4@ 
4A4B 	$C4 4 4D 	$E4D $E4F G4H I4J 	$K4L 	$M4N 
4O4P Q4P dQ4R 	$S4R tS4T 	$U4T dU4V 	$W4X 	$Y4Z [4\ 
4]4 4^ 


	g4 4 4l 
					d		 	  S	Ds/ /      
4L	5M'N%L(O!!!	4L#JOO	5M  SRR [ [ [  	  P P P P PI P P P	 	 	 	 	k 	 	 	NC NC NC NC NCG NC NC NCbS S S S S7 S S S:EC EC EC EC ECG EC EC ECX. . . . .G . . .	 	 	 	 	 	 	 		C 	C 	C 	C 	C
 	C 	C 	CC C C C C
 C C C*J J J J Jz J J J J J J J Jz J J J < < < < <Z < < <<K K K K KJ K K K(	= 	= 	= 	= 	=] 	= 	= 	=;; ;; ;; ;; ;;- ;; ;; ;;|; ; ; ; ;= ; ; ;"A A A A Am A A A&. . . . .7 . . .; ; ; ; ;l ; ; ;"I I I I I| I I I I I I I I I I I 	: 	: 	: 	: 	:L 	: 	: 	:	: 	: 	: 	: 	:L 	: 	: 	:@ @ @ @ @ @ @ @&= = = = =] = = =0; ; ; ; ;m ; ; ;@; ; ; ; ; ; ; ;.A A A A A] A A A0; ; ; ; ; ; ; ;(; ; ; ; ;M ; ; ;$A A A A AM A A A"; ; ; ; ;] ; ; ;$; ; ; ; ;m ; ; ;$.I .I .I .I .I .I .I .Ib A  A  A  A  AM  A  A  ALA A A A A- A A A.%I %I %I %I %I= %I %I %IP#E #E #E #E #E #E #E #EL; ; ; ; ; ; ; ;>!F !F !F !F !F !F !F !FHI I I I I= I I I47 7 7 7 7m 7 7 7,* * * * *' * * *ZB B B B B B B B<W W W W W W W W&I I I I Ik I I I.B B B B BW B B B(/; /; /; /; /;g /; /; /;j. . . . .' . . .%< %< %< %< %<%8 %< %< %<P; ; ; ; ;&9 ; ; ;"; ; ; ; ;"5 ; ; ;(); ); ); ); );1 ); ); );XK K K K K7 K K KD? ? ? ? ?g ? ? ?$TY TY TY TY TYg TY TY TYn? ? ? ? ?g ? ? ?*b. b. b. b. b. b. b. b.J@I @I @I @I @I7 @I @I @IL; ; ; ; ;w ; ; ;@). ). ). ). ).G ). ). ).XUJ UJ UJ UJ UJ UJ UJ UJp+A +A +A +A +A +A +A +A\iA iA iA iA iA} iA iA iAX@A @A @A @A @A} @A @A @AF<A <A <A <A <A] <A <A <A~aA aA aA aA aA- aA aA aAHCI CI CI CI CI CI CI CIR? ? ? ? ?= ? ? ?"; ; ; ; ;+ ; ; ;4H H H H HW H H H.kA kA kA kA kAg kA kA kA\'E 'E 'E 'E 'Eg 'E 'E 'ET"E "E "E "E "Eg "E "E "EJR R R R R7 R R RHL L L L L L L L8 C  C  C  C  C7  C  C  CF0 0 0 0 0w 0 0 0fH H H H Hw H H H6(G (G (G (G (Gg (G (G (GVK K K K KG K K KP. . . . .w . . .(6N 6N 6N 6N 6N'7 6N 6N 6Nr!A !A !A !A !A+ !A !A !AH&A &A &A &A &A#3 &A &A &AR5C 5C 5C 5C 5C. 5C 5C 5CpIU IU IU IU IU IU IU IU^3O 3O 3O 3O 3Ow 3O 3O 3Ol1; 1; 1; 1; 1;g 1; 1; 1;l$] $] $] $] $]7 $] $] $]NA A A A A A A A"cD cD cD cD cDW cD cD cDL    7   ) ) ) ) ) ) ) )          2d d d d d d d dN{G {G {G {G {Gz {G {G {G|=7 7 7 7
G G G G G!.1 G G GT    I       y       i       	   $    Y       Y       I       )   ! ! ! ! ! ! ! !H    _   @    O   2B B B B B B B B,C) C) C) C) C)_ C) C) C)L, , , , ,& , , ,^    (   <    *   B|4 |4 |4 |4 |4 |4 |4 |4~	     r6  