
    }c%                       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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/m0Z0 ddl1m2Z2 ddl3m4Z4 ddl5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZH ddlImJZJmKZK ddlLmMZM ddlNmOZO ddlPmQZQ  e4jR        eS          ZT ed          ZU	  ejV        d          ZW ejV        dejX                  ZY ejV        d          ZZ ejV        d          Z[ ejV        d          Z\g dZ] ejV        d           Z^d!Z_g d"Z`d#d#d$d%d%d&d'd'd(d)d*
Zad+d,d-d.d/d0d1Zbi 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~Zci 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Zdi 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Zeddd	d
ddddddΐd
Zfd#d#ddddZgee	eh         ehf         eid<   ddgdtdgdHdgdJdgdFdgg dg dd^d`gd<d>gg dddggZjg dZkg dZldddddZm G d den          Zo G d de7          Zp G d dep          Zq G d  d!ep          Zr G d" d#ep          Zs G d$ d%ep          Zt G d& d'et          Zu G d( d)eu          Zv G d* d+eu          Zw G d, d-eu          Zx G d. d/eu          Zy G d0 d1eu          Zz G d2 d3eu          Z{ G d4 d5et          Z| G d6 d7et          Z} G d8 d9et          Z~ G d: d;et          Z G d< d=ep          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 dKet          Z G dL dMet          Z G dN dOet          Z G dP dQet          Z G dR dSet          Z G dT dUet          Z G dV dWet          Z G dX dYet          Z G dZ d[et          Z G d\ d]et          Z G d^ d_et          Z G d` daet          Z G db dcet          Z G dd deet          Z G df dgep          Z G dh diet          Z G dj dket          Z G dl dmet          Z G dn doep          Z G dp dqe          Z G dr dse          Z G dt due          Z G dv dwep          Z G dx dyep          Z G dz d{ep          Z G d| d}e          Z G d~ de          Z G d de          Z G d de          Z G d dep          Z G d dep          Z G d dep          Z G d dep          Z G d dep          Z G d dep          Z G d dep          Z G d dep          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 det          Z G d de8          Z G d dep          Z G d dep          Z G d dep          Z G d dep          Z G d dep          Z G d dep          Z G d dep          Z G d dep          Z G d dep          Z G d dep          Z G d dep          Z G d dep          Z G d de          Z G d de          Z G d de          Z G dĄ de          Z G dƄ dep          Z G dȄ dep          Z G dʄ dep          Z G d̄ dep          Z G d΄ dep          Z G dЄ dep          Z G d҄ dep          Z G dԄ dզ          Z G dք dצ          Z G d؄ d٦          Z G dڄ de9          Zϐdesf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 deM          Z G d deM          Z G d deM          Z G d dej                  Z G d de0          Z G d de!          Z G d de.          Z G d de-          Z G d  de#          Zdedeehef         fdZdS (  zThe C++ language domain.    N)AnyCallableDict	GeneratorIteratorListOptionalTupleTypeVarUnioncast)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)
rJ   signed charunsigned charri   
signed intunsigned intrj   signed longunsigned longrF   ssosisiosvm)zstd::stringzstd::ostreamzstd::istreamzstd::iostreamzstd::vectorzstd::maprm   znew-operatornew[]znew-array-operatorrY   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   rF   rJ   r   ar   hr   wrM   DirL   DsrK   Dur|   sz	short intzsigned shortzsigned short intzunsigned shorttzunsigned short intri   r}   r   r   jr   rj   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orc   fr[   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 doublerC   Dadecltype(auto)Dczstd::nullptr_tDnnwnadldacorO   plmimldvrmanrD   rs   rE   eor   aSpLmImLdVrMaNrA   oRrt   eOr   lsrslSrSeqnerp   ltgtlege<=>ntro   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   ro   r   rO   )Nu8ur   r   _id_char_from_prefix)r   r   rp   )r  r   r   r   r   )r   r   r   r  )r   r   r   r   r   r   r   r   r   rA   r   r   r   rt   dcscccrc)r\   r   rU   ry   c                   "    e Zd Zd	dZdefdZdS )
_DuplicateSymbolErrorsymbolSymboldeclarationASTDeclarationr{   Nc                 2    |sJ |sJ || _         || _        d S N)r0  r2  )selfr0  r2  s      2lib/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   )r0  dumpr6  s    r7  __str__z_DuplicateSymbolError.__str__E  s    9DK<L<LQ<O<OOOr9  )r0  r1  r2  r3  r{   N)__name__
__module____qualname__r8  strr=   r9  r7  r/  r/  >  sJ        ' ' ' 'P P P P P P Pr9  r/  c                       e Zd ZdS )ASTBaseNr>  r?  r@  rB  r9  r7  rD  rD  I          Dr9  rD  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
identifierr{   Nc                 F    |J t          |          dk    sJ || _        d S Nr   )lenrI  r6  rI  s     r7  r8  zASTIdentifier.__init__Q  s0    %%%:!####$r9  c                 $    | j         d         dk    S )Nr   @rI  r<  s    r7  is_anonzASTIdentifier.is_anonV  s    q!S((r9  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)rQ  r*   rI  rL  rA  r6  rR  s     r7  get_idzASTIdentifier.get_idY  s    <<>> 	!gk 	!.. a< 	'(* 's&?e# 		C4_Q3& 	C4||~~ C C$8$81$<doabb>Q#RRR3t//004?BBr9  c                     | j         S r5  rP  r<  s    r7  r=  zASTIdentifier.__str__n  
    r9  c                 <    |                                  rdn| j        S )N[anonymous])rQ  rI  r<  s    r7  get_display_stringz ASTIdentifier.get_display_stringq  s     $C}}DOCr9  signodemodeenvr   prefixtemplateArgsr0  r1  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   cpprI  	refdomainreftype	reftargetmodname	classnamecpp:parent_key
lastIsName
noneIsNameparamclassesz	sig-paramudlr   
operator""Unknown description mode: %s)r7   rQ  r   desc_sig_namerI  r   get_lookup_key	desc_nameappendrL  	Exception)r6  ra  rb  rc  rd  re  r0  node
targetTextpnodenameNodes              r7  describe_signaturez ASTIdentifier.describe_signaturet  s	   %%%<<>> 	L)}===DD)$/4?KKD:  	C$/1L@J)"2>4>48: : :E '-&;&;&=&=E"#TMEuGGG\! 	C)++HHxGGG\! 	CtOGGGW_ 	CO"";///tOGGGU] 	Cv;;!####|$$))))||~~%%%%7J)"2>4>48: : :E '-&;&;&=&=E"#TMEuGGG:TABBBr9  )r>  r?  r@  rA  r8  rF   rQ  ri   r[  r=  r`  r   r  rB  r9  r7  rH  rH  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r9  rH  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ASTOperatorre  ASTTemplateArgsr{   Nc                 "    || _         || _        d S r5  r  re  )r6  r  re  s      r7  r8  zASTNestedNameElement.__init__  s    "(r9  c                     dS NFrB  r<  s    r7  is_operatorz ASTNestedNameElement.is_operator      ur9  rR  c                     | j                             |          }| j        r|| j                            |          z  }|S r5  )r  r[  re  r6  rR  ress      r7  r[  zASTNestedNameElement.get_id  sB    n##G,, 	54$++G444C
r9  	transformc                 Z     || j                   }| j        r| || j                  z  }|S r5  r  r6  r  r  s      r7  
_stringifyzASTNestedNameElement._stringify  s:    i'' 	099T.///C
r9  ra  rb  rc  r   rd  r0  r1  c                     | j         t          | j                   nd}| j                            ||||||           | j         | j                             |d||           d S d S )Nr   rh  )re  rA  r  r  )r6  ra  rb  rc  rd  r0  tArgss          r7  r  z'ASTNestedNameElement.describe_signature  sz    *.*;OD%&&&R))'4feVTTT 	S00*c6RRRRR	S 	Sr9  )r>  r?  r@  r   rH  r8  rF   r  ri   rA  r[  r+   r  r   r  rB  r9  r7  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r9  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rootedr{   Nc                     t          |          dk    sJ || _        || _        t          | j                  t          | j                  k    sJ || _        d S rK  )rL  r  r  r  )r6  r  r  r  s       r7  r8  zASTNestedName.__init__  sT    5zzA~
"4:#dn"5"55555r9  c                     | S r5  rB  r<  s    r7  namezASTNestedName.name  s    r9  c                 `    d}| j         D ]#}|                                r|j        r|dz  }$|S Nr   rU  )r  r  re  )r6  countr   s      r7  num_templateszASTNestedName.num_templates  sD     	 	A}} ~ 
r9  r   rR  	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 )NrU  ::c              3   B   K   | ]}|                               V  d S r5  r[  ).0r   rR  s     r7  	<genexpr>z'ASTNestedName.get_id.<locals>.<genexpr>  /       G Gq'!2!2 G G G G G Gr9  r   NEr   )rA  _id_shorthands_v1joinr  rL  r{  r[  )r6  rR  r  ttr  r   s    `    r7  r[  zASTNestedName.get_id  s#   a< 	HTB&& H(,,yy G G G GDJ G G GGGGtz??Q 	#i..1"4 	JJsOOO

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

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

99Q<<((((yy~~r9  ra  rb  rc  r   r0  r1  c                    t          |           |dk    r| j        r
J d            t	          t          | j                            D ]O}|dk    r
J d            | j        |         }| j        |         r
J d            |                    |||d	|           Pd 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            )Nrr  FzCan this happen?r  r   z::blahr    r   rs  rU  )rh  rq  markNamerq  Trh  rw  )r7   r  r   Textr  rL  r  r  r  rA  r2  templatePrefixr   desc_addnamedesc_sig_punctuationdesc_sig_keyworddesc_sig_spacere  r|  )r6  ra  rb  rc  r0  r   r   templateParamsiTemplateParamstemplateParamsPrefixrd  firstr  destnner   txt_nnes                    r7  r  z ASTNestedName.describe_signature  s8   %%%< J	C{ ,000003tz??++ 	E 	E6 44"4444JqM>!$ /4"4444 $$WdCVDDDD	E 	E W_ <	C{--CII---tz??a''''~a((((JqM,,WgsBOOOOO;; 7	C
 )+N|# Q)))%4 Q%+%7%F%PNO#% FE'+|';KDJssOOE
 D|# /,..{ F$<' FCJJ!O F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= W' -Oc.>Q>Q,Q -,N?4S0T0TT,'1,**4+.0Dv0MvW W W'!|# R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R R :TABBBr9  )r{   r  )r   )r>  r?  r@  r   r  rF   r8  propertyr  ri   r  rA  r[  r+   r  r   r  rB  r9  r7  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r9  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 )ASTExpressionrR  r{   c                 :    t          t          |                     r5  NotImplementedErrorreprrZ  s     r7  r[  zASTExpression.get_idE      !$t**---r9  ra  rb  rc  r   r0  r1  Nc                 :    t          t          |                     r5  r  r6  ra  rb  rc  r0  s        r7  r  z ASTExpression.describe_signatureH      !$t**---r9  r>  r?  r@  ri   rA  r[  r   r  rB  r9  r7  r  r  D  p        .c .c . . . ..+ .S . 2.<D.IM. . . . . .r9  r  c                       e Zd ZdS )
ASTLiteralNrE  rB  r9  r7  r  r  P  rF  r9  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  r{   c                     dS Nrq   rB  r6  r  s     r7  r  zASTPointerLiteral._stringifyU  s    yr9  rR  c                     dS )NLDnErB  rZ  s     r7  r[  zASTPointerLiteral.get_idX      vr9  ra  rb  rc  r   r0  r1  Nc                 6    |t          j        dd          z  }d S r  r   r  r  s        r7  r  z$ASTPointerLiteral.describe_signature[  s    8,Y	BBBr9  
r>  r?  r@  r+   rA  r  ri   r[  r   r  rB  r9  r7  r  r  T  s        $6 3    c c    C+ CS C 2C<DCIMC C C C C Cr9  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valuer{   Nc                     || _         d S r5  r  r6  r  s     r7  r8  zASTBooleanLiteral.__init__a      


r9  r  c                     | j         rdS dS )Nr   rb   r  r  s     r7  r  zASTBooleanLiteral._stringifyd  s    : 	67r9  rR  c                     | j         rdS dS )NL1EL0Er  rZ  s     r7  r[  zASTBooleanLiteral.get_idj  s    : 	55r9  ra  rb  rc  r   r0  r1  c                 j    |t          j        t          |           t          |                     z  }d S r5  )r   r  rA  r  s        r7  r  z$ASTBooleanLiteral.describe_signaturep  s)    8,SYYD		BBBr9  )r>  r?  r@  rF   r8  r+   rA  r  ri   r[  r   r  rB  r9  r7  r  r  `  s        d t    $6 3    c c    C+ CS C 2C<DCIMC C C C C Cr9  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datar{   Nc                     || _         d S r5  r  r6  r  s     r7  r8  zASTNumberLiteral.__init__v      			r9  r  c                     | j         S r5  r  r  s     r7  r  zASTNumberLiteral._stringifyy  
    yr9  rR  c                 >    d| j                             dd          z  S )NzL%sE'r   )r  replacerZ  s     r7  r[  zASTNumberLiteral.get_id|  s    	))#r2222r9  ra  rb  rc  r   r0  r1  c                 J    |t          j        | j        | j                  z  }d S r5  )r   desc_sig_literal_numberr  r  s        r7  r  z#ASTNumberLiteral.describe_signature  !    83DItyIIIr9  r>  r?  r@  rA  r8  r+   r  ri   r[  r   r  rB  r9  r7  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r9  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  r{   Nc                     || _         d S r5  r  r  s     r7  r8  zASTStringLiteral.__init__  r  r9  r  c                     | j         S r5  r  r  s     r7  r  zASTStringLiteral._stringify  r  r9  rR  c                 6    dt          | j                  dz
  z  S )NzLA%d_KcE   )rL  r  rZ  s     r7  r[  zASTStringLiteral.get_id  s    S^^a/00r9  ra  rb  rc  r   r0  r1  c                 J    |t          j        | j        | j                  z  }d S r5  )r   desc_sig_literal_stringr  r  s        r7  r  z#ASTStringLiteral.describe_signature  r  r9  r  rB  r9  r7  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r9  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 )ASTCharLiteralrd  r  r{   Nc                    || _         || _        |t          v sJ t          |         | _        |                                                    d          }t          |          dk    rt          |          | _        d S t          |          )Nzunicode-escaperU  )
