
    O&i[                    &   U d Z ddlZddlmZmZmZmZmZmZm	Z	m
Z
mZmZ ddlmZ ddlmZmZmZmZ ddlmZ ddlmZ ddlmZ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' ddl(m)Z)m*Z* ddl+m,Z,m-Z- ddl.m/Z/ ddl0m1Z1 ddl2m3Z3 ddl4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZG ddlHmIZImJZJ ddlKmLZL ddlMmNZN ddlOmPZP  e3jQ        eR          ZS ed          ZT	  ejU        d          ZV ejU        dejW                  ZX ejU        d          ZY ejU        d          ZZ ejU        d          Z[g dZ\ ejU        d           Z]d!Z^g d"Z_d#d#d$d%d%d&d'd'd(d)d*
Z`d+d,d-d.d/d0d1Zai d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSi dTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzd{d|d}d~Zbi dd/dd)dd#dddddddddddddddddddddddddd%dd%i dd%dddddd'dd'dd'dd'dd0dd0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 d2dʓd4d˓d6d̓d8d͓d:dΓddΓd<dГd>dѓd@dғdBdӓdDdԓdFdՓddՓdHdדddדdJdٓddٓi dLdۓdNdܓdPdݓdRdޓdTdߓdVddXddddZdddd\dddd^dd`ddbdddddfdi dhddddjddlddnddpddd+drddddtddddddddddddddd ddddddZdddd	d
ddddddΐd
Zed#d#ddddZfee	eg         egf         ehd<   ddgdtdgdHdgdJdgdFdgg dg dd^d`gd<d>gg dddggZig dZjg dZkdddddZl G d dem          Zn G d de6          Zo G d deo          Zp G d  d!eo          Zq G d" d#eo          Zr G d$ d%eo          Zs G d& d'es          Zt G d( d)et          Zu G d* d+et          Zv G d, d-et          Zw G d. d/et          Zx G d0 d1et          Zy G d2 d3et          Zz G d4 d5es          Z{ G d6 d7es          Z| G d8 d9es          Z} G d: d;es          Z~ G d< d=eo          Z G d> d?e          Z G d@ dAe          Z G dB dCe          Z G dD dEe          Z G dF dGe          Z G dH dIe          Z G dJ dKes          Z G dL dMes          Z G dN dOes          Z G dP dQes          Z G dR dSes          Z G dT dUes          Z G dV dWes          Z G dX dYes          Z G dZ d[es          Z G d\ d]es          Z G d^ d_es          Z G d` daes          Z G db dces          Z G dd dees          Z G df dgeo          Z G dh dies          Z G dj dkes          Z G dl dmes          Z G dn doeo          Z G dp dqe          Z G dr dse          Z G dt due          Z G dv dweo          Z G dx dyeo          Z G dz d{eo          Z G d| d}e          Z G d~ de          Z G d de          Z G d de          Z G d deo          Z G d deo          Z G d deo          Z G d deo          Z G d deo          Z G d deo          Z G d deo          Z G d deo          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 des          Z G d de7          Z G d deo          Z G d deo          Z G d deo          Z G d deo          Z G d deo          Z G d deo          Z G d deo          Z G d deo          Z G d deo          Z G d deo          Z G d deo          Z G d deo          Z G d de          Z G d de          Z G d de          Z G dĄ de          Z G dƄ deo          Z G dȄ deo          Z G dʄ deo          Z G d̄ deo          Z G d΄ deo          Z G dЄ deo          Z G d҄ deo          Z G dԄ dզ          Z G dք dצ          Z̐deeef         dedefdۄZ G d܄ dݦ          Z G dބ de8          ZАderf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 deL          Z G d deL          Z G d deL          Z G d dej                  Z G d de/          Z G d de           Z G d d e-          Z G d de,          Z G d de"          Zdedeegef         fdZdS (  zThe C++ language domain.    N)
AnyCallableDict	GeneratorIteratorListOptionalTupleTypeVarUnion)nodes)ElementNodeTextElementsystem_message)
directives)addnodes)desc_signaturepending_xref)Sphinx)Builder)ObjectDescription)DomainObjType)BuildEnvironment)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)
OptionSpecTzN(?x)
    [a-zA-Z_][a-zA-Z0-9_]*\b   # note, no word boundary in the beginning
