o
    N iÁX ã                   @  sH  d dl mZ d dlZd dlmZmZ d dlmZmZm	Z	m
Z
mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZOmPZPmQZQmRZRmSZSmTZTmUZUmVZVmWZWmXZXmYZYmZZZm[Z[m\Z\m]Z]m^Z^m_Z_m`Z`maZa d dlbmcZcmdZdmeZemfZfmgZgmhZhmiZimjZjmkZkmlZlmmZm d dlnmoZo d dlpmqZqmrZrmsZsmtZtmuZumvZvmwZwmxZxmyZymzZzm{Z{m|Z|m}Z} erd dl~mZm€Z€ eo e‚¡ZƒG d	d
„ d
erƒZ„dS )é    )ÚannotationsN)ÚTYPE_CHECKINGÚAny)[ÚASTAlignofExprÚASTArrayÚASTAssignmentExprÚASTBaseClassÚASTBinOpExprÚASTBooleanLiteralÚASTBracedInitListÚASTCastExprÚASTCharLiteralÚASTClassÚASTCommaExprÚ
ASTConceptÚASTConditionalExprÚASTDeclarationÚASTDeclaratorÚASTDeclaratorMemPtrÚASTDeclaratorNameBitFieldÚASTDeclaratorNameParamQualÚASTDeclaratorParamPackÚASTDeclaratorParenÚASTDeclaratorPtrÚASTDeclaratorRefÚASTDeclSpecsÚASTDeclSpecsSimpleÚASTDeleteExprÚASTEnumÚASTEnumeratorÚASTExplicitCastÚASTExplicitSpecÚASTExpressionÚASTFallbackExprÚASTFoldExprÚASTFunctionParameterÚASTIdentifierÚASTIdExpressionÚASTInitializerÚ
ASTLiteralÚASTNamespaceÚASTNestedNameÚASTNestedNameElementÚ
ASTNewExprÚASTNoexceptExprÚASTNoexceptSpecÚASTNumberLiteralÚASTOperatorÚASTOperatorBuildInÚASTOperatorLiteralÚASTOperatorTypeÚASTPackExpansionExprÚASTParametersQualifiersÚASTParenExprÚASTParenExprListÚASTPointerLiteralÚASTPostfixArrayÚASTPostfixCallExprÚASTPostfixDecÚASTPostfixExprÚASTPostfixIncÚASTPostfixMemberÚASTPostfixMemberOfPointerÚASTPostfixOpÚASTRequiresClauseÚASTSizeofExprÚASTSizeofParamPackÚASTSizeofTypeÚASTStringLiteralÚASTTemplateArgConstantÚASTTemplateArgsÚASTTemplateDeclarationPrefixÚASTTemplateIntroductionÚ ASTTemplateIntroductionParameterÚ ASTTemplateKeyParamPackIdDefaultÚASTTemplateParamÚ'ASTTemplateParamConstrainedTypeWithInitÚASTTemplateParamNonTypeÚASTTemplateParamsÚASTTemplateParamTemplateTypeÚASTTemplateParamTypeÚASTThisLiteralÚASTTrailingTypeSpecÚASTTrailingTypeSpecDecltypeÚASTTrailingTypeSpecDecltypeAutoÚASTTrailingTypeSpecFundamentalÚASTTrailingTypeSpecNameÚASTTypeÚ	ASTTypeIdÚASTTypeUsingÚASTTypeWithInitÚASTUnaryOpExprÚASTUnionÚASTUserDefinedLiteral)Ú_expression_assignment_opsÚ_expression_bin_opsÚ_expression_unary_opsÚ_fold_operator_reÚ_id_explicit_castÚ	_keywordsÚ_operator_reÚ_simple_type_specifiers_reÚ
_string_reÚ_visibility_reÚudl_identifier_re)Úlogging)ÚASTAttributeListÚ
BaseParserÚDefinitionErrorÚ$UnsupportedMultiCharacterCharLiteralÚ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)ÚCallableÚSequencec                   @  s   e Zd Zed«dd„ƒZed¬dd„ƒZed¬dd	„ƒZd«d
d„Zd­dd„Zd®dd„Z	d¯dd„Z
d°dd„Zd±dd„Zd²dd „Zd³d"d#„Zd´d%d&„Zdµd(d)„Zd¯d*d+„Zd¯d,d-„Zd¶d0d1„Zd·d4d5„Zd¶d6d7„Zd¶d8d9„Zd¯d:d;„Z	<d¸d¹dBdC„ZdºdEdF„Zd»dHdI„Zd¼d½dMdN„Zd¾dPdQ„Zd¿dSdT„ZdÀdWdX„ZdÁd\d]„Zd¸dÂd_d`„Z dÃddde„Z!	<d¸dÄdgdh„Z"dÅdÆdmdn„Z#dÇdÈdpdq„Z$dÉdsdt„Z%dÊdvdw„Z&dËdydz„Z'dÌd|d}„Z(dÍdd€„Z)dÎd‚dƒ„Z*dÏd…d†„Z+dÐdˆd‰„Z,dÑd‹dŒ„Z-dÒdŽd„Z.dÓd‘d’„Z/dÔd•d–„Z0	Jd¼dÕdœd„Z1dÖd d¡„Z2d×d£d¤„Z3dØd¦d§„Z4dÙd©dª„Z5diS )ÚÚDefinitionParserÚreturnÚstrc                 C  s   dS )NzC++© ©Úselfr~   r~   úN/home/ubuntu/.local/lib/python3.10/site-packages/sphinx/domains/cpp/_parser.pyÚlanguageˆ   s   zDefinitionParser.languageúSequence[str]c                 C  ó   | j jS ©N)ÚconfigÚcpp_id_attributesr   r~   r~   r   Úid_attributesŒ   ó   zDefinitionParser.id_attributesc                 C  r„   r…   )r†   Úcpp_paren_attributesr   r~   r~   r   Úparen_attributes   r‰   z!DefinitionParser.paren_attributesc                 C  sŒ   | j dkrd S | j}|  jd7  _d}	 | jr|  d¡ n| j dkr,|s,|  jd7  _n| j dkr4d}nd}|  jd7  _q| j|| j… S )Nú"é   FTz$Unexpected end during inside string.ú\)Úcurrent_charÚposÚeofÚfailÚ
definition)r€   ÚstartPosÚescaper~   r~   r   Ú_parse_string”   s"   

özDefinitionParser._parse_stringr)   c              
     sŠ  d‡ fdd„}ˆ   ¡  ˆ  d¡rtƒ S ˆ  d¡rtdƒS ˆ  d	¡r%td
ƒS ˆ j}ˆ  t¡rDˆ  t¡}tˆ j	|ˆ j… ƒ}|r@|S ||ƒS t
tttfD ]"}ˆ  |¡rlˆ  t¡}tˆ j	|ˆ j… ƒ}|rf|  S ||ƒ  S qJˆ  ¡ }|d ur{|t|ƒƒS ˆ  t¡rÃˆ j d¡}ˆ j d¡}	z
t||	ƒ}
W ||
ƒS  ty² } zˆ  d| ¡ W Y d }~||
ƒS d }~w tyÂ   ˆ  d¡ Y ||
ƒS w d S )NÚliteralr)   r|   c                   s"   ˆ   t¡s| S tˆ jƒ}t| |ƒS r…   )Úmatchrj   r&   Úmatched_textr_   )r—   Úidentr   r~   r   Ú_udl°   s   


