o
    Nie                     @  s   d dl mZ d dlmZmZ d dlmZmZmZ d dl	m
Z
 d dlmZ er>d dlmZmZmZmZ d dl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G dd dZdS )    )annotations)TYPE_CHECKINGAny)ASTDeclarationASTIdentifierASTNestedName)__)logging)CallableIterableIteratorSequence)Self)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   L/home/ubuntu/.local/lib/python3.10/site-packages/sphinx/domains/c/_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Sequence[Symbol]parentSymbolr   identr   r   r   c                 C  s   || _ || _|| _d S 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$   "   s    r$   c                   @  s    e Zd ZdddZddd	Zd
S )	LookupKeydatalist[tuple[ASTIdentifier, str]]r   r   c                 C  s
   || _ d S r   )r*   )r   r*   r   r   r   r   +   s   
zLookupKey.__init__r   c                 C  s"   d dd | jD }d| dS )N, c                 s  s&    | ]\}}d | d| dV  qdS )(r,   )Nr   ).0r(   id_r   r   r   	<genexpr>/   s   $ z$LookupKey.__str__.<locals>.<genexpr>[])joinr*   )r   innerr   r   r   r   .   s   zLookupKey.__str__N)r*   r+   r   r   r   r    r   r   r   r   r)   *   s    
r)   c                      sN  e Zd ZdZdZdZdZdjddZdkd
dZe	dlddZ
dmddZdn fddZdod!d"Zdpd#d$Zedqd&d'Zdrd)d*Zdrd+d,Zdsd/d0Zdmd1d2Zdmd3d4Zdtd5d6Zdud8d9Zedud:d;Zdvd=d>Zdwd@dAZdxdKdLZdydMdNZdzdTdUZd{dVdWZd|dXdYZd}d[d\Z d~d]d^Z!dd`daZ"dbdcddfdgZ#ddhdiZ$  Z%S )r   r   z  Fr   r   c                 C  s   t r   )AssertionErrorr   r   r   r   __copy__9   s   zSymbol.__copy__memor   c                 C  s   | j rttd d d d d S r   )parentr6   r   )r   r8   r   r   r   __deepcopy__<   s   zSymbol.__deepcopy__argsr   c                  G  s2   t jt j }|ddd | D 7 }t| d S )N c                 s  s    | ]}t |V  qd S r   )r   )r/   er   r   r   r1   E   s    z%Symbol.debug_print.<locals>.<genexpr>)r   debug_indent_stringdebug_indentr4   loggerdebug)r;   msgr   r   r   debug_printB   s   zSymbol.debug_printc                 C  s6   | j s| jrJ | jrJ d S | jr| jsJ d S d S r   )r9   r   docnamer   r   r   r   _assert_invariantsH   s   

zSymbol._assert_invariantskeyr   valuec                   s   |dkrt t ||S )Nchildren)r6   super__setattr__)r   rF   rG   	__class__r   r   rJ   Q   s   zSymbol.__setattr__r9   Symbol | Noner(   ASTIdentifier | Noner   ASTDeclaration | NonerD   
str | Noneline
int | Nonec                 C  sx   || _ d | _d | _|| _|| _|| _|| _d| _|   i | _	i | _
t | _| j r/| j |  | jr6| | j_|   d S )NF)r9   siblingAbovesiblingBelowr(   r   rD   rQ   isRedeclarationrE   _children_by_name_children_by_docnameset_anon_children
_add_childr   _add_function_params)r   r9   r(   r   rD   rQ   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__w   s   zSymbol.__repr__Iterable[Symbol]c                 C  s
   | j  S r   )rV   valuesr   r   r   r   	_childrenz   s   
zSymbol._childrenchildc                 C  sP   |j j}|| jv rd S || j|< || j|ji |< |j jr&| j| d S d S r   )	r(   namerV   rW   
setdefaultrD   is_anonymousrY   addr   rd   re   r   r   r   rZ   ~   s   

zSymbol._add_childc                 C  sJ   |j j}| j|d  | j|ji |d  |j jr#| j	| d S d S r   )
r(   re   rV   poprW   getrD   rg   rY   discardri   r   r   r   _remove_child   s   zSymbol._remove_childr   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   )rE   r   rD   rQ   r   r[   )r   r   rD   rQ   r   r   r   _fill_empty   s   zSymbol._fill_emptyc                 C  s   t jrt  jd7  _t d | jd urN| jjd urN| jjD ]/}|jd u r&q|jj}|d u r/qtdd |}|j	r:J t
|jdksCJ | ||| j| j qt jrZt  jd8  _d S d S )N   z_add_function_params:functionParam)r   debug_lookupr?   rC   r   function_paramsargre   r   rootedlennames_add_symbolsrD   rQ   )r   pnndeclr   r   r   r[      s"   


zSymbol._add_function_paramsc                 C  s    | j r| j |  d | _ d S d S r   )r9   rm   r   r   r   r   remove   s   
zSymbol.removec                 C  s   || j vr| jD ]}|| qd S | j |}| D ]*}d |_d |_d |_|jd ur1|j	|j_	|j	d ur;|j|j	_d |_d |_	| 
| qd S r   )rW   rc   	clear_docrj   rb   r   rD   rQ   rS   rT   rm   )r   rD   rd   rH   r   r   r   r}      s"   