rd  r  r)  typeencodedecoderL  ordr  r,   )r6  rd  r  decodeds       r7  r8  zASTCharLiteral.__init__  s}    	-----(0	++--&&'788w<<1 	@WDJJJ6w???r9  r  c                 T    | j         d| j        z   dz   S | j         dz   | j        z   dz   S Nr  )rd  r  r  s     r7  r  zASTCharLiteral._stringify  s6    ; 	7?S((;$ty0366r9  rR  c                 :    | j         t          | j                  z   S r5  )r  rA  r  rZ  s     r7  r[  zASTCharLiteral.get_id  s    y3tz??**r9  ra  rb  rc  r   r0  r1  c                     | j         "|t          j        | j         | j                   z  }d| j        z   dz   }|t          j        ||          z  }d S r	  )rd  r   r  r  desc_sig_literal_char)r6  ra  rb  rc  r0  txts         r7  r  z!ASTCharLiteral.describe_signature  sS    ; 	Kx0dkJJJGDIo#81#s;;;r9  r  rB  r9  r7  r  r    s        	@s 	@# 	@$ 	@ 	@ 	@ 	@7$6 73 7 7 7 7+c +c + + + +<+ <S < 2<<D<IM< < < < < <r9  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 r5  r  r  )r6  r  r  s      r7  r8  zASTUserDefinedLiteral.__init__  s    


r9  r  r{   c                 D     || j                    || j                  z   S r5  r  r  s     r7  r  z ASTUserDefinedLiteral._stringify  s%    y&&4:)>)>>>r9  rR  c                     d                     | j                            |          | j                            |                    S )NzclL_Zli{}E{}E)formatr  r[  r  rZ  s     r7  r[  zASTUserDefinedLiteral.get_id  s9    %%dj&7&7&@&@$,BUBUV]B^B^___r9  ra  rb  rc  r   r0  r1  Nc                 ~    | j                             ||||           | j                            |d|dd|           d S )Nru  r   )r  r  r  r  s        r7  r  z(ASTUserDefinedLiteral.describe_signature  sD    ''sFCCC
%%guc2r6JJJJJr9  )r>  r?  r@  r  rH  r8  r+   rA  r  ri   r[  r   r  rB  r9  r7  r  r    s        
 =    ?$6 ?3 ? ? ? ?`c `c ` ` ` `K+ KS K 2K<DKIMK K K K K Kr9  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  r{   c                     dS Nr   rB  r  s     r7  r  zASTThisLiteral._stringify  r  r9  rR  c                     dS )NfpTrB  rZ  s     r7  r[  zASTThisLiteral.get_id  r  r9  ra  rb  rc  r   r0  r1  Nc                 6    |t          j        dd          z  }d S r  r  r  s        r7  r  z!ASTThisLiteral.describe_signature  s    8,VV<<<r9  r  rB  r9  r7  r  r    s        $6 3    c c    =+ =S = 2=<D=IM= = = = = =r9  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	rightExprr{   Nc                 <    ||J || _         || _        || _        d S r5  r!  r"  r#  r6  r!  r"  r#  s       r7  r8  zASTFoldExpr.__init__  s,    <y<<< "r9  r  c                 >   dg}| j         rg|                     || j                              |                    d           |                    | j                   |                    d           |                    d           | j        rg|                    d           |                    | j                   |                    d           |                     || j                             |                    d           d                    |          S )N(r  ...)r   )r!  r{  r"  r#  r  r  s      r7  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||r9  rR  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 )NrT  flfrfLr   )rA  r!  r{  r#  _id_operator_v2r"  r[  r  r  s      r7  r[  zASTFoldExpr.get_id  s   !|a< 	t99= 	JJt^ 	JJt JJt

?47+,,,= 	6JJt}++G44555> 	7JJt~,,W55666wws||r9  ra  rb  rc  r   r0  r1  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        r7  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:::r9  )r>  r?  r@  r  rA  r8  r+   r  ri   r[  r   r  rB  r9  r7  r   r     s        # ##%2#7;# # # #$6 3     c c    *;+ ;S ; 2;<D;IM; ; ; ; ; ;r9  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 r5  r4  r6  r4  s     r7  r8  zASTParenExpr.__init__  r  r9  r  r{   c                 .    d || j                   z   dz   S Nr(  r*  r6  r  s     r7  r  zASTParenExpr._stringify      YYty)))C//r9  rR  c                 6    | j                             |          S r5  r4  r[  rZ  s     r7  r[  zASTParenExpr.get_id      y(((r9  ra  rb  rc  r   r0  r1  Nc                     |t          j        dd          z  }| j                            ||||           |t          j        dd          z  }d S r9  r   r  r4  r  r  s        r7  r  zASTParenExpr.describe_signature  P    80c:::	$$WdC@@@80c:::r9  r>  r?  r@  r  r8  r+   rA  r  ri   r[  r   r  rB  r9  r7  r3  r3    s        ]    0$6 03 0 0 0 0)c )c ) ) ) );+ ;S ; 2;<D;IM; ; ; ; ; ;r9  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 r5  r  r6  r  s     r7  r8  zASTIdExpression.__init__#  s    			r9  r  r{   c                 "     || j                   S r5  rE  r  s     r7  r  zASTIdExpression._stringify'      y###r9  rR  c                 6    | j                             |          S r5  r  r[  rZ  s     r7  r[  zASTIdExpression.get_id*  r=  r9  ra  rb  rc  r   r0  r1  Nc                 @    | j                             ||||           d S r5  )r  r  r  s        r7  r  z"ASTIdExpression.describe_signature-  $    	$$WdC@@@@@r9  r>  r?  r@  r  r8  r+   rA  r  ri   r[  r   r  rB  r9  r7  rC  rC  "  s        ]    $$6 $3 $ $ $ $)c )c ) ) ) )A+ AS A 2A<DAIMA A A A A Ar9  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idPrefixrR  r{   c                 :    t          t          |                     r5  r  r6  rP  rR  s      r7  r[  zASTPostfixOp.get_id6  r  r9  ra  rb  rc  r   r0  r1  Nc                 :    t          t          |                     r5  r  r  s        r7  r  zASTPostfixOp.describe_signature9  r  r9  )r>  r?  r@  rA  ri   r[  r   r  rB  r9  r7  rO  rO  5  sw        .s .S .S . . . ..+ .S . 2.<D.IM. . . . . .r9  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 r5  r6  r7  s     r7  r8  zASTPostfixArray.__init__?  r  r9  r  r{   c                 .    d || j                   z   dz   S N[]r6  r  s     r7  r  zASTPostfixArray._stringifyB  r:  r9  rP  rR  c                 B    d|z   | j                             |          z   S )Nr  r<  rR  s      r7  r[  zASTPostfixArray.get_idE  !    h!1!1'!:!:::r9  ra  rb  rc  r   r0  r1  Nc                     |t          j        dd          z  }| j                            ||||           |t          j        dd          z  }d S rX  r?  r  s        r7  r  z"ASTPostfixArray.describe_signatureH  r@  r9  rA  rB  r9  r7  rU  rU  >  s        ]    0$6 03 0 0 0 0;s ;S ;S ; ; ; ;;+ ;S ; 2;<D;IM; ; ; ; ; ;r9  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 r5  rE  rF  s     r7  r8  zASTPostfixMember.__init__P  r  r9  r  r{   c                 (    d || j                   z   S )N.rE  r  s     r7  r  zASTPostfixMember._stringifyS  s    YYty))))r9  rP  rR  c                 B    d|z   | j                             |          z   S )NdtrJ  rR  s      r7  r[  zASTPostfixMember.get_idV  r\  r9  ra  rb  rc  r   r0  r1  Nc                 p    |t          j        dd          z  }| j                            |d||           d S )Nrb  rr  )r   r  r  r  r  s        r7  r  z#ASTPostfixMember.describe_signatureY  s;    80c:::	$$WlCHHHHHr9  rM  rB  r9  r7  r_  r_  O  s        ]    *$6 *3 * * * *;s ;S ;S ; ; ; ;I+ IS I 2I<DIIMI I I I I Ir9  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 r5  rE  rF  s     r7  r8  z"ASTPostfixMemberOfPointer.__init__`  r  r9  r  r{   c                 (    d || j                   z   S )Nr   rE  r  s     r7  r  z$ASTPostfixMemberOfPointer._stringifyc  s    ii	****r9  rP  rR  c                 B    d|z   | j                             |          z   S )Nr  rJ  rR  s      r7  r[  z ASTPostfixMemberOfPointer.get_idf  r\  r9  ra  rb  rc  r   r0  r1  Nc                 p    |t          j        dd          z  }| j                            |d||           d S )Nr   rr  )r   r1  r  r  r  s        r7  r  z,ASTPostfixMemberOfPointer.describe_signaturei  s;    8-dD999	$$WlCHHHHHr9  rM  rB  r9  r7  rg  rg  _  s        ]    +$6 +3 + + + +;s ;S ;S ; ; ; ;I+ IS I 2I<DIIMI I I I I Ir9  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  r{   c                     dS Nr   rB  r  s     r7  r  zASTPostfixInc._stringifyp      tr9  rP  rR  c                     d|z   S )Nr  rB  rR  s      r7  r[  zASTPostfixInc.get_ids      hr9  ra  rb  rc  r   r0  r1  Nc                 6    |t          j        dd          z  }d S ro  r   r1  r  s        r7  r  z ASTPostfixInc.describe_signaturev      8-dD999r9  r  rB  r9  r7  rm  rm  o          $6 3    s S S    :+ :S : 2:<D:IM: : : : : :r9  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  r{   c                     dS Nr   rB  r  s     r7  r  zASTPostfixDec._stringify|  rp  r9  rP  rR  c                     d|z   S )Nr  rB  rR  s      r7  r[  zASTPostfixDec.get_id  rr  r9  ra  rb  rc  r   r0  r1  Nc                 6    |t          j        dd          z  }d S rz  rt  r  s        r7  r  z ASTPostfixDec.describe_signature  ru  r9  r  rB  r9  r7  rx  rx  {  rv  r9  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ASTBracedInitListr{   Nc                     || _         d S r5  r  )r6  r  s     r7  r8  zASTPostfixCallExpr.__init__      r9  r  c                 "     || j                   S r5  r  r  s     r7  r  zASTPostfixCallExpr._stringify  s    y"""r9  rP  rR  c                     d|g}| j         j        D ]*}|                    |                    |                     +|                    d           d                    |          S )Nr  r  r   )r  exprsr{  r[  r  )r6  rP  rR  r  r   s        r7  r[  zASTPostfixCallExpr.get_id  s_    X 	* 	*AJJqxx(())))

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

3

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

4

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

3wws||r9  rR  c                     t           | j                 | j                            |          z   | j                            |          z   S r5  )r  r   r  r[  r4  rZ  s     r7  r[  zASTExplicitCast.get_id  s?    !$),(()	  ))* 	+r9  ra  rb  rc  r   r0  r1  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        r7  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:::r9  r>  r?  r@  rA  r  r8  r+   r  ri   r[  r   r  rB  r9  r7  r  r    s        S y     $6 3    +c +c + + + +
;+ ;S ; 2;<D;IM; ; ; ; ; ;r9  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 r5  )r  r  )r6  r  r  s      r7  r8  zASTTypeId.__init__  s    $r9  r  r{   c                 .    d || j                   z   dz   S )Nztypeid(r*  )r  r  s     r7  r  zASTTypeId._stringify  s    99T_555;;r9  rR  c                 R    | j         rdnd}|| j                            |          z   S )Ntite)r  r  r[  )r6  rR  rd  s      r7  r[  zASTTypeId.get_id  s-    .$..w7777r9  ra  rb  rc  r   r0  r1  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        r7  r  zASTTypeId.describe_signature  sg    8,Xx@@@80c:::**7D#vFFF80c:::r9  )r>  r?  r@  r   r  rF   r8  r+   rA  r  ri   r[  r   r  rB  r9  r7  r  r    s        5M)A#B D    <$6 <3 < < < <8c 8c 8 8 8 8;+ ;S ; 2;<D;IM; ; ; ; ; ;r9  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 r5  r"  r4  )r6  r"  r4  s      r7  r8  zASTUnaryOpExpr.__init__  s    			r9  r  r{   c                     | j         d         dv r| j         dz    || j                  z   S | j          || j                  z   S )Nr   cnr  r  r  s     r7  r  zASTUnaryOpExpr._stringify  sK    71: 	27S=99TY#7#7777YYty1111r9  rR  c                 \    t           | j                 | j                            |          z   S r5  )_id_operator_unary_v2r"  r4  r[  rZ  s     r7  r[  zASTUnaryOpExpr.get_id  s$    $TW-	0@0@0I0IIIr9  ra  rb  rc  r   r0  r1  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        r7  r  z!ASTUnaryOpExpr.describe_signature  s    71: 	Dx0$'BBBGx.000GGx1$'47CCCG	$$WdC@@@@@r9  r  rB  r9  r7  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r9  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 )ASTSizeofParamPackrI  c                     || _         d S r5  rP  rM  s     r7  r8  zASTSizeofParamPack.__init__      $r9  r  r{   c                 .    d || j                   z   dz   S )Nz
sizeof...(r*  rP  r  s     r7  r  zASTSizeofParamPack._stringify  s    ii8883>>r9  rR  c                 <    d| j                             |          z   S )NsZ)rI  r[  rZ  s     r7  r[  zASTSizeofParamPack.get_id  s    do,,W5555r9  ra  rb  rc  r   r0  r1  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(  rh  r   )r0  rd  re  r*  )r   r  r  rI  r  r  s        r7  r  z%ASTSizeofParamPack.describe_signature  s    8,Xx@@@80>>>80c:::**7J28RT 	+ 	V 	V 	V80c:::r9  )r>  r?  r@  rH  r8  r+   rA  r  ri   r[  r   r  rB  r9  r7  r  r    s        %= % % % %?$6 ?3 ? ? ? ?6c 6c 6 6 6 6;+ ;S ; 2;<D;IM; ; ; ; ; ;r9  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 r5  r  r6  r  s     r7  r8  zASTSizeofType.__init__  r  r9  r  r{   c                 .    d || j                   z   dz   S )Nzsizeof(r*  r  r  s     r7  r  zASTSizeofType._stringify  s    99TX...44r9  rR  c                 <    d| j                             |          z   S )Nstr  r[  rZ  s     r7  r[  zASTSizeofType.get_id      dhoog....r9  ra  rb  rc  r   r0  r1  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        r7  r  z ASTSizeofType.describe_signature  sg    8,Xx@@@80c:::##GT3???80c:::r9  r  r  r>  r?  r@  r8  r+   rA  r  ri   r[  r   r  rB  r9  r7  r  r    s           5$6 53 5 5 5 5/c /c / / / /;+ ;S ; 2;<D;IM; ; ; ; ; ;r9  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 r5  r6  r7  s     r7  r8  zASTSizeofExpr.__init__(  r  r9  r  r{   c                 (    d || j                   z   S )Nzsizeof r6  r  s     r7  r  zASTSizeofExpr._stringify+  s    99TY////r9  rR  c                 <    d| j                             |          z   S )Nszr<  rZ  s     r7  r[  zASTSizeofExpr.get_id.      di&&w////r9  ra  rb  rc  r   r0  r1  Nc                     |t          j        dd          z  }|t          j                    z  }| j                            ||||           d S )Nr~   r   r  r  r4  r  r  s        r7  r  z ASTSizeofExpr.describe_signature1  sN    8,Xx@@@8*,,,	$$WdC@@@@@r9  rA  rB  r9  r7  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r9  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 r5  r  r  s     r7  r8  zASTAlignofExpr.__init__9  r  r9  r  r{   c                 .    d || j                   z   dz   S )Nzalignof(r*  r  r  s     r7  r  zASTAlignofExpr._stringify<  s    IIdh///#55r9  rR  c                 <    d| j                             |          z   S )Natr  rZ  s     r7  r[  zASTAlignofExpr.get_id?  r  r9  ra  rb  rc  r   r0  r1  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        r7  r  z!ASTAlignofExpr.describe_signatureB  sg    8,Y	BBB80c:::##GT3???80c:::r9  r  r  rB  r9  r7  r  r  8  s           6$6 63 6 6 6 6/c /c / / / /;+ ;S ; 2;<D;IM; ; ; ; ; ;r9  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 r5  r6  r7  s     r7  r8  zASTNoexceptExpr.__init__K  r  r9  r  r{   c                 .    d || j                   z   dz   S )N	noexcept(r*  r6  r  s     r7  r  zASTNoexceptExpr._stringifyN      YYty111C77r9  rR  c                 <    d| j                             |          z   S )Nnxr<  rZ  s     r7  r[  zASTNoexceptExpr.get_idQ  r  r9  ra  rb  rc  r   r0  r1  Nc                     |t          j        dd          z  }|t          j        dd          z  }| j                            ||||           |t          j        dd          z  }d S )Nrn   r(  r*  r   r  r  r4  r  r  s        r7  r  z"ASTNoexceptExpr.describe_signatureT  g    8,ZDDD80c:::	$$WdC@@@80c:::r9  rA  rB  r9  r7  r  r  J  s        ]    8$6 83 8 8 8 80c 0c 0 0 0 0;+ ;S ; 2;<D;IM; ; ; ; ; ;r9  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  r{   Nc                 >    || _         || _        || _        || _        d S r5  )r  r  r  r  )r6  r  r  r  r  s        r7  r8  zASTNewExpr.__init__]  s#    & r9  r  c                 @   g }| j         r|                    d           |                    d           | j        r$|                     || j                             nJ | j        #|                     || j                             d                    |          S )Nr  znew Fr   )r  r{  r  r  r  r  r  s      r7  r  zASTNewExpr._stringifyd  s    ; 	JJt

6 	JJyy**++++L= 	1JJyy//000wws||r9  rR  c                 J   dg}|                     d           |                     | j                            |                     | j        .|                     | j                            |                     n|                     d           d                    |          S )Nr   r   r  r   )r{  r  r[  r  r  r  s      r7  r[  zASTNewExpr.get_idr  s    f

3

48??7++,,,= 	JJt}++G445555JJsOOOwws||r9  ra  rb  rc  r   r0  r1  c                 :   | j         r|t          j        dd          z  }|t          j        dd          z  }|t          j                    z  }| j        r| j                            ||||           nJ | j        | j                            ||||           d S d S )Nr  rm   )	r  r   r  r  r  r  r  r  r  r  s        r7  r  zASTNewExpr.describe_signature~  s    ; 	Ax4T4@@@G8,UE:::8*,,, 	H''sFCCCCL= 	IM,,WdCHHHHH	I 	Ir9  )r>  r?  r@  rF   r   r8  r+   rA  r  ri   r[  r   r  rB  r9  r7  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r9  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 r5  )r  r  r4  )r6  r  r  r4  s       r7  r8  zASTDeleteExpr.__init__  s    
			r9  r  r{   c                    g }| j         r|                    d           |                    d           | j        r|                    d           |                     || j                             d                    |          S )Nr  zdelete z[] r   )r  r{  r  r4  r  r  s      r7  r  zASTDeleteExpr._stringify  s    ; 	JJt

9: 	JJu

99TY''(((wws||r9  rR  c                 T    | j         rd}nd}|| j                            |          z   S )Nr   r   )r  r4  r[  r6  rR  r  s      r7  r[  zASTDeleteExpr.get_id  s3    : 	BBBDI$$W----r9  ra  rb  rc  r   r0  r1  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  rY   r   )r  r   r  r  r  r  r4  r  r  s        r7  r  z ASTDeleteExpr.describe_signature  s    ; 	Ax4T4@@@G8,Xx@@@8*,,,: 	1x4T4@@@Gx.000G	$$WdC@@@@@r9  )r>  r?  r@  rF   r  r8  r+   rA  r  ri   r[  r   r  rB  r9  r7  r  r    s        t D     
$6 3    .c .c . . . .	A+ 	AS 	A 2	A<D	AIM	A 	A 	A 	A 	A 	Ar9  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 r5  )r  r4  )r6  r  r4  s      r7  r8  zASTCastExpr.__init__  s    			r9  r  r{   c                     dg}|                      || j                             |                     d           |                      || j                             d                    |          S Nr(  r*  r   )r{  r  r4  r  r  s      r7  r  zASTCastExpr._stringify  sd    e

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

3

99TY''(((wws||r9  rR  c                 r    d| j                             |          z   | j                            |          z   S )Ncv)r  r[  r4  rZ  s     r7  r[  zASTCastExpr.get_id  s0    dhoog...1A1A'1J1JJJr9  ra  rb  rc  r   r0  r1  Nc                     |t          j        dd          z  }| j                            ||||           |t          j        dd          z  }| j                            ||||           d S r9  )r   r  r  r  r4  r  s        r7  r  zASTCastExpr.describe_signature  sn    80c:::##GT3???80c:::	$$WdC@@@@@r9  rA  rB  r9  r7  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r9  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  )rL  r  r  )r6  r  r  s      r7  r8  zASTBinOpExpr.__init__  sK    5zzA~5zzSXX\))))
r9  r  r{   c                    g }|                      || j        d                              t          dt          | j                            D ]x}|                     d           |                     | j        |dz
                      |                     d           |                      || j        |                              yd                    |          S )Nr   rU  r  r   )r{  r  r  rL  r  r  )r6  r  r  r   s       r7  r  zASTBinOpExpr._stringify  s    

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

4:b>((11222wws||r9  ra  rb  rc  r   r0  r1  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   rU  r   z)
r  r  r  rL  r   r  r  r  r  r1  )r6  ra  rb  rc  r0  r   r"  s          r7  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r9  )r>  r?  r@  r   r  rA  r8  r+   r  ri   r[  r   r  rB  r9  r7  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r9  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 r5  )r  r  r  )r6  r  r  r  s       r7  r8  zASTConditionalExpr.__init__  s      r9  r  r{   c                 V   g }|                      || j                             |                     d           |                      || j                             |                     d           |                      || j                             d                    |          S )Nz ?  : r   )r{  r  r  r  r  r  s      r7  r  zASTConditionalExpr._stringify  s    

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

5

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

5

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

?3'(((

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

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

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

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

3

47

3

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

?47+,,,

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

