
    -Ph^                   z   d dl mZ d dlZd dlmZ d dlmZmZmZm	Z	m
Z
mZmZmZmZmZmZmZmZ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@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZOmPZPmQZQmRZRmSZSmTZTmUZUmVZVmWZWmXZXmYZY d dlZm[Z[m\Z\m]Z]m^Z^m_Z_m`Z`maZambZbmcZcmdZdmeZe d dlfmgZg d dlhmiZimjZjmkZkmlZlmmZmmnZnmoZompZpmqZqmrZrmsZsmtZtmuZu er d dlvmwZwmxZx d d	lmyZy d d
lmzZzm{Z{m|Z|m}Z}m~Z~mZmZ  egj        e          Z G d dej          ZdS )    )annotationsN)TYPE_CHECKING)TASTAlignofExprASTArrayASTAssignmentExprASTBaseClassASTBinOpExprASTBooleanLiteralASTBracedInitListASTCastExprASTCharLiteralASTClassASTCommaExpr
ASTConceptASTConditionalExprASTDeclarationASTDeclaratorMemPtrASTDeclaratorNameBitFieldASTDeclaratorNameParamQualASTDeclaratorParamPackASTDeclaratorParenASTDeclaratorPtrASTDeclaratorRefASTDeclSpecsASTDeclSpecsSimpleASTDeleteExprASTEnumASTEnumeratorASTExplicitCastASTExplicitSpecASTFallbackExprASTFoldExprASTFunctionParameterASTIdentifierASTIdExpressionASTInitializerASTNamespaceASTNestedNameASTNestedNameElement
ASTNewExprASTNoexceptExprASTNoexceptSpecASTNumberLiteralASTOperatorBuildInASTOperatorLiteralASTOperatorTypeASTPackExpansionExprASTParametersQualifiersASTParenExprASTParenExprListASTPointerLiteralASTPostfixArrayASTPostfixCallExprASTPostfixDecASTPostfixExprASTPostfixIncASTPostfixMemberASTPostfixMemberOfPointerASTRequiresClauseASTSizeofExprASTSizeofParamPackASTSizeofTypeASTStringLiteralASTTemplateArgConstantASTTemplateArgsASTTemplateDeclarationPrefixASTTemplateIntroduction ASTTemplateIntroductionParameter ASTTemplateKeyParamPackIdDefault'ASTTemplateParamConstrainedTypeWithInitASTTemplateParamNonTypeASTTemplateParamsASTTemplateParamTemplateTypeASTTemplateParamTypeASTThisLiteral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Sequence)Any)ASTDeclaratorASTExpression
ASTLiteralASTOperatorASTPostfixOpASTTemplateParamASTTrailingTypeSpecc                     e Zd Zedzd            Zed{d            Zed{d            ZdzdZd|d	Zd}dZ	d~dZ
ddZddZddZddZddZddZd~dZd~dZdd!Zdd$Zdd%Zdd&Zd~d'Z	 ddd.Zdd0Zdd2Zddd6Zdd8Zdd:Zdd=ZddAZdddCZ ddGZ!	 dddIZ"	 dddNZ#dddPZ$ddRZ%ddTZ&ddVZ'ddXZ(ddZZ)dd\Z*dd^Z+dd`Z,ddbZ-dddZ.ddfZ/ddiZ0	 dddoZ1ddsZ2dduZ3ddwZ4ddyZ5dJS )DefinitionParserreturnstrc                    dS )NzC++ selfs    Z/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/sphinx/domains/cpp/_parser.pylanguagezDefinitionParser.language   s    u    Sequence[str]c                    | j         j        S N)configcpp_id_attributesr   s    r   id_attributeszDefinitionParser.id_attributes   s    {,,r   c                    | j         j        S r   )r   cpp_paren_attributesr   s    r   paren_attributesz!DefinitionParser.paren_attributes   s    {//r   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"   FTz$Unexpected end during inside string.\)current_charposeoffail
definition)r   	start_posescapes      r   _parse_stringzDefinitionParser._parse_string   s    ##4H	A
	x 		@AAAA"c))&)A"d**HHMHH
	 y48344r   rw   c                    d fd}                                                        d          rt                      S                      d          rt          d          S                      d          rt          d	          S  j        }                     t                    rJ                     t                    }t           j	        | j                           }|r|S  ||          S t          t          t          t          fD ]e}                     |          rN                     t                    }t           j	        | j                           }|r|c S  ||          c S f                                 }| |t!          |                    S                      t"                    r j                            d
          } j                            d          }		 t)          ||	          }
nO# t*          $ r"}                     d|z             Y d }~n(d }~wt.          $ r                      d           Y nw xY w ||
          S d S )Nliteralrw   r~   c                                         t                    s| S t          j                  }t	          | |          S r   )matchrc   r$   matched_textrX   )r   identr   s     r   _udlz-DefinitionParser._parse_literal.<locals>._udl   s?    ::/00  "$"344E(%888r   nullptrtrueTfalseFr      z8Can not handle character literal. Internal error was: %szJCan not handle character literal resulting in multiple decoded characters.)r   rw   r~   rw   )skip_ws	skip_wordr5   r
   r   r   rk   rl   r-   r   ri   rm   ro   rq   rp   r   rA   rj   
last_matchgroupr   UnicodeDecodeErrorr   rh   )r   r   r   
has_suffix	float_litregexint_litstringprefixdatachar_lites   `           r   _parse_literalzDefinitionParser._parse_literal   s   	9 	9 	9 	9 	9 	9 	>>)$$ 	'$&&&>>&!! 	+$T***>>'"" 	,$U+++h::&'' 	'$;<<J(tx)HIII '  tI&	
 	) 	)E zz%   )!ZZ(BCC
*4?3>+JKK )"NNN4==((() ##%%4(00111 ::o&& 	"_**1--F?((++D
)&$77%   		NQRR        8   		A    
 4>>!ts   /H   
I
H''"IIASTExpression | Nonec                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 )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.z)Operators are different in binary fold: 'z' and ''.z+Expected ')' to end binary fold expression.)r   r   r   skip_string_and_wsr   r\   r   r   _parse_cast_expressionskip_stringr"   rg   _parse_expression_make_multi_errorr3   )r   op
right_exprr   	left_expre_foldrese_exprs           r   _parse_fold_or_paren_expressionz0DefinitionParser._parse_fold_or_paren_expression   sF    ##4A""5)) 	5::/00 T		RSSS"B4466J##C(( E		CDDDtR444h	%LLNNN3355ILLNNN::/00 		V   "BLLNNN**511 T		RSSS 	% 	% 	%DH,,..'',, RIIPQQQ"   ,,!56!>? L    $$$$$$$$!	%$ C   	4y"d333zz+,, 	WIIUVVV"""III22t(((*   0022
$$ 	EIICDDD9b*555sD   B0F 
H2H-AG*)H-*
H4HHH-'H2-H2rv   c                F   |                                   |                                 }||S |                                   |                     d          rt                      S |                                 }||S |                                 }|t          |          S d S )Nthis)r   r   r   rM   r   _parse_nested_namer%   )r   r   nns      r   _parse_primary_expressionz*DefinitionParser._parse_primary_expression1  s     	!0022?J>>&!! 	$!###2244?J$$&&>"2&&&tr   nameopenclose4tuple[list[ASTExpression | ASTBracedInitList], bool]c                   |                                   |                     |          sdS |                     |          rg dfS g }d}	 |                                   |                                 }|                                   |                     d          r#|                    t          |                     n|                    |           |                                   |                     |          rn[|                     d          s|                     d| d| d           | j        |cxk    rd	k    rn n| xj        d
z  c_        d}n||fS )N)NNFTr   ,z	Error in z, expected ',' or 'r   }r   )	r   r   r   _parse_initializer_clauseappendr1   r   r   r   )r   r   r   r   exprstrailing_commaexprs          r   _parse_initializer_listz(DefinitionParser._parse_initializer_listH  s}    	&&t,, 	:E"" 	u99;	LLNNN1133DLLNNN&& #1$778888T"""LLNNN&& **3// J		HdHHuHHHIII E0000S00000A!%!	" n$$r   r4   c                \    |                      ddd          \  }}|d S t          |          S )Nzparenthesized expression-listr   r   )r   r4   r   r   r   s      r   _parse_paren_expression_listz-DefinitionParser._parse_paren_expression_listi  s?     !% < <+S#!
 !