z>[LuU8]?('([^'\\]*(?:\\.[^'\\]*)*)'|"([^"\\]*(?:\\.[^"\\]*)*)")z\b(public|private|protected)\bz(?x)
        \[\s*\]
    |   \(\s*\)
    |   \+\+ | --
    |   ->\*? | \,
    |   (<<|>>)=? | && | \|\|
    |   <=>
    |   [!<>=/*%+|&^~-]=?
    |   (\b(and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|xor|xor_eq)\b)
zx(?x)
        ->\*    |    \.\*    |    \,
    |   (<<|>>)=?    |    &&    |    \|\|
    |   !=
    |   [<>=/*%+|&^~-]=?
)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  (?x)
    \b(
    auto|void|bool
    |signed|unsigned
    |short|long
    |char|wchar_t|char(8|16|32)_t
    |int
    |__int(64|128)  # extension
    |float|double
    |__float80|_Float64x|__float128|_Float128  # extension
    |_Complex|_Imaginary  # extension
    )\b
   )N _CPPv2_CPPv3_CPPv4cCiUlLb)
rI   signed charunsigned charrh   
signed intunsigned intri   signed longunsigned longrE   ssosisiosvm)zstd::stringzstd::ostreamzstd::istreamzstd::iostreamzstd::vectorzstd::maprl   znew-operatornew[]znew-array-operatorrX   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   rE   rI   r   ar   hr   wrL   DirK   DsrJ   Dur{   sz	short intzsigned shortzsigned short intzunsigned shorttzunsigned short intrh   r|   r   r   jr   ri   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orb   frZ   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 doublerB   Dadecltype(auto)Dczstd::nullptr_tDnnwnadldacorN   plmimldvrmanrC   rr   rD   eor   aSpLmImLdVrMaNr@   oRrs   eOr   lsrslSrSeqnero   ltgtlege<=>ntrn   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   rn   r   rN   )Nu8ur   r   _id_char_from_prefix)r   r   ro   )r  r   r   r   r   )r   r   r   r  )r   r   r   r   r   r   r   r   r   r@   r   r   r   rs   dcscccrc)r[   r   rT   rx   c                   "    e Zd Zd	dZdefdZdS )
_DuplicateSymbolErrorsymbolSymboldeclarationASTDeclarationrz   Nc                 2    |sJ |sJ || _         || _        d S N)r/  r1  )selfr/  r1  s      _/home/geonatureadmin/si_en_reseau/tutos/venv/lib/python3.11/site-packages/sphinx/domains/cpp.py__init__z_DuplicateSymbolError.__init__?  s,    &    c                 <    d| j                             d          z  S )Nz'Internal C++ duplicate symbol error:
%sr   )r/  dumpr5  s    r6  __str__z_DuplicateSymbolError.__str__E  s    9DK<L<LQ<O<OOOr8  )r/  r0  r1  r2  rz   N)__name__
__module____qualname__r7  strr<   r8  r6  r.  r.  >  sJ        ' ' ' 'P P P P P P Pr8  r.  c                       e Zd ZdS )ASTBaseNr=  r>  r?  rA  r8  r6  rC  rC  I          Dr8  rC  c                   v    e Zd ZdeddfdZdefdZdedefdZdefdZ	defd	Z
d
ededddededdddfdZdS )ASTIdentifier
identifierrz   Nc                 F    |J t          |          dk    sJ || _        d S Nr   )lenrH  r5  rH  s     r6  r7  zASTIdentifier.__init__Q  s0    %%%:!####$r8  c                 $    | j         d         dk    S )Nr   @rH  r;  s    r6  is_anonzASTIdentifier.is_anonV  s    q!S((r8  versionc                    |                                  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)rP  r)   rH  rK  r@  r5  rQ  s     r6  get_idzASTIdentifier.get_idY  s    <<>> 	!gkk.. a<<(**s&?e##4_Q3&&4||~~ C C$8$81$<doabb>Q#RRR3t//004?BBr8  c                     | j         S r4  rO  r;  s    r6  r<  zASTIdentifier.__str__n  
    r8  c                 <    |                                  rdn| j        S )N[anonymous])rP  rH  r;  s    r6  get_display_stringz ASTIdentifier.get_display_stringq  s     $C}}DOCr8  signodemodeenvr   prefixtemplateArgsr/  r0  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            )Nr^  )textmarkTyper   cpprH  	refdomainreftype	reftargetmodname	classnamecpp:parent_key
lastIsName
noneIsNameparamclassesz	sig-paramudlr   
operator""Unknown description mode: %s)r6   rP  r   desc_sig_namerH  r   get_lookup_key	desc_nameappendrK  	Exception)r5  r`  ra  rb  rc  rd  r/  node
targetTextpnodenameNodes              r6  describe_signaturez ASTIdentifier.describe_signaturet  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Br8  )r=  r>  r?  r@  r7  rE   rP  rh   rZ  r<  r_  r   r  rA  r8  r6  rG  rG  P  s       %3 %4 % % % %
) ) ) ) )Cc Cc C C C C*    DC D D D D'C+ 'CS 'CGY 'C#&'C69'CCK'CPT'C 'C 'C 'C 'C 'Cr8  rG  c                   ~    e Zd Zdeedf         ddddfdZdefdZd	ede	fd
Z
dede	fdZdede	ddde	ddddfdZdS )ASTNestedNameElement	identOrOpASTOperatorrd  ASTTemplateArgsrz   Nc                 "    || _         || _        d S r4  r  rd  )r5  r  rd  s      r6  r7  zASTNestedNameElement.__init__  s    "(r8  c                     dS NFrA  r;  s    r6  is_operatorz ASTNestedNameElement.is_operator      ur8  rQ  c                     | j                             |          }| j        r|| j                            |          z  }|S r4  )r  rZ  rd  r5  rQ  ress      r6  rZ  zASTNestedNameElement.get_id  sB    n##G,, 	54$++G444C
r8  	transformc                 Z     || j                   }| j        r| || j                  z  }|S r4  r  r5  r  r  s      r6  
_stringifyzASTNestedNameElement._stringify  s:    i'' 	099T.///C
r8  r`  ra  rb  r   rc  r/  r0  c                     | j         t          | j                   nd}| j                            ||||||           | j         | j                             |d||           d S d S )Nr   rg  )rd  r@  r  r  )r5  r`  ra  rb  rc  r/  tArgss          r6  r  z'ASTNestedNameElement.describe_signature  ss    *.*;*GD%&&&R))'4feVTTT(00*c6RRRRR )(r8  )r=  r>  r?  r   rG  r7  rE   r  rh   r@  rZ  r*   r  r   r  rA  r8  r6  r  r    s        )%}(D"E )0)59) ) ) )
T    c c    $6 3    S+ SS S 2S<?SIQSVZS S S S S Sr8  r  c            
           e Zd Zdee         dee         deddfdZedd            Zde	fdZ
dd
e	dedefdZdedefdZdededdddddf
dZdS )ASTNestedNamenames	templatesrootedrz   Nc                     t          |          dk    sJ || _        || _        t          | j                  t          | j                  k    sJ || _        d S rJ  )rK  r  r  r  )r5  r  r  r  s       r6  r7  zASTNestedName.__init__  sQ    5zzA~~~~
"4:#dn"5"55555r8  c                     | S r4  rA  r;  s    r6  namezASTNestedName.name  s    r8  c                 `    d}| j         D ]#}|                                r|j        r|dz  }$|S Nr   rT  )r  r  rd  )r5  countr   s      r6  num_templateszASTNestedName.num_templates  sD     	 	A}} ~ 
r8  r   rQ  	modifiersc                 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 )NrT  ::c              3   B   K   | ]}|                               V  d S r4  rZ  ).0r   rQ  s     r6  	<genexpr>z'ASTNestedName.get_id.<locals>.<genexpr>  /       G Gq'!2!2 G G G G G Gr8  r   NEr   )r@  _id_shorthands_v1joinr  rK  rz  rZ  )r5  rQ  r  ttr  r   s    `    r6  rZ  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||r8  r  c                 d   g }| j         r|                    d           t          t          | j                            D ]\}| j        |         }| j        |         r"|                    d ||          z              >|                     ||                     ]d                    |          S )Nr   z	template r  )r  rz  rangerK  r  r  r  )r5  r  r  r   r   s        r6  r  zASTNestedName._stringify  s    ; 	JJrNNNs4:'' 	) 	)A
1A~a  )

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

99Q<<((((yy~~r8  r`  ra  rb  r   r/  r0  c                    t          |           |dk    r| j        rt          d          t          t          | j                            D ]Y}|dk    rt          d          | j        |         }| j        |         rt          d          |	                    |||d|           Zd 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            )Nrq  zCan this happen?r  r   z::blahr    r   rr  rT  )rg  rp  markNamerp  TFrg  rv  )r6   r  AssertionErrorr   Textr  rK  r  r  r  r@  r1  templatePrefixr   desc_addnamedesc_sig_punctuationdesc_sig_keyworddesc_sig_spacerd  r{  )r5  r`  ra  rb  r/  r   r   templateParamsiTemplateParamstemplateParamsPrefixrc  firstr  destnner   txt_nnes                    r6  r  z ASTNestedName.describe_signature  s   %%%<{ ,$%78883tz??++ 	E 	E66();<<<JqM>!$ /();<<< $$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Br8  )rz   r  )r   )r=  r>  r?  r   r  rE   r7  propertyr  rh   r  r@  rZ  r*   r  r   r  rA  r8  r6  r  r    s-       d#78  J049=       Xs     c c 3    $
$6 
3 
 
 
 
NC+ NCS NC 2NC<DNCIMNC NC NC NC NC NCr8  r  c            
       :    e Zd ZdedefdZdededddd	dd
f
dZd
S )ASTExpressionrQ  rz   c                 :    t          t          |                     r4  NotImplementedErrorreprrY  s     r6  rZ  zASTExpression.get_idE      !$t**---r8  r`  ra  rb  r   r/  r0  Nc                 :    t          t          |                     r4  r  r5  r`  ra  rb  r/  s        r6  r  z ASTExpression.describe_signatureH      !$t**---r8  r=  r>  r?  rh   r@  rZ  r   r  rA  r8  r6  r  r  D  p        .c .c . . . ..+ .S . 2.<D.IM. . . . . .r8  r  c                       e Zd ZdS )
ASTLiteralNrD  rA  r8  r6  r  r  P  rE  r8  r  c            
       J    e Zd ZdedefdZdedefdZdededd	d
dddf
dZ	dS )ASTPointerLiteralr  rz   c                     dS Nrp   rA  r5  r  s     r6  r  zASTPointerLiteral._stringifyU  s    yr8  rQ  c                     dS )NLDnErA  rY  s     r6  rZ  zASTPointerLiteral.get_idX      vr8  r`  ra  rb  r   r/  r0  Nc                 6    |t          j        dd          z  }d S r  r   r  r  s        r6  r  z$ASTPointerLiteral.describe_signature[  s    8,Y	BBBr8  
r=  r>  r?  r*   r@  r  rh   rZ  r   r  rA  r8  r6  r  r  T  s        $6 3    c c    C+ CS C 2C<DCIMC C C C C Cr8  r  c            
       Z    e Zd ZdeddfdZdedefdZdedefdZ	d	e
d
eddddddf
dZdS )ASTBooleanLiteralvaluerz   Nc                     || _         d S r4  r  r5  r  s     r6  r7  zASTBooleanLiteral.__init__a      


r8  r  c                     | j         rdS dS )Nr   ra   r  r  s     r6  r  zASTBooleanLiteral._stringifyd  s    : 	67r8  rQ  c                     | j         rdS dS )NL1EL0Er  rY  s     r6  rZ  zASTBooleanLiteral.get_idj  s    : 	55r8  r`  ra  rb  r   r/  r0  c                 j    |t          j        t          |           t          |                     z  }d S r4  )r   r  r@  r  s        r6  r  z$ASTBooleanLiteral.describe_signaturep  s)    8,SYYD		BBBr8  )r=  r>  r?  rE   r7  r*   r@  r  rh   rZ  r   r  rA  r8  r6  r  r  `  s        d t    $6 3    c c    C+ CS C 2C<DCIMC C C C C Cr8  r  c            
       Z    e Zd ZdeddfdZdedefdZdedefdZd	e	d
eddddddf
dZ
dS )ASTNumberLiteraldatarz   Nc                     || _         d S r4  r  r5  r  s     r6  r7  zASTNumberLiteral.__init__v      			r8  r  c                     | j         S r4  r  r  s     r6  r  zASTNumberLiteral._stringifyy  
    yr8  rQ  c                 >    d| j                             dd          z  S )NzL%sE'r   )r  replacerY  s     r6  rZ  zASTNumberLiteral.get_id|  s    	))#r2222r8  r`  ra  rb  r   r/  r0  c                 J    |t          j        | j        | j                  z  }d S r4  )r   desc_sig_literal_numberr  r  s        r6  r  z#ASTNumberLiteral.describe_signature  !    83DItyIIIr8  r=  r>  r?  r@  r7  r*   r  rh   rZ  r   r  rA  r8  r6  r  r  u  s        S T    $6 3    3c 3c 3 3 3 3J+ JS J 2J<DJIMJ J J J J Jr8  r  c            
       Z    e Zd ZdeddfdZdedefdZdedefdZd	e	d
eddddddf
dZ
dS )ASTStringLiteralr  rz   Nc                     || _         d S r4  r  r  s     r6  r7  zASTStringLiteral.__init__  r  r8  r  c                     | j         S r4  r  r  s     r6  r  zASTStringLiteral._stringify  r  r8  rQ  c                 6    dt          | j                  dz
  z  S )NzLA%d_KcE   )rK  r  rY  s     r6  rZ  zASTStringLiteral.get_id  s    S^^a/00r8  r`  ra  rb  r   r/  r0  c                 J    |t          j        | j        | j                  z  }d S r4  )r   desc_sig_literal_stringr  r  s        r6  r  z#ASTStringLiteral.describe_signature  r  r8  r  rA  r8  r6  r  r    s        S T    $6 3    1c 1c 1 1 1 1J+ JS J 2J<DJIMJ J J J J Jr8  r  c            
       ^    e Zd ZdededdfdZdedefdZdedefd	Zd
e	deddddddf
dZ
dS )ASTCharLiteralrc  r  rz   Nc                    || _         || _        |t          v sJ t          |         | _        |                                                    d          }t          |          dk    rt          |          | _        d S t          |          )Nzunicode-escaperT  )
rc  r  r(  typeencodedecoderK  ordr  r+   )r5  rc  r  decodeds       r6  r7  zASTCharLiteral.__init__  sz    	-----(0	++--&&'788w<<1WDJJJ6w???r8  r  c                 T    | j         d| j        z   dz   S | j         dz   | j        z   dz   S Nr  )rc  r  r  s     r6  r  zASTCharLiteral._stringify  s4    ;?S((;$ty0366r8  rQ  c                 :    | j         t          | j                  z   S r4  )r  r@  r  rY  s     r6  rZ  zASTCharLiteral.get_id  s    y3tz??**r8  r`  ra  rb  r   r/  r0  c                     | j         "|t          j        | j         | j                   z  }d| j        z   dz   }|t          j        ||          z  }d S r	  )rc  r   r  r  desc_sig_literal_char)r5  r`  ra  rb  r/  txts         r6  r  z!ASTCharLiteral.describe_signature  sP    ;"x0dkJJJGDIo#81#s;;;r8  r  rA  r8  r6  r  r    s        	@s 	@# 	@$ 	@ 	@ 	@ 	@7$6 73 7 7 7 7+c +c + + + +<+ <S < 2<<D<IM< < < < < <r8  r  c            
       Z    e Zd ZdedefdZdedefdZde	defdZ
d	ed
eddddddf
dZdS )ASTUserDefinedLiteralliteralidentc                 "    || _         || _        d S r4  r  r  )r5  r  r  s      r6  r7  zASTUserDefinedLiteral.__init__  s    


r8  r  rz   c                 D     || j                    || j                  z   S r4  r  r  s     r6  r  z ASTUserDefinedLiteral._stringify  s%    y&&4:)>)>>>r8  rQ  c                     d                     | j                            |          | j                            |                    S )NzclL_Zli{}E{}E)formatr  rZ  r  rY  s     r6  rZ  zASTUserDefinedLiteral.get_id  s9    %%dj&7&7&@&@$,BUBUV]B^B^___r8  r`  ra  rb  r   r/  r0  Nc                 ~    | j                             ||||           | j                            |d|dd|           d S )Nrt  r   )r  r  r  r  s        r6  r  z(ASTUserDefinedLiteral.describe_signature  sD    ''sFCCC
%%guc2r6JJJJJr8  )r=  r>  r?  r  rG  r7  r*   r@  r  rh   rZ  r   r  rA  r8  r6  r  r    s        
 =    ?$6 ?3 ? ? ? ?`c `c ` ` ` `K+ KS K 2K<DKIMK K K K K Kr8  r  c            
       J    e Zd ZdedefdZdedefdZdededd	d
dddf
dZ	dS )ASTThisLiteralr  rz   c                     dS Nr   rA  r  s     r6  r  zASTThisLiteral._stringify  r  r8  rQ  c                     dS )NfpTrA  rY  s     r6  rZ  zASTThisLiteral.get_id  r  r8  r`  ra  rb  r   r/  r0  Nc                 6    |t          j        dd          z  }d S r  r  r  s        r6  r  z!ASTThisLiteral.describe_signature  s    8,VV<<<r8  r  rA  r8  r6  r  r    s        $6 3    c c    =+ =S = 2=<D=IM= = = = = =r8  r  c            
       b    e Zd ZdedededdfdZdedefdZd	edefd
Z	de
deddddddf
dZdS )ASTFoldExprleftExprop	rightExprrz   Nc                 <    ||J || _         || _        || _        d S r4  r!  r"  r#  r5  r!  r"  r#  s       r6  r7  zASTFoldExpr.__init__  s,    #y'<'<'< "r8  r  c                 >   dg}| j         rg|                     || j                              |                    d           |                    | j                   |                    d           |                    d           | j        rg|                    d           |                    | j                   |                    d           |                     || j                             |                    d           d                    |          S )N(r  ...)r   )r!  rz  r"  r#  r  r  s      r6  r  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||r8  rQ  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 )NrS  flfrfLr   )r@  r!  rz  r#  _id_operator_v2r"  rZ  r  r  s      r6  rZ  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||r8  r`  ra  rb  r   r/  r0  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 )Nr(  r)  r*  )r   r  r!  r  r  desc_sig_operatorr"  r#  r  s        r6  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:::r8  )r=  r>  r?  r  r@  r7  r*   r  rh   rZ  r   r  rA  r8  r6  r   r     s        # ##%2#7;# # # #$6 3     c c    *;+ ;S ; 2;<D;IM; ; ; ; ; ;r8  r   c            
       V    e Zd ZdefdZdedefdZdedefdZ	de
d	ed
dddddf
dZdS )ASTParenExprexprc                     || _         d S r4  r4  r5  r4  s     r6  r7  zASTParenExpr.__init__  r  r8  r  rz   c                 .    d || j                   z   dz   S Nr(  r*  r6  r  s     r6  r  zASTParenExpr._stringify      YYty)))C//r8  rQ  c                 6    | j                             |          S r4  r4  rZ  rY  s     r6  rZ  zASTParenExpr.get_id      y(((r8  r`  ra  rb  r   r/  r0  Nc                     |t          j        dd          z  }| j                            ||||           |t          j        dd          z  }d S r9  r   r  r4  r  r  s        r6  r  zASTParenExpr.describe_signature  P    80c:::	$$WdC@@@80c:::r8  r=  r>  r?  r  r7  r*   r@  r  rh   rZ  r   r  rA  r8  r6  r3  r3    s        ]    0$6 03 0 0 0 0)c )c ) ) ) );+ ;S ; 2;<D;IM; ; ; ; ; ;r8  r3  c            
       V    e Zd ZdefdZdedefdZdedefdZ	de
d	ed
dddddf
dZdS )ASTIdExpressionr  c                     || _         d S r4  r  r5  r  s     r6  r7  zASTIdExpression.__init__#  s    			r8  r  rz   c                 "     || j                   S r4  rE  r  s     r6  r  zASTIdExpression._stringify'      y###r8  rQ  c                 6    | j                             |          S r4  r  rZ  rY  s     r6  rZ  zASTIdExpression.get_id*  r=  r8  r`  ra  rb  r   r/  r0  Nc                 @    | j                             ||||           d S r4  )r  r  r  s        r6  r  z"ASTIdExpression.describe_signature-  $    	$$WdC@@@@@r8  r=  r>  r?  r  r7  r*   r@  r  rh   rZ  r   r  rA  r8  r6  rC  rC  "  s        ]    $$6 $3 $ $ $ $)c )c ) ) ) )A+ AS A 2A<DAIMA A A A A Ar8  rC  c            
       >    e Zd ZdededefdZdededdd	d
ddf
dZdS )ASTPostfixOpidPrefixrQ  rz   c                 :    t          t          |                     r4  r  r5  rP  rQ  s      r6  rZ  zASTPostfixOp.get_id6  r  r8  r`  ra  rb  r   r/  r0  Nc                 :    t          t          |                     r4  r  r  s        r6  r  zASTPostfixOp.describe_signature9  r  r8  )r=  r>  r?  r@  rh   rZ  r   r  rA  r8  r6  rO  rO  5  sw        .s .S .S . . . ..+ .S . 2.<D.IM. . . . . .r8  rO  c            
       Z    e Zd ZdefdZdedefdZdededefdZ	d	e
d
eddddddf
dZdS )ASTPostfixArrayr4  c                     || _         d S r4  r6  r7  s     r6  r7  zASTPostfixArray.__init__?  r  r8  r  rz   c                 .    d || j                   z   dz   S N[]r6  r  s     r6  r  zASTPostfixArray._stringifyB  r:  r8  rP  rQ  c                 B    d|z   | j                             |          z   S )Nr  r<  rR  s      r6  rZ  zASTPostfixArray.get_idE  !    h!1!1'!:!:::r8  r`  ra  rb  r   r/  r0  Nc                     |t          j        dd          z  }| j                            ||||           |t          j        dd          z  }d S rX  r?  r  s        r6  r  z"ASTPostfixArray.describe_signatureH  r@  r8  rA  rA  r8  r6  rU  rU  >  s        ]    0$6 03 0 0 0 0;s ;S ;S ; ; ; ;;+ ;S ; 2;<D;IM; ; ; ; ; ;r8  rU  c            
       Z    e Zd ZdefdZdedefdZdededefdZ	d	e
d
eddddddf
dZdS )ASTPostfixMemberr  c                     || _         d S r4  rE  rF  s     r6  r7  zASTPostfixMember.__init__P  r  r8  r  rz   c                 (    d || j                   z   S )N.rE  r  s     r6  r  zASTPostfixMember._stringifyS  s    YYty))))r8  rP  rQ  c                 B    d|z   | j                             |          z   S )NdtrJ  rR  s      r6  rZ  zASTPostfixMember.get_idV  r\  r8  r`  ra  rb  r   r/  r0  Nc                 p    |t          j        dd          z  }| j                            |d||           d S )Nrb  rq  )r   r  r  r  r  s        r6  r  z#ASTPostfixMember.describe_signatureY  s;    80c:::	$$WlCHHHHHr8  rM  rA  r8  r6  r_  r_  O  s        ]    *$6 *3 * * * *;s ;S ;S ; ; ; ;I+ IS I 2I<DIIMI I I I I Ir8  r_  c            
       Z    e Zd ZdefdZdedefdZdededefdZ	d	e
d
eddddddf
dZdS )ASTPostfixMemberOfPointerr  c                     || _         d S r4  rE  rF  s     r6  r7  z"ASTPostfixMemberOfPointer.__init__`  r  r8  r  rz   c                 (    d || j                   z   S )Nr   rE  r  s     r6  r  z$ASTPostfixMemberOfPointer._stringifyc  s    ii	****r8  rP  rQ  c                 B    d|z   | j                             |          z   S )Nr  rJ  rR  s      r6  rZ  z ASTPostfixMemberOfPointer.get_idf  r\  r8  r`  ra  rb  r   r/  r0  Nc                 p    |t          j        dd          z  }| j                            |d||           d S )Nr   rq  )r   r1  r  r  r  s        r6  r  z,ASTPostfixMemberOfPointer.describe_signaturei  s;    8-dD999	$$WlCHHHHHr8  rM  rA  r8  r6  rg  rg  _  s        ]    +$6 +3 + + + +;s ;S ;S ; ; ; ;I+ IS I 2I<DIIMI I I I I Ir8  rg  c            
       N    e Zd ZdedefdZdededefdZdeded	d
ddddf
dZ	dS )ASTPostfixIncr  rz   c                     dS Nr   rA  r  s     r6  r  zASTPostfixInc._stringifyp      tr8  rP  rQ  c                     d|z   S )Nr  rA  rR  s      r6  rZ  zASTPostfixInc.get_ids      hr8  r`  ra  rb  r   r/  r0  Nc                 6    |t          j        dd          z  }d S ro  r   r1  r  s        r6  r  z ASTPostfixInc.describe_signaturev      8-dD999r8  r  rA  r8  r6  rm  rm  o          $6 3    s S S    :+ :S : 2:<D:IM: : : : : :r8  rm  c            
       N    e Zd ZdedefdZdededefdZdeded	d
ddddf
dZ	dS )ASTPostfixDecr  rz   c                     dS Nr   rA  r  s     r6  r  zASTPostfixDec._stringify|  rp  r8  rP  rQ  c                     d|z   S )Nr  rA  rR  s      r6  rZ  zASTPostfixDec.get_id  rr  r8  r`  ra  rb  r   r/  r0  Nc                 6    |t          j        dd          z  }d S rz  rt  r  s        r6  r  z ASTPostfixDec.describe_signature  ru  r8  r  rA  r8  r6  rx  rx  {  rv  r8  rx  c            
       j    e Zd Zded         ddfdZdedefdZded	edefd
Z	de
deddddddf
dZdS )ASTPostfixCallExprlstASTParenExprListASTBracedInitListrz   Nc                     || _         d S r4  r  )r5  r  s     r6  r7  zASTPostfixCallExpr.__init__      r8  r  c                 "     || j                   S r4  r  r  s     r6  r  zASTPostfixCallExpr._stringify  s    y"""r8  rP  rQ  c                     d|g}| j         j        D ]*}|                    |                    |                     +|                    d           d                    |          S )Nr  r  r   )r  exprsrz  rZ  r  )r5  rP  rQ  r  r   s        r6  rZ  zASTPostfixCallExpr.get_id  s_    X 	* 	*AJJqxx(())))

3wws||r8  r`  ra  rb  r   r/  r0  c                 @    | j                             ||||           d S r4  )r  r  r  s        r6  r  z%ASTPostfixCallExpr.describe_signature  s$    ##GT3?????r8  )r=  r>  r?  r   r7  r*   r@  r  rh   rZ  r   r  rA  r8  r6  r~  r~    s        E"IJ t    #$6 #3 # # # #s S S    @+ @S @ 2@<D@IM@ @ @ @ @ @r8  r~  c            
       f    e Zd Zdddee         fdZdedefdZde	defd	Z
d
ededdddddf
dZdS )ASTPostfixExprrc  ASTType	postFixesc                 "    || _         || _        d S r4  )rc  r  )r5  rc  r  s      r6  r7  zASTPostfixExpr.__init__  s    "r8  r  rz   c                      || j                   g}| j        D ] }|                     ||                     !d                    |          S Nr   )rc  r  rz  r  )r5  r  r  ps       r6  r  zASTPostfixExpr._stringify  sT    y%%& 	% 	%AJJyy||$$$$wws||r8  rQ  c                 z    | j                             |          }| j        D ]}|                    ||          }|S r4  )rc  rZ  r  )r5  rQ  idr  s       r6  rZ  zASTPostfixExpr.get_id  sB    [(( 	' 	'A"g&&BB	r8  r`  ra  rb  r   r/  r0  Nc                     | j                             ||||           | j        D ]}|                    ||||           d S r4  )rc  r  r  )r5  r`  ra  rb  r/  r  s         r6  r  z!ASTPostfixExpr.describe_signature  sV    &&wc6BBB 	= 	=A  $V<<<<	= 	=r8  )r=  r>  r?  r   rO  r7  r*   r@  r  rh   rZ  r   r  rA  r8  r6  r  r    s        #y #T,5G # # # #$6 3    c c    =+ =S = 2=<D=IM= = = = = =r8  r  c            
       ^    e Zd ZdedddefdZdedefdZd	edefd
Z	de
deddddddf
dZdS )ASTExplicitCastcasttypr  r4  c                 F    |t           v sJ || _        || _        || _        d S r4  )_id_explicit_castr  r  r4  )r5  r  r  r4  s       r6  r7  zASTExplicitCast.__init__  s-    (((((				r8  r  rz   c                 F   | j         g}|                    d           |                     || j                             |                    d           |                     || j                             |                    d           d                    |          S )Nr   z>(r*  r   )r  rz  r  r4  r  r  s      r6  r  zASTExplicitCast._stringify  s    yk

3

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

4

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

3wws||r8  rQ  c                     t           | j                 | j                            |          z   | j                            |          z   S r4  )r  r  r  rZ  r4  rY  s     r6  rZ  zASTExplicitCast.get_id  s?    !$),(()	  ))* 	+r8  r`  ra  rb  r   r/  r0  Nc                 ~   |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   r(  r*  )r   r  r  r  r  r  r4  r  s        r6  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:::r8  r=  r>  r?  r@  r  r7  r*   r  rh   rZ  r   r  rA  r8  r6  r  r    s        S y     $6 3    +c +c + + + +
;+ ;S ; 2;<D;IM; ; ; ; ; ;r8  r  c            
       j    e Zd Zdedef         defdZdedefdZ	de
defd	Zd
ededdddddf
dZdS )	ASTTypeId
typeOrExprr  isTypec                 "    || _         || _        d S r4  )r  r  )r5  r  r  s      r6  r7  zASTTypeId.__init__  s    $r8  r  rz   c                 .    d || j                   z   dz   S )Nztypeid(r*  )r  r  s     r6  r  zASTTypeId._stringify  s    99T_555;;r8  rQ  c                 R    | j         rdnd}|| j                            |          z   S )Ntite)r  r  rZ  )r5  rQ  rc  s      r6  rZ  zASTTypeId.get_id  s-    .$..w7777r8  r`  ra  rb  r   r/  r0  Nc                     |t          j        dd          z  }|t          j        dd          z  }| j                            ||||           |t          j        dd          z  }d S )Nr   r(  r*  )r   r  r  r  r  r  s        r6  r  zASTTypeId.describe_signature  sg    8,Xx@@@80c:::**7D#vFFF80c:::r8  )r=  r>  r?  r   r  rE   r7  r*   r@  r  rh   rZ  r   r  rA  r8  r6  r  r    s        5M)A#B D    <$6 <3 < < < <8c 8c 8 8 8 8;+ ;S ; 2;<D;IM; ; ; ; ; ;r8  r  c            
       Z    e Zd ZdedefdZdedefdZdedefdZ	d	e
d
eddddddf
dZdS )ASTUnaryOpExprr"  r4  c                 "    || _         || _        d S r4  r"  r4  )r5  r"  r4  s      r6  r7  zASTUnaryOpExpr.__init__  s    			r8  r  rz   c                     | j         d         dv r| j         dz    || j                  z   S | j          || j                  z   S )Nr   cnr  r  r  s     r6  r  zASTUnaryOpExpr._stringify  sI    71:7S=99TY#7#7777YYty1111r8  rQ  c                 \    t           | j                 | j                            |          z   S r4  )_id_operator_unary_v2r"  r4  rZ  rY  s     r6  rZ  zASTUnaryOpExpr.get_id  s$    $TW-	0@0@0I0IIIr8  r`  ra  rb  r   r/  r0  Nc                    | 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  r1  r4  r  r  s        r6  r  z!ASTUnaryOpExpr.describe_signature  s    71:x0$'BBBGx.000GGx1$'47CCCG	$$WdC@@@@@r8  r  rA  r8  r6  r  r    s        3 m    2$6 23 2 2 2 2Jc Jc J J J JA+ AS A 2A<DAIMA A A A A Ar8  r  c            
       V    e Zd ZdefdZdedefdZdedefdZ	de
d	ed
dddddf
dZdS )ASTSizeofParamPackrH  c                     || _         d S r4  rO  rL  s     r6  r7  zASTSizeofParamPack.__init__      $r8  r  rz   c                 .    d || j                   z   dz   S )Nz
sizeof...(r*  rO  r  s     r6  r  zASTSizeofParamPack._stringify  s    ii8883>>r8  rQ  c                 <    d| j                             |          z   S )NsZ)rH  rZ  rY  s     r6  rZ  zASTSizeofParamPack.get_id  s    do,,W5555r8  r`  ra  rb  r   r/  r0  Nc                    |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 )Nr}   r)  r(  rg  r   )r/  rc  rd  r*  )r   r  r  rH  r  r  s        r6  r  z%ASTSizeofParamPack.describe_signature  s    8,Xx@@@80>>>80c:::**7J28RT 	+ 	V 	V 	V80c:::r8  )r=  r>  r?  rG  r7  r*   r@  r  rh   rZ  r   r  rA  r8  r6  r  r    s        %= % % % %?$6 ?3 ? ? ? ?6c 6c 6 6 6 6;+ ;S ; 2;<D;IM; ; ; ; ; ;r8  r  c            
       R    e Zd ZddZdedefdZdedefdZd	e	d
eddddddf
dZ
dS )ASTSizeofTyper  r  c                     || _         d S r4  r  r5  r  s     r6  r7  zASTSizeofType.__init__  r  r8  r  rz   c                 .    d || j                   z   dz   S )Nzsizeof(r*  r  r  s     r6  r  zASTSizeofType._stringify  s    99TX...44r8  rQ  c                 <    d| j                             |          z   S )Nstr  rZ  rY  s     r6  rZ  zASTSizeofType.get_id      dhoog....r8  r`  ra  rb  r   r/  r0  Nc                     |t          j        dd          z  }|t          j        dd          z  }| j                            ||||           |t          j        dd          z  }d S )Nr}   r(  r*  r   r  r  r  r  r  s        r6  r  z ASTSizeofType.describe_signature  sg    8,Xx@@@80c:::##GT3???80c:::r8  r  r  r=  r>  r?  r7  r*   r@  r  rh   rZ  r   r  rA  r8  r6  r  r    s           5$6 53 5 5 5 5/c /c / / / /;+ ;S ; 2;<D;IM; ; ; ; ; ;r8  r  c            
       V    e Zd ZdefdZdedefdZdedefdZ	de
d	ed
dddddf
dZdS )ASTSizeofExprr4  c                     || _         d S r4  r6  r7  s     r6  r7  zASTSizeofExpr.__init__(  r  r8  r  rz   c                 (    d || j                   z   S )Nzsizeof r6  r  s     r6  r  zASTSizeofExpr._stringify+  s    99TY////r8  rQ  c                 <    d| j                             |          z   S )Nszr<  rY  s     r6  rZ  zASTSizeofExpr.get_id.      di&&w////r8  r`  ra  rb  r   r/  r0  Nc                     |t          j        dd          z  }|t          j                    z  }| j                            ||||           d S )Nr}   r   r  r  r4  r  r  s        r6  r  z ASTSizeofExpr.describe_signature1  sN    8,Xx@@@8*,,,	$$WdC@@@@@r8  rA  rA  r8  r6  r  r  '  s        ]    0$6 03 0 0 0 00c 0c 0 0 0 0A+ AS A 2A<DAIMA A A A A Ar8  r  c            
       R    e Zd ZddZdedefdZdedefdZd	e	d
eddddddf
dZ
dS )ASTAlignofExprr  r  c                     || _         d S r4  r  r  s     r6  r7  zASTAlignofExpr.__init__9  r  r8  r  rz   c                 .    d || j                   z   dz   S )Nzalignof(r*  r  r  s     r6  r  zASTAlignofExpr._stringify<  s    IIdh///#55r8  rQ  c                 <    d| j                             |          z   S )Natr  rY  s     r6  rZ  zASTAlignofExpr.get_id?  r  r8  r`  ra  rb  r   r/  r0  Nc                     |t          j        dd          z  }|t          j        dd          z  }| j                            ||||           |t          j        dd          z  }d S )Nr>   r(  r*  r  r  s        r6  r  z!ASTAlignofExpr.describe_signatureB  sg    8,Y	BBB80c:::##GT3???80c:::r8  r  r  rA  r8  r6  r  r  8  s           6$6 63 6 6 6 6/c /c / / / /;+ ;S ; 2;<D;IM; ; ; ; ; ;r8  r  c            
       V    e Zd ZdefdZdedefdZdedefdZ	de
d	ed
dddddf
dZdS )ASTNoexceptExprr4  c                     || _         d S r4  r6  r7  s     r6  r7  zASTNoexceptExpr.__init__K  r  r8  r  rz   c                 .    d || j                   z   dz   S )N	noexcept(r*  r6  r  s     r6  r  zASTNoexceptExpr._stringifyN      YYty111C77r8  rQ  c                 <    d| j                             |          z   S )Nnxr<  rY  s     r6  rZ  zASTNoexceptExpr.get_idQ  r  r8  r`  ra  rb  r   r/  r0  Nc                     |t          j        dd          z  }|t          j        dd          z  }| j                            ||||           |t          j        dd          z  }d S )Nrm   r(  r*  r   r  r  r4  r  r  s        r6  r  z"ASTNoexceptExpr.describe_signatureT  g    8,ZDDD80c:::	$$WdC@@@80c:::r8  rA  rA  r8  r6  r  r  J  s        ]    8$6 83 8 8 8 80c 0c 0 0 0 0;+ ;S ; 2;<D;IM; ; ; ; ; ;r8  r  c            
       r    e Zd Zdededdded         ddf
d	Zd
edefdZde	defdZ
dededdddddf
dZdS )
ASTNewExprr  isNewTypeIdr  r  initListr  rz   Nc                 >    || _         || _        || _        || _        d S r4  )r  r  r  r  )r5  r  r  r  r  s        r6  r7  zASTNewExpr.__init__]  s#    & r8  r  c                 X   g }| j         r|                    d           |                    d           | j        r$|                     || j                             nt	                      | j        #|                     || j                             d                    |          S )Nr  znew r   )r  rz  r  r  r  r  r  r  s      r6  r  zASTNewExpr._stringifyd  s    ; 	JJt

6 	#JJyy**++++ """=$JJyy//000wws||r8  rQ  c                 J   dg}|                     d           |                     | j                            |                     | j        .|                     | j                            |                     n|                     d           d                    |          S )Nr   r   r  r   )rz  r  rZ  r  r  r  s      r6  rZ  zASTNewExpr.get_idr  s    f

3

48??7++,,,=$JJt}++G445555JJsOOOwws||r8  r`  ra  rb  r   r/  r0  c                 R   | 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  rl   )
r  r   r  r  r  r  r  r  r  r  r  s        r6  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 %$r8  )r=  r>  r?  rE   r   r7  r*   r@  r  rh   rZ  r   r  rA  r8  r6  r  r  \  s        !t !$ !Y ! !HI!NR! ! ! !$6 3    
c 
c 
 
 
 
I+ IS I 2I<DIIMI I I I I Ir8  r  c            
       ^    e Zd ZdededefdZdedefdZde	defd	Z
d
ededdddddf
dZdS )ASTDeleteExprr  arrayr4  c                 0    || _         || _        || _        d S r4  )r  r  r4  )r5  r  r  r4  s       r6  r7  zASTDeleteExpr.__init__  s    
			r8  r  rz   c                    g }| j         r|                    d           |                    d           | j        r|                    d           |                     || j                             d                    |          S )Nr  zdelete z[] r   )r  rz  r  r4  r  r  s      r6  r  zASTDeleteExpr._stringify  s    ; 	JJt

9: 	JJu

99TY''(((wws||r8  rQ  c                 T    | j         rd}nd}|| j                            |          z   S )Nr   r   )r  r4  rZ  r5  rQ  r  s      r6  rZ  zASTDeleteExpr.get_id  s3    : 	BBBDI$$W----r8  r`  ra  rb  r   r/  r0  Nc                 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  rX   r   )r  r   r  r  r  r  r4  r  r  s        r6  r  z ASTDeleteExpr.describe_signature  s    ; 	Ax4T4@@@G8,Xx@@@8*,,,: 	1x4T4@@@Gx.000G	$$WdC@@@@@r8  )r=  r>  r?  rE   r  r7  r*   r@  r  rh   rZ  r   r  rA  r8  r6  r  r    s        t D     
$6 3    .c .c . . . .	A+ 	AS 	A 2	A<D	AIM	A 	A 	A 	A 	A 	Ar8  r  c            
       Z    e Zd ZdddefdZdedefdZdedefd	Z	d
e
deddddddf
dZdS )ASTCastExprr  r  r4  c                 "    || _         || _        d S r4  )r  r4  )r5  r  r4  s      r6  r7  zASTCastExpr.__init__  s    			r8  r  rz   c                     dg}|                      || j                             |                     d           |                      || j                             d                    |          S Nr(  r*  r   )rz  r  r4  r  r  s      r6  r  zASTCastExpr._stringify  sd    e

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

3

99TY''(((wws||r8  rQ  c                 r    d| j                             |          z   | j                            |          z   S )Ncv)r  rZ  r4  rY  s     r6  rZ  zASTCastExpr.get_id  s0    dhoog...1A1A'1J1JJJr8  r`  ra  rb  r   r/  r0  Nc                     |t          j        dd          z  }| j                            ||||           |t          j        dd          z  }| j                            ||||           d S r9  )r   r  r  r  r4  r  s        r6  r  zASTCastExpr.describe_signature  sn    80c:::##GT3???80c:::	$$WdC@@@@@r8  rA  rA  r8  r6  r  r    s        I ]    $6 3    Kc Kc K K K KA+ AS A 2A<DAIMA A A A A Ar8  r  c            
       r    e Zd Zdee         dee         fdZdedefdZde	defdZ
d	ed
eddddddf
dZdS )ASTBinOpExprr  opsc                     t          |          dk    sJ t          |          t          |          dz   k    sJ || _        || _        d S r  )rK  r  r  )r5  r  r  s      r6  r7  zASTBinOpExpr.__init__  sH    5zzA~~~~5zzSXX\))))
r8  r  rz   c                    g }|                      || j        d                              t          dt          | j                            D ]x}|                     d           |                     | j        |dz
                      |                     d           |                      || j        |                              yd                    |          S )Nr   rT  r  r   )rz  r  r  rK  r  r  )r5  r  r  r   s       r6  r  zASTBinOpExpr._stringify  s    

99TZ]++,,,q#dj//** 	1 	1AJJsOOOJJtxA'''JJsOOOJJyyA//0000wws||r8  rQ  c                    |dk    sJ g }t          t          | j                            D ]`}|                    t          | j        |                             |                    | j        |                             |                     a|                    | j        d                             |                     d                    |          S )Nr  r  r   )r  rK  r  rz  r/  r  rZ  r  )r5  rQ  r  r   s       r6  rZ  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||r8  r`  ra  rb  r   r/  r0  Nc                 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   rT  r   z)
r  r  r  rK  r   r  r  r  r  r1  )r5  r`  ra  rb  r/  r   r"  s          r6  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r8  )r=  r>  r?  r   r  r@  r7  r*   r  rh   rZ  r   r  rA  r8  r6  r  r    s        d=1 S	    $6 3    c c    I+ IS I 2I<DIIMI I I I I Ir8  r  c            
       ^    e Zd ZdededefdZdedefdZdedefd	Z	d
e
deddddddf
dZdS )ASTConditionalExprifExprthenExprelseExprc                 0    || _         || _        || _        d S r4  )r  r  r  )r5  r  r  r  s       r6  r7  zASTConditionalExpr.__init__  s      r8  r  rz   c                 V   g }|                      || j                             |                     d           |                      || j                             |                     d           |                      || j                             d                    |          S )Nz ?  : r   )rz  r  r  r  r  r  s      r6  r  zASTConditionalExpr._stringify  s    

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

5

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

5

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

?3'(((

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

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

4=''00111wws||r8  r`  ra  rb  r   r/  r0  Nc                    | 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  r1  r  r  r  s        r6  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Dr8  rA  rA  r8  r6  r  r    s        !} ! !(! ! ! !$6 3    c c    
E+ 
ES 
E 2
E<D
EIM
E 
E 
E 
E 
E 
Er8  r  c            
       z    e Zd Zdeeed f                  deddfdZdede	fdZ
dede	fd	Zd
ede	ddddddf
dZdS )r  r  trailingCommarz   Nc                 "    || _         || _        d S r4  )r  r  r5  r  r  s      r6  r7  zASTBracedInitList.__init__  s    
*r8  rQ  c                 V    dd                     fd| j        D                       z  S )Nzil%sEr   c              3   B   K   | ]}|                               V  d S r4  r  r  r   rQ  s     r6  r  z+ASTBracedInitList.get_id.<locals>.<genexpr>  r  r8  r  r  rY  s    `r6  rZ  zASTBracedInitList.get_id  1     G G G GDJ G G GGGGGr8  r  c                 v    fd| j         D             }| j        rdnd}dd                    |          |dS )Nc                 &    g | ]} |          S rA  rA  r  r   r  s     r6  
<listcomp>z0ASTBracedInitList._stringify.<locals>.<listcomp>"  !    222!1222r8  r   r   {, })r  r  r  )r5  r  r  r  s    `  r6  r  zASTBracedInitList._stringify!  sO    2222tz222#19r99U+++]]];;r8  r`  ra  rb  r   r/  r0  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  )r6   r   r  r  r  r  r  r5  r`  ra  rb  r/  r  r   s          r6  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:::r8  )r=  r>  r?  r   r   r  rE   r7  rh   r@  rZ  r*   r  r   r  rA  r8  r6  r  r    s        +d58K)K#LM + $+)-+ + + +
Hc Hc H H H H<$6 <3 < < < <
;+ ;S ; 2;<D;IM; ; ; ; ; ;r8  r  c            
       n    e Zd Zdededeeef         fdZdedefdZ	de
defd	Zd
ededdddddf
dZdS )ASTAssignmentExprr!  r"  r#  c                 0    || _         || _        || _        d S r4  r%  r&  s       r6  r7  zASTAssignmentExpr.__init__8  s     "r8  r  rz   c                 D   g }|                      || j                             |                     d           |                     | j                   |                     d           |                      || j                             d                    |          S Nr  r   )rz  r!  r"  r#  r  r  s      r6  r  zASTAssignmentExpr._stringify>  s    

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

3

47

3

99T^,,---wws||r8  rQ  c                 .   g }|                     t          | j                            |                     | j                            |                     |                     | j                            |                     d                    |          S r  )rz  r/  r"  r!  rZ  r#  r  r  s      r6  rZ  zASTAssignmentExpr.get_idG  st    

?47+,,,

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

4>((11222wws||r8  r`  ra  rb  r   r/  r0  Nc                    | 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  r1  r#  r  s        r6  r  z$ASTAssignmentExpr.describe_signatureO  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Er8  )r=  r>  r?  r  r@  r   r  r7  r*   r  rh   rZ  r   r  rA  r8  r6  r"  r"  7  s        # #C #!-1B"BC# # # #$6 3    c c    	F+ 	FS 	F 2	F<D	FIM	F 	F 	F 	F 	F 	Fr8  r"  c            
       b    e Zd Zdee         fdZdedefdZde	defdZ
ded	ed
dddddf
dZdS )ASTCommaExprr  c                 >    t          |          dk    sJ || _        d S rJ  )rK  r  r5  r  s     r6  r7  zASTCommaExpr.__init__\  s     5zzA~~~~


r8  r  rz   c                 P    d                     fd| j        D                       S )Nr  c              3   .   K   | ]} |          V  d S r4  rA  r  s     r6  r  z*ASTCommaExpr._stringify.<locals>.<genexpr>a  s+      ::!1::::::r8  r  r  s    `r6  r  zASTCommaExpr._stringify`  s,    yy::::tz::::::r8  rQ  c                    t           d         }g }t          t          | j                  dz
            D ]J}|                    |           |                    | j        |                             |                     K|                    | j        d                             |                     d                    |          S )Nr   rT  r  r   )r/  r  rK  r  rz  rZ  r  )r5  rQ  id_r  r   s        r6  rZ  zASTCommaExpr.get_idc  s    c"s4:*++ 	6 	6AJJsOOOJJtz!}++G445555

4:b>((11222wws||r8  r`  ra  rb  r   r/  r0  Nc                 8   | j         d                             ||||           t          dt          | j                             D ]S}|t	          j        dd          z  }|t	          j                    z  }| j         |                             ||||           Td S )Nr   rT  r   )r  r  r  rK  r   r  r  )r5  r`  ra  rb  r/  r   s         r6  r  zASTCommaExpr.describe_signaturel  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r8  )r=  r>  r?  r   r  r7  r*   r@  r  rh   rZ  r   r  rA  r8  r6  r)  r)  [  s        d=1    ;$6 ;3 ; ; ; ;c c    I+ IS I 2I<DIIMI I I I I Ir8  r)  c            
       V    e Zd ZdefdZdedefdZdedefdZde	d	ed
dddddf
dZ
dS )ASTFallbackExprr4  c                     || _         d S r4  r6  r7  s     r6  r7  zASTFallbackExpr.__init__v  r  r8  r  rz   c                     | j         S r4  r6  r  s     r6  r  zASTFallbackExpr._stringifyy  r  r8  rQ  c                 *    t          | j                  S r4  )r@  r4  rY  s     r6  rZ  zASTFallbackExpr.get_id|  s    49~~r8  r`  ra  rb  r   r/  r0  Nc                 J    |t          j        | j        | j                  z  }d S r4  )r   r  r4  r  s        r6  r  z"ASTFallbackExpr.describe_signature  s     5=DI666r8  r  rA  r8  r6  r2  r2  u  s        S    $6 3    c c    7+ 7S 7 27<D7IM7 7 7 7 7 7r8  r2  c                   v    e Zd ZdefdZdefdZdedefdZde	de	dd	d
dddf
dZ
de	dedd	deded
dddfdZdS )r  rz   c                     dS r  rA  r;  s    r6  rP  zASTOperator.is_anon  r  r8  c                     dS NTrA  r;  s    r6  r  zASTOperator.is_operator  rp  r8  rQ  c                     t                      r4  r  rY  s     r6  rZ  zASTOperator.get_id  s    !###r8  r`  	identnoderb  r   r/  r0  Nc                     t                      )zARender the prefix into signode, and the last part into identnode.r<  r5  r`  r=  rb  r/  s        r6  _describe_identifierz ASTOperator._describe_identifier  s     "###r8  ra  rc  rd  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 )Nrp  rg  r   rh  rH  ri  ro  )r6   r   ry  r@  r@  r   rx  r   r  astextr  )r5  r`  ra  rb  rc  rd  r/  mainNamer}  r~  	containerr  addNames                r6  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GGGr8  )r=  r>  r?  rE   rP  r  rh   r@  rZ  r   r@  r  rA  r8  r6  r  r    s            T    $c $c $ $ $ $$K $K $"4$>F$KO$ $ $ $
+ S  2<?OR#+04     r8  r  c            
       Z    e Zd ZdeddfdZdedefdZdedefdZd	e	d
e	ddddddf
dZ
dS )ASTOperatorBuildInr"  rz   Nc                     || _         d S r4  r"  )r5  r"  s     r6  r7  zASTOperatorBuildIn.__init__  s    r8  rQ  c                     |dk    rt           }| j        |vrt                      nt          }| j        |vrt	          d| j        z            || j                 S )NrT  zBInternal error: Built-in operator "%s" can not be mapped to an id.)_id_operator_v1r"  r)   r/  r{  )r5  rQ  idss      r6  rZ  zASTOperatorBuildIn.get_id  sm    a<<!Cwc!!"nn$ " "C7# 248G< = = =47|r8  r  c                 Z    | j         dv s| j         d         dv r
d| j         z   S d| j         z   S )Nrl   r   rX   r   r   abcnox	operator rq   rI  r  s     r6  r  zASTOperatorBuildIn._stringify  s:    7<<<
h@V@V((''r8  r`  r=  rb  r   r/  r0  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 )Nrq   rN  r   rO  )r   r  r"  r  r1  r?  s        r6  r@  z'ASTOperatorBuildIn._describe_identifier  si    8,ZDDD7<<<
h@V@Vx.000GX/AAA			r8  )r=  r>  r?  r@  r7  rh   rZ  r*   r  r   r@  rA  r8  r6  rG  rG    s        3 4    
c 
c 
 
 
 
($6 (3 ( ( ( (BK BK B"4B>FBKOB B B B B Br8  rG  c            
       Z    e Zd ZdeddfdZdedefdZdedefdZ	d	e
d
e
ddddddf
dZdS )ASTOperatorLiteralrH  rz   Nc                     || _         d S r4  rO  rL  s     r6  r7  zASTOperatorLiteral.__init__  r  r8  rQ  c                 d    |dk    rt                      d| j                            |          z   S )NrT  li)r)   rH  rZ  rY  s     r6  rZ  zASTOperatorLiteral.get_id  s0    a<<.. $/009999r8  r  c                 (    d || j                   z   S )Nru  rO  r  s     r6  r  zASTOperatorLiteral._stringify  s    ii8888r8  r`  r=  rb  r   r/  r0  c                     |t          j        dd          z  }|t          j        dd          z  }| j                            |d|dd|           d S )Nrq   ""rg  r   )r   r  r  rH  r  r?  s        r6  r@  z'ASTOperatorLiteral._describe_identifier  sV    8,ZDDD83D$???**9j#r2vVVVVVr8  )r=  r>  r?  rG  r7  rh   r@  rZ  r*   r  r   r@  rA  r8  r6  rS  rS    s        %= %T % % % %:c :c : : : :9$6 93 9 9 9 9WK WK W"4W>FWKOW W W W W Wr8  rS  c            
       ^    e Zd ZddZdedefdZdedefd	Zdefd
Z	de
de
ddddddf
dZdS )ASTOperatorTyper  r  rz   Nc                     || _         d S r4  )r  )r5  r  s     r6  r7  zASTOperatorType.__init__  r  r8  rQ  c                     |dk    rd| j                             |          z  S d| j                             |          z   S )NrT  zcastto-%s-operatorr  )r  rZ  rY  s     r6  rZ  zASTOperatorType.get_id  sA    a<<'$)*:*:7*C*CCC$)**73333r8  r  c                 L    d                     d || j                  g          S )Nr   rP  )r  r  r  s     r6  r  zASTOperatorType._stringify  s%    wwYYty%9%9:;;;r8  c                      t          |           S r4  r@  r;  s    r6  get_name_no_templatez$ASTOperatorType.get_name_no_template  s    4yyr8  r`  r=  rb  r   r/  r0  c                     |t          j        dd          z  }|t          j                    z  }| j                            |d||           d S )Nrq   rg  )r   r  r  r  r  r?  s        r6  r@  z$ASTOperatorType._describe_identifier  sN    8,ZDDD8*,,,	$$Y
CHHHHHr8  )r  r  rz   N)r=  r>  r?  r7  rh   r@  rZ  r*   r  ra  r   r@  rA  r8  r6  r[  r[    s           4c 4c 4 4 4 4<$6 <3 < < < <c    IK IK I"4I>FIKOI I I I I Ir8  r[  c            
       Z    e Zd ZdeddfdZdedefdZdedefdZ	d	e
d
eddddddf
dZdS )ASTTemplateArgConstantr  rz   Nc                     || _         d S r4  r  r  s     r6  r7  zASTTemplateArgConstant.__init__  r  r8  r  c                 "     || j                   S r4  r  r  s     r6  r  z!ASTTemplateArgConstant._stringify  s    y$$$r8  rQ  c                     |dk    r#t          |                               dd          S |dk    rdt          |           z   dz   S d| j                            |          z   dz   S )NrT  r  r   r  Xr  )r@  r  r  rZ  rY  s     r6  rZ  zASTTemplateArgConstant.get_id  se    a<<t99$$S#...a<<T?S((TZ&&w///#55r8  r`  ra  rb  r   r/  r0  c                 ^    t          |           | j                            ||||           d S r4  )r6   r  r  r  s        r6  r  z)ASTTemplateArgConstant.describe_signature  s2    %%%
%%gtS&AAAAAr8  rA  rA  r8  r6  rd  rd    s        m     %$6 %3 % % % %6c 6c 6 6 6 6B+ BS B 2B<DBIMB B B B B Br8  rd  c            
       z    e Zd Zdeedef                  deddfdZdede	fdZ
d	ede	fd
Zdede	ddddddf
dZdS )r  argsr  packExpansionrz   Nc                 *    |J || _         || _        d S r4  )rk  rl  )r5  rk  rl  s      r6  r7  zASTTemplateArgs.__init__  s#    	*r8  rQ  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 )NrT  r  rb  c              3   B   K   | ]}|                               V  d S r4  r  r  r   rQ  s     r6  r  z)ASTTemplateArgs.get_id.<locals>.<genexpr>   s/      EEa 1 1EEEEEEr8  r   Ir   r  Jr  )rz  r  rk  rK  rZ  rl  )r5  rQ  r  r   s    `  r6  rZ  zASTTemplateArgs.get_id  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||r8  r  c                 x    d                     fd| j        D                       }| j        r|dz  }d|z   dz   S )Nr  c              3   .   K   | ]} |          V  d S r4  rA  r  r   r  s     r6  r  z-ASTTemplateArgs._stringify.<locals>.<genexpr>2  s+      88		!888888r8  r)  r   r   )r  rk  rl  r  s    ` r6  r  zASTTemplateArgs._stringify1  sM    ii8888di88888 	5LCSy3r8  r`  ra  rb  r   r/  r0  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   Frg  r/  r)  r   )r6   r   r  rk  r  r  rl  )r5  r`  ra  rb  r/  r  r   s          r6  r  z"ASTTemplateArgs.describe_signature7  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:::r8  )r=  r>  r?  r   r   rd  rE   r7  rh   r@  rZ  r*   r  r   r  rA  r8  r6  r  r    s        +T%	3I(I"JK + $+)-+ + + +c c    *$6 3    ;+ ;S ; 2;<D;IM; ; ; ; ; ;r8  r  c            
       :    e Zd ZdedefdZdededddd	dd
f
dZd
S )ASTTrailingTypeSpecrQ  rz   c                 :    t          t          |                     r4  r  rY  s     r6  rZ  zASTTrailingTypeSpec.get_idK  r  r8  r`  ra  rb  r   r/  r0  Nc                 :    t          t          |                     r4  r  r  s        r6  r  z&ASTTrailingTypeSpec.describe_signatureN  r  r8  r  rA  r8  r6  ry  ry  J  r  r8  ry  c            
       v    e Zd Zdee         dee         ddfdZdedefdZdedefd	Z	d
e
deddddddf
dZdS )ASTTrailingTypeSpecFundamentalr  
canonNamesrz   Nc                     t          |          dk    sJ t          |          t          |          k    sJ ||f            || _        || _        d S rJ  )rK  r  r~  )r5  r  r~  s      r6  r7  z'ASTTrailingTypeSpecFundamental.__init__T  sQ    5zzQ5zzS__,,,uj.A,,,
$r8  r  c                 6    d                     | j                  S )Nr  )r  r  r  s     r6  r  z)ASTTrailingTypeSpecFundamental._stringify[  s    xx
###r8  rQ  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 )NrT  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_v1rz  r  _id_fundamental_v2r{  )r5  rQ  r  r   r  s        r6  rZ  z%ASTTrailingTypeSpecFundamental.get_id^  s    a<<C_ " "***JJ1!45555JJqMMMM88C== hht''(((24789 9 9 "#&&r8  r`  ra  rb  r   r/  r0  c                     d}| j         D ]5}|s|t          j                    z  }nd}|t          j        ||          z  }6d S )NTF)r  r   r  desc_sig_keyword_type)r5  r`  ra  rb  r/  r  r   s          r6  r  z1ASTTrailingTypeSpecFundamental.describe_signaturep  s]     	< 	<A 82444x5a;;;GG	< 	<r8  )r=  r>  r?  r   r@  r7  r*   r  rh   rZ  r   r  rA  r8  r6  r}  r}  S  s        %d3i %T#Y %4 % % % %$$6 $3 $ $ $ $'c 'c ' ' ' '$<+ <S < 2<<D<IM< < < < < <r8  r}  c            
       J    e Zd ZdedefdZdedefdZdededd	d
dddf
dZ	dS )ASTTrailingTypeSpecDecltypeAutor  rz   c                     dS )Nr   rA  r  s     r6  r  z*ASTTrailingTypeSpecDecltypeAuto._stringify|  s    r8  rQ  c                 .    |dk    rt                      dS )NrT  r   )r)   rY  s     r6  rZ  z&ASTTrailingTypeSpecDecltypeAuto.get_id  s    a<<.. tr8  r`  ra  rb  r   r/  r0  Nc                     |t          j        dd          z  }|t          j        dd          z  }|t          j        dd          z  }|t          j        dd          z  }d S )NrV   r(  rB   r*  )r   r  r  r  s        r6  r  z2ASTTrailingTypeSpecDecltypeAuto.describe_signature  sb    8,ZDDD80c:::8,VV<<<80c:::r8  r  rA  r8  r6  r  r  {  s         $6  3        c c    
;+ ;S ; 2;<D;IM; ; ; ; ; ;r8  r  c            
       V    e Zd ZdefdZdedefdZdedefdZ	de
d	ed
dddddf
dZdS )ASTTrailingTypeSpecDecltyper4  c                     || _         d S r4  r6  r7  s     r6  r7  z$ASTTrailingTypeSpecDecltype.__init__  r  r8  r  rz   c                 .    d || j                   z   dz   S )Nz	decltype(r*  r6  r  s     r6  r  z&ASTTrailingTypeSpecDecltype._stringify  r  r8  rQ  c                 j    |dk    rt                      d| j                            |          z   dz   S )NrT  DTr  )r)   r4  rZ  rY  s     r6  rZ  z"ASTTrailingTypeSpecDecltype.get_id  s5    a<<.. di&&w///#55r8  r`  ra  rb  r   r/  r0  Nc                     |t          j        dd          z  }|t          j        dd          z  }| j                            ||||           |t          j        dd          z  }d S )NrV   r(  r*  r  r  s        r6  r  z.ASTTrailingTypeSpecDecltype.describe_signature  r  r8  rA  rA  r8  r6  r  r    s        ]    8$6 83 8 8 8 86c 6c 6 6 6 6
;+ ;S ; 2;<D;IM; ; ; ; ; ;r8  r  c            
           e Zd Zdededee         ddfdZedefd            Zde	defd	Z
d
edefdZdededdddddf
dZdS )ASTTrailingTypeSpecNamerc  
nestedNameplaceholderTyperz   Nc                 0    || _         || _        || _        d S r4  )rc  r  r  )r5  rc  r  r  s       r6  r7  z ASTTrailingTypeSpecName.__init__  s    $.r8  c                     | j         S r4  r  r;  s    r6  r  zASTTrailingTypeSpecName.name  
    r8  rQ  c                 6    | j                             |          S r4  )r  rZ  rY  s     r6  rZ  zASTTrailingTypeSpecName.get_id  s    %%g...r8  r  c                 N   g }| j         r/|                    | j                    |                    d           |                     || j                             | j        /|                    d           |                    | j                   d                    |          S r%  )rc  rz  r  r  r  r  s      r6  r  z"ASTTrailingTypeSpecName._stringify  s    ; 	JJt{###JJsOOO

99T_--...+JJsOOOJJt+,,,wws||r8  r`  ra  rb  r   r/  r0  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 )Nrw  rB   r   rV   r(  r*  )	rc  r   r  r  r  r  r  r  r  r  s        r6  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::: ,+r8  )r=  r>  r?  r@  r  r	   r7  r  r  rh   rZ  r*   r  r   r  rA  r8  r6  r  r    s        /s / /"*3-/48/ / / / m    X/c /c / / / /	$6 	3 	 	 	 	;+ ;S ; 2;<D;IM; ; ; ; ; ;r8  r  c            
       x    e Zd Z	 dded         deddfdZdded	ed
ddefdZde	defdZ
dededdd
dddf
dZdS )ASTFunctionParameterFarg)ASTTypeWithInit'ASTTemplateParamConstrainedTypeWithInitellipsisrz   Nc                 "    || _         || _        d S r4  )r  r  )r5  r  r  s      r6  r7  zASTFunctionParameter.__init__  s      r8  rQ  
objectTyper/  r0  c                     |r!|j         j                            |d          S | j        rdS | j                            |          S )NFprefixedr  )parentr1  rZ  r  r  r5  rQ  r  r/  s       r6  rZ  zASTFunctionParameter.get_id  sL     	M=,33Ge3LLL= 	,38??7+++r8  r  c                 4    | j         rdS  || j                  S Nr)  )r  r  r  s     r6  r  zASTFunctionParameter._stringify  s#    = 	'59TX&&&r8  r`  ra  rb  r   c                     t          |           | j        r|t          j        dd          z  }d S | j                            ||||           d S )Nr)  rw  )r6   r  r   r  r  r  r  s        r6  r  z'ASTFunctionParameter.describe_signature  s[    %%%= 	Kx4UEBBBGGGH''s6'JJJJJr8  FNN)r=  r>  r?  r   rE   r7  rh   r@  rZ  r*   r  r   r  rA  r8  r6  r  r    s         #(! !E #L M !!,0! ! ! !	, 	,c 	,s 	,8 	,WZ 	, 	, 	, 	,'$6 '3 ' ' ' 'K+ KS K 2K<DKIMK K K K K Kr8  r  c            
       R    e Zd Zdee         fdZdedefdZde	dedd	d
dddf
dZ
dS )ASTNoexceptSpecr4  c                     || _         d S r4  r6  r7  s     r6  r7  zASTNoexceptSpec.__init__  r  r8  r  rz   c                 @    | j         rd || j                   z   dz   S dS )Nr  r*  rm   r6  r  s     r6  r  zASTNoexceptSpec._stringify  s-    9 	<49!5!55;;zr8  r`  ra  rb  r   r/  r0  Nc                     |t          j        dd          z  }| j        rO|t          j        dd          z  }| j                            |d||           |t          j        dd          z  }d S d S )Nrm   r(  rg  r*  r   r  r4  r  r  r  s        r6  r  z"ASTNoexceptSpec.describe_signature  s{    8,ZDDD9 	?x4S#>>>GI((*c6JJJx4S#>>>GGG	? 	?r8  r=  r>  r?  r	   r  r7  r*   r@  r  r   r  rA  r8  r6  r  r    s        Xm4    $6 3    
?+ ?S ? 2?<D?IM? ? ? ? ? ?r8  r  c                       e Zd Zdee         dededee         deddded	ed
e	dee         ddfdZ
edee         fd            ZdedefdZdedefdZdedefdZdededdddddf
dZdS )ASTParametersQualifiersrk  r   rP   refQualexceptionSpectrailingReturnr  overridefinalattrsinitializerrz   Nc                     || _         || _        || _        || _        || _        || _        || _        || _        |	| _        |
| _	        d S r4  )
rk  r   rP   r  r  r  r  r  r  r  )r5  rk  r   rP   r  r  r  r  r  r  r  s              r6  r7  z ASTParametersQualifiers.__init__   sS    
 	 
*, 

&r8  c                     | j         S r4  rk  r;  s    r6  function_paramsz'ASTParametersQualifiers.function_params  s
    yr8  rQ  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VrT  r   Kr   Or   Rr   )r   rz  rP   r  r  r  s      r6  get_modifiers_idz(ASTParametersQualifiers.get_modifiers_id  s    = 	JJsOOO: 	 !||

3

3<4JJsOOOO\S  JJsOOOwws||r8  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 )	NrT  r   r   r   rb  c              3   B   K   | ]}|                               V  d S r4  r  rp  s     r6  r  z7ASTParametersQualifiers.get_param_id.<locals>.<genexpr>(  s/      &L&LQqxx'8'8&L&L&L&L&L&Lr8  r   c              3   B   K   | ]}|                               V  d S r4  r  rp  s     r6  r  z7ASTParametersQualifiers.get_param_id.<locals>.<genexpr>,  s/      @@188G,,@@@@@@r8  )rK  rk  r  rY  s    `r6  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@@@@@@r8  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 )Nr(  Tr  Fr*  z	 volatilez constr  z ->  finalz	 overrider    = r   )rz  rk  r@  r   rP   r  r  r  r  r  rK  r  r  r  )r5  r  r  r  r   s        r6  r  z"ASTParametersQualifiers._stringify.  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||r8  r`  ra  rb  r   r/  r0  c                 >   t          |           |dk    rXt          j                    }| 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t          dt          dd f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 )Nrp  r   T)noemphrr  rw  r(  r   Frg  r*  r`  rf  rz   c                 b    | t          j                    z  } | t          j        ||          z  } d S r4  r   r  r  r`  rf  s     r6  	_add_annoz=ASTParametersQualifiers.describe_signature.<locals>._add_annog  s0    x.000Gx0t<<<GGGr8  r   rP   r   r  r  r   r   0rX   rW   r  )r6   r   desc_parameterlistrk  desc_parameterr  r  r  r   r@  r   rP   r  r  r  r1  r  r  rK  r  r  r  r  )
r5  r`  ra  rb  r/  	paramlistr  rr  r  r  s
             r6  r  z*ASTParametersQualifiers.describe_signatureQ  s   %%%< 355I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r8  )r=  r>  r?  r   r  rE   r	   r@  r  r$   r7  r  r  rh   r  r  r*   r  r   r  rA  r8  r6  r  r    sw       'T"67 '4 'PT '"3-'8G'!*'  ' )-' 6F' 'sm	' 15	' ' ' '  &:!;    X     	AC 	AC 	A 	A 	A 	A!$6 !3 ! ! ! !F8Y+ 8YS 8Y 28Y<D8YIM8Y 8Y 8Y 8Y 8Y 8Yr8  r  c                   R    e Zd Zdee         ddfdZdedefdZde	dd	d
dddfdZ
dS )ASTExplicitSpecr4  rz   Nc                     || _         d S r4  r6  r7  s     r6  r7  zASTExplicitSpec.__init__  r  r8  r  c                     dg}| j         M|                    d           |                     || j                              |                    d           d                    |          S )Nr^   r(  r*  r   )r4  rz  r  r  s      r6  r  zASTExplicitSpec._stringify  s]    l9 JJsOOOJJyy++,,,JJsOOOwws||r8  r`  rb  r   r/  r0  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^   r(  rg  r*  r  )r5  r`  rb  r/  s       r6  r  z"ASTExplicitSpec.describe_signature  sw    8,ZDDD9 x4S#>>>GI((*c6JJJx4S#>>>GGG ! r8  r  rA  r8  r6  r  r    s        Xm4     $6 3    ?+ ? 2?<D?IM? ? ? ? ? ?r8  r  c                       e Zd Zdededededee         dededed	ed
edededdfdZddZ	de
defdZdeddddddfdZdS )ASTDeclSpecsSimplestoragethreadLocalrg   r   explicitSpecrQ   rR   rS   r   rP   rd   r  rz   Nc                     || _         || _        || _        || _        || _        || _        || _        || _        |	| _        |
| _	        || _
        || _        d S r4  )r  r  rg   r   r  rQ   rR   rS   r   rP   rd   r  )r5  r  r  rg   r   r  rQ   rR   rS   r   rP   rd   r  s                r6  r7  zASTDeclSpecsSimple.__init__  s^    
 &(""" 



r8  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 r4  )r  r  r  rg   r   r  rQ   rR   rS   r   rP   rd   r  )r5  r  s     r6  	mergeWithzASTDeclSpecsSimple.mergeWith  s     	K!$,"?%-"&"2"Ge6G"&+"="&,"?%-"&"3"Iu7I"&."CEO"&."CEO"&."CEO"&-"A5>"&*";"&+"="&*u{":< < 	<r8  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   rg   rd   r   rQ   rR   rS   r   rP   r  )rK  r  rz  r  r  rg   rd   r   r  rQ   rR   rS   r   rP   r  r  s      r6  r  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}}r8  r`  rb  r   r/  r0  c                    | j                             |           t          | j                   dk    dt          dt          dt
          f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   r`  rf  rz   c                 h    r| t          j                    z  } | t          j        ||          z  } dS r:  r  )r`  rf  addSpaces     r6  _addz3ASTDeclSpecsSimple.describe_signature.<locals>._add  s:     582444x0t<<<G4r8  r   rg   rd   r   TrQ   rR   rS   r   rP   )r  r  rK  r   r@  rE   r  r  rg   rd   r   r  r   r  rQ   rR   rS   r   rP   )r5  r`  rb  r/  r  r  s        @r6  r  z%ASTDeclSpecsSimple.describe_signature  s   
%%g...tz??a'	+ 	S 	T 	 	 	 	 	 	 < 	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	. 	.r8  )r  r  rz   r  )r=  r>  r?  r@  rE   r	   r  r$   r7  r  r*   r  r   r  rA  r8  r6  r  r    s        $  t '8 -1>B   )- 7; )	 .2	   $< < < < $6 3    8#.+ #. 2#.<D#.IM#. #. #. #. #. #.r8  r  c            
       f    e Zd Zdededededdf
dZdedefd	Zd
e	defdZ
dededdddddf
dZdS )ASTDeclSpecsouter	leftSpecs
rightSpecstrailingrz   Nc                     || _         || _        || _        | j                            | j                  | _        || _        d S r4  )r  r  r  r  allSpecstrailingTypeSpec)r5  r  r  r  r  s        r6  r7  zASTDeclSpecs.__init__	  s@    
 
"$00AA (r8  rQ  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 )NrT  r  r   r   r  )rz  r  rZ  r  r   rP   r  r  s      r6  rZ  zASTDeclSpecs.get_id	  s    a<<CJJt,33G<<===}%  

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

3773<<=! 	JJsOOO= 	JJsOOO ,JJt,33G<<===wws||r8  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  rK  rz  r  r@  r  r  )r5  r  r  r   rs        r6  r  zASTDeclSpecs._stringify$	  s    Idn%%q66A::JJqMMM  	3xx!||

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

1wws||r8  r`  ra  rb  r   r/  r0  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 )Nrw  r   )	r6   rK  r  r  r  r   r  r@  r  )r5  r`  ra  rb  r/  numChildrenr  s          r6  r  zASTDeclSpecs.describe_signature4	  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 -,r8  )r=  r>  r?  r@  r  ry  r7  rh   rZ  r*   r  r   r  rA  r8  r6  r  r  	  s        	)c 	).	)<N	).	)37	) 	) 	) 	)c c    $$6 3     I+ IS I 2I<DIIMI I I I I Ir8  r  c            
       V    e Zd ZdefdZdedefdZdedefdZ	de
d	ed
dddddf
dZdS )ASTArraysizec                     || _         d S r4  r  )r5  r  s     r6  r7  zASTArray.__init__M	  r  r8  r  rz   c                 @    | j         rd || j                   z   dz   S dS )NrY  rZ  r   r  r  s     r6  r  zASTArray._stringifyP	  s-    9 	49---334r8  rQ  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 )NrT  Ar  r   A_)r  r@  rZ  rY  s     r6  rZ  zASTArray.get_idV	  so    a<<3a<<y S^^+c11t9 	))'222S884r8  r`  ra  rb  r   r/  r0  Nc                     t          |           |t          j        dd          z  }| j        r| j                            |d||           |t          j        dd          z  }d S )NrY  rg  rZ  )r6   r   r  r  r  r  s        r6  r  zASTArray.describe_signaturec	  si    %%%80c:::9 	KI((*c6JJJ80c:::r8  rA  rA  r8  r6  r  r  L	  s        ]    $6 3    c c    ;+ ;S ; 2;<D;IM; ; ; ; ; ;r8  r  c            
       (   e Zd Zedefd            Zej        deddfd            Zedefd            Zede	e
         fd            Zedd	            Zdefd
ZdedefdZdedefdZdedefdZdededefdZdefdZdededdddddf
dZdS )ASTDeclaratorrz   c                 :    t          t          |                     r4  r  r;  s    r6  r  zASTDeclarator.namem	  r  r8  r  Nc                 :    t          t          |                     r4  r  rF  s     r6  r  zASTDeclarator.nameq	  r  r8  c                 :    t          t          |                     r4  r  r;  s    r6  isPackzASTDeclarator.isPacku	  r  r8  c                 :    t          t          |                     r4  r  r;  s    r6  r  zASTDeclarator.function_paramsy	  r  r8  r  c                 :    t          t          |                     r4  r  r;  s    r6  r  zASTDeclarator.trailingReturn}	  r  r8  c                 :    t          t          |                     r4  r  r;  s    r6  require_space_after_declSpecsz+ASTDeclarator.require_space_after_declSpecs	  r  r8  rQ  c                 :    t          t          |                     r4  r  rY  s     r6  r  zASTDeclarator.get_modifiers_id	  r  r8  c                 :    t          t          |                     r4  r  rY  s     r6  r  zASTDeclarator.get_param_id	  r  r8  c                 :    t          t          |                     r4  r  rY  s     r6  get_ptr_suffix_idzASTDeclarator.get_ptr_suffix_id	  r  r8  returnTypeIdc                 :    t          t          |                     r4  r  r5  rQ  r  s      r6  get_type_idzASTDeclarator.get_type_id	  r  r8  c                 :    t          t          |                     r4  r  r;  s    r6  is_function_typezASTDeclarator.is_function_type	  r  r8  r`  ra  rb  r   r/  r0  c                 :    t          t          |                     r4  r  r  s        r6  r  z ASTDeclarator.describe_signature	  r  r8  rz   r  )r=  r>  r?  r  r  r  setterrE   r  r   r  r  r  r  rh   r@  r  r  r  r  r  r   r  rA  r8  r6  r  r  l	  s       .m . . . X. 
[. .4 . . . [. . . . . X. .&:!; . . . X. . . . X..t . . . .. . . . . ..C .C . . . .. . . . . ..3 .c .c . . . ..$ . . . ..+ .S . 2.<D.IM. . . . . .r8  r  c            
       \   e Zd Zdedee         deddfdZedefd            Z	e	j
        deddfd	            Z	edefd
            Zedee         fd            Zedd            ZdedefdZdedefdZdedefdZdededefdZdefdZdefdZdedefdZdededdddddf
dZdS ) ASTDeclaratorNameParamQualdeclIdarrayOps	paramQualrz   Nc                 0    || _         || _        || _        d S r4  r   r!  r"  )r5  r   r!  r"  s       r6  r7  z#ASTDeclaratorNameParamQual.__init__	  s      "r8  c                     | j         S r4  r   r;  s    r6  r  zASTDeclaratorNameParamQual.name	  
    {r8  r  c                     || _         d S r4  r&  rF  s     r6  r  zASTDeclaratorNameParamQual.name	      r8  c                     dS r  rA  r;  s    r6  r  z!ASTDeclaratorNameParamQual.isPack	      ur8  c                     | j         j        S r4  )r"  r  r;  s    r6  r  z*ASTDeclaratorNameParamQual.function_params	  s    ~--r8  r  c                     | j         j        S r4  )r"  r  r;  s    r6  r  z)ASTDeclaratorNameParamQual.trailingReturn	  s    ~,,r8  rQ  c                 h    | j         r| j                             |          S t          d| z            )Nz,This should only be called on a function: %s)r"  r  r{  rY  s     r6  r  z+ASTDeclaratorNameParamQual.get_modifiers_id	  s6    > 	<>227;;;FMNNNr8  c                 H    | j         r| j                             |          S dS r  )r"  r  rY  s     r6  r  z'ASTDeclaratorNameParamQual.get_param_id	  s'    > 	>..w7772r8  c                 P    d                     fd| j        D                       S )Nr   c              3   B   K   | ]}|                               V  d S r4  r  rp  s     r6  r  z?ASTDeclaratorNameParamQual.get_ptr_suffix_id.<locals>.<genexpr>	  s/      @@Qqxx((@@@@@@r8  )r  r!  rY  s    `r6  r  z,ASTDeclaratorNameParamQual.get_ptr_suffix_id	  s,    ww@@@@$-@@@@@@r8  r  c                    |dk    sJ g }|                     |                     |                     | j        r|                     |                     |                     |                     d           |                     |           |                     |                     |                     |                     d           n|                     |           d                    |          S )Nr  Fr  r   )rz  r  r"  r  r  r  r5  rQ  r  r  s       r6  r  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||r8  c                     | j         d uS r4  r&  r;  s    r6  r  z8ASTDeclaratorNameParamQual.require_space_after_declSpecs	      {$&&r8  c                     | j         d uS r4  )r"  r;  s    r6  r  z+ASTDeclaratorNameParamQual.is_function_type	  s    ~T))r8  r  c                 (   g }| j         r#|                     || j                              | j        D ] }|                     ||                     !| j        r#|                     || j                             d                    |          S r  )r   rz  r!  r"  r  )r5  r  r  r"  s       r6  r  z%ASTDeclaratorNameParamQual._stringify	  s    ; 	/JJyy--...- 	& 	&BJJyy}}%%%%> 	2JJyy00111wws||r8  r`  ra  rb  r   r/  r0  c                     t          |           | j        r| j                            ||||           | j        D ]}|                    ||||           | j        r| j                            ||||           d S d S r4  )r6   r   r  r!  r"  )r5  r`  ra  rb  r/  r"  s         r6  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r8  r  )r=  r>  r?  r  r   r  r  r7  r  r  r  rE   r  r  r  r  rh   r@  r  r  r  r  r  r  r*   r  r   r  rA  r8  r6  r  r  	  sO       #} #>#3#8<# # # # m    X 
[ 4    [     X .&:!; . . . X. - - - X-O O O O O OC C    A A A A A A3 c c    "'t ' ' ' '*$ * * * *$6 3    J+ JS J 2J<DJIMJ J J J J Jr8  r  c            
           e Zd ZdedefdZedefd            Zej        deddfd            Zd	e	de
fd
Zd	e	de
fdZdefdZdefdZdede
fdZdede
ddddddf
dZdS )ASTDeclaratorNameBitFieldr   r  c                 "    || _         || _        d S r4  r   r  )r5  r   r  s      r6  r7  z"ASTDeclaratorNameBitField.__init__	  s    			r8  rz   c                     | j         S r4  r&  r;  s    r6  r  zASTDeclaratorNameBitField.name	  r'  r8  r  Nc                     || _         d S r4  r&  rF  s     r6  r  zASTDeclaratorNameBitField.name	  r)  r8  rQ  c                     dS r  rA  rY  s     r6  r  z&ASTDeclaratorNameBitField.get_param_id	      rr8  c                     dS r  rA  rY  s     r6  r  z+ASTDeclaratorNameBitField.get_ptr_suffix_id 
  rA  r8  c                     | j         d uS r4  r&  r;  s    r6  r  z7ASTDeclaratorNameBitField.require_space_after_declSpecs
  r6  r8  c                     dS r  rA  r;  s    r6  r  z*ASTDeclaratorNameBitField.is_function_type
  r  r8  r  c                     g }| j         r#|                     || j                              |                    d           |                     || j                             d                    |          S )Nr
  r   )r   rz  r  r  r  s      r6  r  z$ASTDeclaratorNameBitField._stringify
  so    ; 	/JJyy--...

5

99TY''(((wws||r8  r`  ra  rb  r   r/  r0  c                 .   t          |           | j        r| j                            ||||           |t          j                    z  }|t          j        dd          z  }|t          j                    z  }| j                            ||||           d S )Nr  )r6   r   r  r   r  r  r  r  s        r6  r  z,ASTDeclaratorNameBitField.describe_signature
  s    %%%; 	GK**7D#vFFF8*,,,80c:::8*,,,	$$WdC@@@@@r8  )r=  r>  r?  r  r  r7  r  r  r  rh   r@  r  r  rE   r  r  r*   r  r   r  rA  r8  r6  r;  r;  	  so       } M     m    X 
[ 4    [C C         
't ' ' ' '$    $6 3    A+ AS A 2A<DAIMA A A A A Ar8  r;  c            
       T   e Zd Zdededededdf
dZedefd            Z	e	j
        d	eddfd
            Z	edefd            Zedee         fd            Zed d            ZdefdZdedefdZdedefdZdedefdZdedefdZdededefdZdefdZdededdddddf
dZdS )!ASTDeclaratorPtrnextr   rP   r  rz   Nc                 F    |sJ || _         || _        || _        || _        d S r4  rI  r   rP   r  )r5  rI  r   rP   r  s        r6  r7  zASTDeclaratorPtr.__init__
  s+    	 



r8  c                     | j         j        S r4  rI  r  r;  s    r6  r  zASTDeclaratorPtr.name'
      y~r8  r  c                     || j         _        d S r4  rM  rF  s     r6  r  zASTDeclaratorPtr.name+
      	r8  c                     | j         j        S r4  rI  r  r;  s    r6  r  zASTDeclaratorPtr.isPack/
      yr8  c                     | j         j        S r4  rI  r  r;  s    r6  r  z ASTDeclaratorPtr.function_params3
      y((r8  r  c                     | j         j        S r4  rI  r  r;  s    r6  r  zASTDeclaratorPtr.trailingReturn7
      y''r8  c                 4    | j                                         S r4  rI  r  r;  s    r6  r  z.ASTDeclaratorPtr.require_space_after_declSpecs;
      y66888r8  r  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   rP   r   )rz  r  rK  r   rP   rI  r  r  r  s      r6  r  zASTDeclaratorPtr._stringify>
  s    e

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

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

3

99TY''(((wws||r8  rQ  c                 6    | j                             |          S r4  rI  r  rY  s     r6  r  z!ASTDeclaratorPtr.get_modifiers_idO
      y))'222r8  c                 6    | j                             |          S r4  rI  r  rY  s     r6  r  zASTDeclaratorPtr.get_param_idR
      y%%g...r8  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 )NrT  Pr  r   r   )r   rz  rP   rI  r  r  r  s      r6  r  z"ASTDeclaratorPtr.get_ptr_suffix_idU
  s    a<<%C}  

3z  

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

3= 	JJsOOO: 	JJsOOOwws||r8  r  c                     dg}| j         r|                    d           | j        r|                    d           |                    |           | j                            |d                    |                    S )Nre  r  r   r   r  )r   rz  rP   rI  r  r  r4  s       r6  r  zASTDeclaratorPtr.get_type_idg
  sr    e= 	JJsOOO: 	JJsOOO

<   y$$W2773<<$HHHr8  c                 4    | j                                         S r4  rI  r  r;  s    r6  r  z!ASTDeclaratorPtr.is_function_typeq
      y))+++r8  r`  ra  rb  r   r/  r0  c                    t          |           |t          j        dd          z  }| j                            |           t          | j                  dk    r$| j        s| j        r|t          j                    z  }dt          dt          dd f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   r`  rf  rz   c                 6    | t          j        ||          z  } d S r4  r  r  s     r6  r  z6ASTDeclaratorPtr.describe_signature.<locals>._add_anno|
      x0t<<<GGGr8  r   rP   )r6   r   r  r  r  rK  r   rP   r  r   r@  rI  r  r5  r`  ra  rb  r/  r  s         r6  r  z#ASTDeclaratorPtr.describe_signaturet
  s_   %%%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@@@@@r8  r  )r=  r>  r?  r  rE   r$   r7  r  r  r  r  r  r   r  r  r  r  r*   r@  r  rh   r  r  r  r  r  r   r  rA  r8  r6  rH  rH  
  sL       ] d 4 (-1    m    X 
[ 4    [         X  )&:!; ) ) ) X) ( ( ( X(9t 9 9 9 9$6 3    "3 3 3 3 3 3/C /C / / / /     $I3 Ic Ic I I I I,$ , , , ,A+ AS A 2A<DAIMA A A A A Ar8  rH  c            
       L   e Zd ZdededdfdZedefd            Zej	        deddfd            Zede
fd	            Zedee         fd
            Zedd            Zde
fdZdedefdZdedefdZdedefdZdedefdZdededefdZde
fdZdededdddddf
dZdS )ASTDeclaratorRefrI  r  rz   Nc                 *    |sJ || _         || _        d S r4  rI  r  )r5  rI  r  s      r6  r7  zASTDeclaratorRef.__init__
  s    	


r8  c                     | j         j        S r4  rM  r;  s    r6  r  zASTDeclaratorRef.name
  rN  r8  r  c                     || j         _        d S r4  rM  rF  s     r6  r  zASTDeclaratorRef.name
  rP  r8  c                     | j         j        S r4  rR  r;  s    r6  r  zASTDeclaratorRef.isPack
  rS  r8  c                     | j         j        S r4  rU  r;  s    r6  r  z ASTDeclaratorRef.function_params
  rV  r8  r  c                     | j         j        S r4  rX  r;  s    r6  r  zASTDeclaratorRef.trailingReturn
  rY  r8  c                 4    | j                                         S r4  r[  r;  s    r6  r  z.ASTDeclaratorRef.require_space_after_declSpecs
  r\  r8  r  c                 J   dg}|                      || j                             t          | j                  dk    r.| j                                        r|                     d           |                      || j                             d                    |          S )Nr   r   r  r   )rz  r  rK  rI  r  r  r  s      r6  r  zASTDeclaratorRef._stringify
  s    e

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

99TY''(((wws||r8  rQ  c                 6    | j                             |          S r4  r_  rY  s     r6  r  z!ASTDeclaratorRef.get_modifiers_id
  r`  r8  c                 6    | j                             |          S r4  rb  rY  s     r6  r  zASTDeclaratorRef.get_param_id
  rc  r8  c                     |dk    rd| j                             |          z   S | j                             |          dz   S )NrT  r  rI  r  rY  s     r6  r  z"ASTDeclaratorRef.get_ptr_suffix_id
  sA    a<<44W====9..w77#==r8  r  c                 P    |dk    sJ | j                             |d|z             S )Nr  r  rg  rI  r  r  s      r6  r  zASTDeclaratorRef.get_type_id
  s/    !||||y$$W3;M$NNNr8  c                 4    | j                                         S r4  ri  r;  s    r6  r  z!ASTDeclaratorRef.is_function_type
  rj  r8  r`  ra  rb  r   r/  r0  c                 P   t          |           |t          j        dd          z  }| j                            |           t          | j                  dk    r/| j                                        r|t          j                    z  }| j                            ||||           d S )Nr   r   )	r6   r   r  r  r  rK  rI  r  r  r  s        r6  r  z#ASTDeclaratorRef.describe_signature
  s    %%%80c:::
%%g...tz??Q49#J#J#L#Lx.000G	$$WdC@@@@@r8  r  )r=  r>  r?  r  r$   r7  r  r  r  r  rE   r  r   r  r  r  r  r*   r@  r  rh   r  r  r  r  r  r   r  rA  r8  r6  rp  rp  
  s=       ] 3C     
 m    X 
[ 4    [         X  )&:!; ) ) ) X) ( ( ( X(9t 9 9 9 9$6 3    3 3 3 3 3 3/C /C / / / /> > > > > >O3 Oc Oc O O O O
,$ , , , ,A+ AS A 2A<DAIMA A A A A Ar8  rp  c            
       H   e Zd ZdeddfdZedefd            Zej        deddfd            Zede	e
         fd            Zedd
            Zedefd            ZdefdZdedefdZdedefdZdedefdZdedefdZdededefdZdefdZdededdddddf
dZdS )ASTDeclaratorParamPackrI  rz   Nc                     |sJ || _         d S r4  rI  )r5  rI  s     r6  r7  zASTDeclaratorParamPack.__init__
      			r8  c                     | j         j        S r4  rM  r;  s    r6  r  zASTDeclaratorParamPack.name
  rN  r8  r  c                     || j         _        d S r4  rM  rF  s     r6  r  zASTDeclaratorParamPack.name
  rP  r8  c                     | j         j        S r4  rU  r;  s    r6  r  z&ASTDeclaratorParamPack.function_params
  rV  r8  r  c                     | j         j        S r4  rX  r;  s    r6  r  z%ASTDeclaratorParamPack.trailingReturn
  rY  r8  c                     dS r:  rA  r;  s    r6  r  zASTDeclaratorParamPack.isPack
  s    tr8  c                     dS r  rA  r;  s    r6  r  z4ASTDeclaratorParamPack.require_space_after_declSpecs
  r  r8  r  c                 N     || j                   }| j         j        rd|z   }d|z   S )Nr  r)  rM  r  s      r6  r  z!ASTDeclaratorParamPack._stringify
  s2    i	""9> 	)Cs{r8  rQ  c                 6    | j                             |          S r4  r_  rY  s     r6  r  z'ASTDeclaratorParamPack.get_modifiers_id
  r`  r8  c                 6    | j                             |          S r4  rb  rY  s     r6  r  z#ASTDeclaratorParamPack.get_param_id
  rc  r8  c                     |dk    rd| j                             |          z   S | j                             |          dz   S )NrT  Dpr}  rY  s     r6  r  z(ASTDeclaratorParamPack.get_ptr_suffix_id
  sA    a<<$)55g>>>>9..w77$>>r8  r  c                 P    |dk    sJ | j                             |d|z             S )Nr  r  rg  r  r  s      r6  r  z"ASTDeclaratorParamPack.get_type_id
  s/    !||||y$$W4,;N$OOOr8  c                 4    | j                                         S r4  ri  r;  s    r6  r  z'ASTDeclaratorParamPack.is_function_type   rj  r8  r`  ra  rb  r   r/  r0  c                     t          |           |t          j        dd          z  }| j        j        r|t          j                    z  }| j                            ||||           d S r  )r6   r   r  rI  r  r  r  r  s        r6  r  z)ASTDeclaratorParamPack.describe_signature  sh    %%%80>>>9> 	1x.000G	$$WdC@@@@@r8  r  )r=  r>  r?  r  r7  r  r  r  r  r   r  r  r  rE   r  r  r*   r@  r  rh   r  r  r  r  r  r   r  rA  r8  r6  r  r  
  s5       ] t     m    X 
[ 4    [ )&:!; ) ) ) X) ( ( ( X(     Xt    $6 3    3 3 3 3 3 3/C /C / / / /? ? ? ? ? ?P3 Pc Pc P P P P
,$ , , , ,A+ AS A 2A<DAIMA A A A A Ar8  r  c            
       N   e Zd Zdededededdf
dZedefd            Zej	        d	eddfd
            Zed             Z
edee         fd            Zed d            ZdefdZdedefdZdedefdZdedefdZdedefdZdededefdZdefdZdededdddddf
dZdS )!ASTDeclaratorMemPtr	classNamerP   r   rI  rz   Nc                 N    |sJ |sJ || _         || _        || _        || _        d S r4  )r  rP   r   rI  )r5  r  rP   r   rI  s        r6  r7  zASTDeclaratorMemPtr.__init__  s7    "
 			r8  c                     | j         j        S r4  rM  r;  s    r6  r  zASTDeclaratorMemPtr.name  rN  r8  r  c                     || j         _        d S r4  rM  rF  s     r6  r  zASTDeclaratorMemPtr.name  rP  r8  c                     | j         j        S r4  rR  r;  s    r6  r  zASTDeclaratorMemPtr.isPack  rS  r8  c                     | j         j        S r4  rU  r;  s    r6  r  z#ASTDeclaratorMemPtr.function_params"  rV  r8  r  c                     | j         j        S r4  rX  r;  s    r6  r  z"ASTDeclaratorMemPtr.trailingReturn&  rY  r8  c                     dS r:  rA  r;  s    r6  r  z1ASTDeclaratorMemPtr.require_space_after_declSpecs*  rp  r8  r  c                    g }|                      || j                             |                     d           | j        r|                     d           | j        r1| j        r|                     d           |                     d           | j                                        r|                     d           |                      || j                             d                    |          S )Nz::*r   r  rP   r   )rz  r  r   rP   rI  r  r  r  s      r6  r  zASTDeclaratorMemPtr._stringify-  s    

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

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

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

99TY''(((wws||r8  rQ  c                 ^    |dk    rt                      | j                            |          S NrT  )r)   rI  r  rY  s     r6  r  z$ASTDeclaratorMemPtr.get_modifiers_id<  s+    a<<.. 9--g666r8  c                 ^    |dk    rt                      | j                            |          S r  )r)   rI  r  rY  s     r6  r  z ASTDeclaratorMemPtr.get_param_idB  s+    a<<.. 9))'222r8  c                 F    |dk    rt                      t                      r  )r)   r  rI  r  rY  s     r6  r  z%ASTDeclaratorMemPtr.get_ptr_suffix_idH  s!    a<<.. %'''r8  r  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   rP   r  rZ  rI  r  )r5  rQ  r  nextReturnTypeIds       r6  r  zASTDeclaratorMemPtr.get_type_idO  s    !||||= 	$#: 	$#CDN11':::L(y$$W.>???r8  c                 4    | j                                         S r4  ri  r;  s    r6  r  z$ASTDeclaratorMemPtr.is_function_type\  rj  r8  r`  ra  rb  r   r/  r0  c                    t          |           | j                            |d||           |t          j        dd          z  }|t          j        dd          z  }dt
          dt          dd fd}| j        r ||d           | j        r)| j        r|t          j	                    z  } ||d	           | j
                                        r|t          j	                    z  }| j
                            ||||           d S )
Nrg  r  r   r`  rf  rz   c                 6    | t          j        ||          z  } d S r4  r  r  s     r6  r  z9ASTDeclaratorMemPtr.describe_signature.<locals>._add_annof  rm  r8  r   rP   )r6   r  r  r   r  r   r@  r   rP   r  rI  r  rn  s         r6  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@@@@@r8  r  )r=  r>  r?  r  rE   r  r7  r  r  r  r  r   r  r  r  r  r*   r@  r  rh   r  r  r  r  r  r   r  rA  r8  r6  r  r    sB       - (,4AFJ    m    X 
[ 4    [     X  )&:!; ) ) ) X) ( ( ( X(t    $6 3    7 7 7 7 7 73C 3C 3 3 3 3? ? ? ? ? ?@3 @c @c @ @ @ @,$ , , , ,A+ AS A 2A<DAIMA A A A A Ar8  r  c            
       F   e Zd ZdededdfdZedefd            Zej        deddfd            Zed	             Z	ede
e         fd
            Zedd            ZdefdZdedefdZdedefdZdedefdZdedefdZdededefdZdefdZdededdddddf
dZdS )ASTDeclaratorPareninnerrI  rz   Nc                 2    |sJ |sJ || _         || _        d S r4  r  rI  )r5  r  rI  s      r6  r7  zASTDeclaratorParen.__init__t  s&    
			r8  c                     | j         j        S r4  r  r  r;  s    r6  r  zASTDeclaratorParen.name{  s    zr8  r  c                     || j         _        d S r4  r  rF  s     r6  r  zASTDeclaratorParen.name  s    
r8  c                 2    | j         j        p| j        j        S r4  )r  r  rI  r;  s    r6  r  zASTDeclaratorParen.isPack  s    z 4DI$44r8  c                     | j         j        S r4  )r  r  r;  s    r6  r  z"ASTDeclaratorParen.function_params  s    z))r8  r  c                     | j         j        S r4  )r  r  r;  s    r6  r  z!ASTDeclaratorParen.trailingReturn  s    z((r8  c                     dS r:  rA  r;  s    r6  r  z0ASTDeclaratorParen.require_space_after_declSpecs  rp  r8  r  c                     dg}|                      || j                             |                     d           |                      || j                             d                    |          S r  )rz  r  rI  r  r  s      r6  r  zASTDeclaratorParen._stringify  sd    e

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

3

99TY''(((wws||r8  rQ  c                 6    | j                             |          S r4  )r  r  rY  s     r6  r  z#ASTDeclaratorParen.get_modifiers_id  s    z**7333r8  c                 6    | j                             |          S r4  )r  r  rY  s     r6  r  zASTDeclaratorParen.get_param_id  s    z&&w///r8  c                     |dk    rt                      | j                            |          | j                            |          z   S r  )r)   rI  r  r  rY  s     r6  r  z$ASTDeclaratorParen.get_ptr_suffix_id  sG    a<<..  ://88	++G445 5r8  r  c                     |dk    sJ | j                             ||          }| j                            ||          S )Nr  rg  )rI  r  r  )r5  rQ  r  nextIds       r6  r  zASTDeclaratorParen.get_type_id  sA    !||||&&w==z%%gF%CCCr8  c                 4    | j                                         S r4  )r  r  r;  s    r6  r  z#ASTDeclaratorParen.is_function_type  s    z**,,,r8  r`  ra  rb  r   r/  r0  c                     t          |           |t          j        dd          z  }| j                            ||||           |t          j        dd          z  }| j                            |d||           d S )Nr(  r*  rq  )r6   r   r  r  r  rI  r  s        r6  r  z%ASTDeclaratorParen.describe_signature  s|    %%%80c:::
%%gtS&AAA80c:::	$$WlCHHHHHr8  r  )r=  r>  r?  r  r7  r  r  r  r  r  r   r  r  r  rE   r  r*   r@  r  rh   r  r  r  r  r  r   r  rA  r8  r6  r  r  s  s0       m = T     m    X 
[ 4    [ 5 5 X5 *&:!; * * * X* ) ) ) X)t    $6 3    4 4 4 4 4 40C 0C 0 0 0 05 5 5 5 5 5D3 Dc Dc D D D D-$ - - - -I+ IS I 2I<DIIMI I I I I Ir8  r  c            
       f    e Zd Zdeeef         fdZdedefdZ	de
defdZded	ed
dddddf
dZdS )ASTPackExpansionExprr4  c                     || _         d S r4  r6  r7  s     r6  r7  zASTPackExpansionExpr.__init__  r  r8  r  rz   c                 (     || j                   dz   S r  r6  r  s     r6  r  zASTPackExpansionExpr._stringify  s    y##e++r8  rQ  c                 @    | j                             |          }d|z   S )Nspr<  r  s      r6  rZ  zASTPackExpansionExpr.get_id  s!    Yg&&byr8  r`  ra  rb  r   r/  r0  Nc                 p    | j                             ||||           |t          j        dd          z  }d S r  )r4  r  r   r  r  s        r6  r  z'ASTPackExpansionExpr.describe_signature  s9    	$$WdC@@@80>>>r8  )r=  r>  r?  r   r  r  r7  r*   r@  r  rh   rZ  r   r  rA  r8  r6  r  r    s        U=2C#CD    ,$6 ,3 , , , ,c c    ?+ ?S ? 2?<D?IM? ? ? ? ? ?r8  r  c            
       v    e Zd Zdeeeef                  ddfdZdede	fdZ
dede	fdZd	ed
e	ddddddf
dZdS )r  r  rz   Nc                     || _         d S r4  )r  r+  s     r6  r7  zASTParenExprList.__init__  r  r8  rQ  c                 V    dd                     fd| j        D                       z  S )Nzpi%sEr   c              3   B   K   | ]}|                               V  d S r4  r  r  s     r6  r  z*ASTParenExprList.get_id.<locals>.<genexpr>  r  r8  r  rY  s    `r6  rZ  zASTParenExprList.get_id  r  r8  r  c                 Z    fd| j         D             }dd                    |          z  S )Nc                 &    g | ]} |          S rA  rA  r  s     r6  r  z/ASTParenExprList._stringify.<locals>.<listcomp>  r  r8  z(%s)r  )r  r  )r5  r  r  s    ` r6  r  zASTParenExprList._stringify  s5    2222tz222		%((((r8  r`  ra  rb  r   r/  r0  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 )Nr(  Tr   Fr*  )r6   r   r  r  r  r  r   s          r6  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:::r8  )r=  r>  r?  r   r   r  r  r7  rh   r@  rZ  r*   r  r   r  rA  r8  r6  r  r    s        d58I)I#JK PT    Hc Hc H H H H)$6 )3 ) ) ) );+ ;S ; 2;<D;IM; ; ; ; ; ;r8  r  c            
       b    e Zd Z	 ddeeef         deddfdZdede	fdZ
d	ed
e	ddddddf
dZdS )ASTInitializerTr  	hasAssignrz   Nc                 "    || _         || _        d S r4  r  r  )r5  r  r  s      r6  r7  zASTInitializer.__init__  s    
"r8  r  c                 >     || j                   }| j        rd|z   S |S Nr  r  )r5  r  vals      r6  r  zASTInitializer._stringify  s,    i
##> 	3;Jr8  r`  ra  rb  r   r/  r0  c                     t          |           | j        rD|t          j                    z  }|t          j        dd          z  }|t          j                    z  }| j                            |d||           d S )Nr   rg  )r6   r  r   r  r  r  r  r  s        r6  r  z!ASTInitializer.describe_signature  sy    %%%> 	1x.000Gx4S#>>>Gx.000G
%%gz3GGGGGr8  T)r=  r>  r?  r   r  r  rE   r7  r*   r@  r  r   r  rA  r8  r6  r  r    s        #'# #eM3D$DE # #,0# # # #
$6 3    H+ HS H 2H<DHIMH H H H H Hr8  r  c            
          e Zd ZdededdfdZedefd            Zej	        deddfd            Zede
fd	            Zedee         fd
            Zedd            Z	 	 ddededddefdZdedefdZdefdZdededdddddf
dZdS )r  	declSpecsdeclrz   Nc                 2    |sJ |sJ || _         || _        d S r4  )r  r  )r5  r  r  s      r6  r7  zASTType.__init__   s)    "			r8  c                     | j         j        S r4  r  r  r;  s    r6  r  zASTType.name  rN  r8  r  c                     || j         _        d S r4  r  rF  s     r6  r  zASTType.name
  rP  r8  c                     | j         j        S r4  )r  r  r;  s    r6  r  zASTType.isPack  rS  r8  c                     | j         j        S r4  )r  r  r;  s    r6  r  zASTType.function_params  rV  r8  c                     | j         j        S r4  )r  r  r;  s    r6  r  zASTType.trailingReturn  rY  r8  rQ  r  r/  r0  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 )NrT  functionCEr  r   r   )rz  get_full_nested_namerZ  r  r  r  r  r  rR   r  r  r  r)   r  r  r1  r  r  r  )	r5  rQ  r  r/  r  r  templtypeIdr  s	            r6  rZ  zASTType.get_id  sW   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||r8  r  c                 B   g } || j                   }|                    |           | j                                        r(t	          |          dk    r|                    d           |                     || j                             d                    |          S r  )r  rz  r  r  rK  r  )r5  r  r  r  s       r6  r  zASTType._stringifyP  s    Idn--	

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

99TY''(((wws||r8  c                 "    | j         j        rdS dS )Nr   r  )r  r  r;  s    r6  get_type_declaration_prefixz#ASTType.get_type_declaration_prefixY  s    >* 	96r8  r`  ra  rb  r   c                 P   t          |           | j                            |d||           | j                                        r;t          t          | j                            dk    r|t          j                    z  }|dk    rd}| j                            ||||           d S )Nrg  r   rq  )	r6   r  r  r  r  rK  r@  r   r  r  s        r6  r  zASTType.describe_signature_  s    %%%))':sFKKKI3355 	1C''((1,,x.000G :D	$$WdC@@@@@r8  r  r  )r=  r>  r?  r  r  r7  r  r  r  r  rE   r  r   r  r  r  rh   r@  rZ  r*   r  r  r   r  rA  r8  r6  r  r    s       , m      m    X 
[ 4    [         X  )&:!; ) ) ) X) ( ( ( X( 6:"&4 4c 4s 44+.4 4 4 4l$6 3    S    A+ AS A 2A<DAIMA A A A A Ar8  r  c            
           e Zd ZdededdfdZedefd            Zedefd            Z	dde
d	ed
ddefdZdedefdZdededdd
dddf
dZdS )r  r  initrz   Nc                 *    |sJ || _         || _        d S r4  r  r  r5  r  r  s      r6  r7  z0ASTTemplateParamConstrainedTypeWithInit.__init__n  s    				r8  c                     | j         j        S r4  r  r  r;  s    r6  r  z,ASTTemplateParamConstrainedTypeWithInit.names  rN  r8  c                     | j         j        S r4  r  r  r;  s    r6  r  z.ASTTemplateParamConstrainedTypeWithInit.isPackw  rS  r8  rQ  r  r/  r0  c                     |dk    sJ |r!|j         j                            |d          S | j                            |          S Nr  Fr  )r  r1  rZ  r  r  s       r6  rZ  z.ASTTemplateParamConstrainedTypeWithInit.get_id{  K    !|||| 	-=,33Ge3LLL9##G,,,r8  r  c                 d     || j                   }| j        r|dz  }| || j                  z  }|S r  r  r  s      r6  r  z2ASTTemplateParamConstrainedTypeWithInit._stringify  sA    i	""9 	(5LC99TY'''C
r8  r`  ra  rb  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        r6  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r8  r  )r=  r>  r?  r  r7  r  r  r  rE   r  rh   r@  rZ  r*   r  r   r  rA  r8  r6  r  r  m  s)       W G     
 m    X         X - -c -s -8 -WZ - - - -$6 3    E+ ES E 2E<DEIME E E E E Er8  r  c            
           e Zd ZdededdfdZedefd            Zede	fd            Z
	 	 dded	ed
ddefdZdedefdZdededdd
dddf
dZdS )r  r  r  rz   Nc                 "    || _         || _        d S r4  r  r  s      r6  r7  zASTTypeWithInit.__init__      				r8  c                     | j         j        S r4  r  r;  s    r6  r  zASTTypeWithInit.name  rN  r8  c                     | j         j        S r4  r  r;  s    r6  r  zASTTypeWithInit.isPack  rS  r8  rQ  r  r/  r0  c                 (   |dk    r| j                             ||          S |dk    rE|                                                    |          dz   | j                             |          z   S |                                                    |          S )NmemberrT  r   )r  rZ  r  r  s       r6  rZ  zASTTypeWithInit.get_id  s    !!9##GZ888a<<//1188AADHI$$W--. /**,,33G<<<r8  r  c                     g }|                      || j                             | j        r#|                      || j                             d                    |          S r  )rz  r  r  r  r  s      r6  r  zASTTypeWithInit._stringify  s]    

99TY''(((9 	-JJyy++,,,wws||r8  r`  ra  rb  r   c                     t          |           | j                            ||||           | j        r| j                            ||||           d S d S r4  )r6   r  r  r  r  s        r6  r  z"ASTTypeWithInit.describe_signature  se    %%%	$$WdC@@@9 	EI(($VDDDDD	E 	Er8  r  )r=  r>  r?  r  r  r7  r  r  r  rE   r  rh   r@  rZ  r*   r  r   r  rA  r8  r6  r  r    s2       W N t     m    X         X  6:"&= =c =s ==+.= = = =$6 3    E+ ES E 2E<DEIME E E E E Er8  r  c            
       x    e Zd ZdededdfdZ	 	 ddededd	defd
Zde	defdZ
defdZdededddd	ddf
dZdS )ASTTypeUsingr  r  rz   Nc                 "    || _         || _        d S r4  )r  r  r5  r  r  s      r6  r7  zASTTypeUsing.__init__  r  r8  rQ  r  r/  r0  c                 x    |dk    rt                      |                                                    |          S r  r)   r  rZ  r  s       r6  rZ  zASTTypeUsing.get_id  5    a<<.. **,,33G<<<r8  r  c                     g }|                      || j                             | j        r8|                     d           |                      || j                             d                    |          S )Nr  r   )rz  r  r  r  r  s      r6  r  zASTTypeUsing._stringify  so    

99TY''(((9 	-JJuJJyy++,,,wws||r8  c                     dS )Nr   rA  r;  s    r6  r  z(ASTTypeUsing.get_type_declaration_prefix  s    wr8  r`  ra  rb  r   c                 6   t          |           | j                            ||||           | j        rd|t	          j                    z  }|t	          j        dd          z  }|t	          j                    z  }| j                            |d||           d S d S )Nrw  r   rg  )r6   r  r  r  r   r  r  r  s        r6  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r8  r  )r=  r>  r?  r  r  r7  rh   r@  rZ  r*   r  r  r   r  rA  r8  r6  r  r    s        ] ' d     6:"&= =c =s ==+.= = = =$6 3    S    R+ RS R 2R<DRIMR R R R R Rr8  r  c            
           e Zd ZdededdfdZedefd            Z	 	 ddede	d	d
de	fdZ
dede	fdZdede	ddd	d
ddf
dZdS )
ASTConceptr  r  rz   Nc                 "    || _         || _        d S r4  r  r  r5  r  r  s      r6  r7  zASTConcept.__init__  s    $&r8  c                     | j         S r4  r  r;  s    r6  r  zASTConcept.name  r  r8  rQ  r  r/  r0  c                 x    |dk    rt                      |                                                    |          S r  r  r  s       r6  rZ  zASTConcept.get_id  r  r8  r  c                 Z     || j                   }| j        r| || j                  z  }|S r4  r  r  s      r6  r  zASTConcept._stringify  s:    i(( 	/99T-...C
r8  r`  ra  rb  r   c                     | j                             ||||           | j        r| j                            ||||           d S d S r4  )r  r  r  r  s        r6  r  zASTConcept.describe_signature  sY    **7D#vFFF 	L//sFKKKKK	L 	Lr8  r  )r=  r>  r?  r  r  r7  r  r  rh   r@  rZ  r*   r  r   r  rA  r8  r6  r  r    s       '= '~ 'RV ' ' ' ' m    X 6:"&= =c =s ==+.= = = =$6 3    L+ LS L 2L<DLIML L L L L Lr8  r  c            
       V    e Zd Zdededededdf
dZdedefd	Zd
e	deddddddf
dZ
dS )ASTBaseClassr  
visibilityr   packrz   Nc                 >    || _         || _        || _        || _        d S r4  )r  r  r   r  )r5  r  r  r   r  s        r6  r7  zASTBaseClass.__init__  s"    	$			r8  r  c                 R   g }| j         /|                    | j                    |                    d           | j        r|                    d           |                     || j                             | j        r|                    d           d                    |          S )Nr  zvirtual r)  r   )r  rz  r   r  r  r  r  s      r6  r  zASTBaseClass._stringify  s    ?&JJt'''JJsOOO< 	#JJz"""

99TY''(((9 	JJuwws||r8  r`  ra  rb  r   r/  r0  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   rg  rw  r)  )
r6   r  r   r  r  r   r  r  r  r  r  s        r6  r  zASTBaseClass.describe_signature  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r8  )r=  r>  r?  r  r@  rE   r7  r*   r  r   r  rA  r8  r6  r  r    s        ]  &*/3   
$6 
3 
 
 
 
C+ CS C 2C<DCIMC C C C C Cr8  r  c            
       z    e Zd Zdededee         deddf
dZde	d	e
d
dde
fdZdede
fdZdede
ddd
dddf
dZdS )ASTClassr  r  basesr  rz   Nc                 >    || _         || _        || _        || _        d S r4  )r  r  r  r  )r5  r  r  r  r  s        r6  r7  zASTClass.__init__  s"    	