4>((11222wws||r9  ra  rb  rc  r   r0  r1  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        r7  r  z$ASTAssignmentExpr.describe_signatureO  s    (($VDDD8*,,,twqz??c#hh& 	D3twqz??c#hh+F 	Dx0$'BBBGGx1$'47CCCG8*,,,))'4fEEEEEr9  )r>  r?  r@  r  rA  r   r  r8  r+   r  ri   r[  r   r  rB  r9  r7  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r9  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 rK  )rL  r  r6  r  s     r7  r8  zASTCommaExpr.__init__\  s#    5zzA~


r9  r  r{   c                 P    d                     fd| j        D                       S )Nr  c              3   .   K   | ]} |          V  d S r5  rB  r  s     r7  r  z*ASTCommaExpr._stringify.<locals>.<genexpr>a  s+      ::!1::::::r9  r  r  s    `r7  r  zASTCommaExpr._stringify`  s,    yy::::tz::::::r9  rR  c                    t           d         }g }t          t          | j                  dz
            D ]J}|                    |           |                    | j        |                             |                     K|                    | j        d                             |                     d                    |          S )Nr   rU  r  r   )r/  r  rL  r  r{  r[  r  )r6  rR  id_r  r   s        r7  r[  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||r9  ra  rb  rc  r   r0  r1  Nc                 8   | j         d                             ||||           t          dt          | j                             D ]S}|t	          j        dd          z  }|t	          j                    z  }| j         |                             ||||           Td S )Nr   rU  r   )r  r  r  rL  r   r  r  )r6  ra  rb  rc  r0  r   s         r7  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r9  )r>  r?  r@  r   r  r8  r+   rA  r  ri   r[  r   r  rB  r9  r7  r(  r(  [  s        d=1    ;$6 ;3 ; ; ; ;c c    I+ IS I 2I<DIIMI I I I I Ir9  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 r5  r6  r7  s     r7  r8  zASTFallbackExpr.__init__v  r  r9  r  r{   c                     | j         S r5  r6  r  s     r7  r  zASTFallbackExpr._stringifyy  r  r9  rR  c                 *    t          | j                  S r5  )rA  r4  rZ  s     r7  r[  zASTFallbackExpr.get_id|  s    49~~r9  ra  rb  rc  r   r0  r1  Nc                 J    |t          j        | j        | j                  z  }d S r5  )r   r  r4  r  s        r7  r  z"ASTFallbackExpr.describe_signature  s     5=DI666r9  r  rB  r9  r7  r1  r1  u  s        S    $6 3    c c    7+ 7S 7 27<D7IM7 7 7 7 7 7r9  r1  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  r{   c                     dS r  rB  r<  s    r7  rQ  zASTOperator.is_anon  r  r9  c                     dS NTrB  r<  s    r7  r  zASTOperator.is_operator  rp  r9  rR  c                     t                      r5  r  rZ  s     r7  r[  zASTOperator.get_id  s    !###r9  ra  	identnoderc  r   r0  r1  Nc                     t                      )zARender the prefix into signode, and the last part into identnode.r;  r6  ra  r<  rc  r0  s        r7  _describe_identifierz ASTOperator._describe_identifier  s     "###r9  rb  rd  re  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 )Nrq  rh  r   ri  rI  rj  rp  )r7   r   rz  r?  rA  r   ry  r   r  astextr  )r6  ra  rb  rc  rd  re  r0  mainNamer~  r  	containerr  addNames                r7  r  zASTOperator.describe_signature  sI    	 %%%< 	)++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GGGr9  )r>  r?  r@  rF   rQ  r  ri   rA  r[  r   r?  r  rB  r9  r7  r  r    s            T    $c $c $ $ $ $$K $K $"4$>F$KO$ $ $ $
+ S  2<?OR#+04     r9  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"  r{   Nc                     || _         d S r5  r"  )r6  r"  s     r7  r8  zASTOperatorBuildIn.__init__  s    r9  rR  c                     |dk    rt           }| j        |vrt                      nt          }| j        |vrt	          d| j        z            || j                 S )NrU  zBInternal error: Built-in operator "%s" can not be mapped to an id.)_id_operator_v1r"  r*   r/  r|  )r6  rR  idss      r7  r[  zASTOperatorBuildIn.get_id  st    a< 	"!Cwc! %"nn$% "C7# 	= 248G< = = =47|r9  r  c                 Z    | j         dv s| j         d         dv r
d| j         z   S d| j         z   S )Nrm   r   rY   r   r   abcnox	operator rr   rH  r  s     r7  r  zASTOperatorBuildIn._stringify  s>    7<< 	(
h@V 	(((''r9  ra  r<  rc  r   r0  r1  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 )Nrr   rM  r   rN  )r   r  r"  r  r1  r>  s        r7  r?  z'ASTOperatorBuildIn._describe_identifier  sm    8,ZDDD7<< 	1
h@V 	1x.000GX/AAA			r9  )r>  r?  r@  rA  r8  ri   r[  r+   r  r   r?  rB  r9  r7  rF  rF    s        3 4    
c 
c 
 
 
 
($6 (3 ( ( ( (BK BK B"4B>FBKOB B B B B Br9  rF  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 )ASTOperatorLiteralrI  r{   Nc                     || _         d S r5  rP  rM  s     r7  r8  zASTOperatorLiteral.__init__  r  r9  rR  c                 d    |dk    rt                      d| j                            |          z   S )NrU  li)r*   rI  r[  rZ  s     r7  r[  zASTOperatorLiteral.get_id  s3    a< 	:.. $/009999r9  r  c                 (    d || j                   z   S )Nrv  rP  r  s     r7  r  zASTOperatorLiteral._stringify  s    ii8888r9  ra  r<  rc  r   r0  r1  c                     |t          j        dd          z  }|t          j        dd          z  }| j                            |d|dd|           d S )Nrr   ""rh  r   )r   r  r  rI  r  r>  s        r7  r?  z'ASTOperatorLiteral._describe_identifier  sV    8,ZDDD83D$???**9j#r2vVVVVVr9  )r>  r?  r@  rH  r8  ri   rA  r[  r+   r  r   r?  rB  r9  r7  rR  rR    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r9  rR  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  r{   Nc                     || _         d S r5  )r  )r6  r  s     r7  r8  zASTOperatorType.__init__  r  r9  rR  c                     |dk    rd| j                             |          z  S d| j                             |          z   S )NrU  zcastto-%s-operatorr  )r  r[  rZ  s     r7  r[  zASTOperatorType.get_id  sD    a< 	4'$)*:*:7*C*CCC$)**73333r9  r  c                 L    d                     d || j                  g          S )Nr   rO  )r  r  r  s     r7  r  zASTOperatorType._stringify  s%    wwYYty%9%9:;;;r9  c                      t          |           S r5  rA  r<  s    r7  get_name_no_templatez$ASTOperatorType.get_name_no_template  s    4yyr9  ra  r<  rc  r   r0  r1  c                     |t          j        dd          z  }|t          j                    z  }| j                            |d||           d S )Nrr   rh  )r   r  r  r  r  r>  s        r7  r?  z$ASTOperatorType._describe_identifier  sN    8,ZDDD8*,,,	$$Y
CHHHHHr9  )r  r  r{   N)r>  r?  r@  r8  ri   rA  r[  r+   r  r`  r   r?  rB  r9  r7  rZ  rZ    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r9  rZ  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  r{   Nc                     || _         d S r5  r  r  s     r7  r8  zASTTemplateArgConstant.__init__  r  r9  r  c                 "     || j                   S r5  r  r  s     r7  r  z!ASTTemplateArgConstant._stringify      y$$$r9  rR  c                     |dk    r#t          |                               dd          S |dk    rdt          |           z   dz   S d| j                            |          z   dz   S )NrU  r  r   r  Xr  )rA  r  r  r[  rZ  s     r7  r[  zASTTemplateArgConstant.get_id  sk    a< 	/t99$$S#...a< 	)T?S((TZ&&w///#55r9  ra  rb  rc  r   r0  r1  c                 ^    t          |           | j                            ||||           d S r5  )r7   r  r  r  s        r7  r  z)ASTTemplateArgConstant.describe_signature  s2    %%%
%%gtS&AAAAAr9  rA  rB  r9  r7  rc  rc    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r9  rc  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  packExpansionr{   Nc                 *    |J || _         || _        d S r5  )rk  rl  )r6  rk  rl  s      r7  r8  zASTTemplateArgs.__init__  s#    	*r9  rR  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 )NrU  r  rb  c              3   B   K   | ]}|                               V  d S r5  r  r  r   rR  s     r7  r  z)ASTTemplateArgs.get_id.<locals>.<genexpr>   s/      EEa 1 1EEEEEEr9  r   Ir   r  Jr  )r{  r  rk  rL  r[  rl  )r6  rR  r  r   s    `  r7  r[  zASTTemplateArgs.get_id  sS   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||r9  r  c                 x    d                     fd| j        D                       }| j        r|dz  }d|z   dz   S )Nr  c              3   .   K   | ]} |          V  d S r5  rB  r  r   r  s     r7  r  z-ASTTemplateArgs._stringify.<locals>.<genexpr>2  s+      88		!888888r9  r)  r   r   )r  rk  rl  r  s    ` r7  r  zASTTemplateArgs._stringify1  sM    ii8888di88888 	5LCSy3r9  ra  rb  rc  r   r0  r1  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   Frh  r0  r)  r   )r7   r   r  rk  r  r  rl  )r6  ra  rb  rc  r0  r  r   s          r7  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:::r9  )r>  r?  r@  r   r   rc  rF   r8  ri   rA  r[  r+   r  r   r  rB  r9  r7  r  r    s        +T%	3I(I"JK + $+)-+ + + +c c    *$6 3    ;+ ;S ; 2;<D;IM; ; ; ; ; ;r9  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 )ASTTrailingTypeSpecrR  r{   c                 :    t          t          |                     r5  r  rZ  s     r7  r[  zASTTrailingTypeSpec.get_idK  r  r9  ra  rb  rc  r   r0  r1  Nc                 :    t          t          |                     r5  r  r  s        r7  r  z&ASTTrailingTypeSpec.describe_signatureN  r  r9  r  rB  r9  r7  ry  ry  J  r  r9  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  
canonNamesr{   Nc                     t          |          dk    sJ t          |          t          |          k    sJ ||f            || _        || _        d S rK  )rL  r  r~  )r6  r  r~  s      r7  r8  z'ASTTrailingTypeSpecFundamental.__init__T  sT    5zzQ5zzS__,AAuj.AAAA
$r9  r  c                 6    d                     | j                  S )Nr  )r  r  r  s     r7  r  z)ASTTrailingTypeSpecFundamental._stringify[  s    xx
###r9  rR  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 )NrU  r   r  zSemi-internal error: Fundamental type "%s" can not be mapped to an ID. Is it a true fundamental type? If not so, the parser should have rejected it.)r~  _id_fundamental_v1r{  r  _id_fundamental_v2r|  )r6  rR  r  r   r  s        r7  r[  z%ASTTrailingTypeSpecFundamental.get_id^  s    a< 	!C_ " "** "JJ1!45555JJqMMMM88C== hht''(( 	924789 9 9 "#&&r9  ra  rb  rc  r   r0  r1  c                     d}| j         D ]5}|s|t          j                    z  }nd}|t          j        ||          z  }6d S )NTF)r  r   r  desc_sig_keyword_type)r6  ra  rb  rc  r0  r  r   s          r7  r  z1ASTTrailingTypeSpecFundamental.describe_signaturep  s]     	< 	<A 82444x5a;;;GG	< 	<r9  )r>  r?  r@  r   rA  r8  r+   r  ri   r[  r   r  rB  r9  r7  r}  r}  S  s        %d3i %T#Y %4 % % % %$$6 $3 $ $ $ $'c 'c ' ' ' '$<+ <S < 2<<D<IM< < < < < <r9  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  r{   c                     dS )Nr   rB  r  s     r7  r  z*ASTTrailingTypeSpecDecltypeAuto._stringify|  s    r9  rR  c                 .    |dk    rt                      dS )NrU  r   )r*   rZ  s     r7  r[  z&ASTTrailingTypeSpecDecltypeAuto.get_id  s    a< 	!.. tr9  ra  rb  rc  r   r0  r1  Nc                     |t          j        dd          z  }|t          j        dd          z  }|t          j        dd          z  }|t          j        dd          z  }d S )NrW   r(  rC   r*  )r   r  r  r  s        r7  r  z2ASTTrailingTypeSpecDecltypeAuto.describe_signature  sb    8,ZDDD80c:::8,VV<<<80c:::r9  r  rB  r9  r7  r  r  {  s         $6  3        c c    
;+ ;S ; 2;<D;IM; ; ; ; ; ;r9  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 r5  r6  r7  s     r7  r8  z$ASTTrailingTypeSpecDecltype.__init__  r  r9  r  r{   c                 .    d || j                   z   dz   S )Nz	decltype(r*  r6  r  s     r7  r  z&ASTTrailingTypeSpecDecltype._stringify  r  r9  rR  c                 j    |dk    rt                      d| j                            |          z   dz   S )NrU  DTr  )r*   r4  r[  rZ  s     r7  r[  z"ASTTrailingTypeSpecDecltype.get_id  s8    a< 	!.. di&&w///#55r9  ra  rb  rc  r   r0  r1  Nc                     |t          j        dd          z  }|t          j        dd          z  }| j                            ||||           |t          j        dd          z  }d S )NrW   r(  r*  r  r  s        r7  r  z.ASTTrailingTypeSpecDecltype.describe_signature  r  r9  rA  rB  r9  r7  r  r    s        ]    8$6 83 8 8 8 86c 6c 6 6 6 6
;+ ;S ; 2;<D;IM; ; ; ; ; ;r9  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 )ASTTrailingTypeSpecNamerd  
nestedNameplaceholderTyper{   Nc                 0    || _         || _        || _        d S r5  )rd  r  r  )r6  rd  r  r  s       r7  r8  z ASTTrailingTypeSpecName.__init__  s    $.r9  c                     | j         S r5  r  r<  s    r7  r  zASTTrailingTypeSpecName.name  
    r9  rR  c                 6    | j                             |          S r5  )r  r[  rZ  s     r7  r[  zASTTrailingTypeSpecName.get_id  s    %%g...r9  r  c                 N   g }| j         r/|                    | j                    |                    d           |                     || j                             | j        /|                    d           |                    | j                   d                    |          S r$  )rd  r{  r  r  r  r  s      r7  r  z"ASTTrailingTypeSpecName._stringify  s    ; 	JJt{###JJsOOO

99T_--... 	-JJsOOOJJt+,,,wws||r9  ra  rb  rc  r   r0  r1  c                 <   | 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 J | j                    d S )Nrw  rC   r   rW   r(  r*  )rd  r   r  r  r  r  r  r  r  s        r7  r  z*ASTTrailingTypeSpecName.describe_signature  s.   ; 	1x0dkJJJGx.000G**7D#f*MMM 
	3x.000G#v- 384VVDDD%)99 384ZLLL88cBBB84VVDDD88cBBB2d2222
	3 
	3r9  )r>  r?  r@  rA  r  r	   r8  r  r  ri   r[  r+   r  r   r  rB  r9  r7  r  r    s        /s / /"*3-/48/ / / / m    X/c /c / / / /	$6 	3 	 	 	 	3+ 3S 3 23<D3IM3 3 3 3 3 3r9  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ellipsisr{   Nc                 "    || _         || _        d S r5  )r  r  )r6  r  r  s      r7  r8  zASTFunctionParameter.__init__  s      r9  rR  
objectTyper0  r1  c                     |r!|j         j                            |d          S | j        rdS | j                            |          S )NFprefixedr  )parentr2  r[  r  r  r6  rR  r  r0  s       r7  r[  zASTFunctionParameter.get_id  sL     	M=,33Ge3LLL= 	,38??7+++r9  r  c                 4    | j         rdS  || j                  S Nr)  )r  r  r  s     r7  r  zASTFunctionParameter._stringify  s#    = 	'59TX&&&r9  ra  rb  rc  r   c                     t          |           | j        r|t          j        dd          z  }d S | j                            ||||           d S )Nr)  rw  )r7   r  r   r  r  r  r  s        r7  r  z'ASTFunctionParameter.describe_signature  s[    %%%= 	Kx4UEBBBGGGH''s6'JJJJJr9  FNN)r>  r?  r@  r   rF   r8  ri   rA  r[  r+   r  r   r  rB  r9  r7  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r9  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 r5  r6  r7  s     r7  r8  zASTNoexceptSpec.__init__  r  r9  r  r{   c                 @    | j         rd || j                   z   dz   S dS )Nr  r*  rn   r6  r  s     r7  r  zASTNoexceptSpec._stringify  s-    9 	<49!5!55;;zr9  ra  rb  rc  r   r0  r1  Nc                     |t          j        dd          z  }| j        rO|t          j        dd          z  }| j                            |d||           |t          j        dd          z  }d S d S )Nrn   r(  rh  r*  r   r  r4  r  r  r  s        r7  r  z"ASTNoexceptSpec.describe_signature  {    8,ZDDD9 	?x4S#>>>GI((*c6JJJx4S#>>>GGG	? 	?r9  r>  r?  r@  r	   r  r8  r+   rA  r  r   r  rB  r9  r7  r  r    s        Xm4    $6 3    
?+ ?S ? 2?<D?IM? ? ? ? ? ?r9  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   rQ   refQualexceptionSpectrailingReturnr  overridefinalattrsinitializerr{   Nc                     || _         || _        || _        || _        || _        || _        || _        || _        |	| _        |
| _	        d S r5  )
rk  r   rQ   r  r  r  r  r  r  r  )r6  rk  r   rQ   r  r  r  r  r  r  r  s              r7  r8  z ASTParametersQualifiers.__init__   sS    
 	 
*, 

&r9  c                     | j         S r5  rk  r<  s    r7  function_paramsz'ASTParametersQualifiers.function_params  s
    yr9  rR  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VrU  r   Kr   Or   Rr   )r   r{  rQ   r  r  r  s      r7  get_modifiers_idz(ASTParametersQualifiers.get_modifiers_id  s    = 	JJsOOO: 	 !|  

3

3<4 	JJsOOOO\S  	JJsOOOwws||r9  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 )	NrU  r   r   r   rb  c              3   B   K   | ]}|                               V  d S r5  r  rp  s     r7  r  z7ASTParametersQualifiers.get_param_id.<locals>.<genexpr>(  s/      &L&LQqxx'8'8&L&L&L&L&L&Lr9  r   c              3   B   K   | ]}|                               V  d S r5  r  rp  s     r7  r  z7ASTParametersQualifiers.get_param_id.<locals>.<genexpr>,  s/      @@188G,,@@@@@@r9  )rL  rk  r  rZ  s    `r7  get_param_idz$ASTParametersQualifiers.get_param_id#  s    a< 	M49~~" Mrchh&L&L&L&L$)&L&L&LLLLLty>>Q 	A377@@@@di@@@@@@r9  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   )r{  rk  rA  r   rQ   r  r  r  r  r  rL  r  r  r  )r6  r  r  r  r   s        r7  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||r9  ra  rb  rc  r   r0  r1  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 )Nrq  r   T)noemphrs  rw  r(  r   Frh  r*  ra  rg  r{   c                 b    | t          j                    z  } | t          j        ||          z  } d S r5  r   r  r  ra  rg  s     r7  	_add_annoz=ASTParametersQualifiers.describe_signature.<locals>._add_annog  s0    x.000Gx0t<<<GGGr9  r   rQ   r   r  r  r   r   0rY   rX   r  )r7   r   desc_parameterlistrk  desc_parameterr  r  r  r   rA  r   rQ   r  r  r  r1  r  r  rL  r  r  r  r  )
r6  ra  rb  rc  r0  	paramlistr  rs  r  r  s
             r7  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 	3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& Y8;CEEE84T5EtGWXXX	Y 	Yr9  )r>  r?  r@  r   r  rF   r	   rA  r  r%   r8  r  r  ri   r  r  r+   r  r   r  rB  r9  r7  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r9  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  r{   Nc                     || _         d S r5  r6  r7  s     r7  r8  zASTExplicitSpec.__init__  r  r9  r  c                     dg}| j         M|                    d           |                     || j                              |                    d           d                    |          S )Nr_   r(  r*  r   )r4  r{  r  r  s      r7  r  zASTExplicitSpec._stringify  s_    l9 	JJsOOOJJyy++,,,JJsOOOwws||r9  ra  rc  r   r0  r1  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(  rh  r*  r  )r6  ra  rc  r0  s       r7  r  z"ASTExplicitSpec.describe_signature  r  r9  r  rB  r9  r7  r  r    s        Xm4     $6 3    ?+ ? 2?<D?IM? ? ? ? ? ?r9  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threadLocalrh   r   explicitSpecrR   rS   rT   r   rQ   re   r  r{   Nc                     || _         || _        || _        || _        || _        || _        || _        || _        |	| _        |
| _	        || _
        || _        d S r5  )r  r  rh   r   r  rR   rS   rT   r   rQ   re   r  )r6  r  r  rh   r   r  rR   rS   rT   r   rQ   re   r  s                r7  r8  zASTDeclSpecsSimple.__init__  s^    
 &(""" 



r9  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 r5  )r  r  r  rh   r   r  rR   rS   rT   r   rQ   re   r  )r6  r  s     r7  	mergeWithzASTDeclSpecsSimple.mergeWith  s     	K!$,"?%-"&"2"Ge6G"&+"="&,"?%-"&"3"Iu7I"&."CEO"&."CEO"&."CEO"&-"A5>"&*";"&+"="&*u{":< < 	<r9  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   rh   re   r   rR   rS   rT   r   rQ   r  )rL  r  r{  r  r  rh   re   r   r  rR   rS   rT   r   rQ   r  r  s      r7  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}}r9  ra  rc  r   r0  r1  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   ra  rg  r{   c                 h    r| t          j                    z  } | t          j        ||          z  } dS r9  r  )ra  rg  addSpaces     r7  _addz3ASTDeclSpecsSimple.describe_signature.<locals>._add  s:     582444x0t<<<G4r9  r   rh   re   r   TrR   rS   rT   r   rQ   )r  r  rL  r   rA  rF   r  r  rh   re   r   r  r   r  rR   rS   rT   r   rQ   )r6  ra  rc  r0  r  r  s        @r7  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	. 	.r9  )r  r  r{   r  )r>  r?  r@  rA  rF   r	   r  r%   r8  r  r+   r  r   r  rB  r9  r7  r  r    s        $  t '8 -1>B   )- 7; )	 .2	   $< < < < $6 3    8#.+ #. 2#.<D#.IM#. #. #. #. #. #.r9  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trailingr{   Nc                     || _         || _        || _        | j                            | j                  | _        || _        d S r5  )r  r  r  r  allSpecstrailingTypeSpec)r6  r  r  r  r  s        r7  r8  zASTDeclSpecs.__init__	  s@    
 
"$00AA (r9  rR  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 )NrU  r  r   r   r  )r{  r  r[  r  r   rQ   r  r  s      r7  r[  zASTDeclSpecs.get_id	  s    a< 	 CJJt,33G<<===}%  

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

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

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

1wws||r9  ra  rb  rc  r   r0  r1  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   )	r7   rL  r  r  r  r   r  rA  r  )r6  ra  rb  rc  r0  numChildrenr  s          r7  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, I 9x6888G227CHHHHH	I 	II Ir9  )r>  r?  r@  rA  r  ry  r8  ri   r[  r+   r  r   r  rB  r9  r7  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r9  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 r5  r   )r6  r   s     r7  r8  zASTArray.__init__M	  r  r9  r  r{   c                 @    | j         rd || j                   z   dz   S dS )NrY  rZ  r   r  r  s     r7  r  zASTArray._stringifyP	  s-    9 	49---334r9  rR  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 )NrU  Ar  r   A_)r   rA  r[  rZ  s     r7  r[  zASTArray.get_idV	  su    a< 	3a< 	y S^^+c11t9 	))'222S884r9  ra  rb  rc  r   r0  r1  Nc                     t          |           |t          j        dd          z  }| j        r| j                            |d||           |t          j        dd          z  }d S )NrY  rh  rZ  )r7   r   r  r   r  r  s        r7  r  zASTArray.describe_signaturec	  si    %%%80c:::9 	KI((*c6JJJ80c:::r9  rA  rB  r9  r7  r  r  L	  s        ]    $6 3    c c    ;+ ;S ; 2;<D;IM; ; ; ; ; ;r9  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 )ASTDeclaratorr{   c                 :    t          t          |                     r5  r  r<  s    r7  r  zASTDeclarator.namem	  r  r9  r  Nc                 :    t          t          |                     r5  r  rF  s     r7  r  zASTDeclarator.nameq	  r  r9  c                 :    t          t          |                     r5  r  r<  s    r7  isPackzASTDeclarator.isPacku	  r  r9  c                 :    t          t          |                     r5  r  r<  s    r7  r  zASTDeclarator.function_paramsy	  r  r9  r  c                 :    t          t          |                     r5  r  r<  s    r7  r  zASTDeclarator.trailingReturn}	  r  r9  c                 :    t          t          |                     r5  r  r<  s    r7  require_space_after_declSpecsz+ASTDeclarator.require_space_after_declSpecs	  r  r9  rR  c                 :    t          t          |                     r5  r  rZ  s     r7  r  zASTDeclarator.get_modifiers_id	  r  r9  c                 :    t          t          |                     r5  r  rZ  s     r7  r  zASTDeclarator.get_param_id	  r  r9  c                 :    t          t          |                     r5  r  rZ  s     r7  get_ptr_suffix_idzASTDeclarator.get_ptr_suffix_id	  r  r9  returnTypeIdc                 :    t          t          |                     r5  r  r6  rR  r  s      r7  get_type_idzASTDeclarator.get_type_id	  r  r9  c                 :    t          t          |                     r5  r  r<  s    r7  is_function_typezASTDeclarator.is_function_type	  r  r9  ra  rb  rc  r   r0  r1  c                 :    t          t          |                     r5  r  r  s        r7  r  z ASTDeclarator.describe_signature	  r  r9  r{   r  )r>  r?  r@  r  r  r  setterrF   r  r   r  r  r  r  ri   rA  r  r  r  r  r  r   r  rB  r9  r7  r	  r	  l	  s       .m . . . X. 
[. .4 . . . [. . . . . X. .&:!; . . . X. . . . X..t . . . .. . . . . ..C .C . . . .. . . . . ..3 .c .c . . . ..$ . . . ..+ .S . 2.<D.IM. . . . . .r9  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	paramQualr{   Nc                 0    || _         || _        || _        d S r5  r!  r"  r#  )r6  r!  r"  r#  s       r7  r8  z#ASTDeclaratorNameParamQual.__init__	  s      "r9  c                     | j         S r5  r!  r<  s    r7  r  zASTDeclaratorNameParamQual.name	  
    {r9  r  c                     || _         d S r5  r'  rF  s     r7  r  zASTDeclaratorNameParamQual.name	      r9  c                     dS r  rB  r<  s    r7  r  z!ASTDeclaratorNameParamQual.isPack	      ur9  c                     | j         j        S r5  )r#  r  r<  s    r7  r  z*ASTDeclaratorNameParamQual.function_params	  s    ~--r9  r  c                     | j         j        S r5  )r#  r  r<  s    r7  r  z)ASTDeclaratorNameParamQual.trailingReturn	  s    ~,,r9  rR  c                 h    | j         r| j                             |          S t          d| z            )Nz,This should only be called on a function: %s)r#  r  r|  rZ  s     r7  r  z+ASTDeclaratorNameParamQual.get_modifiers_id	  s6    > 	<>227;;;FMNNNr9  c                 H    | j         r| j                             |          S dS r  )r#  r  rZ  s     r7  r  z'ASTDeclaratorNameParamQual.get_param_id	  s'    > 	>..w7772r9  c                 P    d                     fd| j        D                       S )Nr   c              3   B   K   | ]}|                               V  d S r5  r  rp  s     r7  r  z?ASTDeclaratorNameParamQual.get_ptr_suffix_id.<locals>.<genexpr>	  s/      @@Qqxx((@@@@@@r9  )r  r"  rZ  s    `r7  r  z,ASTDeclaratorNameParamQual.get_ptr_suffix_id	  s,    ww@@@@$-@@@@@@r9  r  c                    |dk    sJ g }|                     |                     |                     | j        r|                     |                     |                     |                     d           |                     |           |                     |                     |                     |                     d           n|                     |           d                    |          S )Nr  Fr  r   )r{  r  r#  r  r  r  r6  rR  r  r  s       r7  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||r9  c                     | j         d uS r5  r'  r<  s    r7  r  z8ASTDeclaratorNameParamQual.require_space_after_declSpecs	      {$&&r9  c                     | j         d uS r5  )r#  r<  s    r7  r  z+ASTDeclaratorNameParamQual.is_function_type	  s    ~T))r9  r  c                 (   g }| j         r#|                     || j                              | j        D ] }|                     ||                     !| j        r#|                     || j                             d                    |          S r  )r!  r{  r"  r#  r  )r6  r  r  r"  s       r7  r  z%ASTDeclaratorNameParamQual._stringify	  s    ; 	/JJyy--...- 	& 	&BJJyy}}%%%%> 	2JJyy00111wws||r9  ra  rb  rc  r   r0  r1  c                     t          |           | j        r| j                            ||||           | j        D ]}|                    ||||           | j        r| j                            ||||           d S d S r5  )r7   r!  r  r"  r#  )r6  ra  rb  rc  r0  r"  s         r7  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r9  r  )r>  r?  r@  r  r   r  r  r8  r  r  r  rF   r  r  r  r  ri   rA  r  r  r  r  r  r  r+   r  r   r  rB  r9  r7  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r9  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 r5  r!  r   )r6  r!  r   s      r7  r8  z"ASTDeclaratorNameBitField.__init__	  s    			r9  r{   c                     | j         S r5  r'  r<  s    r7  r  zASTDeclaratorNameBitField.name	  r(  r9  r  Nc                     || _         d S r5  r'  rF  s     r7  r  zASTDeclaratorNameBitField.name	  r*  r9  rR  c                     dS r  rB  rZ  s     r7  r  z&ASTDeclaratorNameBitField.get_param_id	      rr9  c                     dS r  rB  rZ  s     r7  r  z+ASTDeclaratorNameBitField.get_ptr_suffix_id 
  rB  r9  c                     | j         d uS r5  r'  r<  s    r7  r  z7ASTDeclaratorNameBitField.require_space_after_declSpecs
  r7  r9  c                     dS r  rB  r<  s    r7  r  z*ASTDeclaratorNameBitField.is_function_type
  r  r9  r  c                     g }| j         r#|                     || j                              |                    d           |                     || j                             d                    |          S )Nr	  r   )r!  r{  r   r  r  s      r7  r  z$ASTDeclaratorNameBitField._stringify
  so    ; 	/JJyy--...

5

99TY''(((wws||r9  ra  rb  rc  r   r0  r1  c                 .   t          |           | j        r| j                            ||||           |t          j                    z  }|t          j        dd          z  }|t          j                    z  }| j                            ||||           d S )Nr  )r7   r!  r  r   r  r  r   r  s        r7  r  z,ASTDeclaratorNameBitField.describe_signature
  s    %%%; 	GK**7D#vFFF8*,,,80c:::8*,,,	$$WdC@@@@@r9  )r>  r?  r@  r  r  r8  r  r  r  ri   rA  r  r  rF   r  r  r+   r  r   r  rB  r9  r7  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r9  r<  c            
       8   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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   rQ   r  r{   Nc                 F    |sJ || _         || _        || _        || _        d S r5  rJ  r   rQ   r  )r6  rJ  r   rQ   r  s        r7  r8  zASTDeclaratorPtr.__init__
  s+    	 



r9  c                     | j         j        S r5  rJ  r  r<  s    r7  r  zASTDeclaratorPtr.name'
      y~r9  r  c                     || j         _        d S r5  rN  rF  s     r7  r  zASTDeclaratorPtr.name+
      	r9  c                     | j         j        S r5  rJ  r  r<  s    r7  r  z ASTDeclaratorPtr.function_params/
      y((r9  r  c                     | j         j        S r5  rJ  r  r<  s    r7  r  zASTDeclaratorPtr.trailingReturn3
      y''r9  c                 4    | j                                         S r5  rJ  r  r<  s    r7  r  z.ASTDeclaratorPtr.require_space_after_declSpecs7
      y66888r9  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   rQ   r   )r{  r  rL  r   rQ   rJ  r  r  r  s      r7  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||r9  rR  c                 6    | j                             |          S r5  rJ  r  rZ  s     r7  r  z!ASTDeclaratorPtr.get_modifiers_idK
      y))'222r9  c                 6    | j                             |          S r5  rJ  r  rZ  s     r7  r  zASTDeclaratorPtr.get_param_idN
      y%%g...r9  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 )NrU  Pr  r   r   )r   r{  rQ   rJ  r  r  r  s      r7  r  z"ASTDeclaratorPtr.get_ptr_suffix_idQ
  s    a< 	 %C}  

3z  

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

3= 	JJsOOO: 	JJsOOOwws||r9  r  c                     dg}| j         r|                    d           | j        r|                    d           |                    |           | j                            |d                    |                    S )Nrc  r  r   r   r  )r   r{  rQ   rJ  r  r  r5  s       r7  r  zASTDeclaratorPtr.get_type_idc
  sr    e= 	JJsOOO: 	JJsOOO

<   y$$W2773<<$HHHr9  c                 4    | j                                         S r5  rJ  r  r<  s    r7  r  z!ASTDeclaratorPtr.is_function_typem
      y))+++r9  ra  rb  rc  r   r0  r1  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   ra  rg  r{   c                 6    | t          j        ||          z  } d S r5  r  r  s     r7  r  z6ASTDeclaratorPtr.describe_signature.<locals>._add_annox
      x0t<<<GGGr9  r   rQ   )r7   r   r  r  r  rL  r   rQ   r  r   rA  rJ  r  r6  ra  rb  rc  r0  r  s         r7  r  z#ASTDeclaratorPtr.describe_signaturep
  sg   %%%80c:::
%%g...tz??a 	1T] 	1dj 	1x.000G	={ 	=# 	=$ 	= 	= 	= 	== 	+Igz***: 	(} 582444Igw''': 	5 	5#dj//A*= 	5y6688 582444	$$WdC@@@@@r9  r  )r>  r?  r@  r	  rF   r%   r8  r  r  r  r  r   r  r  r  r  r+   rA  r  ri   r  r  r  r  r  r   r  rB  r9  r7  rI  rI  
  s%       ] d 4 (-1    m    X 
[ 4    [ )&:!; ) ) ) 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r9  rI  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 )ASTDeclaratorRefrJ  r  r{   Nc                 *    |sJ || _         || _        d S r5  rJ  r  )r6  rJ  r  s      r7  r8  zASTDeclaratorRef.__init__
  s    	


r9  c                     | j         j        S r5  rN  r<  s    r7  r  zASTDeclaratorRef.name
  rO  r9  r  c                     || j         _        d S r5  rN  rF  s     r7  r  zASTDeclaratorRef.name
  rQ  r9  c                     dS r9  rB  r<  s    r7  r  zASTDeclaratorRef.isPack
  s    tr9  c                     | j         j        S r5  rS  r<  s    r7  r  z ASTDeclaratorRef.function_params
  rT  r9  r  c                     | j         j        S r5  rV  r<  s    r7  r  zASTDeclaratorRef.trailingReturn
  rW  r9  c                 4    | j                                         S r5  rY  r<  s    r7  r  z.ASTDeclaratorRef.require_space_after_declSpecs
  rZ  r9  r  c                 J   dg}|                      || j                             t          | j                  dk    r.| j                                        r|                     d           |                      || j                             d                    |          S )Nr   r   r  r   )r{  r  rL  rJ  r  r  r  s      r7  r  zASTDeclaratorRef._stringify
  s    e

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

99TY''(((wws||r9  rR  c                 6    | j                             |          S r5  r]  rZ  s     r7  r  z!ASTDeclaratorRef.get_modifiers_id
  r^  r9  c                 6    | j                             |          S r5  r`  rZ  s     r7  r  zASTDeclaratorRef.get_param_id
  ra  r9  c                     |dk    rd| j                             |          z   S | j                             |          dz   S )NrU  r  rJ  r  rZ  s     r7  r  z"ASTDeclaratorRef.get_ptr_suffix_id
  sD    a< 	>44W====9..w77#==r9  r  c                 P    |dk    sJ | j                             |d|z             S )Nr  r  re  rJ  r  r  s      r7  r  zASTDeclaratorRef.get_type_id
  s2    !|y$$W3;M$NNNr9  c                 4    | j                                         S r5  rg  r<  s    r7  r  z!ASTDeclaratorRef.is_function_type
  rh  r9  ra  rb  rc  r   r0  r1  c                 P   t          |           |t          j        dd          z  }| j                            |           t          | j                  dk    r/| j                                        r|t          j                    z  }| j                            ||||           d S )Nr   r   )	r7   r   r  r  r  rL  rJ  r  r  r  s        r7  r  z#ASTDeclaratorRef.describe_signature
  s    %%%80c:::
%%g...tz??Q 	149#J#J#L#L 	1x.000G	$$WdC@@@@@r9  r  )r>  r?  r@  r	  r%   r8  r  r  r  r  rF   r  r   r  r  r  r  r+   rA  r  ri   r  r  r  r  r  r   r  rB  r9  r7  rn  rn  
  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r9  rn  c            
       ,   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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 )ASTDeclaratorParamPackrJ  r{   Nc                     |sJ || _         d S r5  rJ  )r6  rJ  s     r7  r8  zASTDeclaratorParamPack.__init__
      			r9  c                     | j         j        S r5  rN  r<  s    r7  r  zASTDeclaratorParamPack.name
  rO  r9  r  c                     || j         _        d S r5  rN  rF  s     r7  r  zASTDeclaratorParamPack.name
  rQ  r9  c                     | j         j        S r5  rS  r<  s    r7  r  z&ASTDeclaratorParamPack.function_params
  rT  r9  r  c                     | j         j        S r5  rV  r<  s    r7  r  z%ASTDeclaratorParamPack.trailingReturn
  rW  r9  c                     dS r  rB  r<  s    r7  r  z4ASTDeclaratorParamPack.require_space_after_declSpecs
  r  r9  r  c                 N     || j                   }| j         j        rd|z   }d|z   S )Nr  r)  rN  r  s      r7  r  z!ASTDeclaratorParamPack._stringify
  s2    i	""9> 	)Cs{r9  rR  c                 6    | j                             |          S r5  r]  rZ  s     r7  r  z'ASTDeclaratorParamPack.get_modifiers_id
  r^  r9  c                 6    | j                             |          S r5  r`  rZ  s     r7  r  z#ASTDeclaratorParamPack.get_param_id
  ra  r9  c                     |dk    rd| j                             |          z   S | j                             |          dz   S )NrU  Dpr{  rZ  s     r7  r  z(ASTDeclaratorParamPack.get_ptr_suffix_id
  sD    a< 	?$)55g>>>>9..w77$>>r9  r  c                 P    |dk    sJ | j                             |d|z             S )Nr  r  re  r}  r  s      r7  r  z"ASTDeclaratorParamPack.get_type_id
  s2    !|y$$W4,;N$OOOr9  c                 4    | j                                         S r5  rg  r<  s    r7  r  z'ASTDeclaratorParamPack.is_function_type
  rh  r9  ra  rb  rc  r   r0  r1  c                     t          |           |t          j        dd          z  }| j        j        r|t          j                    z  }| j                            ||||           d S r  )r7   r   r  rJ  r  r  r  r  s        r7  r  z)ASTDeclaratorParamPack.describe_signature
  sh    %%%80>>>9> 	1x.000G	$$WdC@@@@@r9  r  r>  r?  r@  r	  r8  r  r  r  r  r   r  r  r  rF   r  r+   rA  r  ri   r  r  r  r  r  r   r  rB  r9  r7  r  r  
  s       ] t     m    X 
[ 4    [ )&:!; ) ) ) 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r9  r  c            
       8   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
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	classNamerQ   r   rJ  r{   Nc                 N    |sJ |sJ || _         || _        || _        || _        d S r5  )r  rQ   r   rJ  )r6  r  rQ   r   rJ  s        r7  r8  zASTDeclaratorMemPtr.__init__  s7    "
 			r9  c                     | j         j        S r5  rN  r<  s    r7  r  zASTDeclaratorMemPtr.name  rO  r9  r  c                     || j         _        d S r5  rN  rF  s     r7  r  zASTDeclaratorMemPtr.name  rQ  r9  c                     | j         j        S r5  rS  r<  s    r7  r  z#ASTDeclaratorMemPtr.function_params  rT  r9  r  c                     | j         j        S r5  rV  r<  s    r7  r  z"ASTDeclaratorMemPtr.trailingReturn  rW  r9  c                     dS r9  rB  r<  s    r7  r  z1ASTDeclaratorMemPtr.require_space_after_declSpecs  rp  r9  r  c                    g }|                      || j                             |                     d           | j        r|                     d           | j        r1| j        r|                     d           |                     d           | j                                        r|                     d           |                      || j                             d                    |          S )Nz::*r   r  rQ   r   )r{  r  r   rQ   rJ  r  r  r  s      r7  r  zASTDeclaratorMemPtr._stringify!  s    

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

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

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

99TY''(((wws||r9  rR  c                 ^    |dk    rt                      | j                            |          S NrU  )r*   rJ  r  rZ  s     r7  r  z$ASTDeclaratorMemPtr.get_modifiers_id0  s.    a< 	7.. 9--g666r9  c                 ^    |dk    rt                      | j                            |          S r  )r*   rJ  r  rZ  s     r7  r  z ASTDeclaratorMemPtr.get_param_id6  s.    a< 	3.. 9))'222r9  c                 F    |dk    rt                      t                      r  )r*   r  rJ  r  rZ  s     r7  r  z%ASTDeclaratorMemPtr.get_ptr_suffix_id<  s$    a< 	?.. %'''r9  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   rQ   r  r[  rJ  r  )r6  rR  r  nextReturnTypeIds       r7  r  zASTDeclaratorMemPtr.get_type_idC  s    !|= 	$#: 	$#CDN11':::L(y$$W.>???r9  c                 4    | j                                         S r5  rg  r<  s    r7  r  z$ASTDeclaratorMemPtr.is_function_typeP  rh  r9  ra  rb  rc  r   r0  r1  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 )
Nrh  r  r   ra  rg  r{   c                 6    | t          j        ||          z  } d S r5  r  r  s     r7  r  z9ASTDeclaratorMemPtr.describe_signature.<locals>._add_annoZ  rk  r9  r   rQ   )r7   r  r  r   r  r   rA  r   rQ   r  rJ  r  rl  s         r7  r  z&ASTDeclaratorMemPtr.describe_signatureS  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@@@@@r9  r  )r>  r?  r@  r  rF   r	  r8  r  r  r  r   r  r  r  r  r+   rA  r  ri   r  r  r  r  r  r   r  rB  r9  r7  r  r    s'       - (,4AFJ    m    X 
[ 4    [ )&:!; ) ) ) 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r9  r  c            
       0   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	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innerrJ  r{   Nc                 2    |sJ |sJ || _         || _        d S r5  r  rJ  )r6  r  rJ  s      r7  r8  zASTDeclaratorParen.__init__h  s&    
			r9  c                     | j         j        S r5  r  r  r<  s    r7  r  zASTDeclaratorParen.nameo  s    zr9  r  c                     || j         _        d S r5  r  rF  s     r7  r  zASTDeclaratorParen.names  s    
r9  c                     | j         j        S r5  )r  r  r<  s    r7  r  z"ASTDeclaratorParen.function_paramsw  s    z))r9  r  c                     | j         j        S r5  )r  r  r<  s    r7  r  z!ASTDeclaratorParen.trailingReturn{  s    z((r9  c                     dS r9  rB  r<  s    r7  r  z0ASTDeclaratorParen.require_space_after_declSpecs  rp  r9  r  c                     dg}|                      || j                             |                     d           |                      || j                             d                    |          S r  )r{  r  rJ  r  r  s      r7  r  zASTDeclaratorParen._stringify  sd    e

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

3

99TY''(((wws||r9  rR  c                 6    | j                             |          S r5  )r  r  rZ  s     r7  r  z#ASTDeclaratorParen.get_modifiers_id  s    z**7333r9  c                 6    | j                             |          S r5  )r  r  rZ  s     r7  r  zASTDeclaratorParen.get_param_id  s    z&&w///r9  c                     |dk    rt                      | j                            |          | j                            |          z   S r  )r*   rJ  r  r  rZ  s     r7  r  z$ASTDeclaratorParen.get_ptr_suffix_id  sJ    a< 	5..  ://88	++G445 5r9  r  c                     |dk    sJ | j                             ||          }| j                            ||          S )Nr  re  )rJ  r  r  )r6  rR  r  nextIds       r7  r  zASTDeclaratorParen.get_type_id  sD    !|&&w==z%%gF%CCCr9  c                 4    | j                                         S r5  )r  r  r<  s    r7  r  z#ASTDeclaratorParen.is_function_type  s    z**,,,r9  ra  rb  rc  r   r0  r1  c                     t          |           |t          j        dd          z  }| j                            ||||           |t          j        dd          z  }| j                            |d||           d S )Nr(  r*  rr  )r7   r   r  r  r  rJ  r  s        r7  r  z%ASTDeclaratorParen.describe_signature  s|    %%%80c:::
%%gtS&AAA80c:::	$$WlCHHHHHr9  r  r  rB  r9  r7  r  r  g  s       m = T     m    X 
[ 4    [ *&:!; * * * 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r9  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 r5  r6  r7  s     r7  r8  zASTPackExpansionExpr.__init__  r  r9  r  r{   c                 (     || j                   dz   S r  r6  r  s     r7  r  zASTPackExpansionExpr._stringify  s    y##e++r9  rR  c                 @    | j                             |          }d|z   S )Nspr<  r  s      r7  r[  zASTPackExpansionExpr.get_id  s!    Yg&&byr9  ra  rb  rc  r   r0  r1  Nc                 p    | j                             ||||           |t          j        dd          z  }d S r  )r4  r  r   r  r  s        r7  r  z'ASTPackExpansionExpr.describe_signature  s9    	$$WdC@@@80>>>r9  )r>  r?  r@  r   r  r  r8  r+   rA  r  ri   r[  r   r  rB  r9  r7  r  r    s        U=2C#CD    ,$6 ,3 , , , ,c c    ?+ ?S ? 2?<D?IM? ? ? ? ? ?r9  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  r{   Nc                     || _         d S r5  )r  r*  s     r7  r8  zASTParenExprList.__init__  r  r9  rR  c                 V    dd                     fd| j        D                       z  S )Nzpi%sEr   c              3   B   K   | ]}|                               V  d S r5  r  r  s     r7  r  z*ASTParenExprList.get_id.<locals>.<genexpr>  r  r9  r  rZ  s    `r7  r[  zASTParenExprList.get_id  r  r9  r  c                 Z    fd| j         D             }dd                    |          z  S )Nc                 &    g | ]} |          S rB  rB  r  s     r7  r  z/ASTParenExprList._stringify.<locals>.<listcomp>  r  r9  z(%s)r  )r  r  )r6  r  r  s    ` r7  r  zASTParenExprList._stringify  s5    2222tz222		%((((r9  ra  rb  rc  r   r0  r1  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*  )r7   r   r  r  r  r  r  s          r7  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:::r9  )r>  r?  r@  r   r   r  r  r8  ri   rA  r[  r+   r  r   r  rB  r9  r7  r  r    s        d58I)I#JK PT    Hc Hc H H H H)$6 )3 ) ) ) );+ ;S ; 2;<D;IM; ; ; ; ; ;r9  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  	hasAssignr{   Nc                 "    || _         || _        d S r5  r  r  )r6  r  r  s      r7  r8  zASTInitializer.__init__  s    
"r9  r  c                 >     || j                   }| j        rd|z   S |S Nr  r  )r6  r  vals      r7  r  zASTInitializer._stringify  s,    i
##> 	3;Jr9  ra  rb  rc  r   r0  r1  c                     t          |           | j        rD|t          j                    z  }|t          j        dd          z  }|t          j                    z  }| j                            |d||           d S )Nr   rh  )r7   r  r   r  r  r  r  r  s        r7  r  z!ASTInitializer.describe_signature  sy    %%%> 	1x.000Gx4S#>>>Gx.000G
%%gz3GGGGGr9  T)r>  r?  r@  r   r  r  rF   r8  r+   rA  r  r   r  rB  r9  r7  r  r    s        #'# #eM3D$DE # #,0# # # #
$6 3    H+ HS H 2H<DHIMH H H H H Hr9  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declr{   Nc                 2    |sJ |sJ || _         || _        d S r5  )r  r  )r6  r  r  s      r7  r8  zASTType.__init__  s)    "			r9  c                     | j         j        S r5  r  r  r<  s    r7  r  zASTType.name  rO  r9  r  c                     || j         _        d S r5  r  rF  s     r7  r  zASTType.name  rQ  r9  c                     | j         j        S r5  )r  r  r<  s    r7  r  zASTType.isPack      yr9  c                     | j         j        S r5  )r  r  r<  s    r7  r  zASTType.function_params  rT  r9  c                     | j         j        S r5  )r  r  r<  s    r7  r  zASTType.trailingReturn  rW  r9  rR  r  r0  r1  c                    |dk    rg }|r1|dk    r|                     |                                                    |                     |                     | j                            |                     |                     | j                            |                     | j        j        j        s| j        j	        r&| j        j	        j        r|                     d           n |dk    r;|                     |                                                    |                     nt          |           J | j                                        rt                      |                     | j                            |                     |                     | j                            |                     |                     | j                            |                     d                    |          S g }|rp|dk    r| j                            |          }|                     |                                                    ||                     |dk    r|j        j        }|| j                            |          }| j        r| j                            |          }n| j                            |          }|                     |           |                     |           |                     | j                            |                     n|dk    r;|                     |                                                    |                     n[t          |           J | j                            |          }| j                            ||          }|                     |           d                    |          S )NrU  functionCEr  Fr   r   )r{  get_full_nested_namer[  r  r  r  r  r  rS   r  printr  r*   r  r  r2  r  r  r  )	r6  rR  r  r0  r  r  templtypeIdr  s	            r7  r[  zASTType.get_id
  sq   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*%%% L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< 
1".=E 1!%!<!<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j!!!  >0099LY**7LAAFJJvwws||r9  r  c                 B   g } || j                   }|                    |           | j                                        r(t	          |          dk    r|                    d           |                     || j                             d                    |          S r  )r  r{  r  r  rL  r  )r6  r  r  r  s       r7  r  zASTType._stringifyB  s    Idn--	

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

99TY''(((wws||r9  c                 "    | j         j        rdS dS )Nr   r  )r  r  r<  s    r7  get_type_declaration_prefixz#ASTType.get_type_declaration_prefixK  s    >* 	96r9  ra  rb  rc  r   c                 P   t          |           | j                            |d||           | j                                        r;t          t          | j                            dk    r|t          j                    z  }|dk    rd}| j                            ||||           d S )Nrh  r   rr  )	r7   r  r  r  r  rL  rA  r   r  r  s        r7  r  zASTType.describe_signatureQ  s    %%%))':sFKKKI3355 	1C''((1,	1x.000G : 	 D	$$WdC@@@@@r9  r  r  )r>  r?  r@  r  r	  r8  r  r  r  r  rF   r  r   r  r  r  ri   rA  r[  r+   r  r  r   r  rB  r9  r7  r  r    s       , m      m    X 
[ 4    [         X  )&:!; ) ) ) X) ( ( ( X( 6:"&6 6c 6s 66+.6 6 6 6p$6 3    S    A+ AS A 2A<DAIMA A A A A Ar9  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  initr{   Nc                 *    |sJ || _         || _        d S r5  r  r  r6  r  r  s      r7  r8  z0ASTTemplateParamConstrainedTypeWithInit.__init__`  s    				r9  c                     | j         j        S r5  r  r  r<  s    r7  r  z,ASTTemplateParamConstrainedTypeWithInit.namee  rO  r9  c                     | j         j        S r5  r  r  r<  s    r7  r  z.ASTTemplateParamConstrainedTypeWithInit.isPacki  r  r9  rR  r  r0  r1  c                     |dk    sJ |r!|j         j                            |d          S | j                            |          S Nr  Fr  )r  r2  r[  r  r  s       r7  r[  z.ASTTemplateParamConstrainedTypeWithInit.get_idm  N    !| 	-=,33Ge3LLL9##G,,,r9  r  c                 d     || j                   }| j        r|dz  }| || j                  z  }|S r  r  r  s      r7  r  z2ASTTemplateParamConstrainedTypeWithInit._stringifyv  sA    i	""9 	(5LC99TY'''C
r9  ra  rb  rc  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        r7  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r9  r  )r>  r?  r@  r  r8  r  r  r  rF   r  ri   rA  r[  r+   r  r   r  rB  r9  r7  r  r  _  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r9  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  r{   Nc                 "    || _         || _        d S r5  r  r  s      r7  r8  zASTTypeWithInit.__init__      				r9  c                     | j         j        S r5  r  r<  s    r7  r  zASTTypeWithInit.name  rO  r9  c                     | j         j        S r5  r  r<  s    r7  r  zASTTypeWithInit.isPack  r  r9  rR  r  r0  r1  c                 (   |dk    r| j                             ||          S |dk    rE|                                                    |          dz   | j                             |          z   S |                                                    |          S )NmemberrU  r   )r  r[  r  r  s       r7  r[  zASTTypeWithInit.get_id  s    ! 	99##GZ888a< 	///1188AADHI$$W--. /**,,33G<<<r9  r  c                     g }|                      || j                             | j        r#|                      || j                             d                    |          S r  )r{  r  r  r  r  s      r7  r  zASTTypeWithInit._stringify  s]    

99TY''(((9 	-JJyy++,,,wws||r9  ra  rb  rc  r   c                     t          |           | j                            ||||           | j        r| j                            ||||           d S d S r5  )r7   r  r  r  r  s        r7  r  z"ASTTypeWithInit.describe_signature  se    %%%	$$WdC@@@9 	EI(($VDDDDD	E 	Er9  r  )r>  r?  r@  r  r  r8  r  r  r  rF   r  ri   rA  r[  r+   r  r   r  rB  r9  r7  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r9  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  r{   Nc                 "    || _         || _        d S r5  )r  r  r6  r  r  s      r7  r8  zASTTypeUsing.__init__  r  r9  rR  r  r0  r1  c                 x    |dk    rt                      |                                                    |          S r  r*   r  r[  r  s       r7  r[  zASTTypeUsing.get_id  8    a< 	!.. **,,33G<<<r9  r  c                     g }|                      || j                             | j        r8|                     d           |                      || j                             d                    |          S )Nr  r   )r{  r  r  r  r  s      r7  r  zASTTypeUsing._stringify  so    

99TY''(((9 	-JJuJJyy++,,,wws||r9  c                     dS )Nr   rB  r<  s    r7  r  z(ASTTypeUsing.get_type_declaration_prefix  s    wr9  ra  rb  rc  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   rh  )r7   r  r  r  r   r  r  r  s        r7  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r9  r  )r>  r?  r@  r  r  r8  ri   rA  r[  r+   r  r  r   r  rB  r9  r7  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r9  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  r{   Nc                 "    || _         || _        d S r5  r  r  r6  r  r  s      r7  r8  zASTConcept.__init__  s    $&r9  c                     | j         S r5  r  r<  s    r7  r  zASTConcept.name  r  r9  rR  r  r0  r1  c                 x    |dk    rt                      |                                                    |          S r  r  r  s       r7  r[  zASTConcept.get_id  r  r9  r  c                 Z     || j                   }| j        r| || j                  z  }|S r5  r  r  s      r7  r  zASTConcept._stringify  s:    i(( 	/99T-...C
r9  ra  rb  rc  r   c                     | j                             ||||           | j        r| j                            ||||           d S d S r5  )r  r  r  r  s        r7  r  zASTConcept.describe_signature  sY    **7D#vFFF 	L//sFKKKKK	L 	Lr9  r  )r>  r?  r@  r  r  r8  r  r  ri   rA  r[  r+   r  r   r  rB  r9  r7  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r9  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   packr{   Nc                 >    || _         || _        || _        || _        d S r5  )r  r  r   r  )r6  r  r  r   r  s        r7  r8  zASTBaseClass.__init__  s"    	$			r9  r  c                 R   g }| j         /|                    | j                    |                    d           | j        r|                    d           |                     || j                             | j        r|                    d           d                    |          S )Nr  zvirtual r)  r   )r  r{  r   r  r  r  r  s      r7  r  zASTBaseClass._stringify  s    ? 	JJt'''JJsOOO< 	#JJz"""

99TY''(((9 	JJuwws||r9  ra  rb  rc  r   r0  r1  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   rh  rw  r)  )
r7   r  r   r  r  r   r  r  r  r  r  s        r7  r  zASTBaseClass.describe_signature   s    %%%? 	1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r9  )r>  r?  r@  r  rA  rF   r8  r+   r  r   r  rB  r9  r7  r  r    s        ]  &*/3   
$6 
3 
 
 
 
C+ CS C 2C<DCIMC C C C C Cr9  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  r{   Nc                 >    || _         || _        || _        || _        d S r5  )r  r  r  r  )r6  r  r  r  r  s        r7  r8  zASTClass.__init__  s"    	