z-DefinitionParser._parse_literal.<locals>._udlÚnullptrÚtrueTÚfalseFr   é   z8Can not handle character literal. Internal error was: %szJCan not handle character literal resulting in multiple decoded characters.)r—   r)   r|   r)   )Úskip_wsÚ	skip_wordr9   r
   r   r˜   rr   rs   r0   r“   rp   rt   rv   rx   rw   r–   rF   rq   Ú
last_matchÚgroupr   ÚUnicodeDecodeErrorr’   ro   )r€   r›   r   Ú	hasSuffixÚfloatLitÚregexÚintLitÚstringÚprefixÚdataÚcharLitÚer~   r   r   Ú_parse_literal§   sV   	




ÿ

ú
û€ýýzDefinitionParser._parse_literalúASTExpression | Nonec                 C  sÐ  | j dkrd S |  jd7  _|  ¡  |  d¡r8|  t¡s!|  d¡ | j}|  ¡ }|  	d¡s2|  d¡ t
d ||ƒS | j}z)|  ¡  |  ¡ }|  ¡  |  t¡sR|  d¡ | j}|  ¡  |  d¡sc|  d¡ W nG ty« } z;|| _z|  ¡ }|  ¡  |  	d¡s‚|  d	¡ W n tyœ } z|  |d
f|dfgd¡|‚d }~ww t|ƒW  Y d }~S d }~ww |  	d¡r·t
||d ƒS |  t¡sÁ|  d¡ || jkrÐ|  d|| jf ¡ |  ¡ }|  ¡  |  	d¡sâ|  d¡ t
|||ƒS )Nú(r   ú...z6Expected fold operator after '...' in fold expression.ú)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.z6Operators are different in binary fold: '%s' and '%s'.z+Expected ')' to end binary fold expression.)r   r   r    Úskip_string_and_wsr˜   rc   r’   r™   Ú_parse_cast_expressionÚskip_stringr$   rn   Ú_parse_expressionÚ_make_multi_errorr7   )r€   ÚopÚ	rightExprr   ÚleftExprÚeFoldÚresÚeExprr~   r~   r   Ú_parse_fold_or_paren_expressionã   sv   









€

€þýý€ÿ€ó



ÿ

z0DefinitionParser._parse_fold_or_paren_expressionr"   c                 C  sd   |   ¡  |  ¡ }|d ur|S |   ¡  |  d¡rtƒ S |  ¡ }|d ur$|S |  ¡ }|d ur0t|ƒS d S )NÚthis)r    r®   r¡   rS   r¾   Ú_parse_nested_namer'   )r€   r¼   Únnr~   r~   r   Ú_parse_primary_expression  s   
z*DefinitionParser._parse_primary_expressionÚnameÚopenÚcloseú4tuple[list[ASTExpression | ASTBracedInitList], bool]c                 C  sä   |   ¡  |  |¡sdS |  |¡rg dfS g }d}	 |   ¡  |  ¡ }|   ¡  |  d¡r2| t|ƒ¡ n| |¡ |   ¡  |  |¡rE	 ||fS |  d¡sV|  d|› d|› d¡ | j|  krad	krqn n|  jd
7  _d}	 ||fS q)N)NNFTr±   ú,z	Error in z, expected ',' or 'z'.Ú}r   )	r    r³   rµ   Ú_parse_initializer_clauseÚappendr5   r’   r   r   )r€   rÃ   rÄ   rÅ   ÚexprsÚtrailingCommaÚexprr~   r~   r   Ú_parse_initializer_list5  s4   





úïz(DefinitionParser._parse_initializer_listr8   c                 C  s&   |   ddd¡\}}|d u rd S t|ƒS )Nzparenthesized expression-listr°   r²   )rÎ   r8   ©r€   rË   rÌ   r~   r~   r   Ú_parse_paren_expression_listV  s   ÿz-DefinitionParser._parse_paren_expression_listú!ASTExpression | ASTBracedInitListc                 C  s    |   ¡ }|d ur
|S | jddS ©NF©Ú
inTemplate)Ú_parse_braced_init_listÚ_parse_assignment_expression)r€   ÚbracedInitListr~   r~   r   rÉ   c  s   z*DefinitionParser._parse_initializer_clauser   c                 C  s(   |   ddd¡\}}|d u rd S t||ƒS )Nzbraced-init-listÚ{rÈ   )rÎ   r   rÏ   r~   r~   r   rÕ   i  s   
z(DefinitionParser._parse_braced_init_listú$ASTParenExprList | ASTBracedInitListc                 C  s   |   ¡ }|d ur
|S |  ¡ S r…   )rÐ   rÕ   )r€   Úparenr~   r~   r   Ú*_parse_expression_list_or_braced_init_listq  s   z;DefinitionParser._parse_expression_list_or_braced_init_listr=   c                   s>  d }d }ˆ   ¡  d }tD ]}ˆ  |¡r|} nq|d urpd}ˆ  d¡s*ˆ  d| ¡ ˆ  d¡}ˆ   ¡  ˆ  d¡s?ˆ  d| ¡ ˆ  d¡sKˆ  d| ¡ d.‡ fdd„}ˆ  dg|¡}ˆ   ¡  ˆ  d¡siˆ  d| ¡ t|||ƒ}nýˆ  d¡rþd}ˆ  d¡sˆ  d¡ ˆ j	}zˆ  d¡}t
|dd}ˆ  d¡sšˆ  d¡ W nÑ tyý }	 zV|ˆ _	z d.‡ fdd„}ˆ  dg|¡}t
|dd}ˆ  d¡sÅˆ  d¡ W n, tyò }
 z |ˆ _	d}|d7 }g }| |	df¡ | |