r8  rQ  r  r/  r0  c                 P    |                                                     |          S r4  )r  rZ  r  s       r6  rZ  zASTClass.get_id%  s"    **,,33G<<<r8  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   )rz  r  rK  r  r  r  r  )r5  r  r  r  r   s        r6  r  zASTClass._stringify(  s   

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

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

99Q<<((((wws||r8  r`  ra  rb  r   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   rw  r  r  r   )r6   r  r  rK  r   r  r  r  r  r  r  pop)r5  r`  ra  rb  r/  r   s         r6  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 r8  )r=  r>  r?  r  rE   r   r  r$   r7  rh   r@  rZ  r*   r  r   r  rA  r8  r6  r  r    s        ] 4 \@R (-1   =c =s =H = = = = =$6 3    $+ S  2<DIM     r8  r  c            
       f    e Zd ZdededdfdZdededd	defd
Zde	defdZ
dededddd	ddf
dZdS )ASTUnionr  r  rz   Nc                 "    || _         || _        d S r4  )r  r  )r5  r  r  s      r6  r7  zASTUnion.__init__Q  s    	


r8  rQ  r  r/  r0  c                 x    |dk    rt                      |                                                    |          S r  r  r  s       r6  rZ  zASTUnion.get_idU  5    a<<.. **,,33G<<<r8  r  c                    g }|                      || j                             t          | j                  dk    r|                     d           |                      || j                             d                    |          S r  )rz  r  rK  r  r  r  s      r6  r  zASTUnion._stringifyZ  su    

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