r9  rR  r  r0  r1  c                 P    |                                                     |          S r5  )r  r[  r  s       r7  r[  zASTClass.get_id  s"    **,,33G<<<r9  r  c                 .   g }|                      || j                             t          | j                  dk    r|                     d           |                      || j                             | j        r|                     d           t          | j                  dk    rX|                     d           d}| j        D ]9}|s|                     d           d}|                      ||                     :d                    |          S )	Nr   r  r  r	  Tr  Fr   )r{  r  rL  r  r  r  r  )r6  r  r  r  r   s        r7  r  zASTClass._stringify  s   

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

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

99Q<<((((wws||r9  ra  rb  rc  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   )r7   r  r  rL  r   r  r  r  r  r  r  pop)r6  ra  rb  rc  r0  r   s         r7  r  zASTClass.describe_signature,  sv   %%%
%%g...tz??a 	1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		 		r9  )r>  r?  r@  r  rF   r   r  r%   r8  ri   rA  r[  r+   r  r   r  rB  r9  r7  r  r    s        ] 4 \@R (-1   =c =s =H = = = = =$6 3    $+ S  2<DIM     r9  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  r{   Nc                 "    || _         || _        d S r5  )r  r  )r6  r  r  s      r7  r8  zASTUnion.__init__C  s    	


r9  rR  r  r0  r1  c                 x    |dk    rt                      |                                                    |          S r  r  r  s       r7  r[  zASTUnion.get_idG  8    a< 	!.. **,,33G<<<r9  r  c                    g }|                      || j                             t          | j                  dk    r|                     d           |                      || j                             d                    |          S r  )r{  r  rL  r  r  r  s      r7  r  zASTUnion._stringifyL  sw    

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

99TY''(((wws||r9  ra  rb  rc  r   c                     t          |           | j                            |           t          | j                  dk    r|t	          j                    z  }| j                            ||||           d S )Nr   rw  )r7   r  r  rL  r   r  r  r  s        r7  r  zASTUnion.describe_signatureT  ss    %%%
%%g...tz??a 	1x.000G	$$WdC$GGGGGr9  )r>  r?  r@  r  r%   r8  ri   rA  r[  r+   r  r   r  rB  r9  r7  r"  r"  B  s        ] 3C     =c =s =H = = = = =
$6 3    H+ HS H 2H<DHIMH H H H H Hr9  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  r{   Nc                 >    || _         || _        || _        || _        d S r5  )r  r*  r+  r  )r6  r  r*  r+  r  s        r7  r8  zASTEnum.__init__^  s#    	,


r9  rR  r  r0  r1  c                 x    |dk    rt                      |                                                    |          S r  r  r  s       r7  r[  zASTEnum.get_ide  r%  r9  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*  r{  r  rL  r  r+  r  r  s      r7  r  zASTEnum._stringifyj  s    ; 	JJt{###JJsOOO

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

99TY''((( 	7JJuJJyy!455666wws||r9  ra  rb  rc  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  rr  )	r7   r  r  rL  r   r  r  r+  r  r  s        r7  r  zASTEnum.describe_signaturex  s    %%%
%%g...tz??a 	1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r9  )r>  r?  r@  r  rA  r  r%   r8  ri   r[  r+   r  r   r  rB  r9  r7  r)  r)  ]  s        ] C  (-1   =c =s =H = = = = =
$6 3    G+ GS G 2G<DGIMG G G G G Gr9  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  r{   Nc                 0    || _         || _        || _        d S r5  )r  r  r  )r6  r  r  r  s       r7  r8  zASTEnumerator.__init__  s    		


r9  rR  r  r0  r1  c                 x    |dk    rt                      |                                                    |          S r  r  r  s       r7  r[  zASTEnumerator.get_id  r%  r9  r  c                 j   g }|                      || j                             t          | j                  dk    r8|                     d           |                      || j                             | j        r#|                      || j                             d                    |          S r  )r{  r  rL  r  r  r  r  s      r7  r  zASTEnumerator._stringify  s    

99TY''(((tz??a 	.JJsOOOJJyy,,---9 	-JJyy++,,,wws||r9  ra  rb  rc  r   c                 :   t          |           | j                            ||||           t          | j                  dk    r0|t          j                    z  }| j                            |           | j        r| j                            |d||           d S d S )Nr   rh  )r7   r  r  rL  r  r   r  r  r  s        r7  r  z ASTEnumerator.describe_signature  s    %%%	$$WdC@@@tz??a 	3x.000GJ))'2229 	KI((*c6JJJJJ	K 	Kr9  )r>  r?  r@  r  r	   r  r%   r8  ri   rA  r[  r+   r  r   r  rB  r9  r7  r1  r1    s        ] (>2J (-1   =c =s =H = = = = =
$6 3    K+ KS K 2K<DKIMK K K K K Kr9  r1  c            
       F    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	dS )ASTTemplateParamr{   c                 :    t          t          |                     r5  r  r<  s    r7  get_identifierzASTTemplateParam.get_identifier  r  r9  rR  c                 :    t          t          |                     r5  r  rZ  s     r7  r[  zASTTemplateParam.get_id  r  r9  
parentNoderb  rc  r   r0  r1  Nc                 :    t          t          |                     r5  r  )r6  r;  rb  rc  r0  s        r7  r  z#ASTTemplateParam.describe_signature  r  r9  )
r>  r?  r@  rH  r9  ri   rA  r[  r   r  rB  r9  r7  r7  r7    s        . . . . ..c .c . . . ..[ . . 2.<D.IM. . . . . .r9  r7  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keyrI  parameterPackrX   r{   Nc                 R    |sJ |r|J || _         || _        || _        || _        d S r5  )r?  rI  r@  rX   )r6  r?  rI  r@  rX   s        r7  r8  z)ASTTemplateKeyParamPackIdDefault.__init__  s@    


 	#"""$*r9  c                     | j         S r5  rP  r<  s    r7  r9  z/ASTTemplateKeyParamPackIdDefault.get_identifier  r]  r9  rR  c                     |dk    sJ g }| j         r|                    d           n|                    d           d                    |          S )Nr  r  r  r   )r@  r{  r  r  s      r7  r[  z'ASTTemplateKeyParamPackIdDefault.get_id  sV    !| 	JJtJJsOOOwws||r9  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   )r?  r@  rI  r{  rX   r  r  s      r7  r  z+ASTTemplateKeyParamPackIdDefault._stringify  s    xj 	  

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

3JJyy11222< 	0JJuJJyy..///wws||r9  ra  rb  rc  r   r0  r1  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   rh  )	r   r  r?  r@  rI  r  r  r  rX   r  s        r7  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r9  )r>  r?  r@  rA  rH  rF   r  r8  r9  ri   r[  r+   r  r   r  rB  r9  r7  r>  r>    s        C ]  $/6;?       c c    $6 3    N+ NS N 2N<DNIMN N N N N Nr9  r>  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  r{   Nc                     |sJ || _         d S r5  r  r  s     r7  r8  zASTTemplateParamType.__init__  r  r9  c                 n    |                                  }t          t          |d           gdgd          S NFr  r9  r  r  r6  r  s     r7  r  zASTTemplateParamType.name  8      ""22t<<=wuUUUUr9  c                     | j         j        S r5  r  r@  r<  s    r7  r  zASTTemplateParamType.isPack      y&&r9  c                 4    | j                                         S r5  r  r9  r<  s    r7  r9  z#ASTTemplateParamType.get_identifier      y'')))r9  rR  r  r0  r1  c                     |dk    sJ |r!|j         j                            |d          S | j                            |          S r  )r  r2  r[  r  r  s       r7  r[  zASTTemplateParamType.get_id  r  r9  r  c                 "     || j                   S r5  r  r  s     r7  r  zASTTemplateParamType._stringify  rH  r9  ra  rb  rc  r   c                 @    | j                             ||||           d S r5  )r  r  r  s        r7  r  z'ASTTemplateParamType.describe_signature  rL  r9  r  r>  r?  r@  r>  r8  r  r  r  rF   r  rH  r9  ri   rA  r[  r+   r  r   r  rB  r9  r7  rG  rG    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r9  rG  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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 )ASTTemplateParamTemplateTypenestedParamsASTTemplateParamsr  r{   Nc                 2    |sJ |sJ || _         || _        d S r5  r[  r  )r6  r[  r  s      r7  r8  z%ASTTemplateParamTemplateType.__init__  s*    (			r9  c                 n    |                                  }t          t          |d           gdgd          S rJ  rL  rM  s     r7  r  z!ASTTemplateParamTemplateType.name  rN  r9  c                     | j         j        S r5  rP  r<  s    r7  r  z#ASTTemplateParamTemplateType.isPack$  rQ  r9  c                 4    | j                                         S r5  rS  r<  s    r7  r9  z+ASTTemplateParamTemplateType.get_identifier(  rT  r9  rR  r  r0  r1  c                     |dk    sJ |r!|j         j                            |d           S | j                            |          | j                            |          z   S )Nr  r  )r  r2  r[  r[  r  r  s       r7  r[  z#ASTTemplateParamTemplateType.get_id+  se    !| 	Q=,33Gd3KKK$++G44ty7G7G7P7PPPr9  r  c                 D     || j                    || j                  z   S r5  r^  r  s     r7  r  z'ASTTemplateParamTemplateType._stringify4  s&    y*++ii	.B.BBBr9  ra  rb  rc  r   c                     | j                             |d||           |t          j                    z  }| j                            ||||           d S )Nrr  )r[  r  r   r  r  r  s        r7  r  z/ASTTemplateParamTemplateType.describe_signature7  sT    ,,WlCPPP8*,,,	$$WdC@@@@@r9  r  rX  rB  r9  r7  rZ  rZ    s[       %8 7<@    Vm V V V XV ' ' ' ' X'* * * * *Q Qc Qs Q8 QWZ 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r9  rZ  c            
           e Zd Zdeeef         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 )ASTTemplateParamNonTypers  r{   Nc                     |sJ || _         d S r5  rs  )r6  rs  s     r7  r8  z ASTTemplateParamNonType.__init__?  s     


r9  c                 n    |                                  }t          t          |d           gdgd          S rJ  rL  rM  s     r7  r  zASTTemplateParamNonType.nameE  rN  r9  c                     | j         j        S r5  )rs  r  r<  s    r7  r  zASTTemplateParamNonType.isPackJ  s    z  r9  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 )NrU  r   )rs  r  rL  r  r  re  
isinstancerH  )r6  r  r  s      r7  r9  z&ASTTemplateParamNonType.get_identifierN  s    z 	tz??a'''':a=****z!}1111*Q-)Cc=11111J4r9  rR  r  r0  r1  c                     |dk    sJ |r!|j         j                            |d           S d| j                            |          z   S )Nr  r  r   )r  r2  r[  rs  r  s       r7  r[  zASTTemplateParamNonType.get_idZ  sS    !| 	4=,33Gd3KKK**73333r9  r  c                 "     || j                   S r5  rh  r  s     r7  r  z"ASTTemplateParamNonType._stringifyc  rf  r9  ra  rb  rc  r   c                 @    | j                             ||||           d S r5  )rs  r  r  s        r7  r  z*ASTTemplateParamNonType.describe_signaturef  s$    
%%gtS&AAAAAr9  r  )r>  r?  r@  r   r  r  r8  r  r  r  rF   r  rH  r9  ri   rA  r[  r+   r  r   r  rB  r9  r7  rf  rf  >  sU       oEF GKO    Vm V V V XV ! ! ! ! X!
 
 
 
 
4 4c 4s 48 4WZ 4 4 4 4%$6 %3 % % % %B+ BS B 2B<DBIMB B B B B Br9  rf  c                       e Zd Z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ed
edddddeddfdZdS )r\  paramsr{   Nc                     |J || _         d S r5  )rq  )r6  rq  s     r7  r8  zASTTemplateParams.__init__l  s    !!!r9  rR  c                     |dk    sJ g }|                     d           | j        D ]*}|                     |                    |                     +|                     d           d                    |          S )Nr  rq  r  r   )r{  rq  r[  r  r6  rR  r  rs  s       r7  r[  zASTTemplateParams.get_idp  sw    !|

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

3wws||r9  r  c                     g }|                     d           |                     d                    fd| j        D                                  |                     d           d                    |          S )Nz	template<r  c              3   .   K   | ]} |          V  d S r5  rB  ru  s     r7  r  z/ASTTemplateParams._stringify.<locals>.<genexpr>|  s+      ??aYYq\\??????r9  z> r   )r{  r  rq  r  s    ` r7  r  zASTTemplateParams._stringifyy  sq    

;

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

4wws||r9  ra  rb  rc  r   r0  r1  c                 B   |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  }d S )Nr   r   Tr   Fr   )r   r  r  rq  r  r  )r6  ra  rb  rc  r0  r  rs  s          r7  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:::r9  r;  lineSpecc                    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  }d S )
Nr;  r{   c                 D    t          j                    }| |z  } d|_        |S )Nr  )r   desc_signature_linesphinx_line_type)r;  ra  s     r7  makeLinezDASTTemplateParams.describe_signature_as_introducer.<locals>.makeLine  s'    244G'!J'7G$Nr9  r   r   Tr   Fr   )r   r   r{  r  r  rq  r  r  )
r6  r;  rb  rc  r0  rx  r}  lineNoder  rs  s
             r7   describe_signature_as_introducerz2ASTTemplateParams.describe_signature_as_introducer  s"   	 	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;;;r9  )r>  r?  r@  r   r7  r8  ri   rA  r[  r+   r  r   r  r   rF   r  rB  r9  r7  r\  r\  k  s        t$45 $    c c    $6 3    ;+ ;S ; 2;<D;IM; ; ; ;<,<47<>P<<(,<15< < < < < <r9  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 ) ASTTemplateIntroductionParameterrI  r@  r{   Nc                 "    || _         || _        d S r5  )rI  r@  )r6  rI  r@  s      r7  r8  z)ASTTemplateIntroductionParameter.__init__  s    $*r9  c                 n    |                                  }t          t          |d           gdgd          S rJ  rL  rM  s     r7  r  z%ASTTemplateIntroductionParameter.name  rN  r9  c                     | j         S r5  )r@  r<  s    r7  r  z'ASTTemplateIntroductionParameter.isPack  s    !!r9  c                     | j         S r5  rP  r<  s    r7  r9  z/ASTTemplateIntroductionParameter.get_identifier  r]  r9  rR  r  r0  r1  c                 n    |dk    sJ |r!|j         j                            |d           S | j        rdS dS )Nr  r  r  r  )r  r2  r[  r@  r  s       r7  r[  z'ASTTemplateIntroductionParameter.get_id  sM    !| 	=,33Gd3KKK! tsr9  c                 b    |dk    sJ | j                             |          }| j        rd|z   S |S )Nr  r  )rI  r[  r@  r  s      r7  get_id_as_argz.ASTTemplateIntroductionParameter.get_id_as_arg  sA    !|o$$W-- 	#:Jr9  r  c                     g }| j         r|                    d           |                     || j                             d                    |          S Nr)  r   )r@  r{  rI  r  r  s      r7  r  z+ASTTemplateIntroductionParameter._stringify  sR     	JJu

99T_--...wws||r9  ra  rb  rc  r   c                     | j         r|t          j        dd          z  }| j                            |||dd|           d S r  )r@  r   r  rI  r  r  s        r7  r  z3ASTTemplateIntroductionParameter.describe_signature  sK     	Cx4UEBBBG**7D#r2vNNNNNr9  r  )r>  r?  r@  rH  rF   r8  r  r  r  r  r9  ri   rA  r[  r  r+   r  r   r  rB  r9  r7  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r9  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 )ASTTemplateIntroductionrP   rq  r{   Nc                 L    t          |          dk    sJ || _        || _        d S rK  )rL  rP   rq  )r6  rP   rq  s      r7  r8  z ASTTemplateIntroduction.__init__  s*    6{{Qr9  rR  c                 ^   |dk    sJ g }|                     d           | j        D ]*}|                     |                    |                     +|                     d           |                     d           |                     | j                            |                     |                     d           | j        D ]*}|                     |                    |                     +|                     d           |                     d           d                    |          S )Nr  rq  r  rh  r   )r{  rq  r[  rP   r  r  rt  s       r7  r[  zASTTemplateIntroduction.get_id  s	   !|

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

3

3

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

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

3

3wws||r9  r  c                 >   g }|                      | j                             |                     d           |                     d                    fd| j        D                                  |                     d           d                    |          S )Nr  r  c              3   .   K   | ]} |          V  d S r5  rB  )r  rs  r  s     r7  r  z5ASTTemplateIntroduction._stringify.<locals>.<genexpr>  s-      GG%YYu--GGGGGGr9  z} r   )r{  rP   r  rq  r  s    ` r7  r  z"ASTTemplateIntroduction._stringify  s    

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

3

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

4wws||r9  r;  rb  rc  r   r0  r1  rx  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templateIntroductionrh  r  Tr   Fr  )r   r{  r|  rP   r  r  rq  r  )	r6  r;  rb  rc  r0  rx  ra  r  rs  s	            r7  r  z8ASTTemplateIntroduction.describe_signature_as_introducer  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:::r9  )r>  r?  r@  r  r   r  r8  ri   rA  r[  r+   r  r   rF   r  rB  r9  r7  r  r    s         >?DH   c c    $$6 3    ;,;47;#;-5;AE;JN; ; ; ; ; ;r9  r  c                   z    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eddfdZdS )ASTTemplateDeclarationPrefixr  r{   Nc                     || _         d S r5  )r  )r6  r  s     r7  r8  z%ASTTemplateDeclarationPrefix.__init__  s     #r9  rR  c                     |dk    sJ g }| j         D ]*}|                    |                    |                     +d                    |          S )Nr  r   )r  r{  r[  r  )r6  rR  r  r   s       r7  r[  z#ASTTemplateDeclarationPrefix.get_id  sY    !| 	* 	*AJJqxx(())))wws||r9  r  c                     g }| j         D ] }|                     ||                     !d                    |          S r  )r  r{  r  )r6  r  r  r   s       r7  r  z'ASTTemplateDeclarationPrefix._stringify"  sE     	% 	%AJJyy||$$$$wws||r9  ra  rb  rc  r   r0  r1  rx  c                 j    t          |           | j        D ]}|                    |d|||           d S Nrq  )r7   r  r  )r6  ra  rb  rc  r0  rx  r   s          r7  r  z/ASTTemplateDeclarationPrefix.describe_signature(  sO    %%% 	] 	]A..wc6S[\\\\	] 	]r9  )r>  r?  r@  r   r   r\  r  r8  ri   rA  r[  r+   r  r   rF   r  rB  r9  r7  r  r    s        # '8'>(? "@ A#EI# # # #c c    $6 3    ]. ] ] 2]<D]PT]Y]] ] ] ] ] ]r9  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 )ASTRequiresClauser4  r{   Nc                     || _         d S r5  r6  r7  s     r7  r8  zASTRequiresClause.__init__0  r  r9  r  c                 (    d || j                   z   S )Nz	requires r6  r  s     r7  r  zASTRequiresClause._stringify3  s    YYty1111r9  ra  rb  rc  r   r0  r1  c                     |t          j        dd          z  }|t          j                    z  }| j                            ||||           d S )Nrz   r  r  s        r7  r  z$ASTRequiresClause.describe_signature6  sN    8,ZDDD8*,,,	$$WdC@@@@@r9  )r>  r?  r@  r  r8  r+   rA  r  r   r{  r  rB  r9  r7  r  r  /  s        ] t    2$6 23 2 2 2 2A(*F Ac A 2A<DAIMA A A A A Ar9  r  c                       e Zd Z	 ddedededededed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 ) r3  Fr  directiveTyper  r  requiresClauser2  trailingRequiresClause	semicolonr{   Nc	                     || _         || _        || _        || _        || _        || _        || _        || _        d | _        d | _	        d S r5  )
r  r  r  r  r  r2  r  r  r0  enumeratorScopedSymbol)	r6  r  r  r  r  r  r2  r  r  s	            r7  r8  zASTDeclaration.__init__A  sV    
 %*$,,&&<#"".2###r9  c           
      P   | j         r| j                                         nd }| j        r| j                                        nd }| j        r| j                                        nd }t	          | j        | j        | j        ||| j                                        || j	                  S r5  )
r  cloner  r  r3  r  r  r  r2  r  )r6  templatePrefixClonerequiresClasueClonetrailingRequiresClasueClones       r7  r  zASTDeclaration.cloneS  s    =A=PZd177999VZ=A=PZd177999VZ*'5d&A&G&G&I&I&I04 	$dot/A4?13F".44668S"n. . 	.r9  c                     | j         j        S r5  )r2  r  r<  s    r7  r  zASTDeclaration.name]  s    $$r9  c                 4    | j         dk    rd S | j        j        S )Nr  )r  r2  r  r<  s    r7  r  zASTDeclaration.function_paramsa  s"    ?j( 	4//r9  TrR  r  c                 6   |dk    rl| 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         r-|                    | j                             |                     | j	        s| j
        r|dk     rt                      |                    d           | j	        r| j
        r|                    d           | j	        r2|                    | j	        j                            |                     | j
        r2|                    | j
        j                            |                     |                    d           |                    | j                            || j        | j                             d                    |          S )NrU  
enumeratorr   IQr  r  r   )r  r*   r  r  r2  r[  r0  
_id_prefixr{  r  r  r4  r  )r6  rR  r  r  s       r7  r[  zASTDeclaration.get_idg  s   a< 	R" %"nn$,. O43N O2>EEgNNN#**7DOT[QQQ?l* 	Ut/J 	U.:AA'8TTT 	g&'CCC 	<JJt*11'::;;; 
	$"= 
	{ %"nn$JJt" !t'B !

4   " E

4.3::7CCDDD* M

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

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

99T-..///& 	?JJsOOOJJyy!<==>>>> 	JJsOOOwws||r9  ra  rb  rc  r   optionsc           	      &   t          |           | j        sJ d|d<   t          j                    }d|_        | j        j         |d<   | j        r7| j                            |||| j        |                    d                     | j	        rQt          j                    }d|_        |
                    |           | j	                            |d|| j                   ||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  }nL| 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  }nd| j        dk    sJ | j                    nI| j        dk    r/|t          j        dd          z  }|t          j                    z  }nJ | 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)r0  rx  r  rh  rw   r  rP   r  r  rN   rN   r   r   r^   
enum-classenum-structr   r  Fr  r  )r7   r0  r   r{  r|  isRedeclarationr  r  getr  r{  r  r  r  r  r2  r  r  r  r  r  )
r6  ra  rb  rc  r  mainDeclNodereqNoderd  lastDeclNodetrailingReqNodes
             r7  r  z!ASTDeclaration.describe_signature  sT   %%%{ #'355(4%,0K,G(G_% 	]227D#:>+<CKKHZ<[<[ 3 ] ] ]  	Z244G'7G$NN7###227JT[YYY<? 	6t(: 	6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 H 9'7 K KK 7 9 99#}4 H 9(H M MM 7 9 99)V3GGT5GGGGG_, 	*H5lLQQQLH3555LL)$/)))++L$T[QQQ#& 	?&:<<O/GO,NN?+++*L'::S$+? ? ?> 	DH9#sCCCLLL	D 	Dr9  r  )r{   r3  r  )r>  r?  r@  rA  r  r  r   rF   r8  r  r  r  r  r   r  r  ri   r[  r  r+   r  r   r   r  rB  r9  r7  r3  r3  @  s       
 $)	3 33 3s 3 3!=3!23AD3 *;3 !	3 .2	3 3 3 3$. . . . %m % % % X% 0&:!; 0 0 0 X0
 c T S    <*s * * * *$6 3    $ED. ED ED 2ED=AEDFJED ED ED ED ED EDr9  r3  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  r{   Nc                 "    || _         || _        d S r5  )r  r  )r6  r  r  s      r7  r8  zASTNamespace.__init__  s    $,r9  r  c                     g }| j         r#|                     || j                              |                     || j                             d                    |          S r  )r  r{  r  r  r  s      r7  r  zASTNamespace._stringify  s_     	7JJyy!455666

99T_--...wws||r9  )	r>  r?  r@  r  r  r8  r+   rA  r  rB  r9  r7  r  r    sb        -= -!=-BF- - - -
$6 3      r9  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symbolsr1  parentSymbolr  r  re  r{   Nc                 L    || _         || _        || _        || _        || _        d S r5  )r  r  r  r  re  )r6  r  r  r  r  re  s         r7  r8  zSymbolLookupResult.__init__  s0     (",(r9  )
r>  r?  r@  r   r   rH  r  r   r  r8  rB  r9  r7  r  r    se        ) 2 )( )!-"<=)OR).)37) ) ) ) ) )r9  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  r{   Nc                     || _         d S r5  r  r  s     r7  r8  zLookupKey.__init__  s     			r9  )r>  r?  r@  r   r
   r  r   r\  r  rA  r8  rB  r9  r7  r  r    se        T%(<(-.?.E/F )G(+), #- .  37     r9  r  c                   p    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d deeef         deeef         de
deded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Z/deeef         d!e$d"e$d%e$dd f
d6Z0dAd7Z1d'e!d(e'e
         d8ed e$d!e$d"e$d%e$de2e'd          ef         fd9Z3ded8ed e$d!e$d"e$dd fd:Z4d;edefd<Z5d;edefd=Z6 xZ7S )Br1  r   z  Fc                     J r5  rB  r<  s    r7  __copy__zSymbol.__copy__	  s    r9  c           	      >    | j         rJ t          d d d d d d d           S r5  )r  r1  )r6  memos     r7  __deepcopy__zSymbol.__deepcopy__  s.    ; 	DL $dD$dCCCr9  rk  r{   Nc                  h    t          t          j        t          j        z  d           t          |   d S )Nr   end)r  r1  debug_indent_stringdebug_indentr  s    r7  debug_printzSymbol.debug_print  s-    f(6+>>BGGGGtr9  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 r5  )r  r  r  re  r2  docnamer<  s    r7  _assert_invariantszSymbol._assert_invariants  s    { 		$~%%%****((((''''|##### $|###$ $##r9  r?  r  c                 X    |dk    rJ t                                          ||          S )Nchildren)super__setattr__)r6  r?  r  	__class__s      r7  r  zSymbol.__setattr__$  s/    * 	3L77&&sE222r9  r  r  r  re  r2  r  linec                 p   || _         d | _        d | _        || _        || _        || _        || _        || _        || _        d| _	        | 
                                 g | _        g | _        | j         r| j         j                            |            | j        r| | j        _        |                                  d S r  )r  siblingAbovesiblingBelowr  r  re  r2  r  r  r  r  	_children_anonChildrenr{  r0  !_add_template_and_function_params)r6  r  r  r  re  r2  r  r  s           r7  r8  zSymbol.__init__*  s     $($(",(&	$!!! (*+-; 	/K!((... 	+&*D# 	..00000r9  c                    |                                   | j        J | j        J | j        J |J |J |J || _        | | j        _        || _        || _        |                                   |                                  d S r5  )r  r2  r  r  r0  r  )r6  r2  r  r  s       r7  _fill_emptyzSymbol._fill_emptyG  s    !!!'''|###y   &&&"""&"&	!!!..00000r9  c           
      0   t           j        r/t           xj        dz  c_        t                               d           | j        r| j        j        D ]}|                                s| j        rt          dd d d d |d           }nd }t          |                                d           }t          |gdgd          }|                     |g || j        | j                   | j        | j        j        | j        j        D ]t}|j        