~ =4&&&r   !ASTExpression | ASTBracedInitListc                ^    |                                  }||S |                     d          S NFin_template)_parse_braced_init_list_parse_assignment_expression)r   braced_init_lists     r   r   z*DefinitionParser._parse_initializer_clausew  s7    7799'##00U0CCCr   r   c                ^    |                      ddd          \  }}|d S t          ||          S )Nzbraced-init-list{r   )r   r   r   s      r   r   z(DefinitionParser._parse_braced_init_list}  sA     !% < <S!
 !
~ =4 777r   $ASTParenExprList | ASTBracedInitListc                Z    |                                  }||S |                                 S r   )r   r   )r   parens     r   *_parse_expression_list_or_braced_init_listz;DefinitionParser._parse_expression_list_or_braced_init_list  s2     1133L++---r   r9   c                    d }d }                                   d }t          D ]}                     |          r|} n|#d}                     d          s                     d|z                                  d          }                                                        d          s                     d|z                                  d          s                     d|z             d- fd}                     dg|          }                                                        d          s                     d|z             t          |||          }n                     d          r=d}                     d          s                     d            j	        }	                      d          }t          |d          }                     d          s                     d           n# t          $ r}	| _	        	 d- fd}                     dg|          }t          |d          }                     d          s                     d           n?# t          $ r2}
| _	        d}|dz  }|	df|
dfg}                     ||          |
d }
~
ww xY wY d }	~	nd }	~	ww xY w j	        }	                                  }d}n# t          $ r}| _	        	                      dd          }d}                                    j        dvr                     d           n?# t          $ r2}| _	        d}|dz  }|d f|dfg}                     ||          |d }~ww xY wY d }~nd }~ww xY wg }	                                    |d!v r                     d"          ru                                 }                                                        d#          s                     d$           |                    t#          |                                          d%          r                     d&          r xj	        d'z  c_	        n^                     d(          r xj	        d)z  c_	        n8                                 }|                    t'          |                     =                     d*          r^                     d&          r xj	        d)z  c_	        n8                                 }|                    t)          |                                          d+          r#|                    t+                                                      d,          r#|                    t-                                                                   }|$|                    t1          |                     Z	 t3          ||          S ).Ncast<zExpected '<' after '%s'.F>z Expected '>' after type in '%s'.r   zExpected '(' in '%s'.r~   rv   c                 ,                                      S r   r   r   s   r   parserz:DefinitionParser._parse_postfix_expression.<locals>.parser  s    --///r   r   zExpected ')' to end '%s'.typeidzExpected '(' after 'typeid'.T)isTypez%Expected ')' to end 'typeid' of type.c                 ,                                      S r   r   r   s   r   r   z:DefinitionParser._parse_postfix_expression.<locals>.parser  s    #55777r   z+Expected ')' to end 'typeid' of expression.zError in 'typeid(...)'.z Expected type or expression.If typeIf expressionr   operatorCasttypeOperatorCast>   r   r   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~   rv   )r   r]   skip_word_and_wsr   r   _parse_typer   _parse_expression_fallbackr   r   rS   rg   r   r   r   r   r   r6   r   r;   r<   r:   r8   r   r7   r9   )r   prefix_typer   r   ctypr   r   r   e_typer   headererrorse_outere_inner
post_fixesr   lsts   `                 r   _parse_postfix_expressionz*DefinitionParser._parse_postfix_expression  s   , " 	 	A$$Q''   K##C(( =		4t;<<<""5))CLLNNN**3// E		<tCDDD##C(( :		1D89990 0 0 0 0 0 22C5&AADLLNNN##C(( >		5<===$T355FF""8,, 9	N"K**3// :		8999(CM&&u--"3t444'',, GIIEFFF" M M MM8 8 8 8 8 8  ::C5&IID&tE:::F++C00 Q		"OPPP& M M M"DH6F==F+1F 00@@fLMM* (CN7799$" N N NN "--e^DDF"4K
 LLNNN(
::		"WXXX& N N N"DH;FEEF "9: ),F 00@@gMNN2 *,
'	LLNNN888**3// 1133DLLNNN++C00 P		"NOOO%%od&;&;<<<##C(( 
!'',, 	!A))$// !A#6688"))*:4*@*@AAA ##D)) !'',, !A#6688"))*CD*I*IJJJ ##D)) %%moo666##D)) %%moo666AACCC!!"4S"9"9:::fj111s{   /AH 
J5J0AI,+J0,
J(6-J##J((J00J5 K 
M=!M8)A
L43M84
M0>-M++M00M88M=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   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  
param_modezASorry, parenthesised type-id in new expression not yet supported.deleter   r   z(Expected ']' in array delete-expression.)r   r[   r   r   r   rV   r   r   r   r   rn   r$   r   r?   r  r@   _parse_unary_expressionr>   r   r   r+   r   _parse_decl_specs_parse_declaratorr   r*   rR   r   r  )r   r   r   r   r   r  r   rootedis_new_type_id
decl_specsdeclr  arrays                r   r  z(DefinitionParser._parse_unary_expression(  s    	' 	0 	0B!u}}nnR((&&r** 02244%b$/////0   ** 	'&&u-- 	1..s33 BII@AAAzz-00 GIIEFFF%d&788'',, CIIABBB)%000&&s++ *&&U&33'',, @II>???$S)))//11D &&&  ++ 	'**3// <		:;;;"""//CLLNNN##C(( =		;<<<!#&&&  ,, 	)**3// =		;<<<))++DLLNNN##C(( >		<==="4(((h!!$''$$U++ 	VDHH "N&&s++  		9  
  !33$3??
--Ee-LL		W   AACCCfngj$6O6OQTUUUh!!$''$$X.. 	6DHH++C00E FT44S99 F		DEEE..00D 555--///r   c                   | j         }|                                  |                     d          r	 |                     d          }|                     d          s|                     d           |                                 }t          ||          S # t          $ rW}|| _         	 |                                 cY d }~S # t          $ r$}|df|dfg}| 	                    |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   rg   r  r   )r   r   r  r   ex_castex_unaryerrss          r   r   z'DefinitionParser._parse_cast_expression  sJ   hC   	2$&&u--'',, BII@AAA2244"3---" $ $ $	$7799999999& $ $ $ ";<!#89D 009 #$$	$ //111s<   A"B 
C6C1'C :C6 
C.
C))C..C11C6r   boolc                ,    dfd	 | d
|          S )Nr   r}   op_idintr   r)  r~   rv   c                    dz   t          t                    k    rd fd}nd
 fd}g }g }|                     ||                     	                                   |r j        d
k    rn̉ j        }d}t                   D ]}|d         dv r                     |          s"n                     |          s9| j        cxk    rdk    rn n xj        dz  c_         nR	  ||          }	|                    |	           |                    |           d	} n# t          $ r
 | _        Y w xY w|snt          ||          S )Nr   r   r)  r~   rv   c                ,                                     S r   )r   r   r   s    r   r   zYDefinitionParser._parse_logical_or_expression.<locals>._parse_bin_op_expr.<locals>.parser  s    66888r   c                &     dz   |           S )Nr   r   r   )r   _parse_bin_op_exprr+  r   s    r   r   zYDefinitionParser._parse_logical_or_expression.<locals>._parse_bin_op_expr.<locals>.parser  s    --dEAI;WWWWr   r   Tr   Fr   abcnox&r   r)  r~   rv   )
lenrZ   r   r   r   r   r   r   rg   r	   )r   r+  r   r   r   opsr   one_morer   r   r1  s   ``        r   r1  zIDefinitionParser._parse_logical_or_expression.<locals>._parse_bin_op_expr  s    qyC 344449 9 9 9 9 9 9
X X X X X X X X ECLLK888999 4#4#;#;h -e4 ' 'B!u((#~~b11 %$%  $//33 %$T.5555#55555A'%v+>>>T***

2#'* ' ' '#&' 78  s+++s   +8D%%D98D9r   r   )r   r}   r+  r,  r   r)  r~   rv   r   )r   r   r1  s     @r   _parse_logical_or_expressionz-DefinitionParser._parse_logical_or_expression  s<    ,	, ,	, ,	, ,	, ,	, ,	,\ "!${CCCCr   or_expr_headASTConditionalExpr | Nonec                H   |                                   |                     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   r9  r   	then_expr	else_exprs        r   "_parse_conditional_expression_tailz3DefinitionParser._parse_conditional_expression_tail  s     	$$ 	4**,,	$$ 	WIIUVVV55kBB	!,	9EEEr   c                4   |                      |          }|                     ||          }||S t          D ]_}|d         dv r|                     |          s"n|                     |          s9|                                 }t          |||          c S |S )Nr   r   anox)r8  r@  rY   r   r   r   r   )r   r   r   	cond_exprr   r   s         r   r   z-DefinitionParser._parse_assignment_expression  s     55+5NN	;;I{SS	 , 	@ 	@B!u~~b))  ''++ 7799J$YJ?????r   c                f    |                      |          }|                     ||          }||S |S Nr   )r8  r@  )r   r   or_exprrC  s       r   _parse_constant_expressionz+DefinitionParser._parse_constant_expression  s@     333LL;;G[QQ	 r   c                .   |                      d          g}	 |                                  |                     d          sn*|                    |                      d                     Tt	          |          dk    r|d         S t          |          S )NFr   Tr   r   r   )r   r   r   r   r5  r   )r   r   s     r   r   z"DefinitionParser._parse_expression  s     22u2EEF	OLLNNN##C(( LL::u:MMNNN		O
 u::??8O&&&r   Tend	list[str]r   Callable[[], ASTExpression]allowc                f   | j         }	  |            S # t          $ r3}|r| j        s |                     d|z             || _         Y d }~nd }~ww xY w|J |                                  | j         }|                     t                    r| j        }nddddd}g }	| j        st          |	          dk    r
| j
        |v rny| j
        |v r!|	                    || j
                            n8t          |	          dk    r%| j
        |	d         k    r|	                                 | xj         d	z  c_         | j        t          |          dk    r| j        r|                     d
|z             | j        || j                                                  }t!          |                                          S )NzBParsing of expression failed. Using fallback parser. Error was:
%sr   r   r   r   )r   r   r   r   r   r   z0Could not find end of expression starting at %d.)r   rg   allowFallbackExpressionParsingwarnr   r   ra   r   r   r5  r   r   popr   r   stripr!   )
r   rI  r   rL  prev_posr   r   valuebracketssymbolss
             r   r  z+DefinitionParser._parse_expression_fallback(  s    8	 688O 		  		  		    C II"$%&    DHHHHHH		  H	::j!! 	B%EE !s3??H!#Gh w<<1$$):c)A)A$00NN8D,=#>????\\A%%$*;wr{*J*JKKMMMA h  3xx!|||		FR   OI$89??AAEu{{}}---s   	 
A)AArx   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)r  r  r   r   zExpected "]" after  "operator z["z[]z""z%Expected user-defined literal suffix.Fr   r  r  )r   r   r_   r.   r   r   r   r   rn   r$   r/   r  r0   )r   r   
identifiertypes       r   _parse_operatorz DefinitionParser._parse_operatorW  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$$$r   rC   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   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   rC   r   r  r   r   rg   rG  rB   r   )r   prev_errorstemplate_argspack_expansionr   parsed_comma
parsed_endrZ  r   rT  r  s              r   _parse_template_argument_listz.DefinitionParser._parse_template_argument_listw  s7    	&&s++ 	4C   	."2u---@B1	&(C LJ)M''e'44**511 
X%)N!%J++C00 Y		"WXXX%%c** X!%JJ%%c** X#'LLIIVWWW$$T****" M M M""A'9#:;;;M ;;;MMELLNNN..u55 )-%)
#//44  II U   ))#.. %)

))#.. '+		T   "(()?)F)FGGGG& M M M"DH&&+A'BCCCGF00fEE1L	M HGGGG+M6  ''''%%%%c1	&d }n===s>   $CD. .J9I<CH.-I<.
I487I//I44I<<JFmember_pointerr(   c                $   g }g }|                                   d}|                     d          rd}	 |                                   t          |          dk    r|                     d          }nd}|                    |           d }|                     d          r|                                 }n|                     t                    s@|r)t          |          dk    r|                                 n	| 	                    d           | j
        }|t          v r| 	                    d	|z             t          |          }| j        }	 |                                 }	n:# t          $ r-}
|| _        d }	| j                            |
           Y d }
~
nd }
~
ww xY w|                    t#          ||	                     |                                   |                     d          s|r| 	                    d
           nt%          |||          S )NFr  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   r5  r   r   r[  r   rn   rQ  r   r   r^   r$   r   rb  rg   otherErrorsr)   r(   )r   rc  names	templatesr   re  ident_or_oprY  r   r^  exs              r   r   z#DefinitionParser._parse_nested_name  s7   ,. "	D!! 	F'	LLNNN5zzA~~00<< X&&&>BK$$Z00 8"2244zz-00 E% #e**q..!IICDDD!.
**II*,67   ,J77 (C, $ B B D D" , , , $ ''++++++++, LL-k=IIJJJLLNNN##D)) ! PIINOOOO'	P UIv666s   E! !
F+#FFrP   c                	   d }d }g }d }g }|                                   |                     t                    rg| j        }|                    |           |dv r!||                     d| d| d           |}n|dv r!||                     d| d| d           |}n|dk    rKt          |          dk    r"|                     d| d|d          d           |                    |           n|dk    rWt          |          dk    r.|d         dk    r"|                     d| d|d          d           |                    |           n$|d	v r ||                     d| d| d           |}|                                   |                     t                    gt          |          dk    rd S |d
v r||                     d| d| d           ||                     d| d| d           t          |          dk    r/|                     d| dd                    |           d           nB|dk    rb||                     d| d| d           t          |          dk    r/|                     d| dd                    |           d           n|dk    r ||                     d| d| d           n|dv rb||                     d| d| d           t          |          dk    r/|                     d| dd                    |           d           nN|dk    ra||                     d| d| d           t          |          dk    r/|                     d| dd                    |           d           n|dk    r||                     d| d| d           t          |          dk    r/|                     d| dd                    |           d           t          |          dk    r;|d         dk    r/|                     d| dd                    |           d           n2|||                     d| d           nd| }t          |          g }||                    |           ||                    |           |	                    |           ||                    |           t          ||          S )N>   r,  autor)  charvoidfloatdouble__int64char8_twchar_t__int128char16_tchar32_t	_Float128	_Float64x	__float80
__float128zCan not have both z and r   >   signedunsignedshortr   long>   _Complex
_Imaginary>   rm  r)  ro  rs  rt  rv  rw  rx  ry  rz  r{   rn  r,  >   rr  ru  rp  rq  r   zCan not have z without a floating point type.zUnhandled type )r   r   r`   r   r   r   r5  joinAssertionErrorextendrP   )	r   modifier
signednesswidthr  rh  tmsgcanon_namess	            r   _parse_simple_type_specifiersz.DefinitionParser._parse_simple_type_specifiers  s   #!%
jj344 	!ALLOOO    ?IIA1AA3AAABBB,,,)IIH1HH:HHHIII