99TY''(((wws||r8  r`  ra  rb  r   c                     t          |           | j                            |           t          | j                  dk    r|t	          j                    z  }| j                            ||||           d S )Nr   rw  )r6   r  r  rK  r   r  r  r  s        r6  r  zASTUnion.describe_signatureb  sq    %%%
%%g...tz??ax.000G	$$WdC$GGGGGr8  )r=  r>  r?  r  r$   r7  rh   r@  rZ  r*   r  r   r  rA  r8  r6  r$  r$  P  s        ] 3C     =c =s =H = = = = =
$6 3    H+ HS H 2H<DHIMH H H H H Hr8  r$  c            
       n    e Zd Zdededededdf
dZded	ed
ddefdZ	de
defdZdededdd
dddf
dZdS )ASTEnumr  scopedunderlyingTyper  rz   Nc                 >    || _         || _        || _        || _        d S r4  )r  r,  r-  r  )r5  r  r,  r-  r  s        r6  r7  zASTEnum.__init__l  s#    	,


r8  rQ  r  r/  r0  c                 x    |dk    rt                      |                                                    |          S r  r  r  s       r6  rZ  zASTEnum.get_ids  r'  r8  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   )r,  rz  r  rK  r  r-  r  r  s      r6  r  zASTEnum._stringifyx  s    ; 	JJt{###JJsOOO

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

99TY''((( 	7JJuJJyy!455666wws||r8  r`  ra  rb  r   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   rw  r  rq  )	r6   r  r  rK  r   r  r  r-  r  r  s        r6  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r8  )r=  r>  r?  r  r@  r  r$   r7  rh   rZ  r*   r  r   r  rA  r8  r6  r+  r+  k  s        ] C  (-1   =c =s =H = = = = =
$6 3    G+ GS G 2G<DGIMG G G G G Gr8  r+  c            
       v    e Zd Zdedee         deddfdZdede	d	d
de	fdZ
dede	fdZdede	ddd	d
ddf
dZdS )ASTEnumeratorr  r  r  rz   Nc                 0    || _         || _        || _        d S r4  )r  r  r  )r5  r  r  r  s       r6  r7  zASTEnumerator.__init__  s    		


