o
    N i¡  ã                   @  s|  d dl m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.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7 d dl8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z> d dl?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZL er´d dlMmNZNmOZO d dlmPZP G dd	„ d	eAƒZQd
S )é    )Úannotations)ÚTYPE_CHECKINGÚAny)2ÚASTAlignofExprÚASTArrayÚASTAssignmentExprÚASTBinOpExprÚASTBooleanLiteralÚASTBracedInitListÚASTCastExprÚASTCharLiteralÚASTDeclarationÚASTDeclaratorÚASTDeclaratorNameBitFieldÚASTDeclaratorNameParamÚASTDeclaratorParenÚASTDeclaratorPtrÚASTDeclSpecsÚASTDeclSpecsSimpleÚASTEnumÚASTEnumeratorÚASTExpressionÚASTFallbackExprÚASTFunctionParameterÚASTIdentifierÚASTIdExpressionÚASTInitializerÚ
ASTLiteralÚASTMacroÚASTMacroParameterÚASTNestedNameÚASTNumberLiteralÚASTParametersÚASTParenExprÚASTParenExprListÚASTPostfixArrayÚASTPostfixCallExprÚASTPostfixDecÚASTPostfixExprÚASTPostfixIncÚASTPostfixMemberOfPointerÚASTPostfixOpÚASTSizeofExprÚASTSizeofTypeÚASTStringLiteralÚ	ASTStructÚASTTrailingTypeSpecÚASTTrailingTypeSpecFundamentalÚASTTrailingTypeSpecNameÚASTTypeÚASTTypeWithInitÚASTUnaryOpExprÚASTUnion)Ú_expression_assignment_opsÚ_expression_bin_opsÚ_expression_unary_opsÚ	_keywordsÚ_simple_type_specifiers_reÚ
_string_re)Ú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)ÚDeclarationTypec                   @  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‹d/d0„Zd‹d1d2„Zd‹d3d4„Z	5ddŽd<d=„Zdd?d@„Zd„dAdB„ZddDdE„Zd‘dGdH„Zd’dKdL„Zd“dPdQ„Zdd”dSdT„Zd•dXdY„Z	5dd•dZd[„Zd–d—d_d`„Z d˜d™dbdc„Z!dšdedf„Z"d›dhdi„Z#dœdkdl„Z$ddndo„Z%dždqdr„Z&dŸdtdu„Z'd dydz„Z(dd{d|„Z)dd}d~„Z*d¡d€d„Z+d\S )¢ÚDefinitionParserÚreturnÚstrc                 C  s   dS )NÚC© ©ÚselfrQ   rQ   úL/home/ubuntu/.local/lib/python3.10/site-packages/sphinx/domains/c/_parser.pyÚlanguageX   ó   zDefinitionParser.languageúSequence[str]c                 C  ó   | j jS ©N)ÚconfigÚc_id_attributesrR   rQ   rQ   rT   Úid_attributes\   ó   zDefinitionParser.id_attributesc                 C  rX   rY   )rZ   Úc_paren_attributesrR   rQ   rQ   rT   Úparen_attributes`   r]   z!DefinitionParser.paren_attributesú
str | Nonec                 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)rS   ÚstartPosÚescaperQ   rQ   rT   Ú_parse_stringd   s"   

özDefinitionParser._parse_stringúASTLiteral | Nonec              
   C  s4  |   ¡  |  d¡rtdƒS |  d¡rtdƒS | j}|  t¡r-|  t¡ t| j|| j… ƒS t	t
ttfD ]}|  |¡rK|  t¡ t| j|| j… ƒ  S q3|  ¡ }|d urXt|ƒS |  t¡r˜| j d¡}| j d¡}zt||ƒW S  ty‰ } z|  d| ¡ W Y d }~d S d }~w ty—   |  d¡ Y d S w d S )	NÚtrueTÚfalseFrb   é   z8Can not handle character literal. Internal error was: %szJCan not handle character literal resulting in multiple decoded characters.)Úskip_wsÚ	skip_wordr	   re   ÚmatchrC   rD   r!   rh   rA   rE   rG   rI   rH   rk   r.   rB   Ú
last_matchÚgroupr   ÚUnicodeDecodeErrorrg   r@   )rS   re   ÚregexÚstringÚprefixÚdataÚerQ   rQ   rT   Ú_parse_literalw   sB   