df¡ ˆ  ||¡|
‚d }
~
ww W Y d }	~	ntd }	~	ww ˆ j	}zˆ  ¡ }d}W nc tyl } zV|ˆ _	zˆ  dd¡}d}ˆ   ¡  ˆ jdkr3ˆ jdkr3ˆ  d¡ W n- tya } z |ˆ _	d}|d 7 }g }| |d!f¡ | |df¡ ˆ  ||¡|‚d }~ww W Y d }~nd }~ww g }	 ˆ   ¡  |d"v rˆ  d#¡r›ˆ  ¡ }ˆ   ¡  ˆ  d$¡s’ˆ  d%¡ | t|ƒ¡ qoˆ  d&¡rÊˆ  d'¡r¯ˆ  j	d(8  _	nˆ  d)¡r½ˆ  j	d*8  _	nˆ  ¡ }| t|ƒ¡ qoˆ  d+¡rëˆ  d'¡rÞˆ  j	d*8  _	nˆ  ¡ }| t|ƒ¡ qoˆ  d,¡rù| tƒ ¡ qoˆ  d-¡r| tƒ ¡ qoˆ  ¡ }|d ur| t|ƒ¡ qo	 t||ƒS )/NÚcastú<zExpected '<' after '%s'.Fú>z Expected '>' after type in '%s'.r°   zExpected '(' in '%s'.r|   r"   c                     ó   ˆ   ¡ S r…   ©r¶   r~   r   r~   r   Úparser£  ó   z:DefinitionParser._parse_postfix_expression.<locals>.parserr²   zExpected ')' to end '%s'.ÚtypeidzExpected '(' after 'typeid'.T)ÚisTypez%Expected ')' to end 'typeid' of type.c                     rß   r…   rà   r~   r   r~   r   rá   ¸  râ   z+Expected ')' to end 'typeid' of expression.zError in 'typeid(...)'.z Expected type or expression.úIf typeúIf expressionrÍ   ÚoperatorCastÚtypeOperatorCastrØ   z3Expecting '(' or '{' after type in cast expression.zError in postfix expression,z% expected primary expression or type.zIf primary expression)rÍ   rÜ   rã   ú[ú]z*Expected ']' in end of postfix expression.Ú.Ú*rŸ   z..é   ú->z++z--©r|   r"   )r    rd   Úskip_word_and_wsrµ   r’   Ú_parse_typer³   Ú_parse_expression_fallbackr    r   rZ   rn   rÊ   r·   rÂ   r   r¶   r:   rÀ   r?   r@   r>   r<   rÛ   r;   r=   )r€   Ú
prefixTyperª   rÜ   ÚcÚtyprá   rÍ   r   ÚeTyper½   ÚheaderÚerrorsÚeOuterÚeInnerÚ	postFixesrÃ   Úlstr~   r   r   Ú_parse_postfix_expressiony  sî   
þ










€

€€ù€ö
€€ù€ò



z*DefinitionParser._parse_postfix_expressionc                 C  sŽ  |   ¡  tD ] }|d dv r|  |¡}n|  |¡}|r&|  ¡ }t||ƒ  S q|  d¡r|  d¡r\|  d¡s;|  d¡ |  	t
¡sE|  d¡ t| jƒ}|   ¡  |  d¡sX|  d	¡ t|ƒS |  d¡ry| jd
d}|   ¡  |  d¡su|  d¡ t|ƒS |  ¡ }t|ƒS |  d¡r¨|  d¡s|  d¡ | jd
d}|   ¡  |  d¡s¤|  d¡ t|ƒS |  d¡rÍ|  d¡s·|  d¡ |  ¡ }|   ¡  |  d¡sÉ|  d¡ t|ƒS | j}|  d¡}|   ¡  |  d¡sâ|| _n/d}|  d¡rî|  d¡ |rþ| jd d}	| jd
dd}
n|  d¡ |  ¡ }t||t|	|
ƒ|ƒS | j}|  d¡}|   ¡  |  d¡s*|| _|  ¡ S |  d¡}|r=|  d¡s=|  d¡ |  ¡ }t|||ƒS )Nr   ÚcnÚsizeofr±   r°   z Expecting '(' after 'sizeof...'.z%Expecting identifier for 'sizeof...'.r²   z!Expecting ')' to end 'sizeof...'.F©ÚnamedzExpecting ')' to end 'sizeof'.ÚalignofzExpecting '(' after 'alignof'.zExpecting ')' to end 'alignof'.ÚnoexceptzExpecting '(' after 'noexcept'.ú Expecting ')' to end 'noexcept'.ú::ÚnewTzYSorry, neither new-placement nor parenthesised type-id in new-epression is supported yet.©Úouter©r  Ú	paramModezASorry, parenthesised type-id in new expression not yet supported.Údeleteré   rê   z(Expected ']' in array delete-expression.)r    rb   r¡   rµ   r´   r]   rð   r³   r’   r˜   ru   r&   r™   rD   rñ   rE   Ú_parse_unary_expressionrC   r   r¶   r.   r   Ú_parse_decl_specsÚ_parse_declaratorrÛ   r-   rY   r   rý   )r€   r¸   r¼   rÍ   rš   rõ   r   ÚrootedÚisNewTypeIdÚ	declSpecsÚdeclrü   Úarrayr~   r~   r   r    sŠ   
þ




























û
z(DefinitionParser._parse_unary_expressionc                 C  sÐ   | j }|  ¡  |  d¡rdz|  d¡}|  d¡s|  d¡ |  ¡ }t||ƒW S  tyc } z2|| _ z|  ¡ W W  Y d }~S  ty^ } zg }| 	|df¡ | 	|df¡ |  
|d¡|‚d }~ww d }~w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   rn   r  rÊ   r·   )r€   r   rõ   rÍ   ÚexCastÚexUnaryÚerrsr~   r~   r   r´   m  s6   



ÿÿ€ü€üz'DefinitionParser._parse_cast_expressionrÔ   Úboolc                   s   d‡ fd	d
„‰ ˆ | d|dS )Nr€   r{   ÚopIdÚintrÔ   r  r|   r"   c           
   	     s   ˆ d t tƒkrd‡fdd„}n	d‡‡ ‡fdd„}g }g }| ||d	¡ 	 ˆ ¡  |r2ˆjdkr2nYˆj}d}tˆ  D ]K}|d dv rJˆ |¡sIq;nˆ |¡sPq;|ˆj  kr[dkrfn n	ˆ jd8  _ n!z||d	}	| |	¡ | |¡ d
}W  n ty†   |ˆ_Y q;w |sŠnq&t	||ƒS )Nr   rÔ   r  r|   r"   c                   rß   r…   )r´   rÓ   r   r~   r   rá   ”  râ   zYDefinitionParser._parse_logical_or_expression.<locals>._parse_bin_op_expr.<locals>.parserc                   s   ˆ ˆˆd | dS )Nr   rÓ   r~   rÓ   )Ú_parse_bin_op_exprr  r€   r~   r   rá   —  s   rÓ   TrÞ   Fr   Úabcnoxú&©rÔ   r  r|   r"   )
Úlenra   rÊ   r    r   r   r¡   rµ   rn   r	   )
r€   r  rÔ   rá   rË   Úopsr   ÚoneMorer¸   rÍ   ©r  )r  r€   r   r  ‘  sF   
ÿ




ÿå
zIDefinitionParser._parse_logical_or_expression.<locals>._parse_bin_op_exprr   rÓ   )r€   r{   r  r  rÔ   r  r|   r"   r~   )r€   rÔ   r~   r!  r   Ú_parse_logical_or_expression…  s   (z-DefinitionParser._parse_logical_or_expressionÚ
orExprHeadúASTConditionalExpr | Nonec                 C  sP   |   ¡  |  d¡sd S |  ¡ }|   ¡  |  d¡s|  d¡ |  |¡}t|||ƒS )Nú?ú:z=Expected ":" after then-expression in conditional expression.)r    rµ   r¶   r’   rÖ   r   )r€   r#  rÔ   ÚthenExprÚelseExprr~   r~   r   Ú"_parse_conditional_expression_tail»  s   