r8  rQ  r  r/  r0  c                 x    |dk    rt                      |                                                    |          S r  r  r  s       r6  rZ  zASTEnumerator.get_id  r'  r8  r  c                 j   g }|                      || j                             t          | j                  dk    r8|                     d           |                      || j                             | j        r#|                      || j                             d                    |          S r  )rz  r  rK  r  r  r  r  s      r6  r  zASTEnumerator._stringify  s    

99TY''(((tz??aJJsOOOJJyy,,---9 	-JJyy++,,,wws||r8  r`  ra  rb  r   c                 :   t          |           | j                            ||||           t          | j                  dk    r0|t          j                    z  }| j                            |           | j        r| j                            |d||           d S d S )Nr   rg  )r6   r  r  rK  r  r   r  r  r  s        r6  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r8  )r=  r>  r?  r  r	   r  r$   r7  rh   r@  rZ  r*   r  r   r  rA  r8  r6  r3  r3    s        ] (>2J (-1   =c =s =H = = = = =
$6 3    K+ KS K 2K<DKIMK K K K K Kr8  r3  c            
       ~    e Zd ZdefdZdedefdZdededdd	d
ddf
dZ	e
defd            Ze
defd            ZdS )ASTTemplateParamrz   c                 :    t          t          |                     r4  r  r;  s    r6  get_identifierzASTTemplateParam.get_identifier  r  r8  rQ  c                 :    t          t          |                     r4  r  rY  s     r6  rZ  zASTTemplateParam.get_id  r  r8  
parentNodera  rb  r   r/  r0  Nc                 :    t          t          |                     r4  r  )r5  r=  ra  rb  r/  s        r6  r  z#ASTTemplateParam.describe_signature  r  r8  c                 :    t          t          |                     r4  r  r;  s    r6  r  zASTTemplateParam.isPack  r  r8  c                 :    t          t          |                     r4  r  r;  s    r6  r  zASTTemplateParam.name  r  r8  )r=  r>  r?  rG  r;  rh   r@  rZ  r   r  r  rE   r  r  r  rA  r8  r6  r9  r9    s        . . . . ..c .c . . . ..[ . . 2.<D.IM. . . . . . . . X. .m . . . X. . .r8  r9  c            
       r    e Zd Zdededededdf
dZdefdZd	e	defd
Z
dedefdZdededdddddf
dZdS ) ASTTemplateKeyParamPackIdDefaultkeyrH  parameterPackrW   rz   Nc                 R    |sJ |r|J || _         || _        || _        || _        d S r4  )rC  rH  rD  rW   )r5  rC  rH  rD  rW   s        r6  r7  z)ASTTemplateKeyParamPackIdDefault.__init__  s=    


 	#???$*r8  c                     | j         S r4  rO  r;  s    r6  r;  z/ASTTemplateKeyParamPackIdDefault.get_identifier  r\  r8  rQ  c                     |dk    sJ g }| j         r|                    d           n|                    d           d                    |          S )Nr  r  r  r   )rD  rz  r  r  s      r6  rZ  z'ASTTemplateKeyParamPackIdDefault.get_id  sS    !|||| 	JJtJJsOOOwws||r8  r  c                    | j         g}| j        r1| j        r|                    d           |                    d           | j        r?| j        s|                    d           |                     || j                             | j        r8|                    d           |                     || j                             d                    |          S )Nr  r)  r  r   )rC  rD  rH  rz  rW   r  r  s      r6  r  z+ASTTemplateKeyParamPackIdDefault._stringify  s    xj 	  

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

3JJyy11222< 	0JJuJJyy..///wws||r8  r`  ra  rb  r   r/  r0  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 )Nr)  r   r   rg  )	r   r  rC  rD  rH  r  r  r  rW   r  s        r6  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r8  )r=  r>  r?  r@  rG  rE   r  r7  r;  rh   rZ  r*   r  r   r  rA  r8  r6  rB  rB    s        C ]  $/6;?       c c    $6 3    N+ NS N 2N<DNIMN N N N N Nr8  rB  c            
           e Zd ZdeddfdZedefd            Zedefd            Z	de
fdZdded	ed
ddefdZdedefdZdededdd
dddf
dZdS )ASTTemplateParamTyper  rz   Nc                     |sJ || _         d S r4  r  r  s     r6  r7  zASTTemplateParamType.__init__  r  r8  c                 n    |                                  }t          t          |d           gdgd          S NFr  r;  r  r  r5  r  s     r6  r  zASTTemplateParamType.name  8      ""22t<<=wuUUUUr8  c                     | j         j        S r4  r  rD  r;  s    r6  r  zASTTemplateParamType.isPack      y&&r8  c                 4    | j                                         S r4  r  r;  r;  s    r6  r;  z#ASTTemplateParamType.get_identifier      y'')))r8  rQ  r  r/  r0  c                     |dk    sJ |r!|j         j                            |d          S | j                            |          S r  )r  r1  rZ  r  r  s       r6  rZ  zASTTemplateParamType.get_id  r  r8  r  c                 "     || j                   S r4  r  r  s     r6  r  zASTTemplateParamType._stringify%  rH  r8  r`  ra  rb  r   c                 @    | j                             ||||           d S r4  )r  r  r  s        r6  r  z'ASTTemplateParamType.describe_signature(  rL  r8  r  )r=  r>  r?  rB  r7  r  r  r  rE   r  rG  r;  rh   r@  rZ  r*   r  r   r  rA  r8  r6  rK  rK    sC       = $     Vm V V V XV ' ' ' ' X'* * * * *- -c -s -8 -WZ - - - -$$6 $3 $ $ $ $A+ AS A 2A<DAIMA A A A A Ar8  rK  c            
           e Zd ZdddeddfdZedefd            Zedefd            Z	de
fd	Z	 dd
edee         ded         defdZdedefdZdededdddddf
dZdS )ASTTemplateParamTemplateTypenestedParamsASTTemplateParamsr  rz   Nc                 2    |sJ |sJ || _         || _        d S r4  r^  r  )r5  r^  r  s      r6  r7  z%ASTTemplateParamTemplateType.__init__.  s*    (			r8  c                 n    |                                  }t          t          |d           gdgd          S rN  rP  rQ  s     r6  r  z!ASTTemplateParamTemplateType.name5  rR  r8  c                     | j         j        S r4  rT  r;  s    r6  r  z#ASTTemplateParamTemplateType.isPack:  rU  r8  c                 4    | j                                         S r4  rW  r;  s    r6  r;  z+ASTTemplateParamTemplateType.get_identifier>  rX  r8  rQ  r  r/  r0  c                     |dk    sJ |r!|j         j                            |d           S | j                            |          | j                            |          z   S )Nr  r  )r  r1  rZ  r^  r  r  s       r6  rZ  z#ASTTemplateParamTemplateType.get_idA  sd     !|||| 	Q=,33Gd3KKK$++G44ty7G7G7P7PPPr8  r  c                 D     || j                    || j                  z   S r4  ra  r  s     r6  r  z'ASTTemplateParamTemplateType._stringifyL  s&    y*++ii	.B.BBBr8  r`  ra  rb  r   c                     | j                             |d||           |t          j                    z  }| j                            ||||           d S )Nrq  )r^  r  r   r  r  r  s        r6  r  z/ASTTemplateParamTemplateType.describe_signatureO  sT    ,,WlCPPP8*,,,	$$WdC@@@@@r8  r  )r=  r>  r?  rB  r7  r  r  r  rE   r  rG  r;  rh   r	   r@  rZ  r*   r  r   r  rA  r8  r6  r]  r]  -  sn       %8 7<@    Vm V V V XV ' ' ' ' X'* * * * * \`	Q 	Q	Q(0	QFNxFX	Q		Q 	Q 	Q 	QC$6 C3 C C C CA+ AS A 2A<DAIMA A A A A Ar8  r]  c            
           e Zd Z	 ddeeef         deddfdZede	fd            Z
edefd            Zdefd	Zdd
ededddefdZdedefdZdededdddddf
dZdS )ASTTemplateParamNonTypeFrr  rD  rz   Nc                 *    |sJ || _         || _        d S r4  rr  rD  )r5  rr  rD  s      r6  r7  z ASTTemplateParamNonType.__init__W  s"     
*r8  c                 n    |                                  }t          t          |d           gdgd          S rN  rP  rQ  s     r6  r  zASTTemplateParamNonType.name_  rR  r8  c                 (    | j         j        p| j        S r4  )rr  r  rD  r;  s    r6  r  zASTTemplateParamNonType.isPackd  s    z 6D$66r8  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 )NrT  r   )rr  r  rK  r  r  rd  
isinstancerG  )r5  r  r  s      r6  r;  z&ASTTemplateParamNonType.get_identifierh  s    z 	tz??a'''':a=****z!}1111*Q-)Cc=11111J4r8  rQ  r  r/  r0  c                     |dk    sJ |r!|j         j                            |d           S d}| j        r|dz  }|| j                            |          z   S )Nr  r  r   r  )r  r1  rZ  rD  rr  )r5  rQ  r  r/  r  s        r6  rZ  zASTTemplateParamNonType.get_idt  si    !|||| 	4=,33Gd3KKKC! t**73333r8  r  c                 >     || j                   }| j        r|dz  }|S r  rk  r  s      r6  r  z"ASTTemplateParamNonType._stringify  s,    i
## 	5LC
r8  r`  ra  rb  r   c                     | j                             ||||           | j        r|t          j        dd          z  }d S d S r  )rr  r  rD  r   r  r  s        r6  r  z*ASTTemplateParamNonType.describe_signature  sQ    
%%gtS&AAA 	Cx4UEBBBGGG	C 	Cr8  r  r  )r=  r>  r?  r   r  r  rE   r7  r  r  r  r  rG  r;  rh   r@  rZ  r*   r  r   r  rA  r8  r6  ri  ri  V  sk        (-+ +oEF G+ !%+ 26+ + + + Vm V V V XV 7 7 7 7 X7
 
 
 
 

4 
4c 
4s 
48 
4WZ 
4 
4 
4 
4$6 3    C+ CS C 2C<DCIMC C C C C Cr8  ri  c                       e Zd Zdee         ded         ddfdZdded	ede	fd
Z
dede	fdZdede	ddddddf
dZdede	dddddeddfdZdS )r_  paramsrequiresClauseASTRequiresClauserz   Nc                 *    |J || _         || _        d S r4  )rt  ru  )r5  rt  ru  s      r6  r7  zASTTemplateParams.__init__  s#    !!!,r8  FrQ  excludeRequiresc                    |dk    sJ g }|                     d           | j        D ]*}|                     |                    |                     +|                     d           |sc| j        r\|                     d           |                     | j        j                            |                     |                     d           d                    |          S )Nr  rq  r  IQr   )rz  rt  rZ  ru  r4  r  )r5  rQ  rx  r  rr  s        r6  rZ  zASTTemplateParams.get_id  s    !||||

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

3 	4#6 	JJtJJt*/66w??@@@JJsOOOwws||r8  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 r4  rA  ru  s     r6  r  z/ASTTemplateParams._stringify.<locals>.<genexpr>  s+      ??aYYq\\??????r8  z> r  r   )rz  r  rt  ru  r  s    ` r6  r  zASTTemplateParams._stringify  s    

;

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

4*JJyy!455666JJsOOOwws||r8  r`  ra  rb  r   r/  r0  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  rt  r  r  ru  )r5  r`  ra  rb  r/  r  rr  s          r6  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 +*r8  r=  lineSpecc                 H   dt           dt          j        f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 )Nr=  rz   c                 D    t          j                    }| |z  } d|_        |S )Nr  )r   desc_signature_linesphinx_line_type)r=  r`  s     r6  makeLinezDASTTemplateParams.describe_signature_as_introducer.<locals>.makeLine  s'    244G'!J'7G$Nr8  r   r   Tr   Fr   ru  rg  )
r   r   r  r  r  rt  r  r  ru  r  )r5  r=  ra  rb  r/  r~  r  lineNoder  rr  reqNodes              r6   describe_signature_as_introducerz2ASTTemplateParams.describe_signature_as_introducer  sy   	 	H4P 	 	 	 	
 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r8  r  )r=  r>  r?  r   r9  r	   r7  rh   rE   r@  rZ  r*   r  r   r  r   r  rA  r8  r6  r_  r_    s/       -t$45 -!)*=!>-CG- - - - c D S    $6 3    O+ OS O 2O<DOIMO O O O U,U47U>PUU(,U15U U U U U Ur8  r_  c            
           e Zd ZdededdfdZedefd            Zedefd            Z	defdZ
dd	ed
edddefdZd	edefdZdedefdZdededdddddf
dZdS ) ASTTemplateIntroductionParameterrH  rD  rz   Nc                 "    || _         || _        d S r4  )rH  rD  )r5  rH  rD  s      r6  r7  z)ASTTemplateIntroductionParameter.__init__  s    $*r8  c                 n    |                                  }t          t          |d           gdgd          S rN  rP  rQ  s     r6  r  z%ASTTemplateIntroductionParameter.name  rR  r8  c                     | j         S r4  )rD  r;  s    r6  r  z'ASTTemplateIntroductionParameter.isPack  s    !!r8  c                     | j         S r4  rO  r;  s    r6  r;  z/ASTTemplateIntroductionParameter.get_identifier  r\  r8  rQ  r  r/  r0  c                 n    |dk    sJ |r!|j         j                            |d           S | j        rdS dS )Nr  r  r  r  )r  r1  rZ  rD  r  s       r6  rZ  z'ASTTemplateIntroductionParameter.get_id  sJ    !|||| 	=,33Gd3KKK! tsr8  c                 b    |dk    sJ | j                             |          }| j        rd|z   S |S )Nr  r  )rH  rZ  rD  r  s      r6  get_id_as_argz.ASTTemplateIntroductionParameter.get_id_as_arg  s>    !||||o$$W-- 	#:Jr8  r  c                     g }| j         r|                    d           |                     || j                             d                    |          S Nr)  r   )rD  rz  rH  r  r  s      r6  r  z+ASTTemplateIntroductionParameter._stringify  sR     	JJu

99T_--...wws||r8  r`  ra  rb  r   c                     | j         r|t          j        dd          z  }| j                            |||dd|           d S r  )rD  r   r  rH  r  r  s        r6  r  z3ASTTemplateIntroductionParameter.describe_signature	  sK     	Cx4UEBBBG**7D#r2vNNNNNr8  r  )r=  r>  r?  rG  rE   r7  r  r  r  r  r;  rh   r@  rZ  r  r*   r  r   r  rA  r8  r6  r  r    sk       += + +$ + + + + Vm V V V XV " " " " X"    
 
c 
s 
8 
WZ 
 
 
 
S S    $6 3    O+ OS O 2O<DOIMO O O O O Or8  r  c                   n    e Zd Zdedee         ddfdZdedefdZ	de
defd	Zd
ededddddeddfdZdS )ASTTemplateIntroductionrO   rt  rz   Nc                 L    t          |          dk    sJ || _        || _        d S rJ  )rK  rO   rt  )r5  rO   rt  s      r6  r7  z ASTTemplateIntroduction.__init__  s'    6{{Qr8  rQ  c                 ^   |dk    sJ g }|                     d           | j        D ]*}|                     |                    |                     +|                     d           |                     d           |                     | j                            |                     |                     d           | j        D ]*}|                     |                    |                     +|                     d           |                     d           d                    |          S )Nr  rq  r  rh  r   )rz  rt  rZ  rO   r  r  )r5  rQ  r  rr  s       r6  rZ  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||r8  r  c                 >   g }|                      | j                             |                     d           |                     d                    fd| j        D                                  |                     d           d                    |          S )Nr  r  c              3   .   K   | ]} |          V  d S r4  rA  )r  rr  r  s     r6  r  z5ASTTemplateIntroduction._stringify.<locals>.<genexpr>-  s-      GG%YYu--GGGGGGr8  } r   )rz  rO   r  rt  r  s    ` r6  r  z"ASTTemplateIntroduction._stringify)  s    

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

3

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

4wws||r8  r=  ra  rb  r   r/  r0  r~  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templateIntroductionrg  r  Tr   Fr  )r   r  r  rO   r  r  rt  r  )	r5  r=  ra  rb  r/  r~  r`  r  rr  s	            r6  r  z8ASTTemplateIntroduction.describe_signature_as_introducer1  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:::r8  )r=  r>  r?  r  r   r  r7  rh   r@  rZ  r*   r  r   rE   r  rA  r8  r6  r  r    s         >?DH   c c    $$6 3    ;,;47;#;-5;AE;JN; ; ; ; ; ;r8  r  c                       e Zd Zdeeeef                  ddfdZded         fdZ	de
defdZd	edefd
ZdededddddeddfdZdS )ASTTemplateDeclarationPrefixr  rz   Nc                     || _         d S r4  )r  )r5  r  s     r6  r7  z%ASTTemplateDeclarationPrefix.__init__G  s     #r8  rv  c                 j    | j         d S | j         d         }t          |t                    sd S |j        S )Nr  )r  ro  r_  ru  )r5  lastLists     r6  get_requires_clause_in_lastz8ASTTemplateDeclarationPrefix.get_requires_clause_in_lastM  s<    >!4>"%($566 	4&&r8  rQ  c                 z   |dk    sJ g }t          | j                  dz
  }t          | j                  D ]q\  }}t          |t                    r/|                    |                    |||k                         I|                    |                    |                     rd                    |          S )Nr  rT  )rx  r   )rK  r  	enumeratero  r_  rz  rZ  r  )r5  rQ  r  	lastIndexr   r   s         r6  %get_id_except_requires_clause_in_lastzBASTTemplateDeclarationPrefix.get_id_except_requires_clause_in_lastU  s    !||||''!+	dn-- 	. 	.DAq!.// .

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

188G,,----wws||r8  r  c                     g }| j         D ] }|                     ||                     !d                    |          S r  )r  rz  r  )r5  r  r  r   s       r6  r  z'ASTTemplateDeclarationPrefix._stringifya  sE     	% 	%AJJyy||$$$$wws||r8  r`  ra  rb  r   r/  r0  r~  c                 j    t          |           | j        D ]}|                    |d|||           d S Nrp  )r6   r  r  )r5  r`  ra  rb  r/  r~  r   s          r6  r  z/ASTTemplateDeclarationPrefix.describe_signatureg  sO    %%% 	] 	]A..wc6S[\\\\	] 	]r8  )r=  r>  r?  r   r   r_  r  r7  r	   r  rh   r@  r  r*   r  r   rE   r  rA  r8  r6  r  r  F  s       # '8'>(? "@ A#EI# # # #'X6I-J ' ' ' '
S 
S 
 
 
 
$6 3    ]. ] ] 2]<D]PT]Y]] ] ] ] ] ]r8  r  c            
       T    e Zd ZdeddfdZdedefdZdej	        ded	d
ddddf
dZ
dS )rv  r4  rz   Nc                     || _         d S r4  r6  r7  s     r6  r7  zASTRequiresClause.__init__o  r  r8  r  c                 (    d || j                   z   S )Nz	requires r6  r  s     r6  r  zASTRequiresClause._stringifyr  s    YYty1111r8  r`  ra  rb  r   r/  r0  c                     |t          j        dd          z  }|t          j                    z  }| j                            ||||           d S )Nry   r  r  s        r6  r  z$ASTRequiresClause.describe_signatureu  sN    8,ZDDD8*,,,	$$WdC@@@@@r8  )r=  r>  r?  r  r7  r*   r@  r  r   r   r  rA  r8  r6  rv  rv  n  s        ] t    2$6 23 2 2 2 2A%*; A3 A 2A<DAIMA A A A A Ar8  rv  c                      e Zd Z	 	 	 	 	 	 ddedee         dee         dee         dedee         d	ed
dfdZ	ddZ
ed
efd            Zed
ee         fd            Zddeded
efdZd
efdZded
efdZdededdded
df
dZdS )r2  NFr  directiveTyper  r  r1  trailingRequiresClause	semicolonrz   c                     || _         || _        || _        || _        || _        || _        || _        d | _        d | _        d S r4  )	r  r  r  r  r1  r  r  r/  enumeratorScopedSymbol)r5  r  r  r  r  r1  r  r  s           r6  r7  zASTDeclaration.__init__  sN     %*$,&&<#"".2###r8  c           	      
   | j         r| j                                         nd }| j        r| j                                        nd }t          | j        | j        | j        || j                                        || j                  S r4  )	r  cloner  r2  r  r  r  r1  r  )r5  templatePrefixClonetrailingRequiresClasueClones      r6  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. . 	.r8  c                     | j         j        S r4  )r1  r  r;  s    r6  r  zASTDeclaration.name  s    $$r8  c                 4    | j         dk    rd S | j        j        S )Nr  )r  r1  r  r;  s    r6  r  zASTDeclaration.function_params  s     ?j((4//r8  TrQ  r  c                 T   |dk    rs| 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 )NrT  
enumeratorr   rz  r  r  r   )r  r  r)   r  r  r1  rZ  r/  
_id_prefixrz  r  r  r4  r  )r5  rQ  r  r  requiresClauseInLasts        r6  rZ  zASTDeclaration.get_id  s   a<<" %d&A %"nn$,..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#> 	{{"nn$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||r8  c                 8    |                      t          d          S r:  )rZ  _max_idr;  s    r6  get_newest_idzASTDeclaration.get_newest_id  s    {{7D)))r8  r  c                    g }| j         r:| j         dk    r/|                    | j                    |                    d           | j        r#|                     || j                             |                     || j                             | j        r8|                    d           |                     || j                             | j        r|                    d           d                    |          S )Nrv   r  ;r   )r  rz  r  r1  r  r  r  r  s      r6  r  zASTDeclaration._stringify  s    ? 	t(::JJt'''JJsOOO 	7JJyy!455666

