o
    N iß¾  ã                   @  sÖ   d dl mZ d dlmZ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 d dlmZ d dlmZ erBd dlmZmZ d dlmZ e e¡ZG dd	„ d	eƒZG d
d„ dƒZG dd„ dƒZddd„Z G dd„ dƒZ!dS )é    )Úannotations)ÚTYPE_CHECKINGÚAnyÚNoReturn)	ÚASTDeclarationÚASTIdentifierÚASTNestedNameÚASTNestedNameElementÚASTOperatorÚASTTemplateArgsÚASTTemplateDeclarationPrefixÚASTTemplateIntroductionÚASTTemplateParams)Ú__)Úlogging)ÚCallableÚIterator)ÚBuildEnvironmentc                   @  s    e Zd Zddd„Zdd
d„ZdS )Ú_DuplicateSymbolErrorÚsymbolÚSymbolÚdeclarationr   ÚreturnÚNonec                 C  s    |sJ ‚|sJ ‚|| _ || _d S ©N)r   r   )Úselfr   r   © r   úN/home/ubuntu/.local/lib/python3.10/site-packages/sphinx/domains/cpp/_symbol.pyÚ__init__   s   
z_DuplicateSymbolError.__init__Ústrc                 C  s   d| j  d¡ S )Nz'Internal C++ duplicate symbol error:
%sr   )r   Údump©r   r   r   r   Ú__str__"   s   z_DuplicateSymbolError.__str__N)r   r   r   r   r   r   ©r   r   )Ú__name__Ú
__module__Ú__qualname__r   r"   r   r   r   r   r      s    
r   c                   @  s   e Zd Zddd„ZdS )ÚSymbolLookupResultÚsymbolsúIterator[Symbol]ÚparentSymbolr   Ú	identOrOpúASTIdentifier | ASTOperatorÚtemplateParamsr   ÚtemplateArgsr   r   r   c                 C  s"   || _ || _|| _|| _|| _d S r   )r(   r*   r+   r-   r.   )r   r(   r*   r+   r-   r.   r   r   r   r   '   s
   
zSymbolLookupResult.__init__N)r(   r)   r*   r   r+   r,   r-   r   r.   r   r   r   ©r$   r%   r&   r   r   r   r   r   r'   &   ó    r'   c                   @  s   e Zd Zddd„ZdS )	Ú	LookupKeyÚdataúSlist[tuple[ASTNestedNameElement, ASTTemplateParams | ASTTemplateIntroduction, str]]r   r   c                 C  s
   || _ d S r   )r2   )r   r2   r   r   r   r   2   s   
zLookupKey.__init__N)r2   r3   r   r   r/   r   r   r   r   r1   1   r0   r1   r-   ú+ASTTemplateParams | ASTTemplateIntroductionr.   r   r   Úboolc           	      C  s¤   t | jƒt |jƒkrdS t | jƒdkrdS tt | jƒƒD ]3}| j| }|j| }t|jƒ}t|ƒ}| d¡}|j|kr> dS |rF|d d… n|}||krO dS qdS )NTr   z...éýÿÿÿF)ÚlenÚparamsÚargsÚranger   ÚnameÚendswithÚisPack)	r-   r.   ÚiÚparamÚargÚ	paramNameÚargTxtÚisArgPackExpansionÚargNamer   r   r   Ú_is_specialization8   s"   