|j        j        }|t          dd d d d |d           }|j        rJ t%          |j                  dk    sJ |                     |g || j        | j                   ut           j        rt           xj        dz  c_        d S d S )NrU  z"_add_template_and_function_params:templateParamFrK  functionParam)r1  debug_lookupr  r  r  rq  r9  r2  r3  r  r  _add_symbolsr  r  r  r  r  r  rL  r  )r6  tpr  r  nnfps         r7  r  z(Symbol._add_template_and_function_paramsW  s    	E1$CDDD
  	I)0 
I 
I((** #  )/4tTSUW[\\DDD*2+<+<+>+>EE"C55'%@@@!!"b$diHHHH 	ID,<,L 	I&6 
I 
I6 V[ %otT4rSWXX9$$$28}}))))!!"b$diHHHH 	%1$	% 	%r9  c                     | j         d S | | j         j        v sJ | j         j                            |            d | _         d S r5  )r  r  remover<  s    r7  r  zSymbol.remove{  sK    ; 	Ft{,,,,,$$T***r9  c                 J   g }| j         D ]}|                    |           |j        r^|j        |k    rSd |_        d |_        d |_        |j        |j        |j        _        |j        |j        |j        _        d |_        d |_        |                    |           || _         d S r5  )r  	clear_docr2  r  r  r  r  r{  )r6  r  newChildrensChilds       r7  r  zSymbol.clear_doc  s    $&n 	' 	'FW%%%! 	+fn&? 	+%)"!%"& K7=7JF'4& K7=7JF'4&*#&*#v&&&&$r9  c              #   Z   K   | V  | j         D ]}|                                E d {V  d S r5  )r  get_all_symbols)r6  r  s     r7  r  zSymbol.get_all_symbols  sQ      