99T-..///& 	?JJsOOOJJyy!<==>>>> 	JJsOOOwws||r8  r`  ra  rb  r   optionsc           	         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
k    rn| j        dk    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~  rv   r  rO   r  r  rM   rM   r   r   r]   
enum-classenum-structr   r  r  rg  r  )r6   r/  r   r  r  isRedeclarationr  r  getr  r  r  r  r1  r  r  r  r  rz  r  r  )	r5  r`  ra  rb  r  mainDeclNoderc  lastDeclNodetrailingReqNodes	            r6  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_((_
**_''%)<<<<<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r8  )NNNNNF)rz   r2  r  )r=  r>  r?  r@  r	   r  r   rv  rE   r7  r  r  r  r  r   r  r  rh   rZ  r  r*   r  r   r   r  rA  r8  r6  r2  r2    s       GK-1JN$(GK#(3 33 3x} 3%c]3!)*F!G3 "3 *22C)D	3
 !3
 .23 3 3 3$. . . . %m % % % X% 0&:!; 0 0 0 X0
+ +c +T +S + + + +Z*s * * * *$6 3    @D. @D @D 2@D=A@DFJ@D @D @D @D @D @Dr8  r2  c                   2    e Zd ZdededdfdZdedefdZdS )ASTNamespacer  r  rz   Nc                 "    || _         || _        d S r4  )r  r  )r5  r  r  s      r6  r7  zASTNamespace.__init__(  s    $,r8  r  c                     g }| j         r#|                     || j                              |                     || j                             d                    |          S r  )r  rz  r  r  r  s      r6  r  zASTNamespace._stringify-  s_     	7JJyy!455666

99T_--...wws||r8  )	r=  r>  r?  r  r  r7  r*   r@  r  rA  r8  r6  r  r  '  sb        -= -!=-BF- - - -
$6 3      r8  r  c                   J    e Zd Zded         dddeeef         dededdfd	Z	dS )
SymbolLookupResultsymbolsr0  parentSymbolr  r  rd  rz   Nc                 L    || _         || _        || _        || _        || _        d S r4  )r  r  r  r  rd  )r5  r  r  r  r  rd  s         r6  r7  zSymbolLookupResult.__init__6  s0     (",(r8  )
r=  r>  r?  r   r   rG  r  r   r  r7  rA  r8  r6  r  r  5  se        ) 2 )( )!-"<=)OR).)37) ) ) ) ) )r8  r  c                   L    e Zd Zdeeeeeef         e	f                  ddfdZ
dS )	LookupKeyr  rz   Nc                     || _         d S r4  r  r  s     r6  r7  zLookupKey.__init__A  s     			r8  )r=  r>  r?  r   r
   r  r   r_  r  r@  r7  rA  r8  r6  r  r  @  se        T%(<(-.?.E/F )G(+), #- .  37     r8  r  r  rd  rz   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   r)  F)rK  rt  rk  r  r@  r  endswithr  )	r  rd  r   rr  r  	paramNameargTxtisArgPackExpansionargNames	            r6  _is_specializationr  H  s    
 > !!S):%;%;;;t
> !!Q&&t3~,--..  %a("
OO	S#__U33<---44!3?&"++44  5r8  c                       e Zd ZdZdZdZdZd Zd Ze	de
ddfd	            Zd>d
Zdede
ddf fdZded          deeedf         deeedf         de
dee         dee         dee         ddfdZdedededdfdZd>dZd>dZdeddfdZdee
         fdZeded         fd            Z d?dZ!de"fdZ#deeef         de
de$d e%d!e%d"e%d#e%dd fd$Z&deeef         de
de$d e%d!e%d"e%d#e%d%e%ded          fd&Z'd'e"d(e(e
         d)e)d eeef         e
e$gd f         d*e%d+ed e%d!e%d"e%d#e%d%e%de*fd,Z+d'e"d(e(e
         dedededd fd-Z,d.d d/e(e         d0d1ddfd2Z-	 d@d'e"d3e.dd fd4Z/dedededd fd5Z0deeef         d!e%d"e%d%e%dd f
d6Z1dAd7Z2d'e"d(e(e
         d8ed e%d!e%d"e%d%e%de3e(d          ef         fd9Z4ded8ed e%d!e%d"e%dd fd:Z5d;edefd<Z6d;edefd=Z7 xZ8S )Br0  r   z  Fc                     t                      r4  )r  r;  s    r6  __copy__zSymbol.__copy__g  s    r8  c           	      V    | j         rt                      t          d d d d d d d           S r4  )r  r  r0  )r5  memos     r6  __deepcopy__zSymbol.__deepcopy__j  s5    ; 	D """ $dD$dCCCr8  rk  rz   Nc                  h    t          t          j        t          j        z  d           t          |   d S )Nr   end)printr0  debug_indent_stringdebug_indentr  s    r6  debug_printzSymbol.debug_printq  s-    f(6+>>BGGGGtr8  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 r4  )r  r  r  rd  r1  docnamer;  s    r6  _assert_invariantszSymbol._assert_invariantsv  s    { 		$~%%%****((((''''|##### $|###$ $##r8  rC  r  c                 p    |dk    rt                      t                                          ||          S )Nchildren)r  super__setattr__)r5  rC  r  	__class__s      r6  r  zSymbol.__setattr__  s4    * """77&&sE222r8  r  r  r  rd  r1  r  linec                    || _         d | _        d | _        || _        |t	          ||          sd }|| _        || _        || _        || _        || _	        d| _
        |                                  g | _        g | _        | j         r| j         j                            |            | j        r| | j        _        |                                  d S r  )r  siblingAbovesiblingBelowr  r  r  rd  r1  r  r  r  r  	_children_anonChildrenrz  r/  !_add_template_and_function_params)r5  r  r  r  rd  r1  r  r  s           r6  r7  zSymbol.__init__  s    
 .2.2" $&~|DD %L,(&	$!!! (*+-; 	/K!((... 	+&*D# 	..00000r8  c                    |                                   | j        J | j        J | j        J |J |J |J || _        | | j        _        || _        || _        |                                   |                                  d S r4  )r  r1  r  r  r/  r  )r5  r1  r  r  s       r6  _fill_emptyzSymbol._fill_empty  s    !!!'''|###y   &&&"""&"&	!!!..00000r8  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 )NrT  z"_add_template_and_function_params:templateParam)r  r1  FrO  functionParam)r0  debug_lookupr  r  r  rt  r;  r1  r2  r  r  _add_symbolsr  r  r  r  r  r  rK  r  )r5  tpr  r  nnfps         r6  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$	% 	%r8  c                     | j         d S | | j         j        v sJ | j         j                            |            d | _         d S r4  )r  r  remover;  s    r6  r  zSymbol.remove  sI    ;Ft{,,,,,$$T***r8  c                 J   g }| j         D ]}|                    |           |j        r^|j        |k    rSd |_        d |_        d |_        |j        |j        |j        _        |j        |j        |j        _        d |_        d |_        |                    |           || _         d S r4  )r  	clear_docr1  r  r  r  r  rz  )r5  r  newChildrensChilds       r6  r  zSymbol.clear_doc  s    $&n 	' 	'FW%%%! 	+fn&?&?%)"!%"&27=7JF'4&27=7JF'4&*#&*#v&&&&$r8  c              #   Z   K   | V  | j         D ]}|                                E d {V  d S r4  )r  get_all_symbols)r5  r  s     r6  r  zSymbol.get_all_symbols  sQ      


n 	0 	0F--//////////	0 	0r8  )r0  NNc              #   t   K   | j         D ]-}|V  |j                                        s |j        E d {V  .d S r4  )r  r  rP  children_recurse_anon)r5  r   s     r6  r  zSymbol.children_recurse_anon  sa       	/ 	/AGGG;&&(( .........	/ 	/r8  r  c                    g }| }|j         r#|                    |           |j         }|j         #|                                 g }|D ]u}t          |j        |j                  }|j        5|                    ||j        |j                                        f           X|                    ||j        d f           vt          |          S r4  )
r  rz  reverser  r  rd  r1  r  r  r  )r5  r  r   rC  r  s        r6  rx  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~~r8  c                 @   g }| }|j         r#|                    |           |j         }|j         #|                                 g }g }|D ]D}|                    t          |j        |j                             |                    d           Et          ||d          S rN  )r  rz  r  r  r  rd  r  )r5  r  r   r  r  s        r6  r  zSymbol.get_full_nested_name  s    h 	NN1A h 	 		 	$ 	$ALL-ak1>JJKKKU####UIe<<<<r8  templateShorthand	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)r0  r  r  _find_named_symbolsrI  StopIteration)	r5  r  r  rd  r  r  r  r  r  s	            r6  _find_first_named_symbolzSymbol._find_first_named_symbol,  s    
  	><===&&y.,'8)]'A8= ' ? ?	99 	 	 	44	s   A 
A"!A"r  c	              #      K   t           j        rgt           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ddt          ffd}	dt          t           d d f         f fd}
 |
            D ]}t           j        rKt                               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 )NrT  z_find_named_symbols:self:r   r  zidentOrOp:                  ztemplateParams:             ztemplateArgs:               ztemplateShorthand:          zmatchSelf:                  zrecurseInAnon:              zcorrectPrimaryTemplateAargs:zsearchInSiblings:           r   r0  rz   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  r@  rd  )r   r  rd  r  r  s    r6  matchesz+Symbol._find_named_symbols.<locals>.matchesX  s    {i''u D(n.DEE!- 5( ! 5 !q'((C,?,??? 5$&LD,@AAu~ !q~&&#l*;*;;; 54r8  c               3     K   } t           j        rKt                               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        rKt                               d           t          |                     t           j        dz             d           )Nzsearching in self:rT  r   r  Tzsearching in sibling:)	r0  r  r  r  	to_stringr  r  r  r  )r   r  r  r5  s    r6  
candidatesz.Symbol._find_named_symbols.<locals>.candidatesn  s     A" D""#7888akk&"5"9::CCCCH GGG  + 666666666 {*******>)EN& H&&'>???!++f&9A&=>>BGGGGHr8  
candidate:r#  rS  r  )	r0  r  r  r  r  r%  r  rE   r   )r5  r  r  rd  r  r  r  r  r  r#  r&  r   s   ```````     r6  r  zSymbol._find_named_symbols<  s     
  	Q1$56661$w'''$..!4q!899rBBBB=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	x 	D 	 	 	 	 	 	 	 	 	,	HIfdD&89 	H 	H 	H 	H 	H 	H 	H 	H(  	- 	-A" D""<000akk&"5"9::CCCCwqzz -& -''1,''&&y111''1,''& -''1,'' 	%1$	% 	%r8  r  templateDeclsonMissingQualifiedSymbolstrictTemplateParamArgListsancestorLookupTypec           
      
   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        rKt                               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        rKt                               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 )NrT  z_symbol_lookup:r!  r   r  znestedName:        ztemplateDecls:     r   c              3   4   K   | ]}t          |          V  d S r4  r`  r  r   s     r6  r  z(Symbol._symbol_lookup.<locals>.<genexpr>  s(      >]>]!s1vv>]>]>]>]>]>]r8  zstrictTemplateParamArgLists:zancestorLookupType:ztemplateShorthand: zmatchSelf:         zrecurseInAnon:     zcorrectPrimaryTemplateArgs: zsearchInSiblings:  r   r  r  r  rM   zstarting point:r  r  r  r  r  r  Fzhandle last name from:)r  r  r  r  r  )r0  r  r  r  r  r%  r  r  rK  r  r  r  r  find_identifierr  rd  r  r  listr  )r5  r  r(  r)  r*  r+  r  r  r  r  r  r  r  	firstNameiTemplateDeclr  r  rd  r  r/  r  s                        r6  _symbol_lookupzSymbol._symbol_lookup  s     	H1$01111$w'''$..!4q!899rBBBB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  	K0111,(()<q)@AArJJJJ #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 	K7888,(()<q)@AArJJJJ RyN	(3}---- 1$M(:(:::::*=9NN C$6$66666!N22~|/9'E-	 3 / /
  	%7mmG1$!'<"+^\K K 	Kr8  c                    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	d
dt          t          t          f         dt          dt          dd
f
d}|                     |||dd ddddd
  
        J t          j                  }t          |          dk    rFt           j        rt                               d           t           xj        dz  c_        t                               dj                   t                               dj                   t                               dj                   t                               d           t                               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          |                     d-fd"}t          |
          dk    rd }n |            }d.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                               d*           nt                               d+           t           xj        dz  c_        ||S  |            S t           j        r2t                               d,|d u           t           xj        dz  c_        ||                                 |	d         }|                               |S )/NrT  z_add_symbols:ztdecls:r   c              3   4   K   | ]}t          |          V  d S r4  r`  r.  s     r6  r  z&Symbol._add_symbols.<locals>.<genexpr>  s(      2Q2Qa3q662Q2Q2Q2Q2Q2Qr8  z
nn:       z
decl:     zlocation: {}:{}r  r0  r  r  rd  rz   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 )NrT  z'_add_symbols, onMissingQualifiedSymbol:templateParams:identOrOp:     ztemplateARgs:  r  r  r  r  rd  r1  r  r  )r0  r  r  r  r  r  r  rd  s       r6  r)  z5Symbol._add_symbols.<locals>.onMissingQualifiedSymbol   s     " )##q(##""#LMMM##q(##""#4nEEE""#4i@@@""#4lCCC##q(##)7'3"&T3 3 3 3r8  TFr*  r+  r  r  r  r  r  r   z _add_symbols, result, no symbol:r9  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)r0  r  r  r  r  r  rd  )r/  r1  r  r  lookupResults    r6  makeCandSymbolz+Symbol._add_symbols.<locals>.makeCandSymbolt  s    " G""#EFFF<#<&2&<+7+F)5)B(3$+$8 8 8F " G""#EFFFMr8  r/  
candSymbolc                     t           j        rYt           xj        dz  c_        t                               d           t           xj        dz  c_        t           xj        dz  c_        d|_        t          |           )NrT  redeclarationr  T)r0  r  r  r  r  r.  )r/  rA  r1  s     r6  handleDuplicateDeclarationz7Symbol._add_symbols.<locals>.handleDuplicateDeclaration  sx    & -''1,''&&777''1,''''1,''
 .2
*+FK@@@r8  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?:)rz   r0  )r/  r0  rA  r0  rz   N)r0  r  r  r  r  r  r   rG  r  r   r  r5  r2  r  rK  r  r  rd  r  r1  rz  r  r  r  r  r  )r5  r  r(  r1  r  r  r)  r  r/  noDeclwithDecldupDeclr   r@  rA  rD  candIdoldIdr?  s      ```            @r6  r  zSymbol._add_symbols  s   
  	H1$///1$y#((2Q2Q=2Q2Q2Q*Q*QRRR|Z888|[999077FFGGG	38 	305m[6P0Q	358	3HW	3 +3	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""#9#@#@$#O#OPPP##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(##%!!%~'''" )""#fhrz~h~##q(##%!!### AYF {GT:::Mr8  r  docnamesrb  r   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 )NrT  zmerge_with:c                 p    | j                             |           | |_        |                                 d S r4  )r  rz  r  r  )r5  