ÿ

þ
€ýýzDefinitionParser._parse_literalúASTExpression | Nonec                 C  sH   | j dkrd S |  jd7  _|  ¡ }|  ¡  |  d¡s |  d¡ t|ƒS )Nú(rb   ú)z0Expected ')' in end of parenthesized expression.)rd   re   Ú_parse_expressionrp   Úskip_stringrg   r#   )rS   ÚresrQ   rQ   rT   Ú_parse_paren_expression   s   


z(DefinitionParser._parse_paren_expressionc                 C  sL   |   ¡  |  ¡ }|d ur|S |  ¡ }|d ur|S |  ¡ }|d ur$t|ƒS d S rY   )rp   r{   r‚   Ú_parse_nested_namer   )rS   r   ÚnnrQ   rQ   rT   Ú_parse_primary_expression¨   s   z*DefinitionParser._parse_primary_expressionÚnameÚopenÚcloseú.tuple[list[ASTExpression] | None, bool | None]c                 C  sÊ   |   ¡  |  |¡sdS |  |¡rg dfS g }d}	 |   ¡  |  ¡ }|   ¡  | |¡ |   ¡  |  |¡r8	 ||fS |  d¡sI|  d|› d|› d¡ | j|  krTdkrdn n|  jd	7  _d}	 ||fS q)
N)NNFTú,z	Error in z, expected ',' or 'z'.Ú}rb   )rp   Úskip_string_and_wsr€   r   Úappendrg   rd   re   )rS   r†   r‡   rˆ   ÚexprsÚtrailingCommaÚexprrQ   rQ   rT   Ú_parse_initializer_list¸   s0   




úòz(DefinitionParser._parse_initializer_listúASTParenExprList | Nonec                 C  s&   |   ddd¡\}}|d u rd S t|ƒS )Nzparenthesized expression-listr}   r~   )r‘   r$   ©rS   rŽ   r   rQ   rQ   rT   Ú_parse_paren_expression_listÖ   s   ÿz-DefinitionParser._parse_paren_expression_listúASTBracedInitList | Nonec                 C  s(   |   ddd¡\}}|d u rd S t||ƒS )Nzbraced-init-listÚ{r‹   )r‘   r
   r“   rQ   rQ   rT   Ú_parse_braced_init_listã   s   
z(DefinitionParser._parse_braced_init_listr(   c                 C  sì   |   ¡ }g }	 |  ¡  |  d¡r*|  ¡ }|  ¡  |  d¡s"|  d¡ | t|ƒ¡ q|  d¡rH|  d¡r<|  jd8  _n|  	¡ }| t
|ƒ¡ q|  d¡rT| tƒ ¡ q|  d	¡r`| tƒ ¡ q|  ¡ }|d urp| t|ƒ¡ q	 t||ƒS )
NTú[ú]z*Expected ']' in end of postfix expression.z->Ú*é   z++z--)r…   rp   rŒ   r   r€   rg   r   r%   re   rƒ   r*   r)   r'   r”   r&   r(   )rS   rx   Ú	postFixesr   r†   ÚlstrQ   rQ   rT   Ú_parse_postfix_expressionë   s:   








z*DefinitionParser._parse_postfix_expressionr   c                 C  sø   |   ¡  tD ] }|d dv r|  |¡}n|  |¡}|r&|  ¡ }t||ƒ  S q|  d¡rQ|  d¡rI| jdd}|   ¡  |  d¡sE|  	d¡ t
|ƒS |  ¡ }t|ƒS |  d	¡rx|  d¡s`|  	d
¡ | jdd}|   ¡  |  d¡st|  	d¡ t|ƒS |  ¡ S )Nr   ÚcnÚsizeofr}   F)Únamedr~   zExpecting ')' to end 'sizeof'.ÚalignofzExpecting '(' after 'alignof'.zExpecting ')' to end 'alignof'.)rp   r9   rq   r€   Ú_parse_cast_expressionr5   Úskip_word_and_wsrŒ   Ú_parse_typerg   r-   Ú_parse_unary_expressionr,   r   rž   )rS   Úopr   r   ÚtyprQ   rQ   rT   r¦     s6   	
þ








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.)re   rp   r€   r¥   rg   r£   r   r?   r¦   r   Ú_make_multi_error)rS   re   r¨   r   ÚexCastÚexUnaryÚerrsrQ   rQ   rT   r£   =  s6   