z3DefinitionParser._parse_conditional_expression_tailc                 C  sn   | j |d}|  ||¡}|d ur|S tD ] }|d dv r#|  |¡s"qn|  |¡s)q|  ¡ }t|||ƒ  S |S )NrÓ   r   Úanox)r"  r)  r`   r¡   rµ   rÉ   r   )r€   rÔ   rº   ÚcondExprr¸   r¹   r~   r~   r   rÖ   Ê  s   
ÿ
z-DefinitionParser._parse_assignment_expressionc                 C  s(   | j |d}|  ||¡}|d ur|S |S ©NrÓ   )r"  r)  )r€   rÔ   ÚorExprr+  r~   r~   r   Ú_parse_constant_expressioné  s
   z+DefinitionParser._parse_constant_expressionc                 C  sT   | j ddg}	 |  ¡  |  d¡sn
| | j dd¡ qt|ƒdkr&|d S t|ƒS )NFrÓ   TrÇ   r   r   )rÖ   r    rµ   rÊ   r  r   )r€   rË   r~   r~   r   r¶   ó  s   
üz"DefinitionParser._parse_expressionTÚendú	list[str]rá   úCallable[[], ASTExpression]Úallowc           
   
   C  sB  | j }z|ƒ W S  ty) } z|r| js‚ |  d| ¡ || _ W Y d }~nd }~ww |d us0J ‚|  ¡  | j }|  t¡r@| j}n[dddddœ}g }	| jst	|	ƒdkrX| j
|v rXn)| j
|v rf|	 || j
 ¡ nt	|	ƒdkrw| j
|	d krw|	 ¡  |  j d	7  _ | jrLt	|ƒdkr‘| jr‘|  d
| ¡ | j|| j …  ¡ }t| ¡ ƒS )NzBParsing of expression failed. Using fallback parser. Error was:
%sr²   rÈ   rê   rÞ   )r°   rØ   ré   rÝ   r   éÿÿÿÿr   z0Could not find end of expression starting at %d.)r   rn   ÚallowFallbackExpressionParsingÚwarnr    r˜   rh   r™   r‘   r  r   rÊ   Úpopr’   r“   Ústripr#   )
r€   r/  rá   r2  ÚprevPosr­   r”   ÚvalueÚbracketsÚsymbolsr~   r~   r   rò     sD   
ÿ€ù	

ùÿz+DefinitionParser._parse_expression_fallbackr1   c                 C  sÈ   |   ¡  |  t¡rt| jƒS dD ],}|  |¡sq|   ¡  |  d¡r7|   ¡  |  d¡s3|  d| d ¡ |d7 }t|ƒ  S |  d¡rY|   ¡  |  t¡sP|  d¡ t	| jƒ}t
|ƒS | jd	d
d}t|ƒS )N)r  r  ré   rê   zExpected "]" after  "operator z["z[]z""z%Expected user-defined literal suffix.Frç   ©r  r  )r    r˜   rf   r2   r™   r¡   rµ   r’   ru   r&   r3   rñ   r4   )r€   r¸   Ú
identifierÚtyper~   r~   r   Ú_parse_operator-  s*   








z DefinitionParser._parse_operatorrH   c                 C  sÎ  |   ¡  |  d¡sd S |  d¡rtg dƒS g }g }d}	 | j}d}d}z:| jdd}|   ¡  |  d¡rBd}d}|  d¡sA|  d¡ n|  d¡rJd}n|  d	¡rRd}n|  d
¡ | |¡ W nx tyÕ } zl| |df¡ || _z<| j	dd}	|   ¡  |  d¡rŽd}d}|  d¡s|  d¡ n|  d¡r–d}n|  d	¡ržd}n|  d
¡ | t
|	ƒ¡ W n tyÊ } z|| _| |df¡ d}
|  ||
¡|‚d }~ww W Y d }~nd }~ww |rÝ|rÜJ ‚n|ráJ ‚qt||ƒS )NrÝ   rÞ   Fr   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µ   rH   r   rñ   r’   rÊ   rn   r.  rG   r·   )r€   Ú
prevErrorsÚtemplateArgsÚpackExpansionr   ÚparsedCommaÚ	parsedEndr>  r­   r9  r÷   r~   r~   r   Ú_parse_template_argument_listM  sz   





€





€


€üÿ€ïÓ
.z.DefinitionParser._parse_template_argument_listFÚmemberPointerr+   c              
   C  sJ  g }g }|   ¡  d}|  d¡rd}	 |   ¡  t|ƒdkr"|  d¡}nd}| |¡ d }|  d¡r5|  ¡ }n)|  t¡sL|rGt|ƒdkrG| ¡  nX|  	d¡ | j
}|tv rZ|  	d	| ¡ t|ƒ}| j}z|  ¡ }	W n ty„ }
 z|| _d }	| j |
¡ W Y d }
~
nd }
~
ww | t||	ƒ¡ |   ¡  |  d¡sž|r|  	d
¡ nqt|||ƒS )NFr  Tr   r   ÚtemplateÚoperatorz#Expected identifier in nested name.z3Expected identifier in nested name, got keyword: %sz.Expected '::' in pointer to member (function).)r    rµ   r  rð   rÊ   r?  r˜   ru   r6  r’   r™   re   r&   r   rE  rn   ÚotherErrorsr,   r+   )r€   rF  ÚnamesÚ	templatesr  rG  Ú	identOrOpr=  r   rA  Úexr~   r~   r   rÀ     sV   





ÿ€ý

Û&z#DefinitionParser._parse_nested_namerW   c           	      C  s8  d }d }g }d }g }|   ¡  |  t¡rª| j}| |¡ |dv r2|d ur/|  d|› d|› d¡ |}no|dv rI|d urF|  d|› d|› d¡ |}nX|dkrgt|ƒdkra|  d|› d|d › d¡ | |¡ n:|dkr‹t|ƒdkr…|d dkr…|  d|› d|d › d¡ | |¡ n|d	v r¡|d urŸ|  d|› d|› d¡ |}|   ¡  |  t¡st|ƒdkr²d S |d
v rí|d urÆ|  d|› d|› d¡ |d urÖ|  d|› d|› d¡ t|ƒdkrë|  d|› dd |¡› d¡ n|dkr|d ur|  d|› d|› d¡ t|ƒdkr|  d|› dd |¡› d¡ nØ|dkr1|d ur0|  d|› d|› d¡ nÁ|dv r^|d urG|  d|› d|› d¡ t|ƒdkr]|  d|› dd |¡› d¡ n”|dkr‹|d urt|  d|› d|› d¡ t|ƒdkrŠ|  d|› dd |¡› d¡ ng|dkrÕ|d ur¡|  d|› d|› d¡ t|ƒdkr·|  d|› dd |¡› d¡ t|ƒdkrÔ|d dkrÔ|  d|› dd |¡› d¡ n|d u ré|d urè|  d|› d¡ n	d|› }t|ƒ‚g }|d urþ| |¡ |d ur| |¡ | 	|¡ |d ur| |¡ t
||ƒS )N)ÚautoÚvoidr  ÚcharÚwchar_tÚchar8_tÚchar16_tÚchar32_tr  Ú__int64Ú__int128ÚfloatÚdoubleÚ	__float80Ú	_Float64xÚ
__float128Ú	_Float128zCan not have both z and rë   )ÚsignedÚunsignedÚshortr   Úlong)Ú
_ImaginaryÚ_Complex)rN  rO  r  rQ  rR  rS  rT  rY  rZ  r[  r\  ú rP  r  )rU  rV  rW  rX  r   zCan not have z without a floating point type.zUnhandled type )r    r˜   rg   r™   rÊ   r’   r  ÚjoinÚAssertionErrorÚextendrW   )	r€   ÚmodifierÚ
signednessÚwidthrõ   rJ  ÚtÚmsgÚ
canonNamesr~   r~   r   Ú_parse_simple_type_specifiers¿  s¬   