zSymbol.clear_docIterator[Symbol]c                 c  s&    | V  | j D ]	}| E d H  qd S r   )rc   get_all_symbols)r   sChildr   r   r   r      s
   
zSymbol.get_all_symbolsc                 c  s    | j E d H  d S r   )rc   r   r   r   r   rH      s   zSymbol.childrenr)   c                 C  st   g }| }|j r|| |j }|j s|  g }|D ]}|jd ur-||j|j f q||jd f qt|S r   )r9   appendreverser   r(   get_newest_idr)   )r   r%   srF   r   r   r   get_lookup_key   s   

zSymbol.get_lookup_keyr   c                 C  sF   g }| }|j r|| |j }|j s|  dd |D }t|ddS )Nc                 S  s   g | ]}|j qS r   )r(   )r/   r   r   r   r   
<listcomp>   s    z/Symbol.get_full_nested_name.<locals>.<listcomp>F)ru   )r9   r   r   r   )r   r%   r   rw   r   r   r   get_full_nested_name   s   
zSymbol.get_full_nested_name
nestedNameonMissingQualifiedSymbol0Callable[[Symbol, ASTIdentifier], Symbol | None]ancestorLookupType	matchSelfboolrecurseInAnonsearchInSiblingsSymbolLookupResult | Nonec                 C  s  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| t d| t d	| t d
| |j}| }|jr[|j	d ur[|j	}|j	d usS|d urs|d }	|j	rs|	j
|jv rmn|j	}|j	sft jrt d t|jt jd dd |d d D ](}
|
j
}||jv r|j| }n|||
}|d u rt jrt  jd8  _ d S |}qt jrt d t|jt jd dd |d }
|
j
}|j|}|s|r|jD ]}||jv r|j| } nqt jrt  jd8  _|r|gng }t|||
S )Nrp   z_symbol_lookup:zself:FaddEndNewlineznestedName:        zancestorLookupType:zmatchSelf:         zrecurseInAnon:     zsearchInSiblings:  r   zstarting point:   zhandle last name from:)r   rr   r?   rC   r@   rA   r_   rw   ru   r9   re   rV   rk   rY   r$   )r   r   r   r   r   r   r   rw   r'   	firstNamer(   re   r   rd   resultr   r   r   _symbol_lookup   sj   










zSymbol._symbol_lookupc                   sh  t jr-t  jd7  _t d t  jd7  _t d| t d  t d d  d)dd}| j||d ddddd usCJ tj}t|dkrt jr|t d t  jd7  _t dj t d  t d d  t  jd8  _t j	j d}t jrt  jd8  _|S t jrt d t  jd7  _t dt| t  jd8  _ st jrt d t  jd8  _|d S g }g }	g }
|D ]}|j
d u r|| q|jr|
| q|	| qt jrt dt| t dt|	 t dt|
 d* fdd}t|	dkrd }nM| }d+ fd"d#} jd$kr:t|	dks3J ||	d |   }t jrHt d%| |	D ]}|j
 }t jr[t d&| ||kre||| qJt|dkrt jrt d'|d u t  jd8  _|d ur|S | S t jrt d(|d u t  jd8  _|d ur|  |d }|  |S ),Nrp   z_add_symbols:z
nn:       z
decl:     z
location: :r'   r   r(   r   r   c                 S  sX   t jr#t  jd7  _t d t  jd7  _t d| t  jd8  _t | |d d d dS )Nrp   z'_add_symbols, onMissingQualifiedSymbol:zident: r   r9   r(   r   rD   rQ   )r   rr   r?   rC   r'   r(   r   r   r   r   T  s   
z5Symbol._add_symbols.<locals>.onMissingQualifiedSymbolFr   r   r   r   r   z _add_symbols, result, no symbol:zident:       zdeclaration: zlocation:    r   r   z_add_symbols, result, symbols:znumber symbols:zno declarationz
#noDecl:  z
#withDecl:z
#dupDecl: c                    s:   t jrt d t jj d} t jrt d | S )Nz begin: creating candidate symbolr   z end:   creating candidate symbol)r   rr   rC   r'   r(   )r   r   rD   rQ   lookupResultr   r   makeCandSymbol  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|  )Nrp   redeclarationr   T)r   rr   r?   rC   rU   r   )r   r   )r   r   r   handleDuplicateDeclaration  s   

z7Symbol._add_symbols.<locals>.handleDuplicateDeclarationfunctionzcandId:zoldId: z,no match, no empty, candSybmol is not None?: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   rr   r?   rC   r   listr%   rv   r(   r'   r   r   rU   
objectTyper   r|   ro   )r   r   r   rD   rQ   r   r%   r   noDeclwithDecldupDeclr   r   r   r   candIdoldIdr   r   r   rx   A  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 |jD ]b}|jj}|| jvr0| |_| 	| |
  q| j| }|jrs|j|v rs|jsK||j|j|j n(|j|jkrrt|j}td}||j|j|jj|f }tj||j|jfd n	 |||| qt jrt  jd8  _d S d S )Nrp   zmerge_with:zNDuplicate C declaration, also defined at %s:%s.