ÿÿ€ü€üz'DefinitionParser._parse_cast_expressionc                   s   d
‡ fdd„‰ ˆ | d	ƒS )NrS   rM   ÚopIdÚintrN   r   c           	   	     s  ˆ d t tƒkrd‡fdd„}n	d‡‡ ‡fdd„}g }g }| |ƒ ¡ 	 ˆ ¡  ˆj}d}tˆ  D ]I}|d	 d
v r@ˆ |¡s?q1nˆ |¡sFq1|ˆj  krQdkr\n n	ˆ jd8  _ nz|ƒ }| |¡ | |¡ d}W  n tyz   |ˆ_Y q1w |s~nq$t	||ƒS )Nrb   rN   r   c                     ó   ˆ   ¡ S rY   )r£   rQ   rR   rQ   rT   Úparserc  ó   zYDefinitionParser._parse_logical_or_expression.<locals>._parse_bin_op_expr.<locals>.parserc                     s   ˆ ˆˆd ƒS )Nrb   rQ   rQ   )Ú_parse_bin_op_exprr­   rS   rQ   rT   r°   f  s   TFr   Úabcnoxú&©rN   r   )
Úlenr8   r   rp   re   rq   r€   rd   r?   r   )	rS   r­   r°   rŽ   Úopsre   ÚoneMorer§   r   ©r²   )r­   rS   rT   r²   a  sB   
ÿ



ÿç
zIDefinitionParser._parse_logical_or_expression.<locals>._parse_bin_op_exprr   )rS   rM   r­   r®   rN   r   rQ   rR   rQ   r¹   rT   Ú_parse_logical_or_expressionU  s   
%z-DefinitionParser._parse_logical_or_expressionÚ
orExprHeadr   c                 C  s   d S rY   rQ   )rS   r»   rQ   rQ   rT   Ú"_parse_conditional_expression_tailˆ  rV   z3DefinitionParser._parse_conditional_expression_tailc                 C  sŠ   g }g }|   ¡ }| |¡ 	 d}|  ¡  tD ]%}|d dv r%|  |¡s$qn|  |¡s+q|   ¡ }| |¡ | |¡ d}q|s?nqt||ƒS )NTFr   r³   )rº   r   rp   r7   rq   r€   r   )rS   rŽ   r·   ÚorExprr¸   r§   r   rQ   rQ   rT   Ú_parse_assignment_expressionŒ  s,   

ÿ


ñ
z-DefinitionParser._parse_assignment_expressionc                 C  s   |   ¡ }|S rY   )rº   )rS   r½   rQ   rQ   rT   Ú_parse_constant_expressionª  s   z+DefinitionParser._parse_constant_expressionc                 C  ó   |   ¡ S rY   ©r¾   rR   rQ   rQ   rT   r   °  s   z"DefinitionParser._parse_expressionTÚendú	list[str]r°   úCallable[[], ASTExpression]ÚallowÚboolc           
   
   C  s@  | 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}nZddddœ}g }	| js€t	|	ƒdkrW| j
|v rWn)| j
|v re|	 || j
 ¡ nt	|	ƒdkrv| j
|	d krv|	 ¡  |  j d7  _ | jrKt	|ƒ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   éÿÿÿÿrb   z0Could not find end of expression starting at %d.)re   r?   ÚallowFallbackExpressionParsingÚwarnrp   rr   r<   Úmatched_textrf   r¶   rd   r   Úpoprg   rh   Ústripr   )
rS   rÂ   r°   rÅ   ÚprevPosrz   ri   ÚvalueÚbracketsÚsymbolsrQ   rQ   rT   Ú_parse_expression_fallback¶  sD   
ÿ€ù	