ÿrE   c                      sH  e Zd ZdZdZdZdZdudd„Zdvd
d„Ze	dwdd„ƒZ
dxdd„Zdy‡ fdd„Zdzd$d%„Zd{d&d'„Zd|d*d+„Zdxd,d-„Zdxd.d/„Zd}d0d1„Zd~d3d4„Zedd6d7„ƒZd€d9d:„Zdd<d=„Zd‚dFdG„ZdƒdJdK„Zd„dTdU„Zd…dVdW„Zd†d]d^„Z	_d‡dˆdbdc„Zd‰ddde„ZdŠdfdg„Zd‹dhdi„Z dŒdldm„Z!ddndo„Z"dŽdqdr„Z#dŽdsdt„Z$‡  Z%S )r   r   z  Fr   r   c                 C  s   t ‚r   )ÚAssertionErrorr!   r   r   r   Ú__copy__W   s   zSymbol.__copy__Úmemor   c                 C  s   | j rt‚td d d d d d d ƒS r   )ÚparentrF   r   )r   rH   r   r   r   Ú__deepcopy__Z   s   zSymbol.__deepcopy__r9   r   c                  G  s$   t jtjtj dd t j| Ž  d S )NÚ ©Úend)ÚloggerÚdebugr   Údebug_indent_stringÚdebug_indent)r9   r   r   r   Údebug_print`   s   zSymbol.debug_printc                 C  sT   | j s| jrJ ‚| jrJ ‚| jrJ ‚| jrJ ‚| jrJ ‚d S | jr&| js(J ‚d S d S r   )rI   r+   r-   r.   r   Údocnamer!   r   r   r   Ú_assert_invariantse   s   




ÿzSymbol._assert_invariantsÚkeyr   Úvaluec                   s   |dkrt ‚tƒ  ||¡S )NÚchildren)rF   ÚsuperÚ__setattr__)r   rU   rV   ©Ú	__class__r   r   rY   q   s   zSymbol.__setattr__rI   úSymbol | Noner+   ú"ASTIdentifier | ASTOperator | Noner-   ú2ASTTemplateParams | ASTTemplateIntroduction | Noner.   r   úASTDeclaration | NonerS   ú
str | NoneÚlineú
int | Nonec                 C  s”   || _ d | _d | _|| _|d urt||ƒsd }|| _|| _|| _|| _|| _	d| _
|  ¡  g | _g | _| j r=| j j | ¡ | jrD| | j_|  ¡  d S )NF)rI   ÚsiblingAboveÚsiblingBelowr+   rE   r-   r.   r   rS   ra   ÚisRedeclarationrT   Ú	_childrenÚ_anonChildrenÚappendr   Ú!_add_template_and_function_params)r   rI   r+   r-   r.   r   rS   ra   r   r   r   r   v   s,   ÿzSymbol.__init__c                 C  s   d| j dd›dS )Nz<Symbol r   ©Úindentú>)Ú	to_stringr!   r   r   r   Ú__repr__ž   s   zSymbol.__repr__r   Úintc                 C  s„   |   ¡  | jd u sJ ‚| jd u sJ ‚| jd u sJ ‚|d usJ ‚|d us%J ‚|d us+J ‚|| _| | j_|| _|| _|   ¡  |  ¡  d S r   )rT   r   rS   ra   r   ri   )r   r   rS   ra   r   r   r   Ú_fill_empty¡   s   zSymbol._fill_emptyc                 C  s&  t jrt  jd7  _t  d¡ | jrE| jjD ].}| ¡ sq| jr'td|d}nd }t	| ¡ d ƒ}t
|gdgdd}|  |g || j| j¡ q| jd ur…| jjd ur…| jjD ]0}|jd u r\qT|jj}|d u reqTtd|d}|jrpJ ‚t|jƒdksyJ ‚|  |g || j| j¡ qTt jr‘t  jd8  _d S d S )Né   z"_add_template_and_function_params:ÚtemplateParam)Ú
objectTyper   F©ÚrootedÚfunctionParam)r   Údebug_lookuprQ   rR   r-   r8   Úget_identifierr   r   r	   r   Ú_add_symbolsrS   ra   Úfunction_paramsr@   r;   ru   r7   Únames)r   ÚtpÚdeclÚnneÚnnÚfpr   r   r   ri   ±   s6   


ÿz(Symbol._add_template_and_function_paramsc                 C  s6   | j d u rd S | | j jv sJ ‚| j j | ¡ d | _ d S r   )rI   rf   Úremover!   r   r   r   r   Õ   s
   