å€

€

€

€

€

€

€








z.DefinitionParser._parse_simple_type_specifiersrT   c                 C  s4  |   ¡  |  ¡ }|d ur|S |   ¡  |  d¡rI|  d¡s!|  d¡ |  d¡r3|  d¡s0|  d¡ tƒ S |  ¡ }|   ¡  |  d¡sE|  d¡ t|ƒS d }|   ¡  dD ]}|  |¡r\|} nqQ|  	¡ }|   ¡  d }|  
d¡rod}n%|  d¡r”|  d¡s~|  d	¡ |  d¡sˆ|  d
¡ |  d¡s’|  d¡ d}t|||ƒS )NÚdecltyper°   zExpected '(' after 'decltype'.rN  r²   z#Expected ')' after 'decltype(auto'.z%Expected ')' after 'decltype(<expr>'.)ÚclassÚstructÚenumÚunionÚtypenamez<Expected '(' after 'decltype' in placeholder type specifier.z@Expected 'auto' after 'decltype(' in placeholder type specifier.zAExpected ')' after 'decltype(auto' in placeholder type specifier.zdecltype(auto))r    rm  rð   r³   r’   rµ   rV   r¶   rU   rÀ   r¡   rX   )r€   r¼   rÍ   rª   ÚkÚ
nestedNameÚplaceholderTyper~   r~   r   Ú_parse_trailing_type_spec  sL   








þ







z*DefinitionParser._parse_trailing_type_specr
  úASTParametersQualifiers | Nonec                 C  s^  |dkrd S |   ¡  |  d¡s|dkr|  d¡ nd S g }|   ¡  |  d¡sp	 |   ¡  |  d¡rG| td dƒ¡ |   ¡  |  d¡sF|  d	¡ n)| jd d
d}| t|ƒ¡ |   ¡  |  d¡r_q&|  d¡ren|  d| j› d¡ q'|   ¡  |  d¡}|  d¡}|s…|  d¡}d }|  d¡rŽd}|s—|  d¡r—d}d }|   ¡  |  d¡rÃ|  d¡r¿|  	d¡}|   ¡  |  d¡sº|  d¡ t
|ƒ}nt
d ƒ}|   ¡  |  d¡rÓ| jdd}	nd }	|   ¡  |  d¡}
|  d¡}|
sê|  d¡}
|  ¡ }|   ¡  d }|dkr"|  d¡r"|   ¡  d}|D ]}|  |¡r|} nq|s"|  dd |¡ ¡ t||||||	|
|||ƒ
S )Nr  r°   Úfunctionz+Expecting "(" in parameters-and-qualifiers.r²   r   r±   Tz6Expected ")" after "..." in parameters-and-qualifiers.Úsingle©r  r  rÇ   z8Expecting "," or ")" in parameters-and-qualifiers, got "z".ÚconstÚvolatileú&&r  r  Fr  rî   r   ÚoverrideÚfinalú=)Ú0r  Údefaultz'Expected "%s" in initializer-specifier.z" or ")r    rµ   r’   rÊ   r%   Ú_parse_type_with_initr   rð   r³   r.  r/   rñ   Ú_parse_attribute_listrd  r6   )r€   r
  ÚargsÚargr|  r}  ÚrefQualÚexceptionSpecrÍ   ÚtrailingReturnr  r€  ÚattrsÚinitializerÚvalidÚwr~   r~   r   Ú _parse_parameters_and_qualifiersF  s¢   







ÿì












ÿþÿÿþz1DefinitionParser._parse_parameters_and_qualifiersr  Útypedr   c                 C  s  d}d}d}d}d}d}d}	d}
d}d}d}g }	 |   ¡  |s)|r)|  d¡}|r)q|s5|r5|  d¡}|r5q|s_|dv rK|  d¡rCd}q|  d¡rKd}q|dkrW|  d	¡rWd	}q|  d
¡r_d
}q|sm|dv rm|  d¡}|rmq|	s{|dv r{|  d¡}	|	r{q|dkr“|
s‰|  d¡}
|
r‰q|s“|  d¡}|r“q|dkrå|s¡|  d¡}|r¡q|s«|  d¡}|r«q|sµ|  d¡}|rµq|så|  d¡}|råd}|  d¡rà| jdd}|sÒ|  d¡ |   ¡  |  d¡sà|  d¡ t|ƒ}q|  ¡ }|rñ| |¡ q	 t	|||||||	|
|||t
|ƒƒS )zJust parse the simple ones.Nr   r|  r}  )Úmemberry  ÚstaticÚexternr‘  ÚmutableÚregister)ry  r‘  ÚinlineÚ	constexprÚ	constinitÚthread_localry  Ú	constevalÚfriendÚvirtualÚexplicitr°   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   rl   )r€   r  r  ÚstorageÚthreadLocalr–  rœ  ÚexplicitSpecrš  r—  r˜  r}  r|  r›  r‹  r  rÍ   Úattrr~   r~   r   Ú_parse_decl_specs_simple¥  s²   



















þz)DefinitionParser._parse_decl_specs_simpler   c                 C  sV   |r|dvrt d| ƒ‚	 |  ||¡}d }|r"|  ¡ }|  ||¡}nd }t||||ƒS )N©r>  r‘  ry  ÚtemplateParamú#Internal error, unknown outer "%s".)Ú	Exceptionr£  rw  r   )r€   r  r  Ú	leftSpecsÚ
rightSpecsÚtrailingr~   r~   r   r    s   z"DefinitionParser._parse_decl_specsr  ú
bool | strú6ASTDeclaratorNameParamQual | ASTDeclaratorNameBitFieldc                   sŒ  |dkrˆ j }zˆ  ¡ }W nE ty   |ˆ _ d }Y n8w |dkrJˆ  t¡rGtˆ jƒ}t|d ƒ}t|gdgdd}ˆ  	¡  ˆ j
dkrFˆ  d¡ nd }n	|rQˆ  ¡ }nd }g }	 ˆ  	¡  |r’ˆ  d¡r’ˆ  	¡  ˆ  d	¡rr| td ƒ¡ qUd‡ fdd„}	ˆ  d	g|	¡}
ˆ  d	¡sŠˆ  d¡ | t|
ƒ¡ qU	 ˆ  |¡}|d u r¿t|ƒdkr¿|r¿|dkr¿|r¿ˆ  	¡  ˆ  d¡r¿ˆ jdd}t||dS t|||dS )NÚmayberz  F)r  r&  z Unexpected ':' after identifier.r   ré   rê   r|   r"   c                     rß   r…   rà   r~   r   r~   r   rá   @  râ   z>DefinitionParser._parse_declarator_name_suffix.<locals>.parserz&Expected ']' in end of array operator.r   r>  rÓ   )ÚdeclIdÚsize©r®  ÚarrayOpsÚ	paramQualrï   )r   rÀ   rn   r˜   ru   r&   r™   r,   r+   r    r   r’   rµ   rÊ   r   rò   r  r  r.  r   r   )r€   r  r
  r  r   r®  r=  Únner±  rá   r9  r²  r¯  r~   r   r   Ú_parse_declarator_name_suffix  s\   þ