n 	0 	0F--//////////	0 	0r9  )r1  NNc              #   t   K   | j         D ]-}|V  |j                                        s |j        E d {V  .d S r5  )r  r  rQ  children_recurse_anon)r6  r   s     r7  r   zSymbol.children_recurse_anon  sa       	/ 	/AGGG;&&(( .........	/ 	/r9  r  c                    g }| }|j         r#|                    |           |j         }|j         #|                                 g }|D ]u}t          |j        |j                  }|j        5|                    ||j        |j                                        f           X|                    ||j        d f           vt          |          S r5  )
r  r{  reverser  r  re  r2  r  r  r  )r6  r  r   r?  r  s        r7  ry  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~~r9  c                 @   g }| }|j         r#|                    |           |j         }|j         #|                                 g }g }|D ]D}|                    t          |j        |j                             |                    d           Et          ||d          S rJ  )r  r{  r  r  r  re  r  )r6  r  r   r  r  s        r7  r  zSymbol.get_full_nested_name  s    h 	NN1A h 	 		 	$ 	$ALL-ak1>JJKKKU####UIe<<<<r9  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)r1  r  r  _find_named_symbolsrJ  StopIteration)	r6  r  r  re  r  r  r  r  r  s	            r7  _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|           dt          ffd}	|r |	            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 )NrU  z_find_named_symbols:self:r   r  zidentOrOp:                  ztemplateParams:             ztemplateArgs:               ztemplateShorthand:          zmatchSelf:                  zrecurseInAnon:              zcorrectPrimaryTemplateAargs:zsearchInSiblings:           r{   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)rL  rq  rk  r  rA  r  endswithr  )	r   rs  r  	paramNameargTxtisArgPackExpansionargNamere  r  s	          r7  isSpecializationz4Symbol._find_named_symbols.<locals>.isSpecialization  s     >())S1B-C-CC t>())Q. t3~45566    &-a0"'*
OO	S%+__U%;%;"<#55  44);G&"++'  44 5r9  r   r1  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  rA  re  )r   r  re  r  r  s    r7  matchesz+Symbol._find_named_symbols.<locals>.matches  s    {i' u D(n.DE !! ! 5( ! 5 !q'((C,?,?? ! 5$&LD,@A u~ !q~&&#l*;*;; ! 54r9  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:rU  r   r  Tzsearching in sibling:)	r1  r  r  r  	to_stringr  r   r  r  )r   r  r  r6  s    r7  
candidatesz.Symbol._find_named_symbols.<locals>.candidates  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r9  
candidate:r  rT  r  )r1  r  r  r  r  r  rF   r   )r6  r  r  re  r  r  r  r  r	  r  r  r  r   s   ```````      r7  r
  zSymbol._find_named_symbols  s5     
  	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 ( (')) (#'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$	% 	%r9  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 )NrU  z_symbol_lookup:r  r   r  znestedName:        ztemplateDecls:     r   c              3   4   K   | ]}t          |          V  d S r5  r_  r  r   s     r7  r  z(Symbol._symbol_lookup.<locals>.<genexpr>K  s(      >]>]!s1vv>]>]>]>]>]>]r9  zstrictTemplateParamArgLists:zancestorLookupType:ztemplateShorthand: zmatchSelf:         zrecurseInAnon:     zcorrectPrimaryTemplateArgs: zsearchInSiblings:  r   r  r  r	  rN   zstarting point:r  r  r  r  r  r  Fzhandle last name from:)r  r  r  r  r	  )r1  r  r  r  r  r  r  r  rL  r  r  r  r  find_identifierr  re  r  r
  listr  )r6  r  r  r  r  r   r  r  r  r  r	  r  r  	firstNameiTemplateDeclr  r  re  r  r0  r  s                        r7  _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 J,,..2c-6H6HHJ J J }%%)A)A)C)Ca)GGGGG   	3% 3+2 % 3 	7aI((** 7") 7#33I4G>GBOEU 4 W W "  JJ!O "0Bg0M "R[ " , 3" , 3 =AT 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 *%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r9  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 )/NrU  z_add_symbols:ztdecls:r   c              3   4   K   | ]}t          |          V  d S r5  r_  r#  s     r7  r  z&Symbol._add_symbols.<locals>.<genexpr>  s(      2Q2Qa3q662Q2Q2Q2Q2Q2Qr9  z
nn:       z
decl:     zlocation: {}:{}r  r1  r  r  re  r{   c           	         t           j        rt           xj        dz  c_        t                               d           t           xj        dz  c_        t                               d|           t                               d|           t                               d|           t           xj        dz  c_        t          | |||d d d           S )NrU  z'_add_symbols, onMissingQualifiedSymbol:templateParams:identOrOp:     ztemplateARgs:  r  r  r  r  re  r2  r  r  )r1  r  r  r  r  r  r  re  s       r7  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 3r9  TFr  r   r  r  r  r  r	  r   z _add_symbols, result, no symbol:r.  r/  ztemplateArgs:  zdeclaration:   zlocation:      {}:{}r0  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 symbolr0  z end:   creating candidate symbol)r1  r  r  r  r  r  re  )r0  r2  r  r  lookupResults    r7  makeCandSymbolz+Symbol._add_symbols.<locals>.makeCandSymbol   s    " G""#EFFF<#<&2&<+7+F)5)B(3$+$8 8 8F " G""#EFFFMr9  r0  
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          |           )NrU  redeclarationr  T)r1  r  r  r  r  r/  )r0  r6  r2  s     r7  handleDuplicateDeclarationz7Symbol._add_symbols.<locals>.handleDuplicateDeclaration1  sx    & -''1,''&&777''1,''''1,''
 .2
*+FK@@@r9  r  zcandId:zoldId: zno match, no emptyz$result is already created candSymbolzresult is makeCandSymbol()zAno match, but fill an empty declaration, candSybmol is not None?:)r{   r1  )r0  r1  r6  r1  r{   N)r1  r  r  r  r  r  r   rH  r  r   r  r*  r'  r  rL  r  r  re  r  r2  r{  r  r  r  r  r  )r6  r  r  r2  r  r  r  r  r0  noDeclwithDecldupDeclr   r5  r6  r9  candIdoldIdr4  s      ```            @r7  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 %	CJJ'))JA A A A A A %3 D8}}))))**8A;
CCC !..00F" 6""9f555" 
C 
C %0J> C..vzBBB*88::& 9&&y%888U? C..vzBBB v;;! 	" )""#7888 E&&'MNNNN&&'CDDD##q(## (!!%~'''" )""#fhrz~h~##q(## $!!### AYF {GT:::Mr9  r  docnamesrc  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 ]}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        r
|j        |v r |	j        s'|	                    |j        |j        |j                   n|	j        |j        k    rit%          |	j                  }t'          d          }||	j        |	j        |	j        j        |fz  }t*                              ||j        |j        f           nYd}|d|	                    d          z   z  }|d|                    d          z   z  }t*                              ||j                   |	                    |||           t           j        rt           xj        dz  c_        d S d S )NrU  zmerge_with:c                 p    | j                             |           | |_        |                                 d S r5  )r  r{  r  r  )r6  
otherChilds     r7  unconditionalAddz+Symbol.merge_with.<locals>.unconditionalAddz  s8    N!!*--- $J))+++++r9  zotherChild:
r  F)r  r  re  r  r  r  r  r	  zraw candidate symbols:c                      g | ]}|j         	|S rB  )r  r  r   s     r7  r  z%Symbol.merge_with.<locals>.<listcomp>  s     FFFQA4EFqFFFr9  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'.locationz1Internal C++ domain error during symbol merging.
z
ourChild:
z
otherChild:
r  )r1  r  r  r  r  r  r  r
  r  r  re  r'  rL  r2  r  r  r  r  rA  r   r  loggerwarning