ùÿz+DefinitionParser._parse_expression_fallbackr    c                 C  s¸   g }|   ¡  d}|  d¡rd}	 |   ¡  |  t¡s|  d¡ | j}|tv r,|  d| ¡ | j| jjv rCd}|  || jt	| jjƒf ¡ t
|ƒ}| |¡ |   ¡  |  d¡sVnqt||ƒS )NFÚ.Trb   z#Expected identifier in nested name.z3Expected identifier in nested name, got keyword: %súExpected identifier, got user-defined keyword: %s. Remove it from c_extra_keywords to allow it as identifier.
Currently c_extra_keywords is %s.)rp   r€   rr   rF   rg   rÊ   r:   rZ   Úc_extra_keywordsrO   r   r   r    )rS   ÚnamesÚrootedÚ
identifierÚmsgÚidentrQ   rQ   rT   rƒ   á  s6   


ÿÿ

ÿ

ê
z#DefinitionParser._parse_nested_namec                 C  s<   |   t¡r| jS dD ]}|| jjv r|  |¡r|  S q
d S )N)rÆ   ÚcomplexÚ	imaginary)rr   r;   rÊ   rZ   rÔ   rq   )rS   ÚtrQ   rQ   rT   Ú_parse_simple_type_specifier  s   

€z-DefinitionParser._parse_simple_type_specifierú%ASTTrailingTypeSpecFundamental | Nonec                 C  sL   g }|   ¡  	 |  ¡ }|d u rn
| |¡ |   ¡  qt|ƒdkr"d S t|ƒS )NTr   )rp   rÝ   r   r¶   r1   )rS   rÕ   rÜ   rQ   rQ   rT   Ú_parse_simple_type_specifiers
  s   
ûz.DefinitionParser._parse_simple_type_specifiersr0   c                 C  sV   |   ¡  |  ¡ }|d ur|S d }|   ¡  dD ]}|  |¡r!|} nq|  ¡ }t||ƒS )N)ÚstructÚenumÚunion)rp   rß   r¤   rƒ   r2   )rS   r   rx   ÚkÚ
nestedNamerQ   rQ   rT   Ú_parse_trailing_type_spec  s   
þ
z*DefinitionParser._parse_trailing_type_specÚ	paramModeúASTParameters | Nonec                 C  sæ   |   ¡  |  d¡s|dkr|  d¡ nd S g }|   ¡  |  d¡sj	 |   ¡  |  d¡rA| td dƒ¡ |   ¡  |  d¡s@|  d¡ n)| jd d	d
}| t|ƒ¡ |   ¡  |  d¡rYq |  d¡r_n|  d| j› d¡ q!|  ¡ }t||ƒS )Nr}   ÚfunctionzExpecting "(" in parameters.r~   rb   ú...Tz'Expected ")" after "..." in parameters.Úsingle©Úouterr¡   rŠ   z)Expecting "," or ")" in parameters, got "z".)	rp   r€   rg   r   r   Ú_parse_type_with_initrd   Ú_parse_attribute_listr"   )rS   ræ   ÚargsÚargÚattrsrQ   rQ   rT   Ú_parse_parameters+  s6   






í
z"DefinitionParser._parse_parametersrì   Útypedr   c              	   C  s<  d}d}d}d}d}d}g }		 |   ¡  |s=|dkr)|  d¡r!d}q|  d¡r)d}q|dv r=|  d¡r5d}q|  d¡r=d}q|dkrS|sS|  d	¡rKd	}q|  d
¡rSd
}q|dkra|sa|  d¡}|raq|sm|rm|  d¡}|rmq|sy|ry|  d¡}|ryq|s…|r…|  d¡}|r…q|  ¡ }
|
r‘|	 |
¡ q	 t||||||t|	ƒƒS )zJust parse the simple ones.Nrb   ÚmemberÚautoÚregister)rô   rè   ÚstaticÚexternÚthread_localÚ_Thread_localrè   ÚinlineÚrestrictÚvolatileÚconst)rp   rq   Ú_parse_attributer   r   r=   )rS   rì   ró   ÚstorageÚthreadLocalrû   rü   rý   rþ   rñ   ÚattrrQ   rQ   rT   Ú_parse_decl_specs_simpleN  sn   