gu::??IIF1FF58FFFGGGQfu::??uQx6'9'9IIF1FF58FFFGGGQ000'IIF1FF8FFFGGGLLNNN; jj344 	< u::??4 
 
 

 #		DsDDDDDEEE%		FsFFFFFGGG5zzQ		KsKK%KKKLLLF]]#		DsDDDDDEEE5zzQ		KsKK%KKKLLLE\\#		DsDDDDDEEE+++#		DsDDDDDEEE5zzQ		KsKK%KKKLLLG^^%		FsFFFFFGGG5zzQ		KsKK%KKKLLLH__%		FsFFFFFGGG5zzA~~		KsKK%KKKLLL5zzQ58v#5#5		KsKK%KKKLLL[#		S(SSSTTT)C))C %%%!#x(((!z***5!!!?s###-e[AAAr   r{   c                   |                                   |                                 }||S |                                   |                     d          r|                     d          s|                     d           |                     d          r8|                     d          s|                     d           t                      S |                                 }|                                   |                     d          s|                     d           t          |          S d }|                                   dD ]}|                     |          r|} n| 	                                }|                                   d }| 
                    d          rd}n|                     d          r|                     d          s|                     d	           |                     d          s|                     d
           |                     d          s|                     d           d}t          |||          S )Ndecltyper   zExpected '(' after 'decltype'.rm  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   r  r   r   r   r   rO   r   rN   r   r   rQ   )r   r   r   r   knested_nameplaceholder_types          r   _parse_trailing_type_specz*DefinitionParser._parse_trailing_type_specM  si    	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''  --//>>&!! 	0%"":.. 	0**3// 		R   ((00 		V   **3// 		W    0&v{<LMMMr   r  ASTParametersQualifiers | Nonec                ^   |dk    rd S |                                   |                     d          s|dk    r|                     d           nd S g }|                                   |                     d          s%	 |                                   |                     d          rb|                    t	          d d                     |                                   |                     d          s|                     d	           n|                     d d
          }|                    t	          |                     |                                   |                     d          r|                     d          rn |                     d| j         d           $|                                   |                     d          }|                     d          }|s|                     d          }d }|                     d          rd}|s|                     d          rd}d }|                                   |                     d          r|                     d          rc| 	                    d          }|                                   |                     d          s|                     d           t          |          }nt          d           }|                                   |                     d          r|                     d          }	nd }	|                                   |                     d          }