zSymbol.removec                 C  s„   g }| j D ]7}| |¡ |jr7|j|kr7d |_d |_d |_|jd ur'|j|j_|jd ur1|j|j_d |_d |_| |¡ q|| _ d S r   )rf   Ú	clear_docr   rS   ra   rc   rd   rh   )r   rS   ÚnewChildrenÚsChildr   r   r   r‚   Ü   s   






zSymbol.clear_docúIterator[Any]c                 c  s&    | V  | j D ]	}| ¡ E d H  qd S r   )rf   Úget_all_symbols)r   r„   r   r   r   r†   í   s
   €
ÿzSymbol.get_all_symbolsr)   c                 c  s0    | j D ]}|V  |j ¡ sq|jE d H  qd S r   )rf   r+   Úis_anonÚchildren_recurse_anon)r   Úcr   r   r   rˆ   ò   s   €

ûzSymbol.children_recurse_anonr1   c                 C  s†   g }| }|j r| |¡ |j }|j s| ¡  g }|D ]$}t|j|jƒ}|jd ur5| ||j|j ¡ f¡ q| ||jd f¡ qt	|ƒS r   )
rI   rh   Úreverser	   r+   r.   r   r-   Úget_newest_idr1   )r   r(   ÚsrU   r~   r   r   r   Úget_lookup_keyû   s   
þ
zSymbol.get_lookup_keyr   c                 C  sj   g }| }|j r| |¡ |j }|j s| ¡  g }g }|D ]}| t|j|jƒ¡ | d¡ qt||ddS )NFrt   )rI   rh   rŠ   r	   r+   r.   r   )r   r(   rŒ   r{   Ú	templatesr   r   r   Úget_full_nested_name  s   
þzSymbol.get_full_nested_namer,   r4   úASTTemplateArgs | NoneÚtemplateShorthandr5   Ú	matchSelfÚrecurseInAnonÚcorrectPrimaryTemplateArgsc           	   
   C  sJ   t jrt  d¡ | j|||||||dd}zt|ƒW S  ty$   Y d S w )Nz_find_first_named_symbol ->F)ÚsearchInSiblings)r   rw   rR   Ú_find_named_symbolsÚnextÚStopIteration)	r   r+   r-   r.   r‘   r’   r“   r”   Úresr   r   r   Ú_find_first_named_symbol  s   

ý
ÿzSymbol._find_first_named_symbolr   r•   c	                 #  sš   t jrYt  jd7  _t  d¡ t  jd7  _t  d¡ tjˆ t jd ¡dd t  dˆ ¡ t  dˆ¡ t  dˆ¡ t  d	ˆ¡ t  d
ˆ¡ t  dˆ¡ t  d|¡ t  d|¡ |rjˆd urjˆd urjtˆˆƒsjd ‰d‡ ‡‡‡fdd„}	d‡‡‡fdd„}
|
ƒ D ]>}t jr—t  d¡ tj| t jd ¡dd |	|ƒr¾t jr±t  jd7  _t  d¡ t  jd8  _|V  t jr¾t  jd7  _q€t jrËt  jd8  _d S d S )Nrq   z_find_named_symbols:úself:rK   rL   zidentOrOp:                  ztemplateParams:             ztemplateArgs:               ztemplateShorthand:          zmatchSelf:                  zrecurseInAnon:              zcorrectPrimaryTemplateAargs:zsearchInSiblings:           rŒ   r   r   r5   c                   s„   | j ˆ krdS | jd u ˆd u krˆd urdS ˆsdS ˆr't| jƒtˆƒkr'dS | jd u ˆd u kr2dS | jr@t| jƒtˆƒkr@dS dS )NFT)r+   r-   r   r.   ©rŒ   )r+   r.   r-   r‘   r   r   ÚmatchesK  s    
z+Symbol._find_named_symbols.<locals>.matchesr)   c                  3  sš    ˆ} t jrt  d¡ tj|  t jd ¡dd 	 ˆ r| V  ˆr'| jE d H  n| jE d H  | j	d u r4d S | j	} t jrLt  d¡ tj|  t jd ¡dd q)Nzsearching in self:rq   rK   rL   Tzsearching in sibling:)
r   rw   rR   rN   rO   rm   rQ   rˆ   rf   rc   rœ   )r’   r“   r   r   r   Ú
candidatesa  s$   €