merge_with)r6  r  r?  rc  rC  rB  candiateIterr  r  ourChildqueryIdr0  r=  r  msgs                  r7  rK  zSymbol.merge_withs  s    	.1$}---   	, 	, 	,  	%1$/ O	; O	;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) !!. B"../@AAA $* #/==??F* A**<@@@( #) " )##q(##   z222% E**<*H E+ E(()?)3);Z_N N N N%);; Ex344D @ A AC!18=!)!5!CT!K KCNN3*2Djo1VNWWWW OC=8+=+=a+@+@@@C,z/C/CA/F/FFFCNN31CNDDD
Hc:::: 	%1$	% 	%r9  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 )NrU  z	add_name:)r2  r  r  )r1  r  r  r  r  r  )r6  r  r  r  r  s        r7  add_namezSymbol.add_name  s     	,1${+++ 	*4MMM
M,0$T   K K 	%1$
r9  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 )NrU  zadd_declaration:)r1  r  r  r  r  r  r  r  )r6  r2  r  r  r  r  r  s          r7  add_declarationzSymbol.add_declaration  s     	31$1222&&&""" %
% 	'6@MMM
M;QUVV 	%1$
r9  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 )NrU  zfind_identifier:zidentOrOp:       zmatchSelf:       zrecurseInAnon:   zsearchInSiblings:r   r  r  ztrying:)
r1  r  r  r  r  r  r  r   r  r  )r6  r  r  r  r	  currentr  r   s           r7  r&  zSymbol.find_identifier  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  	+ tr9  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 )NrU  zdirect_lookup:Fr%  zname:          r.  zid:            r   r  z	not foundr  )r1  r  r  r  r  r  r2  r  r  re  r  r  r  )
r6  r?  r   r  r  r.  r  candr  re  s
             r7  direct_lookupzSymbol.direct_lookup  s    	%1$/0001$), 	 	%D.# QK  D' ! '55773> "  N	#0..y/=|AF9>=BJO / Q Q " 4""#4d;;;""#4nEEE""#4c::: 4!++f&9A&=>>BGGGGG&&{333 & -''1,''tt  	%1$r9  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 )NrU  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>.QualifiedSymbolIsTemplateParamNrE  rB  r9  r7  QualifiedSymbolIsTemplateParamr[  R  s        Dr9  r\  r  r1  r  r  re  r{   c                 J    | j         | j         j        dk    r
             d S )Nr  )r2  r  )r  r  r  re  r\  s       r7  r  z2Symbol.find_name.<locals>.onMissingQualifiedSymbolU  s7     ' ;+6/I ;88:::4r9  Fr2  )NtemplateParamInQualifiedr  r  r   r  r%  )r1  r  r  r  r  r  r|  r   rH  r  r   r  r*  r'  r  rL  r  r2  r  r  r  )r6  r  r  r  r  r  r  r	  r  r4  r  r0  r\  s               @r7  	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 	8(4??R 8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 )NrU  zfind_declaration:r  r1  r  r  re  r{   c                     d S r5  rB  r1  s       r7  r  z9Symbol.find_declaration.<locals>.onMissingQualifiedSymbol  s	     4r9  Fr2  r   fakeDocnameForQuery*   r0  )r1  r  r  r  r  r  r  r   rH  r  r   r  r*  r'  r  rL  r  r  r  re  r  r2  r  )r6  r2  r  r  r  r  r  r  r  r4  r  querySymbolrN  r0  r=  s                  r7  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  ""$$$ 	tr9  indentc                    t           j        |z  g}| j        s|                    d           nH| j        r^|                    t          | j                             |                    d           |                    t           j        |z             | j        r(|                    t          | j                             n'|                    t          | j                             | j        r'|                    t          | j                             | j        rX|                    d           | j	        r|                    d           |                    t          | j                             | j
        rD|                    d           |                    | j
                   |                    d           |                    d           d                    |          S )Nr  
z: z!!duplicate!! z	(r*  r   )r1  r  r  r{  r  rA  r  r2  re  r  r  r  )r6  rf  r  s      r7  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

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

4wws||r9  c                     |                      |          g}| j        D ]-}|                    |                    |dz                        .d                    |          S )NrU  r   )r  r  r{  r;  r  )r6  rf  r  r   s       r7  r;  zSymbol.dump  s\    ~~f%%& 	+ 	+AJJqvvfqj))****wws||r9  r{   N)r{   r  r5  )r?  r  r{   r1  )8r>  r?  r@  r  r  r  debug_show_treer  r  staticmethodr   r  r  rA  r  r   rH  r  r\  r  r3  ri   r8  r  r  r  r  r   r  r  r   r   ry  r  r  r  rF   r  r
  r   r   r  r*  r  rK  r  rQ  rS  r&  rX  r
   r_  re  r  r;  __classcell__r  s   @r7  r1  r1    s,       LLO  D D D 3 4    \
$ 
$ 
$ 
$3s 33 34 3 3 3 3 3 31x 1E-:T4U 1!&'8:Q'Q!R1"11?1 1 &)1 .21 1 1 1: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 '/	    h%U=+3M-N h%,/h%?Nh%/3h%@Dh% ,0h% NRh% /3	h% 8@7I	h% h% h% h%T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`% `%DI `%*`%/3`% `% `% `%F 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     63 3        r9  r1  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DefinitionParserr{   c                     dS )NC++rB  r<  s    r7  languagezDefinitionParser.language  r,  r9  c                     | j         j        S r5  )configcpp_id_attributesr<  s    r7  id_attributeszDefinitionParser.id_attributes  s    {,,r9  c                     | j         j        S r5  )ru  cpp_paren_attributesr<  s    r7  paren_attributesz!DefinitionParser.paren_attributes  s    {//r9  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"rU  FTz$Unexpected end during inside string.\)current_charposeoffail
definition)r6  startPosescapes      r7  _parse_stringzDefinitionParser._parse_string  s    # 	48A
	x 		@AAAA"c) & A"d* HHMHH
	 x011r9  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  r{   c                                          t                    s| S t          j                  }t	          | |          S r5  )matchudl_identifier_rerH  matched_textr  )r  r  r6  s     r7  _udlz-DefinitionParser._parse_literal.<locals>._udl  s?    ::/00  "$"344E(%888r9  rq   r   Trb   FrU  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  r0   r1   r  r  r.   r2   r4   r6   r5   r  r  r/   
last_matchgroupr  UnicodeDecodeErrorr  r,   )r6  r  r  	hasSuffixfloatLitregexintLitstringrd  r  charLitr   s   `           r7  _parse_literalzDefinitionParser._parse_literal  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<<'''( ##%% 	2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(  rU  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  )r6  r"  r#  r  r!  eFoldr  eExprs           r7  _parse_fold_or_paren_expressionz0DefinitionParser._parse_fold_or_paren_expression?  sK    # 	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"" 	1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  )r6  r  r  s      r7  _parse_primary_expressionz*DefinitionParser._parse_primary_expressionz  s     	!0022 	J>>&!! 	$!###2244 	J$$&& 	'"2&&&tr9  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  rU  )	r  r  r  _parse_initializer_clauser{  r  r  r~  r  )r6  r  r  r  r  r  r4  s          r7  _parse_initializer_listz(DefinitionParser._parse_initializer_list  sn    	&&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) esl A $!	" m##r9  c                 \    |                      ddd          \  }}|d S t          |          S )Nzparenthesized expression-listr(  r*  )r  r  r  s      r7  _parse_paren_expression_listz-DefinitionParser._parse_paren_expression_list  sC      $;;<[<? F  F} 	4&&&r9  c                 ^    |                                  }||S |                     d          S NF
inTemplate)_parse_braced_init_list_parse_assignment_expression)r6  bracedInitLists     r7  r  z*DefinitionParser._parse_initializer_clause  s8    5577 	"!!00E0BBBr9  c                 ^    |                      ddd          \  }}|d S t          ||          S )Nzbraced-init-listr  r  )r  r  r  s      r7  r  z(DefinitionParser._parse_braced_init_list  s@      $;;<NPSUXYY} 	4 666r9  c                 Z    |                                  }||S |                                 S r5  )r  r  )r6  parens     r7  *_parse_expression_list_or_braced_init_listz;DefinitionParser._parse_expression_list_or_braced_init_list  s4     1133 	L++---r9  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'.r{   c                  ,                                      S r5  r  r<  s   r7  parserz:DefinitionParser._parse_postfix_expression.<locals>.parser   s    --///r9  r*  zExpected ')' to end '%s'.r   zExpected '(' after 'typeid'.T)r  z%Expected ')' to end 'typeid' of type.c                  ,                                      S r5  r  r<  s   r7  r  z:DefinitionParser._parse_postfix_expression.<locals>.parser  s    #55777r9  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..rT  r   r   r   )r  r  skip_word_and_wsr  r  _parse_typer  r  _parse_expression_fallbackr  r  r  r)   r{  r  r  r~  r  rU  r  r_  rg  rm  rx  r  r~  r  )r6  
prefixTyperd  r   r   r  r  r4  r  eTyper  headererrorseOutereInnerr  r  r  s   `                 r7  _parse_postfix_expressionz*DefinitionParser._parse_postfix_expression  s   , 
" 	 	A$$Q''   H	M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/ YD4E4L Y		"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  **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'.rn   zExpecting '(' after 'noexcept'. Expecting ')' to end 'noexcept'.r  rm   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.rY   rY  rZ  z(Expected ']' in array delete-expression.)r  _expression_unary_opsr  r  r  r  r  r  r  r  r3   rH  r  r  r  r  _parse_unary_expressionr  r  r  r  r  _parse_decl_specs_parse_declaratorr  r  r  r  r  )r6  r"  r  r4  r  r  r  r  r  r  r  r  r  s                r7  r  z(DefinitionParser._parse_unary_expressionk  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--///r9  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  r{  r  )r6  r  r  r4  exCastexUnaryerrss          r7  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 )Nr6  opIdr  r{   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 )NrU  r  r{   c                 ,                                     S r5  )r  r  r6  s    r7  r  zYDefinitionParser._parse_logical_or_expression.<locals>._parse_bin_op_expr.<locals>.parser  s    66888r9  c                 &     dz   |           S )NrU  r  rB  )r  _parse_bin_op_exprr  r6  s    r7  r  zYDefinitionParser._parse_logical_or_expression.<locals>._parse_bin_op_expr.<locals>.parser  s    --dD1HTTTTr9  r  Tr   Fr   rN  r   )rL  _expression_bin_opsrF   r  r{  r  r~  r  r  r  r)   r  )r6  r  r  r  r  r  r  oneMorer"  r4  r  s   ``        r7  r  zIDefinitionParser._parse_logical_or_expression.<locals>._parse_bin_op_expr  s   ax32333 U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 %$Sy T%6#%= A'%v<<<T***

2"&* ' ' '#&' 78  s+++s   8D==EEr   r  )rp  ri   rF   r  )r6  r  r  s     @r7  _parse_logical_or_expressionz-DefinitionParser._parse_logical_or_expression  s\    '	,%5 '	,%('	,6:'	,?L'	, '	, '	, '	, '	, '	,P "!$jAAAAr9  
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  )r6  r  r  r  r  s        r7  "_parse_conditional_expression_tailz3DefinitionParser._parse_conditional_expression_tail  s    
 	$$ 	4))++$$ 	WIIUVVV44Z@@!*hAAAr9  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!  )r6  r  r!  condExprr"  r#  s         r7  r  z-DefinitionParser._parse_assignment_expression'  s     44
4KK::8ZPP 	O, 	> 	>B!u ~~b))  ''++ 6688I$Xr9=====r9  c                 f    |                      |          }|                     ||          }||S |S Nr  )r  r  )r6  r  orExprr  s       r7  _parse_constant_expressionz+DefinitionParser._parse_constant_expressionF  sA     22j2II::6:NN 	Or9  c                 .   |                      d          g}	 |                                  |                     d          sn*|                    |                      d                     Tt	          |          dk    r|d         S t          |          S )NFr  Tr   rU  r   )r  r  r  r{  rL  r(  r*  s     r7  r  z"DefinitionParser._parse_expressionP  s     22e2DDE	NLLNNN##C(( LL::e:LLMMM		N
 u::? 	'8O&&&r9  Tr  r  allowc                    | j         }	  |            S # t          $ r3}|r| j        s |                     d|z             || _         Y d }~nd }~ww xY w|J |                                  | j         }|                     t                    r	| j        }nddddd}g }	| j        st          |	          dk    r
| j
        |v rn| 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  rU  z0Could not find end of expression starting at %d.)r  r)   allowFallbackExpressionParsingwarnr  r  
_string_rer  r  rL  r~  keysr{  r   r  r  stripr1  )
r6  r  r  r  prevPosr   r  r  bracketsr  s
             r7  r  z+DefinitionParser._parse_expression_fallback^  s    (		688O 	 	 	   C II (*+, - - -DHHHHHH	 8::j!! 	?%EE !s3??H!#Gh LLA% $*;s*B $7 "NN8D,=#>????\\A% "$*;wr{*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)rm   rY   rY  rZ  zExpected "]" after  "operator z["r   rX  z%Expected user-defined literal suffix.Fr  r  r  )r  r  _operator_rerF  r  r  r  r  r3   rH  rR  r  rZ  )r6  r"  rI  r  s       r7  _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$$$r9  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   FrU  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  r{  r)   r  rc  r  )r6  
prevErrorsre  rl  r  parsedComma	parsedEndr  r   r  r  s              r7  _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  TrU  r   r   rr   z#Expected identifier in nested name.z3Expected identifier in nested name, got keyword: %sz.Expected '::' in pointer to member (function).)r  r  rL  r  r{  r  r  r3   r   r  r  	_keywordsrH  r  r  r)   otherErrorsr  r  )r6  r  r  r  r  r   r  rI  r  re  exs              r7  r  z#DefinitionParser._parse_nested_name  s=   ,. "	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	                    |                               nJ|+|(|                     d                    |                     nJ d                    |                      g }||                    |           ||                    |           |	                    |           ||                    |           t          ||          S )N)rC   r   rF   rJ   r   rK   rL   rM   ri   r   r   rc   r[   r   r   r   r   zCan not have both {} and {}.)r}   r   r|   r   rj   )
_Imaginary_Complex)rC   r   rF   r   rK   rL   rM   r   r   r   r   r  rJ   ri   )r   r   rc   r[   rU  z.Can not have {} without a floating point type.FzUnhandled type {})r  r  _simple_type_specifiers_rer  r{  r  r  rL  r  extendr}  )r6  modifier
signednesswidthr  r  r   r~  s           r7  _parse_simple_type_specifiersz.DefinitionParser._parse_simple_type_specifiers  s   "&$(
!jj344 	!ALLOOO J J 
  MII<CCAsKKLLL,,  TII<CCAzRRSSS

g u::? RII<CCAuQxPPQQQQf u::? RuQx6'9 RII<CCAuQxPPQQQQ00  RII<CCAxPPQQQLLNNN7 jj344 	8 u::? 	4 H H &	:  P		8??XNNOOO R		8??ZPPQQQ5zzQ W		8??SXXe__UUVVVF] 	: P		8??XNNOOO5zzQ W		8??SXXe__UUVVVE\ 	: P		8??XNNOOO++ 	: P		8??XNNOOO5zzQ W		8??SXXe__UUVVVG^ 	: R		8??ZPPQQQ5zzQ W		8??SXXe__UUVVVH_ 	: R		8??ZPPQQQ5zzA~ W		8??SXXe__UUVVV5zzQ W58v#5 W		8??SXXe__UUVVV 	: ]		JQQRZ[[\\\9-44S99999 "
 	(h''' 	*j)))%    	#c"""-eZ@@@r9  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 )NrW   r(  zExpected '(' after 'decltype'.rC   r*  z#Expected ')' after 'decltype(auto'.z%Expected ')' after 'decltype(<expr>'.)rN   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  )r6  r  r4  rd  kr  r  s          r7  _parse_trailing_type_specz*DefinitionParser._parse_trailing_type_specv  sR    	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Kr9  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 )Nrm   r(  r  z+Expecting "(" in parameters-and-qualifiers.r*  rU  r)  Tz6Expected ")" after "..." in parameters-and-qualifiers.singler  r  r   z<Expecting "," or ")" in parameters-and-qualifiers, got "%s".rQ   r   r   r   rn   Fr  r   r  r  r  r   r  z'Expected "%s" in initializer-specifier.z" or ")r  r  r  r{  r  _parse_type_with_initr~  r  r  r  r  r  _parse_attribute_listr  r  )r6  r  rk  r  rQ   r   r  r  r4  r  r  r  r  r  validr   s                   r7   _parse_parameters_and_qualifiersz1DefinitionParser._parse_parameters_and_qualifiers  sg    	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 	1r9  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.NrU  rQ   r   )r  r  r   ra   r  rk   rx   )r  r  rh   rS   rT   r   r  rR   re   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_attributer{  r  r%   )r6  r  r  r  r  rh   r   r  rR   rS   rT   r   rQ   re   r  r_   r4  attrs                     r7  _parse_decl_specs_simplez)DefinitionParser._parse_decl_specs_simple  s   			J	LLNNN U w//   >>*55  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r9  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  )r6  r  r  r  r  r  s         r7  r  z"DefinitionParser._parse_decl_specs_  s     	OKK O E MNNN	 11%??	
 	5577H66ueDDJJHE9j(CCCr9  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  FrK  r  z Unexpected ':' after identifier.rU  rY  rZ  r{   c                  ,                                      S r5  r  r<  s   r7  r  z>DefinitionParser._parse_declarator_name_suffix.<locals>.parser  s    11333r9  z&Expected ']' in end of array operator.r   r  r  r>  r%  )r  r  r)   r  r3   rH  r  r  r  r  r~  r  r  r{  r  r  r  r  rL  r  r<  r   )r6  r  r  r  r  r!  rI  r  r"  r  r  r#  r   s   `            r7  _parse_declarator_name_suffixz.DefinitionParser._parse_declarator_name_suffixz  s    G 	(C0022"    h 	zz-(( 	*4+<==
*:t<<&uugeDDD$+ B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	 	OX!!3 	O Of, O O##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  rm   z'Internal error, unknown paramMode '%s'.r   FrU  r   rQ   rL  r   rp  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  r{  r  rI  r%   r  rn  r  r~  r   r  r%  r)   r  r  r  r  r  r  )r6  r  r  r  r  r   rQ   attrListr  rJ  r  r  r  exParamQualr  exNoPtrParenr  r  r   s                      r7  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&#- #	WN* B 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' P ''(>(>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.r{   c                  0                                    S r  )r  r  s   r7  r  z3DefinitionParser._parse_initializer.<locals>.parserP  s    44
4KKKr9  )r  )r  r  r  r  r  r  r  )r6  r  r+  
bracedInitfallbackEndr  r  r  s   `      @r7  _parse_initializerz#DefinitionParser._parse_initializer$  sX   & 	H 	C5577J C%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$$$r9  c                    |r |dvrt          d|z            |dk    r|sJ |dv r>g }| j        }	 |                     |d          }|                     d|d          }|                     d	           n8# t
          $ r}|d
k    rd}n|dk    rd}nJ |                    ||f           || _        	 |                     |          }|                     d|          }nu# t
          $ rh}	|| _        |d
k    rd}n|dk    rd}nJ |                    |	|f           	 |d
k    rd}
|
dz  }
n|dk    rd}
nJ |                     ||
          |	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  Tr'  )allowSemicolonr  zIf just a namer  z"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  
assert_endr)   r{  r  r  )r6  r  r  r  r  r  r  	exUntypeddescexTypedr  r  r  s                r7  r  zDefinitionParser._parse_typeU  s     	 > > O E MNNN& (( A	L JxH/C 22e2LL	--DE49 . ; ;t4444" *C *C *CF? !+DDj( !?DD L!!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 )%OFF(L"44ZHHgU)C DDDD*CX I  !.( !*	/) ! ..U.;;I)))KKDy$'''s=   AA9 9
E#2E6-C$#E$
E.A#EEEE#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  r+  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  r0  r  r  r  r~  r)   r  r  r{  r  )r6  r  r  r  r  r  r  r   typeInitr  r  rO  s               r7  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 3&tT222 LLNNN C' 3D,=,D 3 '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      r7  _parse_type_usingz"DefinitionParser._parse_type_using  sk    &&(($$ 	,d+++t,,D$'''r9  c                     |                                  }|                                  |                     d          }t          ||          S )Nr  )r  r  r0  r
  r  s      r7  _parse_conceptzDefinitionParser._parse_concept  sC    ,,..
--h77*k222r9  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  rU  Fr   Tr)  r   )r  r  r  r  r  r  _visibility_rer  r{  r  r  )	r6  r  r  r  r  r  r   r  baseNames	            r7  _parse_classzDefinitionParser._parse_class  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2r9  c                 r    |                                  }|                                 }t          ||          S r5  )r  r  r"  )r6  r  r  s      r7  _parse_unionzDefinitionParser._parse_union   s4    **,,&&((e$$$r9  c                     d }|                                  }|                                 }|                                  d }|                     d          r|                     d          }t          ||||          S )Nr  Fr  )r  r  r  r  r  r)  )r6  r*  r  r  r+  s        r7  _parse_enumzDefinitionParser._parse_enum  s{    **,,&&((C   	;!--E-::NtV^U;;;r9  c                 X                                      }                                 }                                  d }                     d          rF                                  dt          f fd}                     g |          }t          |          }t          |||          S )Nr   r{   c                  0                          d          S r  )r  r<  s   r7  r  z2DefinitionParser._parse_enumerator.<locals>.parser  s    66%6HHHr9  )r  r  r  r  r  r  r  r1  )r6  r  r  r  r  initVals   `     r7  _parse_enumeratorz"DefinitionParser._parse_enumerator  s    &&((**,,C   	+LLNNNIM I I I I I I55b&AAG!'**DT4///r9  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          }	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   rN   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  r3   rH  r  r  r~  r>  rZ  rG  r)   r  rf  r{  r  )r6  r[  r  r?  r@  rI  rX   r  r  rs  eNonTyper  r  s                r7  _parse_template_parameterz*DefinitionParser._parse_template_parameter  s   >>*%% 	 >>@@LLLh2	;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 VIITUUU3C4A7L LD 23L$GGG+D111 	; 	; 	; ;227OLL.u55555555" ; ; ;AXY[ [ [TUW W W,,T6:::;	;sD   	E'G  1G   
I%
I +G?9I%?
I	AIII  I%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'rU  r   r   z!Error in template parameter list.zIf parameterzExpected "," or ">".zIf no parameter)
r  r  r  r  rM  r{  r)   r\  r  r  )	r6  r  r  errrs  eParamr  r  r   s	            r7  rK  z/DefinitionParser._parse_template_parameter_list\  s    24$$ 	7II5666	;(CC6688%%e,,,,"    LLNNN$$ ;(888!!#&& ;< 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"D>>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  rU  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  r3   r  r  r  rH  r{  r  r  )r6  r  rP   rq  r@  txt_identifierrI  s          r7  _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 )Nrz   r6  r{   c                    g }g }|                     |                                            	 |                                  d}|                     d          rd}|                     d           n,|                     d          rd}|                     d           |sn(|                     |                                            t          |          dk    r|d         S t          ||          S )NTFr   r@   rU  r   )r{  r  r  r  r  rL  r  )r6  andExprsr  r  s       r7  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}}! 3{"#Hc222r9  TFr   rs   rU  r   )	r  r  rp  r  r{  r  rL  r  r  )r6  rW  orExprsr  r  s        r7  _parse_requires_clausez'DefinitionParser._parse_requires_clause  sS    	~~j)) 	4	3!1 	3m 	3 	3 	3 	3* ~~d++,,,	1LLNNNG%% !

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

4    NN>>$//000	1 w<<1 	A$WQZ000$\'3%?%?@@@r9  r  c                    g }	 |                                   d }| j        }|                     d          rW	 |                                 }nX# t          $ r4}|dk    r't          |          dk    rt          d           cY d }~S |d }~ww xY w|                                 }|snK|dk    r/t          |          dk    r|| _        |                     d           |	                    |           t          |          dk    r|dk    r|                     d           t          |          dk    rd S t          |          S )NrU  r   r  r   rP   z0More than 1 template parameter list for concept.z,Missing template parameter list for concept.)
r  r  r  rK  r)   rL  r  rS  r  r{  )r6  r  r  rq  r  r   s         r7  "_parse_template_declaration_prefixz3DefinitionParser._parse_template_declaration_prefix  s   MO		%LLNNNHLF(C~~j))  !@@BBFF&      !X-  #i..A2E  ;DAAAAAAAA	  ::<< Y& N3y>>A+= N		LMMMV$$$)	%* y>>Q 	F:#: 	F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                      %|r|s|
	                    |j                   t          |
          }|S )	NFr   TrU  zeToo few template argument lists comapred to parameter lists. Argument lists: %d, Parameter lists: %d.zToo many template argument lists compared to parameter lists. Argument lists: %d, Parameter lists: %d, Extra empty parameters lists prepended: %d.z Declaration:
	z%s
	)r  r  rL  r  rA  r  r  r{  r\  r  r  )r6  r  r  r\  r]  numArgsisMemberInstantiation	numParamsnumExtrarO  newTemplates_is               r7  _check_template_consistencyz,DefinitionParser._check_template_consistency  s    **,, % 	:II :N4 :	(,%% 899	Q;" 	.II I ),- . . . Y 	H*H$ 	-B 	C 	845 **! 58n44Cs:&		#TVLHoo ; ;##$5b$9$9:::: >&; >##N$<===9,GGNr9  r  c           
      J   |dvrt          d|z            |dvrt          d|z            d }d }d }d }d }|                                  |                     t                    r| j        }|dv r1|                     |          }|dk    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	          }||                                 }nn|dk    r|                                 }nS|dk    r|                                 }n8|dk    r|                                 }n|dk    r|                                 }nJ |                     |j        |d|dk              }|                                  |                     d          }t-          ||||||||          S )N)rN   r   r  r  r  rP   r^   r  z(Internal error, unknown objectType "%s".)rN   r   r   r  r  varr  rP   r^   r  r  r  z+Internal error, unknown directiveType "%s".)r  rP   r  r  rN   r  r  Tr  r3  zIf type alias or template aliaszError in type declaration.rP   r  rN   r   r^   r  F)r\  r]  r  )r|  r  r  r?  r  r[  rY  r  r  r)   r{  r;  r  r=  r  rA  rC  rE  rI  re  r  r  r3  )r6  r  r  r  r  r  r  r2  r  r  r   r  r  s                r7  parse_declarationz"DefinitionParser.parse_declaration  sy    ? ? 	UFSTTT !T T 	[ IMYZZZ
!%::n%% 	+*JKK 	?!DDZPPNZ' ?N ?!%!<!<!>!> #	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 G)-)D)D)F)F&7" 		++--KK7" 	++--KK6! 	**,,KK<' 	0022KKL99+:J:HLQCMQYCY : [ [ 	$$S))	j-,nk4iA A 	As0   1C 
C=C88C=D   
E&*7E!!E&c                     |                      d          }|                                 }|                     ||d          }t          ||          }d|_        |S )Nrl   r  Fr\  )r[  r  re  r  r  )r6  r  r  r  s       r7  parse_namespace_objectz'DefinitionParser.parse_namespace_objectc  sg    @@K@XX&&((99$LQ : S S400$
r9  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xrefrj  r   Trk  r  FzIf shorthand refzIf full function refzError in cross-reference.)r  r[  r  r  r  r4  re  r  r  r)   rh  r{  r  )
r6  r  r  r  res1e1res2e2r  rO  s
             r7  parse_xref_objectz"DefinitionParser.parse_xref_objectl  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  r4  r)   r  r{  r  )r6  r  r4  exExprr  exTyper  r  s           r7  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  r9  r5  )_r>  r?  r@  r  rA  rs  rw  rz  r  r  r  r  r  r  r
   r   r   r  rF   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<  r%  r	  r  r  r0  r  r  r  r  r  r   r;  r
  r=  r  rA  r"  rC  r)  rE  r1  rI  r7  rM  r\  rK  r  rS  r  rY  r  r[  re  r3  rh  r  rl  rs  rw  rB  r9  r7  rp  rp    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O( O(tSy!1 O(# O( O( O( O( O(b+?tSy)+?+? 2Y!YZ+? +? +? +?Z(< ( ( ( (3
 3 3 3 33h 3 3 3 3>%h % % % %