ÿz)DefinitionParser._parse_decl_specs_simpler   c                 C  sT   |r|dvrt d| ƒ‚|  ||¡}d }|r!|  ¡ }|  ||¡}nd }t||||ƒS )N©Útyperô   rè   ú#Internal error, unknown outer "%s".)Ú	Exceptionr  rå   r   )rS   rì   ró   Ú	leftSpecsÚ
rightSpecsÚtrailingrQ   rQ   rT   Ú_parse_decl_specsŠ  s   z"DefinitionParser._parse_decl_specsr¡   ú
bool | strr   c              	     s$  |dv sJ ‚|dkrCˆ   t¡r@ˆ jtv rˆ  dˆ j ¡ ˆ jˆ jjv r3d}ˆ  |ˆ jtˆ jjƒf ¡ tˆ jƒ}t	|gdd}nd }n	|rJˆ  
¡ }nd }g }	 ˆ  ¡  |rÙˆ  d¡rÙˆ  ¡  d}d}	d}
d}	 |sqˆ  d
¡rqd	}qf|	s{ˆ  d¡r{d	}	qf|
s…ˆ  d¡r…d	}
qf|sˆ  d¡rd	}qf	 |r”dnˆ  d¡}|r¨ˆ  d¡s¥ˆ  d¡ d }n$ˆ  d¡r°d }nd‡ fdd„}ˆ  dg|¡}ˆ  ¡  ˆ  d¡sÌˆ  d¡ | t||	|
|||ƒ¡ nnqOˆ  |¡}|d u rt|ƒdkr|r|dkr|rˆ  ¡  ˆ  d¡rˆ  ¡ }t||dS t|||dS )N)TFrê   rê   z$Expected identifier, got keyword: %srÓ   F©rÖ   rb   r˜   Tr÷   rþ   rý   rü   rš   r™   z&Expected ']' in end of array operator.rN   r   c                     r¯   rY   )r   rQ   rR   rQ   rT   r°   ×  r±   z>DefinitionParser._parse_declarator_name_suffix.<locals>.parserr   r  ú:)ÚdeclIdÚsize)r  ÚarrayOpsÚparamrµ   )rr   rF   rÊ   r:   rg   rZ   rÔ   rO   r   r    rƒ   rp   r€   r¤   rŒ   rÑ   r   r   rò   r¶   r¿   r   r   )rS   r¡   ræ   ró   rØ   r×   r  r  r÷   rþ   rý   rü   Úvlar  r°   r  rQ   rR   rT   Ú_parse_declarator_name_suffix˜  sŽ   

ÿÿ

ÿ










Ô
-ÿz.DefinitionParser._parse_declarator_name_suffixc                 C  s@  |dvr
t d| ƒ‚g }|  ¡  |rc|  d¡rc|  ¡  d}d}d}g }	 |s.|  d¡}|r.q#|s8|  d¡}|r8q#|sB|  d¡}|rBq#|  ¡ }	|	d urP| |	¡ q#	 |  |||¡}
t|
|||t|ƒd	S |rô| j	d
krô| j
}z
|  |||¡}|W S  tyó } zpd}|dkr‰|d7 }| ||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}|dkrÚ|d7 }| ||f¡ d}|  ||¡|‚d }~ww d }~ww | j
}z|  |||¡W S  ty } z|| _
| |df¡ d}|  ||¡|‚d }~ww )N)r  rè   z'Internal error, unknown paramMode '%s'.rš   Frb   rü   rý   rþ   )Únextrü   rý   rþ   rñ   r}   z If declarator-id with parametersrè   z (e.g., 'void f(int arg)')r~   z$Expected ')' in "( ptr-declarator )"r  ©r¡   ræ   ró   )Úinnerr  z"If parenthesis in noptr-declaratorz% (e.g., 'void (*f(int arg))(double)')zError in declaratorzIf declarator-idz!Error in declarator or parameters)r  rp   r€   r¤   rÿ   r   Ú_parse_declaratorr   r=   rd   re   r  r?   rg   r   r©   )rS   r¡   ræ   ró   Ú
prevErrorsrü   rý   rþ   rñ   r  r  re   r   ÚexParamQualrØ   r  ÚexNoPtrParenÚheaderrz   rQ   rQ   rT   r  ë  s¢   ÿ



þÿ