|                     d          }|
s|                     d          }
|                                 }|                                   d }|dk    rv|                     d          ra|                                   d}|D ]}|                     |          r|} n|s+|                     dd                    |          z             t          ||||||	|
|||
  
        S )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&&r3  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   rG  r,   r  _parse_attribute_listr  r2   )r   r  argsargr  r  ref_qualexception_specr   trailing_returnr  r  attrsinitializervalidws                   r    _parse_parameters_and_qualifiersz1DefinitionParser._parse_parameters_and_qualifiers  se    4$$ 	Z''		GHHHHt$$ 	##E** KK 4T4 @ @AAALLNNN++C00 		T    00t80LL055666##C(( ##C(( 		2 -2 2 2  +4 	%%g..((44 	3))'22ED!! 	H 	D,,S11 	HJ'' 	7&&s++ 766u=='',, BII@AAA!0!6!6!0!6!6D!! 	#"..U.;;OO"O((44%%g.. 	9,,Z88H**,,##(8(8(=(=#LLNNN.E  ((++ "#KE  		=e@T@TT   '
 
 	
r   r  typedr   c                D   d}d}d}d}d}d}d}	d}
d}d}d}g }	 |                                   |s|r|                     d          }|r1|s|r|                     d          }|rM|sj|dv r0|                     d          rd}k|                     d          rd}|dk    r|                     d	          rd	}|                     d
          rd
}|s|dv r|                     d          }|r|	s|dv r|                     d          }	|	r|dk    r6|
s|                     d          }
|
r|s|                     d          }|r1|dk    r|s|                     d          }|rR|s|                     d          }|rm|s|                     d          }|r|s|                     d          }|rd}|                     d          rk|                     d          }|s|                     d           |                                   |                     d          s|                     d           t          |          }4|                                 }|r|                    |           a	 t          |||||||	|
|||t          |                    S )zJust parse the simple ones.Nr   r  r  >   memberr  staticexternr  mutableregisterinline	constexpr	constinitthread_localr  	constevalfriendvirtualexplicitr   Fr   z=Expected constant expression after '(' in explicit specifier.r   z'Expected ')' to end explicit specifier.)r   r   r   r   rG  r   r    _parse_attributer   r   re   )r   r  r  storager  r  r  explicit_specr  r  r  r  r  r  r  r  r   attrs                     r   _parse_decl_specs_simplez)DefinitionParser._parse_decl_specs_simple  s   			L	LLNNN U w//   >>*55  222~~h// !"* ~~h// !"* H$$~~i00 !"+ >>*-- (G e'===11  *@!@!@ NN;77	     ! ${ ; ;I  ! # !#'>>.#A#AL# ! 
""  ! ${ ; ;I  !  !!^^H55F !  !"nnY77G ! $ !#44Z@@H !.2++C00 	U#'#B#Bu#B#U#UD#' " $		%>!" !" !" !LLNNN#'#3#3C#8#8 U $		*S T T T(7(=(= ((**D T"""!U##
 
 	
r   r   c                    |r|dvrt          d|z            	 |                     ||          }d }|r+|                                 }|                     ||          }nd }t          ||||          S )N>   rZ  r  r  templateParam#Internal error, unknown outer "%s".)	Exceptionr  r  r   )r   r  r  
left_specsright_specstrailings         r   r  z"DefinitionParser._parse_decl_specsT  s     	OKKK E MNNN	 225%@@
 	5577H77uEEKKHE:{HEEEr   r  
bool | str6ASTDeclaratorNameParamQual | ASTDeclaratorNameBitFieldc                    |dk    r6 j         }	                                  }n# t          $ r | _         d }Y nw xY w|dk    r                     t                    rmt           j                  }t          |d           }t          |gdgd          } 	                                  j
        dk    r                     d           nd }n|r                                 }nd }g }	  	                                 |rˉ                     d          r 	                                                      d	          r#|                    t          d                      xd fd}	                     d	g|	          }
                     d	          s                     d           |                    t          |
                     	                      |          }|mt#          |          dk    rZ|rX|dk    rR|rP 	                                                      d          r'                     d          }t'          ||          S t)          |||          S )Nmayber  F)r   r=  z Unexpected ':' after identifier.r   r   r   r~   rv   c                 ,                                      S r   r   r   s   r   r   z>DefinitionParser._parse_declarator_name_suffix.<locals>.parser  s    11333r   z&Expected ']' in end of array operator.r   rZ  r   )declIdsizer  arrayOps	paramQualr   )r   r   rg   r   rn   r$   r   r)   r(   r   r   r   r   r   r   r  r  r5  rG  r   r   )r   r  r  r  r   decl_idrY  nne	array_opsr   rT  