€





ÿz.DefinitionParser._parse_declarator_name_suffixr   c                 C  sr  |dvr
t d| ƒ‚g }|  ¡  |rV|  d¡rV|  ¡  d}d}g }	 |s,|  d¡}|r,q!|s6|  d¡}|r6q!|  ¡ }|d urD| |¡ q!	 |  |||¡}	t|	||t|ƒdS |rn|  d	¡rn|  	¡ }
|  |||¡}	t
|	|
d
S |r|  d¡r|  ||d¡}	t|	dS |r| jdkr|dkr•td g d dS | j}z
|  |||¡}|W S  ty } z]| |df¡ || _z2| jdks½J ‚|  d¡ |  |||¡}|  d¡sÓ|  d¡ | jdd|d}	t||	dW W  Y d }~S  ty } z|| _| |df¡ d}|  ||¡|‚d }~ww d }~ww |r{| j}z| jdd}|  ¡  |  d¡s)|  d¡ |  ¡  W n tyK } z|| _| |df¡ W Y d }~n4d }~ww d}d}	 |s^|  d¡}|r^qP|sk|  d¡}|rkqP	 |  |||¡}	t||||	dS | j}z|  |||¡}| jdkr–| j |  |d¡¡ |W S  ty¸ } z|| _| |df¡ d}|  ||¡|‚d }~ww ) N)r>  ry  rç   r  z'Internal error, unknown paramMode '%s'.rì   Fr   r}  r|  )Únextr}  r|  r‹  r  )rµ  r‹  r±   )rµ  r°   rç   r°  z/If declarator-id with parameters-and-qualifiersr²   z$Expected ')' in "( ptr-declarator )"r>  ©r  r
  r  )Úinnerrµ  z"If parenthesis in noptr-declaratorzError in declaratorT)rF  z-Expected '*' in pointer to member declarator.zIf pointer to member declaratorrÝ   Ú zIf declarator-idz0Error in declarator or parameters-and-qualifiers)r§  r    rµ   rð   rž  rÊ   r  r   rl   r…  r   r   r   r   r   r´  rn   r’   r   r·   rÀ   r   rI  )r€   r  r
  r  r@  r}  r|  ÚattrListr¢  rµ  r‹  r   r¼   ÚexParamQualr·  ÚexNoPtrParenr÷   rÃ   r­   r~   r~   r   r  S  sà   ÿ


ÿ
ÿÿÿ


þ€ü€ï
€þ

€üz"DefinitionParser._parse_declaratorNú
str | NoneÚallowFallbackúASTInitializer | Nonec                   sÂ   ˆ  ¡  |dkrˆ ¡ }|d urt|ddS ˆ d¡sd S ˆ ¡ }|d ur)t|ƒS |dkr0g }n|dkr9ddg}n|d u rBddg}nˆ d	| ¡ |dk‰ d‡ ‡fdd„}ˆj|||d}t|ƒS )Nr‘  F)Ú	hasAssignr  r¥  rÇ   rÞ   r²   z;Internal error, initializer for outer '%s' not implemented.r|   r"   c                     s   ˆj ˆ dS r,  )rÖ   r~   ©rÔ   r€   r~   r   rá   ò  ó   z3DefinitionParser._parse_initializer.<locals>.parser)r2  rï   )r    rÕ   r(   rµ   r’   rò   )r€   r  r½  Ú
bracedInitÚfallbackEndrá   r9  r~   rÀ  r   Ú_parse_initializerÆ  s.   


ÿz#DefinitionParser._parse_initializerrY   c                 C  sò  |r|dvrt d| ƒ‚|dkr|sJ ‚|dv rÏg }| j}z0| j|dd}| jd|dd}d}|d	krD|  ¡  t d
¡ | j| j¡rDd}|rL| j	dd W n¦ t
yÎ } zu|dkr\d}	n
|d	krcd}	nt|‚| ||	f¡ || _z| j|d}| jd|d}W nD t
yÃ }
 z8|| _|dkr‘d}	n
|d	kr˜d}	nt|‚| |
|	f¡ 	 |dkr®d}|d7 }n
|d	krµd}nt|‚|  ||¡|
‚d}
~
ww W Y d}~n*d}~ww d}|dkrØd}n|dkrád}d}n|dkrçd}| j|d}| j||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‘  ry  rç   r¥  r¦  rç   )r>  ry  F)r  r  Tr¶  ry  z
requires\b)ÚallowSemicolonr>  zIf just a namez"If the function has no return typer  r	  úIf typedef-like declarationz!If the function has a return typez%Type must be either just a name or a ztypedef-like declaration.z(Error when parsing function declaration.Nr‘  r¥  rz  )r§  r   r  r  r    ÚreÚcompiler˜   r“   Ú
assert_endrn   re  rÊ   r·   rY   )r€   r  r  r@  r”   r  r  ÚmustEndÚ	exUntypedÚdescÚexTypedr÷   r  r
  r~   r~   r   rñ   ÷  s€   ÿ€
€ìÿ€õ,
zDefinitionParser._parse_typeú9ASTTypeWithInit | ASTTemplateParamConstrainedTypeWithInitc              
   C  s\  |r|dv sJ ‚| j ||d}|dkr| j|d}t||ƒS | j}d }z-| j|dd}|d u r5t|d ƒW S |  ¡  | jdkrI| jdkrI|| _d }nt||ƒW S W n tyg } z|| _|}W Y d }~nd }~ww |  d	¡srt|d ƒS z| j dd d
}t||ƒW S  ty­ }	 z"|d u rŒ‚ g }
|
 	|df¡ |
 	|	df¡ d}|d7 }|  
|
|¡|	‚d }	~	w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ñ   rÄ  r\   r   r    r   rn   rµ   rN   rÊ   r·   )r€   r  r  r>  Úinitr   r½   r­   ÚtypeInitrö   r  rk  r~   r~   r   r„  O  sN   
ý€þ

€øz&DefinitionParser._parse_type_with_initr[   c                 C  s:   |   ¡ }|  ¡  |  d¡st|d ƒS |  dd ¡}t||ƒS )Nr  F)rÀ   r    rµ   r[   rñ   )r€   rÃ   r>  r~   r~   r   Ú_parse_type_using|  s   


z"DefinitionParser._parse_type_usingr   c                 C  s$   |   ¡ }|  ¡  |  d¡}t||ƒS )Nr‘  )rÀ   r    rÄ  r   )r€   ru  rŒ  r~   r~   r   Ú_parse_concept„  s   