þ€ù€í€üz"DefinitionParser._parse_declaratorNÚallowFallbackúASTInitializer | Nonec                   sŒ   ˆ   ¡  |dkr		 ˆ  d¡sd S ˆ  ¡ }|d urt|ƒS |dkr#g }n|d u r,ddg}nˆ  d| ¡ d‡ fd
d„}ˆ j|||d}t|ƒS )Nrô   F)Ú	hasAssignú=rŠ   r~   z;Internal error, initializer for outer '%s' not implemented.rN   r   c                     r¯   rY   rÁ   rQ   rR   rQ   rT   r°   S  r±   z3DefinitionParser._parse_initializer.<locals>.parser)rÅ   rµ   )rp   r—   r   r€   rg   rÑ   )rS   rì   r  Ú
bracedInitÚfallbackEndr°   rÎ   rQ   rR   rT   Ú_parse_initializer<  s"   


ÿz#DefinitionParser._parse_initializerr3   c                 C  sb  |r|dvrt d| ƒ‚|sJ ‚|dkr…g }| j}z| j|dd}| jd|dd}| jdd W n{ ty„ } zHd	}| ||f¡ || _z| j|d
}| jd|d}W n& tyy }	 z|| _d}| |	|f¡ 	 d}
|
d7 }
|  ||
¡|	‚d}	~	ww W Y d}~n,d}~ww |dkr—| j|d
}| jd|d}nd}|dkrŸd}| j|d
}| j||d}t||ƒS )z¤
        named=False|'single'|True: 'single' is e.g., for function objects which
        doesn't need to name the arguments, but otherwise is a single name
        r  r  r  F)rì   ró   Tr  )ÚallowSemicolonzIf just a name©rì   )r¡   ræ   zIf typedef-like declarationz%Type must be either just a name or a ztypedef-like declaration.Nrè   rô   )	r  re   r  r  Ú
assert_endr?   r   r©   r3   )rS   r¡   rì   r  ri   Ú	declSpecsÚdeclÚ	exUntypedÚdescÚexTypedr  ró   ræ   rQ   rQ   rT   r¥   Y  sT   ÿ€öÿ€ú
zDefinitionParser._parse_typer4   c                 C  s4   |r|dv sJ ‚| j ||d}| j|d}t||ƒS )Nr  rë   r%  )r¥   r#  r4   )rS   r¡   rì   r  ÚinitrQ   rQ   rT   rí   ”  s
   
z&DefinitionParser._parse_type_with_initr   c                 C  s>  |   ¡  |  ¡ }|d u r|  d¡ |   ¡  |  d¡st|d ƒS |  d¡r)t|g ƒS g }	 |   ¡  |  d¡rL| td dƒ¡ |   ¡  |  d¡sK|  d¡ nN|  t	¡sV|  d¡ t
t| jƒgd	d
}|   ¡  |  d¡r| t|d	dƒ¡ |   ¡  |  d¡s€|  d¡ n| t|ƒ¡ |  d¡rŽq+|  d¡r”n|  d¡ q,t||ƒS )Nz(Expected identifier in macro definition.r}   r~   rb   ré   Tz-Expected ")" after "..." in macro parameters.z(Expected identifier in macro parameters.Fr  rŠ   z9Expected identifier, ')', or ',' in macro parameter list.)rp   rƒ   rg   rŒ   r   r€   r   r   rr   rF   r    r   rÊ   )rS   rÙ   rï   r„   rQ   rQ   rT   Ú_parse_macro›  sH   