Declaration is '.. c:%s:: %s'.)location)r   rr   r?   rC   rc   r(   re   rV   r9   rZ   rE   r   rD   ro   rQ   r   r   directiveTyper@   warning
merge_with)	r   r   r   r   
otherChild	otherNameourChildre   rB   r   r   r   r     s:   






zSymbol.merge_withc                 C  sH   t jrt  jd7  _t d | j|d d d d}t jr"t  jd8  _|S )Nrp   z	add_name:)r   rD   rQ   )r   rr   r?   rC   rx   )r   r   resr   r   r   add_name  s   
zSymbol.add_namec                 C  sp   t jrt  jd7  _t d |d usJ |d usJ |d us!J |j}| ||||}t jr6t  jd8  _|S )Nrp   zadd_declaration:)r   rr   r?   rC   re   rx   )r   r   rD   rQ   r   r   r   r   r   add_declaration  s   
zSymbol.add_declarationr   c                 C  sF  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rt jrkt  jd	7  _t d
 t|jt jd dd t  jd	8  _|rt|j|krt|S |j}||j	v r|j	| S |r|j
D ]}||j	v r|j	|   S q|s	 d S |j}|d usHd S )Nrp   zfind_identifier:zident:           zmatchSelf:       zrecurseInAnon:   zsearchInSiblings:Fr   r   ztrying:)r   rr   r?   rC   r@   rA   r_   r(   re   rV   rY   rS   )r   r(   r   r   r   currentre   rd   r   r   r   find_identifier$  sB   





zSymbol.find_identifierc                 C  s   t jrt  jd7  _t d t  jd7  _| }|jD ]8\}}|j|j}t jrMt d|j t d| |d urHt	|j
t jd dd nt d |d u rS nqt jr^t  jd8  _|S )	Nrp   zdirect_lookup:zname:          zid:            Fr   z	not foundr   )r   rr   r?   rC   r*   rV   rk   re   r@   rA   r_   )r   rF   r   r(   r0   r   r   r   direct_lookupF  s&   

zSymbol.direct_lookuptypc                 C  s   t jrt  jd7  _t d dd	d
}| j|||||dd}t jr)t  jd8  _|d u r/d S t|j}t|dkr<d S |d S )Nrp   zfind_declaration:r'   r   r(   r   r   rM   c                 S  s   d S r   r   r   r   r   r   r   b  s   z9Symbol.find_declaration.<locals>.onMissingQualifiedSymbolFr   r   )r'   r   r(   r   r   rM   )r   rr   r?   rC   r   r   r%   rv   )r   r   r   r   r   r   r   r%   r   r   r   find_declaration[  s&   


zSymbol.find_declarationTr   r]   r   c                C  s   t j| g}| js|d n+| jr|| jj n|t| j | jr:|d | jr2|d |t| j | j	rM|d || j	 |d |rT|d d
|S )Nz::z: z!!duplicate!! z	(r.   
r<   )r   r>   r9   r   r(   re   r   r   rU   rD   r4   )r   r]   r   r   r   r   r   r_   x  s$   





zSymbol.to_stringc                   s&   d |  g fdd| jD S )Nr<   c                 3  s    | ]
}|  d  V  qdS )rp   N)r   )r/   cr\   r   r   r1     s    zSymbol.dump.<locals>.<genexpr>)r4   r_   rc   )r   r]   r   r\   r   r     s   &zSymbol.dump)r   r   )r8   r   r   r   )r;   r   r   r   )r   r   )rF   r   rG   r   r   r   )r9   rM   r(   rN   r   rO   rD   rP   rQ   rR   r   r   r   )r   ra   )rd   r   r   r   )r   r   rD   r   rQ   rn   r   r   )rD   r   r   r   )r   r~   )r   r)   )r   r   )r   r   r   r   r   rP   r   r   r   r   r   r   r   r   )
r   r   r   rO   rD   rP   rQ   rR   r   r   )r   r   r   r   r   r   r   r   )r   r   r   r   )r   r   rD   r   rQ   rn   r   r   )
r(   r   r   r   r   r   r   r   r   rM   )rF   r)   r   rM   )
r   r   r   r   r   r   r   r   r   rM   )r]   rn   r   r   r   r   )r]   rn   r   r   )&r!   r"   r#   r?   r>   rr   debug_show_treer7   r:   staticmethodrC   rE   rJ   r   r`   propertyrc   rZ   rm   ro   r[   r|   r}   r   rH   r   r   r   rx   r   r   r   r   r   r   r_   r   __classcell__r   r   rK   r   r   3   sJ    


	

!












L 
(
%
	

"
r   N)
__future__r   typingr   r   sphinx.domains.c._astr   r   r   sphinx.localer   sphinx.utilr	   collections.abcr
   r   r   r   typing_extensionsr   sphinx.environmentr   	getLoggerr!   r@   	Exceptionr   r$   r)   r   r   r   r   r   <module>   s    
	