óz.Symbol._find_named_symbols.<locals>.candidatesú
candidate:r   é   é   )rŒ   r   r   r5   ©r   r)   )r   rw   rQ   rR   rN   rO   rm   rE   )r   r+   r-   r.   r‘   r’   r“   r”   r•   r   rž   rŒ   r   )r+   r’   r“   r   r.   r-   r‘   r   r–   .  sJ   €





€ÿzSymbol._find_named_symbolsÚ
nestedNameÚtemplateDeclsú	list[Any]ÚonMissingQualifiedSymbolúTCallable[[Symbol, ASTIdentifier | ASTOperator, Any, ASTTemplateArgs], Symbol | None]ÚstrictTemplateParamArgListsÚancestorLookupTyper'   c              
   C  sx  t jrft  jd7  _t  d¡ t  jd7  _t  d¡ tj|  t jd ¡dd t  d|¡ t  dd d	d
„ |D ƒ¡¡ t  d|¡ t  d|¡ t  d|¡ t  d|¡ t  d|¡ t  d|	¡ t  d|
¡ |r}| ¡ t	|ƒks|| ¡ d t	|ƒks|J ‚nt	|ƒ| ¡ d ks‰J ‚|j
}| }|jrš|jrš|j}|js”|d urÑ|d }| ¡ sÑ|jrÑ|j|j|||
drËt	|ƒdkrÊ|dkrÊ|rÊ|jrÊ|jj|jkrÊnn|j}|js©t jræt  d¡ tj| t jd ¡dd d}|d d… D ]g}|j}|j}|r|r|t	|ƒk sJ ‚|| }|d7 }nd }n|r$|t	|ƒk r$|| }|d7 }nd }|j|||||||	d}|d u rQ|||||ƒ}|d u rQt jrNt  jd8  _ d S d}|}qît jrlt  d¡ tj| t jd ¡dd |d }|j}|j}|t	|ƒk r|d t	|ƒksˆJ ‚|| }n|t	|ƒks–J ‚d }|j||||||d|
d}t jr´t|ƒ}t  jd8  _t|||||ƒS )Nrq   z_symbol_lookup:r›   rK   rL   znestedName:        ztemplateDecls:     ú,c                 s  ó    | ]}t |ƒV  qd S r   ©r   ©Ú.0Útr   r   r   Ú	<genexpr>˜  ó   € z(Symbol._symbol_lookup.<locals>.<genexpr>zstrictTemplateParamArgLists:zancestorLookupType:ztemplateShorthand: zmatchSelf:         zrecurseInAnon:     zcorrectPrimaryTemplateArgs: zsearchInSiblings:  r   )r’   r“   r•   Úclasszstarting point:éÿÿÿÿ©r‘   r’   r“   r”   r¡   Fzhandle last name from:)r‘   r’   r“   r”   r•   )r   rw   rQ   rR   rN   rO   rm   ÚjoinÚnum_templatesr7   r{   ru   rI   Úis_operatorÚfind_identifierr+   r.   rš   r–   Úlistr'   )r   r£   r¤   r¦   r¨   r©   r‘   r’   r“   r”   r•   r{   r*   Ú	firstNameÚiTemplateDeclr;   r+   r.   r-   r   r(   r   r   r   Ú_symbol_lookup„  sÊ   

€ÿýÿó


ú
ÿ


üÿzSymbol._symbol_lookupc                   sä  t jr;t  jd7  _t  d¡ t  jd7  _t  dd dd„ |D ƒ¡¡ t  d|¡ t  dˆ ¡ t  d	ˆ› d
ˆ› ¡ d7dd„}| j|||dd dddddd
‰ˆd usUJ ‚tˆjƒ}t|ƒdkr·t jrœt  d¡ t  jd7  _t  dˆj	¡ t  dˆj
¡ t  dˆj¡ t  dˆ ¡ t  d ˆ› d
ˆ› ¡ t  jd8  _t ˆjˆj
ˆj	ˆjˆ ˆˆd!}t jrµt  jd"8  _|S t jrÕt  d#¡ t  jd7  _t  d$t|ƒ¡ t  jd8  _ˆ sêt jræt  d%¡ t  jd"8  _|d S g }	g }
g }|D ]}|jd u rÿ|	 |¡ qò|jr	| |¡ qò|
 |¡ qòt jr+t  d&t|	ƒ¡ t  d't|
