
    -Phi                       d dl mZ d dlmZ d dl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mZ d dlmZ d d	lmZ  e
j        e          Z G d
 de          Z G d d          Z G d d          Z G d d          ZdS )    )annotations)TYPE_CHECKING)ASTDeclarationASTNestedName)__)logging)CallableIterableIteratorSequence)AnySelf)ASTIdentifier)BuildEnvironmentc                      e Zd ZddZdd	Zd
S )_DuplicateSymbolErrorsymbolSymboldeclarationr   returnNonec                2    |sJ |sJ || _         || _        d S N)r   r   )selfr   r   s      X/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/sphinx/domains/c/_symbol.py__init__z_DuplicateSymbolError.__init__   s,    &    strc                <    d| j                             d          z  S )Nz%Internal C duplicate symbol error:
%sr   )r   dumpr   s    r   __str__z_DuplicateSymbolError.__str__   s    7$+:J:J1:M:MMMr   N)r   r   r   r   r   r   r   r   )__name__
__module____qualname__r   r"    r   r   r   r      sB        ' ' ' 'N N N N N Nr   r   c                  R    e Zd ZU dZded<   ded<   ded<   ddZedd            ZdS )SymbolLookupResultsymbolsparent_symbolidentIterable[Symbol]r+   r   r,   r   ident_or_opr-   r   r   c                0    || _         || _        || _        d S r   r*   )r   r+   r,   r-   s       r   r   zSymbolLookupResult.__init__*   s     *