otherChilds     r6  unconditionalAddz+Symbol.merge_with.<locals>.unconditionalAdd  s8    N!!*--- $J))+++++r8  zotherChild:
r  F)r  r  rd  r  r  r  r  r  zraw candidate symbols:c                      g | ]}|j         	|S rA  )r  r  r   s     r6  r  z%Symbol.merge_with.<locals>.<listcomp>  s     FFFQA4EFqFFFr8  z non-duplicate candidate symbols:r   zno declaration in other childz
queryId:  zempty candidater'  RDuplicate C++ declaration, also defined at %s:%s.
Declaration is '.. cpp:%s:: %s'.locationr  r  z1Internal C++ domain error during symbol merging.
z
ourChild:
z
otherChild:
r  )r0  r  r  r  r  r%  r  r  r  r  rd  r2  rK  r1  r  r  r  r  r@  r   r  loggerwarningr  r  
merge_with)r5  r  rJ  rb  rN  rM  candiateIterr&  r  ourChildqueryIdr/  rH  r  msgs                  r6  rW  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$	% 	%r8  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 )NrT  z	add_name:)r1  r  r  )r0  r  r  r  r  r  )r5  r  r  r(  r  s        r6  add_namezSymbol.add_name2  s     	,1${+++ 	*4MMM
M,0$T   K K 	%1$
r8  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 )NrT  zadd_declaration:)r0  r  r  r  r  r  r  r  )r5  r1  r  r  r  r(  r  s          r6  add_declarationzSymbol.add_declarationA  s     	31$1222&&&""" %
% 	'6@MMM
M;QUVV 	%1$
r8  c                    t           j        rt           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        rut           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 )NrT  zfind_identifier:zidentOrOp:       zmatchSelf:       zrecurseInAnon:   zsearchInSiblings:r   r  r  ztrying:)
r0  r  r  r  r  r%  r  r  r  r  )r5  r  r  r  r  currentr  r   s           r6  r1  zSymbol.find_identifierS  s     		%1$12221$2I>>>2I>>>2MBBB24DEEE$..!4q!899rBBBB1$!" )##q(##""9---g''(;a(?@@bIIII##q(## W.);;8E\w447K\H  ;)++HHH ,# *G ! tr8  c           
      v   t           j        rDt           xj        dz  c_        t                               d           t           xj        dz  c_        | }|j        D ]<\  }}}|8d }|j        D ]+}|j        
|j                                        |k    r|} n,|}n*|j        }|j	        }	|
                    |||	dddd          }t           j        rt                               d|           t                               d|           t                               d|           |2t          |                    t           j        dz             d	           nt                               d
           |$t           j        rt           xj        dz  c_         d S >t           j        rt           xj        dz  c_        |S )NrT  zdirect_lookup:Fr0  zname:          r9  zid:            r   r  z	not foundr  )r0  r  r  r  r  r  r1  r  r  rd  r  r  r%  )
r5  rC  r   r  r  r/  r  candr  rd  s
             r6  direct_lookupzSymbol.direct_lookupr  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:::=!++f&9A&=>>BGGGGG&&{333y& -''1,''tt   	%1$r8  r  c                 `   t           j        rLt           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ddt          t          t          f         dt          dt          ddf
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 )NrT  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>.QualifiedSymbolIsTemplateParamNrD  rA  r8  r6  QualifiedSymbolIsTemplateParamrg    s        Dr8  rh  r  r0  r  r  rd  rz   c                 J    | j         | j         j        dk    r
             d S )Nr  )r1  r  )r  r  r  rd  rh  s       r6  r)  z2Symbol.find_name.<locals>.onMissingQualifiedSymbol  s3     '3+6/II88:::4r8  Fr=  )NtemplateParamInQualifiedr  r  r   r  r0  )r0  r  r  r  r  r%  r{  r   rG  r  r   r  r5  r2  r  rK  r  r1  r  r  r  )r5  r  r(  r  r  r  r  r  r)  r?  r  r/  rh  s               @r6  	find_namezSymbol.find_name  s     	G1$|,,,1$w'''$..!4q!899rBBBB3Z@@@3]CCC3S99935FGGG3Y???3]CCC35EFFF	 	 	 	 	Y 	 	 		8 	05m[6P0Q	58	 4C	 HP	 	 	 	 	 		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    G   G	G	c                    t           j        r/t           xj        dz  c_        t                               d           |j        }|j        r|j        j        }ng }dddt          t          t          f         dt          dt          ddf
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 )NrT  zfind_declaration:r  r0  r  r  rd  rz   c                     d S r4  rA  r<  s       r6  r)  z9Symbol.find_declaration.<locals>.onMissingQualifiedSymbol  s	     4r8  Fr=  r   fakeDocnameForQuery*   r;  )r0  r  r  r  r  r  r  r   rG  r  r   r  r5  r2  r  rK  r  r  r  rd  r  r1  r  )r5  r1  r  r  r  r  r  r(  r)  r?  r  querySymbolrZ  r/  rH  s                  r6  find_declarationzSymbol.find_declaration  s     	41$2333 %
% 	'6@MMM	8 	05m[6P0Q	58	 4C	 HP	 	 	 	 **:}+CGL>A=N5>9FFK<A + C C  	%1$4|+,,w<<14L$='3'=,8,G*6*C)4%:"$& & & ++-- 	 	F!)'5577F  ""$$$ ! 	tr8  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	(r*  r   )r0  r  r  rz  r  r@  r  r1  rd  r  r  r  r  )r5  rr  r  s      r6  r%  zSymbol.to_string  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||r8  c                     |                      |          g}| j        D ]-}|                    |                    |dz                        .d                    |          S )NrT  r   )r%  r  rz  r:  r  )r5  rr  r  r   s       r6  r:  zSymbol.dump:  s\    ~~f%%& 	+ 	+AJJqvvfqj))****wws||r8  rz   N)rz   r  r4  )rC  r  rz   r0  )9r=  r>  r?  r  r  r  debug_show_treer  r  staticmethodr   r  r  r@  r  r	   r   rG  r  r_  r  r2  rh   r7  r  r  r  r  r   r  r  r   r  rx  r  r  r  rE   r  r  r   r   r  r5  r  rW  r  r]  r_  r1  rd  r
   rk  rq  r%  r:  __classcell__r  s   @r6  r0  r0  a  sK       LLO  D D D 3 4    \
$ 
$ 
$ 
$3s 33 34 3 3 3 3 3 3&1x1 &1!-d"BC&1!&'8:QSW'W!X&1  #&1 2:.1I&1 #3-	&1 08}	&1 BF	&1 &1 &1 &1P1~ 1 13 1SW 1 1 1 1 "% "% "% "%H   % % % % % %"0# 0 0 0 0
 /y1E'F / / / X/   (=m = = = =%{8R2S 14DS48EI 15 SW '/	    S%U=+3M-N S%,/S%?NS%/3S%@DS% ,0S% NRS% /3	S% 8@7I	S% S% S% S%jK KtCy K198U=ZeKeEfhkm|:}  @H  ;H  2IK48KNQK +/K <@K '+	K IM	K
 *.K
 3EK K K KBs} sT#Y s"0s;>sFIsNVs s s sji% i%DI i%*i%/3i% i% i% i%X AE = !=IQ   > !$,/4<   $}k/I)J #'8<PT%   >' ' ' 'RKM K$s) KK/3K@DK!%K9=KBGXX[H[B\K K K KZ4N 4 4Y] 4$(49=4BJ4 4 4 4l     83 3        r8  r0  c                   J   e Zd Zedefd            Zed             Zed             ZdefdZde	fdZ
defdZdefdZd	ed
ededeeeeef                  ef         fdZdefdZdeeef         fdZdefdZdeeef         fdZdefdZdefdZdefdZdedefdZdededee         fdZ dedefdZ!dedefdZ"defdZ#	 dKdee         de$g ef         dedefdZ%de&fd Z'de(fd!Z)dLd#ede*fd$Z+de,fd%Z-de.fd&Z/d'ede0fd(Z1d)ed*ede2fd+Z3dKd)ed*ede4fd,Z5d-eeef         d'ed*edee6e7f         fd.Z8	 dKd-eeef         d'ed*ede9fd/Z:dMd)ed1ede;fd2Z<dNd-eeef         d)ede=fd3Z>d-eeef         d)edee?e@f         fd4ZAdeBfd5ZCdeDfd6ZEdeFfd7ZGdeHfd8ZIdeJfd9ZKdeLfd:ZMdeNfd;ZOdePfd<ZQdeRfd=ZSdeeT         fd>ZUd?edeeV         fd@ZW	 dLdAe*dBeVdCedDedeVf
dEZXd?edFedeYfdGZZde[fdHZ\deee[eYf         ef         fdIZ]deee=f         fdJZ^d0S )ODefinitionParserrz   c                     dS )NC++rA  r;  s    r6  languagezDefinitionParser.languageB  r+  r8  c                     | j         j        S r4  )configcpp_id_attributesr;  s    r6  id_attributeszDefinitionParser.id_attributesF  s    {,,r8  c                     | j         j        S r4  )r  cpp_paren_attributesr;  s    r6  paren_attributesz!DefinitionParser.paren_attributesJ  s    {//r8  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"rT  FTz$Unexpected end during inside string.\)current_charposeoffail
definition)r5  startPosescapes      r6  _parse_stringzDefinitionParser._parse_stringN  s    ##48A
	x 		@AAAA"c))&)A"d**HHMHH
	 x011r8  c                     dt           dt           f 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t0          $ r                      d           Y nw xY w ||
          S d S )Nr  rz   c                                          t                    s| S t          j                  }t	          | |          S r4  )matchudl_identifier_rerG  matched_textr  )r  r  r5  s     r6  _udlz-DefinitionParser._parse_literal.<locals>._udlj  s?    ::/00  "$"344E(%888r8  rp   r   Tra   FrT  r  z8Can not handle character literal. Internal error was: %szJCan not handle character literal resulting in multiple decoded characters.)r  skip_ws	skip_wordr  r  r  r  r/   r0   r  r  r-   r1   r3   r5   r4   r  r  r.   
last_matchgroupr  UnicodeDecodeErrorr  r+   )r5  r  r  	hasSuffixfloatLitregexintLitstringrc  r  charLitr   s   `           r6  _parse_literalzDefinitionParser._parse_literala  s   	9* 	9 	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H55"II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 )Nr(  rT  r)  z6Expected fold operator after '...' in fold expression.r*  z'Expected ')' in end of fold expression.z@Expected fold operator after left expression in fold expression.z6Expected '...' after fold operator in fold expression.z0Expected ')' in end of parenthesized expression.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_errorr3  )r5  r"  r#  r  r!  eFoldr  eExprs           r6  _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_namerC  )r5  r  r  s      r6  _parse_primary_expressionz*DefinitionParser._parse_primary_expression  s     	!0022?J>>&!! 	$!###2244?J$$&&>"2&&&tr8  r  openclosec                    |                                   |                     |          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  FTr)  r   z	Error in z, expected ',' or 'r  r  rT  )	r  r  r  _parse_initializer_clauserz  r  r  r  r  )r5  r  r  r  r  r  r4  s          r6  _parse_initializer_listz(DefinitionParser._parse_initializer_list  si    	&&t,, 	:E"" 	u9?A	LLNNN1133DLLNNN&& #1$778888T"""LLNNN&& **3// P			$$$NOOO E))esllA $!	" m##r8  c                 \    |                      ddd          \  }}|d S t          |          S )Nzparenthesized expression-listr(  r*  )r  r  r  s      r6  _parse_paren_expression_listz-DefinitionParser._parse_paren_expression_list  s@      $;;<[<? F  F}=4&&&r8  c                 ^    |                                  }||S |                     d          S NF
inTemplate)_parse_braced_init_list_parse_assignment_expression)r5  bracedInitLists     r6  r  z*DefinitionParser._parse_initializer_clause  s6    5577%!!00E0BBBr8  c                 ^    |                      ddd          \  }}|d S t          ||          S )Nzbraced-init-listr  r  )r  r  r  s      r6  r  z(DefinitionParser._parse_braced_init_list$  s=      $;;<NPSUXYY}=4 666r8  c                 Z    |                                  }||S |                                 S r4  )r  r  )r5  parens     r6  *_parse_expression_list_or_braced_init_listz;DefinitionParser._parse_expression_list_or_braced_init_list,  s2     1133L++---r8  c                     d }d }                                   d }t          D ]}                     |          r|} n|*d}                     d          s                     d|z                                  d          }                                                        d          s                     d|z                                  d          s                     d|z             d	t          f fd
}                     dg|          }                                                        d          s                     d|z             t          |||          }n                     d          rmd}                     d          s                     d            j
        }	                      d          }t          |d          }                     d          s                     d           n# t          $ r}	| _
        	 d	t          f 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/                                                                   }|$|                    t3          |                     Z	 t5          ||          S ),Nr  r   zExpected '<' after '%s'.Fr   z Expected '>' after type in '%s'.r(  zExpected '(' in '%s'.rz   c                  ,                                      S r4  r  r;  s   r6  parserz:DefinitionParser._parse_postfix_expression.<locals>.parser^  s    --///r8  r*  zExpected ')' to end '%s'.r   zExpected '(' after 'typeid'.T)r  z%Expected ')' to end 'typeid' of type.c                  ,                                      S r4  r  r;  s   r6  r  z:DefinitionParser._parse_postfix_expression.<locals>.parsers  s    #55777r8  z+Expected ')' to end 'typeid' of expression.zError in 'typeid(...)'.z Expected type or expression.If typeIf expressionr4  operatorCasttypeOperatorCastr  z3Expecting '(' or '{' after type in cast expression.zError in postfix expression,z% expected primary expression or type.zIf primary expression)r4  r  r   rY  rZ  z*Expected ']' in end of postfix expression.rb  r   r  z..rS  r   r   r   )r  r  skip_word_and_wsr  r  _parse_typer  r  _parse_expression_fallbackr  r  r  r(   rz  r  r  r  r  rU  r  r_  rg  rm  rx  r  r~  r  )r5  
prefixTyperc  r  r   r  r  r4  r  eTyper  headererrorseOutereInnerr  r  r  s   `                 r6  _parse_postfix_expressionz*DefinitionParser._parse_postfix_expression4  s   , 
" 	 	A$$Q''  J##C(( =		4t;<<<""5))CLLNNN**3// E		<tCDDD##C(( :		1D89990M 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8M 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}   6AH 
K,K'AI:9K':
KAKKK''K,7L 
O)O$ AM87O$8
OA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  r}   r)  r(  z Expecting '(' after 'sizeof...'.z%Expecting identifier for 'sizeof...'.r*  z!Expecting ')' to end 'sizeof...'.FnamedzExpecting ')' to end 'sizeof'.r>   zExpecting '(' after 'alignof'.zExpecting ')' to end 'alignof'.rm   zExpecting '(' after 'noexcept'. Expecting ')' to end 'noexcept'.r  rl   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.rX   rY  rZ  z(Expected ']' in array delete-expression.)r  _expression_unary_opsr  r  r  r  r  r  r  r  r2   rG  r  r  r  r  _parse_unary_expressionr  r  r  r  r  _parse_decl_specs_parse_declaratorr  r  r  r  r  )r5  r"  r  r4  r  r  r  r  r  r  r  r  r  s                r6  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--///r8  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 )Nr(  Fr*  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  rz  r  )r5  r  r  r4  exCastexUnaryerrss          r6  r  z'DefinitionParser._parse_cast_expression(  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  c                 d    dt           dt          dt          dt          ffd | d|          S )Nr5  opIdr  rz   c                     dz   t          t                    k    rdt          dt          f fd}ndt          dt          f
 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 )NrT  r  rz   c                 ,                                     S r4  )r  r  r5  s    r6  r  zYDefinitionParser._parse_logical_or_expression.<locals>._parse_bin_op_expr.<locals>.parserO  s    66888r8  c                 &     dz   |           S )NrT  r  rA  )r  _parse_bin_op_exprr  r5  s    r6  r  zYDefinitionParser._parse_logical_or_expression.<locals>._parse_bin_op_expr.<locals>.parserR  s    --dD1HTTTTr8  r  Tr   Fr   rO  r   )rK  _expression_bin_opsrE   r  rz  r  r  r  r  r  r(   r  )r5  r  r  r  r  r  r  oneMorer"  r4  r  s   ``        r6  r  zIDefinitionParser._parse_logical_or_expression.<locals>._parse_bin_op_exprL  s   ax3233339t 9 9 9 9 9 9 9 9Ut U 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==EEr   r  )r|  rh   rE   r  )r5  r  r  s     @r6  _parse_logical_or_expressionz-DefinitionParser._parse_logical_or_expression@  s\    '	,%5 '	,%('	,6:'	,?L'	, '	, '	, '	, '	, '	,P "!$jAAAAr8  
orExprHeadc                 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  )r5  r  r  r  r  s        r6  "_parse_conditional_expression_tailz3DefinitionParser._parse_conditional_expression_tailv  s    
 	$$ 	4))++$$ 	WIIUVVV44Z@@!*hAAAr8  c                 4   |                      |          }|                     ||          }||S t          D ]_}|d         dv r|                     |          s"n|                     |          s9|                                 }t          |||          c S |S )Nr  r   anox)r  r  _expression_assignment_opsr  r  r  r"  )r5  r  r!  condExprr"  r#  s         r6  r  z-DefinitionParser._parse_assignment_expression  s     44
4KK::8ZPPO, 	> 	>B!u~~b))  ''++ 6688I$Xr9=====r8  c                 f    |                      |          }|                     ||          }||S |S Nr  )r  r  )r5  r  orExprr  s       r6  _parse_constant_expressionz+DefinitionParser._parse_constant_expression  s?     22j2II::6:NNOr8  c                 .   |                      d          g}	 |                                  |                     d          sn*|                    |                      d                     Tt	          |          dk    r|d         S t          |          S )NFr  Tr   rT  r   )r  r  r  rz  rK  r)  r+  s     r6  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&&&r8  Tr  r  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:
%sr*  r  rZ  r   )r(  r  rY  r   r   r  rT  z0Could not find end of expression starting at %d.)r  r(   allowFallbackExpressionParsingwarnr  r  
_string_rer  r  rK  r  rz  r"  r  r  stripr2  )
r5  r  r  r  prevPosr   r  r  bracketsr  s
             r6  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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)rl   rX   rY  rZ  zExpected "]" after  "operator z["r   rY  z%Expected user-defined literal suffix.Fr  r  r  )r  r  _operator_rerG  r  r  r  r  r2   rG  rS  r  r[  )r5  r"  rH  r  s       r6  _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$$$r8  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   FrT  r  r)  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  rz  r(   r  rd  r  )r5  
prevErrorsrd  rl  r  parsedComma	parsedEndr  r   r  r  s              r6  _parse_template_argument_listz.DefinitionParser._parse_template_argument_list  s+    	&&s++ 	4C   	."2u---
EG.	)(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memberPointerc                 $   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  TrT  r   r   rq   z#Expected identifier in nested name.z3Expected identifier in nested name, got keyword: %sz.Expected '::' in pointer to member (function).)r  r  rK  r  rz  r  r  r2   r"  r  r  	_keywordsrG  r  r  r(   otherErrorsr  r  )r5  r  r  r  r  r   r  rH  r  rd  exs              r6  r  z#DefinitionParser._parse_nested_nameI  s5   ,. "	D!! 	F%	LLNNN5zzA~~00<< X&&&;?I$$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c                    d }d }g }d }g }|                                   |                     t                    r| j        }|                    |           |dv r/|)|                     d                    ||                     |}n+|dv r.|)|                     d                    ||                     |}n|dk    rXt          |          dk    r/|                     d                    ||d                              |                    |           n|dk    rdt          |          dk    r;|d         dk    r/|                     d                    ||d                              |                    |           n1|dv r-|)|                     d                    ||                     |}|                                   |                     t                    t          |          dk    rd S |dv r|)|                     d                    ||                     |)|                     d                    ||                     t          |          dk    r<|                     d                    |d	                    |                               n|d
k    r||)|                     d                    ||                     t          |          dk    r<|                     d                    |d	                    |                               n`|dk    r-|)|                     d                    ||                     n-|dv r||)|                     d                    ||                     t          |          dk    r<|                     d                    |d	                    |                               n|dk    r||)|                     d                    ||                     t          |          dk    r<|                     d                    |d	                    |                               n+|dk    r|)|                     d                    ||                     t          |          dk    r<|                     d                    |d	                    |                               t          |          dk    rH|d         dk    r<|                     d                    |d	                    |                               nO|+|(|                     d                    |                     n"t          d                    |                    g }||                    |           ||                    |           |
                    |           ||                    |           t          ||          S )N)rB   r   rE   rI   r   rJ   rK   rL   rh   r   r   rb   rZ   r   r   r   r   zCan not have both {} and {}.)r|   r   r{   r   ri   )
_Imaginary_Complex)rB   r   rE   r   rJ   rK   rL   r   r   r   r   r  rI   rh   )r   r   rb   rZ   rT  z.Can not have {} without a floating point type.zUnhandled type {})r  r  _simple_type_specifiers_rer  rz  r  r  rK  r  r  extendr}  )r5  modifier
signednesswidthr  r  r   r~  s           r6  _parse_simple_type_specifiersz.DefinitionParser._parse_simple_type_specifiers{  s   "&$(
!jj344 	!ALLOOO J J J
 ?II<CCAsKKLLL,,,)II<CCAzRRSSS

gu::??II<CCAuQxPPQQQQfu::??uQx6'9'9II<CCAuQxPPQQQQ000'II<CCAxPPQQQLLNNN7 jj344 	8 u::??4 H H H #		8??XNNOOO%		8??ZPPQQQ5zzQ		8??SXXe__UUVVVF]]#		8??XNNOOO5zzQ		8??SXXe__UUVVVE\\#		8??XNNOOO+++#		8??XNNOOO5zzQ		8??SXXe__UUVVVG^^%		8??ZPPQQQ5zzQ		8??SXXe__UUVVVH__%		8??ZPPQQQ5zzA~~		8??SXXe__UUVVV5zzQ58v#5#5		8??SXXe__UUVVV[#		JQQRZ[[\\\ !4!;!;C!@!@AAA "
h'''!j)))%   ?c"""-eZ@@@r8  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 )NrV   r(  zExpected '(' after 'decltype'.rB   r*  z#Expected ')' after 'decltype(auto'.z%Expected ')' after 'decltype(<expr>'.)rM   r   r]   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  r  r  r  r  r  r  r  r  r  r  r  )r5  r  r4  rc  kr  r  s          r6  _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Kr8  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        z             #|                                   |                     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 )Nrl   r(  r  z+Expecting "(" in parameters-and-qualifiers.r*  rT  r)  Tz6Expected ")" after "..." in parameters-and-qualifiers.singler  r  r   z<Expecting "," or ")" in parameters-and-qualifiers, got "%s".rP   r   r   r   rm   Fr  r   r  r  r  r   r  z'Expected "%s" in initializer-specifier.z" or ")r  r  r  rz  r  _parse_type_with_initr  r  r  r  r  r  _parse_attribute_listr  r  )r5  r  rk  r  rP   r   r  r  r4  r  r  r  r  r  validr   s                   r6   _parse_parameters_and_qualifiersz1DefinitionParser._parse_parameters_and_qualifiers  s_   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(( 9%%c** 9II$&*&789 9 9+92 	%%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 	1r8  r  typedc                 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.NrT  rP   r   )r  r  r~   r`   r  rj   rw   )r  r  rg   rR   rS   r   r  rQ   rd   r   r^   r(  Fr  z=Expected constant expression after '(' in explicit specifier.r*  z'Expected ')' to end explicit specifier.)r  r  r  r  r  r  r  _parse_attributerz  r  r$   )r5  r  r%  r  r  rg   r   r  rQ   rR   rS   r   rP   rd   r  r^   r4  attrs                     r6  _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r8  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{  r)  r  r  )r5  r  r%  r  r  r  s         r6  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Cr8  r  c                     |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
t          f 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mayber  FrO  r  z Unexpected ':' after identifier.rT  rY  rZ  rz   c                  ,                                      S r4  r  r;  s   r6  r  z>DefinitionParser._parse_declarator_name_suffix.<locals>.parser  s    11333r8  z&Expected ']' in end of array operator.r   r  r  r=  r$  )r  r  r(   r  r2   rG  r  r  r  r  r  r  r  rz  r  r  r  r$  rK  r  r;  r  )r5  r  r  r%  r  r   rH  r  r!  r  r  r"  r  s   `            r6  _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 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   % ;;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  rl   z'Internal error, unknown paramMode '%s'.r   FrT  r   rP   rK  r   rr  r)  r  r(  r  r$  z/If declarator-id with parameters-and-qualifiersr*  z$Expected ')' in "( ptr-declarator )"r  r  r  r%  r  z"If parenthesis in noptr-declaratorzError in declaratorT)r  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  r'  rz  r  rH  r$   r"  rp  r  r  r  r  r0  r(   r  r  r  r  r  r  )r5  r  r  r%  r	  r   rP   attrListr(  rI  r  r  r  exParamQualr  exNoPtrParenr  r  r   s                      r6  r  z"DefinitionParser._parse_declarator  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NallowFallbackc                                                        |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
t
          f fd}                     |||          }t          |          S )Nr  F)r  r   r  r   r   r*  z;Internal error, initializer for outer '%s' not implemented.rz   c                  0                                    S r  )r  r  s   r6  r  z3DefinitionParser._parse_initializer.<locals>.parser  s    44
4KKKr8  )r  )r  r  r  r  r  r  r  )r5  r  r6  
bracedInitfallbackEndr  r  r  s   `      @r6  _parse_initializerz#DefinitionParser._parse_initializer  sI   & 	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 	L//V=/YYe$$$r8  c                 p   |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           n]# t          $ r}|dk    rd}	n|d	k    rd}	nt                      |                    ||	f           || _        	 |                     |          }|                     d|          }n# t          $ r}
|| _        |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  r,  r  )r  r  F)r  r%  Tr2  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  r  )r{  r  r  r  r  recompiler  r  
assert_endr(   r  rz  r  r  )r5  r  r  r	  r  r  r  mustEnd	exUntypeddescexTypedr  r%  r  s                 r6  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(***!!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"0"2"22"44ZHHgU)C DDDD*CX I  .((*	/)) ..U.;;I)))KKDy$'''s=   BC G>G-EG
GA;GGGG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          $ rW}	||	g }
|
	                    |df           |
	                    |	df           d}|dz  }| 
                    |
|          |	d }	~	ww xY w)Nr+  r   r  r  F)r  r6  r   r   r   r  z-If default template argument is an expressionz&If default template argument is a typez$Error in non-type template parameterz# or constrained template parameter.)r  r;  r  r  r  r  r(   r  r  rz  r  )r5  r  r  r  r  r  r  r   typeInitr  r  r[  s               r6  r!  z&DefinitionParser._parse_type_with_init  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c                     |                                  }|                                  |                     d          st          |d           S |                     dd           }t          ||          S )Nr   F)r  r  r  r  r  r  s      r6  _parse_type_usingz"DefinitionParser._parse_type_using8  sk    &&(($$ 	,d+++t,,D$'''r8  c                     |                                  }|                                  |                     d          }t          ||          S )Nr  )r  r  r;  r  r  s      r6  _parse_conceptzDefinitionParser._parse_concept@  sC    ,,..
--h77*k222r8  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  rT  Fr   Tr)  r   )r"  r  r  r  r  r  _visibility_rer  rz  r  r  )	r5  r  r  r  r  r  r   r  baseNames	            r6  _parse_classzDefinitionParser._parse_classF  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2r8  c                 r    |                                  }|                                 }t          ||          S r4  )r"  r  r$  )r5  r  r  s      r6  _parse_unionzDefinitionParser._parse_unione  s4    **,,&&((e$$$r8  c                     d }|                                  }|                                 }|                                  d }|                     d          r|                     d          }t          ||||          S )Nr  Fr  )r"  r  r  r  r  r+  )r5  r,  r  r  r-  s        r6  _parse_enumzDefinitionParser._parse_enumj  s{    **,,&&((C   	;!--E-::NtV^U;;;r8  c                 X                                      }                                 }                                  d }                     d          rF                                  dt          f fd}                     g |          }t          |          }t          |||          S )Nr   rz   c                  0                          d          S r  )r  r;  s   r6  r  z2DefinitionParser._parse_enumerator.<locals>.parser|  s    66%6HHHr8  )r  r"  r  r  r  r  r  r3  )r5  r  r  r  r  initVals   `     r6  _parse_enumeratorz"DefinitionParser._parse_enumeratort  s    &&((**,,C   	+LLNNNIM I I I I I I55b&AAG!'**DT4///r8  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           $ rT}
|| _        d}g }|                    |df           |                    |
df           |                     ||          d }
~
ww xY wd }~ww xY w)Nr   r   rM   zFExpected 'typename' or 'class' after template template parameter list.zKExpected 'typename' or 'class' in the beginning of template type parameter.r)  r   Fr  z,>z4Expected "," or ">" after (template) type parameter.r.  r  z&Error when parsing template parameter.z:If unconstrained type parameter or template type parameterz3If constrained type parameter or non-type parameter)r  r  _parse_template_parameter_listr  r  r  r  r  r2   rG  r  r  r  rB  r]  rK  r(   r!  ri  rz  r  )r5  r^  r  rC  rD  rH  rW   r  r  rr  eNonTyper  r  s                r6  _parse_template_parameterz*DefinitionParser._parse_template_parameter  s   >>*%% 	 >>@@LLLh4	;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 	; 	; 	; ;227OLL $ 0 0 7 7.umDDDDDDDD" ; ; ;AXY[ [ [TUW W W,,T6:::;	;sE   	E'G  1G   
J
J
AH)#J)
J3AJJJ

J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'rT  r   r   z!Error in template parameter list.zIf parameterzExpected "," or ">".zIf no parameter)r  r  r  r  r[  rz  r(   _parse_requires_clauser_  r  r  )
r5  r  r  errrr  eParamru  r  r  r   s
             r6  rY  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d,,T6:::s0   )A6 6
B 	BBD- -
E7EE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  rT  r)  z2Expected identifier in template introduction list.zBExpected identifier in template introduction list, got keyword: %sr  r   z:Error in template introduction list. Expected ",", or "}".)r  r  r{  r  r  r  r2   r  r  r  rG  rz  r  r  )r5  r  rO   rt  rD  txt_identifierrH  s          r6  _parse_template_introductionz-DefinitionParser._parse_template_introduction  s   h	--//GG 	 	 	DH44	 	$$ 	DH4 	3LLNNN ,,U33MLLNNN::m,, P		NOOO!.N**		 ,.<= > > >&~66JMM::}UUVVVLLNNN$$ 3!!#&& 3		 2 3 3 3)	3, 'w777s    33c                 n   |                                   |                     d          sd S dt          dt          f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 )Nry   r5  rz   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?   rT  r   )rz  r  r  r  r  rK  r  )r5  andExprsr  r  s       r6  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2r8  TFr   rr   rT  r   )	r  r  r|  r  rz  r  rK  rv  r  )r5  rf  orExprsr  r  s        r6  r]  z'DefinitionParser._parse_requires_clause  sP    	~~j)) 	4	3!1 	3m 	3 	3 	3 	3* ~~d++,,,	1LLNNNG%% !

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

4    NN>>$//000	1 w<<1$WQZ000$\'3%?%?@@@r8  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 )	NrT  r   r  r   rO   z'requires-clause not allowed for conceptz0More than 1 template parameter list for concept.z,Missing template parameter list for concept.)r  r  r  rY  r(   rK  r  ru  r  rb  rz  )r5  r  r  rt  r  r   s         r6  "_parse_template_declaration_prefixz3DefinitionParser._parse_template_declaration_prefix@  s   MO		%LLNNNHLF(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  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   TrT  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
	)ru  )r  r  rK  r  r@  r  r  rz  r_  r  r  )r5  r  r  rj  rk  numArgsisMemberInstantiation	numParamsnumExtrar[  newTemplates_is               r6  _check_template_consistencyz,DefinitionParser._check_template_consistencya  s    **,, % 	:II :N4<	(,%% 899	Q;""II I ),- . . . Y*H$ 	-B 	C 	845 **! 58n44Cs:&		#TVLHoo P P##$5b$N$N$NOOOO >&; >##N$<===9,GGNr8  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          }|                                 }nz|dk    r|                                 }n_|dk    r|                                 }nD|dk    r|                                 }n)|dk    r|                                 }nt'                      |                     |j        |d|dk              }|                                  |                     d          }t/          |||||||          S )N)rM   r   r  r  r  rO   r]   r  z(Internal error, unknown objectType "%s".)rM   r   r   r  r  varr  rO   r]   r  r  r  z+Internal error, unknown directiveType "%s".)r  rO   r  r  rM   r   r  Tr  r>  zIf type alias or template aliaszError in type declaration.rO   r  r  rM   r   r]   r  F)rj  rk  r  )r{  r  r  rM  r  ri  r  r  r(   rz  rI  r  rK  r!  r]  rO  rQ  rS  rW  r  rs  r  r  r2  )r5  r  r  r  r  r  r1  r	  r  r   r  r  s               r6  parse_declarationz"DefinitionParser.parse_declaration  s:    ? ? ?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c                     |                      d          }|                                 }|                     ||d          }t          ||          }d|_        |S )Nrk   r  Frj  )ri  r  rs  r  r  )r5  r  r  r  s       r6  parse_namespace_objectz'DefinitionParser.parse_namespace_object  sg    @@K@XX&&((99$LQ : S S400$
r8  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xrefrx  r   Try  r  FzIf shorthand refzIf full function refzError in cross-reference.)r  ri  r  r  r  rA  rs  r  r  r(   rv  rz  r  )
r5  r  r  r  res1e1res2e2r  r[  s
             r6  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c                     | 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  rA  r(   r  rz  r  )r5  r  r4  exExprr  exTyper  r  s           r6  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  r  r:  r4  )_r=  r>  r?  r  r@  r  r  r  r  r  r  r  r  r  r
   r   r   r  rE   r  r  r  r  r  r  r  r  r  r  r  r	   r  r  r  r  r  r   r  r  r  r  r  r  r  r}  r  ry  r  r  r$  r  r)  r  r  r  r;  r0  r  r  r  r;  r  r  r  r  r!  r  rI  r  rK  r  rO  r$  rQ  r+  rS  r3  rW  r9  r[  r_  rY  r  rb  rv  r]  r  ri  rs  r2  rv  r  rz  r  r  rA  r8  r6  r|  r|  A  s       #    X - - X- 0 0 X02s 2 2 2 2&:
 : : : :x94 94 94 94 94v=    . $C  $s  $3  $%*4m6G7H 1I ,J+/,0 &1 $  $  $  $D'.> ' ' ' 'C5@Q1Q+R C C C C7): 7 7 7 7.	!22	3. . . .S1> S1 S1 S1 S1j]0 ]0 ]0 ]0 ]0~2 2 2 2 204Bt 4B 4B 4B 4B 4BlB] B7;B@HI[@\B B B Bt     >T m    '= ' ' ' '  26(. (.d3i (.+3B4E+F(.*.(.:G(. (. (. (.X% % % % %@?< ?< ?< ?< ?<B.7 .7 .7 .7 .7 .7 .7dWA/M WA WA WA WAr+L+> +L +L +L +LZ]1# ]1BY ]1 ]1 ]1 ]1~[Tc [T$ [TCU [T [T [T [TzD Ds D4 D< D D D D65?49%5?255?>B5?	)+DD	E5? 5? 5? 5?p )-qD qDuT3Y'7 qDC qD!%qD,qD qD qD qDf/% /% /%4 /% ./% /% /% /%bV( V(tSy!1 V(# V( V( V( V( V(p+?tSy)+?+? 2Y!YZ+? +? +? +?Z(< ( ( ( (3
 3 3 3 33h 3 3 3 3>%h % % % %
<W < < < <0= 0 0 0 0 =;+; =; =; =; =;~ ;0A  ;  ;  ;  ;D$8.E $8 $8 $8 $8L3A1B(C 3A 3A 3A 3Aj;S ;089U0V; ; ; ;F OT% %m %4P%7;%GK% *F% % % %N?AC ?A ?A ?A ?A ?A ?AB    @5|^/K)Ld)R#S @ @ @ @<G%w(>"? G G G G G Gr8  r|  c                  d    t          t          d          d           } t          | gdgd          S )NPhonyNameDueToErrorFrO  )r  rG  r  )r  s    r6  _make_phony_error_namer    s3    
}-BCCT
J
JC#6666r8  c                   n    e Zd ZU dZ ed ed          dd          gZee         e	d<   e
j        e
j        e
j        dZee	d	<   d
eddfdZd
edededdfdZedefd            Zedefd            ZdedefdZdedefdZded
ededdfdZdee         f fdZdededefdZddZddZ  xZ!S )	CPPObjectz%Description of a C++ language object.template parameterzTemplate Parameters)tparamr  Tlabelr  can_collapsedoc_field_types)noindexentrynocontentsentryr  option_specastrz   Nc           
         |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  r]   FTr/  rT  r;  )r  r/  r  r  rd  r  r1  r  r1  r  r  r0  rb  r  get_source_info)r5  r  r/  r  
parentDecltargetSymbolr   	declClones           r6  _add_enumerator_to_parentz#CPPObject._add_enumerator_to_parent  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r8  sigr`  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 )NrT  )rQ  r   z^[a-zA-Z0-9_]*$zMIndex id generation for C++ object "%s" failed, please report as bug (id=%s).rR  r  FrO   Tr  entriesr  r   rh  r  rL  )"r  r  rZ  rz  r)   r2  reversedr?  r@  r  rU  rV  get_locationr/  r  r_  lstripr  r1  r  r  rb  r  cpp_index_common_prefix
startswithrK  get_index_text	indexnodestatedocumentrL  
domaindatar  note_explicit_target)r5  r  r  r`  rL  r   r  newestIdr  isInConceptr   r  strippedNamerc  	indexTextr  s                   r6  add_target_and_indexzCPPObject.add_target_and_indexD  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\AA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                      r4  r<  r;  s    r6  object_typezCPPObject.object_type|  s    !###r8  c                     | j         S r4  )r  r;  s    r6  display_object_typezCPPObject.display_object_type  s    r8  r  c                 4    t          d          || j        fz  S )Nz%s (C++ %s))r   r  rF  s     r6  r  zCPPObject.get_index_text  s    4)A"BBBr8  r  c                 B    |                     | j        | j                  S r4  )rv  r  objtype)r5  r  s     r6  parse_definitionzCPPObject.parse_definition  s    ''(8$,GGGr8  r  c                 @    |                     |d| j        |           d S r  )r  rb  )r5  r`  r  r  s       r6  r  zCPPObject.describe_signature  s$    wdhHHHHHr8  c                    | j         j        j        j        }d|j        vr9|j        d         d         }||j        d<   |                                |j        d<   |j        d         }|j        }||j	        dk    rd}t                              |                    t          |                                          | j        | j        d                   |                                            t%                      }|                    |          }||j        d	<   g S d |j        d	<   t)                                                      S )
Ncpp:parent_symbolrh  root_symbolro  r  zmC++ declarations inside functions are not supported. Parent function: {}
Directive name: {}
Directive arg: {}r   rR  cpp:last_symbol)r  r  settingsrb  	temp_datar  rx  ref_contextr1  r  rU  rV  r  r@  r  r  	argumentsr  r  r]  r  run)	r5  rb  rootr  r  r[  r  r/  r  s	           r6  r  zCPPObject.run  s=   j!*.cm33>%(7D15CM-.040C0C0E0ECO,- }%89!-
!j&;z&I&IPCNN3::L557788	4>!,  ))++  - - - *++D!**400F/5CM+,I ,0'(ww{{}}r8  c                 P   | j         j        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|                     |           t1          | j                  }
d	| j        v |
d	<   |                     |||
           |S )