param_qualr  s   `            r   _parse_declarator_name_suffixz.DefinitionParser._parse_declarator_name_suffixo  s    G(C1133"    hzz-(( 	*4+<==
*:t<<'wuEEE$++II@AAA 	--//GGG		LLNNN ))#.. ##C(( $$Xd^^4444 4 4 4 4 4 77vFF'',, HIIFGGG  %111:::FF
#i..A"5"5 Pv--%-##C(( P::u:MMD4G$OOOO)Y*
 
 
 	
s   % ;;ru   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  rZ  r  r   z(Internal error, unknown param_mode '%s'.r   Fr   r  r  )nextr  r  r  r3  )r  r  r   )r  r   r   r  z/If declarator-id with parameters-and-qualifiersr   z$Expected ')' in "( ptr-declarator )"rZ  r  r  r  )innerr  z"If parenthesis in noptr-declaratorzError in declaratorT)rc  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   re   r  r   r   r   r   r   r  rg   r   r   r   r   r   rg  )r   r  r  r  r]  r  r  	attr_listr  r  r  r   r   ex_param_qualr  ex_no_ptr_parenr  r   r   s                      r   r  z"DefinitionParser._parse_declarator  s    HHHFSTTT 	T%%c** 	LLNNNHEI !#44Z@@H !  ! 11'::E ! ,,..#$$T***))%UCCD#!&y11	     	<T%%c** 	<..00E))%UCCD#U;;;; 	5T%%e,, 	5))%UCCD)t4444 *	+T&#--^++ 2"   
 (C +88
ERR
" + + +""!E$    +,3333$$S))) !225*eLLE++C00 L		"JKKK11#e 2  D .EEEEEEEEEE& 	+ 	+ 	+"DH&&'<(    3F00#V *+	+'+:  	M(CM..d.CC'',, OIIMNNN
 !	# %#'#8#8#D#D# %$  % $ 5 5g > >  %$--eZGG*4tLLLL# # K K K""A'H#IJJJJJJJJK$ h	E44UJNNC  C'' ''(>(>{B(O(OPPPJ 	E 	E 	EDH#56777GF((f==1D		E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
str | Noneallow_fallbackASTInitializer | Nonec                                                       |dk    r'                                 }|t          |d          S                      d          sd S                                  }|t          |          S |dk    rg }n*|dk    rddg}n|ddg}n                     d	|z             |dk    d fd}                     |||          }t          |          S )Nr  F)	hasAssignr  r  r   r   r   z;Internal error, initializer for outer '%s' not implemented.r~   rv   c                 0                                    S rE  )r   r/  s   r   r   z3DefinitionParser._parse_initializer.<locals>.parserR  s    444MMMr   )rL  r   )r   r   r&   r   r   r  )r   r  r  braced_initfallback_endr   rT  r   s   `      @r   _parse_initializerz#DefinitionParser._parse_initializer$  sH   ( 	H6688K&%kUCCCC$$ 	42244"!+...H&(LLo%%:LL]:LLIIMPUU   .	N 	N 	N 	N 	N 	N 	N //& 0 
 
 e$$$r   rR   c                J   |r |dvrt          d|z            |dk    r|sJ |dv rg }| j        }	 |                     |d          }|                     d|d          }d}|d	k    rH|                                  t          j        d
                              | j        | j                  rd}|r| 	                    d           nJ# t          $ r}|dk    rd}	n|d	k    rd}	nt          ||                    ||	f           || _        	 |                     |          }|                     d|          }n# t          $ rt}