r   c                    | j         S r   )r,   r!   s    r   parentSymbolzSymbolLookupResult.parentSymbol1   s    !!r   N)r+   r.   r,   r   r-   r   r   r   r   r   )r$   r%   r&   	__slots____annotations__r   propertyr2   r'   r   r   r)   r)   #   ss         3I    " " " X" " "r   r)   c                  6    e Zd ZU dZded<   ddZddZdd	Zd
S )	LookupKeydata#Sequence[tuple[ASTIdentifier, str]]r:   r   r   c                   || _         d S r   r9   )r   r:   s     r   r   zLookupKey.__init__;   s    			r   r   c                    d| j         dS )Nz
LookupKey()r9   r!   s    r   __repr__zLookupKey.__repr__>   s    *DI****r   c                V    d                     d | j        D                       }d| dS )N, c              3  .   K   | ]\  }}d | d| dV  dS )(rA   r>   Nr'   ).0r-   id_s      r   	<genexpr>z$LookupKey.__str__.<locals>.<genexpr>B   s:      JJ*%-e--s---JJJJJJr   [])joinr:   )r   inners     r   r"   zLookupKey.__str__A   s2    		JJ	JJJJJ5|||r   N)r:   r;   r   r   r#   )r$   r%   r&   r4   r5   r   r?   r"   r'   r   r   r8   r8   6   sc         I----   + + + +     r   r8   c                  >    e Zd ZdZdZdZdZdRdZdSd	Ze	dTd            Z
dUdZdV fdZdWdZdXdZedYd            ZdZd!ZdZd"Zd[d%ZdUd&ZdUd'Zd\d(Zd]d*Zed]d+            Zd^d-Zd_d/Zd`d9Zdad:Zdbd@ZdcdBZdddCZdedHZ dfdIZ!dgdKZ"dLdMdhdPZ#didQZ$ xZ%S )jr   r   z  Fr   r   c                    t           r   )AssertionErrorr!   s    r   __copy__zSymbol.__copy__L   s    r   memor   c                D    | j         rt          t          d d d d d           S r   )parentrM   r   )r   rO   s     r   __deepcopy__zSymbol.__deepcopy__O   s(    ; 	!  dD$d333r   argsr   c                     t           j        t           j        z  }|d                    d | D                       z  }t                              |           d S )N c              3  4   K   | ]}t          |          V  d S r   )r   )rD   es     r   rF   z%Symbol.debug_print.<locals>.<genexpr>X   s(      ,,!s1vv,,,,,,r   )r   debug_indent_stringdebug_indentrI   loggerdebug)rS   msgs     r   debug_printzSymbol.debug_printU   sO    (6+>>rww,,t,,,,,,Sr   c                `    | j         s| j        rJ | j        rJ d S | j        r	| j        sJ d S d S r   )rQ   r   docnamer!   s    r   _assert_invariantszSymbol._assert_invariants[   sX    { 	$''''|##### $|###$ $##r   keyr   valuec                b    |dk    rt           t                                          ||          S )Nchildren)rM   super__setattr__)r   ra   rb   	__class__s      r   rf   zSymbol.__setattr__d   s.    *  ww""3...r   rQ   Symbol | Noner-   ASTIdentifier | Noner   ASTDeclaration | Noner_   
str | Noneline
int | Nonec                p   || _         d | _        d | _        || _        || _        || _        || _        d| _        |                                  i | _	        i | _
        t                      | _        | j         r| j                             |            | j        r| | j        _        |                                  d S )NF)rQ   siblingAbovesiblingBelowr-   r   r_   rl   isRedeclarationr`   _children_by_name_children_by_docnameset_anon_children
_add_childr   _add_function_params)r   rQ   r-   r   r_   rl   s         r   r   zSymbol.__init__i   s     +/+/
&	$!!! 57BD!+.55; 	)K""4((( 	+&*D# 	!!#####r   c                6    d|                      d          dS )Nz<Symbol r   )indent>)	to_stringr!   s    r   r?   zSymbol.__repr__   s!    7$...227777r   r.   c                4    | j                                         S r   )rr   valuesr!   s    r   	_childrenzSymbol._children   s    %,,...r   childc                    |j         j        }|| j        v rd S || j        |<   || j                            |j        i           |<   |j         j        r| j                            |           d S d S r   )	r-   namerr   rs   
setdefaultr_   is_anonymousru   add)r   r   r   s      r   rv   zSymbol._add_child   s    {4)))F',t$HM!,,U]B??E;# 	+##E*****	+ 	+r   c                   |j         j        }| j                            |d            | j                            |j                  x}r|                    |d            |j         j        r| j        	                    |           d S d S r   )
r-   r   rr   poprs   getr_   r   ru   discard)r   r   r   rd   s       r   _remove_childzSymbol._remove_child   s    {""4...044U]CCC8 	%LLt$$$;# 	/''.....	/ 	/r   r   intc                   |                                   | j        J | j        J | j        J |J |J |J || _        | | j        _        || _        || _        |                                   |                                  d S r   )r`   r   r_   rl   r   rw   )r   r   r_   rl   s       r   _fill_emptyzSymbol._fill_empty   s    !!!'''|###y   &&&"""&"&	!!!!!#####r   c                   t           j        r/t           xj        dz  c_        t                               d           | j        | j        j        || j        j        D ]o}|j        
|j        j        }|t          dd |          }|j	        rJ t          |j                  dk    sJ |                     ||| j        | j                   pt           j        rt           xj        dz  c_        d S d S )N   z_add_function_params:functionParam)r   debug_lookuprY   r]   r   function_paramsargr   r   rootedlennames_add_symbolsr_   rl   )r   pnndecls       r   rw   zSymbol._add_function_params   s    	81$6777 ( 0<%5 
E 
E5=UZ:%otQ??9$$$28}}))))!!"dDL$)DDDD 	%1$	% 	%r   c                Z    | j         r#| j                             |            d | _         d S d S r   )rQ   r   r!   s    r   removezSymbol.remove   s7    ; 	K%%d+++DKKK	 	r   c                   || j         vr!| j        D ]}|                    |           d S | j                             |          }|                                D ]j}d |_        d |_        d |_        |j        |j	        |j        _	        |j	        |j        |j	        _        d |_        d |_	        | 
                    |           kd S r   )rs   r~   	clear_docr   r}   r   r_   rl   ro   rp   r   )r   r_   r   rd   s       r   r   zSymbol.clear_doc   s    $333 ) )((((F&*&?&C&CG&L&L__&& 
	& 
	&E $E EMEJ!-272D"/!-272D"/!%E!%Eu%%%%
	& 
	&r   Iterator[Symbol]c              #  Z   K   | V  | j         D ]}|                                E d {V  d S r   )r~   get_all_symbols)r   s_childs     r   r   zSymbol.get_all_symbols   sQ      


~ 	1 	1G..0000000000	1 	1r   c              #  $   K   | j         E d {V  d S r   )r~   r!   s    r   rd   zSymbol.children   s&      >!!!!!!!!!r   r8   c                    g }| }|j         r#|                    |           |j         }|j         #d t          |          D             }t          |          S )Nc                `    g | ]+}|j         |j        d n|j                                        f,S r   )r-   r   get_newest_idrD   ss     r   
<listcomp>z)Symbol.get_lookup_key.<locals>.<listcomp>   sJ     
 
 
  Wam3dd9T9T9V9VW
 
 
r   )rQ   appendreversedr8   )r   r+   r   ra   s       r   get_lookup_keyzSymbol.get_lookup_key   ss    
 h 	NN1A h 	
 
 g&&
 
 

 ~~r   r   c                    g }| }|j         r#|                    |           |j         }|j         #|                                 d |D             }t          |d          S )Nc                    g | ]	}|j         
S r'   )r-   r   s     r   r   z/Symbol.get_full_nested_name.<locals>.<listcomp>  s    ***Q***r   F)r   )rQ   r   reverser   )r   r+   r   r   s       r   get_full_nested_namezSymbol.get_full_nested_name   ss    h 	NN1A h 	 	**'***U51111r   nested_nameon_missing_qualified_symbol0Callable[[Symbol, ASTIdentifier], Symbol | None]ancestor_lookup_type
match_selfboolrecurse_in_anonsearch_in_siblingsSymbolLookupResult | Nonec                Z   t           j        r!t           xj        dz  c_        t                               d           t           xj        dz  c_        t                               d           t                              |                     t           j        dz   d                     t                               d|           t                               d|           t                               d|           t                               d	|           t                               d
|           |j        }| }|j        r|j	        |j	        }|j	        |,|d         }	|j	        r|	j
        |j        v rn|j	        }|j	        t           j        rVt                               d           t                              |                    t           j        dz   d                     |d d         D ]T}
|
j
        }||j        v r|j        |         }n2 |||
          }|$t           j        rt           xj        dz  c_         d S |}Ut           j        rVt                               d           t                              |                    t           j        dz   d                     |d         }
|
j
        }|j                            |          }|s$|r"|j        D ]}||j        v r|j        |         } nt           j        rt           xj        dz  c_        |r|gng }t          |||
          S )Nr   z_symbol_lookup:zself:FaddEndNewlineznested_name:         zancestor_lookup_type:zmatch_self:          zrecurse_in_anon:     zsearch_in_siblings:  r   zstarting point:   zhandle last name from:)r   r   rY   r]   rZ   r[   r{   r   r   rQ   r   rr   r   ru   r)   )r   r   r   r   r   r   r   r   r,   
first_namer-   r   r   r   results                  r   _symbol_lookupzSymbol._symbol_lookup	  sV     
	L1$01111$w'''LL(;a(?uUUVVV6DDD68LMMM6
CCC6HHH68JKKK!  	5&2 - 4  &2  +qJ& 5?m&EEE - 4  & 5
  	0111LL''(;a(?u'UU  
 3B3Z 
	# 
	#E:D}666&8>44]EJJ>* 1++q0++44"MM 	7888LL''(;a(?u'UU  
 b	z044T:: 	/ 	&5  5222"4T:FE 3  	%1$#+&!&-???r   c                
   t           j        rt           xj        dz  c_        t                               d           t           xj        dz  c_        t                               d|           t                               d           t                               d d            d&d}|                     ||d ddd          J t          j                  }t          |          dk    rt           j        rt                               d           t           xj        dz  c_        t                               dj                   t                               d           t                               d d            t           xj        dz  c_        t          j	        j                  }t           j        rt           xj        dz  c_        |S t           j        rlt                               d           t           xj        dz  c_        t                               dt          |                     t           xj        dz  c_        sCt           j        r/t                               d           t           xj        dz  c_        |d         S g }g }	g }