ƒ¡ t  d(t|ƒ¡ d8‡ ‡‡‡fd)d*„}t|
ƒdkr?d }nY|ƒ }d9‡ fd.d/„}ˆ jd0kr_t|
ƒdksXJ ‚||
d |ƒ ˆ  ¡ }t jrmt  d1|¡ |
D ](}|jjd0kr}|||ƒ |j ¡ }t jrŒt  d2|¡ ||kr–|||ƒ qot|	ƒdkrÉt jr¿t  d3¡ |d ur³t  d4¡ nt  d5¡ t  jd"8  _|d urÆ|S |ƒ S t jrÜt  d6|d u¡ t  jd"8  _|d urå| ¡  |	d }| ˆ ˆˆ¡ |S ):Nrq   z_add_symbols:ztdecls:rª   c                 s  r«   r   r¬   r­   r   r   r   r°     r±   z&Symbol._add_symbols.<locals>.<genexpr>z
nn:       z
decl:     z
location: ú:r*   r   r+   r,   r-   r   r.   r   r   r\   c              	   S  st   t jr/t  jd7  _t  d¡ t  jd7  _t  d|¡ t  d|¡ t  d|¡ t  jd8  _t | |||d d d dS )Nrq   z'_add_symbols, onMissingQualifiedSymbol:útemplateParams:úidentOrOp:     ztemplateARgs:  r¡   ©rI   r+   r-   r.   r   rS   ra   )r   rw   rQ   rR   ©r*   r+   r-   r.   r   r   r   r¦     s   
ýz5Symbol._add_symbols.<locals>.onMissingQualifiedSymbolTF©r¨   r©   r‘   r’   r“   r”   r•   r   z _add_symbols, result, no symbol:r¾   r¿   ztemplateArgs:  zdeclaration:   zlocation:      rÀ   r¡   z_add_symbols, result, symbols:znumber symbols:zno declarationz
#noDecl:  z
#withDecl:z
#dupDecl: c               	     sB   t jrt  d¡ t ˆjˆjˆjˆjˆ ˆˆd} t jrt  d¡ | S )Nz begin: creating candidate symbolrÀ   z end:   creating candidate symbol)r   rw   rR   r*   r+   r-   r.   )r   ©r   rS   ra   ÚlookupResultr   r   ÚmakeCandSymbols  s   
û
z+Symbol._add_symbols.<locals>.makeCandSymbolr   Ú
candSymbolr   c                   sJ   t jrt  jd7  _t  d¡ t  jd8  _t  jd8  _d|_t| ˆ ƒ‚)Nrq   Úredeclarationr¡   T)r   rw   rQ   rR   re   r   )r   rÆ   )r   r   r   ÚhandleDuplicateDeclaration„  s   