ç
zDefinitionParser._parse_macror/   c                 C  ó   |   ¡ }t|ƒS rY   )rƒ   r/   ©rS   r†   rQ   rQ   rT   Ú_parse_structÂ  ó   zDefinitionParser._parse_structr6   c                 C  r.  rY   )rƒ   r6   r/  rQ   rQ   rT   Ú_parse_unionÆ  r1  zDefinitionParser._parse_unionr   c                 C  r.  rY   )rƒ   r   r/  rQ   rQ   rT   Ú_parse_enumÊ  r1  zDefinitionParser._parse_enumr   c                   s\   ˆ   ¡ }ˆ  ¡ }ˆ  ¡  d }ˆ  d¡r(ˆ  ¡  d‡ fdd„}ˆ  g |¡}t|ƒ}t|||ƒS )Nr   rN   r   c                     r¯   rY   )r¿   rQ   rR   rQ   rT   r°   Ö  r±   z2DefinitionParser._parse_enumerator.<locals>.parserrµ   )rƒ   rî   rp   r€   rÑ   r   r   )rS   r†   rñ   r,  r°   ÚinitValrQ   rR   rT   Ú_parse_enumeratorÎ  s   
z"DefinitionParser._parse_enumeratorÚ
objectTypeÚdirectiveTyper   c                 C  s   |dvr
t d| ƒ‚|dvrt d| ƒ‚d }|dkr"| jddd}nG|dkr.| jddd}n;|d	kr7|  ¡ }n2|d
kr@|  ¡ }n)|dkrI|  ¡ }n |dkrR|  ¡ }n|dkr[|  ¡ }n|dkrg| jddd}nt‚|d	krw|  	¡  |  
d¡}nd}t||||ƒS )N)rè   rô   Úmacrorà   râ   rá   Ú
enumeratorr  z(Internal error, unknown objectType "%s".)	rè   rô   Úvarr8  rà   râ   rá   r9  r  z+Internal error, unknown directiveType "%s".rô   T)r¡   rì   rè   r8  rà   râ   rá   r9  r  ú;F)r  rí   r¥   r-  r0  r2  r3  r5  ÚAssertionErrorrp   r€   r   )rS   r6  r7  ÚdeclarationÚ	semicolonrQ   rQ   rT   Úparse_declarationÝ  s6   




z"DefinitionParser.parse_declarationc                 C  rÀ   rY   )rƒ   rR   rQ   rQ   rT   Úparse_namespace_objectÿ  r±   z'DefinitionParser.parse_namespace_objectc                 C  s&   |   ¡ }|  ¡  |  d¡ |  ¡  |S )Nz())rƒ   rp   r€   r&  r/  rQ   rQ   rT   Úparse_xref_object  s
   
z"DefinitionParser.parse_xref_objectúASTExpression | ASTTypec                 C  sÀ   | j }d }z|  ¡ }|  ¡  |  ¡  W |S  ty_ } z?|| _ z|  d¡}|  ¡  |  ¡  W n% tyS } zd}g }| |df¡ | |df¡ |  ||¡|‚d }~ww W Y d }~|S d }~ww )NFz%Error when parsing (type) expression.zIf expressionzIf type)re   r   rp   r&  r?   r¥   r   r©   )rS   re   r   ÚexExprÚexTyper  r¬   rQ   rQ   rT   Úparse_expression
  s2   
ô
€û
ÿ€ôz!DefinitionParser.parse_expression)rN   rO   )rN   rW   )rN   r`   )rN   rl   )rN   r|   )r†   rO   r‡   rO   rˆ   rO   rN   r‰   )rN   r’   )rN   r•   )rN   r(   rµ   )r»   r   rN   r|   )T)rÂ   rÃ   r°   rÄ   rÅ   rÆ   rN   r   )rN   r    )rN   rÞ   )rN   r0   )ræ   rO   rN   rç   )rì   r`   ró   rÆ   rN   r   )rì   r`   ró   rÆ   rN   r   )r¡   r  ræ   rO   ró   rÆ   rN   r   )NT)rì   r`   r  rÆ   rN   r  rY   )r¡   r  rì   r`   rN   r3   )r¡   r  rì   r`   rN   r4   )rN   r   )rN   r/   )rN   r6   )rN   r   )rN   r   )r6  rO   r7  rO   rN   r   )rN   rB  ),Ú__name__Ú
__module__Ú__qualname__ÚpropertyrU   r\   r_   rk   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  r2  r3  r5  r?  r@  rA  rE  rQ   rQ   rQ   rT   rM   W   s\    


&





,
&

3


	ý
+
 
	


#<
TÿQ
;

'




"
rM   N)RÚ
__future__r   Útypingr   r   Úsphinx.domains.c._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   Úsphinx.domains.c._idsr7   r8   r9   r:   r;   r<   Úsphinx.util.cfamilyr=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   Úcollections.abcrJ   rK   rL   rM   rQ   rQ   rQ   rT   Ú<module>   s    Ð 4<