<W < < < <0= 0 0 0 0 ;;+; ;; ;; ;; ;;z;0A ; ; ; ;B$8.E $8 $8 $8 $8L3A1B(C 3A 3A 3A 3Aj;S ;089U0V; ; ; ;B OT% %m %4P%7;%GK% *F% % % %NCAC CA CA CA CA CA CAJ    @5|^/K)Ld)R#S @ @ @ @<G%w(>"? G G G G G Gr9  rp  r{   c                  d    t          t          d          d           } t          | gdgd          S )NPhonyNameDueToErrorFrK  )r  rH  r  )r  s    r7  _make_phony_error_namerz    s3    
}-BCCT
J
JC#6666r9  c                   b    e Zd ZU dZ ed ed          dd          gZee         e	d<   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)noindexentryr  option_specastr{   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$  rU  r0  )r  r0  r  r  re  r  r2  r  r&  r  r  r1  rc  r  get_source_info)r6  r  r0  r  
parentDecltargetSymbolr   	declClones           r7  _add_enumerator_to_parentz#CPPObject._add_enumerator_to_parent  sg   ~---- +++$,,,"***} 	 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r9  sigra  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 )NrU  )rR  r   z^[a-zA-Z0-9_]*$zMIndex id generation for C++ object "%s" failed, please report as bug (id=%s).rG  r  FrP   Tr  entriesr  r   ri  r  rK  )"r  r  r[  r{  r*   r'  reversedrecompiler  rI  rJ  get_locationr0  r  r`  lstripr  r2  r  r  rc  ru  cpp_index_common_prefix
startswithrL  get_index_text	indexnodestatedocumentrK  
domaindatar  note_explicit_target)r6  r  r  ra  rK  r   r  newestIdr  isInConceptr   r  strippedNamerd  	indexTextr  s                   r7  add_target_and_indexzCPPObject.add_target_and_index  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 	=DA )+ "  	  	X~T\A 	XL(/A  ??6** #/F#=LE ++L99IN9%,,h	8RQU-VWWW4:.22 	>H'.w7E5  1!j0dOOOEN!!(+++!""g . . TZ044 .EN))"---J44W=====	> 	>s   +A

A$#A$c                     t                      r5  r;  r<  s    r7  object_typezCPPObject.object_type  s    !###r9  c                     | j         S r5  )r  r<  s    r7  display_object_typezCPPObject.display_object_type  s    r9  r  c                 4    t          d          || j        fz  S )Nz%s (C++ %s))r   r  rF  s     r7  r  zCPPObject.get_index_text  s    4)A"BBBr9  r  c                 B    |                     | j        | j                  S r5  )rh  r  objtype)r6  r  s     r7  parse_definitionzCPPObject.parse_definition   s    ''(8$,GGGr9  r  c                 @    |                     |d| j        |           d S r  )r  rc  )r6  ra  r  r  s       r7  r  zCPPObject.describe_signature#  s$    wdhHHHHHr9  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_symbolri  root_symbolrp  r  zmC++ declarations inside functions are not supported. Parent function: {}
Directive name: {}
Directive arg: {}r   rG  cpp:last_symbol)r  r  settingsrc  	temp_datar  ry  ref_contextr2  r  rI  rJ  r  rA  r  r  	argumentsr  rz  rQ  r  run)	r6  rc  rootr  r  rO  r  r0  r  s	           r7  r  zCPPObject.run'  sD   j!*.cm3 	F>%(7D15CM-.040C0C0E0ECO,- }%89!-
 
	j&;z&I 
	PCNN3::L557788	4>!,  ))++  - - - *++D!**400F/5CM+,I ,0'(ww{{}}r9  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  rH  ru  rG  r  rU  )r  r  rF  r  r  )rc  r  rp  ru  r  r4  r)   rI  rJ  rz  rQ  
ValueErrorrS  r  r  r  r  r/  r0  r   r  r  r  r  dictr  r  )r6  r  ra  r  r  r  r   r  r0  rO  r  s              r7  handle_signaturezCPPObject.handle_signatureL  se   #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 >\) 	0**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  rp  )rc  r  oldParentSymbolr  oldParentKeyry  )r6  
lastSymbols     r7  before_contentzCPPObject.before_content{  sv    !X/0AB
#x12EF'+x';<L'M2<./1;1J1J1L1L-...r9  c                 V    | j         | j        j        d<   | j        | j        j        d<   d S )Nr  rp  )r  rc  r  r  r  r<  s    r7  after_contentzCPPObject.after_content  s.    262F./151B-...r9  rj  )"r>  r?  r@  __doc__r9   r   r  r   r8   __annotations__r   flagr  r<   r3  r  rA  r   r  r  r  r  r  rp  r  r   r   r  r   r  r  r  r  rm  rn  s   @r7  r|  r|    sV        // 	)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r9  r|  c                       e Zd ZdZdS )CPPTypeObjectr  Nr>  r?  r@  r  rB  r9  r7  r  r            KKKr9  r  c                       e Zd ZdZdS )CPPConceptObjectrP   Nr  rB  r9  r7  r  r    s        KKKr9  r  c                       e Zd ZdZdS )CPPMemberObjectr  Nr  rB  r9  r7  r  r    s        KKKr9  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)rs  r  r  argumentTr  
exceptionsThrowsr4  )throwsr   	exception)r  rolenamer  r  retvalzReturn values)retvalsr  returnvalueReturnsF)returnsr{   )r  has_argr  N)	r>  r?  r@  r  r|  r  r9   r   r8   rB  r9  r7  r  r    s        K/[,D"&	( 	( 	( 	\8v;"&	( 	( 	( 	XQQ%7%70"&	( 	( 	( 	m11Y<<)	+ 	+ 	+3 OOOr9  r  c                   .    e Zd ZdZedefd            ZdS )CPPClassObjectrN   r{   c                 &    | j         dv sJ | j         S )Nr  )r  r<  s    r7  r  z"CPPClassObject.display_object_type  s      |22222|r9  N)r>  r?  r@  r  r  rA  r  rB  r9  r7  r  r    s>        KS    X  r9  r  c                       e Zd ZdZdS )CPPUnionObjectr   Nr  rB  r9  r7  r  r    s        KKKr9  r  c                       e Zd ZdZdS )CPPEnumObjectr^   Nr  rB  r9  r7  r  r    r  r9  r  c                       e Zd ZdZdS )CPPEnumeratorObjectr  Nr  rB  r9  r7  r  r    s        KKKr9  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.
    FrU  r   Tr  r{   c                    | j         j        d         d         }| j        d                                         dv r|}g }nt	          | j        d         |                                 | j                  }	 |                                }|                                 nc# t          $ rV}t                              ||                                            t                      }t          |d           }Y d }~nd }~ww xY w|                    |j        |j                  }|g}|| j         j        d<   || j         j        d<   |                                | j         j        d	<   g S )
Nri  r  r   NULLr  rq   r  rG  r  cpp:namespace_stackrp  )rc  r  r  r  rp  r  ru  rl  r4  r)   rI  rJ  rz  r  rQ  r  r  r  ry  r  )r6  
rootSymbolr0  stackr  r  r   r  s           r7  r  zCPPNamespaceObject.run  sh   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  rB  r9  r7  r  r    sh          
 K $ K   T$Z      r9  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 )	CPPNamespacePushObjectFrU  r   Tr  r{   c                 j   | j         d                                         dv rg S t          | j         d         |                                 | j                  }	 |                                }|                                 nc# t          $ rV}t          	                    ||                                            t                      }t          |d           }Y d }~nd }~ww xY w| j        j                            dd           }|s| j        j        d         d         }|                    |j        |j                  }| j        j                            dg           }|                    |           || j        j        d<   || j        j        d<   |                                | j        j        d	<   g S )
Nr   r  r  rG  r  ri  r  r  rp  )r  r  rp  r  ru  rl  r4  r)   rI  rJ  rz  r  rc  r  r  r  rQ  r  r  r{  ry  r  )r6  r  r  r   r  	oldParentr0  r  s           r7  r  zCPPNamespacePushObject.run  s   >!""$$(@@ 	I!$."3+/+<+<+>+>)-6 6 6	+//11C 	+ 	+ 	+NN1t'8'8':':N;;;)++DtT**CCCCCC	+ H&**+>EE	 	B+E2=AI##CNC4FGG"&&'<bAAV28./4901171F1F1H1H-.	s   (B 
C"ACC"Nr>  r?  r@  r  r  r  r  r  r<   r  r   r   r  rB  r9  r7  r  r    s\         K $ K   T$Z      r9  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  r{   c                    | j         j                            dd           }|rt          |          dk    r1t                              d|                                            g }n|                                 t          |          dk    r	|d         }n| j         j        d         d         }|| j         j        d<   || j         j        d<   |	                                | j         j
        d	<   g S )
Nr  r   z=C++ namespace pop on empty stack. Defaulting to global scope.rG  r  ri  r  r  rp  )rc  r  r  rL  rI  rJ  r  r   r  ry  r  )r6  r  r0  s      r7  r  zCPPNamespacePopObject.run  s    "&&'<dCC 	E

a 	NNZ$($5$5$7$7  9 9 9EEIIKKKu::> 	?2YFFX(/>F28./4901171F1F1H1H-.	r9  Nr  rB  r9  r7  r  r     s\         K $ K   T$Z      r9  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  aliasOptionsrc  r   	parentKeyr{   c                 *   t                                                       || _        || _        |Vd|j        vr9|j        d         d         }||j        d<   |                                |j        d<   |j        d         | _        d S |J || _        d S )Nr  ri  r  rp  )	r  r8  r  r  r  r  ry  r  r  )r6  r  r  rc  r  r  r  s         r7  r8  zAliasNode.__init__  s     	( 	'"#-7 J~e,];5912484G4G4I4I 01 _-=>DNNN(((&DNNNr9  c                 R    |                      | j        | j        d | j                  S )N)rc  r  )r  r  r  r  r<  s    r7  copyzAliasNode.copy*  s0    ~~dh(9"&$.  B B 	Br9  r  )r{   r  )	r>  r?  r@  rA  r  r  r8  r  rm  rn  s   @r7  r  r    s        +/(,' 'C 't '('%'15' ' ' ' ' ' B B B B B B B Br9  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 )AliasTransformrU  r   maxdepthskipThisr  renderOptionsr  r{   c           	         |dk    rd}n|dk    rd}n|dz  }d}g }|sGt          j        dd          }	 |j        |	           |j                            |	d| j        |           |r|r|}
nXt          j                    }t          j                    }|                    |           ||_        d|d<   d	x|d
<   |d<   d|d<   |}
|j	        D ]I}|j        
|j        j
        dv r|                     ||d|||          }|
                    |           J|s(t          |j                  dk    r |j        |           |S )Nr   TrU  Fr   r  ri  domainaliasr  desctypenoindex)r  r  r  r  r  r  r  )r   r   r{  r2  r  rc  desc_contentr6  r  r  r  _render_symbolr  rL  r  )r6  r   r  r  r  r  r  recurser   ra  childContainercontentr6  r  
childNodess                  r7  r  zAliasTransform._render_symbol2  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 !00X!-]% 1 ' '
 %%j1111 &DM 2 2a 7 &W%%%r9  kwargsNc           
         | j                             t                    D ]I}t          t          |          }|j        }|j        }	 t          ||| j        j                  }|	                                \  }}|
                                 n8# t          $ r+}t                              ||           d\  }}Y d }~nd }~ww xY w|Xt          j        |d          }	|	                                 |	t          j        ||          z  }	|                    |	           | j        j        d         j        d         }
|
                    |          }|sBt-          d|           t-          d|           t-          |
                    d	                     |sJ g }|rZt1          |t2                    sJ |}|j        }|j        r|j        j        }ng }|                    ||d
dddd          \  }}|g }nQt1          |t<                    sJ |}|j        }|                     |d
ddd          }||!                    |           d |D             }tE          |          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|                    |           Kd S )Nr  rG  r  r   ri  r  Target: ParentKey: rU  anyTF)r  r  r  r  r  r  r	  r  r  r  c                      g | ]}|j         	|S r5  )r2  rE  s     r7  r  z(AliasTransform.apply.<locals>.<listcomp>  s    GGGQQ]GqGGGr9  r   z,Can not find C++ declaration for alias '%s'.r  r  norootr	  )'r  findallr  r   r  r  rp  rc  ru  rs  r4  r)   rI  rJ  r   r   clearrz  replace_selfdomainsr  rX  r  r;  rl  r  r  r  r  r_  r3  r  re  r{  rL  r2  r  r  r  )r6  r  r}  r  r  r  r  isShorthandr   ra  r  r  r  nsr  r  
failReasonr  r   r   r  r  s                         r7  applyzAliasTransform.apply`  s   M)))44 R	) R	)D	4((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%%%%!!%((((eR	) R	)s   AB
C!B??C)r>  r?  r@  r#   default_priorityr1  ri   rF   r  r   r   r   r  r  rB  r9  r7  r   r   /  s        ):Q>, ,# , ,%),:>,!$,)-d, , , ,\S)c S)d S) S) S) S) S) S)r9  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  r{   c                 z   d| j         v r)| j                             dd          \  | _        | _        nd| j         c| _        | _        t	          j                    }| j        j        |_        | j        |d<   | j        x|d<   |d<   g | _        | j	        
                    dd          d| j	        v d	}|d         r:|d         dk    r.t                              d
|                                            |                                 }|D ],}|                    t!          ||| j                             -t	          j                    }|                    |           |                                  | j                            | j        | j        |           d| j        j        d<   |                                  |gS )a   
        On purpose this doesn't call the ObjectDescription version, but is based on it.
        Each alias signature may expand into multiple real signatures (an overload set).
        The code is therefore based on the ObjectDescription version.
        r  rU  r   r  r  r  r  r  r#  zError in C++ alias declaration. Requested 'noroot' but 'maxdepth' 1. When skipping the root declaration, need 'maxdepth' 0 for infinite or at least 2.rG  )rc  Nobject)r  splitr  r  r   r6  r  r  r  r  r  rI  rJ  r  get_signaturesr{  r  rc  r
  r  nested_parser  content_offsetr  r  )r6  r}  r  
signaturesr  contentnodes         r7  r  zCPPAliasObject.run  s    $) 	6(,	Q(?(?%DK(*DI%DK}
+X-1\9Y$z* "
((Q77$,.
 
 ! 	9l:&>!&C 	9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r9  N)r>  r?  r@  r   nonnegative_intr  r  r<   r  r   r   r  rB  r9  r7  r"  r"    s]         ./ K   
&T$Z & & & & & &r9  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 )	CPPXRefRolerc  refnodehas_explicit_titletitletargetr{   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_  rl  r  r   r   rU  r  r  r  )	
attributesupdater  r-   subrA  r  r  rfind)r6  rc  r/  r0  r1  r2  dcolons          r7  process_linkzCPPXRefRole.process_link  s   !!#/222! 	F '*=#e**EEE9& 	% & #%..*>*> #crc
t$$ %! 	/]]3''F RaRyC /abb	T**R< /!&1*++.Ef}r9  N)	r>  r?  r@  r   r   rF   rA  r
   r:  rB  r9  r7  r.  r.    s_         0 7 X\ ),16sCx     r9  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asCoder{   Nc                 l    t                                                       |r	d| _        d S d| _        d S )Nzcpp-exprz	cpp-texpr)r  r8  
class_type)r6  r=  r  s     r7  r8  zCPPExprRole.__init__  s9     	*(DOOO *DOOOr9  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 )Nrh  r  r  z!Unparseable C++ expression: %r
%srG  ri  )rt  r  r  rh  )rg  r  rp  r  ru  rw  r)   rI  rJ  r   desc_inliner?  rc  r  r  r  r  )r6  rg  r  r  r  r  ra  s          r7  r  zCPPExprRole.run  sg   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 	E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@  rF   r8  r
   r   r   r   r  rm  rn  s   @r7  r<  r<    sy        *t * * * * * * *U4:tN';;<        r9  r<  c                      e Zd ZdZdZdZ e ed          dddd           e ed          ddd           e ed	          d
dd           e ed          ddd           e ed          dd           e ed          dd           e ed          ddd           e ed          dd           e ed          ddd           e ed          ddddddd          d
Zi de	de	de
d	ededededededededededededeZ e             e             e             e             ed           e             e             e             e             e             e             ed           ed          dZ eddddddd          i dZ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.
    ri  rr  rN   r   rI  r  r   r  funcr  rg  rP   r^   r  zfunction parameterr}  )
rN   r   r  r  r  rP   r^   r  r  r  r  r  rl   znamespace-pushznamespace-popr  T)
fix_parens)r=  F)r  rN   r   r   rD  r  rg  r  rP   r^   r  r4  texprN)r  r  r  r{   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  rU  z	before endz	after:z
	after endzclear_doc end:r  )r1  rk  r  r  r;  r  r'  items)r6  r  r  r  nDocnames        r7  r  zCPPDomain.clear_docj  s,   ! 	",(((+$)M*//22333.!!!Y}-
W%%%! 	-*$)M*//22333-   "G,,,"49W#5#;#;#=#=>> 	- 	-ND(7" -Ig&t,	- 	-r9  rc  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:)r1  rk  r  r  r;  )r6  rc  r  r  s       r7  process_doczCPPDomain.process_doc}  sa    ! 	/.'***$)M*//22333$g.....	/ 	/r9  r  c                 N    |j                             | j        j                   d S r5  )r5  r6  rc  r  )r6  r  s     r7  process_field_xrefzCPPDomain.process_field_xref  s$     455555r9  r?  	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  rU  z		self endz	other:z
	other endr  z	result:z	result endzmerge_domaindata end)r1  rk  r  r  r;  rK  rc  rH  )r6  r?  rN  ourNamesr  r  s         r7  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.!!!()))))		* 	*r9  fromdocnamebuilderr  r2  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  rD  r   r  r   r{   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  rD  r4  r  )rp  ru  rs  r)   )r   parser2rr  rc  r}  r2  r  s      r7  findWarningz2CPPDomain._resolve_xref_inner.<locals>.findWarning  s    %< %C6M %!19$*6#2#;4825*> > >+--////& + + +!#2#;?******+ qy s   A 
A'A"A'"A'z&Unparseable C++ cross-reference: %r
%srG  r  rp  r  r  r  rU  T)r  r  r  r	  rI  r^  r   r  zstd::rW  cpp:r   c                  x    dk    rdS                                } | r| v S t          dd           J )Nr  TzType is z, declaration type is )objtypes_for_roler  )objtypesdeclTypr6  r  s    r7  	checkTypez0CPPDomain._resolve_xref_inner.<locals>.checkType  sZ    e| t--c22H +(**E###wwGHHHLr9  zcpp:%s targets a %s (%s).r  refexplicitFr  r  rD  z
operator()rr   r4  )+rp  ru  rs  r)   r|  r
   rA  rI  rJ  r  r  rX  r  r;  rl  r  r  r  r  r  rL  r  r_  r   r3  r  re  r2  r  r  rF   r  r`  r  r  r   rA  add_function_parenthesesr  r   r  r;   r  )$r6  rc  rR  rS  r  r2  r}  rT  r  r  r  r   rX  r   r  r  r  r  r  r  r  r	  r  r  r   r  txtNamer^  r2  fullNestedNamedisplayNamer  r1  addParenr  r]  s$   ``  ```                            @r7  _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
  	,& 4!%?? 4 $CIIs333 AJc>22222D9D--dC@D8<D . R RA  	 	$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 *k6LPZ6Z * *z: &se| & A
; &v &!NN<88& A. &!NN:66&'00>>& !A z: *%< 3K,@,@,F,F 3$MHH F] 3$~~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 rK  )re  )r6  rc  rR  rS  r  r2  r}  rT  s           r7  resolve_xrefzCPPDomain.resolve_xref4  s7     ''['3(.h@ @@AC 	Cr9  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:templateParamrY  )r$   suppress_loggingre  role_for_objtype)	r6  rc  rR  rS  r2  r}  rT  retnoder  s	            r7  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/) 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  rU  )
r  r  r2  r  r  rA  r  r`  r  r  )	r6  r  r0  rb  r  dispnamer  r  r  s	            r7  get_objectszCPPDomain.get_objectsG  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r9  c                 N   |                     dd           }|d S |                     dd           }|t          |j                  dk    rd S | j        d         }|                    |          }|                                }d                    t          |          |g          S )Nrm  rp  r   r  r  )r  rL  r  rX  r  r  rA  )r6  r}  r2  r  r  r  
parentNames          r7  get_full_qualified_namez!CPPDomain.get_full_qualified_nameU  s    +t,, 	4#xx(8$??	 	IN 3 3q 8 	4Y}-
!//	::!6688
yy#j//62333r9  )1r>  r?  r@  r  r  r  r   r   object_typesr  r  r  r  r  r  r  r  r  r  r  r"  r   r.  r<  rolesr1  initial_datarA  r  r   r   r  rK  r   rM  r   r   rQ  r   r   r
   r	   re  rg  rl  r   ri   ro  rr  rB  r9  r7  rC  rC  $  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 4r9  rC  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  rc  rv  ry  cpp_debug_lookupFr   cpp_debug_show_treec                     | j         j        t          _        | j         j        t          _        | j         j                            d           d S )NT)r  )ru  rx  r1  r  ry  rk  r  sort)rv  s    r7  	initStuffzsetup.<locals>.initStuffn  s>    !j9!$!?
*///=====r9  zbuilder-initedbuiltin   T)rR  env_versionparallel_read_safeparallel_write_safe)
add_domainrC  add_config_valueadd_post_transformr   connect)rv  r|  s     r7  setupr  c  s    NN92B>>>,b%888/U;;;>*** +UB777.r:::> > > KK ),,, "#	  r9  )r  r  typingr   r   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/   r0   r1   r2   r3   r4   r5   r6   r7   sphinx.util.docfieldsr8   r9   sphinx.util.docutilsr:   sphinx.util.nodesr;   sphinx.util.typingr<   	getLoggerr>  rI  r=   r  r  Sr  r?  r  r  r  r
  r  r  r  r  rJ  r  r/  r  r)  rA  r  r  r  r  r  r|  r/  rD  rH  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(  r1  r  rF  rR  rZ  rc  r  ry  r}  r  r  r  r  r  r  r  r  r  r  r	  r   r<  rI  rn  r  r  r  r  r  r  r  r  r  r   r
  r  r  r"  r)  r1  r7  r>  rG  rZ  rf  r\  r  r  r  r  r3  r  r  r  r1  rp  rz  r|  r  r  r  r  r  r  r  r  r  r  r  r  r   r"  r.  r<  rC  r  rB  r9  r7  <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 ; ; ;()3 )3 )3 )3 )31 )3 )3 )3X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\eA eA eA eA eA} eA eA eAP@A @A @A @A @A} @A @A @AF8A 8A 8A 8A 8A] 8A 8A 8Av`A `A `A `A `A- `A `A `AF@I @I @I @I @I @I @I @IL? ? ? ? ?= ? ? ?"; ; ; ; ;+ ; ; ;4H H H H HW H H H.mA mA mA mA mAg mA mA m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N*B *B *B *B *B. *B *B *BZ8< 8< 8< 8< 8< 8< 8< 8<|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 ] ] ]8A A A A A A A A"_D _D _D _D _DW _D _D _DD    7   ) ) ) ) ) ) ) )       ] ] ] ] ] ] ] ]@zG zG zG zG zGz zG zG zGz=7 7 7 7 7
`C `C `C `C `C!.1 `C `C `CF    I       y       i       	   $    Y       Y       I       )   ! ! ! ! ! ! ! !H    _   @    O   2B B B B B B B B,D) D) D) D) D)_ D) D) D)N, , , , ,& , , ,^    (   <    *   B|4 |4 |4 |4 |4 |4 |4 |4~	v $sCx.      r9  