|| _        |dk    rd}	n|d	k    rd}	nt          ||                    |
|	f           	 |dk    rd}|dz  }n|d	k    rd}nt          ||                     ||          |
d}
~
ww xY wY d}~nSd}~ww xY wd}|dk    rd}n|dk    rd}d}n|dk    rd}|                     |          }|                     ||          }t          ||          S )znamed=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
        >   rZ  r  r  r   r  r  r   >   rZ  r  F)r  r  Tr  r  z
requires\b)allowSemicolonrZ  zIf just a namez"If the function has no return typer  r  If typedef-like declarationz!If the function has a return typez%Type must be either just a name or a ztypedef-like declaration.z(Error when parsing function declaration.Nr  r  r  )r  r   r  r  r   recompiler   r   
assert_endrg   r  r   r   rR   )r   r  r  r]  r   r"  r#  must_end
ex_untypeddescex_typedr  r  r  s                 r   r  zDefinitionParser._parse_typeZ  s     
	      E MNNN&&((( KI6!33%u3MM
--DURW-XXJ&&LLNNNz-0066tQQ )#( 9OO4O888" + + +F??+DDj((?DD(j8""J#5666$"!%!7!7e!7!D!DJ111OODD&   (DH<*,,B,*<&&$'7888 F??%LF"&AAFF"j00%OFF"0j@"44[&IIxW) DDDD+Z  J  .((+
/)) //e/<<J))*)MMDz4(((s=   BC 
G8G-D<;G<
F:A/F55F::GG9ASTTypeWithInit | ASTTemplateParamConstrainedTypeWithInitc                   |r|dv sJ |                      ||          }|dk    r&|                     |          }t          ||          S | j        }d }	 |                     |d          }|t          |d           S |                                  | j        dv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          $ r.}	| |d
f|	dfg}
d}|dz  }| 	                    |
|          |	d }	~	ww xY w)N>   rZ  r  r  r  r  r  r  F)r  r  >   r   r   r  rX  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  rU   r   r   r   rg   r   rH   r   )r   r  r  rZ  initr   r   r   	type_initr  r(  r  s               r   r  z&DefinitionParser._parse_type_with_init  s     	LKKKKKe599O##***77D"4...h	**u*MMD|&tT222 LLNNN 
22 'tT222   	 	 	DHFFFFFF	 $$ 	/"4...	@((uD(AAI:4KKK 		@ 		@ 		@~HIABD 9C88C((s33?		@s6   (B7 ?6B7 7
C	CC=&D$ $
E.)EErT   c                    |                                  }|                                  |                     d          st          |d           S |                     dd           }t          ||          S )Nr  F)r   r   r   rT   r  )r   r   rZ  s      r   _parse_type_usingz"DefinitionParser._parse_type_using  sk    &&(($$ 	,d+++t,,D$'''r   r   c                    |                                  }|                                  |                     d          }t          ||          S )Nr  )r   r   r  r   )r   r  r  s      r   _parse_conceptzDefinitionParser._parse_concept  sC    --//--h77+{333r   r   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=  r   Fr  Tr   r   )r  r   r   r   r   r   rb   r   r   r   r   )	r   r  r   r  bases
visibilityr  pack	base_names	            r   _parse_classzDefinitionParser._parse_class  s   **,,&&((%%g..C   	!
((33 #"G::n-- #!%!2JLLNNN #4#8#8#C#C #"G 3355	''..\)Z$OOPPP##C(( eUE222r   rW   c                r    |                                  }|                                 }t          ||          S r   )r  r   rW   )r   r  r   s      r   _parse_unionzDefinitionParser._parse_union  s4    **,,&&((e$$$r   r   c                    d }|                                  }|                                 }|                                  d }|                     d          r|                     d          }t          ||||          S )Nr=  Fr  )r  r   r   r   r  r   )r   scopedr  r   underlying_types        r   _parse_enumzDefinitionParser._parse_enum  s{    **,,&&((C   	<"..U.;;OtV_e<<<r   r   c                J                                      }                                 }                                  d }                     d          r?                                  d fd}                     g |          }t          |          }t          |||          S )Nr  r~   rv   c                 0                          d          S r   )rG  r   s   r   r   z2DefinitionParser._parse_enumerator.<locals>.parser'  s    6656IIIr   r   )r   r  r   r   r  r&   r   )r   r   r  r  r   init_vals   `     r   _parse_enumeratorz"DefinitionParser._parse_enumerator  s    &&((**,,C   	,LLNNNJ J J J J J 66r6BBH!(++DT4///r   rz   c                   |                                   |                     d          r|                                 }nd }| j        }	 d }|                                   |                     d          rd}nE|                     d          rd}n-|r|                     d           n|                     d           |                                   |                     d          }|                                   |                     t                    rt          | j
                  }nd }|                                   |s-|                     d          r|                     dd 	          }n d }| j        d