Nr  rS  r  rR  r  rT  )r  r  rQ  r  r  )rb  r  r|  r  r  rA  r(   rU  rV  r  r]  
ValueErrorr_  r  r  r  r  r.  r/  r   r  r  r  r  dictr  r  )r5  r  r`  r  r  r  r   r  r/  r[  r  s              r6  handle_signaturezCPPObject.handle_signature  sa   #x12EF!#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
s2   )A 
B?$AB::B?BE 
G!A!GGc                     | j         j        d         }|sJ | j         j        d         | _        | j         j        d         | _        || j         j        d<   |                                | j         j        d<   d S )Nr  r  ro  )rb  r  oldParentSymbolr  oldParentKeyrx  )r5  
lastSymbols     r6  before_contentzCPPObject.before_content  sv    !X/0AB
#x12EF'+x';<L'M2<./1;1J1J1L1L-...r8  c                 V    | j         | j        j        d<   | j        | j        j        d<   d S )Nr  ro  )r  rb  r  r  r  r;  s    r6  after_contentzCPPObject.after_content  s.    262F./151B-...r8  rv  )"r=  r>  r?  __doc__r8   r   r  r   r7   __annotations__r   flagr  r;   r2  r  r@  r   r  r  r  r  r  r|  r  r   r   r  r   r  r  r  r  ry  rz  s   @r6  r  r    s[        // 	)3H1I1I;"&	( 	( 	($OT%[    #%?&O K   (I^ (I (I (I (I (IT6> 6>S 6>&16>6:6> 6> 6> 6>p $S $ $ $ X$  S       X C3 C3 C C C CH'7 HN H H H HI. I .I9=IBFI I I I#T$Z # # # # # #J-C -. -^ - - - -^M M M MC C C C C C C Cr8  r  c                       e Zd ZdZdS )CPPTypeObjectr  Nr=  r>  r?  r  rA  r8  r6  r  r            KKKr8  r  c                       e Zd ZdZdS )CPPConceptObjectrO   Nr  rA  r8  r6  r  r    s        KKKr8  r  c                       e Zd ZdZdS )CPPMemberObjectr  Nr  rA  r8  r6  r  r    s        KKKr8  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)rr  r  r  argumentTr  
exceptionsThrowsr4  )throwsr   	exception)r  rolenamer  r  retvalzReturn values)retvalsr  returnvalueReturnsF)returnsrz   )r  has_argr  N)	r=  r>  r?  r  r  r  r8   r   r7   rA  r8  r6  r  r    s        K/[,D"&	( 	( 	( 	\8v;"&	( 	( 	( 	XQQ%7%70"&	( 	( 	( 	m11Y<<)	+ 	+ 	+3 OOOr8  r  c                   .    e Zd ZdZedefd            ZdS )CPPClassObjectrM   rz   c                 &    | j         dv sJ | j         S )Nr  )r  r;  s    r6  r  z"CPPClassObject.display_object_type  s      |22222|r8  N)r=  r>  r?  r  r  r@  r  rA  r8  r6  r  r    s>        KS    X  r8  r  c                       e Zd ZdZdS )CPPUnionObjectr   Nr  rA  r8  r6  r  r    s        KKKr8  r  c                       e Zd ZdZdS )CPPEnumObjectr]   Nr  rA  r8  r6  r  r    r  r8  r  c                       e Zd ZdZdS )CPPEnumeratorObjectr  Nr  rA  r8  r6  r  r    s        KKKr8  r  c                   J    e Zd ZU dZdZdZdZdZi Ze	e
d<   dee         fdZd	S )
CPPNamespaceObjectzb
    This directive is just to tell Sphinx that we're documenting stuff in
    namespace foo.
    FrT  r   Tr  rz   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 )
Nrh  r  r   NULLr  rp   r  rR  r  cpp:namespace_stackro  )rb  r  r  r  r|  r  r  rz  rA  r(   rU  rV  r  r  r]  r  r  r  rx  r  )r5  
rootSymbolr/  stackr  r  r   r  s           r6  r  zCPPNamespaceObject.run/  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=N)r=  r>  r?  r  has_contentrequired_argumentsoptional_argumentsfinal_argument_whitespacer  r;   r  r   r   r  rA  r8  r6  r  r  #  sh          
 K $ K   T$Z      r8  r  c                   F    e Zd ZU dZdZdZdZi Zee	d<   de
e         fdZdS )	CPPNamespacePushObjectFrT  r   Tr  rz   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   r  r  rR  r  rh  r  r  ro  )r  r  r|  r  r  rz  rA  r(   rU  rV  r  r  rb  r  r  r  r]  r  r  rz  rx  r  )r5  r  r  r   r  	oldParentr/  r  s           r6  r  zCPPNamespacePushObject.runN  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"Nr=  r>  r?  r  r  r  r  r  r;   r  r   r   r  rA  r8  r6  r  r  G  s\         K $ K   T$Z      r8  r  c                   F    e Zd ZU dZdZdZdZi Zee	d<   de
e         fdZdS )CPPNamespacePopObjectFr   Tr  rz   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.rR  r  rh  r  r  ro  )rb  r  r  rK  rU  rV  r  r"  r  rx  r  )r5  r  r/  s      r6  r  zCPPNamespacePopObject.runn  s    "&&'<dCC 	E

aNNZ$($5$5$7$7  9 9 9EEIIKKKu::>>2YFFX(/>F28./4901171F1F1H1H-.	r8  Nr  rA  r8  r6  r  r  g  s\         K $ K   T$Z      r8  r  c                   B     e Zd Z	 	 d
dededddeddf
 fdZdd	Z xZS )	AliasNodeNr  aliasOptionsrb  r   	parentKeyrz   c                 *   t                                                       || _        || _        |Vd|j        vr9|j        d         d         }||j        d<   |                                |j        d<   |j        d         | _        d S |J || _        d S )Nr  rh  r  ro  )	r  r7  r  r  r  r  rx  r  r  )r5  r  r  rb  r  r  r  s         r6  r7  zAliasNode.__init__  s     	(?"#-77~e,];5912484G4G4I4I 01 _-=>DNNN(((&DNNNr8  c                 R    |                      | j        | j        d | j                  S )N)rb  r  )r  r  r  r  r;  s    r6  copyzAliasNode.copy  s0    ~~dh(9"&$.  B B 	Br8  r  )rz   r  )	r=  r>  r?  r@  r  r  r7  r  ry  rz  s   @r6  r  r    s        +/(,' 'C 't '('%'15' ' ' ' ' ' B B B B B B B Br8  r  c                   b    e Zd Zej        dz
  Zdededededede	de
e         fd	Zd
e	ddfdZdS )AliasTransformrT  r   maxdepthskipThisr  renderOptionsr  rz   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   TrT  Fr   r  rh  domainaliasr  desctypenoindexrT  r  r  r  r  r  )r   r   rz  r1  r  rb  desc_contentrD  r  r  r  _render_symbolr  rK  r  )r5  r   r  r  r  r  r  recurser   r`  childContainercontentrD  r  
childNodess                  r6  r  zAliasTransform._render_symbol  s    q==GG]]GGMHG 	[-b"55GEL!!!M,,Wj$(MZZZ 	& &CH"/11}t$$$ (!&X5<<Y$z"2"&Y!%+ 	2 	2%-%04VVV!00X!-]% 1 ' '
 %%j1111 &DM 2 2a 7 7W%%%r8  kwargsNc           
         | j                             t                    D ]3}|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         }
|
                    |          }|sBt+          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|                    |           5d S )Nr  rR  r  r   rh  r  Target: ParentKey: rT  anyTF)r  r(  r  r  r  r  r  r  r  r  c                      g | ]}|j         	|S r4  )r1  rP  s     r6  r  z(AliasTransform.apply.<locals>.<listcomp>   s    GGGQQ]-Fq-F-F-Fr8  r   z,Can not find C++ declaration for alias '%s'.r  r  norootr  )&r  findallr  r  r  r|  rb  r  r  rA  r(   rU  rV  r   r   clearry  replace_selfdomainsr  rd  r  r:  ro  r  r  r  r  rk  r2  r  rq  rz  rK  r1  r  r  r  )r5  r  r|  r  r  r  r  isShorthandr   r`  r  r  r  nsr  r(  
failReasonr  r   r   r  r  s                         r6  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 *j#&&&mY///jooa(()))$&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/)r=  r>  r?  r"   default_priorityr0  rh   rE   r  r   r   r   r  r,  rA  r8  r6  r  r    s        ):Q>, ,# , ,%),:>,!$,)-d, , , ,\R)c R)d R) R) R) R) R) R)r8  r  c                   P    e Zd ZU ej        ej        dZeed<   de	e
         fdZdS )CPPAliasObjectr  r$  r  rz   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  rT  r   r  r  r  r  r$  r0  zError in C++ alias declaration. Requested 'noroot' but 'maxdepth' 1. When skipping the root declaration, need 'maxdepth' 0 for infinite or at least 2.rR  )rb  Nobject)r  splitr  r  r   rD  r  r  r  r  r  rU  rV  r  get_signaturesrz  r  rb  r  r  nested_parser  content_offsetr  r  )r5  r|  r  
signaturesr  contentnodes         r6  r  zCPPAliasObject.run"  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r8  N)r=  r>  r?  r   nonnegative_intr  r  r;   r  r   r   r  rA  r8  r6  r/  r/    s]         ./ K   
&T$Z & & & & & &r8  r/  c                   >    e Zd Zdedededededeeef         fdZdS )	CPPXRefRolerb  refnodehas_explicit_titletitletargetrz   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 )Nr^  rk  r!  r   r   rT  r  r  r  )	
attributesupdater  r,   subr@  r  r  rfind)r5  rb  r<  r=  r>  r?  dcolons          r6  process_linkzCPPXRefRole.process_linkL  s
   !!#/222! 	F '*=#e**EEE9&& & #%..*>*> #crc
t$$ %! 	/]]3''F RaRyCabb	T**R<<!&1*++.Ef}r8  N)	r=  r>  r?  r   r   rE   r@  r
   rG  rA  r8  r6  r;  r;  K  s_         0 7 X\ ),16sCx     r8  r;  c                   \     e Zd Zdeddf fdZdeee         ee         f         fdZ	 xZ
S )CPPExprRoleasCoderz   Nc                 l    t                                                       |r	d| _        d S d| _        d S )Nzcpp-exprz	cpp-texpr)r  r7  
class_type)r5  rJ  r  s     r6  r7  zCPPExprRole.__init__j  s9     	*(DOOO *DOOOr8  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 )Nrt  r  r  z!Unparseable C++ expression: %r
%srR  rh  )rs  r  r  rg  )rf  r  r|  r  r  r  r(   rU  rV  r   desc_inlinerL  rb  r  r  r  r  )r5  rf  r  r  r  r  r`  s          r6  r  zCPPExprRole.runs  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=  r>  r?  rE   r7  r
   r   r   r   r  ry  rz  s   @r6  rI  rI  i  sy        *t * * * * * * *U4:tN';;<        r8  rI  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d ed!dfd"Zd#ed ed$ej        d!dfd%Z d&e!d!dfd'Z"d(e#e         d)e$d!dfd*Z%d#ed+ed,e&d-ed.ed/e!d0e'd!e(e)e'         e)e         f         fd1Z*d#ed+ed,e&d-ed.ed/e!d0e'd!e)e'         fd2Z+d#ed+ed,e&d.ed/e!d0e'd!e#e(ee'f                  fd3Z,d!e-e(eeeeee.f                  fd4Z/d/e'd!efd5Z0dS )6	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.
    rh  r~  rM   r   rH  r  r   r  funcr  ru  rO   r]   r  zfunction parameterr  )
rM   r   r  r  r  rO   r]   r  r  r  r  r  rk   znamespace-pushznamespace-popr  T)
fix_parens)rJ  F)r!  rM   r   r   rQ  r  ru  r  rO   r]   r  r4  texprN)r  r  r  rz   c                 r   t           j        r[t          d|           t          d           t          | j        d                             d                     t          d           | j        d         }|                    |           t           j        r[t          d           t          | j        d                             d                     t          d           t          d|           t          | j        d	                                                   D ]\  }}||k    r| j        d	         |= d S )
Nz
clear_doc:z	before:r  rT  z	before endz	after:z
	after endzclear_doc end:r  )r0  rw  r  r  r:  r  r2  items)r5  r  r  r  nDocnames        r6  r  zCPPDomain.clear_doc  s*   ! 	",(((+$)M*//22333.!!!Y}-
W%%%! 	-*$)M*//22333-   "G,,,"49W#5#;#;#=#=>> 	- 	-ND(7""Ig&t,	- 	-r8  rb  r  c                     t           j        rOt          d|           t          | j        d                             d                     t          d|           d S d S )Nzprocess_doc:r  r   zprocess_doc end:)r0  rw  r  r  r:  )r5  rb  r  r  s       r6  process_doczCPPDomain.process_doc  sa    ! 	/.'***$)M*//22333$g.....	/ 	/r8  r~  c                 N    |j                             | j        j                   d S r4  )rB  rC  rb  r  )r5  r~  s     r6  process_field_xrefzCPPDomain.process_field_xref  s$     455555r8  rJ  	otherdatac                    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        r\t          d	           t          | j        d                             d                     t          d
           t          d           d S d S )Nzmerge_domaindata:z	self:r  rT  z		self endz	other:z
	other endr  z	result:z	result endzmerge_domaindata end)r0  rw  r  r  r:  rW  rb  rU  )r5  rJ  r[  ourNamesr  r  s         r6  merge_domaindatazCPPDomain.merge_domaindata  s   ! 	!%&&&)$)M*//22333,*)M*//22333-   	- ++Im,D,4dh	@ 	@ 	@9W%&w/5577 	- 	-MD'(""x''%,HTN! 	*+$)M*//22333.!!!()))))		* 	*r8  fromdocnamebuilderr  r?  r|  contnodec           	      	   # dv rdz  t          j                  }	 |                                \  }	}
nm# t          $ r`}dt          dt
          t          t          f         ffd} ||          \  }}t                              d||           Y d }~d	S d }~ww xY w	                    d
d           } j
        d         }|rc|                    |          }|sGt          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          |	t0                    sJ |	}|j        }|                    |ddd          }||j        <t          |          }|                    d          s|dk    rt/          |          d	S                     d          r
dd          |j        j        #dt<          f# 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  } |tO          j(        |           z  }tS          ||||*                                ||          |j        f}"|"S )$N)r!  rQ  r   r  r   rz   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!  rQ  rA  r  )r|  r  r  r(   )r   parser2r  rb  r|  r?  r  s      r6  findWarningz2CPPDomain._resolve_xref_inner.<locals>.findWarning  s    %<<C6MM!19$*6#2#;4825*> > >+--////& + + +!#2#;?******+ qy s   A 
A'A"A'"A'z&Unparseable C++ cross-reference: %r
%srR  r  ro  r  r  r   rT  T)r  r  r  r  rH  rj  r   r"  zstd::rV  cpp:r   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  )objtypesdeclTypr5  r  s    r6  	checkTypez0CPPDomain._resolve_xref_inner.<locals>.checkTypeW  s^    e||t--c22H +(**E###wwGHHH """r8  zcpp:%s targets a %s (%s).r  refexplicitFr  r!  rQ  z
operator()rq   rA  )+r|  r  r  r(   r{  r
   r@  rU  rV  r  r  rd  r  r:  ro  r  r  r  r  r  rK  r  rk  r   r2  r  rq  r1  r  r  rE   r  r_  r  r  r"  rB  add_function_parenthesesr  r   r  r:   r  )$r5  rb  r_  r`  r  r?  r|  ra  r  r  r)  r   re  r   r  r  r  r  r*  r  r(  r  r  r+  r   r  txtNamerk  r1  fullNestedNamedisplayNamer  r>  addParenr  rj  s$   ``  ```                            @r6  _resolve_xref_innerzCPPDomain._resolve_xref_inner  s    /!!dNF!&4
KKK	%7799C 	 	 	!y !U3	>-B ! ! ! ! ! ! ! ! !  KNNEArNNDa$(  * * *:::::%	&  $xx(8$??	Y}-
 	&#-#;#;I#F#FL *j&)))mY^444jooa(()))%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-*	#4 	# 	# 	# 	# 	# 	# 	# 	# 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*
AB%%B*c           	      D    |                      |||||||          d         S rJ  )rr  )r5  rb  r_  r`  r  r?  r|  ra  s           r6  resolve_xrefzCPPDomain.resolve_xref  s7     ''['3(.h@ @@AC 	Cr8  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:templateParamrf  )r#   suppress_loggingrr  role_for_objtype)	r5  rb  r_  r`  r?  r|  ra  retnoder  s	            r6  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c              #     K   | j         d         }|                                D ]}|j        
|j        sJ |                                }t          |                              d          }|                                                    d          }|j        j        }|j        }|j        	                                }|||||dfV  d S )Nr  r  rT  )
r  r  r1  r  r  r@  r  r_  r  r  )	r5  r  r/  ro  r  dispnamer  r  r  s	            r6  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r8  c                 N   |                     dd           }|d S |                     dd           }|t          |j                  dk    rd S | j        d         }|                    |          }|                                }d                    t          |          |g          S )Nrl  ro  r   r  r  )r  rK  r  rd  r  r  r@  )r5  r|  r?  r  r  r  
parentNames          r6  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3r8  )1r=  r>  r?  r  r  r  r   r   object_typesr  r  r  r  r  r  r  r  r  r  r  r/  r   r;  rI  rolesr0  initial_datar@  r  r   r   r  rX  r   rZ  r   r   r^  r   r   r
   r	   rr  rt  ry  r   rh   r|  r  rA  r8  r6  rP  rP    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
- - - - - -&// /# /#n/15/ / / /6 6 6 6 6 6*c *t * * * * *0S'7 Sc ST[ S!$S.1S9ES&-S278I8TW=8X2YS S S SjC 0 Cs CW CC'*C2>CJQC"7+C C C C$4 3 QX !$,8DK"5g#67   EXeCc3S,H&IJ E E E E4G 4 4 4 4 4 4 4r8  rP  appc                    |                      t                     |                     dg d           |                     dg d           |                     dg d           |                     t                     |                     ddd           |                     ddd           d	 }|                     d
|           dddddS )Nr  rb  r  r  cpp_debug_lookupFr   cpp_debug_show_treec                     | j         j        t          _        | j         j        t          _        | j         j                            d           d S )NT)r  )r  r  r0  r  r  rw  r  sort)r  s    r6  	initStuffzsetup.<locals>.initStuff  s>    !j9!$!?
*///=====r8  zbuilder-initedbuiltin   T)rQ  env_versionparallel_read_safeparallel_write_safe)
add_domainrP  add_config_valueadd_post_transformr  connect)r  r  s     r6  setupr    s    NN92B>>>,b%888/U;;;>*** +UB777.r:::> > > KK ),,, "#	  r8  )r  r?  typingr   r   r   r   r   r   r	   r
   r   r   docutilsr   docutils.nodesr   r   r   r   docutils.parsers.rstr   sphinxr   sphinx.addnodesr   r   sphinx.applicationr   sphinx.buildersr   sphinx.directivesr   sphinx.domainsr   r   sphinx.environmentr   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/   r0   r1   r2   r3   r4   r5   r6   sphinx.util.docfieldsr7   r8   sphinx.util.docutilsr9   sphinx.util.nodesr:   sphinx.util.typingr;   	getLoggerr=  rU  r<   r@  r  Sr   rM  r  r  r  r  r  r  r  r  rK  r  r/  r  r(  r@  r  r  r  r  r  r{  r.  rC  rG  r  r  r  r  r  r  r  r  r  r  r  r   r3  rC  rO  rU  r_  rg  rm  rx  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r"  r)  r2  r  rG  rS  r[  rd  r  ry  r}  r  r  r  r  r  r  r  r  r  r  r  r  r;  rH  rp  r  r  r  r  r  r  r  r  r  r  r  r  r  r$  r+  r3  r9  rB  rK  r]  ri  r_  r  r  r  rv  r2  r  r  r  rE   r  r0  r|  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r/  r;  rI  rP  r  rA  r8  r6  <module>r     s"      				                              E E E E E E E E E E E E + + + + + +       8 8 8 8 8 8 8 8 % % % % % % # # # # # # / / / / / / * * * * * * * * / / / / / /               - - - - - - - - - - - - - - @ @ @ @ @ @      L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L 6 5 5 5 5 5 5 5 0 0 0 0 0 0 * * * * * * ) ) ) ) ) )		8	$	$GCLLzx BJ      RZ 89;? ?
=>>rz 	 	 	 BJ       	$ (RZ )    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2 2 d8C=#-.    
4L	5M'N%L(O!!!	4L#JOO	5M  SRR [ [ [  	  P P P P PI P P P	 	 	 	 	k 	 	 	KC KC KC KC KCG KC KC KC\S S S S S7 S S S:BC BC BC BC BCG BC BC BCR. . . . .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B? ? ? ? ?g ? ? ?$JY JY JY JY JYg JY JY JYZ? ? ? ? ?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~dA dA dA dA dA- dA dA dANDI DI DI DI DI DI DI DIT? ? ? ? ?= ? ? ?"; ; ; ; ;+ ; ; ;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P"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D&A &A &A &A &A#3 &A &A &AR4C 4C 4C 4C 4C. 4C 4C 4CnIU IU IU IU IU IU IU IU^1O 1O 1O 1O 1Ow 1O 1O 1Oh1; 1; 1; 1; 1;g 1; 1; 1;l%] %] %] %] %]7 %] %] %]PA A A A A A A A"eD eD eD eD eDW eD eD eDP    7   ) ) ) ) ) ) ) )       u->@W-W'X %49=   2] ] ] ] ] ] ] ]@BG BG BG BG BGz BG BG BGJ>7 7 7 7 7
aC aC aC aC aC!.1 aC aC aCH    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~	v $sCx.      r8  