zDefinitionParser._parse_conceptr   c           	      C  sØ   |   ¡ }|  ¡ }|  ¡  |  d¡}g }|  ¡  |  d¡re	 |  ¡  d }d}d}|  d¡r.d}|  t¡r:| j}|  ¡  |sC|  d¡rCd}|  ¡ }|  ¡  |  d¡}| t	||||ƒ¡ |  ¡  |  d¡rdq	 t
||||ƒS )	Nr€  r&  r   Frœ  Tr±   rÇ   )r…  rÀ   r    rð   rµ   r˜   ri   r™   rÊ   r   r   )	r€   r‹  rÃ   r€  ÚbasesÚ
visibilityrœ  ÚpackÚbaseNamer~   r~   r   Ú_parse_classŠ  s8   





zDefinitionParser._parse_classr^   c                 C  s   |   ¡ }|  ¡ }t||ƒS r…   )r…  rÀ   r^   )r€   r‹  rÃ   r~   r~   r   Ú_parse_union¨  s   
zDefinitionParser._parse_unionr   c                 C  sD   d }|   ¡ }|  ¡ }|  ¡  d }|  d¡r| jdd}t||||ƒS )Nr&  Fr   )r…  rÀ   r    rµ   rñ   r   )r€   Úscopedr‹  rÃ   ÚunderlyingTyper~   r~   r   Ú_parse_enum­  s   
zDefinitionParser._parse_enumr   c                   s\   ˆ   ¡ }ˆ  ¡ }ˆ  ¡  d }ˆ  d¡r(ˆ  ¡  d‡ fdd„}ˆ  g |¡}t|ƒ}t|||ƒS )Nr  r|   r"   c                     s   ˆ j ddS rÒ   )r.  r~   r   r~   r   rá   ¿  rÁ  z2DefinitionParser._parse_enumerator.<locals>.parserrï   )rÀ   r…  r    rµ   rò   r(   r   )r€   rÃ   r‹  rÏ  rá   ÚinitValr~   r   r   Ú_parse_enumerator·  s   
z"DefinitionParser._parse_enumeratorrM   c                 C  s´  |   ¡  |  d¡r|  ¡ }nd }| j}zpd }|   ¡  |  d¡r"d}n|  d¡r*d}n|r2|  d¡ n|  d¡ |   ¡  |  d¡}|   ¡  |  t¡rOt	| j
ƒ}nd }|   ¡  |sd|  d¡rd| jdd d	}nd }| jd
vrp|  d¡ t||||ƒ}|rt||ƒW S t|ƒW S  tyÙ } zJ|rŽ‚ z|| _|  dd¡}	|   ¡  |  d¡}t|	|ƒW W  Y d }~S  tyÔ }
 z|| _d}g }| |df¡ | |
df¡ |  ||¡d ‚d }
~
ww d }~ww )NrG  rs  ro  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˜   ru   r&   r™   rñ   r   rL   rQ   rR   rn   r„  rO   rÊ   r·   )r€   ÚnestedParamsr   ÚkeyÚparameterPackr=  rƒ  r«   rö   ÚparamÚeNonTyper÷   r  r~   r~   r   Ú_parse_template_parameterÇ  sr   








ÿ

ÿÿ€ø€öz*DefinitionParser._parse_template_parameterrP   c           
   
   C  s  g }|   ¡  |  d¡s|  d¡ 	 | j}d }z|  ¡ }| |¡ W n ty8 } z|| _|}W Y d }~nd }~ww |   ¡  |  d¡rK|  ¡ }t||ƒS |  d¡rQqd}g }|r^| |df¡ z|  d¡ W n ty~ }	 z| |	d	f¡ W Y d }	~	nd }	~	ww t	 
|¡ |  ||¡‚)
NrÝ   zExpected '<' after 'template'r   rÞ   rÇ   z!Error in template parameter list.zIf parameterzExpected "," or ">".zIf no parameter)r    rµ   r’   r   rä  rÊ   rn   Ú_parse_requires_clauserP   ÚloggerÚdebugr·   )
r€   ÚtemplateParamsr   Úerrrâ  ÚeParamÚrequiresClauser÷   r  r­   r~   r~   r   rÞ    sB   

€þ


€ÿ
z/DefinitionParser._parse_template_parameter_listúASTTemplateIntroduction | Nonec                 C  sè   | j }z|  ¡ }W n ty   || _ Y d S w |  ¡  |  d¡s%|| _ d S g }	 |  ¡  |  d¡}|  ¡  |  t¡s?|  d¡ | j}|t	v rM|  d| ¡ t
|ƒ}| t||ƒ¡ |  ¡  |  d¡rcn|  d¡riq'|  d¡ q(t||ƒS )	NrØ   r   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˜   ru   r’   r™   re   r&   rÊ   rK   rJ   )r€   r   ÚconceptÚparamsrá  Útxt_identifierr=  r~   r~   r   Ú_parse_template_introduction(  sB   þ



ÿ


í
z-DefinitionParser._parse_template_introductionúASTRequiresClause | Nonec                 C  s²   |   ¡  |  d¡sd S ddd„}g }g }| || ƒ¡ 	 |   ¡  d	}|  d
¡r/d}| d
¡ n|  d¡r;d}| d¡ |s>n| || ƒ¡ qt|ƒdkrRt|d ƒS tt||ƒƒS )NÚrequiresr€   r{   r|   r"   c                 S  sŠ   g }g }|  |  ¡ ¡ 	 |  ¡  d}|  d¡rd}|  d¡ n|  d¡r+d}|  d¡ |s.n|  |  ¡ ¡ qt|ƒdkr@|d S t||ƒS )NTFr~  Úandr   r   )rÊ   rÂ   r    rµ   r¡   r  r	   )r€   ÚandExprsr  r   r~   r~   r   Úparse_and_exprX  s&   


õ
z?DefinitionParser._parse_requires_clause.<locals>.parse_and_exprTFz||Úorr   r   )r€   r{   r|   r"   )r    r¡   rÊ   rµ   r  rB   r	   )r€   rõ  ÚorExprsr  r   r~   r~   r   rå  L  s.   




õz'DefinitionParser._parse_requires_clauseÚ
objectTypeú#ASTTemplateDeclarationPrefix | Nonec              
   C  s  g }	 |   ¡  d }| j}|  d¡rIz|  ¡ }W n" ty9 } z|dkr3t|ƒdkr3td ƒW  Y d }~S |‚d }~ww |dkrH|jd urH|  d¡ n|  	¡ }|sPn|dkrbt|ƒdkrb|| _|  d¡ | 
|¡ qt|ƒdkrw|dkrw|  d¡ t|ƒdkrd S t|ƒS )	Nr   rG  r‘  r   rí  z'requires-clause not allowed for conceptz0More than 1 template parameter list for concept.z,Missing template parameter list for concept.)r    r   r¡   rÞ  rn   r  rI   rë  r’   rð  rÊ   )r€   rø  rK  rî  r   r­   r~   r~   r   Ú"_parse_template_declaration_prefix  s<   
€ü
€

ê
z3DefinitionParser._parse_template_declaration_prefixru  ÚtemplatePrefixrI   ÚfullSpecShorthandÚisMemberc                 C  sæ   |  ¡ }d}|sd}n|r|jd u rd}d}nt|jƒ}|d |k r+|  d||f ¡ ||krq|| }|sZ|sZd|d›d|d›d	|d›d
}	|rO|	|› d7 }	|	t|ƒ7 }	|  |	¡ dd„ t|ƒD ƒ}
|rm|sm|
 |j¡ t|