vr|                     d           t          ||||          }|rt          ||          S t          |          S # t           $ r}|r 	 || _        |                     dd          }	|                                   |                     d          }t%          |	|          cY d }~S # t           $ r-}
|| _        d}|df|
dfg}|                     ||          d d }
~
ww xY wd }~ww xY w)Nre  r  r  zFExpected 'typename' or 'class' after template template parameter list.zKExpected 'typename' or 'class' in the beginning of template type parameter.r   r  FrX  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   rn   r$   r   r  r   rG   rK   rL   rg   r  rI   r   )r   nested_paramsr   keyparameter_packrY  r  r   r  param
e_non_typer  r(  s                r   _parse_template_parameterz*DefinitionParser._parse_template_parameter0  s   >>*%% 	! ??AAMM Mh>	ECLLNNN$$Z00  &&w//  			8   
 		<   LLNNN!--e44NLLNNNzz-(( "*4+<==

!
LLNNN! Vd&6&6s&;&; V**d*CC$D00IITUUU3Z D  23M4HHH+D111 	E 	E 	E E227OLL!%!1!1%!8!8.unEEEEEEEE" E E EA T
 #M	 ,,T6::DE	EsD   	E'G  1G   
I(
I#AH)#I()
I 3(II  I##I(rJ   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'Tr   r   z!Error in template parameter list.zIf parameterzExpected "," or ">".zIf no parameter)r   r   r   r   r  r   rg   _parse_requires_clauserJ   loggerdebugr   )
r   template_paramsr   errr  e_paramrequires_clauser  r(  r   s
             r   r  z/DefinitionParser._parse_template_parameter_listy  s    35$$ 	7II5666	;(CC6688&&u----"    LLNNN$$ ;"&"="="?"?(/JJJ!!#&& ;< 7KKn 56668II45555& 8 8 8KK$5 6777777778T""",,T6:::s0   )A6 6
B 	BBD- -
E7EEASTTemplateIntroduction | Nonec                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   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   rn   r   r   r^   r$   r   rF   rE   )r   r   conceptparamsr  txt_identifierrY  s          r   _parse_template_introductionz-DefinitionParser._parse_template_introduction  s   h	--//GG 	 	 	DH44	 	$$ 	DH4 	TLLNNN!--e44NLLNNN::m,, P		NOOO!.N**		&(67   '~66JMM::~VVWWWLLNNN$$ $$ IIRSSS+	T, 'w777s    33ASTRequiresClause | Nonec                R   |                                   |                     d          sd S dd}g }g }|                     ||                      	 |                                   d}|                     d	          rd}|                    d	           n,|                     d
          rd}|                    d
           |sn|                     ||                      t	          |          dk    rt          |d                   S t          t          ||                    S )Nrequiresr   r}   r~   rv   c                   g }g }|                     |                                            	 |                                  d}|                     d          rd}|                     d           n,|                     d          rd}|                     d           |sn(|                     |                                            t          |          dk    r|d         S t          ||          S )NTFr  andr   r   )r   r   r   r   r   r5  r	   )r   	and_exprsr6  r7  s       r   parse_and_exprz?DefinitionParser._parse_requires_clause.<locals>.parse_and_expr  s    ICT;;==>>>C ##D)) &#HJJt$$$$^^E** &#HJJu%%%   !?!?!A!ABBBC 9~~"" |##Is333r   TFz||orr   r   )r   r}   r~   rv   )r   r   r   r   r5  r=   r	   )r   r*  or_exprsr6  r7  s        r   r  z'DefinitionParser._parse_requires_clause  sA    	~~j)) 	4	4 	4 	4 	4* t,,---	2LLNNNH%% !

4    %% !

4    OONN400111	2 x==A$Xa[111$\(C%@%@AAAr   object_type#ASTTemplateDeclarationPrefix | Nonec                   g }	 |                                   d }| j        }|                     d          ry	 |                                 }n@# t          $ r3}|dk    r't          |          dk    rt          d           cY d }~S  d }~ww xY w|dk    r|j        |                     d           n| 	                                }|snL|dk    r/t          |          dk    r|| _        |                     d           |
                    |           t          |          dk    r|dk    r|                     d           t          |          dk    rd S t          |          S )	Nr   re  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  rg   r5  rD   requiresClauser   r#  r   )r   r-  ri  r!  r   r   s         r   "_parse_template_declaration_prefixz3DefinitionParser._parse_template_declaration_prefix  s    HJ		%LLNNNIMF(C~~j)) !@@BBFF&   "h..3y>>Q3F3F;DAAAAAAAA	
 )++0E0QIIGHHH::<< i''C	NNQ,>,>		LMMMV$$$-	%. y>>Q;)#;#;IIDEEEy>>Q4/	:::s#   A 
B	'B=B	BB	r  template_prefixrD   full_spec_shorthand	is_memberc                   |                                 }d}|sd}n"|r|j        d}d}nt          |j                  }|dz   |k     r|                     d||fz             ||k    r||z
  }|sB|s@d|dd|dd	|dd
}	|r|	| dz  }	|	t	          |          z  }	|                     |	           d t          |          D             }
|r|s|
                    |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                0    g | ]}t          g d           S )N)r0  )rJ   ).0_is     r   
<listcomp>z@DefinitionParser._check_template_consistency.<locals>.<listcomp>=  s9     P P P?A!"T:::P P Pr   )	num_templatesri  r5  r   r   rP  ranger  rD   )r   r  r2  r3  r4  num_argsis_member_instantiation
num_params	num_extrar  new_templatess              r   _check_template_consistencyz,DefinitionParser._check_template_consistency  s    ,,.."' 	<JJ <_6>
*.'' !:;;
a<*$$IICZ()  
 j   :-I& 
/F 
''/V' 'FPV' '?HN' ' '  # 4o3333Cs;'''		#P PEJ9EUEUP P PM  @'> @$$_%>???:=IIOr   
objectTypedirectiveTyper   c           	        |}|}|dvrt          d|z            |dvrt          d|z            d }d }d }d }|                                  |                     t                    r| j        }|dv r|                     |          }|dk    rg }	| j        }
	 |s|                     dd          }n5# t          $ r(}|		                    |d	f           |
| _        Y d }~nd }~ww xY w| j        }
	 |s| 
                                }n'# t          $ r<}|