z7Symbol._add_symbols.<locals>.handleDuplicateDeclarationÚfunctionzcandId:zoldId: zno match, no emptyz$result is already created candSymbolzresult is makeCandSymbol()zAno match, but fill an empty declaration, candSybmol is not None?:©
r*   r   r+   r,   r-   r   r.   r   r   r\   )r   r   )r   r   rÆ   r   r   r   )r   rw   rQ   rR   rµ   r¼   r¹   r(   r7   r-   r+   r.   r*   r   rh   re   rs   r‹   r   rp   )r   r£   r¤   r   rS   ra   r¦   r(   r   ÚnoDeclÚwithDeclÚdupDeclrŒ   rÅ   rÆ   rÈ   ÚcandIdÚoldIdr   rÃ   r   ry     sÒ   

ø	

û


	



€



þ
zSymbol._add_symbolsÚotherÚdocnamesú	list[str]Úenvr   c                 C  s  t jrt  jd7  _t  d¡ |d usJ ‚ddd	„}t jr$t  jd7  _|jD ]T}t jr>t  d
| t j¡¡ t  jd7  _|jrV|| |ƒ t jrUt  d¡ t  jd8  _q'| j|j|j	|j
dddddd}t|ƒ}t jrut  dt|ƒ¡ dd„ |D ƒ}t jr‡t  dt|ƒ¡ t|ƒdkr|| |ƒ t jrœt  jd8  _q'd }	|jd u r±t jr¬t  d¡ |d }	n9|j ¡ }
t jr¿t  d|
¡ |D ](}|jd u rÓt jrÐt  d¡ |}	qÁ|j ¡ }t jrát  d|¡ ||
kré|}	 nqÁt jrôt  jd8  _|	d u rþ|| |ƒ q'|jru|j|v ru|	js|	 |j|j|j¡ n^|	j|jkr?t|	jƒ}tdƒ}||	j|	j|	jj|f }tj||j|jfd n6|jj|	jjkrY|jjdv rY|	jj|jjkrYnd}|d|	 d¡ 7 }|d| d¡ 7 }tj||jd |	 |||¡ q't jrŠt  jd8  _d S d S )Nrq   zmerge_with:r   r   Ú
otherChildr   r   c                 S  s   | j  |¡ | |_| ¡  d S r   )rf   rh   rI   rT   )r   rÔ   r   r   r   ÚunconditionalAddÐ  s   z+Symbol.merge_with.<locals>.unconditionalAddzotherChild:
re   F)r+   r-   r.   r‘   r’   r“   r”   r•   zraw candidate symbols:c                 S  s   g | ]}|j s|‘qS r   )re   )r®   rŒ   r   r   r   Ú
<listcomp>í  s    z%Symbol.merge_with.<locals>.<listcomp>z non-duplicate candidate symbols:r   zno declaration in other childz
queryId:  zempty candidaterŸ   zRDuplicate C++ declaration, also defined at %s:%s.
Declaration is '.. cpp:%s:: %s'.)Úlocation)rr   rv   z1Internal C++ domain error during symbol merging.
z
ourChild:
z
otherChild:
r¡   )r   r   rÔ   r   r   r   )r   rw   rQ   rR   rf   rm   re   r–   r+   r-   r.   r¹   r7   r   r‹   rS   rp   ra   r   r   ÚdirectiveTyperN   Úwarningrs   rI   Ú
merge_with)r   rÐ   rÑ   rÓ   rÕ   rÔ   ÚcandiateIterrž   r(   ÚourChildÚqueryIdr   rÎ   r;   Úmsgr   r   r   rÚ   É  s´   



ú







þ
ÿ

ÿÿÿÿzSymbol.merge_withNÚtemplatePrefixú#ASTTemplateDeclarationPrefix | Nonec                 C  sZ   t jrt  jd7  _t  d¡ |r|j}ng }| j||d d d d}t jr+t  jd8  _|S )Nrq   z	add_name:)r   rS   ra   )r   rw   rQ   rR   rŽ   ry   )r   r£   rß   r¤   r™   r   r   r   Úadd_name4  s   
ÿzSymbol.add_namec                 C  s†   t jrt  jd7  _t  d¡ |d usJ ‚|d usJ ‚|d us!J ‚|j}|jr,|jj}ng }|  |||||¡}t jrAt  jd8  _|S )Nrq   zadd_declaration:)r   rw   rQ   rR   r;   rß   rŽ   ry   )r   r   rS   ra   r£   r¤   r™   r   r   r   Úadd_declarationC  s   