|D ]Q}|j
        |                    |           |j        r|
                    |           <|	                    |           Rt           j        rxt                               dt          |                     t                               dt          |	                     t                               dt          |
                     d'fd}t          |	          dk    rd }n |            }d(fd }j        d!k    r't          |	          dk    sJ  ||	d         |                                           }t           j        rt                               d"|           |	D ]T}|j
                                        }t           j        rt                               d#|           ||k    r |||           Ut          |          dk    rLt           j        r2t                               d$|d u           t           xj        dz  c_        ||S  |            S t           j        r2t                               d%|d u           t           xj        dz  c_        ||                                 |d         }|                               |S ))Nr   z_add_symbols:z
nn:       z
decl:     z
location: :r,   r   r-   r   r   c                *   t           j        rtt           xj        dz  c_        t                               d           t           xj        dz  c_        t                               d|           t           xj        dz  c_        t          | |d d d           S )Nr   z*_add_symbols, on_missing_qualified_symbol:zident: r   rQ   r-   r   r_   rl   )r   r   rY   r]   r,   r-   s     r   r   z8Symbol._add_symbols.<locals>.on_missing_qualified_symboll  s     " )##q(##""#OPPP##q(##""9e444##q(##$    r   F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#no_decl:  z#with_decl:z#dup_decl: c                     t           j        rt                               d           t          j        j                  } t           j        rt                               d           | S )Nz begin: creating candidate symbolr   z end:   creating candidate symbol)r   r   r]   r,   r-   )r   r   r_   rl   lookup_results    r   make_cand_symbolz-Symbol._add_symbols.<locals>.make_cand_symbol  su    " G""#EFFF$2#)'  F " G""#EFFFMr   r   cand_symbolr   c                    t           j        rYt           xj        dz  c_        t                               d           t           xj        dz  c_        t           xj        dz  c_        d|_        t          |           )Nr   redeclarationr   T)r   r   rY   r]   rq   r   )r   r   r   s     r   handle_duplicate_declarationz9Symbol._add_symbols.<locals>.handle_duplicate_declaration  sz     & -''1,''&&777''1,''''1,''
 /3++FK@@@r   functionzcand_id:zold_id: z-no match, no empty, cand_sybmol is not None?:zBno match, but fill an empty declaration, cand_sybmol is not None?:)r,   r   r-   r   r   r   r3   )r   r   r   r   r   r   )r   r   rY   r]   r   listr+   r   r-   r,   r   r   rq   