| _        |		                    |d
f           d}|                     |	|          |d }~ww xY w|dk    r|                                 }n|dk    r|                     dd          }n|dk    r,|                     dd          }|                                 }ns|dk    r|                                 }nX|dk    r|                                 }n=|dk    r|                                 }n"|dk    r|                                 }nt&          |                     |j        |d|dk              }|                                  |                     d          }t/          |||||||          S )N>   r  rZ  r  r  r  r   r  
enumeratorz(Internal error, unknown objectType "%s".>   
enum-classenum-structvarr  rZ  r  r  r  r  r   r  rF  z+Internal error, unknown directiveType "%s".>   rZ  r  r  r  r   r  rZ  TrX  r  zIf type alias or template aliaszError in type declaration.r   r  r  r  r  r  rF  F)r3  r4  ;)r  r   r   rb   r   r1  r   r  rg   r   r  r   r  r  r  r  r  r	  r  r  rB  r   r   r   )r   rC  rD  r-  directive_typer   r2  trailing_requires_clausedeclarationr]  r   r   r  	semicolons                 r   parse_declarationz"DefinitionParser.parse_declarationE  sE    & 	
 	
 	
 FTUUU "
 
 
 =N   
#' ::n%% 	+*JUUU"EEkRRO&  K(C& M"&"2"2V"2"L"LK"   ""A'D#EFFF (CI" ;"&"8"8":":K" I I I""A'H#IJJJ5,,[&AAqH	I
 I%%--//KKH$$444x4PPKKJ&&**Z*HHK'+'B'B'D'D$$G##++--KKG##++--KKF""**,,KKL((0022KK  :: %!X-	 ; 
 
 	$$S))	$
 
 	
s0   B1 1
C#;CC#.D 
E7EEr'   c                    |                      d          }|                                 }|                     ||d          }t          ||          }d|_        |S )N	namespacer-  Fr3  )r1  r   rB  r'   rC  )r   r2  r   r   s       r   parse_namespace_objectz'DefinitionParser.parse_namespace_object  sq    AA# B 
 
 &&((::/u ; 
 
 411$
r   *tuple[ASTNamespace | ASTDeclaration, bool]c                   | j         }	 |                     d          }|                                 }|                                  |                     d           |                                  |                     ||d          }t          ||          }d|_        |dfS # t          $ r}	 || _         | 
                    dd          }|                                  |                     d           |                                  |dfcY d }~S # t          $ r&}|df|d	fg}d
}	|                     ||	          |d }~ww xY wd }~ww xY w)NxrefrR  z()TrS  r  FzIf shorthand refzIf full function refzError in cross-reference.)r   r1  r   r   r   r  rB  r'   rC  rg   rO  r   )
r   r   r2  r   res1e1res2e2r(  r  s
             r   parse_xref_objectz"DefinitionParser.parse_xref_object  s   h	@"EE" F  O **,,DLLNNNT"""OO">>o4 ?  O  o66D$DO: 	@ 	@ 	@@--j*EE  &&&!!!U{""""""" @ @ @+,/0 2,,T377R?@	@s7   BB# #
E	.ADE	
E!D<<EEE	ASTExpression | ASTTypec                   | j         }	 |                                 }|                                  |                                  |S # t          $ r}|| _         	 |                     d          }|                                  |                                  |cY d }~S # t          $ r&}d}|df|dfg}|                     ||          |d }~ww xY wd }~ww xY w)NFz%Error when parsing (type) expression.r   r   )r   r   r   r  rg   r  r   )r   r   r   ex_exprr  ex_typer  r(  s           r   parse_expressionz!DefinitionParser.parse_expression  s   h	H))++DLLNNNOOK 
	H 
	H 
	HDHH&&u--!!!





" H H H@ /2Wi4HI,,T6::GH
	Hs;   =A 
CC>BC
C'!CCCC)r~   r   )r~   r   )r~   rw   )r~   r   r   )r   r   r   r   r   r   r~   r   )r~   r4   )r~   r   )r~   r   )r~   r   )r~   r9   r4  )r9  rv   r   r)  r~   r:  )T)rI  rJ  r   rK  rL  r)  r~   rv   )r~   rx   )r~   rC   )F)rc  r)  r~   r(   )r~   rP   )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~   ru   )NT)r  r  r  r)  r~   r  r   )r  r  r  r  r~   rR   )r  r  r  r   r~   r  )r~   rT   )r~   r   )r~   r   )r~   rW   )r~   r   )r~   r   )r~   rz   )r~   rJ   )r~   r  )r~   r$  )r-  r   r~   r.  )
r  r(   r2  rD   r3  r)  r4  r)  r~   rD   )rC  r   rD  r   r~   r   )r~   r'   )r~   rU  )r~   r]  )6__name__
__module____qualname__propertyr   r   r   r   r   r   r   r   r   r   r   r   r  r  r   r8  r@  r   rG  r   r  r[  rb  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r	  r  r  r  r#  r  r1  rB  rO  rT  r\  ra  r   r   r   r}   r}      s          X - - - X- 0 0 0 X05 5 5 5&B B B BH@6 @6 @6 @6D   .% % % %B' ' ' 'D D D D8 8 8 8. . . .W2 W2 W2 W2ra0 a0 a0 a0F2 2 2 24:D :D :D :DxF F F F    >   ' ' ' ' RV+. +. +. +. +.^% % % %@B> B> B> B>H07 07 07 07 07h\B \B \B \B|1N 1N 1N 1Nfh
 h
 h
 h
Th
 h
 h
 h
TF F F F F66
 6
 6
 6
r AE{E {E {E {E {E| @D4% 4% 4% 4% 4%lZ) Z) Z) Z) Z)x,@ ,@ ,@ ,@\( ( ( (4 4 4 43 3 3 3<% % % %
= = = =0 0 0 0"GE GE GE GER ;  ;  ;  ;D$8 $8 $8 $8L3B 3B 3B 3Bj ;  ;  ;  ;N  + + + + +Z^
 ^
 ^
 ^
@
 
 
 
 @  @  @  @DH H H H H Hr   r}   )
__future__r   r  typingr   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   sphinx.domains.cpp._idsrY   rZ   r[   r\   r]   r^   r_   r`   ra   rb   rc   sphinx.utilrd   sphinx.util.cfamilyre   rf   rg   rh   ri   rj   rk   rl   rm   rn   ro   rp   rq   collections.abcrr   rs   rt   ru   rv   rw   rx   ry   rz   r{   	getLoggerrb  r  r}   r   r   r   <module>rn     sQ   " " " " " " 				            U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U Ul                                                                22222222                  
	8	$	$Y!H Y!H Y!H Y!H Y!Hz Y!H Y!H Y!H Y!H Y!Hr   