zSymbol.add_declarationc                 C  s0  t jrBt  jd7  _t  d¡ t  jd7  _t  d|¡ t  d|¡ t  d|¡ t  d|¡ tj|  t jd ¡dd t  jd	8  _| }|d ur–t jrkt  jd	7  _t  d
¡ tj| t jd ¡dd t  jd	8  _|rt|j|krt|S |ry|jn|j	}|D ]}|j|kr‰|  S q~|s	 d S |j
}|d usHd S )Nrq   zfind_identifier:zidentOrOp:       zmatchSelf:       zrecurseInAnon:   zsearchInSiblings:rK   rL   r¡   ztrying:)r   rw   rQ   rR   rN   rO   rm   r+   rˆ   rf   rc   )r   r+   r’   r“   r•   ÚcurrentrW   rŒ   r   r   r   r¸   U  s<   


ÿÿòzSymbol.find_identifierc           
   
   C  s8  t jrt  jd7  _t  d¡ t  jd7  _| }|jD ]t\}}}|d ur@d }|jD ]}|jd u r1q)|j ¡ |kr<|} nq)|}n|j}|j	}	|j
|||	ddddd}t jr~t  d|¡ t  d|¡ t  d|¡ |d urytj| t jd ¡dd	 nt  d
¡ |d u rt jrŒt  jd8  _ d S qt jršt  jd8  _|S )Nrq   zdirect_lookup:Fr´   zname:          r¾   zid:            rK   rL   z	not foundr¡   )r   rw   rQ   rR   r2   rf   r   r‹   r+   r.   rš   rN   rO   rm   )
r   rU   rŒ   r;   r-   Úid_r™   Úcandr+   r.   r   r   r   Údirect_lookupt  sP   


þû
ýzSymbol.direct_lookupÚtypútuple[list[Symbol] | None, str]c                   s°  t jrRt  jd7  _t  d¡ t  jd7  _t  d¡ tj|  t jd ¡dd t  d|¡ t  d|¡ t  d|¡ t  d	|¡ t  d
|¡ t  d|¡ t  d|¡ G dd„ dtƒ‰ d#‡ fdd„}z| j|||d||||d|d
}	W n
 ˆ y|   Y dS w |	d u rt jr‹t  jd8  _dS t	|	j
ƒ}
t|
ƒd kr¦t jr¢t  jd8  _|
d fS |	jjd urµ|	jjjd!krµdS |	jj|	jd d |||dd"}t jrÍt  jd8  _|d urÖ|gd fS dS )$Nrq   z
find_name:r›   rK   rL   znestedName:       ztemplateDecls:    ztyp:              ztemplateShorthand:zmatchSelf:        zrecurseInAnon:    zsearchInSiblings: c                   @  s   e Zd ZdS )z8Symbol.find_name.<locals>.QualifiedSymbolIsTemplateParamN)r$   r%   r&   r   r   r   r   ÚQualifiedSymbolIsTemplateParam¸  s    ré   r*   r   r+   r,   r-   r   r.   r   r   r\   c                   s   | j d ur| j jdkrˆ ‚d S )Nrr   )r   rs   rÁ   ©ré   r   r   r¦   »  s   
z2Symbol.find_name.<locals>.onMissingQualifiedSymbolFrÂ   )NÚtemplateParamInQualifiedr¡   )NNr   rr   r´   rÊ   )r   rw   rQ   rR   rN   rO   rm   Ú	Exceptionr¼   r¹   r(   r7   r*   r   rs   rš   r+   )r   r£   r¤   rç   r‘   r’   r“   r•   r¦   rÄ   r™   r   r   rê   r   Ú	find_name  sf   