ƒ}|S )NFr   Tr   zeToo few template argument lists compared to parameter lists. Argument lists: %d, Parameter lists: %d.zNToo many template argument lists compared to parameter lists. Argument lists: Údz, Parameter lists: z*, Extra empty parameters lists prepended: z. Declaration:
	z
	c                 S  s   g | ]}t g d d‘qS )N)rë  )rP   )Ú.0Ú_ir~   r~   r   Ú
<listcomp>Â  s    
ÿÿz@DefinitionParser._check_template_consistency.<locals>.<listcomp>)	Únum_templatesrK  r  r’   r}   r5  Úrangerf  rI   )r€   ru  rû  rü  rý  ÚnumArgsÚisMemberInstantiationÚ	numParamsÚnumExtrark  ÚnewTemplatesr~   r~   r   Ú_check_template_consistency¢  sD   
þÿÿþÿ
þz,DefinitionParser._check_template_consistencyÚdirectiveTyper   c              
   C  sî  |dvr
t d| ƒ‚|dvrt d| ƒ‚d }d }d }d }|  ¡  |  t¡r(| j}|dv r1|  |¡}|dkrg }| j}z|sD| jddd}W n tya }	 z| 	|	d	f¡ || _W Y d }	~	nd }	~	ww | j}z|sl|  
¡ }W nj tyŒ }	 z|| _| 	|	d
f¡ d}
|  ||
¡|	‚d }	~	ww |dkr–|  ¡ }nB|dkr¢| jddd}n6|dkr²| jddd}|  ¡ }n&|dkr»|  ¡ }n|dkrÄ|  ¡ }n|dkrÍ|  ¡ }n|dkrÖ|  ¡ }nt‚| j|j|d|dkd}|  ¡  |  d¡}t|||||||ƒS )N)ro  rr  ry  r‘  r>  rí  rq  Ú
enumeratorz(Internal error, unknown objectType "%s".)ro  rp  rr  ry  r‘  Úvarr>  rí  rq  zenum-structz
enum-classr  z+Internal error, unknown directiveType "%s".)r>  rí  r‘  ry  ro  rr  r>  Tr<  rÆ  zIf type alias or template aliaszError in type declaration.rí  r‘  ry  ro  rr  rq  r  F)rü  rý  ú;)r§  r    r˜   ri   r™   rú  r   rñ   rn   rÊ   rÑ  r·   rÒ  r„  rå  r×  rØ  rÛ  rÝ  re  r	  rÃ   rµ   r   )r€   rø  r
  rÔ  rû  ÚtrailingRequiresClauseÚdeclarationr@  r   r­   r÷   Ú	semicolonr~   r~   r   Úparse_declarationË  s€   

€€þ€€ü





ý
þz"DefinitionParser.parse_declarationr*   c                 C  s8   | j dd}|  ¡ }| j||dd}t||ƒ}d|_|S )NÚ	namespace©rø  F©rü  )rú  rÀ   r	  r*   rø  )r€   rû  rÃ   r¼   r~   r~   r   Úparse_namespace_object  s   ÿ
z'DefinitionParser.parse_namespace_objectú*tuple[ASTNamespace | ASTDeclaration, bool]c           
      C  s  | j }z,| jdd}|  ¡ }|  ¡  |  d¡ |  ¡  | j||dd}t||ƒ}d|_|dfW S  t	y‚ } zGz!|| _ |  
dd¡}|  ¡  |  d¡ |  ¡  |dfW W  Y d }~S  t	y} } zg }| |df¡ | |d	f¡ d
}	|  ||	¡|‚d }~ww d }~ww )NÚxrefr  z()Tr  ry  FzIf shorthand refzIf full function refzError in cross-reference.)r   rú  rÀ   r    rµ   rÉ  r	  r*   rø  rn   r  rÊ   r·   )
r€   r   rû  rÃ   Úres1Úe1Úres2Úe2r  rk  r~   r~   r   Úparse_xref_object  s>   
ÿ


€û€÷z"DefinitionParser.parse_xref_objectúASTExpression | ASTTypec                 C  s¼   | j }z|  ¡ }|  ¡  |  ¡  |W S  ty] } z?|| _ z|  d¡}|  ¡  |  ¡  |W W  Y d }~S  tyX } zd}g }| |df¡ | |df¡ |  ||¡|‚d }~ww d }~ww )NFz%Error when parsing (type) expression.ræ   rå   )r   r¶   r    rÉ  rn   rñ   rÊ   r·   )r€   r   rÍ   ÚexExprrõ   ÚexTyper÷   r  r~   r~   r   Úparse_expression3  s.   
€û€ùz!DefinitionParser.parse_expression)r|   r}   )r|   rƒ   )r|   r)   )r|   r¯   rï   )rÃ   r}   rÄ   r}   rÅ   r}   r|   rÆ   )r|   r8   )r|   rÑ   )r|   r   )r|   rÙ   )r|   r=   r  )r#  r"   rÔ   r  r|   r$  )T)r/  r0  rá   r1  r2  r  r|   r"   )r|   r1   )r|   rH   )F)rF  r  r|   r+   )r|   rW   )r|   rT   )r
  r}   r|   rx  )r  r}   r  r  r|   r   )r  r}   r  r  r|   r   )r  r«  r
  r}   r  r  r|   r¬  )r  r«  r
  r}   r  r  r|   r   )NT)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|   r^   )r|   r   )r|   r   )r|   rM   )r|   rP   )r|   rì  )r|   rñ  )rø  r}   r|   rù  )
ru  r+   rû  rI   rü  r  rý  r  r|   rI   )rø  r}   r
  r}   r|   r   )r|   r*   )r|   r  )r|   r  )6Ú__name__Ú
__module__Ú__qualname__Úpropertyr‚   rˆ   r‹   r–   r®   r¾   rÂ   rÎ   rÐ   rÉ   rÕ   rÛ   rý   r  r´   r"  r)  rÖ   r.  r¶   rò   r?  rE  rÀ   rm  rw  r  r£  r  r´  r  rÄ  rñ   r„  rÑ  rÒ  r×  rØ  rÛ  rÝ  rä  rÞ  rð  rå  rú  r	  r  r  r  r   r~   r~   r~   r   r{   ‡   st    


<
;

!



 

_

6



þ
,
 @
2
Z
-
_]
7ÿs1
X
-







?
"
$
5#þ
)
A
	r{   )…Ú
__future__r   rÇ  Útypingr   r   Úsphinx.domains.cpp._astr   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   rZ   r[   r\   r]   r^   r_   Úsphinx.domains.cpp._idsr`   ra   rb   rc   rd   re   rf   rg   rh   ri   rj   Úsphinx.utilrk   Úsphinx.util.cfamilyrl   rm   rn   ro   rp   rq   rr   rs   rt   ru   rv   rw   rx   Úcollections.abcry   rz   Ú	getLoggerr!  ræ  r{   r~   r~   r~   r   Ú<module>   s    þv 4]<