objectTyper   r   r   )r   r   r   r_   rl   r   r+   r   no_decl	with_decldup_declr   r   r   r   cand_idold_idr   s     ```            @r   r   zSymbol._add_symbolsY  s     	>1$///1$|[999|[999<G<<d<<===	 	 	 	" ++'!%!$ , 
 
 (((},--w<<1" )""#EFFF##q(##""?M4GHHH""?K@@@""#C7#C#CT#C#CDDD##q(##$2#)'  F " )##q(##M 	%?@@@1$0#g,,???1$ 	" )""#3444##q(## 1:	 	$ 	$A}$q!!!!" $""""  #### 	=}c'll;;;}c)nn===}c(mm<<<	 	 	 	 	 	 	 	 	 y>>QKK**,,KA A A A A A %339~~****,,Yq\;GGG "//11G" 8"":w777# F F+99;;& ;&&z6:::f$$00EEE w<<1" )""Ct+   ##q(##&""'')))" )""Xt+   ##q(##&""$$$ QZF {GT:::Mr   otherdocnames	list[str]envr   c                    t           j        r/t           xj        dz  c_        t                               d           |J |j        D ]"}|j        j        }|| j        vr1| |_        | 	                    |           |
                                 I| j        |         }|j        r|j        |v r|j        s'|                    |j        |j        |j                   nw|j        |j        k    rft          |j                  }t!          d          }t"                              ||j        |j        |j        j        ||j        |j        fdd           n	 |                    |||           $t           j        rt           xj        dz  c_        d S d S )Nr   zmerge_with:zNDuplicate C declaration, also defined at %s:%s.
Declaration is '.. c:%s:: %s'.duplicate_declarationc)locationtypesubtype)r   r   rY   r]   r~   r-   r   rr   rQ   rv   r`   r   r_   r   rl   r   r   rZ   warningdirectiveType
merge_with)	r   r   r   r   other_child
other_name	our_childr   r\   s	            r   r   zSymbol.merge_with  s     	.1$}---    ? #	= #	=K$*/J!777%)",,,..000.z:I& ;+>(+J+J , ))#/1DkFV    &+*===y455D9 C NN!)!!-;"-"5{7G!H4 # # 	 	 	 	   h<<<< 	%1$	% 	%r   
nestedNamec                    t           j        r/t           xj        dz  c_        t                               d           |                     |d d d           }t           j        rt           xj        dz  c_        |S )Nr   z	add_name:)r   r_   rl   )r   r   rY   r]   r   )r   r   ress      r   add_namezSymbol.add_nameD  sv     	,1${+++
dQUVV 	%1$
r   c                   t           j        r/t           xj        dz  c_        t                               d           |J |J |J |j        }|                     ||||          }t           j        rt           xj        dz  c_        |S )Nr   zadd_declaration:)r   r   rY   r]   r   r   )r   r   r_   rl   r   r   s         r   add_declarationzSymbol.add_declarationM  s      	31$1222&&&"""!&['4HH 	%1$
r   r   	matchSelfrecurseInAnonsearchInSiblingsc                   t           j        rt           xj        dz  c_        t                               d           t           xj        dz  c_        t                               d|           t                               d|           t                               d|           t                               d|           t                              |                     t           j        dz   d                     t           xj        d	z  c_        | }|t           j        rt           xj        d	z  c_        t                               d
           t                              |                    t           j        dz   d                     t           xj        d	z  c_        |r|j        |k    r|S |j        }||j	        v r|j	        |         S |r"|j
        D ]}||j	        v r|j	        |         c S |sn	|j        }|d S )Nr   zfind_identifier:zident:           zmatchSelf:       zrecurseInAnon:   zsearchInSiblings:Fr   r   ztrying:)r   r   rY   r]   rZ   r[   r{   r-   r   rr   ru   ro   )r   r-   r   r   r   currentr   r   s           r   find_identifierzSymbol.find_identifier\  s     		%1$12221$2E:::2I>>>2MBBB24DEEELL(;a(?uUUVVV1$!" )##q(##""9---%%f&9A&=U%SS   ##q(## W]e33:Dw000066 =$3 = =Eu666$6t<<<< 7# *G' !( tr   c                   t           j        rDt           xj        dz  c_        t                               d           t           xj        dz  c_        | }|j        D ]\  }}|j                            |j                  }t           j        rt                               d|j                   t                               d|           |=t          	                    |
                    t           j        dz   d                     nt                               d           | nt           j        rt           xj        dz  c_        |S )	Nr   zdirect_lookup:zname:          zid:            Fr   z	not foundr   )r   r   rY   r]   r:   rr   r   r   rZ   r[   r{   )r   ra   r   r-   rE   s        r   direct_lookupzSymbol.direct_lookup  s;    	%1$/0001$( 	 	JE3#''
33A" 4""#4ejAAA""#4c:::=LLF$7!$;5QQ    &&{333y  	%1$r   typc                b   t           j        r/t           xj        dz  c_        t                               d           dd	}|                     |||||d
          }t           j        rt           xj        dz  c_        |d S t          |j                  }t          |          dk    rd S |d         S )Nr   zfind_declaration:r,   r   r-   r   r   rh   c                    d S r   r'   r   s     r   r   z<Symbol.find_declaration.<locals>.on_missing_qualified_symbol  s	     4r   Fr   r   )r,   r   r-   r   r   rh   )r   r   rY   r]   r   r   r+   r   )r   r   r   r   r   r   r   r+   s           r   find_declarationzSymbol.find_declaration  s      	41$2333	 	 	 	
 ++'!$ )$ , 
 
  	%1$ 4},--w<<14qzr   Tr   ry   r   c               V   t           j        |z  g}| j        s|                    d           n| j        r |                    | j        j                   n'|                    t          | j                             | j        rX|                    d           | j        r|                    d           |                    t          | j                             | j	        r|
                    d| j	        df           |r|                    d           d                    |          S )Nz::z: z!!duplicate!! z	(r>   
rU   )r   rX   rQ   r   r-   r   r   r   rq   r_   extendrI   )r   ry   r   r   s       r   r{   zSymbol.to_string  s%   )F23{ 	2JJtz 2

4:?++++

3t/00111 2

4   ' 1JJ/000

3t/00111< 	JJ   
  	JJtwws||r   c                |    d                     |                               gfd| j        D                       S )NrU   c              3  H   K   | ]}|                     d z             V  dS )r   N)r    )rD   r   ry   s     r   rF   zSymbol.dump.<locals>.<genexpr>  s3      99QaffVaZ  999999r   )rI   r{   r~   )r   ry   s    `r   r    zSymbol.dump  sK    wwNN6""
9999$.999
   	r   )r   r   )rO   r   r   r   )rS   r   r   r   )r   r   )ra   r   rb   r   r   r   )rQ   rh   r-   ri   r   rj   r_   rk   rl   rm   r   r   r#   )r   r.   )r   r   r   r   )r   r   r_   r   rl   r   r   r   )r_   r   r   r   )r   r   )r   r8   )r   r   )r   r   r   r   r   rk   r   r   r   r   r   r   r   r   )
r   r   r   rj   r_   rk   rl   rm   r   r   )r   r   r   r   r   r   r   r   )r   r   r   r   )r   r   r_   r   rl   r   r   r   )
r-   r   r   r   r   r   r   r   r   rh   )ra   r8   r   rh   )
r   r   r   r   r   r   r   r   r   rh   )ry   r   r   r   r   r   )ry   r   r   r   )&r$   r%   r&   rY   rX   r   debug_show_treerN   rR   staticmethodr]   r`   rf   r   r?   r6   r~   rv   r   r   rw   r   r   r   rd   r   r   r   r   r   r   r   r   r   r   r{   r    __classcell__)rg   s   @r   r   r   F   s       LLO   4 4 4 4    \
$ $ $ $/ / / / / /
$ $ $ $B8 8 8 8 / / / X/+ + + +/ / / /$ $ $ $ % % % %4   
& & & &&1 1 1 1
 " " " X"   "2 2 2 2N@ N@ N@ N@`y y y yv.% .% .% .%`      & & & &P   .   > ?C      0       r   r   N)
__future__r   typingr   sphinx.domains.c._astr   r   sphinx.localer   sphinx.utilr   collections.abcr	   r
   r   r   r   r   r   sphinx.environmentr   	getLoggerr$   rZ   	Exceptionr   r)   r8   r   r'   r   r   <module>r	     s   " " " " " "                                4FFFFFFFFFFFF              433333		8	$	$N N N N NI N N N" " " " " " " "&        P
 P
 P
 P
 P
 P
 P
 P
 P
 P
r   