ø	ÿ
ý
zSymbol.find_namec                 C  s  t jrt  jd7  _t  d¡ |j}|jr|jj}ng }ddd„}| j|||d||||ddd
}	t jr:t  jd8  _|	d u r@d S t|	j	ƒ}
t
|
ƒdkrMd S t |	j|	j|	j|	j|ddd}| ¡ }|
D ]}|jd u rjqb|j ¡ }||kr{| ¡  |  S qb| ¡  d S )Nrq   zfind_declaration:r*   r   r+   r,   r-   r   r.   r   r   r\   c                 S  s   d S r   r   rÁ   r   r   r   r¦   ý  s   z9Symbol.find_declaration.<locals>.onMissingQualifiedSymbolFrÂ   r   ÚfakeDocnameForQueryé*   rÀ   rÊ   )r   rw   rQ   rR   r;   rß   rŽ   r¼   r¹   r(   r7   r*   r+   r-   r.   r‹   r   r   )r   r   rç   r‘   r’   r“   r£   r¤   r¦   rÄ   r(   ÚquerySymbolrÝ   r   rÎ   r   r   r   Úfind_declarationñ  sX   


ø	
ú

þzSymbol.find_declarationrk   c                 C  s  t j| g}| js| d¡ nZ| jr'| t| jƒ¡ | d¡ | t j| ¡ | jr3| t| jƒ¡ n| t| jƒ¡ | jrF| t| jƒ¡ | jri| d¡ | j	rV| d¡ | d| jj
 d ¡ | t| jƒ¡ | jr|| d¡ | | j¡ | d¡ | d¡ d	 |¡S )
Nz::Ú
z: z!!duplicate!! Ú{z} z	(ú)rK   )r   rP   rI   rh   r-   r   r+   r   r.   re   rs   rS   rµ   )r   rk   r™   r   r   r   rm   '  s0   






zSymbol.to_stringc                   s&   d  |  ˆ ¡g‡ fdd„| jD ƒ¢¡S )NrK   c                 3  s    | ]
}|  ˆ d  ¡V  qdS )rq   N)r    )r®   r‰   rj   r   r   r°   F  s   € zSymbol.dump.<locals>.<genexpr>)rµ   rm   rf   )r   rk   r   rj   r   r    C  s
   ÿþzSymbol.dump)r   r   )rH   r   r   r   )r9   r   r   r   )r   r   )rU   r   rV   r   r   r   )rI   r\   r+   r]   r-   r^   r.   r   r   r_   rS   r`   ra   rb   r   r   r#   )r   r   rS   r   ra   ro   r   r   )rS   r   r   r   )r   r…   r¢   )r   r1   )r   r   )r+   r,   r-   r4   r.   r   r‘   r5   r’   r5   r“   r5   r”   r5   r   r\   )r+   r,   r-   r4   r.   r   r‘   r5   r’   r5   r“   r5   r”   r5   r•   r5   r   r)   )r£   r   r¤   r¥   r¦   r§   r¨   r5   r©   r   r‘   r5   r’   r5   r“   r5   r”   r5   r•   r5   r   r'   )r£   r   r¤   r¥   r   r_   rS   r`   ra   rb   r   r   )rÐ   r   rÑ   rÒ   rÓ   r   r   r   r   )r£   r   rß   rà   r   r   )r   r   rS   r   ra   ro   r   r   )
r+   r,   r’   r5   r“   r5   r•   r5   r   r\   )rU   r1   r   r   )r£   r   r¤   r¥   rç   r   r‘   r5   r’   r5   r“   r5   r•   r5   r   rè   )r   r   rç   r   r‘   r5   r’   r5   r“   r5   r   r\   )rk   ro   r   r   )&r$   r%   r&   rQ   rP   rw   Údebug_show_treerG   rJ   ÚstaticmethodrR   rT   rY   r   rn   rp   ri   r   r‚   r†   Úpropertyrˆ   r   r   rš   r–   r¼   ry   rÚ   rá   râ   r¸   ræ   rí   rñ   rm   r    Ú__classcell__r   r   rZ   r   r   Q   sL    




(


$






V 
 
?lÿ



)
T
6r   N)r-   r4   r.   r   r   r5   )"Ú
__future__r   Útypingr   r   r   Úsphinx.domains.cpp._astr   r   r   r	   r
   r   r   r   r   Úsphinx.localer   Úsphinx.utilr   Úcollections.abcr   r   Úsphinx.environmentr   Ú	getLoggerr$   rN   rì   r   r'   r1   rE   r   r   r   r   r   Ú<module>   s    ,

